diff options
Diffstat (limited to 'gnu/llvm/lib/CodeGen/LiveRegUnits.cpp')
| -rw-r--r-- | gnu/llvm/lib/CodeGen/LiveRegUnits.cpp | 146 |
1 files changed, 0 insertions, 146 deletions
diff --git a/gnu/llvm/lib/CodeGen/LiveRegUnits.cpp b/gnu/llvm/lib/CodeGen/LiveRegUnits.cpp deleted file mode 100644 index c2268138549..00000000000 --- a/gnu/llvm/lib/CodeGen/LiveRegUnits.cpp +++ /dev/null @@ -1,146 +0,0 @@ -//===- LiveRegUnits.cpp - Register Unit Set -------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -/// \file This file imlements the LiveRegUnits set. -// -//===----------------------------------------------------------------------===// - -#include "llvm/CodeGen/LiveRegUnits.h" - -#include "llvm/CodeGen/MachineBasicBlock.h" -#include "llvm/CodeGen/MachineFrameInfo.h" -#include "llvm/CodeGen/MachineFunction.h" -#include "llvm/CodeGen/MachineInstrBundle.h" -#include "llvm/CodeGen/MachineOperand.h" -#include "llvm/CodeGen/MachineRegisterInfo.h" -#include "llvm/CodeGen/TargetRegisterInfo.h" -#include "llvm/MC/MCRegisterInfo.h" - -using namespace llvm; - -void LiveRegUnits::removeRegsNotPreserved(const uint32_t *RegMask) { - for (unsigned U = 0, E = TRI->getNumRegUnits(); U != E; ++U) { - for (MCRegUnitRootIterator RootReg(U, TRI); RootReg.isValid(); ++RootReg) { - if (MachineOperand::clobbersPhysReg(RegMask, *RootReg)) - Units.reset(U); - } - } -} - -void LiveRegUnits::addRegsInMask(const uint32_t *RegMask) { - for (unsigned U = 0, E = TRI->getNumRegUnits(); U != E; ++U) { - for (MCRegUnitRootIterator RootReg(U, TRI); RootReg.isValid(); ++RootReg) { - if (MachineOperand::clobbersPhysReg(RegMask, *RootReg)) - Units.set(U); - } - } -} - -void LiveRegUnits::stepBackward(const MachineInstr &MI) { - // Remove defined registers and regmask kills from the set. - for (ConstMIBundleOperands O(MI); O.isValid(); ++O) { - if (O->isReg()) { - if (!O->isDef() || O->isDebug()) - continue; - unsigned Reg = O->getReg(); - if (!TargetRegisterInfo::isPhysicalRegister(Reg)) - continue; - removeReg(Reg); - } else if (O->isRegMask()) - removeRegsNotPreserved(O->getRegMask()); - } - - // Add uses to the set. - for (ConstMIBundleOperands O(MI); O.isValid(); ++O) { - if (!O->isReg() || !O->readsReg() || O->isDebug()) - continue; - unsigned Reg = O->getReg(); - if (!TargetRegisterInfo::isPhysicalRegister(Reg)) - continue; - addReg(Reg); - } -} - -void LiveRegUnits::accumulate(const MachineInstr &MI) { - // Add defs, uses and regmask clobbers to the set. - for (ConstMIBundleOperands O(MI); O.isValid(); ++O) { - if (O->isReg()) { - unsigned Reg = O->getReg(); - if (!TargetRegisterInfo::isPhysicalRegister(Reg)) - continue; - if (!O->isDef() && !O->readsReg()) - continue; - addReg(Reg); - } else if (O->isRegMask()) - addRegsInMask(O->getRegMask()); - } -} - -/// Add live-in registers of basic block \p MBB to \p LiveUnits. -static void addBlockLiveIns(LiveRegUnits &LiveUnits, - const MachineBasicBlock &MBB) { - for (const auto &LI : MBB.liveins()) - LiveUnits.addRegMasked(LI.PhysReg, LI.LaneMask); -} - -/// Adds all callee saved registers to \p LiveUnits. -static void addCalleeSavedRegs(LiveRegUnits &LiveUnits, - const MachineFunction &MF) { - const MachineRegisterInfo &MRI = MF.getRegInfo(); - for (const MCPhysReg *CSR = MRI.getCalleeSavedRegs(); CSR && *CSR; ++CSR) - LiveUnits.addReg(*CSR); -} - -void LiveRegUnits::addPristines(const MachineFunction &MF) { - const MachineFrameInfo &MFI = MF.getFrameInfo(); - if (!MFI.isCalleeSavedInfoValid()) - return; - /// This function will usually be called on an empty object, handle this - /// as a special case. - if (empty()) { - /// Add all callee saved regs, then remove the ones that are saved and - /// restored. - addCalleeSavedRegs(*this, MF); - /// Remove the ones that are not saved/restored; they are pristine. - for (const CalleeSavedInfo &Info : MFI.getCalleeSavedInfo()) - removeReg(Info.getReg()); - return; - } - /// If a callee-saved register that is not pristine is already present - /// in the set, we should make sure that it stays in it. Precompute the - /// set of pristine registers in a separate object. - /// Add all callee saved regs, then remove the ones that are saved+restored. - LiveRegUnits Pristine(*TRI); - addCalleeSavedRegs(Pristine, MF); - /// Remove the ones that are not saved/restored; they are pristine. - for (const CalleeSavedInfo &Info : MFI.getCalleeSavedInfo()) - Pristine.removeReg(Info.getReg()); - addUnits(Pristine.getBitVector()); -} - -void LiveRegUnits::addLiveOuts(const MachineBasicBlock &MBB) { - const MachineFunction &MF = *MBB.getParent(); - if (!MBB.succ_empty()) { - addPristines(MF); - // To get the live-outs we simply merge the live-ins of all successors. - for (const MachineBasicBlock *Succ : MBB.successors()) - addBlockLiveIns(*this, *Succ); - } else if (MBB.isReturnBlock()) { - // For the return block: Add all callee saved registers. - const MachineFrameInfo &MFI = MF.getFrameInfo(); - if (MFI.isCalleeSavedInfoValid()) - addCalleeSavedRegs(*this, MF); - } -} - -void LiveRegUnits::addLiveIns(const MachineBasicBlock &MBB) { - const MachineFunction &MF = *MBB.getParent(); - addPristines(MF); - addBlockLiveIns(*this, MBB); -} |
