[llvm] 893df20 - [IfConversion] Disallow TrueBB == FalseBB for valid diamonds
Mikael Holmen via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 8 03:54:59 PDT 2020
Author: Mikael Holmen
Date: 2020-04-08T12:50:36+02:00
New Revision: 893df2032d480bf791a69fe965c3ca4ef500145b
URL: https://github.com/llvm/llvm-project/commit/893df2032d480bf791a69fe965c3ca4ef500145b
DIFF: https://github.com/llvm/llvm-project/commit/893df2032d480bf791a69fe965c3ca4ef500145b.diff
LOG: [IfConversion] Disallow TrueBB == FalseBB for valid diamonds
Summary:
This fixes PR45302.
Previously the case
BB1
/ \
| |
TBB FBB
| |
\ /
BB2
was treated as a valid diamond also when TBB and FBB was the same basic
block. This then lead to a failed assertion in IfConvertDiamond.
Since TBB == FBB is quite a degenerated case of a diamond, we now
don't treat it as a valid diamond anymore, and thus we will avoid the
trouble of making IfConvertDiamond handle it correctly.
Reviewers: efriedma, kparzysz
Reviewed By: efriedma
Subscribers: hiraditya, llvm-commits
Differential Revision: https://reviews.llvm.org/D77651
Added:
llvm/test/CodeGen/ARM/ifcvt_diamondSameTrueFalse.mir
Modified:
llvm/lib/CodeGen/IfConversion.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/IfConversion.cpp b/llvm/lib/CodeGen/IfConversion.cpp
index 77fa1280a2a7..90c471c0cb04 100644
--- a/llvm/lib/CodeGen/IfConversion.cpp
+++ b/llvm/lib/CodeGen/IfConversion.cpp
@@ -972,6 +972,11 @@ bool IfConverter::ValidDiamond(
FalseBBI.IsBeingAnalyzed || FalseBBI.IsDone)
return false;
+ // If the True and False BBs are equal we're dealing with a degenerate case
+ // that we don't treat as a diamond.
+ if (TrueBBI.BB == FalseBBI.BB)
+ return false;
+
MachineBasicBlock *TT = TrueBBI.TrueBB;
MachineBasicBlock *FT = FalseBBI.TrueBB;
diff --git a/llvm/test/CodeGen/ARM/ifcvt_diamondSameTrueFalse.mir b/llvm/test/CodeGen/ARM/ifcvt_diamondSameTrueFalse.mir
new file mode 100644
index 000000000000..66e4cd000682
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/ifcvt_diamondSameTrueFalse.mir
@@ -0,0 +1,40 @@
+# RUN: llc -mtriple=thumbv7-apple-ios -o - %s -run-pass if-converter -verify-machineinstrs | FileCheck %s
+
+# Don't treat bb.1 as a valid diamond since IfConverter::IfConvertDiamond can't
+# handle it and used to hit an assertion instead.
+
+--- |
+ define void @func() minsize {
+ ret void
+ }
+...
+---
+name: func
+body: |
+ bb.0:
+
+ tBcc %bb.3, 1, $cpsr
+
+ bb.1:
+
+ tBcc %bb.2, 1, $cpsr
+ tB %bb.2, 14, $noreg
+
+ bb.2:
+
+ bb.3:
+ successors:
+ tBX_RET 14, _
+...
+
+# CHECK-LABEL: bb.0:
+# CHECK: tBcc %bb.3, 1
+
+# CHECK-LABEL: bb.1:
+# CHECK: tBcc %bb.2, 1
+# CHECK-NEXT: tB %bb.2, 14
+
+# CHECK-LABEL: bb.2:
+
+# CHECK-LABEL: bb.3:
+# CHECK: tBX_RET 14
More information about the llvm-commits
mailing list