mirror of git://gcc.gnu.org/git/gcc.git
re PR rtl-optimization/52804 (IRA/RELOAD allocate wrong register on ARM for cortex-m0)
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: r187139
This commit is contained in:
parent
2445414102
commit
73292fcf29
|
@ -1,3 +1,12 @@
|
|||
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-04 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
PR c++/24985
|
||||
|
|
|
@ -5429,6 +5429,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))
|
||||
|
@ -5503,6 +5510,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