summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/AArch64/sadd_sat_vec.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/AArch64/sadd_sat_vec.ll')
-rw-r--r--llvm/test/CodeGen/AArch64/sadd_sat_vec.ll470
1 files changed, 153 insertions, 317 deletions
diff --git a/llvm/test/CodeGen/AArch64/sadd_sat_vec.ll b/llvm/test/CodeGen/AArch64/sadd_sat_vec.ll
index 40b945885f5..5a2a24ee9c8 100644
--- a/llvm/test/CodeGen/AArch64/sadd_sat_vec.ll
+++ b/llvm/test/CodeGen/AArch64/sadd_sat_vec.ll
@@ -36,17 +36,13 @@ define <16 x i8> @v16i8(<16 x i8> %x, <16 x i8> %y) nounwind {
; CHECK-LABEL: v16i8:
; CHECK: // %bb.0:
; CHECK-NEXT: add v2.16b, v0.16b, v1.16b
-; CHECK-NEXT: cmge v1.16b, v1.16b, #0
-; CHECK-NEXT: cmge v0.16b, v0.16b, #0
-; CHECK-NEXT: cmge v5.16b, v2.16b, #0
; CHECK-NEXT: cmlt v4.16b, v2.16b, #0
-; CHECK-NEXT: cmeq v1.16b, v0.16b, v1.16b
-; CHECK-NEXT: cmeq v0.16b, v0.16b, v5.16b
; CHECK-NEXT: movi v3.16b, #127
+; CHECK-NEXT: cmlt v1.16b, v1.16b, #0
+; CHECK-NEXT: cmgt v0.16b, v0.16b, v2.16b
; CHECK-NEXT: mvn v5.16b, v4.16b
-; CHECK-NEXT: mvn v0.16b, v0.16b
; CHECK-NEXT: bsl v3.16b, v4.16b, v5.16b
-; CHECK-NEXT: and v0.16b, v1.16b, v0.16b
+; CHECK-NEXT: eor v0.16b, v1.16b, v0.16b
; CHECK-NEXT: bsl v0.16b, v3.16b, v2.16b
; CHECK-NEXT: ret
%z = call <16 x i8> @llvm.sadd.sat.v16i8(<16 x i8> %x, <16 x i8> %y)
@@ -57,29 +53,21 @@ define <32 x i8> @v32i8(<32 x i8> %x, <32 x i8> %y) nounwind {
; CHECK-LABEL: v32i8:
; CHECK: // %bb.0:
; CHECK-NEXT: add v4.16b, v0.16b, v2.16b
-; CHECK-NEXT: cmlt v16.16b, v4.16b, #0
+; CHECK-NEXT: cmlt v7.16b, v4.16b, #0
; CHECK-NEXT: movi v6.16b, #127
+; CHECK-NEXT: mvn v16.16b, v7.16b
+; CHECK-NEXT: bsl v6.16b, v7.16b, v16.16b
; CHECK-NEXT: add v7.16b, v1.16b, v3.16b
-; CHECK-NEXT: mvn v17.16b, v16.16b
-; CHECK-NEXT: bsl v6.16b, v16.16b, v17.16b
+; CHECK-NEXT: cmlt v2.16b, v2.16b, #0
+; CHECK-NEXT: cmgt v0.16b, v0.16b, v4.16b
; CHECK-NEXT: cmlt v16.16b, v7.16b, #0
; CHECK-NEXT: movi v5.16b, #127
-; CHECK-NEXT: mvn v17.16b, v16.16b
-; CHECK-NEXT: bsl v5.16b, v16.16b, v17.16b
-; CHECK-NEXT: cmge v2.16b, v2.16b, #0
-; CHECK-NEXT: cmge v0.16b, v0.16b, #0
-; CHECK-NEXT: cmge v16.16b, v4.16b, #0
-; CHECK-NEXT: cmge v3.16b, v3.16b, #0
-; CHECK-NEXT: cmge v1.16b, v1.16b, #0
-; CHECK-NEXT: cmeq v2.16b, v0.16b, v2.16b
-; CHECK-NEXT: cmeq v0.16b, v0.16b, v16.16b
-; CHECK-NEXT: cmge v16.16b, v7.16b, #0
-; CHECK-NEXT: cmeq v3.16b, v1.16b, v3.16b
-; CHECK-NEXT: cmeq v1.16b, v1.16b, v16.16b
-; CHECK-NEXT: mvn v0.16b, v0.16b
-; CHECK-NEXT: mvn v1.16b, v1.16b
-; CHECK-NEXT: and v0.16b, v2.16b, v0.16b
-; CHECK-NEXT: and v1.16b, v3.16b, v1.16b
+; CHECK-NEXT: cmlt v3.16b, v3.16b, #0
+; CHECK-NEXT: cmgt v1.16b, v1.16b, v7.16b
+; CHECK-NEXT: eor v0.16b, v2.16b, v0.16b
+; CHECK-NEXT: mvn v2.16b, v16.16b
+; CHECK-NEXT: eor v1.16b, v3.16b, v1.16b
+; CHECK-NEXT: bsl v5.16b, v16.16b, v2.16b
; CHECK-NEXT: bsl v0.16b, v6.16b, v4.16b
; CHECK-NEXT: bsl v1.16b, v5.16b, v7.16b
; CHECK-NEXT: ret
@@ -102,42 +90,26 @@ define <64 x i8> @v64i8(<64 x i8> %x, <64 x i8> %y) nounwind {
; CHECK-NEXT: mvn v25.16b, v24.16b
; CHECK-NEXT: bsl v20.16b, v24.16b, v25.16b
; CHECK-NEXT: cmlt v24.16b, v21.16b, #0
+; CHECK-NEXT: cmlt v4.16b, v4.16b, #0
+; CHECK-NEXT: cmgt v0.16b, v0.16b, v16.16b
; CHECK-NEXT: movi v22.16b, #127
; CHECK-NEXT: add v23.16b, v3.16b, v7.16b
; CHECK-NEXT: mvn v25.16b, v24.16b
+; CHECK-NEXT: eor v0.16b, v4.16b, v0.16b
+; CHECK-NEXT: cmlt v4.16b, v5.16b, #0
+; CHECK-NEXT: cmgt v1.16b, v1.16b, v19.16b
; CHECK-NEXT: bsl v22.16b, v24.16b, v25.16b
; CHECK-NEXT: cmlt v24.16b, v23.16b, #0
+; CHECK-NEXT: eor v1.16b, v4.16b, v1.16b
+; CHECK-NEXT: cmlt v4.16b, v6.16b, #0
+; CHECK-NEXT: cmgt v2.16b, v2.16b, v21.16b
; CHECK-NEXT: movi v17.16b, #127
; CHECK-NEXT: mvn v25.16b, v24.16b
+; CHECK-NEXT: eor v2.16b, v4.16b, v2.16b
+; CHECK-NEXT: cmlt v4.16b, v7.16b, #0
+; CHECK-NEXT: cmgt v3.16b, v3.16b, v23.16b
; CHECK-NEXT: bsl v17.16b, v24.16b, v25.16b
-; CHECK-NEXT: cmge v4.16b, v4.16b, #0
-; CHECK-NEXT: cmge v0.16b, v0.16b, #0
-; CHECK-NEXT: cmge v24.16b, v16.16b, #0
-; CHECK-NEXT: cmge v5.16b, v5.16b, #0
-; CHECK-NEXT: cmge v1.16b, v1.16b, #0
-; CHECK-NEXT: cmeq v4.16b, v0.16b, v4.16b
-; CHECK-NEXT: cmeq v0.16b, v0.16b, v24.16b
-; CHECK-NEXT: cmge v24.16b, v19.16b, #0
-; CHECK-NEXT: cmge v6.16b, v6.16b, #0
-; CHECK-NEXT: cmge v2.16b, v2.16b, #0
-; CHECK-NEXT: cmeq v5.16b, v1.16b, v5.16b
-; CHECK-NEXT: cmeq v1.16b, v1.16b, v24.16b
-; CHECK-NEXT: cmge v24.16b, v21.16b, #0
-; CHECK-NEXT: cmge v7.16b, v7.16b, #0
-; CHECK-NEXT: cmge v3.16b, v3.16b, #0
-; CHECK-NEXT: cmeq v6.16b, v2.16b, v6.16b
-; CHECK-NEXT: cmeq v2.16b, v2.16b, v24.16b
-; CHECK-NEXT: cmge v24.16b, v23.16b, #0
-; CHECK-NEXT: cmeq v7.16b, v3.16b, v7.16b
-; CHECK-NEXT: cmeq v3.16b, v3.16b, v24.16b
-; CHECK-NEXT: mvn v0.16b, v0.16b
-; CHECK-NEXT: mvn v1.16b, v1.16b
-; CHECK-NEXT: mvn v2.16b, v2.16b
-; CHECK-NEXT: mvn v3.16b, v3.16b
-; CHECK-NEXT: and v0.16b, v4.16b, v0.16b
-; CHECK-NEXT: and v1.16b, v5.16b, v1.16b
-; CHECK-NEXT: and v2.16b, v6.16b, v2.16b
-; CHECK-NEXT: and v3.16b, v7.16b, v3.16b
+; CHECK-NEXT: eor v3.16b, v4.16b, v3.16b
; CHECK-NEXT: bsl v0.16b, v18.16b, v16.16b
; CHECK-NEXT: bsl v1.16b, v20.16b, v19.16b
; CHECK-NEXT: bsl v2.16b, v22.16b, v21.16b
@@ -151,17 +123,13 @@ define <8 x i16> @v8i16(<8 x i16> %x, <8 x i16> %y) nounwind {
; CHECK-LABEL: v8i16:
; CHECK: // %bb.0:
; CHECK-NEXT: add v2.8h, v0.8h, v1.8h
-; CHECK-NEXT: cmge v1.8h, v1.8h, #0
-; CHECK-NEXT: cmge v0.8h, v0.8h, #0
-; CHECK-NEXT: cmge v5.8h, v2.8h, #0
; CHECK-NEXT: cmlt v4.8h, v2.8h, #0
-; CHECK-NEXT: cmeq v1.8h, v0.8h, v1.8h
-; CHECK-NEXT: cmeq v0.8h, v0.8h, v5.8h
; CHECK-NEXT: mvni v3.8h, #128, lsl #8
+; CHECK-NEXT: cmlt v1.8h, v1.8h, #0
+; CHECK-NEXT: cmgt v0.8h, v0.8h, v2.8h
; CHECK-NEXT: mvn v5.16b, v4.16b
-; CHECK-NEXT: mvn v0.16b, v0.16b
; CHECK-NEXT: bsl v3.16b, v4.16b, v5.16b
-; CHECK-NEXT: and v0.16b, v1.16b, v0.16b
+; CHECK-NEXT: eor v0.16b, v1.16b, v0.16b
; CHECK-NEXT: bsl v0.16b, v3.16b, v2.16b
; CHECK-NEXT: ret
%z = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %x, <8 x i16> %y)
@@ -172,29 +140,21 @@ define <16 x i16> @v16i16(<16 x i16> %x, <16 x i16> %y) nounwind {
; CHECK-LABEL: v16i16:
; CHECK: // %bb.0:
; CHECK-NEXT: add v4.8h, v0.8h, v2.8h
-; CHECK-NEXT: cmlt v16.8h, v4.8h, #0
+; CHECK-NEXT: cmlt v7.8h, v4.8h, #0
; CHECK-NEXT: mvni v6.8h, #128, lsl #8
+; CHECK-NEXT: mvn v16.16b, v7.16b
+; CHECK-NEXT: bsl v6.16b, v7.16b, v16.16b
; CHECK-NEXT: add v7.8h, v1.8h, v3.8h
-; CHECK-NEXT: mvn v17.16b, v16.16b
-; CHECK-NEXT: bsl v6.16b, v16.16b, v17.16b
+; CHECK-NEXT: cmlt v2.8h, v2.8h, #0
+; CHECK-NEXT: cmgt v0.8h, v0.8h, v4.8h
; CHECK-NEXT: cmlt v16.8h, v7.8h, #0
; CHECK-NEXT: mvni v5.8h, #128, lsl #8
-; CHECK-NEXT: mvn v17.16b, v16.16b
-; CHECK-NEXT: bsl v5.16b, v16.16b, v17.16b
-; CHECK-NEXT: cmge v2.8h, v2.8h, #0
-; CHECK-NEXT: cmge v0.8h, v0.8h, #0
-; CHECK-NEXT: cmge v16.8h, v4.8h, #0
-; CHECK-NEXT: cmge v3.8h, v3.8h, #0
-; CHECK-NEXT: cmge v1.8h, v1.8h, #0
-; CHECK-NEXT: cmeq v2.8h, v0.8h, v2.8h
-; CHECK-NEXT: cmeq v0.8h, v0.8h, v16.8h
-; CHECK-NEXT: cmge v16.8h, v7.8h, #0
-; CHECK-NEXT: cmeq v3.8h, v1.8h, v3.8h
-; CHECK-NEXT: cmeq v1.8h, v1.8h, v16.8h
-; CHECK-NEXT: mvn v0.16b, v0.16b
-; CHECK-NEXT: mvn v1.16b, v1.16b
-; CHECK-NEXT: and v0.16b, v2.16b, v0.16b
-; CHECK-NEXT: and v1.16b, v3.16b, v1.16b
+; CHECK-NEXT: cmlt v3.8h, v3.8h, #0
+; CHECK-NEXT: cmgt v1.8h, v1.8h, v7.8h
+; CHECK-NEXT: eor v0.16b, v2.16b, v0.16b
+; CHECK-NEXT: mvn v2.16b, v16.16b
+; CHECK-NEXT: eor v1.16b, v3.16b, v1.16b
+; CHECK-NEXT: bsl v5.16b, v16.16b, v2.16b
; CHECK-NEXT: bsl v0.16b, v6.16b, v4.16b
; CHECK-NEXT: bsl v1.16b, v5.16b, v7.16b
; CHECK-NEXT: ret
@@ -217,42 +177,26 @@ define <32 x i16> @v32i16(<32 x i16> %x, <32 x i16> %y) nounwind {
; CHECK-NEXT: mvn v25.16b, v24.16b
; CHECK-NEXT: bsl v20.16b, v24.16b, v25.16b
; CHECK-NEXT: cmlt v24.8h, v21.8h, #0
+; CHECK-NEXT: cmlt v4.8h, v4.8h, #0
+; CHECK-NEXT: cmgt v0.8h, v0.8h, v16.8h
; CHECK-NEXT: mvni v22.8h, #128, lsl #8
; CHECK-NEXT: add v23.8h, v3.8h, v7.8h
; CHECK-NEXT: mvn v25.16b, v24.16b
+; CHECK-NEXT: eor v0.16b, v4.16b, v0.16b
+; CHECK-NEXT: cmlt v4.8h, v5.8h, #0
+; CHECK-NEXT: cmgt v1.8h, v1.8h, v19.8h
; CHECK-NEXT: bsl v22.16b, v24.16b, v25.16b
; CHECK-NEXT: cmlt v24.8h, v23.8h, #0
+; CHECK-NEXT: eor v1.16b, v4.16b, v1.16b
+; CHECK-NEXT: cmlt v4.8h, v6.8h, #0
+; CHECK-NEXT: cmgt v2.8h, v2.8h, v21.8h
; CHECK-NEXT: mvni v17.8h, #128, lsl #8
; CHECK-NEXT: mvn v25.16b, v24.16b
+; CHECK-NEXT: eor v2.16b, v4.16b, v2.16b
+; CHECK-NEXT: cmlt v4.8h, v7.8h, #0
+; CHECK-NEXT: cmgt v3.8h, v3.8h, v23.8h
; CHECK-NEXT: bsl v17.16b, v24.16b, v25.16b
-; CHECK-NEXT: cmge v4.8h, v4.8h, #0
-; CHECK-NEXT: cmge v0.8h, v0.8h, #0
-; CHECK-NEXT: cmge v24.8h, v16.8h, #0
-; CHECK-NEXT: cmge v5.8h, v5.8h, #0
-; CHECK-NEXT: cmge v1.8h, v1.8h, #0
-; CHECK-NEXT: cmeq v4.8h, v0.8h, v4.8h
-; CHECK-NEXT: cmeq v0.8h, v0.8h, v24.8h
-; CHECK-NEXT: cmge v24.8h, v19.8h, #0
-; CHECK-NEXT: cmge v6.8h, v6.8h, #0
-; CHECK-NEXT: cmge v2.8h, v2.8h, #0
-; CHECK-NEXT: cmeq v5.8h, v1.8h, v5.8h
-; CHECK-NEXT: cmeq v1.8h, v1.8h, v24.8h
-; CHECK-NEXT: cmge v24.8h, v21.8h, #0
-; CHECK-NEXT: cmge v7.8h, v7.8h, #0
-; CHECK-NEXT: cmge v3.8h, v3.8h, #0
-; CHECK-NEXT: cmeq v6.8h, v2.8h, v6.8h
-; CHECK-NEXT: cmeq v2.8h, v2.8h, v24.8h
-; CHECK-NEXT: cmge v24.8h, v23.8h, #0
-; CHECK-NEXT: cmeq v7.8h, v3.8h, v7.8h
-; CHECK-NEXT: cmeq v3.8h, v3.8h, v24.8h
-; CHECK-NEXT: mvn v0.16b, v0.16b
-; CHECK-NEXT: mvn v1.16b, v1.16b
-; CHECK-NEXT: mvn v2.16b, v2.16b
-; CHECK-NEXT: mvn v3.16b, v3.16b
-; CHECK-NEXT: and v0.16b, v4.16b, v0.16b
-; CHECK-NEXT: and v1.16b, v5.16b, v1.16b
-; CHECK-NEXT: and v2.16b, v6.16b, v2.16b
-; CHECK-NEXT: and v3.16b, v7.16b, v3.16b
+; CHECK-NEXT: eor v3.16b, v4.16b, v3.16b
; CHECK-NEXT: bsl v0.16b, v18.16b, v16.16b
; CHECK-NEXT: bsl v1.16b, v20.16b, v19.16b
; CHECK-NEXT: bsl v2.16b, v22.16b, v21.16b
@@ -269,16 +213,12 @@ define void @v8i8(<8 x i8>* %px, <8 x i8>* %py, <8 x i8>* %pz) nounwind {
; CHECK-NEXT: ldr d1, [x1]
; CHECK-NEXT: movi v2.8b, #127
; CHECK-NEXT: add v3.8b, v0.8b, v1.8b
-; CHECK-NEXT: cmge v1.8b, v1.8b, #0
-; CHECK-NEXT: cmge v0.8b, v0.8b, #0
-; CHECK-NEXT: cmge v5.8b, v3.8b, #0
; CHECK-NEXT: cmlt v4.8b, v3.8b, #0
-; CHECK-NEXT: cmeq v1.8b, v0.8b, v1.8b
-; CHECK-NEXT: cmeq v0.8b, v0.8b, v5.8b
+; CHECK-NEXT: cmlt v1.8b, v1.8b, #0
+; CHECK-NEXT: cmgt v0.8b, v0.8b, v3.8b
; CHECK-NEXT: mvn v5.8b, v4.8b
-; CHECK-NEXT: mvn v0.8b, v0.8b
; CHECK-NEXT: bsl v2.8b, v4.8b, v5.8b
-; CHECK-NEXT: and v0.8b, v1.8b, v0.8b
+; CHECK-NEXT: eor v0.8b, v1.8b, v0.8b
; CHECK-NEXT: bsl v0.8b, v2.8b, v3.8b
; CHECK-NEXT: str d0, [x2]
; CHECK-NEXT: ret
@@ -311,17 +251,13 @@ define void @v4i8(<4 x i8>* %px, <4 x i8>* %py, <4 x i8>* %pz) nounwind {
; CHECK-NEXT: shl v1.4h, v1.4h, #8
; CHECK-NEXT: shl v0.4h, v0.4h, #8
; CHECK-NEXT: add v3.4h, v0.4h, v1.4h
-; CHECK-NEXT: cmge v1.4h, v1.4h, #0
-; CHECK-NEXT: cmge v0.4h, v0.4h, #0
-; CHECK-NEXT: cmge v5.4h, v3.4h, #0
; CHECK-NEXT: cmlt v4.4h, v3.4h, #0
-; CHECK-NEXT: cmeq v1.4h, v0.4h, v1.4h
-; CHECK-NEXT: cmeq v0.4h, v0.4h, v5.4h
; CHECK-NEXT: mvni v2.4h, #128, lsl #8
+; CHECK-NEXT: cmlt v1.4h, v1.4h, #0
+; CHECK-NEXT: cmgt v0.4h, v0.4h, v3.4h
; CHECK-NEXT: mvn v5.8b, v4.8b
-; CHECK-NEXT: mvn v0.8b, v0.8b
; CHECK-NEXT: bsl v2.8b, v4.8b, v5.8b
-; CHECK-NEXT: and v0.8b, v1.8b, v0.8b
+; CHECK-NEXT: eor v0.8b, v1.8b, v0.8b
; CHECK-NEXT: bsl v0.8b, v2.8b, v3.8b
; CHECK-NEXT: sshr v0.4h, v0.4h, #8
; CHECK-NEXT: xtn v0.8b, v0.8h
@@ -348,17 +284,13 @@ define void @v2i8(<2 x i8>* %px, <2 x i8>* %py, <2 x i8>* %pz) nounwind {
; CHECK-NEXT: shl v2.2s, v2.2s, #24
; CHECK-NEXT: shl v0.2s, v0.2s, #24
; CHECK-NEXT: add v3.2s, v0.2s, v2.2s
-; CHECK-NEXT: cmge v2.2s, v2.2s, #0
-; CHECK-NEXT: cmge v0.2s, v0.2s, #0
-; CHECK-NEXT: cmge v5.2s, v3.2s, #0
; CHECK-NEXT: cmlt v4.2s, v3.2s, #0
-; CHECK-NEXT: cmeq v2.2s, v0.2s, v2.2s
-; CHECK-NEXT: cmeq v0.2s, v0.2s, v5.2s
; CHECK-NEXT: mvni v1.2s, #128, lsl #24
+; CHECK-NEXT: cmlt v2.2s, v2.2s, #0
+; CHECK-NEXT: cmgt v0.2s, v0.2s, v3.2s
; CHECK-NEXT: mvn v5.8b, v4.8b
-; CHECK-NEXT: mvn v0.8b, v0.8b
+; CHECK-NEXT: eor v0.8b, v2.8b, v0.8b
; CHECK-NEXT: bsl v1.8b, v4.8b, v5.8b
-; CHECK-NEXT: and v0.8b, v2.8b, v0.8b
; CHECK-NEXT: bsl v0.8b, v1.8b, v3.8b
; CHECK-NEXT: ushr v0.2s, v0.2s, #24
; CHECK-NEXT: mov w8, v0.s[1]
@@ -380,16 +312,12 @@ define void @v4i16(<4 x i16>* %px, <4 x i16>* %py, <4 x i16>* %pz) nounwind {
; CHECK-NEXT: ldr d1, [x1]
; CHECK-NEXT: mvni v2.4h, #128, lsl #8
; CHECK-NEXT: add v3.4h, v0.4h, v1.4h
-; CHECK-NEXT: cmge v1.4h, v1.4h, #0
-; CHECK-NEXT: cmge v0.4h, v0.4h, #0
-; CHECK-NEXT: cmge v5.4h, v3.4h, #0
; CHECK-NEXT: cmlt v4.4h, v3.4h, #0
-; CHECK-NEXT: cmeq v1.4h, v0.4h, v1.4h
-; CHECK-NEXT: cmeq v0.4h, v0.4h, v5.4h
+; CHECK-NEXT: cmlt v1.4h, v1.4h, #0
+; CHECK-NEXT: cmgt v0.4h, v0.4h, v3.4h
; CHECK-NEXT: mvn v5.8b, v4.8b
-; CHECK-NEXT: mvn v0.8b, v0.8b
; CHECK-NEXT: bsl v2.8b, v4.8b, v5.8b
-; CHECK-NEXT: and v0.8b, v1.8b, v0.8b
+; CHECK-NEXT: eor v0.8b, v1.8b, v0.8b
; CHECK-NEXT: bsl v0.8b, v2.8b, v3.8b
; CHECK-NEXT: str d0, [x2]
; CHECK-NEXT: ret
@@ -414,17 +342,13 @@ define void @v2i16(<2 x i16>* %px, <2 x i16>* %py, <2 x i16>* %pz) nounwind {
; CHECK-NEXT: shl v2.2s, v2.2s, #16
; CHECK-NEXT: shl v0.2s, v0.2s, #16
; CHECK-NEXT: add v3.2s, v0.2s, v2.2s
-; CHECK-NEXT: cmge v2.2s, v2.2s, #0
-; CHECK-NEXT: cmge v0.2s, v0.2s, #0
-; CHECK-NEXT: cmge v5.2s, v3.2s, #0
; CHECK-NEXT: cmlt v4.2s, v3.2s, #0
-; CHECK-NEXT: cmeq v2.2s, v0.2s, v2.2s
-; CHECK-NEXT: cmeq v0.2s, v0.2s, v5.2s
; CHECK-NEXT: mvni v1.2s, #128, lsl #24
+; CHECK-NEXT: cmlt v2.2s, v2.2s, #0
+; CHECK-NEXT: cmgt v0.2s, v0.2s, v3.2s
; CHECK-NEXT: mvn v5.8b, v4.8b
-; CHECK-NEXT: mvn v0.8b, v0.8b
+; CHECK-NEXT: eor v0.8b, v2.8b, v0.8b
; CHECK-NEXT: bsl v1.8b, v4.8b, v5.8b
-; CHECK-NEXT: and v0.8b, v2.8b, v0.8b
; CHECK-NEXT: bsl v0.8b, v1.8b, v3.8b
; CHECK-NEXT: ushr v0.2s, v0.2s, #16
; CHECK-NEXT: mov w8, v0.s[1]
@@ -443,17 +367,13 @@ define <12 x i8> @v12i8(<12 x i8> %x, <12 x i8> %y) nounwind {
; CHECK-LABEL: v12i8:
; CHECK: // %bb.0:
; CHECK-NEXT: add v2.16b, v0.16b, v1.16b
-; CHECK-NEXT: cmge v1.16b, v1.16b, #0
-; CHECK-NEXT: cmge v0.16b, v0.16b, #0
-; CHECK-NEXT: cmge v5.16b, v2.16b, #0
; CHECK-NEXT: cmlt v4.16b, v2.16b, #0
-; CHECK-NEXT: cmeq v1.16b, v0.16b, v1.16b
-; CHECK-NEXT: cmeq v0.16b, v0.16b, v5.16b
; CHECK-NEXT: movi v3.16b, #127
+; CHECK-NEXT: cmlt v1.16b, v1.16b, #0
+; CHECK-NEXT: cmgt v0.16b, v0.16b, v2.16b
; CHECK-NEXT: mvn v5.16b, v4.16b
-; CHECK-NEXT: mvn v0.16b, v0.16b
; CHECK-NEXT: bsl v3.16b, v4.16b, v5.16b
-; CHECK-NEXT: and v0.16b, v1.16b, v0.16b
+; CHECK-NEXT: eor v0.16b, v1.16b, v0.16b
; CHECK-NEXT: bsl v0.16b, v3.16b, v2.16b
; CHECK-NEXT: ret
%z = call <12 x i8> @llvm.sadd.sat.v12i8(<12 x i8> %x, <12 x i8> %y)
@@ -468,27 +388,19 @@ define void @v12i16(<12 x i16>* %px, <12 x i16>* %py, <12 x i16>* %pz) nounwind
; CHECK-NEXT: mvni v5.8h, #128, lsl #8
; CHECK-NEXT: mvni v4.8h, #128, lsl #8
; CHECK-NEXT: add v6.8h, v1.8h, v2.8h
-; CHECK-NEXT: cmlt v16.8h, v6.8h, #0
+; CHECK-NEXT: cmlt v7.8h, v6.8h, #0
+; CHECK-NEXT: mvn v16.16b, v7.16b
+; CHECK-NEXT: bsl v5.16b, v7.16b, v16.16b
; CHECK-NEXT: add v7.8h, v0.8h, v3.8h
-; CHECK-NEXT: mvn v17.16b, v16.16b
-; CHECK-NEXT: bsl v5.16b, v16.16b, v17.16b
+; CHECK-NEXT: cmlt v2.8h, v2.8h, #0
+; CHECK-NEXT: cmgt v1.8h, v1.8h, v6.8h
; CHECK-NEXT: cmlt v16.8h, v7.8h, #0
-; CHECK-NEXT: mvn v17.16b, v16.16b
-; CHECK-NEXT: bsl v4.16b, v16.16b, v17.16b
-; CHECK-NEXT: cmge v2.8h, v2.8h, #0
-; CHECK-NEXT: cmge v1.8h, v1.8h, #0
-; CHECK-NEXT: cmge v16.8h, v6.8h, #0
-; CHECK-NEXT: cmge v3.8h, v3.8h, #0
-; CHECK-NEXT: cmge v0.8h, v0.8h, #0
-; CHECK-NEXT: cmeq v2.8h, v1.8h, v2.8h
-; CHECK-NEXT: cmeq v1.8h, v1.8h, v16.8h
-; CHECK-NEXT: cmge v16.8h, v7.8h, #0
-; CHECK-NEXT: cmeq v3.8h, v0.8h, v3.8h
-; CHECK-NEXT: cmeq v0.8h, v0.8h, v16.8h
-; CHECK-NEXT: mvn v1.16b, v1.16b
-; CHECK-NEXT: mvn v0.16b, v0.16b
-; CHECK-NEXT: and v1.16b, v2.16b, v1.16b
-; CHECK-NEXT: and v0.16b, v3.16b, v0.16b
+; CHECK-NEXT: cmlt v3.8h, v3.8h, #0
+; CHECK-NEXT: cmgt v0.8h, v0.8h, v7.8h
+; CHECK-NEXT: eor v1.16b, v2.16b, v1.16b
+; CHECK-NEXT: mvn v2.16b, v16.16b
+; CHECK-NEXT: eor v0.16b, v3.16b, v0.16b
+; CHECK-NEXT: bsl v4.16b, v16.16b, v2.16b
; CHECK-NEXT: bsl v1.16b, v5.16b, v6.16b
; CHECK-NEXT: bsl v0.16b, v4.16b, v7.16b
; CHECK-NEXT: str q0, [x2]
@@ -508,16 +420,12 @@ define void @v1i8(<1 x i8>* %px, <1 x i8>* %py, <1 x i8>* %pz) nounwind {
; CHECK-NEXT: ldr b1, [x1]
; CHECK-NEXT: movi v2.8b, #127
; CHECK-NEXT: add v3.8b, v0.8b, v1.8b
-; CHECK-NEXT: cmge v1.8b, v1.8b, #0
-; CHECK-NEXT: cmge v0.8b, v0.8b, #0
-; CHECK-NEXT: cmge v5.8b, v3.8b, #0
; CHECK-NEXT: cmlt v4.8b, v3.8b, #0
-; CHECK-NEXT: cmeq v1.8b, v0.8b, v1.8b
-; CHECK-NEXT: cmeq v0.8b, v0.8b, v5.8b
+; CHECK-NEXT: cmlt v1.8b, v1.8b, #0
+; CHECK-NEXT: cmgt v0.8b, v0.8b, v3.8b
; CHECK-NEXT: mvn v5.8b, v4.8b
-; CHECK-NEXT: mvn v0.8b, v0.8b
; CHECK-NEXT: bsl v2.8b, v4.8b, v5.8b
-; CHECK-NEXT: and v0.8b, v1.8b, v0.8b
+; CHECK-NEXT: eor v0.8b, v1.8b, v0.8b
; CHECK-NEXT: bsl v0.8b, v2.8b, v3.8b
; CHECK-NEXT: st1 { v0.b }[0], [x2]
; CHECK-NEXT: ret
@@ -535,16 +443,12 @@ define void @v1i16(<1 x i16>* %px, <1 x i16>* %py, <1 x i16>* %pz) nounwind {
; CHECK-NEXT: ldr h1, [x1]
; CHECK-NEXT: mvni v2.4h, #128, lsl #8
; CHECK-NEXT: add v3.4h, v0.4h, v1.4h
-; CHECK-NEXT: cmge v1.4h, v1.4h, #0
-; CHECK-NEXT: cmge v0.4h, v0.4h, #0
-; CHECK-NEXT: cmge v5.4h, v3.4h, #0
; CHECK-NEXT: cmlt v4.4h, v3.4h, #0
-; CHECK-NEXT: cmeq v1.4h, v0.4h, v1.4h
-; CHECK-NEXT: cmeq v0.4h, v0.4h, v5.4h
+; CHECK-NEXT: cmlt v1.4h, v1.4h, #0
+; CHECK-NEXT: cmgt v0.4h, v0.4h, v3.4h
; CHECK-NEXT: mvn v5.8b, v4.8b
-; CHECK-NEXT: mvn v0.8b, v0.8b
; CHECK-NEXT: bsl v2.8b, v4.8b, v5.8b
-; CHECK-NEXT: and v0.8b, v1.8b, v0.8b
+; CHECK-NEXT: eor v0.8b, v1.8b, v0.8b
; CHECK-NEXT: bsl v0.8b, v2.8b, v3.8b
; CHECK-NEXT: str h0, [x2]
; CHECK-NEXT: ret
@@ -561,17 +465,13 @@ define <16 x i4> @v16i4(<16 x i4> %x, <16 x i4> %y) nounwind {
; CHECK-NEXT: shl v1.16b, v1.16b, #4
; CHECK-NEXT: shl v0.16b, v0.16b, #4
; CHECK-NEXT: add v3.16b, v0.16b, v1.16b
-; CHECK-NEXT: cmge v1.16b, v1.16b, #0
-; CHECK-NEXT: cmge v0.16b, v0.16b, #0
-; CHECK-NEXT: cmge v5.16b, v3.16b, #0
; CHECK-NEXT: cmlt v4.16b, v3.16b, #0
-; CHECK-NEXT: cmeq v1.16b, v0.16b, v1.16b
-; CHECK-NEXT: cmeq v0.16b, v0.16b, v5.16b
; CHECK-NEXT: movi v2.16b, #127
+; CHECK-NEXT: cmlt v1.16b, v1.16b, #0
+; CHECK-NEXT: cmgt v0.16b, v0.16b, v3.16b
; CHECK-NEXT: mvn v5.16b, v4.16b
-; CHECK-NEXT: mvn v0.16b, v0.16b
; CHECK-NEXT: bsl v2.16b, v4.16b, v5.16b
-; CHECK-NEXT: and v0.16b, v1.16b, v0.16b
+; CHECK-NEXT: eor v0.16b, v1.16b, v0.16b
; CHECK-NEXT: bsl v0.16b, v2.16b, v3.16b
; CHECK-NEXT: sshr v0.16b, v0.16b, #4
; CHECK-NEXT: ret
@@ -585,17 +485,13 @@ define <16 x i1> @v16i1(<16 x i1> %x, <16 x i1> %y) nounwind {
; CHECK-NEXT: shl v1.16b, v1.16b, #7
; CHECK-NEXT: shl v0.16b, v0.16b, #7
; CHECK-NEXT: add v3.16b, v0.16b, v1.16b
-; CHECK-NEXT: cmge v1.16b, v1.16b, #0
-; CHECK-NEXT: cmge v0.16b, v0.16b, #0
-; CHECK-NEXT: cmge v5.16b, v3.16b, #0
; CHECK-NEXT: cmlt v4.16b, v3.16b, #0
-; CHECK-NEXT: cmeq v1.16b, v0.16b, v1.16b
-; CHECK-NEXT: cmeq v0.16b, v0.16b, v5.16b
; CHECK-NEXT: movi v2.16b, #127
+; CHECK-NEXT: cmlt v1.16b, v1.16b, #0
+; CHECK-NEXT: cmgt v0.16b, v0.16b, v3.16b
; CHECK-NEXT: mvn v5.16b, v4.16b
-; CHECK-NEXT: mvn v0.16b, v0.16b
; CHECK-NEXT: bsl v2.16b, v4.16b, v5.16b
-; CHECK-NEXT: and v0.16b, v1.16b, v0.16b
+; CHECK-NEXT: eor v0.16b, v1.16b, v0.16b
; CHECK-NEXT: bsl v0.16b, v2.16b, v3.16b
; CHECK-NEXT: sshr v0.16b, v0.16b, #7
; CHECK-NEXT: ret
@@ -607,17 +503,13 @@ define <2 x i32> @v2i32(<2 x i32> %x, <2 x i32> %y) nounwind {
; CHECK-LABEL: v2i32:
; CHECK: // %bb.0:
; CHECK-NEXT: add v2.2s, v0.2s, v1.2s
-; CHECK-NEXT: cmge v1.2s, v1.2s, #0
-; CHECK-NEXT: cmge v0.2s, v0.2s, #0
-; CHECK-NEXT: cmge v5.2s, v2.2s, #0
; CHECK-NEXT: cmlt v4.2s, v2.2s, #0
-; CHECK-NEXT: cmeq v1.2s, v0.2s, v1.2s
-; CHECK-NEXT: cmeq v0.2s, v0.2s, v5.2s
; CHECK-NEXT: mvni v3.2s, #128, lsl #24
+; CHECK-NEXT: cmlt v1.2s, v1.2s, #0
+; CHECK-NEXT: cmgt v0.2s, v0.2s, v2.2s
; CHECK-NEXT: mvn v5.8b, v4.8b
-; CHECK-NEXT: mvn v0.8b, v0.8b
; CHECK-NEXT: bsl v3.8b, v4.8b, v5.8b
-; CHECK-NEXT: and v0.8b, v1.8b, v0.8b
+; CHECK-NEXT: eor v0.8b, v1.8b, v0.8b
; CHECK-NEXT: bsl v0.8b, v3.8b, v2.8b
; CHECK-NEXT: ret
%z = call <2 x i32> @llvm.sadd.sat.v2i32(<2 x i32> %x, <2 x i32> %y)
@@ -628,17 +520,13 @@ define <4 x i32> @v4i32(<4 x i32> %x, <4 x i32> %y) nounwind {
; CHECK-LABEL: v4i32:
; CHECK: // %bb.0:
; CHECK-NEXT: add v2.4s, v0.4s, v1.4s
-; CHECK-NEXT: cmge v1.4s, v1.4s, #0
-; CHECK-NEXT: cmge v0.4s, v0.4s, #0
-; CHECK-NEXT: cmge v5.4s, v2.4s, #0
; CHECK-NEXT: cmlt v4.4s, v2.4s, #0
-; CHECK-NEXT: cmeq v1.4s, v0.4s, v1.4s
-; CHECK-NEXT: cmeq v0.4s, v0.4s, v5.4s
; CHECK-NEXT: mvni v3.4s, #128, lsl #24
+; CHECK-NEXT: cmlt v1.4s, v1.4s, #0
+; CHECK-NEXT: cmgt v0.4s, v0.4s, v2.4s
; CHECK-NEXT: mvn v5.16b, v4.16b
-; CHECK-NEXT: mvn v0.16b, v0.16b
; CHECK-NEXT: bsl v3.16b, v4.16b, v5.16b
-; CHECK-NEXT: and v0.16b, v1.16b, v0.16b
+; CHECK-NEXT: eor v0.16b, v1.16b, v0.16b
; CHECK-NEXT: bsl v0.16b, v3.16b, v2.16b
; CHECK-NEXT: ret
%z = call <4 x i32> @llvm.sadd.sat.v4i32(<4 x i32> %x, <4 x i32> %y)
@@ -649,29 +537,21 @@ define <8 x i32> @v8i32(<8 x i32> %x, <8 x i32> %y) nounwind {
; CHECK-LABEL: v8i32:
; CHECK: // %bb.0:
; CHECK-NEXT: add v4.4s, v0.4s, v2.4s
-; CHECK-NEXT: cmlt v16.4s, v4.4s, #0
+; CHECK-NEXT: cmlt v7.4s, v4.4s, #0
; CHECK-NEXT: mvni v6.4s, #128, lsl #24
+; CHECK-NEXT: mvn v16.16b, v7.16b
+; CHECK-NEXT: bsl v6.16b, v7.16b, v16.16b
; CHECK-NEXT: add v7.4s, v1.4s, v3.4s
-; CHECK-NEXT: mvn v17.16b, v16.16b
-; CHECK-NEXT: bsl v6.16b, v16.16b, v17.16b
+; CHECK-NEXT: cmlt v2.4s, v2.4s, #0
+; CHECK-NEXT: cmgt v0.4s, v0.4s, v4.4s
; CHECK-NEXT: cmlt v16.4s, v7.4s, #0
; CHECK-NEXT: mvni v5.4s, #128, lsl #24
-; CHECK-NEXT: mvn v17.16b, v16.16b
-; CHECK-NEXT: bsl v5.16b, v16.16b, v17.16b
-; CHECK-NEXT: cmge v2.4s, v2.4s, #0
-; CHECK-NEXT: cmge v0.4s, v0.4s, #0
-; CHECK-NEXT: cmge v16.4s, v4.4s, #0
-; CHECK-NEXT: cmge v3.4s, v3.4s, #0
-; CHECK-NEXT: cmge v1.4s, v1.4s, #0
-; CHECK-NEXT: cmeq v2.4s, v0.4s, v2.4s
-; CHECK-NEXT: cmeq v0.4s, v0.4s, v16.4s
-; CHECK-NEXT: cmge v16.4s, v7.4s, #0
-; CHECK-NEXT: cmeq v3.4s, v1.4s, v3.4s
-; CHECK-NEXT: cmeq v1.4s, v1.4s, v16.4s
-; CHECK-NEXT: mvn v0.16b, v0.16b
-; CHECK-NEXT: mvn v1.16b, v1.16b
-; CHECK-NEXT: and v0.16b, v2.16b, v0.16b
-; CHECK-NEXT: and v1.16b, v3.16b, v1.16b
+; CHECK-NEXT: cmlt v3.4s, v3.4s, #0
+; CHECK-NEXT: cmgt v1.4s, v1.4s, v7.4s
+; CHECK-NEXT: eor v0.16b, v2.16b, v0.16b
+; CHECK-NEXT: mvn v2.16b, v16.16b
+; CHECK-NEXT: eor v1.16b, v3.16b, v1.16b
+; CHECK-NEXT: bsl v5.16b, v16.16b, v2.16b
; CHECK-NEXT: bsl v0.16b, v6.16b, v4.16b
; CHECK-NEXT: bsl v1.16b, v5.16b, v7.16b
; CHECK-NEXT: ret
@@ -694,42 +574,26 @@ define <16 x i32> @v16i32(<16 x i32> %x, <16 x i32> %y) nounwind {
; CHECK-NEXT: mvn v25.16b, v24.16b
; CHECK-NEXT: bsl v20.16b, v24.16b, v25.16b
; CHECK-NEXT: cmlt v24.4s, v21.4s, #0
+; CHECK-NEXT: cmlt v4.4s, v4.4s, #0
+; CHECK-NEXT: cmgt v0.4s, v0.4s, v16.4s
; CHECK-NEXT: mvni v22.4s, #128, lsl #24
; CHECK-NEXT: add v23.4s, v3.4s, v7.4s
; CHECK-NEXT: mvn v25.16b, v24.16b
+; CHECK-NEXT: eor v0.16b, v4.16b, v0.16b
+; CHECK-NEXT: cmlt v4.4s, v5.4s, #0
+; CHECK-NEXT: cmgt v1.4s, v1.4s, v19.4s
; CHECK-NEXT: bsl v22.16b, v24.16b, v25.16b
; CHECK-NEXT: cmlt v24.4s, v23.4s, #0
+; CHECK-NEXT: eor v1.16b, v4.16b, v1.16b
+; CHECK-NEXT: cmlt v4.4s, v6.4s, #0
+; CHECK-NEXT: cmgt v2.4s, v2.4s, v21.4s
; CHECK-NEXT: mvni v17.4s, #128, lsl #24
; CHECK-NEXT: mvn v25.16b, v24.16b
+; CHECK-NEXT: eor v2.16b, v4.16b, v2.16b
+; CHECK-NEXT: cmlt v4.4s, v7.4s, #0
+; CHECK-NEXT: cmgt v3.4s, v3.4s, v23.4s
; CHECK-NEXT: bsl v17.16b, v24.16b, v25.16b
-; CHECK-NEXT: cmge v4.4s, v4.4s, #0
-; CHECK-NEXT: cmge v0.4s, v0.4s, #0
-; CHECK-NEXT: cmge v24.4s, v16.4s, #0
-; CHECK-NEXT: cmge v5.4s, v5.4s, #0
-; CHECK-NEXT: cmge v1.4s, v1.4s, #0
-; CHECK-NEXT: cmeq v4.4s, v0.4s, v4.4s
-; CHECK-NEXT: cmeq v0.4s, v0.4s, v24.4s
-; CHECK-NEXT: cmge v24.4s, v19.4s, #0
-; CHECK-NEXT: cmge v6.4s, v6.4s, #0
-; CHECK-NEXT: cmge v2.4s, v2.4s, #0
-; CHECK-NEXT: cmeq v5.4s, v1.4s, v5.4s
-; CHECK-NEXT: cmeq v1.4s, v1.4s, v24.4s
-; CHECK-NEXT: cmge v24.4s, v21.4s, #0
-; CHECK-NEXT: cmge v7.4s, v7.4s, #0
-; CHECK-NEXT: cmge v3.4s, v3.4s, #0
-; CHECK-NEXT: cmeq v6.4s, v2.4s, v6.4s
-; CHECK-NEXT: cmeq v2.4s, v2.4s, v24.4s
-; CHECK-NEXT: cmge v24.4s, v23.4s, #0
-; CHECK-NEXT: cmeq v7.4s, v3.4s, v7.4s
-; CHECK-NEXT: cmeq v3.4s, v3.4s, v24.4s
-; CHECK-NEXT: mvn v0.16b, v0.16b
-; CHECK-NEXT: mvn v1.16b, v1.16b
-; CHECK-NEXT: mvn v2.16b, v2.16b
-; CHECK-NEXT: mvn v3.16b, v3.16b
-; CHECK-NEXT: and v0.16b, v4.16b, v0.16b
-; CHECK-NEXT: and v1.16b, v5.16b, v1.16b
-; CHECK-NEXT: and v2.16b, v6.16b, v2.16b
-; CHECK-NEXT: and v3.16b, v7.16b, v3.16b
+; CHECK-NEXT: eor v3.16b, v4.16b, v3.16b
; CHECK-NEXT: bsl v0.16b, v18.16b, v16.16b
; CHECK-NEXT: bsl v1.16b, v20.16b, v19.16b
; CHECK-NEXT: bsl v2.16b, v22.16b, v21.16b
@@ -743,18 +607,14 @@ define <2 x i64> @v2i64(<2 x i64> %x, <2 x i64> %y) nounwind {
; CHECK-LABEL: v2i64:
; CHECK: // %bb.0:
; CHECK-NEXT: add v2.2d, v0.2d, v1.2d
-; CHECK-NEXT: cmge v1.2d, v1.2d, #0
-; CHECK-NEXT: cmge v0.2d, v0.2d, #0
-; CHECK-NEXT: cmge v5.2d, v2.2d, #0
; CHECK-NEXT: mov x8, #9223372036854775807
; CHECK-NEXT: cmlt v3.2d, v2.2d, #0
-; CHECK-NEXT: cmeq v1.2d, v0.2d, v1.2d
-; CHECK-NEXT: cmeq v0.2d, v0.2d, v5.2d
+; CHECK-NEXT: cmlt v1.2d, v1.2d, #0
; CHECK-NEXT: dup v4.2d, x8
+; CHECK-NEXT: cmgt v0.2d, v0.2d, v2.2d
; CHECK-NEXT: mvn v5.16b, v3.16b
-; CHECK-NEXT: mvn v0.16b, v0.16b
; CHECK-NEXT: bsl v4.16b, v3.16b, v5.16b
-; CHECK-NEXT: and v0.16b, v1.16b, v0.16b
+; CHECK-NEXT: eor v0.16b, v1.16b, v0.16b
; CHECK-NEXT: bsl v0.16b, v4.16b, v2.16b
; CHECK-NEXT: ret
%z = call <2 x i64> @llvm.sadd.sat.v2i64(<2 x i64> %x, <2 x i64> %y)
@@ -766,31 +626,23 @@ define <4 x i64> @v4i64(<4 x i64> %x, <4 x i64> %y) nounwind {
; CHECK: // %bb.0:
; CHECK-NEXT: add v4.2d, v0.2d, v2.2d
; CHECK-NEXT: mov x8, #9223372036854775807
-; CHECK-NEXT: cmlt v6.2d, v4.2d, #0
-; CHECK-NEXT: dup v7.2d, x8
+; CHECK-NEXT: cmlt v5.2d, v4.2d, #0
+; CHECK-NEXT: dup v6.2d, x8
+; CHECK-NEXT: mvn v7.16b, v5.16b
+; CHECK-NEXT: mov v16.16b, v6.16b
+; CHECK-NEXT: bsl v16.16b, v5.16b, v7.16b
; CHECK-NEXT: add v5.2d, v1.2d, v3.2d
-; CHECK-NEXT: mvn v16.16b, v6.16b
-; CHECK-NEXT: mov v17.16b, v7.16b
-; CHECK-NEXT: bsl v17.16b, v6.16b, v16.16b
-; CHECK-NEXT: cmlt v6.2d, v5.2d, #0
-; CHECK-NEXT: mvn v16.16b, v6.16b
-; CHECK-NEXT: bsl v7.16b, v6.16b, v16.16b
-; CHECK-NEXT: cmge v2.2d, v2.2d, #0
-; CHECK-NEXT: cmge v0.2d, v0.2d, #0
-; CHECK-NEXT: cmge v6.2d, v4.2d, #0
-; CHECK-NEXT: cmge v3.2d, v3.2d, #0
-; CHECK-NEXT: cmge v1.2d, v1.2d, #0
-; CHECK-NEXT: cmeq v2.2d, v0.2d, v2.2d
-; CHECK-NEXT: cmeq v0.2d, v0.2d, v6.2d
-; CHECK-NEXT: cmge v6.2d, v5.2d, #0
-; CHECK-NEXT: cmeq v3.2d, v1.2d, v3.2d
-; CHECK-NEXT: cmeq v1.2d, v1.2d, v6.2d
-; CHECK-NEXT: mvn v0.16b, v0.16b
-; CHECK-NEXT: mvn v1.16b, v1.16b
-; CHECK-NEXT: and v0.16b, v2.16b, v0.16b
-; CHECK-NEXT: and v1.16b, v3.16b, v1.16b
-; CHECK-NEXT: bsl v0.16b, v17.16b, v4.16b
-; CHECK-NEXT: bsl v1.16b, v7.16b, v5.16b
+; CHECK-NEXT: cmlt v2.2d, v2.2d, #0
+; CHECK-NEXT: cmgt v0.2d, v0.2d, v4.2d
+; CHECK-NEXT: cmlt v7.2d, v5.2d, #0
+; CHECK-NEXT: cmlt v3.2d, v3.2d, #0
+; CHECK-NEXT: cmgt v1.2d, v1.2d, v5.2d
+; CHECK-NEXT: eor v0.16b, v2.16b, v0.16b
+; CHECK-NEXT: mvn v2.16b, v7.16b
+; CHECK-NEXT: eor v1.16b, v3.16b, v1.16b
+; CHECK-NEXT: bsl v6.16b, v7.16b, v2.16b
+; CHECK-NEXT: bsl v0.16b, v16.16b, v4.16b
+; CHECK-NEXT: bsl v1.16b, v6.16b, v5.16b
; CHECK-NEXT: ret
%z = call <4 x i64> @llvm.sadd.sat.v4i64(<4 x i64> %x, <4 x i64> %y)
ret <4 x i64> %z
@@ -812,42 +664,26 @@ define <8 x i64> @v8i64(<8 x i64> %x, <8 x i64> %y) nounwind {
; CHECK-NEXT: bsl v25.16b, v20.16b, v24.16b
; CHECK-NEXT: mvn v20.16b, v22.16b
; CHECK-NEXT: mov v24.16b, v21.16b
+; CHECK-NEXT: cmlt v4.2d, v4.2d, #0
+; CHECK-NEXT: cmgt v0.2d, v0.2d, v16.2d
; CHECK-NEXT: add v19.2d, v3.2d, v7.2d
; CHECK-NEXT: bsl v24.16b, v22.16b, v20.16b
; CHECK-NEXT: mvn v20.16b, v23.16b
; CHECK-NEXT: mov v22.16b, v21.16b
+; CHECK-NEXT: eor v0.16b, v4.16b, v0.16b
+; CHECK-NEXT: cmlt v4.2d, v5.2d, #0
+; CHECK-NEXT: cmgt v1.2d, v1.2d, v17.2d
; CHECK-NEXT: bsl v22.16b, v23.16b, v20.16b
; CHECK-NEXT: cmlt v20.2d, v19.2d, #0
+; CHECK-NEXT: eor v1.16b, v4.16b, v1.16b
+; CHECK-NEXT: cmlt v4.2d, v6.2d, #0
+; CHECK-NEXT: cmgt v2.2d, v2.2d, v18.2d
; CHECK-NEXT: mvn v23.16b, v20.16b
+; CHECK-NEXT: eor v2.16b, v4.16b, v2.16b
+; CHECK-NEXT: cmlt v4.2d, v7.2d, #0
+; CHECK-NEXT: cmgt v3.2d, v3.2d, v19.2d
; CHECK-NEXT: bsl v21.16b, v20.16b, v23.16b
-; CHECK-NEXT: cmge v4.2d, v4.2d, #0
-; CHECK-NEXT: cmge v0.2d, v0.2d, #0
-; CHECK-NEXT: cmge v20.2d, v16.2d, #0
-; CHECK-NEXT: cmge v5.2d, v5.2d, #0
-; CHECK-NEXT: cmge v1.2d, v1.2d, #0
-; CHECK-NEXT: cmeq v4.2d, v0.2d, v4.2d
-; CHECK-NEXT: cmeq v0.2d, v0.2d, v20.2d
-; CHECK-NEXT: cmge v20.2d, v17.2d, #0
-; CHECK-NEXT: cmge v6.2d, v6.2d, #0
-; CHECK-NEXT: cmge v2.2d, v2.2d, #0
-; CHECK-NEXT: cmeq v5.2d, v1.2d, v5.2d
-; CHECK-NEXT: cmeq v1.2d, v1.2d, v20.2d
-; CHECK-NEXT: cmge v20.2d, v18.2d, #0
-; CHECK-NEXT: cmge v7.2d, v7.2d, #0
-; CHECK-NEXT: cmge v3.2d, v3.2d, #0
-; CHECK-NEXT: cmeq v6.2d, v2.2d, v6.2d
-; CHECK-NEXT: cmeq v2.2d, v2.2d, v20.2d
-; CHECK-NEXT: cmge v20.2d, v19.2d, #0
-; CHECK-NEXT: cmeq v7.2d, v3.2d, v7.2d
-; CHECK-NEXT: cmeq v3.2d, v3.2d, v20.2d
-; CHECK-NEXT: mvn v0.16b, v0.16b
-; CHECK-NEXT: mvn v1.16b, v1.16b
-; CHECK-NEXT: mvn v2.16b, v2.16b
-; CHECK-NEXT: mvn v3.16b, v3.16b
-; CHECK-NEXT: and v0.16b, v4.16b, v0.16b
-; CHECK-NEXT: and v1.16b, v5.16b, v1.16b
-; CHECK-NEXT: and v2.16b, v6.16b, v2.16b
-; CHECK-NEXT: and v3.16b, v7.16b, v3.16b
+; CHECK-NEXT: eor v3.16b, v4.16b, v3.16b
; CHECK-NEXT: bsl v0.16b, v25.16b, v16.16b
; CHECK-NEXT: bsl v1.16b, v24.16b, v17.16b
; CHECK-NEXT: bsl v2.16b, v22.16b, v18.16b
OpenPOWER on IntegriCloud