On Tue, Jul 07, 2015 at 01:52:29PM +0100, Jiong Wang wrote: > > A second patch to improve rtl loop iv on AArch64. > > We should define this to tell gcc the pattern hidden by these GOT unspec > is safe from trap, so gcc could make more positive decision when > handling them, for example in RTL loop iv pass, when deciding whether > one instruction is invariant candidate, may_trap_or_fault_p will be > invoked which will call this target hook. > > OK for trunk? > > 2015-07-07 Jiong Wang <jiong.w...@arm.com> > > gcc/ > * config/aarch64/aarch64.c (aarch64_unspec_may_trap_p): New function. > (TARGET_UNSPEC_MAY_TRAP_P): Define as aarch64_unspec_may_trap_p.
OK. Thanks, James > > -- > Regards, > Jiong > > diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c > index e180daa..c7c12ee 100644 > --- a/gcc/config/aarch64/aarch64.c > +++ b/gcc/config/aarch64/aarch64.c > @@ -11943,6 +11943,24 @@ aarch64_use_pseudo_pic_reg (void) > return aarch64_cmodel == AARCH64_CMODEL_SMALL_SPIC; > } > > +/* Implement TARGET_UNSPEC_MAY_TRAP_P. */ > + > +static int > +aarch64_unspec_may_trap_p (const_rtx x, unsigned flags) > +{ > + switch (XINT (x, 1)) > + { > + case UNSPEC_GOTSMALLPIC: > + case UNSPEC_GOTSMALLPIC28K: > + case UNSPEC_GOTTINYPIC: > + return 0; > + default: > + break; > + } > + > + return default_unspec_may_trap_p (x, flags); > +} > + > #undef TARGET_ADDRESS_COST > #define TARGET_ADDRESS_COST aarch64_address_cost > > @@ -12221,6 +12239,9 @@ aarch64_use_pseudo_pic_reg (void) > #undef TARGET_SCHED_FUSION_PRIORITY > #define TARGET_SCHED_FUSION_PRIORITY aarch64_sched_fusion_priority > > +#undef TARGET_UNSPEC_MAY_TRAP_P > +#define TARGET_UNSPEC_MAY_TRAP_P aarch64_unspec_may_trap_p > + > #undef TARGET_USE_PSEUDO_PIC_REG > #define TARGET_USE_PSEUDO_PIC_REG aarch64_use_pseudo_pic_reg >