@@ -482,20 +482,15 @@ define void @profiled_short_tc(ptr %a, i32 %offset, i32 %n) {
482
482
; CHECK-NEXT: entry:
483
483
; CHECK-NEXT: [[OFFSET_NONZERO:%.*]] = or i32 [[OFFSET:%.*]], 1
484
484
; CHECK-NEXT: [[UGLYGEP:%.*]] = getelementptr i8, ptr [[A:%.*]], i64 84
485
- ; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[N:%.*]], -1
486
- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[TMP0]] to i64
487
- ; CHECK-NEXT: [[TMP2:%.*]] = add nuw nsw i64 [[TMP1]], 1
488
- ; CHECK-NEXT: [[TMP3:%.*]] = sext i32 [[OFFSET_NONZERO]] to i64
489
- ; CHECK-NEXT: [[TMP4:%.*]] = mul i64 [[TMP2]], [[TMP3]]
490
- ; CHECK-NEXT: [[TMP5:%.*]] = add nsw i64 [[TMP4]], 84
491
- ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP5]]
492
485
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
493
486
; CHECK: for.body:
494
487
; CHECK-NEXT: [[LSR_IV1:%.*]] = phi ptr [ [[UGLYGEP2:%.*]], [[FOR_BODY]] ], [ [[UGLYGEP]], [[ENTRY:%.*]] ]
488
+ ; CHECK-NEXT: [[LSR_IV:%.*]] = phi i32 [ [[LSR_IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY]] ]
495
489
; CHECK-NEXT: store i32 1, ptr [[LSR_IV1]], align 4
490
+ ; CHECK-NEXT: [[LSR_IV_NEXT]] = add nsw i32 [[LSR_IV]], 1
496
491
; CHECK-NEXT: [[UGLYGEP2]] = getelementptr i8, ptr [[LSR_IV1]], i32 [[OFFSET_NONZERO]]
497
- ; CHECK-NEXT: [[LSR_FOLD_TERM_COND_REPLACED_TERM_COND :%.*]] = icmp eq ptr [[UGLYGEP2 ]], [[SCEVGEP ]]
498
- ; CHECK-NEXT: br i1 [[LSR_FOLD_TERM_COND_REPLACED_TERM_COND ]], label [[FOR_END:%.*]], label [[FOR_BODY]], !prof [[PROF0:![0-9]+]]
492
+ ; CHECK-NEXT: [[EXITCOND_NOT :%.*]] = icmp eq i32 [[LSR_IV_NEXT ]], [[N:%.* ]]
493
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT ]], label [[FOR_END:%.*]], label [[FOR_BODY]], !prof [[PROF0:![0-9]+]]
499
494
; CHECK: for.end:
500
495
; CHECK-NEXT: ret void
501
496
;
@@ -637,16 +632,15 @@ define void @small_tc_trivial_loop(ptr %a, i32 %offset) {
637
632
; CHECK-NEXT: entry:
638
633
; CHECK-NEXT: [[OFFSET_NONZERO:%.*]] = or i32 [[OFFSET:%.*]], 1
639
634
; CHECK-NEXT: [[UGLYGEP:%.*]] = getelementptr i8, ptr [[A:%.*]], i64 84
640
- ; CHECK-NEXT: [[TMP0:%.*]] = sext i32 [[OFFSET_NONZERO]] to i64
641
- ; CHECK-NEXT: [[TMP1:%.*]] = add nsw i64 [[TMP0]], 84
642
- ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP1]]
643
635
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
644
636
; CHECK: for.body:
645
637
; CHECK-NEXT: [[LSR_IV1:%.*]] = phi ptr [ [[UGLYGEP2:%.*]], [[FOR_BODY]] ], [ [[UGLYGEP]], [[ENTRY:%.*]] ]
638
+ ; CHECK-NEXT: [[LSR_IV:%.*]] = phi i32 [ [[LSR_IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY]] ]
646
639
; CHECK-NEXT: store i32 1, ptr [[LSR_IV1]], align 4
640
+ ; CHECK-NEXT: [[LSR_IV_NEXT]] = add nsw i32 [[LSR_IV]], 1
647
641
; CHECK-NEXT: [[UGLYGEP2]] = getelementptr i8, ptr [[LSR_IV1]], i32 [[OFFSET_NONZERO]]
648
- ; CHECK-NEXT: [[LSR_FOLD_TERM_COND_REPLACED_TERM_COND :%.*]] = icmp eq ptr [[UGLYGEP2 ]], [[SCEVGEP]]
649
- ; CHECK-NEXT: br i1 [[LSR_FOLD_TERM_COND_REPLACED_TERM_COND ]], label [[FOR_END:%.*]], label [[FOR_BODY]]
642
+ ; CHECK-NEXT: [[EXITCOND_NOT :%.*]] = icmp eq i32 [[LSR_IV_NEXT ]], 1
643
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT ]], label [[FOR_END:%.*]], label [[FOR_BODY]]
650
644
; CHECK: for.end:
651
645
; CHECK-NEXT: ret void
652
646
;
@@ -673,17 +667,15 @@ define void @small_tc_below_threshold(ptr %a, i32 %offset) {
673
667
; CHECK-NEXT: entry:
674
668
; CHECK-NEXT: [[OFFSET_NONZERO:%.*]] = or i32 [[OFFSET:%.*]], 1
675
669
; CHECK-NEXT: [[UGLYGEP:%.*]] = getelementptr i8, ptr [[A:%.*]], i64 84
676
- ; CHECK-NEXT: [[TMP0:%.*]] = sext i32 [[OFFSET_NONZERO]] to i64
677
- ; CHECK-NEXT: [[TMP1:%.*]] = shl nsw i64 [[TMP0]], 1
678
- ; CHECK-NEXT: [[TMP2:%.*]] = add nsw i64 [[TMP1]], 84
679
- ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr [[A]], i64 [[TMP2]]
680
670
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
681
671
; CHECK: for.body:
682
672
; CHECK-NEXT: [[LSR_IV1:%.*]] = phi ptr [ [[UGLYGEP2:%.*]], [[FOR_BODY]] ], [ [[UGLYGEP]], [[ENTRY:%.*]] ]
673
+ ; CHECK-NEXT: [[LSR_IV:%.*]] = phi i32 [ [[LSR_IV_NEXT:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY]] ]
683
674
; CHECK-NEXT: store i32 1, ptr [[LSR_IV1]], align 4
675
+ ; CHECK-NEXT: [[LSR_IV_NEXT]] = add nsw i32 [[LSR_IV]], 1
684
676
; CHECK-NEXT: [[UGLYGEP2]] = getelementptr i8, ptr [[LSR_IV1]], i32 [[OFFSET_NONZERO]]
685
- ; CHECK-NEXT: [[LSR_FOLD_TERM_COND_REPLACED_TERM_COND :%.*]] = icmp eq ptr [[UGLYGEP2 ]], [[SCEVGEP]]
686
- ; CHECK-NEXT: br i1 [[LSR_FOLD_TERM_COND_REPLACED_TERM_COND ]], label [[FOR_END:%.*]], label [[FOR_BODY]]
677
+ ; CHECK-NEXT: [[EXITCOND_NOT :%.*]] = icmp eq i32 [[LSR_IV_NEXT ]], 2
678
+ ; CHECK-NEXT: br i1 [[EXITCOND_NOT ]], label [[FOR_END:%.*]], label [[FOR_BODY]]
687
679
; CHECK: for.end:
688
680
; CHECK-NEXT: ret void
689
681
;
0 commit comments