Lines Matching refs:DU

1098   Instruction *cloneIVUser(NarrowIVDefUse DU, const SCEVAddRecExpr *WideAR);
1099 Instruction *cloneArithmeticIVUser(NarrowIVDefUse DU,
1101 Instruction *cloneBitwiseIVUser(NarrowIVDefUse DU);
1107 WidenedRecTy getWideRecurrence(NarrowIVDefUse DU);
1109 WidenedRecTy getExtendedOperandRecurrence(NarrowIVDefUse DU);
1114 Instruction *widenIVUse(NarrowIVDefUse DU, SCEVExpander &Rewriter);
1116 bool widenLoopCompare(NarrowIVDefUse DU);
1117 bool widenWithVariantUse(NarrowIVDefUse DU);
1205 Instruction *WidenIV::cloneIVUser(WidenIV::NarrowIVDefUse DU, in cloneIVUser() argument
1207 unsigned Opcode = DU.NarrowUse->getOpcode(); in cloneIVUser()
1215 return cloneArithmeticIVUser(DU, WideAR); in cloneIVUser()
1223 return cloneBitwiseIVUser(DU); in cloneIVUser()
1227 Instruction *WidenIV::cloneBitwiseIVUser(WidenIV::NarrowIVDefUse DU) { in cloneBitwiseIVUser() argument
1228 Instruction *NarrowUse = DU.NarrowUse; in cloneBitwiseIVUser()
1229 Instruction *NarrowDef = DU.NarrowDef; in cloneBitwiseIVUser()
1230 Instruction *WideDef = DU.WideDef; in cloneBitwiseIVUser()
1257 Instruction *WidenIV::cloneArithmeticIVUser(WidenIV::NarrowIVDefUse DU, in cloneArithmeticIVUser() argument
1259 Instruction *NarrowUse = DU.NarrowUse; in cloneArithmeticIVUser()
1260 Instruction *NarrowDef = DU.NarrowDef; in cloneArithmeticIVUser()
1261 Instruction *WideDef = DU.WideDef; in cloneArithmeticIVUser()
1357 WidenIV::getExtendedOperandRecurrence(WidenIV::NarrowIVDefUse DU) { in getExtendedOperandRecurrence() argument
1359 const unsigned OpCode = DU.NarrowUse->getOpcode(); in getExtendedOperandRecurrence()
1368 DU.NarrowUse->getOperand(0) == DU.NarrowDef ? 1 : 0; in getExtendedOperandRecurrence()
1369 assert(DU.NarrowUse->getOperand(1-ExtendOperIdx) == DU.NarrowDef && "bad DU"); in getExtendedOperandRecurrence()
1373 cast<OverflowingBinaryOperator>(DU.NarrowUse); in getExtendedOperandRecurrence()
1374 ExtendKind ExtKind = getExtendKind(DU.NarrowDef); in getExtendedOperandRecurrence()
1377 SE->getSCEV(DU.NarrowUse->getOperand(ExtendOperIdx)), WideType); in getExtendedOperandRecurrence()
1380 SE->getSCEV(DU.NarrowUse->getOperand(ExtendOperIdx)), WideType); in getExtendedOperandRecurrence()
1389 const SCEV *lhs = SE->getSCEV(DU.WideDef); in getExtendedOperandRecurrence()
1410 WidenIV::WidenedRecTy WidenIV::getWideRecurrence(WidenIV::NarrowIVDefUse DU) { in getWideRecurrence() argument
1411 if (!DU.NarrowUse->getType()->isIntegerTy()) in getWideRecurrence()
1414 const SCEV *NarrowExpr = SE->getSCEV(DU.NarrowUse); in getWideRecurrence()
1424 if (DU.NeverNegative) { in getWideRecurrence()
1432 } else if (getExtendKind(DU.NarrowDef) == ExtendKind::Sign) { in getWideRecurrence()
1447 static void truncateIVUse(WidenIV::NarrowIVDefUse DU, DominatorTree *DT, in truncateIVUse() argument
1449 auto *InsertPt = getInsertPointForUses(DU.NarrowUse, DU.NarrowDef, DT, LI); in truncateIVUse()
1452 LLVM_DEBUG(dbgs() << "INDVARS: Truncate IV " << *DU.WideDef << " for user " in truncateIVUse()
1453 << *DU.NarrowUse << "\n"); in truncateIVUse()
1455 Value *Trunc = Builder.CreateTrunc(DU.WideDef, DU.NarrowDef->getType()); in truncateIVUse()
1456 DU.NarrowUse->replaceUsesOfWith(DU.NarrowDef, Trunc); in truncateIVUse()
1462 bool WidenIV::widenLoopCompare(WidenIV::NarrowIVDefUse DU) { in widenLoopCompare() argument
1463 ICmpInst *Cmp = dyn_cast<ICmpInst>(DU.NarrowUse); in widenLoopCompare()
1481 bool IsSigned = getExtendKind(DU.NarrowDef) == ExtendKind::Sign; in widenLoopCompare()
1482 if (!(DU.NeverNegative || IsSigned == Cmp->isSigned())) in widenLoopCompare()
1485 Value *Op = Cmp->getOperand(Cmp->getOperand(0) == DU.NarrowDef ? 1 : 0); in widenLoopCompare()
1491 auto *InsertPt = getInsertPointForUses(DU.NarrowUse, DU.NarrowDef, DT, LI); in widenLoopCompare()
1495 DU.NarrowUse->replaceUsesOfWith(DU.NarrowDef, DU.WideDef); in widenLoopCompare()
1500 DU.NarrowUse->replaceUsesOfWith(Op, ExtOp); in widenLoopCompare()
1525 bool WidenIV::widenWithVariantUse(WidenIV::NarrowIVDefUse DU) { in widenWithVariantUse() argument
1526 Instruction *NarrowUse = DU.NarrowUse; in widenWithVariantUse()
1527 Instruction *NarrowDef = DU.NarrowDef; in widenWithVariantUse()
1528 Instruction *WideDef = DU.WideDef; in widenWithVariantUse()
1701 Instruction *WidenIV::widenIVUse(WidenIV::NarrowIVDefUse DU, SCEVExpander &Rewriter) { in widenIVUse() argument
1702 assert(ExtendKindMap.count(DU.NarrowDef) && in widenIVUse()
1706 if (PHINode *UsePhi = dyn_cast<PHINode>(DU.NarrowUse)) { in widenIVUse()
1712 truncateIVUse(DU, DT, LI); in widenIVUse()
1721 PHINode::Create(DU.WideDef->getType(), 1, UsePhi->getName() + ".wide", in widenIVUse()
1723 WidePhi->addIncoming(DU.WideDef, UsePhi->getIncomingBlock(0)); in widenIVUse()
1725 Value *Trunc = Builder.CreateTrunc(WidePhi, DU.NarrowDef->getType()); in widenIVUse()
1738 return DU.NeverNegative || getExtendKind(DU.NarrowDef) == ExtendKind::Sign; in widenIVUse()
1741 return DU.NeverNegative || getExtendKind(DU.NarrowDef) == ExtendKind::Zero; in widenIVUse()
1745 if ((isa<SExtInst>(DU.NarrowUse) && canWidenBySExt()) || in widenIVUse()
1746 (isa<ZExtInst>(DU.NarrowUse) && canWidenByZExt())) { in widenIVUse()
1747 Value *NewDef = DU.WideDef; in widenIVUse()
1748 if (DU.NarrowUse->getType() != WideType) { in widenIVUse()
1749 unsigned CastWidth = SE->getTypeSizeInBits(DU.NarrowUse->getType()); in widenIVUse()
1753 IRBuilder<> Builder(DU.NarrowUse); in widenIVUse()
1754 NewDef = Builder.CreateTrunc(DU.WideDef, DU.NarrowUse->getType()); in widenIVUse()
1761 << " not wide enough to subsume " << *DU.NarrowUse in widenIVUse()
1763 DU.NarrowUse->replaceUsesOfWith(DU.NarrowDef, DU.WideDef); in widenIVUse()
1764 NewDef = DU.NarrowUse; in widenIVUse()
1767 if (NewDef != DU.NarrowUse) { in widenIVUse()
1768 LLVM_DEBUG(dbgs() << "INDVARS: eliminating " << *DU.NarrowUse in widenIVUse()
1769 << " replaced by " << *DU.WideDef << "\n"); in widenIVUse()
1771 DU.NarrowUse->replaceAllUsesWith(NewDef); in widenIVUse()
1772 DeadInsts.emplace_back(DU.NarrowUse); in widenIVUse()
1785 WidenedRecTy WideAddRec = getExtendedOperandRecurrence(DU); in widenIVUse()
1787 WideAddRec = getWideRecurrence(DU); in widenIVUse()
1794 if (widenLoopCompare(DU)) in widenIVUse()
1802 if (widenWithVariantUse(DU)) in widenIVUse()
1808 truncateIVUse(DU, DT, LI); in widenIVUse()
1816 Rewriter.hoistIVInc(WideInc, DU.NarrowUse)) in widenIVUse()
1819 WideUse = cloneIVUser(DU, WideAddRec.first); in widenIVUse()
1838 replaceAllDbgUsesWith(*DU.NarrowUse, *WideUse, *WideUse, *DT); in widenIVUse()
1840 ExtendKindMap[DU.NarrowUse] = WideAddRec.second; in widenIVUse()
1961 WidenIV::NarrowIVDefUse DU = NarrowIVUsers.pop_back_val(); in createWideIV() local
1965 Instruction *WideUse = widenIVUse(DU, Rewriter); in createWideIV()
1969 pushNarrowIVUsers(DU.NarrowUse, WideUse); in createWideIV()
1972 if (DU.NarrowDef->use_empty()) in createWideIV()
1973 DeadInsts.emplace_back(DU.NarrowDef); in createWideIV()