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
|
; RUN: llc < %s -march=nvptx64 -mcpu=sm_53 -mattr=+ptx42 | FileCheck %s
; RUN: %if ptxas %{ llc < %s -march=nvptx64 -mcpu=sm_53 -mattr=+ptx42 | %ptxas-verify -arch=sm_53 %}
declare half @llvm.nvvm.fma.rn.f16(half, half, half)
declare half @llvm.nvvm.fma.rn.ftz.f16(half, half, half)
declare half @llvm.nvvm.fma.rn.sat.f16(half, half, half)
declare half @llvm.nvvm.fma.rn.ftz.sat.f16(half, half, half)
declare <2 x half> @llvm.nvvm.fma.rn.f16x2(<2 x half>, <2 x half>, <2 x half>)
declare <2 x half> @llvm.nvvm.fma.rn.ftz.f16x2(<2 x half>, <2 x half>, <2 x half>)
declare <2 x half> @llvm.nvvm.fma.rn.sat.f16x2(<2 x half>, <2 x half>, <2 x half>)
declare <2 x half> @llvm.nvvm.fma.rn.ftz.sat.f16x2(<2 x half>, <2 x half>, <2 x half>)
; CHECK-LABEL: fma_rn_f16
define half @fma_rn_f16(half %0, half %1, half %2) {
; CHECK-NOT: call
; CHECK: fma.rn.f16
%res = call half @llvm.nvvm.fma.rn.f16(half %0, half %1, half %2)
ret half %res
}
; CHECK-LABEL: fma_rn_ftz_f16
define half @fma_rn_ftz_f16(half %0, half %1, half %2) {
; CHECK-NOT: call
; CHECK: fma.rn.ftz.f16
%res = call half @llvm.nvvm.fma.rn.ftz.f16(half %0, half %1, half %2)
ret half %res
}
; CHECK-LABEL: fma_rn_sat_f16
define half @fma_rn_sat_f16(half %0, half %1, half %2) {
; CHECK-NOT: call
; CHECK: fma.rn.sat.f16
%res = call half @llvm.nvvm.fma.rn.sat.f16(half %0, half %1, half %2)
ret half %res
}
; CHECK-LABEL: fma_rn_ftz_sat_f16
define half @fma_rn_ftz_sat_f16(half %0, half %1, half %2) {
; CHECK-NOT: call
; CHECK: fma.rn.ftz.sat.f16
%res = call half @llvm.nvvm.fma.rn.ftz.sat.f16(half %0, half %1, half %2)
ret half %res
}
; CHECK-LABEL: fma_rn_f16x2
define <2 x half> @fma_rn_f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2) {
; CHECK-NOT: call
; CHECK: fma.rn.f16x2
%res = call <2 x half> @llvm.nvvm.fma.rn.f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2)
ret <2 x half> %res
}
; CHECK-LABEL: fma_rn_ftz_f16x2
define <2 x half> @fma_rn_ftz_f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2) {
; CHECK-NOT: call
; CHECK: fma.rn.ftz.f16x2
%res = call <2 x half> @llvm.nvvm.fma.rn.ftz.f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2)
ret <2 x half> %res
}
; CHECK-LABEL: fma_rn_sat_f16x2
define <2 x half> @fma_rn_sat_f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2) {
; CHECK-NOT: call
; CHECK: fma.rn.sat.f16x2
%res = call <2 x half> @llvm.nvvm.fma.rn.sat.f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2)
ret <2 x half> %res
}
; CHECK-LABEL: fma_rn_ftz_sat_f16x2
define <2 x half> @fma_rn_ftz_sat_f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2) {
; CHECK-NOT: call
; CHECK: fma.rn.ftz.sat.f16x2
%res = call <2 x half> @llvm.nvvm.fma.rn.ftz.sat.f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2)
ret <2 x half> %res
}
|