mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
df3e0b152f
This patch factor out the function hasViableTopFallthrough from rotateLoop. It is also enhanced. Original code checks only if there is a block can be placed before current loop top. This patch also checks if the loop top is the most possible successor of its predecessor. The attached test case shows its effect. Differential Revision: https://reviews.llvm.org/D58393 llvm-svn: 354682
54 lines
978 B
LLVM
54 lines
978 B
LLVM
; RUN: llc -mtriple=i686-linux < %s | FileCheck %s
|
|
|
|
define i1 @no_viable_top_fallthrough() {
|
|
; CHECK-LABEL: no_viable_top_fallthrough
|
|
; CHECK: %.entry
|
|
; CHECK: %.bb1
|
|
; CHECK: %.bb2
|
|
; CHECK: %.middle
|
|
; CHECK: %.backedge
|
|
; CHECK: %.bb3
|
|
; CHECK: %.header
|
|
; CHECK: %.exit
|
|
; CHECK: %.stop
|
|
.entry:
|
|
%val1 = call i1 @foo()
|
|
br i1 %val1, label %.bb1, label %.header, !prof !10
|
|
|
|
.bb1:
|
|
%val2 = call i1 @foo()
|
|
br i1 %val2, label %.stop, label %.exit, !prof !10
|
|
|
|
.header:
|
|
%val3 = call i1 @foo()
|
|
br i1 %val3, label %.bb2, label %.exit
|
|
|
|
.bb2:
|
|
%val4 = call i1 @foo()
|
|
br i1 %val4, label %.middle, label %.bb3, !prof !10
|
|
|
|
.middle:
|
|
%val5 = call i1 @foo()
|
|
br i1 %val5, label %.header, label %.backedge
|
|
|
|
.backedge:
|
|
%val6 = call i1 @foo()
|
|
br label %.header
|
|
|
|
.bb3:
|
|
%val7 = call i1 @foo()
|
|
br label %.middle
|
|
|
|
.exit:
|
|
%val8 = call i1 @foo()
|
|
br label %.stop
|
|
|
|
.stop:
|
|
%result = call i1 @foo()
|
|
ret i1 %result
|
|
}
|
|
|
|
declare i1 @foo()
|
|
|
|
!10 = !{!"branch_weights", i32 90, i32 10}
|