1 | // RUN: %clang_cc1 %s -triple spir-unknown-unknown -cl-std=c++ -O0 -emit-llvm -o - | FileCheck %s -check-prefixes=COMMON,PTR |
2 | // RUN: %clang_cc1 %s -triple spir-unknown-unknown -cl-std=c++ -O0 -emit-llvm -o - -DREF | FileCheck %s -check-prefixes=COMMON,REF |
3 | |
4 | #ifdef REF |
5 | #define PTR & |
6 | #define ADR(x) x |
7 | #else |
8 | #define PTR * |
9 | #define ADR(x) &x |
10 | #endif |
11 | |
12 | //COMMON: @glob = addrspace(1) global i32 |
13 | int glob; |
14 | //PTR: @glob_p = addrspace(1) global i32 addrspace(4)* addrspacecast (i32 addrspace(1)* @glob to i32 addrspace(4)*) |
15 | //REF: @glob_p = addrspace(1) global i32 addrspace(4)* null |
16 | int PTR glob_p = ADR(glob); |
17 | |
18 | //COMMON: @_ZZ3fooi{{P|R}}U3AS4iE6loc_st = internal addrspace(1) global i32 |
19 | //PTR: @_ZZ3fooiPU3AS4iE8loc_st_p = internal addrspace(1) global i32 addrspace(4)* addrspacecast (i32 addrspace(1)* @_ZZ3fooiPU3AS4iE6loc_st to i32 addrspace(4)*) |
20 | //REF: @_ZZ3fooiRU3AS4iE8loc_st_p = internal addrspace(1) global i32 addrspace(4)* null |
21 | //COMMON: @loc_ext_p = external addrspace(1) {{global|constant}} i32 addrspace(4)* |
22 | //COMMON: @loc_ext = external addrspace(1) global i32 |
23 | |
24 | //REF: store i32 addrspace(4)* addrspacecast (i32 addrspace(1)* @glob to i32 addrspace(4)*), i32 addrspace(4)* addrspace(1)* @glob_p |
25 | |
26 | //COMMON: define spir_func i32 @_Z3fooi{{P|R}}U3AS4i(i32 %par, i32 addrspace(4)*{{.*}} %par_p) |
27 | int foo(int par, int PTR par_p){ |
28 | //COMMON: %loc = alloca i32 |
29 | int loc; |
30 | //COMMON: %loc_p = alloca i32 addrspace(4)* |
31 | //COMMON: %loc_p_const = alloca i32* |
32 | //COMMON: [[GAS:%[0-9]+]] = addrspacecast i32* %loc to i32 addrspace(4)* |
33 | //COMMON: store i32 addrspace(4)* [[GAS]], i32 addrspace(4)** %loc_p |
34 | int PTR loc_p = ADR(loc); |
35 | //COMMON: store i32* %loc, i32** %loc_p_const |
36 | const __private int PTR loc_p_const = ADR(loc); |
37 | |
38 | // CHECK directives for the following code are located above. |
39 | static int loc_st; |
40 | //REF: store i32 addrspace(4)* addrspacecast (i32 addrspace(1)* @_ZZ3fooiRU3AS4iE6loc_st to i32 addrspace(4)*), i32 addrspace(4)* addrspace(1)* @_ZZ3fooiRU3AS4iE8loc_st_p |
41 | static int PTR loc_st_p = ADR(loc_st); |
42 | extern int loc_ext; |
43 | extern int PTR loc_ext_p; |
44 | (void)loc_ext_p; |
45 | return loc_ext; |
46 | } |
47 | |