[clang] [llvm] [OpenMP] Use CreatePtrDiff() (PR #184127)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 2 06:03:24 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-codegen
Author: Nikita Popov (nikic)
<details>
<summary>Changes</summary>
This will use ptrtoaddr instead of ptrtoint in the pointer difference calculation, avoiding unnecessary provenance exposure.
Add an IsNUW flag to allow specifying nuw on the subtraction.
---
Patch is 52.83 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/184127.diff
5 Files Affected:
- (modified) clang/lib/CodeGen/CGOpenMPRuntime.cpp (+1-3)
- (modified) clang/test/OpenMP/target_task_affinity_codegen.cpp (+24-24)
- (modified) clang/test/OpenMP/task_codegen.cpp (+117-117)
- (modified) llvm/include/llvm/IR/IRBuilder.h (+2-1)
- (modified) llvm/lib/IR/IRBuilder.cpp (+3-2)
``````````diff
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
index dececc079953d..09cc8c25538e2 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -3729,9 +3729,7 @@ getPointerAndSize(CodeGenFunction &CGF, const Expr *E) {
llvm::Value *UpAddr = CGF.Builder.CreateConstGEP1_32(
UpAddrAddress.getElementType(), UpAddrAddress.emitRawPointer(CGF),
/*Idx0=*/1);
- llvm::Value *LowIntPtr = CGF.Builder.CreatePtrToInt(Addr, CGF.SizeTy);
- llvm::Value *UpIntPtr = CGF.Builder.CreatePtrToInt(UpAddr, CGF.SizeTy);
- SizeVal = CGF.Builder.CreateNUWSub(UpIntPtr, LowIntPtr);
+ SizeVal = CGF.Builder.CreatePtrDiff(UpAddr, Addr, "", /*IsNUW=*/true);
} else {
SizeVal = CGF.getTypeSize(Ty);
}
diff --git a/clang/test/OpenMP/target_task_affinity_codegen.cpp b/clang/test/OpenMP/target_task_affinity_codegen.cpp
index 7bc1acb245388..4f8d709ece04d 100644
--- a/clang/test/OpenMP/target_task_affinity_codegen.cpp
+++ b/clang/test/OpenMP/target_task_affinity_codegen.cpp
@@ -204,23 +204,23 @@ int main() {
// CHECK1-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
// CHECK1-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 8
// CHECK1-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 8
-// CHECK1-NEXT: [[DOTAFFS_ARR_ADDR:%.*]] = alloca [1 x %struct.kmp_task_affinity_info_t], align 8
+// CHECK1-NEXT: [[DOTAFFS_ARR_ADDR:%.*]] = alloca [1 x [[STRUCT_KMP_TASK_AFFINITY_INFO_T:%.*]]], align 8
// CHECK1-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
// CHECK1-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
// CHECK1-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
// CHECK1-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 0
// CHECK1-NEXT: store ptr [[B_ADDR]], ptr [[TMP1]], align 8
// CHECK1-NEXT: [[TMP2:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 48, i64 8, ptr @.omp_task_entry.)
-// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x %struct.kmp_task_affinity_info_t], ptr [[DOTAFFS_ARR_ADDR]], i64 0, i64 0
+// CHECK1-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x [[STRUCT_KMP_TASK_AFFINITY_INFO_T]]], ptr [[DOTAFFS_ARR_ADDR]], i64 0, i64 0
// CHECK1-NEXT: [[TMP4:%.*]] = load ptr, ptr [[A_ADDR]], align 8
// CHECK1-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP4]], i64 0
// CHECK1-NEXT: [[TMP5:%.*]] = load ptr, ptr [[A_ADDR]], align 8
// CHECK1-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP5]], i64 1023
// CHECK1-NEXT: [[TMP6:%.*]] = getelementptr i32, ptr [[ARRAYIDX1]], i32 1
-// CHECK1-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i64
-// CHECK1-NEXT: [[TMP8:%.*]] = ptrtoint ptr [[TMP6]] to i64
-// CHECK1-NEXT: [[TMP9:%.*]] = sub nuw i64 [[TMP8]], [[TMP7]]
-// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr [[STRUCT_KMP_TASK_AFFINITY_INFO_T:%.*]], ptr [[TMP3]], i64 0
+// CHECK1-NEXT: [[TMP7:%.*]] = ptrtoaddr ptr [[TMP6]] to i64
+// CHECK1-NEXT: [[TMP8:%.*]] = ptrtoaddr ptr [[ARRAYIDX]] to i64
+// CHECK1-NEXT: [[TMP9:%.*]] = sub nuw i64 [[TMP7]], [[TMP8]]
+// CHECK1-NEXT: [[TMP10:%.*]] = getelementptr [[STRUCT_KMP_TASK_AFFINITY_INFO_T]], ptr [[TMP3]], i64 0
// CHECK1-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_AFFINITY_INFO_T]], ptr [[TMP10]], i32 0, i32 0
// CHECK1-NEXT: [[TMP12:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i64
// CHECK1-NEXT: store i64 [[TMP12]], ptr [[TMP11]], align 8
@@ -439,23 +439,23 @@ int main() {
// CHECK3-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
// CHECK3-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 4
// CHECK3-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 4
-// CHECK3-NEXT: [[DOTAFFS_ARR_ADDR:%.*]] = alloca [1 x %struct.kmp_task_affinity_info_t], align 4
+// CHECK3-NEXT: [[DOTAFFS_ARR_ADDR:%.*]] = alloca [1 x [[STRUCT_KMP_TASK_AFFINITY_INFO_T:%.*]]], align 4
// CHECK3-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]])
// CHECK3-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
// CHECK3-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
// CHECK3-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 0
// CHECK3-NEXT: store ptr [[B_ADDR]], ptr [[TMP1]], align 4
// CHECK3-NEXT: [[TMP2:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i32 24, i32 4, ptr @.omp_task_entry.)
-// CHECK3-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x %struct.kmp_task_affinity_info_t], ptr [[DOTAFFS_ARR_ADDR]], i32 0, i32 0
+// CHECK3-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x [[STRUCT_KMP_TASK_AFFINITY_INFO_T]]], ptr [[DOTAFFS_ARR_ADDR]], i32 0, i32 0
// CHECK3-NEXT: [[TMP4:%.*]] = load ptr, ptr [[A_ADDR]], align 4
// CHECK3-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP4]], i32 0
// CHECK3-NEXT: [[TMP5:%.*]] = load ptr, ptr [[A_ADDR]], align 4
// CHECK3-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP5]], i32 1023
// CHECK3-NEXT: [[TMP6:%.*]] = getelementptr i32, ptr [[ARRAYIDX1]], i32 1
-// CHECK3-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i32
-// CHECK3-NEXT: [[TMP8:%.*]] = ptrtoint ptr [[TMP6]] to i32
-// CHECK3-NEXT: [[TMP9:%.*]] = sub nuw i32 [[TMP8]], [[TMP7]]
-// CHECK3-NEXT: [[TMP10:%.*]] = getelementptr [[STRUCT_KMP_TASK_AFFINITY_INFO_T:%.*]], ptr [[TMP3]], i32 0
+// CHECK3-NEXT: [[TMP7:%.*]] = ptrtoaddr ptr [[TMP6]] to i32
+// CHECK3-NEXT: [[TMP8:%.*]] = ptrtoaddr ptr [[ARRAYIDX]] to i32
+// CHECK3-NEXT: [[TMP9:%.*]] = sub nuw i32 [[TMP7]], [[TMP8]]
+// CHECK3-NEXT: [[TMP10:%.*]] = getelementptr [[STRUCT_KMP_TASK_AFFINITY_INFO_T]], ptr [[TMP3]], i32 0
// CHECK3-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_AFFINITY_INFO_T]], ptr [[TMP10]], i32 0, i32 0
// CHECK3-NEXT: [[TMP12:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i32
// CHECK3-NEXT: store i32 [[TMP12]], ptr [[TMP11]], align 4
@@ -628,7 +628,7 @@ int main() {
// CHECK9-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
// CHECK9-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 8
// CHECK9-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 8
-// CHECK9-NEXT: [[DOTAFFS_ARR_ADDR:%.*]] = alloca [1 x %struct.kmp_task_affinity_info_t], align 8
+// CHECK9-NEXT: [[DOTAFFS_ARR_ADDR:%.*]] = alloca [1 x [[STRUCT_KMP_TASK_AFFINITY_INFO_T:%.*]]], align 8
// CHECK9-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
// CHECK9-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 8
// CHECK9-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
@@ -636,16 +636,16 @@ int main() {
// CHECK9-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 0
// CHECK9-NEXT: store ptr [[B_ADDR]], ptr [[TMP1]], align 8
// CHECK9-NEXT: [[TMP2:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i64 48, i64 8, ptr @.omp_task_entry.)
-// CHECK9-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x %struct.kmp_task_affinity_info_t], ptr [[DOTAFFS_ARR_ADDR]], i64 0, i64 0
+// CHECK9-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x [[STRUCT_KMP_TASK_AFFINITY_INFO_T]]], ptr [[DOTAFFS_ARR_ADDR]], i64 0, i64 0
// CHECK9-NEXT: [[TMP4:%.*]] = load ptr, ptr [[A_ADDR]], align 8
// CHECK9-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP4]], i64 0
// CHECK9-NEXT: [[TMP5:%.*]] = load ptr, ptr [[A_ADDR]], align 8
// CHECK9-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP5]], i64 1023
// CHECK9-NEXT: [[TMP6:%.*]] = getelementptr i32, ptr [[ARRAYIDX1]], i32 1
-// CHECK9-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i64
-// CHECK9-NEXT: [[TMP8:%.*]] = ptrtoint ptr [[TMP6]] to i64
-// CHECK9-NEXT: [[TMP9:%.*]] = sub nuw i64 [[TMP8]], [[TMP7]]
-// CHECK9-NEXT: [[TMP10:%.*]] = getelementptr [[STRUCT_KMP_TASK_AFFINITY_INFO_T:%.*]], ptr [[TMP3]], i64 0
+// CHECK9-NEXT: [[TMP7:%.*]] = ptrtoaddr ptr [[TMP6]] to i64
+// CHECK9-NEXT: [[TMP8:%.*]] = ptrtoaddr ptr [[ARRAYIDX]] to i64
+// CHECK9-NEXT: [[TMP9:%.*]] = sub nuw i64 [[TMP7]], [[TMP8]]
+// CHECK9-NEXT: [[TMP10:%.*]] = getelementptr [[STRUCT_KMP_TASK_AFFINITY_INFO_T]], ptr [[TMP3]], i64 0
// CHECK9-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_AFFINITY_INFO_T]], ptr [[TMP10]], i32 0, i32 0
// CHECK9-NEXT: [[TMP12:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i64
// CHECK9-NEXT: store i64 [[TMP12]], ptr [[TMP11]], align 8
@@ -750,7 +750,7 @@ int main() {
// CHECK11-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
// CHECK11-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 4
// CHECK11-NEXT: [[AGG_CAPTURED:%.*]] = alloca [[STRUCT_ANON:%.*]], align 4
-// CHECK11-NEXT: [[DOTAFFS_ARR_ADDR:%.*]] = alloca [1 x %struct.kmp_task_affinity_info_t], align 4
+// CHECK11-NEXT: [[DOTAFFS_ARR_ADDR:%.*]] = alloca [1 x [[STRUCT_KMP_TASK_AFFINITY_INFO_T:%.*]]], align 4
// CHECK11-NEXT: [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1:[0-9]+]])
// CHECK11-NEXT: store ptr [[DYN_PTR]], ptr [[DYN_PTR_ADDR]], align 4
// CHECK11-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
@@ -758,16 +758,16 @@ int main() {
// CHECK11-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw [[STRUCT_ANON]], ptr [[AGG_CAPTURED]], i32 0, i32 0
// CHECK11-NEXT: store ptr [[B_ADDR]], ptr [[TMP1]], align 4
// CHECK11-NEXT: [[TMP2:%.*]] = call ptr @__kmpc_omp_task_alloc(ptr @[[GLOB1]], i32 [[TMP0]], i32 1, i32 24, i32 4, ptr @.omp_task_entry.)
-// CHECK11-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x %struct.kmp_task_affinity_info_t], ptr [[DOTAFFS_ARR_ADDR]], i32 0, i32 0
+// CHECK11-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x [[STRUCT_KMP_TASK_AFFINITY_INFO_T]]], ptr [[DOTAFFS_ARR_ADDR]], i32 0, i32 0
// CHECK11-NEXT: [[TMP4:%.*]] = load ptr, ptr [[A_ADDR]], align 4
// CHECK11-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP4]], i32 0
// CHECK11-NEXT: [[TMP5:%.*]] = load ptr, ptr [[A_ADDR]], align 4
// CHECK11-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP5]], i32 1023
// CHECK11-NEXT: [[TMP6:%.*]] = getelementptr i32, ptr [[ARRAYIDX1]], i32 1
-// CHECK11-NEXT: [[TMP7:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i32
-// CHECK11-NEXT: [[TMP8:%.*]] = ptrtoint ptr [[TMP6]] to i32
-// CHECK11-NEXT: [[TMP9:%.*]] = sub nuw i32 [[TMP8]], [[TMP7]]
-// CHECK11-NEXT: [[TMP10:%.*]] = getelementptr [[STRUCT_KMP_TASK_AFFINITY_INFO_T:%.*]], ptr [[TMP3]], i32 0
+// CHECK11-NEXT: [[TMP7:%.*]] = ptrtoaddr ptr [[TMP6]] to i32
+// CHECK11-NEXT: [[TMP8:%.*]] = ptrtoaddr ptr [[ARRAYIDX]] to i32
+// CHECK11-NEXT: [[TMP9:%.*]] = sub nuw i32 [[TMP7]], [[TMP8]]
+// CHECK11-NEXT: [[TMP10:%.*]] = getelementptr [[STRUCT_KMP_TASK_AFFINITY_INFO_T]], ptr [[TMP3]], i32 0
// CHECK11-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_TASK_AFFINITY_INFO_T]], ptr [[TMP10]], i32 0, i32 0
// CHECK11-NEXT: [[TMP12:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i32
// CHECK11-NEXT: store i32 [[TMP12]], ptr [[TMP11]], align 4
diff --git a/clang/test/OpenMP/task_codegen.cpp b/clang/test/OpenMP/task_codegen.cpp
index f428265aec0e5..6690559764ab7 100644
--- a/clang/test/OpenMP/task_codegen.cpp
+++ b/clang/test/OpenMP/task_codegen.cpp
@@ -367,9 +367,9 @@ void test_transparent()
// CHECK1-NEXT: [[TMP35:%.*]] = mul nsw i64 9, [[TMP2]]
// CHECK1-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP35]]
// CHECK1-NEXT: [[TMP36:%.*]] = getelementptr i32, ptr [[ARRAYIDX2]], i32 1
-// CHECK1-NEXT: [[TMP37:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i64
-// CHECK1-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP36]] to i64
-// CHECK1-NEXT: [[TMP39:%.*]] = sub nuw i64 [[TMP38]], [[TMP37]]
+// CHECK1-NEXT: [[TMP37:%.*]] = ptrtoaddr ptr [[TMP36]] to i64
+// CHECK1-NEXT: [[TMP38:%.*]] = ptrtoaddr ptr [[ARRAYIDX]] to i64
+// CHECK1-NEXT: [[TMP39:%.*]] = sub nuw i64 [[TMP37]], [[TMP38]]
// CHECK1-NEXT: [[TMP40:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i64
// CHECK1-NEXT: [[TMP41:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i64 3
// CHECK1-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP41]], i32 0, i32 0
@@ -408,9 +408,9 @@ void test_transparent()
// CHECK1-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP63]]
// CHECK1-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX9]], i64 [[TMP62]]
// CHECK1-NEXT: [[TMP64:%.*]] = getelementptr i32, ptr [[ARRAYIDX10]], i32 1
-// CHECK1-NEXT: [[TMP65:%.*]] = ptrtoint ptr [[ARRAYIDX8]] to i64
-// CHECK1-NEXT: [[TMP66:%.*]] = ptrtoint ptr [[TMP64]] to i64
-// CHECK1-NEXT: [[TMP67:%.*]] = sub nuw i64 [[TMP66]], [[TMP65]]
+// CHECK1-NEXT: [[TMP65:%.*]] = ptrtoaddr ptr [[TMP64]] to i64
+// CHECK1-NEXT: [[TMP66:%.*]] = ptrtoaddr ptr [[ARRAYIDX8]] to i64
+// CHECK1-NEXT: [[TMP67:%.*]] = sub nuw i64 [[TMP65]], [[TMP66]]
// CHECK1-NEXT: [[TMP68:%.*]] = ptrtoint ptr [[ARRAYIDX8]] to i64
// CHECK1-NEXT: [[TMP69:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP52]], i64 1
// CHECK1-NEXT: [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i32 0, i32 0
@@ -446,9 +446,9 @@ void test_transparent()
// CHECK1-NEXT: [[ARRAYIDX17:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP88]]
// CHECK1-NEXT: [[ARRAYIDX18:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX17]], i64 [[TMP87]]
// CHECK1-NEXT: [[TMP89:%.*]] = getelementptr i32, ptr [[ARRAYIDX18]], i32 1
-// CHECK1-NEXT: [[TMP90:%.*]] = ptrtoint ptr [[ARRAYIDX16]] to i64
-// CHECK1-NEXT: [[TMP91:%.*]] = ptrtoint ptr [[TMP89]] to i64
-// CHECK1-NEXT: [[TMP92:%.*]] = sub nuw i64 [[TMP91]], [[TMP90]]
+// CHECK1-NEXT: [[TMP90:%.*]] = ptrtoaddr ptr [[TMP89]] to i64
+// CHECK1-NEXT: [[TMP91:%.*]] = ptrtoaddr ptr [[ARRAYIDX16]] to i64
+// CHECK1-NEXT: [[TMP92:%.*]] = sub nuw i64 [[TMP90]], [[TMP91]]
// CHECK1-NEXT: [[TMP93:%.*]] = ptrtoint ptr [[ARRAYIDX16]] to i64
// CHECK1-NEXT: [[TMP94:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP77]], i64 1
// CHECK1-NEXT: [[TMP95:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP94]], i32 0, i32 0
@@ -493,9 +493,9 @@ void test_transparent()
// CHECK1-NEXT: [[ARRAYIDX25:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP117]]
// CHECK1-NEXT: [[ARRAYIDX26:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX25]], i64 [[LEN_SUB_1]]
// CHECK1-NEXT: [[TMP118:%.*]] = getelementptr i32, ptr [[ARRAYIDX26]], i32 1
-// CHECK1-NEXT: [[TMP119:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i64
-// CHECK1-NEXT: [[TMP120:%.*]] = ptrtoint ptr [[TMP118]] to i64
-// CHECK1-NEXT: [[TMP121:%.*]] = sub nuw i64 [[TMP120]], [[TMP119]]
+// CHECK1-NEXT: [[TMP119:%.*]] = ptrtoaddr ptr [[TMP118]] to i64
+// CHECK1-NEXT: [[TMP120:%.*]] = ptrtoaddr ptr [[ARRAYIDX24]] to i64
+// CHECK1-NEXT: [[TMP121:%.*]] = sub nuw i64 [[TMP119]], [[TMP120]]
// CHECK1-NEXT: [[TMP122:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i64
// CHECK1-NEXT: [[TMP123:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i64 2
// CHECK1-NEXT: [[TMP124:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP123]], i32 0, i32 0
@@ -1490,9 +1490,9 @@ void test_transparent()
// CHECK1-51-NEXT: [[TMP35:%.*]] = mul nsw i64 9, [[TMP2]]
// CHECK1-51-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP35]]
// CHECK1-51-NEXT: [[TMP36:%.*]] = getelementptr i32, ptr [[ARRAYIDX2]], i32 1
-// CHECK1-51-NEXT: [[TMP37:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i64
-// CHECK1-51-NEXT: [[TMP38:%.*]] = ptrtoint ptr [[TMP36]] to i64
-// CHECK1-51-NEXT: [[TMP39:%.*]] = sub nuw i64 [[TMP38]], [[TMP37]]
+// CHECK1-51-NEXT: [[TMP37:%.*]] = ptrtoaddr ptr [[TMP36]] to i64
+// CHECK1-51-NEXT: [[TMP38:%.*]] = ptrtoaddr ptr [[ARRAYIDX]] to i64
+// CHECK1-51-NEXT: [[TMP39:%.*]] = sub nuw i64 [[TMP37]], [[TMP38]]
// CHECK1-51-NEXT: [[TMP40:%.*]] = ptrtoint ptr [[ARRAYIDX]] to i64
// CHECK1-51-NEXT: [[TMP41:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP19]], i64 3
// CHECK1-51-NEXT: [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP41]], i32 0, i32 0
@@ -1531,9 +1531,9 @@ void test_transparent()
// CHECK1-51-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP63]]
// CHECK1-51-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX9]], i64 [[TMP62]]
// CHECK1-51-NEXT: [[TMP64:%.*]] = getelementptr i32, ptr [[ARRAYIDX10]], i32 1
-// CHECK1-51-NEXT: [[TMP65:%.*]] = ptrtoint ptr [[ARRAYIDX8]] to i64
-// CHECK1-51-NEXT: [[TMP66:%.*]] = ptrtoint ptr [[TMP64]] to i64
-// CHECK1-51-NEXT: [[TMP67:%.*]] = sub nuw i64 [[TMP66]], [[TMP65]]
+// CHECK1-51-NEXT: [[TMP65:%.*]] = ptrtoaddr ptr [[TMP64]] to i64
+// CHECK1-51-NEXT: [[TMP66:%.*]] = ptrtoaddr ptr [[ARRAYIDX8]] to i64
+// CHECK1-51-NEXT: [[TMP67:%.*]] = sub nuw i64 [[TMP65]], [[TMP66]]
// CHECK1-51-NEXT: [[TMP68:%.*]] = ptrtoint ptr [[ARRAYIDX8]] to i64
// CHECK1-51-NEXT: [[TMP69:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP52]], i64 1
// CHECK1-51-NEXT: [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP69]], i32 0, i32 0
@@ -1569,9 +1569,9 @@ void test_transparent()
// CHECK1-51-NEXT: [[ARRAYIDX17:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP88]]
// CHECK1-51-NEXT: [[ARRAYIDX18:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX17]], i64 [[TMP87]]
// CHECK1-51-NEXT: [[TMP89:%.*]] = getelementptr i32, ptr [[ARRAYIDX18]], i32 1
-// CHECK1-51-NEXT: [[TMP90:%.*]] = ptrtoint ptr [[ARRAYIDX16]] to i64
-// CHECK1-51-NEXT: [[TMP91:%.*]] = ptrtoint ptr [[TMP89]] to i64
-// CHECK1-51-NEXT: [[TMP92:%.*]] = sub nuw i64 [[TMP91]], [[TMP90]]
+// CHECK1-51-NEXT: [[TMP90:%.*]] = ptrtoaddr ptr [[TMP89]] to i64
+// CHECK1-51-NEXT: [[TMP91:%.*]] = ptrtoaddr ptr [[ARRAYIDX16]] to i64
+// CHECK1-51-NEXT: [[TMP92:%.*]] = sub nuw i64 [[TMP90]], [[TMP91]]
// CHECK1-51-NEXT: [[TMP93:%.*]] = ptrtoint ptr [[ARRAYIDX16]] to i64
// CHECK1-51-NEXT: [[TMP94:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP77]], i64 1
// CHECK1-51-NEXT: [[TMP95:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP94]], i32 0, i32 0
@@ -1616,9 +1616,9 @@ void test_transparent()
// CHECK1-51-NEXT: [[ARRAYIDX25:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP117]]
// CHECK1-51-NEXT: [[ARRAYIDX26:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX25]], i64 [[LEN_SUB_1]]
// CHECK1-51-NEXT: [[TMP118:%.*]] = getelementptr i32, ptr [[ARRAYIDX26]], i32 1
-// CHECK1-51-NEXT: [[TMP119:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i64
-// CHECK1-51-NEXT: [[TMP120:%.*]] = ptrtoint ptr [[TMP118]] to i64
-// CHECK1-51-NEXT: [[TMP121:%.*]] = sub nuw i64 [[TMP120]], [[TMP119]]
+// CHECK1-51-NEXT: [[TMP119:%.*]] = ptrtoaddr ptr [[TMP118]] to i64
+// CHECK1-51-NEXT: [[TMP120:%.*]] = ptrtoaddr ptr [[ARRAYIDX24]] to i64
+// CHECK1-51-NEXT: [[TMP121:%.*]] = sub nuw i64 [[TMP119]], [[TMP120]]
// CHECK1-51-NEXT: [[TMP122:%.*]] = ptrtoint ptr [[ARRAYIDX24]] to i64
// CHECK1-51-NEXT: [[TMP123:%.*]] = getelementptr [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP102]], i64 2
// CHECK1-51-NEXT: [[TMP124:%.*]] = getelementptr inbounds nuw [[STRUCT_KMP_DEPEND_INFO]], ptr [[TMP123]], i32 0, i32 0
@@ -1661,9 +1661,9 @@ void test_transparent()
// CHECK1-51-NEXT: [[ARRAYIDX35:%.*]] = getelementptr inbounds nuw i32, ptr [[VLA]], i64 [[TMP145]]
// CHECK1-51-NEXT: [[ARRAYIDX36:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAYIDX35]], i64 [[LEN_SUB_133]]
// CHECK1-51-NEXT: [[TMP146:%.*]] = getelementptr i32, ptr [[ARRAYIDX36]], i32 1
-// CHECK1-51-NEXT: [[TMP147:%.*]] = ptrtoint ptr [[ARRAYIDX32]] to i64
-// CHECK1-51-NEXT: [[TMP148:%.*]] = ptrtoint ptr [[TMP146]] to i64
-// CHECK1-51-NEXT: [[TMP149:%.*]] = sub nuw i64 [[TMP148]], [[TMP147]]
+// CHECK1-51-NEXT: [[TMP147:%.*]] ...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/184127
More information about the cfe-commits
mailing list