forked from OSchip/llvm-project
[InstCombine] add another test for wrong icmp constant (PR27792)
It doesn't matter if the comparison is unsigned; the inc/dec is always signed. llvm-svn: 269831
This commit is contained in:
parent
12de0b91ac
commit
22b01febd4
|
@ -3150,7 +3150,7 @@ static ICmpInst *canonicalizeCmpWithConstant(ICmpInst &I) {
|
|||
|
||||
// Increment or decrement the constant and set the new comparison predicate:
|
||||
// ULE -> ULT ; UGE -> UGT ; SLE -> SLT ; SGE -> SGT
|
||||
Constant *OneOrNegOne = ConstantInt::get(Op1Type, IsLE ? 1 : -1, IsSigned);
|
||||
Constant *OneOrNegOne = ConstantInt::get(Op1Type, IsLE ? 1 : -1, true);
|
||||
CmpInst::Predicate NewPred = IsLE ? ICmpInst::ICMP_ULT: ICmpInst::ICMP_UGT;
|
||||
NewPred = IsSigned ? ICmpInst::getSignedPredicate(NewPred) : NewPred;
|
||||
return new ICmpInst(NewPred, Op0, ConstantExpr::getAdd(Op1C, OneOrNegOne));
|
||||
|
|
|
@ -2098,7 +2098,7 @@ return: ; preds = %if.end, %entry, %if
|
|||
ret void
|
||||
}
|
||||
|
||||
; When canonicalizing to 'sgt', make sure the constant is correct.
|
||||
; When canonicalizing to 'gt/lt', make sure the constant is correct.
|
||||
|
||||
define i1 @PR27792(i128 %a) {
|
||||
; CHECK-LABEL: @PR27792(
|
||||
|
@ -2109,3 +2109,12 @@ define i1 @PR27792(i128 %a) {
|
|||
ret i1 %cmp
|
||||
}
|
||||
|
||||
define i1 @PR27792_2(i128 %a) {
|
||||
; CHECK-LABEL: @PR27792_2(
|
||||
; CHECK-NEXT: [[B:%.*]] = icmp ne i128 %a, 0
|
||||
; CHECK-NEXT: ret i1 [[B]]
|
||||
;
|
||||
%b = icmp uge i128 %a, 1
|
||||
ret i1 %b
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue