Lines Matching defs:PHI
284 static unsigned getPHINumInputs(MachineInstr &PHI) {
285 assert(PHI.isPHI());
286 return (PHI.getNumOperands() - 1) / 2;
289 static MachineBasicBlock *getPHIPred(MachineInstr &PHI, unsigned Index) {
290 assert(PHI.isPHI());
291 return PHI.getOperand(Index * 2 + 2).getMBB();
294 static void setPhiPred(MachineInstr &PHI, unsigned Index,
296 PHI.getOperand(Index * 2 + 2).setMBB(NewPred);
299 static unsigned getPHISourceReg(MachineInstr &PHI, unsigned Index) {
300 assert(PHI.isPHI());
301 return PHI.getOperand(Index * 2 + 1).getReg();
304 static unsigned getPHIDestReg(MachineInstr &PHI) {
305 assert(PHI.isPHI());
306 return PHI.getOperand(0).getReg();
680 // If this is a source register to a PHI we are chaining, it
683 LLVM_DEBUG(dbgs() << "Add LiveOut (PHI): " << printReg(Reg, TRI) << "\n");
747 // If we have a successor with a PHI, source coming from this MBB we have to
752 MachineInstr &PHI = II;
753 int numPreds = getPHINumInputs(PHI);
755 if (getPHIPred(PHI, i) == MBB) {
756 unsigned PHIReg = getPHISourceReg(PHI, i);
823 MachineInstr &PHI = II;
824 int numPreds = getPHINumInputs(PHI);
826 if (Region->contains(getPHIPred(PHI, i))) {
827 unsigned PHIReg = getPHISourceReg(PHI, i);
1076 void getPHIRegionIndices(RegionMRT *Region, MachineInstr &PHI,
1078 void getPHIRegionIndices(LinearizedRegion *Region, MachineInstr &PHI,
1080 void getPHINonRegionIndices(LinearizedRegion *Region, MachineInstr &PHI,
1084 unsigned LDestReg, MachineInstr &PHI,
1087 unsigned storePHILinearizationInfo(MachineInstr &PHI,
1092 bool shrinkPHI(MachineInstr &PHI, SmallVector<unsigned, 2> &PHIIndices,
1095 bool shrinkPHI(MachineInstr &PHI, unsigned CombinedSourceReg,
1099 void replacePHI(MachineInstr &PHI, unsigned CombinedSourceReg,
1102 void replaceEntryPHI(MachineInstr &PHI, unsigned CombinedSourceReg,
1105 void replaceLiveOutRegs(MachineInstr &PHI,
1110 MachineInstr &PHI, LinearizedRegion *LRegion);
1115 MachineInstr &PHI);
1176 void splitLoopPHI(MachineInstr &PHI, MachineBasicBlock *Entry,
1323 RegionMRT *Region, MachineInstr &PHI,
1325 unsigned NumInputs = getPHINumInputs(PHI);
1327 MachineBasicBlock *Pred = getPHIPred(PHI, i);
1335 LinearizedRegion *Region, MachineInstr &PHI,
1337 unsigned NumInputs = getPHINumInputs(PHI);
1339 MachineBasicBlock *Pred = getPHIPred(PHI, i);
1347 LinearizedRegion *Region, MachineInstr &PHI,
1349 unsigned NumInputs = getPHINumInputs(PHI);
1351 MachineBasicBlock *Pred = getPHIPred(PHI, i);
1359 unsigned LDestReg, MachineInstr &PHI,
1363 PHIInfo.addSource(LDestReg, getPHISourceReg(PHI, i), getPHIPred(PHI, i));
1366 unsigned NumInputs = getPHINumInputs(PHI);
1368 PHIInfo.addSource(LDestReg, getPHISourceReg(PHI, i), getPHIPred(PHI, i));
1374 MachineInstr &PHI, SmallVector<unsigned, 2> *RegionIndices) {
1375 unsigned DestReg = getPHIDestReg(PHI);
1378 PHIInfo.addDest(LinearizeDestReg, PHI.getDebugLoc());
1379 storePHILinearizationInfoDest(LinearizeDestReg, PHI, RegionIndices);
1411 bool AMDGPUMachineCFGStructurizer::shrinkPHI(MachineInstr &PHI,
1414 return shrinkPHI(PHI, 0, nullptr, PHIIndices, ReplaceReg);
1417 bool AMDGPUMachineCFGStructurizer::shrinkPHI(MachineInstr &PHI,
1422 LLVM_DEBUG(dbgs() << "Shrink PHI: ");
1423 LLVM_DEBUG(PHI.dump());
1424 LLVM_DEBUG(dbgs() << " to " << printReg(getPHIDestReg(PHI), TRI)
1425 << " = PHI(");
1428 unsigned NumInputs = getPHINumInputs(PHI);
1443 *ReplaceReg = getPHISourceReg(PHI, SingleExternalEntryIndex);
1445 // that represents the shrunk PHI.
1448 MachineBasicBlock *MBB = PHI.getParent();
1450 BuildMI(*MBB, PHI, PHI.getDebugLoc(), TII->get(TargetOpcode::PHI),
1451 getPHIDestReg(PHI));
1463 unsigned SourceReg = getPHISourceReg(PHI, i);
1464 MachineBasicBlock *SourcePred = getPHIPred(PHI, i);
1472 PHI.eraseFromParent();
1477 MachineInstr &PHI, unsigned CombinedSourceReg, MachineBasicBlock *LastMerge,
1479 LLVM_DEBUG(dbgs() << "Replace PHI: ");
1480 LLVM_DEBUG(PHI.dump());
1481 LLVM_DEBUG(dbgs() << " with " << printReg(getPHIDestReg(PHI), TRI)
1482 << " = PHI(");
1485 unsigned NumInputs = getPHINumInputs(PHI);
1493 MachineBasicBlock *MBB = PHI.getParent();
1495 BuildMI(*MBB, PHI, PHI.getDebugLoc(), TII->get(TargetOpcode::PHI),
1496 getPHIDestReg(PHI));
1505 unsigned SourceReg = getPHISourceReg(PHI, i);
1506 MachineBasicBlock *SourcePred = getPHIPred(PHI, i);
1514 replaceRegisterWith(getPHIDestReg(PHI), CombinedSourceReg);
1516 PHI.eraseFromParent();
1520 MachineInstr &PHI, unsigned CombinedSourceReg, MachineBasicBlock *IfMBB,
1522 LLVM_DEBUG(dbgs() << "Replace entry PHI: ");
1523 LLVM_DEBUG(PHI.dump());
1526 unsigned NumInputs = getPHINumInputs(PHI);
1535 auto DestReg = getPHIDestReg(PHI);
1539 PHI.eraseFromParent();
1541 LLVM_DEBUG(dbgs() << printReg(getPHIDestReg(PHI), TRI) << " = PHI(");
1542 MachineBasicBlock *MBB = PHI.getParent();
1544 BuildMI(*MBB, PHI, PHI.getDebugLoc(), TII->get(TargetOpcode::PHI),
1545 getPHIDestReg(PHI));
1550 unsigned NumInputs = getPHINumInputs(PHI);
1555 unsigned SourceReg = getPHISourceReg(PHI, i);
1556 MachineBasicBlock *SourcePred = getPHIPred(PHI, i);
1563 PHI.eraseFromParent();
1568 MachineInstr &PHI, SmallVector<unsigned, 2> &PHIRegionIndices,
1572 unsigned Reg = getPHISourceReg(PHI, PII);
1584 << " after PHI replace\n");
1598 MachineInstr &PHI,
1601 getPHIRegionIndices(Region, PHI, PHIRegionIndices);
1603 storePHILinearizationInfo(PHI, &PHIRegionIndices);
1605 replacePHI(PHI, LinearizedSourceReg, LastMerge, PHIRegionIndices);
1606 replaceLiveOutRegs(PHI, PHIRegionIndices, LinearizedSourceReg, LRegion);
1611 MachineInstr &PHI) {
1613 getPHINonRegionIndices(Region, PHI, PHINonRegionIndices);
1615 storePHILinearizationInfo(PHI, &PHINonRegionIndices);
1616 replaceEntryPHI(PHI, LinearizedSourceReg, IfMBB, PHINonRegionIndices);
1725 LLVM_DEBUG(dbgs() << "Merge PHI (" << printMBBReference(*MergeBB)
1726 << "): " << printReg(DestRegister, TRI) << " = PHI("
1733 TII->get(TargetOpcode::PHI), DestRegister);
1930 // Handle the case where the def is a PHI-def inside a basic
1932 // be taken if the PHI-def is part of an existing chain, or if a
1936 // We collect all PHI Information, and if we are at the region entry,
1940 // the PHI
1953 LLVM_DEBUG(dbgs() << "Insert Chained PHI\n");
2003 // is already a PHI, and no need to create a new one.
2006 // chain, we need to create a PHI node to handle the if region,
2020 LLVM_DEBUG(dbgs() << "Insert Non-Chained Live out PHI\n");
2030 LLVM_DEBUG(dbgs() << "Inserting PHI Live Out from "
2044 LLVM_DEBUG(dbgs() << "Before PHI Prune\n");
2055 // Check if there is a PHI source in this MBB
2079 // Remove the PHI sources that are in the given MBB
2084 LLVM_DEBUG(dbgs() << "After PHI Prune\n");
2110 TII->get(TargetOpcode::PHI), DestReg);
2111 LLVM_DEBUG(dbgs() << "Entry PHI " << printReg(DestReg, TRI) << " = PHI(");
2129 TII->get(TargetOpcode::PHI), NewBackedgeReg);
2136 << "Inserting backedge PHI: "
2137 << printReg(NewBackedgeReg, TRI) << " = PHI("
2209 LLVM_DEBUG(dbgs() << "Resolve PHI Infos\n");
2303 LLVM_DEBUG(dbgs() << "Insert BB Select PHI (BB)\n");
2356 LLVM_DEBUG(dbgs() << "Insert BB Select PHI (region)\n");
2376 void AMDGPUMachineCFGStructurizer::splitLoopPHI(MachineInstr &PHI,
2381 getPHIRegionIndices(LRegion, PHI, PHIRegionIndices);
2386 unsigned RegionSourceReg = getPHISourceReg(PHI, RegionIndex);
2387 MachineBasicBlock *RegionSourceMBB = getPHIPred(PHI, RegionIndex);
2388 unsigned PHIDest = getPHIDestReg(PHI);
2392 if (shrinkPHI(PHI, PHIRegionIndices, &ReplaceReg)) {
2400 BuildMI(*EntrySucc, EntrySucc->instr_begin(), PHI.getDebugLoc(),
2401 TII->get(TargetOpcode::PHI), NewDestReg);
2402 LLVM_DEBUG(dbgs() << "Split Entry PHI " << printReg(NewDestReg, TRI)
2403 << " = PHI(");
2447 // Replace any PHI Predecessors in the successor with NewExit
2451 // If we are past the PHI instructions we are done
2483 // Split the entry block separating PHI-nodes and the rest of the code
2684 LLVM_DEBUG(dbgs() << "Loop BBSelect Merge PHI:\n");
2795 "PHI Operand not a register");