259 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 4; CHECK-LABEL: fmin_xorsign_abs_f165define half @fmin_xorsign_abs_f16(half %0, half %1) {6 ; CHECK-NOT: call7 ; CHECK: min.xorsign.abs.f168 %res = call half @llvm.nvvm.fmin.xorsign.abs.f16(half %0, half %1)9 ret half %res10}11 12; CHECK-LABEL: fmin_ftz_xorsign_abs_f1613define half @fmin_ftz_xorsign_abs_f16(half %0, half %1) {14 ; CHECK-NOT: call15 ; CHECK: min.ftz.xorsign.abs.f1616 %res = call half @llvm.nvvm.fmin.ftz.xorsign.abs.f16(half %0, half %1)17 ret half %res18}19 20; CHECK-LABEL: fmin_nan_xorsign_abs_f1621define half @fmin_nan_xorsign_abs_f16(half %0, half %1) {22 ; CHECK-NOT: call23 ; CHECK: min.NaN.xorsign.abs.f1624 %res = call half @llvm.nvvm.fmin.nan.xorsign.abs.f16(half %0, half %1)25 ret half %res26}27 28; CHECK-LABEL: fmin_ftz_nan_xorsign_abs_f1629define half @fmin_ftz_nan_xorsign_abs_f16(half %0, half %1) {30 ; CHECK-NOT: call31 ; CHECK: min.ftz.NaN.xorsign.abs.f1632 %res = call half @llvm.nvvm.fmin.ftz.nan.xorsign.abs.f16(half %0, half %1)33 ret half %res34}35 36; CHECK-LABEL: fmin_xorsign_abs_f16x237define <2 x half> @fmin_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {38 ; CHECK-NOT: call39 ; CHECK: min.xorsign.abs.f16x240 %res = call <2 x half> @llvm.nvvm.fmin.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)41 ret <2 x half> %res42}43 44; CHECK-LABEL: fmin_ftz_xorsign_abs_f16x245define <2 x half> @fmin_ftz_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {46 ; CHECK-NOT: call47 ; CHECK: min.ftz.xorsign.abs.f16x248 %res = call <2 x half> @llvm.nvvm.fmin.ftz.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)49 ret <2 x half> %res50}51 52; CHECK-LABEL: fmin_nan_xorsign_abs_f16x253define <2 x half> @fmin_nan_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {54 ; CHECK-NOT: call55 ; CHECK: min.NaN.xorsign.abs.f16x256 %res = call <2 x half> @llvm.nvvm.fmin.nan.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)57 ret <2 x half> %res58}59 60; CHECK-LABEL: fmin_ftz_nan_xorsign_abs_f16x261define <2 x half> @fmin_ftz_nan_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {62 ; CHECK-NOT: call63 ; CHECK: min.ftz.NaN.xorsign.abs.f16x264 %res = call <2 x half> @llvm.nvvm.fmin.ftz.nan.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)65 ret <2 x half> %res66}67 68; CHECK-LABEL: fmin_xorsign_abs_bf1669define bfloat @fmin_xorsign_abs_bf16(bfloat %0, bfloat %1) {70 ; CHECK-NOT: call71 ; CHECK: min.xorsign.abs.bf1672 %res = call bfloat @llvm.nvvm.fmin.xorsign.abs.bf16(bfloat %0, bfloat %1)73 ret bfloat %res74}75 76; CHECK-LABEL: fmin_nan_xorsign_abs_bf1677define bfloat @fmin_nan_xorsign_abs_bf16(bfloat %0, bfloat %1) {78 ; CHECK-NOT: call79 ; CHECK: min.NaN.xorsign.abs.bf1680 %res = call bfloat @llvm.nvvm.fmin.nan.xorsign.abs.bf16(bfloat %0, bfloat %1)81 ret bfloat %res82}83 84; CHECK-LABEL: fmin_xorsign_abs_bf16x285define <2 x bfloat> @fmin_xorsign_abs_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {86 ; CHECK-NOT: call87 ; CHECK: min.xorsign.abs.bf16x288 %res = call <2 x bfloat> @llvm.nvvm.fmin.xorsign.abs.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)89 ret <2 x bfloat> %res90}91 92; CHECK-LABEL: fmin_nan_xorsign_abs_bf16x293define <2 x bfloat> @fmin_nan_xorsign_abs_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {94 ; CHECK-NOT: call95 ; CHECK: min.NaN.xorsign.abs.bf16x296 %res = call <2 x bfloat> @llvm.nvvm.fmin.nan.xorsign.abs.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)97 ret <2 x bfloat> %res98}99 100; CHECK-LABEL: fmin_xorsign_abs_f101define float @fmin_xorsign_abs_f(float %0, float %1) {102 ; CHECK-NOT: call103 ; CHECK: min.xorsign.abs.f104 %res = call float @llvm.nvvm.fmin.xorsign.abs.f(float %0, float %1)105 ret float %res106}107 108; CHECK-LABEL: fmin_ftz_xorsign_abs_f109define float @fmin_ftz_xorsign_abs_f(float %0, float %1) {110 ; CHECK-NOT: call111 ; CHECK: min.ftz.xorsign.abs.f112 %res = call float @llvm.nvvm.fmin.ftz.xorsign.abs.f(float %0, float %1)113 ret float %res114}115 116; CHECK-LABEL: fmin_nan_xorsign_abs_f117define float @fmin_nan_xorsign_abs_f(float %0, float %1) {118 ; CHECK-NOT: call119 ; CHECK: min.NaN.xorsign.abs.f120 %res = call float @llvm.nvvm.fmin.nan.xorsign.abs.f(float %0, float %1)121 ret float %res122}123 124; CHECK-LABEL: fmin_ftz_nan_xorsign_abs_f125define float @fmin_ftz_nan_xorsign_abs_f(float %0, float %1) {126 ; CHECK-NOT: call127 ; CHECK: min.ftz.NaN.xorsign.abs.f128 %res = call float @llvm.nvvm.fmin.ftz.nan.xorsign.abs.f(float %0, float %1)129 ret float %res130}131 132; CHECK-LABEL: fmax_xorsign_abs_f16133define half @fmax_xorsign_abs_f16(half %0, half %1) {134 ; CHECK-NOT: call135 ; CHECK: max.xorsign.abs.f16136 %res = call half @llvm.nvvm.fmax.xorsign.abs.f16(half %0, half %1)137 ret half %res138}139 140; CHECK-LABEL: fmax_ftz_xorsign_abs_f16141define half @fmax_ftz_xorsign_abs_f16(half %0, half %1) {142 ; CHECK-NOT: call143 ; CHECK: max.ftz.xorsign.abs.f16144 %res = call half @llvm.nvvm.fmax.ftz.xorsign.abs.f16(half %0, half %1)145 ret half %res146}147 148; CHECK-LABEL: fmax_nan_xorsign_abs_f16149define half @fmax_nan_xorsign_abs_f16(half %0, half %1) {150 ; CHECK-NOT: call151 ; CHECK: max.NaN.xorsign.abs.f16152 %res = call half @llvm.nvvm.fmax.nan.xorsign.abs.f16(half %0, half %1)153 ret half %res154}155 156; CHECK-LABEL: fmax_ftz_nan_xorsign_abs_f16157define half @fmax_ftz_nan_xorsign_abs_f16(half %0, half %1) {158 ; CHECK-NOT: call159 ; CHECK: max.ftz.NaN.xorsign.abs.f16160 %res = call half @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f16(half %0, half %1)161 ret half %res162}163 164; CHECK-LABEL: fmax_xorsign_abs_f16x2165define <2 x half> @fmax_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {166 ; CHECK-NOT: call167 ; CHECK: max.xorsign.abs.f16x2168 %res = call <2 x half> @llvm.nvvm.fmax.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)169 ret <2 x half> %res170}171 172; CHECK-LABEL: fmax_ftz_xorsign_abs_f16x2173define <2 x half> @fmax_ftz_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {174 ; CHECK-NOT: call175 ; CHECK: max.ftz.xorsign.abs.f16x2176 %res = call <2 x half> @llvm.nvvm.fmax.ftz.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)177 ret <2 x half> %res178}179 180; CHECK-LABEL: fmax_nan_xorsign_abs_f16x2181define <2 x half> @fmax_nan_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {182 ; CHECK-NOT: call183 ; CHECK: max.NaN.xorsign.abs.f16x2184 %res = call <2 x half> @llvm.nvvm.fmax.nan.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)185 ret <2 x half> %res186}187 188; CHECK-LABEL: fmax_ftz_nan_xorsign_abs_f16x2189define <2 x half> @fmax_ftz_nan_xorsign_abs_f16x2(<2 x half> %0, <2 x half> %1) {190 ; CHECK-NOT: call191 ; CHECK: max.ftz.NaN.xorsign.abs.f16x2192 %res = call <2 x half> @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f16x2(<2 x half> %0, <2 x half> %1)193 ret <2 x half> %res194}195 196; CHECK-LABEL: fmax_xorsign_abs_bf16197define bfloat @fmax_xorsign_abs_bf16(bfloat %0, bfloat %1) {198 ; CHECK-NOT: call199 ; CHECK: max.xorsign.abs.bf16200 %res = call bfloat @llvm.nvvm.fmax.xorsign.abs.bf16(bfloat %0, bfloat %1)201 ret bfloat %res202}203 204; CHECK-LABEL: fmax_nan_xorsign_abs_bf16205define bfloat @fmax_nan_xorsign_abs_bf16(bfloat %0, bfloat %1) {206 ; CHECK-NOT: call207 ; CHECK: max.NaN.xorsign.abs.bf16208 %res = call bfloat @llvm.nvvm.fmax.nan.xorsign.abs.bf16(bfloat %0, bfloat %1)209 ret bfloat %res210}211 212; CHECK-LABEL: fmax_xorsign_abs_bf16x2213define <2 x bfloat> @fmax_xorsign_abs_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {214 ; CHECK-NOT: call215 ; CHECK: max.xorsign.abs.bf16x2216 %res = call <2 x bfloat> @llvm.nvvm.fmax.xorsign.abs.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)217 ret <2 x bfloat> %res218}219 220; CHECK-LABEL: fmax_nan_xorsign_abs_bf16x2221define <2 x bfloat> @fmax_nan_xorsign_abs_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {222 ; CHECK-NOT: call223 ; CHECK: max.NaN.xorsign.abs.bf16x2224 %res = call <2 x bfloat> @llvm.nvvm.fmax.nan.xorsign.abs.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)225 ret <2 x bfloat> %res226}227 228; CHECK-LABEL: fmax_xorsign_abs_f229define float @fmax_xorsign_abs_f(float %0, float %1) {230 ; CHECK-NOT: call231 ; CHECK: max.xorsign.abs.f232 %res = call float @llvm.nvvm.fmax.xorsign.abs.f(float %0, float %1)233 ret float %res234}235 236; CHECK-LABEL: fmax_ftz_xorsign_abs_f237define float @fmax_ftz_xorsign_abs_f(float %0, float %1) {238 ; CHECK-NOT: call239 ; CHECK: max.ftz.xorsign.abs.f240 %res = call float @llvm.nvvm.fmax.ftz.xorsign.abs.f(float %0, float %1)241 ret float %res242}243 244; CHECK-LABEL: fmax_nan_xorsign_abs_f245define float @fmax_nan_xorsign_abs_f(float %0, float %1) {246 ; CHECK-NOT: call247 ; CHECK: max.NaN.xorsign.abs.f248 %res = call float @llvm.nvvm.fmax.nan.xorsign.abs.f(float %0, float %1)249 ret float %res250}251 252; CHECK-LABEL: fmax_ftz_nan_xorsign_abs_f253define float @fmax_ftz_nan_xorsign_abs_f(float %0, float %1) {254 ; CHECK-NOT: call255 ; CHECK: max.ftz.NaN.xorsign.abs.f256 %res = call float @llvm.nvvm.fmax.ftz.nan.xorsign.abs.f(float %0, float %1)257 ret float %res258}259