Skip to content

Commit 59ab86b

Browse files
authored
[BOLT] Clear operands when creating new instructions. NFCI (#85191)
Reset operand list whenever we create a new instruction via a parameter passed by reference. Most functions were already doing this, but there are several places missing the reset. Potentially, if we don not clear the list it could lead to invalid instruction operands. But the existing code is unaffected.
1 parent 2c80a9a commit 59ab86b

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1387,6 +1387,7 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
13871387
void createIndirectBranch(MCInst &Inst, MCPhysReg MemBaseReg,
13881388
int64_t Disp) const {
13891389
Inst.setOpcode(AArch64::BR);
1390+
Inst.clear();
13901391
Inst.addOperand(MCOperand::createReg(MemBaseReg));
13911392
}
13921393

bolt/lib/Target/X86/X86MCPlusBuilder.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2367,11 +2367,13 @@ class X86MCPlusBuilder : public MCPlusBuilder {
23672367

23682368
bool createNoop(MCInst &Inst) const override {
23692369
Inst.setOpcode(X86::NOOP);
2370+
Inst.clear();
23702371
return true;
23712372
}
23722373

23732374
bool createReturn(MCInst &Inst) const override {
23742375
Inst.setOpcode(X86::RET64);
2376+
Inst.clear();
23752377
return true;
23762378
}
23772379

@@ -2732,6 +2734,7 @@ class X86MCPlusBuilder : public MCPlusBuilder {
27322734
bool createUncondBranch(MCInst &Inst, const MCSymbol *TBB,
27332735
MCContext *Ctx) const override {
27342736
Inst.setOpcode(X86::JMP_1);
2737+
Inst.clear();
27352738
Inst.addOperand(MCOperand::createExpr(
27362739
MCSymbolRefExpr::create(TBB, MCSymbolRefExpr::VK_None, *Ctx)));
27372740
return true;
@@ -2740,6 +2743,7 @@ class X86MCPlusBuilder : public MCPlusBuilder {
27402743
bool createCall(MCInst &Inst, const MCSymbol *Target,
27412744
MCContext *Ctx) override {
27422745
Inst.setOpcode(X86::CALL64pcrel32);
2746+
Inst.clear();
27432747
Inst.addOperand(MCOperand::createExpr(
27442748
MCSymbolRefExpr::create(Target, MCSymbolRefExpr::VK_None, *Ctx)));
27452749
return true;
@@ -3066,6 +3070,7 @@ class X86MCPlusBuilder : public MCPlusBuilder {
30663070
void createSwap(MCInst &Inst, MCPhysReg Source, MCPhysReg MemBaseReg,
30673071
int64_t Disp) const {
30683072
Inst.setOpcode(X86::XCHG64rm);
3073+
Inst.clear();
30693074
Inst.addOperand(MCOperand::createReg(Source));
30703075
Inst.addOperand(MCOperand::createReg(Source));
30713076
Inst.addOperand(MCOperand::createReg(MemBaseReg)); // BaseReg
@@ -3078,6 +3083,7 @@ class X86MCPlusBuilder : public MCPlusBuilder {
30783083
void createIndirectBranch(MCInst &Inst, MCPhysReg MemBaseReg,
30793084
int64_t Disp) const {
30803085
Inst.setOpcode(X86::JMP64m);
3086+
Inst.clear();
30813087
Inst.addOperand(MCOperand::createReg(MemBaseReg)); // BaseReg
30823088
Inst.addOperand(MCOperand::createImm(1)); // ScaleAmt
30833089
Inst.addOperand(MCOperand::createReg(X86::NoRegister)); // IndexReg
@@ -3543,6 +3549,7 @@ class X86MCPlusBuilder : public MCPlusBuilder {
35433549
bool createMove(MCInst &Inst, const MCSymbol *Src, unsigned Reg,
35443550
MCContext *Ctx) const {
35453551
Inst.setOpcode(X86::MOV64rm);
3552+
Inst.clear();
35463553
Inst.addOperand(MCOperand::createReg(Reg));
35473554
Inst.addOperand(MCOperand::createReg(X86::RIP)); // BaseReg
35483555
Inst.addOperand(MCOperand::createImm(1)); // ScaleAmt
@@ -3558,6 +3565,7 @@ class X86MCPlusBuilder : public MCPlusBuilder {
35583565
bool createLea(MCInst &Inst, const MCSymbol *Src, unsigned Reg,
35593566
MCContext *Ctx) const {
35603567
Inst.setOpcode(X86::LEA64r);
3568+
Inst.clear();
35613569
Inst.addOperand(MCOperand::createReg(Reg));
35623570
Inst.addOperand(MCOperand::createReg(X86::RIP)); // BaseReg
35633571
Inst.addOperand(MCOperand::createImm(1)); // ScaleAmt

0 commit comments

Comments
 (0)