Lines Matching refs:MachineBasicBlock
98 PrintMB(const MachineBasicBlock *B) : MB(B) {}
99 const MachineBasicBlock *MB;
109 FlowPattern(MachineBasicBlock *B, unsigned PR, MachineBasicBlock *TB,
110 MachineBasicBlock *FB, MachineBasicBlock *JB)
113 MachineBasicBlock *SplitB;
114 MachineBasicBlock *TrueB, *FalseB, *JoinB;
155 typedef DenseSet<MachineBasicBlock*> BlockSetType;
157 bool isPreheader(const MachineBasicBlock *B) const;
158 bool matchFlowPattern(MachineBasicBlock *B, MachineLoop *L,
160 bool visitBlock(MachineBasicBlock *B, MachineLoop *L);
163 bool hasEHLabel(const MachineBasicBlock *B) const;
164 bool hasUncondBranch(const MachineBasicBlock *B) const;
165 bool isValidCandidate(const MachineBasicBlock *B) const;
168 unsigned countPredicateDefs(const MachineBasicBlock *B) const;
169 unsigned computePhiCost(MachineBasicBlock *B) const;
175 void predicateInstr(MachineBasicBlock *ToB, MachineBasicBlock::iterator At,
177 void predicateBlockNB(MachineBasicBlock *ToB,
178 MachineBasicBlock::iterator At, MachineBasicBlock *FromB,
181 void updatePhiNodes(MachineBasicBlock *WhereB, const FlowPattern &FP);
184 void removeBlock(MachineBasicBlock *B);
185 void eliminatePhis(MachineBasicBlock *B);
186 void replacePhiEdges(MachineBasicBlock *OldB, MachineBasicBlock *NewB);
187 void mergeBlocks(MachineBasicBlock *PredB, MachineBasicBlock *SuccB);
206 bool HexagonEarlyIfConversion::isPreheader(const MachineBasicBlock *B) const {
209 MachineBasicBlock *SB = *B->succ_begin();
215 bool HexagonEarlyIfConversion::matchFlowPattern(MachineBasicBlock *B,
222 MachineBasicBlock *TB = 0, *FB = 0;
223 MachineBasicBlock::const_iterator T1I = B->getFirstTerminator();
233 MachineBasicBlock *NextB = (NextBI != MFN->end()) ? &*NextBI : 0;
235 MachineBasicBlock *T1B = T1I->getOperand(1).getMBB();
236 MachineBasicBlock::const_iterator T2I = std::next(T1I);
239 MachineBasicBlock *T2B = (T2I == B->end()) ? NextB
278 MachineBasicBlock *TSB = (TNS > 0) ? *TB->succ_begin() : 0;
279 MachineBasicBlock *FSB = (FNS > 0) ? *FB->succ_begin() : 0;
280 MachineBasicBlock *JB = 0;
316 bool HexagonEarlyIfConversion::hasEHLabel(const MachineBasicBlock *B) const {
326 bool HexagonEarlyIfConversion::hasUncondBranch(const MachineBasicBlock *B)
328 MachineBasicBlock::const_iterator I = B->getFirstTerminator(), E = B->end();
338 bool HexagonEarlyIfConversion::isValidCandidate(const MachineBasicBlock *B)
414 const MachineBasicBlock &B = *FP.JoinB;
430 unsigned HexagonEarlyIfConversion::computePhiCost(MachineBasicBlock *B) const {
436 MachineBasicBlock::const_iterator I, E = B->getFirstNonPHI();
456 const MachineBasicBlock *B) const {
487 MachineBasicBlock *TSB = *FP.TrueB->succ_begin();
488 MachineBasicBlock *FSB = *FP.FalseB->succ_begin();
530 MachineBasicBlock *SB = *FP.TrueB->succ_begin();
535 MachineBasicBlock *SB = *FP.FalseB->succ_begin();
553 bool HexagonEarlyIfConversion::visitBlock(MachineBasicBlock *B,
570 MachineBasicBlock *SB = (*I)->getBlock();
600 MachineBasicBlock *HB = L ? L->getHeader() : 0;
609 MachineBasicBlock *EntryB = GraphTraits<MachineFunction*>::getEntryNode(MFN);
708 void HexagonEarlyIfConversion::predicateInstr(MachineBasicBlock *ToB,
709 MachineBasicBlock::iterator At, MachineInstr *MI,
737 MachineBasicBlock *TB = MI->getOperand(0).getMBB();
757 void HexagonEarlyIfConversion::predicateBlockNB(MachineBasicBlock *ToB,
758 MachineBasicBlock::iterator At, MachineBasicBlock *FromB,
761 MachineBasicBlock::iterator End = FromB->getFirstTerminator();
762 MachineBasicBlock::iterator I, NextI;
775 void HexagonEarlyIfConversion::updatePhiNodes(MachineBasicBlock *WhereB,
809 MachineBasicBlock::iterator MuxAt = FP.SplitB->getFirstTerminator();
826 MachineBasicBlock *TSB = 0, *FSB = 0;
827 MachineBasicBlock::iterator OldTI = FP.SplitB->getFirstTerminator();
837 MachineBasicBlock::iterator At = FP.SplitB->getFirstTerminator();
844 MachineBasicBlock *SSB = 0;
847 MachineBasicBlock *T = *FP.SplitB->succ_begin();
921 void HexagonEarlyIfConversion::removeBlock(MachineBasicBlock *B) {
928 MachineBasicBlock *IDB = IDN->getBlock();
933 MachineBasicBlock *SB = (*I)->getBlock();
950 void HexagonEarlyIfConversion::eliminatePhis(MachineBasicBlock *B) {
952 MachineBasicBlock::iterator I, NextI, NonPHI = B->getFirstNonPHI();
977 void HexagonEarlyIfConversion::replacePhiEdges(MachineBasicBlock *OldB,
978 MachineBasicBlock *NewB) {
980 MachineBasicBlock *SB = *I;
981 MachineBasicBlock::iterator P, N = SB->getFirstNonPHI();
992 void HexagonEarlyIfConversion::mergeBlocks(MachineBasicBlock *PredB,
993 MachineBasicBlock *SuccB) {
1001 MachineBasicBlock::succ_iterator I, E = SuccB->succ_end();
1022 MachineBasicBlock *SB = *FP.SplitB->succ_begin();