Skip to content

Commit 4c13af2

Browse files
committed
[TEST] Pre-commit test for GVN PRE load
This is a test case for D139582. In this test case, %v4 and %v5 can be moved to predecessors, %v3 can be changed to a PHI instruction. Differential Revision: https://reviews.llvm.org/D140234
1 parent 4e018c7 commit 4c13af2

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

llvm/test/Transforms/GVN/PRE/pre-load.ll

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -765,3 +765,81 @@ follow_2:
765765
%vv = load i32, i32* %x, align 4
766766
ret i32 %vv
767767
}
768+
769+
declare i1 @foo()
770+
declare i1 @bar()
771+
772+
; %v3 is partially redundant, bb3 has multiple predecessors coming through
773+
; critical edges. The other successors of those predecessors have same loads.
774+
; We can move all loads into predecessors.
775+
776+
define void @test17(i64* %p1, i64* %p2, i64* %p3, i64* %p4)
777+
; CHECK-LABEL: @test17(
778+
; CHECK-NEXT: entry:
779+
; CHECK-NEXT: [[V1:%.*]] = load i64, i64* [[P1:%.*]], align 8
780+
; CHECK-NEXT: [[COND1:%.*]] = icmp sgt i64 [[V1]], 200
781+
; CHECK-NEXT: br i1 [[COND1]], label [[BB200:%.*]], label [[BB1:%.*]]
782+
; CHECK: bb1:
783+
; CHECK-NEXT: [[COND2:%.*]] = icmp sgt i64 [[V1]], 100
784+
; CHECK-NEXT: br i1 [[COND2]], label [[BB100:%.*]], label [[BB2:%.*]]
785+
; CHECK: bb2:
786+
; CHECK-NEXT: [[V2:%.*]] = add nsw i64 [[V1]], 1
787+
; CHECK-NEXT: store i64 [[V2]], i64* [[P1]], align 8
788+
; CHECK-NEXT: br label [[BB3:%.*]]
789+
; CHECK: bb3:
790+
; CHECK-NEXT: [[V3:%.*]] = load i64, i64* [[P1]], align 8
791+
; CHECK-NEXT: store i64 [[V3]], i64* [[P2:%.*]], align 8
792+
; CHECK-NEXT: ret void
793+
; CHECK: bb100:
794+
; CHECK-NEXT: [[COND3:%.*]] = call i1 @foo()
795+
; CHECK-NEXT: br i1 [[COND3]], label [[BB3]], label [[BB101:%.*]]
796+
; CHECK: bb101:
797+
; CHECK-NEXT: [[V4:%.*]] = load i64, i64* [[P1]], align 8
798+
; CHECK-NEXT: store i64 [[V4]], i64* [[P3:%.*]], align 8
799+
; CHECK-NEXT: ret void
800+
; CHECK: bb200:
801+
; CHECK-NEXT: [[COND4:%.*]] = call i1 @bar()
802+
; CHECK-NEXT: br i1 [[COND4]], label [[BB3]], label [[BB201:%.*]]
803+
; CHECK: bb201:
804+
; CHECK-NEXT: [[V5:%.*]] = load i64, i64* [[P1]], align 8
805+
; CHECK-NEXT: store i64 [[V5]], i64* [[P4:%.*]], align 8
806+
; CHECK-NEXT: ret void
807+
;
808+
{
809+
entry:
810+
%v1 = load i64, i64* %p1, align 8
811+
%cond1 = icmp sgt i64 %v1, 200
812+
br i1 %cond1, label %bb200, label %bb1
813+
814+
bb1:
815+
%cond2 = icmp sgt i64 %v1, 100
816+
br i1 %cond2, label %bb100, label %bb2
817+
818+
bb2:
819+
%v2 = add nsw i64 %v1, 1
820+
store i64 %v2, i64* %p1, align 8
821+
br label %bb3
822+
823+
bb3:
824+
%v3 = load i64, i64* %p1, align 8
825+
store i64 %v3, i64* %p2, align 8
826+
ret void
827+
828+
bb100:
829+
%cond3 = call i1 @foo()
830+
br i1 %cond3, label %bb3, label %bb101
831+
832+
bb101:
833+
%v4 = load i64, i64* %p1, align 8
834+
store i64 %v4, i64* %p3, align 8
835+
ret void
836+
837+
bb200:
838+
%cond4 = call i1 @bar()
839+
br i1 %cond4, label %bb3, label %bb201
840+
841+
bb201:
842+
%v5 = load i64, i64* %p1, align 8
843+
store i64 %v5, i64* %p4, align 8
844+
ret void
845+
}

0 commit comments

Comments
 (0)