X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FPowerPC%2FPPC.h;h=a259ed3fd327691af5ae2cc6636e3e688c630dd0;hb=HEAD;hp=89dc1c131e795b76c26402f40673d848dbf04e8d;hpb=2286f8dc4cec0625f7d7a14e2570926cf8599646;p=oota-llvm.git diff --git a/lib/Target/PowerPC/PPC.h b/lib/Target/PowerPC/PPC.h index 89dc1c131e7..a259ed3fd32 100644 --- a/lib/Target/PowerPC/PPC.h +++ b/lib/Target/PowerPC/PPC.h @@ -12,41 +12,95 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_TARGET_POWERPC_H -#define LLVM_TARGET_POWERPC_H +#ifndef LLVM_LIB_TARGET_POWERPC_PPC_H +#define LLVM_LIB_TARGET_POWERPC_PPC_H + +#include "MCTargetDesc/PPCMCTargetDesc.h" +#include // GCC #defines PPC on Linux but we use it as our namespace name #undef PPC -#include "llvm/Target/TargetMachine.h" - namespace llvm { class PPCTargetMachine; + class PassRegistry; class FunctionPass; - class MachineCodeEmitter; - class ObjectCodeEmitter; - class formatted_raw_ostream; - -FunctionPass *createPPCBranchSelectionPass(); -FunctionPass *createPPCISelDag(PPCTargetMachine &TM); -FunctionPass *createPPCAsmPrinterPass(formatted_raw_ostream &OS, - PPCTargetMachine &TM, - bool Verbose); -FunctionPass *createPPCCodeEmitterPass(PPCTargetMachine &TM, - MachineCodeEmitter &MCE); -FunctionPass *createPPCJITCodeEmitterPass(PPCTargetMachine &TM, - JITCodeEmitter &MCE); -FunctionPass *createPPCObjectCodeEmitterPass(PPCTargetMachine &TM, - ObjectCodeEmitter &OCE); -} // end namespace llvm; + class ImmutablePass; + class MachineInstr; + class AsmPrinter; + class MCInst; -// Defines symbolic names for PowerPC registers. This defines a mapping from -// register name to register number. -// -#include "PPCGenRegisterNames.inc" + FunctionPass *createPPCCTRLoops(PPCTargetMachine &TM); +#ifndef NDEBUG + FunctionPass *createPPCCTRLoopsVerify(); +#endif + FunctionPass *createPPCLoopDataPrefetchPass(); + FunctionPass *createPPCLoopPreIncPrepPass(PPCTargetMachine &TM); + FunctionPass *createPPCTOCRegDepsPass(); + FunctionPass *createPPCEarlyReturnPass(); + FunctionPass *createPPCVSXCopyPass(); + FunctionPass *createPPCVSXFMAMutatePass(); + FunctionPass *createPPCVSXSwapRemovalPass(); + FunctionPass *createPPCMIPeepholePass(); + FunctionPass *createPPCBranchSelectionPass(); + FunctionPass *createPPCISelDag(PPCTargetMachine &TM); + FunctionPass *createPPCTLSDynamicCallPass(); + FunctionPass *createPPCBoolRetToIntPass(); + void LowerPPCMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI, + AsmPrinter &AP, bool isDarwin); -// Defines symbolic names for the PowerPC instructions. -// -#include "PPCGenInstrNames.inc" + void initializePPCVSXFMAMutatePass(PassRegistry&); + void initializePPCBoolRetToIntPass(PassRegistry&); + extern char &PPCVSXFMAMutateID; + + namespace PPCII { + + /// Target Operand Flag enum. + enum TOF { + //===------------------------------------------------------------------===// + // PPC Specific MachineOperand flags. + MO_NO_FLAG, + + /// MO_PLT_OR_STUB - On a symbol operand "FOO", this indicates that the + /// reference is actually to the "FOO$stub" or "FOO@plt" symbol. This is + /// used for calls and jumps to external functions on Tiger and earlier, and + /// for PIC calls on Linux and ELF systems. + MO_PLT_OR_STUB = 1, + + /// MO_PIC_FLAG - If this bit is set, the symbol reference is relative to + /// the function's picbase, e.g. lo16(symbol-picbase). + MO_PIC_FLAG = 2, + + /// MO_NLP_FLAG - If this bit is set, the symbol reference is actually to + /// the non_lazy_ptr for the global, e.g. lo16(symbol$non_lazy_ptr-picbase). + MO_NLP_FLAG = 4, + + /// MO_NLP_HIDDEN_FLAG - If this bit is set, the symbol reference is to a + /// symbol with hidden visibility. This causes a different kind of + /// non-lazy-pointer to be generated. + MO_NLP_HIDDEN_FLAG = 8, + + /// The next are not flags but distinct values. + MO_ACCESS_MASK = 0xf0, + + /// MO_LO, MO_HA - lo16(symbol) and ha16(symbol) + MO_LO = 1 << 4, + MO_HA = 2 << 4, + + MO_TPREL_LO = 4 << 4, + MO_TPREL_HA = 3 << 4, + + /// These values identify relocations on immediates folded + /// into memory operations. + MO_DTPREL_LO = 5 << 4, + MO_TLSLD_LO = 6 << 4, + MO_TOC_LO = 7 << 4, + + // Symbol for VK_PPC_TLS fixup attached to an ADD instruction + MO_TLS = 8 << 4 + }; + } // end namespace PPCII + +} // end namespace llvm; #endif