aboutsummaryrefslogtreecommitdiff
path: root/clang/test/CodeGenOpenCL/visibility.cl
blob: 31807aacf8c2a6b79be453dae44d568c452b1995 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
// RUN: %clang_cc1 -std=cl2.0 -fapply-global-visibility-to-externs -fvisibility=default -triple amdgcn-unknown-unknown -emit-llvm -o - %s | FileCheck --check-prefix=FVIS-DEFAULT %s
// RUN: %clang_cc1 -std=cl2.0 -fapply-global-visibility-to-externs -fvisibility=protected -triple amdgcn-unknown-unknown -emit-llvm -o - %s | FileCheck --check-prefix=FVIS-PROTECTED %s
// RUN: %clang_cc1 -std=cl2.0 -fapply-global-visibility-to-externs -fvisibility=hidden -triple amdgcn-unknown-unknown -emit-llvm -o - %s | FileCheck --check-prefix=FVIS-HIDDEN %s

// REQUIRES: amdgpu-registered-target

// FVIS-DEFAULT:  @glob ={{.*}} local_unnamed_addr addrspace(1) global i32 0
// FVIS-PROTECTED: @glob = protected local_unnamed_addr
// FVIS-HIDDEN: @glob = hidden local_unnamed_addr
int glob = 0;
// FVIS-DEFAULT:  @glob_hidden = hidden local_unnamed_addr
// FVIS-PROTECTED: @glob_hidden = hidden local_unnamed_addr
// FVIS-HIDDEN: @glob_hidden = hidden local_unnamed_addr
__attribute__((visibility("hidden"))) int glob_hidden = 0;
// FVIS-DEFAULT:  @glob_protected = protected local_unnamed_addr
// FVIS-PROTECTED: @glob_protected = protected local_unnamed_addr
// FVIS-HIDDEN: @glob_protected = protected local_unnamed_addr
__attribute__((visibility("protected"))) int glob_protected = 0;
// FVIS-DEFAULT:  @glob_default ={{( dso_local)?}} local_unnamed_addr
// FVIS-PROTECTED: @glob_default ={{( dso_local)?}} local_unnamed_addr
// FVIS-HIDDEN: @glob_default ={{( dso_local)?}} local_unnamed_addr
__attribute__((visibility("default"))) int glob_default = 0;

// FVIS-DEFAULT:  @ext = external local_unnamed_addr
// FVIS-PROTECTED: @ext = external protected local_unnamed_addr
// FVIS-HIDDEN: @ext = external hidden local_unnamed_addr
extern int ext;
// FVIS-DEFAULT:  @ext_hidden = external hidden local_unnamed_addr
// FVIS-PROTECTED: @ext_hidden = external hidden local_unnamed_addr
// FVIS-HIDDEN: @ext_hidden = external hidden local_unnamed_addr
__attribute__((visibility("hidden"))) extern int ext_hidden;
// FVIS-DEFAULT:  @ext_protected = external protected local_unnamed_addr
// FVIS-PROTECTED: @ext_protected = external protected local_unnamed_addr
// FVIS-HIDDEN: @ext_protected = external protected local_unnamed_addr
__attribute__((visibility("protected"))) extern int ext_protected;
// FVIS-DEFAULT:  @ext_default = external local_unnamed_addr
// FVIS-PROTECTED: @ext_default = external local_unnamed_addr
// FVIS-HIDDEN: @ext_default = external local_unnamed_addr
__attribute__((visibility("default"))) extern int ext_default;
// FVIS-DEFAULT: define{{.*}} amdgpu_kernel void @kern()
// FVIS-PROTECTED: define protected amdgpu_kernel void @kern()
// FVIS-HIDDEN: define protected amdgpu_kernel void @kern()
// FVIS-DEFAULT: define{{.*}} void @__clang_ocl_kern_imp_kern()
// FVIS-PROTECTED: define protected void @__clang_ocl_kern_imp_kern()
// FVIS-HIDDEN: define protected void @__clang_ocl_kern_imp_kern()
kernel void kern() {}
// FVIS-DEFAULT: define protected amdgpu_kernel void @kern_hidden()
// FVIS-PROTECTED: define protected amdgpu_kernel void @kern_hidden()
// FVIS-HIDDEN: define protected amdgpu_kernel void @kern_hidden()
// FVIS-DEFAULT: define protected void @__clang_ocl_kern_imp_kern_hidden()
// FVIS-PROTECTED: define protected void @__clang_ocl_kern_imp_kern_hidden()
// FVIS-HIDDEN: define protected void @__clang_ocl_kern_imp_kern_hidden()
__attribute__((visibility("hidden"))) kernel void kern_hidden() {}
// FVIS-DEFAULT: define protected amdgpu_kernel void @kern_protected()
// FVIS-PROTECTED: define protected amdgpu_kernel void @kern_protected()
// FVIS-HIDDEN: define protected amdgpu_kernel void @kern_protected()
// FVIS-DEFAULT: define protected void @__clang_ocl_kern_imp_kern_protected()
// FVIS-PROTECTED: define protected void @__clang_ocl_kern_imp_kern_protected()
// FVIS-HIDDEN: define protected void @__clang_ocl_kern_imp_kern_protected()
__attribute__((visibility("protected"))) kernel void kern_protected() {}
// FVIS-DEFAULT: define{{.*}} amdgpu_kernel void @kern_default()
// FVIS-PROTECTED: define{{.*}} amdgpu_kernel void @kern_default()
// FVIS-HIDDEN: define{{.*}} amdgpu_kernel void @kern_default()
// FVIS-DEFAULT: define{{.*}} void @__clang_ocl_kern_imp_kern_default()
// FVIS-PROTECTED: define{{.*}} void @__clang_ocl_kern_imp_kern_default()
// FVIS-HIDDEN: define{{.*}} void @__clang_ocl_kern_imp_kern_default()
__attribute__((visibility("default"))) kernel void kern_default() {}

// FVIS-DEFAULT: define{{.*}} void @func()
// FVIS-PROTECTED: define protected void @func()
// FVIS-HIDDEN: define hidden void @func()
void func() {}
// FVIS-DEFAULT: define hidden void @func_hidden()
// FVIS-PROTECTED: define hidden void @func_hidden()
// FVIS-HIDDEN: define hidden void @func_hidden()
__attribute__((visibility("hidden"))) void func_hidden() {}
// FVIS-DEFAULT: define protected void @func_protected()
// FVIS-PROTECTED: define protected void @func_protected()
// FVIS-HIDDEN: define protected void @func_protected()
__attribute__((visibility("protected"))) void func_protected() {}
// FVIS-DEFAULT: define{{.*}} void @func_default()
// FVIS-PROTECTED: define{{.*}} void @func_default()
// FVIS-HIDDEN: define{{.*}} void @func_default()
__attribute__((visibility("default"))) void func_default() {}

extern kernel void ext_kern();
__attribute__((visibility("hidden"))) extern kernel void ext_kern_hidden();
__attribute__((visibility("protected"))) extern kernel void ext_kern_protected();
__attribute__((visibility("default"))) extern kernel void ext_kern_default();

extern void ext_func();
__attribute__((visibility("hidden"))) extern void ext_func_hidden();
__attribute__((visibility("protected"))) extern void ext_func_protected();
__attribute__((visibility("default"))) extern void ext_func_default();

void use() {
    glob = ext + ext_hidden + ext_protected + ext_default;
    ext_kern();
    // FVIS-DEFAULT: tail call void @__clang_ocl_kern_imp_ext_kern()
    // FVIS-PROTECTED: tail call void @__clang_ocl_kern_imp_ext_kern()
    // FVIS-HIDDEN: tail call void @__clang_ocl_kern_imp_ext_kern()
    ext_kern_hidden();
    // FVIS-DEFAULT: tail call void @__clang_ocl_kern_imp_ext_kern_hidden()
    // FVIS-PROTECTED: tail call void @__clang_ocl_kern_imp_ext_kern_hidden()
    // FVIS-HIDDEN: tail call void @__clang_ocl_kern_imp_ext_kern_hidden()
    ext_kern_protected();
    // FVIS-DEFAULT: tail call void @__clang_ocl_kern_imp_ext_kern_protected()
    // FVIS-PROTECTED: tail call void @__clang_ocl_kern_imp_ext_kern_protected()
    // FVIS-HIDDEN: tail call void @__clang_ocl_kern_imp_ext_kern_protected()
    ext_kern_default();
    // FVIS-DEFAULT: tail call void @__clang_ocl_kern_imp_ext_kern_default()
    // FVIS-PROTECTED: tail call void @__clang_ocl_kern_imp_ext_kern_default()
    // FVIS-HIDDEN: tail call void @__clang_ocl_kern_imp_ext_kern_default()
    ext_func();
    ext_func_hidden();
    ext_func_protected();
    ext_func_default();
}

// FVIS-DEFAULT: declare void @__clang_ocl_kern_imp_ext_kern()
// FVIS-PROTECTED: declare protected void @__clang_ocl_kern_imp_ext_kern()
// FVIS-HIDDEN: declare protected void @__clang_ocl_kern_imp_ext_kern()

// FVIS-DEFAULT: declare protected void @__clang_ocl_kern_imp_ext_kern_hidden()
// FVIS-PROTECTED: declare protected void @__clang_ocl_kern_imp_ext_kern_hidden()
// FVIS-HIDDEN: declare protected void @__clang_ocl_kern_imp_ext_kern_hidden()

// FVIS-DEFAULT: declare protected void @__clang_ocl_kern_imp_ext_kern_protected()
// FVIS-PROTECTED: declare protected void @__clang_ocl_kern_imp_ext_kern_protected()
// FVIS-HIDDEN: declare protected void @__clang_ocl_kern_imp_ext_kern_protected()

// FVIS-DEFAULT: declare void @__clang_ocl_kern_imp_ext_kern_default()
// FVIS-PROTECTED: declare void @__clang_ocl_kern_imp_ext_kern_default()
// FVIS-HIDDEN: declare void @__clang_ocl_kern_imp_ext_kern_default()

// FVIS-DEFAULT: declare void @ext_func()
// FVIS-PROTECTED: declare protected void @ext_func()
// FVIS-HIDDEN: declare hidden void @ext_func()

// FVIS-DEFAULT: declare hidden void @ext_func_hidden()
// FVIS-PROTECTED: declare hidden void @ext_func_hidden()
// FVIS-HIDDEN: declare hidden void @ext_func_hidden()

// FVIS-DEFAULT: declare protected void @ext_func_protected()
// FVIS-PROTECTED: declare protected void @ext_func_protected()
// FVIS-HIDDEN: declare protected void @ext_func_protected()

// FVIS-DEFAULT: declare void @ext_func_default()
// FVIS-PROTECTED: declare void @ext_func_default()
// FVIS-HIDDEN: declare void @ext_func_default()