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