|
1 |
| -// RUN: %clangxx -fsycl -fsycl-device-only -O3 -S -emit-llvm -x c++ %s -o - | FileCheck %s |
2 |
| - |
| 1 | +// RUN: %clangxx -fsycl -fsycl-device-only -O3 -S -emit-llvm -x c++ %s -o - | FileCheck %s --check-prefix CHECK-O3 |
| 2 | +// RUN: %clangxx -fsycl -fsycl-device-only -O0 -S -emit-llvm -x c++ %s -o - | FileCheck %s --check-prefix CHECK-O0 |
| 3 | +// Test compilation with -O3 when all methods are inlined in kernel function |
| 4 | +// and -O0 when helper methods are preserved. |
3 | 5 | #include <CL/sycl.hpp>
|
4 | 6 | #include <cassert>
|
5 | 7 | #include <cstdint>
|
@@ -43,46 +45,66 @@ int main(int argc, char *argv[]) {
|
43 | 45 | local[i] = i;
|
44 | 46 | }
|
45 | 47 | }
|
46 |
| - // CHECK: call spir_func void {{.*}}spirv_ControlBarrierjjj |
| 48 | + // CHECK-O3: call spir_func void {{.*}}spirv_ControlBarrierjjj |
47 | 49 | it.barrier();
|
48 | 50 |
|
49 | 51 | int i = (it.get_global_id(0) / sg.get_max_local_range()[0]) *
|
50 | 52 | sg.get_max_local_range()[0];
|
51 | 53 |
|
52 |
| - // load for global address space |
53 |
| - // CHECK: call spir_func i8 addrspace(3)* {{.*}}spirv_GenericCastToPtrExplicit_ToLocal{{.*}}(i8 addrspace(4)* |
54 |
| - // CHECK: {{.*}}SubgroupLocalInvocationId |
55 |
| - // CHECK: call spir_func i8 addrspace(1)* {{.*}}spirv_GenericCastToPtrExplicit_ToGlobal{{.*}}(i8 addrspace(4)* |
56 |
| - // CHECK: call spir_func i32 {{.*}}spirv_SubgroupBlockRead{{.*}}(i32 addrspace(1)* |
57 |
| - // CHECK: call spir_func void {{.*}}assert |
| 54 | + // load() for global address space |
| 55 | + // CHECK-O3: call spir_func i8 addrspace(3)* {{.*}}spirv_GenericCastToPtrExplicit_ToLocal{{.*}}(i8 addrspace(4)* |
| 56 | + // CHECK-O3: {{.*}}SubgroupLocalInvocationId |
| 57 | + // CHECK-O3: call spir_func i8 addrspace(1)* {{.*}}spirv_GenericCastToPtrExplicit_ToGlobal{{.*}}(i8 addrspace(4)* |
| 58 | + // CHECK-O3: call spir_func i32 {{.*}}spirv_SubgroupBlockRead{{.*}}(i32 addrspace(1)* |
| 59 | + // CHECK-O3: call spir_func void {{.*}}assert |
| 60 | + |
58 | 61 | auto x = sg.load(&global[i]);
|
59 | 62 |
|
60 | 63 | // load() for local address space
|
61 |
| - // CHECK: call spir_func i8 addrspace(3)* {{.*}}spirv_GenericCastToPtrExplicit_ToLocal{{.*}}(i8 addrspace(4)* |
62 |
| - // CHECK: {{.*}}SubgroupLocalInvocationId |
63 |
| - // CHECK: call spir_func i8 addrspace(1)* {{.*}}spirv_GenericCastToPtrExplicit_ToGlobal{{.*}}(i8 addrspace(4)* |
64 |
| - // CHECK: call spir_func i32 {{.*}}spirv_SubgroupBlockRead{{.*}}(i32 addrspace(1)* |
65 |
| - // CHECK: call spir_func void {{.*}}assert |
| 64 | + // CHECK-O3: call spir_func i8 addrspace(3)* {{.*}}spirv_GenericCastToPtrExplicit_ToLocal{{.*}}(i8 addrspace(4)* |
| 65 | + // CHECK-O3: {{.*}}SubgroupLocalInvocationId |
| 66 | + // CHECK-O3: call spir_func i8 addrspace(1)* {{.*}}spirv_GenericCastToPtrExplicit_ToGlobal{{.*}}(i8 addrspace(4)* |
| 67 | + // CHECK-O3: call spir_func i32 {{.*}}spirv_SubgroupBlockRead{{.*}}(i32 addrspace(1)* |
| 68 | + // CHECK-O3: call spir_func void {{.*}}assert |
66 | 69 | auto y = sg.load(&local[i]);
|
67 | 70 |
|
68 | 71 | // load() for private address space
|
69 |
| - // CHECK: call spir_func i8 addrspace(3)* {{.*}}spirv_GenericCastToPtrExplicit_ToLocal{{.*}}(i8 addrspace(4)* |
70 |
| - // CHECK: {{.*}}SubgroupLocalInvocationId |
71 |
| - // CHECK: call spir_func i8 addrspace(1)* {{.*}}spirv_GenericCastToPtrExplicit_ToGlobal{{.*}}(i8 addrspace(4)* |
72 |
| - // CHECK: call spir_func i32 {{.*}}spirv_SubgroupBlockRead{{.*}}(i32 addrspace(1)* |
73 |
| - // CHECK: call spir_func void {{.*}}assert |
| 72 | + // CHECK-O3: call spir_func i8 addrspace(3)* {{.*}}spirv_GenericCastToPtrExplicit_ToLocal{{.*}}(i8 addrspace(4)* |
| 73 | + // CHECK-O3: {{.*}}SubgroupLocalInvocationId |
| 74 | + // CHECK-O3: call spir_func i8 addrspace(1)* {{.*}}spirv_GenericCastToPtrExplicit_ToGlobal{{.*}}(i8 addrspace(4)* |
| 75 | + // CHECK-O3: call spir_func i32 {{.*}}spirv_SubgroupBlockRead{{.*}}(i32 addrspace(1)* |
| 76 | + // CHECK-O3: call spir_func void {{.*}}assert |
74 | 77 | auto z = sg.load(v + i);
|
75 | 78 |
|
76 | 79 | // store() for global address space
|
77 |
| - // CHECK: call spir_func i8 addrspace(3)* {{.*}}spirv_GenericCastToPtrExplicit_ToLocal{{.*}}(i8 addrspace(4)* |
78 |
| - // CHECK: {{.*}}SubgroupLocalInvocationId |
79 |
| - // CHECK: call spir_func i8 addrspace(1)* {{.*}}spirv_GenericCastToPtrExplicit_ToGlobal{{.*}}(i8 addrspace(4)* |
80 |
| - // CHECK: call spir_func void {{.*}}spirv_SubgroupBlockWriteINTEL{{.*}}(i32 addrspace(1)* |
81 |
| - // CHECK: call spir_func void {{.*}}assert |
| 80 | + // CHECK-O3: call spir_func i8 addrspace(3)* {{.*}}spirv_GenericCastToPtrExplicit_ToLocal{{.*}}(i8 addrspace(4)* |
| 81 | + // CHECK-O3: {{.*}}SubgroupLocalInvocationId |
| 82 | + // CHECK-O3: call spir_func i8 addrspace(1)* {{.*}}spirv_GenericCastToPtrExplicit_ToGlobal{{.*}}(i8 addrspace(4)* |
| 83 | + // CHECK-O3: call spir_func void {{.*}}spirv_SubgroupBlockWriteINTEL{{.*}}(i32 addrspace(1)* |
| 84 | + // CHECK-O3: call spir_func void {{.*}}assert |
82 | 85 | sg.store(&global[i], x + y + z);
|
83 | 86 | });
|
84 | 87 | });
|
85 | 88 | }
|
| 89 | + // load() accepting raw pointers method |
| 90 | + // CHECK-O0: define{{.*}}spir_func i32 {{.*}}cl4sycl6ONEAPI9sub_group4load{{.*}}addrspace(4)* %src) |
| 91 | + // CHECK-O0: call spir_func i32 addrspace(3)* {{.*}}SYCL_GenericCastToPtrExplicit_ToLocal{{.*}}(i8 addrspace(4)* |
| 92 | + // CHECK-O0: call spir_func i32 {{.*}}sycl6ONEAPI9sub_group4load{{.*}}i32 addrspace(3)* % |
| 93 | + // CHECK-O0: call spir_func i32 addrspace(1)* {{.*}}SYCL_GenericCastToPtrExplicit_ToGlobal{{.*}}(i8 addrspace(4)* |
| 94 | + // CHECK-O0: call spir_func i32 {{.*}}sycl6ONEAPI9sub_group4load{{.*}}i32 addrspace(1)* % |
| 95 | + // CHECK-O0: call spir_func void {{.*}}assert |
| 96 | + |
| 97 | + // store() accepting raw pointers method |
| 98 | + // CHECK-O0: define{{.*}}spir_func void {{.*}}cl4sycl6ONEAPI9sub_group5store{{.*}}i32 addrspace(4)* %dst |
| 99 | + // CHECK-O0: call spir_func i32 addrspace(3)* {{.*}}SYCL_GenericCastToPtrExplicit_ToLocal{{.*}}(i8 addrspace(4)* |
| 100 | + // CHECK-O0: call spir_func void {{.*}}cl4sycl6ONEAPI9sub_group5store{{.*}}, i32 addrspace(3)* % |
| 101 | + // CHECK-O0: call spir_func i32 addrspace(1)* {{.*}}SYCL_GenericCastToPtrExplicit_ToGlobal{{.*}}(i8 addrspace(4)* |
| 102 | + // CHECK-O0: call spir_func void {{.*}}cl4sycl6ONEAPI9sub_group5store{{.*}}, i32 addrspace(1)* % |
| 103 | + // CHECK-O0: call spir_func void {{.*}}assert |
| 104 | + // CHECK-O0: define {{.*}}spir_func i32 addrspace(3)* {{.*}}SYCL_GenericCastToPtrExplicit_ToLocal{{.*}}(i8 addrspace(4)* % |
| 105 | + // CHECK-O0: call spir_func i8 addrspace(3)* {{.*}}spirv_GenericCastToPtrExplicit_ToLocal{{.*}}(i8 addrspace(4)* |
| 106 | + // CHECK-O0: define {{.*}}spir_func i32 addrspace(1)* {{.*}}SYCL_GenericCastToPtrExplicit_ToGlobal{{.*}}(i8 addrspace(4)* % |
| 107 | + // CHECK-O0: call spir_func i8 addrspace(1)* {{.*}}spirv_GenericCastToPtrExplicit_ToGlobal{{.*}}(i8 addrspace(4)* |
86 | 108 |
|
87 | 109 | return 0;
|
88 | 110 | }
|
0 commit comments