PPCRegisterInfo.h revision 73f50d9bc3bd46cc0abeba9bb0d46977ba1aea42
121e463b2bf864671a87ebe386cb100ef9349a540Nate Begeman//===- PPCRegisterInfo.h - PowerPC Register Information Impl -----*- C++ -*-==// 2b5f662fa0314f7e7e690aae8ebff7136cc3a5ab0Misha Brukman// 3f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// The LLVM Compiler Infrastructure 4f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details. 7b5f662fa0314f7e7e690aae8ebff7136cc3a5ab0Misha Brukman// 8f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman//===----------------------------------------------------------------------===// 9f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// 106f0d024a534af18d9e60b3ea757376cd8a3a980eDan Gohman// This file contains the PowerPC implementation of the TargetRegisterInfo 116f0d024a534af18d9e60b3ea757376cd8a3a980eDan Gohman// class. 12f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// 13f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman//===----------------------------------------------------------------------===// 14f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 15f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#ifndef POWERPC32_REGISTERINFO_H 16f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#define POWERPC32_REGISTERINFO_H 17f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 182668959b8879097db368aec7d76c455260abc75bChris Lattner#include "PPC.h" 19f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#include <map> 20f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 2173f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Cheng#define GET_REGINFO_HEADER 2273f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Cheng#include "PPCGenRegisterInfo.inc" 2373f50d9bc3bd46cc0abeba9bb0d46977ba1aea42Evan Cheng 24f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukmannamespace llvm { 25804e06704261f233111913a047ef7f7dec1b8725Chris Lattnerclass PPCSubtarget; 26c0f64ffab93d11fb27a3b8a0707b77400918a20eEvan Chengclass TargetInstrInfo; 27f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukmanclass Type; 28f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 2921e463b2bf864671a87ebe386cb100ef9349a540Nate Begemanclass PPCRegisterInfo : public PPCGenRegisterInfo { 30f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman std::map<unsigned, unsigned> ImmToIdxMap; 31804e06704261f233111913a047ef7f7dec1b8725Chris Lattner const PPCSubtarget &Subtarget; 327ce45783531cfa81bfd7be561ea7e4738e8c6ca8Evan Cheng const TargetInstrInfo &TII; 33f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukmanpublic: 347ce45783531cfa81bfd7be561ea7e4738e8c6ca8Evan Cheng PPCRegisterInfo(const PPCSubtarget &SubTarget, const TargetInstrInfo &tii); 35369503f8412bba4a0138074c97107c09cc4513e0Chris Lattner 36369503f8412bba4a0138074c97107c09cc4513e0Chris Lattner /// getRegisterNumbering - Given the enum value for some register, e.g. 37369503f8412bba4a0138074c97107c09cc4513e0Chris Lattner /// PPC::F14, return the number that it corresponds to (e.g. 14). 38369503f8412bba4a0138074c97107c09cc4513e0Chris Lattner static unsigned getRegisterNumbering(unsigned RegEnum); 39f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 40770bcc7b15adbc978800db70dbb1c3c22913b52cEvan Cheng /// getPointerRegClass - Return the register class to use to hold pointers. 41770bcc7b15adbc978800db70dbb1c3c22913b52cEvan Cheng /// This is used for addressing modes. 422cfd52c507bd5790457a171eb9bcb39019cc6860Chris Lattner virtual const TargetRegisterClass *getPointerRegClass(unsigned Kind=0) const; 43770bcc7b15adbc978800db70dbb1c3c22913b52cEvan Cheng 44f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman /// Code Generation virtual methods... 452365f51ed03afe6993bae962fdc2e5a956a64cd5Anton Korobeynikov const unsigned *getCalleeSavedRegs(const MachineFunction* MF = 0) const; 460f3ac8d8d4ce23eb2ae6f9d850f389250874eea5Evan Cheng 47b371f457b0ea4a652a9f526ba4375c80ae542252Evan Cheng BitVector getReservedRegs(const MachineFunction &MF) const; 48b371f457b0ea4a652a9f526ba4375c80ae542252Evan Cheng 497194aaf738a1b89441635340403f1c5b06ae18efBill Wendling /// requiresRegisterScavenging - We require a register scavenger. 507194aaf738a1b89441635340403f1c5b06ae18efBill Wendling /// FIXME (64-bit): Should be inlined. 517194aaf738a1b89441635340403f1c5b06ae18efBill Wendling bool requiresRegisterScavenging(const MachineFunction &MF) const; 527194aaf738a1b89441635340403f1c5b06ae18efBill Wendling 53f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman void eliminateCallFramePseudoInstr(MachineFunction &MF, 54f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman MachineBasicBlock &MBB, 55f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman MachineBasicBlock::iterator I) const; 56f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 577194aaf738a1b89441635340403f1c5b06ae18efBill Wendling void lowerDynamicAlloc(MachineBasicBlock::iterator II, 587194aaf738a1b89441635340403f1c5b06ae18efBill Wendling int SPAdj, RegScavenger *RS) const; 597194aaf738a1b89441635340403f1c5b06ae18efBill Wendling void lowerCRSpilling(MachineBasicBlock::iterator II, unsigned FrameIndex, 607194aaf738a1b89441635340403f1c5b06ae18efBill Wendling int SPAdj, RegScavenger *RS) const; 61fcb4a8ead3cd8d9540d5eaa448af5d14a0ee341aJim Grosbach void eliminateFrameIndex(MachineBasicBlock::iterator II, 62fcb4a8ead3cd8d9540d5eaa448af5d14a0ee341aJim Grosbach int SPAdj, RegScavenger *RS = NULL) const; 63f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 64a99791886d5d4af2b900cd8cc1c9ed1677b6f0f4Jim Laskey // Debug information queries. 654188699f80c233a20b6ddc61570a8a8c1804cb85Jim Laskey unsigned getRARegister() const; 66b9c2fd964ee7dd7823ac71db8443055e4d0f1c15David Greene unsigned getFrameRegister(const MachineFunction &MF) const; 6762819f31440fe1b1415473a89b8683b5b690d5faJim Laskey 6862819f31440fe1b1415473a89b8683b5b690d5faJim Laskey // Exception handling queries. 6962819f31440fe1b1415473a89b8683b5b690d5faJim Laskey unsigned getEHExceptionRegister() const; 7062819f31440fe1b1415473a89b8683b5b690d5faJim Laskey unsigned getEHHandlerRegister() const; 71f191c80cd79ee35e47b5a4feed98d687782dfe85Anton Korobeynikov 72b97aec663b1591e71c9ddee6dbb327d1b827eda5Dale Johannesen int getDwarfRegNum(unsigned RegNum, bool isEH) const; 736e032942cf58d1c41f88609a1cec74eb74940ecdRafael Espindola int getLLVMRegNum(unsigned RegNum, bool isEH) const; 74f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman}; 75f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 76f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman} // end namespace llvm 77f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 78f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#endif 79