[llvm] [BOLT][RISCV] Fix AUIPC/JALR call rewriting (PR #216882)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 25 00:58:04 PDT 2026
================
@@ -275,7 +303,20 @@ class RISCVMCPlusBuilder : public MCPlusBuilder {
void createCall(MCInst &Inst, const MCSymbol *Target,
MCContext *Ctx) override {
- return createCall(RISCV::PseudoCALL, Inst, Target, Ctx);
+ MCRegister Link = RISCV::X1;
+ if ((Inst.getOpcode() == RISCV::JAL || Inst.getOpcode() == RISCV::JALR ||
+ Inst.getOpcode() == RISCV::PseudoCALLReg) &&
+ Inst.getNumOperands() && Inst.getOperand(0).isReg())
+ Link = Inst.getOperand(0).getReg();
+
+ if (Link == RISCV::X1)
+ return createCall(RISCV::PseudoCALL, Inst, Target, Ctx);
+
+ Inst.setOpcode(RISCV::PseudoCALLReg);
+ Inst.clear();
+ Inst.addOperand(MCOperand::createReg(Link));
+ Inst.addOperand(MCOperand::createExpr(MCSpecifierExpr::create(
+ MCSymbolRefExpr::create(Target, *Ctx), RISCV::S_CALL_PLT, *Ctx)));
----------------
Thrrreeee wrote:
This may conflict with https://github.com/llvm/llvm-project/pull/218408
https://github.com/llvm/llvm-project/pull/216882
More information about the llvm-commits
mailing list