> > PR middle-end/105818 > > > > gcc/ChangeLog: > > > > * predict.cc (optimize_function_for_size_p): Further check > > optimize_size of fun->decl when it is valid but no cgraph node. > > > > gcc/testsuite/ChangeLog: > > > > * gcc.target/powerpc/pr105818.c: New test. > > * gcc.dg/guality/pr54693-2.c: Adjust for aarch64. > > diff --git a/gcc/testsuite/gcc.target/powerpc/pr105818.c > > b/gcc/testsuite/gcc.target/powerpc/pr105818.c > > new file mode 100644 > > index 00000000000..679647e189d > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/powerpc/pr105818.c > > @@ -0,0 +1,11 @@ > > +/* { dg-options "-Os -fno-tree-vectorize" } */ > > + > > +/* Verify there is no ICE. */ > > + > > +#pragma GCC optimize "-fno-tree-vectorize" > > + > > +void > > +foo (void) > > +{ > > + void bar (void); > > +} So the testcase starts with optimize_size set but then it switches to optimize_size==0 due to the GCC optimize pragma. I think this is behaviour Martin wants to change, so perhaps the testcase should be written with explicit -O2.
I also wonder what happen when you add the attribute later? /* { dg-options "-Os -fno-tree-vectorize" } */ /* Verify there is no ICE. */ #pragma GCC optimize "-fno-tree-vectorize" void foo (void) { void bar (void); } __attribute__ ((optimize("-fno-tree-vectorize"))) void foo (void); I think we should generally avoid doing decisions about size/speed optimizations so early since the setting may change due to attribtes or profile feedback... Honza