@@ -429,41 +429,18 @@ exit:
429429define void @hoist_previous_value_and_operand_load (ptr %dst , i64 %mask ) {
430430; CHECK-LABEL: @hoist_previous_value_and_operand_load(
431431; CHECK-NEXT: bb:
432- ; CHECK-NEXT: br label [[LOOP:%.*]]
433- ; CHECK: vector.ph:
434- ; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
435- ; CHECK: vector.body:
436- ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[LOOP]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
437- ; CHECK-NEXT: [[VECTOR_RECUR:%.*]] = phi <4 x i32> [ <i32 poison, i32 poison, i32 poison, i32 1>, [[LOOP]] ], [ [[TMP2:%.*]], [[VECTOR_BODY]] ]
438- ; CHECK-NEXT: [[VECTOR_RECUR1:%.*]] = phi <4 x i32> [ <i32 poison, i32 poison, i32 poison, i32 0>, [[LOOP]] ], [ [[TMP4:%.*]], [[VECTOR_BODY]] ]
439- ; CHECK-NEXT: [[OFFSET_IDX:%.*]] = add i64 1, [[INDEX]]
440- ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i32, ptr [[DST:%.*]], i64 [[OFFSET_IDX]]
441- ; CHECK-NEXT: [[VECTOR_RECUR_EXTRACT:%.*]] = load i32, ptr [[DST]], align 4
442- ; CHECK-NEXT: [[BROADCAST_SPLATINSERT:%.*]] = insertelement <4 x i32> poison, i32 [[VECTOR_RECUR_EXTRACT]], i64 0
443- ; CHECK-NEXT: [[TMP2]] = shufflevector <4 x i32> [[BROADCAST_SPLATINSERT]], <4 x i32> poison, <4 x i32> zeroinitializer
444- ; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <4 x i32> [[VECTOR_RECUR]], <4 x i32> [[TMP2]], <4 x i32> <i32 3, i32 4, i32 5, i32 6>
445- ; CHECK-NEXT: [[TMP4]] = or <4 x i32> [[TMP12]], splat (i32 3)
446- ; CHECK-NEXT: [[TMP13:%.*]] = shufflevector <4 x i32> [[VECTOR_RECUR1]], <4 x i32> [[TMP4]], <4 x i32> <i32 3, i32 4, i32 5, i32 6>
447- ; CHECK-NEXT: store <4 x i32> [[TMP13]], ptr [[TMP0]], align 4
448- ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
449- ; CHECK-NEXT: [[TMP11:%.*]] = icmp eq i64 [[INDEX_NEXT]], 336
450- ; CHECK-NEXT: br i1 [[TMP11]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]
451- ; CHECK: middle.block:
452- ; CHECK-NEXT: [[VECTOR_RECUR_EXTRACT2:%.*]] = extractelement <4 x i32> [[TMP4]], i32 3
453- ; CHECK-NEXT: br label [[SCALAR_PH:%.*]]
454- ; CHECK: scalar.ph:
455432; CHECK-NEXT: br label [[LOOP1:%.*]]
456433; CHECK: loop:
457- ; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 337 , [[SCALAR_PH ]] ], [ [[ADD:%.*]], [[LOOP1]] ]
458- ; CHECK-NEXT: [[FOR_1:%.*]] = phi i32 [ [[VECTOR_RECUR_EXTRACT]] , [[SCALAR_PH ]] ], [ [[LOAD:%.*]], [[LOOP1]] ]
459- ; CHECK-NEXT: [[FOR_2:%.*]] = phi i32 [ [[VECTOR_RECUR_EXTRACT2]] , [[SCALAR_PH ]] ], [ [[OR:%.*]], [[LOOP1]] ]
434+ ; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 1 , [[BB:%.* ]] ], [ [[ADD:%.*]], [[LOOP1]] ]
435+ ; CHECK-NEXT: [[FOR_1:%.*]] = phi i32 [ 1 , [[BB ]] ], [ [[LOAD:%.*]], [[LOOP1]] ]
436+ ; CHECK-NEXT: [[FOR_2:%.*]] = phi i32 [ 0 , [[BB ]] ], [ [[OR:%.*]], [[LOOP1]] ]
460437; CHECK-NEXT: [[OR]] = or i32 [[FOR_1]], 3
461438; CHECK-NEXT: [[ADD]] = add i64 [[IV]], 1
462- ; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 [[IV]]
439+ ; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i32, ptr [[DST:%.* ]], i64 [[IV]]
463440; CHECK-NEXT: store i32 [[FOR_2]], ptr [[GEP]], align 4
464441; CHECK-NEXT: [[ICMP:%.*]] = icmp ult i64 [[IV]], 337
465442; CHECK-NEXT: [[LOAD]] = load i32, ptr [[DST]], align 4
466- ; CHECK-NEXT: br i1 [[ICMP]], label [[LOOP1]], label [[EXIT:%.*]], !llvm.loop [[LOOP8:![0-9]+]]
443+ ; CHECK-NEXT: br i1 [[ICMP]], label [[LOOP1]], label [[EXIT:%.*]]
467444; CHECK: exit:
468445; CHECK-NEXT: ret void
469446;
@@ -529,7 +506,7 @@ define void @hoist_previous_value_and_operand_assume(ptr %dst, i64 %mask) {
529506; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
530507; CHECK-NEXT: [[VEC_IND_NEXT]] = add <4 x i64> [[VEC_IND]], splat (i64 4)
531508; CHECK-NEXT: [[TMP11:%.*]] = icmp eq i64 [[INDEX_NEXT]], 336
532- ; CHECK-NEXT: br i1 [[TMP11]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP9 :![0-9]+]]
509+ ; CHECK-NEXT: br i1 [[TMP11]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7 :![0-9]+]]
533510; CHECK: middle.block:
534511; CHECK-NEXT: [[VECTOR_RECUR_EXTRACT:%.*]] = extractelement <4 x i1> [[TMP6]], i32 3
535512; CHECK-NEXT: br label [[SCALAR_PH:%.*]]
@@ -547,7 +524,7 @@ define void @hoist_previous_value_and_operand_assume(ptr %dst, i64 %mask) {
547524; CHECK-NEXT: [[A:%.*]] = and i64 [[IV]], [[MASK]]
548525; CHECK-NEXT: [[TRUNC_I1]] = trunc i64 [[A]] to i1
549526; CHECK-NEXT: call void @llvm.assume(i1 [[TRUNC_I1]])
550- ; CHECK-NEXT: br i1 [[ICMP]], label [[LOOP]], label [[EXIT:%.*]], !llvm.loop [[LOOP10 :![0-9]+]]
527+ ; CHECK-NEXT: br i1 [[ICMP]], label [[LOOP]], label [[EXIT:%.*]], !llvm.loop [[LOOP8 :![0-9]+]]
551528; CHECK: exit:
552529; CHECK-NEXT: ret void
553530;
0 commit comments