Lines Matching refs:PHI

284 static unsigned getPHINumInputs(MachineInstr &PHI) {  in getPHINumInputs()  argument
285 assert(PHI.isPHI()); in getPHINumInputs()
286 return (PHI.getNumOperands() - 1) / 2; in getPHINumInputs()
289 static MachineBasicBlock *getPHIPred(MachineInstr &PHI, unsigned Index) { in getPHIPred() argument
290 assert(PHI.isPHI()); in getPHIPred()
291 return PHI.getOperand(Index * 2 + 2).getMBB(); in getPHIPred()
294 static void setPhiPred(MachineInstr &PHI, unsigned Index, in setPhiPred() argument
296 PHI.getOperand(Index * 2 + 2).setMBB(NewPred); in setPhiPred()
299 static unsigned getPHISourceReg(MachineInstr &PHI, unsigned Index) { in getPHISourceReg() argument
300 assert(PHI.isPHI()); in getPHISourceReg()
301 return PHI.getOperand(Index * 2 + 1).getReg(); in getPHISourceReg()
304 static unsigned getPHIDestReg(MachineInstr &PHI) { in getPHIDestReg() argument
305 assert(PHI.isPHI()); in getPHIDestReg()
306 return PHI.getOperand(0).getReg(); in getPHIDestReg()
752 MachineInstr &PHI = II; in storeLiveOuts() local
753 int numPreds = getPHINumInputs(PHI); in storeLiveOuts()
755 if (getPHIPred(PHI, i) == MBB) { in storeLiveOuts()
756 unsigned PHIReg = getPHISourceReg(PHI, i); in storeLiveOuts()
823 MachineInstr &PHI = II; in storeLiveOuts() local
824 int numPreds = getPHINumInputs(PHI); in storeLiveOuts()
826 if (Region->contains(getPHIPred(PHI, i))) { in storeLiveOuts()
827 unsigned PHIReg = getPHISourceReg(PHI, i); in storeLiveOuts()
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, in getPHIRegionIndices() argument
1325 unsigned NumInputs = getPHINumInputs(PHI); in getPHIRegionIndices()
1327 MachineBasicBlock *Pred = getPHIPred(PHI, i); in getPHIRegionIndices()
1335 LinearizedRegion *Region, MachineInstr &PHI, in getPHIRegionIndices() argument
1337 unsigned NumInputs = getPHINumInputs(PHI); in getPHIRegionIndices()
1339 MachineBasicBlock *Pred = getPHIPred(PHI, i); in getPHIRegionIndices()
1347 LinearizedRegion *Region, MachineInstr &PHI, in getPHINonRegionIndices() argument
1349 unsigned NumInputs = getPHINumInputs(PHI); in getPHINonRegionIndices()
1351 MachineBasicBlock *Pred = getPHIPred(PHI, i); in getPHINonRegionIndices()
1359 unsigned LDestReg, MachineInstr &PHI, in storePHILinearizationInfoDest() argument
1363 PHIInfo.addSource(LDestReg, getPHISourceReg(PHI, i), getPHIPred(PHI, i)); in storePHILinearizationInfoDest()
1366 unsigned NumInputs = getPHINumInputs(PHI); in storePHILinearizationInfoDest()
1368 PHIInfo.addSource(LDestReg, getPHISourceReg(PHI, i), getPHIPred(PHI, i)); in storePHILinearizationInfoDest()
1374 MachineInstr &PHI, SmallVector<unsigned, 2> *RegionIndices) { in storePHILinearizationInfo() argument
1375 unsigned DestReg = getPHIDestReg(PHI); in storePHILinearizationInfo()
1378 PHIInfo.addDest(LinearizeDestReg, PHI.getDebugLoc()); in storePHILinearizationInfo()
1379 storePHILinearizationInfoDest(LinearizeDestReg, PHI, RegionIndices); in storePHILinearizationInfo()
1411 bool AMDGPUMachineCFGStructurizer::shrinkPHI(MachineInstr &PHI, in shrinkPHI() argument
1414 return shrinkPHI(PHI, 0, nullptr, PHIIndices, ReplaceReg); in shrinkPHI()
1417 bool AMDGPUMachineCFGStructurizer::shrinkPHI(MachineInstr &PHI, in shrinkPHI() argument
1423 LLVM_DEBUG(PHI.dump()); in shrinkPHI()
1424 LLVM_DEBUG(dbgs() << " to " << printReg(getPHIDestReg(PHI), TRI) in shrinkPHI()
1428 unsigned NumInputs = getPHINumInputs(PHI); in shrinkPHI()
1443 *ReplaceReg = getPHISourceReg(PHI, SingleExternalEntryIndex); in shrinkPHI()
1448 MachineBasicBlock *MBB = PHI.getParent(); in shrinkPHI()
1450 BuildMI(*MBB, PHI, PHI.getDebugLoc(), TII->get(TargetOpcode::PHI), in shrinkPHI()
1451 getPHIDestReg(PHI)); in shrinkPHI()
1463 unsigned SourceReg = getPHISourceReg(PHI, i); in shrinkPHI()
1464 MachineBasicBlock *SourcePred = getPHIPred(PHI, i); in shrinkPHI()
1472 PHI.eraseFromParent(); in shrinkPHI()
1477 MachineInstr &PHI, unsigned CombinedSourceReg, MachineBasicBlock *LastMerge, in replacePHI() argument
1480 LLVM_DEBUG(PHI.dump()); in replacePHI()
1481 LLVM_DEBUG(dbgs() << " with " << printReg(getPHIDestReg(PHI), TRI) in replacePHI()
1485 unsigned NumInputs = getPHINumInputs(PHI); in replacePHI()
1493 MachineBasicBlock *MBB = PHI.getParent(); in replacePHI()
1495 BuildMI(*MBB, PHI, PHI.getDebugLoc(), TII->get(TargetOpcode::PHI), in replacePHI()
1496 getPHIDestReg(PHI)); in replacePHI()
1505 unsigned SourceReg = getPHISourceReg(PHI, i); in replacePHI()
1506 MachineBasicBlock *SourcePred = getPHIPred(PHI, i); in replacePHI()
1514 replaceRegisterWith(getPHIDestReg(PHI), CombinedSourceReg); in replacePHI()
1516 PHI.eraseFromParent(); in replacePHI()
1520 MachineInstr &PHI, unsigned CombinedSourceReg, MachineBasicBlock *IfMBB, in replaceEntryPHI() argument
1523 LLVM_DEBUG(PHI.dump()); in replaceEntryPHI()
1526 unsigned NumInputs = getPHINumInputs(PHI); in replaceEntryPHI()
1535 auto DestReg = getPHIDestReg(PHI); in replaceEntryPHI()
1539 PHI.eraseFromParent(); in replaceEntryPHI()
1541 LLVM_DEBUG(dbgs() << printReg(getPHIDestReg(PHI), TRI) << " = PHI("); in replaceEntryPHI()
1542 MachineBasicBlock *MBB = PHI.getParent(); in replaceEntryPHI()
1544 BuildMI(*MBB, PHI, PHI.getDebugLoc(), TII->get(TargetOpcode::PHI), in replaceEntryPHI()
1545 getPHIDestReg(PHI)); in replaceEntryPHI()
1550 unsigned NumInputs = getPHINumInputs(PHI); in replaceEntryPHI()
1555 unsigned SourceReg = getPHISourceReg(PHI, i); in replaceEntryPHI()
1556 MachineBasicBlock *SourcePred = getPHIPred(PHI, i); in replaceEntryPHI()
1563 PHI.eraseFromParent(); in replaceEntryPHI()
1568 MachineInstr &PHI, SmallVector<unsigned, 2> &PHIRegionIndices, in replaceLiveOutRegs() argument
1572 unsigned Reg = getPHISourceReg(PHI, PII); in replaceLiveOutRegs()
1598 MachineInstr &PHI, in rewriteRegionExitPHI() argument
1601 getPHIRegionIndices(Region, PHI, PHIRegionIndices); in rewriteRegionExitPHI()
1603 storePHILinearizationInfo(PHI, &PHIRegionIndices); in rewriteRegionExitPHI()
1605 replacePHI(PHI, LinearizedSourceReg, LastMerge, PHIRegionIndices); in rewriteRegionExitPHI()
1606 replaceLiveOutRegs(PHI, PHIRegionIndices, LinearizedSourceReg, LRegion); in rewriteRegionExitPHI()
1611 MachineInstr &PHI) { in rewriteRegionEntryPHI() argument
1613 getPHINonRegionIndices(Region, PHI, PHINonRegionIndices); in rewriteRegionEntryPHI()
1615 storePHILinearizationInfo(PHI, &PHINonRegionIndices); in rewriteRegionEntryPHI()
1616 replaceEntryPHI(PHI, LinearizedSourceReg, IfMBB, PHINonRegionIndices); in rewriteRegionEntryPHI()
1733 TII->get(TargetOpcode::PHI), DestRegister); in insertMergePHI()
2110 TII->get(TargetOpcode::PHI), DestReg); in createEntryPHI()
2129 TII->get(TargetOpcode::PHI), NewBackedgeReg); in createEntryPHI()
2376 void AMDGPUMachineCFGStructurizer::splitLoopPHI(MachineInstr &PHI, in splitLoopPHI() argument
2381 getPHIRegionIndices(LRegion, PHI, PHIRegionIndices); in splitLoopPHI()
2386 unsigned RegionSourceReg = getPHISourceReg(PHI, RegionIndex); in splitLoopPHI()
2387 MachineBasicBlock *RegionSourceMBB = getPHIPred(PHI, RegionIndex); in splitLoopPHI()
2388 unsigned PHIDest = getPHIDestReg(PHI); in splitLoopPHI()
2392 if (shrinkPHI(PHI, PHIRegionIndices, &ReplaceReg)) { in splitLoopPHI()
2400 BuildMI(*EntrySucc, EntrySucc->instr_begin(), PHI.getDebugLoc(), in splitLoopPHI()
2401 TII->get(TargetOpcode::PHI), NewDestReg); in splitLoopPHI()