@@ -59,76 +59,6 @@ return: ; preds = %entry, %sw.bb4, %sw
59
59
ret i32 %retval.0
60
60
}
61
61
62
- ; We should not forward `%m` to 1, as this does not simplify the CFG.
63
- define i32 @forward_one (i32 %m ) {
64
- ; NO_FWD-LABEL: @forward_one(
65
- ; NO_FWD-NEXT: entry:
66
- ; NO_FWD-NEXT: switch i32 [[M:%.*]], label [[SW_BB4:%.*]] [
67
- ; NO_FWD-NEXT: i32 0, label [[RETURN:%.*]]
68
- ; NO_FWD-NEXT: i32 1, label [[SW_BB1:%.*]]
69
- ; NO_FWD-NEXT: i32 2, label [[SW_BB2:%.*]]
70
- ; NO_FWD-NEXT: i32 3, label [[SW_BB3:%.*]]
71
- ; NO_FWD-NEXT: ]
72
- ; NO_FWD: sw.bb1:
73
- ; NO_FWD-NEXT: br label [[RETURN]]
74
- ; NO_FWD: sw.bb2:
75
- ; NO_FWD-NEXT: br label [[RETURN]]
76
- ; NO_FWD: sw.bb3:
77
- ; NO_FWD-NEXT: br label [[RETURN]]
78
- ; NO_FWD: sw.bb4:
79
- ; NO_FWD-NEXT: br label [[RETURN]]
80
- ; NO_FWD: return:
81
- ; NO_FWD-NEXT: [[RETVAL_0:%.*]] = phi i32 [ 4, [[SW_BB4]] ], [ 5, [[SW_BB3]] ], [ 6, [[SW_BB2]] ], [ 1, [[SW_BB1]] ], [ 8, [[ENTRY:%.*]] ]
82
- ; NO_FWD-NEXT: ret i32 [[RETVAL_0]]
83
- ;
84
- ; FWD-LABEL: @forward_one(
85
- ; FWD-NEXT: entry:
86
- ; FWD-NEXT: switch i32 [[M:%.*]], label [[SW_BB4:%.*]] [
87
- ; FWD-NEXT: i32 0, label [[RETURN:%.*]]
88
- ; FWD-NEXT: i32 1, label [[SW_BB1:%.*]]
89
- ; FWD-NEXT: i32 2, label [[SW_BB2:%.*]]
90
- ; FWD-NEXT: i32 3, label [[SW_BB3:%.*]]
91
- ; FWD-NEXT: ]
92
- ; FWD: sw.bb1:
93
- ; FWD-NEXT: br label [[RETURN]]
94
- ; FWD: sw.bb2:
95
- ; FWD-NEXT: br label [[RETURN]]
96
- ; FWD: sw.bb3:
97
- ; FWD-NEXT: br label [[RETURN]]
98
- ; FWD: sw.bb4:
99
- ; FWD-NEXT: br label [[RETURN]]
100
- ; FWD: return:
101
- ; FWD-NEXT: [[RETVAL_0:%.*]] = phi i32 [ 4, [[SW_BB4]] ], [ 5, [[SW_BB3]] ], [ 6, [[SW_BB2]] ], [ 1, [[SW_BB1]] ], [ 8, [[ENTRY:%.*]] ]
102
- ; FWD-NEXT: ret i32 [[RETVAL_0]]
103
- ;
104
- entry:
105
- switch i32 %m , label %sw.bb4 [
106
- i32 0 , label %sw.bb0
107
- i32 1 , label %sw.bb1
108
- i32 2 , label %sw.bb2
109
- i32 3 , label %sw.bb3
110
- ]
111
-
112
- sw.bb0: ; preds = %entry
113
- br label %return
114
-
115
- sw.bb1: ; preds = %entry
116
- br label %return
117
-
118
- sw.bb2: ; preds = %entry
119
- br label %return
120
-
121
- sw.bb3: ; preds = %entry
122
- br label %return
123
-
124
- sw.bb4: ; preds = %entry
125
- br label %return
126
-
127
- return: ; preds = %entry, %sw.bb4, %sw.bb3, %sw.bb2, %sw.bb1
128
- %retval.0 = phi i32 [ 4 , %sw.bb4 ], [ 5 , %sw.bb3 ], [ 6 , %sw.bb2 ], [ 1 , %sw.bb1 ], [ 8 , %sw.bb0 ]
129
- ret i32 %retval.0
130
- }
131
-
132
62
; If 1 incoming phi value is a case constant of a switch, convert it to the switch condition:
133
63
; https://bugs.llvm.org/show_bug.cgi?id=34471
134
64
; This then subsequently should allow squashing of the other trivial case blocks.
@@ -185,60 +115,3 @@ return:
185
115
ret i32 %r
186
116
}
187
117
188
- ; We can replace `[ 1, %bb2 ]` with `[ %arg1, %bb2 ]`.
189
- define { i64 , i64 } @PR95919 (i64 noundef %arg , i64 noundef %arg1 ) {
190
- ; NO_FWD-LABEL: @PR95919(
191
- ; NO_FWD-NEXT: bb:
192
- ; NO_FWD-NEXT: switch i64 [[ARG1:%.*]], label [[BB3:%.*]] [
193
- ; NO_FWD-NEXT: i64 0, label [[BB5:%.*]]
194
- ; NO_FWD-NEXT: i64 1, label [[BB2:%.*]]
195
- ; NO_FWD-NEXT: ]
196
- ; NO_FWD: bb2:
197
- ; NO_FWD-NEXT: br label [[BB5]]
198
- ; NO_FWD: bb3:
199
- ; NO_FWD-NEXT: [[I:%.*]] = udiv i64 [[ARG:%.*]], [[ARG1]]
200
- ; NO_FWD-NEXT: [[I4:%.*]] = shl nuw i64 [[I]], 1
201
- ; NO_FWD-NEXT: br label [[BB5]]
202
- ; NO_FWD: bb5:
203
- ; NO_FWD-NEXT: [[I6:%.*]] = phi i64 [ [[I4]], [[BB3]] ], [ [[ARG]], [[BB2]] ], [ undef, [[BB:%.*]] ]
204
- ; NO_FWD-NEXT: [[I7:%.*]] = phi i64 [ 1, [[BB3]] ], [ 1, [[BB2]] ], [ [[ARG1]], [[BB]] ]
205
- ; NO_FWD-NEXT: [[I8:%.*]] = insertvalue { i64, i64 } poison, i64 [[I7]], 0
206
- ; NO_FWD-NEXT: [[I9:%.*]] = insertvalue { i64, i64 } [[I8]], i64 [[I6]], 1
207
- ; NO_FWD-NEXT: ret { i64, i64 } [[I9]]
208
- ;
209
- ; FWD-LABEL: @PR95919(
210
- ; FWD-NEXT: bb:
211
- ; FWD-NEXT: [[SWITCH:%.*]] = icmp ult i64 [[ARG1:%.*]], 2
212
- ; FWD-NEXT: br i1 [[SWITCH]], label [[BB5:%.*]], label [[BB3:%.*]]
213
- ; FWD: bb3:
214
- ; FWD-NEXT: [[I:%.*]] = udiv i64 [[ARG:%.*]], [[ARG1]]
215
- ; FWD-NEXT: [[I4:%.*]] = shl nuw i64 [[I]], 1
216
- ; FWD-NEXT: br label [[BB5]]
217
- ; FWD: bb5:
218
- ; FWD-NEXT: [[I6:%.*]] = phi i64 [ [[I4]], [[BB3]] ], [ [[ARG]], [[BB:%.*]] ]
219
- ; FWD-NEXT: [[I7:%.*]] = phi i64 [ 1, [[BB3]] ], [ [[ARG1]], [[BB]] ]
220
- ; FWD-NEXT: [[I8:%.*]] = insertvalue { i64, i64 } poison, i64 [[I7]], 0
221
- ; FWD-NEXT: [[I9:%.*]] = insertvalue { i64, i64 } [[I8]], i64 [[I6]], 1
222
- ; FWD-NEXT: ret { i64, i64 } [[I9]]
223
- ;
224
- bb:
225
- switch i64 %arg1 , label %bb3 [
226
- i64 0 , label %bb5
227
- i64 1 , label %bb2
228
- ]
229
-
230
- bb2: ; preds = %bb
231
- br label %bb5
232
-
233
- bb3: ; preds = %bb
234
- %i = udiv i64 %arg , %arg1
235
- %i4 = shl nuw i64 %i , 1
236
- br label %bb5
237
-
238
- bb5: ; preds = %bb3, %bb2, %bb
239
- %i6 = phi i64 [ %i4 , %bb3 ], [ %arg , %bb2 ], [ undef , %bb ]
240
- %i7 = phi i64 [ 1 , %bb3 ], [ 1 , %bb2 ], [ %arg1 , %bb ]
241
- %i8 = insertvalue { i64 , i64 } poison, i64 %i7 , 0
242
- %i9 = insertvalue { i64 , i64 } %i8 , i64 %i6 , 1
243
- ret { i64 , i64 } %i9
244
- }
0 commit comments