Lines Matching refs:NarrowUse
1071 Instruction *NarrowUse = nullptr; member
1081 : NarrowDef(ND), NarrowUse(NU), WideDef(WD), in NarrowIVDefUse()
1207 unsigned Opcode = DU.NarrowUse->getOpcode(); in cloneIVUser()
1228 Instruction *NarrowUse = DU.NarrowUse; in cloneBitwiseIVUser() local
1232 LLVM_DEBUG(dbgs() << "Cloning bitwise IVUser: " << *NarrowUse << "\n"); in cloneBitwiseIVUser()
1239 Value *LHS = (NarrowUse->getOperand(0) == NarrowDef) in cloneBitwiseIVUser()
1241 : createExtendInst(NarrowUse->getOperand(0), WideType, in cloneBitwiseIVUser()
1242 IsSigned, NarrowUse); in cloneBitwiseIVUser()
1243 Value *RHS = (NarrowUse->getOperand(1) == NarrowDef) in cloneBitwiseIVUser()
1245 : createExtendInst(NarrowUse->getOperand(1), WideType, in cloneBitwiseIVUser()
1246 IsSigned, NarrowUse); in cloneBitwiseIVUser()
1248 auto *NarrowBO = cast<BinaryOperator>(NarrowUse); in cloneBitwiseIVUser()
1251 IRBuilder<> Builder(NarrowUse); in cloneBitwiseIVUser()
1259 Instruction *NarrowUse = DU.NarrowUse; in cloneArithmeticIVUser() local
1263 LLVM_DEBUG(dbgs() << "Cloning arithmetic IVUser: " << *NarrowUse << "\n"); in cloneArithmeticIVUser()
1265 unsigned IVOpIdx = (NarrowUse->getOperand(0) == NarrowDef) ? 0 : 1; in cloneArithmeticIVUser()
1288 const SCEV *NarrowRHS = SE->getSCEV(NarrowUse->getOperand(1)); in cloneArithmeticIVUser()
1291 const SCEV *NarrowLHS = SE->getSCEV(NarrowUse->getOperand(0)); in cloneArithmeticIVUser()
1298 getSCEVByOpCode(WideLHS, WideRHS, NarrowUse->getOpcode()); in cloneArithmeticIVUser()
1310 Value *LHS = (NarrowUse->getOperand(0) == NarrowDef) in cloneArithmeticIVUser()
1312 : createExtendInst(NarrowUse->getOperand(0), WideType, in cloneArithmeticIVUser()
1313 SignExtend, NarrowUse); in cloneArithmeticIVUser()
1314 Value *RHS = (NarrowUse->getOperand(1) == NarrowDef) in cloneArithmeticIVUser()
1316 : createExtendInst(NarrowUse->getOperand(1), WideType, in cloneArithmeticIVUser()
1317 SignExtend, NarrowUse); in cloneArithmeticIVUser()
1319 auto *NarrowBO = cast<BinaryOperator>(NarrowUse); in cloneArithmeticIVUser()
1323 IRBuilder<> Builder(NarrowUse); in cloneArithmeticIVUser()
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()
1377 SE->getSCEV(DU.NarrowUse->getOperand(ExtendOperIdx)), WideType); in getExtendedOperandRecurrence()
1380 SE->getSCEV(DU.NarrowUse->getOperand(ExtendOperIdx)), WideType); in getExtendedOperandRecurrence()
1411 if (!DU.NarrowUse->getType()->isIntegerTy()) in getWideRecurrence()
1414 const SCEV *NarrowExpr = SE->getSCEV(DU.NarrowUse); in getWideRecurrence()
1449 auto *InsertPt = getInsertPointForUses(DU.NarrowUse, DU.NarrowDef, DT, LI); in truncateIVUse()
1453 << *DU.NarrowUse << "\n"); in truncateIVUse()
1456 DU.NarrowUse->replaceUsesOfWith(DU.NarrowDef, Trunc); in truncateIVUse()
1463 ICmpInst *Cmp = dyn_cast<ICmpInst>(DU.NarrowUse); 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()
1526 Instruction *NarrowUse = DU.NarrowUse; in widenWithVariantUse() local
1531 const unsigned OpCode = NarrowUse->getOpcode(); in widenWithVariantUse()
1539 assert((NarrowUse->getOperand(0) == NarrowDef || in widenWithVariantUse()
1540 NarrowUse->getOperand(1) == NarrowDef) && in widenWithVariantUse()
1544 cast<OverflowingBinaryOperator>(NarrowUse); in widenWithVariantUse()
1558 for (Use &U : NarrowUse->uses()) { in widenWithVariantUse()
1593 DeadInsts.emplace_back(NarrowUse); in widenWithVariantUse()
1612 if (NarrowUse->getOperand(0) != NarrowDef) in widenWithVariantUse()
1631 LLVM_DEBUG(dbgs() << "Cloning arithmetic IVUser: " << *NarrowUse << "\n"); in widenWithVariantUse()
1635 (NarrowUse->getOperand(0) == NarrowDef) in widenWithVariantUse()
1637 : createExtendInst(NarrowUse->getOperand(0), WideType, in widenWithVariantUse()
1638 AnotherOpExtKind == ExtendKind::Sign, NarrowUse); in widenWithVariantUse()
1640 (NarrowUse->getOperand(1) == NarrowDef) in widenWithVariantUse()
1642 : createExtendInst(NarrowUse->getOperand(1), WideType, in widenWithVariantUse()
1643 AnotherOpExtKind == ExtendKind::Sign, NarrowUse); in widenWithVariantUse()
1645 auto *NarrowBO = cast<BinaryOperator>(NarrowUse); in widenWithVariantUse()
1648 IRBuilder<> Builder(NarrowUse); in widenWithVariantUse()
1651 ExtendKindMap[NarrowUse] = ExtKind; in widenWithVariantUse()
1680 if (V == NarrowUse) in widenWithVariantUse()
1706 if (PHINode *UsePhi = dyn_cast<PHINode>(DU.NarrowUse)) { in widenIVUse()
1745 if ((isa<SExtInst>(DU.NarrowUse) && canWidenBySExt()) || in widenIVUse()
1746 (isa<ZExtInst>(DU.NarrowUse) && canWidenByZExt())) { 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()
1771 DU.NarrowUse->replaceAllUsesWith(NewDef); in widenIVUse()
1772 DeadInsts.emplace_back(DU.NarrowUse); in widenIVUse()
1816 Rewriter.hoistIVInc(WideInc, DU.NarrowUse)) in widenIVUse()
1838 replaceAllDbgUsesWith(*DU.NarrowUse, *WideUse, *WideUse, *DT); in widenIVUse()
1840 ExtendKindMap[DU.NarrowUse] = WideAddRec.second; in widenIVUse()
1969 pushNarrowIVUsers(DU.NarrowUse, WideUse); in createWideIV()