This has been fixed in trunk.

On Sun, Oct 3, 2021, 23:02 <ci_not...@linaro.org> wrote:

> [TCWG CI] Regression caused by gcc: [PR102546] X << Y being non-zero
> implies X is also non-zero.:
> commit 5f9ccf17de7f7581412c6bffd4a37beca9a79836
> Author: Aldy Hernandez <al...@redhat.com>
>
>     [PR102546] X << Y being non-zero implies X is also non-zero.
>
> Results regressed to
> # reset_artifacts:
> -10
> # build_abe binutils:
> -9
> # build_abe stage1:
> -5
> # build_abe qemu:
> -2
> # linux_n_obj:
> 18603
> # First few build errors in logs:
> # 00:01:53 arch/arm/vfp/vfpdouble.c:1206:1: internal compiler error: in
> upper_bound, at value-range.h:531
> # 00:01:53 arch/arm/vfp/vfpsingle.c:1246:1: internal compiler error: in
> upper_bound, at value-range.h:531
> # 00:01:53 make[2]: *** [scripts/Makefile.build:271:
> arch/arm/vfp/vfpdouble.o] Error 1
> # 00:01:54 make[2]: *** [scripts/Makefile.build:271:
> arch/arm/vfp/vfpsingle.o] Error 1
> # 00:01:55 make[1]: *** [scripts/Makefile.build:514: arch/arm/vfp] Error 2
> # 00:01:56 arch/arm/nwfpe/softfloat.c:3432:1: internal compiler error: in
> upper_bound, at value-range.h:531
> # 00:01:57 make[2]: *** [scripts/Makefile.build:271:
> arch/arm/nwfpe/softfloat.o] Error 1
> # 00:01:57 make[1]: *** [scripts/Makefile.build:514: arch/arm/nwfpe] Error
> 2
> # 00:02:14 arch/arm/kernel/smp.c:857:1: internal compiler error: in
> upper_bound, at value-range.h:531
> # 00:02:15 make[2]: *** [scripts/Makefile.build:271:
> arch/arm/kernel/smp.o] Error 1
>
> from
> # reset_artifacts:
> -10
> # build_abe binutils:
> -9
> # build_abe stage1:
> -5
> # build_abe qemu:
> -2
> # linux_n_obj:
> 19709
> # linux build successful:
> all
>
> THIS IS THE END OF INTERESTING STUFF.  BELOW ARE LINKS TO BUILDS,
> REPRODUCTION INSTRUCTIONS, AND THE RAW COMMIT.
>
> This commit has regressed these CI configurations:
>  - tcwg_kernel/gnu-master-arm-stable-allyesconfig
>
> First_bad build:
> https://ci.linaro.org/job/tcwg_kernel-gnu-bisect-gnu-master-arm-stable-allyesconfig/15/artifact/artifacts/build-5f9ccf17de7f7581412c6bffd4a37beca9a79836/
> Last_good build:
> https://ci.linaro.org/job/tcwg_kernel-gnu-bisect-gnu-master-arm-stable-allyesconfig/15/artifact/artifacts/build-257d2890a769a8aa564d079170377e637e07acb1/
> Baseline build:
> https://ci.linaro.org/job/tcwg_kernel-gnu-bisect-gnu-master-arm-stable-allyesconfig/15/artifact/artifacts/build-baseline/
> Even more details:
> https://ci.linaro.org/job/tcwg_kernel-gnu-bisect-gnu-master-arm-stable-allyesconfig/15/artifact/artifacts/
>
> Reproduce builds:
> <cut>
> mkdir investigate-gcc-5f9ccf17de7f7581412c6bffd4a37beca9a79836
> cd investigate-gcc-5f9ccf17de7f7581412c6bffd4a37beca9a79836
>
> # Fetch scripts
> git clone https://git.linaro.org/toolchain/jenkins-scripts
>
> # Fetch manifests and test.sh script
> mkdir -p artifacts/manifests
> curl -o artifacts/manifests/build-baseline.sh
> https://ci.linaro.org/job/tcwg_kernel-gnu-bisect-gnu-master-arm-stable-allyesconfig/15/artifact/artifacts/manifests/build-baseline.sh
> --fail
> curl -o artifacts/manifests/build-parameters.sh
> https://ci.linaro.org/job/tcwg_kernel-gnu-bisect-gnu-master-arm-stable-allyesconfig/15/artifact/artifacts/manifests/build-parameters.sh
> --fail
> curl -o artifacts/test.sh
> https://ci.linaro.org/job/tcwg_kernel-gnu-bisect-gnu-master-arm-stable-allyesconfig/15/artifact/artifacts/test.sh
> --fail
> chmod +x artifacts/test.sh
>
> # Reproduce the baseline build (build all pre-requisites)
> ./jenkins-scripts/tcwg_kernel-build.sh @@
> artifacts/manifests/build-baseline.sh
>
> # Save baseline build state (which is then restored in artifacts/test.sh)
> mkdir -p ./bisect
> rsync -a --del --delete-excluded --exclude /bisect/ --exclude /artifacts/
> --exclude /gcc/ ./ ./bisect/baseline/
>
> cd gcc
>
> # Reproduce first_bad build
> git checkout --detach 5f9ccf17de7f7581412c6bffd4a37beca9a79836
> ../artifacts/test.sh
>
> # Reproduce last_good build
> git checkout --detach 257d2890a769a8aa564d079170377e637e07acb1
> ../artifacts/test.sh
>
> cd ..
> </cut>
>
> Full commit (up to 1000 lines):
> <cut>
> commit 5f9ccf17de7f7581412c6bffd4a37beca9a79836
> Author: Aldy Hernandez <al...@redhat.com>
> Date:   Fri Oct 1 13:05:36 2021 +0200
>
>     [PR102546] X << Y being non-zero implies X is also non-zero.
>
>     This patch teaches this to range-ops.
>
>     Tested on x86-64 Linux.
>
>     gcc/ChangeLog:
>
>             PR tree-optimization/102546
>             * range-op.cc (operator_lshift::op1_range): Teach range-ops
> that
>             X << Y is non-zero implies X is also non-zero.
> ---
>  gcc/range-op.cc                          | 18 ++++++++++++++----
>  gcc/testsuite/gcc.dg/tree-ssa/pr102546.c | 23 +++++++++++++++++++++++
>  2 files changed, 37 insertions(+), 4 deletions(-)
>
> diff --git a/gcc/range-op.cc b/gcc/range-op.cc
> index 5e37133026d..2baca4a197f 100644
> --- a/gcc/range-op.cc
> +++ b/gcc/range-op.cc
> @@ -2078,6 +2078,12 @@ operator_lshift::op1_range (irange &r,
>                             relation_kind rel ATTRIBUTE_UNUSED) const
>  {
>    tree shift_amount;
> +
> +  if (!lhs.contains_p (build_zero_cst (type)))
> +    r.set_nonzero (type);
> +  else
> +    r.set_varying (type);
> +
>    if (op2.singleton_p (&shift_amount))
>      {
>        wide_int shift = wi::to_wide (shift_amount);
> @@ -2089,21 +2095,24 @@ operator_lshift::op1_range (irange &r,
>         return false;
>        if (shift == 0)
>         {
> -         r = lhs;
> +         r.intersect (lhs);
>           return true;
>         }
>
>        // Work completely in unsigned mode to start.
>        tree utype = type;
> +      int_range_max tmp_range;
>        if (TYPE_SIGN (type) == SIGNED)
>         {
>           int_range_max tmp = lhs;
>           utype = unsigned_type_for (type);
>           range_cast (tmp, utype);
> -         op_rshift.fold_range (r, utype, tmp, op2);
> +         op_rshift.fold_range (tmp_range, utype, tmp, op2);
>         }
>        else
> -       op_rshift.fold_range (r, utype, lhs, op2);
> +       op_rshift.fold_range (tmp_range, utype, lhs, op2);
> +
> +      r.intersect (tmp_range);
>
>        // Start with ranges which can produce the LHS by right shifting the
>        // result by the shift amount.
> @@ -2128,7 +2137,8 @@ operator_lshift::op1_range (irange &r,
>         range_cast (r, type);
>        return true;
>      }
> -  return false;
> +
> +  return !r.varying_p ();
>  }
>
>  bool
> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr102546.c
> b/gcc/testsuite/gcc.dg/tree-ssa/pr102546.c
> new file mode 100644
> index 00000000000..4bd98747732
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr102546.c
> @@ -0,0 +1,23 @@
> +// { dg-do compile }
> +// { dg-options "-O3 -fdump-tree-optimized" }
> +
> +static int a;
> +static char b, c, d;
> +void bar(void);
> +void foo(void);
> +
> +int main() {
> +    int f = 0;
> +    for (; f <= 5; f++) {
> +        bar();
> +        b = b && f;
> +        d = f << f;
> +        if (!(a >= d || f))
> +            foo();
> +        c = 1;
> +        for (; c; c = 0)
> +            ;
> +    }
> +}
> +
> +// { dg-final { scan-tree-dump-not "foo" "optimized" } }
> </cut>
_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to