bool llvm::isNullOrNullSplat(SDValue N, bool AllowUndefs) {
// TODO: may want to use peekThroughBitcast() here.
- ConstantSDNode *C = isConstOrConstSplat(N, AllowUndefs);
+ ConstantSDNode *C =
+ isConstOrConstSplat(N, AllowUndefs, /*AllowTruncation=*/true);
return C && C->isNullValue();
}
define i32 @reduce_and_v32(<32 x i8> %a0, i32 %a1, i32 %a2) nounwind {
; CHECK-LABEL: reduce_and_v32:
; CHECK: // %bb.0:
-; CHECK-NEXT: cmlt v1.16b, v1.16b, #0
-; CHECK-NEXT: cmlt v0.16b, v0.16b, #0
; CHECK-NEXT: and v0.16b, v0.16b, v1.16b
+; CHECK-NEXT: cmlt v0.16b, v0.16b, #0
; CHECK-NEXT: uminv b0, v0.16b
; CHECK-NEXT: fmov w8, s0
; CHECK-NEXT: tst w8, #0x1
define i32 @reduce_or_v32(<32 x i8> %a0, i32 %a1, i32 %a2) nounwind {
; CHECK-LABEL: reduce_or_v32:
; CHECK: // %bb.0:
-; CHECK-NEXT: cmlt v1.16b, v1.16b, #0
-; CHECK-NEXT: cmlt v0.16b, v0.16b, #0
; CHECK-NEXT: orr v0.16b, v0.16b, v1.16b
+; CHECK-NEXT: cmlt v0.16b, v0.16b, #0
; CHECK-NEXT: umaxv b0, v0.16b
; CHECK-NEXT: fmov w8, s0
; CHECK-NEXT: tst w8, #0x1
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,mf8,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v8, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,mf4,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v8, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,mf2,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v8, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m1,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v8, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m2,ta,mu
; CHECK-NEXT: vmulh.vx v26, v8, a0
-; CHECK-NEXT: vrsub.vi v28, v8, 0
-; CHECK-NEXT: vadd.vv v26, v26, v28
+; CHECK-NEXT: vsub.vv v26, v26, v8
; CHECK-NEXT: vsra.vi v26, v26, 2
; CHECK-NEXT: vsrl.vi v28, v26, 7
; CHECK-NEXT: vadd.vv v8, v26, v28
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m4,ta,mu
; CHECK-NEXT: vmulh.vx v28, v8, a0
-; CHECK-NEXT: vrsub.vi v8, v8, 0
-; CHECK-NEXT: vadd.vv v28, v28, v8
+; CHECK-NEXT: vsub.vv v28, v28, v8
; CHECK-NEXT: vsra.vi v28, v28, 2
; CHECK-NEXT: vsrl.vi v8, v28, 7
; CHECK-NEXT: vadd.vv v8, v28, v8
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m8,ta,mu
; CHECK-NEXT: vmulh.vx v16, v8, a0
-; CHECK-NEXT: vrsub.vi v8, v8, 0
-; CHECK-NEXT: vadd.vv v8, v16, v8
+; CHECK-NEXT: vsub.vv v8, v16, v8
; CHECK-NEXT: vsra.vi v8, v8, 2
; CHECK-NEXT: vsrl.vi v16, v8, 7
; CHECK-NEXT: vadd.vv v8, v8, v16
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,mf8,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v8, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,mf4,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v8, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,mf2,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v8, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m1,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v8, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m2,ta,mu
; CHECK-NEXT: vmulh.vx v26, v8, a0
-; CHECK-NEXT: vrsub.vi v28, v8, 0
-; CHECK-NEXT: vadd.vv v26, v26, v28
+; CHECK-NEXT: vsub.vv v26, v26, v8
; CHECK-NEXT: vsra.vi v26, v26, 2
; CHECK-NEXT: vsrl.vi v28, v26, 7
; CHECK-NEXT: vadd.vv v8, v26, v28
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m4,ta,mu
; CHECK-NEXT: vmulh.vx v28, v8, a0
-; CHECK-NEXT: vrsub.vi v8, v8, 0
-; CHECK-NEXT: vadd.vv v28, v28, v8
+; CHECK-NEXT: vsub.vv v28, v28, v8
; CHECK-NEXT: vsra.vi v28, v28, 2
; CHECK-NEXT: vsrl.vi v8, v28, 7
; CHECK-NEXT: vadd.vv v8, v28, v8
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m8,ta,mu
; CHECK-NEXT: vmulh.vx v16, v8, a0
-; CHECK-NEXT: vrsub.vi v8, v8, 0
-; CHECK-NEXT: vadd.vv v8, v16, v8
+; CHECK-NEXT: vsub.vv v8, v16, v8
; CHECK-NEXT: vsra.vi v8, v8, 2
; CHECK-NEXT: vsrl.vi v16, v8, 7
; CHECK-NEXT: vadd.vv v8, v8, v16
; CHECK-NEXT: addiw a0, a0, -1171
; CHECK-NEXT: vsetvli a1, zero, e32,mf2,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 31
; CHECK-NEXT: vadd.vv v8, v25, v26
; CHECK-NEXT: addiw a0, a0, -1171
; CHECK-NEXT: vsetvli a1, zero, e32,m1,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 31
; CHECK-NEXT: vadd.vv v8, v25, v26
; CHECK-NEXT: addiw a0, a0, -1171
; CHECK-NEXT: vsetvli a1, zero, e32,m2,ta,mu
; CHECK-NEXT: vmulh.vx v26, v8, a0
-; CHECK-NEXT: vrsub.vi v28, v8, 0
-; CHECK-NEXT: vadd.vv v26, v26, v28
+; CHECK-NEXT: vsub.vv v26, v26, v8
; CHECK-NEXT: vsra.vi v26, v26, 2
; CHECK-NEXT: vsrl.vi v28, v26, 31
; CHECK-NEXT: vadd.vv v8, v26, v28
; CHECK-NEXT: addiw a0, a0, -1171
; CHECK-NEXT: vsetvli a1, zero, e32,m4,ta,mu
; CHECK-NEXT: vmulh.vx v28, v8, a0
-; CHECK-NEXT: vrsub.vi v8, v8, 0
-; CHECK-NEXT: vadd.vv v28, v28, v8
+; CHECK-NEXT: vsub.vv v28, v28, v8
; CHECK-NEXT: vsra.vi v28, v28, 2
; CHECK-NEXT: vsrl.vi v8, v28, 31
; CHECK-NEXT: vadd.vv v8, v28, v8
; CHECK-NEXT: addiw a0, a0, -1171
; CHECK-NEXT: vsetvli a1, zero, e32,m8,ta,mu
; CHECK-NEXT: vmulh.vx v16, v8, a0
-; CHECK-NEXT: vrsub.vi v8, v8, 0
-; CHECK-NEXT: vadd.vv v8, v16, v8
+; CHECK-NEXT: vsub.vv v8, v16, v8
; CHECK-NEXT: vsra.vi v8, v8, 2
; CHECK-NEXT: vsrl.vi v16, v8, 31
; CHECK-NEXT: vadd.vv v8, v8, v16
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,mf8,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v25, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,mf4,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v25, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,mf2,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v25, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m1,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v25, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m2,ta,mu
; CHECK-NEXT: vmulh.vx v26, v8, a0
-; CHECK-NEXT: vrsub.vi v28, v8, 0
-; CHECK-NEXT: vadd.vv v26, v26, v28
+; CHECK-NEXT: vsub.vv v26, v26, v8
; CHECK-NEXT: vsra.vi v26, v26, 2
; CHECK-NEXT: vsrl.vi v28, v26, 7
; CHECK-NEXT: vadd.vv v26, v26, v28
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m4,ta,mu
; CHECK-NEXT: vmulh.vx v28, v8, a0
-; CHECK-NEXT: vrsub.vi v12, v8, 0
-; CHECK-NEXT: vadd.vv v28, v28, v12
+; CHECK-NEXT: vsub.vv v28, v28, v8
; CHECK-NEXT: vsra.vi v28, v28, 2
; CHECK-NEXT: vsrl.vi v12, v28, 7
; CHECK-NEXT: vadd.vv v28, v28, v12
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m8,ta,mu
; CHECK-NEXT: vmulh.vx v16, v8, a0
-; CHECK-NEXT: vrsub.vi v24, v8, 0
-; CHECK-NEXT: vadd.vv v16, v16, v24
+; CHECK-NEXT: vsub.vv v16, v16, v8
; CHECK-NEXT: vsra.vi v16, v16, 2
; CHECK-NEXT: vsrl.vi v24, v16, 7
; CHECK-NEXT: vadd.vv v16, v16, v24
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,mf8,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v25, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,mf4,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v25, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,mf2,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v25, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m1,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 7
; CHECK-NEXT: vadd.vv v25, v25, v26
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m2,ta,mu
; CHECK-NEXT: vmulh.vx v26, v8, a0
-; CHECK-NEXT: vrsub.vi v28, v8, 0
-; CHECK-NEXT: vadd.vv v26, v26, v28
+; CHECK-NEXT: vsub.vv v26, v26, v8
; CHECK-NEXT: vsra.vi v26, v26, 2
; CHECK-NEXT: vsrl.vi v28, v26, 7
; CHECK-NEXT: vadd.vv v26, v26, v28
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m4,ta,mu
; CHECK-NEXT: vmulh.vx v28, v8, a0
-; CHECK-NEXT: vrsub.vi v12, v8, 0
-; CHECK-NEXT: vadd.vv v28, v28, v12
+; CHECK-NEXT: vsub.vv v28, v28, v8
; CHECK-NEXT: vsra.vi v28, v28, 2
; CHECK-NEXT: vsrl.vi v12, v28, 7
; CHECK-NEXT: vadd.vv v28, v28, v12
; CHECK-NEXT: addi a0, zero, 109
; CHECK-NEXT: vsetvli a1, zero, e8,m8,ta,mu
; CHECK-NEXT: vmulh.vx v16, v8, a0
-; CHECK-NEXT: vrsub.vi v24, v8, 0
-; CHECK-NEXT: vadd.vv v16, v16, v24
+; CHECK-NEXT: vsub.vv v16, v16, v8
; CHECK-NEXT: vsra.vi v16, v16, 2
; CHECK-NEXT: vsrl.vi v24, v16, 7
; CHECK-NEXT: vadd.vv v16, v16, v24
; CHECK-NEXT: addiw a0, a0, -1171
; CHECK-NEXT: vsetvli a1, zero, e32,mf2,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 31
; CHECK-NEXT: vadd.vv v25, v25, v26
; CHECK-NEXT: addiw a0, a0, -1171
; CHECK-NEXT: vsetvli a1, zero, e32,m1,ta,mu
; CHECK-NEXT: vmulh.vx v25, v8, a0
-; CHECK-NEXT: vrsub.vi v26, v8, 0
-; CHECK-NEXT: vadd.vv v25, v25, v26
+; CHECK-NEXT: vsub.vv v25, v25, v8
; CHECK-NEXT: vsra.vi v25, v25, 2
; CHECK-NEXT: vsrl.vi v26, v25, 31
; CHECK-NEXT: vadd.vv v25, v25, v26
; CHECK-NEXT: addiw a0, a0, -1171
; CHECK-NEXT: vsetvli a1, zero, e32,m2,ta,mu
; CHECK-NEXT: vmulh.vx v26, v8, a0
-; CHECK-NEXT: vrsub.vi v28, v8, 0
-; CHECK-NEXT: vadd.vv v26, v26, v28
+; CHECK-NEXT: vsub.vv v26, v26, v8
; CHECK-NEXT: vsra.vi v26, v26, 2
; CHECK-NEXT: vsrl.vi v28, v26, 31
; CHECK-NEXT: vadd.vv v26, v26, v28
; CHECK-NEXT: addiw a0, a0, -1171
; CHECK-NEXT: vsetvli a1, zero, e32,m4,ta,mu
; CHECK-NEXT: vmulh.vx v28, v8, a0
-; CHECK-NEXT: vrsub.vi v12, v8, 0
-; CHECK-NEXT: vadd.vv v28, v28, v12
+; CHECK-NEXT: vsub.vv v28, v28, v8
; CHECK-NEXT: vsra.vi v28, v28, 2
; CHECK-NEXT: vsrl.vi v12, v28, 31
; CHECK-NEXT: vadd.vv v28, v28, v12
; CHECK-NEXT: addiw a0, a0, -1171
; CHECK-NEXT: vsetvli a1, zero, e32,m8,ta,mu
; CHECK-NEXT: vmulh.vx v16, v8, a0
-; CHECK-NEXT: vrsub.vi v24, v8, 0
-; CHECK-NEXT: vadd.vv v16, v16, v24
+; CHECK-NEXT: vsub.vv v16, v16, v8
; CHECK-NEXT: vsra.vi v16, v16, 2
; CHECK-NEXT: vsrl.vi v24, v16, 31
; CHECK-NEXT: vadd.vv v16, v16, v24