1 // RUN
: %clang_cc1 %s -O0 -ffake-address-space-map -emit-llvm -o - | FileCheck %s --check-prefixes
=CHECK
,SPIR
2 // RUN
: %clang_cc1 %s -O0 -cl-std
=CL3.0 -cl-ext
=-all -ffake-address-space-map -emit-llvm -o - | FileCheck %s --check-prefixes
=CHECK
,SPIR
3 // RUN
: %clang_cc1 %s -O0 -cl-std
=clc
++2021 -cl-ext
=-all -ffake-address-space-map -emit-llvm -o - | FileCheck %s --check-prefixes
=CHECK
,SPIR
4 // RUN
: %clang_cc1 %s -O0 -DCL20 -cl-std
=CL2.0 -ffake-address-space-map -emit-llvm -o - | FileCheck %s --check-prefixes
=CL20
,CL20SPIR
5 // RUN
: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -emit-llvm -o - | FileCheck --check-prefixes
=CHECK
,AMDGCN %s
6 // RUN
: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -cl-std
=CL3.0 -emit-llvm -o - | FileCheck --check-prefixes
=CHECK
,AMDGCN %s
7 // RUN
: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -DCL20 -cl-std
=CL2.0 -emit-llvm -o - | FileCheck %s --check-prefixes
=CL20
,CL20AMDGCN
8 // RUN
: %clang_cc1 %s -O0 -triple amdgcn-mesa-mesa3d -emit-llvm -o - | FileCheck --check-prefixes
=CHECK
,AMDGCN %s
9 // RUN
: %clang_cc1 %s -O0 -triple amdgcn-mesa-mesa3d -cl-std
=CL3.0 -emit-llvm -o - | FileCheck --check-prefixes
=CHECK
,AMDGCN %s
10 // RUN
: %clang_cc1 %s -O0 -triple r600-- -emit-llvm -o - | FileCheck --check-prefixes
=CHECK
,AMDGCN %s
11 // RUN
: %clang_cc1 %s -O0 -triple r600-- -emit-llvm -cl-std
=CL3.0 -o - | FileCheck --check-prefixes
=CHECK
,AMDGCN %s
13 // SPIR
: %struct.S
= type
{ i32
, i32
, ptr
}
14 // CL20SPIR
: %struct.S
= type
{ i32
, i32
, ptr addrspace
(4) }
21 // CL20-DAG
: @g_extern_var
= external
{{(dso_local )?
}}addrspace
(1) global float
22 // CL20-DAG
: @l_extern_var
= external
{{(dso_local )?
}}addrspace
(1) global float
23 // CL20-DAG
: @test_static.l_static_var
= internal addrspace
(1) global float
0.000000e+00
24 // CL20-DAG
: @g_static_var
= internal addrspace
(1) global float
0.000000e+00
27 // CL20-DAG
: @g_s
= {{(common )?
}}{{(dso_local )?
}}addrspace
(1) global %struct.S zeroinitializer
32 // AMDGCN
: ptr addrspace
(5) %arg
33 void f__p
(__private int
*arg
) {}
35 // CHECK
: ptr addrspace
(1) %arg
36 void f__g
(__global int
*arg
) {}
38 // CHECK
: ptr addrspace
(3) %arg
39 void f__l
(__local int
*arg
) {}
41 // SPIR
: ptr addrspace
(2) %arg
42 // AMDGCN
: ptr addrspace
(4) %arg
43 void f__c
(__constant int
*arg
) {}
46 // AMDGCN
: ptr addrspace
(5) %arg
47 void fp
(private int
*arg
) {}
49 // CHECK
: ptr addrspace
(1) %arg
50 void fg
(global int
*arg
) {}
52 // CHECK
: ptr addrspace
(3) %arg
53 void fl
(local int
*arg
) {}
55 // SPIR
: ptr addrspace
(2) %arg
56 // AMDGCN
: ptr addrspace
(4) %arg
57 void fc
(constant int
*arg
) {}
59 // SPIR
: ptr addrspace
(5) %arg
60 // AMDGCN
: ptr addrspace
(1) %arg
61 void fd
(__attribute__((opencl_global_device)) int
*arg
) {}
63 // SPIR
: ptr addrspace
(6) %arg
64 // AMDGCN
: ptr addrspace
(1) %arg
65 void fh
(__attribute__((opencl_global_host)) int
*arg
) {}
69 // CL20-DAG
: @i
= {{(dso_local )?
}}addrspace
(1) global i32
0
71 // CL20SPIR-DAG
: @ptr
= {{(common )?
}}{{(dso_local )?
}}addrspace
(1) global ptr addrspace
(4) null
72 // CL20AMDGCN-DAG
: @ptr
= {{(dso_local )?
}}addrspace
(1) global ptr null
75 // SPIR
: ptr noundef %arg
76 // AMDGCN
: ptr addrspace
(5) noundef %arg
77 // CL20SPIR-DAG
: ptr addrspace
(4) noundef %arg
78 // CL20AMDGCN-DAG
: ptr noundef %arg
82 // SPIR
: %i
= alloca i32
,
83 // AMDGCN
: %i
= alloca i32
{{.
*}}addrspace
(5)
84 // CL20SPIR-DAG
: %i
= alloca i32
,
85 // CL20AMDGCN-DAG
: %i
= alloca i32
{{.
*}}addrspace
(5)
89 // CL20-DAG
: @f.ii
= internal addrspace
(1) global i32
0
95 // SPIR
: define
{{(dso_local )?
}}void
@{{.
*}}test_typedef
{{.
*}}(ptr addrspace
(1) noundef %x
, ptr addrspace
(2) noundef %y
, ptr noundef %z
)
96 void test_typedef
(global int_td
*x
, constant int_td
*y
, intp_td z
) {
101 // SPIR
: define
{{(dso_local )?
}}void
@{{.
*}}test_struct
{{.
*}}()
103 // SPIR
: %ps
= alloca ptr
104 // CL20SPIR
: %ps
= alloca ptr addrspace
(4)
106 // SPIR
: store i32
0, ptr %x
107 // CL20SPIR
: store i32
0, ptr addrspace
(4) %x
110 // CL20SPIR
: store i32
0, ptr addrspace
(1) @g_s
115 // SPIR-LABEL
: define
{{(dso_local )?
}}void
@{{.
*}}test_void_par
{{.
*}}()
116 void test_void_par
(void) {}
118 // On ppc64 returns signext i32.
119 // SPIR-LABEL
: define
{{.
*}} i32
@{{.
*}}test_func_return_type
{{.
*}}()
120 int test_func_return_type
(void) {
125 extern float g_extern_var
;
127 // CL20-LABEL
: define
{{.
*}}void
@test_extern
(
128 kernel void test_extern
(global float
*buf
) {
129 extern float l_extern_var
;
130 buf
[0] += g_extern_var + l_extern_var;
133 static float g_static_var;
135 // CL20-LABEL: define {{.*}}void @test_static(
136 kernel void test_static(global float *buf) {
137 static float l_static_var;
138 buf[0] += g_static_var
+ l_static_var
;