mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[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
This commit is contained in:
parent
5cfdb4f2d2
commit
d075e066f3
@ -972,6 +972,11 @@ bool IfConverter::ValidDiamond(
|
|||||||
FalseBBI.IsBeingAnalyzed || FalseBBI.IsDone)
|
FalseBBI.IsBeingAnalyzed || FalseBBI.IsDone)
|
||||||
return false;
|
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 *TT = TrueBBI.TrueBB;
|
||||||
MachineBasicBlock *FT = FalseBBI.TrueBB;
|
MachineBasicBlock *FT = FalseBBI.TrueBB;
|
||||||
|
|
||||||
|
40
test/CodeGen/ARM/ifcvt_diamondSameTrueFalse.mir
Normal file
40
test/CodeGen/ARM/ifcvt_diamondSameTrueFalse.mir
Normal file
@ -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
|
Loading…
x
Reference in New Issue
Block a user