[InstSimplify] add nuw %x, C2 must be at least C2

Use the fact that add nuw always creates a larger bit pattern when
trying to simplify comparisons.

llvm-svn: 245638
This commit is contained in:
David Majnemer 2015-08-20 23:01:41 +00:00
parent da32a86341
commit 2df38cd0c4
2 changed files with 11 additions and 0 deletions

View File

@ -2360,6 +2360,9 @@ static Value *SimplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS,
} else if (match(LHS, m_And(m_Value(), m_ConstantInt(CI2)))) {
// 'and x, CI2' produces [0, CI2].
Upper = CI2->getValue() + 1;
} else if (match(LHS, m_NUWAdd(m_Value(), m_ConstantInt(CI2)))) {
// 'add nuw x, CI2' produces [CI2, UINT_MAX].
Lower = CI2->getValue();
}
if (Lower != Upper) {
ConstantRange LHS_CR = ConstantRange(Lower, Upper);

View File

@ -1164,3 +1164,11 @@ define i1 @tautological8(i32 %A, i32 %B) {
; CHECK-LABEL: @tautological8(
; CHECK: ret i1 false
}
define i1 @tautological9(i32 %x) {
%add = add nuw i32 %x, 13
%cmp = icmp ne i32 %add, 12
ret i1 %cmp
; CHECK-LABEL: @tautological9(
; CHECK: ret i1 true
}