diff options
author | Mikael Holmen <mikael.holmen@ericsson.com> | 2017-05-10 13:06:13 +0000 |
---|---|---|
committer | Mikael Holmen <mikael.holmen@ericsson.com> | 2017-05-10 13:06:13 +0000 |
commit | 21c867c26e11d414a65a7158502945bac307e033 (patch) | |
tree | 47f6173914fe194f0d981d0cb64a208412d46b95 /llvm/test | |
parent | 11d251c05cc498194945cac07ab5d17770e298bf (diff) | |
download | bcm5719-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.mir | 64 |
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 + |