match(RHS, m_ZExt(m_NUWSub(m_Value(B), m_Specific(A))))))
return new ZExtInst(B, LHS->getType());
+ // zext(A) + sext(A) --> 0 if A is i1
+ if (match(&I, m_c_BinOp(m_ZExt(m_Value(A)), m_SExt(m_Deferred(A)))) &&
+ A->getType()->isIntOrIntVectorTy(1))
+ return replaceInstUsesWith(I, Constant::getNullValue(I.getType()));
+
// A+B --> A|B iff A and B have no bits set in common.
if (haveNoCommonBitsSet(LHS, RHS, DL, &AC, &I, &DT))
return BinaryOperator::CreateOr(LHS, RHS);
define i32 @add_zext_sext_i1(i1 %a) {
; CHECK-LABEL: @add_zext_sext_i1(
-; CHECK-NEXT: [[ZEXT:%.*]] = zext i1 [[A:%.*]] to i32
-; CHECK-NEXT: [[SEXT:%.*]] = sext i1 [[A]] to i32
-; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[ZEXT]], [[SEXT]]
-; CHECK-NEXT: ret i32 [[ADD]]
+; CHECK-NEXT: ret i32 0
;
%zext = zext i1 %a to i32
%sext = sext i1 %a to i32
define i32 @add_sext_zext_i1(i1 %a) {
; CHECK-LABEL: @add_sext_zext_i1(
-; CHECK-NEXT: [[ZEXT:%.*]] = zext i1 [[A:%.*]] to i32
-; CHECK-NEXT: [[SEXT:%.*]] = sext i1 [[A]] to i32
-; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[SEXT]], [[ZEXT]]
-; CHECK-NEXT: ret i32 [[ADD]]
+; CHECK-NEXT: ret i32 0
;
%zext = zext i1 %a to i32
%sext = sext i1 %a to i32
define <2 x i32> @add_zext_sext_i1_vec(<2 x i1> %a) {
; CHECK-LABEL: @add_zext_sext_i1_vec(
-; CHECK-NEXT: [[ZEXT:%.*]] = zext <2 x i1> [[A:%.*]] to <2 x i32>
-; CHECK-NEXT: [[SEXT:%.*]] = sext <2 x i1> [[A]] to <2 x i32>
-; CHECK-NEXT: [[ADD:%.*]] = add nsw <2 x i32> [[ZEXT]], [[SEXT]]
-; CHECK-NEXT: ret <2 x i32> [[ADD]]
+; CHECK-NEXT: ret <2 x i32> zeroinitializer
;
%zext = zext <2 x i1> %a to <2 x i32>
%sext = sext <2 x i1> %a to <2 x i32>
; https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=26716
define i177 @lshr_out_of_range2(i177 %Y, ptr %A2, ptr %ptr) {
; CHECK-LABEL: @lshr_out_of_range2(
+; CHECK-NEXT: [[C8:%.*]] = icmp ne i177 [[Y:%.*]], 0
+; CHECK-NEXT: [[TMP1:%.*]] = sext i1 [[C8]] to i64
+; CHECK-NEXT: [[G18:%.*]] = getelementptr ptr, ptr [[A2:%.*]], i64 [[TMP1]]
+; CHECK-NEXT: store ptr [[G18]], ptr [[PTR:%.*]], align 8
; CHECK-NEXT: ret i177 0
;
%B5 = udiv i177 %Y, -1