From: Chandler Carruth Date: Tue, 24 Jul 2018 00:35:36 +0000 (+0000) Subject: [x86/SLH] Simplify the code for hardening a loaded value. NFC. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ae41ebb3a690361a3aac5a7eb996241183cf674f;p=llvm [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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337785 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86SpeculativeLoadHardening.cpp b/lib/Target/X86/X86SpeculativeLoadHardening.cpp index 93dcf95bebd..c2453cef496 100644 --- a/lib/Target/X86/X86SpeculativeLoadHardening.cpp +++ b/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);