91 lines · plain
1// RUN: %clang_cc1 -triple spir-unknown-unknown -emit-llvm -O0 -cl-std=clc++ -o - %s | FileCheck %s2// RUN: %clang_cc1 -triple spir-unknown-unknown -emit-llvm -O0 -cl-std=cl2.0 -o - %s | FileCheck %s3// RUN: %clang_cc1 -triple spir-unknown-unknown -emit-llvm -O0 -cl-std=cl3.0 -o - %s | FileCheck %s4 5typedef struct {6 float x,y,z;7} A;8typedef private A *PA;9typedef global A *GA;10 11void test(void) {12 global int *glob;13 local int *loc;14 private int *priv;15 generic int *gen;16 17 //CHECK: %[[ARG:.*]] = addrspacecast ptr addrspace(1) %{{.*}} to ptr addrspace(4)18 //CHECK: %[[RET:.*]] = call spir_func ptr addrspace(1) @__to_global(ptr addrspace(4) %[[ARG]])19 //CHECK: store ptr addrspace(1) %[[RET]], ptr %glob20 glob = to_global(glob);21 22 //CHECK: %[[ARG:.*]] = addrspacecast ptr addrspace(3) %{{.*}} to ptr addrspace(4)23 //CHECK: %[[RET:.*]] = call spir_func ptr addrspace(1) @__to_global(ptr addrspace(4) %[[ARG]])24 //CHECK: store ptr addrspace(1) %[[RET]], ptr %glob25 glob = to_global(loc);26 27 //CHECK: %[[ARG:.*]] = addrspacecast ptr %{{.*}} to ptr addrspace(4)28 //CHECK: %[[RET:.*]] = call spir_func ptr addrspace(1) @__to_global(ptr addrspace(4) %[[ARG]])29 //CHECK: store ptr addrspace(1) %[[RET]], ptr %glob30 glob = to_global(priv);31 32 //CHECK: %[[ARG:.*]] = load ptr addrspace(4), ptr %gen33 //CHECK: %[[RET:.*]] = call spir_func ptr addrspace(1) @__to_global(ptr addrspace(4) %[[ARG]])34 //CHECK: store ptr addrspace(1) %[[RET]], ptr %glob35 glob = to_global(gen);36 37 //CHECK: %[[ARG:.*]] = addrspacecast ptr addrspace(1) %{{.*}} to ptr addrspace(4)38 //CHECK: %[[RET:.*]] = call spir_func ptr addrspace(3) @__to_local(ptr addrspace(4) %[[ARG]])39 //CHECK: store ptr addrspace(3) %[[RET]], ptr %loc40 loc = to_local(glob);41 42 //CHECK: %[[ARG:.*]] = addrspacecast ptr addrspace(3) %{{.*}} to ptr addrspace(4)43 //CHECK: %[[RET:.*]] = call spir_func ptr addrspace(3) @__to_local(ptr addrspace(4) %[[ARG]])44 //CHECK: store ptr addrspace(3) %[[RET]], ptr %loc45 loc = to_local(loc);46 47 //CHECK: %[[ARG:.*]] = addrspacecast ptr %{{.*}} to ptr addrspace(4)48 //CHECK: %[[RET:.*]] = call spir_func ptr addrspace(3) @__to_local(ptr addrspace(4) %[[ARG]])49 //CHECK: store ptr addrspace(3) %[[RET]], ptr %loc50 loc = to_local(priv);51 52 //CHECK: %[[ARG:.*]] = load ptr addrspace(4), ptr %gen53 //CHECK: %[[RET:.*]] = call spir_func ptr addrspace(3) @__to_local(ptr addrspace(4) %[[ARG]])54 //CHECK: store ptr addrspace(3) %[[RET]], ptr %loc55 loc = to_local(gen);56 57 //CHECK: %[[ARG:.*]] = addrspacecast ptr addrspace(1) %{{.*}} to ptr addrspace(4)58 //CHECK: %[[RET:.*]] = call spir_func ptr @__to_private(ptr addrspace(4) %[[ARG]])59 //CHECK: store ptr %[[RET]], ptr %priv60 priv = to_private(glob);61 62 //CHECK: %[[ARG:.*]] = addrspacecast ptr addrspace(3) %{{.*}} to ptr addrspace(4)63 //CHECK: %[[RET:.*]] = call spir_func ptr @__to_private(ptr addrspace(4) %[[ARG]])64 //CHECK: store ptr %[[RET]], ptr %priv65 priv = to_private(loc);66 67 //CHECK: %[[ARG:.*]] = addrspacecast ptr %{{.*}} to ptr addrspace(4)68 //CHECK: %[[RET:.*]] = call spir_func ptr @__to_private(ptr addrspace(4) %[[ARG]])69 //CHECK: store ptr %[[RET]], ptr %priv70 priv = to_private(priv);71 72 //CHECK: %[[ARG:.*]] = load ptr addrspace(4), ptr %gen73 //CHECK: %[[RET:.*]] = call spir_func ptr @__to_private(ptr addrspace(4) %[[ARG]])74 //CHECK: store ptr %[[RET]], ptr %priv75 priv = to_private(gen);76 77 //CHECK: %[[ARG:.*]] = addrspacecast ptr %{{.*}} to ptr addrspace(4)78 //CHECK: %[[RET:.*]] = call spir_func ptr addrspace(1) @__to_global(ptr addrspace(4) %[[ARG]])79 //CHECK: store ptr addrspace(1) %[[RET]], ptr %gA80 PA pA;81 GA gA = to_global(pA);82 83 //CHECK-NOT: addrspacecast84 //CHECK-NOT: bitcast85 //CHECK: call spir_func ptr addrspace(1) @__to_global(ptr addrspace(4) %{{.*}})86 //CHECK-NOT: addrspacecast87 //CHECK-NOT: bitcast88 generic void *gen_v;89 global void *glob_v = to_global(gen_v);90}91