Successfully identified regression in *gcc* in CI configuration 
tcwg_bmk_gnu_tx1/gnu-release-aarch64-spec2k6-O2.  So far, this commit has 
regressed CI configurations:
 - tcwg_bmk_gnu_tx1/gnu-release-aarch64-spec2k6-O2

Culprit:
<cut>
commit a4dfaad2e5594d871fe00a1116005e28f95d644e
Author: Richard Sandiford <richard.sandif...@arm.com>
Date:   Mon Sep 30 16:20:44 2019 +0000

    Remove global call sets: gcse.c
    
    This is another case in which we can conservatively treat partial
    kills as full kills.  Again this is in principle a bug fix for
    TARGET_HARD_REGNO_CALL_PART_CLOBBERED targets, but in practice
    it probably doesn't make a difference.
    
    2019-09-30  Richard Sandiford  <richard.sandif...@arm.com>
    
    gcc/
            * gcse.c: Include function-abi.h.
            (compute_hash_table_work): Use insn_callee_abi to get the ABI of
            the call insn target.  Invalidate partially call-clobbered
            registers as well as fully call-clobbered ones.
    
    From-SVN: r276323
</cut>

Results regressed to (for first_bad == a4dfaad2e5594d871fe00a1116005e28f95d644e)
# 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
# true:
0
# benchmark -O2 -- 
artifacts/build-a4dfaad2e5594d871fe00a1116005e28f95d644e/results_id:
1
# 447.dealII,[.] _ZNK12SparseMatrixIdE5vmultI6VectorIdES3_EEvRT regressed by 112

from (for last_good == c1b582720a39c3cb944aaff0298f721cdd034e3f)
# 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
# true:
0
# benchmark -O2 -- 
artifacts/build-c1b582720a39c3cb944aaff0298f721cdd034e3f/results_id:
1

Artifacts of last_good build: 
https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-aarch64-spec2k6-O2/15/artifact/artifacts/build-c1b582720a39c3cb944aaff0298f721cdd034e3f/
Results ID of last_good: 
tx1_64/tcwg_bmk_gnu_tx1/bisect-gnu-release-aarch64-spec2k6-O2/1425
Artifacts of first_bad build: 
https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-aarch64-spec2k6-O2/15/artifact/artifacts/build-a4dfaad2e5594d871fe00a1116005e28f95d644e/
Results ID of first_bad: 
tx1_64/tcwg_bmk_gnu_tx1/bisect-gnu-release-aarch64-spec2k6-O2/1421
Build top page/logs: 
https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-aarch64-spec2k6-O2/15/

Configuration details:


Reproduce builds:
<cut>
mkdir investigate-gcc-a4dfaad2e5594d871fe00a1116005e28f95d644e
cd investigate-gcc-a4dfaad2e5594d871fe00a1116005e28f95d644e

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_gnu-bisect-tcwg_bmk_tx1-gnu-release-aarch64-spec2k6-O2/15/artifact/artifacts/manifests/build-baseline.sh
 --fail
curl -o artifacts/manifests/build-parameters.sh 
https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-aarch64-spec2k6-O2/15/artifact/artifacts/manifests/build-parameters.sh
 --fail
curl -o artifacts/test.sh 
https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-aarch64-spec2k6-O2/15/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

cd gcc

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

# Reproduce last_good build
git checkout --detach c1b582720a39c3cb944aaff0298f721cdd034e3f
../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_gnu_tx1/gnu-release-aarch64-spec2k6-O2

Artifacts: 
https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-aarch64-spec2k6-O2/15/artifact/artifacts/
Build log: 
https://ci.linaro.org/job/tcwg_bmk_ci_gnu-bisect-tcwg_bmk_tx1-gnu-release-aarch64-spec2k6-O2/15/consoleText

Full commit (up to 1000 lines):
<cut>
commit a4dfaad2e5594d871fe00a1116005e28f95d644e
Author: Richard Sandiford <richard.sandif...@arm.com>
Date:   Mon Sep 30 16:20:44 2019 +0000

    Remove global call sets: gcse.c
    
    This is another case in which we can conservatively treat partial
    kills as full kills.  Again this is in principle a bug fix for
    TARGET_HARD_REGNO_CALL_PART_CLOBBERED targets, but in practice
    it probably doesn't make a difference.
    
    2019-09-30  Richard Sandiford  <richard.sandif...@arm.com>
    
    gcc/
            * gcse.c: Include function-abi.h.
            (compute_hash_table_work): Use insn_callee_abi to get the ABI of
            the call insn target.  Invalidate partially call-clobbered
            registers as well as fully call-clobbered ones.
    
    From-SVN: r276323
---
 gcc/ChangeLog |  7 +++++++
 gcc/gcse.c    | 10 ++++++++--
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9d8b083d539..1b1c31cf009 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2019-09-30  Richard Sandiford  <richard.sandif...@arm.com>
+
+       * gcse.c: Include function-abi.h.
+       (compute_hash_table_work): Use insn_callee_abi to get the ABI of
+       the call insn target.  Invalidate partially call-clobbered
+       registers as well as fully call-clobbered ones.
+
 2019-09-30  Richard Sandiford  <richard.sandif...@arm.com>
 
        * function.c (aggregate_value_p): Work out which ABI the
diff --git a/gcc/gcse.c b/gcc/gcse.c
index 9bde8619b7b..aeb59c645e1 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -160,6 +160,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "dbgcnt.h"
 #include "gcse.h"
 #include "gcse-common.h"
+#include "function-abi.h"
 
 /* We support GCSE via Partial Redundancy Elimination.  PRE optimizations
    are a superset of those done by classic GCSE.
@@ -1528,8 +1529,13 @@ compute_hash_table_work (struct gcse_hash_table_d *table)
          if (CALL_P (insn))
            {
              hard_reg_set_iterator hrsi;
-             EXECUTE_IF_SET_IN_HARD_REG_SET (regs_invalidated_by_call,
-                                             0, regno, hrsi)
+
+             /* We don't track modes of hard registers, so we need
+                to be conservative and assume that partial kills
+                are full kills.  */
+             HARD_REG_SET callee_clobbers
+               = insn_callee_abi (insn).full_and_partial_reg_clobbers ();
+             EXECUTE_IF_SET_IN_HARD_REG_SET (callee_clobbers, 0, regno, hrsi)
                record_last_reg_set_info (insn, regno);
 
              if (! RTL_CONST_OR_PURE_CALL_P (insn)
</cut>
_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to