[Bug middle-end/116065] [13/14/15 Regression] Function attribute optimize() might make ISA target attribute broken
rguenther at suse dot de
gcc-bugzilla@gcc.gnu.org
Thu Jul 25 12:09:12 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116065
--- Comment #8 from rguenther at suse dot de <rguenther at suse dot de> ---
On Thu, 25 Jul 2024, hongyuw at gcc dot gnu.org wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116065
>
> --- Comment #7 from Hongyu Wang <hongyuw at gcc dot gnu.org> ---
> (In reply to Andrew Pinski from comment #6)
> > (In reply to Andrew Pinski from comment #5)
> > > then if that is the case then aarch64 started with r14-6290-g9f0f7d802482a8
> > > (which added OPT_mearly_ra_ to aarch_option_optimization_table).
> > >
> > > What happens if you mark -munroll-only-small-loops as Optimization ?
> > > if that works, then aarch64 fix is to mark -mearly-ra= as Optimization too.
> >
> > Yes this fixes aarch64 testcase:
> > ```
> > diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
> > index 2f90f10352a..6229bcb371e 100644
> > --- a/gcc/config/aarch64/aarch64.opt
> > +++ b/gcc/config/aarch64/aarch64.opt
> > @@ -256,7 +256,7 @@ EnumValue
> > Enum(early_ra_scope) String(none) Value(AARCH64_EARLY_RA_NONE)
> >
> > mearly-ra=
> > -Target RejectNegative Joined Enum(early_ra_scope) Var(aarch64_early_ra)
> > Init(AARCH64_EARLY_RA_NONE) Save
> > +Target RejectNegative Joined Enum(early_ra_scope) Var(aarch64_early_ra)
> > Init(AARCH64_EARLY_RA_NONE) Optimization
> > Specify when to enable an early register allocation pass. The possibilities
> > are: all functions, functions that have access to strided multi-register
> > instructions, and no functions.
> >
> > ```
> >
> > So yes adding Optimization to -munroll-only-small-loops should fix that too.
>
> Confirmed, append Optimization fixed this issue in x86.
> I'm quite confused by how the unmarked Optimization seems resets the flags, the
> target attribute was overrided and the error reports like isa flag mismatched.
It's because the change in optimization level enables a target flag
and as the target doesn't allow a difference in that inlining fails.
When marked as 'Optimization' it's not considered a "target" flag.
More information about the Gcc-bugs
mailing list