[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / NVPTX / math-intrins-sm86-ptx72-autoupgrade.ll
blobb745df484bab22282c5171aeba4397528256f1da
1 ; RUN: llc < %s -march=nvptx64 -mcpu=sm_86 -mattr=+ptx72 | FileCheck %s
2 ; RUN: %if ptxas-11.2 %{ llc < %s -march=nvptx64 -mcpu=sm_86 -mattr=+ptx72 | %ptxas-verify -arch=sm_86 %}
4 declare half @llvm.nvvm.fmin.xorsign.abs.f16(half, half)
5 declare half @llvm.nvvm.fmin.ftz.xorsign.abs.f16(half, half)
6 declare half @llvm.nvvm.fmin.nan.xorsign.abs.f16(half, half)
7 declare half @llvm.nvvm.fmin.ftz.nan.xorsign.abs.f16(half, half)
8 declare <2 x half> @llvm.nvvm.fmin.xorsign.abs.f16x2(<2 x half> , <2 x half>)
9 declare <2 x half> @llvm.nvvm.fmin.ftz.xorsign.abs.f16x2(<2 x half> , <2 x half>)
10 declare <2 x half> @llvm.nvvm.fmin.nan.xorsign.abs.f16x2(<2 x half> , <2 x half>)
11 declare <2 x half> @llvm.nvvm.fmin.ftz.nan.xorsign.abs.f16x2(<2 x half> , <2 x half>)
12 declare i16 @llvm.nvvm.fmin.xorsign.abs.bf16(i16, i16)
13 declare i16 @llvm.nvvm.fmin.nan.xorsign.abs.bf16(i16, i16)
14 declare i32 @llvm.nvvm.fmin.xorsign.abs.bf16x2(i32, i32)
15 declare i32 @llvm.nvvm.fmin.nan.xorsign.abs.bf16x2(i32, i32)
16 declare float @llvm.nvvm.fmin.xorsign.abs.f(float, float)
17 declare float @llvm.nvvm.fmin.ftz.xorsign.abs.f(float, float)
18 declare float @llvm.nvvm.fmin.nan.xorsign.abs.f(float, float)
19 declare float @llvm.nvvm.fmin.ftz.nan.xorsign.abs.f(float, float)
21 declare half @llvm.nvvm.fmax.xorsign.abs.f16(half, half)
22 declare half @llvm.nvvm.fmax.ftz.xorsign.abs.f16(half, half)
23 declare half @llvm.nvvm.fmax.nan.xorsign.abs.f16(half, half)
24 declare half @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f16(half, half)
25 declare <2 x half> @llvm.nvvm.fmax.xorsign.abs.f16x2(<2 x half> , <2 x half>)
26 declare <2 x half> @llvm.nvvm.fmax.ftz.xorsign.abs.f16x2(<2 x half> , <2 x half>)
27 declare <2 x half> @llvm.nvvm.fmax.nan.xorsign.abs.f16x2(<2 x half> , <2 x half>)
28 declare <2 x half> @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f16x2(<2 x half> , <2 x half>)
29 declare i16 @llvm.nvvm.fmax.xorsign.abs.bf16(i16, i16)
30 declare i16 @llvm.nvvm.fmax.nan.xorsign.abs.bf16(i16, i16)
31 declare i32 @llvm.nvvm.fmax.xorsign.abs.bf16x2(i32, i32)
32 declare i32 @llvm.nvvm.fmax.nan.xorsign.abs.bf16x2(i32, i32)
33 declare float @llvm.nvvm.fmax.xorsign.abs.f(float, float)
34 declare float @llvm.nvvm.fmax.ftz.xorsign.abs.f(float, float)
35 declare float @llvm.nvvm.fmax.nan.xorsign.abs.f(float, float)
36 declare float @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f(float, float)
38 ; CHECK-LABEL: fmin_xorsign_abs_f16
39 define half @fmin_xorsign_abs_f16(half %0, half %1) {
40   ; CHECK-NOT: call
41   ; CHECK: min.xorsign.abs.f16
42   %res = call half @llvm.nvvm.fmin.xorsign.abs.f16(half %0, half %1)
43   ret half %res
46 ; CHECK-LABEL: fmin_ftz_xorsign_abs_f16
47 define half @fmin_ftz_xorsign_abs_f16(half %0, half %1) {
48   ; CHECK-NOT: call
49   ; CHECK: min.ftz.xorsign.abs.f16
50   %res = call half @llvm.nvvm.fmin.ftz.xorsign.abs.f16(half %0, half %1)
51   ret half %res
54 ; CHECK-LABEL: fmin_nan_xorsign_abs_f16
55 define half @fmin_nan_xorsign_abs_f16(half %0, half %1) {
56   ; CHECK-NOT: call
57   ; CHECK: min.NaN.xorsign.abs.f16
58   %res = call half @llvm.nvvm.fmin.nan.xorsign.abs.f16(half %0, half %1)
59   ret half %res
62 ; CHECK-LABEL: fmin_ftz_nan_xorsign_abs_f16
63 define half @fmin_ftz_nan_xorsign_abs_f16(half %0, half %1) {
64   ; CHECK-NOT: call
65   ; CHECK: min.ftz.NaN.xorsign.abs.f16
66   %res = call half @llvm.nvvm.fmin.ftz.nan.xorsign.abs.f16(half %0, half %1)
67   ret half %res
70 ; CHECK-LABEL: fmin_xorsign_abs_f16x2
71 define <2 x half> @fmin_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {
72   ; CHECK-NOT: call
73   ; CHECK: min.xorsign.abs.f16x2
74   %res = call <2 x half> @llvm.nvvm.fmin.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)
75   ret <2 x half> %res
78 ; CHECK-LABEL: fmin_ftz_xorsign_abs_f16x2
79 define <2 x half> @fmin_ftz_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {
80   ; CHECK-NOT: call
81   ; CHECK: min.ftz.xorsign.abs.f16x2
82   %res = call <2 x half> @llvm.nvvm.fmin.ftz.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)
83   ret <2 x half> %res
86 ; CHECK-LABEL: fmin_nan_xorsign_abs_f16x2
87 define <2 x half> @fmin_nan_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {
88   ; CHECK-NOT: call
89   ; CHECK: min.NaN.xorsign.abs.f16x2
90   %res = call <2 x half> @llvm.nvvm.fmin.nan.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)
91   ret <2 x half> %res
94 ; CHECK-LABEL: fmin_ftz_nan_xorsign_abs_f16x2
95 define <2 x half> @fmin_ftz_nan_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {
96   ; CHECK-NOT: call
97   ; CHECK: min.ftz.NaN.xorsign.abs.f16x2
98   %res = call <2 x half> @llvm.nvvm.fmin.ftz.nan.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)
99   ret <2 x half> %res
102 ; CHECK-LABEL: fmin_xorsign_abs_bf16
103 define i16 @fmin_xorsign_abs_bf16(i16 %0, i16 %1) {
104   ; CHECK-NOT: call
105   ; CHECK: min.xorsign.abs.bf16
106   %res = call i16 @llvm.nvvm.fmin.xorsign.abs.bf16(i16 %0, i16 %1)
107   ret i16 %res
110 ; CHECK-LABEL: fmin_nan_xorsign_abs_bf16
111 define i16 @fmin_nan_xorsign_abs_bf16(i16 %0, i16 %1) {
112   ; CHECK-NOT: call
113   ; CHECK: min.NaN.xorsign.abs.bf16
114   %res = call i16 @llvm.nvvm.fmin.nan.xorsign.abs.bf16(i16 %0, i16 %1)
115   ret i16 %res
118 ; CHECK-LABEL: fmin_xorsign_abs_bf16x2
119 define i32 @fmin_xorsign_abs_bf16x2(i32 %0, i32 %1) {
120   ; CHECK-NOT: call
121   ; CHECK: min.xorsign.abs.bf16x2
122   %res = call i32 @llvm.nvvm.fmin.xorsign.abs.bf16x2(i32 %0, i32 %1)
123   ret i32 %res
126 ; CHECK-LABEL: fmin_nan_xorsign_abs_bf16x2
127 define i32 @fmin_nan_xorsign_abs_bf16x2(i32 %0, i32 %1) {
128   ; CHECK-NOT: call
129   ; CHECK: min.NaN.xorsign.abs.bf16x2
130   %res = call i32 @llvm.nvvm.fmin.nan.xorsign.abs.bf16x2(i32 %0, i32 %1)
131   ret i32 %res
134 ; CHECK-LABEL: fmin_xorsign_abs_f
135 define float @fmin_xorsign_abs_f(float %0, float %1) {
136   ; CHECK-NOT: call
137   ; CHECK: min.xorsign.abs.f
138   %res = call float @llvm.nvvm.fmin.xorsign.abs.f(float %0, float %1)
139   ret float %res
142 ; CHECK-LABEL: fmin_ftz_xorsign_abs_f
143 define float @fmin_ftz_xorsign_abs_f(float %0, float %1) {
144   ; CHECK-NOT: call
145   ; CHECK: min.ftz.xorsign.abs.f
146   %res = call float @llvm.nvvm.fmin.ftz.xorsign.abs.f(float %0, float %1)
147   ret float %res
150 ; CHECK-LABEL: fmin_nan_xorsign_abs_f
151 define float @fmin_nan_xorsign_abs_f(float %0, float %1) {
152   ; CHECK-NOT: call
153   ; CHECK: min.NaN.xorsign.abs.f
154   %res = call float @llvm.nvvm.fmin.nan.xorsign.abs.f(float %0, float %1)
155   ret float %res
158 ; CHECK-LABEL: fmin_ftz_nan_xorsign_abs_f
159 define float @fmin_ftz_nan_xorsign_abs_f(float %0, float %1) {
160   ; CHECK-NOT: call
161   ; CHECK: min.ftz.NaN.xorsign.abs.f
162   %res = call float @llvm.nvvm.fmin.ftz.nan.xorsign.abs.f(float %0, float %1)
163   ret float %res
166 ; CHECK-LABEL: fmax_xorsign_abs_f16
167 define half @fmax_xorsign_abs_f16(half %0, half %1) {
168   ; CHECK-NOT: call
169   ; CHECK: max.xorsign.abs.f16
170   %res = call half @llvm.nvvm.fmax.xorsign.abs.f16(half %0, half %1)
171   ret half %res
174 ; CHECK-LABEL: fmax_ftz_xorsign_abs_f16
175 define half @fmax_ftz_xorsign_abs_f16(half %0, half %1) {
176   ; CHECK-NOT: call
177   ; CHECK: max.ftz.xorsign.abs.f16
178   %res = call half @llvm.nvvm.fmax.ftz.xorsign.abs.f16(half %0, half %1)
179   ret half %res
182 ; CHECK-LABEL: fmax_nan_xorsign_abs_f16
183 define half @fmax_nan_xorsign_abs_f16(half %0, half %1) {
184   ; CHECK-NOT: call
185   ; CHECK: max.NaN.xorsign.abs.f16
186   %res = call half @llvm.nvvm.fmax.nan.xorsign.abs.f16(half %0, half %1)
187   ret half %res
190 ; CHECK-LABEL: fmax_ftz_nan_xorsign_abs_f16
191 define half @fmax_ftz_nan_xorsign_abs_f16(half %0, half %1) {
192   ; CHECK-NOT: call
193   ; CHECK: max.ftz.NaN.xorsign.abs.f16
194   %res = call half @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f16(half %0, half %1)
195   ret half %res
198 ; CHECK-LABEL: fmax_xorsign_abs_f16x2
199 define <2 x half> @fmax_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {
200   ; CHECK-NOT: call
201   ; CHECK: max.xorsign.abs.f16x2
202   %res = call <2 x half> @llvm.nvvm.fmax.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)
203   ret <2 x half> %res
206 ; CHECK-LABEL: fmax_ftz_xorsign_abs_f16x2
207 define <2 x half> @fmax_ftz_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {
208   ; CHECK-NOT: call
209   ; CHECK: max.ftz.xorsign.abs.f16x2
210   %res = call <2 x half> @llvm.nvvm.fmax.ftz.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)
211   ret <2 x half> %res
214 ; CHECK-LABEL: fmax_nan_xorsign_abs_f16x2
215 define <2 x half> @fmax_nan_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {
216   ; CHECK-NOT: call
217   ; CHECK: max.NaN.xorsign.abs.f16x2
218   %res = call <2 x half> @llvm.nvvm.fmax.nan.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)
219   ret <2 x half> %res
222 ; CHECK-LABEL: fmax_ftz_nan_xorsign_abs_f16x2
223 define <2 x half> @fmax_ftz_nan_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {
224   ; CHECK-NOT: call
225   ; CHECK: max.ftz.NaN.xorsign.abs.f16x2
226   %res = call <2 x half> @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)
227   ret <2 x half> %res
230 ; CHECK-LABEL: fmax_xorsign_abs_bf16
231 define i16 @fmax_xorsign_abs_bf16(i16 %0, i16 %1) {
232   ; CHECK-NOT: call
233   ; CHECK: max.xorsign.abs.bf16
234   %res = call i16 @llvm.nvvm.fmax.xorsign.abs.bf16(i16 %0, i16 %1)
235   ret i16 %res
238 ; CHECK-LABEL: fmax_nan_xorsign_abs_bf16
239 define i16 @fmax_nan_xorsign_abs_bf16(i16 %0, i16 %1) {
240   ; CHECK-NOT: call
241   ; CHECK: max.NaN.xorsign.abs.bf16
242   %res = call i16 @llvm.nvvm.fmax.nan.xorsign.abs.bf16(i16 %0, i16 %1)
243   ret i16 %res
246 ; CHECK-LABEL: fmax_xorsign_abs_bf16x2
247 define i32 @fmax_xorsign_abs_bf16x2(i32 %0, i32 %1) {
248   ; CHECK-NOT: call
249   ; CHECK: max.xorsign.abs.bf16x2
250   %res = call i32 @llvm.nvvm.fmax.xorsign.abs.bf16x2(i32 %0, i32 %1)
251   ret i32 %res
254 ; CHECK-LABEL: fmax_nan_xorsign_abs_bf16x2
255 define i32 @fmax_nan_xorsign_abs_bf16x2(i32 %0, i32 %1) {
256   ; CHECK-NOT: call
257   ; CHECK: max.NaN.xorsign.abs.bf16x2
258   %res = call i32 @llvm.nvvm.fmax.nan.xorsign.abs.bf16x2(i32 %0, i32 %1)
259   ret i32 %res
262 ; CHECK-LABEL: fmax_xorsign_abs_f
263 define float @fmax_xorsign_abs_f(float %0, float %1) {
264   ; CHECK-NOT: call
265   ; CHECK: max.xorsign.abs.f
266   %res = call float @llvm.nvvm.fmax.xorsign.abs.f(float %0, float %1)
267   ret float %res
270 ; CHECK-LABEL: fmax_ftz_xorsign_abs_f
271 define float @fmax_ftz_xorsign_abs_f(float %0, float %1) {
272   ; CHECK-NOT: call
273   ; CHECK: max.ftz.xorsign.abs.f
274   %res = call float @llvm.nvvm.fmax.ftz.xorsign.abs.f(float %0, float %1)
275   ret float %res
278 ; CHECK-LABEL: fmax_nan_xorsign_abs_f
279 define float @fmax_nan_xorsign_abs_f(float %0, float %1) {
280   ; CHECK-NOT: call
281   ; CHECK: max.NaN.xorsign.abs.f
282   %res = call float @llvm.nvvm.fmax.nan.xorsign.abs.f(float %0, float %1)
283   ret float %res
286 ; CHECK-LABEL: fmax_ftz_nan_xorsign_abs_f
287 define float @fmax_ftz_nan_xorsign_abs_f(float %0, float %1) {
288   ; CHECK-NOT: call
289   ; CHECK: max.ftz.NaN.xorsign.abs.f
290   %res = call float @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f(float %0, float %1)
291   ret float %res