diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:17:04 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:17:04 +0000 |
| commit | b915e9e0fc85ba6f398b3fab0db6a81a8913af94 (patch) | |
| tree | 98b8f811c7aff2547cab8642daf372d6c59502fb /include/llvm/CodeGen/GlobalISel/RegBankSelect.h | |
| parent | 6421cca32f69ac849537a3cff78c352195e99f1b (diff) | |
Notes
Diffstat (limited to 'include/llvm/CodeGen/GlobalISel/RegBankSelect.h')
| -rw-r--r-- | include/llvm/CodeGen/GlobalISel/RegBankSelect.h | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/include/llvm/CodeGen/GlobalISel/RegBankSelect.h b/include/llvm/CodeGen/GlobalISel/RegBankSelect.h index b393744e67cb6..106fc9ffb8b5e 100644 --- a/include/llvm/CodeGen/GlobalISel/RegBankSelect.h +++ b/include/llvm/CodeGen/GlobalISel/RegBankSelect.h @@ -74,6 +74,7 @@ class BlockFrequency; class MachineBranchProbabilityInfo; class MachineBlockFrequencyInfo; class MachineRegisterInfo; +class TargetPassConfig; class TargetRegisterInfo; /// This pass implements the reg bank selector pass used in the GlobalISel @@ -476,8 +477,12 @@ private: /// Optimization mode of the pass. Mode OptMode; + /// Current target configuration. Controls how the pass handles errors. + const TargetPassConfig *TPC; + /// Assign the register bank of each operand of \p MI. - void assignInstr(MachineInstr &MI); + /// \return True on success, false otherwise. + bool assignInstr(MachineInstr &MI); /// Initialize the field members using \p MF. void init(MachineFunction &MF); @@ -520,7 +525,9 @@ private: /// /// \note The caller is supposed to do the rewriting of op if need be. /// I.e., Reg = op ... => <NewRegs> = NewOp ... - void repairReg(MachineOperand &MO, + /// + /// \return True if the repairing worked, false otherwise. + bool repairReg(MachineOperand &MO, const RegisterBankInfo::ValueMapping &ValMapping, RegBankSelect::RepairingPlacement &RepairPt, const iterator_range<SmallVectorImpl<unsigned>::const_iterator> @@ -570,7 +577,8 @@ private: /// Apply \p Mapping to \p MI. \p RepairPts represents the different /// mapping action that need to happen for the mapping to be /// applied. - void applyMapping(MachineInstr &MI, + /// \return True if the mapping was applied sucessfully, false otherwise. + bool applyMapping(MachineInstr &MI, const RegisterBankInfo::InstructionMapping &InstrMapping, SmallVectorImpl<RepairingPlacement> &RepairPts); @@ -578,12 +586,21 @@ public: /// Create a RegBankSelect pass with the specified \p RunningMode. RegBankSelect(Mode RunningMode = Fast); - const char *getPassName() const override { - return "RegBankSelect"; - } + StringRef getPassName() const override { return "RegBankSelect"; } void getAnalysisUsage(AnalysisUsage &AU) const override; + MachineFunctionProperties getRequiredProperties() const override { + return MachineFunctionProperties() + .set(MachineFunctionProperties::Property::IsSSA) + .set(MachineFunctionProperties::Property::Legalized); + } + + MachineFunctionProperties getSetProperties() const override { + return MachineFunctionProperties().set( + MachineFunctionProperties::Property::RegBankSelected); + } + /// Walk through \p MF and assign a register bank to every virtual register /// that are still mapped to nothing. /// The target needs to provide a RegisterBankInfo and in particular |
