Skip to content

Commit 58067d1

Browse files
[BOLT][RISCV] Fix MCPlusBuilder instrumentation ifaces
a) Due to the different capabilities of the functions implemented, rename the createCmpJE function b) Refactor the convertIndirectCallToLoad function to override the interface. Patch by WangJee, originally posted in #136129
1 parent 209d8c8 commit 58067d1

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -555,9 +555,9 @@ class RISCVMCPlusBuilder : public MCPlusBuilder {
555555
.addReg(RegCnt);
556556
}
557557

558-
InstructionListType createCmpJE(MCPhysReg RegNo, MCPhysReg RegTmp,
559-
const MCSymbol *Target,
560-
MCContext *Ctx) const {
558+
InstructionListType createRegCmpJE(MCPhysReg RegNo, MCPhysReg RegTmp,
559+
const MCSymbol *Target,
560+
MCContext *Ctx) const {
561561
InstructionListType Insts;
562562
Insts.emplace_back(
563563
MCInstBuilder(RISCV::SUB).addReg(RegTmp).addReg(RegNo).addReg(RegNo));
@@ -718,7 +718,7 @@ class RISCVMCPlusBuilder : public MCPlusBuilder {
718718
Insts.emplace_back();
719719
loadReg(Insts.back(), RISCV::X10, RISCV::X10, 0);
720720
InstructionListType cmpJmp =
721-
createCmpJE(RISCV::X10, RISCV::X11, IndCallHandler, Ctx);
721+
createRegCmpJE(RISCV::X10, RISCV::X11, IndCallHandler, Ctx);
722722
Insts.insert(Insts.end(), cmpJmp.begin(), cmpJmp.end());
723723
Insts.emplace_back();
724724
createStackPointerIncrement(Insts.back(), 16);
@@ -777,14 +777,13 @@ class RISCVMCPlusBuilder : public MCPlusBuilder {
777777
return createGetter(Ctx, "__bolt_instr_num_funcs");
778778
}
779779

780-
void convertIndirectCallToLoad(MCInst &Inst, MCPhysReg Reg,
781-
MCPhysReg ZeroReg) const {
780+
void convertIndirectCallToLoad(MCInst &Inst, MCPhysReg Reg) override {
782781
bool IsTailCall = isTailCall(Inst);
783782
if (IsTailCall)
784783
removeAnnotation(Inst, MCPlus::MCAnnotation::kTailCall);
785784
Inst.setOpcode(RISCV::ADD);
786785
Inst.insert(Inst.begin(), MCOperand::createReg(Reg));
787-
Inst.insert(Inst.begin() + 1, MCOperand::createReg(ZeroReg));
786+
Inst.insert(Inst.begin() + 1, MCOperand::createReg(RISCV::X0));
788787
return;
789788
}
790789

@@ -845,7 +844,7 @@ class RISCVMCPlusBuilder : public MCPlusBuilder {
845844
InstructionListType Insts;
846845
spillRegs(Insts, {RISCV::X10, RISCV::X11});
847846
Insts.emplace_back(CallInst);
848-
convertIndirectCallToLoad(Insts.back(), RISCV::X10, RISCV::X0);
847+
convertIndirectCallToLoad(Insts.back(), RISCV::X10);
849848
InstructionListType LoadImm = createLoadImmediate(RISCV::X11, CallSiteID);
850849
Insts.insert(Insts.end(), LoadImm.begin(), LoadImm.end());
851850
spillRegs(Insts, {RISCV::X10, RISCV::X11});

0 commit comments

Comments
 (0)