diff --git a/llvm/include/llvm/Analysis/ScalarEvolution.h b/llvm/include/llvm/Analysis/ScalarEvolution.h index 858c1d5392071..cf6b2ccb0f22a 100644 --- a/llvm/include/llvm/Analysis/ScalarEvolution.h +++ b/llvm/include/llvm/Analysis/ScalarEvolution.h @@ -563,8 +563,13 @@ class ScalarEvolution { LLVM_ABI const SCEV *getConstant(ConstantInt *V); LLVM_ABI const SCEV *getConstant(const APInt &Val); LLVM_ABI const SCEV *getConstant(Type *Ty, uint64_t V, bool isSigned = false); - LLVM_ABI const SCEV *getLosslessPtrToIntExpr(const SCEV *Op, - unsigned Depth = 0); + LLVM_ABI const SCEV *getLosslessPtrToIntOrAddrExpr(SCEVTypes Kind, + const SCEV *Op, + unsigned Depth = 0); + LLVM_ABI const SCEV *getLosslessPtrToIntExpr(const SCEV *Op); + LLVM_ABI const SCEV *getLosslessPtrToAddrExpr(const SCEV *Op); + + LLVM_ABI const SCEV *getPtrToAddrExpr(const SCEV *Op, Type *Ty); LLVM_ABI const SCEV *getPtrToIntExpr(const SCEV *Op, Type *Ty); LLVM_ABI const SCEV *getTruncateExpr(const SCEV *Op, Type *Ty, unsigned Depth = 0); diff --git a/llvm/include/llvm/Analysis/ScalarEvolutionDivision.h b/llvm/include/llvm/Analysis/ScalarEvolutionDivision.h index 7c78487fea8c0..d3df7e346b4a5 100644 --- a/llvm/include/llvm/Analysis/ScalarEvolutionDivision.h +++ b/llvm/include/llvm/Analysis/ScalarEvolutionDivision.h @@ -46,6 +46,7 @@ struct SCEVDivision : public SCEVVisitor { // Except in the trivial case described above, we do not know how to divide // Expr by Denominator for the following functions with empty implementation. + void visitPtrToAddrExpr(const SCEVPtrToAddrExpr *Numerator) {} void visitPtrToIntExpr(const SCEVPtrToIntExpr *Numerator) {} void visitTruncateExpr(const SCEVTruncateExpr *Numerator) {} void visitZeroExtendExpr(const SCEVZeroExtendExpr *Numerator) {} diff --git a/llvm/include/llvm/Analysis/ScalarEvolutionExpressions.h b/llvm/include/llvm/Analysis/ScalarEvolutionExpressions.h index 13b9e1b812942..6ae7b1b08773a 100644 --- a/llvm/include/llvm/Analysis/ScalarEvolutionExpressions.h +++ b/llvm/include/llvm/Analysis/ScalarEvolutionExpressions.h @@ -53,6 +53,7 @@ enum SCEVTypes : unsigned short { scSMinExpr, scSequentialUMinExpr, scPtrToInt, + scPtrToAddr, scUnknown, scCouldNotCompute }; @@ -121,8 +122,9 @@ class SCEVCastExpr : public SCEV { /// Methods for support type inquiry through isa, cast, and dyn_cast: static bool classof(const SCEV *S) { - return S->getSCEVType() == scPtrToInt || S->getSCEVType() == scTruncate || - S->getSCEVType() == scZeroExtend || S->getSCEVType() == scSignExtend; + return S->getSCEVType() == scPtrToAddr || S->getSCEVType() == scPtrToInt || + S->getSCEVType() == scTruncate || S->getSCEVType() == scZeroExtend || + S->getSCEVType() == scSignExtend; } }; @@ -138,6 +140,18 @@ class SCEVPtrToIntExpr : public SCEVCastExpr { static bool classof(const SCEV *S) { return S->getSCEVType() == scPtrToInt; } }; +/// This class represents a cast from a pointer to a pointer-sized integer +/// value, without capturing the provenance of the pointer. +class SCEVPtrToAddrExpr : public SCEVCastExpr { + friend class ScalarEvolution; + + SCEVPtrToAddrExpr(const FoldingSetNodeIDRef ID, const SCEV *Op, Type *ITy); + +public: + /// Methods for support type inquiry through isa, cast, and dyn_cast: + static bool classof(const SCEV *S) { return S->getSCEVType() == scPtrToAddr; } +}; + /// This is the base class for unary integral cast operator classes. class SCEVIntegralCastExpr : public SCEVCastExpr { protected: @@ -615,6 +629,8 @@ template struct SCEVVisitor { return ((SC *)this)->visitConstant((const SCEVConstant *)S); case scVScale: return ((SC *)this)->visitVScale((const SCEVVScale *)S); + case scPtrToAddr: + return ((SC *)this)->visitPtrToAddrExpr((const SCEVPtrToAddrExpr *)S); case scPtrToInt: return ((SC *)this)->visitPtrToIntExpr((const SCEVPtrToIntExpr *)S); case scTruncate: @@ -685,6 +701,7 @@ template class SCEVTraversal { case scVScale: case scUnknown: continue; + case scPtrToAddr: case scPtrToInt: case scTruncate: case scZeroExtend: @@ -774,6 +791,13 @@ class SCEVRewriteVisitor : public SCEVVisitor { const SCEV *visitVScale(const SCEVVScale *VScale) { return VScale; } + const SCEV *visitPtrToAddrExpr(const SCEVPtrToAddrExpr *Expr) { + const SCEV *Operand = ((SC *)this)->visit(Expr->getOperand()); + return Operand == Expr->getOperand() + ? Expr + : SE.getPtrToAddrExpr(Operand, Expr->getType()); + } + const SCEV *visitPtrToIntExpr(const SCEVPtrToIntExpr *Expr) { const SCEV *Operand = ((SC *)this)->visit(Expr->getOperand()); return Operand == Expr->getOperand() diff --git a/llvm/include/llvm/Transforms/Utils/ScalarEvolutionExpander.h b/llvm/include/llvm/Transforms/Utils/ScalarEvolutionExpander.h index 310118078695c..c986f78db5c19 100644 --- a/llvm/include/llvm/Transforms/Utils/ScalarEvolutionExpander.h +++ b/llvm/include/llvm/Transforms/Utils/ScalarEvolutionExpander.h @@ -498,6 +498,8 @@ class SCEVExpander : public SCEVVisitor { Value *visitVScale(const SCEVVScale *S); + Value *visitPtrToAddrExpr(const SCEVPtrToAddrExpr *S); + Value *visitPtrToIntExpr(const SCEVPtrToIntExpr *S); Value *visitTruncateExpr(const SCEVTruncateExpr *S); diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index ebb863076d2c5..ac405ad579d9c 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -277,10 +277,12 @@ void SCEV::print(raw_ostream &OS) const { case scVScale: OS << "vscale"; return; + case scPtrToAddr: case scPtrToInt: { - const SCEVPtrToIntExpr *PtrToInt = cast(this); + const SCEVCastExpr *PtrToInt = cast(this); const SCEV *Op = PtrToInt->getOperand(); - OS << "(ptrtoint " << *Op->getType() << " " << *Op << " to " + StringRef OpS = getSCEVType() == scPtrToAddr ? "addr" : "int"; + OS << "(ptrto" << OpS << " " << *Op->getType() << " " << *Op << " to " << *PtrToInt->getType() << ")"; return; } @@ -386,6 +388,7 @@ Type *SCEV::getType() const { return cast(this)->getType(); case scVScale: return cast(this)->getType(); + case scPtrToAddr: case scPtrToInt: case scTruncate: case scZeroExtend: @@ -420,6 +423,7 @@ ArrayRef SCEV::operands() const { case scVScale: case scUnknown: return {}; + case scPtrToAddr: case scPtrToInt: case scTruncate: case scZeroExtend: @@ -512,6 +516,13 @@ SCEVCastExpr::SCEVCastExpr(const FoldingSetNodeIDRef ID, SCEVTypes SCEVTy, const SCEV *op, Type *ty) : SCEV(ID, SCEVTy, computeExpressionSize(op)), Op(op), Ty(ty) {} +SCEVPtrToAddrExpr::SCEVPtrToAddrExpr(const FoldingSetNodeIDRef ID, + const SCEV *Op, Type *ITy) + : SCEVCastExpr(ID, scPtrToAddr, Op, ITy) { + assert(getOperand()->getType()->isPointerTy() && Ty->isIntegerTy() && + "Must be a non-bit-width-changing pointer-to-integer cast!"); +} + SCEVPtrToIntExpr::SCEVPtrToIntExpr(const FoldingSetNodeIDRef ID, const SCEV *Op, Type *ITy) : SCEVCastExpr(ID, scPtrToInt, Op, ITy) { @@ -724,6 +735,7 @@ CompareSCEVComplexity(const LoopInfo *const LI, const SCEV *LHS, case scTruncate: case scZeroExtend: case scSignExtend: + case scPtrToAddr: case scPtrToInt: case scAddExpr: case scMulExpr: @@ -1004,10 +1016,11 @@ SCEVAddRecExpr::evaluateAtIteration(ArrayRef Operands, // SCEV Expression folder implementations //===----------------------------------------------------------------------===// -const SCEV *ScalarEvolution::getLosslessPtrToIntExpr(const SCEV *Op, - unsigned Depth) { +const SCEV *ScalarEvolution::getLosslessPtrToIntOrAddrExpr(SCEVTypes Kind, + const SCEV *Op, + unsigned Depth) { assert(Depth <= 1 && - "getLosslessPtrToIntExpr() should self-recurse at most once."); + "getLosslessPtrToIntOrAddrExpr() should self-recurse at most once."); // We could be called with an integer-typed operands during SCEV rewrites. // Since the operand is an integer already, just perform zext/trunc/self cast. @@ -1052,35 +1065,45 @@ const SCEV *ScalarEvolution::getLosslessPtrToIntExpr(const SCEV *Op, // Create an explicit cast node. // We can reuse the existing insert position since if we get here, // we won't have made any changes which would invalidate it. - SCEV *S = new (SCEVAllocator) - SCEVPtrToIntExpr(ID.Intern(SCEVAllocator), Op, IntPtrTy); + SCEV *S; + if (Kind == scPtrToInt) { + S = new (SCEVAllocator) + SCEVPtrToIntExpr(ID.Intern(SCEVAllocator), Op, IntPtrTy); + } else { + S = new (SCEVAllocator) + SCEVPtrToAddrExpr(ID.Intern(SCEVAllocator), Op, IntPtrTy); + } UniqueSCEVs.InsertNode(S, IP); registerUser(S, Op); return S; } - assert(Depth == 0 && "getLosslessPtrToIntExpr() should not self-recurse for " - "non-SCEVUnknown's."); + assert(Depth == 0 && + "getLosslessPtrToIntOrAddrExpr() should not self-recurse for " + "non-SCEVUnknown's."); // Otherwise, we've got some expression that is more complex than just a - // single SCEVUnknown. But we don't want to have a SCEVPtrToIntExpr of an - // arbitrary expression, we want to have SCEVPtrToIntExpr of an SCEVUnknown - // only, and the expressions must otherwise be integer-typed. - // So sink the cast down to the SCEVUnknown's. + // single SCEVUnknown. But we don't want to have a SCEVPtrTo(Int|Addr)Expr of + // an arbitrary expression, we want to have SCEVPtrTo(Int|Addr)Expr of an + // SCEVUnknown only, and the expressions must otherwise be integer-typed. So + // sink the cast down to the SCEVUnknown's. - /// The SCEVPtrToIntSinkingRewriter takes a scalar evolution expression, + /// The SCEVPtrToIntOrAddrSinkingRewriter takes a scalar evolution expression, /// which computes a pointer-typed value, and rewrites the whole expression /// tree so that *all* the computations are done on integers, and the only /// pointer-typed operands in the expression are SCEVUnknown. - class SCEVPtrToIntSinkingRewriter - : public SCEVRewriteVisitor { - using Base = SCEVRewriteVisitor; + class SCEVPtrToIntOrAddrSinkingRewriter + : public SCEVRewriteVisitor { + using Base = SCEVRewriteVisitor; + const SCEVTypes Kind; public: - SCEVPtrToIntSinkingRewriter(ScalarEvolution &SE) : SCEVRewriteVisitor(SE) {} + SCEVPtrToIntOrAddrSinkingRewriter(SCEVTypes Kind, ScalarEvolution &SE) + : SCEVRewriteVisitor(SE), Kind(Kind) {} - static const SCEV *rewrite(const SCEV *Scev, ScalarEvolution &SE) { - SCEVPtrToIntSinkingRewriter Rewriter(SE); + static const SCEV *rewrite(const SCEV *Scev, SCEVTypes Kind, + ScalarEvolution &SE) { + SCEVPtrToIntOrAddrSinkingRewriter Rewriter(Kind, SE); return Rewriter.visit(Scev); } @@ -1116,18 +1139,37 @@ const SCEV *ScalarEvolution::getLosslessPtrToIntExpr(const SCEV *Op, const SCEV *visitUnknown(const SCEVUnknown *Expr) { assert(Expr->getType()->isPointerTy() && "Should only reach pointer-typed SCEVUnknown's."); - return SE.getLosslessPtrToIntExpr(Expr, /*Depth=*/1); + return SE.getLosslessPtrToIntOrAddrExpr(Kind, Expr, /*Depth=*/1); } }; // And actually perform the cast sinking. - const SCEV *IntOp = SCEVPtrToIntSinkingRewriter::rewrite(Op, *this); + const SCEV *IntOp = + SCEVPtrToIntOrAddrSinkingRewriter::rewrite(Op, Kind, *this); assert(IntOp->getType()->isIntegerTy() && "We must have succeeded in sinking the cast, " "and ending up with an integer-typed expression!"); return IntOp; } +const SCEV *ScalarEvolution::getLosslessPtrToAddrExpr(const SCEV *Op) { + return getLosslessPtrToIntOrAddrExpr(scPtrToAddr, Op); +} + +const SCEV *ScalarEvolution::getLosslessPtrToIntExpr(const SCEV *Op) { + return getLosslessPtrToIntOrAddrExpr(scPtrToInt, Op); +} + +const SCEV *ScalarEvolution::getPtrToAddrExpr(const SCEV *Op, Type *Ty) { + assert(Ty->isIntegerTy() && "Target type must be an integer type!"); + + const SCEV *IntOp = getLosslessPtrToAddrExpr(Op); + if (isa(IntOp)) + return IntOp; + + return getTruncateOrZeroExtend(IntOp, Ty); +} + const SCEV *ScalarEvolution::getPtrToIntExpr(const SCEV *Op, Type *Ty) { assert(Ty->isIntegerTy() && "Target type must be an integer type!"); @@ -4073,6 +4115,8 @@ class SCEVSequentialMinMaxDeduplicatingVisitor final RetVal visitVScale(const SCEVVScale *VScale) { return VScale; } + RetVal visitPtrToAddrExpr(const SCEVPtrToAddrExpr *Expr) { return Expr; } + RetVal visitPtrToIntExpr(const SCEVPtrToIntExpr *Expr) { return Expr; } RetVal visitTruncateExpr(const SCEVTruncateExpr *Expr) { return Expr; } @@ -4123,6 +4167,7 @@ static bool scevUnconditionallyPropagatesPoisonFromOperands(SCEVTypes Kind) { case scTruncate: case scZeroExtend: case scSignExtend: + case scPtrToAddr: case scPtrToInt: case scAddExpr: case scMulExpr: @@ -6362,8 +6407,9 @@ APInt ScalarEvolution::getConstantMultipleImpl(const SCEV *S) { switch (S->getSCEVType()) { case scConstant: return cast(S)->getAPInt(); + case scPtrToAddr: case scPtrToInt: - return getConstantMultiple(cast(S)->getOperand()); + return getConstantMultiple(cast(S)->getOperand()); case scUDivExpr: case scVScale: return APInt(BitWidth, 1); @@ -6623,6 +6669,7 @@ ScalarEvolution::getRangeRefIter(const SCEV *S, case scTruncate: case scZeroExtend: case scSignExtend: + case scPtrToAddr: case scPtrToInt: case scAddExpr: case scMulExpr: @@ -6750,10 +6797,11 @@ const ConstantRange &ScalarEvolution::getRangeRef( SExt, SignHint, ConservativeResult.intersectWith(X.signExtend(BitWidth), RangeType)); } + case scPtrToAddr: case scPtrToInt: { - const SCEVPtrToIntExpr *PtrToInt = cast(S); - ConstantRange X = getRangeRef(PtrToInt->getOperand(), SignHint, Depth + 1); - return setRange(PtrToInt, SignHint, X); + const SCEVCastExpr *Cast = cast(S); + ConstantRange X = getRangeRef(Cast->getOperand(), SignHint, Depth + 1); + return setRange(Cast, SignHint, X); } case scAddExpr: { const SCEVAddExpr *Add = cast(S); @@ -7646,6 +7694,7 @@ ScalarEvolution::getOperandsToCreate(Value *V, SmallVectorImpl &Ops) { case Instruction::Trunc: case Instruction::ZExt: case Instruction::SExt: + case Instruction::PtrToAddr: case Instruction::PtrToInt: Ops.push_back(U->getOperand(0)); return nullptr; @@ -8118,13 +8167,16 @@ const SCEV *ScalarEvolution::createSCEV(Value *V) { return getSCEV(U->getOperand(0)); break; + case Instruction::PtrToAddr: case Instruction::PtrToInt: { // Pointer to integer cast is straight-forward, so do model it. const SCEV *Op = getSCEV(U->getOperand(0)); Type *DstIntTy = U->getType(); // But only if effective SCEV (integer) type is wide enough to represent // all possible pointer values. - const SCEV *IntOp = getPtrToIntExpr(Op, DstIntTy); + const SCEV *IntOp = U->getOpcode() == Instruction::PtrToInt + ? getPtrToIntExpr(Op, DstIntTy) + : getPtrToAddrExpr(Op, DstIntTy); if (isa(IntOp)) return getUnknown(V); return IntOp; @@ -9313,12 +9365,12 @@ ScalarEvolution::ExitLimit ScalarEvolution::computeExitLimitFromICmp( case ICmpInst::ICMP_NE: { // while (X != Y) // Convert to: while (X-Y != 0) if (LHS->getType()->isPointerTy()) { - LHS = getLosslessPtrToIntExpr(LHS); + LHS = getLosslessPtrToAddrExpr(LHS); if (isa(LHS)) return LHS; } if (RHS->getType()->isPointerTy()) { - RHS = getLosslessPtrToIntExpr(RHS); + RHS = getLosslessPtrToAddrExpr(RHS); if (isa(RHS)) return RHS; } @@ -9331,12 +9383,12 @@ ScalarEvolution::ExitLimit ScalarEvolution::computeExitLimitFromICmp( case ICmpInst::ICMP_EQ: { // while (X == Y) // Convert to: while (X-Y == 0) if (LHS->getType()->isPointerTy()) { - LHS = getLosslessPtrToIntExpr(LHS); + LHS = getLosslessPtrToAddrExpr(LHS); if (isa(LHS)) return LHS; } if (RHS->getType()->isPointerTy()) { - RHS = getLosslessPtrToIntExpr(RHS); + RHS = getLosslessPtrToAddrExpr(RHS); if (isa(RHS)) return RHS; } @@ -9926,6 +9978,13 @@ static Constant *BuildConstantFromSCEV(const SCEV *V) { return cast(V)->getValue(); case scUnknown: return dyn_cast(cast(V)->getValue()); + case scPtrToAddr: { + const SCEVPtrToAddrExpr *P2I = cast(V); + if (Constant *CastOp = BuildConstantFromSCEV(P2I->getOperand())) + return ConstantExpr::getPtrToAddr(CastOp, P2I->getType()); + + return nullptr; + } case scPtrToInt: { const SCEVPtrToIntExpr *P2I = cast(V); if (Constant *CastOp = BuildConstantFromSCEV(P2I->getOperand())) @@ -9984,6 +10043,7 @@ ScalarEvolution::getWithOperands(const SCEV *S, case scTruncate: case scZeroExtend: case scSignExtend: + case scPtrToAddr: case scPtrToInt: return getCastExpr(S->getSCEVType(), NewOps[0], S->getType()); case scAddRecExpr: { @@ -10068,6 +10128,7 @@ const SCEV *ScalarEvolution::computeSCEVAtScope(const SCEV *V, const Loop *L) { case scTruncate: case scZeroExtend: case scSignExtend: + case scPtrToAddr: case scPtrToInt: case scAddExpr: case scMulExpr: @@ -13204,12 +13265,12 @@ ScalarEvolution::howManyLessThans(const SCEV *LHS, const SCEV *RHS, const SCEV *OrigStart = Start; const SCEV *OrigRHS = RHS; if (Start->getType()->isPointerTy()) { - Start = getLosslessPtrToIntExpr(Start); + Start = getLosslessPtrToAddrExpr(Start); if (isa(Start)) return Start; } if (RHS->getType()->isPointerTy()) { - RHS = getLosslessPtrToIntExpr(RHS); + RHS = getLosslessPtrToAddrExpr(RHS); if (isa(RHS)) return RHS; } @@ -13512,12 +13573,12 @@ ScalarEvolution::ExitLimit ScalarEvolution::howManyGreaterThans( } if (Start->getType()->isPointerTy()) { - Start = getLosslessPtrToIntExpr(Start); + Start = getLosslessPtrToAddrExpr(Start); if (isa(Start)) return Start; } if (End->getType()->isPointerTy()) { - End = getLosslessPtrToIntExpr(End); + End = getLosslessPtrToAddrExpr(End); if (isa(End)) return End; } @@ -14148,6 +14209,7 @@ ScalarEvolution::computeLoopDisposition(const SCEV *S, const Loop *L) { case scTruncate: case scZeroExtend: case scSignExtend: + case scPtrToAddr: case scPtrToInt: case scAddExpr: case scMulExpr: @@ -14229,6 +14291,7 @@ ScalarEvolution::computeBlockDisposition(const SCEV *S, const BasicBlock *BB) { case scTruncate: case scZeroExtend: case scSignExtend: + case scPtrToAddr: case scPtrToInt: case scAddExpr: case scMulExpr: diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp index a1751c0ee3e48..aac4a96704162 100644 --- a/llvm/lib/IR/Instructions.cpp +++ b/llvm/lib/IR/Instructions.cpp @@ -2894,6 +2894,10 @@ unsigned CastInst::isEliminableCastPair( if (!AreBothBitcasts) return 0; + // TODO: Add PtrToAddr to table. + if (firstOp == Instruction::PtrToAddr || secondOp == Instruction::PtrToAddr) + return 0; + int ElimCase = CastResults[firstOp-Instruction::CastOpsBegin] [secondOp-Instruction::CastOpsBegin]; switch (ElimCase) { diff --git a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp index 28befd0aa1ce8..4be0436bb615b 100644 --- a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp +++ b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp @@ -457,6 +457,7 @@ const Loop *SCEVExpander::getRelevantLoop(const SCEV *S) { case scTruncate: case scZeroExtend: case scSignExtend: + case scPtrToAddr: case scPtrToInt: case scAddExpr: case scMulExpr: @@ -1433,6 +1434,12 @@ Value *SCEVExpander::visitAddRecExpr(const SCEVAddRecExpr *S) { return expand(T); } +Value *SCEVExpander::visitPtrToAddrExpr(const SCEVPtrToAddrExpr *S) { + Value *V = expand(S->getOperand()); + return ReuseOrCreateCast(V, S->getType(), CastInst::PtrToAddr, + GetOptimalInsertionPointForCastOf(V)); +} + Value *SCEVExpander::visitPtrToIntExpr(const SCEVPtrToIntExpr *S) { Value *V = expand(S->getOperand()); return ReuseOrCreateCast(V, S->getType(), CastInst::PtrToInt, @@ -1957,6 +1964,9 @@ template static InstructionCost costAndCollectOperands( case scConstant: case scVScale: return 0; + case scPtrToAddr: + Cost = CastCost(Instruction::PtrToAddr); + break; case scPtrToInt: Cost = CastCost(Instruction::PtrToInt); break; @@ -2080,6 +2090,7 @@ bool SCEVExpander::isHighCostExpansionHelper( return Cost > Budget; } case scTruncate: + case scPtrToAddr: case scPtrToInt: case scZeroExtend: case scSignExtend: { diff --git a/llvm/test/Analysis/LoopAccessAnalysis/runtime-check-known-true.ll b/llvm/test/Analysis/LoopAccessAnalysis/runtime-check-known-true.ll index 30c80880024bb..3809e2b951dde 100644 --- a/llvm/test/Analysis/LoopAccessAnalysis/runtime-check-known-true.ll +++ b/llvm/test/Analysis/LoopAccessAnalysis/runtime-check-known-true.ll @@ -15,15 +15,15 @@ define void @test_runtime_check_known_false_after_construction(ptr %start.1, ptr ; CHECK-NEXT: %ptr.iv.2 = phi ptr [ %ptr.iv.2.next, %loop ], [ %start.2.diff, %entry ] ; CHECK-NEXT: Grouped accesses: ; CHECK-NEXT: Group GRP0: -; CHECK-NEXT: (Low: ((-8 * ((2305843009213693951 * (8 + (-1 * (ptrtoint ptr %start.1 to i64)) + (ptrtoint ptr %end to i64))) /u 8)) + %start.1) High: (8 + %start.1)) +; CHECK-NEXT: (Low: ((-8 * ((2305843009213693951 * (8 + (-1 * (ptrtoint ptr %start.1 to i64)) + (ptrtoaddr ptr %end to i64))) /u 8)) + %start.1) High: (8 + %start.1)) ; CHECK-NEXT: Member: {%start.1,+,-8}<%loop> ; CHECK-NEXT: Group GRP1: -; CHECK-NEXT: (Low: (-8 + (-8 * ((2305843009213693951 * (8 + (-1 * (ptrtoint ptr %start.1 to i64)) + (ptrtoint ptr %end to i64))) /u 8)) + (-1 * (ptrtoint ptr %start.2 to i64)) + (ptrtoint ptr %start.1 to i64) + %start.2) High: ((-1 * (ptrtoint ptr %start.2 to i64)) + (ptrtoint ptr %start.1 to i64) + %start.2)) +; CHECK-NEXT: (Low: (-8 + (-8 * ((2305843009213693951 * (8 + (-1 * (ptrtoint ptr %start.1 to i64)) + (ptrtoaddr ptr %end to i64))) /u 8)) + (-1 * (ptrtoint ptr %start.2 to i64)) + (ptrtoint ptr %start.1 to i64) + %start.2) High: ((-1 * (ptrtoint ptr %start.2 to i64)) + (ptrtoint ptr %start.1 to i64) + %start.2)) ; CHECK-NEXT: Member: {(-8 + (-1 * (ptrtoint ptr %start.2 to i64)) + (ptrtoint ptr %start.1 to i64) + %start.2),+,-8}<%loop> ; CHECK-EMPTY: ; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop. ; CHECK-NEXT: SCEV assumptions: -; CHECK-NEXT: Equal predicate: (zext i3 ((trunc i64 (ptrtoint ptr %end to i64) to i3) + (-1 * (trunc i64 (ptrtoint ptr %start.1 to i64) to i3))) to i64) == 0 +; CHECK-NEXT: Equal predicate: (zext i3 ((trunc i64 (ptrtoaddr ptr %end to i64) to i3) + (-1 * (trunc i64 (ptrtoint ptr %start.1 to i64) to i3))) to i64) == 0 ; CHECK-EMPTY: ; CHECK-NEXT: Expressions re-written: ; diff --git a/llvm/test/Analysis/ScalarEvolution/flags-from-poison.ll b/llvm/test/Analysis/ScalarEvolution/flags-from-poison.ll index 593888f5f7bd5..0d07bcffe0441 100644 --- a/llvm/test/Analysis/ScalarEvolution/flags-from-poison.ll +++ b/llvm/test/Analysis/ScalarEvolution/flags-from-poison.ll @@ -2044,13 +2044,13 @@ define void @addrec_gep_inbounds_nneg(ptr %p, ptr %end) { ; CHECK-LABEL: 'addrec_gep_inbounds_nneg' ; CHECK-NEXT: Classifying expressions for: @addrec_gep_inbounds_nneg ; CHECK-NEXT: %iv = phi ptr [ %p, %entry ], [ %iv.next, %loop ] -; CHECK-NEXT: --> {%p,+,4}<%loop> U: full-set S: full-set Exits: ((4 * ((-4 + (-1 * (ptrtoint ptr %p to i64)) + (ptrtoint ptr %end to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } +; CHECK-NEXT: --> {%p,+,4}<%loop> U: full-set S: full-set Exits: ((4 * ((-4 + (-1 * (ptrtoaddr ptr %p to i64)) + (ptrtoaddr ptr %end to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } ; CHECK-NEXT: %iv.next = getelementptr inbounds i32, ptr %iv, i64 1 -; CHECK-NEXT: --> {(4 + %p),+,4}<%loop> U: [4,0) S: [4,0) Exits: (4 + (4 * ((-4 + (-1 * (ptrtoint ptr %p to i64)) + (ptrtoint ptr %end to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } +; CHECK-NEXT: --> {(4 + %p),+,4}<%loop> U: [4,0) S: [4,0) Exits: (4 + (4 * ((-4 + (-1 * (ptrtoaddr ptr %p to i64)) + (ptrtoaddr ptr %end to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } ; CHECK-NEXT: Determining loop execution counts for: @addrec_gep_inbounds_nneg -; CHECK-NEXT: Loop %loop: backedge-taken count is ((-4 + (-1 * (ptrtoint ptr %p to i64)) + (ptrtoint ptr %end to i64)) /u 4) +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-4 + (-1 * (ptrtoaddr ptr %p to i64)) + (ptrtoaddr ptr %end to i64)) /u 4) ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 4611686018427387903 -; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-4 + (-1 * (ptrtoint ptr %p to i64)) + (ptrtoint ptr %end to i64)) /u 4) +; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-4 + (-1 * (ptrtoaddr ptr %p to i64)) + (ptrtoaddr ptr %end to i64)) /u 4) ; CHECK-NEXT: Loop %loop: Trip multiple is 1 ; entry: @@ -2068,13 +2068,13 @@ define void @addrec_gep_inbounds_neg(ptr %p, ptr %end) { ; CHECK-LABEL: 'addrec_gep_inbounds_neg' ; CHECK-NEXT: Classifying expressions for: @addrec_gep_inbounds_neg ; CHECK-NEXT: %iv = phi ptr [ %p, %entry ], [ %iv.next, %loop ] -; CHECK-NEXT: --> {%p,+,-4}<%loop> U: full-set S: full-set Exits: ((-4 * ((-4 + (-1 * (ptrtoint ptr %end to i64)) + (ptrtoint ptr %p to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } +; CHECK-NEXT: --> {%p,+,-4}<%loop> U: full-set S: full-set Exits: ((-4 * ((-4 + (-1 * (ptrtoaddr ptr %end to i64)) + (ptrtoaddr ptr %p to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } ; CHECK-NEXT: %iv.next = getelementptr inbounds i32, ptr %iv, i64 -1 -; CHECK-NEXT: --> {(-4 + %p),+,-4}<%loop> U: full-set S: full-set Exits: (-4 + (-4 * ((-4 + (-1 * (ptrtoint ptr %end to i64)) + (ptrtoint ptr %p to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } +; CHECK-NEXT: --> {(-4 + %p),+,-4}<%loop> U: full-set S: full-set Exits: (-4 + (-4 * ((-4 + (-1 * (ptrtoaddr ptr %end to i64)) + (ptrtoaddr ptr %p to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } ; CHECK-NEXT: Determining loop execution counts for: @addrec_gep_inbounds_neg -; CHECK-NEXT: Loop %loop: backedge-taken count is ((-4 + (-1 * (ptrtoint ptr %end to i64)) + (ptrtoint ptr %p to i64)) /u 4) +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-4 + (-1 * (ptrtoaddr ptr %end to i64)) + (ptrtoaddr ptr %p to i64)) /u 4) ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 4611686018427387903 -; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-4 + (-1 * (ptrtoint ptr %end to i64)) + (ptrtoint ptr %p to i64)) /u 4) +; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-4 + (-1 * (ptrtoaddr ptr %end to i64)) + (ptrtoaddr ptr %p to i64)) /u 4) ; CHECK-NEXT: Loop %loop: Trip multiple is 1 ; entry: @@ -2092,13 +2092,13 @@ define void @addrec_gep_nusw_nneg(ptr %p, ptr %end) { ; CHECK-LABEL: 'addrec_gep_nusw_nneg' ; CHECK-NEXT: Classifying expressions for: @addrec_gep_nusw_nneg ; CHECK-NEXT: %iv = phi ptr [ %p, %entry ], [ %iv.next, %loop ] -; CHECK-NEXT: --> {%p,+,4}<%loop> U: full-set S: full-set Exits: ((4 * ((-4 + (-1 * (ptrtoint ptr %p to i64)) + (ptrtoint ptr %end to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } +; CHECK-NEXT: --> {%p,+,4}<%loop> U: full-set S: full-set Exits: ((4 * ((-4 + (-1 * (ptrtoaddr ptr %p to i64)) + (ptrtoaddr ptr %end to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } ; CHECK-NEXT: %iv.next = getelementptr nusw i32, ptr %iv, i64 1 -; CHECK-NEXT: --> {(4 + %p),+,4}<%loop> U: [4,0) S: [4,0) Exits: (4 + (4 * ((-4 + (-1 * (ptrtoint ptr %p to i64)) + (ptrtoint ptr %end to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } +; CHECK-NEXT: --> {(4 + %p),+,4}<%loop> U: [4,0) S: [4,0) Exits: (4 + (4 * ((-4 + (-1 * (ptrtoaddr ptr %p to i64)) + (ptrtoaddr ptr %end to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } ; CHECK-NEXT: Determining loop execution counts for: @addrec_gep_nusw_nneg -; CHECK-NEXT: Loop %loop: backedge-taken count is ((-4 + (-1 * (ptrtoint ptr %p to i64)) + (ptrtoint ptr %end to i64)) /u 4) +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-4 + (-1 * (ptrtoaddr ptr %p to i64)) + (ptrtoaddr ptr %end to i64)) /u 4) ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 4611686018427387903 -; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-4 + (-1 * (ptrtoint ptr %p to i64)) + (ptrtoint ptr %end to i64)) /u 4) +; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-4 + (-1 * (ptrtoaddr ptr %p to i64)) + (ptrtoaddr ptr %end to i64)) /u 4) ; CHECK-NEXT: Loop %loop: Trip multiple is 1 ; entry: @@ -2116,13 +2116,13 @@ define void @addrec_gep_nusw_neg(ptr %p, ptr %end) { ; CHECK-LABEL: 'addrec_gep_nusw_neg' ; CHECK-NEXT: Classifying expressions for: @addrec_gep_nusw_neg ; CHECK-NEXT: %iv = phi ptr [ %p, %entry ], [ %iv.next, %loop ] -; CHECK-NEXT: --> {%p,+,-4}<%loop> U: full-set S: full-set Exits: ((-4 * ((-4 + (-1 * (ptrtoint ptr %end to i64)) + (ptrtoint ptr %p to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } +; CHECK-NEXT: --> {%p,+,-4}<%loop> U: full-set S: full-set Exits: ((-4 * ((-4 + (-1 * (ptrtoaddr ptr %end to i64)) + (ptrtoaddr ptr %p to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } ; CHECK-NEXT: %iv.next = getelementptr nusw i32, ptr %iv, i64 -1 -; CHECK-NEXT: --> {(-4 + %p),+,-4}<%loop> U: full-set S: full-set Exits: (-4 + (-4 * ((-4 + (-1 * (ptrtoint ptr %end to i64)) + (ptrtoint ptr %p to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } +; CHECK-NEXT: --> {(-4 + %p),+,-4}<%loop> U: full-set S: full-set Exits: (-4 + (-4 * ((-4 + (-1 * (ptrtoaddr ptr %end to i64)) + (ptrtoaddr ptr %p to i64)) /u 4)) + %p) LoopDispositions: { %loop: Computable } ; CHECK-NEXT: Determining loop execution counts for: @addrec_gep_nusw_neg -; CHECK-NEXT: Loop %loop: backedge-taken count is ((-4 + (-1 * (ptrtoint ptr %end to i64)) + (ptrtoint ptr %p to i64)) /u 4) +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-4 + (-1 * (ptrtoaddr ptr %end to i64)) + (ptrtoaddr ptr %p to i64)) /u 4) ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 4611686018427387903 -; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-4 + (-1 * (ptrtoint ptr %end to i64)) + (ptrtoint ptr %p to i64)) /u 4) +; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-4 + (-1 * (ptrtoaddr ptr %end to i64)) + (ptrtoaddr ptr %p to i64)) /u 4) ; CHECK-NEXT: Loop %loop: Trip multiple is 1 ; entry: diff --git a/llvm/test/Analysis/ScalarEvolution/max-backedge-taken-count-guard-info.ll b/llvm/test/Analysis/ScalarEvolution/max-backedge-taken-count-guard-info.ll index 4024c986dd11d..867d0f4ce7e10 100644 --- a/llvm/test/Analysis/ScalarEvolution/max-backedge-taken-count-guard-info.ll +++ b/llvm/test/Analysis/ScalarEvolution/max-backedge-taken-count-guard-info.ll @@ -778,13 +778,13 @@ define void @crash(ptr %ptr) { ; CHECK-NEXT: %incdec.ptr112 = getelementptr inbounds i8, ptr %text.addr.5, i64 -1 ; CHECK-NEXT: --> {(-1 + null),+,-1}<%while.cond111> U: full-set S: full-set Exits: <> LoopDispositions: { %while.cond111: Computable, %while.body: Variant } ; CHECK-NEXT: %lastout.2271 = phi ptr [ %incdec.ptr126, %while.body125 ], [ %ptr, %while.end117 ] -; CHECK-NEXT: --> {%ptr,+,1}<%while.body125> U: full-set S: full-set Exits: {(-2 + (-1 * (ptrtoint ptr %ptr to i64)) + %ptr),+,-1}<%while.cond111> LoopDispositions: { %while.body125: Computable } +; CHECK-NEXT: --> {%ptr,+,1}<%while.body125> U: full-set S: full-set Exits: {(-2 + (-1 * (ptrtoaddr ptr %ptr to i64)) + %ptr),+,-1}<%while.cond111> LoopDispositions: { %while.body125: Computable } ; CHECK-NEXT: %incdec.ptr126 = getelementptr inbounds i8, ptr %lastout.2271, i64 1 -; CHECK-NEXT: --> {(1 + %ptr),+,1}<%while.body125> U: full-set S: full-set Exits: {(-1 + (-1 * (ptrtoint ptr %ptr to i64)) + %ptr),+,-1}<%while.cond111> LoopDispositions: { %while.body125: Computable } +; CHECK-NEXT: --> {(1 + %ptr),+,1}<%while.body125> U: full-set S: full-set Exits: {(-1 + (-1 * (ptrtoaddr ptr %ptr to i64)) + %ptr),+,-1}<%while.cond111> LoopDispositions: { %while.body125: Computable } ; CHECK-NEXT: Determining loop execution counts for: @crash -; CHECK-NEXT: Loop %while.body125: backedge-taken count is {(-2 + (-1 * (ptrtoint ptr %ptr to i64))),+,-1}<%while.cond111> +; CHECK-NEXT: Loop %while.body125: backedge-taken count is {(-2 + (-1 * (ptrtoaddr ptr %ptr to i64))),+,-1}<%while.cond111> ; CHECK-NEXT: Loop %while.body125: constant max backedge-taken count is i64 -2 -; CHECK-NEXT: Loop %while.body125: symbolic max backedge-taken count is {(-2 + (-1 * (ptrtoint ptr %ptr to i64))),+,-1}<%while.cond111> +; CHECK-NEXT: Loop %while.body125: symbolic max backedge-taken count is {(-2 + (-1 * (ptrtoaddr ptr %ptr to i64))),+,-1}<%while.cond111> ; CHECK-NEXT: Loop %while.body125: Trip multiple is 1 ; CHECK-NEXT: Loop %while.cond111: Unpredictable backedge-taken count. ; CHECK-NEXT: Loop %while.cond111: Unpredictable constant max backedge-taken count. @@ -1361,13 +1361,13 @@ define void @ptr_induction_eq_1(ptr %a, ptr %b) { ; CHECK-LABEL: 'ptr_induction_eq_1' ; CHECK-NEXT: Classifying expressions for: @ptr_induction_eq_1 ; CHECK-NEXT: %ptr.iv = phi ptr [ %ptr.iv.next, %loop ], [ %a, %entry ] -; CHECK-NEXT: --> {%a,+,8}<%loop> U: full-set S: full-set Exits: ((8 * ((-8 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) /u 8)) + %a) LoopDispositions: { %loop: Computable } +; CHECK-NEXT: --> {%a,+,8}<%loop> U: full-set S: full-set Exits: ((8 * ((-8 + (-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) /u 8)) + %a) LoopDispositions: { %loop: Computable } ; CHECK-NEXT: %ptr.iv.next = getelementptr inbounds i8, ptr %ptr.iv, i64 8 -; CHECK-NEXT: --> {(8 + %a),+,8}<%loop> U: full-set S: full-set Exits: (8 + (8 * ((-8 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) /u 8)) + %a) LoopDispositions: { %loop: Computable } +; CHECK-NEXT: --> {(8 + %a),+,8}<%loop> U: full-set S: full-set Exits: (8 + (8 * ((-8 + (-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) /u 8)) + %a) LoopDispositions: { %loop: Computable } ; CHECK-NEXT: Determining loop execution counts for: @ptr_induction_eq_1 -; CHECK-NEXT: Loop %loop: backedge-taken count is ((-8 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) /u 8) +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-8 + (-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) /u 8) ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 2305843009213693951 -; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-8 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) /u 8) +; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-8 + (-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) /u 8) ; CHECK-NEXT: Loop %loop: Trip multiple is 1 ; entry: @@ -1430,11 +1430,11 @@ define void @ptr_induction_early_exit_eq_1_with_align_on_load(ptr %a, ptr %b, pt ; CHECK-NEXT: Determining loop execution counts for: @ptr_induction_early_exit_eq_1_with_align_on_load ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. ; CHECK-NEXT: exit count for loop: ***COULDNOTCOMPUTE*** -; CHECK-NEXT: exit count for loop.inc: ((-8 + (-1 * (ptrtoint ptr %a_ to i64)) + (ptrtoint ptr %b_ to i64)) /u 8) +; CHECK-NEXT: exit count for loop.inc: ((-8 + (-1 * (ptrtoaddr ptr %a_ to i64)) + (ptrtoaddr ptr %b_ to i64)) /u 8) ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 2305843009213693951 -; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-8 + (-1 * (ptrtoint ptr %a_ to i64)) + (ptrtoint ptr %b_ to i64)) /u 8) +; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-8 + (-1 * (ptrtoaddr ptr %a_ to i64)) + (ptrtoaddr ptr %b_ to i64)) /u 8) ; CHECK-NEXT: symbolic max exit count for loop: ***COULDNOTCOMPUTE*** -; CHECK-NEXT: symbolic max exit count for loop.inc: ((-8 + (-1 * (ptrtoint ptr %a_ to i64)) + (ptrtoint ptr %b_ to i64)) /u 8) +; CHECK-NEXT: symbolic max exit count for loop.inc: ((-8 + (-1 * (ptrtoaddr ptr %a_ to i64)) + (ptrtoaddr ptr %b_ to i64)) /u 8) ; entry: %a_ = load ptr, ptr %a, !align !{i64 8} @@ -1469,11 +1469,11 @@ define void @ptr_induction_early_exit_eq_1_with_align_on_arguments(ptr align 8 % ; CHECK-NEXT: Determining loop execution counts for: @ptr_induction_early_exit_eq_1_with_align_on_arguments ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. ; CHECK-NEXT: exit count for loop: ***COULDNOTCOMPUTE*** -; CHECK-NEXT: exit count for loop.inc: ((-8 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) /u 8) +; CHECK-NEXT: exit count for loop.inc: ((-8 + (-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) /u 8) ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 2305843009213693951 -; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-8 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) /u 8) +; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-8 + (-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) /u 8) ; CHECK-NEXT: symbolic max exit count for loop: ***COULDNOTCOMPUTE*** -; CHECK-NEXT: symbolic max exit count for loop.inc: ((-8 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) /u 8) +; CHECK-NEXT: symbolic max exit count for loop.inc: ((-8 + (-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) /u 8) ; entry: %cmp = icmp eq ptr %a, %b @@ -1510,11 +1510,11 @@ define void @ptr_induction_early_exit_eq_1_align_assumption_1(ptr %a, ptr %b, pt ; CHECK-NEXT: Determining loop execution counts for: @ptr_induction_early_exit_eq_1_align_assumption_1 ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. ; CHECK-NEXT: exit count for loop: ***COULDNOTCOMPUTE*** -; CHECK-NEXT: exit count for loop.inc: ((-8 + (-1 * (ptrtoint ptr %a_ to i64)) + (ptrtoint ptr %b_ to i64)) /u 8) +; CHECK-NEXT: exit count for loop.inc: ((-8 + (-1 * (ptrtoaddr ptr %a_ to i64)) + (ptrtoaddr ptr %b_ to i64)) /u 8) ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 2305843009213693951 -; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-8 + (-1 * (ptrtoint ptr %a_ to i64)) + (ptrtoint ptr %b_ to i64)) /u 8) +; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-8 + (-1 * (ptrtoaddr ptr %a_ to i64)) + (ptrtoaddr ptr %b_ to i64)) /u 8) ; CHECK-NEXT: symbolic max exit count for loop: ***COULDNOTCOMPUTE*** -; CHECK-NEXT: symbolic max exit count for loop.inc: ((-8 + (-1 * (ptrtoint ptr %a_ to i64)) + (ptrtoint ptr %b_ to i64)) /u 8) +; CHECK-NEXT: symbolic max exit count for loop.inc: ((-8 + (-1 * (ptrtoaddr ptr %a_ to i64)) + (ptrtoaddr ptr %b_ to i64)) /u 8) ; entry: %a_ = load ptr, ptr %a @@ -1555,11 +1555,11 @@ define void @ptr_induction_early_exit_eq_1_align_assumption_2(ptr %a, ptr %b, pt ; CHECK-NEXT: Determining loop execution counts for: @ptr_induction_early_exit_eq_1_align_assumption_2 ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. ; CHECK-NEXT: exit count for loop: ***COULDNOTCOMPUTE*** -; CHECK-NEXT: exit count for loop.inc: ((-8 + (-1 * (ptrtoint ptr %a_ to i64)) + (ptrtoint ptr %b_ to i64)) /u 8) +; CHECK-NEXT: exit count for loop.inc: ((-8 + (-1 * (ptrtoaddr ptr %a_ to i64)) + (ptrtoaddr ptr %b_ to i64)) /u 8) ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 2305843009213693951 -; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-8 + (-1 * (ptrtoint ptr %a_ to i64)) + (ptrtoint ptr %b_ to i64)) /u 8) +; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-8 + (-1 * (ptrtoaddr ptr %a_ to i64)) + (ptrtoaddr ptr %b_ to i64)) /u 8) ; CHECK-NEXT: symbolic max exit count for loop: ***COULDNOTCOMPUTE*** -; CHECK-NEXT: symbolic max exit count for loop.inc: ((-8 + (-1 * (ptrtoint ptr %a_ to i64)) + (ptrtoint ptr %b_ to i64)) /u 8) +; CHECK-NEXT: symbolic max exit count for loop.inc: ((-8 + (-1 * (ptrtoaddr ptr %a_ to i64)) + (ptrtoaddr ptr %b_ to i64)) /u 8) ; entry: %a_ = load ptr, ptr %a diff --git a/llvm/test/Analysis/ScalarEvolution/no-wrap-symbolic-becount.ll b/llvm/test/Analysis/ScalarEvolution/no-wrap-symbolic-becount.ll index e13a8976bf5ac..85c213c7ab090 100644 --- a/llvm/test/Analysis/ScalarEvolution/no-wrap-symbolic-becount.ll +++ b/llvm/test/Analysis/ScalarEvolution/no-wrap-symbolic-becount.ll @@ -126,13 +126,13 @@ define void @pointer_iv_nowrap_guard(ptr %startptr, ptr %endptr) local_unnamed_a ; CHECK-NEXT: %init = getelementptr inbounds i32, ptr %startptr, i64 2000 ; CHECK-NEXT: --> (8000 + %startptr) U: [8000,0) S: [8000,0) ; CHECK-NEXT: %iv = phi ptr [ %init, %entry ], [ %iv.next, %loop ] -; CHECK-NEXT: --> {(8000 + %startptr),+,4}<%loop> U: [8000,0) S: [8000,0) Exits: (8000 + (4 * ((-8001 + (-1 * (ptrtoint ptr %startptr to i64)) + ((8004 + (ptrtoint ptr %startptr to i64)) umax (ptrtoint ptr %endptr to i64))) /u 4)) + %startptr) LoopDispositions: { %loop: Computable } +; CHECK-NEXT: --> {(8000 + %startptr),+,4}<%loop> U: [8000,0) S: [8000,0) Exits: (8000 + (4 * ((-8001 + (-1 * (ptrtoaddr ptr %startptr to i64)) + ((8004 + (ptrtoaddr ptr %startptr to i64)) umax (ptrtoaddr ptr %endptr to i64))) /u 4)) + %startptr) LoopDispositions: { %loop: Computable } ; CHECK-NEXT: %iv.next = getelementptr inbounds i32, ptr %iv, i64 1 -; CHECK-NEXT: --> {(8004 + %startptr),+,4}<%loop> U: full-set S: full-set Exits: (8004 + (4 * ((-8001 + (-1 * (ptrtoint ptr %startptr to i64)) + ((8004 + (ptrtoint ptr %startptr to i64)) umax (ptrtoint ptr %endptr to i64))) /u 4)) + %startptr) LoopDispositions: { %loop: Computable } +; CHECK-NEXT: --> {(8004 + %startptr),+,4}<%loop> U: full-set S: full-set Exits: (8004 + (4 * ((-8001 + (-1 * (ptrtoaddr ptr %startptr to i64)) + ((8004 + (ptrtoaddr ptr %startptr to i64)) umax (ptrtoaddr ptr %endptr to i64))) /u 4)) + %startptr) LoopDispositions: { %loop: Computable } ; CHECK-NEXT: Determining loop execution counts for: @pointer_iv_nowrap_guard -; CHECK-NEXT: Loop %loop: backedge-taken count is ((-8001 + (-1 * (ptrtoint ptr %startptr to i64)) + ((8004 + (ptrtoint ptr %startptr to i64)) umax (ptrtoint ptr %endptr to i64))) /u 4) +; CHECK-NEXT: Loop %loop: backedge-taken count is ((-8001 + (-1 * (ptrtoaddr ptr %startptr to i64)) + ((8004 + (ptrtoaddr ptr %startptr to i64)) umax (ptrtoaddr ptr %endptr to i64))) /u 4) ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 4611686018427387903 -; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-8001 + (-1 * (ptrtoint ptr %startptr to i64)) + ((8004 + (ptrtoint ptr %startptr to i64)) umax (ptrtoint ptr %endptr to i64))) /u 4) +; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-8001 + (-1 * (ptrtoaddr ptr %startptr to i64)) + ((8004 + (ptrtoaddr ptr %startptr to i64)) umax (ptrtoaddr ptr %endptr to i64))) /u 4) ; CHECK-NEXT: Loop %loop: Trip multiple is 1 ; entry: diff --git a/llvm/test/Analysis/ScalarEvolution/nsw.ll b/llvm/test/Analysis/ScalarEvolution/nsw.ll index 4d668d1ffef11..c529f9e39a13d 100644 --- a/llvm/test/Analysis/ScalarEvolution/nsw.ll +++ b/llvm/test/Analysis/ScalarEvolution/nsw.ll @@ -71,13 +71,13 @@ define void @test2(ptr %begin, ptr %end) ssp { ; CHECK-LABEL: 'test2' ; CHECK-NEXT: Classifying expressions for: @test2 ; CHECK-NEXT: %__first.addr.02.i.i = phi ptr [ %begin, %for.body.lr.ph.i.i ], [ %ptrincdec.i.i, %for.body.i.i ] -; CHECK-NEXT: --> {%begin,+,4}<%for.body.i.i> U: full-set S: full-set Exits: ((4 * ((-4 + (-1 * (ptrtoint ptr %begin to i64)) + (ptrtoint ptr %end to i64)) /u 4)) + %begin) LoopDispositions: { %for.body.i.i: Computable } +; CHECK-NEXT: --> {%begin,+,4}<%for.body.i.i> U: full-set S: full-set Exits: ((4 * ((-4 + (-1 * (ptrtoaddr ptr %begin to i64)) + (ptrtoaddr ptr %end to i64)) /u 4)) + %begin) LoopDispositions: { %for.body.i.i: Computable } ; CHECK-NEXT: %ptrincdec.i.i = getelementptr inbounds i32, ptr %__first.addr.02.i.i, i64 1 -; CHECK-NEXT: --> {(4 + %begin),+,4}<%for.body.i.i> U: full-set S: full-set Exits: (4 + (4 * ((-4 + (-1 * (ptrtoint ptr %begin to i64)) + (ptrtoint ptr %end to i64)) /u 4)) + %begin) LoopDispositions: { %for.body.i.i: Computable } +; CHECK-NEXT: --> {(4 + %begin),+,4}<%for.body.i.i> U: full-set S: full-set Exits: (4 + (4 * ((-4 + (-1 * (ptrtoaddr ptr %begin to i64)) + (ptrtoaddr ptr %end to i64)) /u 4)) + %begin) LoopDispositions: { %for.body.i.i: Computable } ; CHECK-NEXT: Determining loop execution counts for: @test2 -; CHECK-NEXT: Loop %for.body.i.i: backedge-taken count is ((-4 + (-1 * (ptrtoint ptr %begin to i64)) + (ptrtoint ptr %end to i64)) /u 4) +; CHECK-NEXT: Loop %for.body.i.i: backedge-taken count is ((-4 + (-1 * (ptrtoaddr ptr %begin to i64)) + (ptrtoaddr ptr %end to i64)) /u 4) ; CHECK-NEXT: Loop %for.body.i.i: constant max backedge-taken count is i64 4611686018427387903 -; CHECK-NEXT: Loop %for.body.i.i: symbolic max backedge-taken count is ((-4 + (-1 * (ptrtoint ptr %begin to i64)) + (ptrtoint ptr %end to i64)) /u 4) +; CHECK-NEXT: Loop %for.body.i.i: symbolic max backedge-taken count is ((-4 + (-1 * (ptrtoaddr ptr %begin to i64)) + (ptrtoaddr ptr %end to i64)) /u 4) ; CHECK-NEXT: Loop %for.body.i.i: Trip multiple is 1 ; entry: @@ -106,17 +106,17 @@ define void @test3(ptr %begin, ptr %end) nounwind ssp { ; CHECK-LABEL: 'test3' ; CHECK-NEXT: Classifying expressions for: @test3 ; CHECK-NEXT: %indvar.i.i = phi i64 [ %tmp, %for.body.i.i ], [ 0, %entry ] -; CHECK-NEXT: --> {0,+,1}<%for.body.i.i> U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: ((-4 + (-1 * (ptrtoint ptr %begin to i64)) + (ptrtoint ptr %end to i64)) /u 4) LoopDispositions: { %for.body.i.i: Computable } +; CHECK-NEXT: --> {0,+,1}<%for.body.i.i> U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: ((-4 + (-1 * (ptrtoaddr ptr %begin to i64)) + (ptrtoaddr ptr %end to i64)) /u 4) LoopDispositions: { %for.body.i.i: Computable } ; CHECK-NEXT: %tmp = add nsw i64 %indvar.i.i, 1 -; CHECK-NEXT: --> {1,+,1}<%for.body.i.i> U: [1,4611686018427387905) S: [1,4611686018427387905) Exits: (1 + ((-4 + (-1 * (ptrtoint ptr %begin to i64)) + (ptrtoint ptr %end to i64)) /u 4)) LoopDispositions: { %for.body.i.i: Computable } +; CHECK-NEXT: --> {1,+,1}<%for.body.i.i> U: [1,4611686018427387905) S: [1,4611686018427387905) Exits: (1 + ((-4 + (-1 * (ptrtoaddr ptr %begin to i64)) + (ptrtoaddr ptr %end to i64)) /u 4)) LoopDispositions: { %for.body.i.i: Computable } ; CHECK-NEXT: %ptrincdec.i.i = getelementptr inbounds i32, ptr %begin, i64 %tmp -; CHECK-NEXT: --> {(4 + %begin),+,4}<%for.body.i.i> U: full-set S: full-set Exits: (4 + (4 * ((-4 + (-1 * (ptrtoint ptr %begin to i64)) + (ptrtoint ptr %end to i64)) /u 4)) + %begin) LoopDispositions: { %for.body.i.i: Computable } +; CHECK-NEXT: --> {(4 + %begin),+,4}<%for.body.i.i> U: full-set S: full-set Exits: (4 + (4 * ((-4 + (-1 * (ptrtoaddr ptr %begin to i64)) + (ptrtoaddr ptr %end to i64)) /u 4)) + %begin) LoopDispositions: { %for.body.i.i: Computable } ; CHECK-NEXT: %__first.addr.08.i.i = getelementptr inbounds i32, ptr %begin, i64 %indvar.i.i -; CHECK-NEXT: --> {%begin,+,4}<%for.body.i.i> U: full-set S: full-set Exits: ((4 * ((-4 + (-1 * (ptrtoint ptr %begin to i64)) + (ptrtoint ptr %end to i64)) /u 4)) + %begin) LoopDispositions: { %for.body.i.i: Computable } +; CHECK-NEXT: --> {%begin,+,4}<%for.body.i.i> U: full-set S: full-set Exits: ((4 * ((-4 + (-1 * (ptrtoaddr ptr %begin to i64)) + (ptrtoaddr ptr %end to i64)) /u 4)) + %begin) LoopDispositions: { %for.body.i.i: Computable } ; CHECK-NEXT: Determining loop execution counts for: @test3 -; CHECK-NEXT: Loop %for.body.i.i: backedge-taken count is ((-4 + (-1 * (ptrtoint ptr %begin to i64)) + (ptrtoint ptr %end to i64)) /u 4) +; CHECK-NEXT: Loop %for.body.i.i: backedge-taken count is ((-4 + (-1 * (ptrtoaddr ptr %begin to i64)) + (ptrtoaddr ptr %end to i64)) /u 4) ; CHECK-NEXT: Loop %for.body.i.i: constant max backedge-taken count is i64 4611686018427387903 -; CHECK-NEXT: Loop %for.body.i.i: symbolic max backedge-taken count is ((-4 + (-1 * (ptrtoint ptr %begin to i64)) + (ptrtoint ptr %end to i64)) /u 4) +; CHECK-NEXT: Loop %for.body.i.i: symbolic max backedge-taken count is ((-4 + (-1 * (ptrtoaddr ptr %begin to i64)) + (ptrtoaddr ptr %end to i64)) /u 4) ; CHECK-NEXT: Loop %for.body.i.i: Trip multiple is 1 ; entry: @@ -200,13 +200,13 @@ define void @PR12376(ptr nocapture %arg, ptr nocapture %arg1) { ; CHECK-LABEL: 'PR12376' ; CHECK-NEXT: Classifying expressions for: @PR12376 ; CHECK-NEXT: %tmp = phi ptr [ %arg, %bb ], [ %tmp4, %bb2 ] -; CHECK-NEXT: --> {%arg,+,4}<%bb2> U: full-set S: full-set Exits: ((4 * ((-1 + (-1 * (ptrtoint ptr %arg to i64)) + ((4 + (ptrtoint ptr %arg to i64)) umax (ptrtoint ptr %arg1 to i64))) /u 4)) + %arg) LoopDispositions: { %bb2: Computable } +; CHECK-NEXT: --> {%arg,+,4}<%bb2> U: full-set S: full-set Exits: ((4 * ((-1 + (-1 * (ptrtoaddr ptr %arg to i64)) + ((4 + (ptrtoaddr ptr %arg to i64)) umax (ptrtoaddr ptr %arg1 to i64))) /u 4)) + %arg) LoopDispositions: { %bb2: Computable } ; CHECK-NEXT: %tmp4 = getelementptr inbounds i32, ptr %tmp, i64 1 -; CHECK-NEXT: --> {(4 + %arg),+,4}<%bb2> U: [4,0) S: [4,0) Exits: (4 + (4 * ((-1 + (-1 * (ptrtoint ptr %arg to i64)) + ((4 + (ptrtoint ptr %arg to i64)) umax (ptrtoint ptr %arg1 to i64))) /u 4)) + %arg) LoopDispositions: { %bb2: Computable } +; CHECK-NEXT: --> {(4 + %arg),+,4}<%bb2> U: [4,0) S: [4,0) Exits: (4 + (4 * ((-1 + (-1 * (ptrtoaddr ptr %arg to i64)) + ((4 + (ptrtoaddr ptr %arg to i64)) umax (ptrtoaddr ptr %arg1 to i64))) /u 4)) + %arg) LoopDispositions: { %bb2: Computable } ; CHECK-NEXT: Determining loop execution counts for: @PR12376 -; CHECK-NEXT: Loop %bb2: backedge-taken count is ((-1 + (-1 * (ptrtoint ptr %arg to i64)) + ((4 + (ptrtoint ptr %arg to i64)) umax (ptrtoint ptr %arg1 to i64))) /u 4) +; CHECK-NEXT: Loop %bb2: backedge-taken count is ((-1 + (-1 * (ptrtoaddr ptr %arg to i64)) + ((4 + (ptrtoaddr ptr %arg to i64)) umax (ptrtoaddr ptr %arg1 to i64))) /u 4) ; CHECK-NEXT: Loop %bb2: constant max backedge-taken count is i64 4611686018427387902 -; CHECK-NEXT: Loop %bb2: symbolic max backedge-taken count is ((-1 + (-1 * (ptrtoint ptr %arg to i64)) + ((4 + (ptrtoint ptr %arg to i64)) umax (ptrtoint ptr %arg1 to i64))) /u 4) +; CHECK-NEXT: Loop %bb2: symbolic max backedge-taken count is ((-1 + (-1 * (ptrtoaddr ptr %arg to i64)) + ((4 + (ptrtoaddr ptr %arg to i64)) umax (ptrtoaddr ptr %arg1 to i64))) /u 4) ; CHECK-NEXT: Loop %bb2: Trip multiple is 1 ; bb: diff --git a/llvm/test/Analysis/ScalarEvolution/predicated-max-backedge-taken-count-guard-info.ll b/llvm/test/Analysis/ScalarEvolution/predicated-max-backedge-taken-count-guard-info.ll index 1805b983c8e2e..c408a111c5679 100644 --- a/llvm/test/Analysis/ScalarEvolution/predicated-max-backedge-taken-count-guard-info.ll +++ b/llvm/test/Analysis/ScalarEvolution/predicated-max-backedge-taken-count-guard-info.ll @@ -7,15 +7,15 @@ define i32 @ptr_induction_ult(ptr %a, ptr %b) { ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. ; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count. ; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count. -; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (((-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) /u 4) +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (((-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) /u 4) ; CHECK-NEXT: Predicates: -; CHECK-NEXT: Equal predicate: (zext i2 ((trunc i64 (ptrtoint ptr %b to i64) to i2) + (-1 * (trunc i64 (ptrtoint ptr %a to i64) to i2))) to i64) == 0 +; CHECK-NEXT: Equal predicate: (zext i2 ((trunc i64 (ptrtoaddr ptr %b to i64) to i2) + (-1 * (trunc i64 (ptrtoaddr ptr %a to i64) to i2))) to i64) == 0 ; CHECK-NEXT: Loop %loop: Predicated constant max backedge-taken count is i64 4611686018427387903 ; CHECK-NEXT: Predicates: -; CHECK-NEXT: Equal predicate: (zext i2 ((trunc i64 (ptrtoint ptr %b to i64) to i2) + (-1 * (trunc i64 (ptrtoint ptr %a to i64) to i2))) to i64) == 0 -; CHECK-NEXT: Loop %loop: Predicated symbolic max backedge-taken count is (((-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) /u 4) +; CHECK-NEXT: Equal predicate: (zext i2 ((trunc i64 (ptrtoaddr ptr %b to i64) to i2) + (-1 * (trunc i64 (ptrtoaddr ptr %a to i64) to i2))) to i64) == 0 +; CHECK-NEXT: Loop %loop: Predicated symbolic max backedge-taken count is (((-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) /u 4) ; CHECK-NEXT: Predicates: -; CHECK-NEXT: Equal predicate: (zext i2 ((trunc i64 (ptrtoint ptr %b to i64) to i2) + (-1 * (trunc i64 (ptrtoint ptr %a to i64) to i2))) to i64) == 0 +; CHECK-NEXT: Equal predicate: (zext i2 ((trunc i64 (ptrtoaddr ptr %b to i64) to i2) + (-1 * (trunc i64 (ptrtoaddr ptr %a to i64) to i2))) to i64) == 0 ; entry: %cmp.6 = icmp ult ptr %a, %b @@ -37,15 +37,15 @@ define i32 @ptr_induction_ult_3_step_6(ptr %a, ptr %b) { ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. ; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count. ; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count. -; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (((3074457345618258603 * (ptrtoint ptr %b to i64)) + (-3074457345618258603 * (ptrtoint ptr %a to i64))) /u 2) +; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is (((3074457345618258603 * (ptrtoaddr ptr %b to i64)) + (-3074457345618258603 * (ptrtoaddr ptr %a to i64))) /u 2) ; CHECK-NEXT: Predicates: -; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 ((-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) to i1) to i64) == 0 +; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 ((-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) to i1) to i64) == 0 ; CHECK-NEXT: Loop %loop: Predicated constant max backedge-taken count is i64 9223372036854775807 ; CHECK-NEXT: Predicates: -; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 ((-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) to i1) to i64) == 0 -; CHECK-NEXT: Loop %loop: Predicated symbolic max backedge-taken count is (((3074457345618258603 * (ptrtoint ptr %b to i64)) + (-3074457345618258603 * (ptrtoint ptr %a to i64))) /u 2) +; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 ((-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) to i1) to i64) == 0 +; CHECK-NEXT: Loop %loop: Predicated symbolic max backedge-taken count is (((3074457345618258603 * (ptrtoaddr ptr %b to i64)) + (-3074457345618258603 * (ptrtoaddr ptr %a to i64))) /u 2) ; CHECK-NEXT: Predicates: -; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 ((-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) to i1) to i64) == 0 +; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 ((-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) to i1) to i64) == 0 ; entry: %cmp.6 = icmp ult ptr %a, %b @@ -64,9 +64,9 @@ exit: define i32 @ptr_induction_ult_3_step_7(ptr %a, ptr %b) { ; CHECK-LABEL: 'ptr_induction_ult_3_step_7' ; CHECK-NEXT: Determining loop execution counts for: @ptr_induction_ult_3_step_7 -; CHECK-NEXT: Loop %loop: backedge-taken count is ((7905747460161236407 * (ptrtoint ptr %b to i64)) + (-7905747460161236407 * (ptrtoint ptr %a to i64))) +; CHECK-NEXT: Loop %loop: backedge-taken count is ((7905747460161236407 * (ptrtoaddr ptr %b to i64)) + (-7905747460161236407 * (ptrtoaddr ptr %a to i64))) ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 -1 -; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((7905747460161236407 * (ptrtoint ptr %b to i64)) + (-7905747460161236407 * (ptrtoint ptr %a to i64))) +; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((7905747460161236407 * (ptrtoaddr ptr %b to i64)) + (-7905747460161236407 * (ptrtoaddr ptr %a to i64))) ; CHECK-NEXT: Loop %loop: Trip multiple is 1 ; entry: @@ -92,24 +92,24 @@ define void @ptr_induction_early_exit_eq_1(ptr %a, ptr %b, ptr %c) { ; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count. ; CHECK-NEXT: exit count for loop: ***COULDNOTCOMPUTE*** ; CHECK-NEXT: exit count for loop.inc: ***COULDNOTCOMPUTE*** -; CHECK-NEXT: predicated exit count for loop.inc: ((-8 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) /u 8) +; CHECK-NEXT: predicated exit count for loop.inc: ((-8 + (-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) /u 8) ; CHECK-NEXT: Predicates: -; CHECK-NEXT: Equal predicate: (zext i3 ((trunc i64 (ptrtoint ptr %b to i64) to i3) + (-1 * (trunc i64 (ptrtoint ptr %a to i64) to i3))) to i64) == 0 +; CHECK-NEXT: Equal predicate: (zext i3 ((trunc i64 (ptrtoaddr ptr %b to i64) to i3) + (-1 * (trunc i64 (ptrtoaddr ptr %a to i64) to i3))) to i64) == 0 ; CHECK-EMPTY: ; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count. ; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count. ; CHECK-NEXT: symbolic max exit count for loop: ***COULDNOTCOMPUTE*** ; CHECK-NEXT: symbolic max exit count for loop.inc: ***COULDNOTCOMPUTE*** -; CHECK-NEXT: predicated symbolic max exit count for loop.inc: ((-8 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) /u 8) +; CHECK-NEXT: predicated symbolic max exit count for loop.inc: ((-8 + (-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) /u 8) ; CHECK-NEXT: Predicates: -; CHECK-NEXT: Equal predicate: (zext i3 ((trunc i64 (ptrtoint ptr %b to i64) to i3) + (-1 * (trunc i64 (ptrtoint ptr %a to i64) to i3))) to i64) == 0 +; CHECK-NEXT: Equal predicate: (zext i3 ((trunc i64 (ptrtoaddr ptr %b to i64) to i3) + (-1 * (trunc i64 (ptrtoaddr ptr %a to i64) to i3))) to i64) == 0 ; CHECK-EMPTY: ; CHECK-NEXT: Loop %loop: Predicated constant max backedge-taken count is i64 2305843009213693951 ; CHECK-NEXT: Predicates: -; CHECK-NEXT: Equal predicate: (zext i3 ((trunc i64 (ptrtoint ptr %b to i64) to i3) + (-1 * (trunc i64 (ptrtoint ptr %a to i64) to i3))) to i64) == 0 -; CHECK-NEXT: Loop %loop: Predicated symbolic max backedge-taken count is ((-8 + (-1 * (ptrtoint ptr %a to i64)) + (ptrtoint ptr %b to i64)) /u 8) +; CHECK-NEXT: Equal predicate: (zext i3 ((trunc i64 (ptrtoaddr ptr %b to i64) to i3) + (-1 * (trunc i64 (ptrtoaddr ptr %a to i64) to i3))) to i64) == 0 +; CHECK-NEXT: Loop %loop: Predicated symbolic max backedge-taken count is ((-8 + (-1 * (ptrtoaddr ptr %a to i64)) + (ptrtoaddr ptr %b to i64)) /u 8) ; CHECK-NEXT: Predicates: -; CHECK-NEXT: Equal predicate: (zext i3 ((trunc i64 (ptrtoint ptr %b to i64) to i3) + (-1 * (trunc i64 (ptrtoint ptr %a to i64) to i3))) to i64) == 0 +; CHECK-NEXT: Equal predicate: (zext i3 ((trunc i64 (ptrtoaddr ptr %b to i64) to i3) + (-1 * (trunc i64 (ptrtoaddr ptr %a to i64) to i3))) to i64) == 0 ; entry: %cmp = icmp eq ptr %a, %b diff --git a/llvm/test/Transforms/IndVarSimplify/2011-11-01-lftrptr.ll b/llvm/test/Transforms/IndVarSimplify/2011-11-01-lftrptr.ll index cb0be523c7095..b0fbe8e62d056 100644 --- a/llvm/test/Transforms/IndVarSimplify/2011-11-01-lftrptr.ll +++ b/llvm/test/Transforms/IndVarSimplify/2011-11-01-lftrptr.ll @@ -12,7 +12,7 @@ define i8 @testnullptrptr(ptr %buf, ptr %end) nounwind { ; PTR64-LABEL: @testnullptrptr( -; PTR64-NEXT: [[END1:%.*]] = ptrtoint ptr [[END:%.*]] to i64 +; PTR64-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END:%.*]] to i64 ; PTR64-NEXT: br label [[LOOPGUARD:%.*]] ; PTR64: loopguard: ; PTR64-NEXT: [[GUARD:%.*]] = icmp ult ptr null, [[END]] @@ -34,7 +34,7 @@ define i8 @testnullptrptr(ptr %buf, ptr %end) nounwind { ; PTR64-NEXT: ret i8 [[RET]] ; ; PTR32-LABEL: @testnullptrptr( -; PTR32-NEXT: [[END1:%.*]] = ptrtoint ptr [[END:%.*]] to i32 +; PTR32-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END:%.*]] to i32 ; PTR32-NEXT: br label [[LOOPGUARD:%.*]] ; PTR32: loopguard: ; PTR32-NEXT: [[GUARD:%.*]] = icmp ult ptr null, [[END]] @@ -79,8 +79,8 @@ exit: define i8 @testptrptr(ptr %buf, ptr %end) nounwind { ; PTR64-LABEL: @testptrptr( -; PTR64-NEXT: [[BUF2:%.*]] = ptrtoint ptr [[BUF:%.*]] to i64 -; PTR64-NEXT: [[END1:%.*]] = ptrtoint ptr [[END:%.*]] to i64 +; PTR64-NEXT: [[BUF2:%.*]] = ptrtoaddr ptr [[BUF:%.*]] to i64 +; PTR64-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END:%.*]] to i64 ; PTR64-NEXT: br label [[LOOPGUARD:%.*]] ; PTR64: loopguard: ; PTR64-NEXT: [[GUARD:%.*]] = icmp ult ptr [[BUF]], [[END]] @@ -103,8 +103,8 @@ define i8 @testptrptr(ptr %buf, ptr %end) nounwind { ; PTR64-NEXT: ret i8 [[RET]] ; ; PTR32-LABEL: @testptrptr( -; PTR32-NEXT: [[BUF2:%.*]] = ptrtoint ptr [[BUF:%.*]] to i32 -; PTR32-NEXT: [[END1:%.*]] = ptrtoint ptr [[END:%.*]] to i32 +; PTR32-NEXT: [[BUF2:%.*]] = ptrtoaddr ptr [[BUF:%.*]] to i32 +; PTR32-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END:%.*]] to i32 ; PTR32-NEXT: br label [[LOOPGUARD:%.*]] ; PTR32: loopguard: ; PTR32-NEXT: [[GUARD:%.*]] = icmp ult ptr [[BUF]], [[END]] diff --git a/llvm/test/Transforms/IndVarSimplify/lftr.ll b/llvm/test/Transforms/IndVarSimplify/lftr.ll index 5ee62ba357ab6..74332ab69aece 100644 --- a/llvm/test/Transforms/IndVarSimplify/lftr.ll +++ b/llvm/test/Transforms/IndVarSimplify/lftr.ll @@ -637,7 +637,7 @@ define void @ptr_non_cmp_exit_test() { ; CHECK-NEXT: [[IV:%.*]] = phi ptr [ null, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[FOR_BODY29]] ] ; CHECK-NEXT: [[TMP0:%.*]] = load volatile i8, ptr [[IV]], align 1 ; CHECK-NEXT: [[IV_NEXT]] = getelementptr inbounds i8, ptr [[IV]], i64 1 -; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne ptr [[IV]], inttoptr (i64 10 to ptr) +; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne ptr [[IV]], getelementptr (i8, ptr null, i64 add (i64 ptrtoaddr (ptr inttoptr (i64 11 to ptr) to i64), i64 -1)) ; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_BODY29]], label [[EXIT:%.*]] ; CHECK: exit: ; CHECK-NEXT: ret void diff --git a/llvm/test/Transforms/LoopIdiom/memset-debugify-remarks.ll b/llvm/test/Transforms/LoopIdiom/memset-debugify-remarks.ll index c116b473e74ee..5be1e8f689145 100644 --- a/llvm/test/Transforms/LoopIdiom/memset-debugify-remarks.ll +++ b/llvm/test/Transforms/LoopIdiom/memset-debugify-remarks.ll @@ -33,8 +33,8 @@ target triple = "x86_64-unknown-linux-gnu" define void @_Z15my_basic_memsetPcS_c(ptr %ptr, ptr %end, i8 %value) { ; CHECK-LABEL: @_Z15my_basic_memsetPcS_c( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[PTR2:%.*]] = ptrtoint ptr [[PTR:%.*]] to i64, !dbg [[DBG15:![0-9]+]] -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END:%.*]] to i64, !dbg [[DBG15]] +; CHECK-NEXT: [[PTR2:%.*]] = ptrtoaddr ptr [[PTR:%.*]] to i64, !dbg [[DBG15:![0-9]+]] +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END:%.*]] to i64, !dbg [[DBG15]] ; CHECK-NEXT: [[CMP3:%.*]] = icmp eq ptr [[PTR]], [[END]], !dbg [[DBG15]] ; CHECK-NEXT: #dbg_value(i1 [[CMP3]], [[META9:![0-9]+]], !DIExpression(), [[DBG15]]) ; CHECK-NEXT: br i1 [[CMP3]], label [[FOR_END:%.*]], label [[FOR_BODY_PREHEADER:%.*]], !dbg [[DBG16:![0-9]+]] diff --git a/llvm/test/Transforms/LoopStrengthReduce/X86/expander-crashes.ll b/llvm/test/Transforms/LoopStrengthReduce/X86/expander-crashes.ll index d652e5c5aa060..bb759aefcdf44 100644 --- a/llvm/test/Transforms/LoopStrengthReduce/X86/expander-crashes.ll +++ b/llvm/test/Transforms/LoopStrengthReduce/X86/expander-crashes.ll @@ -11,7 +11,7 @@ target triple = "x86_64-apple-macosx10.15.0" define i64 @blam(ptr %start, ptr %end, ptr %ptr.2) { ; CHECK-LABEL: @blam( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[START1:%.*]] = ptrtoint ptr [[START:%.*]] to i64 +; CHECK-NEXT: [[START1:%.*]] = ptrtoaddr ptr [[START:%.*]] to i64 ; CHECK-NEXT: br label [[LOOP_1_HEADER:%.*]] ; CHECK: loop.1.header: ; CHECK-NEXT: [[LSR_IV4:%.*]] = phi i64 [ [[LSR_IV_NEXT5:%.*]], [[LOOP_1_HEADER]] ], [ [[START1]], [[ENTRY:%.*]] ] diff --git a/llvm/test/Transforms/LoopUnroll/AArch64/apple-unrolling-multi-exit.ll b/llvm/test/Transforms/LoopUnroll/AArch64/apple-unrolling-multi-exit.ll index 98ee590f27f03..f9dd06d345085 100644 --- a/llvm/test/Transforms/LoopUnroll/AArch64/apple-unrolling-multi-exit.ll +++ b/llvm/test/Transforms/LoopUnroll/AArch64/apple-unrolling-multi-exit.ll @@ -13,10 +13,10 @@ define i1 @multi_2_exit_find_i8_loop(ptr %vec, i8 %tgt) { ; APPLE-SAME: ptr [[VEC:%.*]], i8 [[TGT:%.*]]) #[[ATTR0:[0-9]+]] { ; APPLE-NEXT: [[ENTRY:.*]]: ; APPLE-NEXT: [[START:%.*]] = load ptr, ptr [[VEC]], align 8 -; APPLE-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 +; APPLE-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 ; APPLE-NEXT: [[GEP_END:%.*]] = getelementptr inbounds nuw i8, ptr [[VEC]], i64 1 ; APPLE-NEXT: [[END:%.*]] = load ptr, ptr [[GEP_END]], align 8 -; APPLE-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; APPLE-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; APPLE-NEXT: [[TMP0:%.*]] = sub i64 [[END1]], [[START2]] ; APPLE-NEXT: [[TMP1:%.*]] = freeze i64 [[TMP0]] ; APPLE-NEXT: [[TMP2:%.*]] = add i64 [[TMP1]], -1 @@ -136,11 +136,11 @@ define i1 @multi_2_exit_find_ptr_loop(ptr %vec, ptr %tgt) { ; APPLE-SAME: ptr [[VEC:%.*]], ptr [[TGT:%.*]]) #[[ATTR0]] { ; APPLE-NEXT: [[ENTRY:.*]]: ; APPLE-NEXT: [[START:%.*]] = load ptr, ptr [[VEC]], align 8 -; APPLE-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 +; APPLE-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 ; APPLE-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[START]], i64 8) ] ; APPLE-NEXT: [[GEP_END:%.*]] = getelementptr inbounds nuw i8, ptr [[VEC]], i64 8 ; APPLE-NEXT: [[END:%.*]] = load ptr, ptr [[GEP_END]], align 8 -; APPLE-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; APPLE-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; APPLE-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[END]], i64 8) ] ; APPLE-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; APPLE-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] diff --git a/llvm/test/Transforms/LoopUnroll/AArch64/unrolling-multi-exit.ll b/llvm/test/Transforms/LoopUnroll/AArch64/unrolling-multi-exit.ll index c785a162db20c..cb62b3941bd07 100644 --- a/llvm/test/Transforms/LoopUnroll/AArch64/unrolling-multi-exit.ll +++ b/llvm/test/Transforms/LoopUnroll/AArch64/unrolling-multi-exit.ll @@ -10,10 +10,10 @@ define i1 @multi_2_exiting_find_i8_loop_same_exit(ptr %vec, i8 %tgt) { ; UNROLL4-SAME: ptr [[VEC:%.*]], i8 [[TGT:%.*]]) #[[ATTR0:[0-9]+]] { ; UNROLL4-NEXT: [[ENTRY:.*]]: ; UNROLL4-NEXT: [[START:%.*]] = load ptr, ptr [[VEC]], align 8 -; UNROLL4-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 +; UNROLL4-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 ; UNROLL4-NEXT: [[GEP_END:%.*]] = getelementptr inbounds nuw i8, ptr [[VEC]], i64 1 ; UNROLL4-NEXT: [[END:%.*]] = load ptr, ptr [[GEP_END]], align 8 -; UNROLL4-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; UNROLL4-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; UNROLL4-NEXT: [[TMP0:%.*]] = sub i64 [[END1]], [[START2]] ; UNROLL4-NEXT: [[TMP1:%.*]] = freeze i64 [[TMP0]] ; UNROLL4-NEXT: [[TMP2:%.*]] = add i64 [[TMP1]], -1 @@ -133,10 +133,10 @@ define i1 @multi_2_exiting_find_i8_loop_diff_exit(ptr %vec, i8 %tgt) { ; UNROLL4-SAME: ptr [[VEC:%.*]], i8 [[TGT:%.*]]) #[[ATTR0]] { ; UNROLL4-NEXT: [[ENTRY:.*]]: ; UNROLL4-NEXT: [[START:%.*]] = load ptr, ptr [[VEC]], align 8 -; UNROLL4-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 +; UNROLL4-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 ; UNROLL4-NEXT: [[GEP_END:%.*]] = getelementptr inbounds nuw i8, ptr [[VEC]], i64 1 ; UNROLL4-NEXT: [[END:%.*]] = load ptr, ptr [[GEP_END]], align 8 -; UNROLL4-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; UNROLL4-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; UNROLL4-NEXT: [[TMP0:%.*]] = sub i64 [[END1]], [[START2]] ; UNROLL4-NEXT: [[TMP1:%.*]] = freeze i64 [[TMP0]] ; UNROLL4-NEXT: [[TMP2:%.*]] = add i64 [[TMP1]], -1 @@ -252,11 +252,11 @@ define i1 @multi_2_exiting_find_ptr_loop_same_exit(ptr %vec, ptr %tgt) { ; UNROLL4-SAME: ptr [[VEC:%.*]], ptr [[TGT:%.*]]) #[[ATTR0]] { ; UNROLL4-NEXT: [[ENTRY:.*]]: ; UNROLL4-NEXT: [[START:%.*]] = load ptr, ptr [[VEC]], align 8 -; UNROLL4-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 +; UNROLL4-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 ; UNROLL4-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[START]], i64 8) ] ; UNROLL4-NEXT: [[GEP_END:%.*]] = getelementptr inbounds nuw i8, ptr [[VEC]], i64 8 ; UNROLL4-NEXT: [[END:%.*]] = load ptr, ptr [[GEP_END]], align 8 -; UNROLL4-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; UNROLL4-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; UNROLL4-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[END]], i64 8) ] ; UNROLL4-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; UNROLL4-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] @@ -387,11 +387,11 @@ define ptr @multi_2_exiting_find_ptr_loop_diff_exit(ptr %vec, ptr %tgt) { ; UNROLL4-SAME: ptr [[VEC:%.*]], ptr [[TGT:%.*]]) #[[ATTR0]] { ; UNROLL4-NEXT: [[ENTRY:.*]]: ; UNROLL4-NEXT: [[START:%.*]] = load ptr, ptr [[VEC]], align 8 -; UNROLL4-NEXT: [[START3:%.*]] = ptrtoint ptr [[START]] to i64 +; UNROLL4-NEXT: [[START3:%.*]] = ptrtoaddr ptr [[START]] to i64 ; UNROLL4-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[START]], i64 8) ] ; UNROLL4-NEXT: [[GEP_END:%.*]] = getelementptr inbounds nuw i8, ptr [[VEC]], i64 8 ; UNROLL4-NEXT: [[END:%.*]] = load ptr, ptr [[GEP_END]], align 8 -; UNROLL4-NEXT: [[END2:%.*]] = ptrtoint ptr [[END]] to i64 +; UNROLL4-NEXT: [[END2:%.*]] = ptrtoaddr ptr [[END]] to i64 ; UNROLL4-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[END]], i64 8) ] ; UNROLL4-NEXT: [[TMP0:%.*]] = add i64 [[END2]], -8 ; UNROLL4-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START3]] diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/epilog-vectorization-factors.ll b/llvm/test/Transforms/LoopVectorize/AArch64/epilog-vectorization-factors.ll index b83d3af3a0d65..1064e6a66f877 100644 --- a/llvm/test/Transforms/LoopVectorize/AArch64/epilog-vectorization-factors.ll +++ b/llvm/test/Transforms/LoopVectorize/AArch64/epilog-vectorization-factors.ll @@ -423,25 +423,29 @@ exit: } ; TODO: Should not try to create dead main vector loop. -define void @trip_count_based_on_ptrtoint(i64 %x) "target-cpu"="apple-m1" { -; CHECK-LABEL: @trip_count_based_on_ptrtoint( +define void @trip_count_based_on_ptrtoaddr(i64 %x) "target-cpu"="apple-m1" { +; CHECK-LABEL: @trip_count_based_on_ptrtoaddr( ; CHECK-NEXT: iter.check: ; CHECK-NEXT: [[PTR_START:%.*]] = inttoptr i64 [[X:%.*]] to ptr +; CHECK-NEXT: [[PTR_START2:%.*]] = ptrtoaddr ptr [[PTR_START]] to i64 ; CHECK-NEXT: [[ADD:%.*]] = add i64 [[X]], 40 ; CHECK-NEXT: [[PTR_END:%.*]] = inttoptr i64 [[ADD]] to ptr -; CHECK-NEXT: [[TMP0:%.*]] = sub i64 [[ADD]], [[X]] +; CHECK-NEXT: [[PTR_END1:%.*]] = ptrtoaddr ptr [[PTR_END]] to i64 +; CHECK-NEXT: [[TMP0:%.*]] = sub i64 [[PTR_END1]], [[PTR_START2]] ; CHECK-NEXT: [[TMP1:%.*]] = lshr i64 [[TMP0]], 2 ; CHECK-NEXT: [[TMP2:%.*]] = add nuw nsw i64 [[TMP1]], 1 -; CHECK-NEXT: br i1 false, label [[VEC_EPILOG_SCALAR_PH:%.*]], label [[VECTOR_SCEVCHECK:%.*]] +; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[TMP2]], 4 +; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[VEC_EPILOG_SCALAR_PH:%.*]], label [[VECTOR_SCEVCHECK:%.*]] ; CHECK: vector.scevcheck: -; CHECK-NEXT: [[TMP3:%.*]] = trunc i64 [[ADD]] to i2 -; CHECK-NEXT: [[TMP4:%.*]] = trunc i64 [[X]] to i2 +; CHECK-NEXT: [[TMP3:%.*]] = trunc i64 [[PTR_END1]] to i2 +; CHECK-NEXT: [[TMP4:%.*]] = trunc i64 [[PTR_START2]] to i2 ; CHECK-NEXT: [[TMP5:%.*]] = sub i2 [[TMP3]], [[TMP4]] ; CHECK-NEXT: [[TMP6:%.*]] = zext i2 [[TMP5]] to i64 ; CHECK-NEXT: [[IDENT_CHECK:%.*]] = icmp ne i64 [[TMP6]], 0 ; CHECK-NEXT: br i1 [[IDENT_CHECK]], label [[VEC_EPILOG_SCALAR_PH]], label [[VECTOR_MAIN_LOOP_ITER_CHECK:%.*]] ; CHECK: vector.main.loop.iter.check: -; CHECK-NEXT: br i1 true, label [[VEC_EPILOG_PH:%.*]], label [[VECTOR_PH:%.*]] +; CHECK-NEXT: [[MIN_ITERS_CHECK3:%.*]] = icmp ult i64 [[TMP2]], 16 +; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK3]], label [[VEC_EPILOG_PH:%.*]], label [[VECTOR_PH:%.*]] ; CHECK: vector.ph: ; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[TMP2]], 16 ; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 [[TMP2]], [[N_MOD_VF]] diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/induction-costs.ll b/llvm/test/Transforms/LoopVectorize/AArch64/induction-costs.ll index ced37ee906607..13ccfdcef1dc1 100644 --- a/llvm/test/Transforms/LoopVectorize/AArch64/induction-costs.ll +++ b/llvm/test/Transforms/LoopVectorize/AArch64/induction-costs.ll @@ -89,8 +89,8 @@ define i64 @pointer_induction_only(ptr %start, ptr %end) { ; CHECK-LABEL: define i64 @pointer_induction_only( ; CHECK-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) { ; CHECK-NEXT: entry: -; CHECK-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; CHECK-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = sub i64 [[END1]], [[START2]] ; CHECK-NEXT: [[TMP1:%.*]] = lshr i64 [[TMP0]], 2 ; CHECK-NEXT: [[TMP2:%.*]] = add nuw nsw i64 [[TMP1]], 1 diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/sve-live-out-pointer-induction.ll b/llvm/test/Transforms/LoopVectorize/AArch64/sve-live-out-pointer-induction.ll index 9312306ce519a..63dab7d35c193 100644 --- a/llvm/test/Transforms/LoopVectorize/AArch64/sve-live-out-pointer-induction.ll +++ b/llvm/test/Transforms/LoopVectorize/AArch64/sve-live-out-pointer-induction.ll @@ -4,8 +4,8 @@ define ptr @test(ptr %start.1, ptr %start.2, ptr %end) { ; CHECK-LABEL: @test( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[START_22:%.*]] = ptrtoint ptr [[START_2:%.*]] to i64 -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END:%.*]] to i64 +; CHECK-NEXT: [[START_22:%.*]] = ptrtoaddr ptr [[START_2:%.*]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END:%.*]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START_22]] ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/transform-narrow-interleave-to-widen-memory-derived-ivs.ll b/llvm/test/Transforms/LoopVectorize/AArch64/transform-narrow-interleave-to-widen-memory-derived-ivs.ll index 8f241c9bdf761..b4db5943e352c 100644 --- a/llvm/test/Transforms/LoopVectorize/AArch64/transform-narrow-interleave-to-widen-memory-derived-ivs.ll +++ b/llvm/test/Transforms/LoopVectorize/AArch64/transform-narrow-interleave-to-widen-memory-derived-ivs.ll @@ -131,10 +131,10 @@ define void @derived_pointer_ivs(ptr noalias %a, ptr noalias %b, ptr %end) { ; VF2-LABEL: define void @derived_pointer_ivs( ; VF2-SAME: ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr [[END:%.*]]) { ; VF2-NEXT: [[ENTRY:.*:]] -; VF2-NEXT: [[A5:%.*]] = ptrtoint ptr [[A]] to i64 -; VF2-NEXT: [[END4:%.*]] = ptrtoint ptr [[END]] to i64 -; VF2-NEXT: [[A2:%.*]] = ptrtoint ptr [[A]] to i64 -; VF2-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; VF2-NEXT: [[A5:%.*]] = ptrtoaddr ptr [[A]] to i64 +; VF2-NEXT: [[END4:%.*]] = ptrtoaddr ptr [[END]] to i64 +; VF2-NEXT: [[A2:%.*]] = ptrtoaddr ptr [[A]] to i64 +; VF2-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; VF2-NEXT: [[TMP0:%.*]] = add i64 [[END4]], -16 ; VF2-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[A5]] ; VF2-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 4 @@ -180,10 +180,10 @@ define void @derived_pointer_ivs(ptr noalias %a, ptr noalias %b, ptr %end) { ; VF2IC2-LABEL: define void @derived_pointer_ivs( ; VF2IC2-SAME: ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr [[END:%.*]]) { ; VF2IC2-NEXT: [[ENTRY:.*:]] -; VF2IC2-NEXT: [[A5:%.*]] = ptrtoint ptr [[A]] to i64 -; VF2IC2-NEXT: [[END4:%.*]] = ptrtoint ptr [[END]] to i64 -; VF2IC2-NEXT: [[A2:%.*]] = ptrtoint ptr [[A]] to i64 -; VF2IC2-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; VF2IC2-NEXT: [[A5:%.*]] = ptrtoaddr ptr [[A]] to i64 +; VF2IC2-NEXT: [[END4:%.*]] = ptrtoaddr ptr [[END]] to i64 +; VF2IC2-NEXT: [[A2:%.*]] = ptrtoaddr ptr [[A]] to i64 +; VF2IC2-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; VF2IC2-NEXT: [[TMP0:%.*]] = add i64 [[END4]], -16 ; VF2IC2-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[A5]] ; VF2IC2-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 4 @@ -235,10 +235,10 @@ define void @derived_pointer_ivs(ptr noalias %a, ptr noalias %b, ptr %end) { ; VF4-LABEL: define void @derived_pointer_ivs( ; VF4-SAME: ptr noalias [[A:%.*]], ptr noalias [[B:%.*]], ptr [[END:%.*]]) { ; VF4-NEXT: [[ENTRY:.*:]] -; VF4-NEXT: [[A5:%.*]] = ptrtoint ptr [[A]] to i64 -; VF4-NEXT: [[END4:%.*]] = ptrtoint ptr [[END]] to i64 -; VF4-NEXT: [[A2:%.*]] = ptrtoint ptr [[A]] to i64 -; VF4-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; VF4-NEXT: [[A5:%.*]] = ptrtoaddr ptr [[A]] to i64 +; VF4-NEXT: [[END4:%.*]] = ptrtoaddr ptr [[END]] to i64 +; VF4-NEXT: [[A2:%.*]] = ptrtoaddr ptr [[A]] to i64 +; VF4-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; VF4-NEXT: [[TMP0:%.*]] = add i64 [[END4]], -16 ; VF4-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[A5]] ; VF4-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 4 @@ -271,15 +271,15 @@ define void @derived_pointer_ivs(ptr noalias %a, ptr noalias %b, ptr %end) { ; VF4-NEXT: [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[A]], i64 [[OFFSET_IDX]] ; VF4-NEXT: [[OFFSET_IDX6:%.*]] = mul i64 [[INDEX]], 16 ; VF4-NEXT: [[NEXT_GEP7:%.*]] = getelementptr i8, ptr [[B]], i64 [[OFFSET_IDX6]] -; VF4-NEXT: [[WIDE_VEC:%.*]] = load <8 x double>, ptr [[NEXT_GEP]], align 8 +; VF4-NEXT: [[WIDE_VEC:%.*]] = load <8 x double>, ptr [[NEXT_GEP]], align 8, !alias.scope [[META4:![0-9]+]] ; VF4-NEXT: [[STRIDED_VEC:%.*]] = shufflevector <8 x double> [[WIDE_VEC]], <8 x double> poison, <4 x i32> ; VF4-NEXT: [[STRIDED_VEC8:%.*]] = shufflevector <8 x double> [[WIDE_VEC]], <8 x double> poison, <4 x i32> ; VF4-NEXT: [[TMP13:%.*]] = shufflevector <4 x double> [[STRIDED_VEC]], <4 x double> [[STRIDED_VEC8]], <8 x i32> ; VF4-NEXT: [[INTERLEAVED_VEC:%.*]] = shufflevector <8 x double> [[TMP13]], <8 x double> poison, <8 x i32> -; VF4-NEXT: store <8 x double> [[INTERLEAVED_VEC]], ptr [[NEXT_GEP7]], align 8 +; VF4-NEXT: store <8 x double> [[INTERLEAVED_VEC]], ptr [[NEXT_GEP7]], align 8, !alias.scope [[META7:![0-9]+]], !noalias [[META4]] ; VF4-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4 ; VF4-NEXT: [[TMP14:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]] -; VF4-NEXT: br i1 [[TMP14]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]] +; VF4-NEXT: br i1 [[TMP14]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]] ; VF4: [[MIDDLE_BLOCK]]: ; VF4-NEXT: [[CMP_N:%.*]] = icmp eq i64 [[TMP3]], [[N_VEC]] ; VF4-NEXT: br i1 [[CMP_N]], [[EXIT:label %.*]], label %[[SCALAR_PH]] @@ -376,7 +376,7 @@ define void @narrow_with_uniform_add_and_gep(ptr noalias %p) { ; VF4-NEXT: store <8 x i64> [[INTERLEAVED_VEC]], ptr [[TMP1]], align 8 ; VF4-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4 ; VF4-NEXT: [[TMP5:%.*]] = icmp eq i64 [[INDEX_NEXT]], 512 -; VF4-NEXT: br i1 [[TMP5]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]] +; VF4-NEXT: br i1 [[TMP5]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP11:![0-9]+]] ; VF4: [[MIDDLE_BLOCK]]: ; VF4-NEXT: br [[EXIT:label %.*]] ; VF4: [[SCALAR_PH]]: diff --git a/llvm/test/Transforms/LoopVectorize/PowerPC/exit-branch-cost.ll b/llvm/test/Transforms/LoopVectorize/PowerPC/exit-branch-cost.ll index 49cb29ed4e16a..30d0fa60ce350 100644 --- a/llvm/test/Transforms/LoopVectorize/PowerPC/exit-branch-cost.ll +++ b/llvm/test/Transforms/LoopVectorize/PowerPC/exit-branch-cost.ll @@ -8,8 +8,8 @@ define i1 @select_exit_cond(ptr %start, ptr %end, i64 %N) { ; CHECK-LABEL: define i1 @select_exit_cond( ; CHECK-SAME: ptr [[START:%.*]], ptr [[END:%.*]], i64 [[N:%.*]]) { ; CHECK-NEXT: [[ITER_CHECK:.*]]: -; CHECK-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; CHECK-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = freeze i64 [[N]] ; CHECK-NEXT: [[UMAX:%.*]] = call i64 @llvm.umax.i64(i64 [[END1]], i64 [[START2]]) ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[UMAX]], [[START2]] diff --git a/llvm/test/Transforms/LoopVectorize/PowerPC/pr41179.ll b/llvm/test/Transforms/LoopVectorize/PowerPC/pr41179.ll index 77126409881dd..1d75f06c95fd2 100644 --- a/llvm/test/Transforms/LoopVectorize/PowerPC/pr41179.ll +++ b/llvm/test/Transforms/LoopVectorize/PowerPC/pr41179.ll @@ -4,8 +4,8 @@ define void @foo(ptr %start, ptr %end) { ; CHECK-LABEL: @foo( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[START2:%.*]] = ptrtoint ptr [[START:%.*]] to i64 -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END:%.*]] to i64 +; CHECK-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START:%.*]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END:%.*]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = trunc i64 [[END1]] to i32 ; CHECK-NEXT: [[TMP1:%.*]] = add i64 [[END1]], -1 ; CHECK-NEXT: [[UMIN:%.*]] = call i64 @llvm.umin.i64(i64 [[START2]], i64 [[TMP1]]) @@ -43,7 +43,7 @@ define void @foo(ptr %start, ptr %end) { ; CHECK-NEXT: [[G:%.*]] = getelementptr i8, ptr [[END]], i32 [[ADD]] ; CHECK-NEXT: store i8 0, ptr [[G]], align 1 ; CHECK-NEXT: [[CMP:%.*]] = icmp ult ptr [[START]], [[G]] -; CHECK-NEXT: br i1 [[CMP]], label [[WHILE_BODY]], label [[WHILE_END_LOOPEXIT]], !llvm.loop [[LOOP2:![0-9]+]] +; CHECK-NEXT: br i1 [[CMP]], label [[WHILE_BODY]], label [[WHILE_END_LOOPEXIT]], !llvm.loop [[LOOP3:![0-9]+]] ; CHECK: while.end.loopexit: ; CHECK-NEXT: ret void ; diff --git a/llvm/test/Transforms/LoopVectorize/WebAssembly/induction-branch-cost.ll b/llvm/test/Transforms/LoopVectorize/WebAssembly/induction-branch-cost.ll index f0ea63c498a40..bc04883e8e588 100644 --- a/llvm/test/Transforms/LoopVectorize/WebAssembly/induction-branch-cost.ll +++ b/llvm/test/Transforms/LoopVectorize/WebAssembly/induction-branch-cost.ll @@ -8,8 +8,8 @@ define void @induction_phi_and_branch_cost(ptr %end, ptr %start.1, ptr %start.2) ; CHECK-LABEL: define void @induction_phi_and_branch_cost( ; CHECK-SAME: ptr [[END:%.*]], ptr [[START_1:%.*]], ptr [[START_2:%.*]]) #[[ATTR0:[0-9]+]] { ; CHECK-NEXT: [[ENTRY:.*]]: -; CHECK-NEXT: [[END2:%.*]] = ptrtoint ptr [[END]] to i32 -; CHECK-NEXT: [[START_11:%.*]] = ptrtoint ptr [[START_1]] to i32 +; CHECK-NEXT: [[END2:%.*]] = ptrtoaddr ptr [[END]] to i32 +; CHECK-NEXT: [[START_11:%.*]] = ptrtoaddr ptr [[START_1]] to i32 ; CHECK-NEXT: [[TMP0:%.*]] = sub i32 [[START_11]], [[END2]] ; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[TMP0]], 2 ; CHECK-NEXT: [[TMP2:%.*]] = add nuw nsw i32 [[TMP1]], 1 diff --git a/llvm/test/Transforms/LoopVectorize/X86/cost-model.ll b/llvm/test/Transforms/LoopVectorize/X86/cost-model.ll index 391653a2efe34..ff6cf98b70964 100644 --- a/llvm/test/Transforms/LoopVectorize/X86/cost-model.ll +++ b/llvm/test/Transforms/LoopVectorize/X86/cost-model.ll @@ -439,8 +439,8 @@ exit: define i1 @any_of_cost(ptr %start, ptr %end) #0 { ; CHECK-LABEL: @any_of_cost( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[START2:%.*]] = ptrtoint ptr [[START:%.*]] to i64 -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END:%.*]] to i64 +; CHECK-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START:%.*]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END:%.*]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = sub i64 [[END1]], [[START2]] ; CHECK-NEXT: [[TMP1:%.*]] = udiv i64 [[TMP0]], 40 ; CHECK-NEXT: [[TMP2:%.*]] = add nuw nsw i64 [[TMP1]], 1 @@ -531,7 +531,7 @@ exit: define i64 @cost_assume(ptr %end, i64 %N) { ; CHECK-LABEL: @cost_assume( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END:%.*]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END:%.*]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -9 ; CHECK-NEXT: [[TMP1:%.*]] = udiv i64 [[TMP0]], 9 ; CHECK-NEXT: [[TMP2:%.*]] = add nuw nsw i64 [[TMP1]], 1 diff --git a/llvm/test/Transforms/LoopVectorize/X86/interleave-opaque-pointers.ll b/llvm/test/Transforms/LoopVectorize/X86/interleave-opaque-pointers.ll index 3a07bcca523ce..45f15afea6767 100644 --- a/llvm/test/Transforms/LoopVectorize/X86/interleave-opaque-pointers.ll +++ b/llvm/test/Transforms/LoopVectorize/X86/interleave-opaque-pointers.ll @@ -9,8 +9,8 @@ target triple = "x86_64-linux-gnu" define void @test_pr55375_interleave_opaque_ptr(ptr %start, ptr %end) { ; CHECK-LABEL: @test_pr55375_interleave_opaque_ptr( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[START2:%.*]] = ptrtoint ptr [[START:%.*]] to i64 -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END:%.*]] to i64 +; CHECK-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START:%.*]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END:%.*]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -16 ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 4 diff --git a/llvm/test/Transforms/LoopVectorize/X86/optsize.ll b/llvm/test/Transforms/LoopVectorize/X86/optsize.ll index 510bbe73d7f78..4f8a0f0a0f496 100644 --- a/llvm/test/Transforms/LoopVectorize/X86/optsize.ll +++ b/llvm/test/Transforms/LoopVectorize/X86/optsize.ll @@ -401,8 +401,8 @@ define void @tail_folded_store_avx512(ptr %start, ptr %end) #3 { ; CHECK-LABEL: define void @tail_folded_store_avx512( ; CHECK-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) #[[ATTR3:[0-9]+]] { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[END2:%.*]] = ptrtoint ptr [[END]] to i32 -; CHECK-NEXT: [[START1:%.*]] = ptrtoint ptr [[START]] to i32 +; CHECK-NEXT: [[END2:%.*]] = ptrtoaddr ptr [[END]] to i32 +; CHECK-NEXT: [[START1:%.*]] = ptrtoaddr ptr [[START]] to i32 ; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[START1]], -72 ; CHECK-NEXT: [[TMP1:%.*]] = sub i32 [[TMP0]], [[END2]] ; CHECK-NEXT: [[TMP2:%.*]] = udiv i32 [[TMP1]], 72 @@ -445,8 +445,8 @@ define void @tail_folded_store_avx512(ptr %start, ptr %end) #3 { ; AUTOVF-LABEL: define void @tail_folded_store_avx512( ; AUTOVF-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) #[[ATTR3:[0-9]+]] { ; AUTOVF-NEXT: [[ENTRY:.*:]] -; AUTOVF-NEXT: [[END2:%.*]] = ptrtoint ptr [[END]] to i32 -; AUTOVF-NEXT: [[START1:%.*]] = ptrtoint ptr [[START]] to i32 +; AUTOVF-NEXT: [[END2:%.*]] = ptrtoaddr ptr [[END]] to i32 +; AUTOVF-NEXT: [[START1:%.*]] = ptrtoaddr ptr [[START]] to i32 ; AUTOVF-NEXT: [[TMP0:%.*]] = add i32 [[START1]], -72 ; AUTOVF-NEXT: [[TMP1:%.*]] = sub i32 [[TMP0]], [[END2]] ; AUTOVF-NEXT: [[TMP2:%.*]] = udiv i32 [[TMP1]], 72 diff --git a/llvm/test/Transforms/LoopVectorize/X86/pr48340.ll b/llvm/test/Transforms/LoopVectorize/X86/pr48340.ll index b6acf387fb658..59d6c2ca8ea80 100644 --- a/llvm/test/Transforms/LoopVectorize/X86/pr48340.ll +++ b/llvm/test/Transforms/LoopVectorize/X86/pr48340.ll @@ -10,8 +10,8 @@ target triple = "x86_64-unknown-linux-gnu" define ptr @foo(ptr %p, ptr %p.last) unnamed_addr #0 { ; CHECK-LABEL: @foo( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[P3:%.*]] = ptrtoint ptr [[P:%.*]] to i64 -; CHECK-NEXT: [[P_LAST1:%.*]] = ptrtoint ptr [[P_LAST:%.*]] to i64 +; CHECK-NEXT: [[P3:%.*]] = ptrtoaddr ptr [[P:%.*]] to i64 +; CHECK-NEXT: [[P_LAST1:%.*]] = ptrtoaddr ptr [[P_LAST:%.*]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[P_LAST1]], -1024 ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[P3]] ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 10 @@ -70,8 +70,8 @@ exit: define ptr @bar(ptr %p, ptr %p.last) unnamed_addr #0 { ; CHECK-LABEL: @bar( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[P3:%.*]] = ptrtoint ptr [[P:%.*]] to i64 -; CHECK-NEXT: [[P_LAST1:%.*]] = ptrtoint ptr [[P_LAST:%.*]] to i64 +; CHECK-NEXT: [[P3:%.*]] = ptrtoaddr ptr [[P:%.*]] to i64 +; CHECK-NEXT: [[P_LAST1:%.*]] = ptrtoaddr ptr [[P_LAST:%.*]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[P_LAST1]], -1024 ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[P3]] ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 10 diff --git a/llvm/test/Transforms/LoopVectorize/X86/pr72969.ll b/llvm/test/Transforms/LoopVectorize/X86/pr72969.ll index 368842634c374..f6c9d3be41835 100644 --- a/llvm/test/Transforms/LoopVectorize/X86/pr72969.ll +++ b/llvm/test/Transforms/LoopVectorize/X86/pr72969.ll @@ -27,9 +27,9 @@ define void @test(ptr %p) { ; VEC-LABEL: define void @test( ; VEC-SAME: ptr [[P:%.*]]) #[[ATTR0:[0-9]+]] { ; VEC-NEXT: entry: -; VEC-NEXT: [[P1:%.*]] = ptrtoint ptr [[P]] to i64 +; VEC-NEXT: [[P1:%.*]] = ptrtoaddr ptr [[P]] to i64 ; VEC-NEXT: [[TMP0:%.*]] = add i64 [[P1]], 16 -; VEC-NEXT: [[UMAX2:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP0]], i64 add (i64 ptrtoint (ptr @h to i64), i64 1)) +; VEC-NEXT: [[UMAX2:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP0]], i64 add (i64 ptrtoaddr (ptr @h to i64), i64 1)) ; VEC-NEXT: [[TMP1:%.*]] = add i64 [[UMAX2]], -9 ; VEC-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], [[P1]] ; VEC-NEXT: [[TMP3:%.*]] = lshr i64 [[TMP2]], 3 @@ -38,7 +38,7 @@ define void @test(ptr %p) { ; VEC-NEXT: br i1 [[MIN_ITERS_CHECK]], label [[SCALAR_PH:%.*]], label [[VECTOR_SCEVCHECK:%.*]] ; VEC: vector.scevcheck: ; VEC-NEXT: [[TMP5:%.*]] = add i64 [[P1]], 16 -; VEC-NEXT: [[UMAX:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP5]], i64 add (i64 ptrtoint (ptr @h to i64), i64 1)) +; VEC-NEXT: [[UMAX:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP5]], i64 add (i64 ptrtoaddr (ptr @h to i64), i64 1)) ; VEC-NEXT: [[TMP6:%.*]] = add i64 [[UMAX]], -9 ; VEC-NEXT: [[TMP7:%.*]] = sub i64 [[TMP6]], [[P1]] ; VEC-NEXT: [[TMP8:%.*]] = lshr i64 [[TMP7]], 3 diff --git a/llvm/test/Transforms/LoopVectorize/X86/predicate-switch.ll b/llvm/test/Transforms/LoopVectorize/X86/predicate-switch.ll index e25be6f867862..4518555057613 100644 --- a/llvm/test/Transforms/LoopVectorize/X86/predicate-switch.ll +++ b/llvm/test/Transforms/LoopVectorize/X86/predicate-switch.ll @@ -6,8 +6,8 @@ define void @switch_default_to_latch_common_dest(ptr %start, ptr %end) { ; COST-LABEL: define void @switch_default_to_latch_common_dest( ; COST-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) #[[ATTR0:[0-9]+]] { ; COST-NEXT: [[ENTRY:.*]]: -; COST-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; COST-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; COST-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; COST-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; COST-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; COST-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; COST-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 @@ -58,8 +58,8 @@ define void @switch_default_to_latch_common_dest(ptr %start, ptr %end) { ; FORCED-LABEL: define void @switch_default_to_latch_common_dest( ; FORCED-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) #[[ATTR0:[0-9]+]] { ; FORCED-NEXT: [[ENTRY:.*]]: -; FORCED-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; FORCED-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; FORCED-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; FORCED-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; FORCED-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; FORCED-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; FORCED-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 @@ -141,8 +141,8 @@ define void @switch_default_to_latch_common_dest_using_branches(ptr %start, ptr ; COST-LABEL: define void @switch_default_to_latch_common_dest_using_branches( ; COST-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) #[[ATTR0]] { ; COST-NEXT: [[ENTRY:.*]]: -; COST-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; COST-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; COST-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; COST-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; COST-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; COST-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; COST-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 @@ -196,8 +196,8 @@ define void @switch_default_to_latch_common_dest_using_branches(ptr %start, ptr ; FORCED-LABEL: define void @switch_default_to_latch_common_dest_using_branches( ; FORCED-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) #[[ATTR0]] { ; FORCED-NEXT: [[ENTRY:.*]]: -; FORCED-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; FORCED-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; FORCED-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; FORCED-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; FORCED-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; FORCED-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; FORCED-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 @@ -319,8 +319,8 @@ define void @switch_all_dests_distinct(ptr %start, ptr %end) { ; FORCED-LABEL: define void @switch_all_dests_distinct( ; FORCED-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) #[[ATTR0]] { ; FORCED-NEXT: [[ENTRY:.*]]: -; FORCED-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; FORCED-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; FORCED-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; FORCED-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; FORCED-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; FORCED-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; FORCED-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 @@ -437,8 +437,8 @@ define void @switch_all_dests_distinct_variant_using_branches(ptr %start, ptr %e ; COST-LABEL: define void @switch_all_dests_distinct_variant_using_branches( ; COST-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) #[[ATTR0]] { ; COST-NEXT: [[ENTRY:.*]]: -; COST-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; COST-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; COST-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; COST-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; COST-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; COST-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; COST-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 @@ -509,8 +509,8 @@ define void @switch_all_dests_distinct_variant_using_branches(ptr %start, ptr %e ; FORCED-LABEL: define void @switch_all_dests_distinct_variant_using_branches( ; FORCED-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) #[[ATTR0]] { ; FORCED-NEXT: [[ENTRY:.*]]: -; FORCED-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; FORCED-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; FORCED-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; FORCED-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; FORCED-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; FORCED-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; FORCED-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 @@ -669,8 +669,8 @@ define void @switch_multiple_common_dests(ptr %start, ptr %end) { ; FORCED-LABEL: define void @switch_multiple_common_dests( ; FORCED-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) #[[ATTR0]] { ; FORCED-NEXT: [[ENTRY:.*]]: -; FORCED-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; FORCED-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; FORCED-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; FORCED-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; FORCED-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; FORCED-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; FORCED-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 @@ -818,8 +818,8 @@ define void @switch4_default_common_dest_with_case(ptr %start, ptr %end) { ; FORCED-LABEL: define void @switch4_default_common_dest_with_case( ; FORCED-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) #[[ATTR0]] { ; FORCED-NEXT: [[ENTRY:.*]]: -; FORCED-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; FORCED-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; FORCED-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; FORCED-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; FORCED-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; FORCED-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; FORCED-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 @@ -923,8 +923,8 @@ define void @switch_under_br_default_common_dest_with_case(ptr %start, ptr %end, ; COST-LABEL: define void @switch_under_br_default_common_dest_with_case( ; COST-SAME: ptr [[START:%.*]], ptr [[END:%.*]], i64 [[X:%.*]]) #[[ATTR0]] { ; COST-NEXT: [[ENTRY:.*]]: -; COST-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; COST-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; COST-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; COST-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; COST-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; COST-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; COST-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 @@ -994,8 +994,8 @@ define void @switch_under_br_default_common_dest_with_case(ptr %start, ptr %end, ; FORCED-LABEL: define void @switch_under_br_default_common_dest_with_case( ; FORCED-SAME: ptr [[START:%.*]], ptr [[END:%.*]], i64 [[X:%.*]]) #[[ATTR0]] { ; FORCED-NEXT: [[ENTRY:.*]]: -; FORCED-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; FORCED-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; FORCED-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; FORCED-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; FORCED-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; FORCED-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; FORCED-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 @@ -1147,8 +1147,8 @@ define void @br_under_switch_default_common_dest_with_case(ptr %start, ptr %end, ; FORCED-LABEL: define void @br_under_switch_default_common_dest_with_case( ; FORCED-SAME: ptr [[START:%.*]], ptr [[END:%.*]], i64 [[X:%.*]]) #[[ATTR0]] { ; FORCED-NEXT: [[ENTRY:.*]]: -; FORCED-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; FORCED-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; FORCED-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; FORCED-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; FORCED-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; FORCED-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; FORCED-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 @@ -1301,8 +1301,8 @@ define void @large_number_of_cases(ptr %start, ptr %end) { ; FORCED-LABEL: define void @large_number_of_cases( ; FORCED-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) #[[ATTR0]] { ; FORCED-NEXT: [[ENTRY:.*]]: -; FORCED-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; FORCED-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; FORCED-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; FORCED-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; FORCED-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; FORCED-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; FORCED-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 diff --git a/llvm/test/Transforms/LoopVectorize/epilog-vectorization-any-of-reductions.ll b/llvm/test/Transforms/LoopVectorize/epilog-vectorization-any-of-reductions.ll index 1b822011990ba..e40286b068808 100644 --- a/llvm/test/Transforms/LoopVectorize/epilog-vectorization-any-of-reductions.ll +++ b/llvm/test/Transforms/LoopVectorize/epilog-vectorization-any-of-reductions.ll @@ -307,8 +307,8 @@ define i1 @any_of_reduction_i1_epilog2(ptr %start, ptr %end, i64 %x) { ; CHECK-LABEL: define i1 @any_of_reduction_i1_epilog2( ; CHECK-SAME: ptr [[START:%.*]], ptr [[END:%.*]], i64 [[X:%.*]]) { ; CHECK-NEXT: iter.check: -; CHECK-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; CHECK-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -16 ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 4 diff --git a/llvm/test/Transforms/LoopVectorize/interleaved-accesses-different-insert-position.ll b/llvm/test/Transforms/LoopVectorize/interleaved-accesses-different-insert-position.ll index dd6b829fcb5c9..359fd2ac35894 100644 --- a/llvm/test/Transforms/LoopVectorize/interleaved-accesses-different-insert-position.ll +++ b/llvm/test/Transforms/LoopVectorize/interleaved-accesses-different-insert-position.ll @@ -155,8 +155,8 @@ define i64 @interleave_group_load_pointer_type(ptr %start, ptr %end) { ; CHECK-LABEL: define i64 @interleave_group_load_pointer_type( ; CHECK-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*]]: -; CHECK-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; CHECK-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = sub i64 [[END1]], [[START2]] ; CHECK-NEXT: [[TMP1:%.*]] = udiv i64 [[TMP0]], 24 ; CHECK-NEXT: [[TMP2:%.*]] = add nuw nsw i64 [[TMP1]], 1 diff --git a/llvm/test/Transforms/LoopVectorize/interleaved-accesses-metadata.ll b/llvm/test/Transforms/LoopVectorize/interleaved-accesses-metadata.ll index 0eb251704f453..356be979ddb40 100644 --- a/llvm/test/Transforms/LoopVectorize/interleaved-accesses-metadata.ll +++ b/llvm/test/Transforms/LoopVectorize/interleaved-accesses-metadata.ll @@ -94,10 +94,10 @@ define void @ir_tbaa_different(ptr %base, ptr %end, ptr %src) { ; CHECK-LABEL: define void @ir_tbaa_different( ; CHECK-SAME: ptr [[BASE:%.*]], ptr [[END:%.*]], ptr [[SRC:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*]]: -; CHECK-NEXT: [[BASE2:%.*]] = ptrtoint ptr [[BASE]] to i64 -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 -; CHECK-NEXT: [[BASE3:%.*]] = ptrtoint ptr [[BASE]] to i64 -; CHECK-NEXT: [[END2:%.*]] = ptrtoint ptr [[END]] to i64 +; CHECK-NEXT: [[BASE2:%.*]] = ptrtoaddr ptr [[BASE]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 +; CHECK-NEXT: [[BASE3:%.*]] = ptrtoaddr ptr [[BASE]] to i64 +; CHECK-NEXT: [[END2:%.*]] = ptrtoaddr ptr [[END]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[BASE2]] ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 @@ -188,8 +188,8 @@ define void @noalias_metadata_from_versioning(ptr %base, ptr %end, ptr %src) { ; CHECK-LABEL: define void @noalias_metadata_from_versioning( ; CHECK-SAME: ptr [[BASE:%.*]], ptr [[END:%.*]], ptr [[SRC:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*]]: -; CHECK-NEXT: [[BASE2:%.*]] = ptrtoint ptr [[BASE]] to i64 -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; CHECK-NEXT: [[BASE2:%.*]] = ptrtoaddr ptr [[BASE]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[BASE2]] ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 diff --git a/llvm/test/Transforms/LoopVectorize/opaque-ptr.ll b/llvm/test/Transforms/LoopVectorize/opaque-ptr.ll index 496285a276923..c0fa166054e6b 100644 --- a/llvm/test/Transforms/LoopVectorize/opaque-ptr.ll +++ b/llvm/test/Transforms/LoopVectorize/opaque-ptr.ll @@ -4,12 +4,12 @@ define void @test_ptr_iv_no_inbounds(ptr %p1.start, ptr %p2.start, ptr %p1.end) { ; CHECK-LABEL: @test_ptr_iv_no_inbounds( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[P1_START7:%.*]] = ptrtoint ptr [[P1_START:%.*]] to i64 -; CHECK-NEXT: [[P1_END6:%.*]] = ptrtoint ptr [[P1_END:%.*]] to i64 -; CHECK-NEXT: [[P1_START4:%.*]] = ptrtoint ptr [[P1_START]] to i64 -; CHECK-NEXT: [[P1_END3:%.*]] = ptrtoint ptr [[P1_END]] to i64 -; CHECK-NEXT: [[P1_START2:%.*]] = ptrtoint ptr [[P1_START]] to i64 -; CHECK-NEXT: [[P1_END1:%.*]] = ptrtoint ptr [[P1_END]] to i64 +; CHECK-NEXT: [[P1_START7:%.*]] = ptrtoaddr ptr [[P1_START:%.*]] to i64 +; CHECK-NEXT: [[P1_END6:%.*]] = ptrtoaddr ptr [[P1_END:%.*]] to i64 +; CHECK-NEXT: [[P1_START4:%.*]] = ptrtoaddr ptr [[P1_START]] to i64 +; CHECK-NEXT: [[P1_END3:%.*]] = ptrtoaddr ptr [[P1_END]] to i64 +; CHECK-NEXT: [[P1_START2:%.*]] = ptrtoaddr ptr [[P1_START]] to i64 +; CHECK-NEXT: [[P1_END1:%.*]] = ptrtoaddr ptr [[P1_END]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[P1_END6]], -4 ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[P1_START7]] ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 2 @@ -99,10 +99,10 @@ exit: define void @test_ptr_iv_with_inbounds(ptr %p1.start, ptr %p2.start, ptr %p1.end) { ; CHECK-LABEL: @test_ptr_iv_with_inbounds( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[P1_START5:%.*]] = ptrtoint ptr [[P1_START:%.*]] to i64 -; CHECK-NEXT: [[P1_END4:%.*]] = ptrtoint ptr [[P1_END:%.*]] to i64 -; CHECK-NEXT: [[P1_START2:%.*]] = ptrtoint ptr [[P1_START]] to i64 -; CHECK-NEXT: [[P1_END1:%.*]] = ptrtoint ptr [[P1_END]] to i64 +; CHECK-NEXT: [[P1_START5:%.*]] = ptrtoaddr ptr [[P1_START:%.*]] to i64 +; CHECK-NEXT: [[P1_END4:%.*]] = ptrtoaddr ptr [[P1_END:%.*]] to i64 +; CHECK-NEXT: [[P1_START2:%.*]] = ptrtoaddr ptr [[P1_START]] to i64 +; CHECK-NEXT: [[P1_END1:%.*]] = ptrtoaddr ptr [[P1_END]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[P1_END4]], -4 ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[P1_START5]] ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 2 @@ -185,8 +185,8 @@ exit: define void @store_pointer_induction(ptr %start, ptr %end) { ; CHECK-LABEL: @store_pointer_induction( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[START2:%.*]] = ptrtoint ptr [[START:%.*]] to i64 -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END:%.*]] to i64 +; CHECK-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START:%.*]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END:%.*]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 diff --git a/llvm/test/Transforms/LoopVectorize/pointer-induction.ll b/llvm/test/Transforms/LoopVectorize/pointer-induction.ll index d2c53f47a6670..7120099bdfffe 100644 --- a/llvm/test/Transforms/LoopVectorize/pointer-induction.ll +++ b/llvm/test/Transforms/LoopVectorize/pointer-induction.ll @@ -9,7 +9,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16 define void @a(ptr readnone %b) { ; CHECK-LABEL: @a( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[B1:%.*]] = ptrtoint ptr [[B:%.*]] to i64 +; CHECK-NEXT: [[B1:%.*]] = ptrtoaddr ptr [[B:%.*]] to i64 ; CHECK-NEXT: [[CMP_NOT4:%.*]] = icmp eq ptr [[B]], null ; CHECK-NEXT: br i1 [[CMP_NOT4]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_PREHEADER:%.*]] ; CHECK: for.body.preheader: diff --git a/llvm/test/Transforms/LoopVectorize/pr45259.ll b/llvm/test/Transforms/LoopVectorize/pr45259.ll index fade7264f6494..4048ff7347bd8 100644 --- a/llvm/test/Transforms/LoopVectorize/pr45259.ll +++ b/llvm/test/Transforms/LoopVectorize/pr45259.ll @@ -6,7 +6,7 @@ define i8 @widget(ptr %arr, i8 %t9) { ; CHECK-LABEL: @widget( ; CHECK-NEXT: bb: -; CHECK-NEXT: [[ARR1:%.*]] = ptrtoint ptr [[ARR:%.*]] to i64 +; CHECK-NEXT: [[ARR1:%.*]] = ptrtoaddr ptr [[ARR:%.*]] to i64 ; CHECK-NEXT: br label [[BB6:%.*]] ; CHECK: bb6: ; CHECK-NEXT: [[T1_0:%.*]] = phi ptr [ [[ARR]], [[BB:%.*]] ], [ null, [[BB6]] ] @@ -16,8 +16,8 @@ define i8 @widget(ptr %arr, i8 %t9) { ; CHECK-NEXT: [[T1_0_LCSSA:%.*]] = phi ptr [ [[T1_0]], [[BB6]] ] ; CHECK-NEXT: [[T1_0_LCSSA4:%.*]] = phi ptr [ [[T1_0]], [[BB6]] ] ; CHECK-NEXT: [[T1_0_LCSSA1:%.*]] = phi ptr [ [[T1_0]], [[BB6]] ] -; CHECK-NEXT: [[T1_0_LCSSA3:%.*]] = ptrtoint ptr [[T1_0_LCSSA]] to i64 -; CHECK-NEXT: [[T1_0_LCSSA2:%.*]] = ptrtoint ptr [[T1_0_LCSSA4]] to i64 +; CHECK-NEXT: [[T1_0_LCSSA3:%.*]] = ptrtoaddr ptr [[T1_0_LCSSA]] to i64 +; CHECK-NEXT: [[T1_0_LCSSA2:%.*]] = ptrtoaddr ptr [[T1_0_LCSSA4]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = trunc i64 [[ARR1]] to i32 ; CHECK-NEXT: [[TMP1:%.*]] = sub i32 0, [[TMP0]] ; CHECK-NEXT: [[TMP2:%.*]] = trunc i64 [[T1_0_LCSSA3]] to i32 diff --git a/llvm/test/Transforms/LoopVectorize/predicate-switch.ll b/llvm/test/Transforms/LoopVectorize/predicate-switch.ll index 97f4542bfe67a..c99b509568015 100644 --- a/llvm/test/Transforms/LoopVectorize/predicate-switch.ll +++ b/llvm/test/Transforms/LoopVectorize/predicate-switch.ll @@ -6,8 +6,8 @@ define void @switch4_default_common_dest_with_case(ptr %start, ptr %end) { ; IC1-LABEL: define void @switch4_default_common_dest_with_case( ; IC1-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) { ; IC1-NEXT: [[ENTRY:.*]]: -; IC1-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; IC1-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; IC1-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; IC1-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; IC1-NEXT: [[TMP0:%.*]] = sub i64 [[END1]], [[START2]] ; IC1-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[TMP0]], 2 ; IC1-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] @@ -99,8 +99,8 @@ define void @switch4_default_common_dest_with_case(ptr %start, ptr %end) { ; IC2-LABEL: define void @switch4_default_common_dest_with_case( ; IC2-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) { ; IC2-NEXT: [[ENTRY:.*]]: -; IC2-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; IC2-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; IC2-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; IC2-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; IC2-NEXT: [[TMP0:%.*]] = sub i64 [[END1]], [[START2]] ; IC2-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[TMP0]], 4 ; IC2-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] @@ -338,21 +338,21 @@ define void @switch_to_header(ptr %start) { ; IC1-NEXT: [[ENTRY:.*]]: ; IC1-NEXT: br label %[[LOOP_HEADER:.*]] ; IC1: [[LOOP_HEADER]]: -; IC1-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[IF_THEN:.*]] ] +; IC1-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[IF_THEN1:.*]] ] ; IC1-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1 ; IC1-NEXT: switch i64 [[IV]], label %[[LOOP_LATCH:.*]] [ -; IC1-NEXT: i64 120, label %[[IF_THEN]] +; IC1-NEXT: i64 120, label %[[IF_THEN1]] ; IC1-NEXT: i64 100, label %[[LOOP_LATCH]] ; IC1-NEXT: ] -; IC1: [[IF_THEN]]: +; IC1: [[IF_THEN1]]: ; IC1-NEXT: br label %[[LOOP_HEADER]] -; IC1: [[IF_THEN1:.*:]] +; IC1: [[IF_THEN:.*:]] ; IC1-NEXT: [[GEP:%.*]] = getelementptr inbounds i64, ptr [[START]], i64 poison ; IC1-NEXT: store i64 42, ptr [[GEP]], align 1 ; IC1-NEXT: unreachable ; IC1: [[LOOP_LATCH]]: ; IC1-NEXT: [[CMP:%.*]] = icmp eq i64 [[IV_NEXT]], 100 -; IC1-NEXT: br i1 [[CMP]], label %[[EXIT:.*]], label %[[IF_THEN]] +; IC1-NEXT: br i1 [[CMP]], label %[[EXIT:.*]], label %[[IF_THEN1]] ; IC1: [[EXIT]]: ; IC1-NEXT: ret void ; @@ -361,21 +361,21 @@ define void @switch_to_header(ptr %start) { ; IC2-NEXT: [[ENTRY:.*]]: ; IC2-NEXT: br label %[[LOOP_HEADER:.*]] ; IC2: [[LOOP_HEADER]]: -; IC2-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[IF_THEN:.*]] ] +; IC2-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[IF_THEN1:.*]] ] ; IC2-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1 ; IC2-NEXT: switch i64 [[IV]], label %[[LOOP_LATCH:.*]] [ -; IC2-NEXT: i64 120, label %[[IF_THEN]] +; IC2-NEXT: i64 120, label %[[IF_THEN1]] ; IC2-NEXT: i64 100, label %[[LOOP_LATCH]] ; IC2-NEXT: ] -; IC2: [[IF_THEN]]: +; IC2: [[IF_THEN1]]: ; IC2-NEXT: br label %[[LOOP_HEADER]] -; IC2: [[IF_THEN1:.*:]] +; IC2: [[IF_THEN:.*:]] ; IC2-NEXT: [[GEP:%.*]] = getelementptr inbounds i64, ptr [[START]], i64 poison ; IC2-NEXT: store i64 42, ptr [[GEP]], align 1 ; IC2-NEXT: unreachable ; IC2: [[LOOP_LATCH]]: ; IC2-NEXT: [[CMP:%.*]] = icmp eq i64 [[IV_NEXT]], 100 -; IC2-NEXT: br i1 [[CMP]], label %[[EXIT:.*]], label %[[IF_THEN]] +; IC2-NEXT: br i1 [[CMP]], label %[[EXIT:.*]], label %[[IF_THEN1]] ; IC2: [[EXIT]]: ; IC2-NEXT: ret void ; diff --git a/llvm/test/Transforms/LoopVectorize/preserve-dbg-loc-and-loop-metadata.ll b/llvm/test/Transforms/LoopVectorize/preserve-dbg-loc-and-loop-metadata.ll index aa5fca88da9d4..144e2c3a02fb7 100644 --- a/llvm/test/Transforms/LoopVectorize/preserve-dbg-loc-and-loop-metadata.ll +++ b/llvm/test/Transforms/LoopVectorize/preserve-dbg-loc-and-loop-metadata.ll @@ -99,8 +99,8 @@ define void @widen_ptr_induction_dbg(ptr %start, ptr %end) { ; CHECK-LABEL: define void @widen_ptr_induction_dbg( ; CHECK-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*]]: -; CHECK-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; CHECK-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8 ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]] ; CHECK-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3 @@ -141,8 +141,8 @@ define void @widen_ptr_induction_dbg(ptr %start, ptr %end) { ; DEBUGLOC-LABEL: define void @widen_ptr_induction_dbg( ; DEBUGLOC-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) !dbg [[DBG32:![0-9]+]] { ; DEBUGLOC-NEXT: [[ENTRY:.*]]: -; DEBUGLOC-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64, !dbg [[DBG37:![0-9]+]] -; DEBUGLOC-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64, !dbg [[DBG37]] +; DEBUGLOC-NEXT: [[START2:%.*]] = ptrtoaddr ptr [[START]] to i64, !dbg [[DBG37:![0-9]+]] +; DEBUGLOC-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64, !dbg [[DBG37]] ; DEBUGLOC-NEXT: [[TMP0:%.*]] = add i64 [[END1]], -8, !dbg [[DBG37]] ; DEBUGLOC-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START2]], !dbg [[DBG37]] ; DEBUGLOC-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 3, !dbg [[DBG37]] diff --git a/llvm/test/Transforms/LoopVectorize/runtime-check-known-true.ll b/llvm/test/Transforms/LoopVectorize/runtime-check-known-true.ll index 830bd92c70b16..3aacdd4d51096 100644 --- a/llvm/test/Transforms/LoopVectorize/runtime-check-known-true.ll +++ b/llvm/test/Transforms/LoopVectorize/runtime-check-known-true.ll @@ -5,7 +5,7 @@ define void @test_runtime_check_known_false_after_construction(ptr %start.1, ptr ; CHECK-LABEL: define void @test_runtime_check_known_false_after_construction( ; CHECK-SAME: ptr [[START_1:%.*]], ptr [[START_2:%.*]], ptr [[END:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*]]: -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; CHECK-NEXT: [[GEP_START_2:%.*]] = getelementptr i8, ptr [[START_2]], i64 8 ; CHECK-NEXT: [[START_1_INT:%.*]] = ptrtoint ptr [[START_1]] to i64 ; CHECK-NEXT: [[START_2_INT:%.*]] = ptrtoint ptr [[GEP_START_2]] to i64 diff --git a/llvm/test/Transforms/LoopVectorize/runtime-check-needed-but-empty.ll b/llvm/test/Transforms/LoopVectorize/runtime-check-needed-but-empty.ll index 7a97830224b83..f01ca5ce8ae6d 100644 --- a/llvm/test/Transforms/LoopVectorize/runtime-check-needed-but-empty.ll +++ b/llvm/test/Transforms/LoopVectorize/runtime-check-needed-but-empty.ll @@ -78,7 +78,7 @@ define void @diff_memcheck_known_false_for_vf_4(ptr %B, ptr %A, ptr %end) { ; CHECK-LABEL: define void @diff_memcheck_known_false_for_vf_4( ; CHECK-SAME: ptr [[B:%.*]], ptr [[A:%.*]], ptr [[END:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*]]: -; CHECK-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 +; CHECK-NEXT: [[END1:%.*]] = ptrtoaddr ptr [[END]] to i64 ; CHECK-NEXT: [[A_INT:%.*]] = ptrtoint ptr [[A]] to i64 ; CHECK-NEXT: [[B_CAST:%.*]] = ptrtoint ptr [[B]] to i64 ; CHECK-NEXT: [[PTR_SUB:%.*]] = sub i64 [[A_INT]], [[B_CAST]] diff --git a/llvm/test/Transforms/LoopVectorize/scev-predicate-reasoning.ll b/llvm/test/Transforms/LoopVectorize/scev-predicate-reasoning.ll index f8b535980d5f9..443d605882a4f 100644 --- a/llvm/test/Transforms/LoopVectorize/scev-predicate-reasoning.ll +++ b/llvm/test/Transforms/LoopVectorize/scev-predicate-reasoning.ll @@ -122,11 +122,11 @@ define void @implied_wrap_predicate(ptr %A, ptr %B, ptr %C) { ; CHECK-LABEL: define void @implied_wrap_predicate( ; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]], ptr [[C:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[A3:%.*]] = ptrtoint ptr [[A]] to i64 +; CHECK-NEXT: [[A3:%.*]] = ptrtoaddr ptr [[A]] to i64 ; CHECK-NEXT: [[C2:%.*]] = ptrtoint ptr [[C]] to i64 -; CHECK-NEXT: [[A1:%.*]] = ptrtoint ptr [[A]] to i64 +; CHECK-NEXT: [[A1:%.*]] = ptrtoaddr ptr [[A]] to i64 ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[A3]], 16 -; CHECK-NEXT: [[UMAX4:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP0]], i64 add (i64 ptrtoint (ptr @h to i64), i64 1)) +; CHECK-NEXT: [[UMAX4:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP0]], i64 add (i64 ptrtoaddr (ptr @h to i64), i64 1)) ; CHECK-NEXT: [[TMP1:%.*]] = add i64 [[UMAX4]], -9 ; CHECK-NEXT: [[TMP2:%.*]] = sub i64 [[TMP1]], [[A3]] ; CHECK-NEXT: [[TMP3:%.*]] = lshr i64 [[TMP2]], 3 @@ -135,7 +135,7 @@ define void @implied_wrap_predicate(ptr %A, ptr %B, ptr %C) { ; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_SCEVCHECK:.*]] ; CHECK: [[VECTOR_SCEVCHECK]]: ; CHECK-NEXT: [[TMP5:%.*]] = add i64 [[A1]], 16 -; CHECK-NEXT: [[UMAX:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP5]], i64 add (i64 ptrtoint (ptr @h to i64), i64 1)) +; CHECK-NEXT: [[UMAX:%.*]] = call i64 @llvm.umax.i64(i64 [[TMP5]], i64 add (i64 ptrtoaddr (ptr @h to i64), i64 1)) ; CHECK-NEXT: [[TMP6:%.*]] = add i64 [[UMAX]], -9 ; CHECK-NEXT: [[TMP7:%.*]] = sub i64 [[TMP6]], [[A1]] ; CHECK-NEXT: [[TMP8:%.*]] = lshr i64 [[TMP7]], 3 diff --git a/llvm/test/Transforms/LoopVectorize/vplan-predicate-switch.ll b/llvm/test/Transforms/LoopVectorize/vplan-predicate-switch.ll index 3d05ee7f27b5c..f2cf1b27c5d4a 100644 --- a/llvm/test/Transforms/LoopVectorize/vplan-predicate-switch.ll +++ b/llvm/test/Transforms/LoopVectorize/vplan-predicate-switch.ll @@ -6,8 +6,8 @@ define void @switch4_default_common_dest_with_case(ptr %start, ptr %end) { ; CHECK-NEXT: ir<%0> = original trip-count ; CHECK-EMPTY: ; CHECK-NEXT: ir-bb: -; CHECK-NEXT: IR %start2 = ptrtoint ptr %start to i64 -; CHECK-NEXT: IR %end1 = ptrtoint ptr %end to i64 +; CHECK-NEXT: IR %start2 = ptrtoaddr ptr %start to i64 +; CHECK-NEXT: IR %end1 = ptrtoaddr ptr %end to i64 ; CHECK-NEXT: IR %0 = sub i64 %end1, %start2 ; CHECK-NEXT: EMIT vp<%min.iters.check> = icmp ult ir<%0>, ir<2> ; CHECK-NEXT: EMIT branch-on-cond vp<%min.iters.check> diff --git a/llvm/test/Transforms/LoopVectorize/vplan-sink-scalars-and-merge.ll b/llvm/test/Transforms/LoopVectorize/vplan-sink-scalars-and-merge.ll index 994e9c1ce64fa..2cbd4a292c0dd 100644 --- a/llvm/test/Transforms/LoopVectorize/vplan-sink-scalars-and-merge.ll +++ b/llvm/test/Transforms/LoopVectorize/vplan-sink-scalars-and-merge.ll @@ -1134,7 +1134,7 @@ define void @ptr_induction_remove_dead_recipe(ptr %start, ptr %end) { ; CHECK-NEXT: vp<[[TC:%.+]]> = original trip-count ; CHECK-EMPTY: ; CHECK-NEXT: ir-bb: -; CHECK-NEXT: EMIT vp<[[TC]]> = EXPAND SCEV ((-1 * (ptrtoint ptr %end to i64)) + (ptrtoint ptr %start to i64)) +; CHECK-NEXT: EMIT vp<[[TC]]> = EXPAND SCEV ((-1 * (ptrtoaddr ptr %end to i64)) + (ptrtoaddr ptr %start to i64)) ; CHECK-NEXT: Successor(s): scalar.ph, vector.ph ; CHECK-EMPTY: ; CHECK-NEXT: vector.ph: diff --git a/llvm/test/Transforms/PhaseOrdering/X86/pr48844-br-to-switch-vectorization.ll b/llvm/test/Transforms/PhaseOrdering/X86/pr48844-br-to-switch-vectorization.ll index 2fe420183c683..f54ed1659de1f 100644 --- a/llvm/test/Transforms/PhaseOrdering/X86/pr48844-br-to-switch-vectorization.ll +++ b/llvm/test/Transforms/PhaseOrdering/X86/pr48844-br-to-switch-vectorization.ll @@ -34,8 +34,8 @@ define dso_local void @test(ptr %start, ptr %end) #0 { ; AVX2-NEXT: [[I11_NOT1:%.*]] = icmp eq ptr [[START:%.*]], [[END:%.*]] ; AVX2-NEXT: br i1 [[I11_NOT1]], label [[EXIT:%.*]], label [[BB12_PREHEADER:%.*]] ; AVX2: iter.check: -; AVX2-NEXT: [[END3:%.*]] = ptrtoint ptr [[END]] to i64 -; AVX2-NEXT: [[START4:%.*]] = ptrtoint ptr [[START]] to i64 +; AVX2-NEXT: [[END3:%.*]] = ptrtoaddr ptr [[END]] to i64 +; AVX2-NEXT: [[START4:%.*]] = ptrtoaddr ptr [[START]] to i64 ; AVX2-NEXT: [[TMP0:%.*]] = add i64 [[END3]], -4 ; AVX2-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[START4]] ; AVX2-NEXT: [[TMP2:%.*]] = lshr i64 [[TMP1]], 2 @@ -86,7 +86,7 @@ define dso_local void @test(ptr %start, ptr %end) #0 { ; AVX2-NEXT: [[IND_END11:%.*]] = getelementptr i8, ptr [[START]], i64 [[TMP26]] ; AVX2-NEXT: [[N_VEC_REMAINING:%.*]] = and i64 [[TMP3]], 24 ; AVX2-NEXT: [[MIN_EPILOG_ITERS_CHECK:%.*]] = icmp eq i64 [[N_VEC_REMAINING]], 0 -; AVX2-NEXT: br i1 [[MIN_EPILOG_ITERS_CHECK]], label [[BB12_PREHEADER1]], label [[BB12_PREHEADER11]] +; AVX2-NEXT: br i1 [[MIN_EPILOG_ITERS_CHECK]], label [[BB12_PREHEADER1]], label [[BB12_PREHEADER11]], !prof [[PROF3:![0-9]+]] ; AVX2: vec.epilog.ph: ; AVX2-NEXT: [[VEC_EPILOG_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC]], [[VEC_EPILOG_ITER_CHECK]] ], [ 0, [[VECTOR_MAIN_LOOP_ITER_CHECK]] ] ; AVX2-NEXT: [[N_VEC10:%.*]] = and i64 [[TMP3]], 9223372036854775800 @@ -104,7 +104,7 @@ define dso_local void @test(ptr %start, ptr %end) #0 { ; AVX2-NEXT: tail call void @llvm.masked.store.v8i32.p0(<8 x i32> splat (i32 42), ptr [[NEXT_GEP14]], i32 4, <8 x i1> [[TMP24]]) ; AVX2-NEXT: [[INDEX_NEXT16]] = add nuw i64 [[INDEX12]], 8 ; AVX2-NEXT: [[TMP25:%.*]] = icmp eq i64 [[INDEX_NEXT16]], [[N_VEC10]] -; AVX2-NEXT: br i1 [[TMP25]], label [[VEC_EPILOG_MIDDLE_BLOCK:%.*]], label [[BB12]], !llvm.loop [[LOOP3:![0-9]+]] +; AVX2-NEXT: br i1 [[TMP25]], label [[VEC_EPILOG_MIDDLE_BLOCK:%.*]], label [[BB12]], !llvm.loop [[LOOP4:![0-9]+]] ; AVX2: vec.epilog.middle.block: ; AVX2-NEXT: [[CMP_N17:%.*]] = icmp eq i64 [[TMP3]], [[N_VEC10]] ; AVX2-NEXT: br i1 [[CMP_N17]], label [[EXIT]], label [[BB12_PREHEADER1]] @@ -124,7 +124,7 @@ define dso_local void @test(ptr %start, ptr %end) #0 { ; AVX2: latch: ; AVX2-NEXT: [[PTR_NEXT]] = getelementptr inbounds nuw i8, ptr [[PTR2]], i64 4 ; AVX2-NEXT: [[I11_NOT:%.*]] = icmp eq ptr [[PTR_NEXT]], [[END]] -; AVX2-NEXT: br i1 [[I11_NOT]], label [[EXIT]], label [[BB13]], !llvm.loop [[LOOP4:![0-9]+]] +; AVX2-NEXT: br i1 [[I11_NOT]], label [[EXIT]], label [[BB13]], !llvm.loop [[LOOP5:![0-9]+]] ; AVX2: exit: ; AVX2-NEXT: ret void ; diff --git a/llvm/test/Transforms/PhaseOrdering/enable-loop-header-duplication-oz.ll b/llvm/test/Transforms/PhaseOrdering/enable-loop-header-duplication-oz.ll index cd2ed37b22db5..1669cdcbe50a1 100644 --- a/llvm/test/Transforms/PhaseOrdering/enable-loop-header-duplication-oz.ll +++ b/llvm/test/Transforms/PhaseOrdering/enable-loop-header-duplication-oz.ll @@ -31,8 +31,8 @@ define void @test(i8* noalias nonnull align 1 %start, i8* %end) unnamed_addr { ; ROTATION-NEXT: [[_12_I1:%.*]] = icmp eq ptr [[START]], [[END]] ; ROTATION-NEXT: br i1 [[_12_I1]], label [[EXIT:%.*]], label [[LOOP_LATCH_PREHEADER:%.*]] ; ROTATION: loop.latch.preheader: -; ROTATION-NEXT: [[END3:%.*]] = ptrtoint ptr [[END]] to i64 -; ROTATION-NEXT: [[START4:%.*]] = ptrtoint ptr [[START]] to i64 +; ROTATION-NEXT: [[END3:%.*]] = ptrtoaddr ptr [[END]] to i64 +; ROTATION-NEXT: [[START4:%.*]] = ptrtoaddr ptr [[START]] to i64 ; ROTATION-NEXT: [[TMP0:%.*]] = sub i64 [[END3]], [[START4]] ; ROTATION-NEXT: tail call void @llvm.memset.p0.i64(ptr nonnull align 1 [[START]], i8 1, i64 [[TMP0]], i1 false) ; ROTATION-NEXT: br label [[EXIT]]