Index: lib/Target/SystemZ/SystemZSubtarget.h =================================================================== --- lib/Target/SystemZ/SystemZSubtarget.h +++ lib/Target/SystemZ/SystemZSubtarget.h @@ -91,6 +91,11 @@ return &TSInfo; } + // True if the subtarget should run MachineScheduler after aggressive + // coalescing. This currently replaces the SelectionDAG scheduler with the + // "source" order scheduler. + bool enableMachineScheduler() const override { return true; } + // This is important for reducing register pressure in vector code. bool useAA() const override { return true; } Index: test/CodeGen/SystemZ/alloca-01.ll =================================================================== --- test/CodeGen/SystemZ/alloca-01.ll +++ test/CodeGen/SystemZ/alloca-01.ll @@ -13,6 +13,10 @@ ; Allocate %length bytes and take addresses based on the result. ; There are two stack arguments, so an offset of 160 + 2 * 8 == 176 ; is added to the copy of %r15. +; +; NOTE: 'la %r0, 177(%r1)' is actually an expected fail as it would +; be better (and possible) to load into %r3 directly. +; define i64 @f1(i64 %length, i64 %index) { ; FIXME: a better sequence would be: ; @@ -29,12 +33,12 @@ ; CHECK: lgr %r15, [[REG2]] ; ; CHECK-A-LABEL: f1: -; CHECK-A: lgr %r15, %r1 -; CHECK-A: la %r2, 176(%r1) +; CHECK-A-DAG: lgr %r15, %r1 +; CHECK-A-DAG: la %r2, 176(%r1) ; ; CHECK-B-LABEL: f1: ; CHECK-B: lgr %r15, %r1 -; CHECK-B: la %r3, 177(%r1) +; CHECK-B: la %r0, 177(%r1) ; ; CHECK-C-LABEL: f1: ; CHECK-C: lgr %r15, %r1 Index: test/CodeGen/SystemZ/alloca-02.ll =================================================================== --- test/CodeGen/SystemZ/alloca-02.ll +++ test/CodeGen/SystemZ/alloca-02.ll @@ -10,29 +10,29 @@ define i64 @f1(i64 %length, i64 %index) { ; CHECK-A-LABEL: f1: -; CHECK-A: lgr %r15, [[ADDR:%r[1-5]]] -; CHECK-A: la %r2, 160([[ADDR]]) +; CHECK-A-DAG: lgr %r15, [[ADDR:%r[1-5]]] +; CHECK-A-DAG: la %r2, 160([[ADDR]]) ; CHECK-A: mvi 0(%r2), 0 ; ; CHECK-B-LABEL: f1: -; CHECK-B: lgr %r15, [[ADDR:%r[1-5]]] -; CHECK-B: la %r2, 160([[ADDR]]) +; CHECK-B-DAG: lgr %r15, [[ADDR:%r[1-5]]] +; CHECK-B-DAG: la %r2, 160([[ADDR]]) ; CHECK-B: mvi 4095(%r2), 1 ; ; CHECK-C-LABEL: f1: -; CHECK-C: lgr %r15, [[ADDR:%r[1-5]]] +; CHECK-C-DAG: lgr %r15, [[ADDR:%r[1-5]]] ; CHECK-C-DAG: la %r2, 160([[ADDR]]) ; CHECK-C-DAG: lhi [[TMP:%r[0-5]]], 2 ; CHECK-C: stc [[TMP]], 0({{%r3,%r2|%r2,%r3}}) ; ; CHECK-D-LABEL: f1: -; CHECK-D: lgr %r15, [[ADDR:%r[1-5]]] +; CHECK-D-DAG: lgr %r15, [[ADDR:%r[1-5]]] ; CHECK-D-DAG: la %r2, 160([[ADDR]]) ; CHECK-D-DAG: lhi [[TMP:%r[0-5]]], 3 ; CHECK-D: stc [[TMP]], 4095({{%r3,%r2|%r2,%r3}}) ; ; CHECK-E-LABEL: f1: -; CHECK-E: lgr %r15, [[ADDR:%r[1-5]]] +; CHECK-E-DAG: lgr %r15, [[ADDR:%r[1-5]]] ; CHECK-E-DAG: la %r2, 160([[ADDR]]) ; CHECK-E-DAG: lhi [[TMP:%r[0-5]]], 4 ; CHECK-E: stcy [[TMP]], 4096({{%r3,%r2|%r2,%r3}}) Index: test/CodeGen/SystemZ/alloca-03.ll =================================================================== --- test/CodeGen/SystemZ/alloca-03.ll +++ test/CodeGen/SystemZ/alloca-03.ll @@ -15,13 +15,13 @@ ; Allocate %len * 8, no need to align stack. define void @f1(i64 %len) { ; CHECK-LABEL: f1: -; CHECK: sllg %r0, %r2, 3 -; CHECK: lgr %r1, %r15 +; CHECK-DAG: sllg %r0, %r2, 3 +; CHECK-DAG: lgr %r1, %r15 ; CHECK: sgr %r1, %r0 ; CHECK-NOT: ngr -; CHECK: lgr %r15, %r1 -; CHECK: la %r1, 160(%r1) -; CHECK: mvghi 0(%r1), 10 +; CHECK-DAG: lgr %r15, %r1 +; CHECK-DAG: la %r2, 160(%r1) +; CHECK: mvghi 0(%r2), 10 %x = alloca i64, i64 %len store volatile i64 10, i64* %x ret void @@ -31,10 +31,10 @@ define void @f2() { ; CHECK-LABEL: f2: ; CHECK: aghi %r1, -128 -; CHECK: lgr %r15, %r1 -; CHECK: la %r1, 280(%r1) -; CHECK: nill %r1, 65408 -; CHECK: mvghi 0(%r1), 10 +; CHECK-DAG: lgr %r15, %r1 +; CHECK-DAG: la %r2, 280(%r1) +; CHECK-DAG: nill %r2, 65408 +; CHECK: mvghi 0(%r2), 10 %x = alloca i64, i64 1, align 128 store volatile i64 10, i64* %x, align 128 ret void @@ -43,14 +43,14 @@ ; Dynamic alloca, align 128. define void @f3(i64 %len) { ; CHECK-LABEL: f3: -; CHECK: sllg %r1, %r2, 3 -; CHECK: la %r0, 120(%r1) -; CHECK: lgr %r1, %r15 +; CHECK-DAG: sllg %r2, %r2, 3 +; CHECK-DAG: la %r0, 120(%r2) +; CHECK-DAG: lgr %r1, %r15 ; CHECK: sgr %r1, %r0 +; CHECK: la %r2, 280(%r1) +; CHECK: nill %r2, 65408 ; CHECK: lgr %r15, %r1 -; CHECK: la %r1, 280(%r1) -; CHECK: nill %r1, 65408 -; CHECK: mvghi 0(%r1), 10 +; CHECK: mvghi 0(%r2), 10 %x = alloca i64, i64 %len, align 128 store volatile i64 10, i64* %x, align 128 ret void @@ -73,10 +73,10 @@ ; CHECK: lgr %r1, %r15 ; CHECK: aghi %r1, -128 +; CHECK: la %r2, 280(%r1) +; CHECK: nill %r2, 65408 ; CHECK: lgr %r15, %r1 -; CHECK: la %r1, 280(%r1) -; CHECK: nill %r1, 65408 -; CHECK: mvhi 0(%r1), 10 +; CHECK: mvhi 0(%r2), 10 %x = alloca i32, i64 1, align 128 store volatile i32 10, i32* %x ret void Index: test/CodeGen/SystemZ/args-06.ll =================================================================== --- test/CodeGen/SystemZ/args-06.ll +++ test/CodeGen/SystemZ/args-06.ll @@ -5,12 +5,12 @@ define i8 @f1(i8 %a, i8 %b, i8 %c, i8 %d, i8 %e, i8 %f, i8 %g) { ; CHECK-LABEL: f1: +; CHECK: lb {{%r[0-5]}}, 175(%r15) +; CHECK: lb {{%r[0-5]}}, 167(%r15) ; CHECK: ar %r2, %r3 ; CHECK: ar %r2, %r4 ; CHECK: ar %r2, %r5 ; CHECK: ar %r2, %r6 -; CHECK: lb {{%r[0-5]}}, 167(%r15) -; CHECK: lb {{%r[0-5]}}, 175(%r15) ; CHECK: br %r14 %addb = add i8 %a, %b %addc = add i8 %addb, %c Index: test/CodeGen/SystemZ/atomicrmw-add-01.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-add-01.ll +++ test/CodeGen/SystemZ/atomicrmw-add-01.ll @@ -15,8 +15,8 @@ define i8 @f1(i8 *%src, i8 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg %r1, %r2, 0, 189, 0{{$}} -; CHECK: sll [[SHIFT:%r[0-9]+]], 3 -; CHECK: l [[OLD:%r[0-9]+]], 0(%r1) +; CHECK-DAG: sll [[SHIFT:%r[0-9]+]], 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0(%r1) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0([[SHIFT]]) ; CHECK: ar [[ROT]], %r3 @@ -49,8 +49,8 @@ define i8 @f2(i8 *%src) { ; CHECK-LABEL: f2: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0 -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: afi [[ROT]], -2147483648 Index: test/CodeGen/SystemZ/atomicrmw-add-02.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-add-02.ll +++ test/CodeGen/SystemZ/atomicrmw-add-02.ll @@ -15,8 +15,8 @@ define i16 @f1(i16 *%src, i16 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: ar [[ROT]], %r3 @@ -49,8 +49,8 @@ define i16 @f2(i16 *%src) { ; CHECK-LABEL: f2: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0 -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: afi [[ROT]], -2147483648 Index: test/CodeGen/SystemZ/atomicrmw-and-01.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-and-01.ll +++ test/CodeGen/SystemZ/atomicrmw-and-01.ll @@ -49,8 +49,8 @@ define i8 @f2(i8 *%src) { ; CHECK-LABEL: f2: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0 -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: nilh [[ROT]], 33023 Index: test/CodeGen/SystemZ/atomicrmw-and-02.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-and-02.ll +++ test/CodeGen/SystemZ/atomicrmw-and-02.ll @@ -15,8 +15,8 @@ define i16 @f1(i16 *%src, i16 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: nr [[ROT]], %r3 @@ -50,8 +50,8 @@ define i16 @f2(i16 *%src) { ; CHECK-LABEL: f2: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: nilh [[ROT]], 32768 Index: test/CodeGen/SystemZ/atomicrmw-minmax-01.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-minmax-01.ll +++ test/CodeGen/SystemZ/atomicrmw-minmax-01.ll @@ -15,8 +15,8 @@ define i8 @f1(i8 *%src, i8 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LOOP:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: crjle [[ROT]], %r3, [[KEEP:\..*]] @@ -51,8 +51,8 @@ define i8 @f2(i8 *%src, i8 %b) { ; CHECK-LABEL: f2: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LOOP:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: crjhe [[ROT]], %r3, [[KEEP:\..*]] @@ -87,8 +87,8 @@ define i8 @f3(i8 *%src, i8 %b) { ; CHECK-LABEL: f3: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LOOP:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: clrjle [[ROT]], %r3, [[KEEP:\..*]] @@ -123,8 +123,8 @@ define i8 @f4(i8 *%src, i8 %b) { ; CHECK-LABEL: f4: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LOOP:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: clrjhe [[ROT]], %r3, [[KEEP:\..*]] Index: test/CodeGen/SystemZ/atomicrmw-minmax-02.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-minmax-02.ll +++ test/CodeGen/SystemZ/atomicrmw-minmax-02.ll @@ -15,8 +15,8 @@ define i16 @f1(i16 *%src, i16 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LOOP:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: crjle [[ROT]], %r3, [[KEEP:\..*]] @@ -51,8 +51,8 @@ define i16 @f2(i16 *%src, i16 %b) { ; CHECK-LABEL: f2: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LOOP:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: crjhe [[ROT]], %r3, [[KEEP:\..*]] @@ -87,8 +87,8 @@ define i16 @f3(i16 *%src, i16 %b) { ; CHECK-LABEL: f3: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LOOP:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: clrjle [[ROT]], %r3, [[KEEP:\..*]] @@ -123,8 +123,8 @@ define i16 @f4(i16 *%src, i16 %b) { ; CHECK-LABEL: f4: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LOOP:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: clrjhe [[ROT]], %r3, [[KEEP:\..*]] Index: test/CodeGen/SystemZ/atomicrmw-minmax-04.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-minmax-04.ll +++ test/CodeGen/SystemZ/atomicrmw-minmax-04.ll @@ -133,8 +133,8 @@ ; Check that constants are handled. define i64 @f10(i64 %dummy, i64 *%ptr) { ; CHECK-LABEL: f10: -; CHECK: lghi [[LIMIT:%r[0-9]+]], 42 -; CHECK: lg %r2, 0(%r3) +; CHECK-DAG: lghi [[LIMIT:%r[0-9]+]], 42 +; CHECK-DAG: lg %r2, 0(%r3) ; CHECK: j [[LOOP:\.[^:]*]] ; CHECK: [[BB1:\.[^:]*]]: ; CHECK: csg %r2, [[NEW:%r[0-9]+]], 0(%r3) Index: test/CodeGen/SystemZ/atomicrmw-nand-01.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-nand-01.ll +++ test/CodeGen/SystemZ/atomicrmw-nand-01.ll @@ -15,8 +15,8 @@ define i8 @f1(i8 *%src, i8 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: nr [[ROT]], %r3 @@ -51,8 +51,8 @@ define i8 @f2(i8 *%src) { ; CHECK-LABEL: f2: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: nilh [[ROT]], 33023 Index: test/CodeGen/SystemZ/atomicrmw-nand-02.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-nand-02.ll +++ test/CodeGen/SystemZ/atomicrmw-nand-02.ll @@ -15,8 +15,8 @@ define i16 @f1(i16 *%src, i16 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: nr [[ROT]], %r3 @@ -51,8 +51,8 @@ define i16 @f2(i16 *%src) { ; CHECK-LABEL: f2: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: nilh [[ROT]], 32768 Index: test/CodeGen/SystemZ/atomicrmw-or-01.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-or-01.ll +++ test/CodeGen/SystemZ/atomicrmw-or-01.ll @@ -15,8 +15,8 @@ define i8 @f1(i8 *%src, i8 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: or [[ROT]], %r3 @@ -49,8 +49,8 @@ define i8 @f2(i8 *%src) { ; CHECK-LABEL: f2: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: oilh [[ROT]], 32768 Index: test/CodeGen/SystemZ/atomicrmw-or-02.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-or-02.ll +++ test/CodeGen/SystemZ/atomicrmw-or-02.ll @@ -15,8 +15,8 @@ define i16 @f1(i16 *%src, i16 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: or [[ROT]], %r3 @@ -49,8 +49,8 @@ define i16 @f2(i16 *%src) { ; CHECK-LABEL: f2: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: oilh [[ROT]], 32768 Index: test/CodeGen/SystemZ/atomicrmw-sub-01.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-sub-01.ll +++ test/CodeGen/SystemZ/atomicrmw-sub-01.ll @@ -15,8 +15,8 @@ define i8 @f1(i8 *%src, i8 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: sr [[ROT]], %r3 @@ -49,8 +49,8 @@ define i8 @f2(i8 *%src) { ; CHECK-LABEL: f2: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: afi [[ROT]], -2147483648 Index: test/CodeGen/SystemZ/atomicrmw-sub-02.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-sub-02.ll +++ test/CodeGen/SystemZ/atomicrmw-sub-02.ll @@ -15,8 +15,8 @@ define i16 @f1(i16 *%src, i16 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: sr [[ROT]], %r3 @@ -49,8 +49,8 @@ define i16 @f2(i16 *%src) { ; CHECK-LABEL: f2: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: afi [[ROT]], -2147483648 Index: test/CodeGen/SystemZ/atomicrmw-xchg-01.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-xchg-01.ll +++ test/CodeGen/SystemZ/atomicrmw-xchg-01.ll @@ -13,8 +13,8 @@ define i8 @f1(i8 *%src, i8 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: risbg [[ROT]], %r3, 32, 39, 24 Index: test/CodeGen/SystemZ/atomicrmw-xchg-02.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-xchg-02.ll +++ test/CodeGen/SystemZ/atomicrmw-xchg-02.ll @@ -13,8 +13,8 @@ define i16 @f1(i16 *%src, i16 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: risbg [[ROT]], %r3, 32, 47, 16 Index: test/CodeGen/SystemZ/atomicrmw-xchg-03.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-xchg-03.ll +++ test/CodeGen/SystemZ/atomicrmw-xchg-03.ll @@ -110,8 +110,8 @@ ; use the sequence above. define i32 @f10(i32 %dummy, i32 *%src) { ; CHECK-LABEL: f10: -; CHECK: llill [[VALUE:%r[0-9+]]], 40000 -; CHECK: l %r2, 0(%r3) +; CHECK-DAG: llill [[VALUE:%r[0-9+]]], 40000 +; CHECK-DAG: l %r2, 0(%r3) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: cs %r2, [[VALUE]], 0(%r3) ; CHECK: jl [[LABEL]] Index: test/CodeGen/SystemZ/atomicrmw-xchg-04.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-xchg-04.ll +++ test/CodeGen/SystemZ/atomicrmw-xchg-04.ll @@ -77,8 +77,8 @@ ; use the sequence above. define i64 @f7(i64 %dummy, i64 *%ptr) { ; CHECK-LABEL: f7: -; CHECK: llilf [[VALUE:%r[0-9+]]], 3000000000 -; CHECK: lg %r2, 0(%r3) +; CHECK-DAG: llilf [[VALUE:%r[0-9+]]], 3000000000 +; CHECK-DAG: lg %r2, 0(%r3) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: csg %r2, [[VALUE]], 0(%r3) ; CHECK: jl [[LABEL]] Index: test/CodeGen/SystemZ/atomicrmw-xor-01.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-xor-01.ll +++ test/CodeGen/SystemZ/atomicrmw-xor-01.ll @@ -15,8 +15,8 @@ define i8 @f1(i8 *%src, i8 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: xr [[ROT]], %r3 @@ -49,8 +49,8 @@ define i8 @f2(i8 *%src) { ; CHECK-LABEL: f2: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: xilf [[ROT]], 2147483648 Index: test/CodeGen/SystemZ/atomicrmw-xor-02.ll =================================================================== --- test/CodeGen/SystemZ/atomicrmw-xor-02.ll +++ test/CodeGen/SystemZ/atomicrmw-xor-02.ll @@ -15,8 +15,8 @@ define i16 @f1(i16 *%src, i16 %b) { ; CHECK-LABEL: f1: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: xr [[ROT]], %r3 @@ -49,8 +49,8 @@ define i16 @f2(i16 *%src) { ; CHECK-LABEL: f2: ; CHECK: risbg [[RISBG:%r[1-9]+]], %r2, 0, 189, 0{{$}} -; CHECK: sll %r2, 3 -; CHECK: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-DAG: sll %r2, 3 +; CHECK-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK: [[LABEL:\.[^:]*]]: ; CHECK: rll [[ROT:%r[0-9]+]], [[OLD]], 0(%r2) ; CHECK: xilf [[ROT]], 2147483648 Index: test/CodeGen/SystemZ/backchain.ll =================================================================== --- test/CodeGen/SystemZ/backchain.ll +++ test/CodeGen/SystemZ/backchain.ll @@ -60,18 +60,18 @@ ; CHECK: aghi %r15, -160 ; CHECK: stg %r1, 0(%r15) ; CHECK: lgr %r11, %r15 -; CHECK: lgr [[SAVESP:%r[0-9]+]], %r15 -; CHECK: lg [[BC:%r[0-9]+]], 0(%r15) -; CHECK: lgr [[NEWSP:%r[0-9]+]], %r15 -; CHECK: lgr %r15, [[NEWSP]] -; CHECK: stg [[BC]], 0([[NEWSP]]) -; CHECK: lg [[BC2:%r[0-9]+]], 0(%r15) -; CHECK: lgr %r15, [[SAVESP]] -; CHECK: stg [[BC2]], 0([[SAVESP]]) -; CHECK: lg [[BC3:%r[0-9]+]], 0(%r15) -; CHECK: lgr [[NEWSP2:%r[0-9]+]], %r15 -; CHECK: lgr %r15, [[NEWSP2]] -; CHECK: stg [[BC3]], 0([[NEWSP2]]) +; CHECK-DAG: lgr [[SAVESP:%r[0-9]+]], %r15 +; CHECK-DAG: lg [[BC:%r[0-9]+]], 0(%r15) +; CHECK-DAG: lgr [[NEWSP:%r[0-9]+]], %r15 +; CHECK-DAG: lgr %r15, [[NEWSP]] +; CHECK-DAG: stg [[BC]], 0([[NEWSP]]) +; CHECK-DAG: lg [[BC2:%r[0-9]+]], 0(%r15) +; CHECK-DAG: lgr %r15, [[SAVESP]] +; CHECK-DAG: stg [[BC2]], 0([[SAVESP]]) +; CHECK-DAG: lg [[BC3:%r[0-9]+]], 0(%r15) +; CHECK-DAG: lgr [[NEWSP2:%r[0-9]+]], %r15 +; CHECK-DAG: lgr %r15, [[NEWSP2]] +; CHECK-DAG: stg [[BC3]], 0([[NEWSP2]]) ; CHECK: lmg %r11, %r15, 248(%r11) ; CHECK: br %r14 %src = call i8 *@llvm.stacksave() Index: test/CodeGen/SystemZ/call-03.ll =================================================================== --- test/CodeGen/SystemZ/call-03.ll +++ test/CodeGen/SystemZ/call-03.ll @@ -62,13 +62,16 @@ ; Check an indirect call. In this case the only acceptable choice for ; the target register is %r1. +; +; NOTE: the extra copy 'lgr %r1, %r0' is a coalescing failure. define void @f5(void(i32, i32, i32, i32) *%foo) { ; CHECK-LABEL: f5: -; CHECK: lgr %r1, %r2 +; CHECK: lgr %r0, %r2 ; CHECK-DAG: lhi %r2, 1 ; CHECK-DAG: lhi %r3, 2 ; CHECK-DAG: lhi %r4, 3 ; CHECK-DAG: lhi %r5, 4 +; CHECK: lgr %r1, %r0 ; CHECK: br %r1 tail call void %foo(i32 1, i32 2, i32 3, i32 4) ret void Index: test/CodeGen/SystemZ/cmpxchg-01.ll =================================================================== --- test/CodeGen/SystemZ/cmpxchg-01.ll +++ test/CodeGen/SystemZ/cmpxchg-01.ll @@ -13,8 +13,8 @@ define i8 @f1(i8 %dummy, i8 *%src, i8 %cmp, i8 %swap) { ; CHECK-MAIN-LABEL: f1: ; CHECK-MAIN: risbg [[RISBG:%r[1-9]+]], %r3, 0, 189, 0{{$}} -; CHECK-MAIN: sll %r3, 3 -; CHECK-MAIN: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-MAIN-DAG: sll %r3, 3 +; CHECK-MAIN-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK-MAIN: [[LOOP:\.[^ ]*]]: ; CHECK-MAIN: rll %r2, [[OLD]], 8(%r3) ; CHECK-MAIN: risbg %r4, %r2, 32, 55, 0 Index: test/CodeGen/SystemZ/cmpxchg-02.ll =================================================================== --- test/CodeGen/SystemZ/cmpxchg-02.ll +++ test/CodeGen/SystemZ/cmpxchg-02.ll @@ -13,8 +13,8 @@ define i16 @f1(i16 %dummy, i16 *%src, i16 %cmp, i16 %swap) { ; CHECK-MAIN-LABEL: f1: ; CHECK-MAIN: risbg [[RISBG:%r[1-9]+]], %r3, 0, 189, 0{{$}} -; CHECK-MAIN: sll %r3, 3 -; CHECK-MAIN: l [[OLD:%r[0-9]+]], 0([[RISBG]]) +; CHECK-MAIN-DAG: sll %r3, 3 +; CHECK-MAIN-DAG: l [[OLD:%r[0-9]+]], 0([[RISBG]]) ; CHECK-MAIN: [[LOOP:\.[^ ]*]]: ; CHECK-MAIN: rll %r2, [[OLD]], 16(%r3) ; CHECK-MAIN: risbg %r4, %r2, 32, 47, 0 Index: test/CodeGen/SystemZ/cmpxchg-05.ll =================================================================== --- test/CodeGen/SystemZ/cmpxchg-05.ll +++ test/CodeGen/SystemZ/cmpxchg-05.ll @@ -68,8 +68,8 @@ ; Now use the comparison result and zero-extended old value. ; CHECK-LABEL: f6 ; CHECK: llcr [[REG:%r[0-9]+]], [[RES:%r[0-9]+]] -; CHECK: st [[REG]], 0(%r5) -; CHECK: cr [[REG]], %r3 +; CHECK-DAG: st [[REG]], 0(%r5) +; CHECK-DAG: cr [[REG]], %r3 define zeroext i8 @f6(i8* nocapture, i8 zeroext, i8 zeroext, i32*) { %cx = cmpxchg i8* %0, i8 %1, i8 %2 seq_cst seq_cst %old = extractvalue { i8, i1 } %cx, 0 Index: test/CodeGen/SystemZ/fp-add-03.ll =================================================================== --- test/CodeGen/SystemZ/fp-add-03.ll +++ test/CodeGen/SystemZ/fp-add-03.ll @@ -5,12 +5,12 @@ ; There is no memory form of 128-bit addition. define void @f1(fp128 *%ptr, float %f2) { ; CHECK-LABEL: f1: -; CHECK: lxebr %f0, %f0 -; CHECK: ld %f1, 0(%r2) -; CHECK: ld %f3, 8(%r2) -; CHECK: axbr %f1, %f0 -; CHECK: std %f1, 0(%r2) -; CHECK: std %f3, 8(%r2) +; CHECK-DAG: lxebr %f0, %f0 +; CHECK-DAG: ld %f1, 0(%r2) +; CHECK-DAG: ld %f3, 8(%r2) +; CHECK: axbr %f0, %f1 +; CHECK: std %f0, 0(%r2) +; CHECK: std %f2, 8(%r2) ; CHECK: br %r14 %f1 = load fp128 , fp128 *%ptr %f2x = fpext float %f2 to fp128 Index: test/CodeGen/SystemZ/fp-cmp-03.ll =================================================================== --- test/CodeGen/SystemZ/fp-cmp-03.ll +++ test/CodeGen/SystemZ/fp-cmp-03.ll @@ -6,9 +6,9 @@ ; There is no memory form of 128-bit comparison. define i64 @f1(i64 %a, i64 %b, fp128 *%ptr, float %f2) { ; CHECK-LABEL: f1: -; CHECK: lxebr %f0, %f0 -; CHECK: ld %f1, 0(%r4) -; CHECK: ld %f3, 8(%r4) +; CHECK-DAG: lxebr %f0, %f0 +; CHECK-DAG: ld %f1, 0(%r4) +; CHECK-DAG: ld %f3, 8(%r4) ; CHECK: cxbr %f1, %f0 ; CHECK-NEXT: ber %r14 ; CHECK: lgr %r2, %r3 Index: test/CodeGen/SystemZ/fp-cmp-04.ll =================================================================== --- test/CodeGen/SystemZ/fp-cmp-04.ll +++ test/CodeGen/SystemZ/fp-cmp-04.ll @@ -208,8 +208,8 @@ ; CHECK-LABEL: f11: ; CHECK: aebr %f0, %f2 ; CHECK-NEXT: sebr %f4, %f0 -; CHECK-NEXT: ste %f4, 0(%r2) -; CHECK-NEXT: ltebr %f0, %f0 +; CHECK-DAG: ste %f4, 0(%r2) +; CHECK-DAG: ltebr %f0, %f0 ; CHECK-NEXT: ber %r14 ; CHECK: br %r14 entry: Index: test/CodeGen/SystemZ/fp-conv-02.ll =================================================================== --- test/CodeGen/SystemZ/fp-conv-02.ll +++ test/CodeGen/SystemZ/fp-conv-02.ll @@ -72,83 +72,3 @@ ret double %res } -; Test a case where we spill the source of at least one LDEBR. We want -; to use LDEB if possible. -define void @f7(double *%ptr1, float *%ptr2) { -; CHECK-LABEL: f7: -; CHECK-SCALAR: ldeb {{%f[0-9]+}}, 16{{[04]}}(%r15) -; CHECK: br %r14 - %val0 = load volatile float , float *%ptr2 - %val1 = load volatile float , float *%ptr2 - %val2 = load volatile float , float *%ptr2 - %val3 = load volatile float , float *%ptr2 - %val4 = load volatile float , float *%ptr2 - %val5 = load volatile float , float *%ptr2 - %val6 = load volatile float , float *%ptr2 - %val7 = load volatile float , float *%ptr2 - %val8 = load volatile float , float *%ptr2 - %val9 = load volatile float , float *%ptr2 - %val10 = load volatile float , float *%ptr2 - %val11 = load volatile float , float *%ptr2 - %val12 = load volatile float , float *%ptr2 - %val13 = load volatile float , float *%ptr2 - %val14 = load volatile float , float *%ptr2 - %val15 = load volatile float , float *%ptr2 - %val16 = load volatile float , float *%ptr2 - - %ext0 = fpext float %val0 to double - %ext1 = fpext float %val1 to double - %ext2 = fpext float %val2 to double - %ext3 = fpext float %val3 to double - %ext4 = fpext float %val4 to double - %ext5 = fpext float %val5 to double - %ext6 = fpext float %val6 to double - %ext7 = fpext float %val7 to double - %ext8 = fpext float %val8 to double - %ext9 = fpext float %val9 to double - %ext10 = fpext float %val10 to double - %ext11 = fpext float %val11 to double - %ext12 = fpext float %val12 to double - %ext13 = fpext float %val13 to double - %ext14 = fpext float %val14 to double - %ext15 = fpext float %val15 to double - %ext16 = fpext float %val16 to double - - store volatile float %val0, float *%ptr2 - store volatile float %val1, float *%ptr2 - store volatile float %val2, float *%ptr2 - store volatile float %val3, float *%ptr2 - store volatile float %val4, float *%ptr2 - store volatile float %val5, float *%ptr2 - store volatile float %val6, float *%ptr2 - store volatile float %val7, float *%ptr2 - store volatile float %val8, float *%ptr2 - store volatile float %val9, float *%ptr2 - store volatile float %val10, float *%ptr2 - store volatile float %val11, float *%ptr2 - store volatile float %val12, float *%ptr2 - store volatile float %val13, float *%ptr2 - store volatile float %val14, float *%ptr2 - store volatile float %val15, float *%ptr2 - store volatile float %val16, float *%ptr2 - - store volatile double %ext0, double *%ptr1 - store volatile double %ext1, double *%ptr1 - store volatile double %ext2, double *%ptr1 - store volatile double %ext3, double *%ptr1 - store volatile double %ext4, double *%ptr1 - store volatile double %ext5, double *%ptr1 - store volatile double %ext6, double *%ptr1 - store volatile double %ext7, double *%ptr1 - store volatile double %ext8, double *%ptr1 - store volatile double %ext9, double *%ptr1 - store volatile double %ext10, double *%ptr1 - store volatile double %ext11, double *%ptr1 - store volatile double %ext12, double *%ptr1 - store volatile double %ext13, double *%ptr1 - store volatile double %ext14, double *%ptr1 - store volatile double %ext15, double *%ptr1 - store volatile double %ext16, double *%ptr1 - - ret void -} Index: test/CodeGen/SystemZ/fp-conv-17.mir =================================================================== --- /dev/null +++ test/CodeGen/SystemZ/fp-conv-17.mir @@ -0,0 +1,202 @@ +# RUN: llc -mtriple=s390x-linux-gnu -mcpu=z10 -start-before=greedy %s -o - \ +# RUN: | FileCheck %s +--- | + define void @f0(double* %ptr1, float* %ptr2) { + %val0 = load volatile float, float* %ptr2 + %val1 = load volatile float, float* %ptr2 + %val2 = load volatile float, float* %ptr2 + %val3 = load volatile float, float* %ptr2 + %val4 = load volatile float, float* %ptr2 + %val5 = load volatile float, float* %ptr2 + %val6 = load volatile float, float* %ptr2 + %val7 = load volatile float, float* %ptr2 + %val8 = load volatile float, float* %ptr2 + %val9 = load volatile float, float* %ptr2 + %val10 = load volatile float, float* %ptr2 + %val11 = load volatile float, float* %ptr2 + %val12 = load volatile float, float* %ptr2 + %val13 = load volatile float, float* %ptr2 + %val14 = load volatile float, float* %ptr2 + %val15 = load volatile float, float* %ptr2 + %val16 = load volatile float, float* %ptr2 + %ext0 = fpext float %val0 to double + %ext1 = fpext float %val1 to double + %ext2 = fpext float %val2 to double + %ext3 = fpext float %val3 to double + %ext4 = fpext float %val4 to double + %ext5 = fpext float %val5 to double + %ext6 = fpext float %val6 to double + %ext7 = fpext float %val7 to double + %ext8 = fpext float %val8 to double + %ext9 = fpext float %val9 to double + %ext10 = fpext float %val10 to double + %ext11 = fpext float %val11 to double + %ext12 = fpext float %val12 to double + %ext13 = fpext float %val13 to double + %ext14 = fpext float %val14 to double + %ext15 = fpext float %val15 to double + %ext16 = fpext float %val16 to double + store volatile float %val0, float* %ptr2 + store volatile float %val1, float* %ptr2 + store volatile float %val2, float* %ptr2 + store volatile float %val3, float* %ptr2 + store volatile float %val4, float* %ptr2 + store volatile float %val5, float* %ptr2 + store volatile float %val6, float* %ptr2 + store volatile float %val7, float* %ptr2 + store volatile float %val8, float* %ptr2 + store volatile float %val9, float* %ptr2 + store volatile float %val10, float* %ptr2 + store volatile float %val11, float* %ptr2 + store volatile float %val12, float* %ptr2 + store volatile float %val13, float* %ptr2 + store volatile float %val14, float* %ptr2 + store volatile float %val15, float* %ptr2 + store volatile float %val16, float* %ptr2 + store volatile double %ext0, double* %ptr1 + store volatile double %ext1, double* %ptr1 + store volatile double %ext2, double* %ptr1 + store volatile double %ext3, double* %ptr1 + store volatile double %ext4, double* %ptr1 + store volatile double %ext5, double* %ptr1 + store volatile double %ext6, double* %ptr1 + store volatile double %ext7, double* %ptr1 + store volatile double %ext8, double* %ptr1 + store volatile double %ext9, double* %ptr1 + store volatile double %ext10, double* %ptr1 + store volatile double %ext11, double* %ptr1 + store volatile double %ext12, double* %ptr1 + store volatile double %ext13, double* %ptr1 + store volatile double %ext14, double* %ptr1 + store volatile double %ext15, double* %ptr1 + store volatile double %ext16, double* %ptr1 + ret void + } + +... + +# CHECK-LABEL: f0: +# CHECK: ldeb {{%f[0-9]+}}, 16{{[04]}}(%r15) +# CHECK: br %r14 + +--- +name: f0 +alignment: 2 +tracksRegLiveness: true +registers: + - { id: 0, class: addr64bit } + - { id: 1, class: addr64bit } + - { id: 2, class: fp32bit } + - { id: 3, class: fp32bit } + - { id: 4, class: fp32bit } + - { id: 5, class: fp32bit } + - { id: 6, class: fp32bit } + - { id: 7, class: fp32bit } + - { id: 8, class: fp32bit } + - { id: 9, class: fp32bit } + - { id: 10, class: fp32bit } + - { id: 11, class: fp32bit } + - { id: 12, class: fp32bit } + - { id: 13, class: fp32bit } + - { id: 14, class: fp32bit } + - { id: 15, class: fp32bit } + - { id: 16, class: fp32bit } + - { id: 17, class: fp32bit } + - { id: 18, class: fp32bit } + - { id: 19, class: fp64bit } + - { id: 20, class: fp64bit } + - { id: 21, class: fp64bit } + - { id: 22, class: fp64bit } + - { id: 23, class: fp64bit } + - { id: 24, class: fp64bit } + - { id: 25, class: fp64bit } + - { id: 26, class: fp64bit } + - { id: 27, class: fp64bit } + - { id: 28, class: fp64bit } + - { id: 29, class: fp64bit } + - { id: 30, class: fp64bit } + - { id: 31, class: fp64bit } + - { id: 32, class: fp64bit } + - { id: 33, class: fp64bit } + - { id: 34, class: fp64bit } + - { id: 35, class: fp64bit } +liveins: + - { reg: '%r2d', virtual-reg: '%0' } + - { reg: '%r3d', virtual-reg: '%1' } +body: | + bb.0 (%ir-block.0): + liveins: %r2d, %r3d + + %1 = COPY %r3d + %0 = COPY %r2d + %2 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %3 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %4 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %5 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %6 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %7 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %8 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %9 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %10 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %11 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %12 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %13 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %14 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %15 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %16 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %17 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + %18 = LE %1, 0, _ :: (volatile load 4 from %ir.ptr2) + STE %2, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %3, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %4, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %5, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %6, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %7, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %8, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %9, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %10, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %11, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %12, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %13, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %14, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %15, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %16, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %17, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + STE %18, %1, 0, _ :: (volatile store 4 into %ir.ptr2) + %19 = LDEBR %2 + STD %19, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %20 = LDEBR %3 + STD %20, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %21 = LDEBR %4 + STD %21, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %22 = LDEBR %5 + STD %22, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %23 = LDEBR %6 + STD %23, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %24 = LDEBR %7 + STD %24, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %25 = LDEBR %8 + STD %25, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %26 = LDEBR %9 + STD %26, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %27 = LDEBR %10 + STD %27, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %28 = LDEBR %11 + STD %28, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %29 = LDEBR %12 + STD %29, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %30 = LDEBR %13 + STD %30, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %31 = LDEBR %14 + STD %31, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %32 = LDEBR %15 + STD %32, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %33 = LDEBR %16 + STD %33, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %34 = LDEBR %17 + STD %34, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + %35 = LDEBR %18 + STD %35, %0, 0, _ :: (volatile store 8 into %ir.ptr1) + Return + +... Index: test/CodeGen/SystemZ/fp-copysign-02.ll =================================================================== --- test/CodeGen/SystemZ/fp-copysign-02.ll +++ test/CodeGen/SystemZ/fp-copysign-02.ll @@ -36,9 +36,9 @@ ; CHECK-LABEL: f7: ; CHECK: vl [[REG1:%v[0-7]+]], 0(%r3) ; CHECK: tmlh -; CHECK: wflnxb [[REG1]], [[REG1]] -; CHECK: wflpxb [[REG1]], [[REG1]] -; CHECK: vst [[REG1]], 0(%r2) +; CHECK: wflnxb [[REG2:%v[0-9]+]], [[REG1]] +; CHECK: wflpxb [[REG2]], [[REG1]] +; CHECK: vst [[REG2]], 0(%r2) ; CHECK: br %r14 %a = load volatile fp128, fp128 *%aptr %b = fpext float %bf to fp128 @@ -52,9 +52,9 @@ ; CHECK-LABEL: f8: ; CHECK: vl [[REG1:%v[0-7]+]], 0(%r3) ; CHECK: tmhh -; CHECK: wflnxb [[REG1]], [[REG1]] -; CHECK: wflpxb [[REG1]], [[REG1]] -; CHECK: vst [[REG1]], 0(%r2) +; CHECK: wflnxb [[REG2:%v[0-9]+]], [[REG1]] +; CHECK: wflpxb [[REG2]], [[REG1]] +; CHECK: vst [[REG2]], 0(%r2) ; CHECK: br %r14 %a = load volatile fp128, fp128 *%aptr %b = fpext double %bd to fp128 Index: test/CodeGen/SystemZ/fp-div-03.ll =================================================================== --- test/CodeGen/SystemZ/fp-div-03.ll +++ test/CodeGen/SystemZ/fp-div-03.ll @@ -5,9 +5,9 @@ ; There is no memory form of 128-bit division. define void @f1(fp128 *%ptr, float %f2) { ; CHECK-LABEL: f1: -; CHECK: lxebr %f0, %f0 -; CHECK: ld %f1, 0(%r2) -; CHECK: ld %f3, 8(%r2) +; CHECK-DAG: lxebr %f0, %f0 +; CHECK-DAG: ld %f1, 0(%r2) +; CHECK-DAG: ld %f3, 8(%r2) ; CHECK: dxbr %f1, %f0 ; CHECK: std %f1, 0(%r2) ; CHECK: std %f3, 8(%r2) Index: test/CodeGen/SystemZ/fp-mul-05.ll =================================================================== --- test/CodeGen/SystemZ/fp-mul-05.ll +++ test/CodeGen/SystemZ/fp-mul-05.ll @@ -5,12 +5,12 @@ ; There is no memory form of 128-bit multiplication. define void @f1(fp128 *%ptr, float %f2) { ; CHECK-LABEL: f1: -; CHECK: lxebr %f0, %f0 -; CHECK: ld %f1, 0(%r2) -; CHECK: ld %f3, 8(%r2) -; CHECK: mxbr %f1, %f0 -; CHECK: std %f1, 0(%r2) -; CHECK: std %f3, 8(%r2) +; CHECK-DAG: lxebr %f0, %f0 +; CHECK-DAG: ld %f1, 0(%r2) +; CHECK-DAG: ld %f3, 8(%r2) +; CHECK: mxbr %f0, %f1 +; CHECK: std %f0, 0(%r2) +; CHECK: std %f2, 8(%r2) ; CHECK: br %r14 %f1 = load fp128 , fp128 *%ptr %f2x = fpext float %f2 to fp128 Index: test/CodeGen/SystemZ/fp-sub-03.ll =================================================================== --- test/CodeGen/SystemZ/fp-sub-03.ll +++ test/CodeGen/SystemZ/fp-sub-03.ll @@ -5,9 +5,9 @@ ; There is no memory form of 128-bit subtraction. define void @f1(fp128 *%ptr, float %f2) { ; CHECK-LABEL: f1: -; CHECK: lxebr %f0, %f0 -; CHECK: ld %f1, 0(%r2) -; CHECK: ld %f3, 8(%r2) +; CHECK-DAG: lxebr %f0, %f0 +; CHECK-DAG: ld %f1, 0(%r2) +; CHECK-DAG: ld %f3, 8(%r2) ; CHECK: sxbr %f1, %f0 ; CHECK: std %f1, 0(%r2) ; CHECK: std %f3, 8(%r2) Index: test/CodeGen/SystemZ/pr32505.ll =================================================================== --- test/CodeGen/SystemZ/pr32505.ll +++ test/CodeGen/SystemZ/pr32505.ll @@ -6,9 +6,9 @@ define <2 x float> @pr32505(<2 x i8> * %a) { ; CHECK-LABEL: pr32505: ; CHECK: # BB#0: -; CHECK-NEXT: lbh %r0, 0(%r2) -; CHECK-NEXT: ldgr %f0, %r0 ; CHECK-NEXT: lbh %r0, 1(%r2) +; CHECK-NEXT: lbh %r1, 0(%r2) +; CHECK-NEXT: ldgr %f0, %r1 ; CHECK-NEXT: ldgr %f2, %r0 ; CHECK-NEXT: # kill: %F0S %F0S %F0D ; CHECK-NEXT: # kill: %F2S %F2S %F2D Index: test/CodeGen/SystemZ/swift-return.ll =================================================================== --- test/CodeGen/SystemZ/swift-return.ll +++ test/CodeGen/SystemZ/swift-return.ll @@ -8,9 +8,9 @@ ; CHECK-LABEL: test: ; CHECK: st %r2 ; CHECK: brasl %r14, gen -; CHECK-DAG: lhr %r2, %r2 -; CHECK-DAG: lbr %[[REG1:r[0-9]+]], %r3 -; CHECK: ar %r2, %[[REG1]] +; CHECK-DAG: lhr %{{r[0,2]+}}, %r2 +; CHECK-DAG: lbr %{{r[0,2]+}}, %r3 +; CHECK: ar %r2, %r0 ; CHECK-O0-LABEL: test ; CHECK-O0: st %r2 ; CHECK-O0: brasl %r14, gen Index: test/CodeGen/SystemZ/tdc-06.ll =================================================================== --- test/CodeGen/SystemZ/tdc-06.ll +++ test/CodeGen/SystemZ/tdc-06.ll @@ -10,30 +10,30 @@ define i32 @fpc(double %x) { entry: ; CHECK-LABEL: fpc -; CHECK: lhi %r2, 5 -; CHECK: ltdbr %f0, %f0 +; CHECK-DAG: lhi %r2, 5 +; CHECK-DAG: ltdbr %f0, %f0 ; CHECK: je [[RET:.L.*]] %testeq = fcmp oeq double %x, 0.000000e+00 br i1 %testeq, label %ret, label %nonzero, !prof !1 nonzero: -; CHECK: lhi %r2, 1 -; CHECK: cdbr %f0, %f0 +; CHECK-DAG: lhi %r2, 1 +; CHECK-DAG: cdbr %f0, %f0 ; CHECK: jo [[RET]] %testnan = fcmp uno double %x, 0.000000e+00 br i1 %testnan, label %ret, label %nonzeroord, !prof !1 nonzeroord: -; CHECK: lhi %r2, 2 -; CHECK: tcdb %f0, 48 +; CHECK-DAG: lhi %r2, 2 +; CHECK-DAG: tcdb %f0, 48 ; CHECK: jl [[RET]] %abs = tail call double @llvm.fabs.f64(double %x) %testinf = fcmp oeq double %abs, 0x7FF0000000000000 br i1 %testinf, label %ret, label %finite, !prof !1 finite: -; CHECK: lhi %r2, 3 -; CHECK: tcdb %f0, 831 +; CHECK-DAG: lhi %r2, 3 +; CHECK-DAG: tcdb %f0, 831 ; CHECK: blr %r14 ; CHECK: lhi %r2, 4 %testnormal = fcmp uge double %abs, 0x10000000000000 Index: test/CodeGen/SystemZ/tls-01.ll =================================================================== --- test/CodeGen/SystemZ/tls-01.ll +++ test/CodeGen/SystemZ/tls-01.ll @@ -14,8 +14,8 @@ ; CHECK-MAIN-LABEL: foo: ; CHECK-MAIN: ear [[HIGH:%r[0-5]]], %a0 ; CHECK-MAIN: sllg %r2, [[HIGH]], 32 -; CHECK-MAIN: ear %r2, %a1 -; CHECK-MAIN: larl %r1, .LCP{{.*}} +; CHECK-MAIN-DAG: ear %r2, %a1 +; CHECK-MAIN-DAG: larl %r1, .LCP{{.*}} ; CHECK-MAIN: ag %r2, 0(%r1) ; CHECK-MAIN: br %r14 ret i32 *@x Index: test/CodeGen/SystemZ/tls-02.ll =================================================================== --- test/CodeGen/SystemZ/tls-02.ll +++ test/CodeGen/SystemZ/tls-02.ll @@ -10,8 +10,8 @@ ; CHECK-MAIN-LABEL: foo: ; CHECK-MAIN: ear [[HIGH:%r[0-5]]], %a0 ; CHECK-MAIN: sllg %r2, [[HIGH]], 32 -; CHECK-MAIN: ear %r2, %a1 -; CHECK-MAIN: larl %r1, x@INDNTPOFF +; CHECK-MAIN-DAG: ear %r2, %a1 +; CHECK-MAIN-DAG: larl %r1, x@INDNTPOFF ; CHECK-MAIN: ag %r2, 0(%r1) ; CHECK-MAIN: br %r14 ret i32 *@x Index: test/CodeGen/SystemZ/vec-cmp-cmp-logic-select.ll =================================================================== --- test/CodeGen/SystemZ/vec-cmp-cmp-logic-select.ll +++ test/CodeGen/SystemZ/vec-cmp-cmp-logic-select.ll @@ -1,18 +1,16 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; ; Test that a vector select with a logic combination of two compares do not ; produce any unnecessary pack, unpack or shift instructions. ; And, Or and Xor are tested. ; -; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s - +; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s -check-prefix=CHECK-Z14 define <2 x i8> @fun0(<2 x i8> %val1, <2 x i8> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x i8> %val5, <2 x i8> %val6) { ; CHECK-LABEL: fun0: ; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v28, %v30 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 +; CHECK-DAG: vceqb [[REG0:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vceqb [[REG1:%v[0-9]+]], %v28, %v30 +; CHECK-NEXT: vn %v0, [[REG0]], [[REG1]] ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 %cmp0 = icmp eq <2 x i8> %val1, %val2 @@ -25,9 +23,9 @@ define <2 x i16> @fun1(<2 x i8> %val1, <2 x i8> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x i16> %val5, <2 x i16> %val6) { ; CHECK-LABEL: fun1: ; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v28, %v30 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 +; CHECK-DAG: vceqb [[REG0:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vceqb [[REG1:%v[0-9]+]], %v28, %v30 +; CHECK-NEXT: vn %v0, [[REG0]], [[REG1]] ; CHECK-NEXT: vuphb %v0, %v0 ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 @@ -38,359 +36,395 @@ ret <2 x i16> %sel } -define <2 x i8> @fun2(<2 x i8> %val1, <2 x i8> %val2, <2 x i16> %val3, <2 x i16> %val4, <2 x i8> %val5, <2 x i8> %val6) { +define <16 x i8> @fun2(<16 x i8> %val1, <16 x i8> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i8> %val5, <16 x i8> %val6) { ; CHECK-LABEL: fun2: ; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v1, %v28, %v30 -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vpkh %v1, %v1, %v1 -; CHECK-NEXT: vn %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-DAG: vceqh [[REG0:%v[0-9]+]], %v30, %v27 +; CHECK-DAG: vceqh [[REG1:%v[0-9]+]], %v28, %v25 +; CHECK-DAG: vceqb [[REG2:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vpkh [[REG3:%v[0-9]+]], [[REG1]], [[REG0]] +; CHECK-NEXT: vo %v0, [[REG2]], [[REG3]] +; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = icmp eq <2 x i16> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 - ret <2 x i8> %sel + %cmp0 = icmp eq <16 x i8> %val1, %val2 + %cmp1 = icmp eq <16 x i16> %val3, %val4 + %and = or <16 x i1> %cmp0, %cmp1 + %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6 + ret <16 x i8> %sel } -define <2 x i32> @fun3(<2 x i8> %val1, <2 x i8> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i32> %val5, <2 x i32> %val6) { +define <16 x i16> @fun3(<16 x i8> %val1, <16 x i8> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i16> %val5, <16 x i16> %val6) { ; CHECK-LABEL: fun3: ; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-DAG: vceqb [[REG0:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vuphb [[REG2:%v[0-9]+]], [[REG0]] +; CHECK-DAG: vmrlg [[REG1:%v[0-9]+]], [[REG0]], [[REG0]] +; CHECK-DAG: vuphb [[REG1]], [[REG1]] +; CHECK-DAG: vceqh [[REG3:%v[0-9]+]], %v28, %v25 +; CHECK-DAG: vceqh [[REG4:%v[0-9]+]], %v30, %v27 +; CHECK-DAG: vl [[REG5:%v[0-9]+]], 176(%r15) +; CHECK-DAG: vl [[REG6:%v[0-9]+]], 160(%r15) +; CHECK-DAG: vo [[REG7:%v[0-9]+]], %v2, [[REG4]] +; CHECK-DAG: vo [[REG8:%v[0-9]+]], [[REG2]], [[REG3]] +; CHECK-DAG: vsel %v24, %v29, [[REG6]], [[REG8]] +; CHECK-DAG: vsel %v26, %v31, [[REG5]], [[REG7]] ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel + %cmp0 = icmp eq <16 x i8> %val1, %val2 + %cmp1 = icmp eq <16 x i16> %val3, %val4 + %and = or <16 x i1> %cmp0, %cmp1 + %sel = select <16 x i1> %and, <16 x i16> %val5, <16 x i16> %val6 + ret <16 x i16> %sel } -define <2 x i32> @fun4(<2 x i8> %val1, <2 x i8> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i32> %val5, <2 x i32> %val6) { +define <32 x i8> @fun4(<32 x i8> %val1, <32 x i8> %val2, <32 x i8> %val3, <32 x i8> %val4, <32 x i8> %val5, <32 x i8> %val6) { ; CHECK-LABEL: fun4: ; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vpkg %v0, %v0, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = icmp eq <2 x i64> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel -} - -define <2 x i16> @fun5(<2 x i8> %val1, <2 x i8> %val2, <2 x float> %val3, <2 x float> %val4, <2 x i16> %val5, <2 x i16> %val6) { +; CHECK-DAG: vceqb [[REG0:%v[0-9]+]], %v24, %v28 +; CHECK-DAG: vceqb [[REG1:%v[0-9]+]], %v26, %v30 +; CHECK-DAG: vceqb [[REG2:%v[0-9]+]], %v25, %v29 +; CHECK-DAG: vceqb [[REG3:%v[0-9]+]], %v27, %v31 +; CHECK-DAG: vl [[REG4:%v[0-9]+]], 208(%r15) +; CHECK-DAG: vl [[REG5:%v[0-9]+]], 176(%r15) +; CHECK-DAG: vl [[REG6:%v[0-9]+]], 192(%r15) +; CHECK-DAG: vl [[REG7:%v[0-9]+]], 160(%r15) +; CHECK-DAG: vx [[REG8:%v[0-9]+]], [[REG1]], [[REG3]] +; CHECK-DAG: vx [[REG9:%v[0-9]+]], [[REG0]], [[REG2]] +; CHECK-DAG: vsel %v24, [[REG7]], [[REG6]], [[REG9]] +; CHECK-DAG: vsel %v26, [[REG5]], [[REG4]], [[REG8]] +; CHECK-NEXT: br %r14 + %cmp0 = icmp eq <32 x i8> %val1, %val2 + %cmp1 = icmp eq <32 x i8> %val3, %val4 + %and = xor <32 x i1> %cmp0, %cmp1 + %sel = select <32 x i1> %and, <32 x i8> %val5, <32 x i8> %val6 + ret <32 x i8> %sel +} + +define <2 x i8> @fun5(<2 x i16> %val1, <2 x i16> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x i8> %val5, <2 x i8> %val6) { ; CHECK-LABEL: fun5: ; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-DAG: vceqh [[REG0:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vpkh [[REG1:%v[0-9]+]], [[REG0]], [[REG0]] +; CHECK-DAG: vceqb [[REG2:%v[0-9]+]], %v28, %v30 +; CHECK-DAG: vo %v0, [[REG1]], [[REG2]] +; CHECK-DAG: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel + %cmp0 = icmp eq <2 x i16> %val1, %val2 + %cmp1 = icmp eq <2 x i8> %val3, %val4 + %and = or <2 x i1> %cmp0, %cmp1 + %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 + ret <2 x i8> %sel } -define <2 x i64> @fun6(<2 x i8> %val1, <2 x i8> %val2, <2 x double> %val3, <2 x double> %val4, <2 x i64> %val5, <2 x i64> %val6) { +define <2 x i16> @fun6(<2 x i16> %val1, <2 x i16> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x i16> %val5, <2 x i16> %val6) { ; CHECK-LABEL: fun6: ; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 +; CHECK-NEXT: vceqb %v1, %v28, %v30 +; CHECK-NEXT: vceqh %v0, %v24, %v26 ; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v28, %v30 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 +; CHECK-NEXT: vo %v0, %v0, %v1 ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 - ret <2 x i64> %sel + %cmp0 = icmp eq <2 x i16> %val1, %val2 + %cmp1 = icmp eq <2 x i8> %val3, %val4 + %and = or <2 x i1> %cmp0, %cmp1 + %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 + ret <2 x i16> %sel } -define <2 x i8> @fun7(<2 x i16> %val1, <2 x i16> %val2, <2 x i16> %val3, <2 x i16> %val4, <2 x i8> %val5, <2 x i8> %val6) { +define <2 x i32> @fun7(<2 x i16> %val1, <2 x i16> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x i32> %val5, <2 x i32> %val6) { ; CHECK-LABEL: fun7: ; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vpkh %v0, %v0, %v0 +; CHECK-NEXT: vceqb %v1, %v28, %v30 +; CHECK-NEXT: vceqh %v0, %v24, %v26 +; CHECK-NEXT: vuphb %v1, %v1 +; CHECK-NEXT: vo %v0, %v0, %v1 +; CHECK-NEXT: vuphh %v0, %v0 ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i16> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 - ret <2 x i8> %sel + %cmp1 = icmp eq <2 x i8> %val3, %val4 + %and = or <2 x i1> %cmp0, %cmp1 + %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 + ret <2 x i32> %sel } -define <2 x i16> @fun8(<2 x i16> %val1, <2 x i16> %val2, <2 x i16> %val3, <2 x i16> %val4, <2 x i16> %val5, <2 x i16> %val6) { +define <8 x i8> @fun8(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i8> %val5, <8 x i8> %val6) { ; CHECK-LABEL: fun8: ; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 +; CHECK-DAG: vceqh [[REG0:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vceqh [[REG1:%v[0-9]+]], %v28, %v30 +; CHECK-NEXT: vx %v0, [[REG0]], [[REG1]] +; CHECK-NEXT: vpkh %v0, %v0, %v0 ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i16> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel + %cmp0 = icmp eq <8 x i16> %val1, %val2 + %cmp1 = icmp eq <8 x i16> %val3, %val4 + %and = xor <8 x i1> %cmp0, %cmp1 + %sel = select <8 x i1> %and, <8 x i8> %val5, <8 x i8> %val6 + ret <8 x i8> %sel } -define <2 x i32> @fun9(<2 x i16> %val1, <2 x i16> %val2, <2 x i16> %val3, <2 x i16> %val4, <2 x i32> %val5, <2 x i32> %val6) { +define <8 x i16> @fun9(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i16> %val5, <8 x i16> %val6) { ; CHECK-LABEL: fun9: ; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vuphh %v0, %v0 +; CHECK-DAG: vceqh [[REG0:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vceqh [[REG1:%v[0-9]+]], %v28, %v30 +; CHECK-NEXT: vx %v0, [[REG0]], [[REG1]] ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i16> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel + %cmp0 = icmp eq <8 x i16> %val1, %val2 + %cmp1 = icmp eq <8 x i16> %val3, %val4 + %and = xor <8 x i1> %cmp0, %cmp1 + %sel = select <8 x i1> %and, <8 x i16> %val5, <8 x i16> %val6 + ret <8 x i16> %sel } -define <2 x i8> @fun10(<2 x i16> %val1, <2 x i16> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i8> %val5, <2 x i8> %val6) { +define <8 x i32> @fun10(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i32> %val5, <8 x i32> %val6) { ; CHECK-LABEL: fun10: ; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v1, %v28, %v30 -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vpkf %v1, %v1, %v1 -; CHECK-NEXT: vn %v0, %v0, %v1 -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-DAG: vceqh [[REG0:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vceqh [[REG1:%v[0-9]+]], %v28, %v30 +; CHECK-NEXT: vx [[REG2:%v[0-9]+]], [[REG0]], [[REG1]] +; CHECK-DAG: vuphh [[REG3:%v[0-9]+]], [[REG2]] +; CHECK-DAG: vmrlg [[REG4:%v[0-9]+]], [[REG2]], [[REG2]] +; CHECK-DAG: vuphh [[REG5:%v[0-9]+]], [[REG4]] +; CHECK-NEXT: vsel %v24, %v25, %v29, [[REG3]] +; CHECK-NEXT: vsel %v26, %v27, %v31, [[REG5]] ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 - ret <2 x i8> %sel + %cmp0 = icmp eq <8 x i16> %val1, %val2 + %cmp1 = icmp eq <8 x i16> %val3, %val4 + %and = xor <8 x i1> %cmp0, %cmp1 + %sel = select <8 x i1> %and, <8 x i32> %val5, <8 x i32> %val6 + ret <8 x i32> %sel } -define <2 x i8> @fun11(<2 x i16> %val1, <2 x i16> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i8> %val5, <2 x i8> %val6) { +define <16 x i8> @fun11(<16 x i16> %val1, <16 x i16> %val2, <16 x i32> %val3, <16 x i32> %val4, <16 x i8> %val5, <16 x i8> %val6) { ; CHECK-LABEL: fun11: ; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI11_0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-DAG: vl [[REG0:%v[0-9]+]], 192(%r15) +; CHECK-DAG: vl [[REG1:%v[0-9]+]], 208(%r15) +; CHECK-DAG: vl [[REG2:%v[0-9]+]], 160(%r15) +; CHECK-DAG: vl [[REG3:%v[0-9]+]], 176(%r15) +; CHECK-DAG: vceqf [[REG4:%v[0-9]+]], %v27, [[REG3]] +; CHECK-DAG: vceqf [[REG5:%v[0-9]+]], %v25, [[REG2]] +; CHECK-DAG: vceqf [[REG6:%v[0-9]+]], %v31, [[REG1]] +; CHECK-DAG: vceqf [[REG7:%v[0-9]+]], %v29, [[REG0]] +; CHECK-DAG: vceqh [[REG8:%v[0-9]+]], %v24, %v28 +; CHECK-DAG: vceqh [[REG9:%v[0-9]+]], %v26, %v30 +; CHECK-DAG: vpkf [[REG10:%v[0-9]+]], [[REG5]], [[REG4]] +; CHECK-DAG: vpkf [[REG11:%v[0-9]+]], [[REG7]], [[REG6]] +; CHECK-DAG: vn [[REG12:%v[0-9]+]], [[REG9]], [[REG11]] +; CHECK-DAG: vn [[REG13:%v[0-9]+]], [[REG8]], [[REG10]] +; CHECK-DAG: vl [[REG14:%v[0-9]+]], 240(%r15) +; CHECK-DAG: vl [[REG15:%v[0-9]+]], 224(%r15) +; CHECK-DAG: vpkh [[REG16:%v[0-9]+]], [[REG13]], [[REG12]] +; CHECK-NEXT: vsel %v24, [[REG15]], [[REG14]], [[REG16]] ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i64> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 - ret <2 x i8> %sel + %cmp0 = icmp eq <16 x i16> %val1, %val2 + %cmp1 = icmp eq <16 x i32> %val3, %val4 + %and = and <16 x i1> %cmp0, %cmp1 + %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6 + ret <16 x i8> %sel } -define <2 x double> @fun12(<2 x i16> %val1, <2 x i16> %val2, <2 x float> %val3, <2 x float> %val4, <2 x double> %val5, <2 x double> %val6) { +define <16 x i16> @fun12(<16 x i16> %val1, <16 x i16> %val2, <16 x i32> %val3, <16 x i32> %val4, <16 x i16> %val5, <16 x i16> %val6) { ; CHECK-LABEL: fun12: ; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-DAG: vl [[REG0:%v[0-9]+]], 192(%r15) +; CHECK-DAG: vl [[REG1:%v[0-9]+]], 208(%r15) +; CHECK-DAG: vl [[REG2:%v[0-9]+]], 160(%r15) +; CHECK-DAG: vl [[REG3:%v[0-9]+]], 176(%r15) +; CHECK-DAG: vceqf [[REG4:%v[0-9]+]], %v27, [[REG3]] +; CHECK-DAG: vceqf [[REG5:%v[0-9]+]], %v25, [[REG2]] +; CHECK-DAG: vceqf [[REG6:%v[0-9]+]], %v31, [[REG1]] +; CHECK-DAG: vceqf [[REG7:%v[0-9]+]], %v29, [[REG0]] +; CHECK-DAG: vceqh [[REG8:%v[0-9]+]], %v24, %v28 +; CHECK-DAG: vceqh [[REG9:%v[0-9]+]], %v26, %v30 +; CHECK-DAG: vpkf [[REG10:%v[0-9]+]], [[REG5]], [[REG4]] +; CHECK-DAG: vpkf [[REG11:%v[0-9]+]], [[REG7]], [[REG6]] +; CHECK-DAG: vl [[REG12:%v[0-9]+]], 272(%r15) +; CHECK-DAG: vl [[REG13:%v[0-9]+]], 240(%r15) +; CHECK-DAG: vl [[REG14:%v[0-9]+]], 256(%r15) +; CHECK-DAG: vl [[REG15:%v[0-9]+]], 224(%r15) +; CHECK-DAG: vn [[REG16:%v[0-9]+]], [[REG9]], [[REG11]] +; CHECK-DAG: vn [[REG17:%v[0-9]+]], [[REG8]], [[REG10]] +; CHECK-DAG: vsel %v24, [[REG15]], [[REG14]], [[REG17]] +; CHECK-DAG: vsel %v26, [[REG13]], [[REG12]], [[REG16]] ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x double> %val5, <2 x double> %val6 - ret <2 x double> %sel + %cmp0 = icmp eq <16 x i16> %val1, %val2 + %cmp1 = icmp eq <16 x i32> %val3, %val4 + %and = and <16 x i1> %cmp0, %cmp1 + %sel = select <16 x i1> %and, <16 x i16> %val5, <16 x i16> %val6 + ret <16 x i16> %sel } -define <2 x i16> @fun13(<2 x i16> %val1, <2 x i16> %val2, <2 x double> %val3, <2 x double> %val4, <2 x i16> %val5, <2 x i16> %val6) { +define <2 x i16> @fun13(<2 x i32> %val1, <2 x i32> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i16> %val5, <2 x i16> %val6) { ; CHECK-LABEL: fun13: ; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI13_0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vfchdb %v0, %v28, %v30 -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 +; CHECK-NEXT: vceqg %v1, %v28, %v30 +; CHECK-NEXT: vceqf %v0, %v24, %v26 +; CHECK-NEXT: vpkg %v1, %v1, %v1 +; CHECK-NEXT: vx %v0, %v0, %v1 +; CHECK-NEXT: vpkf %v0, %v0, %v0 ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 + %cmp0 = icmp eq <2 x i32> %val1, %val2 + %cmp1 = icmp eq <2 x i64> %val3, %val4 + %and = xor <2 x i1> %cmp0, %cmp1 %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 ret <2 x i16> %sel } -define <2 x i16> @fun14(<2 x i32> %val1, <2 x i32> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i16> %val5, <2 x i16> %val6) { +define <2 x i32> @fun14(<2 x i32> %val1, <2 x i32> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i32> %val5, <2 x i32> %val6) { ; CHECK-LABEL: fun14: ; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 +; CHECK-NEXT: vceqg %v1, %v28, %v30 +; CHECK-NEXT: vceqf %v0, %v24, %v26 +; CHECK-NEXT: vpkg %v1, %v1, %v1 +; CHECK-NEXT: vx %v0, %v0, %v1 ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel + %cmp1 = icmp eq <2 x i64> %val3, %val4 + %and = xor <2 x i1> %cmp0, %cmp1 + %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 + ret <2 x i32> %sel } -define <2 x i32> @fun15(<2 x i32> %val1, <2 x i32> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i32> %val5, <2 x i32> %val6) { +define <2 x i64> @fun15(<2 x i32> %val1, <2 x i32> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i64> %val5, <2 x i64> %val6) { ; CHECK-LABEL: fun15: ; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 +; CHECK-DAG: vceqf [[REG0:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vuphf [[REG1:%v[0-9]+]], [[REG0]] +; CHECK-DAG: vceqg [[REG2:%v[0-9]+]], %v28, %v30 +; CHECK-NEXT: vx %v0, [[REG1]], [[REG2]] ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel + %cmp1 = icmp eq <2 x i64> %val3, %val4 + %and = xor <2 x i1> %cmp0, %cmp1 + %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 + ret <2 x i64> %sel } -define <2 x i64> @fun16(<2 x i32> %val1, <2 x i32> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i64> %val5, <2 x i64> %val6) { +define <4 x i16> @fun16(<4 x i32> %val1, <4 x i32> %val2, <4 x i16> %val3, <4 x i16> %val4, <4 x i16> %val5, <4 x i16> %val6) { ; CHECK-LABEL: fun16: ; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v0, %v0 +; CHECK-DAG: vceqf [[REG0:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vpkf [[REG1:%v[0-9]+]], [[REG0]], [[REG0]] +; CHECK-DAG: vceqh [[REG2:%v[0-9]+]], %v28, %v30 +; CHECK-NEXT: vn %v0, [[REG1]], [[REG2]] ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 - ret <2 x i64> %sel + %cmp0 = icmp eq <4 x i32> %val1, %val2 + %cmp1 = icmp eq <4 x i16> %val3, %val4 + %and = and <4 x i1> %cmp0, %cmp1 + %sel = select <4 x i1> %and, <4 x i16> %val5, <4 x i16> %val6 + ret <4 x i16> %sel } -define <2 x i64> @fun17(<2 x i32> %val1, <2 x i32> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i64> %val5, <2 x i64> %val6) { +define <4 x i32> @fun17(<4 x i32> %val1, <4 x i32> %val2, <4 x i16> %val3, <4 x i16> %val4, <4 x i32> %val5, <4 x i32> %val6) { ; CHECK-LABEL: fun17: ; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 +; CHECK-NEXT: vceqh %v1, %v28, %v30 +; CHECK-NEXT: vceqf %v0, %v24, %v26 +; CHECK-NEXT: vuphh %v1, %v1 +; CHECK-NEXT: vn %v0, %v0, %v1 ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = icmp eq <2 x i64> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 - ret <2 x i64> %sel + %cmp0 = icmp eq <4 x i32> %val1, %val2 + %cmp1 = icmp eq <4 x i16> %val3, %val4 + %and = and <4 x i1> %cmp0, %cmp1 + %sel = select <4 x i1> %and, <4 x i32> %val5, <4 x i32> %val6 + ret <4 x i32> %sel } -define <2 x i16> @fun18(<2 x i32> %val1, <2 x i32> %val2, <2 x float> %val3, <2 x float> %val4, <2 x i16> %val5, <2 x i16> %val6) { +define <4 x i64> @fun18(<4 x i32> %val1, <4 x i32> %val2, <4 x i16> %val3, <4 x i16> %val4, <4 x i64> %val5, <4 x i64> %val6) { ; CHECK-LABEL: fun18: ; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-NEXT: vceqh %v1, %v28, %v30 +; CHECK-NEXT: vceqf %v0, %v24, %v26 +; CHECK-NEXT: vuphh %v1, %v1 +; CHECK-NEXT: vn %v0, %v0, %v1 +; CHECK-DAG: vuphf [[REG0:%v[0-9]+]], %v0 +; CHECK-DAG: vmrlg [[REG1:%v[0-9]+]], %v0, %v0 +; CHECK-DAG: vuphf [[REG2:%v[0-9]+]], [[REG1]] +; CHECK-NEXT: vsel %v24, %v25, %v29, [[REG0]] +; CHECK-NEXT: vsel %v26, %v27, %v31, [[REG2]] ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel + %cmp0 = icmp eq <4 x i32> %val1, %val2 + %cmp1 = icmp eq <4 x i16> %val3, %val4 + %and = and <4 x i1> %cmp0, %cmp1 + %sel = select <4 x i1> %and, <4 x i64> %val5, <4 x i64> %val6 + ret <4 x i64> %sel } -define <2 x float> @fun19(<2 x i32> %val1, <2 x i32> %val2, <2 x double> %val3, <2 x double> %val4, <2 x float> %val5, <2 x float> %val6) { +define <8 x i16> @fun19(<8 x i32> %val1, <8 x i32> %val2, <8 x i32> %val3, <8 x i32> %val4, <8 x i16> %val5, <8 x i16> %val6) { ; CHECK-LABEL: fun19: ; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v1, %v28, %v30 -; CHECK-NEXT: vceqf %v0, %v24, %v26 -; CHECK-NEXT: vpkg %v1, %v1, %v1 -; CHECK-NEXT: vn %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-DAG: vceqf [[REG0:%v[0-9]+]], %v24, %v28 +; CHECK-DAG: vceqf [[REG1:%v[0-9]+]], %v26, %v30 +; CHECK-DAG: vceqf [[REG2:%v[0-9]+]], %v25, %v29 +; CHECK-DAG: vceqf [[REG3:%v[0-9]+]], %v27, %v31 +; CHECK-DAG: vo [[REG4:%v[0-9]+]], [[REG1]], [[REG3]] +; CHECK-DAG: vo [[REG5:%v[0-9]+]], [[REG0]], [[REG2]] +; CHECK-DAG: vl [[REG6:%v[0-9]+]], 176(%r15) +; CHECK-DAG: vl [[REG7:%v[0-9]+]], 160(%r15) +; CHECK-DAG: vpkf [[REG8:%v[0-9]+]], [[REG5]], [[REG4]] +; CHECK-NEXT: vsel %v24, [[REG7]], [[REG6]], [[REG8]] ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x float> %val5, <2 x float> %val6 - ret <2 x float> %sel + %cmp0 = icmp eq <8 x i32> %val1, %val2 + %cmp1 = icmp eq <8 x i32> %val3, %val4 + %and = or <8 x i1> %cmp0, %cmp1 + %sel = select <8 x i1> %and, <8 x i16> %val5, <8 x i16> %val6 + ret <8 x i16> %sel } -define <2 x i16> @fun20(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i16> %val5, <2 x i16> %val6) { +define <8 x i32> @fun20(<8 x i32> %val1, <8 x i32> %val2, <8 x i32> %val3, <8 x i32> %val4, <8 x i32> %val5, <8 x i32> %val6) { ; CHECK-LABEL: fun20: ; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vceqg %v1, %v24, %v26 -; CHECK-NEXT: larl %r1, .LCPI20_0 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 +; CHECK-DAG: vceqf [[REG0:%v[0-9]+]], %v24, %v28 +; CHECK-DAG: vceqf [[REG1:%v[0-9]+]], %v26, %v30 +; CHECK-DAG: vceqf [[REG2:%v[0-9]+]], %v25, %v29 +; CHECK-DAG: vceqf [[REG3:%v[0-9]+]], %v27, %v31 +; CHECK-DAG: vl [[REG4:%v[0-9]+]], 208(%r15) +; CHECK-DAG: vl [[REG5:%v[0-9]+]], 176(%r15) +; CHECK-DAG: vl [[REG6:%v[0-9]+]], 192(%r15) +; CHECK-DAG: vl [[REG7:%v[0-9]+]], 160(%r15) +; CHECK-DAG: vo [[REG8:%v[0-9]+]], [[REG1]], [[REG3]] +; CHECK-DAG: vo [[REG9:%v[0-9]+]], [[REG0]], [[REG2]] +; CHECK-DAG: vsel %v24, [[REG7]], [[REG6]], [[REG9]] +; CHECK-DAG: vsel %v26, [[REG5]], [[REG4]], [[REG8]] +; CHECK-NEXT: br %r14 + %cmp0 = icmp eq <8 x i32> %val1, %val2 + %cmp1 = icmp eq <8 x i32> %val3, %val4 + %and = or <8 x i1> %cmp0, %cmp1 + %sel = select <8 x i1> %and, <8 x i32> %val5, <8 x i32> %val6 + ret <8 x i32> %sel +} + +define <2 x i32> @fun21(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i32> %val5, <2 x i32> %val6) { +; CHECK-LABEL: fun21: +; CHECK: # BB#0: +; CHECK-DAG: vceqg [[REG0:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vceqg [[REG1:%v[0-9]+]], %v28, %v30 +; CHECK-NEXT: vn %v0, [[REG0]], [[REG1]] +; CHECK-NEXT: vpkg %v0, %v0, %v0 ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 %cmp0 = icmp eq <2 x i64> %val1, %val2 %cmp1 = icmp eq <2 x i64> %val3, %val4 %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel + %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 + ret <2 x i32> %sel } -define <2 x i64> @fun21(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i64> %val5, <2 x i64> %val6) { -; CHECK-LABEL: fun21: +define <2 x i64> @fun22(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i64> %val5, <2 x i64> %val6) { +; CHECK-LABEL: fun22: ; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vceqg %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 +; CHECK-DAG: vceqg [[REG0:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vceqg [[REG1:%v[0-9]+]], %v28, %v30 +; CHECK-NEXT: vn %v0, [[REG0]], [[REG1]] ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 %cmp0 = icmp eq <2 x i64> %val1, %val2 @@ -400,87 +434,83 @@ ret <2 x i64> %sel } -define <2 x i64> @fun22(<2 x i64> %val1, <2 x i64> %val2, <2 x float> %val3, <2 x float> %val4, <2 x i64> %val5, <2 x i64> %val6) { -; CHECK-LABEL: fun22: +define <4 x i32> @fun23(<4 x i64> %val1, <4 x i64> %val2, <4 x i32> %val3, <4 x i32> %val4, <4 x i32> %val5, <4 x i32> %val6) { +; CHECK-LABEL: fun23: ; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 +; CHECK-NEXT: vceqg %v0, %v26, %v30 +; CHECK-NEXT: vceqg %v1, %v24, %v28 ; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vceqg %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-NEXT: vceqf %v1, %v25, %v27 +; CHECK-NEXT: vx %v0, %v0, %v1 +; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i64> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 - ret <2 x i64> %sel + %cmp0 = icmp eq <4 x i64> %val1, %val2 + %cmp1 = icmp eq <4 x i32> %val3, %val4 + %and = xor <4 x i1> %cmp0, %cmp1 + %sel = select <4 x i1> %and, <4 x i32> %val5, <4 x i32> %val6 + ret <4 x i32> %sel } -define <2 x i16> @fun23(<2 x i64> %val1, <2 x i64> %val2, <2 x double> %val3, <2 x double> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun23: +define <4 x i64> @fun24(<4 x i64> %val1, <4 x i64> %val2, <4 x i32> %val3, <4 x i32> %val4, <4 x i64> %val5, <4 x i64> %val6) { +; CHECK-LABEL: fun24: ; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v28, %v30 -; CHECK-NEXT: vceqg %v1, %v24, %v26 -; CHECK-NEXT: larl %r1, .LCPI23_0 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-NEXT: vceqf [[REG0:%v[0-9]+]], %v25, %v27 +; CHECK-NEXT: vuphf [[REG1:%v[0-9]+]], [[REG0]] +; CHECK-NEXT: vmrlg [[REG2:%v[0-9]+]], [[REG0]], [[REG0]] +; CHECK-NEXT: vceqg [[REG3:%v[0-9]+]], %v24, %v28 +; CHECK-NEXT: vceqg [[REG4:%v[0-9]+]], %v26, %v30 +; CHECK-NEXT: vuphf [[REG5:%v[0-9]+]], [[REG2]] +; CHECK-DAG: vl [[REG6:%v[0-9]+]], 176(%r15) +; CHECK-DAG: vl [[REG7:%v[0-9]+]], 160(%r15) +; CHECK-DAG: vx [[REG8:%v[0-9]+]], [[REG4]], [[REG5]] +; CHECK-DAG: vx [[REG9:%v[0-9]+]], [[REG3]], [[REG1]] +; CHECK-DAG: vsel %v24, %v29, [[REG7]], [[REG9]] +; CHECK-DAG: vsel %v26, %v31, [[REG6]], [[REG8]] ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i64> %val1, %val2 - %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel + %cmp0 = icmp eq <4 x i64> %val1, %val2 + %cmp1 = icmp eq <4 x i32> %val3, %val4 + %and = xor <4 x i1> %cmp0, %cmp1 + %sel = select <4 x i1> %and, <4 x i64> %val5, <4 x i64> %val6 + ret <4 x i64> %sel } -define <2 x float> @fun24(<2 x float> %val1, <2 x float> %val2, <2 x float> %val3, <2 x float> %val4, <2 x float> %val5, <2 x float> %val6) { -; CHECK-LABEL: fun24: +define <2 x float> @fun25(<2 x float> %val1, <2 x float> %val2, <2 x double> %val3, <2 x double> %val4, <2 x float> %val5, <2 x float> %val6) { +; CHECK-LABEL: fun25: ; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 +; CHECK-NEXT: vmrlf %v0, %v26, %v26 +; CHECK-NEXT: vmrlf %v1, %v24, %v24 ; CHECK-NEXT: vldeb %v0, %v0 ; CHECK-NEXT: vldeb %v1, %v1 ; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 +; CHECK-NEXT: vmrhf %v1, %v26, %v26 +; CHECK-NEXT: vmrhf %v2, %v24, %v24 ; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 ; CHECK-NEXT: vldeb %v2, %v2 ; CHECK-NEXT: vfchdb %v1, %v2, %v1 ; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 +; CHECK-NEXT: vfchdb %v1, %v28, %v30 +; CHECK-NEXT: vpkg %v1, %v1, %v1 +; CHECK-NEXT: vo %v0, %v0, %v1 ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 +; +; CHECK-Z14-LABEL: fun25: +; CHECK-Z14: # BB#0: +; CHECK-Z14-NEXT: vfchdb %v1, %v28, %v30 +; CHECK-Z14-NEXT: vfchsb %v0, %v24, %v26 +; CHECK-Z14-NEXT: vpkg %v1, %v1, %v1 +; CHECK-Z14-NEXT: vo %v0, %v0, %v1 +; CHECK-Z14-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-Z14-NEXT: br %r14 %cmp0 = fcmp ogt <2 x float> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 + %cmp1 = fcmp ogt <2 x double> %val3, %val4 + %and = or <2 x i1> %cmp0, %cmp1 %sel = select <2 x i1> %and, <2 x float> %val5, <2 x float> %val6 ret <2 x float> %sel } -define <2 x i32> @fun25(<2 x float> %val1, <2 x float> %val2, <2 x double> %val3, <2 x double> %val4, <2 x i32> %val5, <2 x i32> %val6) { -; CHECK-LABEL: fun25: +define <2 x double> @fun26(<2 x float> %val1, <2 x float> %val2, <2 x double> %val3, <2 x double> %val4, <2 x double> %val5, <2 x double> %val6) { +; CHECK-LABEL: fun26: ; CHECK: # BB#0: ; CHECK-NEXT: vmrlf %v0, %v26, %v26 ; CHECK-NEXT: vmrlf %v1, %v24, %v24 @@ -493,5292 +523,327 @@ ; CHECK-NEXT: vldeb %v2, %v2 ; CHECK-NEXT: vfchdb %v1, %v2, %v1 ; CHECK-NEXT: vpkg %v0, %v1, %v0 +; CHECK-NEXT: vuphf %v0, %v0 ; CHECK-NEXT: vfchdb %v1, %v28, %v30 -; CHECK-NEXT: vpkg %v1, %v1, %v1 -; CHECK-NEXT: vn %v0, %v0, %v1 +; CHECK-NEXT: vo %v0, %v0, %v1 ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 +; +; CHECK-Z14-LABEL: fun26: +; CHECK-Z14: # BB#0: +; CHECK-Z14-NEXT: vfchsb %v0, %v24, %v26 +; CHECK-Z14-NEXT: vuphf %v0, %v0 +; CHECK-Z14-NEXT: vfchdb %v1, %v28, %v30 +; CHECK-Z14-NEXT: vo %v0, %v0, %v1 +; CHECK-Z14-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-Z14-NEXT: br %r14 %cmp0 = fcmp ogt <2 x float> %val1, %val2 %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = and <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel -} - -define <4 x i16> @fun26(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3, <4 x i32> %val4, <4 x i16> %val5, <4 x i16> %val6) { -; CHECK-LABEL: fun26: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = icmp eq <4 x i32> %val3, %val4 - %and = and <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i16> %val5, <4 x i16> %val6 - ret <4 x i16> %sel + %and = or <2 x i1> %cmp0, %cmp1 + %sel = select <2 x i1> %and, <2 x double> %val5, <2 x double> %val6 + ret <2 x double> %sel } -define <4 x i32> @fun27(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3, <4 x i32> %val4, <4 x i32> %val5, <4 x i32> %val6) { +; Also check a widening select of a vector of floats +define <2 x float> @fun27(<2 x i8> %val1, <2 x i8> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x float> %val5, <2 x float> %val6) { ; CHECK-LABEL: fun27: ; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 +; CHECK-DAG: vceqb [[REG0:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vceqb [[REG1:%v[0-9]+]], %v28, %v30 +; CHECK-NEXT: vo %v0, [[REG0]], [[REG1]] +; CHECK-NEXT: vuphb %v0, %v0 +; CHECK-NEXT: vuphh %v0, %v0 ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = icmp eq <4 x i32> %val3, %val4 - %and = and <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i32> %val5, <4 x i32> %val6 - ret <4 x i32> %sel + %cmp0 = icmp eq <2 x i8> %val1, %val2 + %cmp1 = icmp eq <2 x i8> %val3, %val4 + %and = or <2 x i1> %cmp0, %cmp1 + %sel = select <2 x i1> %and, <2 x float> %val5, <2 x float> %val6 + ret <2 x float> %sel } -define <4 x i64> @fun28(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3, <4 x i32> %val4, <4 x i64> %val5, <4 x i64> %val6) { +define <4 x float> @fun28(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4, <4 x float> %val5, <4 x float> %val6) { ; CHECK-LABEL: fun28: ; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v1 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 +; CHECK-DAG: vmrlf [[REG0:%v[0-9]+]], %v26, %v26 +; CHECK-DAG: vmrlf [[REG1:%v[0-9]+]], %v24, %v24 +; CHECK-DAG: vldeb [[REG2:%v[0-9]+]], [[REG0]] +; CHECK-DAG: vldeb [[REG3:%v[0-9]+]], [[REG1]] +; CHECK-DAG: vfchdb [[REG4:%v[0-9]+]], [[REG3]], [[REG2]] +; CHECK-DAG: vmrhf [[REG5:%v[0-9]+]], %v26, %v26 +; CHECK-DAG: vmrhf [[REG6:%v[0-9]+]], %v24, %v24 +; CHECK-DAG: vldeb [[REG7:%v[0-9]+]], [[REG5]] +; CHECK-DAG: vmrhf [[REG8:%v[0-9]+]], %v28, %v28 +; CHECK-DAG: vldeb [[REG9:%v[0-9]+]], [[REG6]] +; CHECK-DAG: vfchdb [[REG10:%v[0-9]+]], [[REG9]], [[REG7]] +; CHECK-DAG: vpkg [[REG11:%v[0-9]+]], [[REG10]], [[REG4]] +; CHECK-DAG: vmrlf [[REG12:%v[0-9]+]], %v30, %v30 +; CHECK-DAG: vmrlf [[REG13:%v[0-9]+]], %v28, %v28 +; CHECK-DAG: vldeb [[REG14:%v[0-9]+]], [[REG12]] +; CHECK-DAG: vldeb [[REG15:%v[0-9]+]], [[REG13]] +; CHECK-DAG: vfchdb [[REG16:%v[0-9]+]], [[REG15]], [[REG14]] +; CHECK-DAG: vmrhf [[REG17:%v[0-9]+]], %v30, %v30 +; CHECK-DAG: vldeb [[REG19:%v[0-9]+]], [[REG17]] +; CHECK-DAG: vldeb [[REG20:%v[0-9]+]], [[REG8]] +; CHECK-NEXT: vfchdb %v2, [[REG20]], [[REG19]] +; CHECK-NEXT: vpkg [[REG21:%v[0-9]+]], %v2, [[REG16]] +; CHECK-NEXT: vx %v0, [[REG11]], [[REG21]] +; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = icmp eq <4 x i32> %val3, %val4 - %and = and <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i64> %val5, <4 x i64> %val6 - ret <4 x i64> %sel +; +; CHECK-Z14-LABEL: fun28: +; CHECK-Z14: # BB#0: +; CHECK-Z14-NEXT: vfchsb %v0, %v24, %v26 +; CHECK-Z14-NEXT: vfchsb %v1, %v28, %v30 +; CHECK-Z14-NEXT: vx %v0, %v0, %v1 +; CHECK-Z14-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-Z14-NEXT: br %r14 + %cmp0 = fcmp ogt <4 x float> %val1, %val2 + %cmp1 = fcmp ogt <4 x float> %val3, %val4 + %and = xor <4 x i1> %cmp0, %cmp1 + %sel = select <4 x i1> %and, <4 x float> %val5, <4 x float> %val6 + ret <4 x float> %sel } -define <4 x i32> @fun29(<4 x i32> %val1, <4 x i32> %val2, <4 x i64> %val3, <4 x i64> %val4, <4 x i32> %val5, <4 x i32> %val6) { +define <4 x double> @fun29(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4, <4 x double> %val5, <4 x double> %val6) { ; CHECK-LABEL: fun29: ; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v30, %v27 -; CHECK-NEXT: vceqg %v1, %v28, %v25 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = icmp eq <4 x i64> %val3, %val4 - %and = and <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i32> %val5, <4 x i32> %val6 - ret <4 x i32> %sel -} - -define <4 x i16> @fun30(<4 x i32> %val1, <4 x i32> %val2, <4 x float> %val3, <4 x float> %val4, <4 x i16> %val5, <4 x i16> %val6) { -; CHECK-LABEL: fun30: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 +; CHECK-NEXT: vmrlf %v0, %v26, %v26 +; CHECK-NEXT: vmrlf %v1, %v24, %v24 ; CHECK-NEXT: vldeb %v0, %v0 ; CHECK-NEXT: vldeb %v1, %v1 ; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 +; CHECK-NEXT: vmrhf %v1, %v26, %v26 +; CHECK-NEXT: vmrhf %v2, %v24, %v24 ; CHECK-NEXT: vldeb %v1, %v1 +; CHECK-NEXT: vmrhf %v3, %v28, %v28 ; CHECK-NEXT: vldeb %v2, %v2 ; CHECK-NEXT: vfchdb %v1, %v2, %v1 ; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-NEXT: vmrlf %v1, %v30, %v30 +; CHECK-NEXT: vmrlf %v2, %v28, %v28 +; CHECK-NEXT: vldeb %v1, %v1 +; CHECK-NEXT: vldeb %v2, %v2 +; CHECK-NEXT: vfchdb %v1, %v2, %v1 +; CHECK-NEXT: vmrhf %v2, %v30, %v30 +; CHECK-NEXT: vldeb %v2, %v2 +; CHECK-NEXT: vldeb %v3, %v3 +; CHECK-NEXT: vfchdb %v2, %v3, %v2 +; CHECK-NEXT: vpkg %v1, %v2, %v1 +; CHECK-NEXT: vx %v0, %v0, %v1 +; CHECK-NEXT: vmrlg %v1, %v0, %v0 +; CHECK-NEXT: vuphf %v1, %v1 +; CHECK-NEXT: vuphf %v0, %v0 +; CHECK-NEXT: vsel %v24, %v25, %v29, %v0 +; CHECK-NEXT: vsel %v26, %v27, %v31, %v1 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 +; +; CHECK-Z14-LABEL: fun29: +; CHECK-Z14: # BB#0: +; CHECK-Z14-NEXT: vfchsb %v0, %v24, %v26 +; CHECK-Z14-NEXT: vfchsb %v1, %v28, %v30 +; CHECK-Z14-NEXT: vx %v0, %v0, %v1 +; CHECK-Z14-NEXT: vmrlg %v1, %v0, %v0 +; CHECK-Z14-NEXT: vuphf %v1, %v1 +; CHECK-Z14-NEXT: vuphf %v0, %v0 +; CHECK-Z14-NEXT: vsel %v24, %v25, %v29, %v0 +; CHECK-Z14-NEXT: vsel %v26, %v27, %v31, %v1 +; CHECK-Z14-NEXT: br %r14 + %cmp0 = fcmp ogt <4 x float> %val1, %val2 %cmp1 = fcmp ogt <4 x float> %val3, %val4 - %and = and <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i16> %val5, <4 x i16> %val6 - ret <4 x i16> %sel -} - -define <4 x i8> @fun31(<4 x i32> %val1, <4 x i32> %val2, <4 x double> %val3, <4 x double> %val4, <4 x i8> %val5, <4 x i8> %val6) { -; CHECK-LABEL: fun31: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v30, %v27 -; CHECK-NEXT: vfchdb %v1, %v28, %v25 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: larl %r1, .LCPI31_0 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = fcmp ogt <4 x double> %val3, %val4 - %and = and <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i8> %val5, <4 x i8> %val6 - ret <4 x i8> %sel -} - -define <4 x i32> @fun32(<4 x i64> %val1, <4 x i64> %val2, <4 x i64> %val3, <4 x i64> %val4, <4 x i32> %val5, <4 x i32> %val6) { -; CHECK-LABEL: fun32: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v27, %v31 -; CHECK-NEXT: vceqg %v1, %v26, %v30 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vceqg %v1, %v25, %v29 -; CHECK-NEXT: vceqg %v2, %v24, %v28 -; CHECK-NEXT: vn %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i64> %val1, %val2 - %cmp1 = icmp eq <4 x i64> %val3, %val4 - %and = and <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i32> %val5, <4 x i32> %val6 - ret <4 x i32> %sel + %and = xor <4 x i1> %cmp0, %cmp1 + %sel = select <4 x i1> %and, <4 x double> %val5, <4 x double> %val6 + ret <4 x double> %sel } -define <4 x i64> @fun33(<4 x i64> %val1, <4 x i64> %val2, <4 x i64> %val3, <4 x i64> %val4, <4 x i64> %val5, <4 x i64> %val6) { -; CHECK-LABEL: fun33: +define <8 x float> @fun30(<8 x float> %val1, <8 x float> %val2, <8 x double> %val3, <8 x double> %val4, <8 x float> %val5, <8 x float> %val6) { +; CHECK-LABEL: fun30: ; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v25, %v29 -; CHECK-NEXT: vceqg %v1, %v24, %v28 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vceqg %v0, %v27, %v31 -; CHECK-NEXT: vceqg %v1, %v26, %v30 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 +; CHECK-NEXT: vmrlf %v16, %v28, %v28 +; CHECK-NEXT: vmrlf %v17, %v24, %v24 +; CHECK-NEXT: vldeb %v16, %v16 +; CHECK-NEXT: vldeb %v17, %v17 +; CHECK-NEXT: vfchdb %v16, %v17, %v16 +; CHECK-NEXT: vmrhf %v17, %v28, %v28 +; CHECK-NEXT: vmrhf %v18, %v24, %v24 +; CHECK-NEXT: vldeb %v17, %v17 +; CHECK-NEXT: vl %v4, 192(%r15) +; CHECK-NEXT: vldeb %v18, %v18 +; CHECK-NEXT: vl %v5, 208(%r15) +; CHECK-NEXT: vl %v6, 160(%r15) +; CHECK-NEXT: vl %v7, 176(%r15) +; CHECK-NEXT: vl %v0, 272(%r15) +; CHECK-NEXT: vl %v1, 240(%r15) +; CHECK-NEXT: vfchdb %v17, %v18, %v17 +; CHECK-NEXT: vl %v2, 256(%r15) +; CHECK-NEXT: vl %v3, 224(%r15) +; CHECK-NEXT: vpkg %v16, %v17, %v16 +; CHECK-NEXT: vmrlf %v17, %v30, %v30 +; CHECK-NEXT: vmrlf %v18, %v26, %v26 +; CHECK-NEXT: vmrhf %v19, %v26, %v26 +; CHECK-NEXT: vfchdb %v7, %v27, %v7 +; CHECK-NEXT: vfchdb %v6, %v25, %v6 +; CHECK-NEXT: vfchdb %v5, %v31, %v5 +; CHECK-NEXT: vfchdb %v4, %v29, %v4 +; CHECK-NEXT: vpkg %v6, %v6, %v7 +; CHECK-NEXT: vpkg %v4, %v4, %v5 +; CHECK-NEXT: vn %v5, %v16, %v6 +; CHECK-NEXT: vsel %v24, %v3, %v2, %v5 +; CHECK-NEXT: vldeb %v17, %v17 +; CHECK-NEXT: vldeb %v18, %v18 +; CHECK-NEXT: vfchdb %v17, %v18, %v17 +; CHECK-NEXT: vmrhf %v18, %v30, %v30 +; CHECK-NEXT: vldeb %v18, %v18 +; CHECK-NEXT: vldeb %v19, %v19 +; CHECK-NEXT: vfchdb %v18, %v19, %v18 +; CHECK-NEXT: vpkg %v17, %v18, %v17 +; CHECK-NEXT: vn %v4, %v17, %v4 +; CHECK-NEXT: vsel %v26, %v1, %v0, %v4 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i64> %val1, %val2 - %cmp1 = icmp eq <4 x i64> %val3, %val4 - %and = and <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i64> %val5, <4 x i64> %val6 - ret <4 x i64> %sel +; +; CHECK-Z14-LABEL: fun30: +; CHECK-Z14: # BB#0: +; CHECK-Z14-NEXT: vl %v4, 192(%r15) +; CHECK-Z14-NEXT: vl %v5, 208(%r15) +; CHECK-Z14-NEXT: vl %v6, 160(%r15) +; CHECK-Z14-NEXT: vl %v7, 176(%r15) +; CHECK-Z14-NEXT: vfchdb %v7, %v27, %v7 +; CHECK-Z14-NEXT: vfchdb %v6, %v25, %v6 +; CHECK-Z14-NEXT: vfchdb %v5, %v31, %v5 +; CHECK-Z14-NEXT: vfchdb %v4, %v29, %v4 +; CHECK-Z14-NEXT: vfchsb %v16, %v24, %v28 +; CHECK-Z14-NEXT: vfchsb %v17, %v26, %v30 +; CHECK-Z14-NEXT: vpkg %v6, %v6, %v7 +; CHECK-Z14-NEXT: vpkg %v4, %v4, %v5 +; CHECK-Z14-NEXT: vl %v0, 272(%r15) +; CHECK-Z14-NEXT: vl %v1, 240(%r15) +; CHECK-Z14-NEXT: vl %v2, 256(%r15) +; CHECK-Z14-NEXT: vl %v3, 224(%r15) +; CHECK-Z14-NEXT: vn %v4, %v17, %v4 +; CHECK-Z14-NEXT: vn %v5, %v16, %v6 +; CHECK-Z14-NEXT: vsel %v24, %v3, %v2, %v5 +; CHECK-Z14-NEXT: vsel %v26, %v1, %v0, %v4 +; CHECK-Z14-NEXT: br %r14 + %cmp0 = fcmp ogt <8 x float> %val1, %val2 + %cmp1 = fcmp ogt <8 x double> %val3, %val4 + %and = and <8 x i1> %cmp0, %cmp1 + %sel = select <8 x i1> %and, <8 x float> %val5, <8 x float> %val6 + ret <8 x float> %sel } -define <4 x i64> @fun34(<4 x i64> %val1, <4 x i64> %val2, <4 x float> %val3, <4 x float> %val4, <4 x i64> %val5, <4 x i64> %val6) { -; CHECK-LABEL: fun34: +define <2 x float> @fun31(<2 x double> %val1, <2 x double> %val2, <2 x double> %val3, <2 x double> %val4, <2 x float> %val5, <2 x float> %val6) { +; CHECK-LABEL: fun31: ; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v27, %v27 -; CHECK-NEXT: vmrlf %v1, %v25, %v25 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v27, %v27 -; CHECK-NEXT: vmrhf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vceqg %v2, %v24, %v28 -; CHECK-NEXT: vn %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v29, %v2, %v1 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vceqg %v1, %v26, %v30 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vsel %v26, %v31, %v1, %v0 +; CHECK-DAG: vfchdb [[REG0:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v28, %v30 +; CHECK-NEXT: vx %v0, [[REG0]], [[REG1]] +; CHECK-NEXT: vpkg %v0, %v0, %v0 +; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i64> %val1, %val2 - %cmp1 = fcmp ogt <4 x float> %val3, %val4 - %and = and <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i64> %val5, <4 x i64> %val6 - ret <4 x i64> %sel + %cmp0 = fcmp ogt <2 x double> %val1, %val2 + %cmp1 = fcmp ogt <2 x double> %val3, %val4 + %and = xor <2 x i1> %cmp0, %cmp1 + %sel = select <2 x i1> %and, <2 x float> %val5, <2 x float> %val6 + ret <2 x float> %sel } -define <4 x float> @fun35(<4 x i64> %val1, <4 x i64> %val2, <4 x double> %val3, <4 x double> %val4, <4 x float> %val5, <4 x float> %val6) { -; CHECK-LABEL: fun35: +define <2 x double> @fun32(<2 x double> %val1, <2 x double> %val2, <2 x double> %val3, <2 x double> %val4, <2 x double> %val5, <2 x double> %val6) { +; CHECK-LABEL: fun32: ; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v27, %v31 -; CHECK-NEXT: vceqg %v1, %v26, %v30 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vfchdb %v1, %v25, %v29 -; CHECK-NEXT: vceqg %v2, %v24, %v28 -; CHECK-NEXT: vn %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 +; CHECK-DAG: vfchdb [[REG0:%v[0-9]+]], %v24, %v26 +; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v28, %v30 +; CHECK-NEXT: vx %v0, [[REG0]], [[REG1]] +; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i64> %val1, %val2 - %cmp1 = fcmp ogt <4 x double> %val3, %val4 - %and = and <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x float> %val5, <4 x float> %val6 - ret <4 x float> %sel + %cmp0 = fcmp ogt <2 x double> %val1, %val2 + %cmp1 = fcmp ogt <2 x double> %val3, %val4 + %and = xor <2 x i1> %cmp0, %cmp1 + %sel = select <2 x i1> %and, <2 x double> %val5, <2 x double> %val6 + ret <2 x double> %sel } -define <4 x i16> @fun36(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4, <4 x i16> %val5, <4 x i16> %val6) { -; CHECK-LABEL: fun36: +define <4 x float> @fun33(<4 x double> %val1, <4 x double> %val2, <4 x float> %val3, <4 x float> %val4, <4 x float> %val5, <4 x float> %val6) { +; CHECK-LABEL: fun33: ; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 +; CHECK-NEXT: vfchdb %v0, %v26, %v30 +; CHECK-NEXT: vfchdb %v1, %v24, %v28 ; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 +; CHECK-NEXT: vmrlf %v1, %v27, %v27 +; CHECK-NEXT: vmrlf %v2, %v25, %v25 ; CHECK-NEXT: vldeb %v1, %v1 ; CHECK-NEXT: vldeb %v2, %v2 ; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 +; CHECK-NEXT: vmrhf %v2, %v27, %v27 +; CHECK-NEXT: vmrhf %v3, %v25, %v25 ; CHECK-NEXT: vldeb %v2, %v2 ; CHECK-NEXT: vldeb %v3, %v3 ; CHECK-NEXT: vfchdb %v2, %v3, %v2 ; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-NEXT: vn %v0, %v0, %v1 +; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 ; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <4 x float> %val1, %val2 +; +; CHECK-Z14-LABEL: fun33: +; CHECK-Z14: # BB#0: +; CHECK-Z14-NEXT: vfchdb %v0, %v26, %v30 +; CHECK-Z14-NEXT: vfchdb %v1, %v24, %v28 +; CHECK-Z14-NEXT: vpkg %v0, %v1, %v0 +; CHECK-Z14-NEXT: vfchsb %v1, %v25, %v27 +; CHECK-Z14-NEXT: vn %v0, %v0, %v1 +; CHECK-Z14-NEXT: vsel %v24, %v29, %v31, %v0 +; CHECK-Z14-NEXT: br %r14 + %cmp0 = fcmp ogt <4 x double> %val1, %val2 %cmp1 = fcmp ogt <4 x float> %val3, %val4 %and = and <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i16> %val5, <4 x i16> %val6 - ret <4 x i16> %sel + %sel = select <4 x i1> %and, <4 x float> %val5, <4 x float> %val6 + ret <4 x float> %sel } -define <4 x float> @fun37(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4, <4 x float> %val5, <4 x float> %val6) { -; CHECK-LABEL: fun37: +define <4 x double> @fun34(<4 x double> %val1, <4 x double> %val2, <4 x float> %val3, <4 x float> %val4, <4 x double> %val5, <4 x double> %val6) { +; CHECK-LABEL: fun34: ; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 +; CHECK-NEXT: vmrlf [[REG0:%v[0-9]+]], %v27, %v27 +; CHECK-NEXT: vmrlf [[REG1:%v[0-9]+]], %v25, %v25 +; CHECK-NEXT: vldeb [[REG2:%v[0-9]+]], [[REG0]] +; CHECK-NEXT: vldeb [[REG3:%v[0-9]+]], [[REG1]] +; CHECK-NEXT: vfchdb [[REG4:%v[0-9]+]], [[REG3]], [[REG2]] +; CHECK-NEXT: vmrhf [[REG5:%v[0-9]+]], %v27, %v27 +; CHECK-NEXT: vmrhf [[REG6:%v[0-9]+]], %v25, %v25 +; CHECK-DAG: vldeb [[REG7:%v[0-9]+]], [[REG5]] +; CHECK-DAG: vl [[REG8:%v[0-9]+]], 176(%r15) +; CHECK-DAG: vldeb [[REG9:%v[0-9]+]], [[REG6]] +; CHECK-DAG: vl [[REG10:%v[0-9]+]], 160(%r15) +; CHECK-DAG: vfchdb [[REG11:%v[0-9]+]], [[REG9]], [[REG7]] +; CHECK-DAG: vpkg [[REG12:%v[0-9]+]], [[REG11]], [[REG4]] +; CHECK-DAG: vuphf [[REG13:%v[0-9]+]], [[REG12]] +; CHECK-DAG: vmrlg [[REG14:%v[0-9]+]], [[REG12]], [[REG12]] +; CHECK-NEXT: vfchdb [[REG15:%v[0-9]+]], %v24, %v28 +; CHECK-NEXT: vfchdb [[REG16:%v[0-9]+]], %v26, %v30 +; CHECK-NEXT: vuphf [[REG17:%v[0-9]+]], [[REG14]] +; CHECK-NEXT: vn [[REG18:%v[0-9]+]], [[REG16]], [[REG17]] +; CHECK-NEXT: vn [[REG19:%v[0-9]+]], [[REG15]], [[REG13]] +; CHECK-NEXT: vsel %v24, %v29, [[REG10]], [[REG19]] +; CHECK-NEXT: vsel %v26, %v31, [[REG8]], [[REG18]] ; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <4 x float> %val1, %val2 +; +; CHECK-Z14-LABEL: fun34: +; CHECK-Z14: # BB#0: +; CHECK-Z14-NEXT: vfchsb %v4, %v25, %v27 +; CHECK-Z14-NEXT: vuphf %v5, %v4 +; CHECK-Z14-NEXT: vmrlg %v4, %v4, %v4 +; CHECK-Z14-NEXT: vfchdb %v2, %v24, %v28 +; CHECK-Z14-NEXT: vfchdb %v3, %v26, %v30 +; CHECK-Z14-NEXT: vuphf %v4, %v4 +; CHECK-Z14-NEXT: vl %v0, 176(%r15) +; CHECK-Z14-NEXT: vl %v1, 160(%r15) +; CHECK-Z14-NEXT: vn %v3, %v3, %v4 +; CHECK-Z14-NEXT: vn %v2, %v2, %v5 +; CHECK-Z14-NEXT: vsel %v24, %v29, %v1, %v2 +; CHECK-Z14-NEXT: vsel %v26, %v31, %v0, %v3 +; CHECK-Z14-NEXT: br %r14 + %cmp0 = fcmp ogt <4 x double> %val1, %val2 %cmp1 = fcmp ogt <4 x float> %val3, %val4 %and = and <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x float> %val5, <4 x float> %val6 - ret <4 x float> %sel + %sel = select <4 x i1> %and, <4 x double> %val5, <4 x double> %val6 + ret <4 x double> %sel } - -define <4 x double> @fun38(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4, <4 x double> %val5, <4 x double> %val6) { -; CHECK-LABEL: fun38: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v1 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <4 x float> %val1, %val2 - %cmp1 = fcmp ogt <4 x float> %val3, %val4 - %and = and <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x double> %val5, <4 x double> %val6 - ret <4 x double> %sel -} - -define <4 x i8> @fun39(<4 x float> %val1, <4 x float> %val2, <4 x double> %val3, <4 x double> %val4, <4 x i8> %val5, <4 x i8> %val6) { -; CHECK-LABEL: fun39: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v30, %v27 -; CHECK-NEXT: vfchdb %v1, %v28, %v25 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: larl %r1, .LCPI39_0 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <4 x float> %val1, %val2 - %cmp1 = fcmp ogt <4 x double> %val3, %val4 - %and = and <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i8> %val5, <4 x i8> %val6 - ret <4 x i8> %sel -} - -define <8 x i8> @fun40(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i8> %val5, <8 x i8> %val6) { -; CHECK-LABEL: fun40: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i16> %val3, %val4 - %and = and <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i8> %val5, <8 x i8> %val6 - ret <8 x i8> %sel -} - -define <8 x i16> @fun41(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i16> %val5, <8 x i16> %val6) { -; CHECK-LABEL: fun41: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i16> %val3, %val4 - %and = and <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i16> %val5, <8 x i16> %val6 - ret <8 x i16> %sel -} - -define <8 x i32> @fun42(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i32> %val5, <8 x i32> %val6) { -; CHECK-LABEL: fun42: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v1 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i16> %val3, %val4 - %and = and <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i32> %val5, <8 x i32> %val6 - ret <8 x i32> %sel -} - -define <8 x i64> @fun43(<8 x i16> %val1, <8 x i16> %val2, <8 x i32> %val3, <8 x i32> %val4, <8 x i64> %val5, <8 x i64> %val6) { -; CHECK-LABEL: fun43: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vceqf %v0, %v28, %v25 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vn %v0, %v2, %v0 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vuphf %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v29, %v3, %v2 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vsel %v26, %v31, %v2, %v0 -; CHECK-NEXT: vceqf %v0, %v30, %v27 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v28, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i32> %val3, %val4 - %and = and <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i64> %val5, <8 x i64> %val6 - ret <8 x i64> %sel -} - -define <8 x i8> @fun44(<8 x i16> %val1, <8 x i16> %val2, <8 x i64> %val3, <8 x i64> %val4, <8 x i8> %val5, <8 x i8> %val6) { -; CHECK-LABEL: fun44: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v1, 160(%r15) -; CHECK-NEXT: vceqg %v0, %v27, %v0 -; CHECK-NEXT: vceqg %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqg %v1, %v30, %v31 -; CHECK-NEXT: vceqg %v2, %v28, %v29 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vlrepg %v1, 200(%r15) -; CHECK-NEXT: vlrepg %v2, 192(%r15) -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i64> %val3, %val4 - %and = and <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i8> %val5, <8 x i8> %val6 - ret <8 x i8> %sel -} - -define <8 x i16> @fun45(<8 x i16> %val1, <8 x i16> %val2, <8 x float> %val3, <8 x float> %val4, <8 x i16> %val5, <8 x i16> %val6) { -; CHECK-LABEL: fun45: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v27, %v27 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v27, %v27 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v28, %v28 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v25, %v25 -; CHECK-NEXT: vmrlf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = fcmp ogt <8 x float> %val3, %val4 - %and = and <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i16> %val5, <8 x i16> %val6 - ret <8 x i16> %sel -} - -define <8 x i32> @fun46(<8 x i16> %val1, <8 x i16> %val2, <8 x double> %val3, <8 x double> %val4, <8 x i32> %val5, <8 x i32> %val6) { -; CHECK-LABEL: fun46: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v30, %v31 -; CHECK-NEXT: vfchdb %v1, %v28, %v29 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vn %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vfchdb %v0, %v27, %v0 -; CHECK-NEXT: vfchdb %v2, %v25, %v2 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vpkg %v0, %v2, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = fcmp ogt <8 x double> %val3, %val4 - %and = and <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i32> %val5, <8 x i32> %val6 - ret <8 x i32> %sel -} - -define <8 x i32> @fun47(<8 x i32> %val1, <8 x i32> %val2, <8 x i64> %val3, <8 x i64> %val4, <8 x i32> %val5, <8 x i32> %val6) { -; CHECK-LABEL: fun47: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v1, 160(%r15) -; CHECK-NEXT: vceqg %v0, %v27, %v0 -; CHECK-NEXT: vceqg %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v28 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vceqg %v0, %v31, %v0 -; CHECK-NEXT: vceqg %v1, %v29, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v26, %v30 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 240(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i32> %val1, %val2 - %cmp1 = icmp eq <8 x i64> %val3, %val4 - %and = and <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i32> %val5, <8 x i32> %val6 - ret <8 x i32> %sel -} - -define <8 x double> @fun48(<8 x i32> %val1, <8 x i32> %val2, <8 x float> %val3, <8 x float> %val4, <8 x double> %val5, <8 x double> %val6) { -; CHECK-LABEL: fun48: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v29, %v29 -; CHECK-NEXT: vmrlf %v1, %v25, %v25 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v29, %v29 -; CHECK-NEXT: vmrhf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v28 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vsel %v24, %v3, %v2, %v1 -; CHECK-NEXT: vmrlf %v1, %v31, %v31 -; CHECK-NEXT: vmrlf %v2, %v27, %v27 -; CHECK-NEXT: vmrhf %v3, %v27, %v27 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v31, %v31 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vceqf %v2, %v26, %v30 -; CHECK-NEXT: vn %v1, %v2, %v1 -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 240(%r15) -; CHECK-NEXT: vl %v3, 176(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v2, %v0 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i32> %val1, %val2 - %cmp1 = fcmp ogt <8 x float> %val3, %val4 - %and = and <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x double> %val5, <8 x double> %val6 - ret <8 x double> %sel -} - -define <8 x double> @fun49(<8 x i32> %val1, <8 x i32> %val2, <8 x double> %val3, <8 x double> %val4, <8 x double> %val5, <8 x double> %val6) { -; CHECK-LABEL: fun49: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 160(%r15) -; CHECK-NEXT: vceqf %v1, %v24, %v28 -; CHECK-NEXT: vfchdb %v0, %v25, %v0 -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vn %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vl %v3, 224(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 192(%r15) -; CHECK-NEXT: vceqf %v2, %v26, %v30 -; CHECK-NEXT: vfchdb %v0, %v29, %v0 -; CHECK-NEXT: vuphf %v3, %v2 -; CHECK-NEXT: vn %v0, %v3, %v0 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vl %v4, 256(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v0 -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v27, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 304(%r15) -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v1, %v0 -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vmrlg %v1, %v2, %v2 -; CHECK-NEXT: vfchdb %v0, %v31, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vl %v2, 272(%r15) -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 336(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i32> %val1, %val2 - %cmp1 = fcmp ogt <8 x double> %val3, %val4 - %and = and <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x double> %val5, <8 x double> %val6 - ret <8 x double> %sel -} - -define <8 x i64> @fun50(<8 x float> %val1, <8 x float> %val2, <8 x double> %val3, <8 x double> %val4, <8 x i64> %val5, <8 x i64> %val6) { -; CHECK-LABEL: fun50: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v28, %v28 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v28, %v28 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vl %v3, 224(%r15) -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vl %v4, 256(%r15) -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vfchdb %v2, %v25, %v2 -; CHECK-NEXT: vn %v1, %v1, %v2 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v1 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vmrlf %v2, %v26, %v26 -; CHECK-NEXT: vmrhf %v3, %v26, %v26 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vfchdb %v3, %v29, %v3 -; CHECK-NEXT: vn %v2, %v2, %v3 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vfchdb %v2, %v27, %v2 -; CHECK-NEXT: vn %v0, %v0, %v2 -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v2, %v0 -; CHECK-NEXT: vl %v2, 272(%r15) -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vfchdb %v1, %v31, %v1 -; CHECK-NEXT: vn %v0, %v0, %v1 -; CHECK-NEXT: vl %v1, 336(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <8 x float> %val1, %val2 - %cmp1 = fcmp ogt <8 x double> %val3, %val4 - %and = and <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i64> %val5, <8 x i64> %val6 - ret <8 x i64> %sel -} - -define <16 x i8> @fun51(<16 x i8> %val1, <16 x i8> %val2, <16 x i8> %val3, <16 x i8> %val4, <16 x i8> %val5, <16 x i8> %val6) { -; CHECK-LABEL: fun51: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v28, %v30 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i8> %val3, %val4 - %and = and <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6 - ret <16 x i8> %sel -} - -define <16 x i16> @fun52(<16 x i8> %val1, <16 x i8> %val2, <16 x i8> %val3, <16 x i8> %val4, <16 x i16> %val5, <16 x i16> %val6) { -; CHECK-LABEL: fun52: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v28, %v30 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vuphb %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v1 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i8> %val3, %val4 - %and = and <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i16> %val5, <16 x i16> %val6 - ret <16 x i16> %sel -} - -define <16 x i64> @fun53(<16 x i8> %val1, <16 x i8> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i64> %val5, <16 x i64> %val6) { -; CHECK-LABEL: fun53: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vceqh %v0, %v28, %v25 -; CHECK-NEXT: vuphb %v2, %v1 -; CHECK-NEXT: vn %v0, %v2, %v0 -; CHECK-NEXT: vuphh %v2, %v0 -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v24, %v29, %v3, %v2 -; CHECK-NEXT: vpkg %v2, %v0, %v0 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vl %v3, 272(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v26, %v31, %v3, %v2 -; CHECK-NEXT: vmrlg %v2, %v0, %v0 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 12 -; CHECK-NEXT: vl %v3, 288(%r15) -; CHECK-NEXT: vl %v4, 160(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vl %v3, 176(%r15) -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vsel %v0, %v3, %v2, %v0 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vceqh %v2, %v30, %v27 -; CHECK-NEXT: vlr %v30, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vn %v1, %v1, %v2 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v25, %v4, %v3, %v2 -; CHECK-NEXT: vl %v3, 336(%r15) -; CHECK-NEXT: vl %v4, 208(%r15) -; CHECK-NEXT: vpkg %v2, %v1, %v1 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v27, %v4, %v3, %v2 -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vl %v4, 224(%r15) -; CHECK-NEXT: vmrlg %v2, %v1, %v1 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vsldb %v1, %v1, %v1, 12 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vsel %v29, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 368(%r15) -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v31, %v3, %v2, %v1 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i16> %val3, %val4 - %and = and <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i64> %val5, <16 x i64> %val6 - ret <16 x i64> %sel -} - -define <16 x i64> @fun54(<16 x i8> %val1, <16 x i8> %val2, <16 x i32> %val3, <16 x i32> %val4, <16 x i64> %val5, <16 x i64> %val6) { -; CHECK-LABEL: fun54: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vuphb %v2, %v1 -; CHECK-NEXT: vceqf %v0, %v28, %v29 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vn %v0, %v2, %v0 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vuphf %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vl %v3, 208(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v26, %v3, %v2, %v0 -; CHECK-NEXT: vpkg %v2, %v1, %v1 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vceqf %v0, %v30, %v31 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vn %v0, %v2, %v0 -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vl %v4, 224(%r15) -; CHECK-NEXT: vuphf %v2, %v0 -; CHECK-NEXT: vl %v5, 256(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vl %v4, 384(%r15) -; CHECK-NEXT: vmrlg %v3, %v1, %v1 -; CHECK-NEXT: vuphb %v3, %v3 -; CHECK-NEXT: vceqf %v2, %v25, %v2 -; CHECK-NEXT: vuphh %v3, %v3 -; CHECK-NEXT: vn %v2, %v3, %v2 -; CHECK-NEXT: vuphf %v3, %v2 -; CHECK-NEXT: vsldb %v1, %v1, %v1, 12 -; CHECK-NEXT: vsel %v25, %v5, %v4, %v3 -; CHECK-NEXT: vl %v3, 176(%r15) -; CHECK-NEXT: vl %v4, 416(%r15) -; CHECK-NEXT: vl %v5, 288(%r15) -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vceqf %v3, %v27, %v3 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vn %v1, %v1, %v3 -; CHECK-NEXT: vuphf %v3, %v1 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v29, %v5, %v4, %v3 -; CHECK-NEXT: vl %v3, 368(%r15) -; CHECK-NEXT: vl %v4, 240(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v4, %v3, %v0 -; CHECK-NEXT: vl %v3, 272(%r15) -; CHECK-NEXT: vmrlg %v0, %v2, %v2 -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v27, %v3, %v2, %v0 -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i32> %val3, %val4 - %and = and <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i64> %val5, <16 x i64> %val6 - ret <16 x i64> %sel -} - -define <16 x i64> @fun55(<16 x i8> %val1, <16 x i8> %val2, <16 x i64> %val3, <16 x i64> %val4, <16 x i64> %val5, <16 x i64> %val6) { -; CHECK-LABEL: fun55: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 192(%r15) -; CHECK-NEXT: vceqg %v1, %v28, %v0 -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v2, %v0 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vn %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 448(%r15) -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v1 -; CHECK-NEXT: vpkf %v2, %v0, %v0 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v30, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vn %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 464(%r15) -; CHECK-NEXT: vl %v3, 336(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v2, %v1 -; CHECK-NEXT: vpkg %v2, %v0, %v0 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v25, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vn %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 480(%r15) -; CHECK-NEXT: vsel %v28, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v3, 368(%r15) -; CHECK-NEXT: vsldb %v2, %v0, %v0, 6 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v27, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vn %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 496(%r15) -; CHECK-NEXT: vsel %v30, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vl %v3, 384(%r15) -; CHECK-NEXT: vmrlg %v2, %v0, %v0 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v29, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vn %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 512(%r15) -; CHECK-NEXT: vsel %v25, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v3, 400(%r15) -; CHECK-NEXT: vsldb %v2, %v0, %v0, 10 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v31, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vn %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 528(%r15) -; CHECK-NEXT: vsel %v27, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 288(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vl %v3, 416(%r15) -; CHECK-NEXT: vceqg %v1, %v2, %v1 -; CHECK-NEXT: vsldb %v2, %v0, %v0, 12 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 14 -; CHECK-NEXT: vn %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 544(%r15) -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vsel %v29, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 304(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vceqg %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 432(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vn %v0, %v0, %v1 -; CHECK-NEXT: vl %v1, 560(%r15) -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i64> %val3, %val4 - %and = and <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i64> %val5, <16 x i64> %val6 - ret <16 x i64> %sel -} - -define <16 x i16> @fun56(<16 x i8> %val1, <16 x i8> %val2, <16 x float> %val3, <16 x float> %val4, <16 x i16> %val5, <16 x i16> %val6) { -; CHECK-LABEL: fun56: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v31, %v31 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v31, %v31 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v28, %v28 -; CHECK-NEXT: vmrlf %v4, %v25, %v25 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v29, %v29 -; CHECK-NEXT: vmrlf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v29, %v29 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vuphb %v2, %v1 -; CHECK-NEXT: vn %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vmrlf %v2, %v0, %v0 -; CHECK-NEXT: vmrlf %v3, %v27, %v27 -; CHECK-NEXT: vmrhf %v0, %v0, %v0 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vmrhf %v3, %v27, %v27 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v0, %v3, %v0 -; CHECK-NEXT: vpkg %v0, %v0, %v2 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vmrlf %v3, %v2, %v2 -; CHECK-NEXT: vmrhf %v2, %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v3, %v4, %v3 -; CHECK-NEXT: vmrhf %v4, %v25, %v25 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v2, %v4, %v2 -; CHECK-NEXT: vpkg %v2, %v2, %v3 -; CHECK-NEXT: vpkf %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = fcmp ogt <16 x float> %val3, %val4 - %and = and <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i16> %val5, <16 x i16> %val6 - ret <16 x i16> %sel -} - -define <16 x i8> @fun57(<16 x i8> %val1, <16 x i8> %val2, <16 x double> %val3, <16 x double> %val4, <16 x i8> %val5, <16 x i8> %val6) { -; CHECK-LABEL: fun57: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 304(%r15) -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 288(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 256(%r15) -; CHECK-NEXT: vfchdb %v1, %v31, %v1 -; CHECK-NEXT: vfchdb %v2, %v29, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vfchdb %v1, %v27, %v1 -; CHECK-NEXT: vfchdb %v2, %v25, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vfchdb %v2, %v30, %v2 -; CHECK-NEXT: vfchdb %v3, %v28, %v3 -; CHECK-NEXT: vpkg %v2, %v3, %v2 -; CHECK-NEXT: vpkf %v1, %v2, %v1 -; CHECK-NEXT: vpkh %v0, %v1, %v0 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 336(%r15) -; CHECK-NEXT: vl %v2, 320(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = fcmp ogt <16 x double> %val3, %val4 - %and = and <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6 - ret <16 x i8> %sel -} - -define <16 x i8> @fun58(<16 x i16> %val1, <16 x i16> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i8> %val5, <16 x i8> %val6) { -; CHECK-LABEL: fun58: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v27, %v31 -; CHECK-NEXT: vceqh %v1, %v26, %v30 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v25, %v29 -; CHECK-NEXT: vceqh %v2, %v24, %v28 -; CHECK-NEXT: vn %v1, %v2, %v1 -; CHECK-NEXT: vpkh %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i16> %val3, %val4 - %and = and <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6 - ret <16 x i8> %sel -} - -define <16 x i16> @fun59(<16 x i16> %val1, <16 x i16> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i16> %val5, <16 x i16> %val6) { -; CHECK-LABEL: fun59: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v25, %v29 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vceqh %v0, %v27, %v31 -; CHECK-NEXT: vceqh %v1, %v26, %v30 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i16> %val3, %val4 - %and = and <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i16> %val5, <16 x i16> %val6 - ret <16 x i16> %sel -} - -define <16 x i32> @fun60(<16 x i16> %val1, <16 x i16> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i32> %val5, <16 x i32> %val6) { -; CHECK-LABEL: fun60: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v25, %v29 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vsel %v24, %v3, %v2, %v1 -; CHECK-NEXT: vceqh %v1, %v27, %v31 -; CHECK-NEXT: vceqh %v2, %v26, %v30 -; CHECK-NEXT: vn %v1, %v2, %v1 -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 240(%r15) -; CHECK-NEXT: vl %v3, 176(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v26, %v3, %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i16> %val3, %val4 - %and = and <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i32> %val5, <16 x i32> %val6 - ret <16 x i32> %sel -} - -define <16 x i8> @fun61(<16 x i16> %val1, <16 x i16> %val2, <16 x i32> %val3, <16 x i32> %val4, <16 x i8> %val5, <16 x i8> %val6) { -; CHECK-LABEL: fun61: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vceqf %v0, %v31, %v0 -; CHECK-NEXT: vceqf %v1, %v29, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v26, %v30 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vceqf %v1, %v27, %v1 -; CHECK-NEXT: vceqf %v2, %v25, %v2 -; CHECK-NEXT: vpkf %v1, %v2, %v1 -; CHECK-NEXT: vceqh %v2, %v24, %v28 -; CHECK-NEXT: vn %v1, %v2, %v1 -; CHECK-NEXT: vpkh %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i32> %val3, %val4 - %and = and <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6 - ret <16 x i8> %sel -} - -define <16 x i32> @fun62(<16 x i16> %val1, <16 x i16> %val2, <16 x i64> %val3, <16 x i64> %val4, <16 x i32> %val5, <16 x i32> %val6) { -; CHECK-LABEL: fun62: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 240(%r15) -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vceqg %v0, %v27, %v0 -; CHECK-NEXT: vceqg %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vn %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 416(%r15) -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 304(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vceqg %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vceqg %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v0, %v2, %v0 -; CHECK-NEXT: vceqh %v2, %v26, %v30 -; CHECK-NEXT: vuphh %v3, %v2 -; CHECK-NEXT: vn %v0, %v3, %v0 -; CHECK-NEXT: vl %v3, 448(%r15) -; CHECK-NEXT: vl %v4, 384(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vceqg %v0, %v31, %v0 -; CHECK-NEXT: vceqg %v3, %v29, %v3 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vpkg %v0, %v3, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vl %v3, 368(%r15) -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v1, %v0 -; CHECK-NEXT: vl %v0, 336(%r15) -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vceqg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 320(%r15) -; CHECK-NEXT: vceqg %v1, %v3, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlg %v1, %v2, %v2 -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 464(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i64> %val3, %val4 - %and = and <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i32> %val5, <16 x i32> %val6 - ret <16 x i32> %sel -} - -define <16 x double> @fun63(<16 x i16> %val1, <16 x i16> %val2, <16 x float> %val3, <16 x float> %val4, <16 x double> %val5, <16 x double> %val6) { -; CHECK-LABEL: fun63: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 160(%r15) -; CHECK-NEXT: vmrlf %v1, %v0, %v0 -; CHECK-NEXT: vmrlf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v0, %v0, %v0 -; CHECK-NEXT: vmrhf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vl %v4, 224(%r15) -; CHECK-NEXT: vl %v5, 416(%r15) -; CHECK-NEXT: vl %v6, 288(%r15) -; CHECK-NEXT: vfchdb %v0, %v2, %v0 -; CHECK-NEXT: vpkg %v0, %v0, %v1 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vn %v0, %v2, %v0 -; CHECK-NEXT: vuphf %v2, %v0 -; CHECK-NEXT: vsel %v24, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vmrlf %v3, %v2, %v2 -; CHECK-NEXT: vmrlf %v4, %v27, %v27 -; CHECK-NEXT: vmrhf %v2, %v2, %v2 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v3, %v4, %v3 -; CHECK-NEXT: vmrhf %v4, %v27, %v27 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v2, %v4, %v2 -; CHECK-NEXT: vl %v4, 256(%r15) -; CHECK-NEXT: vpkg %v2, %v2, %v3 -; CHECK-NEXT: vl %v3, 384(%r15) -; CHECK-NEXT: vn %v1, %v1, %v2 -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vmrlf %v3, %v2, %v2 -; CHECK-NEXT: vmrlf %v4, %v29, %v29 -; CHECK-NEXT: vmrhf %v2, %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v3, %v4, %v3 -; CHECK-NEXT: vmrhf %v4, %v29, %v29 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v2, %v4, %v2 -; CHECK-NEXT: vpkg %v2, %v2, %v3 -; CHECK-NEXT: vceqh %v3, %v26, %v30 -; CHECK-NEXT: vuphh %v4, %v3 -; CHECK-NEXT: vn %v2, %v4, %v2 -; CHECK-NEXT: vuphf %v4, %v2 -; CHECK-NEXT: vsel %v25, %v6, %v5, %v4 -; CHECK-NEXT: vl %v4, 208(%r15) -; CHECK-NEXT: vmrlf %v5, %v4, %v4 -; CHECK-NEXT: vmrlf %v6, %v31, %v31 -; CHECK-NEXT: vmrhf %v4, %v4, %v4 -; CHECK-NEXT: vmrlg %v3, %v3, %v3 -; CHECK-NEXT: vuphh %v3, %v3 -; CHECK-NEXT: vldeb %v5, %v5 -; CHECK-NEXT: vldeb %v6, %v6 -; CHECK-NEXT: vfchdb %v5, %v6, %v5 -; CHECK-NEXT: vmrhf %v6, %v31, %v31 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vldeb %v6, %v6 -; CHECK-NEXT: vfchdb %v4, %v6, %v4 -; CHECK-NEXT: vl %v6, 320(%r15) -; CHECK-NEXT: vpkg %v4, %v4, %v5 -; CHECK-NEXT: vl %v5, 448(%r15) -; CHECK-NEXT: vn %v3, %v3, %v4 -; CHECK-NEXT: vuphf %v4, %v3 -; CHECK-NEXT: vsel %v29, %v6, %v5, %v4 -; CHECK-NEXT: vl %v4, 368(%r15) -; CHECK-NEXT: vl %v5, 240(%r15) -; CHECK-NEXT: vsel %v26, %v5, %v4, %v0 -; CHECK-NEXT: vl %v4, 272(%r15) -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 400(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v4, %v1, %v0 -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vmrlg %v0, %v2, %v2 -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v27, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 464(%r15) -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vmrlg %v0, %v3, %v3 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = fcmp ogt <16 x float> %val3, %val4 - %and = and <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x double> %val5, <16 x double> %val6 - ret <16 x double> %sel -} - -define <16 x i32> @fun64(<16 x i16> %val1, <16 x i16> %val2, <16 x double> %val3, <16 x double> %val4, <16 x i32> %val5, <16 x i32> %val6) { -; CHECK-LABEL: fun64: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 240(%r15) -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vfchdb %v0, %v27, %v0 -; CHECK-NEXT: vfchdb %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vn %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 416(%r15) -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 304(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vfchdb %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v0, %v2, %v0 -; CHECK-NEXT: vceqh %v2, %v26, %v30 -; CHECK-NEXT: vuphh %v3, %v2 -; CHECK-NEXT: vn %v0, %v3, %v0 -; CHECK-NEXT: vl %v3, 448(%r15) -; CHECK-NEXT: vl %v4, 384(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vfchdb %v0, %v31, %v0 -; CHECK-NEXT: vfchdb %v3, %v29, %v3 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vpkg %v0, %v3, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vl %v3, 368(%r15) -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v1, %v0 -; CHECK-NEXT: vl %v0, 336(%r15) -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 320(%r15) -; CHECK-NEXT: vfchdb %v1, %v3, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlg %v1, %v2, %v2 -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vn %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 464(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = fcmp ogt <16 x double> %val3, %val4 - %and = and <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i32> %val5, <16 x i32> %val6 - ret <16 x i32> %sel -} - -define <2 x i8> @fun65(<2 x i8> %val1, <2 x i8> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x i8> %val5, <2 x i8> %val6) { -; CHECK-LABEL: fun65: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v28, %v30 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = icmp eq <2 x i8> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 - ret <2 x i8> %sel -} - -define <2 x i16> @fun66(<2 x i8> %val1, <2 x i8> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun66: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v28, %v30 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = icmp eq <2 x i8> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x i8> @fun67(<2 x i8> %val1, <2 x i8> %val2, <2 x i16> %val3, <2 x i16> %val4, <2 x i8> %val5, <2 x i8> %val6) { -; CHECK-LABEL: fun67: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v1, %v28, %v30 -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vpkh %v1, %v1, %v1 -; CHECK-NEXT: vo %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = icmp eq <2 x i16> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 - ret <2 x i8> %sel -} - -define <2 x i32> @fun68(<2 x i8> %val1, <2 x i8> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i32> %val5, <2 x i32> %val6) { -; CHECK-LABEL: fun68: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel -} - -define <2 x i32> @fun69(<2 x i8> %val1, <2 x i8> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i32> %val5, <2 x i32> %val6) { -; CHECK-LABEL: fun69: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vpkg %v0, %v0, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = icmp eq <2 x i64> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel -} - -define <2 x i16> @fun70(<2 x i8> %val1, <2 x i8> %val2, <2 x float> %val3, <2 x float> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun70: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x i64> @fun71(<2 x i8> %val1, <2 x i8> %val2, <2 x double> %val3, <2 x double> %val4, <2 x i64> %val5, <2 x i64> %val6) { -; CHECK-LABEL: fun71: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v28, %v30 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 - ret <2 x i64> %sel -} - -define <2 x i8> @fun72(<2 x i16> %val1, <2 x i16> %val2, <2 x i16> %val3, <2 x i16> %val4, <2 x i8> %val5, <2 x i8> %val6) { -; CHECK-LABEL: fun72: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i16> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 - ret <2 x i8> %sel -} - -define <2 x i16> @fun73(<2 x i16> %val1, <2 x i16> %val2, <2 x i16> %val3, <2 x i16> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun73: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i16> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x i32> @fun74(<2 x i16> %val1, <2 x i16> %val2, <2 x i16> %val3, <2 x i16> %val4, <2 x i32> %val5, <2 x i32> %val6) { -; CHECK-LABEL: fun74: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i16> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel -} - -define <2 x i8> @fun75(<2 x i16> %val1, <2 x i16> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i8> %val5, <2 x i8> %val6) { -; CHECK-LABEL: fun75: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v1, %v28, %v30 -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vpkf %v1, %v1, %v1 -; CHECK-NEXT: vo %v0, %v0, %v1 -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 - ret <2 x i8> %sel -} - -define <2 x i8> @fun76(<2 x i16> %val1, <2 x i16> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i8> %val5, <2 x i8> %val6) { -; CHECK-LABEL: fun76: -; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI76_0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i64> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 - ret <2 x i8> %sel -} - -define <2 x double> @fun77(<2 x i16> %val1, <2 x i16> %val2, <2 x float> %val3, <2 x float> %val4, <2 x double> %val5, <2 x double> %val6) { -; CHECK-LABEL: fun77: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x double> %val5, <2 x double> %val6 - ret <2 x double> %sel -} - -define <2 x i16> @fun78(<2 x i16> %val1, <2 x i16> %val2, <2 x double> %val3, <2 x double> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun78: -; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI78_0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vfchdb %v0, %v28, %v30 -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x i16> @fun79(<2 x i32> %val1, <2 x i32> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun79: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x i32> @fun80(<2 x i32> %val1, <2 x i32> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i32> %val5, <2 x i32> %val6) { -; CHECK-LABEL: fun80: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel -} - -define <2 x i64> @fun81(<2 x i32> %val1, <2 x i32> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i64> %val5, <2 x i64> %val6) { -; CHECK-LABEL: fun81: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 - ret <2 x i64> %sel -} - -define <2 x i64> @fun82(<2 x i32> %val1, <2 x i32> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i64> %val5, <2 x i64> %val6) { -; CHECK-LABEL: fun82: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = icmp eq <2 x i64> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 - ret <2 x i64> %sel -} - -define <2 x i16> @fun83(<2 x i32> %val1, <2 x i32> %val2, <2 x float> %val3, <2 x float> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun83: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x float> @fun84(<2 x i32> %val1, <2 x i32> %val2, <2 x double> %val3, <2 x double> %val4, <2 x float> %val5, <2 x float> %val6) { -; CHECK-LABEL: fun84: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v1, %v28, %v30 -; CHECK-NEXT: vceqf %v0, %v24, %v26 -; CHECK-NEXT: vpkg %v1, %v1, %v1 -; CHECK-NEXT: vo %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x float> %val5, <2 x float> %val6 - ret <2 x float> %sel -} - -define <2 x i16> @fun85(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun85: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vceqg %v1, %v24, %v26 -; CHECK-NEXT: larl %r1, .LCPI85_0 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i64> %val1, %val2 - %cmp1 = icmp eq <2 x i64> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x i64> @fun86(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i64> %val5, <2 x i64> %val6) { -; CHECK-LABEL: fun86: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vceqg %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i64> %val1, %val2 - %cmp1 = icmp eq <2 x i64> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 - ret <2 x i64> %sel -} - -define <2 x i64> @fun87(<2 x i64> %val1, <2 x i64> %val2, <2 x float> %val3, <2 x float> %val4, <2 x i64> %val5, <2 x i64> %val6) { -; CHECK-LABEL: fun87: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vceqg %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i64> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 - ret <2 x i64> %sel -} - -define <2 x i16> @fun88(<2 x i64> %val1, <2 x i64> %val2, <2 x double> %val3, <2 x double> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun88: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v28, %v30 -; CHECK-NEXT: vceqg %v1, %v24, %v26 -; CHECK-NEXT: larl %r1, .LCPI88_0 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i64> %val1, %val2 - %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x float> @fun89(<2 x float> %val1, <2 x float> %val2, <2 x float> %val3, <2 x float> %val4, <2 x float> %val5, <2 x float> %val6) { -; CHECK-LABEL: fun89: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <2 x float> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x float> %val5, <2 x float> %val6 - ret <2 x float> %sel -} - -define <2 x i32> @fun90(<2 x float> %val1, <2 x float> %val2, <2 x double> %val3, <2 x double> %val4, <2 x i32> %val5, <2 x i32> %val6) { -; CHECK-LABEL: fun90: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v26, %v26 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vfchdb %v1, %v28, %v30 -; CHECK-NEXT: vpkg %v1, %v1, %v1 -; CHECK-NEXT: vo %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <2 x float> %val1, %val2 - %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = or <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel -} - -define <4 x i16> @fun91(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3, <4 x i32> %val4, <4 x i16> %val5, <4 x i16> %val6) { -; CHECK-LABEL: fun91: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = icmp eq <4 x i32> %val3, %val4 - %and = or <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i16> %val5, <4 x i16> %val6 - ret <4 x i16> %sel -} - -define <4 x i32> @fun92(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3, <4 x i32> %val4, <4 x i32> %val5, <4 x i32> %val6) { -; CHECK-LABEL: fun92: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = icmp eq <4 x i32> %val3, %val4 - %and = or <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i32> %val5, <4 x i32> %val6 - ret <4 x i32> %sel -} - -define <4 x i64> @fun93(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3, <4 x i32> %val4, <4 x i64> %val5, <4 x i64> %val6) { -; CHECK-LABEL: fun93: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v1 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = icmp eq <4 x i32> %val3, %val4 - %and = or <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i64> %val5, <4 x i64> %val6 - ret <4 x i64> %sel -} - -define <4 x i32> @fun94(<4 x i32> %val1, <4 x i32> %val2, <4 x i64> %val3, <4 x i64> %val4, <4 x i32> %val5, <4 x i32> %val6) { -; CHECK-LABEL: fun94: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v30, %v27 -; CHECK-NEXT: vceqg %v1, %v28, %v25 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = icmp eq <4 x i64> %val3, %val4 - %and = or <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i32> %val5, <4 x i32> %val6 - ret <4 x i32> %sel -} - -define <4 x i16> @fun95(<4 x i32> %val1, <4 x i32> %val2, <4 x float> %val3, <4 x float> %val4, <4 x i16> %val5, <4 x i16> %val6) { -; CHECK-LABEL: fun95: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = fcmp ogt <4 x float> %val3, %val4 - %and = or <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i16> %val5, <4 x i16> %val6 - ret <4 x i16> %sel -} - -define <4 x i8> @fun96(<4 x i32> %val1, <4 x i32> %val2, <4 x double> %val3, <4 x double> %val4, <4 x i8> %val5, <4 x i8> %val6) { -; CHECK-LABEL: fun96: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v30, %v27 -; CHECK-NEXT: vfchdb %v1, %v28, %v25 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: larl %r1, .LCPI96_0 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = fcmp ogt <4 x double> %val3, %val4 - %and = or <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i8> %val5, <4 x i8> %val6 - ret <4 x i8> %sel -} - -define <4 x i32> @fun97(<4 x i64> %val1, <4 x i64> %val2, <4 x i64> %val3, <4 x i64> %val4, <4 x i32> %val5, <4 x i32> %val6) { -; CHECK-LABEL: fun97: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v27, %v31 -; CHECK-NEXT: vceqg %v1, %v26, %v30 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vceqg %v1, %v25, %v29 -; CHECK-NEXT: vceqg %v2, %v24, %v28 -; CHECK-NEXT: vo %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i64> %val1, %val2 - %cmp1 = icmp eq <4 x i64> %val3, %val4 - %and = or <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i32> %val5, <4 x i32> %val6 - ret <4 x i32> %sel -} - -define <4 x i64> @fun98(<4 x i64> %val1, <4 x i64> %val2, <4 x i64> %val3, <4 x i64> %val4, <4 x i64> %val5, <4 x i64> %val6) { -; CHECK-LABEL: fun98: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v25, %v29 -; CHECK-NEXT: vceqg %v1, %v24, %v28 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vceqg %v0, %v27, %v31 -; CHECK-NEXT: vceqg %v1, %v26, %v30 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i64> %val1, %val2 - %cmp1 = icmp eq <4 x i64> %val3, %val4 - %and = or <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i64> %val5, <4 x i64> %val6 - ret <4 x i64> %sel -} - -define <4 x i64> @fun99(<4 x i64> %val1, <4 x i64> %val2, <4 x float> %val3, <4 x float> %val4, <4 x i64> %val5, <4 x i64> %val6) { -; CHECK-LABEL: fun99: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v27, %v27 -; CHECK-NEXT: vmrlf %v1, %v25, %v25 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v27, %v27 -; CHECK-NEXT: vmrhf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vceqg %v2, %v24, %v28 -; CHECK-NEXT: vo %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v29, %v2, %v1 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vceqg %v1, %v26, %v30 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vsel %v26, %v31, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i64> %val1, %val2 - %cmp1 = fcmp ogt <4 x float> %val3, %val4 - %and = or <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i64> %val5, <4 x i64> %val6 - ret <4 x i64> %sel -} - -define <4 x float> @fun100(<4 x i64> %val1, <4 x i64> %val2, <4 x double> %val3, <4 x double> %val4, <4 x float> %val5, <4 x float> %val6) { -; CHECK-LABEL: fun100: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v27, %v31 -; CHECK-NEXT: vceqg %v1, %v26, %v30 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vfchdb %v1, %v25, %v29 -; CHECK-NEXT: vceqg %v2, %v24, %v28 -; CHECK-NEXT: vo %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i64> %val1, %val2 - %cmp1 = fcmp ogt <4 x double> %val3, %val4 - %and = or <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x float> %val5, <4 x float> %val6 - ret <4 x float> %sel -} - -define <4 x i16> @fun101(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4, <4 x i16> %val5, <4 x i16> %val6) { -; CHECK-LABEL: fun101: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <4 x float> %val1, %val2 - %cmp1 = fcmp ogt <4 x float> %val3, %val4 - %and = or <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i16> %val5, <4 x i16> %val6 - ret <4 x i16> %sel -} - -define <4 x float> @fun102(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4, <4 x float> %val5, <4 x float> %val6) { -; CHECK-LABEL: fun102: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <4 x float> %val1, %val2 - %cmp1 = fcmp ogt <4 x float> %val3, %val4 - %and = or <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x float> %val5, <4 x float> %val6 - ret <4 x float> %sel -} - -define <4 x double> @fun103(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4, <4 x double> %val5, <4 x double> %val6) { -; CHECK-LABEL: fun103: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v1 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <4 x float> %val1, %val2 - %cmp1 = fcmp ogt <4 x float> %val3, %val4 - %and = or <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x double> %val5, <4 x double> %val6 - ret <4 x double> %sel -} - -define <4 x i8> @fun104(<4 x float> %val1, <4 x float> %val2, <4 x double> %val3, <4 x double> %val4, <4 x i8> %val5, <4 x i8> %val6) { -; CHECK-LABEL: fun104: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v30, %v27 -; CHECK-NEXT: vfchdb %v1, %v28, %v25 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: larl %r1, .LCPI104_0 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <4 x float> %val1, %val2 - %cmp1 = fcmp ogt <4 x double> %val3, %val4 - %and = or <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i8> %val5, <4 x i8> %val6 - ret <4 x i8> %sel -} - -define <8 x i8> @fun105(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i8> %val5, <8 x i8> %val6) { -; CHECK-LABEL: fun105: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i16> %val3, %val4 - %and = or <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i8> %val5, <8 x i8> %val6 - ret <8 x i8> %sel -} - -define <8 x i16> @fun106(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i16> %val5, <8 x i16> %val6) { -; CHECK-LABEL: fun106: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i16> %val3, %val4 - %and = or <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i16> %val5, <8 x i16> %val6 - ret <8 x i16> %sel -} - -define <8 x i32> @fun107(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i32> %val5, <8 x i32> %val6) { -; CHECK-LABEL: fun107: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v1 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i16> %val3, %val4 - %and = or <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i32> %val5, <8 x i32> %val6 - ret <8 x i32> %sel -} - -define <8 x i64> @fun108(<8 x i16> %val1, <8 x i16> %val2, <8 x i32> %val3, <8 x i32> %val4, <8 x i64> %val5, <8 x i64> %val6) { -; CHECK-LABEL: fun108: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vceqf %v0, %v28, %v25 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vo %v0, %v2, %v0 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vuphf %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v29, %v3, %v2 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vsel %v26, %v31, %v2, %v0 -; CHECK-NEXT: vceqf %v0, %v30, %v27 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v28, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i32> %val3, %val4 - %and = or <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i64> %val5, <8 x i64> %val6 - ret <8 x i64> %sel -} - -define <8 x i8> @fun109(<8 x i16> %val1, <8 x i16> %val2, <8 x i64> %val3, <8 x i64> %val4, <8 x i8> %val5, <8 x i8> %val6) { -; CHECK-LABEL: fun109: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v1, 160(%r15) -; CHECK-NEXT: vceqg %v0, %v27, %v0 -; CHECK-NEXT: vceqg %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqg %v1, %v30, %v31 -; CHECK-NEXT: vceqg %v2, %v28, %v29 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vlrepg %v1, 200(%r15) -; CHECK-NEXT: vlrepg %v2, 192(%r15) -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i64> %val3, %val4 - %and = or <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i8> %val5, <8 x i8> %val6 - ret <8 x i8> %sel -} - -define <8 x i16> @fun110(<8 x i16> %val1, <8 x i16> %val2, <8 x float> %val3, <8 x float> %val4, <8 x i16> %val5, <8 x i16> %val6) { -; CHECK-LABEL: fun110: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v27, %v27 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v27, %v27 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v28, %v28 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v25, %v25 -; CHECK-NEXT: vmrlf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = fcmp ogt <8 x float> %val3, %val4 - %and = or <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i16> %val5, <8 x i16> %val6 - ret <8 x i16> %sel -} - -define <8 x i32> @fun111(<8 x i16> %val1, <8 x i16> %val2, <8 x double> %val3, <8 x double> %val4, <8 x i32> %val5, <8 x i32> %val6) { -; CHECK-LABEL: fun111: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v30, %v31 -; CHECK-NEXT: vfchdb %v1, %v28, %v29 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vo %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vfchdb %v0, %v27, %v0 -; CHECK-NEXT: vfchdb %v2, %v25, %v2 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vpkg %v0, %v2, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = fcmp ogt <8 x double> %val3, %val4 - %and = or <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i32> %val5, <8 x i32> %val6 - ret <8 x i32> %sel -} - -define <8 x i32> @fun112(<8 x i32> %val1, <8 x i32> %val2, <8 x i64> %val3, <8 x i64> %val4, <8 x i32> %val5, <8 x i32> %val6) { -; CHECK-LABEL: fun112: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v1, 160(%r15) -; CHECK-NEXT: vceqg %v0, %v27, %v0 -; CHECK-NEXT: vceqg %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v28 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vceqg %v0, %v31, %v0 -; CHECK-NEXT: vceqg %v1, %v29, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v26, %v30 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 240(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i32> %val1, %val2 - %cmp1 = icmp eq <8 x i64> %val3, %val4 - %and = or <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i32> %val5, <8 x i32> %val6 - ret <8 x i32> %sel -} - -define <8 x double> @fun113(<8 x i32> %val1, <8 x i32> %val2, <8 x float> %val3, <8 x float> %val4, <8 x double> %val5, <8 x double> %val6) { -; CHECK-LABEL: fun113: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v29, %v29 -; CHECK-NEXT: vmrlf %v1, %v25, %v25 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v29, %v29 -; CHECK-NEXT: vmrhf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v28 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vsel %v24, %v3, %v2, %v1 -; CHECK-NEXT: vmrlf %v1, %v31, %v31 -; CHECK-NEXT: vmrlf %v2, %v27, %v27 -; CHECK-NEXT: vmrhf %v3, %v27, %v27 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v31, %v31 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vceqf %v2, %v26, %v30 -; CHECK-NEXT: vo %v1, %v2, %v1 -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 240(%r15) -; CHECK-NEXT: vl %v3, 176(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v2, %v0 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i32> %val1, %val2 - %cmp1 = fcmp ogt <8 x float> %val3, %val4 - %and = or <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x double> %val5, <8 x double> %val6 - ret <8 x double> %sel -} - -define <8 x double> @fun114(<8 x i32> %val1, <8 x i32> %val2, <8 x double> %val3, <8 x double> %val4, <8 x double> %val5, <8 x double> %val6) { -; CHECK-LABEL: fun114: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 160(%r15) -; CHECK-NEXT: vceqf %v1, %v24, %v28 -; CHECK-NEXT: vfchdb %v0, %v25, %v0 -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vo %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vl %v3, 224(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 192(%r15) -; CHECK-NEXT: vceqf %v2, %v26, %v30 -; CHECK-NEXT: vfchdb %v0, %v29, %v0 -; CHECK-NEXT: vuphf %v3, %v2 -; CHECK-NEXT: vo %v0, %v3, %v0 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vl %v4, 256(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v0 -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v27, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 304(%r15) -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v1, %v0 -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vmrlg %v1, %v2, %v2 -; CHECK-NEXT: vfchdb %v0, %v31, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vl %v2, 272(%r15) -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 336(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i32> %val1, %val2 - %cmp1 = fcmp ogt <8 x double> %val3, %val4 - %and = or <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x double> %val5, <8 x double> %val6 - ret <8 x double> %sel -} - -define <8 x i64> @fun115(<8 x float> %val1, <8 x float> %val2, <8 x double> %val3, <8 x double> %val4, <8 x i64> %val5, <8 x i64> %val6) { -; CHECK-LABEL: fun115: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v28, %v28 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v28, %v28 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vl %v3, 224(%r15) -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vl %v4, 256(%r15) -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vfchdb %v2, %v25, %v2 -; CHECK-NEXT: vo %v1, %v1, %v2 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v1 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vmrlf %v2, %v26, %v26 -; CHECK-NEXT: vmrhf %v3, %v26, %v26 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vfchdb %v3, %v29, %v3 -; CHECK-NEXT: vo %v2, %v2, %v3 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vfchdb %v2, %v27, %v2 -; CHECK-NEXT: vo %v0, %v0, %v2 -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v2, %v0 -; CHECK-NEXT: vl %v2, 272(%r15) -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vfchdb %v1, %v31, %v1 -; CHECK-NEXT: vo %v0, %v0, %v1 -; CHECK-NEXT: vl %v1, 336(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <8 x float> %val1, %val2 - %cmp1 = fcmp ogt <8 x double> %val3, %val4 - %and = or <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i64> %val5, <8 x i64> %val6 - ret <8 x i64> %sel -} - -define <16 x i8> @fun116(<16 x i8> %val1, <16 x i8> %val2, <16 x i8> %val3, <16 x i8> %val4, <16 x i8> %val5, <16 x i8> %val6) { -; CHECK-LABEL: fun116: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v28, %v30 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i8> %val3, %val4 - %and = or <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6 - ret <16 x i8> %sel -} - -define <16 x i16> @fun117(<16 x i8> %val1, <16 x i8> %val2, <16 x i8> %val3, <16 x i8> %val4, <16 x i16> %val5, <16 x i16> %val6) { -; CHECK-LABEL: fun117: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v28, %v30 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vuphb %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v1 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i8> %val3, %val4 - %and = or <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i16> %val5, <16 x i16> %val6 - ret <16 x i16> %sel -} - -define <16 x i64> @fun118(<16 x i8> %val1, <16 x i8> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i64> %val5, <16 x i64> %val6) { -; CHECK-LABEL: fun118: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vceqh %v0, %v28, %v25 -; CHECK-NEXT: vuphb %v2, %v1 -; CHECK-NEXT: vo %v0, %v2, %v0 -; CHECK-NEXT: vuphh %v2, %v0 -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v24, %v29, %v3, %v2 -; CHECK-NEXT: vpkg %v2, %v0, %v0 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vl %v3, 272(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v26, %v31, %v3, %v2 -; CHECK-NEXT: vmrlg %v2, %v0, %v0 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 12 -; CHECK-NEXT: vl %v3, 288(%r15) -; CHECK-NEXT: vl %v4, 160(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vl %v3, 176(%r15) -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vsel %v0, %v3, %v2, %v0 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vceqh %v2, %v30, %v27 -; CHECK-NEXT: vlr %v30, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vo %v1, %v1, %v2 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v25, %v4, %v3, %v2 -; CHECK-NEXT: vl %v3, 336(%r15) -; CHECK-NEXT: vl %v4, 208(%r15) -; CHECK-NEXT: vpkg %v2, %v1, %v1 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v27, %v4, %v3, %v2 -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vl %v4, 224(%r15) -; CHECK-NEXT: vmrlg %v2, %v1, %v1 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vsldb %v1, %v1, %v1, 12 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vsel %v29, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 368(%r15) -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v31, %v3, %v2, %v1 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i16> %val3, %val4 - %and = or <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i64> %val5, <16 x i64> %val6 - ret <16 x i64> %sel -} - -define <16 x i64> @fun119(<16 x i8> %val1, <16 x i8> %val2, <16 x i32> %val3, <16 x i32> %val4, <16 x i64> %val5, <16 x i64> %val6) { -; CHECK-LABEL: fun119: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vuphb %v2, %v1 -; CHECK-NEXT: vceqf %v0, %v28, %v29 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vo %v0, %v2, %v0 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vuphf %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vl %v3, 208(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v26, %v3, %v2, %v0 -; CHECK-NEXT: vpkg %v2, %v1, %v1 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vceqf %v0, %v30, %v31 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vo %v0, %v2, %v0 -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vl %v4, 224(%r15) -; CHECK-NEXT: vuphf %v2, %v0 -; CHECK-NEXT: vl %v5, 256(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vl %v4, 384(%r15) -; CHECK-NEXT: vmrlg %v3, %v1, %v1 -; CHECK-NEXT: vuphb %v3, %v3 -; CHECK-NEXT: vceqf %v2, %v25, %v2 -; CHECK-NEXT: vuphh %v3, %v3 -; CHECK-NEXT: vo %v2, %v3, %v2 -; CHECK-NEXT: vuphf %v3, %v2 -; CHECK-NEXT: vsldb %v1, %v1, %v1, 12 -; CHECK-NEXT: vsel %v25, %v5, %v4, %v3 -; CHECK-NEXT: vl %v3, 176(%r15) -; CHECK-NEXT: vl %v4, 416(%r15) -; CHECK-NEXT: vl %v5, 288(%r15) -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vceqf %v3, %v27, %v3 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vo %v1, %v1, %v3 -; CHECK-NEXT: vuphf %v3, %v1 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v29, %v5, %v4, %v3 -; CHECK-NEXT: vl %v3, 368(%r15) -; CHECK-NEXT: vl %v4, 240(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v4, %v3, %v0 -; CHECK-NEXT: vl %v3, 272(%r15) -; CHECK-NEXT: vmrlg %v0, %v2, %v2 -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v27, %v3, %v2, %v0 -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i32> %val3, %val4 - %and = or <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i64> %val5, <16 x i64> %val6 - ret <16 x i64> %sel -} - -define <16 x i64> @fun120(<16 x i8> %val1, <16 x i8> %val2, <16 x i64> %val3, <16 x i64> %val4, <16 x i64> %val5, <16 x i64> %val6) { -; CHECK-LABEL: fun120: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 192(%r15) -; CHECK-NEXT: vceqg %v1, %v28, %v0 -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v2, %v0 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vo %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 448(%r15) -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v1 -; CHECK-NEXT: vpkf %v2, %v0, %v0 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v30, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vo %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 464(%r15) -; CHECK-NEXT: vl %v3, 336(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v2, %v1 -; CHECK-NEXT: vpkg %v2, %v0, %v0 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v25, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vo %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 480(%r15) -; CHECK-NEXT: vsel %v28, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v3, 368(%r15) -; CHECK-NEXT: vsldb %v2, %v0, %v0, 6 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v27, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vo %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 496(%r15) -; CHECK-NEXT: vsel %v30, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vl %v3, 384(%r15) -; CHECK-NEXT: vmrlg %v2, %v0, %v0 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v29, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vo %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 512(%r15) -; CHECK-NEXT: vsel %v25, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v3, 400(%r15) -; CHECK-NEXT: vsldb %v2, %v0, %v0, 10 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v31, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vo %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 528(%r15) -; CHECK-NEXT: vsel %v27, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 288(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vl %v3, 416(%r15) -; CHECK-NEXT: vceqg %v1, %v2, %v1 -; CHECK-NEXT: vsldb %v2, %v0, %v0, 12 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 14 -; CHECK-NEXT: vo %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 544(%r15) -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vsel %v29, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 304(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vceqg %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 432(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vo %v0, %v0, %v1 -; CHECK-NEXT: vl %v1, 560(%r15) -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i64> %val3, %val4 - %and = or <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i64> %val5, <16 x i64> %val6 - ret <16 x i64> %sel -} - -define <16 x i16> @fun121(<16 x i8> %val1, <16 x i8> %val2, <16 x float> %val3, <16 x float> %val4, <16 x i16> %val5, <16 x i16> %val6) { -; CHECK-LABEL: fun121: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v31, %v31 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v31, %v31 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v28, %v28 -; CHECK-NEXT: vmrlf %v4, %v25, %v25 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v29, %v29 -; CHECK-NEXT: vmrlf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v29, %v29 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vuphb %v2, %v1 -; CHECK-NEXT: vo %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vmrlf %v2, %v0, %v0 -; CHECK-NEXT: vmrlf %v3, %v27, %v27 -; CHECK-NEXT: vmrhf %v0, %v0, %v0 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vmrhf %v3, %v27, %v27 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v0, %v3, %v0 -; CHECK-NEXT: vpkg %v0, %v0, %v2 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vmrlf %v3, %v2, %v2 -; CHECK-NEXT: vmrhf %v2, %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v3, %v4, %v3 -; CHECK-NEXT: vmrhf %v4, %v25, %v25 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v2, %v4, %v2 -; CHECK-NEXT: vpkg %v2, %v2, %v3 -; CHECK-NEXT: vpkf %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = fcmp ogt <16 x float> %val3, %val4 - %and = or <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i16> %val5, <16 x i16> %val6 - ret <16 x i16> %sel -} - -define <16 x i8> @fun122(<16 x i8> %val1, <16 x i8> %val2, <16 x double> %val3, <16 x double> %val4, <16 x i8> %val5, <16 x i8> %val6) { -; CHECK-LABEL: fun122: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 304(%r15) -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 288(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 256(%r15) -; CHECK-NEXT: vfchdb %v1, %v31, %v1 -; CHECK-NEXT: vfchdb %v2, %v29, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vfchdb %v1, %v27, %v1 -; CHECK-NEXT: vfchdb %v2, %v25, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vfchdb %v2, %v30, %v2 -; CHECK-NEXT: vfchdb %v3, %v28, %v3 -; CHECK-NEXT: vpkg %v2, %v3, %v2 -; CHECK-NEXT: vpkf %v1, %v2, %v1 -; CHECK-NEXT: vpkh %v0, %v1, %v0 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 336(%r15) -; CHECK-NEXT: vl %v2, 320(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = fcmp ogt <16 x double> %val3, %val4 - %and = or <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6 - ret <16 x i8> %sel -} - -define <16 x i8> @fun123(<16 x i16> %val1, <16 x i16> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i8> %val5, <16 x i8> %val6) { -; CHECK-LABEL: fun123: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v27, %v31 -; CHECK-NEXT: vceqh %v1, %v26, %v30 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v25, %v29 -; CHECK-NEXT: vceqh %v2, %v24, %v28 -; CHECK-NEXT: vo %v1, %v2, %v1 -; CHECK-NEXT: vpkh %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i16> %val3, %val4 - %and = or <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6 - ret <16 x i8> %sel -} - -define <16 x i16> @fun124(<16 x i16> %val1, <16 x i16> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i16> %val5, <16 x i16> %val6) { -; CHECK-LABEL: fun124: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v25, %v29 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vceqh %v0, %v27, %v31 -; CHECK-NEXT: vceqh %v1, %v26, %v30 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i16> %val3, %val4 - %and = or <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i16> %val5, <16 x i16> %val6 - ret <16 x i16> %sel -} - -define <16 x i32> @fun125(<16 x i16> %val1, <16 x i16> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i32> %val5, <16 x i32> %val6) { -; CHECK-LABEL: fun125: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v25, %v29 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vsel %v24, %v3, %v2, %v1 -; CHECK-NEXT: vceqh %v1, %v27, %v31 -; CHECK-NEXT: vceqh %v2, %v26, %v30 -; CHECK-NEXT: vo %v1, %v2, %v1 -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 240(%r15) -; CHECK-NEXT: vl %v3, 176(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v26, %v3, %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i16> %val3, %val4 - %and = or <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i32> %val5, <16 x i32> %val6 - ret <16 x i32> %sel -} - -define <16 x i8> @fun126(<16 x i16> %val1, <16 x i16> %val2, <16 x i32> %val3, <16 x i32> %val4, <16 x i8> %val5, <16 x i8> %val6) { -; CHECK-LABEL: fun126: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vceqf %v0, %v31, %v0 -; CHECK-NEXT: vceqf %v1, %v29, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v26, %v30 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vceqf %v1, %v27, %v1 -; CHECK-NEXT: vceqf %v2, %v25, %v2 -; CHECK-NEXT: vpkf %v1, %v2, %v1 -; CHECK-NEXT: vceqh %v2, %v24, %v28 -; CHECK-NEXT: vo %v1, %v2, %v1 -; CHECK-NEXT: vpkh %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i32> %val3, %val4 - %and = or <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6 - ret <16 x i8> %sel -} - -define <16 x i32> @fun127(<16 x i16> %val1, <16 x i16> %val2, <16 x i64> %val3, <16 x i64> %val4, <16 x i32> %val5, <16 x i32> %val6) { -; CHECK-LABEL: fun127: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 240(%r15) -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vceqg %v0, %v27, %v0 -; CHECK-NEXT: vceqg %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vo %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 416(%r15) -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 304(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vceqg %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vceqg %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v0, %v2, %v0 -; CHECK-NEXT: vceqh %v2, %v26, %v30 -; CHECK-NEXT: vuphh %v3, %v2 -; CHECK-NEXT: vo %v0, %v3, %v0 -; CHECK-NEXT: vl %v3, 448(%r15) -; CHECK-NEXT: vl %v4, 384(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vceqg %v0, %v31, %v0 -; CHECK-NEXT: vceqg %v3, %v29, %v3 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vpkg %v0, %v3, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vl %v3, 368(%r15) -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v1, %v0 -; CHECK-NEXT: vl %v0, 336(%r15) -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vceqg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 320(%r15) -; CHECK-NEXT: vceqg %v1, %v3, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlg %v1, %v2, %v2 -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 464(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i64> %val3, %val4 - %and = or <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i32> %val5, <16 x i32> %val6 - ret <16 x i32> %sel -} - -define <16 x double> @fun128(<16 x i16> %val1, <16 x i16> %val2, <16 x float> %val3, <16 x float> %val4, <16 x double> %val5, <16 x double> %val6) { -; CHECK-LABEL: fun128: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 160(%r15) -; CHECK-NEXT: vmrlf %v1, %v0, %v0 -; CHECK-NEXT: vmrlf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v0, %v0, %v0 -; CHECK-NEXT: vmrhf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vl %v4, 224(%r15) -; CHECK-NEXT: vl %v5, 416(%r15) -; CHECK-NEXT: vl %v6, 288(%r15) -; CHECK-NEXT: vfchdb %v0, %v2, %v0 -; CHECK-NEXT: vpkg %v0, %v0, %v1 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vo %v0, %v2, %v0 -; CHECK-NEXT: vuphf %v2, %v0 -; CHECK-NEXT: vsel %v24, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vmrlf %v3, %v2, %v2 -; CHECK-NEXT: vmrlf %v4, %v27, %v27 -; CHECK-NEXT: vmrhf %v2, %v2, %v2 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v3, %v4, %v3 -; CHECK-NEXT: vmrhf %v4, %v27, %v27 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v2, %v4, %v2 -; CHECK-NEXT: vl %v4, 256(%r15) -; CHECK-NEXT: vpkg %v2, %v2, %v3 -; CHECK-NEXT: vl %v3, 384(%r15) -; CHECK-NEXT: vo %v1, %v1, %v2 -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vmrlf %v3, %v2, %v2 -; CHECK-NEXT: vmrlf %v4, %v29, %v29 -; CHECK-NEXT: vmrhf %v2, %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v3, %v4, %v3 -; CHECK-NEXT: vmrhf %v4, %v29, %v29 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v2, %v4, %v2 -; CHECK-NEXT: vpkg %v2, %v2, %v3 -; CHECK-NEXT: vceqh %v3, %v26, %v30 -; CHECK-NEXT: vuphh %v4, %v3 -; CHECK-NEXT: vo %v2, %v4, %v2 -; CHECK-NEXT: vuphf %v4, %v2 -; CHECK-NEXT: vsel %v25, %v6, %v5, %v4 -; CHECK-NEXT: vl %v4, 208(%r15) -; CHECK-NEXT: vmrlf %v5, %v4, %v4 -; CHECK-NEXT: vmrlf %v6, %v31, %v31 -; CHECK-NEXT: vmrhf %v4, %v4, %v4 -; CHECK-NEXT: vmrlg %v3, %v3, %v3 -; CHECK-NEXT: vuphh %v3, %v3 -; CHECK-NEXT: vldeb %v5, %v5 -; CHECK-NEXT: vldeb %v6, %v6 -; CHECK-NEXT: vfchdb %v5, %v6, %v5 -; CHECK-NEXT: vmrhf %v6, %v31, %v31 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vldeb %v6, %v6 -; CHECK-NEXT: vfchdb %v4, %v6, %v4 -; CHECK-NEXT: vl %v6, 320(%r15) -; CHECK-NEXT: vpkg %v4, %v4, %v5 -; CHECK-NEXT: vl %v5, 448(%r15) -; CHECK-NEXT: vo %v3, %v3, %v4 -; CHECK-NEXT: vuphf %v4, %v3 -; CHECK-NEXT: vsel %v29, %v6, %v5, %v4 -; CHECK-NEXT: vl %v4, 368(%r15) -; CHECK-NEXT: vl %v5, 240(%r15) -; CHECK-NEXT: vsel %v26, %v5, %v4, %v0 -; CHECK-NEXT: vl %v4, 272(%r15) -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 400(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v4, %v1, %v0 -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vmrlg %v0, %v2, %v2 -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v27, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 464(%r15) -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vmrlg %v0, %v3, %v3 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = fcmp ogt <16 x float> %val3, %val4 - %and = or <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x double> %val5, <16 x double> %val6 - ret <16 x double> %sel -} - -define <16 x i32> @fun129(<16 x i16> %val1, <16 x i16> %val2, <16 x double> %val3, <16 x double> %val4, <16 x i32> %val5, <16 x i32> %val6) { -; CHECK-LABEL: fun129: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 240(%r15) -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vfchdb %v0, %v27, %v0 -; CHECK-NEXT: vfchdb %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vo %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 416(%r15) -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 304(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vfchdb %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v0, %v2, %v0 -; CHECK-NEXT: vceqh %v2, %v26, %v30 -; CHECK-NEXT: vuphh %v3, %v2 -; CHECK-NEXT: vo %v0, %v3, %v0 -; CHECK-NEXT: vl %v3, 448(%r15) -; CHECK-NEXT: vl %v4, 384(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vfchdb %v0, %v31, %v0 -; CHECK-NEXT: vfchdb %v3, %v29, %v3 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vpkg %v0, %v3, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vl %v3, 368(%r15) -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v1, %v0 -; CHECK-NEXT: vl %v0, 336(%r15) -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 320(%r15) -; CHECK-NEXT: vfchdb %v1, %v3, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlg %v1, %v2, %v2 -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vo %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 464(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = fcmp ogt <16 x double> %val3, %val4 - %and = or <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i32> %val5, <16 x i32> %val6 - ret <16 x i32> %sel -} - -define <2 x i8> @fun130(<2 x i8> %val1, <2 x i8> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x i8> %val5, <2 x i8> %val6) { -; CHECK-LABEL: fun130: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v28, %v30 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = icmp eq <2 x i8> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 - ret <2 x i8> %sel -} - -define <2 x i16> @fun131(<2 x i8> %val1, <2 x i8> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun131: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v28, %v30 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = icmp eq <2 x i8> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x i8> @fun132(<2 x i8> %val1, <2 x i8> %val2, <2 x i16> %val3, <2 x i16> %val4, <2 x i8> %val5, <2 x i8> %val6) { -; CHECK-LABEL: fun132: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v1, %v28, %v30 -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vpkh %v1, %v1, %v1 -; CHECK-NEXT: vx %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = icmp eq <2 x i16> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 - ret <2 x i8> %sel -} - -define <2 x i32> @fun133(<2 x i8> %val1, <2 x i8> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i32> %val5, <2 x i32> %val6) { -; CHECK-LABEL: fun133: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel -} - -define <2 x i32> @fun134(<2 x i8> %val1, <2 x i8> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i32> %val5, <2 x i32> %val6) { -; CHECK-LABEL: fun134: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vpkg %v0, %v0, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = icmp eq <2 x i64> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel -} - -define <2 x i16> @fun135(<2 x i8> %val1, <2 x i8> %val2, <2 x float> %val3, <2 x float> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun135: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x i64> @fun136(<2 x i8> %val1, <2 x i8> %val2, <2 x double> %val3, <2 x double> %val4, <2 x i64> %val5, <2 x i64> %val6) { -; CHECK-LABEL: fun136: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v28, %v30 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i8> %val1, %val2 - %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 - ret <2 x i64> %sel -} - -define <2 x i8> @fun137(<2 x i16> %val1, <2 x i16> %val2, <2 x i16> %val3, <2 x i16> %val4, <2 x i8> %val5, <2 x i8> %val6) { -; CHECK-LABEL: fun137: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i16> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 - ret <2 x i8> %sel -} - -define <2 x i16> @fun138(<2 x i16> %val1, <2 x i16> %val2, <2 x i16> %val3, <2 x i16> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun138: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i16> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x i32> @fun139(<2 x i16> %val1, <2 x i16> %val2, <2 x i16> %val3, <2 x i16> %val4, <2 x i32> %val5, <2 x i32> %val6) { -; CHECK-LABEL: fun139: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i16> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel -} - -define <2 x i8> @fun140(<2 x i16> %val1, <2 x i16> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i8> %val5, <2 x i8> %val6) { -; CHECK-LABEL: fun140: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v1, %v28, %v30 -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vpkf %v1, %v1, %v1 -; CHECK-NEXT: vx %v0, %v0, %v1 -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 - ret <2 x i8> %sel -} - -define <2 x i8> @fun141(<2 x i16> %val1, <2 x i16> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i8> %val5, <2 x i8> %val6) { -; CHECK-LABEL: fun141: -; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI141_0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = icmp eq <2 x i64> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6 - ret <2 x i8> %sel -} - -define <2 x double> @fun142(<2 x i16> %val1, <2 x i16> %val2, <2 x float> %val3, <2 x float> %val4, <2 x double> %val5, <2 x double> %val6) { -; CHECK-LABEL: fun142: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x double> %val5, <2 x double> %val6 - ret <2 x double> %sel -} - -define <2 x i16> @fun143(<2 x i16> %val1, <2 x i16> %val2, <2 x double> %val3, <2 x double> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun143: -; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI143_0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vfchdb %v0, %v28, %v30 -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i16> %val1, %val2 - %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x i16> @fun144(<2 x i32> %val1, <2 x i32> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun144: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x i32> @fun145(<2 x i32> %val1, <2 x i32> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i32> %val5, <2 x i32> %val6) { -; CHECK-LABEL: fun145: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel -} - -define <2 x i64> @fun146(<2 x i32> %val1, <2 x i32> %val2, <2 x i32> %val3, <2 x i32> %val4, <2 x i64> %val5, <2 x i64> %val6) { -; CHECK-LABEL: fun146: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = icmp eq <2 x i32> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 - ret <2 x i64> %sel -} - -define <2 x i64> @fun147(<2 x i32> %val1, <2 x i32> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i64> %val5, <2 x i64> %val6) { -; CHECK-LABEL: fun147: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = icmp eq <2 x i64> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 - ret <2 x i64> %sel -} - -define <2 x i16> @fun148(<2 x i32> %val1, <2 x i32> %val2, <2 x float> %val3, <2 x float> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun148: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x float> @fun149(<2 x i32> %val1, <2 x i32> %val2, <2 x double> %val3, <2 x double> %val4, <2 x float> %val5, <2 x float> %val6) { -; CHECK-LABEL: fun149: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v1, %v28, %v30 -; CHECK-NEXT: vceqf %v0, %v24, %v26 -; CHECK-NEXT: vpkg %v1, %v1, %v1 -; CHECK-NEXT: vx %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i32> %val1, %val2 - %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x float> %val5, <2 x float> %val6 - ret <2 x float> %sel -} - -define <2 x i16> @fun150(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun150: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vceqg %v1, %v24, %v26 -; CHECK-NEXT: larl %r1, .LCPI150_0 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i64> %val1, %val2 - %cmp1 = icmp eq <2 x i64> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x i64> @fun151(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i64> %val5, <2 x i64> %val6) { -; CHECK-LABEL: fun151: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v28, %v30 -; CHECK-NEXT: vceqg %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i64> %val1, %val2 - %cmp1 = icmp eq <2 x i64> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 - ret <2 x i64> %sel -} - -define <2 x i64> @fun152(<2 x i64> %val1, <2 x i64> %val2, <2 x float> %val3, <2 x float> %val4, <2 x i64> %val5, <2 x i64> %val6) { -; CHECK-LABEL: fun152: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vceqg %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i64> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6 - ret <2 x i64> %sel -} - -define <2 x i16> @fun153(<2 x i64> %val1, <2 x i64> %val2, <2 x double> %val3, <2 x double> %val4, <2 x i16> %val5, <2 x i16> %val6) { -; CHECK-LABEL: fun153: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v28, %v30 -; CHECK-NEXT: vceqg %v1, %v24, %v26 -; CHECK-NEXT: larl %r1, .LCPI153_0 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <2 x i64> %val1, %val2 - %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6 - ret <2 x i16> %sel -} - -define <2 x float> @fun154(<2 x float> %val1, <2 x float> %val2, <2 x float> %val3, <2 x float> %val4, <2 x float> %val5, <2 x float> %val6) { -; CHECK-LABEL: fun154: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <2 x float> %val1, %val2 - %cmp1 = fcmp ogt <2 x float> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x float> %val5, <2 x float> %val6 - ret <2 x float> %sel -} - -define <2 x i32> @fun155(<2 x float> %val1, <2 x float> %val2, <2 x double> %val3, <2 x double> %val4, <2 x i32> %val5, <2 x i32> %val6) { -; CHECK-LABEL: fun155: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v26, %v26 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vfchdb %v1, %v28, %v30 -; CHECK-NEXT: vpkg %v1, %v1, %v1 -; CHECK-NEXT: vx %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <2 x float> %val1, %val2 - %cmp1 = fcmp ogt <2 x double> %val3, %val4 - %and = xor <2 x i1> %cmp0, %cmp1 - %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6 - ret <2 x i32> %sel -} - -define <4 x i16> @fun156(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3, <4 x i32> %val4, <4 x i16> %val5, <4 x i16> %val6) { -; CHECK-LABEL: fun156: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = icmp eq <4 x i32> %val3, %val4 - %and = xor <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i16> %val5, <4 x i16> %val6 - ret <4 x i16> %sel -} - -define <4 x i32> @fun157(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3, <4 x i32> %val4, <4 x i32> %val5, <4 x i32> %val6) { -; CHECK-LABEL: fun157: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = icmp eq <4 x i32> %val3, %val4 - %and = xor <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i32> %val5, <4 x i32> %val6 - ret <4 x i32> %sel -} - -define <4 x i64> @fun158(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3, <4 x i32> %val4, <4 x i64> %val5, <4 x i64> %val6) { -; CHECK-LABEL: fun158: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v28, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v1 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = icmp eq <4 x i32> %val3, %val4 - %and = xor <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i64> %val5, <4 x i64> %val6 - ret <4 x i64> %sel -} - -define <4 x i32> @fun159(<4 x i32> %val1, <4 x i32> %val2, <4 x i64> %val3, <4 x i64> %val4, <4 x i32> %val5, <4 x i32> %val6) { -; CHECK-LABEL: fun159: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v30, %v27 -; CHECK-NEXT: vceqg %v1, %v28, %v25 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = icmp eq <4 x i64> %val3, %val4 - %and = xor <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i32> %val5, <4 x i32> %val6 - ret <4 x i32> %sel -} - -define <4 x i16> @fun160(<4 x i32> %val1, <4 x i32> %val2, <4 x float> %val3, <4 x float> %val4, <4 x i16> %val5, <4 x i16> %val6) { -; CHECK-LABEL: fun160: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = fcmp ogt <4 x float> %val3, %val4 - %and = xor <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i16> %val5, <4 x i16> %val6 - ret <4 x i16> %sel -} - -define <4 x i8> @fun161(<4 x i32> %val1, <4 x i32> %val2, <4 x double> %val3, <4 x double> %val4, <4 x i8> %val5, <4 x i8> %val6) { -; CHECK-LABEL: fun161: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v30, %v27 -; CHECK-NEXT: vfchdb %v1, %v28, %v25 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v26 -; CHECK-NEXT: larl %r1, .LCPI161_0 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i32> %val1, %val2 - %cmp1 = fcmp ogt <4 x double> %val3, %val4 - %and = xor <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i8> %val5, <4 x i8> %val6 - ret <4 x i8> %sel -} - -define <4 x i32> @fun162(<4 x i64> %val1, <4 x i64> %val2, <4 x i64> %val3, <4 x i64> %val4, <4 x i32> %val5, <4 x i32> %val6) { -; CHECK-LABEL: fun162: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v27, %v31 -; CHECK-NEXT: vceqg %v1, %v26, %v30 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vceqg %v1, %v25, %v29 -; CHECK-NEXT: vceqg %v2, %v24, %v28 -; CHECK-NEXT: vx %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i64> %val1, %val2 - %cmp1 = icmp eq <4 x i64> %val3, %val4 - %and = xor <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i32> %val5, <4 x i32> %val6 - ret <4 x i32> %sel -} - -define <4 x i64> @fun163(<4 x i64> %val1, <4 x i64> %val2, <4 x i64> %val3, <4 x i64> %val4, <4 x i64> %val5, <4 x i64> %val6) { -; CHECK-LABEL: fun163: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v25, %v29 -; CHECK-NEXT: vceqg %v1, %v24, %v28 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vceqg %v0, %v27, %v31 -; CHECK-NEXT: vceqg %v1, %v26, %v30 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i64> %val1, %val2 - %cmp1 = icmp eq <4 x i64> %val3, %val4 - %and = xor <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i64> %val5, <4 x i64> %val6 - ret <4 x i64> %sel -} - -define <4 x i64> @fun164(<4 x i64> %val1, <4 x i64> %val2, <4 x float> %val3, <4 x float> %val4, <4 x i64> %val5, <4 x i64> %val6) { -; CHECK-LABEL: fun164: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v27, %v27 -; CHECK-NEXT: vmrlf %v1, %v25, %v25 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v27, %v27 -; CHECK-NEXT: vmrhf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vceqg %v2, %v24, %v28 -; CHECK-NEXT: vx %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v29, %v2, %v1 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vceqg %v1, %v26, %v30 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vsel %v26, %v31, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i64> %val1, %val2 - %cmp1 = fcmp ogt <4 x float> %val3, %val4 - %and = xor <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i64> %val5, <4 x i64> %val6 - ret <4 x i64> %sel -} - -define <4 x float> @fun165(<4 x i64> %val1, <4 x i64> %val2, <4 x double> %val3, <4 x double> %val4, <4 x float> %val5, <4 x float> %val6) { -; CHECK-LABEL: fun165: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v27, %v31 -; CHECK-NEXT: vceqg %v1, %v26, %v30 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vfchdb %v1, %v25, %v29 -; CHECK-NEXT: vceqg %v2, %v24, %v28 -; CHECK-NEXT: vx %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <4 x i64> %val1, %val2 - %cmp1 = fcmp ogt <4 x double> %val3, %val4 - %and = xor <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x float> %val5, <4 x float> %val6 - ret <4 x float> %sel -} - -define <4 x i16> @fun166(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4, <4 x i16> %val5, <4 x i16> %val6) { -; CHECK-LABEL: fun166: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <4 x float> %val1, %val2 - %cmp1 = fcmp ogt <4 x float> %val3, %val4 - %and = xor <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i16> %val5, <4 x i16> %val6 - ret <4 x i16> %sel -} - -define <4 x float> @fun167(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4, <4 x float> %val5, <4 x float> %val6) { -; CHECK-LABEL: fun167: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <4 x float> %val1, %val2 - %cmp1 = fcmp ogt <4 x float> %val3, %val4 - %and = xor <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x float> %val5, <4 x float> %val6 - ret <4 x float> %sel -} - -define <4 x double> @fun168(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4, <4 x double> %val5, <4 x double> %val6) { -; CHECK-LABEL: fun168: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v1 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <4 x float> %val1, %val2 - %cmp1 = fcmp ogt <4 x float> %val3, %val4 - %and = xor <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x double> %val5, <4 x double> %val6 - ret <4 x double> %sel -} - -define <4 x i8> @fun169(<4 x float> %val1, <4 x float> %val2, <4 x double> %val3, <4 x double> %val4, <4 x i8> %val5, <4 x i8> %val6) { -; CHECK-LABEL: fun169: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v30, %v27 -; CHECK-NEXT: vfchdb %v1, %v28, %v25 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: larl %r1, .LCPI169_0 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <4 x float> %val1, %val2 - %cmp1 = fcmp ogt <4 x double> %val3, %val4 - %and = xor <4 x i1> %cmp0, %cmp1 - %sel = select <4 x i1> %and, <4 x i8> %val5, <4 x i8> %val6 - ret <4 x i8> %sel -} - -define <8 x i8> @fun170(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i8> %val5, <8 x i8> %val6) { -; CHECK-LABEL: fun170: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i16> %val3, %val4 - %and = xor <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i8> %val5, <8 x i8> %val6 - ret <8 x i8> %sel -} - -define <8 x i16> @fun171(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i16> %val5, <8 x i16> %val6) { -; CHECK-LABEL: fun171: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i16> %val3, %val4 - %and = xor <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i16> %val5, <8 x i16> %val6 - ret <8 x i16> %sel -} - -define <8 x i32> @fun172(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i32> %val5, <8 x i32> %val6) { -; CHECK-LABEL: fun172: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v28, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v1 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i16> %val3, %val4 - %and = xor <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i32> %val5, <8 x i32> %val6 - ret <8 x i32> %sel -} - -define <8 x i64> @fun173(<8 x i16> %val1, <8 x i16> %val2, <8 x i32> %val3, <8 x i32> %val4, <8 x i64> %val5, <8 x i64> %val6) { -; CHECK-LABEL: fun173: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vceqf %v0, %v28, %v25 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vx %v0, %v2, %v0 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vuphf %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v29, %v3, %v2 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vsel %v26, %v31, %v2, %v0 -; CHECK-NEXT: vceqf %v0, %v30, %v27 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v28, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i32> %val3, %val4 - %and = xor <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i64> %val5, <8 x i64> %val6 - ret <8 x i64> %sel -} - -define <8 x i8> @fun174(<8 x i16> %val1, <8 x i16> %val2, <8 x i64> %val3, <8 x i64> %val4, <8 x i8> %val5, <8 x i8> %val6) { -; CHECK-LABEL: fun174: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v1, 160(%r15) -; CHECK-NEXT: vceqg %v0, %v27, %v0 -; CHECK-NEXT: vceqg %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqg %v1, %v30, %v31 -; CHECK-NEXT: vceqg %v2, %v28, %v29 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vlrepg %v1, 200(%r15) -; CHECK-NEXT: vlrepg %v2, 192(%r15) -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = icmp eq <8 x i64> %val3, %val4 - %and = xor <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i8> %val5, <8 x i8> %val6 - ret <8 x i8> %sel -} - -define <8 x i16> @fun175(<8 x i16> %val1, <8 x i16> %val2, <8 x float> %val3, <8 x float> %val4, <8 x i16> %val5, <8 x i16> %val6) { -; CHECK-LABEL: fun175: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v27, %v27 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v27, %v27 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v28, %v28 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v25, %v25 -; CHECK-NEXT: vmrlf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v29, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = fcmp ogt <8 x float> %val3, %val4 - %and = xor <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i16> %val5, <8 x i16> %val6 - ret <8 x i16> %sel -} - -define <8 x i32> @fun176(<8 x i16> %val1, <8 x i16> %val2, <8 x double> %val3, <8 x double> %val4, <8 x i32> %val5, <8 x i32> %val6) { -; CHECK-LABEL: fun176: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v30, %v31 -; CHECK-NEXT: vfchdb %v1, %v28, %v29 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v26 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vx %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vfchdb %v0, %v27, %v0 -; CHECK-NEXT: vfchdb %v2, %v25, %v2 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vpkg %v0, %v2, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i16> %val1, %val2 - %cmp1 = fcmp ogt <8 x double> %val3, %val4 - %and = xor <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i32> %val5, <8 x i32> %val6 - ret <8 x i32> %sel -} - -define <8 x i32> @fun177(<8 x i32> %val1, <8 x i32> %val2, <8 x i64> %val3, <8 x i64> %val4, <8 x i32> %val5, <8 x i32> %val6) { -; CHECK-LABEL: fun177: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v1, 160(%r15) -; CHECK-NEXT: vceqg %v0, %v27, %v0 -; CHECK-NEXT: vceqg %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v28 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vceqg %v0, %v31, %v0 -; CHECK-NEXT: vceqg %v1, %v29, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v26, %v30 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 240(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i32> %val1, %val2 - %cmp1 = icmp eq <8 x i64> %val3, %val4 - %and = xor <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i32> %val5, <8 x i32> %val6 - ret <8 x i32> %sel -} - -define <8 x double> @fun178(<8 x i32> %val1, <8 x i32> %val2, <8 x float> %val3, <8 x float> %val4, <8 x double> %val5, <8 x double> %val6) { -; CHECK-LABEL: fun178: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v29, %v29 -; CHECK-NEXT: vmrlf %v1, %v25, %v25 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v29, %v29 -; CHECK-NEXT: vmrhf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v24, %v28 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vsel %v24, %v3, %v2, %v1 -; CHECK-NEXT: vmrlf %v1, %v31, %v31 -; CHECK-NEXT: vmrlf %v2, %v27, %v27 -; CHECK-NEXT: vmrhf %v3, %v27, %v27 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v31, %v31 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vceqf %v2, %v26, %v30 -; CHECK-NEXT: vx %v1, %v2, %v1 -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 240(%r15) -; CHECK-NEXT: vl %v3, 176(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v2, %v0 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i32> %val1, %val2 - %cmp1 = fcmp ogt <8 x float> %val3, %val4 - %and = xor <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x double> %val5, <8 x double> %val6 - ret <8 x double> %sel -} - -define <8 x double> @fun179(<8 x i32> %val1, <8 x i32> %val2, <8 x double> %val3, <8 x double> %val4, <8 x double> %val5, <8 x double> %val6) { -; CHECK-LABEL: fun179: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 160(%r15) -; CHECK-NEXT: vceqf %v1, %v24, %v28 -; CHECK-NEXT: vfchdb %v0, %v25, %v0 -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vx %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vl %v3, 224(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 192(%r15) -; CHECK-NEXT: vceqf %v2, %v26, %v30 -; CHECK-NEXT: vfchdb %v0, %v29, %v0 -; CHECK-NEXT: vuphf %v3, %v2 -; CHECK-NEXT: vx %v0, %v3, %v0 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vl %v4, 256(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v0 -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v27, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 304(%r15) -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v1, %v0 -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vmrlg %v1, %v2, %v2 -; CHECK-NEXT: vfchdb %v0, %v31, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vl %v2, 272(%r15) -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 336(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <8 x i32> %val1, %val2 - %cmp1 = fcmp ogt <8 x double> %val3, %val4 - %and = xor <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x double> %val5, <8 x double> %val6 - ret <8 x double> %sel -} - -define <8 x i64> @fun180(<8 x float> %val1, <8 x float> %val2, <8 x double> %val3, <8 x double> %val4, <8 x i64> %val5, <8 x i64> %val6) { -; CHECK-LABEL: fun180: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v28, %v28 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v28, %v28 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vl %v3, 224(%r15) -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vl %v4, 256(%r15) -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vfchdb %v2, %v25, %v2 -; CHECK-NEXT: vx %v1, %v1, %v2 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v1 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vmrlf %v2, %v26, %v26 -; CHECK-NEXT: vmrhf %v3, %v26, %v26 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vfchdb %v3, %v29, %v3 -; CHECK-NEXT: vx %v2, %v2, %v3 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vfchdb %v2, %v27, %v2 -; CHECK-NEXT: vx %v0, %v0, %v2 -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v2, %v0 -; CHECK-NEXT: vl %v2, 272(%r15) -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vfchdb %v1, %v31, %v1 -; CHECK-NEXT: vx %v0, %v0, %v1 -; CHECK-NEXT: vl %v1, 336(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = fcmp ogt <8 x float> %val1, %val2 - %cmp1 = fcmp ogt <8 x double> %val3, %val4 - %and = xor <8 x i1> %cmp0, %cmp1 - %sel = select <8 x i1> %and, <8 x i64> %val5, <8 x i64> %val6 - ret <8 x i64> %sel -} - -define <16 x i8> @fun181(<16 x i8> %val1, <16 x i8> %val2, <16 x i8> %val3, <16 x i8> %val4, <16 x i8> %val5, <16 x i8> %val6) { -; CHECK-LABEL: fun181: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v28, %v30 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i8> %val3, %val4 - %and = xor <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6 - ret <16 x i8> %sel -} - -define <16 x i16> @fun182(<16 x i8> %val1, <16 x i8> %val2, <16 x i8> %val3, <16 x i8> %val4, <16 x i16> %val5, <16 x i16> %val6) { -; CHECK-LABEL: fun182: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v28, %v30 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vuphb %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v1 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i8> %val3, %val4 - %and = xor <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i16> %val5, <16 x i16> %val6 - ret <16 x i16> %sel -} - -define <16 x i64> @fun183(<16 x i8> %val1, <16 x i8> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i64> %val5, <16 x i64> %val6) { -; CHECK-LABEL: fun183: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vceqh %v0, %v28, %v25 -; CHECK-NEXT: vuphb %v2, %v1 -; CHECK-NEXT: vx %v0, %v2, %v0 -; CHECK-NEXT: vuphh %v2, %v0 -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v24, %v29, %v3, %v2 -; CHECK-NEXT: vpkg %v2, %v0, %v0 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vl %v3, 272(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v26, %v31, %v3, %v2 -; CHECK-NEXT: vmrlg %v2, %v0, %v0 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 12 -; CHECK-NEXT: vl %v3, 288(%r15) -; CHECK-NEXT: vl %v4, 160(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vl %v3, 176(%r15) -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vsel %v0, %v3, %v2, %v0 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vceqh %v2, %v30, %v27 -; CHECK-NEXT: vlr %v30, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vx %v1, %v1, %v2 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v25, %v4, %v3, %v2 -; CHECK-NEXT: vl %v3, 336(%r15) -; CHECK-NEXT: vl %v4, 208(%r15) -; CHECK-NEXT: vpkg %v2, %v1, %v1 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v27, %v4, %v3, %v2 -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vl %v4, 224(%r15) -; CHECK-NEXT: vmrlg %v2, %v1, %v1 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vsldb %v1, %v1, %v1, 12 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vsel %v29, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 368(%r15) -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v31, %v3, %v2, %v1 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i16> %val3, %val4 - %and = xor <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i64> %val5, <16 x i64> %val6 - ret <16 x i64> %sel -} - -define <16 x i64> @fun184(<16 x i8> %val1, <16 x i8> %val2, <16 x i32> %val3, <16 x i32> %val4, <16 x i64> %val5, <16 x i64> %val6) { -; CHECK-LABEL: fun184: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vuphb %v2, %v1 -; CHECK-NEXT: vceqf %v0, %v28, %v29 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vx %v0, %v2, %v0 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vuphf %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vl %v3, 208(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v26, %v3, %v2, %v0 -; CHECK-NEXT: vpkg %v2, %v1, %v1 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vceqf %v0, %v30, %v31 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vx %v0, %v2, %v0 -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vl %v4, 224(%r15) -; CHECK-NEXT: vuphf %v2, %v0 -; CHECK-NEXT: vl %v5, 256(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vl %v4, 384(%r15) -; CHECK-NEXT: vmrlg %v3, %v1, %v1 -; CHECK-NEXT: vuphb %v3, %v3 -; CHECK-NEXT: vceqf %v2, %v25, %v2 -; CHECK-NEXT: vuphh %v3, %v3 -; CHECK-NEXT: vx %v2, %v3, %v2 -; CHECK-NEXT: vuphf %v3, %v2 -; CHECK-NEXT: vsldb %v1, %v1, %v1, 12 -; CHECK-NEXT: vsel %v25, %v5, %v4, %v3 -; CHECK-NEXT: vl %v3, 176(%r15) -; CHECK-NEXT: vl %v4, 416(%r15) -; CHECK-NEXT: vl %v5, 288(%r15) -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vceqf %v3, %v27, %v3 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vx %v1, %v1, %v3 -; CHECK-NEXT: vuphf %v3, %v1 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v29, %v5, %v4, %v3 -; CHECK-NEXT: vl %v3, 368(%r15) -; CHECK-NEXT: vl %v4, 240(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v4, %v3, %v0 -; CHECK-NEXT: vl %v3, 272(%r15) -; CHECK-NEXT: vmrlg %v0, %v2, %v2 -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v27, %v3, %v2, %v0 -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i32> %val3, %val4 - %and = xor <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i64> %val5, <16 x i64> %val6 - ret <16 x i64> %sel -} - -define <16 x i64> @fun185(<16 x i8> %val1, <16 x i8> %val2, <16 x i64> %val3, <16 x i64> %val4, <16 x i64> %val5, <16 x i64> %val6) { -; CHECK-LABEL: fun185: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 192(%r15) -; CHECK-NEXT: vceqg %v1, %v28, %v0 -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v2, %v0 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vx %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 448(%r15) -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v1 -; CHECK-NEXT: vpkf %v2, %v0, %v0 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v30, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vx %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 464(%r15) -; CHECK-NEXT: vl %v3, 336(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v2, %v1 -; CHECK-NEXT: vpkg %v2, %v0, %v0 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v25, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vx %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 480(%r15) -; CHECK-NEXT: vsel %v28, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v3, 368(%r15) -; CHECK-NEXT: vsldb %v2, %v0, %v0, 6 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v27, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vx %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 496(%r15) -; CHECK-NEXT: vsel %v30, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vl %v3, 384(%r15) -; CHECK-NEXT: vmrlg %v2, %v0, %v0 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v29, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vx %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 512(%r15) -; CHECK-NEXT: vsel %v25, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v3, 400(%r15) -; CHECK-NEXT: vsldb %v2, %v0, %v0, 10 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vceqg %v1, %v31, %v1 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vx %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 528(%r15) -; CHECK-NEXT: vsel %v27, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 288(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vl %v3, 416(%r15) -; CHECK-NEXT: vceqg %v1, %v2, %v1 -; CHECK-NEXT: vsldb %v2, %v0, %v0, 12 -; CHECK-NEXT: vuphb %v2, %v2 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 14 -; CHECK-NEXT: vx %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 544(%r15) -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vsel %v29, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 304(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vceqg %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 432(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vx %v0, %v0, %v1 -; CHECK-NEXT: vl %v1, 560(%r15) -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = icmp eq <16 x i64> %val3, %val4 - %and = xor <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i64> %val5, <16 x i64> %val6 - ret <16 x i64> %sel -} - -define <16 x i16> @fun186(<16 x i8> %val1, <16 x i8> %val2, <16 x float> %val3, <16 x float> %val4, <16 x i16> %val5, <16 x i16> %val6) { -; CHECK-LABEL: fun186: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v31, %v31 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v31, %v31 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v28, %v28 -; CHECK-NEXT: vmrlf %v4, %v25, %v25 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v29, %v29 -; CHECK-NEXT: vmrlf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v29, %v29 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vuphb %v2, %v1 -; CHECK-NEXT: vx %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vmrlf %v2, %v0, %v0 -; CHECK-NEXT: vmrlf %v3, %v27, %v27 -; CHECK-NEXT: vmrhf %v0, %v0, %v0 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vmrhf %v3, %v27, %v27 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v0, %v3, %v0 -; CHECK-NEXT: vpkg %v0, %v0, %v2 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vmrlf %v3, %v2, %v2 -; CHECK-NEXT: vmrhf %v2, %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v3, %v4, %v3 -; CHECK-NEXT: vmrhf %v4, %v25, %v25 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v2, %v4, %v2 -; CHECK-NEXT: vpkg %v2, %v2, %v3 -; CHECK-NEXT: vpkf %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = fcmp ogt <16 x float> %val3, %val4 - %and = xor <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i16> %val5, <16 x i16> %val6 - ret <16 x i16> %sel -} - -define <16 x i8> @fun187(<16 x i8> %val1, <16 x i8> %val2, <16 x double> %val3, <16 x double> %val4, <16 x i8> %val5, <16 x i8> %val6) { -; CHECK-LABEL: fun187: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 304(%r15) -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 288(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 256(%r15) -; CHECK-NEXT: vfchdb %v1, %v31, %v1 -; CHECK-NEXT: vfchdb %v2, %v29, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vfchdb %v1, %v27, %v1 -; CHECK-NEXT: vfchdb %v2, %v25, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vfchdb %v2, %v30, %v2 -; CHECK-NEXT: vfchdb %v3, %v28, %v3 -; CHECK-NEXT: vpkg %v2, %v3, %v2 -; CHECK-NEXT: vpkf %v1, %v2, %v1 -; CHECK-NEXT: vpkh %v0, %v1, %v0 -; CHECK-NEXT: vceqb %v1, %v24, %v26 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 336(%r15) -; CHECK-NEXT: vl %v2, 320(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i8> %val1, %val2 - %cmp1 = fcmp ogt <16 x double> %val3, %val4 - %and = xor <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6 - ret <16 x i8> %sel -} - -define <16 x i8> @fun188(<16 x i16> %val1, <16 x i16> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i8> %val5, <16 x i8> %val6) { -; CHECK-LABEL: fun188: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v27, %v31 -; CHECK-NEXT: vceqh %v1, %v26, %v30 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v25, %v29 -; CHECK-NEXT: vceqh %v2, %v24, %v28 -; CHECK-NEXT: vx %v1, %v2, %v1 -; CHECK-NEXT: vpkh %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i16> %val3, %val4 - %and = xor <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6 - ret <16 x i8> %sel -} - -define <16 x i16> @fun189(<16 x i16> %val1, <16 x i16> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i16> %val5, <16 x i16> %val6) { -; CHECK-LABEL: fun189: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v25, %v29 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vceqh %v0, %v27, %v31 -; CHECK-NEXT: vceqh %v1, %v26, %v30 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i16> %val3, %val4 - %and = xor <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i16> %val5, <16 x i16> %val6 - ret <16 x i16> %sel -} - -define <16 x i32> @fun190(<16 x i16> %val1, <16 x i16> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i32> %val5, <16 x i32> %val6) { -; CHECK-LABEL: fun190: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v25, %v29 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vsel %v24, %v3, %v2, %v1 -; CHECK-NEXT: vceqh %v1, %v27, %v31 -; CHECK-NEXT: vceqh %v2, %v26, %v30 -; CHECK-NEXT: vx %v1, %v2, %v1 -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 240(%r15) -; CHECK-NEXT: vl %v3, 176(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v26, %v3, %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i16> %val3, %val4 - %and = xor <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i32> %val5, <16 x i32> %val6 - ret <16 x i32> %sel -} - -define <16 x i8> @fun191(<16 x i16> %val1, <16 x i16> %val2, <16 x i32> %val3, <16 x i32> %val4, <16 x i8> %val5, <16 x i8> %val6) { -; CHECK-LABEL: fun191: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vceqf %v0, %v31, %v0 -; CHECK-NEXT: vceqf %v1, %v29, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v26, %v30 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vceqf %v1, %v27, %v1 -; CHECK-NEXT: vceqf %v2, %v25, %v2 -; CHECK-NEXT: vpkf %v1, %v2, %v1 -; CHECK-NEXT: vceqh %v2, %v24, %v28 -; CHECK-NEXT: vx %v1, %v2, %v1 -; CHECK-NEXT: vpkh %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i32> %val3, %val4 - %and = xor <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6 - ret <16 x i8> %sel -} - -define <16 x i32> @fun192(<16 x i16> %val1, <16 x i16> %val2, <16 x i64> %val3, <16 x i64> %val4, <16 x i32> %val5, <16 x i32> %val6) { -; CHECK-LABEL: fun192: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 240(%r15) -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vceqg %v0, %v27, %v0 -; CHECK-NEXT: vceqg %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vx %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 416(%r15) -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 304(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vceqg %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vceqg %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v0, %v2, %v0 -; CHECK-NEXT: vceqh %v2, %v26, %v30 -; CHECK-NEXT: vuphh %v3, %v2 -; CHECK-NEXT: vx %v0, %v3, %v0 -; CHECK-NEXT: vl %v3, 448(%r15) -; CHECK-NEXT: vl %v4, 384(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vceqg %v0, %v31, %v0 -; CHECK-NEXT: vceqg %v3, %v29, %v3 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vpkg %v0, %v3, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vl %v3, 368(%r15) -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v1, %v0 -; CHECK-NEXT: vl %v0, 336(%r15) -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vceqg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 320(%r15) -; CHECK-NEXT: vceqg %v1, %v3, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlg %v1, %v2, %v2 -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 464(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = icmp eq <16 x i64> %val3, %val4 - %and = xor <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i32> %val5, <16 x i32> %val6 - ret <16 x i32> %sel -} - -define <16 x double> @fun193(<16 x i16> %val1, <16 x i16> %val2, <16 x float> %val3, <16 x float> %val4, <16 x double> %val5, <16 x double> %val6) { -; CHECK-LABEL: fun193: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 160(%r15) -; CHECK-NEXT: vmrlf %v1, %v0, %v0 -; CHECK-NEXT: vmrlf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v0, %v0, %v0 -; CHECK-NEXT: vmrhf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vl %v4, 224(%r15) -; CHECK-NEXT: vl %v5, 416(%r15) -; CHECK-NEXT: vl %v6, 288(%r15) -; CHECK-NEXT: vfchdb %v0, %v2, %v0 -; CHECK-NEXT: vpkg %v0, %v0, %v1 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vx %v0, %v2, %v0 -; CHECK-NEXT: vuphf %v2, %v0 -; CHECK-NEXT: vsel %v24, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vmrlf %v3, %v2, %v2 -; CHECK-NEXT: vmrlf %v4, %v27, %v27 -; CHECK-NEXT: vmrhf %v2, %v2, %v2 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v3, %v4, %v3 -; CHECK-NEXT: vmrhf %v4, %v27, %v27 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v2, %v4, %v2 -; CHECK-NEXT: vl %v4, 256(%r15) -; CHECK-NEXT: vpkg %v2, %v2, %v3 -; CHECK-NEXT: vl %v3, 384(%r15) -; CHECK-NEXT: vx %v1, %v1, %v2 -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vsel %v28, %v4, %v3, %v2 -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vmrlf %v3, %v2, %v2 -; CHECK-NEXT: vmrlf %v4, %v29, %v29 -; CHECK-NEXT: vmrhf %v2, %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v3, %v4, %v3 -; CHECK-NEXT: vmrhf %v4, %v29, %v29 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v2, %v4, %v2 -; CHECK-NEXT: vpkg %v2, %v2, %v3 -; CHECK-NEXT: vceqh %v3, %v26, %v30 -; CHECK-NEXT: vuphh %v4, %v3 -; CHECK-NEXT: vx %v2, %v4, %v2 -; CHECK-NEXT: vuphf %v4, %v2 -; CHECK-NEXT: vsel %v25, %v6, %v5, %v4 -; CHECK-NEXT: vl %v4, 208(%r15) -; CHECK-NEXT: vmrlf %v5, %v4, %v4 -; CHECK-NEXT: vmrlf %v6, %v31, %v31 -; CHECK-NEXT: vmrhf %v4, %v4, %v4 -; CHECK-NEXT: vmrlg %v3, %v3, %v3 -; CHECK-NEXT: vuphh %v3, %v3 -; CHECK-NEXT: vldeb %v5, %v5 -; CHECK-NEXT: vldeb %v6, %v6 -; CHECK-NEXT: vfchdb %v5, %v6, %v5 -; CHECK-NEXT: vmrhf %v6, %v31, %v31 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vldeb %v6, %v6 -; CHECK-NEXT: vfchdb %v4, %v6, %v4 -; CHECK-NEXT: vl %v6, 320(%r15) -; CHECK-NEXT: vpkg %v4, %v4, %v5 -; CHECK-NEXT: vl %v5, 448(%r15) -; CHECK-NEXT: vx %v3, %v3, %v4 -; CHECK-NEXT: vuphf %v4, %v3 -; CHECK-NEXT: vsel %v29, %v6, %v5, %v4 -; CHECK-NEXT: vl %v4, 368(%r15) -; CHECK-NEXT: vl %v5, 240(%r15) -; CHECK-NEXT: vsel %v26, %v5, %v4, %v0 -; CHECK-NEXT: vl %v4, 272(%r15) -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 400(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v4, %v1, %v0 -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vmrlg %v0, %v2, %v2 -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v27, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 464(%r15) -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vmrlg %v0, %v3, %v3 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = fcmp ogt <16 x float> %val3, %val4 - %and = xor <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x double> %val5, <16 x double> %val6 - ret <16 x double> %sel -} - -define <16 x i32> @fun194(<16 x i16> %val1, <16 x i16> %val2, <16 x double> %val3, <16 x double> %val4, <16 x i32> %val5, <16 x i32> %val6) { -; CHECK-LABEL: fun194: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 240(%r15) -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vfchdb %v0, %v27, %v0 -; CHECK-NEXT: vfchdb %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vx %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 416(%r15) -; CHECK-NEXT: vl %v3, 352(%r15) -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vl %v0, 304(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vfchdb %v0, %v2, %v0 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v0, %v2, %v0 -; CHECK-NEXT: vceqh %v2, %v26, %v30 -; CHECK-NEXT: vuphh %v3, %v2 -; CHECK-NEXT: vx %v0, %v3, %v0 -; CHECK-NEXT: vl %v3, 448(%r15) -; CHECK-NEXT: vl %v4, 384(%r15) -; CHECK-NEXT: vsel %v28, %v4, %v3, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vfchdb %v0, %v31, %v0 -; CHECK-NEXT: vfchdb %v3, %v29, %v3 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vpkg %v0, %v3, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vl %v3, 368(%r15) -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vsel %v26, %v3, %v1, %v0 -; CHECK-NEXT: vl %v0, 336(%r15) -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 320(%r15) -; CHECK-NEXT: vfchdb %v1, %v3, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlg %v1, %v2, %v2 -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vx %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 464(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp0 = icmp eq <16 x i16> %val1, %val2 - %cmp1 = fcmp ogt <16 x double> %val3, %val4 - %and = xor <16 x i1> %cmp0, %cmp1 - %sel = select <16 x i1> %and, <16 x i32> %val5, <16 x i32> %val6 - ret <16 x i32> %sel -} - Index: test/CodeGen/SystemZ/vec-cmpsel.ll =================================================================== --- test/CodeGen/SystemZ/vec-cmpsel.ll +++ test/CodeGen/SystemZ/vec-cmpsel.ll @@ -1,10 +1,8 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py -; ; Test that vector compare / select combinations do not produce any ; unnecessary pack /unpack / shift instructions. ; ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s - +; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s -check-prefix=CHECK-Z14 define <2 x i8> @fun0(<2 x i8> %val1, <2 x i8> %val2, <2 x i8> %val3, <2 x i8> %val4) { ; CHECK-LABEL: fun0: @@ -29,63 +27,48 @@ ret <2 x i16> %sel } -define <2 x i32> @fun2(<2 x i8> %val1, <2 x i8> %val2, <2 x i32> %val3, <2 x i32> %val4) { +define <16 x i8> @fun2(<16 x i8> %val1, <16 x i8> %val2, <16 x i8> %val3, <16 x i8> %val4) { ; CHECK-LABEL: fun2: ; CHECK: # BB#0: ; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vuphh %v0, %v0 ; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 ; CHECK-NEXT: br %r14 - %cmp = icmp eq <2 x i8> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i32> %val3, <2 x i32> %val4 - ret <2 x i32> %sel + %cmp = icmp eq <16 x i8> %val1, %val2 + %sel = select <16 x i1> %cmp, <16 x i8> %val3, <16 x i8> %val4 + ret <16 x i8> %sel } -define <2 x i64> @fun3(<2 x i8> %val1, <2 x i8> %val2, <2 x i64> %val3, <2 x i64> %val4) { +define <16 x i16> @fun3(<16 x i8> %val1, <16 x i8> %val2, <16 x i16> %val3, <16 x i16> %val4) { ; CHECK-LABEL: fun3: ; CHECK: # BB#0: ; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 +; CHECK-DAG: vuphb [[REG0:%v[0-9]+]], %v0 +; CHECK-DAG: vmrlg [[REG1:%v[0-9]+]], %v0, %v0 +; CHECK-DAG: vuphb [[REG1]], [[REG1]] +; CHECK-NEXT: vsel %v24, %v28, %v25, [[REG0]] +; CHECK-NEXT: vsel %v26, %v30, %v27, [[REG1]] ; CHECK-NEXT: br %r14 - %cmp = icmp eq <2 x i8> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i64> %val3, <2 x i64> %val4 - ret <2 x i64> %sel + %cmp = icmp eq <16 x i8> %val1, %val2 + %sel = select <16 x i1> %cmp, <16 x i16> %val3, <16 x i16> %val4 + ret <16 x i16> %sel } -define <2 x float> @fun4(<2 x i8> %val1, <2 x i8> %val2, <2 x float> %val3, <2 x float> %val4) { +define <32 x i8> @fun4(<32 x i8> %val1, <32 x i8> %val2, <32 x i8> %val3, <32 x i8> %val4) { ; CHECK-LABEL: fun4: ; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 +; CHECK-DAG: vceqb [[REG0:%v[0-9]+]], %v26, %v30 +; CHECK-DAG: vceqb [[REG1:%v[0-9]+]], %v24, %v28 +; CHECK-DAG: vsel %v24, %v25, %v29, [[REG1]] +; CHECK-DAG: vsel %v26, %v27, %v31, [[REG0]] ; CHECK-NEXT: br %r14 - %cmp = icmp eq <2 x i8> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x float> %val3, <2 x float> %val4 - ret <2 x float> %sel + %cmp = icmp eq <32 x i8> %val1, %val2 + %sel = select <32 x i1> %cmp, <32 x i8> %val3, <32 x i8> %val4 + ret <32 x i8> %sel } -define <2 x double> @fun5(<2 x i8> %val1, <2 x i8> %val2, <2 x double> %val3, <2 x double> %val4) { +define <2 x i8> @fun5(<2 x i16> %val1, <2 x i16> %val2, <2 x i8> %val3, <2 x i8> %val4) { ; CHECK-LABEL: fun5: ; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <2 x i8> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 - ret <2 x double> %sel -} - -define <2 x i8> @fun6(<2 x i16> %val1, <2 x i16> %val2, <2 x i8> %val3, <2 x i8> %val4) { -; CHECK-LABEL: fun6: -; CHECK: # BB#0: ; CHECK-NEXT: vceqh %v0, %v24, %v26 ; CHECK-NEXT: vpkh %v0, %v0, %v0 ; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 @@ -95,8 +78,8 @@ ret <2 x i8> %sel } -define <2 x i16> @fun7(<2 x i16> %val1, <2 x i16> %val2, <2 x i16> %val3, <2 x i16> %val4) { -; CHECK-LABEL: fun7: +define <2 x i16> @fun6(<2 x i16> %val1, <2 x i16> %val2, <2 x i16> %val3, <2 x i16> %val4) { +; CHECK-LABEL: fun6: ; CHECK: # BB#0: ; CHECK-NEXT: vceqh %v0, %v24, %v26 ; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 @@ -106,8 +89,8 @@ ret <2 x i16> %sel } -define <2 x i32> @fun8(<2 x i16> %val1, <2 x i16> %val2, <2 x i32> %val3, <2 x i32> %val4) { -; CHECK-LABEL: fun8: +define <2 x i32> @fun7(<2 x i16> %val1, <2 x i16> %val2, <2 x i32> %val3, <2 x i32> %val4) { +; CHECK-LABEL: fun7: ; CHECK: # BB#0: ; CHECK-NEXT: vceqh %v0, %v24, %v26 ; CHECK-NEXT: vuphh %v0, %v0 @@ -118,56 +101,68 @@ ret <2 x i32> %sel } -define <2 x i64> @fun9(<2 x i16> %val1, <2 x i16> %val2, <2 x i64> %val3, <2 x i64> %val4) { +define <8 x i8> @fun8(<8 x i16> %val1, <8 x i16> %val2, <8 x i8> %val3, <8 x i8> %val4) { +; CHECK-LABEL: fun8: +; CHECK: # BB#0: +; CHECK-NEXT: vceqh %v0, %v24, %v26 +; CHECK-NEXT: vpkh %v0, %v0, %v0 +; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 +; CHECK-NEXT: br %r14 + %cmp = icmp eq <8 x i16> %val1, %val2 + %sel = select <8 x i1> %cmp, <8 x i8> %val3, <8 x i8> %val4 + ret <8 x i8> %sel +} + +define <8 x i16> @fun9(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4) { ; CHECK-LABEL: fun9: ; CHECK: # BB#0: ; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 ; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 ; CHECK-NEXT: br %r14 - %cmp = icmp eq <2 x i16> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i64> %val3, <2 x i64> %val4 - ret <2 x i64> %sel + %cmp = icmp eq <8 x i16> %val1, %val2 + %sel = select <8 x i1> %cmp, <8 x i16> %val3, <8 x i16> %val4 + ret <8 x i16> %sel } -define <2 x float> @fun10(<2 x i16> %val1, <2 x i16> %val2, <2 x float> %val3, <2 x float> %val4) { +define <8 x i32> @fun10(<8 x i16> %val1, <8 x i16> %val2, <8 x i32> %val3, <8 x i32> %val4) { ; CHECK-LABEL: fun10: ; CHECK: # BB#0: ; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 +; CHECK-DAG: vuphh [[REG0:%v[0-9]+]], %v0 +; CHECK-DAG: vmrlg [[REG1:%v[0-9]+]], %v0, %v0 +; CHECK-DAG: vuphh [[REG1]], [[REG1]] +; CHECK-NEXT: vsel %v24, %v28, %v25, [[REG0]] +; CHECK-NEXT: vsel %v26, %v30, %v27, [[REG1]] ; CHECK-NEXT: br %r14 - %cmp = icmp eq <2 x i16> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x float> %val3, <2 x float> %val4 - ret <2 x float> %sel + %cmp = icmp eq <8 x i16> %val1, %val2 + %sel = select <8 x i1> %cmp, <8 x i32> %val3, <8 x i32> %val4 + ret <8 x i32> %sel } -define <2 x double> @fun11(<2 x i16> %val1, <2 x i16> %val2, <2 x double> %val3, <2 x double> %val4) { +define <16 x i8> @fun11(<16 x i16> %val1, <16 x i16> %val2, <16 x i8> %val3, <16 x i8> %val4) { ; CHECK-LABEL: fun11: ; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 +; CHECK-NEXT: vceqh %v0, %v26, %v30 +; CHECK-NEXT: vceqh %v1, %v24, %v28 +; CHECK-NEXT: vpkh %v0, %v1, %v0 +; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp = icmp eq <2 x i16> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 - ret <2 x double> %sel + %cmp = icmp eq <16 x i16> %val1, %val2 + %sel = select <16 x i1> %cmp, <16 x i8> %val3, <16 x i8> %val4 + ret <16 x i8> %sel } -define <2 x i8> @fun12(<2 x i32> %val1, <2 x i32> %val2, <2 x i8> %val3, <2 x i8> %val4) { +define <16 x i16> @fun12(<16 x i16> %val1, <16 x i16> %val2, <16 x i16> %val3, <16 x i16> %val4) { ; CHECK-LABEL: fun12: ; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI12_0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vceqf %v0, %v24, %v26 -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 +; CHECK-DAG: vceqh [[REG0:%v[0-9]+]], %v26, %v30 +; CHECK-DAG: vceqh [[REG1:%v[0-9]+]], %v24, %v28 +; CHECK-DAG: vsel %v24, %v25, %v29, [[REG1]] +; CHECK-DAG: vsel %v26, %v27, %v31, [[REG0]] ; CHECK-NEXT: br %r14 - %cmp = icmp eq <2 x i32> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i8> %val3, <2 x i8> %val4 - ret <2 x i8> %sel + %cmp = icmp eq <16 x i16> %val1, %val2 + %sel = select <16 x i1> %cmp, <16 x i16> %val3, <16 x i16> %val4 + ret <16 x i16> %sel } define <2 x i16> @fun13(<2 x i32> %val1, <2 x i32> %val2, <2 x i16> %val3, <2 x i16> %val4) { @@ -205,3174 +200,315 @@ ret <2 x i64> %sel } -define <2 x float> @fun16(<2 x i32> %val1, <2 x i32> %val2, <2 x float> %val3, <2 x float> %val4) { +define <4 x i16> @fun16(<4 x i32> %val1, <4 x i32> %val2, <4 x i16> %val3, <4 x i16> %val4) { ; CHECK-LABEL: fun16: ; CHECK: # BB#0: ; CHECK-NEXT: vceqf %v0, %v24, %v26 +; CHECK-NEXT: vpkf %v0, %v0, %v0 ; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 ; CHECK-NEXT: br %r14 - %cmp = icmp eq <2 x i32> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x float> %val3, <2 x float> %val4 - ret <2 x float> %sel + %cmp = icmp eq <4 x i32> %val1, %val2 + %sel = select <4 x i1> %cmp, <4 x i16> %val3, <4 x i16> %val4 + ret <4 x i16> %sel } -define <2 x double> @fun17(<2 x i32> %val1, <2 x i32> %val2, <2 x double> %val3, <2 x double> %val4) { +define <4 x i32> @fun17(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3, <4 x i32> %val4) { ; CHECK-LABEL: fun17: ; CHECK: # BB#0: ; CHECK-NEXT: vceqf %v0, %v24, %v26 -; CHECK-NEXT: vuphf %v0, %v0 ; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 ; CHECK-NEXT: br %r14 - %cmp = icmp eq <2 x i32> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 - ret <2 x double> %sel + %cmp = icmp eq <4 x i32> %val1, %val2 + %sel = select <4 x i1> %cmp, <4 x i32> %val3, <4 x i32> %val4 + ret <4 x i32> %sel } -define <2 x i8> @fun18(<2 x i64> %val1, <2 x i64> %val2, <2 x i8> %val3, <2 x i8> %val4) { +define <4 x i64> @fun18(<4 x i32> %val1, <4 x i32> %val2, <4 x i64> %val3, <4 x i64> %val4) { ; CHECK-LABEL: fun18: ; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v24, %v26 -; CHECK-NEXT: vrepih %v1, 1807 -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 +; CHECK-NEXT: vceqf %v0, %v24, %v26 +; CHECK-DAG: vuphf [[REG0:%v[0-9]+]], %v0 +; CHECK-DAG: vmrlg [[REG1:%v[0-9]+]], %v0, %v0 +; CHECK-DAG: vuphf [[REG1]], [[REG1]] +; CHECK-NEXT: vsel %v24, %v28, %v25, [[REG0]] +; CHECK-NEXT: vsel %v26, %v30, %v27, [[REG1]] ; CHECK-NEXT: br %r14 - %cmp = icmp eq <2 x i64> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i8> %val3, <2 x i8> %val4 - ret <2 x i8> %sel + %cmp = icmp eq <4 x i32> %val1, %val2 + %sel = select <4 x i1> %cmp, <4 x i64> %val3, <4 x i64> %val4 + ret <4 x i64> %sel } -define <2 x i16> @fun19(<2 x i64> %val1, <2 x i64> %val2, <2 x i16> %val3, <2 x i16> %val4) { +define <8 x i16> @fun19(<8 x i32> %val1, <8 x i32> %val2, <8 x i16> %val3, <8 x i16> %val4) { ; CHECK-LABEL: fun19: ; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI19_0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vceqg %v0, %v24, %v26 -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 +; CHECK-NEXT: vceqf %v0, %v26, %v30 +; CHECK-NEXT: vceqf %v1, %v24, %v28 +; CHECK-NEXT: vpkf %v0, %v1, %v0 +; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp = icmp eq <2 x i64> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i16> %val3, <2 x i16> %val4 - ret <2 x i16> %sel + %cmp = icmp eq <8 x i32> %val1, %val2 + %sel = select <8 x i1> %cmp, <8 x i16> %val3, <8 x i16> %val4 + ret <8 x i16> %sel } -define <2 x i32> @fun20(<2 x i64> %val1, <2 x i64> %val2, <2 x i32> %val3, <2 x i32> %val4) { +define <8 x i32> @fun20(<8 x i32> %val1, <8 x i32> %val2, <8 x i32> %val3, <8 x i32> %val4) { ; CHECK-LABEL: fun20: ; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v24, %v26 -; CHECK-NEXT: vpkg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 +; CHECK-DAG: vceqf [[REG0:%v[0-9]+]], %v26, %v30 +; CHECK-DAG: vceqf [[REG1:%v[0-9]+]], %v24, %v28 +; CHECK-DAG: vsel %v24, %v25, %v29, [[REG1]] +; CHECK-DAG: vsel %v26, %v27, %v31, [[REG0]] ; CHECK-NEXT: br %r14 - %cmp = icmp eq <2 x i64> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i32> %val3, <2 x i32> %val4 - ret <2 x i32> %sel + %cmp = icmp eq <8 x i32> %val1, %val2 + %sel = select <8 x i1> %cmp, <8 x i32> %val3, <8 x i32> %val4 + ret <8 x i32> %sel } -define <2 x i64> @fun21(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3, <2 x i64> %val4) { +define <2 x i32> @fun21(<2 x i64> %val1, <2 x i64> %val2, <2 x i32> %val3, <2 x i32> %val4) { ; CHECK-LABEL: fun21: ; CHECK: # BB#0: ; CHECK-NEXT: vceqg %v0, %v24, %v26 +; CHECK-NEXT: vpkg %v0, %v0, %v0 ; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 ; CHECK-NEXT: br %r14 %cmp = icmp eq <2 x i64> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i64> %val3, <2 x i64> %val4 - ret <2 x i64> %sel + %sel = select <2 x i1> %cmp, <2 x i32> %val3, <2 x i32> %val4 + ret <2 x i32> %sel } -define <2 x float> @fun22(<2 x i64> %val1, <2 x i64> %val2, <2 x float> %val3, <2 x float> %val4) { +define <2 x i64> @fun22(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3, <2 x i64> %val4) { ; CHECK-LABEL: fun22: ; CHECK: # BB#0: ; CHECK-NEXT: vceqg %v0, %v24, %v26 -; CHECK-NEXT: vpkg %v0, %v0, %v0 ; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 ; CHECK-NEXT: br %r14 %cmp = icmp eq <2 x i64> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x float> %val3, <2 x float> %val4 - ret <2 x float> %sel + %sel = select <2 x i1> %cmp, <2 x i64> %val3, <2 x i64> %val4 + ret <2 x i64> %sel } -define <2 x double> @fun23(<2 x i64> %val1, <2 x i64> %val2, <2 x double> %val3, <2 x double> %val4) { +define <4 x i32> @fun23(<4 x i64> %val1, <4 x i64> %val2, <4 x i32> %val3, <4 x i32> %val4) { ; CHECK-LABEL: fun23: ; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v24, %v26 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 +; CHECK-NEXT: vceqg %v0, %v26, %v30 +; CHECK-NEXT: vceqg %v1, %v24, %v28 +; CHECK-NEXT: vpkg %v0, %v1, %v0 +; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp = icmp eq <2 x i64> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 - ret <2 x double> %sel + %cmp = icmp eq <4 x i64> %val1, %val2 + %sel = select <4 x i1> %cmp, <4 x i32> %val3, <4 x i32> %val4 + ret <4 x i32> %sel } -define <4 x i8> @fun24(<4 x i8> %val1, <4 x i8> %val2, <4 x i8> %val3, <4 x i8> %val4) { +define <4 x i64> @fun24(<4 x i64> %val1, <4 x i64> %val2, <4 x i64> %val3, <4 x i64> %val4) { ; CHECK-LABEL: fun24: ; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 +; CHECK-DAG: vceqg [[REG0:%v[0-9]+]], %v26, %v30 +; CHECK-DAG: vceqg [[REG1:%v[0-9]+]], %v24, %v28 +; CHECK-DAG: vsel %v24, %v25, %v29, [[REG1]] +; CHECK-DAG: vsel %v26, %v27, %v31, [[REG0]] ; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i8> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i8> %val3, <4 x i8> %val4 - ret <4 x i8> %sel + %cmp = icmp eq <4 x i64> %val1, %val2 + %sel = select <4 x i1> %cmp, <4 x i64> %val3, <4 x i64> %val4 + ret <4 x i64> %sel } -define <4 x i16> @fun25(<4 x i8> %val1, <4 x i8> %val2, <4 x i16> %val3, <4 x i16> %val4) { +define <2 x float> @fun25(<2 x float> %val1, <2 x float> %val2, <2 x float> %val3, <2 x float> %val4) { ; CHECK-LABEL: fun25: ; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v0, %v0 +; CHECK-NEXT: vmrlf %v0, %v26, %v26 +; CHECK-NEXT: vmrlf %v1, %v24, %v24 +; CHECK-NEXT: vldeb %v0, %v0 +; CHECK-NEXT: vldeb %v1, %v1 +; CHECK-NEXT: vfchdb %v0, %v1, %v0 +; CHECK-NEXT: vmrhf %v1, %v26, %v26 +; CHECK-NEXT: vmrhf %v2, %v24, %v24 +; CHECK-NEXT: vldeb %v1, %v1 +; CHECK-NEXT: vldeb %v2, %v2 +; CHECK-NEXT: vfchdb %v1, %v2, %v1 +; CHECK-NEXT: vpkg %v0, %v1, %v0 ; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 ; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i8> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i16> %val3, <4 x i16> %val4 - ret <4 x i16> %sel + +; CHECK-Z14-LABEL: fun25: +; CHECK-Z14: # BB#0: +; CHECK-Z14-NEXT: vfchsb %v0, %v24, %v26 +; CHECK-Z14-NEXT: vsel %v24, %v28, %v30, %v0 +; CHECK-Z14-NEXT: br %r14 + + %cmp = fcmp ogt <2 x float> %val1, %val2 + %sel = select <2 x i1> %cmp, <2 x float> %val3, <2 x float> %val4 + ret <2 x float> %sel } -define <4 x i32> @fun26(<4 x i8> %val1, <4 x i8> %val2, <4 x i32> %val3, <4 x i32> %val4) { +define <2 x double> @fun26(<2 x float> %val1, <2 x float> %val2, <2 x double> %val3, <2 x double> %val4) { ; CHECK-LABEL: fun26: ; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vuphh %v0, %v0 +; CHECK-NEXT: vmrlf %v0, %v26, %v26 +; CHECK-NEXT: vmrlf %v1, %v24, %v24 +; CHECK-NEXT: vldeb %v0, %v0 +; CHECK-NEXT: vldeb %v1, %v1 +; CHECK-NEXT: vfchdb %v0, %v1, %v0 +; CHECK-NEXT: vmrhf %v1, %v26, %v26 +; CHECK-NEXT: vmrhf %v2, %v24, %v24 +; CHECK-NEXT: vldeb %v1, %v1 +; CHECK-NEXT: vldeb %v2, %v2 +; CHECK-NEXT: vfchdb %v1, %v2, %v1 +; CHECK-NEXT: vpkg %v0, %v1, %v0 +; CHECK-NEXT: vuphf %v0, %v0 ; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 ; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i8> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i32> %val3, <4 x i32> %val4 - ret <4 x i32> %sel + +; CHECK-Z14-LABEL: fun26: +; CHECK-Z14: # BB#0: +; CHECK-Z14-NEXT: vfchsb %v0, %v24, %v26 +; CHECK-Z14-NEXT: vuphf %v0, %v0 +; CHECK-Z14-NEXT: vsel %v24, %v28, %v30, %v0 +; CHECK-Z14-NEXT: br %r14 + + %cmp = fcmp ogt <2 x float> %val1, %val2 + %sel = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 + ret <2 x double> %sel } -define <4 x i64> @fun27(<4 x i8> %val1, <4 x i8> %val2, <4 x i64> %val3, <4 x i64> %val4) { +; Test a widening select of floats. +define <2 x float> @fun27(<2 x i8> %val1, <2 x i8> %val2, <2 x float> %val3, <2 x float> %val4) { ; CHECK-LABEL: fun27: ; CHECK: # BB#0: ; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 ; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vuphh %v1, %v1 ; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v25, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v27, %v0 +; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 ; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i8> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i64> %val3, <4 x i64> %val4 - ret <4 x i64> %sel + + %cmp = icmp eq <2 x i8> %val1, %val2 + %sel = select <2 x i1> %cmp, <2 x float> %val3, <2 x float> %val4 + ret <2 x float> %sel } -define <4 x float> @fun28(<4 x i8> %val1, <4 x i8> %val2, <4 x float> %val3, <4 x float> %val4) { +define <4 x float> @fun28(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4) { ; CHECK-LABEL: fun28: ; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vuphh %v0, %v0 +; CHECK-NEXT: vmrlf %v0, %v26, %v26 +; CHECK-NEXT: vmrlf %v1, %v24, %v24 +; CHECK-NEXT: vldeb %v0, %v0 +; CHECK-NEXT: vldeb %v1, %v1 +; CHECK-NEXT: vfchdb %v0, %v1, %v0 +; CHECK-NEXT: vmrhf %v1, %v26, %v26 +; CHECK-NEXT: vmrhf %v2, %v24, %v24 +; CHECK-NEXT: vldeb %v1, %v1 +; CHECK-NEXT: vldeb %v2, %v2 +; CHECK-NEXT: vfchdb %v1, %v2, %v1 +; CHECK-NEXT: vpkg %v0, %v1, %v0 ; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 ; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i8> %val1, %val2 + +; CHECK-Z14-LABEL: fun28: +; CHECK-Z14: # BB#0: +; CHECK-Z14-NEXT: vfchsb %v0, %v24, %v26 +; CHECK-Z14-NEXT: vsel %v24, %v28, %v30, %v0 +; CHECK-Z14-NEXT: br %r14 + + %cmp = fcmp ogt <4 x float> %val1, %val2 %sel = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 ret <4 x float> %sel } -define <4 x double> @fun29(<4 x i8> %val1, <4 x i8> %val2, <4 x double> %val3, <4 x double> %val4) { +define <4 x double> @fun29(<4 x float> %val1, <4 x float> %val2, <4 x double> %val3, <4 x double> %val4) { ; CHECK-LABEL: fun29: ; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v25, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v27, %v0 +; CHECK-NEXT: vmrlf %v0, %v26, %v26 +; CHECK-NEXT: vmrlf %v1, %v24, %v24 +; CHECK-NEXT: vldeb %v0, %v0 +; CHECK-NEXT: vldeb %v1, %v1 +; CHECK-NEXT: vfchdb %v0, %v1, %v0 +; CHECK-NEXT: vmrhf %v1, %v26, %v26 +; CHECK-NEXT: vmrhf %v2, %v24, %v24 +; CHECK-NEXT: vldeb %v1, %v1 +; CHECK-NEXT: vldeb %v2, %v2 +; CHECK-NEXT: vfchdb %v1, %v2, %v1 +; CHECK-NEXT: vpkg [[REG0:%v[0-9]+]], %v1, %v0 +; CHECK-DAG: vmrlg [[REG1:%v[0-9]+]], [[REG0]], [[REG0]] +; CHECK-DAG: vuphf [[REG1]], [[REG1]] +; CHECK-DAG: vuphf [[REG2:%v[0-9]+]], [[REG0]] +; CHECK-NEXT: vsel %v24, %v28, %v25, [[REG2]] +; CHECK-NEXT: vsel %v26, %v30, %v27, [[REG1]] ; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i8> %val1, %val2 + +; CHECK-Z14-LABEL: fun29: +; CHECK-Z14: # BB#0: +; CHECK-Z14-NEXT: vfchsb %v0, %v24, %v26 +; CHECK-Z14-DAG: vuphf [[REG0:%v[0-9]+]], %v0 +; CHECK-Z14-DAG: vmrlg [[REG1:%v[0-9]+]], %v0, %v0 +; CHECK-Z14-DAG: vuphf [[REG1]], [[REG1]] +; CHECK-Z14-NEXT: vsel %v24, %v28, %v25, [[REG0]] +; CHECK-Z14-NEXT: vsel %v26, %v30, %v27, [[REG1]] +; CHECK-Z14-NEXT: br %r14 + + %cmp = fcmp ogt <4 x float> %val1, %val2 %sel = select <4 x i1> %cmp, <4 x double> %val3, <4 x double> %val4 ret <4 x double> %sel } -define <4 x i8> @fun30(<4 x i16> %val1, <4 x i16> %val2, <4 x i8> %val3, <4 x i8> %val4) { -; CHECK-LABEL: fun30: +define <8 x float> @fun30(<8 x float> %val1, <8 x float> %val2, <8 x float> %val3, <8 x float> %val4) { +; CHECK-Z14-LABEL: fun30: +; CHECK-Z14: # BB#0: +; CHECK-Z14-DAG: vfchsb [[REG0:%v[0-9]+]], %v26, %v30 +; CHECK-Z14-DAG: vfchsb [[REG1:%v[0-9]+]], %v24, %v28 +; CHECK-Z14-DAG: vsel %v24, %v25, %v29, [[REG1]] +; CHECK-Z14-DAG: vsel %v26, %v27, %v31, [[REG0]] +; CHECK-Z14-NEXT: br %r14 + %cmp = fcmp ogt <8 x float> %val1, %val2 + %sel = select <8 x i1> %cmp, <8 x float> %val3, <8 x float> %val4 + ret <8 x float> %sel +} + +define <2 x float> @fun31(<2 x double> %val1, <2 x double> %val2, <2 x float> %val3, <2 x float> %val4) { +; CHECK-LABEL: fun31: ; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vpkh %v0, %v0, %v0 +; CHECK-NEXT: vfchdb %v0, %v24, %v26 +; CHECK-NEXT: vpkg %v0, %v0, %v0 ; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 ; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i16> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i8> %val3, <4 x i8> %val4 - ret <4 x i8> %sel -} -define <4 x i16> @fun31(<4 x i16> %val1, <4 x i16> %val2, <4 x i16> %val3, <4 x i16> %val4) { -; CHECK-LABEL: fun31: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i16> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i16> %val3, <4 x i16> %val4 - ret <4 x i16> %sel + %cmp = fcmp ogt <2 x double> %val1, %val2 + %sel = select <2 x i1> %cmp, <2 x float> %val3, <2 x float> %val4 + ret <2 x float> %sel } -define <4 x i32> @fun32(<4 x i16> %val1, <4 x i16> %val2, <4 x i32> %val3, <4 x i32> %val4) { +define <2 x double> @fun32(<2 x double> %val1, <2 x double> %val2, <2 x double> %val3, <2 x double> %val4) { ; CHECK-LABEL: fun32: ; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vuphh %v0, %v0 +; CHECK-NEXT: vfchdb %v0, %v24, %v26 ; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 ; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i16> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i32> %val3, <4 x i32> %val4 - ret <4 x i32> %sel + %cmp = fcmp ogt <2 x double> %val1, %val2 + %sel = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 + ret <2 x double> %sel } -define <4 x i64> @fun33(<4 x i16> %val1, <4 x i16> %val2, <4 x i64> %val3, <4 x i64> %val4) { +define <4 x float> @fun33(<4 x double> %val1, <4 x double> %val2, <4 x float> %val3, <4 x float> %val4) { ; CHECK-LABEL: fun33: ; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vpkg %v0, %v0, %v0 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v25, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i16> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i64> %val3, <4 x i64> %val4 - ret <4 x i64> %sel -} - -define <4 x float> @fun34(<4 x i16> %val1, <4 x i16> %val2, <4 x float> %val3, <4 x float> %val4) { -; CHECK-LABEL: fun34: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i16> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 - ret <4 x float> %sel -} - -define <4 x double> @fun35(<4 x i16> %val1, <4 x i16> %val2, <4 x double> %val3, <4 x double> %val4) { -; CHECK-LABEL: fun35: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vpkg %v0, %v0, %v0 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v25, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i16> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x double> %val3, <4 x double> %val4 - ret <4 x double> %sel -} - -define <4 x i8> @fun36(<4 x i32> %val1, <4 x i32> %val2, <4 x i8> %val3, <4 x i8> %val4) { -; CHECK-LABEL: fun36: -; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI36_0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vceqf %v0, %v24, %v26 -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i32> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i8> %val3, <4 x i8> %val4 - ret <4 x i8> %sel -} - -define <4 x i16> @fun37(<4 x i32> %val1, <4 x i32> %val2, <4 x i16> %val3, <4 x i16> %val4) { -; CHECK-LABEL: fun37: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v24, %v26 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i32> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i16> %val3, <4 x i16> %val4 - ret <4 x i16> %sel -} - -define <4 x i32> @fun38(<4 x i32> %val1, <4 x i32> %val2, <4 x i32> %val3, <4 x i32> %val4) { -; CHECK-LABEL: fun38: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v24, %v26 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i32> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i32> %val3, <4 x i32> %val4 - ret <4 x i32> %sel -} - -define <4 x i64> @fun39(<4 x i32> %val1, <4 x i32> %val2, <4 x i64> %val3, <4 x i64> %val4) { -; CHECK-LABEL: fun39: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v24, %v26 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v25, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i32> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i64> %val3, <4 x i64> %val4 - ret <4 x i64> %sel -} - -define <4 x float> @fun40(<4 x i32> %val1, <4 x i32> %val2, <4 x float> %val3, <4 x float> %val4) { -; CHECK-LABEL: fun40: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v24, %v26 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i32> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 - ret <4 x float> %sel -} - -define <4 x double> @fun41(<4 x i32> %val1, <4 x i32> %val2, <4 x double> %val3, <4 x double> %val4) { -; CHECK-LABEL: fun41: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v24, %v26 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v25, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i32> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x double> %val3, <4 x double> %val4 - ret <4 x double> %sel -} - -define <4 x i8> @fun42(<4 x i64> %val1, <4 x i64> %val2, <4 x i8> %val3, <4 x i8> %val4) { -; CHECK-LABEL: fun42: -; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI42_0 -; CHECK-NEXT: vl %v2, 0(%r1) -; CHECK-NEXT: vceqg %v0, %v26, %v30 -; CHECK-NEXT: vceqg %v1, %v24, %v28 -; CHECK-NEXT: vperm %v0, %v1, %v0, %v2 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i64> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i8> %val3, <4 x i8> %val4 - ret <4 x i8> %sel -} - -define <4 x i16> @fun43(<4 x i64> %val1, <4 x i64> %val2, <4 x i16> %val3, <4 x i16> %val4) { -; CHECK-LABEL: fun43: -; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI43_0 -; CHECK-NEXT: vl %v2, 0(%r1) -; CHECK-NEXT: vceqg %v0, %v26, %v30 -; CHECK-NEXT: vceqg %v1, %v24, %v28 -; CHECK-NEXT: vperm %v0, %v1, %v0, %v2 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i64> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i16> %val3, <4 x i16> %val4 - ret <4 x i16> %sel -} - -define <4 x i32> @fun44(<4 x i64> %val1, <4 x i64> %val2, <4 x i32> %val3, <4 x i32> %val4) { -; CHECK-LABEL: fun44: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v26, %v30 -; CHECK-NEXT: vceqg %v1, %v24, %v28 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i64> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i32> %val3, <4 x i32> %val4 - ret <4 x i32> %sel -} - -define <4 x i64> @fun45(<4 x i64> %val1, <4 x i64> %val2, <4 x i64> %val3, <4 x i64> %val4) { -; CHECK-LABEL: fun45: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v24, %v28 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v0 -; CHECK-NEXT: vceqg %v0, %v26, %v30 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i64> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i64> %val3, <4 x i64> %val4 - ret <4 x i64> %sel -} - -define <4 x float> @fun46(<4 x i64> %val1, <4 x i64> %val2, <4 x float> %val3, <4 x float> %val4) { -; CHECK-LABEL: fun46: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v26, %v30 -; CHECK-NEXT: vceqg %v1, %v24, %v28 +; CHECK-NEXT: vfchdb %v0, %v26, %v30 +; CHECK-NEXT: vfchdb %v1, %v24, %v28 ; CHECK-NEXT: vpkg %v0, %v1, %v0 ; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 ; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i64> %val1, %val2 + %cmp = fcmp ogt <4 x double> %val1, %val2 %sel = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 ret <4 x float> %sel } -define <4 x double> @fun47(<4 x i64> %val1, <4 x i64> %val2, <4 x double> %val3, <4 x double> %val4) { -; CHECK-LABEL: fun47: +define <4 x double> @fun34(<4 x double> %val1, <4 x double> %val2, <4 x double> %val3, <4 x double> %val4) { +; CHECK-LABEL: fun34: ; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v24, %v28 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v0 -; CHECK-NEXT: vceqg %v0, %v26, %v30 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 +; CHECK-DAG: vfchdb [[REG0:%v[0-9]+]], %v26, %v30 +; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v24, %v28 +; CHECK-DAG: vsel %v24, %v25, %v29, [[REG1]] +; CHECK-DAG: vsel %v26, %v27, %v31, [[REG0]] ; CHECK-NEXT: br %r14 - %cmp = icmp eq <4 x i64> %val1, %val2 + %cmp = fcmp ogt <4 x double> %val1, %val2 %sel = select <4 x i1> %cmp, <4 x double> %val3, <4 x double> %val4 ret <4 x double> %sel } - -define <8 x i8> @fun48(<8 x i8> %val1, <8 x i8> %val2, <8 x i8> %val3, <8 x i8> %val4) { -; CHECK-LABEL: fun48: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i8> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i8> %val3, <8 x i8> %val4 - ret <8 x i8> %sel -} - -define <8 x i16> @fun49(<8 x i8> %val1, <8 x i8> %val2, <8 x i16> %val3, <8 x i16> %val4) { -; CHECK-LABEL: fun49: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i8> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i16> %val3, <8 x i16> %val4 - ret <8 x i16> %sel -} - -define <8 x i32> @fun50(<8 x i8> %val1, <8 x i8> %val2, <8 x i32> %val3, <8 x i32> %val4) { -; CHECK-LABEL: fun50: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v0 -; CHECK-NEXT: vpkg %v0, %v0, %v0 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v25, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i8> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i32> %val3, <8 x i32> %val4 - ret <8 x i32> %sel -} - -define <8 x i64> @fun51(<8 x i8> %val1, <8 x i8> %val2, <8 x i64> %val3, <8 x i64> %val4) { -; CHECK-LABEL: fun51: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v29, %v1 -; CHECK-NEXT: vpkf %v1, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v31, %v1 -; CHECK-NEXT: vpkg %v1, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 6 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v28, %v25, %v2, %v1 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v27, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i8> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i64> %val3, <8 x i64> %val4 - ret <8 x i64> %sel -} - -define <8 x float> @fun52(<8 x i8> %val1, <8 x i8> %val2, <8 x float> %val3, <8 x float> %val4) { -; CHECK-LABEL: fun52: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v0 -; CHECK-NEXT: vpkg %v0, %v0, %v0 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v25, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i8> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x float> %val3, <8 x float> %val4 - ret <8 x float> %sel -} - -define <8 x double> @fun53(<8 x i8> %val1, <8 x i8> %val2, <8 x double> %val3, <8 x double> %val4) { -; CHECK-LABEL: fun53: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v29, %v1 -; CHECK-NEXT: vpkf %v1, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v31, %v1 -; CHECK-NEXT: vpkg %v1, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 6 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v28, %v25, %v2, %v1 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v27, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i8> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x double> %val3, <8 x double> %val4 - ret <8 x double> %sel -} - -define <8 x i8> @fun54(<8 x i16> %val1, <8 x i16> %val2, <8 x i8> %val3, <8 x i8> %val4) { -; CHECK-LABEL: fun54: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vpkh %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i16> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i8> %val3, <8 x i8> %val4 - ret <8 x i8> %sel -} - -define <8 x i16> @fun55(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4) { -; CHECK-LABEL: fun55: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i16> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i16> %val3, <8 x i16> %val4 - ret <8 x i16> %sel -} - -define <8 x i32> @fun56(<8 x i16> %val1, <8 x i16> %val2, <8 x i32> %val3, <8 x i32> %val4) { -; CHECK-LABEL: fun56: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v25, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i16> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i32> %val3, <8 x i32> %val4 - ret <8 x i32> %sel -} - -define <8 x i64> @fun57(<8 x i16> %val1, <8 x i16> %val2, <8 x i64> %val3, <8 x i64> %val4) { -; CHECK-LABEL: fun57: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v29, %v1 -; CHECK-NEXT: vpkg %v1, %v0, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v31, %v1 -; CHECK-NEXT: vmrlg %v1, %v0, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 12 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v28, %v25, %v2, %v1 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v27, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i16> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i64> %val3, <8 x i64> %val4 - ret <8 x i64> %sel -} - -define <8 x float> @fun58(<8 x i16> %val1, <8 x i16> %val2, <8 x float> %val3, <8 x float> %val4) { -; CHECK-LABEL: fun58: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v25, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i16> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x float> %val3, <8 x float> %val4 - ret <8 x float> %sel -} - -define <8 x double> @fun59(<8 x i16> %val1, <8 x i16> %val2, <8 x double> %val3, <8 x double> %val4) { -; CHECK-LABEL: fun59: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v26 -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v29, %v1 -; CHECK-NEXT: vpkg %v1, %v0, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v31, %v1 -; CHECK-NEXT: vmrlg %v1, %v0, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 12 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v28, %v25, %v2, %v1 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v27, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i16> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x double> %val3, <8 x double> %val4 - ret <8 x double> %sel -} - -define <8 x i8> @fun60(<8 x i32> %val1, <8 x i32> %val2, <8 x i8> %val3, <8 x i8> %val4) { -; CHECK-LABEL: fun60: -; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI60_0 -; CHECK-NEXT: vl %v2, 0(%r1) -; CHECK-NEXT: vceqf %v0, %v26, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v28 -; CHECK-NEXT: vperm %v0, %v1, %v0, %v2 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i32> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i8> %val3, <8 x i8> %val4 - ret <8 x i8> %sel -} - -define <8 x i16> @fun61(<8 x i32> %val1, <8 x i32> %val2, <8 x i16> %val3, <8 x i16> %val4) { -; CHECK-LABEL: fun61: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v26, %v30 -; CHECK-NEXT: vceqf %v1, %v24, %v28 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i32> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i16> %val3, <8 x i16> %val4 - ret <8 x i16> %sel -} - -define <8 x i32> @fun62(<8 x i32> %val1, <8 x i32> %val2, <8 x i32> %val3, <8 x i32> %val4) { -; CHECK-LABEL: fun62: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v24, %v28 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v0 -; CHECK-NEXT: vceqf %v0, %v26, %v30 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i32> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i32> %val3, <8 x i32> %val4 - ret <8 x i32> %sel -} - -define <8 x i64> @fun63(<8 x i32> %val1, <8 x i32> %val2, <8 x i64> %val3, <8 x i64> %val4) { -; CHECK-LABEL: fun63: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v24, %v28 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v2, %v1 -; CHECK-NEXT: vceqf %v1, %v26, %v30 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v28, %v29, %v3, %v2 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v26, %v27, %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v31, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i32> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i64> %val3, <8 x i64> %val4 - ret <8 x i64> %sel -} - -define <8 x float> @fun64(<8 x i32> %val1, <8 x i32> %val2, <8 x float> %val3, <8 x float> %val4) { -; CHECK-LABEL: fun64: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v24, %v28 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v0 -; CHECK-NEXT: vceqf %v0, %v26, %v30 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i32> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x float> %val3, <8 x float> %val4 - ret <8 x float> %sel -} - -define <8 x double> @fun65(<8 x i32> %val1, <8 x i32> %val2, <8 x double> %val3, <8 x double> %val4) { -; CHECK-LABEL: fun65: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v24, %v28 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v2, %v1 -; CHECK-NEXT: vceqf %v1, %v26, %v30 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v28, %v29, %v3, %v2 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v26, %v27, %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v31, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i32> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x double> %val3, <8 x double> %val4 - ret <8 x double> %sel -} - -define <8 x i8> @fun66(<8 x i64> %val1, <8 x i64> %val2, <8 x i8> %val3, <8 x i8> %val4) { -; CHECK-LABEL: fun66: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v30, %v31 -; CHECK-NEXT: vceqg %v1, %v28, %v29 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqg %v1, %v26, %v27 -; CHECK-NEXT: vceqg %v2, %v24, %v25 -; CHECK-NEXT: larl %r1, .LCPI66_0 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 0(%r1) -; CHECK-NEXT: vperm %v0, %v1, %v0, %v2 -; CHECK-NEXT: vlrepg %v1, 168(%r15) -; CHECK-NEXT: vlrepg %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i64> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i8> %val3, <8 x i8> %val4 - ret <8 x i8> %sel -} - -define <8 x i16> @fun67(<8 x i64> %val1, <8 x i64> %val2, <8 x i16> %val3, <8 x i16> %val4) { -; CHECK-LABEL: fun67: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v30, %v31 -; CHECK-NEXT: vceqg %v1, %v28, %v29 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vceqg %v1, %v26, %v27 -; CHECK-NEXT: vceqg %v2, %v24, %v25 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i64> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i16> %val3, <8 x i16> %val4 - ret <8 x i16> %sel -} - -define <8 x i32> @fun68(<8 x i64> %val1, <8 x i64> %val2, <8 x i32> %val3, <8 x i32> %val4) { -; CHECK-LABEL: fun68: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v26, %v27 -; CHECK-NEXT: vceqg %v1, %v24, %v25 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vceqg %v0, %v30, %v31 -; CHECK-NEXT: vceqg %v1, %v28, %v29 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i64> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i32> %val3, <8 x i32> %val4 - ret <8 x i32> %sel -} - -define <8 x i64> @fun69(<8 x i64> %val1, <8 x i64> %val2, <8 x i64> %val3, <8 x i64> %val4) { -; CHECK-LABEL: fun69: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vceqg %v0, %v24, %v25 -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vceqg %v0, %v26, %v27 -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vceqg %v0, %v28, %v29 -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vceqg %v0, %v30, %v31 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i64> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i64> %val3, <8 x i64> %val4 - ret <8 x i64> %sel -} - -define <8 x float> @fun70(<8 x i64> %val1, <8 x i64> %val2, <8 x float> %val3, <8 x float> %val4) { -; CHECK-LABEL: fun70: -; CHECK: # BB#0: -; CHECK-NEXT: vceqg %v0, %v26, %v27 -; CHECK-NEXT: vceqg %v1, %v24, %v25 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vceqg %v0, %v30, %v31 -; CHECK-NEXT: vceqg %v1, %v28, %v29 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i64> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x float> %val3, <8 x float> %val4 - ret <8 x float> %sel -} - -define <8 x double> @fun71(<8 x i64> %val1, <8 x i64> %val2, <8 x double> %val3, <8 x double> %val4) { -; CHECK-LABEL: fun71: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vceqg %v0, %v24, %v25 -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vceqg %v0, %v26, %v27 -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vceqg %v0, %v28, %v29 -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vceqg %v0, %v30, %v31 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <8 x i64> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x double> %val3, <8 x double> %val4 - ret <8 x double> %sel -} - -define <16 x i8> @fun72(<16 x i8> %val1, <16 x i8> %val2, <16 x i8> %val3, <16 x i8> %val4) { -; CHECK-LABEL: fun72: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i8> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i8> %val3, <16 x i8> %val4 - ret <16 x i8> %sel -} - -define <16 x i16> @fun73(<16 x i8> %val1, <16 x i8> %val2, <16 x i16> %val3, <16 x i16> %val4) { -; CHECK-LABEL: fun73: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v25, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i8> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i16> %val3, <16 x i16> %val4 - ret <16 x i16> %sel -} - -define <16 x i32> @fun74(<16 x i8> %val1, <16 x i8> %val2, <16 x i32> %val3, <16 x i32> %val4) { -; CHECK-LABEL: fun74: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v29, %v1 -; CHECK-NEXT: vpkg %v1, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v31, %v1 -; CHECK-NEXT: vmrlg %v1, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 12 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vsel %v28, %v25, %v2, %v1 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v30, %v27, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i8> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i32> %val3, <16 x i32> %val4 - ret <16 x i32> %sel -} - -define <16 x i64> @fun75(<16 x i8> %val1, <16 x i8> %val2, <16 x i64> %val3, <16 x i64> %val4) { -; CHECK-LABEL: fun75: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v2, %v1 -; CHECK-NEXT: vpkf %v1, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v2, %v1 -; CHECK-NEXT: vpkg %v1, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vsel %v28, %v25, %v2, %v1 -; CHECK-NEXT: vl %v2, 240(%r15) -; CHECK-NEXT: vsldb %v1, %v0, %v0, 6 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v30, %v27, %v2, %v1 -; CHECK-NEXT: vl %v2, 256(%r15) -; CHECK-NEXT: vmrlg %v1, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v25, %v29, %v2, %v1 -; CHECK-NEXT: vl %v2, 272(%r15) -; CHECK-NEXT: vsldb %v1, %v0, %v0, 10 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v27, %v31, %v2, %v1 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vsldb %v1, %v0, %v0, 12 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 14 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v29, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 304(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i8> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i64> %val3, <16 x i64> %val4 - ret <16 x i64> %sel -} - -define <16 x float> @fun76(<16 x i8> %val1, <16 x i8> %val2, <16 x float> %val3, <16 x float> %val4) { -; CHECK-LABEL: fun76: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v29, %v1 -; CHECK-NEXT: vpkg %v1, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v31, %v1 -; CHECK-NEXT: vmrlg %v1, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 12 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vsel %v28, %v25, %v2, %v1 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v30, %v27, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i8> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x float> %val3, <16 x float> %val4 - ret <16 x float> %sel -} - -define <16 x double> @fun77(<16 x i8> %val1, <16 x i8> %val2, <16 x double> %val3, <16 x double> %val4) { -; CHECK-LABEL: fun77: -; CHECK: # BB#0: -; CHECK-NEXT: vceqb %v0, %v24, %v26 -; CHECK-NEXT: vuphb %v1, %v0 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v2, %v1 -; CHECK-NEXT: vpkf %v1, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v2, %v1 -; CHECK-NEXT: vpkg %v1, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vsel %v28, %v25, %v2, %v1 -; CHECK-NEXT: vl %v2, 240(%r15) -; CHECK-NEXT: vsldb %v1, %v0, %v0, 6 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v30, %v27, %v2, %v1 -; CHECK-NEXT: vl %v2, 256(%r15) -; CHECK-NEXT: vmrlg %v1, %v0, %v0 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v25, %v29, %v2, %v1 -; CHECK-NEXT: vl %v2, 272(%r15) -; CHECK-NEXT: vsldb %v1, %v0, %v0, 10 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v27, %v31, %v2, %v1 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vsldb %v1, %v0, %v0, 12 -; CHECK-NEXT: vuphb %v1, %v1 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 14 -; CHECK-NEXT: vuphh %v1, %v1 -; CHECK-NEXT: vuphb %v0, %v0 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v29, %v3, %v2, %v1 -; CHECK-NEXT: vl %v1, 304(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i8> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x double> %val3, <16 x double> %val4 - ret <16 x double> %sel -} - -define <16 x i8> @fun78(<16 x i16> %val1, <16 x i16> %val2, <16 x i8> %val3, <16 x i8> %val4) { -; CHECK-LABEL: fun78: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v26, %v30 -; CHECK-NEXT: vceqh %v1, %v24, %v28 -; CHECK-NEXT: vpkh %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i16> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i8> %val3, <16 x i8> %val4 - ret <16 x i8> %sel -} - -define <16 x i16> @fun79(<16 x i16> %val1, <16 x i16> %val2, <16 x i16> %val3, <16 x i16> %val4) { -; CHECK-LABEL: fun79: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v28 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v0 -; CHECK-NEXT: vceqh %v0, %v26, %v30 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i16> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i16> %val3, <16 x i16> %val4 - ret <16 x i16> %sel -} - -define <16 x i32> @fun80(<16 x i16> %val1, <16 x i16> %val2, <16 x i32> %val3, <16 x i32> %val4) { -; CHECK-LABEL: fun80: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v28 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v2, %v1 -; CHECK-NEXT: vceqh %v1, %v26, %v30 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v28, %v29, %v3, %v2 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v26, %v27, %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v30, %v31, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i16> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i32> %val3, <16 x i32> %val4 - ret <16 x i32> %sel -} - -define <16 x i64> @fun81(<16 x i16> %val1, <16 x i16> %val2, <16 x i64> %val3, <16 x i64> %val4) { -; CHECK-LABEL: fun81: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v28 -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v2, %v1 -; CHECK-NEXT: vceqh %v1, %v26, %v30 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vl %v3, 288(%r15) -; CHECK-NEXT: vl %v4, 160(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v25, %v4, %v3, %v2 -; CHECK-NEXT: vpkg %v2, %v0, %v0 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v26, %v27, %v3, %v2 -; CHECK-NEXT: vmrlg %v2, %v0, %v0 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 12 -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v28, %v29, %v3, %v2 -; CHECK-NEXT: vl %v2, 272(%r15) -; CHECK-NEXT: vl %v3, 176(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v31, %v2, %v0 -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v1 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v27, %v3, %v2, %v0 -; CHECK-NEXT: vl %v2, 320(%r15) -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v29, %v3, %v2, %v0 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vsldb %v0, %v1, %v1, 12 -; CHECK-NEXT: vl %v1, 336(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i16> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i64> %val3, <16 x i64> %val4 - ret <16 x i64> %sel -} - -define <16 x float> @fun82(<16 x i16> %val1, <16 x i16> %val2, <16 x float> %val3, <16 x float> %val4) { -; CHECK-LABEL: fun82: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v28 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v2, %v1 -; CHECK-NEXT: vceqh %v1, %v26, %v30 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v28, %v29, %v3, %v2 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v26, %v27, %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v30, %v31, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i16> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x float> %val3, <16 x float> %val4 - ret <16 x float> %sel -} - -define <16 x double> @fun83(<16 x i16> %val1, <16 x i16> %val2, <16 x double> %val3, <16 x double> %val4) { -; CHECK-LABEL: fun83: -; CHECK: # BB#0: -; CHECK-NEXT: vceqh %v0, %v24, %v28 -; CHECK-NEXT: vuphh %v1, %v0 -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v24, %v25, %v2, %v1 -; CHECK-NEXT: vceqh %v1, %v26, %v30 -; CHECK-NEXT: vuphh %v2, %v1 -; CHECK-NEXT: vl %v3, 288(%r15) -; CHECK-NEXT: vl %v4, 160(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v25, %v4, %v3, %v2 -; CHECK-NEXT: vpkg %v2, %v0, %v0 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vsel %v26, %v27, %v3, %v2 -; CHECK-NEXT: vmrlg %v2, %v0, %v0 -; CHECK-NEXT: vuphh %v2, %v2 -; CHECK-NEXT: vsldb %v0, %v0, %v0, 12 -; CHECK-NEXT: vl %v3, 256(%r15) -; CHECK-NEXT: vuphf %v2, %v2 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vsel %v28, %v29, %v3, %v2 -; CHECK-NEXT: vl %v2, 272(%r15) -; CHECK-NEXT: vl %v3, 176(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v31, %v2, %v0 -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v1 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v27, %v3, %v2, %v0 -; CHECK-NEXT: vl %v2, 320(%r15) -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v29, %v3, %v2, %v0 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vsldb %v0, %v1, %v1, 12 -; CHECK-NEXT: vl %v1, 336(%r15) -; CHECK-NEXT: vuphh %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i16> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x double> %val3, <16 x double> %val4 - ret <16 x double> %sel -} - -define <16 x i8> @fun84(<16 x i32> %val1, <16 x i32> %val2, <16 x i8> %val3, <16 x i8> %val4) { -; CHECK-LABEL: fun84: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v30, %v31 -; CHECK-NEXT: vceqf %v1, %v28, %v29 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vceqf %v1, %v26, %v27 -; CHECK-NEXT: vceqf %v2, %v24, %v25 -; CHECK-NEXT: vpkf %v1, %v2, %v1 -; CHECK-NEXT: vpkh %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i32> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i8> %val3, <16 x i8> %val4 - ret <16 x i8> %sel -} - -define <16 x i16> @fun85(<16 x i32> %val1, <16 x i32> %val2, <16 x i16> %val3, <16 x i16> %val4) { -; CHECK-LABEL: fun85: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v0, %v26, %v27 -; CHECK-NEXT: vceqf %v1, %v24, %v25 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vceqf %v0, %v30, %v31 -; CHECK-NEXT: vceqf %v1, %v28, %v29 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i32> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i16> %val3, <16 x i16> %val4 - ret <16 x i16> %sel -} - -define <16 x i32> @fun86(<16 x i32> %val1, <16 x i32> %val2, <16 x i32> %val3, <16 x i32> %val4) { -; CHECK-LABEL: fun86: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vceqf %v0, %v24, %v25 -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vceqf %v0, %v26, %v27 -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vceqf %v0, %v28, %v29 -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vceqf %v0, %v30, %v31 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i32> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i32> %val3, <16 x i32> %val4 - ret <16 x i32> %sel -} - -define <16 x i64> @fun87(<16 x i32> %val1, <16 x i32> %val2, <16 x i64> %val3, <16 x i64> %val4) { -; CHECK-LABEL: fun87: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v1, %v24, %v25 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vuphf %v0, %v1 -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vceqf %v2, %v26, %v27 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vuphf %v0, %v2 -; CHECK-NEXT: vsel %v0, %v4, %v3, %v0 -; CHECK-NEXT: vceqf %v3, %v28, %v29 -; CHECK-NEXT: vl %v5, 352(%r15) -; CHECK-NEXT: vl %v6, 224(%r15) -; CHECK-NEXT: vuphf %v4, %v3 -; CHECK-NEXT: vsel %v25, %v6, %v5, %v4 -; CHECK-NEXT: vceqf %v4, %v30, %v31 -; CHECK-NEXT: vl %v6, 384(%r15) -; CHECK-NEXT: vl %v7, 256(%r15) -; CHECK-NEXT: vuphf %v5, %v4 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vsel %v29, %v7, %v6, %v5 -; CHECK-NEXT: vl %v5, 304(%r15) -; CHECK-NEXT: vl %v6, 176(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v26, %v6, %v5, %v1 -; CHECK-NEXT: vmrlg %v1, %v2, %v2 -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vl %v5, 208(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v30, %v5, %v2, %v1 -; CHECK-NEXT: vmrlg %v1, %v3, %v3 -; CHECK-NEXT: vl %v2, 368(%r15) -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vlr %v28, %v0 -; CHECK-NEXT: vsel %v27, %v3, %v2, %v1 -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vl %v3, 272(%r15) -; CHECK-NEXT: vmrlg %v1, %v4, %v4 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v31, %v3, %v2, %v1 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i32> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i64> %val3, <16 x i64> %val4 - ret <16 x i64> %sel -} - -define <16 x float> @fun88(<16 x i32> %val1, <16 x i32> %val2, <16 x float> %val3, <16 x float> %val4) { -; CHECK-LABEL: fun88: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vceqf %v0, %v24, %v25 -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vceqf %v0, %v26, %v27 -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vceqf %v0, %v28, %v29 -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vceqf %v0, %v30, %v31 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i32> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x float> %val3, <16 x float> %val4 - ret <16 x float> %sel -} - -define <16 x double> @fun89(<16 x i32> %val1, <16 x i32> %val2, <16 x double> %val3, <16 x double> %val4) { -; CHECK-LABEL: fun89: -; CHECK: # BB#0: -; CHECK-NEXT: vceqf %v1, %v24, %v25 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vuphf %v0, %v1 -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vceqf %v2, %v26, %v27 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vuphf %v0, %v2 -; CHECK-NEXT: vsel %v0, %v4, %v3, %v0 -; CHECK-NEXT: vceqf %v3, %v28, %v29 -; CHECK-NEXT: vl %v5, 352(%r15) -; CHECK-NEXT: vl %v6, 224(%r15) -; CHECK-NEXT: vuphf %v4, %v3 -; CHECK-NEXT: vsel %v25, %v6, %v5, %v4 -; CHECK-NEXT: vceqf %v4, %v30, %v31 -; CHECK-NEXT: vl %v6, 384(%r15) -; CHECK-NEXT: vl %v7, 256(%r15) -; CHECK-NEXT: vuphf %v5, %v4 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vsel %v29, %v7, %v6, %v5 -; CHECK-NEXT: vl %v5, 304(%r15) -; CHECK-NEXT: vl %v6, 176(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v26, %v6, %v5, %v1 -; CHECK-NEXT: vmrlg %v1, %v2, %v2 -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vl %v5, 208(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v30, %v5, %v2, %v1 -; CHECK-NEXT: vmrlg %v1, %v3, %v3 -; CHECK-NEXT: vl %v2, 368(%r15) -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vlr %v28, %v0 -; CHECK-NEXT: vsel %v27, %v3, %v2, %v1 -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vl %v3, 272(%r15) -; CHECK-NEXT: vmrlg %v1, %v4, %v4 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v31, %v3, %v2, %v1 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i32> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x double> %val3, <16 x double> %val4 - ret <16 x double> %sel -} - -define <16 x i8> @fun90(<16 x i64> %val1, <16 x i64> %val2, <16 x i8> %val3, <16 x i8> %val4) { -; CHECK-LABEL: fun90: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vceqg %v0, %v31, %v0 -; CHECK-NEXT: vceqg %v1, %v29, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vceqg %v1, %v27, %v1 -; CHECK-NEXT: vceqg %v2, %v25, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vceqg %v1, %v30, %v1 -; CHECK-NEXT: vceqg %v2, %v28, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vceqg %v2, %v26, %v2 -; CHECK-NEXT: vceqg %v3, %v24, %v3 -; CHECK-NEXT: vpkg %v2, %v3, %v2 -; CHECK-NEXT: vpkf %v1, %v2, %v1 -; CHECK-NEXT: vpkh %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 304(%r15) -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i64> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i8> %val3, <16 x i8> %val4 - ret <16 x i8> %sel -} - -define <16 x i16> @fun91(<16 x i64> %val1, <16 x i64> %val2, <16 x i16> %val3, <16 x i16> %val4) { -; CHECK-LABEL: fun91: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vceqg %v0, %v30, %v0 -; CHECK-NEXT: vceqg %v1, %v28, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vceqg %v1, %v26, %v1 -; CHECK-NEXT: vceqg %v2, %v24, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 320(%r15) -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vceqg %v0, %v31, %v0 -; CHECK-NEXT: vceqg %v1, %v29, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vceqg %v1, %v27, %v1 -; CHECK-NEXT: vceqg %v2, %v25, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 336(%r15) -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i64> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i16> %val3, <16 x i16> %val4 - ret <16 x i16> %sel -} - -define <16 x i32> @fun92(<16 x i64> %val1, <16 x i64> %val2, <16 x i32> %val3, <16 x i32> %val4) { -; CHECK-LABEL: fun92: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v1, 160(%r15) -; CHECK-NEXT: vceqg %v0, %v26, %v0 -; CHECK-NEXT: vceqg %v1, %v24, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 352(%r15) -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vceqg %v0, %v30, %v0 -; CHECK-NEXT: vceqg %v1, %v28, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 368(%r15) -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 240(%r15) -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vceqg %v0, %v27, %v0 -; CHECK-NEXT: vceqg %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 384(%r15) -; CHECK-NEXT: vl %v2, 320(%r15) -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vceqg %v0, %v31, %v0 -; CHECK-NEXT: vceqg %v1, %v29, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 400(%r15) -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i64> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i32> %val3, <16 x i32> %val4 - ret <16 x i32> %sel -} - -define <16 x i64> @fun93(<16 x i64> %val1, <16 x i64> %val2, <16 x i64> %val3, <16 x i64> %val4) { -; CHECK-LABEL: fun93: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 160(%r15) -; CHECK-NEXT: vl %v1, 416(%r15) -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vceqg %v0, %v24, %v0 -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vceqg %v0, %v26, %v0 -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 192(%r15) -; CHECK-NEXT: vl %v1, 448(%r15) -; CHECK-NEXT: vl %v2, 320(%r15) -; CHECK-NEXT: vceqg %v0, %v28, %v0 -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 464(%r15) -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vceqg %v0, %v30, %v0 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 224(%r15) -; CHECK-NEXT: vl %v1, 480(%r15) -; CHECK-NEXT: vl %v2, 352(%r15) -; CHECK-NEXT: vceqg %v0, %v25, %v0 -; CHECK-NEXT: vsel %v25, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 240(%r15) -; CHECK-NEXT: vl %v1, 496(%r15) -; CHECK-NEXT: vl %v2, 368(%r15) -; CHECK-NEXT: vceqg %v0, %v27, %v0 -; CHECK-NEXT: vsel %v27, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 256(%r15) -; CHECK-NEXT: vceqg %v0, %v29, %v0 -; CHECK-NEXT: vl %v1, 512(%r15) -; CHECK-NEXT: vl %v2, 384(%r15) -; CHECK-NEXT: vsel %v29, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vceqg %v0, %v31, %v0 -; CHECK-NEXT: vl %v1, 528(%r15) -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i64> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i64> %val3, <16 x i64> %val4 - ret <16 x i64> %sel -} - -define <16 x float> @fun94(<16 x i64> %val1, <16 x i64> %val2, <16 x float> %val3, <16 x float> %val4) { -; CHECK-LABEL: fun94: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v1, 160(%r15) -; CHECK-NEXT: vceqg %v0, %v26, %v0 -; CHECK-NEXT: vceqg %v1, %v24, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 352(%r15) -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vceqg %v0, %v30, %v0 -; CHECK-NEXT: vceqg %v1, %v28, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 368(%r15) -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 240(%r15) -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vceqg %v0, %v27, %v0 -; CHECK-NEXT: vceqg %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 384(%r15) -; CHECK-NEXT: vl %v2, 320(%r15) -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vceqg %v0, %v31, %v0 -; CHECK-NEXT: vceqg %v1, %v29, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 400(%r15) -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i64> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x float> %val3, <16 x float> %val4 - ret <16 x float> %sel -} - -define <16 x double> @fun95(<16 x i64> %val1, <16 x i64> %val2, <16 x double> %val3, <16 x double> %val4) { -; CHECK-LABEL: fun95: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 160(%r15) -; CHECK-NEXT: vl %v1, 416(%r15) -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vceqg %v0, %v24, %v0 -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vceqg %v0, %v26, %v0 -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 192(%r15) -; CHECK-NEXT: vl %v1, 448(%r15) -; CHECK-NEXT: vl %v2, 320(%r15) -; CHECK-NEXT: vceqg %v0, %v28, %v0 -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 464(%r15) -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vceqg %v0, %v30, %v0 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 224(%r15) -; CHECK-NEXT: vl %v1, 480(%r15) -; CHECK-NEXT: vl %v2, 352(%r15) -; CHECK-NEXT: vceqg %v0, %v25, %v0 -; CHECK-NEXT: vsel %v25, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 240(%r15) -; CHECK-NEXT: vl %v1, 496(%r15) -; CHECK-NEXT: vl %v2, 368(%r15) -; CHECK-NEXT: vceqg %v0, %v27, %v0 -; CHECK-NEXT: vsel %v27, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 256(%r15) -; CHECK-NEXT: vceqg %v0, %v29, %v0 -; CHECK-NEXT: vl %v1, 512(%r15) -; CHECK-NEXT: vl %v2, 384(%r15) -; CHECK-NEXT: vsel %v29, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vceqg %v0, %v31, %v0 -; CHECK-NEXT: vl %v1, 528(%r15) -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = icmp eq <16 x i64> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x double> %val3, <16 x double> %val4 - ret <16 x double> %sel -} - -define <2 x i8> @fun96(<2 x float> %val1, <2 x float> %val2, <2 x i8> %val3, <2 x i8> %val4) { -; CHECK-LABEL: fun96: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v26, %v26 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: larl %r1, .LCPI96_0 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <2 x float> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i8> %val3, <2 x i8> %val4 - ret <2 x i8> %sel -} - -define <2 x i16> @fun97(<2 x float> %val1, <2 x float> %val2, <2 x i16> %val3, <2 x i16> %val4) { -; CHECK-LABEL: fun97: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v26, %v26 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <2 x float> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i16> %val3, <2 x i16> %val4 - ret <2 x i16> %sel -} - -define <2 x i32> @fun98(<2 x float> %val1, <2 x float> %val2, <2 x i32> %val3, <2 x i32> %val4) { -; CHECK-LABEL: fun98: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v26, %v26 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <2 x float> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i32> %val3, <2 x i32> %val4 - ret <2 x i32> %sel -} - -define <2 x i64> @fun99(<2 x float> %val1, <2 x float> %val2, <2 x i64> %val3, <2 x i64> %val4) { -; CHECK-LABEL: fun99: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v26, %v26 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <2 x float> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i64> %val3, <2 x i64> %val4 - ret <2 x i64> %sel -} - -define <2 x float> @fun100(<2 x float> %val1, <2 x float> %val2, <2 x float> %val3, <2 x float> %val4) { -; CHECK-LABEL: fun100: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v26, %v26 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <2 x float> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x float> %val3, <2 x float> %val4 - ret <2 x float> %sel -} - -define <2 x double> @fun101(<2 x float> %val1, <2 x float> %val2, <2 x double> %val3, <2 x double> %val4) { -; CHECK-LABEL: fun101: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v26, %v26 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <2 x float> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 - ret <2 x double> %sel -} - -define <2 x i8> @fun102(<2 x double> %val1, <2 x double> %val2, <2 x i8> %val3, <2 x i8> %val4) { -; CHECK-LABEL: fun102: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v24, %v26 -; CHECK-NEXT: vrepih %v1, 1807 -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <2 x double> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i8> %val3, <2 x i8> %val4 - ret <2 x i8> %sel -} - -define <2 x i16> @fun103(<2 x double> %val1, <2 x double> %val2, <2 x i16> %val3, <2 x i16> %val4) { -; CHECK-LABEL: fun103: -; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI103_0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vfchdb %v0, %v24, %v26 -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <2 x double> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i16> %val3, <2 x i16> %val4 - ret <2 x i16> %sel -} - -define <2 x i32> @fun104(<2 x double> %val1, <2 x double> %val2, <2 x i32> %val3, <2 x i32> %val4) { -; CHECK-LABEL: fun104: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v24, %v26 -; CHECK-NEXT: vpkg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <2 x double> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i32> %val3, <2 x i32> %val4 - ret <2 x i32> %sel -} - -define <2 x i64> @fun105(<2 x double> %val1, <2 x double> %val2, <2 x i64> %val3, <2 x i64> %val4) { -; CHECK-LABEL: fun105: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v24, %v26 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <2 x double> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x i64> %val3, <2 x i64> %val4 - ret <2 x i64> %sel -} - -define <2 x float> @fun106(<2 x double> %val1, <2 x double> %val2, <2 x float> %val3, <2 x float> %val4) { -; CHECK-LABEL: fun106: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v24, %v26 -; CHECK-NEXT: vpkg %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <2 x double> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x float> %val3, <2 x float> %val4 - ret <2 x float> %sel -} - -define <2 x double> @fun107(<2 x double> %val1, <2 x double> %val2, <2 x double> %val3, <2 x double> %val4) { -; CHECK-LABEL: fun107: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v24, %v26 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <2 x double> %val1, %val2 - %sel = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 - ret <2 x double> %sel -} - -define <4 x i8> @fun108(<4 x float> %val1, <4 x float> %val2, <4 x i8> %val3, <4 x i8> %val4) { -; CHECK-LABEL: fun108: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v26, %v26 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: larl %r1, .LCPI108_0 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 0(%r1) -; CHECK-NEXT: vperm %v0, %v0, %v0, %v1 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <4 x float> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i8> %val3, <4 x i8> %val4 - ret <4 x i8> %sel -} - -define <4 x i16> @fun109(<4 x float> %val1, <4 x float> %val2, <4 x i16> %val3, <4 x i16> %val4) { -; CHECK-LABEL: fun109: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v26, %v26 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vpkf %v0, %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <4 x float> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i16> %val3, <4 x i16> %val4 - ret <4 x i16> %sel -} - -define <4 x i32> @fun110(<4 x float> %val1, <4 x float> %val2, <4 x i32> %val3, <4 x i32> %val4) { -; CHECK-LABEL: fun110: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v26, %v26 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <4 x float> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i32> %val3, <4 x i32> %val4 - ret <4 x i32> %sel -} - -define <4 x i64> @fun111(<4 x float> %val1, <4 x float> %val2, <4 x i64> %val3, <4 x i64> %val4) { -; CHECK-LABEL: fun111: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v26, %v26 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v25, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <4 x float> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i64> %val3, <4 x i64> %val4 - ret <4 x i64> %sel -} - -define <4 x float> @fun112(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4) { -; CHECK-LABEL: fun112: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v26, %v26 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v30, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <4 x float> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 - ret <4 x float> %sel -} - -define <4 x double> @fun113(<4 x float> %val1, <4 x float> %val2, <4 x double> %val3, <4 x double> %val4) { -; CHECK-LABEL: fun113: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v26, %v26 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v24, %v28, %v25, %v1 -; CHECK-NEXT: vsel %v26, %v30, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <4 x float> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x double> %val3, <4 x double> %val4 - ret <4 x double> %sel -} - -define <4 x i8> @fun114(<4 x double> %val1, <4 x double> %val2, <4 x i8> %val3, <4 x i8> %val4) { -; CHECK-LABEL: fun114: -; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI114_0 -; CHECK-NEXT: vl %v2, 0(%r1) -; CHECK-NEXT: vfchdb %v0, %v26, %v30 -; CHECK-NEXT: vfchdb %v1, %v24, %v28 -; CHECK-NEXT: vperm %v0, %v1, %v0, %v2 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <4 x double> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i8> %val3, <4 x i8> %val4 - ret <4 x i8> %sel -} - -define <4 x i16> @fun115(<4 x double> %val1, <4 x double> %val2, <4 x i16> %val3, <4 x i16> %val4) { -; CHECK-LABEL: fun115: -; CHECK: # BB#0: -; CHECK-NEXT: larl %r1, .LCPI115_0 -; CHECK-NEXT: vl %v2, 0(%r1) -; CHECK-NEXT: vfchdb %v0, %v26, %v30 -; CHECK-NEXT: vfchdb %v1, %v24, %v28 -; CHECK-NEXT: vperm %v0, %v1, %v0, %v2 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <4 x double> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i16> %val3, <4 x i16> %val4 - ret <4 x i16> %sel -} - -define <4 x i32> @fun116(<4 x double> %val1, <4 x double> %val2, <4 x i32> %val3, <4 x i32> %val4) { -; CHECK-LABEL: fun116: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v26, %v30 -; CHECK-NEXT: vfchdb %v1, %v24, %v28 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <4 x double> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i32> %val3, <4 x i32> %val4 - ret <4 x i32> %sel -} - -define <4 x i64> @fun117(<4 x double> %val1, <4 x double> %val2, <4 x i64> %val3, <4 x i64> %val4) { -; CHECK-LABEL: fun117: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v24, %v28 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v0 -; CHECK-NEXT: vfchdb %v0, %v26, %v30 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <4 x double> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x i64> %val3, <4 x i64> %val4 - ret <4 x i64> %sel -} - -define <4 x float> @fun118(<4 x double> %val1, <4 x double> %val2, <4 x float> %val3, <4 x float> %val4) { -; CHECK-LABEL: fun118: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v26, %v30 -; CHECK-NEXT: vfchdb %v1, %v24, %v28 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <4 x double> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 - ret <4 x float> %sel -} - -define <4 x double> @fun119(<4 x double> %val1, <4 x double> %val2, <4 x double> %val3, <4 x double> %val4) { -; CHECK-LABEL: fun119: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v24, %v28 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v0 -; CHECK-NEXT: vfchdb %v0, %v26, %v30 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <4 x double> %val1, %val2 - %sel = select <4 x i1> %cmp, <4 x double> %val3, <4 x double> %val4 - ret <4 x double> %sel -} - -define <8 x i8> @fun120(<8 x float> %val1, <8 x float> %val2, <8 x i8> %val3, <8 x i8> %val4) { -; CHECK-LABEL: fun120: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: larl %r1, .LCPI120_0 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 0(%r1) -; CHECK-NEXT: vperm %v0, %v1, %v0, %v2 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <8 x float> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i8> %val3, <8 x i8> %val4 - ret <8 x i8> %sel -} - -define <8 x i16> @fun121(<8 x float> %val1, <8 x float> %val2, <8 x i16> %val3, <8 x i16> %val4) { -; CHECK-LABEL: fun121: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v27, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <8 x float> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i16> %val3, <8 x i16> %val4 - ret <8 x i16> %sel -} - -define <8 x i32> @fun122(<8 x float> %val1, <8 x float> %val2, <8 x i32> %val3, <8 x i32> %val4) { -; CHECK-LABEL: fun122: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v28, %v28 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v28, %v28 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v0 -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <8 x float> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i32> %val3, <8 x i32> %val4 - ret <8 x i32> %sel -} - -define <8 x i64> @fun123(<8 x float> %val1, <8 x float> %val2, <8 x i64> %val3, <8 x i64> %val4) { -; CHECK-LABEL: fun123: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v28, %v28 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v28, %v28 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v26, %v26 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v2, %v1 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vmrlf %v2, %v26, %v26 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vsel %v28, %v29, %v3, %v2 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vsel %v26, %v27, %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v31, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <8 x float> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i64> %val3, <8 x i64> %val4 - ret <8 x i64> %sel -} - -define <8 x float> @fun124(<8 x float> %val1, <8 x float> %val2, <8 x float> %val3, <8 x float> %val4) { -; CHECK-LABEL: fun124: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v28, %v28 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v28, %v28 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v29, %v0 -; CHECK-NEXT: vmrlf %v0, %v30, %v30 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v30, %v30 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vsel %v26, %v27, %v31, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <8 x float> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x float> %val3, <8 x float> %val4 - ret <8 x float> %sel -} - -define <8 x double> @fun125(<8 x float> %val1, <8 x float> %val2, <8 x double> %val3, <8 x double> %val4) { -; CHECK-LABEL: fun125: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v28, %v28 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v28, %v28 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v26, %v26 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vuphf %v1, %v0 -; CHECK-NEXT: vsel %v24, %v25, %v2, %v1 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vmrlf %v2, %v26, %v26 -; CHECK-NEXT: vmrlg %v0, %v0, %v0 -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vl %v3, 192(%r15) -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vuphf %v2, %v1 -; CHECK-NEXT: vsel %v28, %v29, %v3, %v2 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vsel %v26, %v27, %v2, %v0 -; CHECK-NEXT: vmrlg %v0, %v1, %v1 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vuphf %v0, %v0 -; CHECK-NEXT: vsel %v30, %v31, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <8 x float> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x double> %val3, <8 x double> %val4 - ret <8 x double> %sel -} - -define <8 x i8> @fun126(<8 x double> %val1, <8 x double> %val2, <8 x i8> %val3, <8 x i8> %val4) { -; CHECK-LABEL: fun126: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v30, %v31 -; CHECK-NEXT: vfchdb %v1, %v28, %v29 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vfchdb %v1, %v26, %v27 -; CHECK-NEXT: vfchdb %v2, %v24, %v25 -; CHECK-NEXT: larl %r1, .LCPI126_0 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 0(%r1) -; CHECK-NEXT: vperm %v0, %v1, %v0, %v2 -; CHECK-NEXT: vlrepg %v1, 168(%r15) -; CHECK-NEXT: vlrepg %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <8 x double> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i8> %val3, <8 x i8> %val4 - ret <8 x i8> %sel -} - -define <8 x i16> @fun127(<8 x double> %val1, <8 x double> %val2, <8 x i16> %val3, <8 x i16> %val4) { -; CHECK-LABEL: fun127: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v30, %v31 -; CHECK-NEXT: vfchdb %v1, %v28, %v29 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vfchdb %v1, %v26, %v27 -; CHECK-NEXT: vfchdb %v2, %v24, %v25 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <8 x double> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i16> %val3, <8 x i16> %val4 - ret <8 x i16> %sel -} - -define <8 x i32> @fun128(<8 x double> %val1, <8 x double> %val2, <8 x i32> %val3, <8 x i32> %val4) { -; CHECK-LABEL: fun128: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v26, %v27 -; CHECK-NEXT: vfchdb %v1, %v24, %v25 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vfchdb %v0, %v30, %v31 -; CHECK-NEXT: vfchdb %v1, %v28, %v29 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <8 x double> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i32> %val3, <8 x i32> %val4 - ret <8 x i32> %sel -} - -define <8 x i64> @fun129(<8 x double> %val1, <8 x double> %val2, <8 x i64> %val3, <8 x i64> %val4) { -; CHECK-LABEL: fun129: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vfchdb %v0, %v24, %v25 -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vfchdb %v0, %v26, %v27 -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vfchdb %v0, %v28, %v29 -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vfchdb %v0, %v30, %v31 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <8 x double> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x i64> %val3, <8 x i64> %val4 - ret <8 x i64> %sel -} - -define <8 x float> @fun130(<8 x double> %val1, <8 x double> %val2, <8 x float> %val3, <8 x float> %val4) { -; CHECK-LABEL: fun130: -; CHECK: # BB#0: -; CHECK-NEXT: vfchdb %v0, %v26, %v27 -; CHECK-NEXT: vfchdb %v1, %v24, %v25 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vfchdb %v0, %v30, %v31 -; CHECK-NEXT: vfchdb %v1, %v28, %v29 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <8 x double> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x float> %val3, <8 x float> %val4 - ret <8 x float> %sel -} - -define <8 x double> @fun131(<8 x double> %val1, <8 x double> %val2, <8 x double> %val3, <8 x double> %val4) { -; CHECK-LABEL: fun131: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vfchdb %v0, %v24, %v25 -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vfchdb %v0, %v26, %v27 -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vfchdb %v0, %v28, %v29 -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vfchdb %v0, %v30, %v31 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <8 x double> %val1, %val2 - %sel = select <8 x i1> %cmp, <8 x double> %val3, <8 x double> %val4 - ret <8 x double> %sel -} - -define <16 x i8> @fun132(<16 x float> %val1, <16 x float> %val2, <16 x i8> %val3, <16 x i8> %val4) { -; CHECK-LABEL: fun132: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v31, %v31 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v31, %v31 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v28, %v28 -; CHECK-NEXT: vmrhf %v4, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v29, %v29 -; CHECK-NEXT: vmrlf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v29, %v29 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v27, %v27 -; CHECK-NEXT: vmrlf %v2, %v26, %v26 -; CHECK-NEXT: vmrhf %v3, %v26, %v26 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v27, %v27 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vmrlf %v2, %v25, %v25 -; CHECK-NEXT: vmrlf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vmrhf %v3, %v25, %v25 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v3, %v4, %v3 -; CHECK-NEXT: vpkg %v2, %v3, %v2 -; CHECK-NEXT: vpkf %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vpkh %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <16 x float> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i8> %val3, <16 x i8> %val4 - ret <16 x i8> %sel -} - -define <16 x i16> @fun133(<16 x float> %val1, <16 x float> %val2, <16 x i16> %val3, <16 x i16> %val4) { -; CHECK-LABEL: fun133: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v27, %v27 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v27, %v27 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vmrhf %v3, %v24, %v24 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v25, %v25 -; CHECK-NEXT: vmrlf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v25, %v25 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vmrlf %v0, %v31, %v31 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vmrhf %v3, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v31, %v31 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vmrlf %v1, %v29, %v29 -; CHECK-NEXT: vmrlf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vmrhf %v2, %v29, %v29 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <16 x float> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i16> %val3, <16 x i16> %val4 - ret <16 x i16> %sel -} - -define <16 x i32> @fun134(<16 x float> %val1, <16 x float> %val2, <16 x i32> %val3, <16 x i32> %val4) { -; CHECK-LABEL: fun134: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v25, %v25 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v25, %v25 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vmrlf %v0, %v27, %v27 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v27, %v27 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vmrlf %v0, %v29, %v29 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v29, %v29 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vmrlf %v0, %v31, %v31 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v31, %v31 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <16 x float> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i32> %val3, <16 x i32> %val4 - ret <16 x i32> %sel -} - -define <16 x i64> @fun135(<16 x float> %val1, <16 x float> %val2, <16 x i64> %val3, <16 x i64> %val4) { -; CHECK-LABEL: fun135: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v25, %v25 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v25, %v25 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vl %v6, 224(%r15) -; CHECK-NEXT: vl %v7, 256(%r15) -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vpkg %v1, %v1, %v0 -; CHECK-NEXT: vuphf %v0, %v1 -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vmrlf %v0, %v27, %v27 -; CHECK-NEXT: vmrlf %v2, %v26, %v26 -; CHECK-NEXT: vmrhf %v3, %v26, %v26 -; CHECK-NEXT: vmrhf %v5, %v28, %v28 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v0, %v2, %v0 -; CHECK-NEXT: vmrhf %v2, %v27, %v27 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vpkg %v2, %v2, %v0 -; CHECK-NEXT: vuphf %v0, %v2 -; CHECK-NEXT: vsel %v0, %v4, %v3, %v0 -; CHECK-NEXT: vmrlf %v3, %v29, %v29 -; CHECK-NEXT: vmrlf %v4, %v28, %v28 -; CHECK-NEXT: vlr %v28, %v0 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v3, %v4, %v3 -; CHECK-NEXT: vmrhf %v4, %v29, %v29 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vldeb %v5, %v5 -; CHECK-NEXT: vfchdb %v4, %v5, %v4 -; CHECK-NEXT: vl %v5, 352(%r15) -; CHECK-NEXT: vpkg %v3, %v4, %v3 -; CHECK-NEXT: vuphf %v4, %v3 -; CHECK-NEXT: vsel %v25, %v6, %v5, %v4 -; CHECK-NEXT: vmrlf %v4, %v31, %v31 -; CHECK-NEXT: vmrlf %v5, %v30, %v30 -; CHECK-NEXT: vmrhf %v6, %v30, %v30 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vldeb %v5, %v5 -; CHECK-NEXT: vfchdb %v4, %v5, %v4 -; CHECK-NEXT: vmrhf %v5, %v31, %v31 -; CHECK-NEXT: vldeb %v5, %v5 -; CHECK-NEXT: vldeb %v6, %v6 -; CHECK-NEXT: vfchdb %v5, %v6, %v5 -; CHECK-NEXT: vl %v6, 384(%r15) -; CHECK-NEXT: vpkg %v4, %v5, %v4 -; CHECK-NEXT: vuphf %v5, %v4 -; CHECK-NEXT: vsel %v29, %v7, %v6, %v5 -; CHECK-NEXT: vl %v5, 304(%r15) -; CHECK-NEXT: vl %v6, 176(%r15) -; CHECK-NEXT: vsel %v26, %v6, %v5, %v1 -; CHECK-NEXT: vl %v5, 208(%r15) -; CHECK-NEXT: vmrlg %v1, %v2, %v2 -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v30, %v5, %v2, %v1 -; CHECK-NEXT: vl %v2, 368(%r15) -; CHECK-NEXT: vmrlg %v1, %v3, %v3 -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v27, %v3, %v2, %v1 -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vl %v3, 272(%r15) -; CHECK-NEXT: vmrlg %v1, %v4, %v4 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v31, %v3, %v2, %v1 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <16 x float> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i64> %val3, <16 x i64> %val4 - ret <16 x i64> %sel -} - -define <16 x float> @fun136(<16 x float> %val1, <16 x float> %val2, <16 x float> %val3, <16 x float> %val4) { -; CHECK-LABEL: fun136: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v25, %v25 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v25, %v25 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vmrlf %v0, %v27, %v27 -; CHECK-NEXT: vmrlf %v1, %v26, %v26 -; CHECK-NEXT: vmrhf %v2, %v26, %v26 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v27, %v27 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vmrlf %v0, %v29, %v29 -; CHECK-NEXT: vmrlf %v1, %v28, %v28 -; CHECK-NEXT: vmrhf %v2, %v28, %v28 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v29, %v29 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vmrlf %v0, %v31, %v31 -; CHECK-NEXT: vmrlf %v1, %v30, %v30 -; CHECK-NEXT: vmrhf %v2, %v30, %v30 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v31, %v31 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 208(%r15) -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 272(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <16 x float> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x float> %val3, <16 x float> %val4 - ret <16 x float> %sel -} - -define <16 x double> @fun137(<16 x float> %val1, <16 x float> %val2, <16 x double> %val3, <16 x double> %val4) { -; CHECK-LABEL: fun137: -; CHECK: # BB#0: -; CHECK-NEXT: vmrlf %v0, %v25, %v25 -; CHECK-NEXT: vmrlf %v1, %v24, %v24 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vfchdb %v0, %v1, %v0 -; CHECK-NEXT: vmrhf %v1, %v25, %v25 -; CHECK-NEXT: vmrhf %v2, %v24, %v24 -; CHECK-NEXT: vldeb %v1, %v1 -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vl %v4, 192(%r15) -; CHECK-NEXT: vl %v6, 224(%r15) -; CHECK-NEXT: vl %v7, 256(%r15) -; CHECK-NEXT: vfchdb %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vpkg %v1, %v1, %v0 -; CHECK-NEXT: vuphf %v0, %v1 -; CHECK-NEXT: vsel %v24, %v3, %v2, %v0 -; CHECK-NEXT: vmrlf %v0, %v27, %v27 -; CHECK-NEXT: vmrlf %v2, %v26, %v26 -; CHECK-NEXT: vmrhf %v3, %v26, %v26 -; CHECK-NEXT: vmrhf %v5, %v28, %v28 -; CHECK-NEXT: vmrlg %v1, %v1, %v1 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vldeb %v0, %v0 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vfchdb %v0, %v2, %v0 -; CHECK-NEXT: vmrhf %v2, %v27, %v27 -; CHECK-NEXT: vldeb %v2, %v2 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vfchdb %v2, %v3, %v2 -; CHECK-NEXT: vl %v3, 320(%r15) -; CHECK-NEXT: vpkg %v2, %v2, %v0 -; CHECK-NEXT: vuphf %v0, %v2 -; CHECK-NEXT: vsel %v0, %v4, %v3, %v0 -; CHECK-NEXT: vmrlf %v3, %v29, %v29 -; CHECK-NEXT: vmrlf %v4, %v28, %v28 -; CHECK-NEXT: vlr %v28, %v0 -; CHECK-NEXT: vldeb %v3, %v3 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vfchdb %v3, %v4, %v3 -; CHECK-NEXT: vmrhf %v4, %v29, %v29 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vldeb %v5, %v5 -; CHECK-NEXT: vfchdb %v4, %v5, %v4 -; CHECK-NEXT: vl %v5, 352(%r15) -; CHECK-NEXT: vpkg %v3, %v4, %v3 -; CHECK-NEXT: vuphf %v4, %v3 -; CHECK-NEXT: vsel %v25, %v6, %v5, %v4 -; CHECK-NEXT: vmrlf %v4, %v31, %v31 -; CHECK-NEXT: vmrlf %v5, %v30, %v30 -; CHECK-NEXT: vmrhf %v6, %v30, %v30 -; CHECK-NEXT: vldeb %v4, %v4 -; CHECK-NEXT: vldeb %v5, %v5 -; CHECK-NEXT: vfchdb %v4, %v5, %v4 -; CHECK-NEXT: vmrhf %v5, %v31, %v31 -; CHECK-NEXT: vldeb %v5, %v5 -; CHECK-NEXT: vldeb %v6, %v6 -; CHECK-NEXT: vfchdb %v5, %v6, %v5 -; CHECK-NEXT: vl %v6, 384(%r15) -; CHECK-NEXT: vpkg %v4, %v5, %v4 -; CHECK-NEXT: vuphf %v5, %v4 -; CHECK-NEXT: vsel %v29, %v7, %v6, %v5 -; CHECK-NEXT: vl %v5, 304(%r15) -; CHECK-NEXT: vl %v6, 176(%r15) -; CHECK-NEXT: vsel %v26, %v6, %v5, %v1 -; CHECK-NEXT: vl %v5, 208(%r15) -; CHECK-NEXT: vmrlg %v1, %v2, %v2 -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v30, %v5, %v2, %v1 -; CHECK-NEXT: vl %v2, 368(%r15) -; CHECK-NEXT: vmrlg %v1, %v3, %v3 -; CHECK-NEXT: vl %v3, 240(%r15) -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v27, %v3, %v2, %v1 -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vl %v3, 272(%r15) -; CHECK-NEXT: vmrlg %v1, %v4, %v4 -; CHECK-NEXT: vuphf %v1, %v1 -; CHECK-NEXT: vsel %v31, %v3, %v2, %v1 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <16 x float> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x double> %val3, <16 x double> %val4 - ret <16 x double> %sel -} - -define <16 x i8> @fun138(<16 x double> %val1, <16 x double> %val2, <16 x i8> %val3, <16 x i8> %val4) { -; CHECK-LABEL: fun138: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vfchdb %v0, %v31, %v0 -; CHECK-NEXT: vfchdb %v1, %v29, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vfchdb %v1, %v27, %v1 -; CHECK-NEXT: vfchdb %v2, %v25, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 208(%r15) -; CHECK-NEXT: vl %v2, 192(%r15) -; CHECK-NEXT: vfchdb %v1, %v30, %v1 -; CHECK-NEXT: vfchdb %v2, %v28, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vl %v2, 176(%r15) -; CHECK-NEXT: vl %v3, 160(%r15) -; CHECK-NEXT: vfchdb %v2, %v26, %v2 -; CHECK-NEXT: vfchdb %v3, %v24, %v3 -; CHECK-NEXT: vpkg %v2, %v3, %v2 -; CHECK-NEXT: vpkf %v1, %v2, %v1 -; CHECK-NEXT: vpkh %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 304(%r15) -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <16 x double> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i8> %val3, <16 x i8> %val4 - ret <16 x i8> %sel -} - -define <16 x i16> @fun139(<16 x double> %val1, <16 x double> %val2, <16 x i16> %val3, <16 x i16> %val4) { -; CHECK-LABEL: fun139: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vfchdb %v0, %v30, %v0 -; CHECK-NEXT: vfchdb %v1, %v28, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 176(%r15) -; CHECK-NEXT: vl %v2, 160(%r15) -; CHECK-NEXT: vfchdb %v1, %v26, %v1 -; CHECK-NEXT: vfchdb %v2, %v24, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 320(%r15) -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vfchdb %v0, %v31, %v0 -; CHECK-NEXT: vfchdb %v1, %v29, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 240(%r15) -; CHECK-NEXT: vl %v2, 224(%r15) -; CHECK-NEXT: vfchdb %v1, %v27, %v1 -; CHECK-NEXT: vfchdb %v2, %v25, %v2 -; CHECK-NEXT: vpkg %v1, %v2, %v1 -; CHECK-NEXT: vpkf %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 336(%r15) -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <16 x double> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i16> %val3, <16 x i16> %val4 - ret <16 x i16> %sel -} - -define <16 x i32> @fun140(<16 x double> %val1, <16 x double> %val2, <16 x i32> %val3, <16 x i32> %val4) { -; CHECK-LABEL: fun140: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v1, 160(%r15) -; CHECK-NEXT: vfchdb %v0, %v26, %v0 -; CHECK-NEXT: vfchdb %v1, %v24, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 352(%r15) -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vfchdb %v0, %v30, %v0 -; CHECK-NEXT: vfchdb %v1, %v28, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 368(%r15) -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 240(%r15) -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vfchdb %v0, %v27, %v0 -; CHECK-NEXT: vfchdb %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 384(%r15) -; CHECK-NEXT: vl %v2, 320(%r15) -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vfchdb %v0, %v31, %v0 -; CHECK-NEXT: vfchdb %v1, %v29, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 400(%r15) -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <16 x double> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i32> %val3, <16 x i32> %val4 - ret <16 x i32> %sel -} - -define <16 x i64> @fun141(<16 x double> %val1, <16 x double> %val2, <16 x i64> %val3, <16 x i64> %val4) { -; CHECK-LABEL: fun141: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 160(%r15) -; CHECK-NEXT: vl %v1, 416(%r15) -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vfchdb %v0, %v24, %v0 -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vfchdb %v0, %v26, %v0 -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 192(%r15) -; CHECK-NEXT: vl %v1, 448(%r15) -; CHECK-NEXT: vl %v2, 320(%r15) -; CHECK-NEXT: vfchdb %v0, %v28, %v0 -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 464(%r15) -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vfchdb %v0, %v30, %v0 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 224(%r15) -; CHECK-NEXT: vl %v1, 480(%r15) -; CHECK-NEXT: vl %v2, 352(%r15) -; CHECK-NEXT: vfchdb %v0, %v25, %v0 -; CHECK-NEXT: vsel %v25, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 240(%r15) -; CHECK-NEXT: vl %v1, 496(%r15) -; CHECK-NEXT: vl %v2, 368(%r15) -; CHECK-NEXT: vfchdb %v0, %v27, %v0 -; CHECK-NEXT: vsel %v27, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 256(%r15) -; CHECK-NEXT: vfchdb %v0, %v29, %v0 -; CHECK-NEXT: vl %v1, 512(%r15) -; CHECK-NEXT: vl %v2, 384(%r15) -; CHECK-NEXT: vsel %v29, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vfchdb %v0, %v31, %v0 -; CHECK-NEXT: vl %v1, 528(%r15) -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <16 x double> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x i64> %val3, <16 x i64> %val4 - ret <16 x i64> %sel -} - -define <16 x float> @fun142(<16 x double> %val1, <16 x double> %val2, <16 x float> %val3, <16 x float> %val4) { -; CHECK-LABEL: fun142: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v1, 160(%r15) -; CHECK-NEXT: vfchdb %v0, %v26, %v0 -; CHECK-NEXT: vfchdb %v1, %v24, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 352(%r15) -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 192(%r15) -; CHECK-NEXT: vfchdb %v0, %v30, %v0 -; CHECK-NEXT: vfchdb %v1, %v28, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 368(%r15) -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 240(%r15) -; CHECK-NEXT: vl %v1, 224(%r15) -; CHECK-NEXT: vfchdb %v0, %v27, %v0 -; CHECK-NEXT: vfchdb %v1, %v25, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 384(%r15) -; CHECK-NEXT: vl %v2, 320(%r15) -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vl %v1, 256(%r15) -; CHECK-NEXT: vfchdb %v0, %v31, %v0 -; CHECK-NEXT: vfchdb %v1, %v29, %v1 -; CHECK-NEXT: vpkg %v0, %v1, %v0 -; CHECK-NEXT: vl %v1, 400(%r15) -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <16 x double> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x float> %val3, <16 x float> %val4 - ret <16 x float> %sel -} - -define <16 x double> @fun143(<16 x double> %val1, <16 x double> %val2, <16 x double> %val3, <16 x double> %val4) { -; CHECK-LABEL: fun143: -; CHECK: # BB#0: -; CHECK-NEXT: vl %v0, 160(%r15) -; CHECK-NEXT: vl %v1, 416(%r15) -; CHECK-NEXT: vl %v2, 288(%r15) -; CHECK-NEXT: vfchdb %v0, %v24, %v0 -; CHECK-NEXT: vsel %v24, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 176(%r15) -; CHECK-NEXT: vl %v1, 432(%r15) -; CHECK-NEXT: vl %v2, 304(%r15) -; CHECK-NEXT: vfchdb %v0, %v26, %v0 -; CHECK-NEXT: vsel %v26, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 192(%r15) -; CHECK-NEXT: vl %v1, 448(%r15) -; CHECK-NEXT: vl %v2, 320(%r15) -; CHECK-NEXT: vfchdb %v0, %v28, %v0 -; CHECK-NEXT: vsel %v28, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 208(%r15) -; CHECK-NEXT: vl %v1, 464(%r15) -; CHECK-NEXT: vl %v2, 336(%r15) -; CHECK-NEXT: vfchdb %v0, %v30, %v0 -; CHECK-NEXT: vsel %v30, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 224(%r15) -; CHECK-NEXT: vl %v1, 480(%r15) -; CHECK-NEXT: vl %v2, 352(%r15) -; CHECK-NEXT: vfchdb %v0, %v25, %v0 -; CHECK-NEXT: vsel %v25, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 240(%r15) -; CHECK-NEXT: vl %v1, 496(%r15) -; CHECK-NEXT: vl %v2, 368(%r15) -; CHECK-NEXT: vfchdb %v0, %v27, %v0 -; CHECK-NEXT: vsel %v27, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 256(%r15) -; CHECK-NEXT: vfchdb %v0, %v29, %v0 -; CHECK-NEXT: vl %v1, 512(%r15) -; CHECK-NEXT: vl %v2, 384(%r15) -; CHECK-NEXT: vsel %v29, %v2, %v1, %v0 -; CHECK-NEXT: vl %v0, 272(%r15) -; CHECK-NEXT: vfchdb %v0, %v31, %v0 -; CHECK-NEXT: vl %v1, 528(%r15) -; CHECK-NEXT: vl %v2, 400(%r15) -; CHECK-NEXT: vsel %v31, %v2, %v1, %v0 -; CHECK-NEXT: br %r14 - %cmp = fcmp ogt <16 x double> %val1, %val2 - %sel = select <16 x i1> %cmp, <16 x double> %val3, <16 x double> %val4 - ret <16 x double> %sel -} - Index: test/CodeGen/SystemZ/vec-div-01.ll =================================================================== --- test/CodeGen/SystemZ/vec-div-01.ll +++ test/CodeGen/SystemZ/vec-div-01.ll @@ -7,20 +7,20 @@ define <16 x i8> @f1(<16 x i8> %dummy, <16 x i8> %val1, <16 x i8> %val2) { ; CHECK-LABEL: f1: ; CHECK: vlvgp [[REG:%v[0-9]+]], -; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 0 -; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 1 -; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 2 -; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 3 -; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 4 -; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 5 -; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 6 -; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 8 -; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 9 -; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 10 -; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 11 -; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 12 -; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 13 -; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 14 +; CHECK-DAG: vlvgb [[REG]], {{%r[0-9]+}}, 0 +; CHECK-DAG: vlvgb [[REG]], {{%r[0-9]+}}, 1 +; CHECK-DAG: vlvgb [[REG]], {{%r[0-9]+}}, 2 +; CHECK-DAG: vlvgb [[REG]], {{%r[0-9]+}}, 3 +; CHECK-DAG: vlvgb [[REG]], {{%r[0-9]+}}, 4 +; CHECK-DAG: vlvgb [[REG]], {{%r[0-9]+}}, 5 +; CHECK-DAG: vlvgb [[REG]], {{%r[0-9]+}}, 6 +; CHECK-DAG: vlvgb [[REG]], {{%r[0-9]+}}, 8 +; CHECK-DAG: vlvgb [[REG]], {{%r[0-9]+}}, 9 +; CHECK-DAG: vlvgb [[REG]], {{%r[0-9]+}}, 10 +; CHECK-DAG: vlvgb [[REG]], {{%r[0-9]+}}, 11 +; CHECK-DAG: vlvgb [[REG]], {{%r[0-9]+}}, 12 +; CHECK-DAG: vlvgb [[REG]], {{%r[0-9]+}}, 13 +; CHECK-DAG: vlvgb [[REG]], {{%r[0-9]+}}, 14 ; CHECK: br %r14 %ret = sdiv <16 x i8> %val1, %val2 ret <16 x i8> %ret @@ -30,12 +30,12 @@ define <8 x i16> @f2(<8 x i16> %dummy, <8 x i16> %val1, <8 x i16> %val2) { ; CHECK-LABEL: f2: ; CHECK: vlvgp [[REG:%v[0-9]+]], -; CHECK-DAG: vlvgh [[REG]], {{%r[0-5]}}, 0 -; CHECK-DAG: vlvgh [[REG]], {{%r[0-5]}}, 1 -; CHECK-DAG: vlvgh [[REG]], {{%r[0-5]}}, 2 -; CHECK-DAG: vlvgh [[REG]], {{%r[0-5]}}, 4 -; CHECK-DAG: vlvgh [[REG]], {{%r[0-5]}}, 5 -; CHECK-DAG: vlvgh [[REG]], {{%r[0-5]}}, 6 +; CHECK-DAG: vlvgh [[REG]], {{%r[0-9]+}}, 0 +; CHECK-DAG: vlvgh [[REG]], {{%r[0-9]+}}, 1 +; CHECK-DAG: vlvgh [[REG]], {{%r[0-9]+}}, 2 +; CHECK-DAG: vlvgh [[REG]], {{%r[0-9]+}}, 4 +; CHECK-DAG: vlvgh [[REG]], {{%r[0-9]+}}, 5 +; CHECK-DAG: vlvgh [[REG]], {{%r[0-9]+}}, 6 ; CHECK: br %r14 %ret = sdiv <8 x i16> %val1, %val2 ret <8 x i16> %ret @@ -45,8 +45,8 @@ define <4 x i32> @f3(<4 x i32> %dummy, <4 x i32> %val1, <4 x i32> %val2) { ; CHECK-LABEL: f3: ; CHECK: vlvgp [[REG:%v[0-9]+]], -; CHECK-DAG: vlvgf [[REG]], {{%r[0-5]}}, 0 -; CHECK-DAG: vlvgf [[REG]], {{%r[0-5]}}, 2 +; CHECK-DAG: vlvgf [[REG]], {{%r[0-9]+}}, 0 +; CHECK-DAG: vlvgf [[REG]], {{%r[0-9]+}}, 2 ; CHECK: br %r14 %ret = sdiv <4 x i32> %val1, %val2 ret <4 x i32> %ret Index: test/CodeGen/SystemZ/vec-sub-01.ll =================================================================== --- test/CodeGen/SystemZ/vec-sub-01.ll +++ test/CodeGen/SystemZ/vec-sub-01.ll @@ -52,12 +52,11 @@ ; CHECK-DAG: vrepf %v[[C2:[0-5]]], %v[[A2]], 2 ; CHECK-DAG: vrepf %v[[D1:[0-5]]], %v[[A1]], 3 ; CHECK-DAG: vrepf %v[[D2:[0-5]]], %v[[A2]], 3 -; CHECK-DAG: ldr %f[[A1copy:[0-5]]], %f[[A1]] -; CHECK-DAG: sebr %f[[A1copy]], %f[[A2]] +; CHECK-DAG: sebr %f[[A1]], %f[[A2]] ; CHECK-DAG: sebr %f[[B1]], %f[[B2]] ; CHECK-DAG: sebr %f[[C1]], %f[[C2]] ; CHECK-DAG: sebr %f[[D1]], %f[[D2]] -; CHECK-DAG: vmrhf [[HIGH:%v[0-9]+]], %v[[A1copy]], %v[[B1]] +; CHECK-DAG: vmrhf [[HIGH:%v[0-9]+]], %v[[A1]], %v[[B1]] ; CHECK-DAG: vmrhf [[LOW:%v[0-9]+]], %v[[C1]], %v[[D1]] ; CHECK: vmrhg %v24, [[HIGH]], [[LOW]] ; CHECK: br %r14