@@ -602,59 +602,70 @@ Out:
602
602
@glb = external global i8 , align 1
603
603
604
604
; Test case for PR51248.
605
- define void @test_sink_store_only (i8 %var , i64 %start ) writeonly {
605
+ define void @test_sink_store_only () writeonly {
606
606
; CHECK-LABEL: @test_sink_store_only(
607
607
; CHECK-NEXT: entry:
608
- ; CHECK-NEXT: [[DIV:%.*]] = sdiv i8 [[VAR:%.*]], 3
609
- ; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 [[DIV]], 0
610
608
; CHECK-NEXT: [[GLB_PROMOTED:%.*]] = load i8, i8* @glb, align 1
611
609
; CHECK-NEXT: br label [[LOOP_HEADER:%.*]]
612
610
; CHECK: loop.header:
613
- ; CHECK-NEXT: [[MERGE1:%.*]] = phi i8 [ [[GLB_PROMOTED]], [[ENTRY:%.*]] ], [ [[MERGE:%.*]], [[LOOP_LATCH:%.*]] ]
614
- ; CHECK-NEXT: [[I:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[ADD:%.*]], [[LOOP_LATCH]] ]
615
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[I]], 4
616
- ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP_BODY:%.*]], label [[FOR_END:%.*]]
617
- ; CHECK: loop.body:
618
- ; CHECK-NEXT: br i1 [[CMP2]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]
619
- ; CHECK: cond.true:
620
- ; CHECK-NEXT: br label [[LOOP_LATCH]]
621
- ; CHECK: cond.false:
622
- ; CHECK-NEXT: br label [[LOOP_LATCH]]
611
+ ; CHECK-NEXT: [[DIV1:%.*]] = phi i8 [ [[GLB_PROMOTED]], [[ENTRY:%.*]] ], [ [[DIV:%.*]], [[LOOP_LATCH:%.*]] ]
612
+ ; CHECK-NEXT: [[I:%.*]] = phi i8 [ 0, [[ENTRY]] ], [ [[ADD:%.*]], [[LOOP_LATCH]] ]
613
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[I]], 4
614
+ ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP_LATCH]], label [[EXIT:%.*]]
623
615
; CHECK: loop.latch:
624
- ; CHECK-NEXT: [[MERGE ]] = phi i8 [ [[DIV ]], [[COND_TRUE]] ], [ 0, [[COND_FALSE]] ]
625
- ; CHECK-NEXT: [[ADD]] = add i64 [[I]], 4
616
+ ; CHECK-NEXT: [[DIV ]] = sdiv i8 [[I ]], 3
617
+ ; CHECK-NEXT: [[ADD]] = add i8 [[I]], 4
626
618
; CHECK-NEXT: br label [[LOOP_HEADER]]
627
- ; CHECK: for.end :
628
- ; CHECK-NEXT: [[MERGE1_LCSSA :%.*]] = phi i8 [ [[MERGE1 ]], [[LOOP_HEADER]] ]
629
- ; CHECK-NEXT: store i8 [[MERGE1_LCSSA ]], i8* @glb, align 1
619
+ ; CHECK: exit :
620
+ ; CHECK-NEXT: [[DIV1_LCSSA :%.*]] = phi i8 [ [[DIV1 ]], [[LOOP_HEADER]] ]
621
+ ; CHECK-NEXT: store i8 [[DIV1_LCSSA ]], i8* @glb, align 1
630
622
; CHECK-NEXT: ret void
631
623
;
632
624
entry:
633
625
br label %loop.header
634
626
635
627
loop.header:
636
- %i = phi i64 [ 0 , %entry ], [ %add , %loop.latch ]
637
- %cmp = icmp ult i64 %i , 4
638
- br i1 %cmp , label %loop.body , label %for.end
628
+ %i = phi i8 [ 0 , %entry ], [ %add , %loop.latch ]
629
+ %cmp = icmp ult i8 %i , 4
630
+ br i1 %cmp , label %loop.latch , label %exit
639
631
640
- loop.body:
641
- %div = sdiv i8 %var , 3
642
- %cmp2 = icmp slt i8 %div , 0
643
- br i1 %cmp2 , label %cond.true , label %cond.false
632
+ loop.latch:
633
+ %div = sdiv i8 %i , 3
634
+ store i8 %div , i8* @glb , align 1
635
+ %add = add i8 %i , 4
636
+ br label %loop.header
644
637
645
- cond.true:
646
- br label %loop.latch
638
+ exit:
639
+ ret void
640
+ }
647
641
648
- cond.false:
649
- br label %loop.latch
642
+ define void @test_sink_store_only_no_phi_needed () writeonly {
643
+ ; CHECK-LABEL: @test_sink_store_only_no_phi_needed(
644
+ ; CHECK-NEXT: entry:
645
+ ; CHECK-NEXT: br label [[LOOP:%.*]]
646
+ ; CHECK: loop:
647
+ ; CHECK-NEXT: [[I:%.*]] = phi i8 [ 0, [[ENTRY:%.*]] ], [ [[ADD:%.*]], [[LOOP]] ]
648
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[I]], 4
649
+ ; CHECK-NEXT: [[DIV:%.*]] = sdiv i8 [[I]], 3
650
+ ; CHECK-NEXT: [[ADD]] = add i8 [[I]], 4
651
+ ; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]]
652
+ ; CHECK: exit:
653
+ ; CHECK-NEXT: [[DIV_LCSSA:%.*]] = phi i8 [ [[DIV]], [[LOOP]] ]
654
+ ; CHECK-NEXT: store i8 [[DIV_LCSSA]], i8* @glb, align 1
655
+ ; CHECK-NEXT: ret void
656
+ ;
657
+ entry:
658
+ br label %loop
650
659
651
- loop.latch:
652
- %merge = phi i8 [ %div , %cond.true ], [ 0 , %cond.false ]
653
- store i8 %merge , i8* @glb , align 1
654
- %add = add i64 %i , 4
655
- br label %loop.header
660
+ loop:
661
+ %i = phi i8 [ 0 , %entry ], [ %add , %loop ]
662
+ %cmp = icmp ult i8 %i , 4
663
+ %div = sdiv i8 %i , 3
664
+ store i8 %div , i8* @glb , align 1
665
+ %add = add i8 %i , 4
666
+ br i1 %cmp , label %loop , label %exit
656
667
657
- for.end :
668
+ exit :
658
669
ret void
659
670
}
660
671
0 commit comments