Skip to content

Commit 9a2c841

Browse files
authored
[X86] Early exit MIR AMX passes when AMX is unused (#94989)
Follow-up of #94358. Do the checks even before calling getRegisterInfo etc., because some of these are virtual function calls.
1 parent 3bd9d4d commit 9a2c841

File tree

4 files changed

+20
-15
lines changed

4 files changed

+20
-15
lines changed

llvm/lib/Target/X86/X86FastPreTileConfig.cpp

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -653,28 +653,20 @@ bool X86FastPreTileConfig::configBasicBlock(MachineBasicBlock &MBB) {
653653
}
654654

655655
bool X86FastPreTileConfig::runOnMachineFunction(MachineFunction &MFunc) {
656+
X86FI = MFunc.getInfo<X86MachineFunctionInfo>();
657+
// Early exit in the common case of non-AMX code.
658+
if (X86FI->getAMXProgModel() != AMXProgModelEnum::ManagedRA)
659+
return false;
660+
656661
MF = &MFunc;
657662
MRI = &MFunc.getRegInfo();
658663
ST = &MFunc.getSubtarget<X86Subtarget>();
659664
TII = ST->getInstrInfo();
660-
X86FI = MFunc.getInfo<X86MachineFunctionInfo>();
661665
MFI = &MFunc.getFrameInfo();
662666
TRI = ST->getRegisterInfo();
663667
CfgSS = -1;
664668

665669
unsigned NumVirtRegs = MRI->getNumVirtRegs();
666-
// Abandon early if there is no tile register to config.
667-
bool HasVirtTileReg = false;
668-
for (unsigned I = 0, E = NumVirtRegs; I != E; ++I) {
669-
Register VirtReg = Register::index2VirtReg(I);
670-
if (!MRI->reg_nodbg_empty(VirtReg) &&
671-
MRI->getRegClass(VirtReg)->getID() == X86::TILERegClassID) {
672-
HasVirtTileReg = true;
673-
break;
674-
}
675-
}
676-
if (!HasVirtTileReg)
677-
return false;
678670

679671
StackSlotForVirtReg.resize(NumVirtRegs);
680672
MayLiveAcrossBlocks.clear();

llvm/lib/Target/X86/X86FastTileConfig.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,16 @@ bool X86FastTileConfig::configBasicBlock(MachineBasicBlock &MBB) {
168168
}
169169

170170
bool X86FastTileConfig::runOnMachineFunction(MachineFunction &MFunc) {
171+
X86FI = MFunc.getInfo<X86MachineFunctionInfo>();
172+
// Early exit in the common case of non-AMX code.
173+
if (X86FI->getAMXProgModel() != AMXProgModelEnum::ManagedRA)
174+
return false;
175+
171176
MF = &MFunc;
172177
MRI = &MFunc.getRegInfo();
173178
const TargetSubtargetInfo *ST = &MFunc.getSubtarget<X86Subtarget>();
174179
TRI = ST->getRegisterInfo();
175180
TII = MFunc.getSubtarget().getInstrInfo();
176-
X86FI = MFunc.getInfo<X86MachineFunctionInfo>();
177181
bool Change = false;
178182

179183
// Loop over all of the basic blocks, eliminating virtual register references

llvm/lib/Target/X86/X86PreTileConfig.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,11 +237,15 @@ void X86PreTileConfig::collectShapeInfo(MachineInstr &MI) {
237237
}
238238

239239
bool X86PreTileConfig::runOnMachineFunction(MachineFunction &MF) {
240+
X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>();
241+
// Early exit in the common case of non-AMX code.
242+
if (X86FI->getAMXProgModel() != AMXProgModelEnum::ManagedRA)
243+
return false;
244+
240245
const X86Subtarget &ST = MF.getSubtarget<X86Subtarget>();
241246
const TargetInstrInfo *TII = ST.getInstrInfo();
242247
const TargetRegisterInfo *TRI = ST.getRegisterInfo();
243248
const TargetRegisterClass *RC = TRI->getRegClass(X86::TILERegClassID);
244-
X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>();
245249

246250
BitVector AMXRegs(TRI->getNumRegs());
247251
for (unsigned I = 0; I < RC->getNumRegs(); I++)

llvm/lib/Target/X86/X86TileConfig.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ INITIALIZE_PASS_END(X86TileConfig, DEBUG_TYPE, "Tile Register Configure", false,
7777
false)
7878

7979
bool X86TileConfig::runOnMachineFunction(MachineFunction &MF) {
80+
X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>();
81+
// Early exit in the common case of non-AMX code.
82+
if (X86FI->getAMXProgModel() != AMXProgModelEnum::ManagedRA)
83+
return false;
84+
8085
const X86Subtarget &ST = MF.getSubtarget<X86Subtarget>();
8186
const TargetRegisterInfo *TRI = ST.getRegisterInfo();
8287
const TargetInstrInfo *TII = ST.getInstrInfo();

0 commit comments

Comments
 (0)