Clang Project

clang_source_code/test/Driver/amdgpu-macros.cl
1// Check that appropriate macros are defined for every supported AMDGPU
2// "-target" and "-mcpu" options.
3
4//
5// R600-based processors.
6//
7
8// RUN: %clang -E -dM -target r600 -mcpu=r600 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,R600 %s
9// RUN: %clang -E -dM -target r600 -mcpu=rv630 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,R600 %s
10// RUN: %clang -E -dM -target r600 -mcpu=rv635 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,R600 %s
11// RUN: %clang -E -dM -target r600 -mcpu=r630 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,R630 %s
12// RUN: %clang -E -dM -target r600 -mcpu=rs780 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,RS880 %s
13// RUN: %clang -E -dM -target r600 -mcpu=rs880 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,RS880 %s
14// RUN: %clang -E -dM -target r600 -mcpu=rv610 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,RS880 %s
15// RUN: %clang -E -dM -target r600 -mcpu=rv620 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,RS880 %s
16// RUN: %clang -E -dM -target r600 -mcpu=rv670 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,RV670 %s
17// RUN: %clang -E -dM -target r600 -mcpu=rv710 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,RV710 %s
18// RUN: %clang -E -dM -target r600 -mcpu=rv730 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,RV730 %s
19// RUN: %clang -E -dM -target r600 -mcpu=rv740 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,RV770 %s
20// RUN: %clang -E -dM -target r600 -mcpu=rv770 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,RV770 %s
21// RUN: %clang -E -dM -target r600 -mcpu=cedar %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,CEDAR %s
22// RUN: %clang -E -dM -target r600 -mcpu=palm %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,CEDAR %s
23// RUN: %clang -E -dM -target r600 -mcpu=cypress %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,CYPRESS %s
24// RUN: %clang -E -dM -target r600 -mcpu=hemlock %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,CYPRESS %s
25// RUN: %clang -E -dM -target r600 -mcpu=juniper %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,JUNIPER %s
26// RUN: %clang -E -dM -target r600 -mcpu=redwood %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,REDWOOD %s
27// RUN: %clang -E -dM -target r600 -mcpu=sumo %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,SUMO %s
28// RUN: %clang -E -dM -target r600 -mcpu=sumo2 %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,SUMO %s
29// RUN: %clang -E -dM -target r600 -mcpu=barts %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,BARTS %s
30// RUN: %clang -E -dM -target r600 -mcpu=caicos %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,CAICOS %s
31// RUN: %clang -E -dM -target r600 -mcpu=aruba %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,CAYMAN %s
32// RUN: %clang -E -dM -target r600 -mcpu=cayman %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,CAYMAN %s
33// RUN: %clang -E -dM -target r600 -mcpu=turks %s 2>&1 | FileCheck --check-prefixes=ARCH-R600,TURKS %s
34
35// R600-NOT:    #define FP_FAST_FMA 1
36// R630-NOT:    #define FP_FAST_FMA 1
37// RS880-NOT:   #define FP_FAST_FMA 1
38// RV670-NOT:   #define FP_FAST_FMA 1
39// RV710-NOT:   #define FP_FAST_FMA 1
40// RV730-NOT:   #define FP_FAST_FMA 1
41// RV770-NOT:   #define FP_FAST_FMA 1
42// CEDAR-NOT:   #define FP_FAST_FMA 1
43// CYPRESS-NOT: #define FP_FAST_FMA 1
44// JUNIPER-NOT: #define FP_FAST_FMA 1
45// REDWOOD-NOT: #define FP_FAST_FMA 1
46// SUMO-NOT:    #define FP_FAST_FMA 1
47// BARTS-NOT:   #define FP_FAST_FMA 1
48// CAICOS-NOT:  #define FP_FAST_FMA 1
49// CAYMAN-NOT:  #define FP_FAST_FMA 1
50// TURKS-NOT:   #define FP_FAST_FMA 1
51
52// R600-NOT:    #define FP_FAST_FMAF 1
53// R630-NOT:    #define FP_FAST_FMAF 1
54// RS880-NOT:   #define FP_FAST_FMAF 1
55// RV670-NOT:   #define FP_FAST_FMAF 1
56// RV710-NOT:   #define FP_FAST_FMAF 1
57// RV730-NOT:   #define FP_FAST_FMAF 1
58// RV770-NOT:   #define FP_FAST_FMAF 1
59// CEDAR-NOT:   #define FP_FAST_FMAF 1
60// CYPRESS-NOT: #define FP_FAST_FMAF 1
61// JUNIPER-NOT: #define FP_FAST_FMAF 1
62// REDWOOD-NOT: #define FP_FAST_FMAF 1
63// SUMO-NOT:    #define FP_FAST_FMAF 1
64// BARTS-NOT:   #define FP_FAST_FMAF 1
65// CAICOS-NOT:  #define FP_FAST_FMAF 1
66// CAYMAN-NOT:  #define FP_FAST_FMAF 1
67// TURKS-NOT:   #define FP_FAST_FMAF 1
68
69// ARCH-R600-DAG: #define __AMDGPU__ 1
70// ARCH-R600-DAG: #define __AMD__ 1
71
72// R600-NOT:    #define __HAS_FMAF__ 1
73// R630-NOT:    #define __HAS_FMAF__ 1
74// RS880-NOT:   #define __HAS_FMAF__ 1
75// RV670-NOT:   #define __HAS_FMAF__ 1
76// RV710-NOT:   #define __HAS_FMAF__ 1
77// RV730-NOT:   #define __HAS_FMAF__ 1
78// RV770-NOT:   #define __HAS_FMAF__ 1
79// CEDAR-NOT:   #define __HAS_FMAF__ 1
80// CYPRESS-DAG: #define __HAS_FMAF__ 1
81// JUNIPER-NOT: #define __HAS_FMAF__ 1
82// REDWOOD-NOT: #define __HAS_FMAF__ 1
83// SUMO-NOT:    #define __HAS_FMAF__ 1
84// BARTS-NOT:   #define __HAS_FMAF__ 1
85// CAICOS-NOT:  #define __HAS_FMAF__ 1
86// CAYMAN-DAG:  #define __HAS_FMAF__ 1
87// TURKS-NOT:   #define __HAS_FMAF__ 1
88
89// R600-NOT:    #define __HAS_FP64__ 1
90// R630-NOT:    #define __HAS_FP64__ 1
91// RS880-NOT:   #define __HAS_FP64__ 1
92// RV670-NOT:   #define __HAS_FP64__ 1
93// RV710-NOT:   #define __HAS_FP64__ 1
94// RV730-NOT:   #define __HAS_FP64__ 1
95// RV770-NOT:   #define __HAS_FP64__ 1
96// CEDAR-NOT:   #define __HAS_FP64__ 1
97// CYPRESS-NOT: #define __HAS_FP64__ 1
98// JUNIPER-NOT: #define __HAS_FP64__ 1
99// REDWOOD-NOT: #define __HAS_FP64__ 1
100// SUMO-NOT:    #define __HAS_FP64__ 1
101// BARTS-NOT:   #define __HAS_FP64__ 1
102// CAICOS-NOT:  #define __HAS_FP64__ 1
103// CAYMAN-NOT:  #define __HAS_FP64__ 1
104// TURKS-NOT:   #define __HAS_FP64__ 1
105
106// R600-NOT:    #define __HAS_LDEXPF__ 1
107// R630-NOT:    #define __HAS_LDEXPF__ 1
108// RS880-NOT:   #define __HAS_LDEXPF__ 1
109// RV670-NOT:   #define __HAS_LDEXPF__ 1
110// RV710-NOT:   #define __HAS_LDEXPF__ 1
111// RV730-NOT:   #define __HAS_LDEXPF__ 1
112// RV770-NOT:   #define __HAS_LDEXPF__ 1
113// CEDAR-NOT:   #define __HAS_LDEXPF__ 1
114// CYPRESS-NOT: #define __HAS_LDEXPF__ 1
115// JUNIPER-NOT: #define __HAS_LDEXPF__ 1
116// REDWOOD-NOT: #define __HAS_LDEXPF__ 1
117// SUMO-NOT:    #define __HAS_LDEXPF__ 1
118// BARTS-NOT:   #define __HAS_LDEXPF__ 1
119// CAICOS-NOT:  #define __HAS_LDEXPF__ 1
120// CAYMAN-NOT:  #define __HAS_LDEXPF__ 1
121// TURKS-NOT:   #define __HAS_LDEXPF__ 1
122
123// ARCH-R600-DAG: #define __R600__ 1
124
125// R600-DAG:    #define __r600__ 1
126// R630-DAG:    #define __r630__ 1
127// RS880-DAG:   #define __rs880__ 1
128// RV670-DAG:   #define __rv670__ 1
129// RV710-DAG:   #define __rv710__ 1
130// RV730-DAG:   #define __rv730__ 1
131// RV770-DAG:   #define __rv770__ 1
132// CEDAR-DAG:   #define __cedar__ 1
133// CYPRESS-DAG: #define __cypress__ 1
134// JUNIPER-DAG: #define __juniper__ 1
135// REDWOOD-DAG: #define __redwood__ 1
136// SUMO-DAG:    #define __sumo__ 1
137// BARTS-DAG:   #define __barts__ 1
138// CAICOS-DAG:  #define __caicos__ 1
139// CAYMAN-DAG:  #define __cayman__ 1
140// TURKS-DAG:   #define __turks__ 1
141
142//
143// AMDGCN-based processors.
144//
145
146// RUN: %clang -E -dM -target amdgcn -mcpu=gfx600 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX600 %s
147// RUN: %clang -E -dM -target amdgcn -mcpu=tahiti %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX600 %s
148// RUN: %clang -E -dM -target amdgcn -mcpu=gfx601 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX601 %s
149// RUN: %clang -E -dM -target amdgcn -mcpu=hainan %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX601 %s
150// RUN: %clang -E -dM -target amdgcn -mcpu=oland %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX601 %s
151// RUN: %clang -E -dM -target amdgcn -mcpu=pitcairn %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX601 %s
152// RUN: %clang -E -dM -target amdgcn -mcpu=verde %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX601 %s
153// RUN: %clang -E -dM -target amdgcn -mcpu=gfx700 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX700 %s
154// RUN: %clang -E -dM -target amdgcn -mcpu=kaveri %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX700 %s
155// RUN: %clang -E -dM -target amdgcn -mcpu=gfx701 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX701 %s
156// RUN: %clang -E -dM -target amdgcn -mcpu=hawaii %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX701 %s
157// RUN: %clang -E -dM -target amdgcn -mcpu=gfx702 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX702 %s
158// RUN: %clang -E -dM -target amdgcn -mcpu=gfx703 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX703 %s
159// RUN: %clang -E -dM -target amdgcn -mcpu=kabini %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX703 %s
160// RUN: %clang -E -dM -target amdgcn -mcpu=mullins %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX703 %s
161// RUN: %clang -E -dM -target amdgcn -mcpu=gfx704 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX704 %s
162// RUN: %clang -E -dM -target amdgcn -mcpu=bonaire %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX704 %s
163// RUN: %clang -E -dM -target amdgcn -mcpu=gfx801 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX801 %s
164// RUN: %clang -E -dM -target amdgcn -mcpu=carrizo %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX801 %s
165// RUN: %clang -E -dM -target amdgcn -mcpu=gfx802 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX802 %s
166// RUN: %clang -E -dM -target amdgcn -mcpu=iceland %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX802 %s
167// RUN: %clang -E -dM -target amdgcn -mcpu=tonga %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX802 %s
168// RUN: %clang -E -dM -target amdgcn -mcpu=gfx803 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX803 %s
169// RUN: %clang -E -dM -target amdgcn -mcpu=fiji %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX803 %s
170// RUN: %clang -E -dM -target amdgcn -mcpu=polaris10 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX803 %s
171// RUN: %clang -E -dM -target amdgcn -mcpu=polaris11 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX803 %s
172// RUN: %clang -E -dM -target amdgcn -mcpu=gfx810 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX810 %s
173// RUN: %clang -E -dM -target amdgcn -mcpu=stoney %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX810 %s
174// RUN: %clang -E -dM -target amdgcn -mcpu=gfx900 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX900 %s
175// RUN: %clang -E -dM -target amdgcn -mcpu=gfx902 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX902 %s
176// RUN: %clang -E -dM -target amdgcn -mcpu=gfx904 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX904 %s
177// RUN: %clang -E -dM -target amdgcn -mcpu=gfx906 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX906 %s
178// RUN: %clang -E -dM -target amdgcn -mcpu=gfx909 %s 2>&1 | FileCheck --check-prefixes=ARCH-GCN,GFX909 %s
179
180// GFX600-DAG: #define FP_FAST_FMA 1
181// GFX601-DAG: #define FP_FAST_FMA 1
182// GFX700-DAG: #define FP_FAST_FMA 1
183// GFX701-DAG: #define FP_FAST_FMA 1
184// GFX702-DAG: #define FP_FAST_FMA 1
185// GFX703-DAG: #define FP_FAST_FMA 1
186// GFX704-DAG: #define FP_FAST_FMA 1
187// GFX801-DAG: #define FP_FAST_FMA 1
188// GFX802-DAG: #define FP_FAST_FMA 1
189// GFX803-DAG: #define FP_FAST_FMA 1
190// GFX810-DAG: #define FP_FAST_FMA 1
191// GFX900-DAG: #define FP_FAST_FMA 1
192// GFX902-DAG: #define FP_FAST_FMA 1
193// GFX904-DAG: #define FP_FAST_FMA 1
194// GFX906-DAG: #define FP_FAST_FMA 1
195// GFX909-DAG: #define FP_FAST_FMA 1
196
197// GFX600-DAG: #define FP_FAST_FMAF 1
198// GFX601-NOT: #define FP_FAST_FMAF 1
199// GFX700-NOT: #define FP_FAST_FMAF 1
200// GFX701-DAG: #define FP_FAST_FMAF 1
201// GFX702-DAG: #define FP_FAST_FMAF 1
202// GFX703-NOT: #define FP_FAST_FMAF 1
203// GFX704-NOT: #define FP_FAST_FMAF 1
204// GFX801-DAG: #define FP_FAST_FMAF 1
205// GFX802-NOT: #define FP_FAST_FMAF 1
206// GFX803-NOT: #define FP_FAST_FMAF 1
207// GFX810-NOT: #define FP_FAST_FMAF 1
208// GFX900-DAG: #define FP_FAST_FMAF 1
209// GFX902-DAG: #define FP_FAST_FMAF 1
210// GFX904-DAG: #define FP_FAST_FMAF 1
211// GFX906-DAG: #define FP_FAST_FMAF 1
212// GFX909-DAG: #define FP_FAST_FMAF 1
213
214// ARCH-GCN-DAG: #define __AMDGCN__ 1
215// ARCH-GCN-DAG: #define __AMDGPU__ 1
216// ARCH-GCN-DAG: #define __AMD__ 1
217
218// GFX600-DAG: #define __HAS_FMAF__ 1
219// GFX601-DAG: #define __HAS_FMAF__ 1
220// GFX700-DAG: #define __HAS_FMAF__ 1
221// GFX701-DAG: #define __HAS_FMAF__ 1
222// GFX702-DAG: #define __HAS_FMAF__ 1
223// GFX703-DAG: #define __HAS_FMAF__ 1
224// GFX704-DAG: #define __HAS_FMAF__ 1
225// GFX801-DAG: #define __HAS_FMAF__ 1
226// GFX802-DAG: #define __HAS_FMAF__ 1
227// GFX803-DAG: #define __HAS_FMAF__ 1
228// GFX810-DAG: #define __HAS_FMAF__ 1
229// GFX900-DAG: #define __HAS_FMAF__ 1
230// GFX902-DAG: #define __HAS_FMAF__ 1
231// GFX904-DAG: #define __HAS_FMAF__ 1
232// GFX906-DAG: #define __HAS_FMAF__ 1
233// GFX909-DAG: #define __HAS_FMAF__ 1
234
235// GFX600-DAG: #define __HAS_FP64__ 1
236// GFX601-DAG: #define __HAS_FP64__ 1
237// GFX700-DAG: #define __HAS_FP64__ 1
238// GFX701-DAG: #define __HAS_FP64__ 1
239// GFX702-DAG: #define __HAS_FP64__ 1
240// GFX703-DAG: #define __HAS_FP64__ 1
241// GFX704-DAG: #define __HAS_FP64__ 1
242// GFX801-DAG: #define __HAS_FP64__ 1
243// GFX802-DAG: #define __HAS_FP64__ 1
244// GFX803-DAG: #define __HAS_FP64__ 1
245// GFX810-DAG: #define __HAS_FP64__ 1
246// GFX900-DAG: #define __HAS_FP64__ 1
247// GFX902-DAG: #define __HAS_FP64__ 1
248// GFX904-DAG: #define __HAS_FP64__ 1
249// GFX906-DAG: #define __HAS_FP64__ 1
250// GFX909-DAG: #define __HAS_FP64__ 1
251
252// GFX600-DAG: #define __HAS_LDEXPF__ 1
253// GFX601-DAG: #define __HAS_LDEXPF__ 1
254// GFX700-DAG: #define __HAS_LDEXPF__ 1
255// GFX701-DAG: #define __HAS_LDEXPF__ 1
256// GFX702-DAG: #define __HAS_LDEXPF__ 1
257// GFX703-DAG: #define __HAS_LDEXPF__ 1
258// GFX704-DAG: #define __HAS_LDEXPF__ 1
259// GFX801-DAG: #define __HAS_LDEXPF__ 1
260// GFX802-DAG: #define __HAS_LDEXPF__ 1
261// GFX803-DAG: #define __HAS_LDEXPF__ 1
262// GFX810-DAG: #define __HAS_LDEXPF__ 1
263// GFX900-DAG: #define __HAS_LDEXPF__ 1
264// GFX902-DAG: #define __HAS_LDEXPF__ 1
265// GFX904-DAG: #define __HAS_LDEXPF__ 1
266// GFX906-DAG: #define __HAS_LDEXPF__ 1
267// GFX909-DAG: #define __HAS_LDEXPF__ 1
268
269// GFX600-DAG: #define __gfx600__ 1
270// GFX601-DAG: #define __gfx601__ 1
271// GFX700-DAG: #define __gfx700__ 1
272// GFX701-DAG: #define __gfx701__ 1
273// GFX702-DAG: #define __gfx702__ 1
274// GFX703-DAG: #define __gfx703__ 1
275// GFX704-DAG: #define __gfx704__ 1
276// GFX801-DAG: #define __gfx801__ 1
277// GFX802-DAG: #define __gfx802__ 1
278// GFX803-DAG: #define __gfx803__ 1
279// GFX810-DAG: #define __gfx810__ 1
280// GFX900-DAG: #define __gfx900__ 1
281// GFX902-DAG: #define __gfx902__ 1
282// GFX904-DAG: #define __gfx904__ 1
283// GFX906-DAG: #define __gfx906__ 1
284// GFX909-DAG: #define __gfx909__ 1
285