xref: /aosp_15_r20/external/clang/test/CodeGenOpenCL/to_addr_builtin.cl (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -triple spir-unknown-unknown -emit-llvm -O0 -cl-std=CL2.0 -o - %s | FileCheck %s
2*67e74705SXin Li
3*67e74705SXin Li// CHECK: %[[A:.*]] = type { float, float, float }
4*67e74705SXin Litypedef struct {
5*67e74705SXin Li  float x,y,z;
6*67e74705SXin Li} A;
7*67e74705SXin Litypedef private A *PA;
8*67e74705SXin Litypedef global A *GA;
9*67e74705SXin Li
10*67e74705SXin Livoid test(void) {
11*67e74705SXin Li  global int *glob;
12*67e74705SXin Li  local int *loc;
13*67e74705SXin Li  private int *priv;
14*67e74705SXin Li  generic int *gen;
15*67e74705SXin Li
16*67e74705SXin Li  //CHECK: %[[ARG:.*]] = addrspacecast i32 addrspace(1)* %{{.*}} to i8 addrspace(4)*
17*67e74705SXin Li  //CHECK: %[[RET:.*]] = call i8 addrspace(1)* @to_global(i8 addrspace(4)* %[[ARG]])
18*67e74705SXin Li  //CHECK: %{{.*}} = bitcast i8 addrspace(1)* %[[RET]] to i32 addrspace(1)*
19*67e74705SXin Li  glob = to_global(glob);
20*67e74705SXin Li
21*67e74705SXin Li  //CHECK: %[[ARG:.*]] = addrspacecast i32 addrspace(3)* %{{.*}} to i8 addrspace(4)*
22*67e74705SXin Li  //CHECK: %[[RET:.*]] = call i8 addrspace(1)* @to_global(i8 addrspace(4)* %[[ARG]])
23*67e74705SXin Li  //CHECK: %{{.*}} = bitcast i8 addrspace(1)* %[[RET]] to i32 addrspace(1)*
24*67e74705SXin Li  glob = to_global(loc);
25*67e74705SXin Li
26*67e74705SXin Li  //CHECK: %[[ARG:.*]] = addrspacecast i32* %{{.*}} to i8 addrspace(4)*
27*67e74705SXin Li  //CHECK: %[[RET:.*]] = call i8 addrspace(1)* @to_global(i8 addrspace(4)* %[[ARG]])
28*67e74705SXin Li  //CHECK: %{{.*}} = bitcast i8 addrspace(1)* %[[RET]] to i32 addrspace(1)*
29*67e74705SXin Li  glob = to_global(priv);
30*67e74705SXin Li
31*67e74705SXin Li  //CHECK: %[[ARG:.*]] = bitcast i32 addrspace(4)* %{{.*}} to i8 addrspace(4)*
32*67e74705SXin Li  //CHECK: %[[RET:.*]] = call i8 addrspace(1)* @to_global(i8 addrspace(4)* %[[ARG]])
33*67e74705SXin Li  //CHECK: %{{.*}} = bitcast i8 addrspace(1)* %[[RET]] to i32 addrspace(1)*
34*67e74705SXin Li  glob = to_global(gen);
35*67e74705SXin Li
36*67e74705SXin Li  //CHECK: %[[ARG:.*]] = addrspacecast i32 addrspace(1)* %{{.*}} to i8 addrspace(4)*
37*67e74705SXin Li  //CHECK: %[[RET:.*]] = call i8 addrspace(3)* @to_local(i8 addrspace(4)* %[[ARG]])
38*67e74705SXin Li  //CHECK: %{{.*}} = bitcast i8 addrspace(3)* %[[RET]] to i32 addrspace(3)*
39*67e74705SXin Li  loc = to_local(glob);
40*67e74705SXin Li
41*67e74705SXin Li  //CHECK: %[[ARG:.*]] = addrspacecast i32 addrspace(3)* %{{.*}} to i8 addrspace(4)*
42*67e74705SXin Li  //CHECK: %[[RET:.*]] = call i8 addrspace(3)* @to_local(i8 addrspace(4)* %[[ARG]])
43*67e74705SXin Li  //CHECK: %{{.*}} = bitcast i8 addrspace(3)* %[[RET]] to i32 addrspace(3)*
44*67e74705SXin Li  loc = to_local(loc);
45*67e74705SXin Li
46*67e74705SXin Li  //CHECK: %[[ARG:.*]] = addrspacecast i32* %{{.*}} to i8 addrspace(4)*
47*67e74705SXin Li  //CHECK: %[[RET:.*]] = call i8 addrspace(3)* @to_local(i8 addrspace(4)* %[[ARG]])
48*67e74705SXin Li  //CHECK: %{{.*}} = bitcast i8 addrspace(3)* %[[RET]] to i32 addrspace(3)*
49*67e74705SXin Li  loc = to_local(priv);
50*67e74705SXin Li
51*67e74705SXin Li  //CHECK: %[[ARG:.*]] = bitcast i32 addrspace(4)* %{{.*}} to i8 addrspace(4)*
52*67e74705SXin Li  //CHECK: %[[RET:.*]] = call i8 addrspace(3)* @to_local(i8 addrspace(4)* %[[ARG]])
53*67e74705SXin Li  //CHECK: %{{.*}} = bitcast i8 addrspace(3)* %[[RET]] to i32 addrspace(3)*
54*67e74705SXin Li  loc = to_local(gen);
55*67e74705SXin Li
56*67e74705SXin Li  //CHECK: %[[ARG:.*]] = addrspacecast i32 addrspace(1)* %{{.*}} to i8 addrspace(4)*
57*67e74705SXin Li  //CHECK: %[[RET:.*]] = call i8* @to_private(i8 addrspace(4)* %[[ARG]])
58*67e74705SXin Li  //CHECK: %{{.*}} = bitcast i8* %[[RET]] to i32*
59*67e74705SXin Li  priv = to_private(glob);
60*67e74705SXin Li
61*67e74705SXin Li  //CHECK: %[[ARG:.*]] = addrspacecast i32 addrspace(3)* %{{.*}} to i8 addrspace(4)*
62*67e74705SXin Li  //CHECK: %[[RET:.*]] = call i8* @to_private(i8 addrspace(4)* %[[ARG]])
63*67e74705SXin Li  //CHECK: %{{.*}} = bitcast i8* %[[RET]] to i32*
64*67e74705SXin Li  priv = to_private(loc);
65*67e74705SXin Li
66*67e74705SXin Li  //CHECK: %[[ARG:.*]] = addrspacecast i32* %{{.*}} to i8 addrspace(4)*
67*67e74705SXin Li  //CHECK: %[[RET:.*]] = call i8* @to_private(i8 addrspace(4)* %[[ARG]])
68*67e74705SXin Li  //CHECK: %{{.*}} = bitcast i8* %[[RET]] to i32*
69*67e74705SXin Li  priv = to_private(priv);
70*67e74705SXin Li
71*67e74705SXin Li  //CHECK: %[[ARG:.*]] = bitcast i32 addrspace(4)* %{{.*}} to i8 addrspace(4)*
72*67e74705SXin Li  //CHECK: %[[RET:.*]] = call i8* @to_private(i8 addrspace(4)* %[[ARG]])
73*67e74705SXin Li  //CHECK: %{{.*}} = bitcast i8* %[[RET]] to i32*
74*67e74705SXin Li  priv = to_private(gen);
75*67e74705SXin Li
76*67e74705SXin Li  //CHECK: %[[ARG:.*]] = addrspacecast %[[A]]* %{{.*}} to i8 addrspace(4)*
77*67e74705SXin Li  //CHECK: %[[RET:.*]] = call i8 addrspace(1)* @to_global(i8 addrspace(4)* %[[ARG]])
78*67e74705SXin Li  //CHECK: %{{.*}} = bitcast i8 addrspace(1)* %[[RET]] to %[[A]] addrspace(1)*
79*67e74705SXin Li  PA pA;
80*67e74705SXin Li  GA gA = to_global(pA);
81*67e74705SXin Li
82*67e74705SXin Li  //CHECK-NOT: addrspacecast
83*67e74705SXin Li  //CHECK-NOT: bitcast
84*67e74705SXin Li  //CHECK: call i8 addrspace(1)* @to_global(i8 addrspace(4)* %{{.*}})
85*67e74705SXin Li  //CHECK-NOT: addrspacecast
86*67e74705SXin Li  //CHECK-NOT: bitcast
87*67e74705SXin Li  generic void *gen_v;
88*67e74705SXin Li  global void *glob_v = to_global(gen_v);
89*67e74705SXin Li}
90