Message ID | 20210907091704.1034380-6-christophe.lyon@foss.st.com |
---|---|
State | New |
Headers | show |
Series | ARM/MVE use vectors of boolean for predicates | expand |
> -----Original Message----- > From: Gcc-patches <gcc-patches- > bounces+kyrylo.tkachov=arm.com@gcc.gnu.org> On Behalf Of Christophe > Lyon via Gcc-patches > Sent: 07 September 2021 10:17 > To: gcc-patches@gcc.gnu.org > Subject: [PATCH 05/13] arm: Add support for VPR_REG in > arm_class_likely_spilled_p > > VPR_REG is the only register in its class, so it should be handled by > TARGET_CLASS_LIKELY_SPILLED_P. No test fails without this patch, but > it seems it should be implemented. The documentation for the hook does recommend returning true when there is only one register in the class. So this seems sensible to me. It's supposed to affect optimisation rather than correctness so I'm in favour of it. Ok. Thanks, Kyrill > > 2021-09-01 Christophe Lyon <christophe.lyon@foss.st.com> > > gcc/ > * config/arm/arm.c (arm_class_likely_spilled_p): Handle VPR_REG. > > diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c > index 11dafc70067..1222cb0d0fe 100644 > --- a/gcc/config/arm/arm.c > +++ b/gcc/config/arm/arm.c > @@ -29307,6 +29307,9 @@ arm_class_likely_spilled_p (reg_class_t rclass) > || rclass == CC_REG) > return true; > > + if (TARGET_HAVE_MVE && (rclass == VPR_REG)) > + return true; > + > return false; > } > > -- > 2.25.1
Sorry for the very long delay in reviewing this. Things have been a bit hectic recently. Christophe Lyon via Gcc-patches <gcc-patches@gcc.gnu.org> writes: > VPR_REG is the only register in its class, so it should be handled by > TARGET_CLASS_LIKELY_SPILLED_P. No test fails without this patch, but > it seems it should be implemented. I think instead we should change the “return false” so that it calls the default implementation (default_class_likely_spilled_p). That should handle this case correctly, as well as any future single-register classes that we might add. Thanks, Richard > > 2021-09-01 Christophe Lyon <christophe.lyon@foss.st.com> > > gcc/ > * config/arm/arm.c (arm_class_likely_spilled_p): Handle VPR_REG. > > diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c > index 11dafc70067..1222cb0d0fe 100644 > --- a/gcc/config/arm/arm.c > +++ b/gcc/config/arm/arm.c > @@ -29307,6 +29307,9 @@ arm_class_likely_spilled_p (reg_class_t rclass) > || rclass == CC_REG) > return true; > > + if (TARGET_HAVE_MVE && (rclass == VPR_REG)) > + return true; > + > return false; > }
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 11dafc70067..1222cb0d0fe 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -29307,6 +29307,9 @@ arm_class_likely_spilled_p (reg_class_t rclass) || rclass == CC_REG) return true; + if (TARGET_HAVE_MVE && (rclass == VPR_REG)) + return true; + return false; }