[clang] [clang][FatLTO][UnifiedLTO] Pass -enable-matrix to the LTO driver (PR #77829)
Matthew Voss via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 11 16:53:07 PST 2024
https://github.com/ormris updated https://github.com/llvm/llvm-project/pull/77829
>From f626b1f4ca2a6fd2b6c5eea3b53c15c4502d29fa Mon Sep 17 00:00:00 2001
From: Matthew Voss <matthew.voss at sony.com>
Date: Thu, 11 Jan 2024 12:18:03 -0800
Subject: [PATCH] [clang][FatLTO][UnifiedLTO] Pass -enable-matrix to the LTO
driver
Unified LTO and Fat LTO do not use the regular LTO prelink pipeline when
-flto/-flto=full is specified on the command line, thus they require
LowerMatrixIntrinsicsPass to be run during the link stage. To enable
this, we pass -enable-matrix to the LTO driver, replicating ThinLTO
behavior. This fix was applied to ThinLTO in https://reviews.llvm.org/D153583.
This fixes #77621.
---
clang/lib/Driver/ToolChains/CommonArgs.cpp | 7 +++++--
clang/test/Driver/matrix.c | 12 ++++++++++++
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 2340191ca97d98..385f66f3782bc1 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -736,6 +736,8 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args,
const bool IsAMDGCN = ToolChain.getTriple().isAMDGCN();
const char *Linker = Args.MakeArgString(ToolChain.GetLinkerPath());
const Driver &D = ToolChain.getDriver();
+ const bool IsFatLTO = Args.hasArg(options::OPT_ffat_lto_objects);
+ const bool IsUnifiedLTO = Args.hasArg(options::OPT_funified_lto);
if (llvm::sys::path::filename(Linker) != "ld.lld" &&
llvm::sys::path::stem(Linker) != "ld.lld" &&
!ToolChain.getTriple().isOSOpenBSD()) {
@@ -765,7 +767,7 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args,
} else {
// Tell LLD to find and use .llvm.lto section in regular relocatable object
// files
- if (Args.hasArg(options::OPT_ffat_lto_objects))
+ if (IsFatLTO)
CmdArgs.push_back("--fat-lto-objects");
}
@@ -825,7 +827,8 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args,
// Matrix intrinsic lowering happens at link time with ThinLTO. Enable
// LowerMatrixIntrinsicsPass, which is transitively called by
// buildThinLTODefaultPipeline under EnableMatrix.
- if (IsThinLTO && Args.hasArg(options::OPT_fenable_matrix))
+ if ((IsThinLTO || IsFatLTO || IsUnifiedLTO) &&
+ Args.hasArg(options::OPT_fenable_matrix))
CmdArgs.push_back(
Args.MakeArgString(Twine(PluginOptPrefix) + "-enable-matrix"));
diff --git a/clang/test/Driver/matrix.c b/clang/test/Driver/matrix.c
index 15b44ce5a4ec15..4d2624ad39c16e 100644
--- a/clang/test/Driver/matrix.c
+++ b/clang/test/Driver/matrix.c
@@ -6,3 +6,15 @@
// RUN: %clang -flto=thin -fenable-matrix %t.o -### --target=x86_64-unknown-linux 2>&1 \
// RUN: | FileCheck %s -check-prefix=CHECK-THINLTO-MATRIX
// CHECK-THINLTO-MATRIX: "-plugin-opt=-enable-matrix"
+
+// RUN: %clang -flto -ffat-lto-objects -fenable-matrix %t.o -### --target=x86_64-unknown-linux 2>&1 \
+// RUN: | FileCheck %s -check-prefix=CHECK-THINLTO-MATRIX
+
+// RUN: %clang -flto=thin -ffat-lto-objects -fenable-matrix %t.o -### --target=x86_64-unknown-linux 2>&1 \
+// RUN: | FileCheck %s -check-prefix=CHECK-THINLTO-MATRIX
+
+// RUN: %clang -flto -funified-lto -fenable-matrix %t.o -### --target=x86_64-unknown-linux 2>&1 \
+// RUN: | FileCheck %s -check-prefix=CHECK-THINLTO-MATRIX
+
+// RUN: %clang -flto=thin -funified-lto -fenable-matrix %t.o -### --target=x86_64-unknown-linux 2>&1 \
+// RUN: | FileCheck %s -check-prefix=CHECK-THINLTO-MATRIX
More information about the cfe-commits
mailing list