diff options
| author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-06-26 14:37:16 +0000 |
|---|---|---|
| committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-06-26 14:37:16 +0000 |
| commit | 70f027022cd1f8de8df92d576ed330741a1ec698 (patch) | |
| tree | 319e33af87dcbcf5e666d22e518baa31294bd78b /llvm/lib/CodeGen/LiveRangeCalc.cpp | |
| parent | 96da1ca58493d730e6d48b37085b06ccdf1204fd (diff) | |
| download | bcm5719-llvm-70f027022cd1f8de8df92d576ed330741a1ec698.tar.gz bcm5719-llvm-70f027022cd1f8de8df92d576ed330741a1ec698.zip | |
Account for undef values from predecessors in extendSegmentsToUses
It is legal for a PHI node not to have a live value in a predecessor
as long as the end of the predecessor is jointly dominated by an undef
value.
llvm-svn: 335607
Diffstat (limited to 'llvm/lib/CodeGen/LiveRangeCalc.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/LiveRangeCalc.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/LiveRangeCalc.cpp b/llvm/lib/CodeGen/LiveRangeCalc.cpp index 66c23b7b69c..04324943dfa 100644 --- a/llvm/lib/CodeGen/LiveRangeCalc.cpp +++ b/llvm/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; +} |

