llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-hexagon

Author: Brian Cain (androm3da)

<details>
<summary>Changes</summary>

The Hexagon driver's constructHexagonLinkArgs() was not calling 
addLTOOptions(). This meant that LTO plugin options weren't forwarded to the 
linker.

This caused a crash when using ThinLTO with -fenable-matrix on 
llvm-test-suite/SingleSource/UnitTests/matrix-types-spec.cpp: 
LowerMatrixIntrinsicsPass did not run in the LTO backend because -enable-matrix 
was not forwarded via -plugin-opt.

Add the addLTOOptions() call to both the musl and bare-metal code paths in 
constructHexagonLinkArgs().

---
Full diff: https://github.com/llvm/llvm-project/pull/191336.diff


3 Files Affected:

- (modified) clang/lib/Driver/ToolChains/Hexagon.cpp (+8) 
- (modified) clang/test/Driver/hexagon-toolchain-elf.c (+12) 
- (modified) clang/test/Driver/hexagon-toolchain-linux.c (+13) 


``````````diff
diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp 
b/clang/lib/Driver/ToolChains/Hexagon.cpp
index e5c90089f8cf0..801682eef57d3 100644
--- a/clang/lib/Driver/ToolChains/Hexagon.cpp
+++ b/clang/lib/Driver/ToolChains/Hexagon.cpp
@@ -358,6 +358,10 @@ constructHexagonLinkArgs(Compilation &C, const JobAction 
&JA,
                               options::OPT_t, options::OPT_u_Group});
     AddLinkerInputs(HTC, Inputs, Args, CmdArgs, JA);
 
+    if (D.isUsingLTO())
+      addLTOOptions(HTC, Args, CmdArgs, Output, Inputs,
+                    D.getLTOMode() == LTOK_Thin);
+
     ToolChain::UnwindLibType UNW = HTC.GetUnwindLibType(Args);
 
     if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
@@ -438,6 +442,10 @@ constructHexagonLinkArgs(Compilation &C, const JobAction 
&JA,
 
   AddLinkerInputs(HTC, Inputs, Args, CmdArgs, JA);
 
+  if (D.isUsingLTO())
+    addLTOOptions(HTC, Args, CmdArgs, Output, Inputs,
+                  D.getLTOMode() == LTOK_Thin);
+
   
//----------------------------------------------------------------------------
   // Libraries
   
//----------------------------------------------------------------------------
diff --git a/clang/test/Driver/hexagon-toolchain-elf.c 
b/clang/test/Driver/hexagon-toolchain-elf.c
index f2634559f75ea..16cfddedc12ca 100644
--- a/clang/test/Driver/hexagon-toolchain-elf.c
+++ b/clang/test/Driver/hexagon-toolchain-elf.c
@@ -598,3 +598,15 @@
 // RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \
 // RUN:   -mcpu=hexagonv60 %s 2>&1 | FileCheck -check-prefix=CHECK384 %s
 // CHECK384:          "-fno-use-init-array"
+// 
-----------------------------------------------------------------------------
+// ThinLTO passes LTO options to the linker
+// 
-----------------------------------------------------------------------------
+// RUN: touch %t.o
+// RUN: %clang -### --target=hexagon-unknown-elf \
+// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \
+// RUN:   -mcpu=hexagonv60 \
+// RUN:   -fuse-ld=lld \
+// RUN:   -flto=thin -fenable-matrix \
+// RUN:   %t.o 2>&1 | FileCheck -check-prefix=CHECK-LTO %s
+// CHECK-LTO: "-plugin-opt=thinlto"
+// CHECK-LTO: "-plugin-opt=-enable-matrix"
diff --git a/clang/test/Driver/hexagon-toolchain-linux.c 
b/clang/test/Driver/hexagon-toolchain-linux.c
index c1a59c1fc99b5..05d8b53ec1aad 100644
--- a/clang/test/Driver/hexagon-toolchain-linux.c
+++ b/clang/test/Driver/hexagon-toolchain-linux.c
@@ -213,3 +213,16 @@
 // RUN:   --sysroot=%S/Inputs/basic_linux_libcxx_tree %s 2>&1 | FileCheck 
-check-prefix=CHECK-NOSAN %s
 // CHECK-NOSAN-NOT: "-L{{.*}}{{/|\\\\}}msan"
 // CHECK-NOSAN-NOT: "-L{{.*}}{{/|\\\\}}asan"
+// 
-----------------------------------------------------------------------------
+// ThinLTO passes LTO options to the linker
+// 
-----------------------------------------------------------------------------
+// RUN: touch %t.o
+// RUN: %clang -### --target=hexagon-unknown-linux-musl \
+// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \
+// RUN:   -mcpu=hexagonv60 \
+// RUN:   -fuse-ld=lld \
+// RUN:   -flto=thin -fenable-matrix \
+// RUN:   --sysroot=%S/Inputs/basic_linux_libcxx_tree %t.o 2>&1 \
+// RUN:   | FileCheck -check-prefix=CHECK-LTO %s
+// CHECK-LTO: "-plugin-opt=thinlto"
+// CHECK-LTO: "-plugin-opt=-enable-matrix"

``````````

</details>


https://github.com/llvm/llvm-project/pull/191336
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to