X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FTarget%2FPowerPC%2FPPC.h;h=49f77b538c1bd3009b761fa120ee360dccac5ace;hp=bbd247f20fbce7be15d755e7a8231738e01a78a3;hb=cf0db29df20d9c665da7e82bb261bdd7cf7f1b2b;hpb=d7802bf0ddcac16ee910105922492aee86a53e1b diff --git a/lib/Target/PowerPC/PPC.h b/lib/Target/PowerPC/PPC.h index bbd247f20fb..49f77b538c1 100644 --- a/lib/Target/PowerPC/PPC.h +++ b/lib/Target/PowerPC/PPC.h @@ -12,10 +12,9 @@ // //===----------------------------------------------------------------------===// -#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/PPCBaseInfo.h" #include "MCTargetDesc/PPCMCTargetDesc.h" #include @@ -24,20 +23,33 @@ namespace llvm { class PPCTargetMachine; + class PassRegistry; class FunctionPass; - class JITCodeEmitter; + class ImmutablePass; class MachineInstr; class AsmPrinter; class MCInst; - FunctionPass *createPPCCTRLoops(); + 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 *createPPCBranchSelectionPass(); FunctionPass *createPPCISelDag(PPCTargetMachine &TM); - FunctionPass *createPPCJITCodeEmitterPass(PPCTargetMachine &TM, - JITCodeEmitter &MCE); + FunctionPass *createPPCTLSDynamicCallPass(); void LowerPPCMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI, AsmPrinter &AP, bool isDarwin); - + + void initializePPCVSXFMAMutatePass(PassRegistry&); + extern char &PPCVSXFMAMutateID; + namespace PPCII { /// Target Operand Flag enum. @@ -46,38 +58,46 @@ namespace llvm { // PPC Specific MachineOperand flags. MO_NO_FLAG, - /// MO_DARWIN_STUB - On a symbol operand "FOO", this indicates that the - /// reference is actually to the "FOO$stub" symbol. This is used for calls - /// and jumps to external functions on Tiger and earlier. - MO_DARWIN_STUB = 1, + /// 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 = 4, + 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 = 8, + 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 = 16, + MO_NLP_HIDDEN_FLAG = 8, /// The next are not flags but distinct values. - MO_ACCESS_MASK = 0xe0, + 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, - /// MO_LO16, MO_HA16 - lo16(symbol) and ha16(symbol) - MO_LO16 = 1 << 5, - MO_HA16 = 2 << 5, + /// 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, - MO_TPREL16_HA = 3 << 5, - MO_TPREL16_LO = 4 << 5, - MO_GOT_TPREL16_DS = 5 << 5, - MO_TLS = 6 << 5 + // Symbol for VK_PPC_TLS fixup attached to an ADD instruction + MO_TLS = 8 << 4 }; } // end namespace PPCII -} // end namespace llvm; +} // namespace llvm #endif