llvm-project/llvm/test/Transforms/LoopSimplifyCFG/merge-header.ll

36 lines
1.0 KiB
LLVM

; RUN: opt -S -loop-simplifycfg < %s | FileCheck %s
; RUN: opt -S -passes='require<domtree>,loop(simplify-cfg)' < %s | FileCheck %s
; CHECK-LABEL: foo
; CHECK: entry:
; CHECK-NEXT: br label %[[LOOP:[a-z]+]]
; CHECK: [[LOOP]]:
; CHECK-NEXT: phi
; CHECK-NOT: br label
; CHECK: br i1
define i32 @foo(i32* %P, i64* %Q) {
entry:
br label %outer
outer: ; preds = %outer.latch2, %entry
%y.2 = phi i32 [ 0, %entry ], [ %y.inc2, %outer.latch2 ]
br label %inner
inner: ; preds = %outer
store i32 0, i32* %P
store i32 1, i32* %P
store i32 2, i32* %P
%y.inc2 = add nsw i32 %y.2, 1
%exitcond.outer = icmp eq i32 %y.inc2, 3
store i32 %y.2, i32* %P
br i1 %exitcond.outer, label %exit, label %outer.latch2
outer.latch2: ; preds = %inner
%t = sext i32 %y.inc2 to i64
store i64 %t, i64* %Q
br label %outer
exit: ; preds = %inner
ret i32 0
}