Clang Project

clang_source_code/test/CodeGenOpenCLCXX/address-space-deduction.cl
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
13int 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
16int 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)
27int 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