293 lines · plain
1; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_86 -mattr=+ptx72 | FileCheck %s2; RUN: %if ptxas-sm_86 && ptxas-isa-7.2 %{ llc < %s -mtriple=nvptx64 -mcpu=sm_86 -mattr=+ptx72 | %ptxas-verify -arch=sm_86 %}3 4declare half @llvm.nvvm.fmin.xorsign.abs.f16(half, half)5declare half @llvm.nvvm.fmin.ftz.xorsign.abs.f16(half, half)6declare half @llvm.nvvm.fmin.nan.xorsign.abs.f16(half, half)7declare half @llvm.nvvm.fmin.ftz.nan.xorsign.abs.f16(half, half)8declare <2 x half> @llvm.nvvm.fmin.xorsign.abs.f16x2(<2 x half> , <2 x half>)9declare <2 x half> @llvm.nvvm.fmin.ftz.xorsign.abs.f16x2(<2 x half> , <2 x half>)10declare <2 x half> @llvm.nvvm.fmin.nan.xorsign.abs.f16x2(<2 x half> , <2 x half>)11declare <2 x half> @llvm.nvvm.fmin.ftz.nan.xorsign.abs.f16x2(<2 x half> , <2 x half>)12declare bfloat @llvm.nvvm.fmin.xorsign.abs.bf16(bfloat, bfloat)13declare bfloat @llvm.nvvm.fmin.nan.xorsign.abs.bf16(bfloat, bfloat)14declare <2 x bfloat> @llvm.nvvm.fmin.xorsign.abs.bf16x2(<2 x bfloat>, <2 x bfloat>)15declare <2 x bfloat> @llvm.nvvm.fmin.nan.xorsign.abs.bf16x2(<2 x bfloat>, <2 x bfloat>)16declare float @llvm.nvvm.fmin.xorsign.abs.f(float, float)17declare float @llvm.nvvm.fmin.ftz.xorsign.abs.f(float, float)18declare float @llvm.nvvm.fmin.nan.xorsign.abs.f(float, float)19declare float @llvm.nvvm.fmin.ftz.nan.xorsign.abs.f(float, float)20 21declare half @llvm.nvvm.fmax.xorsign.abs.f16(half, half)22declare half @llvm.nvvm.fmax.ftz.xorsign.abs.f16(half, half)23declare half @llvm.nvvm.fmax.nan.xorsign.abs.f16(half, half)24declare half @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f16(half, half)25declare <2 x half> @llvm.nvvm.fmax.xorsign.abs.f16x2(<2 x half> , <2 x half>)26declare <2 x half> @llvm.nvvm.fmax.ftz.xorsign.abs.f16x2(<2 x half> , <2 x half>)27declare <2 x half> @llvm.nvvm.fmax.nan.xorsign.abs.f16x2(<2 x half> , <2 x half>)28declare <2 x half> @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f16x2(<2 x half> , <2 x half>)29declare bfloat @llvm.nvvm.fmax.xorsign.abs.bf16(bfloat, bfloat)30declare bfloat @llvm.nvvm.fmax.nan.xorsign.abs.bf16(bfloat, bfloat)31declare <2 x bfloat> @llvm.nvvm.fmax.xorsign.abs.bf16x2(<2 x bfloat>, <2 x bfloat>)32declare <2 x bfloat> @llvm.nvvm.fmax.nan.xorsign.abs.bf16x2(<2 x bfloat>, <2 x bfloat>)33declare float @llvm.nvvm.fmax.xorsign.abs.f(float, float)34declare float @llvm.nvvm.fmax.ftz.xorsign.abs.f(float, float)35declare float @llvm.nvvm.fmax.nan.xorsign.abs.f(float, float)36declare float @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f(float, float)37 38; CHECK-LABEL: fmin_xorsign_abs_f1639define half @fmin_xorsign_abs_f16(half %0, half %1) {40 ; CHECK-NOT: call41 ; CHECK: min.xorsign.abs.f1642 %res = call half @llvm.nvvm.fmin.xorsign.abs.f16(half %0, half %1)43 ret half %res44}45 46; CHECK-LABEL: fmin_ftz_xorsign_abs_f1647define half @fmin_ftz_xorsign_abs_f16(half %0, half %1) {48 ; CHECK-NOT: call49 ; CHECK: min.ftz.xorsign.abs.f1650 %res = call half @llvm.nvvm.fmin.ftz.xorsign.abs.f16(half %0, half %1)51 ret half %res52}53 54; CHECK-LABEL: fmin_nan_xorsign_abs_f1655define half @fmin_nan_xorsign_abs_f16(half %0, half %1) {56 ; CHECK-NOT: call57 ; CHECK: min.NaN.xorsign.abs.f1658 %res = call half @llvm.nvvm.fmin.nan.xorsign.abs.f16(half %0, half %1)59 ret half %res60}61 62; CHECK-LABEL: fmin_ftz_nan_xorsign_abs_f1663define half @fmin_ftz_nan_xorsign_abs_f16(half %0, half %1) {64 ; CHECK-NOT: call65 ; CHECK: min.ftz.NaN.xorsign.abs.f1666 %res = call half @llvm.nvvm.fmin.ftz.nan.xorsign.abs.f16(half %0, half %1)67 ret half %res68}69 70; CHECK-LABEL: fmin_xorsign_abs_f16x271define <2 x half> @fmin_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {72 ; CHECK-NOT: call73 ; CHECK: min.xorsign.abs.f16x274 %res = call <2 x half> @llvm.nvvm.fmin.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)75 ret <2 x half> %res76}77 78; CHECK-LABEL: fmin_ftz_xorsign_abs_f16x279define <2 x half> @fmin_ftz_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {80 ; CHECK-NOT: call81 ; CHECK: min.ftz.xorsign.abs.f16x282 %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> %res84}85 86; CHECK-LABEL: fmin_nan_xorsign_abs_f16x287define <2 x half> @fmin_nan_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {88 ; CHECK-NOT: call89 ; CHECK: min.NaN.xorsign.abs.f16x290 %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> %res92}93 94; CHECK-LABEL: fmin_ftz_nan_xorsign_abs_f16x295define <2 x half> @fmin_ftz_nan_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {96 ; CHECK-NOT: call97 ; CHECK: min.ftz.NaN.xorsign.abs.f16x298 %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> %res100}101 102; CHECK-LABEL: fmin_xorsign_abs_bf16103define bfloat @fmin_xorsign_abs_bf16(bfloat %0, bfloat %1) {104 ; CHECK-NOT: call105 ; CHECK: min.xorsign.abs.bf16106 %res = call bfloat @llvm.nvvm.fmin.xorsign.abs.bf16(bfloat %0, bfloat %1)107 ret bfloat %res108}109 110; CHECK-LABEL: fmin_nan_xorsign_abs_bf16111define bfloat @fmin_nan_xorsign_abs_bf16(bfloat %0, bfloat %1) {112 ; CHECK-NOT: call113 ; CHECK: min.NaN.xorsign.abs.bf16114 %res = call bfloat @llvm.nvvm.fmin.nan.xorsign.abs.bf16(bfloat %0, bfloat %1)115 ret bfloat %res116}117 118; CHECK-LABEL: fmin_xorsign_abs_bf16x2119define <2 x bfloat> @fmin_xorsign_abs_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {120 ; CHECK-NOT: call121 ; CHECK: min.xorsign.abs.bf16x2122 %res = call <2 x bfloat> @llvm.nvvm.fmin.xorsign.abs.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)123 ret <2 x bfloat> %res124}125 126; CHECK-LABEL: fmin_nan_xorsign_abs_bf16x2127define <2 x bfloat> @fmin_nan_xorsign_abs_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {128 ; CHECK-NOT: call129 ; CHECK: min.NaN.xorsign.abs.bf16x2130 %res = call <2 x bfloat> @llvm.nvvm.fmin.nan.xorsign.abs.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)131 ret <2 x bfloat> %res132}133 134; CHECK-LABEL: fmin_xorsign_abs_f135define float @fmin_xorsign_abs_f(float %0, float %1) {136 ; CHECK-NOT: call137 ; CHECK: min.xorsign.abs.f138 %res = call float @llvm.nvvm.fmin.xorsign.abs.f(float %0, float %1)139 ret float %res140}141 142; CHECK-LABEL: fmin_ftz_xorsign_abs_f143define float @fmin_ftz_xorsign_abs_f(float %0, float %1) {144 ; CHECK-NOT: call145 ; CHECK: min.ftz.xorsign.abs.f146 %res = call float @llvm.nvvm.fmin.ftz.xorsign.abs.f(float %0, float %1)147 ret float %res148}149 150; CHECK-LABEL: fmin_nan_xorsign_abs_f151define float @fmin_nan_xorsign_abs_f(float %0, float %1) {152 ; CHECK-NOT: call153 ; CHECK: min.NaN.xorsign.abs.f154 %res = call float @llvm.nvvm.fmin.nan.xorsign.abs.f(float %0, float %1)155 ret float %res156}157 158; CHECK-LABEL: fmin_ftz_nan_xorsign_abs_f159define float @fmin_ftz_nan_xorsign_abs_f(float %0, float %1) {160 ; CHECK-NOT: call161 ; CHECK: min.ftz.NaN.xorsign.abs.f162 %res = call float @llvm.nvvm.fmin.ftz.nan.xorsign.abs.f(float %0, float %1)163 ret float %res164}165 166; CHECK-LABEL: fmax_xorsign_abs_f16167define half @fmax_xorsign_abs_f16(half %0, half %1) {168 ; CHECK-NOT: call169 ; CHECK: max.xorsign.abs.f16170 %res = call half @llvm.nvvm.fmax.xorsign.abs.f16(half %0, half %1)171 ret half %res172}173 174; CHECK-LABEL: fmax_ftz_xorsign_abs_f16175define half @fmax_ftz_xorsign_abs_f16(half %0, half %1) {176 ; CHECK-NOT: call177 ; CHECK: max.ftz.xorsign.abs.f16178 %res = call half @llvm.nvvm.fmax.ftz.xorsign.abs.f16(half %0, half %1)179 ret half %res180}181 182; CHECK-LABEL: fmax_nan_xorsign_abs_f16183define half @fmax_nan_xorsign_abs_f16(half %0, half %1) {184 ; CHECK-NOT: call185 ; CHECK: max.NaN.xorsign.abs.f16186 %res = call half @llvm.nvvm.fmax.nan.xorsign.abs.f16(half %0, half %1)187 ret half %res188}189 190; CHECK-LABEL: fmax_ftz_nan_xorsign_abs_f16191define half @fmax_ftz_nan_xorsign_abs_f16(half %0, half %1) {192 ; CHECK-NOT: call193 ; CHECK: max.ftz.NaN.xorsign.abs.f16194 %res = call half @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f16(half %0, half %1)195 ret half %res196}197 198; CHECK-LABEL: fmax_xorsign_abs_f16x2199define <2 x half> @fmax_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {200 ; CHECK-NOT: call201 ; CHECK: max.xorsign.abs.f16x2202 %res = call <2 x half> @llvm.nvvm.fmax.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)203 ret <2 x half> %res204}205 206; CHECK-LABEL: fmax_ftz_xorsign_abs_f16x2207define <2 x half> @fmax_ftz_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {208 ; CHECK-NOT: call209 ; CHECK: max.ftz.xorsign.abs.f16x2210 %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> %res212}213 214; CHECK-LABEL: fmax_nan_xorsign_abs_f16x2215define <2 x half> @fmax_nan_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {216 ; CHECK-NOT: call217 ; CHECK: max.NaN.xorsign.abs.f16x2218 %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> %res220}221 222; CHECK-LABEL: fmax_ftz_nan_xorsign_abs_f16x2223define <2 x half> @fmax_ftz_nan_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {224 ; CHECK-NOT: call225 ; CHECK: max.ftz.NaN.xorsign.abs.f16x2226 %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> %res228}229 230; CHECK-LABEL: fmax_xorsign_abs_bf16231define bfloat @fmax_xorsign_abs_bf16(bfloat %0, bfloat %1) {232 ; CHECK-NOT: call233 ; CHECK: max.xorsign.abs.bf16234 %res = call bfloat @llvm.nvvm.fmax.xorsign.abs.bf16(bfloat %0, bfloat %1)235 ret bfloat %res236}237 238; CHECK-LABEL: fmax_nan_xorsign_abs_bf16239define bfloat @fmax_nan_xorsign_abs_bf16(bfloat %0, bfloat %1) {240 ; CHECK-NOT: call241 ; CHECK: max.NaN.xorsign.abs.bf16242 %res = call bfloat @llvm.nvvm.fmax.nan.xorsign.abs.bf16(bfloat %0, bfloat %1)243 ret bfloat %res244}245 246; CHECK-LABEL: fmax_xorsign_abs_bf16x2247define <2 x bfloat> @fmax_xorsign_abs_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {248 ; CHECK-NOT: call249 ; CHECK: max.xorsign.abs.bf16x2250 %res = call <2 x bfloat> @llvm.nvvm.fmax.xorsign.abs.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)251 ret <2 x bfloat> %res252}253 254; CHECK-LABEL: fmax_nan_xorsign_abs_bf16x2255define <2 x bfloat> @fmax_nan_xorsign_abs_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {256 ; CHECK-NOT: call257 ; CHECK: max.NaN.xorsign.abs.bf16x2258 %res = call <2 x bfloat> @llvm.nvvm.fmax.nan.xorsign.abs.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)259 ret <2 x bfloat> %res260}261 262; CHECK-LABEL: fmax_xorsign_abs_f263define float @fmax_xorsign_abs_f(float %0, float %1) {264 ; CHECK-NOT: call265 ; CHECK: max.xorsign.abs.f266 %res = call float @llvm.nvvm.fmax.xorsign.abs.f(float %0, float %1)267 ret float %res268}269 270; CHECK-LABEL: fmax_ftz_xorsign_abs_f271define float @fmax_ftz_xorsign_abs_f(float %0, float %1) {272 ; CHECK-NOT: call273 ; CHECK: max.ftz.xorsign.abs.f274 %res = call float @llvm.nvvm.fmax.ftz.xorsign.abs.f(float %0, float %1)275 ret float %res276}277 278; CHECK-LABEL: fmax_nan_xorsign_abs_f279define float @fmax_nan_xorsign_abs_f(float %0, float %1) {280 ; CHECK-NOT: call281 ; CHECK: max.NaN.xorsign.abs.f282 %res = call float @llvm.nvvm.fmax.nan.xorsign.abs.f(float %0, float %1)283 ret float %res284}285 286; CHECK-LABEL: fmax_ftz_nan_xorsign_abs_f287define float @fmax_ftz_nan_xorsign_abs_f(float %0, float %1) {288 ; CHECK-NOT: call289 ; CHECK: max.ftz.NaN.xorsign.abs.f290 %res = call float @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f(float %0, float %1)291 ret float %res292}293