55; RUN: opt -O3 -rotation-max-header-size=1 -S < %s | FileCheck %s --check-prefixes=HOIST,THR1,FALLBACK2
66; RUN: opt -passes='default<O3>' -rotation-max-header-size=1 -S < %s | FileCheck %s --check-prefixes=HOIST,THR1,FALLBACK3
77
8- ; RUN: opt -O3 -rotation-max-header-size=2 -S < %s | FileCheck %s --check-prefixes=ROTATED_LATER,ROTATED_LATER_OLDPM ,FALLBACK4
9- ; RUN: opt -passes='default<O3>' -rotation-max-header-size=2 -S < %s | FileCheck %s --check-prefixes=ROTATED_LATER,ROTATED_LATER_NEWPM ,FALLBACK5
8+ ; RUN: opt -O3 -rotation-max-header-size=2 -S < %s | FileCheck %s --check-prefixes=HOIST,THR2 ,FALLBACK4
9+ ; RUN: opt -passes='default<O3>' -rotation-max-header-size=2 -S < %s | FileCheck %s --check-prefixes=HOIST,THR2 ,FALLBACK5
1010
11- ; RUN: opt -O3 -rotation-max-header-size=3 -S < %s | FileCheck %s --check-prefixes=ROTATE,ROTATE_OLDPM,FALLBACK6
12- ; RUN: opt -passes='default<O3>' -rotation-max-header-size=3 -S < %s | FileCheck %s --check-prefixes=ROTATE,ROTATE_NEWPM,FALLBACK7
11+ ; RUN: opt -O3 -rotation-max-header-size=3 -S < %s | FileCheck %s --check-prefixes=ROTATED_LATER,ROTATED_LATER_OLDPM,FALLBACK6
12+ ; RUN: opt -passes='default<O3>' -rotation-max-header-size=3 -S < %s | FileCheck %s --check-prefixes=ROTATED_LATER,ROTATED_LATER_NEWPM,FALLBACK7
13+
14+ ; RUN: opt -O3 -rotation-max-header-size=4 -S < %s | FileCheck %s --check-prefixes=ROTATE,ROTATE_OLDPM,FALLBACK8
15+ ; RUN: opt -passes='default<O3>' -rotation-max-header-size=4 -S < %s | FileCheck %s --check-prefixes=ROTATE,ROTATE_NEWPM,FALLBACK9
1316
1417; This example is produced from a very basic C code:
1518;
@@ -58,8 +61,8 @@ define void @_Z4loopi(i32 %width) {
5861; HOIST-NEXT: br label [[FOR_COND:%.*]]
5962; HOIST: for.cond:
6063; HOIST-NEXT: [[I_0:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY:%.*]] ], [ 0, [[FOR_COND_PREHEADER]] ]
61- ; HOIST-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[I_0]], [[TMP0]]
6264; HOIST-NEXT: tail call void @f0()
65+ ; HOIST-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[I_0]], [[TMP0]]
6366; HOIST-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]]
6467; HOIST: for.cond.cleanup:
6568; HOIST-NEXT: tail call void @f2()
@@ -77,17 +80,17 @@ define void @_Z4loopi(i32 %width) {
7780; ROTATED_LATER_OLDPM-NEXT: br i1 [[CMP]], label [[RETURN:%.*]], label [[FOR_COND_PREHEADER:%.*]]
7881; ROTATED_LATER_OLDPM: for.cond.preheader:
7982; ROTATED_LATER_OLDPM-NEXT: [[TMP0:%.*]] = add nsw i32 [[WIDTH]], -1
83+ ; ROTATED_LATER_OLDPM-NEXT: tail call void @f0()
8084; ROTATED_LATER_OLDPM-NEXT: [[EXITCOND_NOT3:%.*]] = icmp eq i32 [[TMP0]], 0
8185; ROTATED_LATER_OLDPM-NEXT: br i1 [[EXITCOND_NOT3]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY:%.*]]
8286; ROTATED_LATER_OLDPM: for.cond.cleanup:
83- ; ROTATED_LATER_OLDPM-NEXT: tail call void @f0()
8487; ROTATED_LATER_OLDPM-NEXT: tail call void @f2()
8588; ROTATED_LATER_OLDPM-NEXT: br label [[RETURN]]
8689; ROTATED_LATER_OLDPM: for.body:
8790; ROTATED_LATER_OLDPM-NEXT: [[I_04:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 0, [[FOR_COND_PREHEADER]] ]
88- ; ROTATED_LATER_OLDPM-NEXT: tail call void @f0()
8991; ROTATED_LATER_OLDPM-NEXT: tail call void @f1()
9092; ROTATED_LATER_OLDPM-NEXT: [[INC]] = add nuw i32 [[I_04]], 1
93+ ; ROTATED_LATER_OLDPM-NEXT: tail call void @f0()
9194; ROTATED_LATER_OLDPM-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC]], [[TMP0]]
9295; ROTATED_LATER_OLDPM-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]]
9396; ROTATED_LATER_OLDPM: return:
@@ -99,19 +102,19 @@ define void @_Z4loopi(i32 %width) {
99102; ROTATED_LATER_NEWPM-NEXT: br i1 [[CMP]], label [[RETURN:%.*]], label [[FOR_COND_PREHEADER:%.*]]
100103; ROTATED_LATER_NEWPM: for.cond.preheader:
101104; ROTATED_LATER_NEWPM-NEXT: [[TMP0:%.*]] = add nsw i32 [[WIDTH]], -1
105+ ; ROTATED_LATER_NEWPM-NEXT: tail call void @f0()
102106; ROTATED_LATER_NEWPM-NEXT: [[EXITCOND_NOT3:%.*]] = icmp eq i32 [[TMP0]], 0
103107; ROTATED_LATER_NEWPM-NEXT: br i1 [[EXITCOND_NOT3]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_COND_PREHEADER_FOR_BODY_CRIT_EDGE:%.*]]
104108; ROTATED_LATER_NEWPM: for.cond.preheader.for.body_crit_edge:
105109; ROTATED_LATER_NEWPM-NEXT: [[INC_1:%.*]] = add nuw i32 0, 1
106110; ROTATED_LATER_NEWPM-NEXT: br label [[FOR_BODY:%.*]]
107111; ROTATED_LATER_NEWPM: for.cond.cleanup:
108- ; ROTATED_LATER_NEWPM-NEXT: tail call void @f0()
109112; ROTATED_LATER_NEWPM-NEXT: tail call void @f2()
110113; ROTATED_LATER_NEWPM-NEXT: br label [[RETURN]]
111114; ROTATED_LATER_NEWPM: for.body:
112115; ROTATED_LATER_NEWPM-NEXT: [[INC_PHI:%.*]] = phi i32 [ [[INC_0:%.*]], [[FOR_BODY_FOR_BODY_CRIT_EDGE:%.*]] ], [ [[INC_1]], [[FOR_COND_PREHEADER_FOR_BODY_CRIT_EDGE]] ]
113- ; ROTATED_LATER_NEWPM-NEXT: tail call void @f0()
114116; ROTATED_LATER_NEWPM-NEXT: tail call void @f1()
117+ ; ROTATED_LATER_NEWPM-NEXT: tail call void @f0()
115118; ROTATED_LATER_NEWPM-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_PHI]], [[TMP0]]
116119; ROTATED_LATER_NEWPM-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY_FOR_BODY_CRIT_EDGE]]
117120; ROTATED_LATER_NEWPM: for.body.for.body_crit_edge:
@@ -126,19 +129,19 @@ define void @_Z4loopi(i32 %width) {
126129; ROTATE_OLDPM-NEXT: br i1 [[CMP]], label [[RETURN:%.*]], label [[FOR_COND_PREHEADER:%.*]]
127130; ROTATE_OLDPM: for.cond.preheader:
128131; ROTATE_OLDPM-NEXT: [[CMP13_NOT:%.*]] = icmp eq i32 [[WIDTH]], 1
132+ ; ROTATE_OLDPM-NEXT: tail call void @f0()
129133; ROTATE_OLDPM-NEXT: br i1 [[CMP13_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_PREHEADER:%.*]]
130134; ROTATE_OLDPM: for.body.preheader:
131135; ROTATE_OLDPM-NEXT: [[TMP0:%.*]] = add nsw i32 [[WIDTH]], -1
132136; ROTATE_OLDPM-NEXT: br label [[FOR_BODY:%.*]]
133137; ROTATE_OLDPM: for.cond.cleanup:
134- ; ROTATE_OLDPM-NEXT: tail call void @f0()
135138; ROTATE_OLDPM-NEXT: tail call void @f2()
136139; ROTATE_OLDPM-NEXT: br label [[RETURN]]
137140; ROTATE_OLDPM: for.body:
138141; ROTATE_OLDPM-NEXT: [[I_04:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
139- ; ROTATE_OLDPM-NEXT: tail call void @f0()
140142; ROTATE_OLDPM-NEXT: tail call void @f1()
141143; ROTATE_OLDPM-NEXT: [[INC]] = add nuw nsw i32 [[I_04]], 1
144+ ; ROTATE_OLDPM-NEXT: tail call void @f0()
142145; ROTATE_OLDPM-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC]], [[TMP0]]
143146; ROTATE_OLDPM-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]]
144147; ROTATE_OLDPM: return:
@@ -150,19 +153,19 @@ define void @_Z4loopi(i32 %width) {
150153; ROTATE_NEWPM-NEXT: br i1 [[CMP]], label [[RETURN:%.*]], label [[FOR_COND_PREHEADER:%.*]]
151154; ROTATE_NEWPM: for.cond.preheader:
152155; ROTATE_NEWPM-NEXT: [[CMP13_NOT:%.*]] = icmp eq i32 [[WIDTH]], 1
156+ ; ROTATE_NEWPM-NEXT: tail call void @f0()
153157; ROTATE_NEWPM-NEXT: br i1 [[CMP13_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_PREHEADER:%.*]]
154158; ROTATE_NEWPM: for.body.preheader:
155159; ROTATE_NEWPM-NEXT: [[TMP0:%.*]] = add nsw i32 [[WIDTH]], -1
156160; ROTATE_NEWPM-NEXT: [[INC_1:%.*]] = add nuw nsw i32 0, 1
157161; ROTATE_NEWPM-NEXT: br label [[FOR_BODY:%.*]]
158162; ROTATE_NEWPM: for.cond.cleanup:
159- ; ROTATE_NEWPM-NEXT: tail call void @f0()
160163; ROTATE_NEWPM-NEXT: tail call void @f2()
161164; ROTATE_NEWPM-NEXT: br label [[RETURN]]
162165; ROTATE_NEWPM: for.body:
163166; ROTATE_NEWPM-NEXT: [[INC_PHI:%.*]] = phi i32 [ [[INC_0:%.*]], [[FOR_BODY_FOR_BODY_CRIT_EDGE:%.*]] ], [ [[INC_1]], [[FOR_BODY_PREHEADER]] ]
164- ; ROTATE_NEWPM-NEXT: tail call void @f0()
165167; ROTATE_NEWPM-NEXT: tail call void @f1()
168+ ; ROTATE_NEWPM-NEXT: tail call void @f0()
166169; ROTATE_NEWPM-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_PHI]], [[TMP0]]
167170; ROTATE_NEWPM-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY_FOR_BODY_CRIT_EDGE]]
168171; ROTATE_NEWPM: for.body.for.body_crit_edge:
0 commit comments