Lines Matching defs:PV
622 bool matchLeftShift(SelectInst *SelI, Value *CIV, ParsedValues &PV);
623 bool matchRightShift(SelectInst *SelI, ParsedValues &PV);
625 Value *CIV, ParsedValues &PV, bool PreScan);
627 Value *generate(BasicBlock::iterator At, ParsedValues &PV);
684 Value *CIV, ParsedValues &PV) {
790 PV.X = X;
791 PV.Q = Q;
792 PV.R = R;
793 PV.Left = true;
798 ParsedValues &PV) {
860 PV.X = X;
861 PV.Q = Q;
862 PV.R = R;
863 PV.Left = false;
868 BasicBlock *LoopB, BasicBlock *PrehB, Value *CIV, ParsedValues &PV,
909 if (matchLeftShift(SelI, CIV, PV)) {
915 auto *RPhi = dyn_cast<PHINode>(PV.R);
920 PV.Res = SelI;
924 if (CurLoop->isLoopInvariant(PV.X)) {
925 PV.P = PV.X;
926 PV.Inv = false;
932 PV.Inv = true;
933 if (PV.X != PV.R) {
935 if (!match(PV.X, m_Xor(m_Value(X1), m_Value(X2))))
947 if (Var != PV.R)
949 PV.M = Inv;
954 PV.P = EntryP;
960 if (matchRightShift(SelI, PV)) {
963 if (PV.Inv && !isa<ConstantInt>(PV.Q))
1532 ParsedValues &PV) {
1537 Value *P = PV.P, *Q = PV.Q, *P0 = P;
1538 unsigned IC = PV.IterCount;
1540 if (PV.M != nullptr)
1541 P0 = P = B.CreateXor(P, PV.M);
1546 if (PV.IterCount != 32)
1549 if (PV.Inv) {
1550 auto *QI = dyn_cast<ConstantInt>(PV.Q);
1554 unsigned M = (1 << PV.IterCount) - 1;
1566 if (PV.M != nullptr)
1798 ParsedValues PV;
1800 PV.IterCount = IterCount;
1830 if (scanSelect(SelI, LoopB, EntryB, CIV, PV, true)) {
1846 if (!PV.Left) {
1883 FoundScan = scanSelect(SelI, LoopB, EntryB, CIV, PV, false);
1890 StringRef PP = (PV.M ? "(P+M)" : "P");
1891 if (!PV.Inv)
1896 dbgs() << " Res:" << *PV.Res << "\n P:" << *PV.P << "\n";
1897 if (PV.M)
1898 dbgs() << " M:" << *PV.M << "\n";
1899 dbgs() << " Q:" << *PV.Q << "\n";
1900 dbgs() << " Iteration count:" << PV.IterCount << "\n";
1904 Value *PM = generate(At, PV);
1908 if (PM->getType() != PV.Res->getType())
1909 PM = IRBuilder<>(&*At).CreateIntCast(PM, PV.Res->getType(), false);
1911 PV.Res->replaceAllUsesWith(PM);
1912 PV.Res->eraseFromParent();