1- ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2- ; RUN: opt < %s -mtriple=riscv64 -mattr=+v -p loop-vectorize -pass-remarks-analysis=loop-vectorize -S | FileCheck %s
1+ ; RUN: opt < %s -mtriple=riscv64 -mattr=+v -p loop-vectorize -pass-remarks-analysis=loop-vectorize -S 2>&1 | FileCheck %s
32
4- define void @s311 () {
5- ; CHECK-LABEL: define void @s311(
6- ; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
3+ ; CHECK: remark: <unknown>:0:0: the cost-model indicates that interleaving is not beneficial
4+ define float @s311 (float %a_0 , float %s311_sum ) {
5+ ; CHECK-LABEL: define float @s311(
6+ ; CHECK-SAME: float [[A_0:%.*]], float [[S311_SUM:%.*]]) #[[ATTR0:[0-9]+]] {
77; CHECK-NEXT: [[ENTRY:.*]]:
88; CHECK-NEXT: [[TMP0:%.*]] = call i32 @llvm.vscale.i32()
99; CHECK-NEXT: [[TMP1:%.*]] = mul i32 [[TMP0]], 4
@@ -16,11 +16,13 @@ define void @s311() {
1616; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 1200, [[N_MOD_VF]]
1717; CHECK-NEXT: [[TMP4:%.*]] = call i32 @llvm.vscale.i32()
1818; CHECK-NEXT: [[TMP5:%.*]] = mul i32 [[TMP4]], 4
19+ ; CHECK-NEXT: [[BROADCAST_SPLATINSERT:%.*]] = insertelement <vscale x 4 x float> poison, float [[A_0]], i64 0
20+ ; CHECK-NEXT: [[BROADCAST_SPLAT:%.*]] = shufflevector <vscale x 4 x float> [[BROADCAST_SPLATINSERT]], <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
1921; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
2022; CHECK: [[VECTOR_BODY]]:
2123; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
22- ; CHECK-NEXT: [[VEC_PHI:%.*]] = phi float [ 0.000000e+00 , %[[VECTOR_PH]] ], [ [[TMP6:%.*]], %[[VECTOR_BODY]] ]
23- ; CHECK-NEXT: [[TMP6]] = call float @llvm.vector.reduce.fadd.nxv4f32(float [[VEC_PHI]], <vscale x 4 x float> zeroinitializer )
24+ ; CHECK-NEXT: [[VEC_PHI:%.*]] = phi float [ [[S311_SUM]] , %[[VECTOR_PH]] ], [ [[TMP6:%.*]], %[[VECTOR_BODY]] ]
25+ ; CHECK-NEXT: [[TMP6]] = call float @llvm.vector.reduce.fadd.nxv4f32(float [[VEC_PHI]], <vscale x 4 x float> [[BROADCAST_SPLAT]] )
2426; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], [[TMP5]]
2527; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]]
2628; CHECK-NEXT: br i1 [[TMP7]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
@@ -29,33 +31,33 @@ define void @s311() {
2931; CHECK-NEXT: br i1 [[CMP_N]], label %[[EXIT:.*]], label %[[SCALAR_PH]]
3032; CHECK: [[SCALAR_PH]]:
3133; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i32 [ [[N_VEC]], %[[MIDDLE_BLOCK]] ], [ 0, %[[ENTRY]] ]
32- ; CHECK-NEXT: [[BC_MERGE_RDX:%.*]] = phi float [ [[TMP6]], %[[MIDDLE_BLOCK]] ], [ 0.000000e+00 , %[[ENTRY]] ]
34+ ; CHECK-NEXT: [[BC_MERGE_RDX:%.*]] = phi float [ [[TMP6]], %[[MIDDLE_BLOCK]] ], [ [[S311_SUM]] , %[[ENTRY]] ]
3335; CHECK-NEXT: br label %[[LOOP:.*]]
3436; CHECK: [[LOOP]]:
3537; CHECK-NEXT: [[IV:%.*]] = phi i32 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
3638; CHECK-NEXT: [[RED:%.*]] = phi float [ [[BC_MERGE_RDX]], %[[SCALAR_PH]] ], [ [[RED_NEXT:%.*]], %[[LOOP]] ]
37- ; CHECK-NEXT: [[RED_NEXT]] = fadd float 0.000000e+00 , [[RED]]
38- ; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
39+ ; CHECK-NEXT: [[RED_NEXT]] = fadd float [[A_0]] , [[RED]]
40+ ; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i32 [[IV]], 1
3941; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[IV_NEXT]], 1200
4042; CHECK-NEXT: br i1 [[EXITCOND]], label %[[EXIT]], label %[[LOOP]], !llvm.loop [[LOOP3:![0-9]+]]
4143; CHECK: [[EXIT]]:
4244; CHECK-NEXT: [[RED_LCSSA:%.*]] = phi float [ [[RED_NEXT]], %[[LOOP]] ], [ [[TMP6]], %[[MIDDLE_BLOCK]] ]
43- ; CHECK-NEXT: ret void
45+ ; CHECK-NEXT: ret float [[RED_LCSSA]]
4446;
4547entry:
4648 br label %loop
4749
4850loop:
4951 %iv = phi i32 [ 0 , %entry ], [ %iv.next , %loop ]
50- %red = phi float [ 0 .000000e+ 00 , %entry ], [ %red.next , %loop ]
51- %red.next = fadd float 0 .000000e+ 00 , %red
52- %iv.next = add i32 %iv , 1
52+ %red = phi float [ %s311_sum , %entry ], [ %red.next , %loop ]
53+ %red.next = fadd float %a_0 , %red
54+ %iv.next = add nuw nsw i32 %iv , 1
5355 %exitcond = icmp eq i32 %iv.next , 1200
5456 br i1 %exitcond , label %exit , label %loop
5557
5658exit:
5759 %red.lcssa = phi float [ %red.next , %loop ]
58- ret void
60+ ret float %red.lcssa
5961}
6062;.
6163; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]}
0 commit comments