LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | List of all members
llvm::AArch64TargetLowering Class Reference

#include <AArch64ISelLowering.h>

Inheritance diagram for llvm::AArch64TargetLowering:
Inheritance graph
[legend]
Collaboration diagram for llvm::AArch64TargetLowering:
Collaboration graph
[legend]

Public Member Functions

 AArch64TargetLowering (AArch64TargetMachine &TM)
 
const char * getTargetNodeName (unsigned Opcode) const
 This method returns the name of a target specific DAG node. More...
 
CCAssignFnCCAssignFnForNode (CallingConv::ID CC) const
 
SDValue LowerFormalArguments (SDValue Chain, CallingConv::ID CallConv, bool isVarArg, const SmallVectorImpl< ISD::InputArg > &Ins, SDLoc dl, SelectionDAG &DAG, SmallVectorImpl< SDValue > &InVals) const
 
SDValue LowerReturn (SDValue Chain, CallingConv::ID CallConv, bool isVarArg, const SmallVectorImpl< ISD::OutputArg > &Outs, const SmallVectorImpl< SDValue > &OutVals, SDLoc dl, SelectionDAG &DAG) const
 
SDValue LowerCall (CallLoweringInfo &CLI, SmallVectorImpl< SDValue > &InVals) const
 
SDValue LowerCallResult (SDValue Chain, SDValue InFlag, CallingConv::ID CallConv, bool IsVarArg, const SmallVectorImpl< ISD::InputArg > &Ins, SDLoc dl, SelectionDAG &DAG, SmallVectorImpl< SDValue > &InVals) const
 
bool isKnownShuffleVector (SDValue Op, SelectionDAG &DAG, SDValue &Res) const
 
SDValue LowerBUILD_VECTOR (SDValue Op, SelectionDAG &DAG, const AArch64Subtarget *ST) const
 
SDValue LowerVECTOR_SHUFFLE (SDValue Op, SelectionDAG &DAG) const
 
void SaveVarArgRegisters (CCState &CCInfo, SelectionDAG &DAG, SDLoc DL, SDValue &Chain) const
 
bool IsEligibleForTailCallOptimization (SDValue Callee, CallingConv::ID CalleeCC, bool IsVarArg, bool IsCalleeStructRet, bool IsCallerStructRet, const SmallVectorImpl< ISD::OutputArg > &Outs, const SmallVectorImpl< SDValue > &OutVals, const SmallVectorImpl< ISD::InputArg > &Ins, SelectionDAG &DAG) const
 
SDValue addTokenForArgument (SDValue Chain, SelectionDAG &DAG, MachineFrameInfo *MFI, int ClobberedFI) const
 
EVT getSetCCResultType (LLVMContext &Context, EVT VT) const
 
bool DoesCalleeRestoreStack (CallingConv::ID CallCC, bool TailCallOpt) const
 
bool IsTailCallConvention (CallingConv::ID CallCC) const
 
SDValue LowerOperation (SDValue Op, SelectionDAG &DAG) const
 
bool isLegalICmpImmediate (int64_t Val) const
 
SDValue getSelectableIntSetCC (SDValue LHS, SDValue RHS, ISD::CondCode CC, SDValue &A64cc, SelectionDAG &DAG, SDLoc &dl) const
 
virtual MachineBasicBlockEmitInstrWithCustomInserter (MachineInstr *MI, MachineBasicBlock *MBB) const
 
MachineBasicBlockemitAtomicBinary (MachineInstr *MI, MachineBasicBlock *MBB, unsigned Size, unsigned Opcode) const
 
MachineBasicBlockemitAtomicBinaryMinMax (MachineInstr *MI, MachineBasicBlock *BB, unsigned Size, unsigned CmpOp, A64CC::CondCodes Cond) const
 
MachineBasicBlockemitAtomicCmpSwap (MachineInstr *MI, MachineBasicBlock *BB, unsigned Size) const
 
MachineBasicBlockEmitF128CSEL (MachineInstr *MI, MachineBasicBlock *MBB) const
 
SDValue LowerATOMIC_FENCE (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerATOMIC_STORE (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerBlockAddress (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerBRCOND (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerBR_CC (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerF128ToCall (SDValue Op, SelectionDAG &DAG, RTLIB::Libcall Call) const
 
SDValue LowerFP_EXTEND (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerFP_ROUND (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerFP_TO_INT (SDValue Op, SelectionDAG &DAG, bool IsSigned) const
 
SDValue LowerRETURNADDR (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerFRAMEADDR (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerGlobalAddressELFSmall (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerGlobalAddressELFLarge (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerGlobalAddressELF (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerTLSDescCall (SDValue SymAddr, SDValue DescAddr, SDLoc DL, SelectionDAG &DAG) const
 
SDValue LowerGlobalTLSAddress (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerINT_TO_FP (SDValue Op, SelectionDAG &DAG, bool IsSigned) const
 
SDValue LowerJumpTable (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerSELECT (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerSELECT_CC (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerSETCC (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerVACOPY (SDValue Op, SelectionDAG &DAG) const
 
SDValue LowerVASTART (SDValue Op, SelectionDAG &DAG) const
 
virtual SDValue PerformDAGCombine (SDNode *N, DAGCombinerInfo &DCI) const
 
virtual bool isFMAFasterThanFMulAndFAdd (EVT VT) const
 
ConstraintType getConstraintType (const std::string &Constraint) const
 Given a constraint, return the type of constraint it is for this target. More...
 
ConstraintWeight getSingleConstraintMatchWeight (AsmOperandInfo &Info, const char *Constraint) const
 
void LowerAsmOperandForConstraint (SDValue Op, std::string &Constraint, std::vector< SDValue > &Ops, SelectionDAG &DAG) const
 
std::pair< unsigned, const
TargetRegisterClass * > 
getRegForInlineAsmConstraint (const std::string &Constraint, MVT VT) const
 
virtual bool getTgtMemIntrinsic (IntrinsicInfo &Info, const CallInst &I, unsigned Intrinsic) const LLVM_OVERRIDE
 
- Public Member Functions inherited from llvm::TargetLowering
 TargetLowering (const TargetMachine &TM, const TargetLoweringObjectFile *TLOF)
 NOTE: The constructor takes ownership of TLOF. More...
 
virtual bool getPreIndexedAddressParts (SDNode *, SDValue &, SDValue &, ISD::MemIndexedMode &, SelectionDAG &) const
 
virtual bool getPostIndexedAddressParts (SDNode *, SDNode *, SDValue &, SDValue &, ISD::MemIndexedMode &, SelectionDAG &) const
 
virtual unsigned getJumpTableEncoding () const
 
virtual const MCExprLowerCustomJumpTableEntry (const MachineJumpTableInfo *, const MachineBasicBlock *, unsigned, MCContext &) const
 
virtual SDValue getPICJumpTableRelocBase (SDValue Table, SelectionDAG &DAG) const
 Returns relocation base for the given PIC jumptable. More...
 
virtual const MCExprgetPICJumpTableRelocBaseExpr (const MachineFunction *MF, unsigned JTI, MCContext &Ctx) const
 
virtual bool isOffsetFoldingLegal (const GlobalAddressSDNode *GA) const
 
bool isInTailCallPosition (SelectionDAG &DAG, SDNode *Node, SDValue &Chain) const
 
void softenSetCCOperands (SelectionDAG &DAG, EVT VT, SDValue &NewLHS, SDValue &NewRHS, ISD::CondCode &CCCode, SDLoc DL) const
 
std::pair< SDValue, SDValuemakeLibCall (SelectionDAG &DAG, RTLIB::Libcall LC, EVT RetVT, const SDValue *Ops, unsigned NumOps, bool isSigned, SDLoc dl, bool doesNotReturn=false, bool isReturnValueUsed=true) const
 Returns a pair of (return value, chain). More...
 
bool SimplifyDemandedBits (SDValue Op, const APInt &DemandedMask, APInt &KnownZero, APInt &KnownOne, TargetLoweringOpt &TLO, unsigned Depth=0) const
 
virtual void computeMaskedBitsForTargetNode (const SDValue Op, APInt &KnownZero, APInt &KnownOne, const SelectionDAG &DAG, unsigned Depth=0) const
 
virtual unsigned ComputeNumSignBitsForTargetNode (SDValue Op, unsigned Depth=0) const
 
SDValue SimplifySetCC (EVT VT, SDValue N0, SDValue N1, ISD::CondCode Cond, bool foldBooleans, DAGCombinerInfo &DCI, SDLoc dl) const
 
virtual bool isGAPlusOffset (SDNode *N, const GlobalValue *&GA, int64_t &Offset) const
 
virtual bool isTypeDesirableForOp (unsigned, EVT VT) const
 
virtual bool isDesirableToTransformToIntegerOp (unsigned, EVT) const
 
virtual bool IsDesirableToPromoteOp (SDValue, EVT &) const
 
std::pair< SDValue, SDValueLowerCallTo (CallLoweringInfo &CLI) const
 
virtual void HandleByVal (CCState *, unsigned &, unsigned) const
 Target-specific cleanup for formal ByVal parameters. More...
 
virtual bool CanLowerReturn (CallingConv::ID, MachineFunction &, bool, const SmallVectorImpl< ISD::OutputArg > &, LLVMContext &) const
 
virtual bool isUsedByReturnOnly (SDNode *, SDValue &) const
 
virtual bool mayBeEmittedAsTailCall (CallInst *) const
 
virtual MVT getTypeForExtArgOrReturn (MVT VT, ISD::NodeType) const
 
virtual const uint16_t * getScratchRegisters (CallingConv::ID CC) const
 
virtual void LowerOperationWrapper (SDNode *N, SmallVectorImpl< SDValue > &Results, SelectionDAG &DAG) const
 
virtual void ReplaceNodeResults (SDNode *, SmallVectorImpl< SDValue > &, SelectionDAG &) const
 
virtual FastISelcreateFastISel (FunctionLoweringInfo &, const TargetLibraryInfo *) const
 
virtual bool ExpandInlineAsm (CallInst *) const
 
virtual AsmOperandInfoVector ParseConstraints (ImmutableCallSite CS) const
 
virtual ConstraintWeight getMultipleConstraintMatchWeight (AsmOperandInfo &info, int maIndex) const
 
virtual void ComputeConstraintToUse (AsmOperandInfo &OpInfo, SDValue Op, SelectionDAG *DAG=0) const
 
virtual const char * LowerXConstraint (EVT ConstraintVT) const
 
SDValue BuildExactSDIV (SDValue Op1, SDValue Op2, SDLoc dl, SelectionDAG &DAG) const
 Given an exact SDIV by a constant, create a multiplication with the multiplicative inverse of the constant. More...
 
SDValue BuildSDIV (SDNode *N, SelectionDAG &DAG, bool IsAfterLegalization, std::vector< SDNode * > *Created) const
 Given an ISD::SDIV node expressing a divide by constant, return a DAG expression to select that will generate the same value by multiplying by a magic number. See: http://the.wall.riscom.net/books/proc/ppc/cwg/code2.html More...
 
SDValue BuildUDIV (SDNode *N, SelectionDAG &DAG, bool IsAfterLegalization, std::vector< SDNode * > *Created) const
 Given an ISD::UDIV node expressing a divide by constant, return a DAG expression to select that will generate the same value by multiplying by a magic number. See: http://the.wall.riscom.net/books/proc/ppc/cwg/code2.html More...
 
virtual void AdjustInstrPostInstrSelection (MachineInstr *MI, SDNode *Node) const
 
- Public Member Functions inherited from llvm::TargetLoweringBase
 TargetLoweringBase (const TargetMachine &TM, const TargetLoweringObjectFile *TLOF)
 NOTE: The constructor takes ownership of TLOF. More...
 
virtual ~TargetLoweringBase ()
 
const TargetMachinegetTargetMachine () const
 
const DataLayoutgetDataLayout () const
 
const TargetLoweringObjectFilegetObjFileLowering () const
 
bool isBigEndian () const
 
bool isLittleEndian () const
 
virtual MVT getPointerTy (uint32_t=0) const
 
unsigned getPointerSizeInBits (uint32_t AS=0) const
 
unsigned getPointerTypeSizeInBits (Type *Ty) const
 
virtual MVT getScalarShiftAmountTy (EVT LHSTy) const
 
EVT getShiftAmountTy (EVT LHSTy) const
 
virtual MVT getVectorIdxTy () const
 
bool isSelectExpensive () const
 Return true if the select operation is expensive for this target. More...
 
virtual bool isSelectSupported (SelectSupportKind) const
 
virtual bool shouldSplitVectorElementType (EVT) const
 
bool isIntDivCheap () const
 
bool isSlowDivBypassed () const
 Returns true if target has indicated at least one type should be bypassed. More...
 
const DenseMap< unsigned int,
unsigned int > & 
getBypassSlowDivWidths () const
 
bool isPow2DivCheap () const
 Return true if pow2 div is cheaper than a chain of srl/add/sra. More...
 
bool isJumpExpensive () const
 
bool isPredictableSelectExpensive () const
 
virtual bool isLoadBitCastBeneficial (EVT, EVT) const
 
virtual MVT::SimpleValueType getCmpLibcallReturnType () const
 
BooleanContent getBooleanContents (bool isVec) const
 
Sched::Preference getSchedulingPreference () const
 Return target scheduling preference. More...
 
virtual Sched::Preference getSchedulingPreference (SDNode *) const
 
virtual const TargetRegisterClassgetRegClassFor (MVT VT) const
 
virtual const TargetRegisterClassgetRepRegClassFor (MVT VT) const
 
virtual uint8_t getRepRegClassCostFor (MVT VT) const
 
bool isTypeLegal (EVT VT) const
 
const ValueTypeActionImplgetValueTypeActions () const
 
LegalizeTypeAction getTypeAction (LLVMContext &Context, EVT VT) const
 
LegalizeTypeAction getTypeAction (MVT VT) const
 
EVT getTypeToTransformTo (LLVMContext &Context, EVT VT) const
 
EVT getTypeToExpandTo (LLVMContext &Context, EVT VT) const
 
unsigned getVectorTypeBreakdown (LLVMContext &Context, EVT VT, EVT &IntermediateVT, unsigned &NumIntermediates, MVT &RegisterVT) const
 
virtual bool isFPImmLegal (const APFloat &, EVT) const
 
virtual bool isShuffleMaskLegal (const SmallVectorImpl< int > &, EVT) const
 
virtual bool canOpTrap (unsigned Op, EVT VT) const
 
virtual bool isVectorClearMaskLegal (const SmallVectorImpl< int > &, EVT) const
 
LegalizeAction getOperationAction (unsigned Op, EVT VT) const
 
bool isOperationLegalOrCustom (unsigned Op, EVT VT) const
 
bool isOperationLegalOrPromote (unsigned Op, EVT VT) const
 
bool isOperationExpand (unsigned Op, EVT VT) const
 
bool isOperationLegal (unsigned Op, EVT VT) const
 Return true if the specified operation is legal on this target. More...
 
LegalizeAction getLoadExtAction (unsigned ExtType, MVT VT) const
 
bool isLoadExtLegal (unsigned ExtType, EVT VT) const
 Return true if the specified load with extension is legal on this target. More...
 
LegalizeAction getTruncStoreAction (MVT ValVT, MVT MemVT) const
 
bool isTruncStoreLegal (EVT ValVT, EVT MemVT) const
 
LegalizeAction getIndexedLoadAction (unsigned IdxMode, MVT VT) const
 
bool isIndexedLoadLegal (unsigned IdxMode, EVT VT) const
 Return true if the specified indexed load is legal on this target. More...
 
LegalizeAction getIndexedStoreAction (unsigned IdxMode, MVT VT) const
 
bool isIndexedStoreLegal (unsigned IdxMode, EVT VT) const
 Return true if the specified indexed load is legal on this target. More...
 
LegalizeAction getCondCodeAction (ISD::CondCode CC, MVT VT) const
 
bool isCondCodeLegal (ISD::CondCode CC, MVT VT) const
 Return true if the specified condition code is legal on this target. More...
 
MVT getTypeToPromoteTo (unsigned Op, MVT VT) const
 
EVT getValueType (Type *Ty, bool AllowUnknown=false) const
 
MVT getSimpleValueType (Type *Ty, bool AllowUnknown=false) const
 Return the MVT corresponding to this LLVM type. See getValueType. More...
 
virtual unsigned getByValTypeAlignment (Type *Ty) const
 
MVT getRegisterType (MVT VT) const
 Return the type of registers that this ValueType will eventually require. More...
 
MVT getRegisterType (LLVMContext &Context, EVT VT) const
 Return the type of registers that this ValueType will eventually require. More...
 
unsigned getNumRegisters (LLVMContext &Context, EVT VT) const
 
virtual bool ShouldShrinkFPConstant (EVT) const
 
bool hasTargetDAGCombine (ISD::NodeType NT) const
 
unsigned getMaxStoresPerMemset (bool OptSize) const
 Get maximum # of store operations permitted for llvm.memset. More...
 
unsigned getMaxStoresPerMemcpy (bool OptSize) const
 Get maximum # of store operations permitted for llvm.memcpy. More...
 
unsigned getMaxStoresPerMemmove (bool OptSize) const
 Get maximum # of store operations permitted for llvm.memmove. More...
 
virtual bool allowsUnalignedMemoryAccesses (EVT, bool *=0) const
 Determine if the target supports unaligned memory accesses. More...
 
virtual EVT getOptimalMemOpType (uint64_t, unsigned, unsigned, bool, bool, bool, MachineFunction &) const
 
virtual bool isSafeMemOpType (MVT) const
 
bool usesUnderscoreSetJmp () const
 Determine if we should use _setjmp or setjmp to implement llvm.setjmp. More...
 
bool usesUnderscoreLongJmp () const
 Determine if we should use _longjmp or longjmp to implement llvm.longjmp. More...
 
bool supportJumpTables () const
 Return whether the target can generate code for jump tables. More...
 
int getMinimumJumpTableEntries () const
 
unsigned getStackPointerRegisterToSaveRestore () const
 
unsigned getExceptionPointerRegister () const
 
unsigned getExceptionSelectorRegister () const
 
unsigned getJumpBufSize () const
 
unsigned getJumpBufAlignment () const
 
unsigned getMinStackArgumentAlignment () const
 Return the minimum stack alignment of an argument. More...
 
unsigned getMinFunctionAlignment () const
 Return the minimum function alignment. More...
 
unsigned getPrefFunctionAlignment () const
 Return the preferred function alignment. More...
 
unsigned getPrefLoopAlignment () const
 Return the preferred loop alignment. More...
 
bool getInsertFencesForAtomic () const
 
virtual bool getStackCookieLocation (unsigned &, unsigned &) const
 
virtual unsigned getMaximalGlobalOffset () const
 
virtual bool isNoopAddrSpaceCast (unsigned SrcAS, unsigned DestAS) const
 Returns true if a cast between SrcAS and DestAS is a noop. More...
 
virtual void resetOperationActions ()
 Reset the operation actions based on target options. More...
 
virtual bool GetAddrModeArguments (IntrinsicInst *, SmallVectorImpl< Value * > &, Type *&) const
 
virtual bool isLegalAddressingMode (const AddrMode &AM, Type *Ty) const
 
virtual int getScalingFactorCost (const AddrMode &AM, Type *Ty) const
 Return the cost of the scaling factor used in the addressing mode represented by AM for this target, for a load/store of the specified type. More...
 
virtual bool isLegalAddImmediate (int64_t) const
 
virtual bool isTruncateFree (Type *, Type *) const
 
virtual bool allowTruncateForTailCall (Type *, Type *) const
 
virtual bool isTruncateFree (EVT, EVT) const
 
virtual bool isZExtFree (Type *, Type *) const
 
virtual bool isZExtFree (EVT, EVT) const
 
virtual bool hasPairedLoad (Type *, unsigned &) const
 
virtual bool hasPairedLoad (EVT, unsigned &) const
 
virtual bool isZExtFree (SDValue Val, EVT VT2) const
 
virtual bool isFNegFree (EVT VT) const
 
virtual bool isFAbsFree (EVT VT) const
 
virtual bool isNarrowingProfitable (EVT, EVT) const
 
void setLibcallName (RTLIB::Libcall Call, const char *Name)
 Rename the default libcall routine name for the specified libcall. More...
 
const char * getLibcallName (RTLIB::Libcall Call) const
 Get the libcall routine name for the specified libcall. More...
 
void setCmpLibcallCC (RTLIB::Libcall Call, ISD::CondCode CC)
 
ISD::CondCode getCmpLibcallCC (RTLIB::Libcall Call) const
 
void setLibcallCallingConv (RTLIB::Libcall Call, CallingConv::ID CC)
 Set the CallingConv that should be used for the specified libcall. More...
 
CallingConv::ID getLibcallCallingConv (RTLIB::Libcall Call) const
 Get the CallingConv that should be used for the specified libcall. More...
 
LegalizeKind getTypeConversion (LLVMContext &Context, EVT VT) const
 
int InstructionOpcodeToISD (unsigned Opcode) const
 Get the ISD node that corresponds to the Instruction class opcode. More...
 
std::pair< unsigned, MVTgetTypeLegalizationCost (Type *Ty) const
 Estimate the cost of type-legalization and the legalized type. More...
 

Additional Inherited Members

- Public Types inherited from llvm::TargetLowering
enum  ConstraintType {
  C_Register, C_RegisterClass, C_Memory, C_Other,
  C_Unknown
}
 
enum  ConstraintWeight {
  CW_Invalid = -1, CW_Okay = 0, CW_Good = 1, CW_Better = 2,
  CW_Best = 3, CW_SpecificReg = CW_Okay, CW_Register = CW_Good, CW_Memory = CW_Better,
  CW_Constant = CW_Best, CW_Default = CW_Okay
}
 
typedef std::vector< ArgListEntryArgListTy
 
typedef std::vector
< AsmOperandInfo
AsmOperandInfoVector
 
- Public Types inherited from llvm::TargetLoweringBase
enum  LegalizeAction { Legal, Promote, Expand, Custom }
 
enum  LegalizeTypeAction {
  TypeLegal, TypePromoteInteger, TypeExpandInteger, TypeSoftenFloat,
  TypeExpandFloat, TypeScalarizeVector, TypeSplitVector, TypeWidenVector
}
 
enum  BooleanContent { UndefinedBooleanContent, ZeroOrOneBooleanContent, ZeroOrNegativeOneBooleanContent }
 Enum that describes how the target represents true/false values. More...
 
enum  SelectSupportKind { ScalarValSelect, ScalarCondVectorVal, VectorMaskSelect }
 Enum that describes what type of support for selects the target has. More...
 
typedef std::pair
< LegalizeTypeAction, EVT
LegalizeKind
 
- Static Public Member Functions inherited from llvm::TargetLoweringBase
static ISD::NodeType getExtendForContent (BooleanContent Content)
 
- Protected Member Functions inherited from llvm::TargetLoweringBase
void initActions ()
 Initialize all of the actions to default values. More...
 
void setBooleanContents (BooleanContent Ty)
 
void setBooleanVectorContents (BooleanContent Ty)
 
void setSchedulingPreference (Sched::Preference Pref)
 Specify the target scheduling preference. More...
 
void setUseUnderscoreSetJmp (bool Val)
 
void setUseUnderscoreLongJmp (bool Val)
 
void setSupportJumpTables (bool Val)
 Indicate whether the target can generate code for jump tables. More...
 
void setMinimumJumpTableEntries (int Val)
 
void setStackPointerRegisterToSaveRestore (unsigned R)
 
void setExceptionPointerRegister (unsigned R)
 
void setExceptionSelectorRegister (unsigned R)
 
void setSelectIsExpensive (bool isExpensive=true)
 
void setJumpIsExpensive (bool isExpensive=true)
 
void setIntDivIsCheap (bool isCheap=true)
 
void addBypassSlowDiv (unsigned int SlowBitWidth, unsigned int FastBitWidth)
 Tells the code generator which bitwidths to bypass. More...
 
void setPow2DivIsCheap (bool isCheap=true)
 
void addRegisterClass (MVT VT, const TargetRegisterClass *RC)
 
void clearRegisterClasses ()
 Remove all register classes. More...
 
void clearOperationActions ()
 Remove all operation actions. More...
 
virtual std::pair< const
TargetRegisterClass *, uint8_t > 
findRepresentativeClass (MVT VT) const
 
void computeRegisterProperties ()
 
void setOperationAction (unsigned Op, MVT VT, LegalizeAction Action)
 
void setLoadExtAction (unsigned ExtType, MVT VT, LegalizeAction Action)
 
void setTruncStoreAction (MVT ValVT, MVT MemVT, LegalizeAction Action)
 
void setIndexedLoadAction (unsigned IdxMode, MVT VT, LegalizeAction Action)
 
void setIndexedStoreAction (unsigned IdxMode, MVT VT, LegalizeAction Action)
 
void setCondCodeAction (ISD::CondCode CC, MVT VT, LegalizeAction Action)
 
void AddPromotedToType (unsigned Opc, MVT OrigVT, MVT DestVT)
 
void setTargetDAGCombine (ISD::NodeType NT)
 
void setJumpBufSize (unsigned Size)
 Set the target's required jmp_buf buffer size (in bytes); default is 200. More...
 
void setJumpBufAlignment (unsigned Align)
 
void setMinFunctionAlignment (unsigned Align)
 Set the target's minimum function alignment (in log2(bytes)) More...
 
void setPrefFunctionAlignment (unsigned Align)
 
void setPrefLoopAlignment (unsigned Align)
 
void setMinStackArgumentAlignment (unsigned Align)
 Set the minimum stack alignment of an argument (in log2(bytes)). More...
 
void setInsertFencesForAtomic (bool fence)
 
bool isLegalRC (const TargetRegisterClass *RC) const
 
- Protected Attributes inherited from llvm::TargetLoweringBase
unsigned MaxStoresPerMemset
 Specify maximum number of store instructions per memset call. More...
 
unsigned MaxStoresPerMemsetOptSize
 
unsigned MaxStoresPerMemcpy
 Specify maximum bytes of store instructions per memcpy call. More...
 
unsigned MaxStoresPerMemcpyOptSize
 
unsigned MaxStoresPerMemmove
 Specify maximum bytes of store instructions per memmove call. More...
 
unsigned MaxStoresPerMemmoveOptSize
 
bool PredictableSelectIsExpensive
 

Detailed Description

Definition at line 207 of file AArch64ISelLowering.h.

Constructor & Destructor Documentation

AArch64TargetLowering::AArch64TargetLowering ( AArch64TargetMachine TM)
explicit

Definition at line 42 of file AArch64ISelLowering.cpp.

References llvm::TargetLoweringBase::addRegisterClass(), llvm::ISD::AND, llvm::ISD::BlockAddress, llvm::ISD::BR_CC, llvm::ISD::BR_JT, llvm::ISD::BRCOND, llvm::ISD::BUILD_VECTOR, llvm::TargetLoweringBase::computeRegisterProperties(), llvm::ISD::CONCAT_VECTORS, llvm::ISD::ConstantFP, llvm::ISD::CTPOP, llvm::TargetLoweringBase::Custom, llvm::ISD::DYNAMIC_STACKALLOC, llvm::TargetLoweringBase::Expand, llvm::ISD::EXTLOAD, llvm::MVT::f128, llvm::MVT::f16, llvm::MVT::f32, llvm::MVT::f64, llvm::ISD::FABS, llvm::ISD::FADD, llvm::ISD::FCEIL, llvm::ISD::FCOPYSIGN, llvm::ISD::FCOS, llvm::ISD::FDIV, llvm::ISD::FEXP, llvm::ISD::FEXP2, llvm::ISD::FFLOOR, llvm::ISD::FLOG, llvm::ISD::FLOG10, llvm::ISD::FLOG2, llvm::ISD::FMA, llvm::ISD::FMUL, llvm::ISD::FNEARBYINT, llvm::ISD::FNEG, llvm::ISD::FP_EXTEND, llvm::ISD::FP_ROUND, llvm::ISD::FP_TO_SINT, llvm::ISD::FP_TO_UINT, llvm::ISD::FPOW, llvm::ISD::FPOWI, llvm::ISD::FREM, llvm::ISD::FRINT, llvm::ISD::FROUND, llvm::ISD::FSIN, llvm::ISD::FSINCOS, llvm::ISD::FSQRT, llvm::ISD::FSUB, llvm::ISD::FTRUNC, llvm::TargetMachine::getSubtarget(), llvm::ISD::GlobalAddress, llvm::ISD::GlobalTLSAddress, llvm::AArch64Subtarget::hasFPARMv8(), llvm::AArch64Subtarget::hasNEON(), llvm::MVT::i1, llvm::MVT::i128, llvm::MVT::i32, llvm::MVT::i64, llvm::ISD::INTRINSIC_VOID, llvm::ISD::INTRINSIC_W_CHAIN, llvm::ISD::INTRINSIC_WO_CHAIN, llvm::ISD::JumpTable, llvm::TargetLoweringBase::Legal, llvm::ISD::OR, llvm::MVT::Other, llvm::TargetLoweringBase::Promote, llvm::ISD::ROTL, llvm::ISD::SDIVREM, llvm::ISD::SELECT, llvm::ISD::SELECT_CC, llvm::TargetLoweringBase::setBooleanVectorContents(), llvm::ISD::SETCC, llvm::TargetLoweringBase::setExceptionPointerRegister(), llvm::TargetLoweringBase::setExceptionSelectorRegister(), llvm::TargetLoweringBase::setLoadExtAction(), llvm::TargetLoweringBase::setOperationAction(), llvm::TargetLoweringBase::setStackPointerRegisterToSaveRestore(), llvm::TargetLoweringBase::setTargetDAGCombine(), llvm::TargetLoweringBase::setTruncStoreAction(), llvm::ISD::SEXTLOAD, llvm::ISD::SHL, llvm::ISD::SINT_TO_FP, llvm::ISD::SRA, llvm::ISD::SREM, llvm::ISD::SRL, llvm::ISD::STACKRESTORE, llvm::ISD::STACKSAVE, llvm::ISD::UDIVREM, llvm::ISD::UINT_TO_FP, llvm::ISD::UREM, llvm::MVT::v16i8, llvm::MVT::v1f32, llvm::MVT::v1f64, llvm::MVT::v1i16, llvm::MVT::v1i32, llvm::MVT::v1i64, llvm::MVT::v1i8, llvm::MVT::v2f32, llvm::MVT::v2f64, llvm::MVT::v2i32, llvm::MVT::v2i64, llvm::MVT::v4f32, llvm::MVT::v4i16, llvm::MVT::v4i32, llvm::MVT::v8i16, llvm::MVT::v8i8, llvm::ISD::VAARG, llvm::ISD::VACOPY, llvm::ISD::VAEND, llvm::ISD::VASTART, llvm::ISD::VECTOR_SHUFFLE, llvm::TargetLoweringBase::ZeroOrNegativeOneBooleanContent, and llvm::ISD::ZEXTLOAD.

Member Function Documentation

SDValue AArch64TargetLowering::addTokenForArgument ( SDValue  Chain,
SelectionDAG DAG,
MachineFrameInfo MFI,
int  ClobberedFI 
) const

Finds the incoming stack arguments which overlap the given fixed stack object and incorporates their load into the current chain. This prevents an upcoming store from clobbering the stack argument before it's used.

Definition at line 1721 of file AArch64ISelLowering.cpp.

References llvm::SelectionDAG::getEntryNode(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::MachineFrameInfo::getObjectOffset(), llvm::MachineFrameInfo::getObjectSize(), llvm::MVT::Other, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::SmallVectorTemplateCommon< T >::size(), llvm::ISD::TokenFactor, llvm::SDNode::use_begin(), and llvm::SDNode::use_end().

Referenced by LowerCall().

CCAssignFn * AArch64TargetLowering::CCAssignFnForNode ( CallingConv::ID  CC) const
bool AArch64TargetLowering::DoesCalleeRestoreStack ( CallingConv::ID  CallCC,
bool  TailCallOpt 
) const

Definition at line 1712 of file AArch64ISelLowering.cpp.

References llvm::CallingConv::Fast.

Referenced by LowerCall(), and LowerFormalArguments().

MachineBasicBlock * AArch64TargetLowering::emitAtomicBinary ( MachineInstr MI,
MachineBasicBlock MBB,
unsigned  Size,
unsigned  Opcode 
) const
MachineBasicBlock * AArch64TargetLowering::emitAtomicBinaryMinMax ( MachineInstr MI,
MachineBasicBlock BB,
unsigned  Size,
unsigned  CmpOp,
A64CC::CondCodes  Cond 
) const
MachineBasicBlock * AArch64TargetLowering::emitAtomicCmpSwap ( MachineInstr MI,
MachineBasicBlock BB,
unsigned  Size 
) const
MachineBasicBlock * AArch64TargetLowering::EmitF128CSEL ( MachineInstr MI,
MachineBasicBlock MBB 
) const
MachineBasicBlock * AArch64TargetLowering::EmitInstrWithCustomInserter ( MachineInstr MI,
MachineBasicBlock MBB 
) const
virtual

This method should be implemented by targets that mark instructions with the 'usesCustomInserter' flag. These instructions are special in various ways, which require special support to insert. The specified MachineInstr is created but not inserted into any basic blocks, and this method is called to expand it into a sequence of instructions, potentially also creating new basic blocks and control flow.

Reimplemented from llvm::TargetLowering.

Definition at line 761 of file AArch64ISelLowering.cpp.

References emitAtomicBinary(), emitAtomicBinaryMinMax(), emitAtomicCmpSwap(), EmitF128CSEL(), llvm::MachineInstr::getOpcode(), llvm::A64CC::GT, llvm::A64CC::HI, llvm_unreachable, llvm::A64CC::LO, and llvm::A64CC::LT.

AArch64TargetLowering::ConstraintType AArch64TargetLowering::getConstraintType ( const std::string &  Constraint) const
virtual

Given a constraint, return the type of constraint it is for this target.

Reimplemented from llvm::TargetLowering.

Definition at line 4332 of file AArch64ISelLowering.cpp.

References llvm::TargetLowering::C_Memory, llvm::TargetLowering::C_Other, llvm::TargetLowering::C_RegisterClass, and llvm::TargetLowering::getConstraintType().

std::pair< unsigned, const TargetRegisterClass * > AArch64TargetLowering::getRegForInlineAsmConstraint ( const std::string &  Constraint,
MVT  VT 
) const
virtual

Given a physical register constraint (e.g. {edx}), return the register number and the register class for the register.

Given a register class constraint, like 'r', if this corresponds directly to an LLVM register class, return a register of 0 and the register class pointer.

This should only be used for C_Register constraints. On error, this returns a register number of 0 and a null register class pointer..

Reimplemented from llvm::TargetLowering.

Definition at line 4460 of file AArch64ISelLowering.cpp.

References llvm::MVT::f16, llvm::MVT::f32, llvm::TargetLowering::getRegForInlineAsmConstraint(), llvm::MVT::getSizeInBits(), and llvm::MVT::i64.

SDValue AArch64TargetLowering::getSelectableIntSetCC ( SDValue  LHS,
SDValue  RHS,
ISD::CondCode  CC,
SDValue A64cc,
SelectionDAG DAG,
SDLoc dl 
) const
EVT AArch64TargetLowering::getSetCCResultType ( LLVMContext Context,
EVT  VT 
) const
virtual

Return the ValueType of the result of SETCC operations. Also used to obtain the target's preferred type for the condition operand of SELECT and BRCOND nodes. In the case of BRCOND the argument passed is MVT::Other since there are no other operands to get a type hint from.

Reimplemented from llvm::TargetLoweringBase.

Definition at line 368 of file AArch64ISelLowering.cpp.

References llvm::EVT::changeVectorElementTypeToInteger(), llvm::MVT::i32, and llvm::EVT::isVector().

TargetLowering::ConstraintWeight AArch64TargetLowering::getSingleConstraintMatchWeight ( AsmOperandInfo info,
const char *  constraint 
) const
virtual

Examine constraint string and operand type and determine a weight value. The operand object must already have been set up with the operand type.

Examine constraint type and operand type and determine a weight value. This object must already have been set up with the operand type and the current alternative constraint selected.

Reimplemented from llvm::TargetLowering.

Definition at line 4367 of file AArch64ISelLowering.cpp.

References llvm_unreachable.

const char * AArch64TargetLowering::getTargetNodeName ( unsigned  Opcode) const
virtual

This method returns the name of a target specific DAG node.

Reimplemented from llvm::TargetLowering.

Definition at line 878 of file AArch64ISelLowering.cpp.

References llvm::AArch64ISD::BFI, llvm::AArch64ISD::BR_CC, llvm::AArch64ISD::Call, llvm::AArch64ISD::EXTR, llvm::AArch64ISD::FPMOV, llvm::AArch64ISD::GOTLoad, llvm::AArch64ISD::NEON_BSL, llvm::AArch64ISD::NEON_CMP, llvm::AArch64ISD::NEON_CMPZ, llvm::AArch64ISD::NEON_FMOVIMM, llvm::AArch64ISD::NEON_LD1_UPD, llvm::AArch64ISD::NEON_LD1x2_UPD, llvm::AArch64ISD::NEON_LD1x3_UPD, llvm::AArch64ISD::NEON_LD1x4_UPD, llvm::AArch64ISD::NEON_LD2_UPD, llvm::AArch64ISD::NEON_LD2DUP, llvm::AArch64ISD::NEON_LD2DUP_UPD, llvm::AArch64ISD::NEON_LD2LN_UPD, llvm::AArch64ISD::NEON_LD3_UPD, llvm::AArch64ISD::NEON_LD3DUP, llvm::AArch64ISD::NEON_LD3DUP_UPD, llvm::AArch64ISD::NEON_LD3LN_UPD, llvm::AArch64ISD::NEON_LD4_UPD, llvm::AArch64ISD::NEON_LD4DUP, llvm::AArch64ISD::NEON_LD4DUP_UPD, llvm::AArch64ISD::NEON_LD4LN_UPD, llvm::AArch64ISD::NEON_MOVIMM, llvm::AArch64ISD::NEON_MVNIMM, llvm::AArch64ISD::NEON_QSHLs, llvm::AArch64ISD::NEON_QSHLu, llvm::AArch64ISD::NEON_REV16, llvm::AArch64ISD::NEON_REV32, llvm::AArch64ISD::NEON_REV64, llvm::AArch64ISD::NEON_ST1_UPD, llvm::AArch64ISD::NEON_ST1x2_UPD, llvm::AArch64ISD::NEON_ST1x3_UPD, llvm::AArch64ISD::NEON_ST1x4_UPD, llvm::AArch64ISD::NEON_ST2_UPD, llvm::AArch64ISD::NEON_ST2LN_UPD, llvm::AArch64ISD::NEON_ST3_UPD, llvm::AArch64ISD::NEON_ST3LN_UPD, llvm::AArch64ISD::NEON_ST4_UPD, llvm::AArch64ISD::NEON_ST4LN_UPD, llvm::AArch64ISD::NEON_TRN1, llvm::AArch64ISD::NEON_TRN2, llvm::AArch64ISD::NEON_TST, llvm::AArch64ISD::NEON_UZP1, llvm::AArch64ISD::NEON_UZP2, llvm::AArch64ISD::NEON_VDUP, llvm::AArch64ISD::NEON_VDUPLANE, llvm::AArch64ISD::NEON_VEXTRACT, llvm::AArch64ISD::NEON_ZIP1, llvm::AArch64ISD::NEON_ZIP2, llvm::AArch64ISD::Ret, llvm::AArch64ISD::SBFX, llvm::AArch64ISD::SELECT_CC, llvm::AArch64ISD::SETCC, llvm::AArch64ISD::TC_RETURN, llvm::AArch64ISD::THREAD_POINTER, llvm::AArch64ISD::TLSDESCCALL, llvm::AArch64ISD::WrapperLarge, and llvm::AArch64ISD::WrapperSmall.

bool AArch64TargetLowering::getTgtMemIntrinsic ( IntrinsicInfo Info,
const CallInst I,
unsigned  Intrinsic 
) const
virtual

Represent NEON load and store intrinsics as MemIntrinsicNodes. The associated MachineMemOperands record the alignment specified in the intrinsic calls.

Reimplemented from llvm::TargetLoweringBase.

Definition at line 4492 of file AArch64ISelLowering.cpp.

References llvm::Intrinsic::aarch64_neon_vld1x2, llvm::Intrinsic::aarch64_neon_vld1x3, llvm::Intrinsic::aarch64_neon_vld1x4, llvm::Intrinsic::aarch64_neon_vst1x2, llvm::Intrinsic::aarch64_neon_vst1x3, llvm::Intrinsic::aarch64_neon_vst1x4, llvm::TargetLoweringBase::IntrinsicInfo::align, llvm::Intrinsic::arm_neon_vld1, llvm::Intrinsic::arm_neon_vld2, llvm::Intrinsic::arm_neon_vld2lane, llvm::Intrinsic::arm_neon_vld3, llvm::Intrinsic::arm_neon_vld3lane, llvm::Intrinsic::arm_neon_vld4, llvm::Intrinsic::arm_neon_vld4lane, llvm::Intrinsic::arm_neon_vst1, llvm::Intrinsic::arm_neon_vst2, llvm::Intrinsic::arm_neon_vst2lane, llvm::Intrinsic::arm_neon_vst3, llvm::Intrinsic::arm_neon_vst3lane, llvm::Intrinsic::arm_neon_vst4, llvm::Intrinsic::arm_neon_vst4lane, llvm::CallInst::getArgOperand(), llvm::Type::getContext(), llvm::TargetLoweringBase::getDataLayout(), llvm::CallInst::getNumArgOperands(), llvm::Value::getType(), llvm::DataLayout::getTypeAllocSize(), llvm::EVT::getVectorVT(), llvm::MVT::i64, llvm::ISD::INTRINSIC_VOID, llvm::ISD::INTRINSIC_W_CHAIN, llvm::Type::isVectorTy(), llvm::TargetLoweringBase::IntrinsicInfo::memVT, llvm::TargetLoweringBase::IntrinsicInfo::offset, llvm::TargetLoweringBase::IntrinsicInfo::opc, llvm::TargetLoweringBase::IntrinsicInfo::ptrVal, llvm::TargetLoweringBase::IntrinsicInfo::readMem, llvm::TargetLoweringBase::IntrinsicInfo::vol, and llvm::TargetLoweringBase::IntrinsicInfo::writeMem.

bool AArch64TargetLowering::IsEligibleForTailCallOptimization ( SDValue  Callee,
CallingConv::ID  CalleeCC,
bool  IsVarArg,
bool  IsCalleeStructRet,
bool  IsCallerStructRet,
const SmallVectorImpl< ISD::OutputArg > &  Outs,
const SmallVectorImpl< SDValue > &  OutVals,
const SmallVectorImpl< ISD::InputArg > &  Ins,
SelectionDAG DAG 
) const
bool AArch64TargetLowering::isFMAFasterThanFMulAndFAdd ( EVT  VT) const
virtual

isFMAFasterThanFMulAndFAdd - Return true if an FMA operation is faster than a pair of fmul and fadd instructions. fmuladd intrinsics will be expanded to FMAs when this method returns true, otherwise fmuladd is expanded to fmul + fadd.

Reimplemented from llvm::TargetLoweringBase.

Definition at line 3821 of file AArch64ISelLowering.cpp.

References llvm::MVT::f128, llvm::MVT::f16, llvm::MVT::f32, llvm::MVT::f64, llvm::EVT::getScalarType(), llvm::EVT::getSimpleVT(), llvm::EVT::isSimple(), and llvm::MVT::SimpleTy.

bool AArch64TargetLowering::isKnownShuffleVector ( SDValue  Op,
SelectionDAG DAG,
SDValue Res 
) const
bool AArch64TargetLowering::isLegalICmpImmediate ( int64_t  ) const
virtual

Return true if the specified immediate is legal icmp immediate, that is the target has icmp instructions which can compare a register against the immediate without having to materialize the immediate into a register.

Reimplemented from llvm::TargetLoweringBase.

Definition at line 1770 of file AArch64ISelLowering.cpp.

Referenced by getSelectableIntSetCC().

bool AArch64TargetLowering::IsTailCallConvention ( CallingConv::ID  CallCC) const

Definition at line 1717 of file AArch64ISelLowering.cpp.

References llvm::CallingConv::Fast.

Referenced by IsEligibleForTailCallOptimization().

void AArch64TargetLowering::LowerAsmOperandForConstraint ( SDValue  Op,
std::string &  Constraint,
std::vector< SDValue > &  Ops,
SelectionDAG DAG 
) const
virtual
SDValue llvm::AArch64TargetLowering::LowerATOMIC_FENCE ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue llvm::AArch64TargetLowering::LowerATOMIC_STORE ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerBlockAddress ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerBR_CC ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerBRCOND ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerBUILD_VECTOR ( SDValue  Op,
SelectionDAG DAG,
const AArch64Subtarget ST 
) const
SDValue AArch64TargetLowering::LowerCall ( CallLoweringInfo ,
SmallVectorImpl< SDValue > &   
) const
virtual

This hook must be implemented to lower calls into the the specified DAG. The outgoing arguments to the call are described by the Outs array, and the values to be returned by the call are described by the Ins array. The implementation should fill in the InVals array with legal-type return values from the call, and return the resulting token chain value.

Reimplemented from llvm::TargetLowering.

Definition at line 1294 of file AArch64ISelLowering.cpp.

References llvm::ISD::ADD, addTokenForArgument(), llvm::CCValAssign::AExt, llvm::CCState::AnalyzeCallOperands(), llvm::CCValAssign::BCvt, llvm::ISD::BITCAST, llvm::AArch64ISD::Call, llvm::TargetLowering::CallLoweringInfo::CallConv, llvm::TargetLowering::CallLoweringInfo::Callee, CCAssignFnForNode(), llvm::TargetLowering::CallLoweringInfo::Chain, llvm::MachineFrameInfo::CreateFixedObject(), llvm::TargetLowering::CallLoweringInfo::DAG, llvm::TargetLowering::CallLoweringInfo::DL, DoesCalleeRestoreStack(), llvm::SmallVectorBase::empty(), llvm::CCValAssign::Full, G, llvm::AArch64MachineFunctionInfo::getBytesInStackArgArea(), llvm::ISD::ArgFlagsTy::getByValAlign(), llvm::ISD::ArgFlagsTy::getByValSize(), llvm::TargetRegisterInfo::getCallPreservedMask(), llvm::SelectionDAG::getCALLSEQ_END(), llvm::SelectionDAG::getCALLSEQ_START(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getContext(), llvm::SelectionDAG::getCopyFromReg(), llvm::SelectionDAG::getCopyToReg(), llvm::MachinePointerInfo::getFixedStack(), llvm::SelectionDAG::getFrameIndex(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getInfo(), llvm::SelectionDAG::getIntPtrConstant(), llvm::CCValAssign::getLocInfo(), llvm::CCValAssign::getLocMemOffset(), llvm::CCValAssign::getLocReg(), llvm::CCValAssign::getLocVT(), llvm::SelectionDAG::getMachineFunction(), llvm::SelectionDAG::getMachineNode(), llvm::SelectionDAG::getMemcpy(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::TargetLoweringBase::getPointerTy(), llvm::SelectionDAG::getRegister(), llvm::TargetMachine::getRegisterInfo(), llvm::SelectionDAG::getRegisterMask(), llvm::MVT::getSizeInBits(), llvm::MachinePointerInfo::getStack(), llvm::SelectionDAG::getStore(), llvm::MachineFunction::getTarget(), llvm::SelectionDAG::getTargetConstant(), llvm::SelectionDAG::getTargetExternalSymbol(), llvm::SelectionDAG::getTargetGlobalAddress(), llvm::TargetLoweringBase::getTargetMachine(), llvm::SelectionDAG::getUNDEF(), llvm::SDValue::getValue(), llvm::CCValAssign::getValVT(), llvm::SelectionDAG::getVTList(), llvm::MVT::Glue, llvm::TargetOptions::GuaranteedTailCallOpt, llvm::Function::hasStructRetAttr(), llvm::MVT::i32, llvm::MVT::i64, llvm::MipsISD::Ins, llvm::TargetLowering::CallLoweringInfo::Ins, llvm::TargetOpcode::INSERT_SUBREG, llvm::ISD::ArgFlagsTy::isByVal(), IsEligibleForTailCallOptimization(), llvm::CCValAssign::isMemLoc(), llvm::CCValAssign::isRegLoc(), llvm::TargetLowering::CallLoweringInfo::IsTailCall, llvm::TargetLowering::CallLoweringInfo::IsVarArg, llvm_unreachable, LowerCallResult(), llvm::X86II::OpSize, llvm::TargetMachine::Options, llvm::MVT::Other, llvm::TargetLowering::CallLoweringInfo::Outs, llvm::TargetLowering::CallLoweringInfo::OutVals, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::RoundUpToAlignment(), llvm::CCValAssign::SExt, llvm::SmallVectorTemplateCommon< T >::size(), llvm::SPII::Store, llvm::AArch64ISD::TC_RETURN, llvm::ISD::TokenFactor, and llvm::CCValAssign::ZExt.

SDValue AArch64TargetLowering::LowerCallResult ( SDValue  Chain,
SDValue  InFlag,
CallingConv::ID  CallConv,
bool  IsVarArg,
const SmallVectorImpl< ISD::InputArg > &  Ins,
SDLoc  dl,
SelectionDAG DAG,
SmallVectorImpl< SDValue > &  InVals 
) const
SDValue AArch64TargetLowering::LowerF128ToCall ( SDValue  Op,
SelectionDAG DAG,
RTLIB::Libcall  Call 
) const
SDValue AArch64TargetLowering::LowerFormalArguments ( SDValue  ,
CallingConv::ID  ,
bool  ,
const SmallVectorImpl< ISD::InputArg > &  ,
SDLoc  ,
SelectionDAG ,
SmallVectorImpl< SDValue > &   
) const
virtual

This hook must be implemented to lower the incoming (formal) arguments, described by the Ins array, into the specified DAG. The implementation should fill in the InVals array with legal-type argument values, and return the resulting token chain value.

Reimplemented from llvm::TargetLowering.

Definition at line 1106 of file AArch64ISelLowering.cpp.

References llvm::MachineFunction::addLiveIn(), llvm::CCValAssign::AExt, llvm::CCState::AnalyzeFormalArguments(), llvm::CCValAssign::BCvt, llvm::ISD::BITCAST, CCAssignFnForNode(), DoesCalleeRestoreStack(), llvm::TargetOpcode::EXTRACT_SUBREG, llvm::CCValAssign::Full, llvm::ISD::ArgFlagsTy::getByValSize(), llvm::SelectionDAG::getContext(), llvm::SelectionDAG::getCopyFromReg(), llvm::MachinePointerInfo::getFixedStack(), llvm::SelectionDAG::getFrameIndex(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getInfo(), llvm::SelectionDAG::getLoad(), llvm::CCValAssign::getLocInfo(), llvm::CCValAssign::getLocMemOffset(), llvm::CCValAssign::getLocReg(), llvm::CCValAssign::getLocVT(), llvm::SelectionDAG::getMachineFunction(), llvm::SelectionDAG::getMachineNode(), llvm::SelectionDAG::getNode(), llvm::TargetLoweringBase::getPointerTy(), llvm::TargetLoweringBase::getRegClassFor(), llvm::MVT::getSizeInBits(), llvm::MachineFunction::getTarget(), llvm::SelectionDAG::getTargetConstant(), llvm::TargetLoweringBase::getTargetMachine(), llvm::CCValAssign::getValVT(), llvm::TargetOptions::GuaranteedTailCallOpt, llvm::MVT::i32, llvm::ISD::ArgFlagsTy::isByVal(), llvm::CCValAssign::isMemLoc(), llvm::CCValAssign::isRegLoc(), llvm_unreachable, llvm::TargetMachine::Options, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::RoundUpToAlignment(), SaveVarArgRegisters(), llvm::AArch64MachineFunctionInfo::setArgumentStackToRestore(), llvm::AArch64MachineFunctionInfo::setBytesInStackArgArea(), llvm::CCValAssign::SExt, llvm::SmallVectorTemplateCommon< T >::size(), and llvm::CCValAssign::ZExt.

SDValue AArch64TargetLowering::LowerFP_EXTEND ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerFP_ROUND ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerFP_TO_INT ( SDValue  Op,
SelectionDAG DAG,
bool  IsSigned 
) const
SDValue AArch64TargetLowering::LowerFRAMEADDR ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerGlobalAddressELF ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerGlobalAddressELFLarge ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerGlobalAddressELFSmall ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerGlobalTLSAddress ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerINT_TO_FP ( SDValue  Op,
SelectionDAG DAG,
bool  IsSigned 
) const
SDValue AArch64TargetLowering::LowerJumpTable ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerOperation ( SDValue  Op,
SelectionDAG DAG 
) const
virtual
SDValue AArch64TargetLowering::LowerReturn ( SDValue  ,
CallingConv::ID  ,
bool  ,
const SmallVectorImpl< ISD::OutputArg > &  ,
const SmallVectorImpl< SDValue > &  ,
SDLoc  ,
SelectionDAG  
) const
virtual
SDValue AArch64TargetLowering::LowerRETURNADDR ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerSELECT ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerSELECT_CC ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerSETCC ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerTLSDescCall ( SDValue  SymAddr,
SDValue  DescAddr,
SDLoc  DL,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerVACOPY ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerVASTART ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::LowerVECTOR_SHUFFLE ( SDValue  Op,
SelectionDAG DAG 
) const
SDValue AArch64TargetLowering::PerformDAGCombine ( SDNode N,
DAGCombinerInfo DCI 
) const
virtual

This method will be invoked for all target nodes and for any target-independent nodes that the target has registered with invoke it for.

The semantics are as follows: Return Value: SDValue.Val == 0 - No change was made SDValue.Val == N - N was replaced, is dead, and is already handled. otherwise - N should be replaced by the returned Operand.

In addition, methods provided by DAGCombinerInfo may be used to perform more complex transformations.

Reimplemented from llvm::TargetLowering.

Definition at line 3771 of file AArch64ISelLowering.cpp.

References llvm::Intrinsic::aarch64_neon_vld1x2, llvm::Intrinsic::aarch64_neon_vld1x3, llvm::Intrinsic::aarch64_neon_vld1x4, llvm::Intrinsic::aarch64_neon_vst1x2, llvm::Intrinsic::aarch64_neon_vst1x3, llvm::Intrinsic::aarch64_neon_vst1x4, llvm::ISD::AND, llvm::Intrinsic::arm_neon_vld1, llvm::Intrinsic::arm_neon_vld2, llvm::Intrinsic::arm_neon_vld2lane, llvm::Intrinsic::arm_neon_vld3, llvm::Intrinsic::arm_neon_vld3lane, llvm::Intrinsic::arm_neon_vld4, llvm::Intrinsic::arm_neon_vld4lane, llvm::Intrinsic::arm_neon_vst1, llvm::Intrinsic::arm_neon_vst2, llvm::Intrinsic::arm_neon_vst2lane, llvm::Intrinsic::arm_neon_vst3, llvm::Intrinsic::arm_neon_vst3lane, llvm::Intrinsic::arm_neon_vst4, llvm::Intrinsic::arm_neon_vst4lane, CombineBaseUpdate(), CombineVLDDUP(), llvm::TargetLowering::DAGCombinerInfo::DAG, llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::ISD::INTRINSIC_VOID, llvm::ISD::INTRINSIC_W_CHAIN, llvm::ISD::INTRINSIC_WO_CHAIN, llvm::AArch64ISD::NEON_LD2DUP, llvm::AArch64ISD::NEON_LD3DUP, llvm::AArch64ISD::NEON_LD4DUP, llvm::AArch64ISD::NEON_VDUPLANE, llvm::ISD::OR, PerformANDCombine(), PerformIntrinsicCombine(), PerformORCombine(), PerformShiftCombine(), llvm::ISD::SHL, llvm::ISD::SRA, and llvm::ISD::SRL.

void AArch64TargetLowering::SaveVarArgRegisters ( CCState CCInfo,
SelectionDAG DAG,
SDLoc  DL,
SDValue Chain 
) const

The documentation for this class was generated from the following files: