MaskRay created this revision. MaskRay added reviewers: craig.topper, jrtc27, luismarques, serge-sans-paille. Herald added subscribers: StephenFan, vkmr, evandro, sameer.abuasal, s.egerton, Jim, benna, psnobl, rogfer01, shiva0217, kito-cheng, simoncook. MaskRay requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
-fno-semantic-interposition can optimize default visibility external linkage (non-ifunc-non-COMDAT) access to not use GOT, e.g. int var; int load() { return var; } -fpic (var is dso_preemptable) vs -fpic -fno-semantic-interposition (var is dso_local) - auipc a0, %got_pcrel_hi(var) - ld a0, %pcrel_lo(.LBB2_1)(a0) + auipc a0, %pcrel_hi(.Lvar$local) + addi a0, a0, %pcrel_lo(.LBB2_1) Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D101876 Files: clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/fsemantic-interposition.c Index: clang/test/Driver/fsemantic-interposition.c =================================================================== --- clang/test/Driver/fsemantic-interposition.c +++ clang/test/Driver/fsemantic-interposition.c @@ -10,6 +10,8 @@ /// If -fno-semantic-interposition is specified and the target supports local /// aliases, neither CC1 option is set. +// RUN: %clang -target riscv32 %s -Werror -fPIC -fno-semantic-interposition -c -### 2>&1 | FileCheck --check-prefix=NO %s +// RUN: %clang -target riscv64 %s -Werror -fPIC -fno-semantic-interposition -c -### 2>&1 | FileCheck --check-prefix=NO %s // RUN: %clang -target i386 %s -Werror -fPIC -fno-semantic-interposition -c -### 2>&1 | FileCheck --check-prefix=NO %s // RUN: %clang -target x86_64 %s -Werror -fPIC -fno-semantic-interposition -c -### 2>&1 | FileCheck --check-prefix=NO %s // NO-NOT: "-fsemantic-interposition" Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -4718,7 +4718,7 @@ options::OPT_fno_semantic_interposition); if (RelocationModel != llvm::Reloc::Static && !IsPIE) { // The supported targets need to call AsmPrinter::getSymbolPreferLocal. - bool SupportsLocalAlias = Triple.isX86(); + bool SupportsLocalAlias = Triple.isRISCV() || Triple.isX86(); if (!A) CmdArgs.push_back("-fhalf-no-semantic-interposition"); else if (A->getOption().matches(options::OPT_fsemantic_interposition))
Index: clang/test/Driver/fsemantic-interposition.c =================================================================== --- clang/test/Driver/fsemantic-interposition.c +++ clang/test/Driver/fsemantic-interposition.c @@ -10,6 +10,8 @@ /// If -fno-semantic-interposition is specified and the target supports local /// aliases, neither CC1 option is set. +// RUN: %clang -target riscv32 %s -Werror -fPIC -fno-semantic-interposition -c -### 2>&1 | FileCheck --check-prefix=NO %s +// RUN: %clang -target riscv64 %s -Werror -fPIC -fno-semantic-interposition -c -### 2>&1 | FileCheck --check-prefix=NO %s // RUN: %clang -target i386 %s -Werror -fPIC -fno-semantic-interposition -c -### 2>&1 | FileCheck --check-prefix=NO %s // RUN: %clang -target x86_64 %s -Werror -fPIC -fno-semantic-interposition -c -### 2>&1 | FileCheck --check-prefix=NO %s // NO-NOT: "-fsemantic-interposition" Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -4718,7 +4718,7 @@ options::OPT_fno_semantic_interposition); if (RelocationModel != llvm::Reloc::Static && !IsPIE) { // The supported targets need to call AsmPrinter::getSymbolPreferLocal. - bool SupportsLocalAlias = Triple.isX86(); + bool SupportsLocalAlias = Triple.isRISCV() || Triple.isX86(); if (!A) CmdArgs.push_back("-fhalf-no-semantic-interposition"); else if (A->getOption().matches(options::OPT_fsemantic_interposition))
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits