[HLSL] Implement RWBuffer::operator[] via __builtin_hlsl_resource_getpointer (#117017)
[llvm-project.git] / llvm / test / CodeGen / NVPTX / math-intrins-sm80-ptx70-autoupgrade.ll
blob783fd22b892a93cd08585cbfb06c90fa2f4b0f34
1 ; RUN: llc < %s -march=nvptx64 -mcpu=sm_80 -mattr=+ptx70 | FileCheck %s
2 ; RUN: %if ptxas-11.0 %{ llc < %s -march=nvptx64 -mcpu=sm_80 -mattr=+ptx70 | %ptxas-verify -arch=sm_80 %}
4 ; CHECK-LABEL: abs_bf16
5 define bfloat @abs_bf16(bfloat %0) {
6   ; CHECK-NOT: call
7   ; CHECK: abs.bf16
8   %res = call bfloat @llvm.nvvm.abs.bf16(bfloat %0);
9   ret bfloat %res
12 ; CHECK-LABEL: abs_bf16x2
13 define <2 x bfloat> @abs_bf16x2(<2 x bfloat> %0) {
14   ; CHECK-NOT: call
15   ; CHECK: abs.bf16x2
16   %res = call <2 x bfloat> @llvm.nvvm.abs.bf16x2(<2 x bfloat> %0);
17   ret <2 x bfloat> %res
20 ; CHECK-LABEL: neg_bf16
21 define bfloat @neg_bf16(bfloat %0) {
22   ; CHECK-NOT: call
23   ; CHECK: neg.bf16
24   %res = call bfloat @llvm.nvvm.neg.bf16(bfloat %0);
25   ret bfloat %res
28 ; CHECK-LABEL: neg_bf16x2
29 define <2 x bfloat> @neg_bf16x2(<2 x bfloat> %0) {
30   ; CHECK-NOT: call
31   ; CHECK: neg.bf16x2
32   %res = call <2 x bfloat> @llvm.nvvm.neg.bf16x2(<2 x bfloat> %0);
33   ret <2 x bfloat> %res
36 ; CHECK-LABEL: fmin_nan_f
37 define float @fmin_nan_f(float %0, float %1) {
38   ; CHECK-NOT: call
39   ; CHECK: min.NaN.f32
40   %res = call float @llvm.nvvm.fmin.nan.f(float %0, float %1);
41   ret float %res
44 ; CHECK-LABEL: fmin_ftz_nan_f
45 define float @fmin_ftz_nan_f(float %0, float %1) {
46   ; CHECK-NOT: call
47   ; CHECK: min.ftz.NaN.f32
48   %res = call float @llvm.nvvm.fmin.ftz.nan.f(float %0, float %1);
49   ret float %res
52 ; CHECK-LABEL: fmin_f16
53 define half @fmin_f16(half %0, half %1) {
54   ; CHECK-NOT: call
55   ; CHECK: min.f16
56   %res = call half @llvm.nvvm.fmin.f16(half %0, half %1)
57   ret half %res
60 ; CHECK-LABEL: fmin_ftz_f16
61 define half @fmin_ftz_f16(half %0, half %1) {
62   ; CHECK-NOT: call
63   ; CHECK: min.ftz.f16
64   %res = call half @llvm.nvvm.fmin.ftz.f16(half %0, half %1)
65   ret half %res
68 ; CHECK-LABEL: fmin_nan_f16
69 define half @fmin_nan_f16(half %0, half %1) {
70   ; CHECK-NOT: call
71   ; CHECK: min.NaN.f16
72   %res = call half @llvm.nvvm.fmin.nan.f16(half %0, half %1)
73   ret half %res
76 ; CHECK-LABEL: fmin_ftz_nan_f16
77 define half @fmin_ftz_nan_f16(half %0, half %1) {
78   ; CHECK-NOT: call
79   ; CHECK: min.ftz.NaN.f16
80   %res = call half @llvm.nvvm.fmin.ftz.nan.f16(half %0, half %1)
81   ret half %res
84 ; CHECK-LABEL: fmin_f16x2
85 define <2 x half> @fmin_f16x2(<2 x half> %0, <2 x half> %1) {
86   ; CHECK-NOT: call
87   ; CHECK: min.f16x2
88   %res = call <2 x half> @llvm.nvvm.fmin.f16x2(<2 x half> %0, <2 x half> %1)
89   ret <2 x half> %res
92 ; CHECK-LABEL: fmin_ftz_f16x2
93 define <2 x half> @fmin_ftz_f16x2(<2 x half> %0, <2 x half> %1) {
94   ; CHECK-NOT: call
95   ; CHECK: min.ftz.f16x2
96   %res = call <2 x half> @llvm.nvvm.fmin.ftz.f16x2(<2 x half> %0, <2 x half> %1)
97   ret <2 x half> %res
100 ; CHECK-LABEL: fmin_nan_f16x2
101 define <2 x half> @fmin_nan_f16x2(<2 x half> %0, <2 x half> %1) {
102   ; CHECK-NOT: call
103   ; CHECK: min.NaN.f16x2
104   %res = call <2 x half> @llvm.nvvm.fmin.nan.f16x2(<2 x half> %0, <2 x half> %1)
105   ret <2 x half> %res
108 ; CHECK-LABEL: fmin_ftz_nan_f16x2
109 define <2 x half> @fmin_ftz_nan_f16x2(<2 x half> %0, <2 x half> %1) {
110   ; CHECK-NOT: call
111   ; CHECK: min.ftz.NaN.f16x2
112   %res = call <2 x half> @llvm.nvvm.fmin.ftz.nan.f16x2(<2 x half> %0, <2 x half> %1)
113   ret <2 x half> %res
116 ; CHECK-LABEL: fmin_bf16
117 define bfloat @fmin_bf16(bfloat %0, bfloat %1) {
118   ; CHECK-NOT: call
119   ; CHECK: min.bf16
120   %res = call bfloat @llvm.nvvm.fmin.bf16(bfloat %0, bfloat %1)
121   ret bfloat %res
124 ; CHECK-LABEL: fmin_nan_bf16
125 define bfloat @fmin_nan_bf16(bfloat %0, bfloat %1) {
126   ; CHECK-NOT: call
127   ; CHECK: min.NaN.bf16
128   %res = call bfloat @llvm.nvvm.fmin.nan.bf16(bfloat %0, bfloat %1)
129   ret bfloat %res
132 ; CHECK-LABEL: fmin_bf16x2
133 define <2 x bfloat> @fmin_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {
134   ; CHECK-NOT: call
135   ; CHECK: min.bf16x2
136   %res = call <2 x bfloat> @llvm.nvvm.fmin.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)
137   ret <2 x bfloat> %res
140 ; CHECK-LABEL: fmin_nan_bf16x2
141 define <2 x bfloat> @fmin_nan_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {
142   ; CHECK-NOT: call
143   ; CHECK: min.NaN.bf16x2
144   %res = call <2 x bfloat> @llvm.nvvm.fmin.nan.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)
145   ret <2 x bfloat> %res
148 ; CHECK-LABEL: fmax_nan_f
149 define float @fmax_nan_f(float %0, float %1) {
150   ; CHECK-NOT: call
151   ; CHECK: max.NaN.f32
152   %res = call float @llvm.nvvm.fmax.nan.f(float %0, float %1);
153   ret float %res
156 ; CHECK-LABEL: fmax_ftz_nan_f
157 define float @fmax_ftz_nan_f(float %0, float %1) {
158   ; CHECK-NOT: call
159   ; CHECK: max.ftz.NaN.f32
160   %res = call float @llvm.nvvm.fmax.ftz.nan.f(float %0, float %1);
161   ret float %res
164 ; CHECK-LABEL: fmax_f16
165 define half @fmax_f16(half %0, half %1) {
166   ; CHECK-NOT: call
167   ; CHECK: max.f16
168   %res = call half @llvm.nvvm.fmax.f16(half %0, half %1)
169   ret half %res
172 ; CHECK-LABEL: fmax_ftz_f16
173 define half @fmax_ftz_f16(half %0, half %1) {
174   ; CHECK-NOT: call
175   ; CHECK: max.ftz.f16
176   %res = call half @llvm.nvvm.fmax.ftz.f16(half %0, half %1)
177   ret half %res
180 ; CHECK-LABEL: fmax_nan_f16
181 define half @fmax_nan_f16(half %0, half %1) {
182   ; CHECK-NOT: call
183   ; CHECK: max.NaN.f16
184   %res = call half @llvm.nvvm.fmax.nan.f16(half %0, half %1)
185   ret half %res
188 ; CHECK-LABEL: fmax_ftz_nan_f16
189 define half @fmax_ftz_nan_f16(half %0, half %1) {
190   ; CHECK-NOT: call
191   ; CHECK: max.ftz.NaN.f16
192   %res = call half @llvm.nvvm.fmax.ftz.nan.f16(half %0, half %1)
193   ret half %res
196 ; CHECK-LABEL: fmax_f16x2
197 define <2 x half> @fmax_f16x2(<2 x half> %0, <2 x half> %1) {
198   ; CHECK-NOT: call
199   ; CHECK: max.f16x2
200   %res = call <2 x half> @llvm.nvvm.fmax.f16x2(<2 x half> %0, <2 x half> %1)
201   ret <2 x half> %res
204 ; CHECK-LABEL: fmax_ftz_f16x2
205 define <2 x half> @fmax_ftz_f16x2(<2 x half> %0, <2 x half> %1) {
206   ; CHECK-NOT: call
207   ; CHECK: max.ftz.f16x2
208   %res = call <2 x half> @llvm.nvvm.fmax.ftz.f16x2(<2 x half> %0, <2 x half> %1)
209   ret <2 x half> %res
212 ; CHECK-LABEL: fmax_nan_f16x2
213 define <2 x half> @fmax_nan_f16x2(<2 x half> %0, <2 x half> %1) {
214   ; CHECK-NOT: call
215   ; CHECK: max.NaN.f16x2
216   %res = call <2 x half> @llvm.nvvm.fmax.nan.f16x2(<2 x half> %0, <2 x half> %1)
217   ret <2 x half> %res
220 ; CHECK-LABEL: fmax_ftz_nan_f16x2
221 define <2 x half> @fmax_ftz_nan_f16x2(<2 x half> %0, <2 x half> %1) {
222   ; CHECK-NOT: call
223   ; CHECK: max.ftz.NaN.f16x2
224   %res = call <2 x half> @llvm.nvvm.fmax.ftz.nan.f16x2(<2 x half> %0, <2 x half> %1)
225   ret <2 x half> %res
228 ; CHECK-LABEL: fmax_bf16
229 define bfloat @fmax_bf16(bfloat %0, bfloat %1) {
230   ; CHECK-NOT: call
231   ; CHECK: max.bf16
232   %res = call bfloat @llvm.nvvm.fmax.bf16(bfloat %0, bfloat %1)
233   ret bfloat %res
236 ; CHECK-LABEL: fmax_nan_bf16
237 define bfloat @fmax_nan_bf16(bfloat %0, bfloat %1) {
238   ; CHECK-NOT: call
239   ; CHECK: max.NaN.bf16
240   %res = call bfloat @llvm.nvvm.fmax.nan.bf16(bfloat %0, bfloat %1)
241   ret bfloat %res
244 ; CHECK-LABEL: fmax_bf16x2
245 define <2 x bfloat> @fmax_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {
246   ; CHECK-NOT: call
247   ; CHECK: max.bf16x2
248   %res = call <2 x bfloat> @llvm.nvvm.fmax.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)
249   ret <2 x bfloat> %res
252 ; CHECK-LABEL: fmax_nan_bf16x2
253 define <2 x bfloat> @fmax_nan_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {
254   ; CHECK-NOT: call
255   ; CHECK: max.NaN.bf16x2
256   %res = call <2 x bfloat> @llvm.nvvm.fmax.nan.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)
257   ret <2 x bfloat> %res
260 ; CHECK-LABEL: fma_rn_relu_f16
261 define half @fma_rn_relu_f16(half %0, half %1, half %2) {
262   ; CHECK-NOT: call
263   ; CHECK: fma.rn.relu.f16
264   %res = call half @llvm.nvvm.fma.rn.relu.f16(half %0, half %1, half %2)
265   ret half %res
268 ; CHECK-LABEL: fma_rn_ftz_relu_f16
269 define half @fma_rn_ftz_relu_f16(half %0, half %1, half %2) {
270   ; CHECK-NOT: call
271   ; CHECK: fma.rn.ftz.relu.f16
272   %res = call half @llvm.nvvm.fma.rn.ftz.relu.f16(half %0, half %1, half %2)
273   ret half %res
276 ; CHECK-LABEL: fma_rn_relu_f16x2
277 define <2 x half> @fma_rn_relu_f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2) {
278   ; CHECK-NOT: call
279   ; CHECK: fma.rn.relu.f16x2
280   %res = call <2 x half> @llvm.nvvm.fma.rn.relu.f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2)
281   ret <2 x half> %res
284 ; CHECK-LABEL: fma_rn_ftz_relu_f16x2
285 define <2 x half> @fma_rn_ftz_relu_f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2) {
286   ; CHECK-NOT: call
287   ; CHECK: fma.rn.ftz.relu.f16x2
288   %res = call <2 x half> @llvm.nvvm.fma.rn.ftz.relu.f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2)
289   ret <2 x half> %res
292 ; CHECK-LABEL: fma_rn_bf16
293 define bfloat @fma_rn_bf16(bfloat %0, bfloat %1, bfloat %2) {
294   ; CHECK-NOT: call
295   ; CHECK: fma.rn.bf16
296   %res = call bfloat @llvm.nvvm.fma.rn.bf16(bfloat %0, bfloat %1, bfloat %2)
297   ret bfloat %res
300 ; CHECK-LABEL: fma_rn_relu_bf16
301 define bfloat @fma_rn_relu_bf16(bfloat %0, bfloat %1, bfloat %2) {
302   ; CHECK-NOT: call
303   ; CHECK: fma.rn.relu.bf16
304   %res = call bfloat @llvm.nvvm.fma.rn.relu.bf16(bfloat %0, bfloat %1, bfloat %2)
305   ret bfloat %res
308 ; CHECK-LABEL: fma_rn_bf16x2
309 define <2 x bfloat> @fma_rn_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1, <2 x bfloat> %2) {
310   ; CHECK-NOT: call
311   ; CHECK: fma.rn.bf16x2
312   %res = call <2 x bfloat> @llvm.nvvm.fma.rn.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1, <2 x bfloat> %2)
313   ret <2 x bfloat> %res
316 ; CHECK-LABEL: fma_rn_relu_bf16x2
317 define <2 x bfloat> @fma_rn_relu_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1, <2 x bfloat> %2) {
318   ; CHECK-NOT: call
319   ; CHECK: fma.rn.relu.bf16x2
320   %res = call <2 x bfloat> @llvm.nvvm.fma.rn.relu.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1, <2 x bfloat> %2)
321   ret <2 x bfloat> %res