https://github.com/MaskRay updated https://github.com/llvm/llvm-project/pull/83093
>From dbc9ddd9a9b1b73d56f8aab5265db36a44e6fcaf Mon Sep 17 00:00:00 2001 From: Fangrui Song <i...@maskray.me> Date: Mon, 26 Feb 2024 17:58:55 -0800 Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20initia?= =?UTF-8?q?l=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created using spr 1.3.4 --- clang/lib/Driver/ToolChains/Clang.cpp | 41 ++----------------- .../CodeGen/RISCV/riscv-sdata-module-flag.c | 4 +- clang/test/Driver/riscv-sdata-warning.c | 4 -- clang/test/Driver/riscv-sdata.c | 5 +++ llvm/lib/Target/RISCV/RISCVTargetObjectFile.h | 2 +- 5 files changed, 12 insertions(+), 44 deletions(-) delete mode 100644 clang/test/Driver/riscv-sdata-warning.c create mode 100644 clang/test/Driver/riscv-sdata.c diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 6e1b7e8657d0dc..9b9eab3990607f 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 9bd69e7995877e..e91b2e7f225f52 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 ace9a32ee116fd..00000000000000 --- 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 00000000000000..84cd109813db4c --- /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 0910fbd3d95041..2d4fa211fa303e 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; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits