@@ -398,16 +398,30 @@ for.end: ; preds = %for.body
398
398
define void @test_store_of_final_reduction_value (i64 %x , ptr %dst ) {
399
399
; CHECK-LABEL: define void @test_store_of_final_reduction_value(
400
400
; 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]]:
402
416
; CHECK-NEXT: br label %[[LOOP:.*]]
403
417
; 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]] ]
406
420
; CHECK-NEXT: [[RED_NEXT]] = mul i64 [[RED]], [[X]]
407
421
; CHECK-NEXT: store i64 [[RED_NEXT]], ptr [[DST]], align 8
408
422
; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV4]], 1
409
423
; 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]+ ]]
411
425
; CHECK: [[EXIT]]:
412
426
; CHECK-NEXT: ret void
413
427
;
0 commit comments