1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00

[IfConversion] Disallow TBB == FBB for valid triangles

Summary:
Previously the case

     EBB
     | \_
     |  |
     | TBB
     |  /
     FBB

was treated as a valid triangle also when TBB and FBB was the same basic
block. This could then lead to an invalid CFG when we removed the edge
from EBB to TBB, since that meant we would also remove the edge from EBB
to FBB.

Since TBB == FBB is quite a degenerated case of a triangle, we now
don't treat it as a valid triangle anymore, and thus we will avoid the
trouble with updating the CFG.

Reviewers: efriedma, dmgreen, kparzysz

Reviewed By: efriedma

Subscribers: bjope, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D67832

llvm-svn: 372943
This commit is contained in:
Mikael Holmen 2019-09-26 06:35:55 +00:00
parent f84a7a5067
commit 34a44fe737
2 changed files with 32 additions and 0 deletions

View File

@ -569,6 +569,9 @@ bool IfConverter::ValidTriangle(BBInfo &TrueBBI, BBInfo &FalseBBI,
bool FalseBranch, unsigned &Dups,
BranchProbability Prediction) const {
Dups = 0;
if (TrueBBI.BB == FalseBBI.BB)
return false;
if (TrueBBI.IsBeingAnalyzed || TrueBBI.IsDone)
return false;

View File

@ -0,0 +1,29 @@
# RUN: llc -mtriple=arm-apple-ios -run-pass=if-converter -verify-machineinstrs %s -o - | FileCheck %s
...
---
name: foo
body: |
bb.0:
Bcc %bb.2, 1, $cpsr
bb.1:
$sp = tADDspi $sp, 2, 14, _
B %bb.1
bb.2:
Bcc %bb.3, 0, $cpsr
B %bb.2
bb.3:
Bcc %bb.1, 1, $cpsr
B %bb.1
...
# Both branches in bb.3 jump to bb.1. IfConversion shouldn't treat this as a
# tringle and insert the tADDspi in bb3, but leave it as it is.
# CHECK: bb.3:
# CHECK: successors: %bb.1
# CHECK-NOT: tADDspi
# CHECK: Bcc %bb.1, 1, $cpsr
# CHECK: B %bb.1