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

Culprit:
<cut>
commit dae7adda949993bd96aa50c551dc64ddebba7923
Author: Matt Jacobson <mhjacob...@me.com>
Date:   Fri Aug 6 10:12:00 2021 +0800

    [AVR][clang] Pass '-fno-use-init-array' to cc1 as default
    
    On AVR, '.ctors' is used, not '.init_array'. Make this the default
    unless specifically overridden by driver argument.
    
    This matches gcc, and it matches the behavior in (e.g.) the NetBSD
    driver (for certain OS variants).
    
    Reviewed by: MaskRay
    
    Differential Revision: https://reviews.llvm.org/D107610
</cut>

Results regressed to (for first_bad == dae7adda949993bd96aa50c551dc64ddebba7923)
# 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 
artifacts/build-dae7adda949993bd96aa50c551dc64ddebba7923/results_id:
1
# 400.perlbench,perlbench_base.default                          regressed by 
94393
# 453.povray,povray_base.default                                regressed by 102
# 470.lbm,lbm_base.default                                      regressed by 103
# 470.lbm,[.] LBM_performStreamCollide                          regressed by 118

from (for last_good == 66b1e629d89543cb7542c184f7dfb32deee732e1)
# 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 
artifacts/build-66b1e629d89543cb7542c184f7dfb32deee732e1/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/4/artifact/artifacts/build-66b1e629d89543cb7542c184f7dfb32deee732e1/
Results ID of last_good: 
apm_64/tcwg_bmk_llvm_apm/bisect-llvm-master-aarch64-spec2k6-Os/3855
Artifacts of first_bad build: 
https://ci.linaro.org/job/tcwg_bmk_ci_llvm-bisect-tcwg_bmk_apm-llvm-master-aarch64-spec2k6-Os/4/artifact/artifacts/build-dae7adda949993bd96aa50c551dc64ddebba7923/
Results ID of first_bad: 
apm_64/tcwg_bmk_llvm_apm/bisect-llvm-master-aarch64-spec2k6-Os/3852
Build top page/logs: 
https://ci.linaro.org/job/tcwg_bmk_ci_llvm-bisect-tcwg_bmk_apm-llvm-master-aarch64-spec2k6-Os/4/

Configuration details:


Reproduce builds:
<cut>
mkdir investigate-llvm-dae7adda949993bd96aa50c551dc64ddebba7923
cd investigate-llvm-dae7adda949993bd96aa50c551dc64ddebba7923

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/4/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/4/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/4/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 dae7adda949993bd96aa50c551dc64ddebba7923
../artifacts/test.sh

# Reproduce last_good build
git checkout --detach 66b1e629d89543cb7542c184f7dfb32deee732e1
../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

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

Full commit (up to 1000 lines):
<cut>
commit dae7adda949993bd96aa50c551dc64ddebba7923
Author: Matt Jacobson <mhjacob...@me.com>
Date:   Fri Aug 6 10:12:00 2021 +0800

    [AVR][clang] Pass '-fno-use-init-array' to cc1 as default
    
    On AVR, '.ctors' is used, not '.init_array'. Make this the default
    unless specifically overridden by driver argument.
    
    This matches gcc, and it matches the behavior in (e.g.) the NetBSD
    driver (for certain OS variants).
    
    Reviewed by: MaskRay
    
    Differential Revision: https://reviews.llvm.org/D107610
---
 clang/lib/Driver/ToolChains/AVR.cpp | 10 ++++++++++
 clang/lib/Driver/ToolChains/AVR.h   |  7 ++++++-
 clang/test/Driver/avr-toolchain.c   |  2 +-
 3 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AVR.cpp 
b/clang/lib/Driver/ToolChains/AVR.cpp
index 5b097f9b2ed9..18c6f41e22b1 100644
--- a/clang/lib/Driver/ToolChains/AVR.cpp
+++ b/clang/lib/Driver/ToolChains/AVR.cpp
@@ -370,6 +370,16 @@ void AVRToolChain::AddClangSystemIncludeArgs(const ArgList 
&DriverArgs,
     addSystemInclude(DriverArgs, CC1Args, AVRInc);
 }
 
+void AVRToolChain::addClangTargetOptions(
+    const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args,
+    Action::OffloadKind DeviceOffloadKind) const {
+  // By default, use `.ctors` (not `.init_array`), as required by libgcc, which
+  // runs constructors/destructors on AVR.
+  if (!DriverArgs.hasFlag(options::OPT_fuse_init_array,
+                          options::OPT_fno_use_init_array, false))
+    CC1Args.push_back("-fno-use-init-array");
+}
+
 Tool *AVRToolChain::buildLinker() const {
   return new tools::AVR::Linker(getTriple(), *this, LinkStdlib);
 }
diff --git a/clang/lib/Driver/ToolChains/AVR.h 
b/clang/lib/Driver/ToolChains/AVR.h
index f612aa691182..2d027957ed76 100644
--- a/clang/lib/Driver/ToolChains/AVR.h
+++ b/clang/lib/Driver/ToolChains/AVR.h
@@ -11,8 +11,8 @@
 
 #include "Gnu.h"
 #include "clang/Driver/InputInfo.h"
-#include "clang/Driver/ToolChain.h"
 #include "clang/Driver/Tool.h"
+#include "clang/Driver/ToolChain.h"
 
 namespace clang {
 namespace driver {
@@ -26,6 +26,11 @@ public:
   AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
                             llvm::opt::ArgStringList &CC1Args) const override;
 
+  void
+  addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
+                        llvm::opt::ArgStringList &CC1Args,
+                        Action::OffloadKind DeviceOffloadKind) const override;
+
 protected:
   Tool *buildLinker() const override;
 
diff --git a/clang/test/Driver/avr-toolchain.c 
b/clang/test/Driver/avr-toolchain.c
index 692063dc2c34..877f650a3d02 100644
--- a/clang/test/Driver/avr-toolchain.c
+++ b/clang/test/Driver/avr-toolchain.c
@@ -1,7 +1,7 @@
 // A basic clang -cc1 command-line.
 
 // RUN: %clang %s -### -no-canonical-prefixes -target avr 2>&1 | FileCheck 
-check-prefix=CC1 %s
-// CC1: clang{{.*}} "-cc1" "-triple" "avr"
+// CC1: clang{{.*}} "-cc1" "-triple" "avr" {{.*}} "-fno-use-init-array"
 
 // RUN: %clang %s -### -no-canonical-prefixes -target avr --sysroot 
%S/Inputs/basic_avr_tree 2>&1 | FileCheck -check-prefix CC1A %s
 // CC1A: clang{{.*}} "-cc1" "-triple" "avr" {{.*}} "-internal-isystem" 
{{".*avr/include"}}
</cut>
_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to