On Wed, Nov 15, 2023 at 12:11:50PM +0000, Richard Biener wrote: > The following avoids hoisting of invariants from conditionally > executed parts of an if-converted loop. That now makes a difference > since we perform bitfield lowering even when we do not actually > if-convert the loop. if-conversion deals with resetting flow-sensitive > info when necessary already. > > Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. > > PR tree-optimization/112282 > * tree-if-conv.cc (ifcvt_hoist_invariants): Only hoist from > the loop header. > > * gcc.dg/torture/pr112282.c: New testcase. > --- > gcc/testsuite/gcc.dg/torture/pr112282.c | 132 ++++++++++++++++++++++++ > gcc/tree-if-conv.cc | 44 ++++---- > 2 files changed, 153 insertions(+), 23 deletions(-) > create mode 100644 gcc/testsuite/gcc.dg/torture/pr112282.c > > diff --git a/gcc/testsuite/gcc.dg/torture/pr112282.c > b/gcc/testsuite/gcc.dg/torture/pr112282.c > new file mode 100644 > index 00000000000..23e0ed64b82 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/torture/pr112282.c > @@ -0,0 +1,132 @@ > +/* { dg-do run } */ > + > +int printf(const char *, ...); > +void __assert_fail();
This function is glibc-only. Thus the test fails on newlib targets with: FAIL: gcc.dg/torture/pr112282.c -O0 (test for excess errors) Excess errors: pr112282.c:(.text+0x1944): undefined reference to `__assert_fail' pr112282.c:(.text+0x2480): undefined reference to `__assert_fail' Perhaps __builtin_abort should be used instead? Regards, Dimitar