|
1 | | -// RUN: %clang_cc1 -O0 -cl-std=CL1.2 -triple amdgcn---amdgizcl -emit-llvm %s -o - | FileCheck -check-prefixes=CHECK,CL12 %s |
2 | | -// RUN: %clang_cc1 -O0 -cl-std=CL2.0 -triple amdgcn---amdgizcl -emit-llvm %s -o - | FileCheck -check-prefixes=CHECK,CL20 %s |
| 1 | +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5 |
| 2 | +// RUN: %clang_cc1 -O0 -cl-std=CL1.2 -triple amdgcn---amdgizcl -emit-llvm %s -o - | FileCheck -check-prefixes=CL12 %s |
| 3 | +// RUN: %clang_cc1 -O0 -cl-std=CL2.0 -triple amdgcn---amdgizcl -emit-llvm %s -o - | FileCheck -check-prefixes=CL20 %s |
3 | 4 |
|
4 | | -// CL12-LABEL: define{{.*}} void @func1(ptr addrspace(5) noundef %x) |
5 | | -// CL20-LABEL: define{{.*}} void @func1(ptr noundef %x) |
| 5 | +// CL12-LABEL: define dso_local void @func1( |
| 6 | +// CL12-SAME: ptr addrspace(5) noundef [[X:%.*]]) #[[ATTR0:[0-9]+]] { |
| 7 | +// CL12-NEXT: [[ENTRY:.*:]] |
| 8 | +// CL12-NEXT: [[X_ADDR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5) |
| 9 | +// CL12-NEXT: store ptr addrspace(5) [[X]], ptr addrspace(5) [[X_ADDR]], align 4 |
| 10 | +// CL12-NEXT: [[TMP0:%.*]] = load ptr addrspace(5), ptr addrspace(5) [[X_ADDR]], align 4 |
| 11 | +// CL12-NEXT: store i32 1, ptr addrspace(5) [[TMP0]], align 4 |
| 12 | +// CL12-NEXT: ret void |
| 13 | +// |
| 14 | +// CL20-LABEL: define dso_local void @func1( |
| 15 | +// CL20-SAME: ptr noundef [[X:%.*]]) #[[ATTR0:[0-9]+]] { |
| 16 | +// CL20-NEXT: [[ENTRY:.*:]] |
| 17 | +// 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 |
| 21 | +// CL20-NEXT: store i32 1, ptr [[TMP0]], align 4 |
| 22 | +// CL20-NEXT: ret void |
| 23 | +// |
6 | 24 | void func1(int *x) { |
7 | | - // CL12: %[[x_addr:.*]] = alloca ptr addrspace(5){{.*}}addrspace(5) |
8 | | - // CL12: store ptr addrspace(5) %x, ptr addrspace(5) %[[x_addr]] |
9 | | - // CL12: %[[r0:.*]] = load ptr addrspace(5), ptr addrspace(5) %[[x_addr]] |
10 | | - // CL12: store i32 1, ptr addrspace(5) %[[r0]] |
11 | | - // CL20: %[[x_addr:.*]] = alloca ptr{{.*}}addrspace(5) |
12 | | - // CL20: store ptr %x, ptr addrspace(5) %[[x_addr]] |
13 | | - // CL20: %[[r0:.*]] = load ptr, ptr addrspace(5) %[[x_addr]] |
14 | | - // CL20: store i32 1, ptr %[[r0]] |
15 | 25 | *x = 1; |
16 | 26 | } |
17 | 27 |
|
18 | | -// CHECK-LABEL: define{{.*}} void @func2() |
| 28 | +// CL12-LABEL: define dso_local void @func2( |
| 29 | +// CL12-SAME: ) #[[ATTR0]] { |
| 30 | +// CL12-NEXT: [[ENTRY:.*:]] |
| 31 | +// CL12-NEXT: [[LV1:%.*]] = alloca i32, align 4, addrspace(5) |
| 32 | +// CL12-NEXT: [[LV2:%.*]] = alloca i32, align 4, addrspace(5) |
| 33 | +// CL12-NEXT: [[LA:%.*]] = alloca [100 x i32], align 4, addrspace(5) |
| 34 | +// CL12-NEXT: [[LP1:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5) |
| 35 | +// CL12-NEXT: [[LP2:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5) |
| 36 | +// CL12-NEXT: [[LVC:%.*]] = alloca i32, align 4, addrspace(5) |
| 37 | +// CL12-NEXT: store i32 1, ptr addrspace(5) [[LV1]], align 4 |
| 38 | +// CL12-NEXT: store i32 2, ptr addrspace(5) [[LV2]], align 4 |
| 39 | +// CL12-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [100 x i32], ptr addrspace(5) [[LA]], i64 0, i64 0 |
| 40 | +// CL12-NEXT: store i32 3, ptr addrspace(5) [[ARRAYIDX]], align 4 |
| 41 | +// CL12-NEXT: store ptr addrspace(5) [[LV1]], ptr addrspace(5) [[LP1]], align 4 |
| 42 | +// CL12-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [100 x i32], ptr addrspace(5) [[LA]], i64 0, i64 0 |
| 43 | +// CL12-NEXT: store ptr addrspace(5) [[ARRAYDECAY]], ptr addrspace(5) [[LP2]], align 4 |
| 44 | +// CL12-NEXT: call void @func1(ptr addrspace(5) noundef [[LV1]]) #[[ATTR2:[0-9]+]] |
| 45 | +// CL12-NEXT: store i32 4, ptr addrspace(5) [[LVC]], align 4 |
| 46 | +// CL12-NEXT: store i32 4, ptr addrspace(5) [[LV1]], align 4 |
| 47 | +// CL12-NEXT: ret void |
| 48 | +// |
| 49 | +// CL20-LABEL: define dso_local void @func2( |
| 50 | +// CL20-SAME: ) #[[ATTR0]] { |
| 51 | +// CL20-NEXT: [[ENTRY:.*:]] |
| 52 | +// CL20-NEXT: [[LV1:%.*]] = alloca i32, align 4, addrspace(5) |
| 53 | +// CL20-NEXT: [[LV2:%.*]] = alloca i32, align 4, addrspace(5) |
| 54 | +// CL20-NEXT: [[LA:%.*]] = alloca [100 x i32], align 4, addrspace(5) |
| 55 | +// CL20-NEXT: [[LP1:%.*]] = alloca ptr, align 8, addrspace(5) |
| 56 | +// CL20-NEXT: [[LP2:%.*]] = alloca ptr, align 8, addrspace(5) |
| 57 | +// CL20-NEXT: [[LVC:%.*]] = alloca i32, align 4, addrspace(5) |
| 58 | +// 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 |
| 74 | +// CL20-NEXT: ret void |
| 75 | +// |
19 | 76 | void func2(void) { |
20 | | - // CHECK: %lv1 = alloca i32, align 4, addrspace(5) |
21 | | - // CHECK: %lv2 = alloca i32, align 4, addrspace(5) |
22 | | - // CHECK: %la = alloca [100 x i32], align 4, addrspace(5) |
23 | | - // CL12: %lp1 = alloca ptr addrspace(5), align 4, addrspace(5) |
24 | | - // CL12: %lp2 = alloca ptr addrspace(5), align 4, addrspace(5) |
25 | | - // CL20: %lp1 = alloca ptr, align 8, addrspace(5) |
26 | | - // CL20: %lp2 = alloca ptr, align 8, addrspace(5) |
27 | | - // CHECK: %lvc = alloca i32, align 4, addrspace(5) |
28 | | - |
29 | | - // CHECK: store i32 1, ptr addrspace(5) %lv1 |
30 | 77 | int lv1; |
31 | 78 | lv1 = 1; |
32 | | - // CHECK: store i32 2, ptr addrspace(5) %lv2 |
33 | 79 | int lv2 = 2; |
34 | 80 |
|
35 | | - // CHECK: %[[arrayidx:.*]] = getelementptr inbounds [100 x i32], ptr addrspace(5) %la, i64 0, i64 0 |
36 | | - // CHECK: store i32 3, ptr addrspace(5) %[[arrayidx]], align 4 |
37 | 81 | int la[100]; |
38 | 82 | la[0] = 3; |
39 | 83 |
|
40 | | - // CL12: store ptr addrspace(5) %lv1, ptr addrspace(5) %lp1, align 4 |
41 | | - // CL20: %[[r0:.*]] = addrspacecast ptr addrspace(5) %lv1 to ptr |
42 | | - // CL20: store ptr %[[r0]], ptr addrspace(5) %lp1, align 8 |
43 | 84 | int *lp1 = &lv1; |
44 | 85 |
|
45 | | - // CHECK: %[[arraydecay:.*]] = getelementptr inbounds [100 x i32], ptr addrspace(5) %la, i64 0, i64 0 |
46 | | - // CL12: store ptr addrspace(5) %[[arraydecay]], ptr addrspace(5) %lp2, align 4 |
47 | | - // CL20: %[[r1:.*]] = addrspacecast ptr addrspace(5) %[[arraydecay]] to ptr |
48 | | - // CL20: store ptr %[[r1]], ptr addrspace(5) %lp2, align 8 |
49 | 86 | int *lp2 = la; |
50 | 87 |
|
51 | | - // CL12: call void @func1(ptr addrspace(5) noundef %lv1) |
52 | | - // CL20: %[[r2:.*]] = addrspacecast ptr addrspace(5) %lv1 to ptr |
53 | | - // CL20: call void @func1(ptr noundef %[[r2]]) |
54 | 88 | func1(&lv1); |
55 | 89 |
|
56 | | - // CHECK: store i32 4, ptr addrspace(5) %lvc |
57 | | - // CHECK: store i32 4, ptr addrspace(5) %lv1 |
58 | 90 | const int lvc = 4; |
59 | 91 | lv1 = lvc; |
60 | 92 | } |
61 | 93 |
|
62 | | -// CHECK-LABEL: define{{.*}} void @func3() |
63 | | -// CHECK: %a = alloca [16 x [1 x float]], align 4, addrspace(5) |
64 | | -// CHECK: call void @llvm.memset.p5.i64(ptr addrspace(5) align 4 %a, i8 0, i64 64, i1 false) |
| 94 | +// CL12-LABEL: define dso_local void @func3( |
| 95 | +// CL12-SAME: ) #[[ATTR0]] { |
| 96 | +// CL12-NEXT: [[ENTRY:.*:]] |
| 97 | +// CL12-NEXT: [[A:%.*]] = alloca [16 x [1 x float]], align 4, addrspace(5) |
| 98 | +// CL12-NEXT: call void @llvm.memset.p5.i64(ptr addrspace(5) align 4 [[A]], i8 0, i64 64, i1 false) |
| 99 | +// CL12-NEXT: ret void |
| 100 | +// |
| 101 | +// CL20-LABEL: define dso_local void @func3( |
| 102 | +// CL20-SAME: ) #[[ATTR0]] { |
| 103 | +// CL20-NEXT: [[ENTRY:.*:]] |
| 104 | +// 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) |
| 107 | +// CL20-NEXT: ret void |
| 108 | +// |
65 | 109 | void func3(void) { |
66 | 110 | float a[16][1] = {{0.}}; |
67 | 111 | } |
0 commit comments