[clang] 26572ba - clang/OpenCL: Add baseline test showing broken codegen (#138862)
via cfe-commits
cfe-commits at lists.llvm.org
Wed May 7 22:46:07 PDT 2025
Author: Matt Arsenault
Date: 2025-05-08T07:46:04+02:00
New Revision: 26572bad95f816a979ce70b4e1335c8438a96df2
URL: https://github.com/llvm/llvm-project/commit/26572bad95f816a979ce70b4e1335c8438a96df2
DIFF: https://github.com/llvm/llvm-project/commit/26572bad95f816a979ce70b4e1335c8438a96df2.diff
LOG: clang/OpenCL: Add baseline test showing broken codegen (#138862)
Added:
Modified:
clang/test/CodeGenCXX/amdgcn-automatic-variable.cpp
clang/test/CodeGenOpenCL/amdgcn-automatic-variable.cl
Removed:
################################################################################
diff --git a/clang/test/CodeGenCXX/amdgcn-automatic-variable.cpp b/clang/test/CodeGenCXX/amdgcn-automatic-variable.cpp
index c1f9310141000..3c2a624bd4f95 100644
--- a/clang/test/CodeGenCXX/amdgcn-automatic-variable.cpp
+++ b/clang/test/CodeGenCXX/amdgcn-automatic-variable.cpp
@@ -133,3 +133,27 @@ void func7() {
use(&x);
}
+#define __private __attribute__((opencl_private))
+
+// CHECK-LABEL: @_Z34explicit_private_address_space_ptrv(
+// CHECK-NEXT: entry:
+// CHECK-NEXT: [[VAR:%.*]] = alloca i64, align 8, addrspace(5)
+// CHECK-NEXT: [[ALLOCA_ADDR:%.*]] = alloca ptr, align 8, addrspace(5)
+// CHECK-NEXT: [[ALLOCA_ADDR_AS_PRIVATE:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)
+// CHECK-NEXT: [[VAR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[VAR]] to ptr
+// CHECK-NEXT: [[ALLOCA_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[ALLOCA_ADDR]] to ptr
+// CHECK-NEXT: [[ALLOCA_ADDR_AS_PRIVATE_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[ALLOCA_ADDR_AS_PRIVATE]] to ptr
+// CHECK-NEXT: store ptr [[VAR_ASCAST]], ptr [[ALLOCA_ADDR_ASCAST]], align 8
+// CHECK-NEXT: [[VAR_ASCAST_ASCAST:%.*]] = addrspacecast ptr [[VAR_ASCAST]] to ptr addrspace(5)
+// CHECK-NEXT: store ptr addrspace(5) [[VAR_ASCAST_ASCAST]], ptr [[ALLOCA_ADDR_AS_PRIVATE_ASCAST]], align 4
+// CHECK-NEXT: [[TMP0:%.*]] = load ptr addrspace(5), ptr [[ALLOCA_ADDR_AS_PRIVATE_ASCAST]], align 4
+// CHECK-NEXT: store i64 8, ptr addrspace(5) [[TMP0]], align 8
+// CHECK-NEXT: ret void
+//
+void explicit_private_address_space_ptr() {
+ long var;
+ long *alloca_addr = &var;
+
+ __private long *alloca_addr_as_private = (__private long *)&var;
+ *alloca_addr_as_private = 8;
+}
diff --git a/clang/test/CodeGenOpenCL/amdgcn-automatic-variable.cl b/clang/test/CodeGenOpenCL/amdgcn-automatic-variable.cl
index dba6519966eb5..e28120adc0364 100644
--- a/clang/test/CodeGenOpenCL/amdgcn-automatic-variable.cl
+++ b/clang/test/CodeGenOpenCL/amdgcn-automatic-variable.cl
@@ -109,3 +109,69 @@ void func2(void) {
void func3(void) {
float a[16][1] = {{0.}};
}
+
+// CL12-LABEL: define dso_local void @wrong_store_type_private_pointer_alloca(
+// CL12-SAME: ) #[[ATTR0]] {
+// CL12-NEXT: [[ENTRY:.*:]]
+// CL12-NEXT: [[VAR:%.*]] = alloca i64, align 8, addrspace(5)
+// CL12-NEXT: [[ALLOCA_ADDR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)
+// CL12-NEXT: store i64 5, ptr addrspace(5) [[VAR]], align 8
+// CL12-NEXT: store ptr addrspace(5) [[VAR]], ptr addrspace(5) [[ALLOCA_ADDR]], align 4
+// CL12-NEXT: [[TMP0:%.*]] = load ptr addrspace(5), ptr addrspace(5) [[ALLOCA_ADDR]], align 4
+// CL12-NEXT: store i64 8, ptr addrspace(5) [[TMP0]], align 8
+// CL12-NEXT: ret void
+//
+// CL20-LABEL: define dso_local void @wrong_store_type_private_pointer_alloca(
+// CL20-SAME: ) #[[ATTR0]] {
+// CL20-NEXT: [[ENTRY:.*:]]
+// CL20-NEXT: [[VAR:%.*]] = alloca i64, align 8, addrspace(5)
+// CL20-NEXT: [[ALLOCA_ADDR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)
+// CL20-NEXT: [[VAR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[VAR]] to ptr
+// CL20-NEXT: [[ALLOCA_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[ALLOCA_ADDR]] to ptr
+// CL20-NEXT: store i64 5, ptr [[VAR_ASCAST]], align 8
+// CL20-NEXT: store ptr [[VAR_ASCAST]], ptr [[ALLOCA_ADDR_ASCAST]], align 4
+// CL20-NEXT: [[TMP0:%.*]] = load ptr addrspace(5), ptr [[ALLOCA_ADDR_ASCAST]], align 4
+// CL20-NEXT: store i64 8, ptr addrspace(5) [[TMP0]], align 8
+// CL20-NEXT: ret void
+//
+void wrong_store_type_private_pointer_alloca() {
+ long var = 5;
+
+ // This needs to write an addrspace(5) pointer to the temporary alloca,
+ // which should be allocated with the correct size.
+ __private long *alloca_addr = &var;
+ *alloca_addr = 8;
+}
+
+// CL12-LABEL: define dso_local void @wrong_store_type_private_pointer_as_generic_alloca(
+// CL12-SAME: ) #[[ATTR0]] {
+// CL12-NEXT: [[ENTRY:.*:]]
+// CL12-NEXT: [[VAR:%.*]] = alloca i64, align 8, addrspace(5)
+// CL12-NEXT: [[ALLOCA_ADDR_AS_GENERIC:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)
+// CL12-NEXT: store i64 5, ptr addrspace(5) [[VAR]], align 8
+// CL12-NEXT: store ptr addrspace(5) [[VAR]], ptr addrspace(5) [[ALLOCA_ADDR_AS_GENERIC]], align 4
+// CL12-NEXT: [[TMP0:%.*]] = load ptr addrspace(5), ptr addrspace(5) [[ALLOCA_ADDR_AS_GENERIC]], align 4
+// CL12-NEXT: store i64 9, ptr addrspace(5) [[TMP0]], align 8
+// CL12-NEXT: ret void
+//
+// CL20-LABEL: define dso_local void @wrong_store_type_private_pointer_as_generic_alloca(
+// CL20-SAME: ) #[[ATTR0]] {
+// CL20-NEXT: [[ENTRY:.*:]]
+// CL20-NEXT: [[VAR:%.*]] = alloca i64, align 8, addrspace(5)
+// CL20-NEXT: [[ALLOCA_ADDR_AS_GENERIC:%.*]] = alloca ptr, align 8, addrspace(5)
+// CL20-NEXT: [[VAR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[VAR]] to ptr
+// CL20-NEXT: [[ALLOCA_ADDR_AS_GENERIC_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[ALLOCA_ADDR_AS_GENERIC]] to ptr
+// CL20-NEXT: store i64 5, ptr [[VAR_ASCAST]], align 8
+// CL20-NEXT: store ptr [[VAR_ASCAST]], ptr [[ALLOCA_ADDR_AS_GENERIC_ASCAST]], align 8
+// CL20-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ALLOCA_ADDR_AS_GENERIC_ASCAST]], align 8
+// CL20-NEXT: store i64 9, ptr [[TMP0]], align 8
+// CL20-NEXT: ret void
+//
+void wrong_store_type_private_pointer_as_generic_alloca() {
+ long var = 5;
+
+ // This needs to write an addrspace(0) pointer to the temporary alloca in
+ // CL2.0, which should be allocated with the correct size.
+ long *alloca_addr_as_generic = &var;
+ *alloca_addr_as_generic = 9;
+}
More information about the cfe-commits
mailing list