@@ -1361,10 +1361,34 @@ declare float @llvm.fmuladd.f32(float, float, float)
1361
1361
; Test case with invariant store where fadd is strict.
1362
1362
define void @reduction_store_to_invariant_address (float * %dst , float * readonly %src ) {
1363
1363
; CHECK-ORDERED-LABEL: @reduction_store_to_invariant_address(
1364
- ; CHECK-ORDERED-NOT: vector.body
1364
+ ; CHECK-ORDERED: entry
1365
+ ; CHECK-ORDERED: %[[DEST_PTR:.*]] = getelementptr inbounds float, float* %dst, i64 42
1366
+ ; CHECK-ORDERED: vector.body
1367
+ ; CHECK-ORDERED: %[[VEC_PHI:.*]] = phi float [ 0.000000e+00, %vector.ph ], [ %[[RDX:.*]], %vector.body ]
1368
+ ; CHECK-ORDERED: %[[LOAD_VEC:.*]] = load <8 x float>, <8 x float>*
1369
+ ; CHECK-ORDERED: %[[RDX:.*]] = call float @llvm.vector.reduce.fadd.v8f32(float %[[VEC_PHI]], <8 x float> %[[LOAD_VEC]])
1370
+ ; CHECK-ORDERED: middle.block
1371
+ ; CHECK-ORDERED: store float %[[RDX]], float* %[[DEST_PTR]]
1372
+ ; CHECK-ORDERED: for.body
1373
+ ; CHECK-ORDERED: %[[LOAD:.*]] = load float, float*
1374
+ ; CHECK-ORDERED: %[[FADD:.*]] = fadd float %{{.*}}, %[[LOAD]]
1375
+ ; CHECK-ORDERED: store float %[[FADD]], float* %[[DEST_PTR]]
1365
1376
1366
1377
; CHECK-UNORDERED-LABEL: @reduction_store_to_invariant_address(
1367
- ; CHECK-UNORDERED-NOT: vector.body
1378
+ ; CHECK-UNORDERED: entry
1379
+ ; CHECK-UNORDERED: %[[DEST_PTR:.*]] = getelementptr inbounds float, float* %dst, i64 42
1380
+ ; CHECK-UNORDERED: vector.body
1381
+ ; CHECK-UNORDERED: %[[VEC_PHI:.*]] = phi <8 x float> [ <float 0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %vector.ph ], [ %[[FADD_VEC:.*]], %vector.body ]
1382
+ ; CHECK-UNORDERED: %[[LOAD_VEC:.*]] = load <8 x float>, <8 x float>*
1383
+ ; CHECK-UNORDERED: %[[FADD_VEC]] = fadd <8 x float> %[[VEC_PHI]], %[[LOAD_VEC]]
1384
+ ; CHECK-UNORDERED-NOT: call float @llvm.vector.reduce.fadd
1385
+ ; CHECK-UNORDERED: middle.block
1386
+ ; CHECK-UNORDERED: %[[RDX:.*]] = call float @llvm.vector.reduce.fadd.v8f32(float -0.000000e+00, <8 x float> %[[FADD_VEC]])
1387
+ ; CHECK-UNORDERED: store float %[[RDX]], float* %[[DEST_PTR]]
1388
+ ; CHECK-UNORDERED: for.body
1389
+ ; CHECK-UNORDERED: %[[LOAD:.*]] = load float, float*
1390
+ ; CHECK-UNORDERED: %[[FADD:.*]] = fadd float {{.*}}, %[[LOAD]]
1391
+ ; CHECK-UNORDERED: store float %[[FADD]], float* %[[DEST_PTR]]
1368
1392
1369
1393
; CHECK-NOT-VECTORIZED-LABEL: @reduction_store_to_invariant_address(
1370
1394
; CHECK-NOT-VECTORIZED-NOT: vector.body
@@ -1383,7 +1407,7 @@ for.body:
1383
1407
store float %add , float * %arrayidx , align 4
1384
1408
%indvars.iv.next = add nuw nsw i64 %indvars.iv , 1
1385
1409
%exitcond = icmp eq i64 %indvars.iv.next , 1000
1386
- br i1 %exitcond , label %for.cond.cleanup , label %for.body
1410
+ br i1 %exitcond , label %for.cond.cleanup , label %for.body , !llvm.loop !0
1387
1411
1388
1412
for.cond.cleanup:
1389
1413
ret void
0 commit comments