Skip to content

Commit 7a25c72

Browse files
authored
[X86] Use Register in X86SpeculativeLoadHardening.cpp. NFC (#130905)
1 parent 5c02e74 commit 7a25c72

File tree

1 file changed

+35
-35
lines changed

1 file changed

+35
-35
lines changed

llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,8 @@ class X86SpeculativeLoadHardeningPass : public MachineFunctionPass {
146146

147147
/// Manages the predicate state traced through the program.
148148
struct PredState {
149-
unsigned InitialReg = 0;
150-
unsigned PoisonReg = 0;
149+
Register InitialReg;
150+
Register PoisonReg;
151151

152152
const TargetRegisterClass *RC;
153153
MachineSSAUpdater SSA;
@@ -177,7 +177,7 @@ class X86SpeculativeLoadHardeningPass : public MachineFunctionPass {
177177

178178
void tracePredStateThroughBlocksAndHarden(MachineFunction &MF);
179179

180-
unsigned saveEFLAGS(MachineBasicBlock &MBB,
180+
Register saveEFLAGS(MachineBasicBlock &MBB,
181181
MachineBasicBlock::iterator InsertPt,
182182
const DebugLoc &Loc);
183183
void restoreEFLAGS(MachineBasicBlock &MBB,
@@ -186,28 +186,28 @@ class X86SpeculativeLoadHardeningPass : public MachineFunctionPass {
186186

187187
void mergePredStateIntoSP(MachineBasicBlock &MBB,
188188
MachineBasicBlock::iterator InsertPt,
189-
const DebugLoc &Loc, unsigned PredStateReg);
190-
unsigned extractPredStateFromSP(MachineBasicBlock &MBB,
189+
const DebugLoc &Loc, Register PredStateReg);
190+
Register extractPredStateFromSP(MachineBasicBlock &MBB,
191191
MachineBasicBlock::iterator InsertPt,
192192
const DebugLoc &Loc);
193193

194194
void
195195
hardenLoadAddr(MachineInstr &MI, MachineOperand &BaseMO,
196196
MachineOperand &IndexMO,
197-
SmallDenseMap<unsigned, unsigned, 32> &AddrRegToHardenedReg);
197+
SmallDenseMap<Register, Register, 32> &AddrRegToHardenedReg);
198198
MachineInstr *
199199
sinkPostLoadHardenedInst(MachineInstr &MI,
200200
SmallPtrSetImpl<MachineInstr *> &HardenedInstrs);
201201
bool canHardenRegister(Register Reg);
202-
unsigned hardenValueInRegister(Register Reg, MachineBasicBlock &MBB,
202+
Register hardenValueInRegister(Register Reg, MachineBasicBlock &MBB,
203203
MachineBasicBlock::iterator InsertPt,
204204
const DebugLoc &Loc);
205-
unsigned hardenPostLoad(MachineInstr &MI);
205+
Register hardenPostLoad(MachineInstr &MI);
206206
void hardenReturnInstr(MachineInstr &MI);
207207
void tracePredStateThroughCall(MachineInstr &MI);
208208
void hardenIndirectCallOrJumpInstr(
209209
MachineInstr &MI,
210-
SmallDenseMap<unsigned, unsigned, 32> &AddrRegToHardenedReg);
210+
SmallDenseMap<Register, Register, 32> &AddrRegToHardenedReg);
211211
};
212212

213213
} // end anonymous namespace
@@ -743,7 +743,7 @@ X86SpeculativeLoadHardeningPass::tracePredStateThroughCFG(
743743

744744
// We will wire each cmov to each other, but need to start with the
745745
// incoming pred state.
746-
unsigned CurStateReg = PS->InitialReg;
746+
Register CurStateReg = PS->InitialReg;
747747

748748
for (X86::CondCode Cond : Conds) {
749749
int PredStateSizeInBytes = TRI->getRegSizeInBits(*PS->RC) / 8;
@@ -986,7 +986,7 @@ X86SpeculativeLoadHardeningPass::tracePredStateThroughIndirectBranches(
986986
// No terminator or non-branch terminator.
987987
continue;
988988

989-
unsigned TargetReg;
989+
Register TargetReg;
990990

991991
switch (TI.getOpcode()) {
992992
default:
@@ -1265,9 +1265,9 @@ void X86SpeculativeLoadHardeningPass::tracePredStateThroughBlocksAndHarden(
12651265
SmallPtrSet<MachineInstr *, 16> HardenPostLoad;
12661266
SmallPtrSet<MachineInstr *, 16> HardenLoadAddr;
12671267

1268-
SmallSet<unsigned, 16> HardenedAddrRegs;
1268+
SmallSet<Register, 16> HardenedAddrRegs;
12691269

1270-
SmallDenseMap<unsigned, unsigned, 32> AddrRegToHardenedReg;
1270+
SmallDenseMap<Register, Register, 32> AddrRegToHardenedReg;
12711271

12721272
// Track the set of load-dependent registers through the basic block. Because
12731273
// the values of these registers have an existing data dependency on a loaded
@@ -1297,11 +1297,11 @@ void X86SpeculativeLoadHardeningPass::tracePredStateThroughBlocksAndHarden(
12971297
// FIXME: Do a more careful analysis of x86 to build a conservative
12981298
// model here.
12991299
if (llvm::any_of(MI.uses(), [&](MachineOperand &Op) {
1300-
return Op.isReg() && LoadDepRegs.test(Op.getReg());
1300+
return Op.isReg() && LoadDepRegs.test(Op.getReg().id());
13011301
}))
13021302
for (MachineOperand &Def : MI.defs())
13031303
if (Def.isReg())
1304-
LoadDepRegs.set(Def.getReg());
1304+
LoadDepRegs.set(Def.getReg().id());
13051305

13061306
// Both Intel and AMD are guiding that they will change the semantics of
13071307
// LFENCE to be a speculation barrier, so if we see an LFENCE, there is
@@ -1333,11 +1333,11 @@ void X86SpeculativeLoadHardeningPass::tracePredStateThroughBlocksAndHarden(
13331333

13341334
// If we have at least one (non-frame-index, non-RIP) register operand,
13351335
// and neither operand is load-dependent, we need to check the load.
1336-
unsigned BaseReg = 0, IndexReg = 0;
1336+
Register BaseReg, IndexReg;
13371337
if (!BaseMO.isFI() && BaseMO.getReg() != X86::RIP &&
1338-
BaseMO.getReg() != X86::NoRegister)
1338+
BaseMO.getReg().isValid())
13391339
BaseReg = BaseMO.getReg();
1340-
if (IndexMO.getReg() != X86::NoRegister)
1340+
if (IndexMO.getReg().isValid())
13411341
IndexReg = IndexMO.getReg();
13421342

13431343
if (!BaseReg && !IndexReg)
@@ -1348,8 +1348,8 @@ void X86SpeculativeLoadHardeningPass::tracePredStateThroughBlocksAndHarden(
13481348
// needn't check it.
13491349
// FIXME: Is this true in the case where we are hardening loads after
13501350
// they complete? Unclear, need to investigate.
1351-
if ((BaseReg && LoadDepRegs.test(BaseReg)) ||
1352-
(IndexReg && LoadDepRegs.test(IndexReg)))
1351+
if ((BaseReg && LoadDepRegs.test(BaseReg.id())) ||
1352+
(IndexReg && LoadDepRegs.test(IndexReg.id())))
13531353
continue;
13541354

13551355
// If post-load hardening is enabled, this load is compatible with
@@ -1378,7 +1378,7 @@ void X86SpeculativeLoadHardeningPass::tracePredStateThroughBlocksAndHarden(
13781378

13791379
for (MachineOperand &Def : MI.defs())
13801380
if (Def.isReg())
1381-
LoadDepRegs.set(Def.getReg());
1381+
LoadDepRegs.set(Def.getReg().id());
13821382
}
13831383

13841384
// Now re-walk the instructions in the basic block, and apply whichever
@@ -1433,7 +1433,7 @@ void X86SpeculativeLoadHardeningPass::tracePredStateThroughBlocksAndHarden(
14331433
}
14341434
}
14351435

1436-
unsigned HardenedReg = hardenPostLoad(MI);
1436+
Register HardenedReg = hardenPostLoad(MI);
14371437

14381438
// Mark the resulting hardened register as such so we don't re-harden.
14391439
AddrRegToHardenedReg[HardenedReg] = HardenedReg;
@@ -1489,7 +1489,7 @@ void X86SpeculativeLoadHardeningPass::tracePredStateThroughBlocksAndHarden(
14891489
/// Note that LLVM can only lower very simple patterns of saved and restored
14901490
/// EFLAGS registers. The restore should always be within the same basic block
14911491
/// as the save so that no PHI nodes are inserted.
1492-
unsigned X86SpeculativeLoadHardeningPass::saveEFLAGS(
1492+
Register X86SpeculativeLoadHardeningPass::saveEFLAGS(
14931493
MachineBasicBlock &MBB, MachineBasicBlock::iterator InsertPt,
14941494
const DebugLoc &Loc) {
14951495
// FIXME: Hard coding this to a 32-bit register class seems weird, but matches
@@ -1520,7 +1520,7 @@ void X86SpeculativeLoadHardeningPass::restoreEFLAGS(
15201520
/// across normal stack adjustments.
15211521
void X86SpeculativeLoadHardeningPass::mergePredStateIntoSP(
15221522
MachineBasicBlock &MBB, MachineBasicBlock::iterator InsertPt,
1523-
const DebugLoc &Loc, unsigned PredStateReg) {
1523+
const DebugLoc &Loc, Register PredStateReg) {
15241524
Register TmpReg = MRI->createVirtualRegister(PS->RC);
15251525
// FIXME: This hard codes a shift distance based on the number of bits needed
15261526
// to stay canonical on 64-bit. We should compute this somehow and support
@@ -1538,7 +1538,7 @@ void X86SpeculativeLoadHardeningPass::mergePredStateIntoSP(
15381538
}
15391539

15401540
/// Extracts the predicate state stored in the high bits of the stack pointer.
1541-
unsigned X86SpeculativeLoadHardeningPass::extractPredStateFromSP(
1541+
Register X86SpeculativeLoadHardeningPass::extractPredStateFromSP(
15421542
MachineBasicBlock &MBB, MachineBasicBlock::iterator InsertPt,
15431543
const DebugLoc &Loc) {
15441544
Register PredStateReg = MRI->createVirtualRegister(PS->RC);
@@ -1561,7 +1561,7 @@ unsigned X86SpeculativeLoadHardeningPass::extractPredStateFromSP(
15611561

15621562
void X86SpeculativeLoadHardeningPass::hardenLoadAddr(
15631563
MachineInstr &MI, MachineOperand &BaseMO, MachineOperand &IndexMO,
1564-
SmallDenseMap<unsigned, unsigned, 32> &AddrRegToHardenedReg) {
1564+
SmallDenseMap<Register, Register, 32> &AddrRegToHardenedReg) {
15651565
MachineBasicBlock &MBB = *MI.getParent();
15661566
const DebugLoc &Loc = MI.getDebugLoc();
15671567

@@ -1640,7 +1640,7 @@ void X86SpeculativeLoadHardeningPass::hardenLoadAddr(
16401640
// If EFLAGS are live and we don't have access to instructions that avoid
16411641
// clobbering EFLAGS we need to save and restore them. This in turn makes
16421642
// the EFLAGS no longer live.
1643-
unsigned FlagsReg = 0;
1643+
Register FlagsReg;
16441644
if (EFLAGSLive && !Subtarget->hasBMI2()) {
16451645
EFLAGSLive = false;
16461646
FlagsReg = saveEFLAGS(MBB, InsertPt, Loc);
@@ -1898,7 +1898,7 @@ bool X86SpeculativeLoadHardeningPass::canHardenRegister(Register Reg) {
18981898
///
18991899
/// The new, hardened virtual register is returned. It will have the same
19001900
/// register class as `Reg`.
1901-
unsigned X86SpeculativeLoadHardeningPass::hardenValueInRegister(
1901+
Register X86SpeculativeLoadHardeningPass::hardenValueInRegister(
19021902
Register Reg, MachineBasicBlock &MBB, MachineBasicBlock::iterator InsertPt,
19031903
const DebugLoc &Loc) {
19041904
assert(canHardenRegister(Reg) && "Cannot harden this register!");
@@ -1919,7 +1919,7 @@ unsigned X86SpeculativeLoadHardeningPass::hardenValueInRegister(
19191919
StateReg = NarrowStateReg;
19201920
}
19211921

1922-
unsigned FlagsReg = 0;
1922+
Register FlagsReg;
19231923
if (isEFLAGSLive(MBB, InsertPt, *TRI))
19241924
FlagsReg = saveEFLAGS(MBB, InsertPt, Loc);
19251925

@@ -1948,7 +1948,7 @@ unsigned X86SpeculativeLoadHardeningPass::hardenValueInRegister(
19481948
/// execution and coercing them to one is sufficient.
19491949
///
19501950
/// Returns the newly hardened register.
1951-
unsigned X86SpeculativeLoadHardeningPass::hardenPostLoad(MachineInstr &MI) {
1951+
Register X86SpeculativeLoadHardeningPass::hardenPostLoad(MachineInstr &MI) {
19521952
MachineBasicBlock &MBB = *MI.getParent();
19531953
const DebugLoc &Loc = MI.getDebugLoc();
19541954

@@ -1965,7 +1965,7 @@ unsigned X86SpeculativeLoadHardeningPass::hardenPostLoad(MachineInstr &MI) {
19651965
// Now harden this register's value, getting a hardened reg that is safe to
19661966
// use. Note that we insert the instructions to compute this *after* the
19671967
// defining instruction, not before it.
1968-
unsigned HardenedReg = hardenValueInRegister(
1968+
Register HardenedReg = hardenValueInRegister(
19691969
UnhardenedReg, MBB, std::next(MI.getIterator()), Loc);
19701970

19711971
// Finally, replace the old register (which now only has the uses of the
@@ -2089,7 +2089,7 @@ void X86SpeculativeLoadHardeningPass::tracePredStateThroughCall(
20892089
MI.setPostInstrSymbol(MF, RetSymbol);
20902090

20912091
const TargetRegisterClass *AddrRC = &X86::GR64RegClass;
2092-
unsigned ExpectedRetAddrReg = 0;
2092+
Register ExpectedRetAddrReg;
20932093

20942094
// If we have no red zones or if the function returns twice (possibly without
20952095
// using the `ret` instruction) like setjmp, we need to save the expected
@@ -2148,7 +2148,7 @@ void X86SpeculativeLoadHardeningPass::tracePredStateThroughCall(
21482148
}
21492149

21502150
// Now we extract the callee's predicate state from the stack pointer.
2151-
unsigned NewStateReg = extractPredStateFromSP(MBB, InsertPt, Loc);
2151+
Register NewStateReg = extractPredStateFromSP(MBB, InsertPt, Loc);
21522152

21532153
// Test the expected return address against our actual address. If we can
21542154
// form this basic block's address as an immediate, this is easy. Otherwise
@@ -2207,7 +2207,7 @@ void X86SpeculativeLoadHardeningPass::tracePredStateThroughCall(
22072207
/// not already flagged and add them.
22082208
void X86SpeculativeLoadHardeningPass::hardenIndirectCallOrJumpInstr(
22092209
MachineInstr &MI,
2210-
SmallDenseMap<unsigned, unsigned, 32> &AddrRegToHardenedReg) {
2210+
SmallDenseMap<Register, Register, 32> &AddrRegToHardenedReg) {
22112211
switch (MI.getOpcode()) {
22122212
case X86::FARCALL16m:
22132213
case X86::FARCALL32m:
@@ -2240,7 +2240,7 @@ void X86SpeculativeLoadHardeningPass::hardenIndirectCallOrJumpInstr(
22402240
// Try to lookup a hardened version of this register. We retain a reference
22412241
// here as we want to update the map to track any newly computed hardened
22422242
// register.
2243-
unsigned &HardenedTargetReg = AddrRegToHardenedReg[OldTargetReg];
2243+
Register &HardenedTargetReg = AddrRegToHardenedReg[OldTargetReg];
22442244

22452245
// If we don't have a hardened register yet, compute one. Otherwise, just use
22462246
// the already hardened register.

0 commit comments

Comments
 (0)