summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86
diff options
context:
space:
mode:
authorGuozhi Wei <carrot@google.com>2019-02-22 18:04:37 +0000
committerGuozhi Wei <carrot@google.com>2019-02-22 18:04:37 +0000
commit4c8e480358c33e02476ec3ab1ab675c9517fcec0 (patch)
tree92d2b96f625c28fa641ae7ecadb914771c881dad /llvm/test/CodeGen/X86
parent5d049ce5ef7f7a08301b2b0c61eb361144d2a076 (diff)
downloadbcm5719-llvm-4c8e480358c33e02476ec3ab1ab675c9517fcec0.tar.gz
bcm5719-llvm-4c8e480358c33e02476ec3ab1ab675c9517fcec0.zip
[MBP] Factor out function hasViableTopFallthrough and enhancement
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
Diffstat (limited to 'llvm/test/CodeGen/X86')
-rw-r--r--llvm/test/CodeGen/X86/bb_rotate.ll53
1 files changed, 53 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/bb_rotate.ll b/llvm/test/CodeGen/X86/bb_rotate.ll
new file mode 100644
index 00000000000..55a7b013802
--- /dev/null
+++ b/llvm/test/CodeGen/X86/bb_rotate.ll
@@ -0,0 +1,53 @@
+; 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}
OpenPOWER on IntegriCloud