Lines Matching defs:DU

1144   Instruction *cloneIVUser(NarrowIVDefUse DU, const SCEVAddRecExpr *WideAR);
1145 Instruction *cloneArithmeticIVUser(NarrowIVDefUse DU,
1147 Instruction *cloneBitwiseIVUser(NarrowIVDefUse DU);
1153 WidenedRecTy getWideRecurrence(NarrowIVDefUse DU);
1155 WidenedRecTy getExtendedOperandRecurrence(NarrowIVDefUse DU);
1160 Instruction *widenIVUse(NarrowIVDefUse DU, SCEVExpander &Rewriter,
1162 void truncateIVUse(NarrowIVDefUse DU);
1164 bool widenLoopCompare(NarrowIVDefUse DU);
1165 bool widenWithVariantUse(NarrowIVDefUse DU);
1253 Instruction *WidenIV::cloneIVUser(WidenIV::NarrowIVDefUse DU,
1255 unsigned Opcode = DU.NarrowUse->getOpcode();
1263 return cloneArithmeticIVUser(DU, WideAR);
1271 return cloneBitwiseIVUser(DU);
1275 Instruction *WidenIV::cloneBitwiseIVUser(WidenIV::NarrowIVDefUse DU) {
1276 Instruction *NarrowUse = DU.NarrowUse;
1277 Instruction *NarrowDef = DU.NarrowDef;
1278 Instruction *WideDef = DU.WideDef;
1305 Instruction *WidenIV::cloneArithmeticIVUser(WidenIV::NarrowIVDefUse DU,
1307 Instruction *NarrowUse = DU.NarrowUse;
1308 Instruction *NarrowDef = DU.NarrowDef;
1309 Instruction *WideDef = DU.WideDef;
1476 WidenIV::getExtendedOperandRecurrence(WidenIV::NarrowIVDefUse DU) {
1477 auto Op = matchBinaryOp(DU.NarrowUse);
1487 const unsigned ExtendOperIdx = Op->Operands[0] == DU.NarrowDef ? 1 : 0;
1488 assert(Op->Operands[1 - ExtendOperIdx] == DU.NarrowDef && "bad DU");
1490 ExtendKind ExtKind = getExtendKind(DU.NarrowDef);
1499 if (DU.NeverNegative) {
1521 const SCEV *lhs = SE->getSCEV(DU.WideDef);
1542 WidenIV::WidenedRecTy WidenIV::getWideRecurrence(WidenIV::NarrowIVDefUse DU) {
1543 if (!DU.NarrowUse->getType()->isIntegerTy())
1546 const SCEV *NarrowExpr = SE->getSCEV(DU.NarrowUse);
1556 if (DU.NeverNegative) {
1564 } else if (getExtendKind(DU.NarrowDef) == ExtendKind::Sign) {
1579 void WidenIV::truncateIVUse(NarrowIVDefUse DU) {
1580 auto *InsertPt = getInsertPointForUses(DU.NarrowUse, DU.NarrowDef, DT, LI);
1583 LLVM_DEBUG(dbgs() << "INDVARS: Truncate IV " << *DU.WideDef << " for user "
1584 << *DU.NarrowUse << "\n");
1585 ExtendKind ExtKind = getExtendKind(DU.NarrowDef);
1588 Builder.CreateTrunc(DU.WideDef, DU.NarrowDef->getType(), "",
1589 DU.NeverNegative || ExtKind == ExtendKind::Zero,
1590 DU.NeverNegative || ExtKind == ExtendKind::Sign);
1591 DU.NarrowUse->replaceUsesOfWith(DU.NarrowDef, Trunc);
1597 bool WidenIV::widenLoopCompare(WidenIV::NarrowIVDefUse DU) {
1598 ICmpInst *Cmp = dyn_cast<ICmpInst>(DU.NarrowUse);
1616 bool IsSigned = getExtendKind(DU.NarrowDef) == ExtendKind::Sign;
1617 if (!(DU.NeverNegative || IsSigned == Cmp->isSigned()))
1620 Value *Op = Cmp->getOperand(Cmp->getOperand(0) == DU.NarrowDef ? 1 : 0);
1626 DU.NarrowUse->replaceUsesOfWith(DU.NarrowDef, DU.WideDef);
1631 DU.NarrowUse->replaceUsesOfWith(Op, ExtOp);
1656 bool WidenIV::widenWithVariantUse(WidenIV::NarrowIVDefUse DU) {
1657 Instruction *NarrowUse = DU.NarrowUse;
1658 Instruction *NarrowDef = DU.NarrowDef;
1659 Instruction *WideDef = DU.WideDef;
1668 // The operand that is not defined by NarrowDef of DU. Let's call it the
1672 "bad DU");
1833 Instruction *WidenIV::widenIVUse(WidenIV::NarrowIVDefUse DU,
1836 assert(ExtendKindMap.count(DU.NarrowDef) &&
1842 DU.NeverNegative || getExtendKind(DU.NarrowDef) == ExtendKind::Sign;
1844 DU.NeverNegative || getExtendKind(DU.NarrowDef) == ExtendKind::Zero;
1847 if (PHINode *UsePhi = dyn_cast<PHINode>(DU.NarrowUse)) {
1853 truncateIVUse(DU);
1862 PHINode::Create(DU.WideDef->getType(), 1, UsePhi->getName() + ".wide",
1864 WidePhi->addIncoming(DU.WideDef, UsePhi->getIncomingBlock(0));
1867 Value *Trunc = Builder.CreateTrunc(WidePhi, DU.NarrowDef->getType(), "",
1879 if ((match(DU.NarrowUse, m_SExtLike(m_Value())) && CanWidenBySExt) ||
1880 (isa<ZExtInst>(DU.NarrowUse) && CanWidenByZExt)) {
1881 Value *NewDef = DU.WideDef;
1882 if (DU.NarrowUse->getType() != WideType) {
1883 unsigned CastWidth = SE->getTypeSizeInBits(DU.NarrowUse->getType());
1887 IRBuilder<> Builder(DU.NarrowUse);
1888 NewDef = Builder.CreateTrunc(DU.WideDef, DU.NarrowUse->getType(), "",
1896 << " not wide enough to subsume " << *DU.NarrowUse
1898 DU.NarrowUse->replaceUsesOfWith(DU.NarrowDef, DU.WideDef);
1899 NewDef = DU.NarrowUse;
1902 if (NewDef != DU.NarrowUse) {
1903 LLVM_DEBUG(dbgs() << "INDVARS: eliminating " << *DU.NarrowUse
1904 << " replaced by " << *DU.WideDef << "\n");
1906 DU.NarrowUse->replaceAllUsesWith(NewDef);
1907 DeadInsts.emplace_back(DU.NarrowUse);
1921 WidenedRecTy WideAddRec = getExtendedOperandRecurrence(DU);
1923 WideAddRec = getWideRecurrence(DU);
1938 OrigPhi, WidePhi, DU.NarrowUse, WideInc) ||
1939 DU.NarrowUse->hasNoUnsignedWrap() != WideInc->hasNoUnsignedWrap() ||
1940 DU.NarrowUse->hasNoSignedWrap() != WideInc->hasNoSignedWrap();
1942 Rewriter.hoistIVInc(WideInc, DU.NarrowUse, NeedToRecomputeFlags);
1949 WideUse = cloneIVUser(DU, WideAddRec.first);
1967 // DU.NarrowUse with WideUse. Reattach DbgValue then.
1968 replaceAllDbgUsesWith(*DU.NarrowUse, *WideUse, *WideUse, *DT);
1970 ExtendKindMap[DU.NarrowUse] = WideAddRec.second;
1980 if (widenLoopCompare(DU))
1988 if (widenWithVariantUse(DU))
1994 truncateIVUse(DU);
2135 WidenIV::NarrowIVDefUse DU = NarrowIVUsers.pop_back_val();
2139 Instruction *WideUse = widenIVUse(DU, Rewriter, OrigPhi, WidePhi);
2143 pushNarrowIVUsers(DU.NarrowUse, WideUse);
2146 if (DU.NarrowDef->use_empty())
2147 DeadInsts.emplace_back(DU.NarrowDef);