X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FARM%2FARMISelLowering.h;h=ea2ab74375ae203726cd9df39fa5a598d73adee3;hb=f7331b3dd72409e644833ecaf62a0f6db03c97ee;hp=9842b9248bda88e97654f59575f63f6732ce6a27;hpb=9996663fc6d50128a4897ff3568d311496e9d944;p=oota-llvm.git diff --git a/lib/Target/ARM/ARMISelLowering.h b/lib/Target/ARM/ARMISelLowering.h index 9842b9248bd..ea2ab74375a 100644 --- a/lib/Target/ARM/ARMISelLowering.h +++ b/lib/Target/ARM/ARMISelLowering.h @@ -34,6 +34,7 @@ namespace llvm { WrapperJT, // WrapperJT - A wrapper node for TargetJumpTable CALL, // Function call. + CALL_PRED, // Function call that's predicable. CALL_NOLINK, // Function call with branch not branch-and-link. tCALL, // Thumb function call. BRCOND, // Conditional branch. @@ -63,7 +64,9 @@ namespace llvm { RRX, // V = RRX X, Flag -> srl X, 1 + shift in carry flag. FMRRD, // double to two gprs. - FMDRR // Two gprs to double. + FMDRR, // Two gprs to double. + + THREAD_POINTER }; } @@ -73,7 +76,7 @@ namespace llvm { class ARMTargetLowering : public TargetLowering { int VarArgsFrameIndex; // FrameIndex for start of varargs area. public: - ARMTargetLowering(TargetMachine &TM); + explicit ARMTargetLowering(TargetMachine &TM); virtual SDOperand LowerOperation(SDOperand Op, SelectionDAG &DAG); virtual const char *getTargetNodeName(unsigned Opcode) const; @@ -85,32 +88,6 @@ namespace llvm { /// by AM is legal for this target, for a load/store of the specified type. virtual bool isLegalAddressingMode(const AddrMode &AM, const Type *Ty)const; - /// isLegalAddressImmediate - Return true if the integer value can be used - /// as the offset of the target addressing mode for load / store of the - /// given type. - virtual bool isLegalAddressImmediate(int64_t V, const Type *Ty) const; - - /// isLegalAddressImmediate - Return true if the GlobalValue can be used as - /// the offset of the target addressing mode. - virtual bool isLegalAddressImmediate(GlobalValue *GV) const; - - /// isLegalAddressScale - Return true if the integer value can be used as - /// the scale of the target addressing mode for load / store of the given - /// type. - virtual bool isLegalAddressScale(int64_t S, const Type *Ty) const; - - /// isLegalAddressScaleAndImm - Return true if S works for - /// IsLegalAddressScale and V works for isLegalAddressImmediate _and_ - /// both can be applied simultaneously to the same instruction. - virtual bool isLegalAddressScaleAndImm(int64_t S, int64_t V, - const Type *Ty) const; - - /// isLegalAddressScaleAndImm - Return true if S works for - /// IsLegalAddressScale and GV works for isLegalAddressImmediate _and_ - /// both can be applied simultaneously to the same instruction. - virtual bool isLegalAddressScaleAndImm(int64_t S, GlobalValue *GV, - const Type *Ty) const; - /// getPreIndexedAddressParts - returns true by value, base pointer and /// offset pointer and addressing mode by reference if the node's address /// can be legally represented as pre-indexed load / store address. @@ -131,6 +108,7 @@ namespace llvm { uint64_t Mask, uint64_t &KnownZero, uint64_t &KnownOne, + const SelectionDAG &DAG, unsigned Depth) const; ConstraintType getConstraintType(const std::string &Constraint) const; std::pair @@ -149,9 +127,17 @@ namespace llvm { unsigned ARMPCLabelIndex; SDOperand LowerCALL(SDOperand Op, SelectionDAG &DAG); - SDOperand LowerGlobalAddress(SDOperand Op, SelectionDAG &DAG); + SDOperand LowerGlobalAddressDarwin(SDOperand Op, SelectionDAG &DAG); + SDOperand LowerGlobalAddressELF(SDOperand Op, SelectionDAG &DAG); + SDOperand LowerGlobalTLSAddress(SDOperand Op, SelectionDAG &DAG); + SDOperand LowerToTLSGeneralDynamicModel(GlobalAddressSDNode *GA, + SelectionDAG &DAG); + SDOperand LowerToTLSExecModels(GlobalAddressSDNode *GA, + SelectionDAG &DAG); + SDOperand LowerGLOBAL_OFFSET_TABLE(SDOperand Op, SelectionDAG &DAG); SDOperand LowerFORMAL_ARGUMENTS(SDOperand Op, SelectionDAG &DAG); SDOperand LowerBR_JT(SDOperand Op, SelectionDAG &DAG); + SDOperand LowerMEMCPY(SDOperand Op, SelectionDAG &DAG); }; }