summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorMikael Holmen <mikael.holmen@ericsson.com>2017-05-10 13:06:13 +0000
committerMikael Holmen <mikael.holmen@ericsson.com>2017-05-10 13:06:13 +0000
commit21c867c26e11d414a65a7158502945bac307e033 (patch)
tree47f6173914fe194f0d981d0cb64a208412d46b95 /llvm/test
parent11d251c05cc498194945cac07ab5d17770e298bf (diff)
downloadbcm5719-llvm-21c867c26e11d414a65a7158502945bac307e033.tar.gz
bcm5719-llvm-21c867c26e11d414a65a7158502945bac307e033.zip
[IfConversion] Add missing check in IfConversion/canFallThroughTo
Summary: When trying to figure out if MBB could fallthrough to ToMBB (possibly by falling through a bunch of other MBBs) we didn't actually check if there was fallthrough between the last two blocks in the chain. Reviewers: kparzysz, iteratee, MatzeB Reviewed By: kparzysz, iteratee Subscribers: javed.absar, llvm-commits Differential Revision: https://reviews.llvm.org/D32996 llvm-svn: 302650
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/MIR/ARM/ifcvt_canFallThroughTo.mir64
1 files changed, 64 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/MIR/ARM/ifcvt_canFallThroughTo.mir b/llvm/test/CodeGen/MIR/ARM/ifcvt_canFallThroughTo.mir
new file mode 100644
index 00000000000..5a1583f7a9b
--- /dev/null
+++ b/llvm/test/CodeGen/MIR/ARM/ifcvt_canFallThroughTo.mir
@@ -0,0 +1,64 @@
+# RUN: llc -mtriple=arm-apple-ios -o - %s -run-pass if-converter | FileCheck %s
+---
+name: f1
+body: |
+ bb.0:
+ successors: %bb.1
+
+ B %bb.1
+
+ bb.1:
+ successors: %bb.2, %bb.4
+
+ Bcc %bb.4, 1, %cpsr
+
+ bb.2:
+ successors: %bb.3, %bb.5
+
+ Bcc %bb.5, 1, %cpsr
+
+ bb.3:
+ successors: %bb.5
+
+ B %bb.5
+
+ bb.4:
+ successors:
+
+ bb.5:
+ successors: %bb.1, %bb.6
+
+ Bcc %bb.1, 1, %cpsr
+
+ bb.6:
+ BX_RET 14, _
+
+...
+
+# IfConversion.cpp/canFallThroughTo thought there was a fallthrough from
+# bb.4 to bb5 even if the successor list was empty.
+# bb.4 is empty, so it surely looks like it can fallthrough, but this is what
+# happens for a bb just containing an "unreachable".
+
+#CHECK: body: |
+#CHECK: bb.0:
+#CHECK: successors: %bb.1
+
+#CHECK: bb.1:
+#CHECK: successors: %bb.3({{.*}}), %bb.2
+
+# The original brr_cond from bb.1, jumping to the empty bb
+#CHECK: Bcc %bb.2
+#CHECK: B %bb.3
+
+# Empty bb.2, originally containing "unreachable" and thus has no successors
+#CHECK: bb.2:
+#CHECK-NOT: successors
+
+#CHECK: bb.3:
+#CHECK: successors: %bb.1
+
+# Conditional BX_RET and then loop back to bb.1
+#CHECK: BX_RET 0
+#CHECK: B %bb.1
+
OpenPOWER on IntegriCloud