[clang] [clang][Driver][RISCV] Honor -m[no-]global-merge for RISC-V (PR #79372)
Jonathon Penix via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 24 13:33:04 PST 2024
https://github.com/jonathonpenix created https://github.com/llvm/llvm-project/pull/79372
The GlobalMerge pass was enabled for RISC-V in [1] and left off by default. My understanding from [2] is that the concern around enabling the pass by default stemmed primarily from GlobalMerge preventing GP relaxation, which negatively impacted a few benchmarks.
However, as a) this pass provides code size benefits in some cases and b) this shouldn't be a concern for situations where GP relaxation is disabled anyway, we'd like to be able to manually enable/disable this functionality without having to specify -mllvm flags and in a way that is consistent with other targets (Arm/AArch64). So, leave the pass off by default still, but honor the -m[no]-global-merge flag for RISC-V.
[1] https://reviews.llvm.org/D130481
[2] https://reviews.llvm.org/D129178
>From 37cf78919afbfb6eb4e1bc36a3d8fbb678ffd821 Mon Sep 17 00:00:00 2001
From: Jonathon Penix <jpenix at quicinc.com>
Date: Tue, 23 Jan 2024 15:10:50 -0800
Subject: [PATCH] [clang][Driver][RISCV] Honor -m[no-]global-merge for RISC-V
The GlobalMerge pass was enabled for RISC-V in [1] and left off by
default. My understanding from [2] is that the concern around enabling
the pass by default stemmed primarily from GlobalMerge preventing GP
relaxation, which negatively impacted a few benchmarks.
However, as a) this pass provides code size benefits in some cases and b)
this shouldn't be a concern for situations where GP relaxation is disabled
anyway, we'd like to be able to manually enable/disable this functionality
without having to specify -mllvm flags and in a way that is consistent with
other targets (Arm/AArch64). So, leave the pass off by default still, but
honor the -m[no]-global-merge flag for RISC-V.
[1] https://reviews.llvm.org/D130481
[2] https://reviews.llvm.org/D129178
---
clang/lib/Driver/ToolChains/Clang.cpp | 10 ++++++++++
clang/test/Driver/mglobal-merge.c | 13 +++++++++++++
2 files changed, 23 insertions(+)
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index bcba7cbbdb58c29..08bbec5881cf7aa 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -2129,6 +2129,16 @@ void Clang::AddRISCVTargetArgs(const ArgList &Args,
<< A->getSpelling() << Val;
}
}
+
+ // Forward the -mglobal-merge option for explicit control over the pass.
+ if (Arg *A = Args.getLastArg(options::OPT_mglobal_merge,
+ options::OPT_mno_global_merge)) {
+ CmdArgs.push_back("-mllvm");
+ if (A->getOption().matches(options::OPT_mno_global_merge))
+ CmdArgs.push_back("-riscv-enable-global-merge=false");
+ else
+ CmdArgs.push_back("-riscv-enable-global-merge=true");
+ }
}
void Clang::AddSparcTargetArgs(const ArgList &Args,
diff --git a/clang/test/Driver/mglobal-merge.c b/clang/test/Driver/mglobal-merge.c
index 4ea7ae03e78f419..d825527536a861a 100644
--- a/clang/test/Driver/mglobal-merge.c
+++ b/clang/test/Driver/mglobal-merge.c
@@ -6,12 +6,17 @@
// RUN: -mno-global-merge
// RUN: FileCheck --check-prefix=CHECK-NGM-AARCH64 < %t %s
+// RUN: %clang -target riscv32-unknown-unknown -### -fsyntax-only %s 2> %t \
+// RUN: -mno-global-merge
+// RUN: FileCheck --check-prefix=CHECK-NGM-RISCV < %t %s
+
// RUN: %clang -target x86_64-unknown-unknown -### -fsyntax-only %s 2> %t \
// RUN: -mno-global-merge
// RUN: FileCheck --check-prefix=CHECK-NONE < %t %s
// CHECK-NGM-ARM: "-mllvm" "-arm-global-merge=false"
// CHECK-NGM-AARCH64: "-mllvm" "-aarch64-enable-global-merge=false"
+// CHECK-NGM-RISCV: "-mllvm" "-riscv-enable-global-merge=false"
// RUN: %clang -target armv7-unknown-unknown -### -fsyntax-only %s 2> %t \
// RUN: -mglobal-merge
@@ -21,12 +26,17 @@
// RUN: -mglobal-merge
// RUN: FileCheck --check-prefix=CHECK-GM-AARCH64 < %t %s
+// RUN: %clang -target riscv32-unknown-unknown -### -fsyntax-only %s 2> %t \
+// RUN: -mglobal-merge
+// RUN: FileCheck --check-prefix=CHECK-GM-RISCV < %t %s
+
// RUN: %clang -target x86_64-unknown-unknown -### -fsyntax-only %s 2> %t \
// RUN: -mglobal-merge
// RUN: FileCheck --check-prefix=CHECK-NONE < %t %s
// CHECK-GM-ARM: "-mllvm" "-arm-global-merge=true"
// CHECK-GM-AARCH64: "-mllvm" "-aarch64-enable-global-merge=true"
+// CHECK-GM-RISCV: "-mllvm" "-riscv-enable-global-merge=true"
// RUN: %clang -target armv7-unknown-unknown -### -fsyntax-only %s 2> %t
// RUN: FileCheck --check-prefix=CHECK-NONE < %t %s
@@ -34,6 +44,9 @@
// RUN: %clang -target aarch64-unknown-unknown -### -fsyntax-only %s 2> %t
// RUN: FileCheck --check-prefix=CHECK-NONE < %t %s
+// RUN: %clang -target riscv32-unknown-unknown -### -fsyntax-only %s 2> %t
+// RUN: FileCheck --check-prefix=CHECK-NONE < %t %s
+
// RUN: %clang -target x86_64-unknown-unknown -### -fsyntax-only %s 2> %t
// RUN: FileCheck --check-prefix=CHECK-NONE < %t %s
More information about the cfe-commits
mailing list