Lines Matching refs:FP

136       : FP(P), TRI(T) {}  in PrintFP()
138 const FlowPattern &FP; member
145 OS << "{ SplitB:" << PrintMB(P.FP.SplitB) in operator <<()
146 << ", PredR:" << printReg(P.FP.PredR, &P.TRI) in operator <<()
147 << ", TrueB:" << PrintMB(P.FP.TrueB) in operator <<()
148 << ", FalseB:" << PrintMB(P.FP.FalseB) in operator <<()
149 << ", JoinB:" << PrintMB(P.FP.JoinB) << " }"; in operator <<()
178 FlowPattern &FP);
186 bool isValid(const FlowPattern &FP) const;
189 const FlowPattern &FP) const;
190 bool isProfitable(const FlowPattern &FP) const;
205 void updatePhiNodes(MachineBasicBlock *WhereB, const FlowPattern &FP);
206 void convert(const FlowPattern &FP);
211 void simplifyFlowGraph(const FlowPattern &FP);
239 MachineLoop *L, FlowPattern &FP) { in matchFlowPattern() argument
334 FP = FlowPattern(B, PredR, TB, FB, JB); in matchFlowPattern()
335 LLVM_DEBUG(dbgs() << "Detected " << PrintFP(FP, *TRI) << "\n"); in matchFlowPattern()
417 bool HexagonEarlyIfConversion::isValid(const FlowPattern &FP) const { in isValid()
418 if (hasEHLabel(FP.SplitB)) // KLUDGE: see function definition in isValid()
420 if (FP.TrueB && !isValidCandidate(FP.TrueB)) in isValid()
422 if (FP.FalseB && !isValidCandidate(FP.FalseB)) in isValid()
434 if (FP.JoinB) { in isValid()
435 const MachineBasicBlock &B = *FP.JoinB; in isValid()
450 const FlowPattern &FP) const { in computePhiCost()
465 if (BB == FP.SplitB || BB == FP.TrueB || BB == FP.FalseB) in computePhiCost()
505 bool HexagonEarlyIfConversion::isProfitable(const FlowPattern &FP) const { in isProfitable()
508 if (MBPI && FP.TrueB && !FP.FalseB && in isProfitable()
509 (MBPI->getEdgeProbability(FP.SplitB, FP.TrueB) < JumpProb || in isProfitable()
510 MBPI->getEdgeProbability(FP.SplitB, FP.TrueB) > Prob)) in isProfitable()
513 if (MBPI && !FP.TrueB && FP.FalseB && in isProfitable()
514 (MBPI->getEdgeProbability(FP.SplitB, FP.FalseB) < JumpProb || in isProfitable()
515 MBPI->getEdgeProbability(FP.SplitB, FP.FalseB) > Prob)) in isProfitable()
518 if (FP.TrueB && FP.FalseB) { in isProfitable()
521 if (MBPI->getEdgeProbability(FP.SplitB, FP.TrueB) > Prob) in isProfitable()
523 if (MBPI->getEdgeProbability(FP.SplitB, FP.FalseB) > Prob) in isProfitable()
529 MachineBasicBlock *TSB = *FP.TrueB->succ_begin(); in isProfitable()
530 MachineBasicBlock *FSB = *FP.FalseB->succ_begin(); in isProfitable()
554 unsigned TotalIn = TotalCount(FP.TrueB, Spare) + TotalCount(FP.FalseB, Spare); in isProfitable()
568 unsigned PredDefs = countPredicateDefs(FP.SplitB); in isProfitable()
569 if (FP.JoinB) { in isProfitable()
570 TotalPh = computePhiCost(FP.JoinB, FP); in isProfitable()
571 PredDefs += countPredicateDefs(FP.JoinB); in isProfitable()
573 if (FP.TrueB && !FP.TrueB->succ_empty()) { in isProfitable()
574 MachineBasicBlock *SB = *FP.TrueB->succ_begin(); in isProfitable()
575 TotalPh += computePhiCost(SB, FP); in isProfitable()
578 if (FP.FalseB && !FP.FalseB->succ_empty()) { in isProfitable()
579 MachineBasicBlock *SB = *FP.FalseB->succ_begin(); in isProfitable()
580 TotalPh += computePhiCost(SB, FP); in isProfitable()
626 FlowPattern FP; in visitBlock() local
627 if (!matchFlowPattern(B, L, FP)) in visitBlock()
630 if (!isValid(FP)) { in visitBlock()
634 if (!isProfitable(FP)) { in visitBlock()
639 convert(FP); in visitBlock()
640 simplifyFlowGraph(FP); in visitBlock()
811 const FlowPattern &FP) { in updatePhiNodes() argument
821 if (BO.getMBB() == FP.SplitB) in updatePhiNodes()
823 else if (BO.getMBB() == FP.TrueB) in updatePhiNodes()
825 else if (BO.getMBB() == FP.FalseB) in updatePhiNodes()
843 MuxR = buildMux(FP.SplitB, FP.SplitB->getFirstTerminator(), RC, in updatePhiNodes()
844 FP.PredR, TR, TSR, FR, FSR); in updatePhiNodes()
855 PN->addOperand(MachineOperand::CreateMBB(FP.SplitB)); in updatePhiNodes()
859 void HexagonEarlyIfConversion::convert(const FlowPattern &FP) { in convert() argument
861 MachineBasicBlock::iterator OldTI = FP.SplitB->getFirstTerminator(); in convert()
862 assert(OldTI != FP.SplitB->end()); in convert()
865 if (FP.TrueB) { in convert()
866 TSB = *FP.TrueB->succ_begin(); in convert()
867 predicateBlockNB(FP.SplitB, OldTI, FP.TrueB, FP.PredR, true); in convert()
869 if (FP.FalseB) { in convert()
870 FSB = *FP.FalseB->succ_begin(); in convert()
871 MachineBasicBlock::iterator At = FP.SplitB->getFirstTerminator(); in convert()
872 predicateBlockNB(FP.SplitB, At, FP.FalseB, FP.PredR, false); in convert()
879 FP.SplitB->erase(OldTI, FP.SplitB->end()); in convert()
880 while (!FP.SplitB->succ_empty()) { in convert()
881 MachineBasicBlock *T = *FP.SplitB->succ_begin(); in convert()
896 if (T != FP.TrueB && T != FP.FalseB) { in convert()
900 FP.SplitB->removeSuccessor(FP.SplitB->succ_begin()); in convert()
907 if (FP.JoinB) { in convert()
908 assert(!SSB || SSB == FP.JoinB); in convert()
909 BuildMI(*FP.SplitB, FP.SplitB->end(), DL, HII->get(Hexagon::J2_jump)) in convert()
910 .addMBB(FP.JoinB); in convert()
911 FP.SplitB->addSuccessor(FP.JoinB); in convert()
915 BuildMI(*FP.SplitB, FP.SplitB->end(), DL, HII->get(Hexagon::J2_jumpt)) in convert()
916 .addReg(FP.PredR) in convert()
918 FP.SplitB->addSuccessor(TSB); in convert()
924 MachineInstrBuilder MIB = BuildMI(*FP.SplitB, FP.SplitB->end(), DL, D); in convert()
926 MIB.addReg(FP.PredR); in convert()
928 FP.SplitB->addSuccessor(FSB); in convert()
935 BuildMI(*FP.SplitB, FP.SplitB->end(), DL, HII->get(Hexagon::J2_jump)) in convert()
937 FP.SplitB->addSuccessor(SSB); in convert()
943 if (FP.JoinB) { in convert()
944 updatePhiNodes(FP.JoinB, FP); in convert()
947 updatePhiNodes(TSB, FP); in convert()
949 updatePhiNodes(FSB, FP); in convert()
1026 void HexagonEarlyIfConversion::simplifyFlowGraph(const FlowPattern &FP) { in simplifyFlowGraph() argument
1027 MachineBasicBlock *OldLayoutSuccessor = FP.SplitB->getNextNode(); in simplifyFlowGraph()
1028 if (FP.TrueB) in simplifyFlowGraph()
1029 removeBlock(FP.TrueB); in simplifyFlowGraph()
1030 if (FP.FalseB) in simplifyFlowGraph()
1031 removeBlock(FP.FalseB); in simplifyFlowGraph()
1033 FP.SplitB->updateTerminator(OldLayoutSuccessor); in simplifyFlowGraph()
1034 if (FP.SplitB->succ_size() != 1) in simplifyFlowGraph()
1037 MachineBasicBlock *SB = *FP.SplitB->succ_begin(); in simplifyFlowGraph()
1047 mergeBlocks(FP.SplitB, SB); in simplifyFlowGraph()