brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.6 KiB · fe2cb16 Raw
367 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>)6declare bfloat @llvm.nvvm.neg.bf16(bfloat)7declare <2 x bfloat> @llvm.nvvm.neg.bf16x2(<2 x bfloat>)8 9declare float @llvm.nvvm.fmin.nan.f(float, float)10declare float @llvm.nvvm.fmin.ftz.nan.f(float, float)11declare half @llvm.nvvm.fmin.f16(half, half)12declare half @llvm.nvvm.fmin.ftz.f16(half, half)13declare half @llvm.nvvm.fmin.nan.f16(half, half)14declare half @llvm.nvvm.fmin.ftz.nan.f16(half, half)15declare <2 x half> @llvm.nvvm.fmin.f16x2(<2 x half>, <2 x half>)16declare <2 x half> @llvm.nvvm.fmin.ftz.f16x2(<2 x half>, <2 x half>)17declare <2 x half> @llvm.nvvm.fmin.nan.f16x2(<2 x half>, <2 x half>)18declare <2 x half> @llvm.nvvm.fmin.ftz.nan.f16x2(<2 x half>, <2 x half>)19declare bfloat @llvm.nvvm.fmin.bf16(bfloat, bfloat)20declare bfloat @llvm.nvvm.fmin.nan.bf16(bfloat, bfloat)21declare <2 x bfloat> @llvm.nvvm.fmin.bf16x2(<2 x bfloat>, <2 x bfloat>)22declare <2 x bfloat> @llvm.nvvm.fmin.nan.bf16x2(<2 x bfloat>, <2 x bfloat>)23 24declare float @llvm.nvvm.fmax.nan.f(float, float)25declare float @llvm.nvvm.fmax.ftz.nan.f(float, float)26declare half @llvm.nvvm.fmax.f16(half, half)27declare half @llvm.nvvm.fmax.ftz.f16(half, half)28declare half @llvm.nvvm.fmax.nan.f16(half, half)29declare half @llvm.nvvm.fmax.ftz.nan.f16(half, half)30declare <2 x half> @llvm.nvvm.fmax.f16x2(<2 x half>, <2 x half>)31declare <2 x half> @llvm.nvvm.fmax.ftz.f16x2(<2 x half>, <2 x half>)32declare <2 x half> @llvm.nvvm.fmax.nan.f16x2(<2 x half>, <2 x half>)33declare <2 x half> @llvm.nvvm.fmax.ftz.nan.f16x2(<2 x half>, <2 x half>)34declare bfloat @llvm.nvvm.fmax.bf16(bfloat, bfloat)35declare bfloat @llvm.nvvm.fmax.nan.bf16(bfloat, bfloat)36declare <2 x bfloat> @llvm.nvvm.fmax.bf16x2(<2 x bfloat>, <2 x bfloat>)37declare <2 x bfloat> @llvm.nvvm.fmax.nan.bf16x2(<2 x bfloat>, <2 x bfloat>)38 39declare half @llvm.nvvm.fma.rn.relu.f16(half, half, half)40declare half @llvm.nvvm.fma.rn.ftz.relu.f16(half, half, half)41declare <2 x half> @llvm.nvvm.fma.rn.relu.f16x2(<2 x half>, <2 x half>, <2 x half>)42declare <2 x half> @llvm.nvvm.fma.rn.ftz.relu.f16x2(<2 x half>, <2 x half>, <2 x half>)43declare bfloat @llvm.nvvm.fma.rn.bf16(bfloat, bfloat, bfloat)44declare bfloat @llvm.nvvm.fma.rn.relu.bf16(bfloat, bfloat, bfloat)45declare <2 x bfloat> @llvm.nvvm.fma.rn.bf16x2(<2 x bfloat>, <2 x bfloat>, <2 x bfloat>)46declare <2 x bfloat> @llvm.nvvm.fma.rn.relu.bf16x2(<2 x bfloat>, <2 x bfloat>, <2 x bfloat>)47 48; CHECK-LABEL: abs_bf1649define bfloat @abs_bf16(bfloat %0) {50  ; CHECK-NOT: call51  ; CHECK: abs.bf1652  %res = call bfloat @llvm.nvvm.abs.bf16(bfloat %0);53  ret bfloat %res54}55 56; CHECK-LABEL: abs_bf16x257define <2 x bfloat> @abs_bf16x2(<2 x bfloat> %0) {58  ; CHECK-NOT: call59  ; CHECK: abs.bf16x260  %res = call <2 x bfloat> @llvm.nvvm.abs.bf16x2(<2 x bfloat> %0);61  ret <2 x bfloat> %res62}63 64; CHECK-LABEL: neg_bf1665define bfloat @neg_bf16(bfloat %0) {66  ; CHECK-NOT: call67  ; CHECK: neg.bf1668  %res = call bfloat @llvm.nvvm.neg.bf16(bfloat %0);69  ret bfloat %res70}71 72; CHECK-LABEL: neg_bf16x273define <2 x bfloat> @neg_bf16x2(<2 x bfloat> %0) {74  ; CHECK-NOT: call75  ; CHECK: neg.bf16x276  %res = call <2 x bfloat> @llvm.nvvm.neg.bf16x2(<2 x bfloat> %0);77  ret <2 x bfloat> %res78}79 80; CHECK-LABEL: fmin_nan_f81define float @fmin_nan_f(float %0, float %1) {82  ; CHECK-NOT: call83  ; CHECK: min.NaN.f3284  %res = call float @llvm.nvvm.fmin.nan.f(float %0, float %1);85  ret float %res86}87 88; CHECK-LABEL: fmin_ftz_nan_f89define float @fmin_ftz_nan_f(float %0, float %1) {90  ; CHECK-NOT: call91  ; CHECK: min.ftz.NaN.f3292  %res = call float @llvm.nvvm.fmin.ftz.nan.f(float %0, float %1);93  ret float %res94}95 96; CHECK-LABEL: fmin_f1697define half @fmin_f16(half %0, half %1) {98  ; CHECK-NOT: call99  ; CHECK: min.f16100  %res = call half @llvm.nvvm.fmin.f16(half %0, half %1)101  ret half %res102}103 104; CHECK-LABEL: fmin_ftz_f16105define half @fmin_ftz_f16(half %0, half %1) {106  ; CHECK-NOT: call107  ; CHECK: min.ftz.f16108  %res = call half @llvm.nvvm.fmin.ftz.f16(half %0, half %1)109  ret half %res110}111 112; CHECK-LABEL: fmin_nan_f16113define half @fmin_nan_f16(half %0, half %1) {114  ; CHECK-NOT: call115  ; CHECK: min.NaN.f16116  %res = call half @llvm.nvvm.fmin.nan.f16(half %0, half %1)117  ret half %res118}119 120; CHECK-LABEL: fmin_ftz_nan_f16121define half @fmin_ftz_nan_f16(half %0, half %1) {122  ; CHECK-NOT: call123  ; CHECK: min.ftz.NaN.f16124  %res = call half @llvm.nvvm.fmin.ftz.nan.f16(half %0, half %1)125  ret half %res126}127 128; CHECK-LABEL: fmin_f16x2129define <2 x half> @fmin_f16x2(<2 x half> %0, <2 x half> %1) {130  ; CHECK-NOT: call131  ; CHECK: min.f16x2132  %res = call <2 x half> @llvm.nvvm.fmin.f16x2(<2 x half> %0, <2 x half> %1)133  ret <2 x half> %res134}135 136; CHECK-LABEL: fmin_ftz_f16x2137define <2 x half> @fmin_ftz_f16x2(<2 x half> %0, <2 x half> %1) {138  ; CHECK-NOT: call139  ; CHECK: min.ftz.f16x2140  %res = call <2 x half> @llvm.nvvm.fmin.ftz.f16x2(<2 x half> %0, <2 x half> %1)141  ret <2 x half> %res142}143 144; CHECK-LABEL: fmin_nan_f16x2145define <2 x half> @fmin_nan_f16x2(<2 x half> %0, <2 x half> %1) {146  ; CHECK-NOT: call147  ; CHECK: min.NaN.f16x2148  %res = call <2 x half> @llvm.nvvm.fmin.nan.f16x2(<2 x half> %0, <2 x half> %1)149  ret <2 x half> %res150}151 152; CHECK-LABEL: fmin_ftz_nan_f16x2153define <2 x half> @fmin_ftz_nan_f16x2(<2 x half> %0, <2 x half> %1) {154  ; CHECK-NOT: call155  ; CHECK: min.ftz.NaN.f16x2156  %res = call <2 x half> @llvm.nvvm.fmin.ftz.nan.f16x2(<2 x half> %0, <2 x half> %1)157  ret <2 x half> %res158}159 160; CHECK-LABEL: fmin_bf16161define bfloat @fmin_bf16(bfloat %0, bfloat %1) {162  ; CHECK-NOT: call163  ; CHECK: min.bf16164  %res = call bfloat @llvm.nvvm.fmin.bf16(bfloat %0, bfloat %1)165  ret bfloat %res166}167 168; CHECK-LABEL: fmin_nan_bf16169define bfloat @fmin_nan_bf16(bfloat %0, bfloat %1) {170  ; CHECK-NOT: call171  ; CHECK: min.NaN.bf16172  %res = call bfloat @llvm.nvvm.fmin.nan.bf16(bfloat %0, bfloat %1)173  ret bfloat %res174}175 176; CHECK-LABEL: fmin_bf16x2177define <2 x bfloat> @fmin_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {178  ; CHECK-NOT: call179  ; CHECK: min.bf16x2180  %res = call <2 x bfloat> @llvm.nvvm.fmin.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)181  ret <2 x bfloat> %res182}183 184; CHECK-LABEL: fmin_nan_bf16x2185define <2 x bfloat> @fmin_nan_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {186  ; CHECK-NOT: call187  ; CHECK: min.NaN.bf16x2188  %res = call <2 x bfloat> @llvm.nvvm.fmin.nan.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)189  ret <2 x bfloat> %res190}191 192; CHECK-LABEL: fmax_nan_f193define float @fmax_nan_f(float %0, float %1) {194  ; CHECK-NOT: call195  ; CHECK: max.NaN.f32196  %res = call float @llvm.nvvm.fmax.nan.f(float %0, float %1);197  ret float %res198}199 200; CHECK-LABEL: fmax_ftz_nan_f201define float @fmax_ftz_nan_f(float %0, float %1) {202  ; CHECK-NOT: call203  ; CHECK: max.ftz.NaN.f32204  %res = call float @llvm.nvvm.fmax.ftz.nan.f(float %0, float %1);205  ret float %res206}207 208; CHECK-LABEL: fmax_f16209define half @fmax_f16(half %0, half %1) {210  ; CHECK-NOT: call211  ; CHECK: max.f16212  %res = call half @llvm.nvvm.fmax.f16(half %0, half %1)213  ret half %res214}215 216; CHECK-LABEL: fmax_ftz_f16217define half @fmax_ftz_f16(half %0, half %1) {218  ; CHECK-NOT: call219  ; CHECK: max.ftz.f16220  %res = call half @llvm.nvvm.fmax.ftz.f16(half %0, half %1)221  ret half %res222}223 224; CHECK-LABEL: fmax_nan_f16225define half @fmax_nan_f16(half %0, half %1) {226  ; CHECK-NOT: call227  ; CHECK: max.NaN.f16228  %res = call half @llvm.nvvm.fmax.nan.f16(half %0, half %1)229  ret half %res230}231 232; CHECK-LABEL: fmax_ftz_nan_f16233define half @fmax_ftz_nan_f16(half %0, half %1) {234  ; CHECK-NOT: call235  ; CHECK: max.ftz.NaN.f16236  %res = call half @llvm.nvvm.fmax.ftz.nan.f16(half %0, half %1)237  ret half %res238}239 240; CHECK-LABEL: fmax_f16x2241define <2 x half> @fmax_f16x2(<2 x half> %0, <2 x half> %1) {242  ; CHECK-NOT: call243  ; CHECK: max.f16x2244  %res = call <2 x half> @llvm.nvvm.fmax.f16x2(<2 x half> %0, <2 x half> %1)245  ret <2 x half> %res246}247 248; CHECK-LABEL: fmax_ftz_f16x2249define <2 x half> @fmax_ftz_f16x2(<2 x half> %0, <2 x half> %1) {250  ; CHECK-NOT: call251  ; CHECK: max.ftz.f16x2252  %res = call <2 x half> @llvm.nvvm.fmax.ftz.f16x2(<2 x half> %0, <2 x half> %1)253  ret <2 x half> %res254}255 256; CHECK-LABEL: fmax_nan_f16x2257define <2 x half> @fmax_nan_f16x2(<2 x half> %0, <2 x half> %1) {258  ; CHECK-NOT: call259  ; CHECK: max.NaN.f16x2260  %res = call <2 x half> @llvm.nvvm.fmax.nan.f16x2(<2 x half> %0, <2 x half> %1)261  ret <2 x half> %res262}263 264; CHECK-LABEL: fmax_ftz_nan_f16x2265define <2 x half> @fmax_ftz_nan_f16x2(<2 x half> %0, <2 x half> %1) {266  ; CHECK-NOT: call267  ; CHECK: max.ftz.NaN.f16x2268  %res = call <2 x half> @llvm.nvvm.fmax.ftz.nan.f16x2(<2 x half> %0, <2 x half> %1)269  ret <2 x half> %res270}271 272; CHECK-LABEL: fmax_bf16273define bfloat @fmax_bf16(bfloat %0, bfloat %1) {274  ; CHECK-NOT: call275  ; CHECK: max.bf16276  %res = call bfloat @llvm.nvvm.fmax.bf16(bfloat %0, bfloat %1)277  ret bfloat %res278}279 280; CHECK-LABEL: fmax_nan_bf16281define bfloat @fmax_nan_bf16(bfloat %0, bfloat %1) {282  ; CHECK-NOT: call283  ; CHECK: max.NaN.bf16284  %res = call bfloat @llvm.nvvm.fmax.nan.bf16(bfloat %0, bfloat %1)285  ret bfloat %res286}287 288; CHECK-LABEL: fmax_bf16x2289define <2 x bfloat> @fmax_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {290  ; CHECK-NOT: call291  ; CHECK: max.bf16x2292  %res = call <2 x bfloat> @llvm.nvvm.fmax.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)293  ret <2 x bfloat> %res294}295 296; CHECK-LABEL: fmax_nan_bf16x2297define <2 x bfloat> @fmax_nan_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1) {298  ; CHECK-NOT: call299  ; CHECK: max.NaN.bf16x2300  %res = call <2 x bfloat> @llvm.nvvm.fmax.nan.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1)301  ret <2 x bfloat> %res302}303 304; CHECK-LABEL: fma_rn_relu_f16305define half @fma_rn_relu_f16(half %0, half %1, half %2) {306  ; CHECK-NOT: call307  ; CHECK: fma.rn.relu.f16308  %res = call half @llvm.nvvm.fma.rn.relu.f16(half %0, half %1, half %2)309  ret half %res310}311 312; CHECK-LABEL: fma_rn_ftz_relu_f16313define half @fma_rn_ftz_relu_f16(half %0, half %1, half %2) {314  ; CHECK-NOT: call315  ; CHECK: fma.rn.ftz.relu.f16316  %res = call half @llvm.nvvm.fma.rn.ftz.relu.f16(half %0, half %1, half %2)317  ret half %res318}319 320; CHECK-LABEL: fma_rn_relu_f16x2321define <2 x half> @fma_rn_relu_f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2) {322  ; CHECK-NOT: call323  ; CHECK: fma.rn.relu.f16x2324  %res = call <2 x half> @llvm.nvvm.fma.rn.relu.f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2)325  ret <2 x half> %res326}327 328; CHECK-LABEL: fma_rn_ftz_relu_f16x2329define <2 x half> @fma_rn_ftz_relu_f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2) {330  ; CHECK-NOT: call331  ; CHECK: fma.rn.ftz.relu.f16x2332  %res = call <2 x half> @llvm.nvvm.fma.rn.ftz.relu.f16x2(<2 x half> %0, <2 x half> %1, <2 x half> %2)333  ret <2 x half> %res334}335 336; CHECK-LABEL: fma_rn_bf16337define bfloat @fma_rn_bf16(bfloat %0, bfloat %1, bfloat %2) {338  ; CHECK-NOT: call339  ; CHECK: fma.rn.bf16340  %res = call bfloat @llvm.nvvm.fma.rn.bf16(bfloat %0, bfloat %1, bfloat %2)341  ret bfloat %res342}343 344; CHECK-LABEL: fma_rn_relu_bf16345define bfloat @fma_rn_relu_bf16(bfloat %0, bfloat %1, bfloat %2) {346  ; CHECK-NOT: call347  ; CHECK: fma.rn.relu.bf16348  %res = call bfloat @llvm.nvvm.fma.rn.relu.bf16(bfloat %0, bfloat %1, bfloat %2)349  ret bfloat %res350}351 352; CHECK-LABEL: fma_rn_bf16x2353define <2 x bfloat> @fma_rn_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1, <2 x bfloat> %2) {354  ; CHECK-NOT: call355  ; CHECK: fma.rn.bf16x2356  %res = call <2 x bfloat> @llvm.nvvm.fma.rn.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1, <2 x bfloat> %2)357  ret <2 x bfloat> %res358}359 360; CHECK-LABEL: fma_rn_relu_bf16x2361define <2 x bfloat> @fma_rn_relu_bf16x2(<2 x bfloat> %0, <2 x bfloat> %1, <2 x bfloat> %2) {362  ; CHECK-NOT: call363  ; CHECK: fma.rn.relu.bf16x2364  %res = call <2 x bfloat> @llvm.nvvm.fma.rn.relu.bf16x2(<2 x bfloat> %0, <2 x bfloat> %1, <2 x bfloat> %2)365  ret <2 x bfloat> %res366}367