[llvm] 12d319e - [WPD] Use getGetElementPtr() overload accepting DataLayout (#225754)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 23 07:19:39 PDT 2026
Author: Nikita Popov
Date: 2026-09-23T16:19:31+02:00
New Revision: 12d319e5e5c9609f876bf07dab5716329c105dd7
URL: https://github.com/llvm/llvm-project/commit/12d319e5e5c9609f876bf07dab5716329c105dd7
DIFF: https://github.com/llvm/llvm-project/commit/12d319e5e5c9609f876bf07dab5716329c105dd7.diff
LOG: [WPD] Use getGetElementPtr() overload accepting DataLayout (#225754)
To produce constant GEPs in canonical ptradd form.
Added:
Modified:
llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
llvm/test/Transforms/WholeProgramDevirt/export-vcp.ll
llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-begin.ll
llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-check.ll
llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-end.ll
llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-small-alignment-32.ll
llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-small-alignment-64.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
index e9d2036e5fdbb7..8a35980003c27a 100644
--- a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
+++ b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
@@ -2061,10 +2061,10 @@ void DevirtModule::rebuildGlobal(VTableBits &B) {
// element (the original initializer).
auto *Alias = GlobalAlias::create(
B.GV->getInitializer()->getType(), 0, B.GV->getLinkage(), "",
- ConstantExpr::getInBoundsGetElementPtr(
- NewInit->getType(), NewGV,
- ArrayRef<Constant *>{ConstantInt::get(Int32Ty, 0),
- ConstantInt::get(Int32Ty, 1)}),
+ ConstantExpr::getGetElementPtr(
+ M.getDataLayout(), NewInit->getType(), NewGV,
+ {ConstantInt::get(Int32Ty, 0), ConstantInt::get(Int32Ty, 1)},
+ GEPNoWrapFlags::inBounds()),
&M);
Alias->setVisibility(B.GV->getVisibility());
Alias->takeName(B.GV);
diff --git a/llvm/test/Transforms/WholeProgramDevirt/export-vcp.ll b/llvm/test/Transforms/WholeProgramDevirt/export-vcp.ll
index c38e5a06c0547a..5e3a48f03f0c57 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/export-vcp.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/export-vcp.ll
@@ -70,12 +70,12 @@ target datalayout = "e-p:64:64"
; X86: @__typeid_typeid4_0_24_12_bit = hidden alias i8, inttoptr (i32 1 to ptr)
; ARM-NOT: alias {{.*}} inttoptr
-; CHECK: @vt3a = alias ptr, getelementptr inbounds ({ [8 x i8], ptr, [0 x i8] }, ptr [[CVT3A]], i32 0, i32 1)
-; CHECK: @vt3b = alias ptr, getelementptr inbounds ({ [8 x i8], ptr, [0 x i8] }, ptr [[CVT3B]], i32 0, i32 1)
-; CHECK: @vt3c = alias ptr, getelementptr inbounds ({ [8 x i8], ptr, [0 x i8] }, ptr [[CVT3C]], i32 0, i32 1)
-; CHECK: @vt3d = alias ptr, getelementptr inbounds ({ [8 x i8], ptr, [0 x i8] }, ptr [[CVT3D]], i32 0, i32 1)
-; CHECK: @vt4a = alias ptr, getelementptr inbounds ({ [8 x i8], ptr, [0 x i8] }, ptr [[CVT4A]], i32 0, i32 1)
-; CHECK: @vt4b = alias ptr, getelementptr inbounds ({ [8 x i8], ptr, [0 x i8] }, ptr [[CVT4B]], i32 0, i32 1)
+; CHECK: @vt3a = alias ptr, getelementptr inbounds (i8, ptr [[CVT3A]], i64 8)
+; CHECK: @vt3b = alias ptr, getelementptr inbounds (i8, ptr [[CVT3B]], i64 8)
+; CHECK: @vt3c = alias ptr, getelementptr inbounds (i8, ptr [[CVT3C]], i64 8)
+; CHECK: @vt3d = alias ptr, getelementptr inbounds (i8, ptr [[CVT3D]], i64 8)
+; CHECK: @vt4a = alias ptr, getelementptr inbounds (i8, ptr [[CVT4A]], i64 8)
+; CHECK: @vt4b = alias ptr, getelementptr inbounds (i8, ptr [[CVT4B]], i64 8)
define i1 @vf0i1(ptr %this, i32, i32) readnone {
ret i1 0
diff --git a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-begin.ll b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-begin.ll
index 2654b70b90e852..f38e8b5244fc2c 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-begin.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-begin.ll
@@ -67,12 +67,12 @@ i32 trunc (i64 sub (i64 ptrtoint (ptr dso_local_equivalent @vf0i1 to i64), i64 p
i32 trunc (i64 sub (i64 ptrtoint (ptr dso_local_equivalent @vf2i16 to i64), i64 ptrtoint (ptr @vt7_rel to i64)) to i32)
], !type !2
-; CHECK: @vt1 = alias [3 x ptr], getelementptr inbounds ({ [8 x i8], [3 x ptr], [0 x i8] }, ptr [[VT1DATA]], i32 0, i32 1)
-; CHECK: @vt2 = alias [3 x ptr], getelementptr inbounds ({ [8 x i8], [3 x ptr], [0 x i8] }, ptr [[VT2DATA]], i32 0, i32 1)
-; CHECK: @vt3 = alias [3 x ptr], getelementptr inbounds ({ [4 x i8], [3 x ptr], [0 x i8] }, ptr [[VT3DATA]], i32 0, i32 1)
-; CHECK: @vt4 = alias [3 x ptr], getelementptr inbounds ({ [16 x i8], [3 x ptr], [0 x i8] }, ptr [[VT4DATA]], i32 0, i32 1)
-; CHECK: @vt6_rel = alias [3 x i32], getelementptr inbounds ({ [4 x i8], [3 x i32], [0 x i8] }, ptr [[VT6RELDATA]], i32 0, i32 1)
-; CHECK: @vt7_rel = alias [3 x i32], getelementptr inbounds ({ [4 x i8], [3 x i32], [0 x i8] }, ptr [[VT7RELDATA]], i32 0, i32 1)
+; CHECK: @vt1 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT1DATA]], i64 8)
+; CHECK: @vt2 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT2DATA]], i64 8)
+; CHECK: @vt3 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT3DATA]], i64 8)
+; CHECK: @vt4 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT4DATA]], i64 16)
+; CHECK: @vt6_rel = alias [3 x i32], getelementptr inbounds (i8, ptr [[VT6RELDATA]], i64 4)
+; CHECK: @vt7_rel = alias [3 x i32], getelementptr inbounds (i8, ptr [[VT7RELDATA]], i64 4)
define i1 @vf0i1(ptr %this) readnone {
ret i1 0
diff --git a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-check.ll b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-check.ll
index 8327e1cfdf1d2b..df2ec4ab375844 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-check.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-check.ll
@@ -98,12 +98,12 @@ i32 trunc (i64 sub (i64 ptrtoint (ptr dso_local_equivalent @vf0i1 to i64), i64 p
i32 trunc (i64 sub (i64 ptrtoint (ptr dso_local_equivalent @vf4i32 to i64), i64 ptrtoint (ptr @vt7_rel to i64)) to i32)
], !type !1
-; CHECK: @vt1 = alias [3 x ptr], getelementptr inbounds ({ [8 x i8], [3 x ptr], [4 x i8] }, ptr [[VT1DATA]], i32 0, i32 1)
-; CHECK: @vt2 = alias [3 x ptr], getelementptr inbounds ({ [8 x i8], [3 x ptr], [4 x i8] }, ptr [[VT2DATA]], i32 0, i32 1)
-; CHECK: @vt3 = alias [3 x ptr], getelementptr inbounds ({ [8 x i8], [3 x ptr], [4 x i8] }, ptr [[VT3DATA]], i32 0, i32 1)
-; CHECK: @vt4 = alias [3 x ptr], getelementptr inbounds ({ [8 x i8], [3 x ptr], [4 x i8] }, ptr [[VT4DATA]], i32 0, i32 1)
-; CHECK: @vt6_rel = alias [3 x i32], getelementptr inbounds ({ [4 x i8], [3 x i32], [0 x i8] }, ptr [[VT6RELDATA]], i32 0, i32 1)
-; CHECK: @vt7_rel = alias [3 x i32], getelementptr inbounds ({ [4 x i8], [3 x i32], [0 x i8] }, ptr [[VT7RELDATA]], i32 0, i32 1)
+; CHECK: @vt1 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT1DATA]], i64 8)
+; CHECK: @vt2 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT2DATA]], i64 8)
+; CHECK: @vt3 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT3DATA]], i64 8)
+; CHECK: @vt4 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT4DATA]], i64 8)
+; CHECK: @vt6_rel = alias [3 x i32], getelementptr inbounds (i8, ptr [[VT6RELDATA]], i64 4)
+; CHECK: @vt7_rel = alias [3 x i32], getelementptr inbounds (i8, ptr [[VT7RELDATA]], i64 4)
define i1 @vf0i1(ptr %this) readnone {
ret i1 0
diff --git a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-end.ll b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-end.ll
index dd91ff6e6f3aab..4c39dee8147b77 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-end.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-end.ll
@@ -57,10 +57,10 @@ i32 trunc (i64 sub (i64 ptrtoint (ptr dso_local_equivalent @vf1i1 to i64), i64 p
i32 trunc (i64 sub (i64 ptrtoint (ptr dso_local_equivalent @vf4i32 to i64), i64 ptrtoint (ptr @vt6_rel to i64)) to i32)
], !type !2
-; CHECK: @vt1 = alias [4 x ptr], getelementptr inbounds ({ [0 x i8], [4 x ptr], [8 x i8] }, ptr [[VT1DATA]], i32 0, i32 1)
-; CHECK: @vt2 = alias [3 x ptr], getelementptr inbounds ({ [0 x i8], [3 x ptr], [8 x i8] }, ptr [[VT2DATA]], i32 0, i32 1)
-; CHECK: @vt3 = alias [4 x ptr], getelementptr inbounds ({ [0 x i8], [4 x ptr], [8 x i8] }, ptr [[VT3DATA]], i32 0, i32 1)
-; CHECK: @vt4 = alias [3 x ptr], getelementptr inbounds ({ [0 x i8], [3 x ptr], [8 x i8] }, ptr [[VT4DATA]], i32 0, i32 1)
+; CHECK: @vt1 = alias [4 x ptr], ptr [[VT1DATA]]
+; CHECK: @vt2 = alias [3 x ptr], ptr [[VT2DATA]]
+; CHECK: @vt3 = alias [4 x ptr], ptr [[VT3DATA]]
+; CHECK: @vt4 = alias [3 x ptr], ptr [[VT4DATA]]
define i1 @vf0i1(ptr %this) readnone {
ret i1 0
diff --git a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-small-alignment-32.ll b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-small-alignment-32.ll
index 314b1ee13a8007..3968e8c9cc5c9d 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-small-alignment-32.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-small-alignment-32.ll
@@ -96,14 +96,14 @@ i32 trunc (i64 sub (i64 ptrtoint (ptr dso_local_equivalent @vf9i8 to i64), i64 p
i32 trunc (i64 sub (i64 ptrtoint (ptr dso_local_equivalent @vf6i64 to i64), i64 ptrtoint (ptr @vt7_rel to i64)) to i32)
], !type !2
-; CHECK: @vt1 = alias [3 x ptr], getelementptr inbounds ({ [4 x i8], [3 x ptr], [0 x i8] }, ptr [[VT1DATA]], i32 0, i32 1)
-; CHECK: @vt2 = alias [3 x ptr], getelementptr inbounds ({ [4 x i8], [3 x ptr], [0 x i8] }, ptr [[VT2DATA]], i32 0, i32 1)
-; CHECK: @vt3 = alias [3 x ptr], getelementptr inbounds ({ [2 x i8], [3 x ptr], [0 x i8] }, ptr [[VT3DATA]], i32 0, i32 1)
-; CHECK: @vt4 = alias [3 x ptr], getelementptr inbounds ({ [16 x i8], [3 x ptr], [0 x i8] }, ptr [[VT4DATA]], i32 0, i32 1)
-; CHECK: @vt6 = alias [3 x ptr], getelementptr inbounds ({ [4 x i8], [3 x ptr], [0 x i8] }, ptr [[VT6DATA]], i32 0, i32 1)
-; CHECK: @vt7 = alias [3 x ptr], getelementptr inbounds ({ [4 x i8], [3 x ptr], [0 x i8] }, ptr [[VT7DATA]], i32 0, i32 1)
-; CHECK: @vt6_rel = alias [3 x i32], getelementptr inbounds ({ [4 x i8], [3 x i32], [0 x i8] }, ptr [[VT6RELDATA]], i32 0, i32 1)
-; CHECK: @vt7_rel = alias [3 x i32], getelementptr inbounds ({ [4 x i8], [3 x i32], [0 x i8] }, ptr [[VT7RELDATA]], i32 0, i32 1)
+; CHECK: @vt1 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT1DATA]], i32 4)
+; CHECK: @vt2 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT2DATA]], i32 4)
+; CHECK: @vt3 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT3DATA]], i32 4)
+; CHECK: @vt4 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT4DATA]], i32 16)
+; CHECK: @vt6 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT6DATA]], i32 4)
+; CHECK: @vt7 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT7DATA]], i32 4)
+; CHECK: @vt6_rel = alias [3 x i32], getelementptr inbounds (i8, ptr [[VT6RELDATA]], i32 4)
+; CHECK: @vt7_rel = alias [3 x i32], getelementptr inbounds (i8, ptr [[VT7RELDATA]], i32 4)
define i1 @vf0i1(ptr %this) readnone {
ret i1 0
diff --git a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-small-alignment-64.ll b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-small-alignment-64.ll
index 9f39b65e266500..111fe490a9a386 100644
--- a/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-small-alignment-64.ll
+++ b/llvm/test/Transforms/WholeProgramDevirt/virtual-const-prop-small-alignment-64.ll
@@ -99,14 +99,14 @@ i32 trunc (i64 sub (i64 ptrtoint (ptr dso_local_equivalent @vf9i8 to i64), i64 p
i32 trunc (i64 sub (i64 ptrtoint (ptr dso_local_equivalent @vf6i64 to i64), i64 ptrtoint (ptr @vt7_rel to i64)) to i32)
], !type !2
-; CHECK: @vt1 = alias [3 x ptr], getelementptr inbounds ({ [8 x i8], [3 x ptr], [0 x i8] }, ptr [[VT1DATA]], i32 0, i32 1)
-; CHECK: @vt2 = alias [3 x ptr], getelementptr inbounds ({ [8 x i8], [3 x ptr], [0 x i8] }, ptr [[VT2DATA]], i32 0, i32 1)
-; CHECK: @vt3 = alias [3 x ptr], getelementptr inbounds ({ [2 x i8], [3 x ptr], [0 x i8] }, ptr [[VT3DATA]], i32 0, i32 1)
-; CHECK: @vt4 = alias [3 x ptr], getelementptr inbounds ({ [16 x i8], [3 x ptr], [0 x i8] }, ptr [[VT4DATA]], i32 0, i32 1)
-; CHECK: @vt6 = alias [3 x ptr], getelementptr inbounds ({ [16 x i8], [3 x ptr], [0 x i8] }, ptr [[VT6DATA]], i32 0, i32 1)
-; CHECK: @vt7 = alias [3 x ptr], getelementptr inbounds ({ [16 x i8], [3 x ptr], [0 x i8] }, ptr [[VT7DATA]], i32 0, i32 1)
-; CHECK: @vt6_rel = alias [3 x i32], getelementptr inbounds ({ [4 x i8], [3 x i32], [0 x i8] }, ptr [[VT6RELDATA]], i32 0, i32 1)
-; CHECK: @vt7_rel = alias [3 x i32], getelementptr inbounds ({ [4 x i8], [3 x i32], [0 x i8] }, ptr [[VT7RELDATA]], i32 0, i32 1)
+; CHECK: @vt1 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT1DATA]], i64 8)
+; CHECK: @vt2 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT2DATA]], i64 8)
+; CHECK: @vt3 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT3DATA]], i64 8)
+; CHECK: @vt4 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT4DATA]], i64 16)
+; CHECK: @vt6 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT6DATA]], i64 16)
+; CHECK: @vt7 = alias [3 x ptr], getelementptr inbounds (i8, ptr [[VT7DATA]], i64 16)
+; CHECK: @vt6_rel = alias [3 x i32], getelementptr inbounds (i8, ptr [[VT6RELDATA]], i64 4)
+; CHECK: @vt7_rel = alias [3 x i32], getelementptr inbounds (i8, ptr [[VT7RELDATA]], i64 4)
define i1 @vf0i1(ptr %this) readnone {
ret i1 0
More information about the llvm-commits
mailing list