llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang

@llvm/pr-subscribers-clang-codegen

Author: Nikita Popov (nikic)

<details>
<summary>Changes</summary>

Reapply without change after https://github.com/llvm/llvm-project/pull/221188, 
which should fix the miscompiles this change exposed.

-----

We don't have to expose the provenance of pointers for pointer subtraction, so 
use ptrtoaddr instead of ptrtoint if -fwrapv-pointer is not set.

---

Patch is 376.68 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/221675.diff


17 Files Affected:

- (modified) clang/lib/CodeGen/CGExprScalar.cpp (+15-5) 
- (modified) clang/test/CodeGen/glibc_ptr_align.c (+7-7) 
- (modified) clang/test/CodeGen/ptr-subtract-stable.c (+21-7) 
- (modified) clang/test/CodeGen/vla.c (+2-2) 
- (modified) clang/test/CodeGenCUDA/managed-var.cu (+2-2) 
- (modified) clang/test/CodeGenOpenCL/address-spaces-conversions.cl (+4-4) 
- (modified) clang/test/CodeGenOpenCL/nullptr.cl (+2-2) 
- (modified) clang/test/CodeGenOpenCL/size_t.cl (+25-17) 
- (modified) clang/test/OpenMP/depobj_codegen.cpp (+4-4) 
- (modified) clang/test/OpenMP/for_range_loop_codegen.cpp (+10-10) 
- (modified) clang/test/OpenMP/fuse_codegen.cpp (+82-78) 
- (modified) clang/test/OpenMP/interchange_codegen.cpp (+12-12) 
- (modified) clang/test/OpenMP/parallel_for_codegen.cpp (+1049-1049) 
- (modified) clang/test/OpenMP/reverse_codegen.cpp (+36-36) 
- (modified) clang/test/OpenMP/split_codegen.cpp (+4-4) 
- (modified) clang/test/OpenMP/stripe_codegen.cpp (+124-118) 
- (modified) clang/test/OpenMP/tile_codegen.cpp (+8-8) 


``````````diff
diff --git a/clang/lib/CodeGen/CGExprScalar.cpp 
b/clang/lib/CodeGen/CGExprScalar.cpp
index 8a1dd776118f5..d264f4fb28bd6 100644
--- a/clang/lib/CodeGen/CGExprScalar.cpp
+++ b/clang/lib/CodeGen/CGExprScalar.cpp
@@ -5008,11 +5008,21 @@ Value *ScalarExprEmitter::EmitSub(const BinOpInfo &op) {
 
   // Otherwise, this is a pointer subtraction.
 
-  // Do the raw subtraction part.
-  llvm::Value *LHS =
-      Builder.CreatePtrToInt(op.LHS, CGF.PtrDiffTy, "sub.ptr.lhs.cast");
-  llvm::Value *RHS =
-      Builder.CreatePtrToInt(op.RHS, CGF.PtrDiffTy, "sub.ptr.rhs.cast");
+  // Do the raw subtraction part. When pointer overflow is defined, use 
ptrtoint
+  // as the pointer difference can be used to obtain the pointer without basing
+  // it on one of the pointers (e.g. via -(nullptr - ptr)).
+  Value *LHS, *RHS;
+  if (CGF.getLangOpts().PointerOverflowDefined) {
+    LHS = Builder.CreatePtrToInt(op.LHS, CGF.PtrDiffTy, "sub.ptr.lhs.cast");
+    RHS = Builder.CreatePtrToInt(op.RHS, CGF.PtrDiffTy, "sub.ptr.rhs.cast");
+  } else {
+    LHS = Builder.CreatePtrToAddr(op.LHS, "sub.ptr.lhs.cast");
+    RHS = Builder.CreatePtrToAddr(op.RHS, "sub.ptr.rhs.cast");
+    if (LHS->getType() != CGF.PtrDiffTy)
+      LHS = Builder.CreateZExtOrTrunc(LHS, CGF.PtrDiffTy, "sub.ptr.lhs.ext");
+    if (RHS->getType() != CGF.PtrDiffTy)
+      RHS = Builder.CreateZExtOrTrunc(RHS, CGF.PtrDiffTy, "sub.ptr.lhs.ext");
+  }
   Value *diffInChars = Builder.CreateSub(LHS, RHS, "sub.ptr.sub");
 
   // Okay, figure out the element size.
diff --git a/clang/test/CodeGen/glibc_ptr_align.c 
b/clang/test/CodeGen/glibc_ptr_align.c
index e5296afc4519b..05b10f610376a 100644
--- a/clang/test/CodeGen/glibc_ptr_align.c
+++ b/clang/test/CodeGen/glibc_ptr_align.c
@@ -4,9 +4,9 @@
 // Make sure that we do not set inbounds flag if the base pointer may be a 
constant null.
 
 // CHECK-LABEL: define dso_local ptr @glibc_ptr_align(
-// CHECK-SAME: ptr nofree noundef readnone captures(none) [[BASE:%.*]], ptr 
noundef [[POINTER:%.*]], i64 noundef [[ALIGN_MASK:%.*]]) local_unnamed_addr 
#[[ATTR0:[0-9]+]] {
+// CHECK-SAME: ptr nofree noundef readnone captures(none) [[BASE:%.*]], ptr 
nofree noundef readnone captures(address) [[POINTER:%.*]], i64 noundef 
[[ALIGN_MASK:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
-// CHECK-NEXT:    [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[POINTER]] to i64
+// CHECK-NEXT:    [[SUB_PTR_LHS_CAST:%.*]] = ptrtoaddr ptr [[POINTER]] to i64
 // CHECK-NEXT:    [[ADD:%.*]] = add nsw i64 [[ALIGN_MASK]], 
[[SUB_PTR_LHS_CAST]]
 // CHECK-NEXT:    [[NOT:%.*]] = xor i64 [[ALIGN_MASK]], -1
 // CHECK-NEXT:    [[AND:%.*]] = and i64 [[ADD]], [[NOT]]
@@ -22,9 +22,9 @@ char *glibc_ptr_align(char *base, char *pointer, long 
align_mask) {
 }
 
 // CHECK-LABEL: define dso_local ptr @glibc_ptr_align_commuted(
-// CHECK-SAME: ptr nofree noundef readnone captures(none) [[BASE:%.*]], ptr 
noundef [[POINTER:%.*]], i64 noundef [[ALIGN_MASK:%.*]]) local_unnamed_addr 
#[[ATTR0]] {
+// CHECK-SAME: ptr nofree noundef readnone captures(none) [[BASE:%.*]], ptr 
nofree noundef readnone captures(address) [[POINTER:%.*]], i64 noundef 
[[ALIGN_MASK:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
-// CHECK-NEXT:    [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[POINTER]] to i64
+// CHECK-NEXT:    [[SUB_PTR_LHS_CAST:%.*]] = ptrtoaddr ptr [[POINTER]] to i64
 // CHECK-NEXT:    [[ADD:%.*]] = add nsw i64 [[ALIGN_MASK]], 
[[SUB_PTR_LHS_CAST]]
 // CHECK-NEXT:    [[NOT:%.*]] = xor i64 [[ALIGN_MASK]], -1
 // CHECK-NEXT:    [[AND:%.*]] = and i64 [[ADD]], [[NOT]]
@@ -40,12 +40,12 @@ char *glibc_ptr_align_commuted(char *base, char *pointer, 
long align_mask) {
 }
 
 // CHECK-LABEL: define dso_local ptr @glibc_ptr_align_non_constexpr(
-// CHECK-SAME: ptr noundef [[BASE:%.*]], ptr noundef [[POINTER:%.*]], i64 
noundef [[ALIGN_MASK:%.*]], i32 noundef [[COND:%.*]]) local_unnamed_addr 
#[[ATTR0]] {
+// CHECK-SAME: ptr nofree noundef readnone captures(address, ret: address, 
provenance) [[BASE:%.*]], ptr nofree noundef readnone captures(address) 
[[POINTER:%.*]], i64 noundef [[ALIGN_MASK:%.*]], i32 noundef [[COND:%.*]]) 
local_unnamed_addr #[[ATTR0]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
 // CHECK-NEXT:    [[TOBOOL_NOT:%.*]] = icmp eq i32 [[COND]], 0
 // CHECK-NEXT:    [[COND1:%.*]] = select i1 [[TOBOOL_NOT]], ptr null, ptr 
[[BASE]]
-// CHECK-NEXT:    [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[POINTER]] to i64
-// CHECK-NEXT:    [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[COND1]] to i64
+// CHECK-NEXT:    [[SUB_PTR_LHS_CAST:%.*]] = ptrtoaddr ptr [[POINTER]] to i64
+// CHECK-NEXT:    [[SUB_PTR_RHS_CAST:%.*]] = ptrtoaddr ptr [[COND1]] to i64
 // CHECK-NEXT:    [[SUB_PTR_SUB:%.*]] = add i64 [[ALIGN_MASK]], 
[[SUB_PTR_LHS_CAST]]
 // CHECK-NEXT:    [[ADD:%.*]] = sub i64 [[SUB_PTR_SUB]], [[SUB_PTR_RHS_CAST]]
 // CHECK-NEXT:    [[NOT:%.*]] = xor i64 [[ALIGN_MASK]], -1
diff --git a/clang/test/CodeGen/ptr-subtract-stable.c 
b/clang/test/CodeGen/ptr-subtract-stable.c
index 0782b987c7fec..f3579e9b61d37 100644
--- a/clang/test/CodeGen/ptr-subtract-stable.c
+++ b/clang/test/CodeGen/ptr-subtract-stable.c
@@ -1,13 +1,27 @@
-// RUN: %clang -S -emit-llvm -O2 --target=x86_64-windows-msvc 
-fdefined-pointer-subtraction -fno-discard-value-names -fms-extensions %s -o - 
| FileCheck %s
+// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py 
UTC_ARGS: --version 6
+// RUN: %clang -S -emit-llvm -O2 --target=x86_64-windows-msvc 
-fdefined-pointer-subtraction -fno-discard-value-names -fms-extensions %s -o - 
| FileCheck %s --check-prefix=DPS
+// RUN: %clang -S -emit-llvm -O2 --target=x86_64-windows-msvc -fwrapv-pointer 
-fno-discard-value-names -fms-extensions %s -o - | FileCheck %s 
--check-prefix=WRAPV
 
 // Check that pointer subtraction isn't nuw/nsv and sdiv isn't exact
-// CHECK:       i64 @sub(ptr noundef %[[P:.*]], ptr noundef %[[Q:.*]])
-// CHECK-NEXT:  entry:
-// CHECK-NEXT:    %[[PI:.*]] = ptrtoint ptr %[[P]] to i64
-// CHECK-NEXT:    %[[QI:.*]] = ptrtoint ptr %[[Q]] to i64
-// CHECK-NEXT:    %[[SB:.*]] = sub i64 %[[PI]], %[[QI]]
-// CHECK-NEXT:    {{.*}}     = sdiv i64 %[[SB]], 4
 
+// DPS-LABEL: define dso_local noundef range(i64 -2305843009213693952, 
2305843009213693952) i64 @sub(
+// DPS-SAME: ptr nofree noundef readnone captures(address) [[P:%.*]], ptr 
nofree noundef readnone captures(address) [[Q:%.*]]) local_unnamed_addr 
#[[ATTR0:[0-9]+]] {
+// DPS-NEXT:  [[ENTRY:.*:]]
+// DPS-NEXT:    [[SUB_PTR_LHS_CAST:%.*]] = ptrtoaddr ptr [[P]] to i64
+// DPS-NEXT:    [[SUB_PTR_RHS_CAST:%.*]] = ptrtoaddr ptr [[Q]] to i64
+// DPS-NEXT:    [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], 
[[SUB_PTR_RHS_CAST]]
+// DPS-NEXT:    [[SUB_PTR_DIV:%.*]] = sdiv i64 [[SUB_PTR_SUB]], 4
+// DPS-NEXT:    ret i64 [[SUB_PTR_DIV]]
+//
+// WRAPV-LABEL: define dso_local range(i64 -2305843009213693952, 
2305843009213693952) i64 @sub(
+// WRAPV-SAME: ptr noundef [[P:%.*]], ptr noundef [[Q:%.*]]) 
local_unnamed_addr #[[ATTR0:[0-9]+]] {
+// WRAPV-NEXT:  [[ENTRY:.*:]]
+// WRAPV-NEXT:    [[SUB_PTR_LHS_CAST:%.*]] = ptrtoint ptr [[P]] to i64
+// WRAPV-NEXT:    [[SUB_PTR_RHS_CAST:%.*]] = ptrtoint ptr [[Q]] to i64
+// WRAPV-NEXT:    [[SUB_PTR_SUB:%.*]] = sub i64 [[SUB_PTR_LHS_CAST]], 
[[SUB_PTR_RHS_CAST]]
+// WRAPV-NEXT:    [[SUB_PTR_DIV:%.*]] = ashr exact i64 [[SUB_PTR_SUB]], 2
+// WRAPV-NEXT:    ret i64 [[SUB_PTR_DIV]]
+//
 __declspec(noinline) long long sub(long* p, long* q) {
   return p - q;
 }
diff --git a/clang/test/CodeGen/vla.c b/clang/test/CodeGen/vla.c
index 18aa744b5f6fe..8ce3da86f43d7 100644
--- a/clang/test/CodeGen/vla.c
+++ b/clang/test/CodeGen/vla.c
@@ -132,8 +132,8 @@ int test4(unsigned n, char (*p)[n][n+1][6]) {
 
   // CHECK-NEXT: [[T0:%.*]] = load ptr, ptr [[P2]], align 4
   // CHECK-NEXT: [[T1:%.*]] = load ptr, ptr [[P]], align 4
-  // CHECK-NEXT: [[T2:%.*]] = ptrtoint ptr [[T0]] to i32
-  // CHECK-NEXT: [[T3:%.*]] = ptrtoint ptr [[T1]] to i32
+  // CHECK-NEXT: [[T2:%.*]] = ptrtoaddr ptr [[T0]] to i32
+  // CHECK-NEXT: [[T3:%.*]] = ptrtoaddr ptr [[T1]] to i32
   // CHECK-NEXT: [[T4:%.*]] = sub i32 [[T2]], [[T3]]
   // CHECK-NEXT: [[T5:%.*]] = mul nuw i32 [[DIM0]], [[DIM1]]
   // CHECK-NEXT: [[T6:%.*]] = mul nuw i32 6, [[T5]]
diff --git a/clang/test/CodeGenCUDA/managed-var.cu 
b/clang/test/CodeGenCUDA/managed-var.cu
index b7af154f58862..e9eb46e0ae9bf 100644
--- a/clang/test/CodeGenCUDA/managed-var.cu
+++ b/clang/test/CodeGenCUDA/managed-var.cu
@@ -140,10 +140,10 @@ float load3() {
 // HOST-LABEL: define {{.*}}@_Z11addr_taken2v()
 // HOST:  %ld.managed = load ptr, ptr @v, align 16
 // HOST:  %0 = getelementptr inbounds nuw i8, ptr %ld.managed, i64 12
-// HOST:  %1 = ptrtoint ptr %0 to i64
+// HOST:  %1 = ptrtoaddr ptr %0 to i64
 // HOST:  %ld.managed1 = load ptr, ptr @v2, align 16
 // HOST:  %2 = getelementptr inbounds nuw i8, ptr %ld.managed1, i64 16
-// HOST:  %3 = ptrtoint ptr %2 to i64
+// HOST:  %3 = ptrtoaddr ptr %2 to i64
 // HOST:  %4 = sub i64 %3, %1
 // HOST:  %sub.ptr.div = sdiv exact i64 %4, 4
 // HOST:  %conv = sitofp contract i64 %sub.ptr.div to float
diff --git a/clang/test/CodeGenOpenCL/address-spaces-conversions.cl 
b/clang/test/CodeGenOpenCL/address-spaces-conversions.cl
index af0c40e1417b2..15ad3b8ba48ea 100644
--- a/clang/test/CodeGenOpenCL/address-spaces-conversions.cl
+++ b/clang/test/CodeGenOpenCL/address-spaces-conversions.cl
@@ -30,10 +30,10 @@ void test(global int *arg_glob, generic int *arg_gen,
   // CHECK-NOFAKE-NOT: addrspacecast
 
   var_priv = arg_gen - arg_glob; // arithmetic operation
-  // CHECK: %{{.*}} = ptrtoint ptr addrspace(4) %{{.*}} to i64
-  // CHECK: %{{.*}} = ptrtoint ptr addrspace(1) %{{.*}} to i64
-  // CHECK-NOFAKE: %{{.*}} = ptrtoint ptr %{{.*}} to i64
-  // CHECK-NOFAKE: %{{.*}} = ptrtoint ptr %{{.*}} to i64
+  // CHECK: %{{.*}} = ptrtoaddr ptr addrspace(4) %{{.*}} to i64
+  // CHECK: %{{.*}} = ptrtoaddr ptr addrspace(1) %{{.*}} to i64
+  // CHECK-NOFAKE: %{{.*}} = ptrtoaddr ptr %{{.*}} to i64
+  // CHECK-NOFAKE: %{{.*}} = ptrtoaddr ptr %{{.*}} to i64
 
   var_priv = arg_gen > arg_glob; // comparison
   // CHECK: %{{[0-9]+}} = addrspacecast ptr addrspace(1) %{{[0-9]+}} to ptr 
addrspace(4)
diff --git a/clang/test/CodeGenOpenCL/nullptr.cl 
b/clang/test/CodeGenOpenCL/nullptr.cl
index 9fb2e9eb2b725..dc9450f858ae0 100644
--- a/clang/test/CodeGenOpenCL/nullptr.cl
+++ b/clang/test/CodeGenOpenCL/nullptr.cl
@@ -700,7 +700,7 @@ int test_and_ptr(private char* p1, local char* p2) {
 // CHECK-NOOPT-LABEL: test_fold_private
 // SPIR64-NOOPT:  call{{.*}} void @test_fold_callee
 // SPIR64-NOOPT:  store ptr addrspace(1) addrspacecast (ptr addrspace(4) null 
to ptr addrspace(1)), ptr %glob{{.*}}, align 8
-// SPIR64-NOOPT:  %{{.*}} = sub i64 %{{.*}}, ptrtoint (ptr addrspace(1) 
addrspacecast (ptr addrspace(4) null to ptr addrspace(1)) to i64)
+// SPIR64-NOOPT:  %{{.*}} = sub i64 %{{.*}}, ptrtoaddr (ptr addrspace(1) 
addrspacecast (ptr addrspace(4) null to ptr addrspace(1)) to i64)
 // AMDGCN-NOOPT: store ptr addrspace(1) null, ptr addrspace(5) %glob{{.*}}, 
align 8
 // AMDGCN-NOOPT: %{{.*}} = sub i64 %{{.*}}, 0
 // SPIR64-NOOPT:  call{{.*}} void @test_fold_callee
@@ -719,7 +719,7 @@ void test_fold_private(void) {
 // CHECK-NOOPT-LABEL: test_fold_local
 // CHECK-NOOPT:  call{{.*}} void @test_fold_callee
 // SPIR64-NOOPT: store ptr addrspace(1) addrspacecast (ptr addrspace(4) null 
to ptr addrspace(1)), ptr %glob{{.*}}, align 8
-// SPIR64-NOOPT: %{{.*}} = sub i64 %{{.*}}, ptrtoint (ptr addrspace(1) 
addrspacecast (ptr addrspace(4) null to ptr addrspace(1)) to i64)
+// SPIR64-NOOPT: %{{.*}} = sub i64 %{{.*}}, ptrtoaddr (ptr addrspace(1) 
addrspacecast (ptr addrspace(4) null to ptr addrspace(1)) to i64)
 // AMDGCN-NOOPT: store ptr addrspace(1) null, ptr addrspace(5) %glob{{.*}}, 
align 8
 // AMDGCN-NOOPT: %{{.*}} = sub i64 %{{.*}}, 0
 // CHECK-NOOPT:  call{{.*}} void @test_fold_callee
diff --git a/clang/test/CodeGenOpenCL/size_t.cl 
b/clang/test/CodeGenOpenCL/size_t.cl
index 93a3d3d21ff63..c6fee33ac6298 100644
--- a/clang/test/CodeGenOpenCL/size_t.cl
+++ b/clang/test/CodeGenOpenCL/size_t.cl
@@ -87,37 +87,45 @@ global char* test_add_global(global char* x, ptrdiff_t y) {
 }
 
 //SZ32: define{{.*}} i32 @test_sub_local(ptr addrspace(3) noundef %x, ptr 
addrspace(3) noundef %y)
-//SZ32: ptrtoint ptr addrspace(3) %{{.*}} to i32
-//SZ32: ptrtoint ptr addrspace(3) %{{.*}} to i32
-//SZ64: define{{.*}} i64 @test_sub_local(ptr addrspace(3) noundef %x, ptr 
addrspace(3) noundef %y)
-//SZ64: ptrtoint ptr addrspace(3) %{{.*}} to i64
-//SZ64: ptrtoint ptr addrspace(3) %{{.*}} to i64
+//SZ32: ptrtoaddr ptr addrspace(3) %{{.*}} to i32
+//SZ32: ptrtoaddr ptr addrspace(3) %{{.*}} to i32
+//SZ64ONLY: define{{.*}} i64 @test_sub_local(ptr addrspace(3) noundef %x, ptr 
addrspace(3) noundef %y)
+//SZ64ONLY: ptrtoaddr ptr addrspace(3) %{{.*}} to i64
+//SZ64ONLY: ptrtoaddr ptr addrspace(3) %{{.*}} to i64
+//AMDGCN: define{{.*}} i64 @test_sub_local(ptr addrspace(3) noundef %x, ptr 
addrspace(3) noundef %y)
+//AMDGCN: ptrtoaddr ptr addrspace(3) %{{.*}} to i32
+//AMDGCN: ptrtoaddr ptr addrspace(3) %{{.*}} to i32
+//AMDGCN: zext i32 %{{.*}} to i64
+//AMDGCN: zext i32 %{{.*}} to i64
 ptrdiff_t test_sub_local(local char* x, local char *y) {
   return x - y;
 }
 
 //SZ32: define{{.*}} i32 @test_sub_private(ptr noundef %x, ptr noundef %y)
-//SZ32: ptrtoint ptr %{{.*}} to i32
-//SZ32: ptrtoint ptr %{{.*}} to i32
+//SZ32: ptrtoaddr ptr %{{.*}} to i32
+//SZ32: ptrtoaddr ptr %{{.*}} to i32
 //SZ64ONLY: define{{.*}} i64 @test_sub_private(ptr noundef %x, ptr noundef %y)
-//SZ64ONLY: ptrtoint ptr %{{.*}} to i64
-//SZ64ONLY: ptrtoint ptr %{{.*}} to i64
+//SZ64ONLY: ptrtoaddr ptr %{{.*}} to i64
+//SZ64ONLY: ptrtoaddr ptr %{{.*}} to i64
 //AMDGCN: define{{.*}} i64 @test_sub_private(ptr addrspace(5) noundef %x, ptr 
addrspace(5) noundef %y)
-//AMDGCN: ptrtoint ptr addrspace(5) %{{.*}} to i64
-//AMDGCN: ptrtoint ptr addrspace(5) %{{.*}} to i64
+//AMDGCN: ptrtoaddr ptr addrspace(5) %{{.*}} to i32
+//AMDGCN: ptrtoaddr ptr addrspace(5) %{{.*}} to i32
+//AMDGCN: zext i32 %{{.*}} to i64
+//AMDGCN: zext i32 %{{.*}} to i64
 ptrdiff_t test_sub_private(private char* x, private char *y) {
   return x - y;
 }
 
 //SZ32: define{{.*}} i32 @test_sub_mix(ptr noundef %x, ptr addrspace(4) 
noundef %y)
-//SZ32: ptrtoint ptr %{{.*}} to i32
-//SZ32: ptrtoint ptr addrspace(4) %{{.*}} to i32
+//SZ32: ptrtoaddr ptr %{{.*}} to i32
+//SZ32: ptrtoaddr ptr addrspace(4) %{{.*}} to i32
 //SZ64ONLY: define{{.*}} i64 @test_sub_mix(ptr noundef %x, ptr addrspace(4) 
noundef %y)
-//SZ64ONLY: ptrtoint ptr %{{.*}} to i64
-//SZ64ONLY: ptrtoint ptr addrspace(4) %{{.*}} to i64
+//SZ64ONLY: ptrtoaddr ptr %{{.*}} to i64
+//SZ64ONLY: ptrtoaddr ptr addrspace(4) %{{.*}} to i64
 //AMDGCN: define{{.*}} i64 @test_sub_mix(ptr addrspace(5) noundef %x, ptr 
noundef %y)
-//AMDGCN: ptrtoint ptr addrspace(5) %{{.*}} to i64
-//AMDGCN: ptrtoint ptr %{{.*}} to i64
+//AMDGCN: ptrtoaddr ptr addrspace(5) %{{.*}} to i32
+//AMDGCN: ptrtoaddr ptr %{{.*}} to i64
+//AMDGCN: zext i32 %{{.*}} to i64
 ptrdiff_t test_sub_mix(private char* x, generic char *y) {
   return x - y;
 }
diff --git a/clang/test/OpenMP/depobj_codegen.cpp 
b/clang/test/OpenMP/depobj_codegen.cpp
index b3bcd76e237dc..35eb1497d95d4 100644
--- a/clang/test/OpenMP/depobj_codegen.cpp
+++ b/clang/test/OpenMP/depobj_codegen.cpp
@@ -115,8 +115,8 @@ int main(int argc, char **argv) {
 // CHECK: [[ARGV:%.+]] = load ptr, ptr [[ARGV_ADDR]], align 8
 // CHECK: [[END_ADDR:%.+]] = getelementptr inbounds ptr, ptr [[ARGV]], i64 0
 // CHECK: [[END:%.+]] = load ptr, ptr [[END_ADDR]], align 8
-// CHECK: [[BEGIN_INT:%.+]] = ptrtoint ptr [[BEGIN]] to i64
-// CHECK: [[END_INT:%.+]] = ptrtoint ptr [[END]] to i64
+// CHECK: [[BEGIN_INT:%.+]] = ptrtoaddr ptr [[BEGIN]] to i64
+// CHECK: [[END_INT:%.+]] = ptrtoaddr ptr [[END]] to i64
 // CHECK: [[BE_SUB:%.+]] = sub i64 [[BEGIN_INT]], [[END_INT]]
 // CHECK: [[BE_SUB_ST_SUB:%.+]] = add nsw i64 [[BE_SUB]], 1
 // CHECK: [[BE_SUB_ST_SUB_1_SUB:%.+]] = sub nsw i64 [[BE_SUB_ST_SUB]], 1
@@ -148,8 +148,8 @@ int main(int argc, char **argv) {
 // CHECK: [[ARGV:%.+]] = load ptr, ptr [[ARGV_ADDR]], align 8
 // CHECK: [[END_ADDR:%.+]] = getelementptr inbounds ptr, ptr [[ARGV]], i64 0
 // CHECK: [[END:%.+]] = load ptr, ptr [[END_ADDR]], align 8
-// CHECK: [[BEGIN_INT:%.+]] = ptrtoint ptr [[BEGIN]] to i64
-// CHECK: [[END_INT:%.+]] = ptrtoint ptr [[END]] to i64
+// CHECK: [[BEGIN_INT:%.+]] = ptrtoaddr ptr [[BEGIN]] to i64
+// CHECK: [[END_INT:%.+]] = ptrtoaddr ptr [[END]] to i64
 // CHECK: [[BE_SUB:%.+]] = sub i64 [[BEGIN_INT]], [[END_INT]]
 // CHECK: [[BE_SUB_ST_SUB:%.+]] = add nsw i64 [[BE_SUB]], 1
 // CHECK: [[BE_SUB_ST_SUB_1_SUB:%.+]] = sub nsw i64 [[BE_SUB_ST_SUB]], 1
diff --git a/clang/test/OpenMP/for_range_loop_codegen.cpp 
b/clang/test/OpenMP/for_range_loop_codegen.cpp
index ca094fc664a5f..06f700d8330a8 100644
--- a/clang/test/OpenMP/for_range_loop_codegen.cpp
+++ b/clang/test/OpenMP/for_range_loop_codegen.cpp
@@ -49,7 +49,7 @@ template void foo<int>();
 // CHECK-NEXT:    [[R_ADDR:%.*]] = alloca ptr, align 8
 // CHECK-NEXT:    store ptr [[R]], ptr [[R_ADDR]], align 8
 // CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_ITER]], 
ptr [[RETVAL]], i32 0, i32 0
-// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[R_ADDR]], align 8, !nonnull 
[[META3:![0-9]+]], !align [[META4:![0-9]+]]
+// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[R_ADDR]], align 8, !nonnull 
[[META2:![0-9]+]], !align [[META3:![0-9]+]]
 // CHECK-NEXT:    [[DATA:%.*]] = getelementptr inbounds nuw 
[[STRUCT_RANGE:%.*]], ptr [[TMP0]], i32 0, i32 0
 // CHECK-NEXT:    [[ARRAYDECAY:%.*]] = getelementptr inbounds [4 x i32], ptr 
[[DATA]], i64 0, i64 0
 // CHECK-NEXT:    store ptr [[ARRAYDECAY]], ptr [[PTR]], align 8
@@ -65,7 +65,7 @@ template void foo<int>();
 // CHECK-NEXT:    [[R_ADDR:%.*]] = alloca ptr, align 8
 // CHECK-NEXT:    store ptr [[R]], ptr [[R_ADDR]], align 8
 // CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds nuw [[STRUCT_ITER]], 
ptr [[RETVAL]], i32 0, i32 0
-// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[R_ADDR]], align 8, !nonnull 
[[META3]], !align [[META4]]
+// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[R_ADDR]], align 8, !nonnull 
[[META2]], !align [[META3]]
 // CHECK-NEXT:    [[DATA:%.*]] = getelementptr inbounds nuw 
[[STRUCT_RANGE:%.*]], ptr [[TMP0]], i32 0, i32 0
 // CHECK-NEXT:    [[ARRAYDECAY:%.*]] = getelementptr inbounds [4 x i32], ptr 
[[DATA]], i64 0, i64 0
 // CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr 
[[ARRAYDECAY]], i64 4
@@ -110,20 +110,20 @@ template void foo<int>();
 // CHECK-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
 // CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds nuw 
[[CLASS_ANON:%.*]], ptr [[THIS1]], i32 0, i32 0
 // CHECK-NEXT:    store ptr [[TMP1]], ptr [[__RANGE3]], align 8
-// CHECK-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[__RANGE3]], align 8, !nonnull 
[[META3]], !align [[META4]]
+// CHECK-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[__RANGE3]], align 8, !nonnull 
[[META2]], !align [[META3]]
 // CHECK-NEXT:    [[CALL:%.*]] = call ptr @_Z5beginRK5Range(ptr noundef 
nonnull align 4 dereferenceable(16) [[TMP2]])
 // CHECK-NEXT:    [[COERCE_DIVE:%.*]] = getelementptr inbounds nuw 
[[STRUCT_ITER]], ptr [[__BEGIN3]], i32 0, i32 0
 // CHECK-NEXT:    store ptr [[CALL]], ptr [[COERCE_DIVE]], align 8
-// CHECK-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[__RANGE3]], align 8, !nonnull 
[[META3]], !align [[META4]]
+// CHECK-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[__RANGE3]], align 8, !nonnull 
[[META2]], !align [[META3]]
 // CHECK-NEXT:    [[CALL2:%.*]] = call ptr @_Z3endRK5Range(ptr noundef nonnull 
align 4 dereferenceable(16) [[TMP3]])
 // CHECK-NEXT:    [[COERCE_DIVE3:%.*]] = getelementptr inbounds nuw 
[[STRUCT_ITER]], ptr [[__END3]], i32 0, i32 0
 // CHECK-NEXT:    store ptr [[CALL2]], ptr [[COERCE_DIVE3]], align 8
-// CHECK-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[__RANGE3]], align 8, !nonnull 
[[META3]], !align [[META4]]
+// CHECK-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[__RANGE3]], align 8, !nonnull 
[[META2]], !align [[META3]]
 // CHECK-NEXT:    [[CALL4:%.*]] = call ptr @_Z5beginRK5Range(ptr noundef 
nonnull align 4 dereferenceable(16) [[TMP4]])
 // CHECK-NEXT:    [[COERCE_DIVE5:%.*]] = getelementptr inbounds nuw 
[[STRUCT_ITER]], ptr [[DOTCAPTURE_EXPR_]], i32 0, i32 0
 // CHECK-NEXT:    store ptr [[CALL4]], ptr [[COERCE_DIVE5]], align 8
 // CHECK-NEXT:    store ptr [[__END3]], ptr [[DOTCAPTURE_EXPR_6]], align 8
-// CHECK-NEXT:    [[TMP5:%.*]] = load ptr, ptr...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/221675
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to