diff options
| author | 2019-01-27 16:42:12 +0000 | |
|---|---|---|
| committer | 2019-01-27 16:42:12 +0000 | |
| commit | b773203fb58f3ef282fb69c832d8710cab5bc82d (patch) | |
| tree | e75913f147570fbd75169647b144df85b88a038c /gnu/llvm/lib/CodeGen/LiveRangeCalc.cpp | |
| parent | tweak errno in previous (diff) | |
| download | wireguard-openbsd-b773203fb58f3ef282fb69c832d8710cab5bc82d.tar.xz wireguard-openbsd-b773203fb58f3ef282fb69c832d8710cab5bc82d.zip | |
Import LLVM 7.0.1 release including clang, lld and lldb.
Diffstat (limited to 'gnu/llvm/lib/CodeGen/LiveRangeCalc.cpp')
| -rw-r--r-- | gnu/llvm/lib/CodeGen/LiveRangeCalc.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/gnu/llvm/lib/CodeGen/LiveRangeCalc.cpp b/gnu/llvm/lib/CodeGen/LiveRangeCalc.cpp index 66c23b7b69c..04324943dfa 100644 --- a/gnu/llvm/lib/CodeGen/LiveRangeCalc.cpp +++ b/gnu/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; +} |
