Skip to content

Commit d6cf181

Browse files
committed
[LICM] Add additional test for load hoisting, simplify existing one.
1 parent 901831a commit d6cf181

File tree

1 file changed

+46
-35
lines changed

1 file changed

+46
-35
lines changed

llvm/test/Transforms/LICM/scalar-promote.ll

Lines changed: 46 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -602,59 +602,70 @@ Out:
602602
@glb = external global i8, align 1
603603

604604
; Test case for PR51248.
605-
define void @test_sink_store_only(i8 %var, i64 %start) writeonly {
605+
define void @test_sink_store_only() writeonly {
606606
; CHECK-LABEL: @test_sink_store_only(
607607
; CHECK-NEXT: entry:
608-
; CHECK-NEXT: [[DIV:%.*]] = sdiv i8 [[VAR:%.*]], 3
609-
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i8 [[DIV]], 0
610608
; CHECK-NEXT: [[GLB_PROMOTED:%.*]] = load i8, i8* @glb, align 1
611609
; CHECK-NEXT: br label [[LOOP_HEADER:%.*]]
612610
; 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:%.*]]
623615
; 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
626618
; 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
630622
; CHECK-NEXT: ret void
631623
;
632624
entry:
633625
br label %loop.header
634626

635627
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
639631

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
644637

645-
cond.true:
646-
br label %loop.latch
638+
exit:
639+
ret void
640+
}
647641

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
650659

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
656667

657-
for.end:
668+
exit:
658669
ret void
659670
}
660671

0 commit comments

Comments
 (0)