summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2018-07-24 00:35:36 +0000
committerChandler Carruth <chandlerc@gmail.com>2018-07-24 00:35:36 +0000
commit66fbbbca602853c4c7a8d23556f393acf6c69e7b (patch)
tree6fcca4bd4ab0a1336f3cda1948564e40707a5364 /llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp
parentc14d513e0d185a5fb3bc449b271dc402df14dabf (diff)
downloadbcm5719-llvm-66fbbbca602853c4c7a8d23556f393acf6c69e7b.tar.gz
bcm5719-llvm-66fbbbca602853c4c7a8d23556f393acf6c69e7b.zip
[x86/SLH] Simplify the code for hardening a loaded value. NFC.
This is in preparation for extracting this into a re-usable utility in this code. llvm-svn: 337785
Diffstat (limited to 'llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp')
-rw-r--r--llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp35
1 files changed, 15 insertions, 20 deletions
diff --git a/llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp b/llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp
index 93dcf95bebd..c2453cef496 100644
--- a/llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp
+++ b/llvm/lib/Target/X86/X86SpeculativeLoadHardening.cpp
@@ -1884,35 +1884,30 @@ void X86SpeculativeLoadHardeningPass::hardenPostLoad(MachineInstr &MI) {
auto *DefRC = MRI->getRegClass(OldDefReg);
int DefRegBytes = TRI->getRegSizeInBits(*DefRC) / 8;
- unsigned OrOpCodes[] = {X86::OR8rr, X86::OR16rr, X86::OR32rr, X86::OR64rr};
- unsigned OrOpCode = OrOpCodes[Log2_32(DefRegBytes)];
-
- unsigned SubRegImms[] = {X86::sub_8bit, X86::sub_16bit, X86::sub_32bit};
-
- auto GetStateRegInRC = [&](const TargetRegisterClass &RC) {
- unsigned StateReg = PS->SSA.GetValueAtEndOfBlock(&MBB);
+ unsigned StateReg = PS->SSA.GetValueAtEndOfBlock(&MBB);
- int Bytes = TRI->getRegSizeInBits(RC) / 8;
- // FIXME: Need to teach this about 32-bit mode.
- if (Bytes != 8) {
- unsigned SubRegImm = SubRegImms[Log2_32(Bytes)];
- unsigned NarrowStateReg = MRI->createVirtualRegister(&RC);
- BuildMI(MBB, MI.getIterator(), Loc, TII->get(TargetOpcode::COPY),
- NarrowStateReg)
- .addReg(StateReg, 0, SubRegImm);
- StateReg = NarrowStateReg;
- }
- return StateReg;
- };
+ // FIXME: Need to teach this about 32-bit mode.
+ if (DefRegBytes != 8) {
+ unsigned SubRegImms[] = {X86::sub_8bit, X86::sub_16bit, X86::sub_32bit};
+ unsigned SubRegImm = SubRegImms[Log2_32(DefRegBytes)];
+ unsigned NarrowStateReg = MRI->createVirtualRegister(DefRC);
+ BuildMI(MBB, MI.getIterator(), Loc, TII->get(TargetOpcode::COPY),
+ NarrowStateReg)
+ .addReg(StateReg, 0, SubRegImm);
+ StateReg = NarrowStateReg;
+ }
auto InsertPt = std::next(MI.getIterator());
+
unsigned FlagsReg = 0;
if (isEFLAGSLive(MBB, InsertPt, *TRI))
FlagsReg = saveEFLAGS(MBB, InsertPt, Loc);
- unsigned StateReg = GetStateRegInRC(*DefRC);
unsigned NewDefReg = MRI->createVirtualRegister(DefRC);
DefOp.setReg(NewDefReg);
+
+ unsigned OrOpCodes[] = {X86::OR8rr, X86::OR16rr, X86::OR32rr, X86::OR64rr};
+ unsigned OrOpCode = OrOpCodes[Log2_32(DefRegBytes)];
auto OrI = BuildMI(MBB, InsertPt, Loc, TII->get(OrOpCode), OldDefReg)
.addReg(StateReg)
.addReg(NewDefReg);
OpenPOWER on IntegriCloud