}
if (auto *CI = dyn_cast<ConstantInt>(V)) {
- if (CI->isNegative() || CI->uge(MaxConstraintValue))
+ if (CI->uge(MaxConstraintValue))
return {};
- return {{CI->getSExtValue(), nullptr}};
+ return {{CI->getZExtValue(), nullptr}};
}
auto *GEP = dyn_cast<GetElementPtrInst>(V);
if (GEP && GEP->getNumOperands() == 2 && GEP->isInBounds()) {
Value *Op1;
ConstantInt *CI;
- if (match(V, m_NUWAdd(m_Value(Op0), m_ConstantInt(CI))))
- return {{CI->getSExtValue(), nullptr}, {1, Op0}};
+ if (match(V, m_NUWAdd(m_Value(Op0), m_ConstantInt(CI))) &&
+ !CI->uge(MaxConstraintValue))
+ return {{CI->getZExtValue(), nullptr}, {1, Op0}};
if (match(V, m_Add(m_Value(Op0), m_ConstantInt(CI))) && CI->isNegative()) {
Preconditions.emplace_back(
CmpInst::ICMP_UGE, Op0,
; CHECK-NEXT: br i1 [[C_1]], label [[EXIT_1:%.*]], label [[EXIT_2:%.*]]
; CHECK: exit.1:
; CHECK-NEXT: [[C_2:%.*]] = icmp ugt i16 [[A]], 0
-; CHECK-NEXT: ret i1 [[C_2]]
+; CHECK-NEXT: ret i1 false
; CHECK: exit.2:
; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i16 [[A]], 0
-; CHECK-NEXT: ret i1 true
+; CHECK-NEXT: ret i1 [[C_3]]
;
entry:
%neg2 = add nuw i16 %a, -305
; CHECK-NEXT: ret i1 [[C_2]]
; CHECK: exit.2:
; CHECK-NEXT: [[C_3:%.*]] = icmp ugt i64 [[A]], 0
-; CHECK-NEXT: ret i1 true
+; CHECK-NEXT: ret i1 [[C_3]]
;
entry:
%neg2 = add nuw i64 %a, -305
; CHECK: exit.1:
; CHECK-NEXT: [[T_1:%.*]] = icmp ult i8 [[A]], 2
; CHECK-NEXT: [[C_2:%.*]] = icmp ult i8 [[A]], 1
-; CHECK-NEXT: [[RES_1:%.*]] = xor i1 [[T_1]], [[C_2]]
+; CHECK-NEXT: [[RES_1:%.*]] = xor i1 true, [[C_2]]
; CHECK-NEXT: ret i1 [[RES_1]]
; CHECK: exit.2:
; CHECK-NEXT: [[C_3:%.*]] = icmp ult i8 [[A]], 3
; CHECK-NEXT: [[F_1:%.*]] = icmp ult i8 [[A]], 2
-; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[C_3]], [[F_1]]
+; CHECK-NEXT: [[RES_2:%.*]] = xor i1 [[C_3]], false
; CHECK-NEXT: ret i1 [[RES_2]]
;
entry: