1
1
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2
- ; RUN: opt -passes=loop-vectorize -force-vector-width=16 -force-vector-interleave=2 < %s -S -o - | FileCheck %s
2
+ ; RUN: opt -passes=loop-vectorize -S -o - %s | FileCheck %s
3
3
4
4
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
5
5
target triple = "x86_64-pc_linux"
@@ -59,11 +59,11 @@ define void @firstorderrec(ptr nocapture noundef readonly %x, ptr noalias nocapt
59
59
; CHECK: for.cond.cleanup:
60
60
; CHECK-NEXT: ret void
61
61
; CHECK: for.body:
62
- ; CHECK-NEXT: [[SCALAR_RECUR :%.*]] = phi i8 [ [[SCALAR_RECUR_INIT]], [[SCALAR_PH]] ], [ [[TMP16 :%.*]], [[FOR_BODY]] ]
62
+ ; CHECK-NEXT: [[TMP16 :%.*]] = phi i8 [ [[SCALAR_RECUR_INIT]], [[SCALAR_PH]] ], [ [[TMP17 :%.*]], [[FOR_BODY]] ]
63
63
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ]
64
64
; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds i8, ptr [[X]], i64 [[INDVARS_IV]]
65
- ; CHECK-NEXT: [[TMP16 ]] = load i8, ptr [[ARRAYIDX4]], align 1
66
- ; CHECK-NEXT: [[ADD7:%.*]] = add i8 [[TMP16 ]], [[SCALAR_RECUR ]]
65
+ ; CHECK-NEXT: [[TMP17 ]] = load i8, ptr [[ARRAYIDX4]], align 1
66
+ ; CHECK-NEXT: [[ADD7:%.*]] = add i8 [[TMP17 ]], [[TMP16 ]]
67
67
; CHECK-NEXT: [[ARRAYIDX10:%.*]] = getelementptr inbounds i8, ptr [[Y]], i64 [[INDVARS_IV]]
68
68
; CHECK-NEXT: store i8 [[ADD7]], ptr [[ARRAYIDX10]], align 1
69
69
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -163,22 +163,22 @@ define void @thirdorderrec(ptr nocapture noundef readonly %x, ptr noalias nocapt
163
163
; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ [[IND_END]], [[MIDDLE_BLOCK]] ], [ 3, [[FOR_BODY_PREHEADER]] ]
164
164
; CHECK-NEXT: [[SCALAR_RECUR_INIT:%.*]] = phi i8 [ [[VECTOR_RECUR_EXTRACT]], [[MIDDLE_BLOCK]] ], [ [[DOTPRE45]], [[FOR_BODY_PREHEADER]] ]
165
165
; CHECK-NEXT: [[SCALAR_RECUR_INIT8:%.*]] = phi i8 [ [[VECTOR_RECUR_EXTRACT6]], [[MIDDLE_BLOCK]] ], [ [[DOTPRE44]], [[FOR_BODY_PREHEADER]] ]
166
- ; CHECK-NEXT: [[SCALAR_RECUR_INIT10 :%.*]] = phi i8 [ [[VECTOR_RECUR_EXTRACT7]], [[MIDDLE_BLOCK]] ], [ [[DOTPRE]], [[FOR_BODY_PREHEADER]] ]
166
+ ; CHECK-NEXT: [[SCALAR_RECUR_INIT9 :%.*]] = phi i8 [ [[VECTOR_RECUR_EXTRACT7]], [[MIDDLE_BLOCK]] ], [ [[DOTPRE]], [[FOR_BODY_PREHEADER]] ]
167
167
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
168
168
; CHECK: for.cond.cleanup.loopexit:
169
169
; CHECK-NEXT: br label [[FOR_COND_CLEANUP]]
170
170
; CHECK: for.cond.cleanup:
171
171
; CHECK-NEXT: ret void
172
172
; CHECK: for.body:
173
- ; CHECK-NEXT: [[SCALAR_RECUR :%.*]] = phi i8 [ [[SCALAR_RECUR_INIT]], [[SCALAR_PH]] ], [ [[TMP24 :%.*]], [[FOR_BODY]] ]
174
- ; CHECK-NEXT: [[SCALAR_RECUR9 :%.*]] = phi i8 [ [[SCALAR_RECUR_INIT8]], [[SCALAR_PH]] ], [ [[SCALAR_RECUR ]], [[FOR_BODY]] ]
175
- ; CHECK-NEXT: [[SCALAR_RECUR11 :%.*]] = phi i8 [ [[SCALAR_RECUR_INIT10 ]], [[SCALAR_PH]] ], [ [[SCALAR_RECUR9 ]], [[FOR_BODY]] ]
173
+ ; CHECK-NEXT: [[TMP24 :%.*]] = phi i8 [ [[SCALAR_RECUR_INIT]], [[SCALAR_PH]] ], [ [[TMP27 :%.*]], [[FOR_BODY]] ]
174
+ ; CHECK-NEXT: [[TMP25 :%.*]] = phi i8 [ [[SCALAR_RECUR_INIT8]], [[SCALAR_PH]] ], [ [[TMP24 ]], [[FOR_BODY]] ]
175
+ ; CHECK-NEXT: [[TMP26 :%.*]] = phi i8 [ [[SCALAR_RECUR_INIT9 ]], [[SCALAR_PH]] ], [ [[TMP25 ]], [[FOR_BODY]] ]
176
176
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ]
177
- ; CHECK-NEXT: [[ADD8:%.*]] = add i8 [[SCALAR_RECUR9 ]], [[SCALAR_RECUR11 ]]
178
- ; CHECK-NEXT: [[ADD15:%.*]] = add i8 [[ADD8]], [[SCALAR_RECUR ]]
177
+ ; CHECK-NEXT: [[ADD8:%.*]] = add i8 [[TMP25 ]], [[TMP26 ]]
178
+ ; CHECK-NEXT: [[ADD15:%.*]] = add i8 [[ADD8]], [[TMP24 ]]
179
179
; CHECK-NEXT: [[ARRAYIDX18:%.*]] = getelementptr inbounds i8, ptr [[X]], i64 [[INDVARS_IV]]
180
- ; CHECK-NEXT: [[TMP24 ]] = load i8, ptr [[ARRAYIDX18]], align 1
181
- ; CHECK-NEXT: [[ADD21:%.*]] = add i8 [[ADD15]], [[TMP24 ]]
180
+ ; CHECK-NEXT: [[TMP27 ]] = load i8, ptr [[ARRAYIDX18]], align 1
181
+ ; CHECK-NEXT: [[ADD21:%.*]] = add i8 [[ADD15]], [[TMP27 ]]
182
182
; CHECK-NEXT: [[ARRAYIDX24:%.*]] = getelementptr inbounds i8, ptr [[Y]], i64 [[INDVARS_IV]]
183
183
; CHECK-NEXT: store i8 [[ADD21]], ptr [[ARRAYIDX24]], align 1
184
184
; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
@@ -225,31 +225,31 @@ define i64 @test_pr62954_scalar_epilogue_required(ptr %A, ptr noalias %B, ptr %C
225
225
; CHECK-NEXT: [[REC_START:%.*]] = load i64, ptr [[GEP]], align 8
226
226
; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
227
227
; CHECK: vector.ph:
228
- ; CHECK-NEXT: [[VECTOR_RECUR_INIT:%.*]] = insertelement <16 x i64> poison, i64 [[REC_START]], i32 15
228
+ ; CHECK-NEXT: [[VECTOR_RECUR_INIT:%.*]] = insertelement <2 x i64> poison, i64 [[REC_START]], i32 1
229
229
; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
230
230
; CHECK: vector.body:
231
231
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
232
- ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <16 x i64> [ <i64 1, i64 3, i64 5, i64 7, i64 9, i64 11, i64 13, i64 15, i64 17, i64 19, i64 21, i64 23, i64 25, i64 27, i64 29, i64 31 >, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[VECTOR_BODY]] ]
233
- ; CHECK-NEXT: [[VECTOR_RECUR:%.*]] = phi <16 x i64> [ [[VECTOR_RECUR_INIT]], [[VECTOR_PH]] ], [ [[TMP1:%.*]], [[VECTOR_BODY]] ]
234
- ; CHECK-NEXT: [[STEP_ADD:%.*]] = add <16 x i64> [[VEC_IND]], <i64 32 , i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32 >
235
- ; CHECK-NEXT: [[TMP0:%.*]] = sub nsw <16 x i64> zeroinitializer, [[VEC_IND]]
236
- ; CHECK-NEXT: [[TMP1]] = sub nsw <16 x i64> zeroinitializer, [[STEP_ADD]]
237
- ; CHECK-NEXT: [[TMP4 :%.*]] = extractelement <16 x i64> [[TMP1]], i32 15
238
- ; CHECK-NEXT: store i64 [[TMP4 ]], ptr [[GEP]], align 8
239
- ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 32
240
- ; CHECK-NEXT: [[VEC_IND_NEXT]] = add <16 x i64> [[STEP_ADD]], <i64 32 , i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32 >
241
- ; CHECK-NEXT: [[TMP5 :%.*]] = icmp eq i64 [[INDEX_NEXT]], 32
242
- ; CHECK-NEXT: br i1 [[TMP5 ]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
232
+ ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <2 x i64> [ <i64 1, i64 3>, [[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], [[VECTOR_BODY]] ]
233
+ ; CHECK-NEXT: [[VECTOR_RECUR:%.*]] = phi <2 x i64> [ [[VECTOR_RECUR_INIT]], [[VECTOR_PH]] ], [ [[TMP1:%.*]], [[VECTOR_BODY]] ]
234
+ ; CHECK-NEXT: [[STEP_ADD:%.*]] = add <2 x i64> [[VEC_IND]], <i64 4 , i64 4 >
235
+ ; CHECK-NEXT: [[TMP0:%.*]] = sub nsw <2 x i64> zeroinitializer, [[VEC_IND]]
236
+ ; CHECK-NEXT: [[TMP1]] = sub nsw <2 x i64> zeroinitializer, [[STEP_ADD]]
237
+ ; CHECK-NEXT: [[TMP2 :%.*]] = extractelement <2 x i64> [[TMP1]], i32 1
238
+ ; CHECK-NEXT: store i64 [[TMP2 ]], ptr [[GEP]], align 8
239
+ ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
240
+ ; CHECK-NEXT: [[VEC_IND_NEXT]] = add <2 x i64> [[STEP_ADD]], <i64 4 , i64 4 >
241
+ ; CHECK-NEXT: [[TMP3 :%.*]] = icmp eq i64 [[INDEX_NEXT]], 36
242
+ ; CHECK-NEXT: br i1 [[TMP3 ]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
243
243
; CHECK: middle.block:
244
- ; CHECK-NEXT: [[VECTOR_RECUR_EXTRACT:%.*]] = extractelement <16 x i64> [[TMP1]], i32 15
244
+ ; CHECK-NEXT: [[VECTOR_RECUR_EXTRACT:%.*]] = extractelement <2 x i64> [[TMP1]], i32 1
245
245
; CHECK-NEXT: br label [[SCALAR_PH]]
246
246
; CHECK: scalar.ph:
247
- ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 65 , [[MIDDLE_BLOCK]] ], [ 1, [[ENTRY:%.*]] ]
247
+ ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 73 , [[MIDDLE_BLOCK]] ], [ 1, [[ENTRY:%.*]] ]
248
248
; CHECK-NEXT: [[SCALAR_RECUR_INIT:%.*]] = phi i64 [ [[VECTOR_RECUR_EXTRACT]], [[MIDDLE_BLOCK]] ], [ [[REC_START]], [[ENTRY]] ]
249
249
; CHECK-NEXT: br label [[LOOP:%.*]]
250
250
; CHECK: loop:
251
251
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
252
- ; CHECK-NEXT: [[SCALAR_RECUR :%.*]] = phi i64 [ [[SCALAR_RECUR_INIT]], [[SCALAR_PH]] ], [ [[NEG_IV:%.*]], [[LOOP]] ]
252
+ ; CHECK-NEXT: [[FOR :%.*]] = phi i64 [ [[SCALAR_RECUR_INIT]], [[SCALAR_PH]] ], [ [[NEG_IV:%.*]], [[LOOP]] ]
253
253
; CHECK-NEXT: [[GEP_B:%.*]] = getelementptr double, ptr [[B:%.*]], i64 [[IV]]
254
254
; CHECK-NEXT: [[L_B:%.*]] = load double, ptr [[GEP_B]], align 8
255
255
; CHECK-NEXT: [[NEG_IV]] = sub nsw i64 0, [[IV]]
@@ -258,7 +258,7 @@ define i64 @test_pr62954_scalar_epilogue_required(ptr %A, ptr noalias %B, ptr %C
258
258
; CHECK-NEXT: [[EC:%.*]] = icmp ugt i64 [[IV]], 74
259
259
; CHECK-NEXT: br i1 [[EC]], label [[EXIT:%.*]], label [[LOOP]], !llvm.loop [[LOOP7:![0-9]+]]
260
260
; CHECK: exit:
261
- ; CHECK-NEXT: [[DOTIN_LCSSA:%.*]] = phi i64 [ [[SCALAR_RECUR ]], [[LOOP]] ]
261
+ ; CHECK-NEXT: [[DOTIN_LCSSA:%.*]] = phi i64 [ [[FOR ]], [[LOOP]] ]
262
262
; CHECK-NEXT: [[DOTLCSSA:%.*]] = phi double [ [[L_B]], [[LOOP]] ]
263
263
; CHECK-NEXT: store double [[DOTLCSSA]], ptr [[C:%.*]], align 8
264
264
; CHECK-NEXT: ret i64 [[DOTIN_LCSSA]]
0 commit comments