backport: re PR rtl-optimization/52804 (IRA/RELOAD allocate wrong register on ARM for cortex-m0)
Backport r187139 from mainline. 2012-05-04 Bin Cheng <bin.cheng@arm.com> PR rtl-optimization/52804 * reload1.c (reload_reg_reaches_end_p): Check whether successor reload with type RELOAD_FOR_INPUT_ADDRESS kills reload register of current one with type RELOAD_FOR_INPADDR_ADDRESS. Same stands for reloads with type RELOAD_FOR_OUTPUT_ADDRESS and RELOAD_FOR_OUTADDR_ADDRESS. From-SVN: r187496
This commit is contained in:
parent
eb6c1e0cb7
commit
4d4f41fab3
|
@ -1,3 +1,15 @@
|
|||
2012-05-15 Bin Cheng <bin.cheng@arm.com>
|
||||
|
||||
Backport r187139 from mainline.
|
||||
2012-05-04 Bin Cheng <bin.cheng@arm.com>
|
||||
|
||||
PR rtl-optimization/52804
|
||||
* reload1.c (reload_reg_reaches_end_p): Check whether successor
|
||||
reload with type RELOAD_FOR_INPUT_ADDRESS kills reload register
|
||||
of current one with type RELOAD_FOR_INPADDR_ADDRESS.
|
||||
Same stands for reloads with type RELOAD_FOR_OUTPUT_ADDRESS and
|
||||
RELOAD_FOR_OUTADDR_ADDRESS.
|
||||
|
||||
2012-05-14 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/46098
|
||||
|
|
|
@ -5423,6 +5423,13 @@ reload_reg_reaches_end_p (unsigned int regno, int reloadnum)
|
|||
if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
|
||||
return 0;
|
||||
|
||||
/* Reload register of reload with type RELOAD_FOR_INPADDR_ADDRESS
|
||||
could be killed if the register is also used by reload with type
|
||||
RELOAD_FOR_INPUT_ADDRESS, so check it. */
|
||||
if (type == RELOAD_FOR_INPADDR_ADDRESS
|
||||
&& TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[opnum], regno))
|
||||
return 0;
|
||||
|
||||
for (i = opnum + 1; i < reload_n_operands; i++)
|
||||
if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
|
||||
|| TEST_HARD_REG_BIT (reload_reg_used_in_inpaddr_addr[i], regno))
|
||||
|
@ -5497,6 +5504,13 @@ reload_reg_reaches_end_p (unsigned int regno, int reloadnum)
|
|||
|| TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno))
|
||||
return 0;
|
||||
|
||||
/* Reload register of reload with type RELOAD_FOR_OUTADDR_ADDRESS
|
||||
could be killed if the register is also used by reload with type
|
||||
RELOAD_FOR_OUTPUT_ADDRESS, so check it. */
|
||||
if (type == RELOAD_FOR_OUTADDR_ADDRESS
|
||||
&& TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[opnum], regno))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
|
||||
default:
|
||||
|
|
Loading…
Reference in New Issue