[ARM] Enable arm target in ira-shrinkwrap-prep* testcases.
[gcc/] * config/arm/arm.c (arm_get_frame_offsets): If both r3 and other callee-saved registers are available for padding purpose and r3 is not mandatory, then prefer use those callee-saved instead of r3. [gcc/testsuite] * gcc.dg/ira-shrinkwrap-prep-1.c (target): Add arm_nothumb. * gcc.dg/ira-shrinkwrap-prep-2.c (target): Likewise. * gcc.dg/pr10474.c (target): Likewise. From-SVN: r212927
This commit is contained in:
parent
e9a8fc239e
commit
47e1e86f7b
|
@ -1,3 +1,10 @@
|
||||||
|
2014-07-23 Jiong Wang <jiong.wang@arm.com>
|
||||||
|
|
||||||
|
* config/arm/arm.c (arm_get_frame_offsets): If both r3 and other
|
||||||
|
callee-saved registers are available for padding purpose
|
||||||
|
and r3 is not mandatory, then prefer use those callee-saved
|
||||||
|
instead of r3.
|
||||||
|
|
||||||
2014-07-23 Richard Biener <rguenther@suse.de>
|
2014-07-23 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
* params.def (PARAM_MAX_COMBINE_INSNS): New.
|
* params.def (PARAM_MAX_COMBINE_INSNS): New.
|
||||||
|
|
|
@ -20832,30 +20832,47 @@ arm_get_frame_offsets (void)
|
||||||
{
|
{
|
||||||
int reg = -1;
|
int reg = -1;
|
||||||
|
|
||||||
|
/* Register r3 is caller-saved. Normally it does not need to be
|
||||||
|
saved on entry by the prologue. However if we choose to save
|
||||||
|
it for padding then we may confuse the compiler into thinking
|
||||||
|
a prologue sequence is required when in fact it is not. This
|
||||||
|
will occur when shrink-wrapping if r3 is used as a scratch
|
||||||
|
register and there are no other callee-saved writes.
|
||||||
|
|
||||||
|
This situation can be avoided when other callee-saved registers
|
||||||
|
are available and r3 is not mandatory if we choose a callee-saved
|
||||||
|
register for padding. */
|
||||||
|
bool prefer_callee_reg_p = false;
|
||||||
|
|
||||||
/* If it is safe to use r3, then do so. This sometimes
|
/* If it is safe to use r3, then do so. This sometimes
|
||||||
generates better code on Thumb-2 by avoiding the need to
|
generates better code on Thumb-2 by avoiding the need to
|
||||||
use 32-bit push/pop instructions. */
|
use 32-bit push/pop instructions. */
|
||||||
if (! any_sibcall_could_use_r3 ()
|
if (! any_sibcall_could_use_r3 ()
|
||||||
&& arm_size_return_regs () <= 12
|
&& arm_size_return_regs () <= 12
|
||||||
&& (offsets->saved_regs_mask & (1 << 3)) == 0
|
&& (offsets->saved_regs_mask & (1 << 3)) == 0
|
||||||
&& (TARGET_THUMB2
|
&& (TARGET_THUMB2
|
||||||
|| !(TARGET_LDRD && current_tune->prefer_ldrd_strd)))
|
|| !(TARGET_LDRD && current_tune->prefer_ldrd_strd)))
|
||||||
{
|
{
|
||||||
reg = 3;
|
reg = 3;
|
||||||
|
if (!(TARGET_LDRD && current_tune->prefer_ldrd_strd))
|
||||||
|
prefer_callee_reg_p = true;
|
||||||
|
}
|
||||||
|
if (reg == -1
|
||||||
|
|| prefer_callee_reg_p)
|
||||||
|
{
|
||||||
|
for (i = 4; i <= (TARGET_THUMB1 ? LAST_LO_REGNUM : 11); i++)
|
||||||
|
{
|
||||||
|
/* Avoid fixed registers; they may be changed at
|
||||||
|
arbitrary times so it's unsafe to restore them
|
||||||
|
during the epilogue. */
|
||||||
|
if (!fixed_regs[i]
|
||||||
|
&& (offsets->saved_regs_mask & (1 << i)) == 0)
|
||||||
|
{
|
||||||
|
reg = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
for (i = 4; i <= (TARGET_THUMB1 ? LAST_LO_REGNUM : 11); i++)
|
|
||||||
{
|
|
||||||
/* Avoid fixed registers; they may be changed at
|
|
||||||
arbitrary times so it's unsafe to restore them
|
|
||||||
during the epilogue. */
|
|
||||||
if (!fixed_regs[i]
|
|
||||||
&& (offsets->saved_regs_mask & (1 << i)) == 0)
|
|
||||||
{
|
|
||||||
reg = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (reg != -1)
|
if (reg != -1)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2014-07-23 Jiong Wang <jiong.wang@arm.com>
|
||||||
|
|
||||||
|
* gcc.dg/ira-shrinkwrap-prep-1.c (target): Add arm_nothumb.
|
||||||
|
* gcc.dg/ira-shrinkwrap-prep-2.c (target): Likewise.
|
||||||
|
* gcc.dg/pr10474.c (target): Likewise.
|
||||||
|
|
||||||
2014-07-22 Martin Jambor <mjambor@suse.cz>
|
2014-07-22 Martin Jambor <mjambor@suse.cz>
|
||||||
|
|
||||||
PR ipa/61160
|
PR ipa/61160
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* { dg-do compile { target { { x86_64-*-* && lp64 } || { powerpc*-*-* && lp64 } } } } */
|
/* { dg-do compile { target { { x86_64-*-* && lp64 } || { { powerpc*-*-* && lp64 } || arm_nothumb } } } } */
|
||||||
/* { dg-options "-O3 -fdump-rtl-ira -fdump-rtl-pro_and_epilogue -fno-use-caller-save" } */
|
/* { dg-options "-O3 -fdump-rtl-ira -fdump-rtl-pro_and_epilogue -fno-use-caller-save" } */
|
||||||
|
|
||||||
long __attribute__((noinline, noclone))
|
long __attribute__((noinline, noclone))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* { dg-do compile { target { { x86_64-*-* && lp64 } || { powerpc*-*-* && lp64 } } } } */
|
/* { dg-do compile { target { { x86_64-*-* && lp64 } || { { powerpc*-*-* && lp64 } || arm_nothumb } } } } */
|
||||||
/* { dg-options "-O3 -fdump-rtl-ira -fdump-rtl-pro_and_epilogue -fno-use-caller-save" } */
|
/* { dg-options "-O3 -fdump-rtl-ira -fdump-rtl-pro_and_epilogue -fno-use-caller-save" } */
|
||||||
|
|
||||||
long __attribute__((noinline, noclone))
|
long __attribute__((noinline, noclone))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* { dg-do compile { target { { x86_64-*-* && lp64 } || { powerpc*-*-* && lp64 } } } } */
|
/* { dg-do compile { target { { x86_64-*-* && lp64 } || { { powerpc*-*-* && lp64 } || arm_nothumb } } } } */
|
||||||
/* { dg-options "-O3 -fdump-rtl-pro_and_epilogue" } */
|
/* { dg-options "-O3 -fdump-rtl-pro_and_epilogue" } */
|
||||||
|
|
||||||
void f(int *i)
|
void f(int *i)
|
||||||
|
|
Loading…
Reference in New Issue