Lines Matching refs:MBB
48 bool expandMBB(MachineBasicBlock &MBB);
49 bool expandMI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
51 bool expandAtomicBinOp(MachineBasicBlock &MBB,
55 bool expandAtomicMinMaxOp(MachineBasicBlock &MBB,
59 bool expandAtomicCmpXchg(MachineBasicBlock &MBB,
65 for (auto &MBB : MF)
66 for (auto &MI : MBB)
84 for (auto &MBB : MF)
85 Modified |= expandMBB(MBB);
94 bool RISCVExpandAtomicPseudo::expandMBB(MachineBasicBlock &MBB) {
97 MachineBasicBlock::iterator MBBI = MBB.begin(), E = MBB.end();
100 Modified |= expandMI(MBB, MBBI, NMBBI);
107 bool RISCVExpandAtomicPseudo::expandMI(MachineBasicBlock &MBB,
115 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Nand, false, 32,
118 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Nand, false, 64,
121 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Xchg, true, 32,
124 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Add, true, 32, NextMBBI);
126 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Sub, true, 32, NextMBBI);
128 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Nand, true, 32,
131 return expandAtomicMinMaxOp(MBB, MBBI, AtomicRMWInst::Max, true, 32,
134 return expandAtomicMinMaxOp(MBB, MBBI, AtomicRMWInst::Min, true, 32,
137 return expandAtomicMinMaxOp(MBB, MBBI, AtomicRMWInst::UMax, true, 32,
140 return expandAtomicMinMaxOp(MBB, MBBI, AtomicRMWInst::UMin, true, 32,
143 return expandAtomicCmpXchg(MBB, MBBI, false, 32, NextMBBI);
145 return expandAtomicCmpXchg(MBB, MBBI, false, 64, NextMBBI);
147 return expandAtomicCmpXchg(MBB, MBBI, true, 32, NextMBBI);
301 MachineBasicBlock *MBB, Register DestReg,
311 BuildMI(MBB, DL, TII->get(RISCV::XOR), ScratchReg)
314 BuildMI(MBB, DL, TII->get(RISCV::AND), ScratchReg)
317 BuildMI(MBB, DL, TII->get(RISCV::XOR), DestReg)
389 MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
395 MachineFunction *MF = MBB.getParent();
396 auto LoopMBB = MF->CreateMachineBasicBlock(MBB.getBasicBlock());
397 auto DoneMBB = MF->CreateMachineBasicBlock(MBB.getBasicBlock());
400 MF->insert(++MBB.getIterator(), LoopMBB);
406 DoneMBB->splice(DoneMBB->end(), &MBB, MI, MBB.end());
407 DoneMBB->transferSuccessors(&MBB);
408 MBB.addSuccessor(LoopMBB);
411 doAtomicBinOpExpansion(TII, MI, DL, &MBB, LoopMBB, DoneMBB, BinOp, Width,
414 doMaskedAtomicBinOpExpansion(TII, MI, DL, &MBB, LoopMBB, DoneMBB, BinOp,
417 NextMBBI = MBB.end();
428 MachineBasicBlock *MBB, Register ValReg,
430 BuildMI(MBB, DL, TII->get(RISCV::SLL), ValReg)
433 BuildMI(MBB, DL, TII->get(RISCV::SRA), ValReg)
439 MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
448 MachineFunction *MF = MBB.getParent();
449 auto LoopHeadMBB = MF->CreateMachineBasicBlock(MBB.getBasicBlock());
450 auto LoopIfBodyMBB = MF->CreateMachineBasicBlock(MBB.getBasicBlock());
451 auto LoopTailMBB = MF->CreateMachineBasicBlock(MBB.getBasicBlock());
452 auto DoneMBB = MF->CreateMachineBasicBlock(MBB.getBasicBlock());
455 MF->insert(++MBB.getIterator(), LoopHeadMBB);
466 DoneMBB->splice(DoneMBB->end(), &MBB, MI, MBB.end());
467 DoneMBB->transferSuccessors(&MBB);
468 MBB.addSuccessor(LoopHeadMBB);
547 NextMBBI = MBB.end();
569 // loop head, and removes that block as a successor to MBB.
570 bool tryToFoldBNEOnCmpXchgResult(MachineBasicBlock &MBB,
576 auto E = MBB.end();
619 MBB.removeSuccessor(LoopHeadBNETarget);
626 MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, bool IsMasked,
630 MachineFunction *MF = MBB.getParent();
631 auto LoopHeadMBB = MF->CreateMachineBasicBlock(MBB.getBasicBlock());
632 auto LoopTailMBB = MF->CreateMachineBasicBlock(MBB.getBasicBlock());
633 auto DoneMBB = MF->CreateMachineBasicBlock(MBB.getBasicBlock());
643 tryToFoldBNEOnCmpXchgResult(MBB, std::next(MBBI), DestReg, CmpValReg, MaskReg,
647 MF->insert(++MBB.getIterator(), LoopHeadMBB);
656 DoneMBB->splice(DoneMBB->end(), &MBB, MI, MBB.end());
657 DoneMBB->transferSuccessors(&MBB);
658 MBB.addSuccessor(LoopHeadMBB);
720 NextMBBI = MBB.end();