112 lines · plain
1; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s2 3; Test that no vperm of the vector compare is needed for the extracts.4define void @fun() {5; CHECK-LABEL: fun:6; CHECK: # %bb.0: # %bb7; CHECK-NEXT: vlrepf %v0, 0(%r1)8; CHECK-NEXT: vgbm %v1, 09; CHECK-NEXT: vceqb %v0, %v0, %v110; CHECK-NEXT: vuphb %v0, %v011; CHECK-NEXT: vuphh %v0, %v012; CHECK-NEXT: vlgvf %r0, %v0, 013; CHECK-NEXT: tmll %r0, 114; CHECK-NEXT: je .LBB0_215; CHECK-NEXT: # %bb.1: # %bb116; CHECK-NEXT: .LBB0_2: # %bb217; CHECK-NEXT: vlgvf %r0, %v0, 118; CHECK-NEXT: tmll %r0, 119; CHECK-NEXT: je .LBB0_420; CHECK-NEXT: # %bb.3: # %bb321; CHECK-NEXT: .LBB0_4: # %bb422bb:23 %tmp = load <4 x i8>, ptr undef24 %tmp1 = icmp eq <4 x i8> zeroinitializer, %tmp25 %tmp2 = extractelement <4 x i1> %tmp1, i32 026 br i1 %tmp2, label %bb1, label %bb227 28bb1:29 unreachable30 31bb2:32 %tmp3 = extractelement <4 x i1> %tmp1, i32 133 br i1 %tmp3, label %bb3, label %bb434 35bb3:36 unreachable37 38bb4:39 unreachable40}41 42; Test that a zero index in the permute vector is used instead of VGBM, with43; a zero index into the other source operand.44define <4 x i8> @fun1(<2 x i8> %arg) {45; CHECK-LABEL:.LCPI1_0:46; CHECK-NEXT: .byte 1 # 0x147; CHECK-NEXT: .byte 18 # 0x1248; CHECK-NEXT: .byte 0 # 0x049; CHECK-NEXT: .byte 18 # 0x1250; CHECK-NEXT: .space 151; CHECK-NEXT: .space 152; CHECK-NEXT: .space 153; CHECK-NEXT: .space 154; CHECK-NEXT: .space 155; CHECK-NEXT: .space 156; CHECK-NEXT: .space 157; CHECK-NEXT: .space 158; CHECK-NEXT: .space 159; CHECK-NEXT: .space 160; CHECK-NEXT: .space 161; CHECK-NEXT: .space 162; CHECK-NEXT: .text63; CHECK-NEXT: .globl fun164; CHECK-NEXT: .p2align 465; CHECK-NEXT: .type fun1,@function66; CHECK-NEXT: fun1: # @fun167; CHECK-NEXT: .cfi_startproc68; CHECK-NEXT: # %bb.0:69; CHECK-NEXT: larl %r1, .LCPI1_070; CHECK-NEXT: vl %v0, 0(%r1), 371; CHECK-NEXT: vperm %v24, %v24, %v0, %v072; CHECK-NEXT: br %r1473 %res = shufflevector <2 x i8> %arg, <2 x i8> zeroinitializer,74 <4 x i32> <i32 1, i32 2, i32 0, i32 3>75 ret <4 x i8> %res76}77 78; Same, but with the first byte indexing into an element of the zero vector.79define <4 x i8> @fun2(<2 x i8> %arg) {80; CHECK-LABEL:.LCPI2_0:81; CHECK-NEXT: .byte 0 # 0x082; CHECK-NEXT: .byte 17 # 0x1183; CHECK-NEXT: .byte 17 # 0x1184; CHECK-NEXT: .byte 0 # 0x085; CHECK-NEXT: .space 186; CHECK-NEXT: .space 187; CHECK-NEXT: .space 188; CHECK-NEXT: .space 189; CHECK-NEXT: .space 190; CHECK-NEXT: .space 191; CHECK-NEXT: .space 192; CHECK-NEXT: .space 193; CHECK-NEXT: .space 194; CHECK-NEXT: .space 195; CHECK-NEXT: .space 196; CHECK-NEXT: .space 197; CHECK-NEXT: .text98; CHECK-NEXT: .globl fun299; CHECK-NEXT: .p2align 4100; CHECK-NEXT: .type fun2,@function101; CHECK-NEXT:fun2: # @fun2102; CHECK-NEXT: .cfi_startproc103; CHECK-NEXT:# %bb.0:104; CHECK-NEXT: larl %r1, .LCPI2_0105; CHECK-NEXT: vl %v0, 0(%r1), 3106; CHECK-NEXT: vperm %v24, %v0, %v24, %v0107; CHECK-NEXT: br %r14108 %res = shufflevector <2 x i8> %arg, <2 x i8> zeroinitializer,109 <4 x i32> <i32 3, i32 1, i32 1, i32 2>110 ret <4 x i8> %res111}112