14 #define DEBUG_TYPE "arm-selectiondag-info"
33 bool isVolatile,
bool AlwaysInline,
49 unsigned BytesLeft = SizeVal & 3;
50 unsigned NumMemOps = SizeVal >> 2;
51 unsigned EmittedNumMemOps = 0;
55 const unsigned MAX_LOADS_IN_LDM = 6;
56 SDValue TFOps[MAX_LOADS_IN_LDM];
57 SDValue Loads[MAX_LOADS_IN_LDM];
58 uint64_t SrcOff = 0, DstOff = 0;
63 while (EmittedNumMemOps < NumMemOps) {
65 i < MAX_LOADS_IN_LDM && EmittedNumMemOps + i < NumMemOps; ++i) {
66 Loads[i] = DAG.
getLoad(VT, dl, Chain,
77 i < MAX_LOADS_IN_LDM && EmittedNumMemOps + i < NumMemOps; ++i) {
78 TFOps[i] = DAG.
getStore(Chain, dl, Loads[i],
82 isVolatile,
false, 0);
87 EmittedNumMemOps += i;
94 unsigned BytesLeftSave = BytesLeft;
105 Loads[i] = DAG.
getLoad(VT, dl, Chain,
109 false,
false,
false, 0);
118 BytesLeft = BytesLeftSave;
120 if (BytesLeft >= 2) {
128 TFOps[i] = DAG.
getStore(Chain, dl, Loads[i],
146 unsigned Align,
bool isVolatile,
161 Args.push_back(Entry);
167 Args.push_back(Entry);
179 Args.push_back(Entry);
196 std::pair<SDValue,SDValue> CallResult =
199 return CallResult.second;
SDValue getConstant(uint64_t Val, EVT VT, bool isTarget=false)
CallingConv::ID getLibcallCallingConv(RTLIB::Libcall Call) const
Get the CallingConv that should be used for the specified libcall.
SDValue getValue(unsigned R) const
virtual const TargetLowering * getTargetLowering() const
LLVMContext * getContext() const
enable_if_c<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)
const TargetMachine & getTarget() const
SDValue getExternalSymbol(const char *Sym, EVT VT)
SDValue getLoad(EVT VT, SDLoc dl, SDValue Chain, SDValue Ptr, MachinePointerInfo PtrInfo, bool isVolatile, bool isNonTemporal, bool isInvariant, unsigned Alignment, const MDNode *TBAAInfo=0, const MDNode *Ranges=0)
SDValue getStore(SDValue Chain, SDLoc dl, SDValue Val, SDValue Ptr, MachinePointerInfo PtrInfo, bool isVolatile, bool isNonTemporal, unsigned Alignment, const MDNode *TBAAInfo=0)
bool isTargetDarwin() const
MachinePointerInfo getWithOffset(int64_t O) const
virtual MVT getPointerTy(uint32_t=0) const
std::pair< SDValue, SDValue > LowerCallTo(CallLoweringInfo &CLI) const
Simple integer binary arithmetic operators.
ARMSelectionDAGInfo(const TargetMachine &TM)
static Type * getVoidTy(LLVMContext &C)
const DataLayout * getDataLayout() const
std::vector< ArgListEntry > ArgListTy
bool bitsGT(EVT VT) const
bitsGT - Return true if this has more bits than VT.
IntegerType * getIntPtrType(LLVMContext &C, unsigned AddressSpace=0) const
const char * getLibcallName(RTLIB::Libcall Call) const
Get the libcall routine name for the specified libcall.
unsigned getMaxInlineSizeThreshold() const
ZERO_EXTEND - Used for integer types, zeroing the new bits.
SDValue getNode(unsigned Opcode, SDLoc DL, EVT VT)
static cl::opt< AlignMode > Align(cl::desc("Load/store alignment support"), cl::Hidden, cl::init(DefaultAlign), cl::values(clEnumValN(DefaultAlign,"arm-default-align","Generate unaligned accesses only on hardware/OS ""combinations that are known to support them"), clEnumValN(StrictAlign,"arm-strict-align","Disallow all unaligned memory accesses"), clEnumValN(NoStrictAlign,"arm-no-strict-align","Allow unaligned memory accesses"), clEnumValEnd))
static IntegerType * getInt32Ty(LLVMContext &C)
virtual SDValue EmitTargetCodeForMemset(SelectionDAG &DAG, SDLoc dl, SDValue Chain, SDValue Op1, SDValue Op2, SDValue Op3, unsigned Align, bool isVolatile, MachinePointerInfo DstPtrInfo) const
TRUNCATE - Completely drop the high bits.
virtual SDValue EmitTargetCodeForMemcpy(SelectionDAG &DAG, SDLoc dl, SDValue Chain, SDValue Dst, SDValue Src, SDValue Size, unsigned Align, bool isVolatile, bool AlwaysInline, MachinePointerInfo DstPtrInfo, MachinePointerInfo SrcPtrInfo) const
uint64_t getZExtValue() const