; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 ; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_90 -mattr=+ptx81 | FileCheck %s ; RUN: %if ptxas-isa-8.1 %{ llc < %s -mtriple=nvptx64 -mcpu=sm_90 -mattr=+ptx81 | %ptxas-verify -arch=sm_90 %} define half @fma_oob_f16(half %a, half %b, half %c) { ; CHECK-LABEL: fma_oob_f16( ; CHECK: { ; CHECK-NEXT: .reg .b16 %rs<5>; ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: ld.param.b16 %rs1, [fma_oob_f16_param_0]; ; CHECK-NEXT: ld.param.b16 %rs2, [fma_oob_f16_param_1]; ; CHECK-NEXT: ld.param.b16 %rs3, [fma_oob_f16_param_2]; ; CHECK-NEXT: fma.rn.oob.f16 %rs4, %rs1, %rs2, %rs3; ; CHECK-NEXT: st.param.b16 [func_retval0], %rs4; ; CHECK-NEXT: ret; %1 = call half @llvm.nvvm.fma.rn.oob.f16(half %a, half %b, half %c) ret half %1 } define half @fma_oob_relu_f16(half %a, half %b, half %c) { ; CHECK-LABEL: fma_oob_relu_f16( ; CHECK: { ; CHECK-NEXT: .reg .b16 %rs<5>; ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: ld.param.b16 %rs1, [fma_oob_relu_f16_param_0]; ; CHECK-NEXT: ld.param.b16 %rs2, [fma_oob_relu_f16_param_1]; ; CHECK-NEXT: ld.param.b16 %rs3, [fma_oob_relu_f16_param_2]; ; CHECK-NEXT: fma.rn.oob.relu.f16 %rs4, %rs1, %rs2, %rs3; ; CHECK-NEXT: st.param.b16 [func_retval0], %rs4; ; CHECK-NEXT: ret; %1 = call half @llvm.nvvm.fma.rn.oob.relu.f16(half %a, half %b, half %c) ret half %1 } define <2 x half> @fma_oob_f16x2(<2 x half> %a, <2 x half> %b, <2 x half> %c) { ; CHECK-LABEL: fma_oob_f16x2( ; CHECK: { ; CHECK-NEXT: .reg .b32 %r<5>; ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: ld.param.b32 %r1, [fma_oob_f16x2_param_0]; ; CHECK-NEXT: ld.param.b32 %r2, [fma_oob_f16x2_param_1]; ; CHECK-NEXT: ld.param.b32 %r3, [fma_oob_f16x2_param_2]; ; CHECK-NEXT: fma.rn.oob.f16x2 %r4, %r1, %r2, %r3; ; CHECK-NEXT: st.param.b32 [func_retval0], %r4; ; CHECK-NEXT: ret; %1 = call <2 x half> @llvm.nvvm.fma.rn.oob.v2f16( <2 x half> %a, <2 x half> %b, <2 x half> %c) ret <2 x half> %1 } define <2 x half> @fma_oob_relu_f16x2(<2 x half> %a, <2 x half> %b, <2 x half> %c) { ; CHECK-LABEL: fma_oob_relu_f16x2( ; CHECK: { ; CHECK-NEXT: .reg .b32 %r<5>; ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: ld.param.b32 %r1, [fma_oob_relu_f16x2_param_0]; ; CHECK-NEXT: ld.param.b32 %r2, [fma_oob_relu_f16x2_param_1]; ; CHECK-NEXT: ld.param.b32 %r3, [fma_oob_relu_f16x2_param_2]; ; CHECK-NEXT: fma.rn.oob.relu.f16x2 %r4, %r1, %r2, %r3; ; CHECK-NEXT: st.param.b32 [func_retval0], %r4; ; CHECK-NEXT: ret; %1 = call <2 x half> @llvm.nvvm.fma.rn.oob.relu.v2f16( <2 x half> %a, <2 x half> %b, <2 x half> %c) ret <2 x half> %1 } define bfloat @fma_oob_bf16(bfloat %a, bfloat %b, bfloat %c) { ; CHECK-LABEL: fma_oob_bf16( ; CHECK: { ; CHECK-NEXT: .reg .b16 %rs<5>; ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: ld.param.b16 %rs1, [fma_oob_bf16_param_0]; ; CHECK-NEXT: ld.param.b16 %rs2, [fma_oob_bf16_param_1]; ; CHECK-NEXT: ld.param.b16 %rs3, [fma_oob_bf16_param_2]; ; CHECK-NEXT: fma.rn.oob.bf16 %rs4, %rs1, %rs2, %rs3; ; CHECK-NEXT: st.param.b16 [func_retval0], %rs4; ; CHECK-NEXT: ret; %1 = call bfloat @llvm.nvvm.fma.rn.oob.bf16(bfloat %a, bfloat %b, bfloat %c) ret bfloat %1 } define bfloat @fma_oob_relu_bf16(bfloat %a, bfloat %b, bfloat %c) { ; CHECK-LABEL: fma_oob_relu_bf16( ; CHECK: { ; CHECK-NEXT: .reg .b16 %rs<5>; ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: ld.param.b16 %rs1, [fma_oob_relu_bf16_param_0]; ; CHECK-NEXT: ld.param.b16 %rs2, [fma_oob_relu_bf16_param_1]; ; CHECK-NEXT: ld.param.b16 %rs3, [fma_oob_relu_bf16_param_2]; ; CHECK-NEXT: fma.rn.oob.relu.bf16 %rs4, %rs1, %rs2, %rs3; ; CHECK-NEXT: st.param.b16 [func_retval0], %rs4; ; CHECK-NEXT: ret; %1 = call bfloat @llvm.nvvm.fma.rn.oob.relu.bf16(bfloat %a, bfloat %b, bfloat %c) ret bfloat %1 } define <2 x bfloat> @fma_oob_bf16x2(<2 x bfloat> %a, <2 x bfloat> %b, <2 x bfloat> %c) { ; CHECK-LABEL: fma_oob_bf16x2( ; CHECK: { ; CHECK-NEXT: .reg .b32 %r<5>; ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: ld.param.b32 %r1, [fma_oob_bf16x2_param_0]; ; CHECK-NEXT: ld.param.b32 %r2, [fma_oob_bf16x2_param_1]; ; CHECK-NEXT: ld.param.b32 %r3, [fma_oob_bf16x2_param_2]; ; CHECK-NEXT: fma.rn.oob.bf16x2 %r4, %r1, %r2, %r3; ; CHECK-NEXT: st.param.b32 [func_retval0], %r4; ; CHECK-NEXT: ret; %1 = call <2 x bfloat> @llvm.nvvm.fma.rn.oob.v2bf16( <2 x bfloat> %a, <2 x bfloat> %b, <2 x bfloat> %c) ret <2 x bfloat> %1 } define <2 x bfloat> @fma_oob_relu_bf16x2(<2 x bfloat> %a, <2 x bfloat> %b, <2 x bfloat> %c) { ; CHECK-LABEL: fma_oob_relu_bf16x2( ; CHECK: { ; CHECK-NEXT: .reg .b32 %r<5>; ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: ; CHECK-NEXT: ld.param.b32 %r1, [fma_oob_relu_bf16x2_param_0]; ; CHECK-NEXT: ld.param.b32 %r2, [fma_oob_relu_bf16x2_param_1]; ; CHECK-NEXT: ld.param.b32 %r3, [fma_oob_relu_bf16x2_param_2]; ; CHECK-NEXT: fma.rn.oob.relu.bf16x2 %r4, %r1, %r2, %r3; ; CHECK-NEXT: st.param.b32 [func_retval0], %r4; ; CHECK-NEXT: ret; %1 = call <2 x bfloat> @llvm.nvvm.fma.rn.oob.relu.v2bf16( <2 x bfloat> %a, <2 x bfloat> %b, <2 x bfloat> %c) ret <2 x bfloat> %1 }