1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00

[RegBankSelect] Specify different optimization mode for the pass.

The mode should be choose by the target when instantiating the pass.

llvm-svn: 270235
This commit is contained in:
Quentin Colombet 2016-05-20 16:55:35 +00:00
parent 56256e385a
commit 3d214a2bd4
2 changed files with 19 additions and 4 deletions

View File

@ -80,6 +80,16 @@ class RegBankSelect : public MachineFunctionPass {
public:
static char ID;
/// List of the modes supported by the RegBankSelect pass.
enum Mode {
/// Assign the register banks as fast as possible (default).
Fast,
/// Greedily minimize the cost of assigning register banks.
/// This should produce code of greater quality, but will
/// require more compile time.
Greedy
};
/// Abstract class used to represent an insertion point in a CFG.
/// This class records an insertion point and materializes it on
/// demand.
@ -453,6 +463,9 @@ private:
/// Helper class used for every code morphing.
MachineIRBuilder MIRBuilder;
/// Optimization mode of the pass.
Mode OptMode;
/// Assign the register bank of each operand of \p MI.
void assignInstr(MachineInstr &MI);
@ -535,8 +548,8 @@ private:
SmallVectorImpl<RepairingPlacement> &RepairPts);
public:
// Ctor, nothing fancy.
RegBankSelect();
/// Create a RegBankSelect pass with the specified \p RunningMode.
RegBankSelect(Mode RunningMode = Fast);
const char *getPassName() const override {
return "RegBankSelect";

View File

@ -29,8 +29,9 @@ INITIALIZE_PASS(RegBankSelect, "regbankselect",
"Assign register bank of generic virtual registers",
false, false);
RegBankSelect::RegBankSelect()
: MachineFunctionPass(ID), RBI(nullptr), MRI(nullptr) {
RegBankSelect::RegBankSelect(Mode RunningMode)
: MachineFunctionPass(ID), RBI(nullptr), MRI(nullptr),
OptMode(RunningMode) {
initializeRegBankSelectPass(*PassRegistry::getPassRegistry());
}
@ -39,6 +40,7 @@ void RegBankSelect::init(MachineFunction &MF) {
assert(RBI && "Cannot work without RegisterBankInfo");
MRI = &MF.getRegInfo();
TRI = MF.getSubtarget().getRegisterInfo();
assert(OptMode == Mode::Fast && "Non-fast mode not implemented");
MIRBuilder.setMF(MF);
}