Skip to content

Commit 56b6bb6

Browse files
committed
fix generic addr space ocl test
1 parent f7970d4 commit 56b6bb6

13 files changed

+526
-714
lines changed

clang/lib/CodeGen/CGExpr.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,15 @@ RawAddress CodeGenFunction::CreateTempAlloca(llvm::Type *Ty, CharUnits Align,
103103
if (AllocaAddr)
104104
*AllocaAddr = Alloca;
105105
llvm::Value *V = Alloca.getPointer();
106+
assert((!getLangOpts().OpenCL ||
107+
CGM.getTarget().getTargetAddressSpace(getASTAllocaAddressSpace()) ==
108+
CGM.getTarget().getTargetAddressSpace(LangAS::opencl_private)) &&
109+
"For OpenCL allocas must allocate in the private address space!");
106110
// Alloca always returns a pointer in alloca address space, which may
107111
// be different from the type defined by the language. For example,
108112
// in C++ the auto variables are in the default address space. Therefore
109113
// cast alloca to the default address space when necessary.
110-
if (getASTAllocaAddressSpace() != LangAS::Default) {
114+
if (!getLangOpts().OpenCL && getASTAllocaAddressSpace() != LangAS::Default) {
111115
auto DestAddrSpace = getContext().getTargetAddressSpace(LangAS::Default);
112116
llvm::IRBuilderBase::InsertPointGuard IPG(Builder);
113117
// When ArraySize is nullptr, alloca is inserted at AllocaInsertPt,

clang/test/CodeGenOpenCL/addr-space-struct-arg.cl

Lines changed: 64 additions & 91 deletions
Large diffs are not rendered by default.

clang/test/CodeGenOpenCL/amdgcn-automatic-variable.cl

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,8 @@
1515
// CL20-SAME: ptr noundef [[X:%.*]]) #[[ATTR0:[0-9]+]] {
1616
// CL20-NEXT: [[ENTRY:.*:]]
1717
// CL20-NEXT: [[X_ADDR:%.*]] = alloca ptr, align 8, addrspace(5)
18-
// CL20-NEXT: [[X_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[X_ADDR]] to ptr
19-
// CL20-NEXT: store ptr [[X]], ptr [[X_ADDR_ASCAST]], align 8
20-
// CL20-NEXT: [[TMP0:%.*]] = load ptr, ptr [[X_ADDR_ASCAST]], align 8
18+
// CL20-NEXT: store ptr [[X]], ptr addrspace(5) [[X_ADDR]], align 8
19+
// CL20-NEXT: [[TMP0:%.*]] = load ptr, ptr addrspace(5) [[X_ADDR]], align 8
2120
// CL20-NEXT: store i32 1, ptr [[TMP0]], align 4
2221
// CL20-NEXT: ret void
2322
//
@@ -55,22 +54,19 @@ void func1(int *x) {
5554
// CL20-NEXT: [[LP1:%.*]] = alloca ptr, align 8, addrspace(5)
5655
// CL20-NEXT: [[LP2:%.*]] = alloca ptr, align 8, addrspace(5)
5756
// CL20-NEXT: [[LVC:%.*]] = alloca i32, align 4, addrspace(5)
57+
// CL20-NEXT: store i32 1, ptr addrspace(5) [[LV1]], align 4
58+
// CL20-NEXT: store i32 2, ptr addrspace(5) [[LV2]], align 4
59+
// CL20-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [100 x i32], ptr addrspace(5) [[LA]], i64 0, i64 0
60+
// CL20-NEXT: store i32 3, ptr addrspace(5) [[ARRAYIDX]], align 4
5861
// CL20-NEXT: [[LV1_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[LV1]] to ptr
59-
// CL20-NEXT: [[LV2_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[LV2]] to ptr
60-
// CL20-NEXT: [[LA_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[LA]] to ptr
61-
// CL20-NEXT: [[LP1_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[LP1]] to ptr
62-
// CL20-NEXT: [[LP2_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[LP2]] to ptr
63-
// CL20-NEXT: [[LVC_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[LVC]] to ptr
64-
// CL20-NEXT: store i32 1, ptr [[LV1_ASCAST]], align 4
65-
// CL20-NEXT: store i32 2, ptr [[LV2_ASCAST]], align 4
66-
// CL20-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [100 x i32], ptr [[LA_ASCAST]], i64 0, i64 0
67-
// CL20-NEXT: store i32 3, ptr [[ARRAYIDX]], align 4
68-
// CL20-NEXT: store ptr [[LV1_ASCAST]], ptr [[LP1_ASCAST]], align 8
69-
// CL20-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [100 x i32], ptr [[LA_ASCAST]], i64 0, i64 0
70-
// CL20-NEXT: store ptr [[ARRAYDECAY]], ptr [[LP2_ASCAST]], align 8
71-
// CL20-NEXT: call void @func1(ptr noundef [[LV1_ASCAST]]) #[[ATTR2:[0-9]+]]
72-
// CL20-NEXT: store i32 4, ptr [[LVC_ASCAST]], align 4
73-
// CL20-NEXT: store i32 4, ptr [[LV1_ASCAST]], align 4
62+
// CL20-NEXT: store ptr [[LV1_ASCAST]], ptr addrspace(5) [[LP1]], align 8
63+
// CL20-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [100 x i32], ptr addrspace(5) [[LA]], i64 0, i64 0
64+
// CL20-NEXT: [[ARRAYDECAY_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[ARRAYDECAY]] to ptr
65+
// CL20-NEXT: store ptr [[ARRAYDECAY_ASCAST]], ptr addrspace(5) [[LP2]], align 8
66+
// CL20-NEXT: [[LV1_ASCAST1:%.*]] = addrspacecast ptr addrspace(5) [[LV1]] to ptr
67+
// CL20-NEXT: call void @func1(ptr noundef [[LV1_ASCAST1]]) #[[ATTR2:[0-9]+]]
68+
// CL20-NEXT: store i32 4, ptr addrspace(5) [[LVC]], align 4
69+
// CL20-NEXT: store i32 4, ptr addrspace(5) [[LV1]], align 4
7470
// CL20-NEXT: ret void
7571
//
7672
void func2(void) {
@@ -102,8 +98,7 @@ void func2(void) {
10298
// CL20-SAME: ) #[[ATTR0]] {
10399
// CL20-NEXT: [[ENTRY:.*:]]
104100
// CL20-NEXT: [[A:%.*]] = alloca [16 x [1 x float]], align 4, addrspace(5)
105-
// CL20-NEXT: [[A_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[A]] to ptr
106-
// CL20-NEXT: call void @llvm.memset.p0.i64(ptr align 4 [[A_ASCAST]], i8 0, i64 64, i1 false)
101+
// CL20-NEXT: call void @llvm.memset.p5.i64(ptr addrspace(5) align 4 [[A]], i8 0, i64 64, i1 false)
107102
// CL20-NEXT: ret void
108103
//
109104
void func3(void) {

0 commit comments

Comments
 (0)