xref: /llvm-project/llvm/test/Transforms/LoopFusion/hoist_preheader.ll (revision 27291c1e70aa0e34e297ec4913a60274f32a199f)
1; RUN: opt -S -passes=loop-fusion < %s | FileCheck %s
2
3define void @hoist_preheader(i32 %N) {
4
5; CHECK:pre1:
6; CHECK-NEXT:  %hoistme = add i32 1, %N
7; CHECK-NEXT:  %hoistme2 = add i32 1, %hoistme
8; CHECK-NEXT:  br label %body1
9pre1:
10  br label %body1
11
12; CHECK: body1:
13; CHECK-NOT:  %hoistme
14body1:  ; preds = %pre1, %body1
15  %i = phi i32 [%i_next, %body1], [0, %pre1]
16  %i_next = add i32 1, %i
17  %cond = icmp ne i32 %i, %N
18  br i1 %cond, label %body1, label %pre2
19
20pre2:
21  %hoistme = add i32 1, %N
22  %hoistme2 = add i32 1, %hoistme
23  br label %body2
24
25body2:  ; preds = %pre2, %body2
26  %i2 = phi i32 [%i_next2, %body2], [0, %pre2]
27  %i_next2 = add i32 1, %i2
28  %cond2 = icmp ne i32 %i2, %N
29  br i1 %cond2, label %body2, label %exit
30
31exit:
32  ret void
33}
34