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>
|
2012-05-04 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||||
|
|
||||||
PR c++/24985
|
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))
|
if (TEST_HARD_REG_BIT (reload_reg_used_in_input[i], regno))
|
||||||
return 0;
|
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++)
|
for (i = opnum + 1; i < reload_n_operands; i++)
|
||||||
if (TEST_HARD_REG_BIT (reload_reg_used_in_input_addr[i], regno)
|
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))
|
|| 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))
|
|| TEST_HARD_REG_BIT (reload_reg_used_in_outaddr_addr[i], regno))
|
||||||
return 0;
|
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;
|
return 1;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue