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)
|
||||
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;
|
||||
|
||||
|
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