; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc < %s -mtriple=s390x-ibm-linux | FileCheck %s %struct.anon.0.1.2.3.8.77 = type { [3 x i8], i8, [3 x i8] } @e = external dso_local local_unnamed_addr global i32, align 4 @f = external dso_local local_unnamed_addr global %struct.anon.0.1.2.3.8.77, align 4 @g = external dso_local local_unnamed_addr global i8, align 2 ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0 define dso_local void @m() local_unnamed_addr #1 { ; CHECK-LABEL: m: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: stmg %r13, %r15, 104(%r15) ; CHECK-NEXT: aghi %r15, -168 ; CHECK-NEXT: lhrl %r1, f+4 ; CHECK-NEXT: sll %r1, 8 ; CHECK-NEXT: larl %r2, f ; CHECK-NEXT: ic %r1, 6(%r2) ; CHECK-NEXT: larl %r2, e ; CHECK-NEXT: lb %r0, 3(%r2) ; CHECK-NEXT: vlvgp %v0, %r0, %r1 ; CHECK-NEXT: vlvgp %v1, %r1, %r0 ; CHECK-NEXT: vlvgf %v1, %r1, 0 ; CHECK-NEXT: vlvgf %v1, %r1, 2 ; CHECK-NEXT: vlvgp %v2, %r1, %r1 ; CHECK-NEXT: # kill: def $r1l killed $r1l killed $r1d ; CHECK-NEXT: nilh %r1, 255 ; CHECK-NEXT: chi %r1, 128 ; CHECK-NEXT: ipm %r1 ; CHECK-NEXT: risbg %r1, %r1, 63, 191, 36 ; CHECK-NEXT: vlvgf %v0, %r0, 0 ; CHECK-NEXT: vlvgf %v0, %r0, 2 ; CHECK-NEXT: vgbm %v3, 30583 ; CHECK-NEXT: vn %v0, %v0, %v3 ; CHECK-NEXT: vn %v1, %v1, %v3 ; CHECK-NEXT: vrepf %v2, %v2, 1 ; CHECK-NEXT: vn %v2, %v2, %v3 ; CHECK-NEXT: vrepif %v3, 127 ; CHECK-NEXT: vchlf %v1, %v1, %v3 ; CHECK-NEXT: vlgvf %r13, %v1, 0 ; CHECK-NEXT: vchlf %v2, %v2, %v3 ; CHECK-NEXT: vlgvf %r3, %v2, 1 ; CHECK-NEXT: nilf %r3, 1 ; CHECK-NEXT: vlgvf %r4, %v2, 0 ; CHECK-NEXT: risbg %r2, %r4, 48, 176, 15 ; CHECK-NEXT: rosbg %r2, %r3, 32, 49, 14 ; CHECK-NEXT: vlgvf %r5, %v2, 2 ; CHECK-NEXT: nilf %r5, 1 ; CHECK-NEXT: rosbg %r2, %r5, 32, 50, 13 ; CHECK-NEXT: vlgvf %r14, %v2, 3 ; CHECK-NEXT: nilf %r14, 1 ; CHECK-NEXT: rosbg %r2, %r14, 32, 51, 12 ; CHECK-NEXT: rosbg %r2, %r13, 52, 52, 11 ; CHECK-NEXT: vlgvf %r13, %v1, 1 ; CHECK-NEXT: rosbg %r2, %r13, 53, 53, 10 ; CHECK-NEXT: vlgvf %r13, %v1, 2 ; CHECK-NEXT: rosbg %r2, %r13, 54, 54, 9 ; CHECK-NEXT: vlgvf %r13, %v1, 3 ; CHECK-NEXT: rosbg %r2, %r13, 55, 55, 8 ; CHECK-NEXT: vchlf %v0, %v0, %v3 ; CHECK-NEXT: vlgvf %r13, %v0, 0 ; CHECK-NEXT: rosbg %r2, %r13, 56, 56, 7 ; CHECK-NEXT: vlgvf %r13, %v0, 1 ; CHECK-NEXT: rosbg %r2, %r13, 57, 57, 6 ; CHECK-NEXT: vlgvf %r13, %v0, 2 ; CHECK-NEXT: rosbg %r2, %r13, 58, 58, 5 ; CHECK-NEXT: vlgvf %r13, %v0, 3 ; CHECK-NEXT: rosbg %r2, %r13, 59, 59, 4 ; CHECK-NEXT: nilf %r4, 1 ; CHECK-NEXT: rosbg %r2, %r4, 32, 60, 3 ; CHECK-NEXT: rosbg %r2, %r3, 32, 61, 2 ; CHECK-NEXT: rosbg %r2, %r5, 32, 62, 1 ; CHECK-NEXT: or %r2, %r14 ; CHECK-NEXT: vlgvb %r4, %v0, 1 ; CHECK-NEXT: vlgvb %r3, %v0, 0 ; CHECK-NEXT: risbg %r3, %r3, 48, 176, 15 ; CHECK-NEXT: rosbg %r3, %r4, 49, 49, 14 ; CHECK-NEXT: vlgvb %r4, %v0, 2 ; CHECK-NEXT: rosbg %r3, %r4, 50, 50, 13 ; CHECK-NEXT: vlgvb %r4, %v0, 3 ; CHECK-NEXT: rosbg %r3, %r4, 51, 51, 12 ; CHECK-NEXT: vlgvb %r4, %v0, 4 ; CHECK-NEXT: rosbg %r3, %r4, 52, 52, 11 ; CHECK-NEXT: vlgvb %r4, %v0, 5 ; CHECK-NEXT: rosbg %r3, %r4, 53, 53, 10 ; CHECK-NEXT: vlgvb %r4, %v0, 6 ; CHECK-NEXT: rosbg %r3, %r4, 54, 54, 9 ; CHECK-NEXT: vlgvb %r4, %v0, 7 ; CHECK-NEXT: rosbg %r3, %r4, 55, 55, 8 ; CHECK-NEXT: vlgvb %r4, %v0, 8 ; CHECK-NEXT: rosbg %r3, %r4, 56, 56, 7 ; CHECK-NEXT: vlgvb %r4, %v0, 9 ; CHECK-NEXT: rosbg %r3, %r4, 57, 57, 6 ; CHECK-NEXT: vlgvb %r4, %v0, 10 ; CHECK-NEXT: rosbg %r3, %r4, 58, 58, 5 ; CHECK-NEXT: vlgvb %r4, %v0, 11 ; CHECK-NEXT: rosbg %r3, %r4, 59, 59, 4 ; CHECK-NEXT: vlgvb %r4, %v0, 12 ; CHECK-NEXT: rosbg %r3, %r4, 60, 60, 3 ; CHECK-NEXT: vlgvb %r4, %v0, 13 ; CHECK-NEXT: rosbg %r3, %r4, 61, 61, 2 ; CHECK-NEXT: vlgvb %r4, %v0, 14 ; CHECK-NEXT: rosbg %r3, %r4, 62, 62, 1 ; CHECK-NEXT: vlgvb %r4, %v0, 15 ; CHECK-NEXT: rosbg %r3, %r4, 63, 63, 0 ; CHECK-NEXT: xilf %r3, 4294967295 ; CHECK-NEXT: or %r3, %r2 ; CHECK-NEXT: tmll %r3, 65535 ; CHECK-NEXT: ipm %r2 ; CHECK-NEXT: afi %r2, -268435456 ; CHECK-NEXT: srl %r2, 31 ; CHECK-NEXT: nr %r2, %r1 ; CHECK-NEXT: nr %r2, %r0 ; CHECK-NEXT: larl %r1, g ; CHECK-NEXT: stc %r2, 0(%r1) ; CHECK-NEXT: lmg %r13, %r15, 272(%r15) ; CHECK-NEXT: br %r14 entry: %n = alloca i32, align 4 call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %n) #2 %e.promoted9.i = load i32, ptr @e, align 4 %bf.load.i = load i24, ptr getelementptr inbounds (%struct.anon.0.1.2.3.8.77, ptr @f, i64 0, i32 2), align 4 %tobool.not.1.i = icmp ult i24 %bf.load.i, 128 %bf.load.2.i = load i24, ptr getelementptr inbounds (%struct.anon.0.1.2.3.8.77, ptr @f, i64 0, i32 2), align 4 %bf.load.2.i.fr = freeze i24 %bf.load.2.i %tobool.not.2.i = icmp ult i24 %bf.load.2.i.fr, 128 %bf.load.427.i = load i24, ptr getelementptr inbounds (%struct.anon.0.1.2.3.8.77, ptr @f, i64 0, i32 2), align 4 %bf.load.3.5.i = load i24, ptr getelementptr inbounds (%struct.anon.0.1.2.3.8.77, ptr @f, i64 0, i32 2), align 4 %bf.load.2.6.i = load i24, ptr getelementptr inbounds (%struct.anon.0.1.2.3.8.77, ptr @f, i64 0, i32 2), align 4 %0 = insertelement <16 x i24> poison, i24 %bf.load.2.6.i, i64 0 %1 = insertelement <16 x i24> %0, i24 %bf.load.2.6.i, i64 1 %2 = insertelement <16 x i24> %1, i24 %bf.load.3.5.i, i64 3 %3 = insertelement <16 x i24> %2, i24 %bf.load.3.5.i, i64 5 %4 = insertelement <16 x i24> %3, i24 poison, i64 7 %5 = insertelement <16 x i24> %4, i24 poison, i64 9 %6 = insertelement <16 x i24> %5, i24 %bf.load.427.i, i64 11 %7 = insertelement <16 x i24> %6, i24 %bf.load.427.i, i64 13 %8 = insertelement <16 x i24> %7, i24 %bf.load.2.i.fr, i64 15 %9 = shufflevector <16 x i24> %8, <16 x i24> poison, <16 x i32> %.fr = freeze <16 x i24> %9 %10 = icmp ugt <16 x i24> %.fr, %11 = bitcast <16 x i1> %10 to i16 %12 = icmp eq i16 %11, 0 %13 = freeze <16 x i1> poison %14 = bitcast <16 x i1> %13 to i16 %15 = icmp eq i16 %14, -1 %op.rdx = and i1 %12, %15 %op.rdx1 = and i1 %op.rdx, %tobool.not.2.i %op.rdx2 = select i1 %op.rdx1, i1 %tobool.not.1.i, i1 false %16 = trunc i32 %e.promoted9.i to i8 %17 = and i8 %16, 1 %18 = select i1 false, i8 0, i8 %17 %conv14.i = select i1 %op.rdx2, i8 %18, i8 0 store i8 %conv14.i, ptr @g, align 2 ret void } attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } attributes #1 = { nounwind "target-features"="+transactional-execution,+vector" } attributes #2 = { nounwind }