brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.2 KiB · 7b5bfed Raw
326 lines · plain
1; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_80 -mattr=+ptx70 | FileCheck %s2; RUN: %if ptxas-sm_80 && ptxas-isa-7.0 %{ llc < %s -mtriple=nvptx64 -mcpu=sm_80 -mattr=+ptx70 | %ptxas-verify -arch=sm_80 %}3 4declare bfloat @llvm.nvvm.abs.bf16(bfloat)5declare <2 x bfloat> @llvm.nvvm.abs.bf16x2(<2 x bfloat>)6 7; CHECK-LABEL: abs_bf168define bfloat @abs_bf16(bfloat %0) {9  ; CHECK-NOT: call10  ; CHECK: abs.bf1611  %res = call bfloat @llvm.nvvm.abs.bf16(bfloat %0);12  ret bfloat %res13}14 15; CHECK-LABEL: abs_bf16x216define <2 x bfloat> @abs_bf16x2(<2 x bfloat> %0) {17  ; CHECK-NOT: call18  ; CHECK: abs.bf16x219  %res = call <2 x bfloat> @llvm.nvvm.abs.bf16x2(<2 x bfloat> %0);20  ret <2 x bfloat> %res21}22 23; CHECK-LABEL: neg_bf1624define bfloat @neg_bf16(bfloat %0) {25  ; CHECK-NOT: call26  ; CHECK: neg.bf1627  %res = call bfloat @llvm.nvvm.neg.bf16(bfloat %0);28  ret bfloat %res29}30 31; CHECK-LABEL: neg_bf16x232define <2 x bfloat> @neg_bf16x2(<2 x bfloat> %0) {33  ; CHECK-NOT: call34  ; CHECK: neg.bf16x235  %res = call <2 x bfloat> @llvm.nvvm.neg.bf16x2(<2 x bfloat> %0);36  ret <2 x bfloat> %res37}38 39; CHECK-LABEL: fmin_nan_f40define float @fmin_nan_f(float %0, float %1) {41  ; CHECK-NOT: call42  ; CHECK: min.NaN.f3243  %res = call float @llvm.nvvm.fmin.nan.f(float %0, float %1);44  ret float %res45}46 47; CHECK-LABEL: fmin_ftz_nan_f48define float @fmin_ftz_nan_f(float %0, float %1) {49  ; CHECK-NOT: call50  ; CHECK: min.ftz.NaN.f3251  %res = call float @llvm.nvvm.fmin.ftz.nan.f(float %0, float %1);52  ret float %res53}54 55; CHECK-LABEL: fmin_f1656define half @fmin_f16(half %0, half %1) {57  ; CHECK-NOT: call58  ; CHECK: min.f1659  %res = call half @llvm.nvvm.fmin.f16(half %0, half %1)60  ret half %res61}62 63; CHECK-LABEL: fmin_ftz_f1664define half @fmin_ftz_f16(half %0, half %1) {65  ; CHECK-NOT: call66  ; CHECK: min.ftz.f1667  %res = call half @llvm.nvvm.fmin.ftz.f16(half %0, half %1)68  ret half %res69}70 71; CHECK-LABEL: fmin_nan_f1672define half @fmin_nan_f16(half %0, half %1) {73  ; CHECK-NOT: call74  ; CHECK: min.NaN.f1675  %res = call half @llvm.nvvm.fmin.nan.f16(half %0, half %1)76  ret half %res77}78 79; CHECK-LABEL: fmin_ftz_nan_f1680define half @fmin_ftz_nan_f16(half %0, half %1) {81  ; CHECK-NOT: call82  ; CHECK: min.ftz.NaN.f1683  %res = call half @llvm.nvvm.fmin.ftz.nan.f16(half %0, half %1)84  ret half %res85}86 87; CHECK-LABEL: fmin_f16x288define <2 x half> @fmin_f16x2(<2 x half> %0, <2 x half> %1) {89  ; CHECK-NOT: call90  ; CHECK: min.f16x291  %res = call <2 x half> @llvm.nvvm.fmin.f16x2(<2 x half> %0, <2 x half> %1)92  ret <2 x half> %res93}94 95; CHECK-LABEL: fmin_ftz_f16x296define <2 x half> @fmin_ftz_f16x2(<2 x half> %0, <2 x half> %1) {97  ; CHECK-NOT: call98  ; CHECK: min.ftz.f16x299  %res = call <2 x half> @llvm.nvvm.fmin.ftz.f16x2(<2 x half> %0, <2 x half> %1)100  ret <2 x half> %res101}102 103; CHECK-LABEL: fmin_nan_f16x2104define <2 x half> @fmin_nan_f16x2(<2 x half> %0, <2 x half> %1) {105  ; CHECK-NOT: call106  ; CHECK: min.NaN.f16x2107  %res = call <2 x half> @llvm.nvvm.fmin.nan.f16x2(<2 x half> %0, <2 x half> %1)108  ret <2 x half> %res109}110 111; CHECK-LABEL: fmin_ftz_nan_f16x2112define <2 x half> @fmin_ftz_nan_f16x2(<2 x half> %0, <2 x half> %1) {113  ; CHECK-NOT: call114  ; CHECK: min.ftz.NaN.f16x2115  %res = call <2 x half> @llvm.nvvm.fmin.ftz.nan.f16x2(<2 x half> %0, <2 x half> %1)116  ret <2 x half> %res117}118 119; CHECK-LABEL: fmin_bf16120define bfloat @fmin_bf16(bfloat %0, bfloat %1) {121  ; CHECK-NOT: call122  ; CHECK: min.bf16123  %res = call bfloat @llvm.nvvm.fmin.bf16(bfloat %0, bfloat %1)124  ret bfloat %res125}126 127; CHECK-LABEL: fmin_nan_bf16128define bfloat @fmin_nan_bf16(bfloat %0, bfloat %1) {129  ; CHECK-NOT: call130  ; CHECK: min.NaN.bf16131  %res = call bfloat @llvm.nvvm.fmin.nan.bf16(bfloat %0, bfloat %1)132  ret bfloat %res133}134 135; CHECK-LABEL: fmin_bf16x2136define <2 x bfloat> @fmin_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {137  ; CHECK-NOT: call138  ; CHECK: min.bf16x2139  %res = call <2 x bfloat> @llvm.nvvm.fmin.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)140  ret <2 x bfloat> %res141}142 143; CHECK-LABEL: fmin_nan_bf16x2144define <2 x bfloat> @fmin_nan_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {145  ; CHECK-NOT: call146  ; CHECK: min.NaN.bf16x2147  %res = call <2 x bfloat> @llvm.nvvm.fmin.nan.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)148  ret <2 x bfloat> %res149}150 151; CHECK-LABEL: fmax_nan_f152define float @fmax_nan_f(float %0, float %1) {153  ; CHECK-NOT: call154  ; CHECK: max.NaN.f32155  %res = call float @llvm.nvvm.fmax.nan.f(float %0, float %1);156  ret float %res157}158 159; CHECK-LABEL: fmax_ftz_nan_f160define float @fmax_ftz_nan_f(float %0, float %1) {161  ; CHECK-NOT: call162  ; CHECK: max.ftz.NaN.f32163  %res = call float @llvm.nvvm.fmax.ftz.nan.f(float %0, float %1);164  ret float %res165}166 167; CHECK-LABEL: fmax_f16168define half @fmax_f16(half %0, half %1) {169  ; CHECK-NOT: call170  ; CHECK: max.f16171  %res = call half @llvm.nvvm.fmax.f16(half %0, half %1)172  ret half %res173}174 175; CHECK-LABEL: fmax_ftz_f16176define half @fmax_ftz_f16(half %0, half %1) {177  ; CHECK-NOT: call178  ; CHECK: max.ftz.f16179  %res = call half @llvm.nvvm.fmax.ftz.f16(half %0, half %1)180  ret half %res181}182 183; CHECK-LABEL: fmax_nan_f16184define half @fmax_nan_f16(half %0, half %1) {185  ; CHECK-NOT: call186  ; CHECK: max.NaN.f16187  %res = call half @llvm.nvvm.fmax.nan.f16(half %0, half %1)188  ret half %res189}190 191; CHECK-LABEL: fmax_ftz_nan_f16192define half @fmax_ftz_nan_f16(half %0, half %1) {193  ; CHECK-NOT: call194  ; CHECK: max.ftz.NaN.f16195  %res = call half @llvm.nvvm.fmax.ftz.nan.f16(half %0, half %1)196  ret half %res197}198 199; CHECK-LABEL: fmax_f16x2200define <2 x half> @fmax_f16x2(<2 x half> %0, <2 x half> %1) {201  ; CHECK-NOT: call202  ; CHECK: max.f16x2203  %res = call <2 x half> @llvm.nvvm.fmax.f16x2(<2 x half> %0, <2 x half> %1)204  ret <2 x half> %res205}206 207; CHECK-LABEL: fmax_ftz_f16x2208define <2 x half> @fmax_ftz_f16x2(<2 x half> %0, <2 x half> %1) {209  ; CHECK-NOT: call210  ; CHECK: max.ftz.f16x2211  %res = call <2 x half> @llvm.nvvm.fmax.ftz.f16x2(<2 x half> %0, <2 x half> %1)212  ret <2 x half> %res213}214 215; CHECK-LABEL: fmax_nan_f16x2216define <2 x half> @fmax_nan_f16x2(<2 x half> %0, <2 x half> %1) {217  ; CHECK-NOT: call218  ; CHECK: max.NaN.f16x2219  %res = call <2 x half> @llvm.nvvm.fmax.nan.f16x2(<2 x half> %0, <2 x half> %1)220  ret <2 x half> %res221}222 223; CHECK-LABEL: fmax_ftz_nan_f16x2224define <2 x half> @fmax_ftz_nan_f16x2(<2 x half> %0, <2 x half> %1) {225  ; CHECK-NOT: call226  ; CHECK: max.ftz.NaN.f16x2227  %res = call <2 x half> @llvm.nvvm.fmax.ftz.nan.f16x2(<2 x half> %0, <2 x half> %1)228  ret <2 x half> %res229}230 231; CHECK-LABEL: fmax_bf16232define bfloat @fmax_bf16(bfloat %0, bfloat %1) {233  ; CHECK-NOT: call234  ; CHECK: max.bf16235  %res = call bfloat @llvm.nvvm.fmax.bf16(bfloat %0, bfloat %1)236  ret bfloat %res237}238 239; CHECK-LABEL: fmax_nan_bf16240define bfloat @fmax_nan_bf16(bfloat %0, bfloat %1) {241  ; CHECK-NOT: call242  ; CHECK: max.NaN.bf16243  %res = call bfloat @llvm.nvvm.fmax.nan.bf16(bfloat %0, bfloat %1)244  ret bfloat %res245}246 247; CHECK-LABEL: fmax_bf16x2248define <2 x bfloat> @fmax_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {249  ; CHECK-NOT: call250  ; CHECK: max.bf16x2251  %res = call <2 x bfloat> @llvm.nvvm.fmax.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)252  ret <2 x bfloat> %res253}254 255; CHECK-LABEL: fmax_nan_bf16x2256define <2 x bfloat> @fmax_nan_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {257  ; CHECK-NOT: call258  ; CHECK: max.NaN.bf16x2259  %res = call <2 x bfloat> @llvm.nvvm.fmax.nan.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)260  ret <2 x bfloat> %res261}262 263; CHECK-LABEL: fma_rn_relu_f16264define half @fma_rn_relu_f16(half %0, half %1, half %2) {265  ; CHECK-NOT: call266  ; CHECK: fma.rn.relu.f16267  %res = call half @llvm.nvvm.fma.rn.relu.f16(half %0, half %1, half %2)268  ret half %res269}270 271; CHECK-LABEL: fma_rn_ftz_relu_f16272define half @fma_rn_ftz_relu_f16(half %0, half %1, half %2) {273  ; CHECK-NOT: call274  ; CHECK: fma.rn.ftz.relu.f16275  %res = call half @llvm.nvvm.fma.rn.ftz.relu.f16(half %0, half %1, half %2)276  ret half %res277}278 279; CHECK-LABEL: fma_rn_relu_f16x2280define <2 x half> @fma_rn_relu_f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2) {281  ; CHECK-NOT: call282  ; CHECK: fma.rn.relu.f16x2283  %res = call <2 x half> @llvm.nvvm.fma.rn.relu.f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2)284  ret <2 x half> %res285}286 287; CHECK-LABEL: fma_rn_ftz_relu_f16x2288define <2 x half> @fma_rn_ftz_relu_f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2) {289  ; CHECK-NOT: call290  ; CHECK: fma.rn.ftz.relu.f16x2291  %res = call <2 x half> @llvm.nvvm.fma.rn.ftz.relu.f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2)292  ret <2 x half> %res293}294 295; CHECK-LABEL: fma_rn_bf16296define bfloat @fma_rn_bf16(bfloat %0, bfloat %1, bfloat %2) {297  ; CHECK-NOT: call298  ; CHECK: fma.rn.bf16299  %res = call bfloat @llvm.nvvm.fma.rn.bf16(bfloat %0, bfloat %1, bfloat %2)300  ret bfloat %res301}302 303; CHECK-LABEL: fma_rn_relu_bf16304define bfloat @fma_rn_relu_bf16(bfloat %0, bfloat %1, bfloat %2) {305  ; CHECK-NOT: call306  ; CHECK: fma.rn.relu.bf16307  %res = call bfloat @llvm.nvvm.fma.rn.relu.bf16(bfloat %0, bfloat %1, bfloat %2)308  ret bfloat %res309}310 311; CHECK-LABEL: fma_rn_bf16x2312define <2 x bfloat> @fma_rn_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1, <2 x bfloat> %2) {313  ; CHECK-NOT: call314  ; CHECK: fma.rn.bf16x2315  %res = call <2 x bfloat> @llvm.nvvm.fma.rn.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1, <2 x bfloat> %2)316  ret <2 x bfloat> %res317}318 319; CHECK-LABEL: fma_rn_relu_bf16x2320define <2 x bfloat> @fma_rn_relu_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1, <2 x bfloat> %2) {321  ; CHECK-NOT: call322  ; CHECK: fma.rn.relu.bf16x2323  %res = call <2 x bfloat> @llvm.nvvm.fma.rn.relu.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1, <2 x bfloat> %2)324  ret <2 x bfloat> %res325}326