Lines Matching refs:MBB
150 bool instrumentControlFlow(MachineBasicBlock &MBB,
152 bool endsWithCondControlFlow(MachineBasicBlock &MBB, MachineBasicBlock *&TBB,
157 void insertSPToRegTaintPropagation(MachineBasicBlock &MBB,
159 void insertRegToSPTaintPropagation(MachineBasicBlock &MBB,
162 void insertFullSpeculationBarrier(MachineBasicBlock &MBB,
166 bool slhLoads(MachineBasicBlock &MBB);
167 bool makeGPRSpeculationSafe(MachineBasicBlock &MBB,
170 bool lowerSpeculationSafeValuePseudos(MachineBasicBlock &MBB,
172 bool expandSpeculationSafeValue(MachineBasicBlock &MBB,
175 bool insertCSDB(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
187 MachineBasicBlock &MBB, MachineBasicBlock *&TBB, MachineBasicBlock *&FBB,
190 if (TII->analyzeBranch(MBB, TBB, FBB, analyzeBranchCondCode, false))
202 FBB = MBB.getFallThrough();
210 assert(MBB.succ_size() == 2);
218 MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
221 BuildMI(MBB, MBBI, DL, TII->get(AArch64::DSB)).addImm(0xf);
222 BuildMI(MBB, MBBI, DL, TII->get(AArch64::ISB)).addImm(0xf);
241 MachineBasicBlock &MBB, bool &UsesFullSpeculationBarrier) {
242 LLVM_DEBUG(dbgs() << "Instrument control flow tracking on MBB: " << MBB);
249 if (!endsWithCondControlFlow(MBB, TBB, FBB, CondCode)) {
258 MachineBasicBlock *SplitEdgeTBB = MBB.SplitCriticalEdge(TBB, *this);
259 MachineBasicBlock *SplitEdgeFBB = MBB.SplitCriticalEdge(FBB, *this);
265 if (MBB.instr_end() != MBB.instr_begin())
266 DL = (--MBB.instr_end())->getDebugLoc();
289 RS.enterBasicBlockEnd(MBB);
291 for (MachineBasicBlock::iterator I = MBB.end(); I != MBB.begin(); ) {
299 if (I == MBB.begin())
300 RS.enterBasicBlock(MBB);
327 insertFullSpeculationBarrier(MBB, MBB.begin(),
328 (MBB.begin())->getDebugLoc());
339 insertRegToSPTaintPropagation(MBB, MI_Reg.first, MI_Reg.second);
351 MBB, std::next((MachineBasicBlock::iterator)MI_Reg.first));
353 insertRegToSPTaintPropagation(MBB, MI_Reg.first, MI_Reg.second);
361 MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI) const {
366 insertFullSpeculationBarrier(MBB, MBBI, DebugLoc());
371 BuildMI(MBB, MBBI, DebugLoc(), TII->get(AArch64::SUBSXri))
377 BuildMI(MBB, MBBI, DebugLoc(), TII->get(AArch64::CSINVXr))
385 MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
394 BuildMI(MBB, MBBI, DebugLoc(), TII->get(AArch64::ADDXri))
400 BuildMI(MBB, MBBI, DebugLoc(), TII->get(AArch64::ANDXrs))
406 BuildMI(MBB, MBBI, DebugLoc(), TII->get(AArch64::ADDXri))
415 for (MachineBasicBlock &MBB : MF) {
416 for (MachineInstr &MI : MBB) {
433 MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, MachineInstr &MI,
452 BuildMI(MBB, MBBI, MI.getDebugLoc(),
461 bool AArch64SpeculationHardening::slhLoads(MachineBasicBlock &MBB) {
464 LLVM_DEBUG(dbgs() << "slhLoads running on MBB: " << MBB);
468 MachineBasicBlock::iterator MBBI = MBB.begin(), E = MBB.end();
520 Modified |= makeGPRSpeculationSafe(MBB, NextMBBI, MI, Def.getReg());
541 Modified |= makeGPRSpeculationSafe(MBB, MBBI, MI, Reg);
550 MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
577 BuildMI(MBB, MBBI, MI.getDebugLoc(),
591 bool AArch64SpeculationHardening::insertCSDB(MachineBasicBlock &MBB,
598 BuildMI(MBB, MBBI, DL, TII->get(AArch64::HINT)).addImm(0x14);
604 MachineBasicBlock &MBB, bool UsesFullSpeculationBarrier) {
619 MachineBasicBlock::iterator MBBI = MBB.begin(), E = MBB.end();
640 Modified |= insertCSDB(MBB, MBBI, DL);
643 expandSpeculationSafeValue(MBB, MBBI, UsesFullSpeculationBarrier);
649 Modified |= insertCSDB(MBB, MBBI, DL);
673 for (auto &MBB : MF)
674 Modified |= slhLoads(MBB);
691 for (auto &MBB : MF) {
693 Modified |= instrumentControlFlow(MBB, UsesFullSpeculationBarrier);
695 lowerSpeculationSafeValuePseudos(MBB, UsesFullSpeculationBarrier);