Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Summary: During icmp lowering it can happen that a constant value can be larger than expected (see the code around the change). APInt::getMinSignedBits() must be checked again as the shift before can change the constant sign to positive. I'm not sure it is the best fix possible though. Test Plan: Regression test included. Reviewers: resistor, chandlerc, spatel, hfinkel Reviewed By: hfinkel Subscribers: hfinkel, llvm-commits Differential Revision: http://reviews.llvm.org/D9147 llvm-svn: 237812
- Loading branch information
Showing
2 changed files
with
52 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
|
||
; RUN: llc < %s | FileCheck %s | ||
|
||
; CHECK-LABEL: test_ult | ||
define i1 @test_ult(i256 %a) nounwind { | ||
%1 = icmp ult i256 %a, -6432394258550908438 | ||
ret i1 %1 | ||
} | ||
|
||
; CHECK-LABEL: test_ule | ||
define i1 @test_ule(i256 %a) nounwind { | ||
%1 = icmp ule i256 %a, -6432394258550908438 | ||
ret i1 %1 | ||
} | ||
|
||
; CHECK-LABEL: test_ugt | ||
define i1 @test_ugt(i256 %a) nounwind { | ||
%1 = icmp ugt i256 %a, -6432394258550908438 | ||
ret i1 %1 | ||
} | ||
|
||
; CHECK-LABEL: test_uge | ||
define i1 @test_uge(i256 %a) nounwind { | ||
%1 = icmp uge i256 %a, -6432394258550908438 | ||
ret i1 %1 | ||
} | ||
|
||
; CHECK-LABEL: test_slt | ||
define i1 @test_slt(i256 %a) nounwind { | ||
%1 = icmp slt i256 %a, -6432394258550908438 | ||
ret i1 %1 | ||
} | ||
|
||
; CHECK-LABEL: test_sle | ||
define i1 @test_sle(i256 %a) nounwind { | ||
%1 = icmp sle i256 %a, -6432394258550908438 | ||
ret i1 %1 | ||
} | ||
|
||
; CHECK-LABEL: test_sgt | ||
define i1 @test_sgt(i256 %a) nounwind { | ||
%1 = icmp sgt i256 %a, -6432394258550908438 | ||
ret i1 %1 | ||
} | ||
|
||
; CHECK-LABEL: test_sge | ||
define i1 @test_sge(i256 %a) nounwind { | ||
%1 = icmp sge i256 %a, -6432394258550908438 | ||
ret i1 %1 | ||
} |