111 lines · plain
1; Test that vector zexts are done efficently also in case of fewer elements2; than allowed, e.g. <2 x i32>.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s5 6 7define <2 x i16> @fun1(<2 x i8> %val1) {8; CHECK-LABEL: fun1:9; CHECK: vuplhb %v24, %v2410; CHECK-NEXT: br %r1411 %z = zext <2 x i8> %val1 to <2 x i16>12 ret <2 x i16> %z13}14 15define <2 x i32> @fun2(<2 x i8> %val1) {16; CHECK-LABEL: fun2:17; CHECK: larl %r1, .LCPI1_018; CHECK-NEXT: vl %v0, 0(%r1), 319; CHECK-NEXT: vperm %v24, %v0, %v24, %v020; CHECK-NEXT: br %r1421 %z = zext <2 x i8> %val1 to <2 x i32>22 ret <2 x i32> %z23}24 25define <2 x i64> @fun3(<2 x i8> %val1) {26; CHECK-LABEL: fun3:27; CHECK: larl %r1, .LCPI2_028; CHECK-NEXT: vl %v0, 0(%r1), 329; CHECK-NEXT: vperm %v24, %v0, %v24, %v030; CHECK-NEXT: br %r1431 %z = zext <2 x i8> %val1 to <2 x i64>32 ret <2 x i64> %z33}34 35define <2 x i32> @fun4(<2 x i16> %val1) {36; CHECK-LABEL: fun4:37; CHECK: vuplhh %v24, %v2438; CHECK-NEXT: br %r1439 %z = zext <2 x i16> %val1 to <2 x i32>40 ret <2 x i32> %z41}42 43define <2 x i64> @fun5(<2 x i16> %val1) {44; CHECK-LABEL: fun5:45; CHECK: larl %r1, .LCPI4_046; CHECK-NEXT: vl %v0, 0(%r1), 347; CHECK-NEXT: vperm %v24, %v0, %v24, %v048; CHECK-NEXT: br %r1449 %z = zext <2 x i16> %val1 to <2 x i64>50 ret <2 x i64> %z51}52 53define <2 x i64> @fun6(<2 x i32> %val1) {54; CHECK-LABEL: fun6:55; CHECK: vuplhf %v24, %v2456; CHECK-NEXT: br %r1457 %z = zext <2 x i32> %val1 to <2 x i64>58 ret <2 x i64> %z59}60 61define <4 x i16> @fun7(<4 x i8> %val1) {62; CHECK-LABEL: fun7:63; CHECK: vuplhb %v24, %v2464; CHECK-NEXT: br %r1465 %z = zext <4 x i8> %val1 to <4 x i16>66 ret <4 x i16> %z67}68 69define <4 x i32> @fun8(<4 x i8> %val1) {70; CHECK-LABEL: fun8:71; CHECK: larl %r1, .LCPI7_072; CHECK-NEXT: vl %v0, 0(%r1), 373; CHECK-NEXT: vperm %v24, %v0, %v24, %v074; CHECK-NEXT: br %r1475 %z = zext <4 x i8> %val1 to <4 x i32>76 ret <4 x i32> %z77}78 79define <4 x i32> @fun9(<4 x i16> %val1) {80; CHECK-LABEL: fun9:81; CHECK: vuplhh %v24, %v2482; CHECK-NEXT: br %r1483 %z = zext <4 x i16> %val1 to <4 x i32>84 ret <4 x i32> %z85}86 87define <8 x i16> @fun10(<8 x i8> %val1) {88; CHECK-LABEL: fun10:89; CHECK: vuplhb %v24, %v2490; CHECK-NEXT: br %r1491 %z = zext <8 x i8> %val1 to <8 x i16>92 ret <8 x i16> %z93}94 95define <2 x i32> @fun11(<2 x i64> %Arg1, <2 x i64> %Arg2) {96; CHECK-LABEL: fun11:97; CHECK: vgbm %v0, 098; CHECK-NEXT: vceqg %v1, %v24, %v099; CHECK-NEXT: vceqg %v0, %v26, %v0100; CHECK-NEXT: vo %v0, %v1, %v0101; CHECK-NEXT: vrepig %v1, 1102; CHECK-NEXT: vn %v0, %v0, %v1103; CHECK-NEXT: vpkg %v24, %v0, %v0104; CHECK-NEXT: br %r14105 %i3 = icmp eq <2 x i64> %Arg1, zeroinitializer106 %i5 = icmp eq <2 x i64> %Arg2, zeroinitializer107 %i6 = or <2 x i1> %i3, %i5108 %i7 = zext <2 x i1> %i6 to <2 x i32>109 ret <2 x i32> %i7110}111