5
5
; RUN: opt -O3 -rotation-max-header-size=1 -S < %s | FileCheck %s --check-prefixes=HOIST,THR1,FALLBACK2
6
6
; RUN: opt -passes='default<O3>' -rotation-max-header-size=1 -S < %s | FileCheck %s --check-prefixes=HOIST,THR1,FALLBACK3
7
7
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
10
10
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
13
16
14
17
; This example is produced from a very basic C code:
15
18
;
@@ -58,8 +61,8 @@ define void @_Z4loopi(i32 %width) {
58
61
; HOIST-NEXT: br label [[FOR_COND:%.*]]
59
62
; HOIST: for.cond:
60
63
; HOIST-NEXT: [[I_0:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY:%.*]] ], [ 0, [[FOR_COND_PREHEADER]] ]
61
- ; HOIST-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[I_0]], [[TMP0]]
62
64
; HOIST-NEXT: tail call void @f0()
65
+ ; HOIST-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[I_0]], [[TMP0]]
63
66
; HOIST-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]]
64
67
; HOIST: for.cond.cleanup:
65
68
; HOIST-NEXT: tail call void @f2()
@@ -77,17 +80,17 @@ define void @_Z4loopi(i32 %width) {
77
80
; ROTATED_LATER_OLDPM-NEXT: br i1 [[CMP]], label [[RETURN:%.*]], label [[FOR_COND_PREHEADER:%.*]]
78
81
; ROTATED_LATER_OLDPM: for.cond.preheader:
79
82
; ROTATED_LATER_OLDPM-NEXT: [[TMP0:%.*]] = add nsw i32 [[WIDTH]], -1
83
+ ; ROTATED_LATER_OLDPM-NEXT: tail call void @f0()
80
84
; ROTATED_LATER_OLDPM-NEXT: [[EXITCOND_NOT3:%.*]] = icmp eq i32 [[TMP0]], 0
81
85
; ROTATED_LATER_OLDPM-NEXT: br i1 [[EXITCOND_NOT3]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY:%.*]]
82
86
; ROTATED_LATER_OLDPM: for.cond.cleanup:
83
- ; ROTATED_LATER_OLDPM-NEXT: tail call void @f0()
84
87
; ROTATED_LATER_OLDPM-NEXT: tail call void @f2()
85
88
; ROTATED_LATER_OLDPM-NEXT: br label [[RETURN]]
86
89
; ROTATED_LATER_OLDPM: for.body:
87
90
; ROTATED_LATER_OLDPM-NEXT: [[I_04:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 0, [[FOR_COND_PREHEADER]] ]
88
- ; ROTATED_LATER_OLDPM-NEXT: tail call void @f0()
89
91
; ROTATED_LATER_OLDPM-NEXT: tail call void @f1()
90
92
; ROTATED_LATER_OLDPM-NEXT: [[INC]] = add nuw i32 [[I_04]], 1
93
+ ; ROTATED_LATER_OLDPM-NEXT: tail call void @f0()
91
94
; ROTATED_LATER_OLDPM-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC]], [[TMP0]]
92
95
; ROTATED_LATER_OLDPM-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]]
93
96
; ROTATED_LATER_OLDPM: return:
@@ -99,19 +102,19 @@ define void @_Z4loopi(i32 %width) {
99
102
; ROTATED_LATER_NEWPM-NEXT: br i1 [[CMP]], label [[RETURN:%.*]], label [[FOR_COND_PREHEADER:%.*]]
100
103
; ROTATED_LATER_NEWPM: for.cond.preheader:
101
104
; ROTATED_LATER_NEWPM-NEXT: [[TMP0:%.*]] = add nsw i32 [[WIDTH]], -1
105
+ ; ROTATED_LATER_NEWPM-NEXT: tail call void @f0()
102
106
; ROTATED_LATER_NEWPM-NEXT: [[EXITCOND_NOT3:%.*]] = icmp eq i32 [[TMP0]], 0
103
107
; ROTATED_LATER_NEWPM-NEXT: br i1 [[EXITCOND_NOT3]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_COND_PREHEADER_FOR_BODY_CRIT_EDGE:%.*]]
104
108
; ROTATED_LATER_NEWPM: for.cond.preheader.for.body_crit_edge:
105
109
; ROTATED_LATER_NEWPM-NEXT: [[INC_1:%.*]] = add nuw i32 0, 1
106
110
; ROTATED_LATER_NEWPM-NEXT: br label [[FOR_BODY:%.*]]
107
111
; ROTATED_LATER_NEWPM: for.cond.cleanup:
108
- ; ROTATED_LATER_NEWPM-NEXT: tail call void @f0()
109
112
; ROTATED_LATER_NEWPM-NEXT: tail call void @f2()
110
113
; ROTATED_LATER_NEWPM-NEXT: br label [[RETURN]]
111
114
; ROTATED_LATER_NEWPM: for.body:
112
115
; 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()
114
116
; ROTATED_LATER_NEWPM-NEXT: tail call void @f1()
117
+ ; ROTATED_LATER_NEWPM-NEXT: tail call void @f0()
115
118
; ROTATED_LATER_NEWPM-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_PHI]], [[TMP0]]
116
119
; ROTATED_LATER_NEWPM-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY_FOR_BODY_CRIT_EDGE]]
117
120
; ROTATED_LATER_NEWPM: for.body.for.body_crit_edge:
@@ -126,19 +129,19 @@ define void @_Z4loopi(i32 %width) {
126
129
; ROTATE_OLDPM-NEXT: br i1 [[CMP]], label [[RETURN:%.*]], label [[FOR_COND_PREHEADER:%.*]]
127
130
; ROTATE_OLDPM: for.cond.preheader:
128
131
; ROTATE_OLDPM-NEXT: [[CMP13_NOT:%.*]] = icmp eq i32 [[WIDTH]], 1
132
+ ; ROTATE_OLDPM-NEXT: tail call void @f0()
129
133
; ROTATE_OLDPM-NEXT: br i1 [[CMP13_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_PREHEADER:%.*]]
130
134
; ROTATE_OLDPM: for.body.preheader:
131
135
; ROTATE_OLDPM-NEXT: [[TMP0:%.*]] = add nsw i32 [[WIDTH]], -1
132
136
; ROTATE_OLDPM-NEXT: br label [[FOR_BODY:%.*]]
133
137
; ROTATE_OLDPM: for.cond.cleanup:
134
- ; ROTATE_OLDPM-NEXT: tail call void @f0()
135
138
; ROTATE_OLDPM-NEXT: tail call void @f2()
136
139
; ROTATE_OLDPM-NEXT: br label [[RETURN]]
137
140
; ROTATE_OLDPM: for.body:
138
141
; ROTATE_OLDPM-NEXT: [[I_04:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 0, [[FOR_BODY_PREHEADER]] ]
139
- ; ROTATE_OLDPM-NEXT: tail call void @f0()
140
142
; ROTATE_OLDPM-NEXT: tail call void @f1()
141
143
; ROTATE_OLDPM-NEXT: [[INC]] = add nuw nsw i32 [[I_04]], 1
144
+ ; ROTATE_OLDPM-NEXT: tail call void @f0()
142
145
; ROTATE_OLDPM-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC]], [[TMP0]]
143
146
; ROTATE_OLDPM-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]]
144
147
; ROTATE_OLDPM: return:
@@ -150,19 +153,19 @@ define void @_Z4loopi(i32 %width) {
150
153
; ROTATE_NEWPM-NEXT: br i1 [[CMP]], label [[RETURN:%.*]], label [[FOR_COND_PREHEADER:%.*]]
151
154
; ROTATE_NEWPM: for.cond.preheader:
152
155
; ROTATE_NEWPM-NEXT: [[CMP13_NOT:%.*]] = icmp eq i32 [[WIDTH]], 1
156
+ ; ROTATE_NEWPM-NEXT: tail call void @f0()
153
157
; ROTATE_NEWPM-NEXT: br i1 [[CMP13_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_PREHEADER:%.*]]
154
158
; ROTATE_NEWPM: for.body.preheader:
155
159
; ROTATE_NEWPM-NEXT: [[TMP0:%.*]] = add nsw i32 [[WIDTH]], -1
156
160
; ROTATE_NEWPM-NEXT: [[INC_1:%.*]] = add nuw nsw i32 0, 1
157
161
; ROTATE_NEWPM-NEXT: br label [[FOR_BODY:%.*]]
158
162
; ROTATE_NEWPM: for.cond.cleanup:
159
- ; ROTATE_NEWPM-NEXT: tail call void @f0()
160
163
; ROTATE_NEWPM-NEXT: tail call void @f2()
161
164
; ROTATE_NEWPM-NEXT: br label [[RETURN]]
162
165
; ROTATE_NEWPM: for.body:
163
166
; 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()
165
167
; ROTATE_NEWPM-NEXT: tail call void @f1()
168
+ ; ROTATE_NEWPM-NEXT: tail call void @f0()
166
169
; ROTATE_NEWPM-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_PHI]], [[TMP0]]
167
170
; ROTATE_NEWPM-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY_FOR_BODY_CRIT_EDGE]]
168
171
; ROTATE_NEWPM: for.body.for.body_crit_edge:
0 commit comments