271 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52 3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s4 5define <8 x i16> @f1(<16 x i8> %a) {6; CHECK-LABEL: f1:7; CHECK: # %bb.0: # %start8; CHECK-NEXT: vuphb %v24, %v249; CHECK-NEXT: br %r1410start:11 %0 = shufflevector <16 x i8> %a, <16 x i8> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>12 %1 = sext <8 x i8> %0 to <8 x i16>13 ret <8 x i16> %114}15 16define <8 x i16> @f2(<16 x i8> %a) {17; CHECK-LABEL: f2:18; CHECK: # %bb.0: # %start19; CHECK-NEXT: vuplb %v24, %v2420; CHECK-NEXT: br %r1421start:22 %0 = shufflevector <16 x i8> %a, <16 x i8> poison, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>23 %1 = sext <8 x i8> %0 to <8 x i16>24 ret <8 x i16> %125}26 27define <4 x i32> @f3(<8 x i16> %a) {28; CHECK-LABEL: f3:29; CHECK: # %bb.0: # %start30; CHECK-NEXT: vuphh %v24, %v2431; CHECK-NEXT: br %r1432start:33 %0 = shufflevector <8 x i16> %a, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>34 %1 = sext <4 x i16> %0 to <4 x i32>35 ret <4 x i32> %136}37 38define <4 x i32> @f4(<8 x i16> %a) {39; CHECK-LABEL: f4:40; CHECK: # %bb.0: # %start41; CHECK-NEXT: vuplhw %v24, %v2442; CHECK-NEXT: br %r1443start:44 %0 = shufflevector <8 x i16> %a, <8 x i16> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>45 %1 = sext <4 x i16> %0 to <4 x i32>46 ret <4 x i32> %147}48 49define <4 x i32> @f5(<16 x i8> %a) {50; CHECK-LABEL: f5:51; CHECK: # %bb.0: # %start52; CHECK-NEXT: vuphb %v0, %v2453; CHECK-NEXT: vuphh %v24, %v054; CHECK-NEXT: br %r1455start:56 %0 = shufflevector <16 x i8> %a, <16 x i8> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>57 %1 = sext <4 x i8> %0 to <4 x i32>58 ret <4 x i32> %159}60 61define <4 x i32> @f6(<16 x i8> %a) {62; CHECK-LABEL: f6:63; CHECK: # %bb.0: # %start64; CHECK-NEXT: vuphb %v0, %v2465; CHECK-NEXT: vuplhw %v24, %v066; CHECK-NEXT: br %r1467start:68 %0 = shufflevector <16 x i8> %a, <16 x i8> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7>69 %1 = sext <4 x i8> %0 to <4 x i32>70 ret <4 x i32> %171}72 73define <4 x i32> @f7(<16 x i8> %a) {74; CHECK-LABEL: f7:75; CHECK: # %bb.0: # %start76; CHECK-NEXT: vuplb %v0, %v2477; CHECK-NEXT: vuphh %v24, %v078; CHECK-NEXT: br %r1479start:80 %0 = shufflevector <16 x i8> %a, <16 x i8> poison, <4 x i32> <i32 8, i32 9, i32 10, i32 11>81 %1 = sext <4 x i8> %0 to <4 x i32>82 ret <4 x i32> %183}84 85define <4 x i32> @f8(<16 x i8> %a) {86; CHECK-LABEL: f8:87; CHECK: # %bb.0: # %start88; CHECK-NEXT: vuplb %v0, %v2489; CHECK-NEXT: vuplhw %v24, %v090; CHECK-NEXT: br %r1491start:92 %0 = shufflevector <16 x i8> %a, <16 x i8> poison, <4 x i32> <i32 12, i32 13, i32 14, i32 15>93 %1 = sext <4 x i8> %0 to <4 x i32>94 ret <4 x i32> %195}96 97define <2 x i64> @f9(<4 x i32> %a) {98; CHECK-LABEL: f9:99; CHECK: # %bb.0: # %start100; CHECK-NEXT: vuphf %v24, %v24101; CHECK-NEXT: br %r14102start:103 %0 = shufflevector <4 x i32> %a, <4 x i32> poison, <2 x i32> <i32 0, i32 1>104 %1 = sext <2 x i32> %0 to <2 x i64>105 ret <2 x i64> %1106}107 108define <2 x i64> @f10(<4 x i32> %a) {109; CHECK-LABEL: f10:110; CHECK: # %bb.0: # %start111; CHECK-NEXT: vuplf %v24, %v24112; CHECK-NEXT: br %r14113start:114 %0 = shufflevector <4 x i32> %a, <4 x i32> poison, <2 x i32> <i32 2, i32 3>115 %1 = sext <2 x i32> %0 to <2 x i64>116 ret <2 x i64> %1117}118 119define <2 x i64> @f11(<8 x i16> %a) {120; CHECK-LABEL: f11:121; CHECK: # %bb.0: # %start122; CHECK-NEXT: vuphh %v0, %v24123; CHECK-NEXT: vuphf %v24, %v0124; CHECK-NEXT: br %r14125start:126 %0 = shufflevector <8 x i16> %a, <8 x i16> poison, <2 x i32> <i32 0, i32 1>127 %1 = sext <2 x i16> %0 to <2 x i64>128 ret <2 x i64> %1129}130 131define <2 x i64> @f12(<8 x i16> %a) {132; CHECK-LABEL: f12:133; CHECK: # %bb.0: # %start134; CHECK-NEXT: vuphh %v0, %v24135; CHECK-NEXT: vuplf %v24, %v0136; CHECK-NEXT: br %r14137start:138 %0 = shufflevector <8 x i16> %a, <8 x i16> poison, <2 x i32> <i32 2, i32 3>139 %1 = sext <2 x i16> %0 to <2 x i64>140 ret <2 x i64> %1141}142 143define <2 x i64> @f13(<8 x i16> %a) {144; CHECK-LABEL: f13:145; CHECK: # %bb.0: # %start146; CHECK-NEXT: vuplhw %v0, %v24147; CHECK-NEXT: vuphf %v24, %v0148; CHECK-NEXT: br %r14149start:150 %0 = shufflevector <8 x i16> %a, <8 x i16> poison, <2 x i32> <i32 4, i32 5>151 %1 = sext <2 x i16> %0 to <2 x i64>152 ret <2 x i64> %1153}154 155define <2 x i64> @f14(<8 x i16> %a) {156; CHECK-LABEL: f14:157; CHECK: # %bb.0: # %start158; CHECK-NEXT: vuplhw %v0, %v24159; CHECK-NEXT: vuplf %v24, %v0160; CHECK-NEXT: br %r14161start:162 %0 = shufflevector <8 x i16> %a, <8 x i16> poison, <2 x i32> <i32 6, i32 7>163 %1 = sext <2 x i16> %0 to <2 x i64>164 ret <2 x i64> %1165}166 167define <2 x i64> @f15(<16 x i8> %a) {168; CHECK-LABEL: f15:169; CHECK: # %bb.0: # %start170; CHECK-NEXT: vuphb %v0, %v24171; CHECK-NEXT: vuphh %v0, %v0172; CHECK-NEXT: vuphf %v24, %v0173; CHECK-NEXT: br %r14174start:175 %0 = shufflevector <16 x i8> %a, <16 x i8> poison, <2 x i32> <i32 0, i32 1>176 %1 = sext <2 x i8> %0 to <2 x i64>177 ret <2 x i64> %1178}179 180define <2 x i64> @f16(<16 x i8> %a) {181; CHECK-LABEL: f16:182; CHECK: # %bb.0: # %start183; CHECK-NEXT: vuphb %v0, %v24184; CHECK-NEXT: vuphh %v0, %v0185; CHECK-NEXT: vuplf %v24, %v0186; CHECK-NEXT: br %r14187start:188 %0 = shufflevector <16 x i8> %a, <16 x i8> poison, <2 x i32> <i32 2, i32 3>189 %1 = sext <2 x i8> %0 to <2 x i64>190 ret <2 x i64> %1191}192 193define <2 x i64> @f17(<16 x i8> %a) {194; CHECK-LABEL: f17:195; CHECK: # %bb.0: # %start196; CHECK-NEXT: vuphb %v0, %v24197; CHECK-NEXT: vuplhw %v0, %v0198; CHECK-NEXT: vuphf %v24, %v0199; CHECK-NEXT: br %r14200start:201 %0 = shufflevector <16 x i8> %a, <16 x i8> poison, <2 x i32> <i32 4, i32 5>202 %1 = sext <2 x i8> %0 to <2 x i64>203 ret <2 x i64> %1204}205 206define <2 x i64> @f18(<16 x i8> %a) {207; CHECK-LABEL: f18:208; CHECK: # %bb.0: # %start209; CHECK-NEXT: vuphb %v0, %v24210; CHECK-NEXT: vuplhw %v0, %v0211; CHECK-NEXT: vuplf %v24, %v0212; CHECK-NEXT: br %r14213start:214 %0 = shufflevector <16 x i8> %a, <16 x i8> poison, <2 x i32> <i32 6, i32 7>215 %1 = sext <2 x i8> %0 to <2 x i64>216 ret <2 x i64> %1217}218 219define <2 x i64> @f19(<16 x i8> %a) {220; CHECK-LABEL: f19:221; CHECK: # %bb.0: # %start222; CHECK-NEXT: vuplb %v0, %v24223; CHECK-NEXT: vuphh %v0, %v0224; CHECK-NEXT: vuphf %v24, %v0225; CHECK-NEXT: br %r14226start:227 %0 = shufflevector <16 x i8> %a, <16 x i8> poison, <2 x i32> <i32 8, i32 9>228 %1 = sext <2 x i8> %0 to <2 x i64>229 ret <2 x i64> %1230}231 232define <2 x i64> @f20(<16 x i8> %a) {233; CHECK-LABEL: f20:234; CHECK: # %bb.0: # %start235; CHECK-NEXT: vuplb %v0, %v24236; CHECK-NEXT: vuphh %v0, %v0237; CHECK-NEXT: vuplf %v24, %v0238; CHECK-NEXT: br %r14239start:240 %0 = shufflevector <16 x i8> %a, <16 x i8> poison, <2 x i32> <i32 10, i32 11>241 %1 = sext <2 x i8> %0 to <2 x i64>242 ret <2 x i64> %1243}244 245define <2 x i64> @f21(<16 x i8> %a) {246; CHECK-LABEL: f21:247; CHECK: # %bb.0: # %start248; CHECK-NEXT: vuplb %v0, %v24249; CHECK-NEXT: vuplhw %v0, %v0250; CHECK-NEXT: vuphf %v24, %v0251; CHECK-NEXT: br %r14252start:253 %0 = shufflevector <16 x i8> %a, <16 x i8> poison, <2 x i32> <i32 12, i32 13>254 %1 = sext <2 x i8> %0 to <2 x i64>255 ret <2 x i64> %1256}257 258define <2 x i64> @f22(<16 x i8> %a) {259; CHECK-LABEL: f22:260; CHECK: # %bb.0: # %start261; CHECK-NEXT: vuplb %v0, %v24262; CHECK-NEXT: vuplhw %v0, %v0263; CHECK-NEXT: vuplf %v24, %v0264; CHECK-NEXT: br %r14265start:266 %0 = shufflevector <16 x i8> %a, <16 x i8> poison, <2 x i32> <i32 14, i32 15>267 %1 = sext <2 x i8> %0 to <2 x i64>268 ret <2 x i64> %1269}270 271