52 lines
1.5 KiB
LLVM
52 lines
1.5 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
; RUN: opt -passes=indvars -S %s | FileCheck %s
|
|
|
|
define void @test_phi_select() {
|
|
; CHECK-LABEL: @test_phi_select(
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: br label [[OUTER_HEADER:%.*]]
|
|
; CHECK: outer.header:
|
|
; CHECK-NEXT: br i1 false, label [[THEN:%.*]], label [[MERGE:%.*]]
|
|
; CHECK: then:
|
|
; CHECK-NEXT: br label [[MERGE]]
|
|
; CHECK: merge:
|
|
; CHECK-NEXT: br label [[INNER:%.*]]
|
|
; CHECK: inner:
|
|
; CHECK-NEXT: [[INNER_IV_NEXT:%.*]] = add nsw i64 0, 0
|
|
; CHECK-NEXT: br i1 false, label [[INNER]], label [[OUTER_LATCH:%.*]]
|
|
; CHECK: outer.latch:
|
|
; CHECK-NEXT: br i1 true, label [[EXIT:%.*]], label [[OUTER_HEADER]]
|
|
; CHECK: exit:
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
entry:
|
|
br label %outer.header
|
|
|
|
outer.header:
|
|
%iv = phi i64 [ 0, %entry ], [ %iv.next, %outer.latch ]
|
|
%iv.next.1 = add nsw i64 %iv, 1
|
|
%cmp.0 = icmp sgt i64 %iv, 50
|
|
br i1 %cmp.0, label %then, label %merge
|
|
|
|
then:
|
|
br label %merge
|
|
|
|
merge:
|
|
%iv.sel = phi i64 [ %iv, %outer.header ], [ %iv.next.1, %then ]
|
|
br label %inner
|
|
|
|
inner: ; preds = %inner, %outer.header.new
|
|
%inner.iv = phi i64 [ %iv.sel, %merge ], [ 0, %inner ]
|
|
%inner.iv.next = add nsw i64 0, 0
|
|
%ec.1 = icmp sgt i64 0, 0
|
|
br i1 %ec.1, label %inner, label %outer.latch
|
|
|
|
outer.latch:
|
|
%iv.next = add nuw nsw i64 %iv, 1
|
|
%ec.2 = icmp ult i64 %iv.next, 1000
|
|
br i1 %ec.2, label %exit, label %outer.header
|
|
|
|
exit:
|
|
ret void
|
|
}
|