llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-mips Author: llvmbot <details> <summary>Changes</summary> Backport f796b25647e378a02482ef383f2db45804d8fb72 Requested by: @<!-- -->brad0 --- Full diff: https://github.com/llvm/llvm-project/pull/222838.diff 3 Files Affected: - (modified) llvm/lib/Target/Mips/MipsAsmPrinter.cpp (+7-7) - (modified) llvm/lib/Target/Mips/MipsAsmPrinter.h (+3) - (added) llvm/test/CodeGen/Mips/jalr-no-mangle.ll (+30) ``````````diff diff --git a/llvm/lib/Target/Mips/MipsAsmPrinter.cpp b/llvm/lib/Target/Mips/MipsAsmPrinter.cpp index 62fd0ef319e1a..adda6154e15a5 100644 --- a/llvm/lib/Target/Mips/MipsAsmPrinter.cpp +++ b/llvm/lib/Target/Mips/MipsAsmPrinter.cpp @@ -147,21 +147,21 @@ void MipsAsmPrinter::emitPseudoIndirectBranch(MCStreamer &OutStreamer, // // This is an optimization hint for the linker which may then replace // an indirect call with a direct branch. -static void emitDirectiveRelocJalr(const MachineInstr &MI, - MCContext &OutContext, - TargetMachine &TM, - MCStreamer &OutStreamer, - const MipsSubtarget &Subtarget) { +void MipsAsmPrinter::emitDirectiveRelocJalr(const MachineInstr &MI, + MCContext &OutContext, + TargetMachine &TM, + MCStreamer &OutStreamer, + const MipsSubtarget &Subtarget) { for (const MachineOperand &MO : llvm::drop_begin(MI.operands(), MI.getDesc().getNumOperands())) { if (MO.isMCSymbol() && (MO.getTargetFlags() & MipsII::MO_JALR)) { MCSymbol *Callee = MO.getMCSymbol(); if (Callee && !Callee->getName().empty()) { + MCSymbol *Sym = GetExternalSymbolSymbol(Callee->getName()); MCSymbol *OffsetLabel = OutContext.createTempSymbol(); const MCExpr *OffsetExpr = MCSymbolRefExpr::create(OffsetLabel, OutContext); - const MCExpr *CaleeExpr = - MCSymbolRefExpr::create(Callee, OutContext); + const MCExpr *CaleeExpr = MCSymbolRefExpr::create(Sym, OutContext); OutStreamer.emitRelocDirective( *OffsetExpr, Subtarget.inMicroMipsMode() ? "R_MICROMIPS_JALR" : "R_MIPS_JALR", diff --git a/llvm/lib/Target/Mips/MipsAsmPrinter.h b/llvm/lib/Target/Mips/MipsAsmPrinter.h index 6d45ad551db72..ae77c305f9703 100644 --- a/llvm/lib/Target/Mips/MipsAsmPrinter.h +++ b/llvm/lib/Target/Mips/MipsAsmPrinter.h @@ -159,6 +159,9 @@ class LLVM_LIBRARY_VISIBILITY MipsAsmPrinter : public AsmPrinter { void emitEndOfAsmFile(Module &M) override; void PrintDebugValueComment(const MachineInstr *MI, raw_ostream &OS); void emitDebugValue(const MCExpr *Value, unsigned Size) const override; + void emitDirectiveRelocJalr(const MachineInstr &MI, MCContext &OutContext, + TargetMachine &TM, MCStreamer &OutStreamer, + const MipsSubtarget &Subtarget); }; } // end namespace llvm diff --git a/llvm/test/CodeGen/Mips/jalr-no-mangle.ll b/llvm/test/CodeGen/Mips/jalr-no-mangle.ll new file mode 100644 index 0000000000000..573328dfab368 --- /dev/null +++ b/llvm/test/CodeGen/Mips/jalr-no-mangle.ll @@ -0,0 +1,30 @@ +; RUN: llc -mtriple=mipsel-unknown-linux-gnu -relocation-model=pic < %s | FileCheck %s --check-prefix=ASM +; RUN: llc -mtriple=mipsel-unknown-linux-gnu -relocation-model=pic -filetype=obj -o %t %s +; RUN: llvm-readelf -r %t | FileCheck %s --check-prefix=RELOC +; RUN: llvm-readelf -s %t | FileCheck %s --check-prefix=SYM + +declare i32 @"\01my_target_sym"() + +define i32 @caller() nounwind { +; ASM-LABEL: caller: +; ASM: # %bb.0: # %entry +; ASM-NEXT: lui $2, %hi(_gp_disp) +; ASM-NEXT: addiu $2, $2, %lo(_gp_disp) +; ASM-NEXT: addiu $sp, $sp, -24 +; ASM-NEXT: sw $ra, 20($sp) +; ASM-NEXT: addu $gp, $2, $25 +; ASM-NEXT: lw $25, %call16(my_target_sym)($gp) +; ASM-NEXT: .reloc $tmp0, R_MIPS_JALR, my_target_sym +; ASM-NEXT: $tmp0: +; ASM-NEXT: jalr $25 +; ASM-NEXT: nop + +; RELOC: R_MIPS_JALR{{.*}}my_target_sym + +; SYM: UND{{.*}}my_target_sym +; SYM-NOT: UND{{.*}}my_target_sym + +entry: + %call = call i32 @"\01my_target_sym"() + ret i32 %call +} `````````` </details> https://github.com/llvm/llvm-project/pull/222838 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
