Successfully identified regression in *llvm* in CI configuration 
tcwg_bmk_llvm_apm/llvm-master-aarch64-spec2k6-Os_LTO.  So far, this commit has 
regressed CI configurations:
 - tcwg_bmk_llvm_apm/llvm-master-aarch64-spec2k6-Os_LTO

Culprit:
<cut>
commit 0a241e90d4931a764109da70c2322a0a9386b1a7
Author: Roman Lebedev <lebedev...@gmail.com>
Date:   Sat Aug 7 15:59:21 2021 +0300

    [NFC][InstCombine] `vector_reduce_xor(?ext(<n x i1>))` --> 
`?ext(vector_reduce_add(<n x i1>))`
    
    Instead of expanding it ourselves,
    we can just forward to `?ext(vector_reduce_add(<n x i1>))`, as per alive2:
    https://alive2.llvm.org/ce/z/ymz7zE (self)
    https://alive2.llvm.org/ce/z/eKu2v2 (skipped zext)
    https://alive2.llvm.org/ce/z/c3BXgc (skipped sext)
</cut>

Results regressed to (for first_bad == 0a241e90d4931a764109da70c2322a0a9386b1a7)
# reset_artifacts:
-10
# build_abe binutils:
-9
# build_abe stage1 -- --set gcc_override_configure=--disable-libsanitizer:
-8
# build_abe linux:
-7
# build_abe glibc:
-6
# build_abe stage2 -- --set gcc_override_configure=--disable-libsanitizer:
-5
# build_llvm true:
-3
# true:
0
# benchmark -- -Os_LTO 
artifacts/build-0a241e90d4931a764109da70c2322a0a9386b1a7/results_id:
1
# 433.milc,milc_base.default                                    regressed by 102
# 453.povray,povray_base.default                                regressed by 102
# 470.lbm,lbm_base.default                                      regressed by 103

from (for last_good == c6ff867f92f67c6451ed1709f2af66211cb7b901)
# reset_artifacts:
-10
# build_abe binutils:
-9
# build_abe stage1 -- --set gcc_override_configure=--disable-libsanitizer:
-8
# build_abe linux:
-7
# build_abe glibc:
-6
# build_abe stage2 -- --set gcc_override_configure=--disable-libsanitizer:
-5
# build_llvm true:
-3
# true:
0
# benchmark -- -Os_LTO 
artifacts/build-c6ff867f92f67c6451ed1709f2af66211cb7b901/results_id:
1

Artifacts of last_good build: 
https://ci.linaro.org/job/tcwg_bmk_ci_llvm-bisect-tcwg_bmk_apm-llvm-master-aarch64-spec2k6-Os_LTO/5/artifact/artifacts/build-c6ff867f92f67c6451ed1709f2af66211cb7b901/
Results ID of last_good: 
apm_64/tcwg_bmk_llvm_apm/bisect-llvm-master-aarch64-spec2k6-Os_LTO/3523
Artifacts of first_bad build: 
https://ci.linaro.org/job/tcwg_bmk_ci_llvm-bisect-tcwg_bmk_apm-llvm-master-aarch64-spec2k6-Os_LTO/5/artifact/artifacts/build-0a241e90d4931a764109da70c2322a0a9386b1a7/
Results ID of first_bad: 
apm_64/tcwg_bmk_llvm_apm/bisect-llvm-master-aarch64-spec2k6-Os_LTO/3530
Build top page/logs: 
https://ci.linaro.org/job/tcwg_bmk_ci_llvm-bisect-tcwg_bmk_apm-llvm-master-aarch64-spec2k6-Os_LTO/5/

Configuration details:


Reproduce builds:
<cut>
mkdir investigate-llvm-0a241e90d4931a764109da70c2322a0a9386b1a7
cd investigate-llvm-0a241e90d4931a764109da70c2322a0a9386b1a7

git clone https://git.linaro.org/toolchain/jenkins-scripts

mkdir -p artifacts/manifests
curl -o artifacts/manifests/build-baseline.sh 
https://ci.linaro.org/job/tcwg_bmk_ci_llvm-bisect-tcwg_bmk_apm-llvm-master-aarch64-spec2k6-Os_LTO/5/artifact/artifacts/manifests/build-baseline.sh
 --fail
curl -o artifacts/manifests/build-parameters.sh 
https://ci.linaro.org/job/tcwg_bmk_ci_llvm-bisect-tcwg_bmk_apm-llvm-master-aarch64-spec2k6-Os_LTO/5/artifact/artifacts/manifests/build-parameters.sh
 --fail
curl -o artifacts/test.sh 
https://ci.linaro.org/job/tcwg_bmk_ci_llvm-bisect-tcwg_bmk_apm-llvm-master-aarch64-spec2k6-Os_LTO/5/artifact/artifacts/test.sh
 --fail
chmod +x artifacts/test.sh

# Reproduce the baseline build (build all pre-requisites)
./jenkins-scripts/tcwg_bmk-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 /llvm/ ./ ./bisect/baseline/

cd llvm

# Reproduce first_bad build
git checkout --detach 0a241e90d4931a764109da70c2322a0a9386b1a7
../artifacts/test.sh

# Reproduce last_good build
git checkout --detach c6ff867f92f67c6451ed1709f2af66211cb7b901
../artifacts/test.sh

cd ..
</cut>

History of pending regressions and results: 
https://git.linaro.org/toolchain/ci/base-artifacts.git/log/?h=linaro-local/ci/tcwg_bmk_llvm_apm/llvm-master-aarch64-spec2k6-Os_LTO

Artifacts: 
https://ci.linaro.org/job/tcwg_bmk_ci_llvm-bisect-tcwg_bmk_apm-llvm-master-aarch64-spec2k6-Os_LTO/5/artifact/artifacts/
Build log: 
https://ci.linaro.org/job/tcwg_bmk_ci_llvm-bisect-tcwg_bmk_apm-llvm-master-aarch64-spec2k6-Os_LTO/5/consoleText

Full commit (up to 1000 lines):
<cut>
commit 0a241e90d4931a764109da70c2322a0a9386b1a7
Author: Roman Lebedev <lebedev...@gmail.com>
Date:   Sat Aug 7 15:59:21 2021 +0300

    [NFC][InstCombine] `vector_reduce_xor(?ext(<n x i1>))` --> 
`?ext(vector_reduce_add(<n x i1>))`
    
    Instead of expanding it ourselves,
    we can just forward to `?ext(vector_reduce_add(<n x i1>))`, as per alive2:
    https://alive2.llvm.org/ce/z/ymz7zE (self)
    https://alive2.llvm.org/ce/z/eKu2v2 (skipped zext)
    https://alive2.llvm.org/ce/z/c3BXgc (skipped sext)
---
 llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp 
b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
index 2ba326d791c2..210652e23377 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
@@ -2038,20 +2038,17 @@ Instruction *InstCombinerImpl::visitCallInst(CallInst 
&CI) {
     if (IID == Intrinsic::vector_reduce_xor) {
       // Exclusive disjunction reduction over the vector with
       // (potentially-extended) i1 element type is actually a
-      // (potentially-extended) parity check:
+      // (potentially-extended) arithmetic `add` reduction over the original
+      // non-extended value:
       //   vector_reduce_xor(?ext(<n x i1>))
       //     -->
-      //   ?ext(trunc(vector_reduce_and(<n x i1>) to i1))
+      //   ?ext(vector_reduce_add(<n x i1>))
       Value *Arg = II->getArgOperand(0);
       Value *Vect;
       if (match(Arg, m_ZExtOrSExtOrSelf(m_Value(Vect)))) {
         if (auto *FTy = dyn_cast<FixedVectorType>(Vect->getType()))
           if (FTy->getElementType() == Builder.getInt1Ty()) {
-            Value *V = Builder.CreateBitCast(
-                Vect, Builder.getIntNTy(FTy->getNumElements()));
-            Value *Res = Builder.CreateUnaryIntrinsic(Intrinsic::ctpop, V);
-            Res = Builder.CreateTrunc(Res,
-                                      IntegerType::get(Res->getContext(), 1));
+            Value *Res = Builder.CreateAddReduce(Vect);
             if (Arg != Vect)
               Res = Builder.CreateCast(cast<CastInst>(Arg)->getOpcode(), Res,
                                        II->getType());
</cut>
_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to