diff options
author | Ahmed Bougacha <ahmed.bougacha@gmail.com> | 2016-07-27 14:31:55 +0000 |
---|---|---|
committer | Ahmed Bougacha <ahmed.bougacha@gmail.com> | 2016-07-27 14:31:55 +0000 |
commit | 6756a2c95335fba8bece4402e62f5057a20f3b4c (patch) | |
tree | 709ff96a5dff1a43cd8648f7001709782eb47020 /llvm/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp | |
parent | 5e402eec7bc306343cfba703fd4d4acc981b4ead (diff) | |
download | bcm5719-llvm-6756a2c95335fba8bece4402e62f5057a20f3b4c.tar.gz bcm5719-llvm-6756a2c95335fba8bece4402e62f5057a20f3b4c.zip |
[GlobalISel] Introduce an instruction selector.
And implement it for AArch64, supporting x/w ADD/OR.
Differential Revision: https://reviews.llvm.org/D22373
llvm-svn: 276875
Diffstat (limited to 'llvm/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp b/llvm/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp index 1148f5ce6f9..5e5541799c5 100644 --- a/llvm/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp +++ b/llvm/lib/CodeGen/GlobalISel/RegisterBankInfo.cpp @@ -189,6 +189,25 @@ const RegisterBank *RegisterBankInfo::getRegBankFromConstraints( return &RegBank; } +const TargetRegisterClass *RegisterBankInfo::constrainGenericRegister( + unsigned Reg, const TargetRegisterClass &RC, MachineRegisterInfo &MRI) { + + // If the register already has a class, fallback to MRI::constrainRegClass. + auto &RegClassOrBank = MRI.getRegClassOrRegBank(Reg); + if (RegClassOrBank.is<const TargetRegisterClass *>()) + return MRI.constrainRegClass(Reg, &RC); + + const RegisterBank *RB = RegClassOrBank.get<const RegisterBank *>(); + assert(RB && "Generic register does not have a register bank"); + + // Otherwise, all we can do is ensure the bank covers the class, and set it. + if (!RB->covers(RC)) + return nullptr; + + MRI.setRegClass(Reg, &RC); + return &RC; +} + RegisterBankInfo::InstructionMapping RegisterBankInfo::getInstrMappingImpl(const MachineInstr &MI) const { RegisterBankInfo::InstructionMapping Mapping(DefaultMappingID, /*Cost*/ 1, |