@@ -145,98 +145,61 @@ define void @example2(i32 %n, i32 %x) optsize {
145
145
; CHECK: vector.body15:
146
146
; CHECK-NEXT: [[INDEX16:%.*]] = phi i64 [ 0, [[VECTOR_PH9]] ], [ [[INDEX_NEXT29:%.*]], [[PRED_STORE_CONTINUE28:%.*]] ]
147
147
; CHECK-NEXT: [[OFFSET_IDX:%.*]] = add i64 [[I_0_LCSSA]], [[INDEX16]]
148
- ; CHECK-NEXT: [[TMP27:%.*]] = add i64 [[OFFSET_IDX]], 1
149
- ; CHECK-NEXT: [[TMP35:%.*]] = add i64 [[OFFSET_IDX]], 2
150
- ; CHECK-NEXT: [[TMP43:%.*]] = add i64 [[OFFSET_IDX]], 3
151
148
; CHECK-NEXT: [[BROADCAST_SPLATINSERT17:%.*]] = insertelement <4 x i64> poison, i64 [[INDEX16]], i64 0
152
149
; CHECK-NEXT: [[BROADCAST_SPLAT18:%.*]] = shufflevector <4 x i64> [[BROADCAST_SPLATINSERT17]], <4 x i64> poison, <4 x i32> zeroinitializer
153
150
; CHECK-NEXT: [[VEC_IV:%.*]] = or disjoint <4 x i64> [[BROADCAST_SPLAT18]], <i64 0, i64 1, i64 2, i64 3>
154
151
; CHECK-NEXT: [[TMP18:%.*]] = icmp ule <4 x i64> [[VEC_IV]], [[BROADCAST_SPLAT20]]
155
152
; CHECK-NEXT: [[TMP19:%.*]] = extractelement <4 x i1> [[TMP18]], i64 0
156
153
; CHECK-NEXT: br i1 [[TMP19]], label [[PRED_STORE_IF21:%.*]], label [[PRED_STORE_CONTINUE22:%.*]]
157
- ; CHECK: pred.load.if :
154
+ ; CHECK: pred.store.if21 :
158
155
; CHECK-NEXT: [[TMP20:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @b, i64 0, i64 [[OFFSET_IDX]]
159
156
; CHECK-NEXT: [[TMP21:%.*]] = load i32, ptr [[TMP20]], align 4
160
- ; CHECK-NEXT: [[TMP25:%.*]] = insertelement <4 x i32> poison, i32 [[TMP21]], i64 0
161
157
; CHECK-NEXT: [[TMP22:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @c, i64 0, i64 [[OFFSET_IDX]]
162
158
; CHECK-NEXT: [[TMP23:%.*]] = load i32, ptr [[TMP22]], align 4
163
- ; CHECK-NEXT: [[TMP32:%.*]] = insertelement <4 x i32> poison, i32 [[TMP23]], i64 0
159
+ ; CHECK-NEXT: [[TMP24:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @a, i64 0, i64 [[OFFSET_IDX]]
160
+ ; CHECK-NEXT: [[TMP25:%.*]] = and i32 [[TMP23]], [[TMP21]]
161
+ ; CHECK-NEXT: store i32 [[TMP25]], ptr [[TMP24]], align 4
164
162
; CHECK-NEXT: br label [[PRED_STORE_CONTINUE22]]
165
- ; CHECK: pred.load.continue:
166
- ; CHECK-NEXT: [[TMP33:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY15]] ], [ [[TMP25]], [[PRED_STORE_IF21]] ]
167
- ; CHECK-NEXT: [[TMP40:%.*]] = phi <4 x i32> [ poison, [[VECTOR_BODY15]] ], [ [[TMP32]], [[PRED_STORE_IF21]] ]
163
+ ; CHECK: pred.store.continue22:
168
164
; CHECK-NEXT: [[TMP26:%.*]] = extractelement <4 x i1> [[TMP18]], i64 1
169
165
; CHECK-NEXT: br i1 [[TMP26]], label [[PRED_STORE_IF23:%.*]], label [[PRED_STORE_CONTINUE24:%.*]]
170
- ; CHECK: pred.load.if21:
166
+ ; CHECK: pred.store.if23:
167
+ ; CHECK-NEXT: [[TMP27:%.*]] = add i64 [[OFFSET_IDX]], 1
171
168
; CHECK-NEXT: [[TMP28:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @b, i64 0, i64 [[TMP27]]
172
169
; CHECK-NEXT: [[TMP29:%.*]] = load i32, ptr [[TMP28]], align 4
173
- ; CHECK-NEXT: [[TMP41:%.*]] = insertelement <4 x i32> [[TMP33]], i32 [[TMP29]], i64 1
174
170
; CHECK-NEXT: [[TMP30:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @c, i64 0, i64 [[TMP27]]
175
171
; CHECK-NEXT: [[TMP31:%.*]] = load i32, ptr [[TMP30]], align 4
176
- ; CHECK-NEXT: [[TMP51:%.*]] = insertelement <4 x i32> [[TMP40]], i32 [[TMP31]], i64 1
172
+ ; CHECK-NEXT: [[TMP32:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @a, i64 0, i64 [[TMP27]]
173
+ ; CHECK-NEXT: [[TMP33:%.*]] = and i32 [[TMP31]], [[TMP29]]
174
+ ; CHECK-NEXT: store i32 [[TMP33]], ptr [[TMP32]], align 4
177
175
; CHECK-NEXT: br label [[PRED_STORE_CONTINUE24]]
178
- ; CHECK: pred.load.continue22:
179
- ; CHECK-NEXT: [[TMP53:%.*]] = phi <4 x i32> [ [[TMP33]], [[PRED_STORE_CONTINUE22]] ], [ [[TMP41]], [[PRED_STORE_IF23]] ]
180
- ; CHECK-NEXT: [[TMP54:%.*]] = phi <4 x i32> [ [[TMP40]], [[PRED_STORE_CONTINUE22]] ], [ [[TMP51]], [[PRED_STORE_IF23]] ]
176
+ ; CHECK: pred.store.continue24:
181
177
; CHECK-NEXT: [[TMP34:%.*]] = extractelement <4 x i1> [[TMP18]], i64 2
182
178
; CHECK-NEXT: br i1 [[TMP34]], label [[PRED_STORE_IF25:%.*]], label [[PRED_STORE_CONTINUE26:%.*]]
183
- ; CHECK: pred.load.if23:
179
+ ; CHECK: pred.store.if25:
180
+ ; CHECK-NEXT: [[TMP35:%.*]] = add i64 [[OFFSET_IDX]], 2
184
181
; CHECK-NEXT: [[TMP36:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @b, i64 0, i64 [[TMP35]]
185
182
; CHECK-NEXT: [[TMP37:%.*]] = load i32, ptr [[TMP36]], align 4
186
- ; CHECK-NEXT: [[TMP60:%.*]] = insertelement <4 x i32> [[TMP53]], i32 [[TMP37]], i64 2
187
183
; CHECK-NEXT: [[TMP38:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @c, i64 0, i64 [[TMP35]]
188
184
; CHECK-NEXT: [[TMP39:%.*]] = load i32, ptr [[TMP38]], align 4
189
- ; CHECK-NEXT: [[TMP61:%.*]] = insertelement <4 x i32> [[TMP54]], i32 [[TMP39]], i64 2
185
+ ; CHECK-NEXT: [[TMP40:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @a, i64 0, i64 [[TMP35]]
186
+ ; CHECK-NEXT: [[TMP41:%.*]] = and i32 [[TMP39]], [[TMP37]]
187
+ ; CHECK-NEXT: store i32 [[TMP41]], ptr [[TMP40]], align 4
190
188
; CHECK-NEXT: br label [[PRED_STORE_CONTINUE26]]
191
- ; CHECK: pred.load.continue24:
192
- ; CHECK-NEXT: [[TMP71:%.*]] = phi <4 x i32> [ [[TMP53]], [[PRED_STORE_CONTINUE24]] ], [ [[TMP60]], [[PRED_STORE_IF25]] ]
193
- ; CHECK-NEXT: [[TMP72:%.*]] = phi <4 x i32> [ [[TMP54]], [[PRED_STORE_CONTINUE24]] ], [ [[TMP61]], [[PRED_STORE_IF25]] ]
189
+ ; CHECK: pred.store.continue26:
194
190
; CHECK-NEXT: [[TMP42:%.*]] = extractelement <4 x i1> [[TMP18]], i64 3
195
- ; CHECK-NEXT: br i1 [[TMP42]], label [[PRED_LOAD_IF25:%.*]], label [[PRED_LOAD_CONTINUE26:%.*]]
196
- ; CHECK: pred.load.if25:
191
+ ; CHECK-NEXT: br i1 [[TMP42]], label [[PRED_STORE_IF27:%.*]], label [[PRED_STORE_CONTINUE28]]
192
+ ; CHECK: pred.store.if27:
193
+ ; CHECK-NEXT: [[TMP43:%.*]] = add i64 [[OFFSET_IDX]], 3
197
194
; CHECK-NEXT: [[TMP44:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @b, i64 0, i64 [[TMP43]]
198
195
; CHECK-NEXT: [[TMP45:%.*]] = load i32, ptr [[TMP44]], align 4
199
- ; CHECK-NEXT: [[TMP52:%.*]] = insertelement <4 x i32> [[TMP71]], i32 [[TMP45]], i64 3
200
196
; CHECK-NEXT: [[TMP46:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @c, i64 0, i64 [[TMP43]]
201
197
; CHECK-NEXT: [[TMP47:%.*]] = load i32, ptr [[TMP46]], align 4
202
- ; CHECK-NEXT: [[TMP55:%.*]] = insertelement <4 x i32> [[TMP72]], i32 [[TMP47]], i64 3
203
- ; CHECK-NEXT: br label [[PRED_LOAD_CONTINUE26]]
204
- ; CHECK: pred.load.continue26:
205
- ; CHECK-NEXT: [[TMP56:%.*]] = phi <4 x i32> [ [[TMP71]], [[PRED_STORE_CONTINUE26]] ], [ [[TMP52]], [[PRED_LOAD_IF25]] ]
206
- ; CHECK-NEXT: [[TMP57:%.*]] = phi <4 x i32> [ [[TMP72]], [[PRED_STORE_CONTINUE26]] ], [ [[TMP55]], [[PRED_LOAD_IF25]] ]
207
- ; CHECK-NEXT: [[TMP58:%.*]] = and <4 x i32> [[TMP57]], [[TMP56]]
208
- ; CHECK-NEXT: [[TMP59:%.*]] = extractelement <4 x i1> [[TMP18]], i64 0
209
- ; CHECK-NEXT: br i1 [[TMP59]], label [[PRED_STORE_IF27:%.*]], label [[PRED_STORE_CONTINUE29:%.*]]
210
- ; CHECK: pred.store.if27:
211
- ; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @a, i64 0, i64 [[OFFSET_IDX]]
212
- ; CHECK-NEXT: [[TMP49:%.*]] = extractelement <4 x i32> [[TMP58]], i64 0
198
+ ; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @a, i64 0, i64 [[TMP43]]
199
+ ; CHECK-NEXT: [[TMP49:%.*]] = and i32 [[TMP47]], [[TMP45]]
213
200
; CHECK-NEXT: store i32 [[TMP49]], ptr [[TMP48]], align 4
214
- ; CHECK-NEXT: br label [[PRED_STORE_CONTINUE29]]
215
- ; CHECK: pred.store.continue28:
216
- ; CHECK-NEXT: [[TMP62:%.*]] = extractelement <4 x i1> [[TMP18]], i64 1
217
- ; CHECK-NEXT: br i1 [[TMP62]], label [[PRED_STORE_IF29:%.*]], label [[PRED_STORE_CONTINUE30:%.*]]
218
- ; CHECK: pred.store.if29:
219
- ; CHECK-NEXT: [[TMP63:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @a, i64 0, i64 [[TMP27]]
220
- ; CHECK-NEXT: [[TMP64:%.*]] = extractelement <4 x i32> [[TMP58]], i64 1
221
- ; CHECK-NEXT: store i32 [[TMP64]], ptr [[TMP63]], align 4
222
- ; CHECK-NEXT: br label [[PRED_STORE_CONTINUE30]]
223
- ; CHECK: pred.store.continue30:
224
- ; CHECK-NEXT: [[TMP65:%.*]] = extractelement <4 x i1> [[TMP18]], i64 2
225
- ; CHECK-NEXT: br i1 [[TMP65]], label [[PRED_STORE_IF31:%.*]], label [[PRED_STORE_CONTINUE32:%.*]]
226
- ; CHECK: pred.store.if31:
227
- ; CHECK-NEXT: [[TMP66:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @a, i64 0, i64 [[TMP35]]
228
- ; CHECK-NEXT: [[TMP67:%.*]] = extractelement <4 x i32> [[TMP58]], i64 2
229
- ; CHECK-NEXT: store i32 [[TMP67]], ptr [[TMP66]], align 4
230
- ; CHECK-NEXT: br label [[PRED_STORE_CONTINUE32]]
231
- ; CHECK: pred.store.continue32:
232
- ; CHECK-NEXT: [[TMP68:%.*]] = extractelement <4 x i1> [[TMP18]], i64 3
233
- ; CHECK-NEXT: br i1 [[TMP68]], label [[PRED_STORE_IF33:%.*]], label [[PRED_STORE_CONTINUE28]]
234
- ; CHECK: pred.store.if33:
235
- ; CHECK-NEXT: [[TMP69:%.*]] = getelementptr inbounds nuw [2048 x i32], ptr @a, i64 0, i64 [[TMP43]]
236
- ; CHECK-NEXT: [[TMP70:%.*]] = extractelement <4 x i32> [[TMP58]], i64 3
237
- ; CHECK-NEXT: store i32 [[TMP70]], ptr [[TMP69]], align 4
238
201
; CHECK-NEXT: br label [[PRED_STORE_CONTINUE28]]
239
- ; CHECK: pred.store.continue34 :
202
+ ; CHECK: pred.store.continue28 :
240
203
; CHECK-NEXT: [[INDEX_NEXT29]] = add nuw i64 [[INDEX16]], 4
241
204
; CHECK-NEXT: [[TMP50:%.*]] = icmp eq i64 [[INDEX_NEXT29]], [[N_VEC12]]
242
205
; CHECK-NEXT: br i1 [[TMP50]], label [[MIDDLE_BLOCK7:%.*]], label [[VECTOR_BODY15]], !llvm.loop [[LOOP5:![0-9]+]]
0 commit comments