[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