diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 10:51:19 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 10:51:19 +0000 |
commit | eb11fae6d08f479c0799db45860a98af528fa6e7 (patch) | |
tree | 44d492a50c8c1a7eb8e2d17ea3360ec4d066f042 /lib/CodeGen/LiveRangeCalc.cpp | |
parent | b8a2042aa938069e862750553db0e4d82d25822c (diff) |
Notes
Diffstat (limited to 'lib/CodeGen/LiveRangeCalc.cpp')
-rw-r--r-- | lib/CodeGen/LiveRangeCalc.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/CodeGen/LiveRangeCalc.cpp b/lib/CodeGen/LiveRangeCalc.cpp index 66c23b7b69ce..04324943dfad 100644 --- a/lib/CodeGen/LiveRangeCalc.cpp +++ b/lib/CodeGen/LiveRangeCalc.cpp @@ -584,3 +584,24 @@ void LiveRangeCalc::updateSSA() { } } while (Changed); } + +bool LiveRangeCalc::isJointlyDominated(const MachineBasicBlock *MBB, + ArrayRef<SlotIndex> Defs, + const SlotIndexes &Indexes) { + const MachineFunction &MF = *MBB->getParent(); + BitVector DefBlocks(MF.getNumBlockIDs()); + for (SlotIndex I : Defs) + DefBlocks.set(Indexes.getMBBFromIndex(I)->getNumber()); + + SetVector<unsigned> PredQueue; + PredQueue.insert(MBB->getNumber()); + for (unsigned i = 0; i != PredQueue.size(); ++i) { + unsigned BN = PredQueue[i]; + if (DefBlocks[BN]) + return true; + const MachineBasicBlock *B = MF.getBlockNumbered(BN); + for (const MachineBasicBlock *P : B->predecessors()) + PredQueue.insert(P->getNumber()); + } + return false; +} |