aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp
diff options
context:
space:
mode:
authorNikita Popov <npopov@redhat.com>2024-01-12 14:21:21 +0100
committerGitHub <noreply@github.com>2024-01-12 14:21:21 +0100
commit6c2fbc3a68ba6d4bd1c8c2c43c98cff5e82f2ba4 (patch)
treee29da579fba2853f341b9f6c99f6701d73a8b0be /llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp
parentae5d63924a6214154194c286a13c6ae74d31c086 (diff)
downloadllvm-6c2fbc3a68ba6d4bd1c8c2c43c98cff5e82f2ba4.zip
llvm-6c2fbc3a68ba6d4bd1c8c2c43c98cff5e82f2ba4.tar.gz
llvm-6c2fbc3a68ba6d4bd1c8c2c43c98cff5e82f2ba4.tar.bz2
[IRBuilder] Add CreatePtrAdd() method (NFC) (#77582)
This abstracts over the common pattern of creating a gep with i8 element type.
Diffstat (limited to 'llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp16
1 files changed, 6 insertions, 10 deletions
diff --git a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp
index cd3ac31..a1d7f0f 100644
--- a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp
+++ b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp
@@ -169,12 +169,8 @@ Value *SCEVExpander::InsertNoopCastOfTo(Value *V, Type *Ty) {
// during expansion.
if (Op == Instruction::IntToPtr) {
auto *PtrTy = cast<PointerType>(Ty);
- if (DL.isNonIntegralPointerType(PtrTy)) {
- assert(DL.getTypeAllocSize(Builder.getInt8Ty()) == 1 &&
- "alloc size of i8 must by 1 byte for the GEP to be correct");
- return Builder.CreateGEP(
- Builder.getInt8Ty(), Constant::getNullValue(PtrTy), V, "scevgep");
- }
+ if (DL.isNonIntegralPointerType(PtrTy))
+ return Builder.CreatePtrAdd(Constant::getNullValue(PtrTy), V, "scevgep");
}
// Short-circuit unnecessary bitcasts.
if (Op == Instruction::BitCast) {
@@ -321,7 +317,7 @@ Value *SCEVExpander::expandAddToGEP(const SCEV *Offset, Value *V) {
// Fold a GEP with constant operands.
if (Constant *CLHS = dyn_cast<Constant>(V))
if (Constant *CRHS = dyn_cast<Constant>(Idx))
- return Builder.CreateGEP(Builder.getInt8Ty(), CLHS, CRHS);
+ return Builder.CreatePtrAdd(CLHS, CRHS);
// Do a quick scan to see if we have this GEP nearby. If so, reuse it.
unsigned ScanLimit = 6;
@@ -358,7 +354,7 @@ Value *SCEVExpander::expandAddToGEP(const SCEV *Offset, Value *V) {
}
// Emit a GEP.
- return Builder.CreateGEP(Builder.getInt8Ty(), V, Idx, "scevgep");
+ return Builder.CreatePtrAdd(V, Idx, "scevgep");
}
/// PickMostRelevantLoop - Given two loops pick the one that's most relevant for
@@ -2123,9 +2119,9 @@ Value *SCEVExpander::generateOverflowCheck(const SCEVAddRecExpr *AR,
if (isa<PointerType>(ARTy)) {
Value *NegMulV = Builder.CreateNeg(MulV);
if (NeedPosCheck)
- Add = Builder.CreateGEP(Builder.getInt8Ty(), StartValue, MulV);
+ Add = Builder.CreatePtrAdd(StartValue, MulV);
if (NeedNegCheck)
- Sub = Builder.CreateGEP(Builder.getInt8Ty(), StartValue, NegMulV);
+ Sub = Builder.CreatePtrAdd(StartValue, NegMulV);
} else {
if (NeedPosCheck)
Add = Builder.CreateAdd(StartValue, MulV);