[llvm] 303cf70 - [TargetFolder] Use getGetElementPtr() overload accepting DataLayout (#226068)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 24 02:17:35 PDT 2026
Author: Nikita Popov
Date: 2026-09-24T09:17:28Z
New Revision: 303cf70bb64bebbe4549b52a59e3dbe1d4d5979a
URL: https://github.com/llvm/llvm-project/commit/303cf70bb64bebbe4549b52a59e3dbe1d4d5979a
DIFF: https://github.com/llvm/llvm-project/commit/303cf70bb64bebbe4549b52a59e3dbe1d4d5979a.diff
LOG: [TargetFolder] Use getGetElementPtr() overload accepting DataLayout (#226068)
To directly construct the constant GEP in canonical ptradd form.
The test change is because this ends up canonicalizing the vector
GEP case as well, rather than just the scalar cases.
Added:
Modified:
llvm/include/llvm/Analysis/TargetFolder.h
llvm/test/Transforms/SLPVectorizer/RISCV/revec.ll
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/TargetFolder.h b/llvm/include/llvm/Analysis/TargetFolder.h
index 80d798ee64356..aa09d90059dcf 100644
--- a/llvm/include/llvm/Analysis/TargetFolder.h
+++ b/llvm/include/llvm/Analysis/TargetFolder.h
@@ -125,7 +125,11 @@ class LLVM_ABI TargetFolder final : public IRBuilderFolder {
// Every index must be constant.
if (any_of(IdxList, [](Value *V) { return !isa<Constant>(V); }))
return nullptr;
- return Fold(ConstantExpr::getGetElementPtr(Ty, PC, IdxList, NW));
+ ArrayRef<Constant *> ConstIdxList =
+ ArrayRef((Constant *const *)IdxList.data(), IdxList.size());
+ if (Constant *GEP =
+ ConstantExpr::getGetElementPtr(DL, Ty, PC, ConstIdxList, NW))
+ return Fold(GEP);
}
return nullptr;
}
diff --git a/llvm/test/Transforms/SLPVectorizer/RISCV/revec.ll b/llvm/test/Transforms/SLPVectorizer/RISCV/revec.ll
index 86b2acdc7634f..a47ce463b31c1 100644
--- a/llvm/test/Transforms/SLPVectorizer/RISCV/revec.ll
+++ b/llvm/test/Transforms/SLPVectorizer/RISCV/revec.ll
@@ -7,7 +7,7 @@ define i32 @test() {
; CHECK-NEXT: entry:
; CHECK-NEXT: br label [[IF_END_I87:%.*]]
; CHECK: if.end.i87:
-; CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> align 4 getelementptr (i32, <4 x ptr> <ptr inttoptr (i64 64036 to ptr), ptr inttoptr (i64 64036 to ptr), ptr inttoptr (i64 64064 to ptr), ptr inttoptr (i64 64064 to ptr)>, <4 x i64> <i64 0, i64 1, i64 0, i64 1>), <4 x i1> splat (i1 true), <4 x i32> poison)
+; CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> align 4 getelementptr (i8, <4 x ptr> <ptr inttoptr (i64 64036 to ptr), ptr inttoptr (i64 64036 to ptr), ptr inttoptr (i64 64064 to ptr), ptr inttoptr (i64 64064 to ptr)>, <4 x i64> <i64 0, i64 4, i64 0, i64 4>), <4 x i1> splat (i1 true), <4 x i32> poison)
; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> <i32 undef, i32 undef, i32 0, i32 0>, <4 x i32> <i32 0, i32 1, i32 6, i32 7>
; CHECK-NEXT: switch i32 0, label [[SW_BB509_I:%.*]] [
; CHECK-NEXT: i32 1, label [[SW_BB509_I]]
More information about the llvm-commits
mailing list