From: Quentin Colombet Date: Thu, 7 Apr 2016 00:14:30 +0000 (+0000) Subject: [AArch64] Teach RegisterBankInfo about the mapping of register classes X-Git-Tag: llvmorg-3.9.0-rc1~9787 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cbc353a422dd72561602b8d278db61b7fee2a6ba;p=platform%2Fupstream%2Fllvm.git [AArch64] Teach RegisterBankInfo about the mapping of register classes on register banks. llvm-svn: 265626 --- diff --git a/llvm/lib/Target/AArch64/AArch64RegisterBankInfo.cpp b/llvm/lib/Target/AArch64/AArch64RegisterBankInfo.cpp index 6adfc2a..5f70c4b 100644 --- a/llvm/lib/Target/AArch64/AArch64RegisterBankInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64RegisterBankInfo.cpp @@ -63,3 +63,38 @@ unsigned AArch64RegisterBankInfo::copyCost(const RegisterBank &A, // * build_sequence cost. return 0; } + +const RegisterBank &AArch64RegisterBankInfo::getRegBankFromRegClass( + const TargetRegisterClass &RC) const { + switch (RC.getID()) { + case AArch64::FPR8RegClassID: + case AArch64::FPR16RegClassID: + case AArch64::FPR32RegClassID: + case AArch64::FPR64RegClassID: + case AArch64::FPR128RegClassID: + case AArch64::FPR128_loRegClassID: + case AArch64::DDRegClassID: + case AArch64::DDDRegClassID: + case AArch64::DDDDRegClassID: + case AArch64::QQRegClassID: + case AArch64::QQQRegClassID: + case AArch64::QQQQRegClassID: + return getRegBank(AArch64::FPRRegBankID); + case AArch64::GPR32commonRegClassID: + case AArch64::GPR32RegClassID: + case AArch64::GPR32spRegClassID: + case AArch64::GPR32sponlyRegClassID: + case AArch64::GPR32allRegClassID: + case AArch64::GPR64commonRegClassID: + case AArch64::GPR64RegClassID: + case AArch64::GPR64spRegClassID: + case AArch64::GPR64sponlyRegClassID: + case AArch64::GPR64allRegClassID: + case AArch64::tcGPR64RegClassID: + case AArch64::WSeqPairsClassRegClassID: + case AArch64::XSeqPairsClassRegClassID: + return getRegBank(AArch64::FPRRegBankID); + default: + llvm_unreachable("Register class not supported"); + } +} diff --git a/llvm/lib/Target/AArch64/AArch64RegisterBankInfo.h b/llvm/lib/Target/AArch64/AArch64RegisterBankInfo.h index c6019b5..c58d452 100644 --- a/llvm/lib/Target/AArch64/AArch64RegisterBankInfo.h +++ b/llvm/lib/Target/AArch64/AArch64RegisterBankInfo.h @@ -36,6 +36,21 @@ public: /// get the cost of A = COPY B. unsigned copyCost(const RegisterBank &A, const RegisterBank &B) const override; + + /// Get a register bank that covers \p RC. + /// + /// \pre \p RC is a user-defined register class (as opposed as one + /// generated by TableGen). + /// + /// \note The mapping RC -> RegBank could be built while adding the + /// coverage for the register banks. However, we do not do it, because, + /// at least for now, we only need this information for register classes + /// that are used in the description of instruction. In other words, + /// there are just a handful of them and we do not want to waste space. + /// + /// \todo This should be TableGen'ed. + const RegisterBank & + getRegBankFromRegClass(const TargetRegisterClass &RC) const override; }; } // End llvm namespace. #endif