[PATCH] D32996: [IfConversion] Add missing check in IfConversion/canFallThroughTo
Mikael Holmén via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 10 06:19:34 PDT 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rL302650: [IfConversion] Add missing check in IfConversion/canFallThroughTo (authored by uabelho).
Changed prior to commit:
https://reviews.llvm.org/D32996?vs=98417&id=98438#toc
Repository:
rL LLVM
https://reviews.llvm.org/D32996
Files:
llvm/trunk/lib/CodeGen/IfConversion.cpp
llvm/trunk/test/CodeGen/MIR/ARM/ifcvt_canFallThroughTo.mir
Index: llvm/trunk/lib/CodeGen/IfConversion.cpp
===================================================================
--- llvm/trunk/lib/CodeGen/IfConversion.cpp
+++ llvm/trunk/lib/CodeGen/IfConversion.cpp
@@ -1318,7 +1318,8 @@
return false;
PI = I++;
}
- return true;
+ // Finally see if the last I is indeed a successor to PI.
+ return PI->isSuccessor(&*I);
}
/// Invalidate predecessor BB info so it would be re-analyzed to determine if it
Index: llvm/trunk/test/CodeGen/MIR/ARM/ifcvt_canFallThroughTo.mir
===================================================================
--- llvm/trunk/test/CodeGen/MIR/ARM/ifcvt_canFallThroughTo.mir
+++ llvm/trunk/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
+
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D32996.98438.patch
Type: text/x-patch
Size: 2010 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170510/d6c55193/attachment.bin>
More information about the llvm-commits
mailing list