mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-18 10:31:57 +00:00
068acc3caa
SGT exit condition. Essentially, the correct way to flip an inequality in 2's complement is the not operator, not the negation operator. That said, the difference only affects cases involving INT_MIN. Also, enhance the pre-test search logic to be a bit smarter about inequalities flipped with a not operator, so it can eliminate the smax from the iteration count for simple loops. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54184 91177308-0d34-0410-b5e6-96231b3b80d8
28 lines
786 B
LLVM
28 lines
786 B
LLVM
; RUN: llvm-as < %s | opt -analyze -scalar-evolution -disable-output \
|
|
; RUN: -scalar-evolution-max-iterations=0 | \
|
|
; RUN: grep -F "( -1 + ( -1 * %j)) iterations"
|
|
; PR2607
|
|
|
|
define i32 @_Z1aj(i32 %j) nounwind {
|
|
entry:
|
|
icmp sgt i32 0, %j ; <i1>:0 [#uses=1]
|
|
br i1 %0, label %bb.preheader, label %return
|
|
|
|
bb.preheader: ; preds = %entry
|
|
br label %bb
|
|
|
|
bb: ; preds = %bb, %bb.preheader
|
|
%i.01 = phi i32 [ %1, %bb ], [ 0, %bb.preheader ] ; <i32> [#uses=1]
|
|
add i32 %i.01, -1 ; <i32>:1 [#uses=3]
|
|
icmp sgt i32 %1, %j ; <i1>:2 [#uses=1]
|
|
br i1 %2, label %bb, label %return.loopexit
|
|
|
|
return.loopexit: ; preds = %bb
|
|
br label %return
|
|
|
|
return: ; preds = %return.loopexit, %entry
|
|
%i.0.lcssa = phi i32 [ 0, %entry ], [ %1, %return.loopexit ] ; <i32> [#uses=1]
|
|
ret i32 %i.0.lcssa
|
|
}
|
|
|