summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFangrui Song <i@maskray.me>2024-02-26 17:58:55 -0800
committerFangrui Song <i@maskray.me>2024-02-26 17:58:55 -0800
commitdbc9ddd9a9b1b73d56f8aab5265db36a44e6fcaf (patch)
treefe684159fa827640459c64c725c9d34930b10fc9
parent15a7de697ae5ad88fd96ef7dc39ac479cc6e2eaf (diff)
Created using spr 1.3.4
-rw-r--r--clang/lib/Driver/ToolChains/Clang.cpp41
-rw-r--r--clang/test/CodeGen/RISCV/riscv-sdata-module-flag.c4
-rw-r--r--clang/test/Driver/riscv-sdata-warning.c4
-rw-r--r--clang/test/Driver/riscv-sdata.c5
-rw-r--r--llvm/lib/Target/RISCV/RISCVTargetObjectFile.h2
5 files changed, 12 insertions, 44 deletions
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 6e1b7e8657d0..9b9eab399060 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -2029,42 +2029,6 @@ void Clang::AddPPCTargetArgs(const ArgList &Args,
}
}
-static void SetRISCVSmallDataLimit(const ToolChain &TC, const ArgList &Args,
- ArgStringList &CmdArgs) {
- const Driver &D = TC.getDriver();
- const llvm::Triple &Triple = TC.getTriple();
- // Default small data limitation is eight.
- const char *SmallDataLimit = "8";
- // Get small data limitation.
- if (Args.getLastArg(options::OPT_shared, options::OPT_fpic,
- options::OPT_fPIC)) {
- // Not support linker relaxation for PIC.
- SmallDataLimit = "0";
- if (Args.hasArg(options::OPT_G)) {
- D.Diag(diag::warn_drv_unsupported_sdata);
- }
- } else if (Args.getLastArgValue(options::OPT_mcmodel_EQ)
- .equals_insensitive("large") &&
- (Triple.getArch() == llvm::Triple::riscv64)) {
- // Not support linker relaxation for RV64 with large code model.
- SmallDataLimit = "0";
- if (Args.hasArg(options::OPT_G)) {
- D.Diag(diag::warn_drv_unsupported_sdata);
- }
- } else if (Triple.isAndroid()) {
- // GP relaxation is not supported on Android.
- SmallDataLimit = "0";
- if (Args.hasArg(options::OPT_G)) {
- D.Diag(diag::warn_drv_unsupported_sdata);
- }
- } else if (Arg *A = Args.getLastArg(options::OPT_G)) {
- SmallDataLimit = A->getValue();
- }
- // Forward the -msmall-data-limit= option.
- CmdArgs.push_back("-msmall-data-limit");
- CmdArgs.push_back(SmallDataLimit);
-}
-
void Clang::AddRISCVTargetArgs(const ArgList &Args,
ArgStringList &CmdArgs) const {
const llvm::Triple &Triple = getToolChain().getTriple();
@@ -2073,7 +2037,10 @@ void Clang::AddRISCVTargetArgs(const ArgList &Args,
CmdArgs.push_back("-target-abi");
CmdArgs.push_back(ABIName.data());
- SetRISCVSmallDataLimit(getToolChain(), Args, CmdArgs);
+ if (Arg *A = Args.getLastArg(options::OPT_G)) {
+ CmdArgs.push_back("-msmall-data-limit");
+ CmdArgs.push_back(A->getValue());
+ }
if (!Args.hasFlag(options::OPT_mimplicit_float,
options::OPT_mno_implicit_float, true))
diff --git a/clang/test/CodeGen/RISCV/riscv-sdata-module-flag.c b/clang/test/CodeGen/RISCV/riscv-sdata-module-flag.c
index 9bd69e799587..e91b2e7f225f 100644
--- a/clang/test/CodeGen/RISCV/riscv-sdata-module-flag.c
+++ b/clang/test/CodeGen/RISCV/riscv-sdata-module-flag.c
@@ -30,14 +30,14 @@
void test(void) {}
-// RV32-DEFAULT: !{i32 8, !"SmallDataLimit", i32 8}
+// RV32-DEFAULT: !{i32 8, !"SmallDataLimit", i32 0}
// RV32-G4: !{i32 8, !"SmallDataLimit", i32 4}
// RV32-S0: !{i32 8, !"SmallDataLimit", i32 0}
// RV32-S2G4: !{i32 8, !"SmallDataLimit", i32 4}
// RV32-T16: !{i32 8, !"SmallDataLimit", i32 16}
// RV32-PIC: !{i32 8, !"SmallDataLimit", i32 0}
-// RV64-DEFAULT: !{i32 8, !"SmallDataLimit", i32 8}
+// RV64-DEFAULT: !{i32 8, !"SmallDataLimit", i32 0}
// RV64-G4: !{i32 8, !"SmallDataLimit", i32 4}
// RV64-S0: !{i32 8, !"SmallDataLimit", i32 0}
// RV64-S2G4: !{i32 8, !"SmallDataLimit", i32 4}
diff --git a/clang/test/Driver/riscv-sdata-warning.c b/clang/test/Driver/riscv-sdata-warning.c
deleted file mode 100644
index ace9a32ee116..000000000000
--- a/clang/test/Driver/riscv-sdata-warning.c
+++ /dev/null
@@ -1,4 +0,0 @@
-// REQUIRES: riscv-registered-target
-// RUN: %clang -S --target=riscv32-unknown-elf -fpic -msmall-data-limit=8 %s 2>&1 \
-// RUN: | FileCheck -check-prefix=CHECK-PIC-SDATA %s
-// CHECK-PIC-SDATA: warning: ignoring '-msmall-data-limit=' with -mcmodel=large for -fpic or RV64
diff --git a/clang/test/Driver/riscv-sdata.c b/clang/test/Driver/riscv-sdata.c
new file mode 100644
index 000000000000..84cd109813db
--- /dev/null
+++ b/clang/test/Driver/riscv-sdata.c
@@ -0,0 +1,5 @@
+// RUN: %clang -### -S --target=riscv64 %s 2>&1 | FileCheck %s
+// RUN: %clang -### -S --target=riscv64 -msmall-data-limit=8 %s 2>&1 | FileCheck %s --check-prefix=EIGHT
+
+// CHECK-NOT: "-msmall-data-limit"
+// EIGHT: "-msmall-data-limit" "8"
diff --git a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h
index 0910fbd3d950..2d4fa211fa30 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h
+++ b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h
@@ -17,7 +17,7 @@ namespace llvm {
class RISCVELFTargetObjectFile : public TargetLoweringObjectFileELF {
MCSection *SmallDataSection;
MCSection *SmallBSSSection;
- unsigned SSThreshold = 8;
+ unsigned SSThreshold = 0;
public:
unsigned getTextSectionAlignment() const override;