@@ -398,16 +398,30 @@ for.end: ; preds = %for.body
398398define void @test_store_of_final_reduction_value (i64 %x , ptr %dst ) {
399399; CHECK-LABEL: define void @test_store_of_final_reduction_value(
400400; CHECK-SAME: i64 [[X:%.*]], ptr [[DST:%.*]]) #[[ATTR0]] {
401- ; CHECK-NEXT: [[ENTRY:.*]]:
401+ ; CHECK-NEXT: [[ENTRY:.*:]]
402+ ; CHECK-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
403+ ; CHECK: [[VECTOR_PH]]:
404+ ; CHECK-NEXT: [[BROADCAST_SPLATINSERT:%.*]] = insertelement <2 x i64> poison, i64 [[X]], i64 0
405+ ; CHECK-NEXT: [[BROADCAST_SPLAT:%.*]] = shufflevector <2 x i64> [[BROADCAST_SPLATINSERT]], <2 x i64> poison, <2 x i32> zeroinitializer
406+ ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
407+ ; CHECK: [[VECTOR_BODY]]:
408+ ; CHECK-NEXT: [[VEC_PHI:%.*]] = phi <2 x i64> [ <i64 0, i64 1>, %[[VECTOR_PH]] ], [ [[TMP0:%.*]], %[[VECTOR_BODY]] ]
409+ ; CHECK-NEXT: [[TMP0]] = mul <2 x i64> [[VEC_PHI]], [[BROADCAST_SPLAT]]
410+ ; CHECK-NEXT: br i1 true, label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP32:![0-9]+]]
411+ ; CHECK: [[MIDDLE_BLOCK]]:
412+ ; CHECK-NEXT: [[TMP1:%.*]] = call i64 @llvm.vector.reduce.mul.v2i64(<2 x i64> [[TMP0]])
413+ ; CHECK-NEXT: store i64 [[TMP1]], ptr [[DST]], align 8
414+ ; CHECK-NEXT: br label %[[EXIT:.*]]
415+ ; CHECK: [[SCALAR_PH]]:
402416; CHECK-NEXT: br label %[[LOOP:.*]]
403417; CHECK: [[LOOP]]:
404- ; CHECK-NEXT: [[IV4:%.*]] = phi i64 [ 0, %[[ENTRY ]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
405- ; CHECK-NEXT: [[RED:%.*]] = phi i64 [ 0, %[[ENTRY ]] ], [ [[RED_NEXT:%.*]], %[[LOOP]] ]
418+ ; CHECK-NEXT: [[IV4:%.*]] = phi i64 [ 0, %[[SCALAR_PH ]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
419+ ; CHECK-NEXT: [[RED:%.*]] = phi i64 [ 0, %[[SCALAR_PH ]] ], [ [[RED_NEXT:%.*]], %[[LOOP]] ]
406420; CHECK-NEXT: [[RED_NEXT]] = mul i64 [[RED]], [[X]]
407421; CHECK-NEXT: store i64 [[RED_NEXT]], ptr [[DST]], align 8
408422; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV4]], 1
409423; CHECK-NEXT: [[EC:%.*]] = icmp eq i64 [[IV4]], 1
410- ; CHECK-NEXT: br i1 [[EC]], label %[[EXIT:.* ]], label %[[LOOP]]
424+ ; CHECK-NEXT: br i1 [[EC]], label %[[EXIT]], label %[[LOOP]], !llvm.loop [[LOOP33:![0-9]+ ]]
411425; CHECK: [[EXIT]]:
412426; CHECK-NEXT: ret void
413427;
0 commit comments