[llvm] 103811a - [RISCV, GISel] Unconditionally use MO_PLT for calls (#72355)

via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 15 15:18:51 PST 2023


Author: Fangrui Song
Date: 2023-11-15T15:18:47-08:00
New Revision: 103811a27abcbcc6792c88dcdd30034e5cc8adc3

URL: https://github.com/llvm/llvm-project/commit/103811a27abcbcc6792c88dcdd30034e5cc8adc3
DIFF: https://github.com/llvm/llvm-project/commit/103811a27abcbcc6792c88dcdd30034e5cc8adc3.diff

LOG: [RISCV,GISel] Unconditionally use MO_PLT for calls (#72355)

All known linkers handle R_RISCV_CALL and R_RISCV_CALL_PLT in the same
way (GNU ld since
https://sourceware.org/pipermail/binutils/2020-August/112750.html).

MO_CALL is for R_RISCV_CALL, a deprecated relocation type. We don't
migrate away from MO_CALL yet.
For GISel we don't have the output difference concern and should weigh
more on simplicity.

Added: 
    

Modified: 
    llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp
    llvm/test/CodeGen/RISCV/GlobalISel/irtranslator/calls.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp b/llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp
index 116633bf9761fe6..1aba8a8f52e96fc 100644
--- a/llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp
+++ b/llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp
@@ -504,24 +504,8 @@ bool RISCVCallLowering::lowerCall(MachineIRBuilder &MIRBuilder,
   // TODO: Support tail calls.
   Info.IsTailCall = false;
 
-  // If the callee is a GlobalAddress or ExternalSymbol and cannot be assumed as
-  // DSOLocal, then use MO_PLT. Otherwise use MO_CALL.
-  if (Info.Callee.isGlobal()) {
-    const GlobalValue *GV = Info.Callee.getGlobal();
-    unsigned OpFlags = RISCVII::MO_CALL;
-    if (!getTLI()->getTargetMachine().shouldAssumeDSOLocal(*GV->getParent(),
-                                                           GV))
-      OpFlags = RISCVII::MO_PLT;
-
-    Info.Callee.setTargetFlags(OpFlags);
-  } else if (Info.Callee.isSymbol()) {
-    unsigned OpFlags = RISCVII::MO_CALL;
-    if (!getTLI()->getTargetMachine().shouldAssumeDSOLocal(
-            *MF.getFunction().getParent(), nullptr))
-      OpFlags = RISCVII::MO_PLT;
-
-    Info.Callee.setTargetFlags(OpFlags);
-  }
+  // Select the recommended relocation type R_RISCV_CALL_PLT.
+  Info.Callee.setTargetFlags(RISCVII::MO_PLT);
 
   MachineInstrBuilder Call =
       MIRBuilder

diff  --git a/llvm/test/CodeGen/RISCV/GlobalISel/irtranslator/calls.ll b/llvm/test/CodeGen/RISCV/GlobalISel/irtranslator/calls.ll
index 7b09d0c12215874..14c86a3e99e4493 100644
--- a/llvm/test/CodeGen/RISCV/GlobalISel/irtranslator/calls.ll
+++ b/llvm/test/CodeGen/RISCV/GlobalISel/irtranslator/calls.ll
@@ -427,14 +427,14 @@ define void @test_call_local() {
   ; RV32I-LABEL: name: test_call_local
   ; RV32I: bb.1.entry:
   ; RV32I-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2
-  ; RV32I-NEXT:   PseudoCALL target-flags(riscv-call) @dso_local_function, csr_ilp32_lp64, implicit-def $x1
+  ; RV32I-NEXT:   PseudoCALL target-flags(riscv-plt) @dso_local_function, csr_ilp32_lp64, implicit-def $x1
   ; RV32I-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2
   ; RV32I-NEXT:   PseudoRET
   ;
   ; RV64I-LABEL: name: test_call_local
   ; RV64I: bb.1.entry:
   ; RV64I-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2
-  ; RV64I-NEXT:   PseudoCALL target-flags(riscv-call) @dso_local_function, csr_ilp32_lp64, implicit-def $x1
+  ; RV64I-NEXT:   PseudoCALL target-flags(riscv-plt) @dso_local_function, csr_ilp32_lp64, implicit-def $x1
   ; RV64I-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2
   ; RV64I-NEXT:   PseudoRET
 entry:


        


More information about the llvm-commits mailing list