PPCInstrInfo.h revision 408396014742a05cad1c91949d2226169e3f9d80
1c16257f05391b8aeccef62d6b543f1cb5a8185feChris Lattner//===- PPCInstrInfo.h - PowerPC Instruction Information ---------*- C++ -*-===// 2b5f662fa0314f7e7e690aae8ebff7136cc3a5ab0Misha Brukman// 3f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// The LLVM Compiler Infrastructure 4f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// 5f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// This file was developed by the LLVM research group and is distributed under 6f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// the University of Illinois Open Source License. See LICENSE.TXT for details. 7b5f662fa0314f7e7e690aae8ebff7136cc3a5ab0Misha Brukman// 8f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman//===----------------------------------------------------------------------===// 9f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// 10f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// This file contains the PowerPC implementation of the TargetInstrInfo class. 11f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman// 12f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman//===----------------------------------------------------------------------===// 13f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 14f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#ifndef POWERPC32_INSTRUCTIONINFO_H 15f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#define POWERPC32_INSTRUCTIONINFO_H 16f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 172668959b8879097db368aec7d76c455260abc75bChris Lattner#include "PPC.h" 18617742b1b8b7fbb07b4ab5db7c292bff78d709f6Chris Lattner#include "llvm/Target/TargetInstrInfo.h" 1916e71f2f70811c69c56052dd146324fe20e31db5Chris Lattner#include "PPCRegisterInfo.h" 20f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 21f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukmannamespace llvm { 22617742b1b8b7fbb07b4ab5db7c292bff78d709f6Chris Lattner 2321e463b2bf864671a87ebe386cb100ef9349a540Nate Begemanclass PPCInstrInfo : public TargetInstrInfo { 2421e463b2bf864671a87ebe386cb100ef9349a540Nate Begeman const PPCRegisterInfo RI; 25f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukmanpublic: 2621e463b2bf864671a87ebe386cb100ef9349a540Nate Begeman PPCInstrInfo(); 27f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 28f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman /// getRegisterInfo - TargetInstrInfo is a superset of MRegister info. As 29f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman /// such, whenever a client has an instance of instruction info, it should 30f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman /// always be able to get register info as well (through this method). 31f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman /// 32f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman virtual const MRegisterInfo &getRegisterInfo() const { return RI; } 33f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 34f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman // 35f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman // Return true if the instruction is a register to register move and 36f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman // leave the source and dest operands in the passed parameters. 37f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman // 38f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman virtual bool isMoveInstr(const MachineInstr& MI, 39f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman unsigned& sourceReg, 40f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman unsigned& destReg) const; 41f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 42408396014742a05cad1c91949d2226169e3f9d80Chris Lattner unsigned isLoadFromStackSlot(MachineInstr *MI, int &FrameIndex) const; 43408396014742a05cad1c91949d2226169e3f9d80Chris Lattner 44043870dd85ea41e8972c304b122070a417c8a4bcChris Lattner // commuteInstruction - We can commute rlwimi instructions, but only if the 45043870dd85ea41e8972c304b122070a417c8a4bcChris Lattner // rotate amt is zero. We also have to munge the immediates a bit. 46043870dd85ea41e8972c304b122070a417c8a4bcChris Lattner virtual MachineInstr *commuteInstruction(MachineInstr *MI) const; 47043870dd85ea41e8972c304b122070a417c8a4bcChris Lattner 48f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman static unsigned invertPPCBranchOpcode(unsigned Opcode) { 49f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman switch (Opcode) { 50f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman default: assert(0 && "Unknown PPC branch opcode!"); 51f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman case PPC::BEQ: return PPC::BNE; 52f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman case PPC::BNE: return PPC::BEQ; 53f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman case PPC::BLT: return PPC::BGE; 54f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman case PPC::BGE: return PPC::BLT; 55f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman case PPC::BGT: return PPC::BLE; 56f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman case PPC::BLE: return PPC::BGT; 57e44b2d16ee088c44ebbe6f21a2af8b5321b68e48Chris Lattner case PPC::BNU: return PPC::BUN; 58e44b2d16ee088c44ebbe6f21a2af8b5321b68e48Chris Lattner case PPC::BUN: return PPC::BNU; 59b5f662fa0314f7e7e690aae8ebff7136cc3a5ab0Misha Brukman } 60f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman } 61f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman}; 62f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 63f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman} 64f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman 65f2ccb77ee9d8ab35866dae111fa36929689c7511Misha Brukman#endif 66