Lines Matching defs:VPST
203 // VPT/VPST + 4 predicated instructions.
215 // VPT/VPST and has a maximum of four proceeding instructions. All
263 // Is the VPST, controlling the block entry, predicated upon a VCTP.
276 "Expected VPT block to begin with VPT/VPST");
336 "Expected VPT block to start with a VPST or VPT!");
1214 // the VPT block because we don't find another VPT or VPST to being a new
1598 MachineInstr *VPST = Insts.front();
1600 // A vpt block starting with VPST, is only predicated upon vctp and has no
1604 LLVM_DEBUG(dbgs() << "ARM Loops: Removing VPST: " << *VPST);
1625 for (auto I = ++MachineBasicBlock::iterator(VPST), E = DivergentNext;
1630 // with the VPST This should be the divergent instruction
1635 // Insert a VPST at the divergent only if the next instruction
1636 // would actually use it. A VCMP following a VPST can be
1639 // Create a VPST (with a null mask for now, we'll recompute it
1645 LLVM_DEBUG(dbgs() << "ARM Loops: Created VPST: " << *MIB);
1648 // No RDA checks are necessary here since the VPST would have been
1654 LLVM_DEBUG(dbgs() << "ARM Loops: Removing VPST: " << *VPST);
1655 LoLoop.ToRemove.insert(VPST);
1659 MachineInstr *VPST = Insts.front();
1661 assert(VPST->getOpcode() == ARM::MVE_VPST &&
1662 "Found a VPST in an otherwise empty vpt block");
1663 LoLoop.ToRemove.insert(VPST);
1665 LoLoop.BlockMasksToRecompute.insert(VPST);
1667 // If this block starts with a VPST then attempt to merge it with the
1670 MachineInstr *VPST = Insts.front();
1671 auto Next = ++MachineBasicBlock::iterator(VPST);
1673 "The instruction after a VPST must be predicated");
1675 MachineInstr *VprDef = RDA->getUniqueReachingMIDef(VPST, ARM::VPR);
1679 // The VCMP and VPST can only be merged if the VCMP's operands will have
1680 // the same values at the VPST.
1681 // If any of the instructions between the VCMP and VPST are predicated
1683 // VPST already.
1685 MachineBasicBlock::iterator(VPST), hasVPRUse) &&
1686 RDA->hasSameReachingDef(VCMP, VPST, VCMP->getOperand(1).getReg()) &&
1687 RDA->hasSameReachingDef(VCMP, VPST, VCMP->getOperand(2).getReg())) {
1688 ReplaceVCMPWithVPT(VCMP, VPST);
1689 LLVM_DEBUG(dbgs() << "ARM Loops: Removing VPST: " << *VPST);
1690 LoLoop.ToRemove.insert(VPST);
1784 LLVM_DEBUG(dbgs() << "ARM Loops: Recomputing VPT/VPST Block Mask: " << *I);