forked from OSchip/llvm-project
42 lines
1.3 KiB
LLVM
42 lines
1.3 KiB
LLVM
; PR28705
|
|
; RUN: opt < %s -indvars -S | FileCheck %s
|
|
|
|
; Check IndVarSimplify replaces the exitval use of the induction var "%inc.i.i"
|
|
; with "%.sroa.speculated + 1".
|
|
;
|
|
; CHECK-LABEL: @foo(
|
|
; CHECK: %[[EXIT:.+]] = sub i32 %.sroa.speculated, -1
|
|
; CHECK: %DB.sroa.9.0.lcssa = phi i32 [ 1, %entry ], [ %[[EXIT]], %loopexit ]
|
|
;
|
|
define void @foo(i32 %sub.ptr.div.i, i8* %ref.i1174) local_unnamed_addr {
|
|
entry:
|
|
%cmp.i1137 = icmp ugt i32 %sub.ptr.div.i, 3
|
|
%.sroa.speculated = select i1 %cmp.i1137, i32 3, i32 %sub.ptr.div.i
|
|
%cmp6483126 = icmp eq i32 %.sroa.speculated, 0
|
|
br i1 %cmp6483126, label %XZ.exit, label %for.body650.lr.ph
|
|
|
|
for.body650.lr.ph:
|
|
br label %for.body650
|
|
|
|
loopexit:
|
|
%inc.i.i.lcssa = phi i32 [ %inc.i.i, %for.body650 ]
|
|
br label %XZ.exit
|
|
|
|
XZ.exit:
|
|
%DB.sroa.9.0.lcssa = phi i32 [ 1, %entry ], [ %inc.i.i.lcssa, %loopexit ]
|
|
br label %end
|
|
|
|
for.body650:
|
|
%iv = phi i32 [ 0, %for.body650.lr.ph ], [ %inc655, %for.body650 ]
|
|
%iv2 = phi i32 [ 1, %for.body650.lr.ph ], [ %inc.i.i, %for.body650 ]
|
|
%arrayidx.i.i1105 = getelementptr inbounds i8, i8* %ref.i1174, i32 %iv2
|
|
store i8 7, i8* %arrayidx.i.i1105, align 1
|
|
%inc.i.i = add i32 %iv2, 1
|
|
%inc655 = add i32 %iv, 1
|
|
%cmp648 = icmp eq i32 %inc655, %.sroa.speculated
|
|
br i1 %cmp648, label %loopexit, label %for.body650
|
|
|
|
end:
|
|
ret void
|
|
}
|