Skip to content

Commit 065046b

Browse files
committed
Address addRegReg fixme
1 parent 03ecc8d commit 065046b

File tree

3 files changed

+17
-9
lines changed

3 files changed

+17
-9
lines changed

llvm/lib/Target/X86/X86FastISel.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3830,7 +3830,8 @@ unsigned X86FastISel::X86MaterializeFP(const ConstantFP *CFP, MVT VT) {
38303830
.addConstantPoolIndex(CPI, 0, OpFlag);
38313831
MachineInstrBuilder MIB = BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, MIMD,
38323832
TII.get(Opc), ResultReg);
3833-
addRegReg(MIB, AddrReg, false, PICBase, false);
3833+
addRegReg(MIB, AddrReg, false, X86::NoSubRegister, PICBase, false,
3834+
X86::NoSubRegister);
38343835
MachineMemOperand *MMO = FuncInfo.MF->getMachineMemOperand(
38353836
MachinePointerInfo::getConstantPool(*FuncInfo.MF),
38363837
MachineMemOperand::MOLoad, DL.getPointerSize(), Alignment);

llvm/lib/Target/X86/X86InstrBuilder.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,14 @@ addRegOffset(const MachineInstrBuilder &MIB,
161161

162162
/// addRegReg - This function is used to add a memory reference of the form:
163163
/// [Reg + Reg].
164-
static inline const MachineInstrBuilder &addRegReg(const MachineInstrBuilder &MIB,
165-
unsigned Reg1, bool isKill1,
166-
unsigned Reg2, bool isKill2) {
167-
return MIB.addReg(Reg1, getKillRegState(isKill1)).addImm(1)
168-
.addReg(Reg2, getKillRegState(isKill2)).addImm(0).addReg(0);
164+
static inline const MachineInstrBuilder &
165+
addRegReg(const MachineInstrBuilder &MIB, unsigned Reg1, bool isKill1,
166+
unsigned SubReg1, unsigned Reg2, bool isKill2, unsigned SubReg2) {
167+
return MIB.addReg(Reg1, getKillRegState(isKill1), SubReg1)
168+
.addImm(1)
169+
.addReg(Reg2, getKillRegState(isKill2), SubReg2)
170+
.addImm(0)
171+
.addReg(0);
169172
}
170173

171174
static inline const MachineInstrBuilder &

llvm/lib/Target/X86/X86InstrInfo.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1318,7 +1318,8 @@ MachineInstr *X86InstrInfo::convertToThreeAddressWithLEA(unsigned MIOpc,
13181318
if (Src == Src2) {
13191319
// ADD8rr/ADD16rr killed %reg1028, %reg1028
13201320
// just a single insert_subreg.
1321-
addRegReg(MIB, InRegLEA, true, InRegLEA, false);
1321+
addRegReg(MIB, InRegLEA, true, X86::NoSubRegister, InRegLEA, false,
1322+
X86::NoSubRegister);
13221323
} else {
13231324
if (Subtarget.is64Bit())
13241325
InRegLEA2 = RegInfo.createVirtualRegister(&X86::GR64_NOSPRegClass);
@@ -1331,7 +1332,8 @@ MachineInstr *X86InstrInfo::convertToThreeAddressWithLEA(unsigned MIOpc,
13311332
InsMI2 = BuildMI(MBB, &*MIB, MI.getDebugLoc(), get(TargetOpcode::COPY))
13321333
.addReg(InRegLEA2, RegState::Define, SubReg)
13331334
.addReg(Src2, getKillRegState(IsKill2), Src2SubReg);
1334-
addRegReg(MIB, InRegLEA, true, InRegLEA2, true);
1335+
addRegReg(MIB, InRegLEA, true, X86::NoSubRegister, InRegLEA2, true,
1336+
X86::NoSubRegister);
13351337
}
13361338
if (LV && IsKill2 && InsMI2)
13371339
LV->replaceKillInstruction(Src2, MI, *InsMI2);
@@ -1589,6 +1591,7 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
15891591
// the first call inserted a COPY from Src2 and marked it as killed.
15901592
isKill = isKill2;
15911593
SrcReg = SrcReg2;
1594+
SrcSubReg = SrcSubReg2;
15921595
} else {
15931596
if (!classifyLEAReg(MI, Src, Opc, /*AllowSP=*/true, SrcReg, SrcSubReg,
15941597
isKill, ImplicitOp, LV, LIS))
@@ -1601,7 +1604,8 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
16011604
if (ImplicitOp2.getReg() != 0)
16021605
MIB.add(ImplicitOp2);
16031606

1604-
NewMI = addRegReg(MIB, SrcReg, isKill, SrcReg2, isKill2); // FIXME: Subregs
1607+
NewMI =
1608+
addRegReg(MIB, SrcReg, isKill, SrcSubReg, SrcReg2, isKill2, SrcSubReg2);
16051609

16061610
// Add kills if classifyLEAReg created a new register.
16071611
if (LV) {

0 commit comments

Comments
 (0)