1
- ; RUN: llc < %s | FileCheck %s
1
+ ; RUN: llc < %s | FileCheck %s --check-prefixes=CHECK,CHECK-NOF16
2
+ ; RUN: llc < %s -mcpu=sm_80 | FileCheck %s --check-prefixes=CHECK,CHECK-F16
3
+ ; RUN: llc < %s -mcpu=sm_80 --nvptx-no-f16-math | FileCheck %s --check-prefixes=CHECK,CHECK-NOF16
2
4
target triple = "nvptx64-nvidia-cuda"
3
5
4
6
; Checks that llvm intrinsics for math functions are correctly lowered to PTX.
@@ -17,10 +19,14 @@ declare float @llvm.trunc.f32(float) #0
17
19
declare double @llvm.trunc.f64 (double ) #0
18
20
declare float @llvm.fabs.f32 (float ) #0
19
21
declare double @llvm.fabs.f64 (double ) #0
22
+ declare half @llvm.minnum.f16 (half , half ) #0
20
23
declare float @llvm.minnum.f32 (float , float ) #0
21
24
declare double @llvm.minnum.f64 (double , double ) #0
25
+ declare <2 x half > @llvm.minnum.v2f16 (<2 x half >, <2 x half >) #0
26
+ declare half @llvm.maxnum.f16 (half , half ) #0
22
27
declare float @llvm.maxnum.f32 (float , float ) #0
23
28
declare double @llvm.maxnum.f64 (double , double ) #0
29
+ declare <2 x half > @llvm.maxnum.v2f16 (<2 x half >, <2 x half >) #0
24
30
declare float @llvm.fma.f32 (float , float , float ) #0
25
31
declare double @llvm.fma.f64 (double , double , double ) #0
26
32
@@ -193,6 +199,14 @@ define double @abs_double(double %a) {
193
199
194
200
; ---- min ----
195
201
202
+ ; CHECK-LABEL: min_half
203
+ define half @min_half (half %a , half %b ) {
204
+ ; CHECK-NOF16: min.f32
205
+ ; CHECK-F16: min.f16
206
+ %x = call half @llvm.minnum.f16 (half %a , half %b )
207
+ ret half %x
208
+ }
209
+
196
210
; CHECK-LABEL: min_float
197
211
define float @min_float (float %a , float %b ) {
198
212
; CHECK: min.f32
@@ -228,8 +242,25 @@ define double @min_double(double %a, double %b) {
228
242
ret double %x
229
243
}
230
244
245
+ ; CHECK-LABEL: min_v2half
246
+ define <2 x half > @min_v2half (<2 x half > %a , <2 x half > %b ) {
247
+ ; CHECK-NOF16: min.f32
248
+ ; CHECK-NOF16: min.f32
249
+ ; CHECK-F16: min.f16x2
250
+ %x = call <2 x half > @llvm.minnum.v2f16 (<2 x half > %a , <2 x half > %b )
251
+ ret <2 x half > %x
252
+ }
253
+
231
254
; ---- max ----
232
255
256
+ ; CHECK-LABEL: max_half
257
+ define half @max_half (half %a , half %b ) {
258
+ ; CHECK-NOF16: max.f32
259
+ ; CHECK-F16: max.f16
260
+ %x = call half @llvm.maxnum.f16 (half %a , half %b )
261
+ ret half %x
262
+ }
263
+
233
264
; CHECK-LABEL: max_imm1
234
265
define float @max_imm1 (float %a ) {
235
266
; CHECK: max.f32
@@ -265,6 +296,15 @@ define double @max_double(double %a, double %b) {
265
296
ret double %x
266
297
}
267
298
299
+ ; CHECK-LABEL: max_v2half
300
+ define <2 x half > @max_v2half (<2 x half > %a , <2 x half > %b ) {
301
+ ; CHECK-NOF16: max.f32
302
+ ; CHECK-NOF16: max.f32
303
+ ; CHECK-F16: max.f16x2
304
+ %x = call <2 x half > @llvm.maxnum.v2f16 (<2 x half > %a , <2 x half > %b )
305
+ ret <2 x half > %x
306
+ }
307
+
268
308
; ---- fma ----
269
309
270
310
; CHECK-LABEL: @fma_float
0 commit comments