brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · 1976e67 Raw
164 lines · plain
1; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s -check-prefixes=CHECK,Z142; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z15 | FileCheck %s -check-prefixes=CHECK,Z153;4; Check that int-to-fp conversions from a narrower type get a vector extension.5 6define void @fun0(<2 x i8> %Src, ptr %Dst) {7; CHECK-LABEL: fun0:8; CHECK:      vuphb	%v0, %v249; CHECK-NEXT: vuphh	%v0, %v010; CHECK-NEXT: vuphf	%v0, %v011; CHECK-NEXT: vcdgb	%v0, %v0, 0, 012; CHECK-NEXT: vst	%v0, 0(%r2), 313; CHECK-NEXT: br	%r1414  %c = sitofp <2 x i8> %Src to <2 x double>15  store <2 x double> %c, ptr %Dst16  ret void17}18 19define void @fun1(<2 x i16> %Src, ptr %Dst) {20; CHECK-LABEL: fun1:21; CHECK:      vuphh	%v0, %v2422; CHECK-NEXT: vuphf	%v0, %v023; CHECK-NEXT: vcdgb	%v0, %v0, 0, 024; CHECK-NEXT: vst	%v0, 0(%r2), 325; CHECK-NEXT: br	%r1426  %c = sitofp <2 x i16> %Src to <2 x double>27  store <2 x double> %c, ptr %Dst28  ret void29}30 31define void @fun2(<2 x i32> %Src, ptr %Dst) {32; CHECK-LABEL: fun2:33; CHECK:      vuphf	%v0, %v2434; CHECK-NEXT: vcdgb	%v0, %v0, 0, 035; CHECK-NEXT: vst	%v0, 0(%r2), 336; CHECK-NEXT: br	%r1437  %c = sitofp <2 x i32> %Src to <2 x double>38  store <2 x double> %c, ptr %Dst39  ret void40}41 42define void @fun3(<4 x i16> %Src, ptr %Dst) {43; CHECK-LABEL: fun3:44 45; Z14:      vuphh	%v0, %v2446; Z14-NEXT: vlgvf	%r0, %v0, 347; Z14-NEXT: cefbr	%f1, %r048; Z14-NEXT: vlgvf	%r0, %v0, 249; Z14-NEXT: cefbr	%f2, %r050; Z14-NEXT: vlgvf	%r0, %v0, 151; Z14-NEXT: vmrhf	%v1, %v2, %v152; Z14-NEXT: cefbr	%f2, %r053; Z14-NEXT: vlgvf	%r0, %v0, 054; Z14-NEXT: cefbr	%f0, %r055; Z14-NEXT: vmrhf	%v0, %v0, %v256; Z14-NEXT: vmrhg	%v0, %v0, %v157; Z14-NEXT: vst	%v0, 0(%r2), 358; Z14-NEXT: br	%r1459 60; Z15:      vuphh	%v0, %v2461; Z15-NEXT: vcefb	%v0, %v0, 0, 062; Z15-NEXT: vst	        %v0, 0(%r2), 363; Z15-NEXT: br	        %r1464  %c = sitofp <4 x i16> %Src to <4 x float>65  store <4 x float> %c, ptr %Dst66  ret void67}68 69define void @fun4(<2 x i8> %Src, ptr %Dst) {70; CHECK-LABEL: fun4:71; CHECK:      larl	%r1, .LCPI4_072; CHECK-NEXT: vl	%v0, 0(%r1), 373; CHECK-NEXT: vperm	%v0, %v0, %v24, %v074; CHECK-NEXT: vcdlgb	%v0, %v0, 0, 075; CHECK-NEXT: vst	%v0, 0(%r2), 376; CHECK-NEXT: br	%r1477  %c = uitofp <2 x i8> %Src to <2 x double>78  store <2 x double> %c, ptr %Dst79  ret void80}81 82define void @fun5(<2 x i16> %Src, ptr %Dst) {83; CHECK-LABEL: fun5:84; CHECK:      larl	%r1, .LCPI5_085; CHECK-NEXT: vl	%v0, 0(%r1), 386; CHECK-NEXT: vperm	%v0, %v0, %v24, %v087; CHECK-NEXT: vcdlgb	%v0, %v0, 0, 088; CHECK-NEXT: vst	%v0, 0(%r2), 389; CHECK-NEXT: br	%r1490  %c = uitofp <2 x i16> %Src to <2 x double>91  store <2 x double> %c, ptr %Dst92  ret void93}94 95define void @fun6(<2 x i32> %Src, ptr %Dst) {96; CHECK-LABEL: fun6:97; CHECK:      vuplhf	%v0, %v2498; CHECK-NEXT: vcdlgb	%v0, %v0, 0, 099; CHECK-NEXT: vst	%v0, 0(%r2), 3100; CHECK-NEXT: br	%r14101  %c = uitofp <2 x i32> %Src to <2 x double>102  store <2 x double> %c, ptr %Dst103  ret void104}105 106define void @fun7(<4 x i16> %Src, ptr %Dst) {107; CHECK-LABEL: fun7:108 109; Z14:      vuplhh	%v0, %v24110; Z14-NEXT: vlgvf	%r0, %v0, 3111; Z14-NEXT: celfbr	%f1, 0, %r0, 0112; Z14-NEXT: vlgvf	%r0, %v0, 2113; Z14-NEXT: celfbr	%f2, 0, %r0, 0114; Z14-NEXT: vlgvf	%r0, %v0, 1115; Z14-NEXT: vmrhf	%v1, %v2, %v1116; Z14-NEXT: celfbr	%f2, 0, %r0, 0117; Z14-NEXT: vlgvf	%r0, %v0, 0118; Z14-NEXT: celfbr	%f0, 0, %r0, 0119; Z14-NEXT: vmrhf	%v0, %v0, %v2120; Z14-NEXT: vmrhg	%v0, %v0, %v1121; Z14-NEXT: vst	%v0, 0(%r2), 3122; Z14-NEXT: br	%r14123 124; Z15:      vuplhh	%v0, %v24125; Z15-NEXT: vcelfb	%v0, %v0, 0, 0126; Z15-NEXT: vst	        %v0, 0(%r2), 3127; Z15-NEXT: br	        %r14128  %c = uitofp <4 x i16> %Src to <4 x float>129  store <4 x float> %c, ptr %Dst130  ret void131}132 133; Test that this does not crash but results in scalarized conversions.134define void @fun8(<2 x i64> %dwords, ptr %ptr) {135; CHECK-LABEL: fun8136; CHECK: vlgvg137; CHECK: cxlgbr138 %conv = uitofp <2 x i64> %dwords to <2 x fp128>139 store <2 x fp128> %conv, ptr %ptr140 ret void141}142 143; Test that this results in vectorized conversions.144define void @fun9(ptr %Src, ptr %ptr) {145; CHECK-LABEL: fun9146; Z15:      vl	        %v0, 16(%r2), 4147; Z15-NEXT: vl	        %v1, 0(%r2), 4148; Z15-NEXT: vuplhh	%v2, %v1149; Z15-NEXT: vupllh	%v1, %v1150; Z15-NEXT: vuplhh	%v0, %v0151; Z15-NEXT: vcelfb	%v2, %v2, 0, 0152; Z15-NEXT: vcelfb	%v1, %v1, 0, 0153; Z15-NEXT: vcelfb	%v0, %v0, 0, 0154; Z15-NEXT: vsteg	%v0, 32(%r3), 0155; Z15-NEXT: vst	%v1, 16(%r3), 4156; Z15-NEXT: vst	%v2, 0(%r3), 4157; Z15-NEXT: br	%r14158 159 %Val = load <10 x i16>, ptr %Src160 %conv = uitofp <10 x i16> %Val to <10 x float>161 store <10 x float> %conv, ptr %ptr162 ret void163}164