mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-19 16:35:10 +00:00
Added invariant field to the DAG.getLoad method and changed all calls.
When this field is true it means that the load is from constant (runt-time or compile-time) and so can be hoisted from loops or moved around other memory accesses git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144100 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
30b4d8b83b
commit
d752e0f7e6
@ -95,8 +95,10 @@ public:
|
||||
MOVolatile = 4,
|
||||
/// The memory access is non-temporal.
|
||||
MONonTemporal = 8,
|
||||
/// The memory access is invariant.
|
||||
MOInvariant = 16,
|
||||
// This is the number of bits we need to represent flags.
|
||||
MOMaxBits = 4
|
||||
MOMaxBits = 5
|
||||
};
|
||||
|
||||
/// MachineMemOperand - Construct an MachineMemOperand object with the
|
||||
@ -141,6 +143,7 @@ public:
|
||||
bool isStore() const { return Flags & MOStore; }
|
||||
bool isVolatile() const { return Flags & MOVolatile; }
|
||||
bool isNonTemporal() const { return Flags & MONonTemporal; }
|
||||
bool isInvariant() const { return Flags & MOInvariant; }
|
||||
|
||||
/// refineAlignment - Update this MachineMemOperand to reflect the alignment
|
||||
/// of MMO, if it has a greater alignment. This must only be used when the
|
||||
|
@ -650,7 +650,7 @@ public:
|
||||
///
|
||||
SDValue getLoad(EVT VT, DebugLoc dl, SDValue Chain, SDValue Ptr,
|
||||
MachinePointerInfo PtrInfo, bool isVolatile,
|
||||
bool isNonTemporal, unsigned Alignment,
|
||||
bool isNonTemporal, bool isInvariant, unsigned Alignment,
|
||||
const MDNode *TBAAInfo = 0);
|
||||
SDValue getExtLoad(ISD::LoadExtType ExtType, DebugLoc dl, EVT VT,
|
||||
SDValue Chain, SDValue Ptr, MachinePointerInfo PtrInfo,
|
||||
@ -663,8 +663,8 @@ public:
|
||||
EVT VT, DebugLoc dl,
|
||||
SDValue Chain, SDValue Ptr, SDValue Offset,
|
||||
MachinePointerInfo PtrInfo, EVT MemVT,
|
||||
bool isVolatile, bool isNonTemporal, unsigned Alignment,
|
||||
const MDNode *TBAAInfo = 0);
|
||||
bool isVolatile, bool isNonTemporal, bool isInvariant,
|
||||
unsigned Alignment, const MDNode *TBAAInfo = 0);
|
||||
SDValue getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
|
||||
EVT VT, DebugLoc dl,
|
||||
SDValue Chain, SDValue Ptr, SDValue Offset,
|
||||
|
@ -917,12 +917,13 @@ public:
|
||||
// with MachineMemOperand information.
|
||||
bool isVolatile() const { return (SubclassData >> 5) & 1; }
|
||||
bool isNonTemporal() const { return (SubclassData >> 6) & 1; }
|
||||
bool isInvariant() const { return (SubclassData >> 7) & 1; }
|
||||
|
||||
AtomicOrdering getOrdering() const {
|
||||
return AtomicOrdering((SubclassData >> 7) & 15);
|
||||
return AtomicOrdering((SubclassData >> 8) & 15);
|
||||
}
|
||||
SynchronizationScope getSynchScope() const {
|
||||
return SynchronizationScope((SubclassData >> 11) & 1);
|
||||
return SynchronizationScope((SubclassData >> 12) & 1);
|
||||
}
|
||||
|
||||
/// Returns the SrcValue and offset that describes the location of the access
|
||||
@ -993,8 +994,8 @@ class AtomicSDNode : public MemSDNode {
|
||||
"Ordering may not require more than 4 bits!");
|
||||
assert((SynchScope & 1) == SynchScope &&
|
||||
"SynchScope may not require more than 1 bit!");
|
||||
SubclassData |= Ordering << 7;
|
||||
SubclassData |= SynchScope << 11;
|
||||
SubclassData |= Ordering << 8;
|
||||
SubclassData |= SynchScope << 12;
|
||||
assert(getOrdering() == Ordering && "Ordering encoding error!");
|
||||
assert(getSynchScope() == SynchScope && "Synch-scope encoding error!");
|
||||
|
||||
|
@ -1253,6 +1253,7 @@ bool MachineInstr::isInvariantLoad(AliasAnalysis *AA) const {
|
||||
E = memoperands_end(); I != E; ++I) {
|
||||
if ((*I)->isVolatile()) return false;
|
||||
if ((*I)->isStore()) return false;
|
||||
if ((*I)->isInvariant()) return true;
|
||||
|
||||
if (const Value *V = (*I)->getValue()) {
|
||||
// A load from a constant PseudoSourceValue is invariant.
|
||||
|
@ -4702,7 +4702,8 @@ SDValue DAGCombiner::ReduceLoadWidth(SDNode *N) {
|
||||
if (ExtType == ISD::NON_EXTLOAD)
|
||||
Load = DAG.getLoad(VT, N0.getDebugLoc(), LN0->getChain(), NewPtr,
|
||||
LN0->getPointerInfo().getWithOffset(PtrOff),
|
||||
LN0->isVolatile(), LN0->isNonTemporal(), NewAlign);
|
||||
LN0->isVolatile(), LN0->isNonTemporal(),
|
||||
LN0->isInvariant(), NewAlign);
|
||||
else
|
||||
Load = DAG.getExtLoad(ExtType, N0.getDebugLoc(), VT, LN0->getChain(),NewPtr,
|
||||
LN0->getPointerInfo().getWithOffset(PtrOff),
|
||||
@ -4931,7 +4932,7 @@ SDValue DAGCombiner::CombineConsecutiveLoads(SDNode *N, EVT VT) {
|
||||
(!LegalOperations || TLI.isOperationLegal(ISD::LOAD, VT)))
|
||||
return DAG.getLoad(VT, N->getDebugLoc(), LD1->getChain(),
|
||||
LD1->getBasePtr(), LD1->getPointerInfo(),
|
||||
false, false, Align);
|
||||
false, false, false, Align);
|
||||
}
|
||||
|
||||
return SDValue();
|
||||
@ -5001,7 +5002,7 @@ SDValue DAGCombiner::visitBITCAST(SDNode *N) {
|
||||
SDValue Load = DAG.getLoad(VT, N->getDebugLoc(), LN0->getChain(),
|
||||
LN0->getBasePtr(), LN0->getPointerInfo(),
|
||||
LN0->isVolatile(), LN0->isNonTemporal(),
|
||||
OrigAlign);
|
||||
LN0->isInvariant(), OrigAlign);
|
||||
AddToWorkList(N);
|
||||
CombineTo(N0.getNode(),
|
||||
DAG.getNode(ISD::BITCAST, N0.getDebugLoc(),
|
||||
@ -6219,7 +6220,7 @@ SDValue DAGCombiner::visitLOAD(SDNode *N) {
|
||||
ReplLoad = DAG.getLoad(N->getValueType(0), LD->getDebugLoc(),
|
||||
BetterChain, Ptr, LD->getPointerInfo(),
|
||||
LD->isVolatile(), LD->isNonTemporal(),
|
||||
LD->getAlignment());
|
||||
LD->isInvariant(), LD->getAlignment());
|
||||
} else {
|
||||
ReplLoad = DAG.getExtLoad(LD->getExtensionType(), LD->getDebugLoc(),
|
||||
LD->getValueType(0),
|
||||
@ -6483,7 +6484,7 @@ SDValue DAGCombiner::ReduceLoadOpStoreWidth(SDNode *N) {
|
||||
LD->getChain(), NewPtr,
|
||||
LD->getPointerInfo().getWithOffset(PtrOff),
|
||||
LD->isVolatile(), LD->isNonTemporal(),
|
||||
NewAlign);
|
||||
LD->isInvariant(), NewAlign);
|
||||
SDValue NewVal = DAG.getNode(Opc, Value.getDebugLoc(), NewVT, NewLD,
|
||||
DAG.getConstant(NewImm, NewVT));
|
||||
SDValue NewST = DAG.getStore(Chain, N->getDebugLoc(),
|
||||
@ -6543,7 +6544,7 @@ SDValue DAGCombiner::TransformFPLoadStorePair(SDNode *N) {
|
||||
SDValue NewLD = DAG.getLoad(IntVT, Value.getDebugLoc(),
|
||||
LD->getChain(), LD->getBasePtr(),
|
||||
LD->getPointerInfo(),
|
||||
false, false, LDAlign);
|
||||
false, false, false, LDAlign);
|
||||
|
||||
SDValue NewST = DAG.getStore(NewLD.getValue(1), N->getDebugLoc(),
|
||||
NewLD, ST->getBasePtr(),
|
||||
@ -6928,7 +6929,8 @@ SDValue DAGCombiner::visitEXTRACT_VECTOR_ELT(SDNode *N) {
|
||||
|
||||
return DAG.getLoad(LVT, N->getDebugLoc(), LN0->getChain(), NewPtr,
|
||||
LN0->getPointerInfo().getWithOffset(PtrOff),
|
||||
LN0->isVolatile(), LN0->isNonTemporal(), Align);
|
||||
LN0->isVolatile(), LN0->isNonTemporal(),
|
||||
LN0->isInvariant(), Align);
|
||||
}
|
||||
|
||||
return SDValue();
|
||||
@ -7497,7 +7499,7 @@ bool DAGCombiner::SimplifySelectOps(SDNode *TheSelect, SDValue LHS,
|
||||
// FIXME: Discards pointer info.
|
||||
LLD->getChain(), Addr, MachinePointerInfo(),
|
||||
LLD->isVolatile(), LLD->isNonTemporal(),
|
||||
LLD->getAlignment());
|
||||
LLD->isInvariant(), LLD->getAlignment());
|
||||
} else {
|
||||
Load = DAG.getExtLoad(LLD->getExtensionType() == ISD::EXTLOAD ?
|
||||
RLD->getExtensionType() : LLD->getExtensionType(),
|
||||
@ -7613,7 +7615,7 @@ SDValue DAGCombiner::SimplifySelectCC(DebugLoc DL, SDValue N0, SDValue N1,
|
||||
AddToWorkList(CPIdx.getNode());
|
||||
return DAG.getLoad(TV->getValueType(0), DL, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(), false,
|
||||
false, Alignment);
|
||||
false, false, Alignment);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -259,7 +259,7 @@ SelectionDAGLegalize::ExpandConstantFP(ConstantFPSDNode *CFP, bool UseCP) {
|
||||
}
|
||||
SDValue Result =
|
||||
DAG.getLoad(OrigVT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(), false, false,
|
||||
MachinePointerInfo::getConstantPool(), false, false, false,
|
||||
Alignment);
|
||||
return Result;
|
||||
}
|
||||
@ -315,7 +315,7 @@ static void ExpandUnalignedStore(StoreSDNode *ST, SelectionDAG &DAG,
|
||||
// Load one integer register's worth from the stack slot.
|
||||
SDValue Load = DAG.getLoad(RegVT, dl, Store, StackPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
// Store it to the final location. Remember the store.
|
||||
Stores.push_back(DAG.getStore(Load.getValue(1), dl, Load, Ptr,
|
||||
ST->getPointerInfo().getWithOffset(Offset),
|
||||
@ -403,7 +403,8 @@ ExpandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG,
|
||||
// then bitconvert to floating point or vector.
|
||||
SDValue newLoad = DAG.getLoad(intVT, dl, Chain, Ptr, LD->getPointerInfo(),
|
||||
LD->isVolatile(),
|
||||
LD->isNonTemporal(), LD->getAlignment());
|
||||
LD->isNonTemporal(),
|
||||
LD->isInvariant(), LD->getAlignment());
|
||||
SDValue Result = DAG.getNode(ISD::BITCAST, dl, LoadedVT, newLoad);
|
||||
if (VT.isFloatingPoint() && LoadedVT != VT)
|
||||
Result = DAG.getNode(ISD::FP_EXTEND, dl, VT, Result);
|
||||
@ -434,6 +435,7 @@ ExpandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG,
|
||||
SDValue Load = DAG.getLoad(RegVT, dl, Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(Offset),
|
||||
LD->isVolatile(), LD->isNonTemporal(),
|
||||
LD->isInvariant(),
|
||||
MinAlign(LD->getAlignment(), Offset));
|
||||
// Follow the load with a store to the stack slot. Remember the store.
|
||||
Stores.push_back(DAG.getStore(Load.getValue(1), dl, Load, StackPtr,
|
||||
@ -570,7 +572,8 @@ PerformInsertVectorEltInMemory(SDValue Vec, SDValue Val, SDValue Idx,
|
||||
false, false, 0);
|
||||
// Load the updated vector.
|
||||
return DAG.getLoad(VT, dl, Ch, StackPtr,
|
||||
MachinePointerInfo::getFixedStack(SPFI), false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(SPFI), false, false,
|
||||
false, 0);
|
||||
}
|
||||
|
||||
|
||||
@ -911,7 +914,7 @@ void SelectionDAGLegalize::LegalizeOp(SDNode *Node) {
|
||||
|
||||
Tmp1 = DAG.getLoad(NVT, dl, Tmp1, Tmp2, LD->getPointerInfo(),
|
||||
LD->isVolatile(), LD->isNonTemporal(),
|
||||
LD->getAlignment());
|
||||
LD->isInvariant(), LD->getAlignment());
|
||||
Tmp3 = DAG.getNode(ISD::BITCAST, dl, VT, Tmp1);
|
||||
Tmp4 = Tmp1.getValue(1);
|
||||
break;
|
||||
@ -1086,7 +1089,7 @@ void SelectionDAGLegalize::LegalizeOp(SDNode *Node) {
|
||||
SDValue Load = DAG.getLoad(SrcVT, dl, Tmp1, Tmp2,
|
||||
LD->getPointerInfo(),
|
||||
LD->isVolatile(), LD->isNonTemporal(),
|
||||
LD->getAlignment());
|
||||
LD->isInvariant(), LD->getAlignment());
|
||||
unsigned ExtendOp;
|
||||
switch (ExtType) {
|
||||
case ISD::EXTLOAD:
|
||||
@ -1336,7 +1339,7 @@ SDValue SelectionDAGLegalize::ExpandExtractFromVectorThroughStack(SDValue Op) {
|
||||
|
||||
if (Op.getValueType().isVector())
|
||||
return DAG.getLoad(Op.getValueType(), dl, Ch, StackPtr,MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
return DAG.getExtLoad(ISD::EXTLOAD, dl, Op.getValueType(), Ch, StackPtr,
|
||||
MachinePointerInfo(),
|
||||
Vec.getValueType().getVectorElementType(),
|
||||
@ -1384,7 +1387,7 @@ SDValue SelectionDAGLegalize::ExpandInsertToVectorThroughStack(SDValue Op) {
|
||||
|
||||
// Finally, load the updated vector.
|
||||
return DAG.getLoad(Op.getValueType(), dl, Ch, StackPtr, PtrInfo,
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue SelectionDAGLegalize::ExpandVectorBuildThroughStack(SDNode* Node) {
|
||||
@ -1434,7 +1437,8 @@ SDValue SelectionDAGLegalize::ExpandVectorBuildThroughStack(SDNode* Node) {
|
||||
StoreChain = DAG.getEntryNode();
|
||||
|
||||
// Result is a load from the stack slot.
|
||||
return DAG.getLoad(VT, dl, StoreChain, FIPtr, PtrInfo, false, false, 0);
|
||||
return DAG.getLoad(VT, dl, StoreChain, FIPtr, PtrInfo,
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue SelectionDAGLegalize::ExpandFCOPYSIGN(SDNode* Node) {
|
||||
@ -1463,7 +1467,7 @@ SDValue SelectionDAGLegalize::ExpandFCOPYSIGN(SDNode* Node) {
|
||||
assert(FloatVT.isByteSized() && "Unsupported floating point type!");
|
||||
// Load out a legal integer with the same sign bit as the float.
|
||||
SignBit = DAG.getLoad(LoadTy, dl, Ch, StackPtr, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
} else { // Little endian
|
||||
SDValue LoadPtr = StackPtr;
|
||||
// The float may be wider than the integer we are going to load. Advance
|
||||
@ -1474,7 +1478,7 @@ SDValue SelectionDAGLegalize::ExpandFCOPYSIGN(SDNode* Node) {
|
||||
LoadPtr, DAG.getIntPtrConstant(ByteOffset));
|
||||
// Load a legal integer containing the sign bit.
|
||||
SignBit = DAG.getLoad(LoadTy, dl, Ch, LoadPtr, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
// Move the sign bit to the top bit of the loaded integer.
|
||||
unsigned BitShift = LoadTy.getSizeInBits() -
|
||||
(FloatVT.getSizeInBits() - 8 * ByteOffset);
|
||||
@ -1616,7 +1620,7 @@ SDValue SelectionDAGLegalize::EmitStackConvert(SDValue SrcOp,
|
||||
// Result is a load from the stack slot.
|
||||
if (SlotSize == DestSize)
|
||||
return DAG.getLoad(DestVT, dl, Store, FIPtr, PtrInfo,
|
||||
false, false, DestAlign);
|
||||
false, false, false, DestAlign);
|
||||
|
||||
assert(SlotSize < DestSize && "Unknown extension!");
|
||||
return DAG.getExtLoad(ISD::EXTLOAD, dl, DestVT, Store, FIPtr,
|
||||
@ -1639,7 +1643,7 @@ SDValue SelectionDAGLegalize::ExpandSCALAR_TO_VECTOR(SDNode *Node) {
|
||||
false, false, 0);
|
||||
return DAG.getLoad(Node->getValueType(0), dl, Ch, StackPtr,
|
||||
MachinePointerInfo::getFixedStack(SPFI),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
|
||||
@ -1713,7 +1717,7 @@ SDValue SelectionDAGLegalize::ExpandBUILD_VECTOR(SDNode *Node) {
|
||||
unsigned Alignment = cast<ConstantPoolSDNode>(CPIdx)->getAlignment();
|
||||
return DAG.getLoad(VT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, Alignment);
|
||||
false, false, false, Alignment);
|
||||
}
|
||||
|
||||
if (!MoreThanTwoValues) {
|
||||
@ -1975,7 +1979,7 @@ SelectionDAGLegalize::ExpandDivRemLibCall(SDNode *Node,
|
||||
|
||||
// Remainder is loaded back from the stack frame.
|
||||
SDValue Rem = DAG.getLoad(RetVT, dl, CallInfo.second, FIPtr,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
Results.push_back(CallInfo.first);
|
||||
Results.push_back(Rem);
|
||||
}
|
||||
@ -2024,7 +2028,7 @@ SDValue SelectionDAGLegalize::ExpandLegalINT_TO_FP(bool isSigned,
|
||||
false, false, 0);
|
||||
// load the constructed double
|
||||
SDValue Load = DAG.getLoad(MVT::f64, dl, Store2, StackSlot,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
// FP constant to bias correct the final result
|
||||
SDValue Bias = DAG.getConstantFP(isSigned ?
|
||||
BitsToDouble(0x4330000080000000ULL) :
|
||||
@ -2164,7 +2168,7 @@ SDValue SelectionDAGLegalize::ExpandLegalINT_TO_FP(bool isSigned,
|
||||
if (DestVT == MVT::f32)
|
||||
FudgeInReg = DAG.getLoad(MVT::f32, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, Alignment);
|
||||
false, false, false, Alignment);
|
||||
else {
|
||||
SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, DestVT,
|
||||
DAG.getEntryNode(), CPIdx,
|
||||
@ -2703,7 +2707,8 @@ void SelectionDAGLegalize::ExpandNode(SDNode *Node) {
|
||||
unsigned Align = Node->getConstantOperandVal(3);
|
||||
|
||||
SDValue VAListLoad = DAG.getLoad(TLI.getPointerTy(), dl, Tmp1, Tmp2,
|
||||
MachinePointerInfo(V), false, false, 0);
|
||||
MachinePointerInfo(V),
|
||||
false, false, false, 0);
|
||||
SDValue VAList = VAListLoad;
|
||||
|
||||
if (Align > TLI.getMinStackArgumentAlignment()) {
|
||||
@ -2728,7 +2733,7 @@ void SelectionDAGLegalize::ExpandNode(SDNode *Node) {
|
||||
MachinePointerInfo(V), false, false, 0);
|
||||
// Load the actual argument out of the pointer VAList
|
||||
Results.push_back(DAG.getLoad(VT, dl, Tmp3, VAList, MachinePointerInfo(),
|
||||
false, false, 0));
|
||||
false, false, false, 0));
|
||||
Results.push_back(Results[0].getValue(1));
|
||||
break;
|
||||
}
|
||||
@ -2739,7 +2744,7 @@ void SelectionDAGLegalize::ExpandNode(SDNode *Node) {
|
||||
const Value *VS = cast<SrcValueSDNode>(Node->getOperand(4))->getValue();
|
||||
Tmp1 = DAG.getLoad(TLI.getPointerTy(), dl, Node->getOperand(0),
|
||||
Node->getOperand(2), MachinePointerInfo(VS),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
Tmp1 = DAG.getStore(Tmp1.getValue(1), dl, Tmp1, Node->getOperand(1),
|
||||
MachinePointerInfo(VD), false, false, 0);
|
||||
Results.push_back(Tmp1);
|
||||
|
@ -479,8 +479,8 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_LOAD(SDNode *N) {
|
||||
if (L->getExtensionType() == ISD::NON_EXTLOAD) {
|
||||
NewL = DAG.getLoad(L->getAddressingMode(), L->getExtensionType(),
|
||||
NVT, dl, L->getChain(), L->getBasePtr(), L->getOffset(),
|
||||
L->getPointerInfo(), NVT,
|
||||
L->isVolatile(), L->isNonTemporal(), L->getAlignment());
|
||||
L->getPointerInfo(), NVT, L->isVolatile(),
|
||||
L->isNonTemporal(), false, L->getAlignment());
|
||||
// Legalized the chain result - switch anything that used the old chain to
|
||||
// use the new one.
|
||||
ReplaceValueWith(SDValue(N, 1), NewL.getValue(1));
|
||||
@ -492,7 +492,7 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_LOAD(SDNode *N) {
|
||||
L->getMemoryVT(), dl, L->getChain(),
|
||||
L->getBasePtr(), L->getOffset(), L->getPointerInfo(),
|
||||
L->getMemoryVT(), L->isVolatile(),
|
||||
L->isNonTemporal(), L->getAlignment());
|
||||
L->isNonTemporal(), false, L->getAlignment());
|
||||
// Legalized the chain result - switch anything that used the old chain to
|
||||
// use the new one.
|
||||
ReplaceValueWith(SDValue(N, 1), NewL.getValue(1));
|
||||
|
@ -1778,6 +1778,7 @@ void DAGTypeLegalizer::ExpandIntRes_LOAD(LoadSDNode *N,
|
||||
unsigned Alignment = N->getAlignment();
|
||||
bool isVolatile = N->isVolatile();
|
||||
bool isNonTemporal = N->isNonTemporal();
|
||||
bool isInvariant = N->isInvariant();
|
||||
DebugLoc dl = N->getDebugLoc();
|
||||
|
||||
assert(NVT.isByteSized() && "Expanded type not byte sized!");
|
||||
@ -1808,7 +1809,7 @@ void DAGTypeLegalizer::ExpandIntRes_LOAD(LoadSDNode *N,
|
||||
} else if (TLI.isLittleEndian()) {
|
||||
// Little-endian - low bits are at low addresses.
|
||||
Lo = DAG.getLoad(NVT, dl, Ch, Ptr, N->getPointerInfo(),
|
||||
isVolatile, isNonTemporal, Alignment);
|
||||
isVolatile, isNonTemporal, isInvariant, Alignment);
|
||||
|
||||
unsigned ExcessBits =
|
||||
N->getMemoryVT().getSizeInBits() - NVT.getSizeInBits();
|
||||
@ -2310,7 +2311,7 @@ void DAGTypeLegalizer::ExpandIntRes_XMULO(SDNode *N,
|
||||
|
||||
SplitInteger(CallInfo.first, Lo, Hi);
|
||||
SDValue Temp2 = DAG.getLoad(PtrVT, dl, CallInfo.second, Temp,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
SDValue Ofl = DAG.getSetCC(dl, N->getValueType(1), Temp2,
|
||||
DAG.getConstant(0, PtrVT),
|
||||
ISD::SETNE);
|
||||
|
@ -889,7 +889,7 @@ SDValue DAGTypeLegalizer::CreateStackStoreLoad(SDValue Op,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
// Result is a load from the stack slot.
|
||||
return DAG.getLoad(DestVT, dl, Store, StackPtr, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
/// CustomLowerNode - Replace the node's results with custom code provided
|
||||
|
@ -130,7 +130,8 @@ void DAGTypeLegalizer::ExpandRes_BITCAST(SDNode *N, SDValue &Lo, SDValue &Hi) {
|
||||
false, false, 0);
|
||||
|
||||
// Load the first half from the stack slot.
|
||||
Lo = DAG.getLoad(NOutVT, dl, Store, StackPtr, PtrInfo, false, false, 0);
|
||||
Lo = DAG.getLoad(NOutVT, dl, Store, StackPtr, PtrInfo,
|
||||
false, false, false, 0);
|
||||
|
||||
// Increment the pointer to the other half.
|
||||
unsigned IncrementSize = NOutVT.getSizeInBits() / 8;
|
||||
@ -140,7 +141,7 @@ void DAGTypeLegalizer::ExpandRes_BITCAST(SDNode *N, SDValue &Lo, SDValue &Hi) {
|
||||
// Load the second half from the stack slot.
|
||||
Hi = DAG.getLoad(NOutVT, dl, Store, StackPtr,
|
||||
PtrInfo.getWithOffset(IncrementSize), false,
|
||||
false, MinAlign(Alignment, IncrementSize));
|
||||
false, false, MinAlign(Alignment, IncrementSize));
|
||||
|
||||
// Handle endianness of the load.
|
||||
if (TLI.isBigEndian())
|
||||
@ -212,11 +213,12 @@ void DAGTypeLegalizer::ExpandRes_NormalLoad(SDNode *N, SDValue &Lo,
|
||||
unsigned Alignment = LD->getAlignment();
|
||||
bool isVolatile = LD->isVolatile();
|
||||
bool isNonTemporal = LD->isNonTemporal();
|
||||
bool isInvariant = LD->isInvariant();
|
||||
|
||||
assert(NVT.isByteSized() && "Expanded type not byte sized!");
|
||||
|
||||
Lo = DAG.getLoad(NVT, dl, Chain, Ptr, LD->getPointerInfo(),
|
||||
isVolatile, isNonTemporal, Alignment);
|
||||
isVolatile, isNonTemporal, isInvariant, Alignment);
|
||||
|
||||
// Increment the pointer to the other half.
|
||||
unsigned IncrementSize = NVT.getSizeInBits() / 8;
|
||||
@ -224,7 +226,7 @@ void DAGTypeLegalizer::ExpandRes_NormalLoad(SDNode *N, SDValue &Lo,
|
||||
DAG.getIntPtrConstant(IncrementSize));
|
||||
Hi = DAG.getLoad(NVT, dl, Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(IncrementSize),
|
||||
isVolatile, isNonTemporal,
|
||||
isVolatile, isNonTemporal, isInvariant,
|
||||
MinAlign(Alignment, IncrementSize));
|
||||
|
||||
// Build a factor node to remember that this load is independent of the
|
||||
|
@ -194,7 +194,7 @@ SDValue DAGTypeLegalizer::ScalarizeVecRes_LOAD(LoadSDNode *N) {
|
||||
N->getPointerInfo(),
|
||||
N->getMemoryVT().getVectorElementType(),
|
||||
N->isVolatile(), N->isNonTemporal(),
|
||||
N->getOriginalAlignment());
|
||||
N->isInvariant(), N->getOriginalAlignment());
|
||||
|
||||
// Legalized the chain result - switch anything that used the old chain to
|
||||
// use the new one.
|
||||
@ -677,7 +677,7 @@ void DAGTypeLegalizer::SplitVecRes_INSERT_VECTOR_ELT(SDNode *N, SDValue &Lo,
|
||||
|
||||
// Load the Lo part from the stack slot.
|
||||
Lo = DAG.getLoad(Lo.getValueType(), dl, Store, StackPtr, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
|
||||
// Increment the pointer to the other part.
|
||||
unsigned IncrementSize = Lo.getValueType().getSizeInBits() / 8;
|
||||
@ -686,7 +686,7 @@ void DAGTypeLegalizer::SplitVecRes_INSERT_VECTOR_ELT(SDNode *N, SDValue &Lo,
|
||||
|
||||
// Load the Hi part from the stack slot.
|
||||
Hi = DAG.getLoad(Hi.getValueType(), dl, Store, StackPtr, MachinePointerInfo(),
|
||||
false, false, MinAlign(Alignment, IncrementSize));
|
||||
false, false, false, MinAlign(Alignment, IncrementSize));
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::SplitVecRes_SCALAR_TO_VECTOR(SDNode *N, SDValue &Lo,
|
||||
@ -713,20 +713,21 @@ void DAGTypeLegalizer::SplitVecRes_LOAD(LoadSDNode *LD, SDValue &Lo,
|
||||
unsigned Alignment = LD->getOriginalAlignment();
|
||||
bool isVolatile = LD->isVolatile();
|
||||
bool isNonTemporal = LD->isNonTemporal();
|
||||
bool isInvariant = LD->isInvariant();
|
||||
|
||||
EVT LoMemVT, HiMemVT;
|
||||
GetSplitDestVTs(MemoryVT, LoMemVT, HiMemVT);
|
||||
|
||||
Lo = DAG.getLoad(ISD::UNINDEXED, ExtType, LoVT, dl, Ch, Ptr, Offset,
|
||||
LD->getPointerInfo(), LoMemVT, isVolatile, isNonTemporal,
|
||||
Alignment);
|
||||
isInvariant, Alignment);
|
||||
|
||||
unsigned IncrementSize = LoMemVT.getSizeInBits()/8;
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
|
||||
DAG.getIntPtrConstant(IncrementSize));
|
||||
Hi = DAG.getLoad(ISD::UNINDEXED, ExtType, HiVT, dl, Ch, Ptr, Offset,
|
||||
LD->getPointerInfo().getWithOffset(IncrementSize),
|
||||
HiMemVT, isVolatile, isNonTemporal, Alignment);
|
||||
HiMemVT, isVolatile, isNonTemporal, isInvariant, Alignment);
|
||||
|
||||
// Build a factor node to remember that this load is independent of the
|
||||
// other one.
|
||||
@ -2276,6 +2277,7 @@ SDValue DAGTypeLegalizer::GenWidenVectorLoads(SmallVector<SDValue, 16> &LdChain,
|
||||
unsigned Align = LD->getAlignment();
|
||||
bool isVolatile = LD->isVolatile();
|
||||
bool isNonTemporal = LD->isNonTemporal();
|
||||
bool isInvariant = LD->isInvariant();
|
||||
|
||||
int LdWidth = LdVT.getSizeInBits();
|
||||
int WidthDiff = WidenWidth - LdWidth; // Difference
|
||||
@ -2285,7 +2287,7 @@ SDValue DAGTypeLegalizer::GenWidenVectorLoads(SmallVector<SDValue, 16> &LdChain,
|
||||
EVT NewVT = FindMemType(DAG, TLI, LdWidth, WidenVT, LdAlign, WidthDiff);
|
||||
int NewVTWidth = NewVT.getSizeInBits();
|
||||
SDValue LdOp = DAG.getLoad(NewVT, dl, Chain, BasePtr, LD->getPointerInfo(),
|
||||
isVolatile, isNonTemporal, Align);
|
||||
isVolatile, isNonTemporal, isInvariant, Align);
|
||||
LdChain.push_back(LdOp.getValue(1));
|
||||
|
||||
// Check if we can load the element with one instruction
|
||||
@ -2332,7 +2334,8 @@ SDValue DAGTypeLegalizer::GenWidenVectorLoads(SmallVector<SDValue, 16> &LdChain,
|
||||
SDValue LdOp = DAG.getLoad(NewVT, dl, Chain, BasePtr,
|
||||
LD->getPointerInfo().getWithOffset(Offset),
|
||||
isVolatile,
|
||||
isNonTemporal, MinAlign(Align, Increment));
|
||||
isNonTemporal, isInvariant,
|
||||
MinAlign(Align, Increment));
|
||||
LdChain.push_back(LdOp.getValue(1));
|
||||
LdOps.push_back(LdOp);
|
||||
|
||||
|
@ -475,7 +475,7 @@ static void AddNodeIDNode(FoldingSetNodeID &ID, const SDNode *N) {
|
||||
///
|
||||
static inline unsigned
|
||||
encodeMemSDNodeFlags(int ConvType, ISD::MemIndexedMode AM, bool isVolatile,
|
||||
bool isNonTemporal) {
|
||||
bool isNonTemporal, bool isInvariant) {
|
||||
assert((ConvType & 3) == ConvType &&
|
||||
"ConvType may not require more than 2 bits!");
|
||||
assert((AM & 7) == AM &&
|
||||
@ -483,7 +483,8 @@ encodeMemSDNodeFlags(int ConvType, ISD::MemIndexedMode AM, bool isVolatile,
|
||||
return ConvType |
|
||||
(AM << 2) |
|
||||
(isVolatile << 5) |
|
||||
(isNonTemporal << 6);
|
||||
(isNonTemporal << 6) |
|
||||
(isInvariant << 7);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
@ -3568,7 +3569,7 @@ static SDValue getMemmoveLoadsAndStores(SelectionDAG &DAG, DebugLoc dl,
|
||||
Value = DAG.getLoad(VT, dl, Chain,
|
||||
getMemBasePlusOffset(Src, SrcOff, DAG),
|
||||
SrcPtrInfo.getWithOffset(SrcOff), isVol,
|
||||
false, SrcAlign);
|
||||
false, false, SrcAlign);
|
||||
LoadValues.push_back(Value);
|
||||
LoadChains.push_back(Value.getValue(1));
|
||||
SrcOff += VTSize;
|
||||
@ -4144,7 +4145,7 @@ SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
|
||||
EVT VT, DebugLoc dl, SDValue Chain,
|
||||
SDValue Ptr, SDValue Offset,
|
||||
MachinePointerInfo PtrInfo, EVT MemVT,
|
||||
bool isVolatile, bool isNonTemporal,
|
||||
bool isVolatile, bool isNonTemporal, bool isInvariant,
|
||||
unsigned Alignment, const MDNode *TBAAInfo) {
|
||||
assert(Chain.getValueType() == MVT::Other &&
|
||||
"Invalid chain type");
|
||||
@ -4156,6 +4157,8 @@ SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
|
||||
Flags |= MachineMemOperand::MOVolatile;
|
||||
if (isNonTemporal)
|
||||
Flags |= MachineMemOperand::MONonTemporal;
|
||||
if (isInvariant)
|
||||
Flags |= MachineMemOperand::MOInvariant;
|
||||
|
||||
// If we don't have a PtrInfo, infer the trivial frame index case to simplify
|
||||
// clients.
|
||||
@ -4202,7 +4205,8 @@ SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
|
||||
AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
|
||||
ID.AddInteger(MemVT.getRawBits());
|
||||
ID.AddInteger(encodeMemSDNodeFlags(ExtType, AM, MMO->isVolatile(),
|
||||
MMO->isNonTemporal()));
|
||||
MMO->isNonTemporal(),
|
||||
MMO->isInvariant()));
|
||||
void *IP = 0;
|
||||
if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
|
||||
cast<LoadSDNode>(E)->refineAlignment(MMO);
|
||||
@ -4219,10 +4223,12 @@ SDValue SelectionDAG::getLoad(EVT VT, DebugLoc dl,
|
||||
SDValue Chain, SDValue Ptr,
|
||||
MachinePointerInfo PtrInfo,
|
||||
bool isVolatile, bool isNonTemporal,
|
||||
unsigned Alignment, const MDNode *TBAAInfo) {
|
||||
bool isInvariant, unsigned Alignment,
|
||||
const MDNode *TBAAInfo) {
|
||||
SDValue Undef = getUNDEF(Ptr.getValueType());
|
||||
return getLoad(ISD::UNINDEXED, ISD::NON_EXTLOAD, VT, dl, Chain, Ptr, Undef,
|
||||
PtrInfo, VT, isVolatile, isNonTemporal, Alignment, TBAAInfo);
|
||||
PtrInfo, VT, isVolatile, isNonTemporal, isInvariant, Alignment,
|
||||
TBAAInfo);
|
||||
}
|
||||
|
||||
SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, DebugLoc dl, EVT VT,
|
||||
@ -4232,7 +4238,7 @@ SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, DebugLoc dl, EVT VT,
|
||||
unsigned Alignment, const MDNode *TBAAInfo) {
|
||||
SDValue Undef = getUNDEF(Ptr.getValueType());
|
||||
return getLoad(ISD::UNINDEXED, ExtType, VT, dl, Chain, Ptr, Undef,
|
||||
PtrInfo, MemVT, isVolatile, isNonTemporal, Alignment,
|
||||
PtrInfo, MemVT, isVolatile, isNonTemporal, false, Alignment,
|
||||
TBAAInfo);
|
||||
}
|
||||
|
||||
@ -4245,8 +4251,8 @@ SelectionDAG::getIndexedLoad(SDValue OrigLoad, DebugLoc dl, SDValue Base,
|
||||
"Load is already a indexed load!");
|
||||
return getLoad(AM, LD->getExtensionType(), OrigLoad.getValueType(), dl,
|
||||
LD->getChain(), Base, Offset, LD->getPointerInfo(),
|
||||
LD->getMemoryVT(),
|
||||
LD->isVolatile(), LD->isNonTemporal(), LD->getAlignment());
|
||||
LD->getMemoryVT(), LD->isVolatile(), LD->isNonTemporal(),
|
||||
false, LD->getAlignment());
|
||||
}
|
||||
|
||||
SDValue SelectionDAG::getStore(SDValue Chain, DebugLoc dl, SDValue Val,
|
||||
@ -4288,7 +4294,7 @@ SDValue SelectionDAG::getStore(SDValue Chain, DebugLoc dl, SDValue Val,
|
||||
AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
|
||||
ID.AddInteger(VT.getRawBits());
|
||||
ID.AddInteger(encodeMemSDNodeFlags(false, ISD::UNINDEXED, MMO->isVolatile(),
|
||||
MMO->isNonTemporal()));
|
||||
MMO->isNonTemporal(), MMO->isInvariant()));
|
||||
void *IP = 0;
|
||||
if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
|
||||
cast<StoreSDNode>(E)->refineAlignment(MMO);
|
||||
@ -4355,7 +4361,7 @@ SDValue SelectionDAG::getTruncStore(SDValue Chain, DebugLoc dl, SDValue Val,
|
||||
AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
|
||||
ID.AddInteger(SVT.getRawBits());
|
||||
ID.AddInteger(encodeMemSDNodeFlags(true, ISD::UNINDEXED, MMO->isVolatile(),
|
||||
MMO->isNonTemporal()));
|
||||
MMO->isNonTemporal(), MMO->isInvariant()));
|
||||
void *IP = 0;
|
||||
if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP)) {
|
||||
cast<StoreSDNode>(E)->refineAlignment(MMO);
|
||||
@ -5679,7 +5685,7 @@ MemSDNode::MemSDNode(unsigned Opc, DebugLoc dl, SDVTList VTs, EVT memvt,
|
||||
MachineMemOperand *mmo)
|
||||
: SDNode(Opc, dl, VTs), MemoryVT(memvt), MMO(mmo) {
|
||||
SubclassData = encodeMemSDNodeFlags(0, ISD::UNINDEXED, MMO->isVolatile(),
|
||||
MMO->isNonTemporal());
|
||||
MMO->isNonTemporal(), MMO->isInvariant());
|
||||
assert(isVolatile() == MMO->isVolatile() && "Volatile encoding error!");
|
||||
assert(isNonTemporal() == MMO->isNonTemporal() &&
|
||||
"Non-temporal encoding error!");
|
||||
@ -5692,7 +5698,7 @@ MemSDNode::MemSDNode(unsigned Opc, DebugLoc dl, SDVTList VTs,
|
||||
: SDNode(Opc, dl, VTs, Ops, NumOps),
|
||||
MemoryVT(memvt), MMO(mmo) {
|
||||
SubclassData = encodeMemSDNodeFlags(0, ISD::UNINDEXED, MMO->isVolatile(),
|
||||
MMO->isNonTemporal());
|
||||
MMO->isNonTemporal(), MMO->isInvariant());
|
||||
assert(isVolatile() == MMO->isVolatile() && "Volatile encoding error!");
|
||||
assert(memvt.getStoreSize() == MMO->getSize() && "Size mismatch!");
|
||||
}
|
||||
|
@ -3175,6 +3175,7 @@ void SelectionDAGBuilder::visitLoad(const LoadInst &I) {
|
||||
|
||||
bool isVolatile = I.isVolatile();
|
||||
bool isNonTemporal = I.getMetadata("nontemporal") != 0;
|
||||
bool isInvariant = I.getMetadata("invariant.load") != 0;
|
||||
unsigned Alignment = I.getAlignment();
|
||||
const MDNode *TBAAInfo = I.getMetadata(LLVMContext::MD_tbaa);
|
||||
|
||||
@ -3224,7 +3225,7 @@ void SelectionDAGBuilder::visitLoad(const LoadInst &I) {
|
||||
DAG.getConstant(Offsets[i], PtrVT));
|
||||
SDValue L = DAG.getLoad(ValueVTs[i], getCurDebugLoc(), Root,
|
||||
A, MachinePointerInfo(SV, Offsets[i]), isVolatile,
|
||||
isNonTemporal, Alignment, TBAAInfo);
|
||||
isNonTemporal, isInvariant, Alignment, TBAAInfo);
|
||||
|
||||
Values[i] = L;
|
||||
Chains[ChainI] = L.getValue(1);
|
||||
@ -5264,7 +5265,7 @@ void SelectionDAGBuilder::LowerCallTo(ImmutableCallSite CS, SDValue Callee,
|
||||
SDValue L = DAG.getLoad(Outs[i].VT, getCurDebugLoc(), Result.second,
|
||||
Add,
|
||||
MachinePointerInfo::getFixedStack(DemoteStackIdx, Offsets[i]),
|
||||
false, false, 1);
|
||||
false, false, false, 1);
|
||||
Values[i] = L;
|
||||
Chains[i] = L.getValue(1);
|
||||
}
|
||||
@ -5375,7 +5376,8 @@ static SDValue getMemCmpLoad(const Value *PtrVal, MVT LoadVT,
|
||||
SDValue LoadVal = Builder.DAG.getLoad(LoadVT, Builder.getCurDebugLoc(), Root,
|
||||
Ptr, MachinePointerInfo(PtrVal),
|
||||
false /*volatile*/,
|
||||
false /*nontemporal*/, 1 /* align=1 */);
|
||||
false /*nontemporal*/,
|
||||
false /*isinvariant*/, 1 /* align=1 */);
|
||||
|
||||
if (!ConstantMemory)
|
||||
Builder.PendingLoads.push_back(LoadVal.getValue(1));
|
||||
|
@ -2060,7 +2060,7 @@ TargetLowering::SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
|
||||
unsigned NewAlign = MinAlign(Lod->getAlignment(), bestOffset);
|
||||
SDValue NewLoad = DAG.getLoad(newVT, dl, Lod->getChain(), Ptr,
|
||||
Lod->getPointerInfo().getWithOffset(bestOffset),
|
||||
false, false, NewAlign);
|
||||
false, false, false, NewAlign);
|
||||
return DAG.getSetCC(dl, VT,
|
||||
DAG.getNode(ISD::AND, dl, newVT, NewLoad,
|
||||
DAG.getConstant(bestMask.trunc(bestWidth),
|
||||
|
@ -1339,7 +1339,7 @@ ARMTargetLowering::LowerCall(SDValue Chain, SDValue Callee,
|
||||
SDValue AddArg = DAG.getNode(ISD::ADD, dl, PtrVT, Arg, Const);
|
||||
SDValue Load = DAG.getLoad(PtrVT, dl, Chain, AddArg,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(j, Load));
|
||||
}
|
||||
@ -1432,7 +1432,7 @@ ARMTargetLowering::LowerCall(SDValue Chain, SDValue Callee,
|
||||
Callee = DAG.getLoad(getPointerTy(), dl,
|
||||
DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
} else if (ExternalSymbolSDNode *S=dyn_cast<ExternalSymbolSDNode>(Callee)) {
|
||||
const char *Sym = S->getSymbol();
|
||||
|
||||
@ -1447,7 +1447,7 @@ ARMTargetLowering::LowerCall(SDValue Chain, SDValue Callee,
|
||||
Callee = DAG.getLoad(getPointerTy(), dl,
|
||||
DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
} else if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee)) {
|
||||
const GlobalValue *GV = G->getGlobal();
|
||||
@ -1468,7 +1468,7 @@ ARMTargetLowering::LowerCall(SDValue Chain, SDValue Callee,
|
||||
Callee = DAG.getLoad(getPointerTy(), dl,
|
||||
DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex, MVT::i32);
|
||||
Callee = DAG.getNode(ARMISD::PIC_ADD, dl,
|
||||
getPointerTy(), Callee, PICLabel);
|
||||
@ -1497,7 +1497,7 @@ ARMTargetLowering::LowerCall(SDValue Chain, SDValue Callee,
|
||||
Callee = DAG.getLoad(getPointerTy(), dl,
|
||||
DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex, MVT::i32);
|
||||
Callee = DAG.getNode(ARMISD::PIC_ADD, dl,
|
||||
getPointerTy(), Callee, PICLabel);
|
||||
@ -1968,7 +1968,7 @@ SDValue ARMTargetLowering::LowerBlockAddress(SDValue Op,
|
||||
CPAddr = DAG.getNode(ARMISD::Wrapper, DL, PtrVT, CPAddr);
|
||||
SDValue Result = DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
if (RelocM == Reloc::Static)
|
||||
return Result;
|
||||
SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex, MVT::i32);
|
||||
@ -1992,7 +1992,7 @@ ARMTargetLowering::LowerToTLSGeneralDynamicModel(GlobalAddressSDNode *GA,
|
||||
Argument = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, Argument);
|
||||
Argument = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), Argument,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
SDValue Chain = Argument.getValue(1);
|
||||
|
||||
SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex, MVT::i32);
|
||||
@ -2040,7 +2040,7 @@ ARMTargetLowering::LowerToTLSExecModels(GlobalAddressSDNode *GA,
|
||||
Offset = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, Offset);
|
||||
Offset = DAG.getLoad(PtrVT, dl, Chain, Offset,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
Chain = Offset.getValue(1);
|
||||
|
||||
SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex, MVT::i32);
|
||||
@ -2048,7 +2048,7 @@ ARMTargetLowering::LowerToTLSExecModels(GlobalAddressSDNode *GA,
|
||||
|
||||
Offset = DAG.getLoad(PtrVT, dl, Chain, Offset,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
} else {
|
||||
// local exec model
|
||||
ARMConstantPoolValue *CPV =
|
||||
@ -2057,7 +2057,7 @@ ARMTargetLowering::LowerToTLSExecModels(GlobalAddressSDNode *GA,
|
||||
Offset = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, Offset);
|
||||
Offset = DAG.getLoad(PtrVT, dl, Chain, Offset,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
// The address of the thread local variable is the add of the thread
|
||||
@ -2095,13 +2095,14 @@ SDValue ARMTargetLowering::LowerGlobalAddressELF(SDValue Op,
|
||||
SDValue Result = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(),
|
||||
CPAddr,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
SDValue Chain = Result.getValue(1);
|
||||
SDValue GOT = DAG.getGLOBAL_OFFSET_TABLE(PtrVT);
|
||||
Result = DAG.getNode(ISD::ADD, dl, PtrVT, Result, GOT);
|
||||
if (!UseGOTOFF)
|
||||
Result = DAG.getLoad(PtrVT, dl, Chain, Result,
|
||||
MachinePointerInfo::getGOT(), false, false, 0);
|
||||
MachinePointerInfo::getGOT(),
|
||||
false, false, false, 0);
|
||||
return Result;
|
||||
}
|
||||
|
||||
@ -2118,7 +2119,7 @@ SDValue ARMTargetLowering::LowerGlobalAddressELF(SDValue Op,
|
||||
CPAddr = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, CPAddr);
|
||||
return DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2146,7 +2147,8 @@ SDValue ARMTargetLowering::LowerGlobalAddressDarwin(SDValue Op,
|
||||
DAG.getTargetGlobalAddress(GV, dl, PtrVT));
|
||||
if (Subtarget->GVIsIndirectSymbol(GV, RelocM))
|
||||
Result = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), Result,
|
||||
MachinePointerInfo::getGOT(), false, false, 0);
|
||||
MachinePointerInfo::getGOT(),
|
||||
false, false, false, 0);
|
||||
return Result;
|
||||
}
|
||||
|
||||
@ -2166,7 +2168,7 @@ SDValue ARMTargetLowering::LowerGlobalAddressDarwin(SDValue Op,
|
||||
|
||||
SDValue Result = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
SDValue Chain = Result.getValue(1);
|
||||
|
||||
if (RelocM == Reloc::PIC_) {
|
||||
@ -2176,7 +2178,7 @@ SDValue ARMTargetLowering::LowerGlobalAddressDarwin(SDValue Op,
|
||||
|
||||
if (Subtarget->GVIsIndirectSymbol(GV, RelocM))
|
||||
Result = DAG.getLoad(PtrVT, dl, Chain, Result, MachinePointerInfo::getGOT(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
|
||||
return Result;
|
||||
}
|
||||
@ -2198,7 +2200,7 @@ SDValue ARMTargetLowering::LowerGLOBAL_OFFSET_TABLE(SDValue Op,
|
||||
CPAddr = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, CPAddr);
|
||||
SDValue Result = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex, MVT::i32);
|
||||
return DAG.getNode(ARMISD::PIC_ADD, dl, PtrVT, Result, PICLabel);
|
||||
}
|
||||
@ -2256,7 +2258,7 @@ ARMTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG,
|
||||
SDValue Result =
|
||||
DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
|
||||
if (RelocM == Reloc::PIC_) {
|
||||
SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex, MVT::i32);
|
||||
@ -2388,7 +2390,7 @@ ARMTargetLowering::GetF64FormalArgument(CCValAssign &VA, CCValAssign &NextVA,
|
||||
SDValue FIN = DAG.getFrameIndex(FI, getPointerTy());
|
||||
ArgValue2 = DAG.getLoad(MVT::i32, dl, Root, FIN,
|
||||
MachinePointerInfo::getFixedStack(FI),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
} else {
|
||||
Reg = MF.addLiveIn(NextVA.getLocReg(), RC);
|
||||
ArgValue2 = DAG.getCopyFromReg(Root, dl, Reg, MVT::i32);
|
||||
@ -2524,7 +2526,7 @@ ARMTargetLowering::LowerFormalArguments(SDValue Chain,
|
||||
SDValue FIN = DAG.getFrameIndex(FI, getPointerTy());
|
||||
ArgValue2 = DAG.getLoad(MVT::f64, dl, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(FI),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
} else {
|
||||
ArgValue2 = GetF64FormalArgument(VA, ArgLocs[++i],
|
||||
Chain, DAG, dl);
|
||||
@ -2615,7 +2617,7 @@ ARMTargetLowering::LowerFormalArguments(SDValue Chain,
|
||||
SDValue FIN = DAG.getFrameIndex(FI, getPointerTy());
|
||||
InVals.push_back(DAG.getLoad(VA.getValVT(), dl, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(FI),
|
||||
false, false, 0));
|
||||
false, false, false, 0));
|
||||
}
|
||||
lastInsIndex = index;
|
||||
}
|
||||
@ -2850,7 +2852,7 @@ static SDValue bitcastf32Toi32(SDValue Op, SelectionDAG &DAG) {
|
||||
return DAG.getLoad(MVT::i32, Op.getDebugLoc(),
|
||||
Ld->getChain(), Ld->getBasePtr(), Ld->getPointerInfo(),
|
||||
Ld->isVolatile(), Ld->isNonTemporal(),
|
||||
Ld->getAlignment());
|
||||
Ld->isInvariant(), Ld->getAlignment());
|
||||
|
||||
llvm_unreachable("Unknown VFP cmp argument!");
|
||||
}
|
||||
@ -2869,7 +2871,7 @@ static void expandf64Toi32(SDValue Op, SelectionDAG &DAG,
|
||||
Ld->getChain(), Ptr,
|
||||
Ld->getPointerInfo(),
|
||||
Ld->isVolatile(), Ld->isNonTemporal(),
|
||||
Ld->getAlignment());
|
||||
Ld->isInvariant(), Ld->getAlignment());
|
||||
|
||||
EVT PtrType = Ptr.getValueType();
|
||||
unsigned NewAlign = MinAlign(Ld->getAlignment(), 4);
|
||||
@ -2879,7 +2881,7 @@ static void expandf64Toi32(SDValue Op, SelectionDAG &DAG,
|
||||
Ld->getChain(), NewPtr,
|
||||
Ld->getPointerInfo().getWithOffset(4),
|
||||
Ld->isVolatile(), Ld->isNonTemporal(),
|
||||
NewAlign);
|
||||
Ld->isInvariant(), NewAlign);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -3003,13 +3005,14 @@ SDValue ARMTargetLowering::LowerBR_JT(SDValue Op, SelectionDAG &DAG) const {
|
||||
if (getTargetMachine().getRelocationModel() == Reloc::PIC_) {
|
||||
Addr = DAG.getLoad((EVT)MVT::i32, dl, Chain, Addr,
|
||||
MachinePointerInfo::getJumpTable(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
Chain = Addr.getValue(1);
|
||||
Addr = DAG.getNode(ISD::ADD, dl, PTy, Addr, Table);
|
||||
return DAG.getNode(ARMISD::BR_JT, dl, MVT::Other, Chain, Addr, JTI, UId);
|
||||
} else {
|
||||
Addr = DAG.getLoad(PTy, dl, Chain, Addr,
|
||||
MachinePointerInfo::getJumpTable(), false, false, 0);
|
||||
MachinePointerInfo::getJumpTable(),
|
||||
false, false, false, 0);
|
||||
Chain = Addr.getValue(1);
|
||||
return DAG.getNode(ARMISD::BR_JT, dl, MVT::Other, Chain, Addr, JTI, UId);
|
||||
}
|
||||
@ -3179,7 +3182,7 @@ SDValue ARMTargetLowering::LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const{
|
||||
SDValue Offset = DAG.getConstant(4, MVT::i32);
|
||||
return DAG.getLoad(VT, dl, DAG.getEntryNode(),
|
||||
DAG.getNode(ISD::ADD, dl, VT, FrameAddr, Offset),
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
}
|
||||
|
||||
// Return LR, which contains the return address. Mark it an implicit live-in.
|
||||
@ -3200,7 +3203,7 @@ SDValue ARMTargetLowering::LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const {
|
||||
while (Depth--)
|
||||
FrameAddr = DAG.getLoad(VT, dl, DAG.getEntryNode(), FrameAddr,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
return FrameAddr;
|
||||
}
|
||||
|
||||
@ -4595,7 +4598,8 @@ static SDValue SkipExtension(SDNode *N, SelectionDAG &DAG) {
|
||||
if (LoadSDNode *LD = dyn_cast<LoadSDNode>(N))
|
||||
return DAG.getLoad(LD->getMemoryVT(), N->getDebugLoc(), LD->getChain(),
|
||||
LD->getBasePtr(), LD->getPointerInfo(), LD->isVolatile(),
|
||||
LD->isNonTemporal(), LD->getAlignment());
|
||||
LD->isNonTemporal(), LD->isInvariant(),
|
||||
LD->getAlignment());
|
||||
// Otherwise, the value must be a BUILD_VECTOR. For v2i64, it will
|
||||
// have been legalized as a BITCAST from v4i32.
|
||||
if (N->getOpcode() == ISD::BITCAST) {
|
||||
@ -7067,13 +7071,14 @@ static SDValue PerformVMOVRRDCombine(SDNode *N,
|
||||
SDValue BasePtr = LD->getBasePtr();
|
||||
SDValue NewLD1 = DAG.getLoad(MVT::i32, DL, LD->getChain(), BasePtr,
|
||||
LD->getPointerInfo(), LD->isVolatile(),
|
||||
LD->isNonTemporal(), LD->getAlignment());
|
||||
LD->isNonTemporal(), LD->isInvariant(),
|
||||
LD->getAlignment());
|
||||
|
||||
SDValue OffsetPtr = DAG.getNode(ISD::ADD, DL, MVT::i32, BasePtr,
|
||||
DAG.getConstant(4, MVT::i32));
|
||||
SDValue NewLD2 = DAG.getLoad(MVT::i32, DL, NewLD1.getValue(1), OffsetPtr,
|
||||
LD->getPointerInfo(), LD->isVolatile(),
|
||||
LD->isNonTemporal(),
|
||||
LD->isNonTemporal(), LD->isInvariant(),
|
||||
std::min(4U, LD->getAlignment() / 2));
|
||||
|
||||
DAG.ReplaceAllUsesOfValueWith(SDValue(LD, 1), NewLD2.getValue(1));
|
||||
|
@ -67,7 +67,7 @@ ARMSelectionDAGInfo::EmitTargetCodeForMemcpy(SelectionDAG &DAG, DebugLoc dl,
|
||||
DAG.getNode(ISD::ADD, dl, MVT::i32, Src,
|
||||
DAG.getConstant(SrcOff, MVT::i32)),
|
||||
SrcPtrInfo.getWithOffset(SrcOff), isVolatile,
|
||||
false, 0);
|
||||
false, false, 0);
|
||||
TFOps[i] = Loads[i].getValue(1);
|
||||
SrcOff += VTSize;
|
||||
}
|
||||
@ -105,7 +105,8 @@ ARMSelectionDAGInfo::EmitTargetCodeForMemcpy(SelectionDAG &DAG, DebugLoc dl,
|
||||
Loads[i] = DAG.getLoad(VT, dl, Chain,
|
||||
DAG.getNode(ISD::ADD, dl, MVT::i32, Src,
|
||||
DAG.getConstant(SrcOff, MVT::i32)),
|
||||
SrcPtrInfo.getWithOffset(SrcOff), false, false, 0);
|
||||
SrcPtrInfo.getWithOffset(SrcOff),
|
||||
false, false, false, 0);
|
||||
TFOps[i] = Loads[i].getValue(1);
|
||||
++i;
|
||||
SrcOff += VTSize;
|
||||
|
@ -216,7 +216,7 @@ namespace {
|
||||
HandleSDNode Dummy(CurDAG->getLoad(vecVT, dl,
|
||||
CurDAG->getEntryNode(), CGPoolOffset,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, Alignment));
|
||||
false, false, false, Alignment));
|
||||
CurDAG->ReplaceAllUsesWith(SDValue(bvNode, 0), Dummy.getValue());
|
||||
if (SDNode *N = SelectCode(Dummy.getValue().getNode()))
|
||||
return N;
|
||||
|
@ -667,7 +667,7 @@ LowerLOAD(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST) {
|
||||
// Do the load as a i128 to allow possible shifting
|
||||
SDValue low = DAG.getLoad(MVT::i128, dl, the_chain, basePtr,
|
||||
lowMemPtr,
|
||||
LN->isVolatile(), LN->isNonTemporal(), 16);
|
||||
LN->isVolatile(), LN->isNonTemporal(), false, 16);
|
||||
|
||||
// When the size is not greater than alignment we get all data with just
|
||||
// one load
|
||||
@ -704,7 +704,8 @@ LowerLOAD(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST) {
|
||||
basePtr,
|
||||
DAG.getConstant(16, PtrVT)),
|
||||
highMemPtr,
|
||||
LN->isVolatile(), LN->isNonTemporal(), 16);
|
||||
LN->isVolatile(), LN->isNonTemporal(), false,
|
||||
16);
|
||||
|
||||
the_chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, low.getValue(1),
|
||||
high.getValue(1));
|
||||
@ -859,7 +860,8 @@ LowerSTORE(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST) {
|
||||
|
||||
// Load the lower part of the memory to which to store.
|
||||
SDValue low = DAG.getLoad(vecVT, dl, the_chain, basePtr,
|
||||
lowMemPtr, SN->isVolatile(), SN->isNonTemporal(), 16);
|
||||
lowMemPtr, SN->isVolatile(), SN->isNonTemporal(),
|
||||
false, 16);
|
||||
|
||||
// if we don't need to store over the 16 byte boundary, one store suffices
|
||||
if (alignment >= StVT.getSizeInBits()/8) {
|
||||
@ -959,7 +961,8 @@ LowerSTORE(SDValue Op, SelectionDAG &DAG, const SPUSubtarget *ST) {
|
||||
DAG.getNode(ISD::ADD, dl, PtrVT, basePtr,
|
||||
DAG.getConstant( 16, PtrVT)),
|
||||
highMemPtr,
|
||||
SN->isVolatile(), SN->isNonTemporal(), 16);
|
||||
SN->isVolatile(), SN->isNonTemporal(),
|
||||
false, 16);
|
||||
the_chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, low.getValue(1),
|
||||
hi.getValue(1));
|
||||
|
||||
@ -1194,7 +1197,7 @@ SPUTargetLowering::LowerFormalArguments(SDValue Chain,
|
||||
int FI = MFI->CreateFixedObject(ObjSize, ArgOffset, true);
|
||||
SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
|
||||
ArgVal = DAG.getLoad(ObjectVT, dl, Chain, FIN, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
ArgOffset += StackSlotSize;
|
||||
}
|
||||
|
||||
|
@ -951,7 +951,7 @@ LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
|
||||
SDValue FIN = DAG.getFrameIndex(FI, getPointerTy());
|
||||
InVals.push_back(DAG.getLoad(VA.getValVT(), dl, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(FI),
|
||||
false, false, 0));
|
||||
false, false, false, 0));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -371,7 +371,7 @@ MSP430TargetLowering::LowerCCCArguments(SDValue Chain,
|
||||
SDValue FIN = DAG.getFrameIndex(FI, MVT::i16);
|
||||
InVals.push_back(DAG.getLoad(VA.getLocVT(), dl, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(FI),
|
||||
false, false, 0));
|
||||
false, false, false, 0));
|
||||
}
|
||||
}
|
||||
|
||||
@ -907,13 +907,13 @@ SDValue MSP430TargetLowering::LowerRETURNADDR(SDValue Op,
|
||||
return DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(),
|
||||
DAG.getNode(ISD::ADD, dl, getPointerTy(),
|
||||
FrameAddr, Offset),
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
}
|
||||
|
||||
// Just load the return address.
|
||||
SDValue RetAddrFI = getReturnAddressFrameIndex(DAG);
|
||||
return DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(),
|
||||
RetAddrFI, MachinePointerInfo(), false, false, 0);
|
||||
RetAddrFI, MachinePointerInfo(), false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue MSP430TargetLowering::LowerFRAMEADDR(SDValue Op,
|
||||
@ -929,7 +929,7 @@ SDValue MSP430TargetLowering::LowerFRAMEADDR(SDValue Op,
|
||||
while (Depth--)
|
||||
FrameAddr = DAG.getLoad(VT, dl, DAG.getEntryNode(), FrameAddr,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
return FrameAddr;
|
||||
}
|
||||
|
||||
|
@ -1402,7 +1402,7 @@ SDValue MipsTargetLowering::LowerGlobalAddress(SDValue Op,
|
||||
GA = DAG.getNode(MipsISD::WrapperPIC, dl, ValTy, GA);
|
||||
SDValue ResNode = DAG.getLoad(ValTy, dl,
|
||||
DAG.getEntryNode(), GA, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
// On functions and global targets not internal linked only
|
||||
// a load from got/GP is necessary for PIC to work.
|
||||
if (!HasGotOfst)
|
||||
@ -1438,7 +1438,7 @@ SDValue MipsTargetLowering::LowerBlockAddress(SDValue Op,
|
||||
MipsII::MO_ABS_LO);
|
||||
SDValue Load = DAG.getLoad(MVT::i32, dl,
|
||||
DAG.getEntryNode(), BAGOTOffset,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, BALOOffset);
|
||||
return DAG.getNode(ISD::ADD, dl, MVT::i32, Load, Lo);
|
||||
}
|
||||
@ -1485,7 +1485,7 @@ LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const
|
||||
MipsII::MO_GOTTPREL);
|
||||
Offset = DAG.getLoad(MVT::i32, dl,
|
||||
DAG.getEntryNode(), TGA, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
} else {
|
||||
// Local Exec TLS Model
|
||||
SDVTList VTs = DAG.getVTList(MVT::i32);
|
||||
@ -1524,7 +1524,7 @@ LowerJumpTable(SDValue Op, SelectionDAG &DAG) const
|
||||
JTI = DAG.getNode(MipsISD::WrapperPIC, dl, MVT::i32, JTI);
|
||||
HiPart = DAG.getLoad(MVT::i32, dl, DAG.getEntryNode(), JTI,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue JTILo = DAG.getTargetJumpTable(JT->getIndex(), PtrVT,
|
||||
@ -1568,7 +1568,7 @@ LowerConstantPool(SDValue Op, SelectionDAG &DAG) const
|
||||
CP = DAG.getNode(MipsISD::WrapperPIC, dl, MVT::i32, CP);
|
||||
SDValue Load = DAG.getLoad(MVT::i32, dl, DAG.getEntryNode(),
|
||||
CP, MachinePointerInfo::getConstantPool(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
SDValue CPLo = DAG.getTargetConstantPool(C, MVT::i32, N->getAlignment(),
|
||||
N->getOffset(), MipsII::MO_ABS_LO);
|
||||
SDValue Lo = DAG.getNode(MipsISD::Lo, dl, MVT::i32, CPLo);
|
||||
@ -1831,8 +1831,8 @@ WriteByValArg(SDValue& ByValChain, SDValue Chain, DebugLoc dl,
|
||||
DAG.getConstant(Offset, MVT::i32));
|
||||
SDValue LoadVal = DAG.getLoad(MVT::i32, dl, Chain, LoadPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, std::min(ByValAlign,
|
||||
(unsigned )4));
|
||||
false, false, false, std::min(ByValAlign,
|
||||
(unsigned )4));
|
||||
MemOpChains.push_back(LoadVal.getValue(1));
|
||||
unsigned DstReg = O32IntRegs[LocMemOffset / 4];
|
||||
RegsToPass.push_back(std::make_pair(DstReg, LoadVal));
|
||||
@ -2119,7 +2119,7 @@ MipsTargetLowering::LowerCall(SDValue InChain, SDValue Callee,
|
||||
Callee = DAG.getNode(MipsISD::WrapperPIC, dl, getPointerTy(), Callee);
|
||||
SDValue LoadValue = DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(),
|
||||
Callee, MachinePointerInfo::getGOT(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
|
||||
// Use GOT+LO if callee has internal linkage.
|
||||
if (CalleeLo.getNode()) {
|
||||
@ -2350,7 +2350,7 @@ MipsTargetLowering::LowerFormalArguments(SDValue Chain,
|
||||
SDValue FIN = DAG.getFrameIndex(LastFI, getPointerTy());
|
||||
InVals.push_back(DAG.getLoad(ValVT, dl, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(LastFI),
|
||||
false, false, 0));
|
||||
false, false, false, 0));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -70,7 +70,7 @@ PTXSelectionDAGInfo::EmitTargetCodeForMemcpy(SelectionDAG &DAG, DebugLoc dl,
|
||||
DAG.getNode(ISD::ADD, dl, PointerType, Src,
|
||||
DAG.getConstant(SrcOff, PointerType)),
|
||||
SrcPtrInfo.getWithOffset(SrcOff), isVolatile,
|
||||
false, 0);
|
||||
false, false, 0);
|
||||
TFOps[i] = Loads[i].getValue(1);
|
||||
SrcOff += VTSize;
|
||||
}
|
||||
@ -108,7 +108,8 @@ PTXSelectionDAGInfo::EmitTargetCodeForMemcpy(SelectionDAG &DAG, DebugLoc dl,
|
||||
Loads[i] = DAG.getLoad(VT, dl, Chain,
|
||||
DAG.getNode(ISD::ADD, dl, PointerType, Src,
|
||||
DAG.getConstant(SrcOff, PointerType)),
|
||||
SrcPtrInfo.getWithOffset(SrcOff), false, false, 0);
|
||||
SrcPtrInfo.getWithOffset(SrcOff), false, false,
|
||||
false, 0);
|
||||
TFOps[i] = Loads[i].getValue(1);
|
||||
++i;
|
||||
SrcOff += VTSize;
|
||||
|
@ -1223,7 +1223,7 @@ SDValue PPCTargetLowering::LowerGlobalAddress(SDValue Op,
|
||||
// extra load to get the address of the global.
|
||||
if (MOHiFlag & PPCII::MO_NLP_FLAG)
|
||||
Ptr = DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), Ptr, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
return Ptr;
|
||||
}
|
||||
|
||||
@ -1319,11 +1319,13 @@ SDValue PPCTargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG,
|
||||
|
||||
// areas
|
||||
SDValue OverflowArea = DAG.getLoad(MVT::i32, dl, InChain, OverflowAreaPtr,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false,
|
||||
false, 0);
|
||||
InChain = OverflowArea.getValue(1);
|
||||
|
||||
SDValue RegSaveArea = DAG.getLoad(MVT::i32, dl, InChain, RegSaveAreaPtr,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false,
|
||||
false, 0);
|
||||
InChain = RegSaveArea.getValue(1);
|
||||
|
||||
// select overflow_area if index > 8
|
||||
@ -1372,7 +1374,8 @@ SDValue PPCTargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG,
|
||||
MachinePointerInfo(),
|
||||
MVT::i32, false, false, 0);
|
||||
|
||||
return DAG.getLoad(VT, dl, InChain, Result, MachinePointerInfo(), false, false, 0);
|
||||
return DAG.getLoad(VT, dl, InChain, Result, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue PPCTargetLowering::LowerADJUST_TRAMPOLINE(SDValue Op,
|
||||
@ -1721,7 +1724,7 @@ PPCTargetLowering::LowerFormalArguments_SVR4(
|
||||
SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
|
||||
InVals.push_back(DAG.getLoad(VA.getValVT(), dl, Chain, FIN,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0));
|
||||
false, false, false, 0));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2138,7 +2141,7 @@ PPCTargetLowering::LowerFormalArguments_Darwin(
|
||||
isImmutable);
|
||||
SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
|
||||
ArgVal = DAG.getLoad(ObjectVT, dl, Chain, FIN, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
InVals.push_back(ArgVal);
|
||||
@ -2443,7 +2446,7 @@ SDValue PPCTargetLowering::EmitTailCallLoadFPAndRetAddr(SelectionDAG & DAG,
|
||||
EVT VT = PPCSubTarget.isPPC64() ? MVT::i64 : MVT::i32;
|
||||
LROpOut = getReturnAddrFrameIndex(DAG);
|
||||
LROpOut = DAG.getLoad(VT, dl, Chain, LROpOut, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
Chain = SDValue(LROpOut.getNode(), 1);
|
||||
|
||||
// When using the 32/64-bit SVR4 ABI there is no need to load the FP stack
|
||||
@ -2451,7 +2454,7 @@ SDValue PPCTargetLowering::EmitTailCallLoadFPAndRetAddr(SelectionDAG & DAG,
|
||||
if (isDarwinABI) {
|
||||
FPOpOut = getFramePointerFrameIndex(DAG);
|
||||
FPOpOut = DAG.getLoad(VT, dl, Chain, FPOpOut, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
Chain = SDValue(FPOpOut.getNode(), 1);
|
||||
}
|
||||
}
|
||||
@ -3212,7 +3215,7 @@ PPCTargetLowering::LowerCall_Darwin(SDValue Chain, SDValue Callee,
|
||||
if (GPR_idx != NumGPRs) {
|
||||
SDValue Load = DAG.getLoad(PtrVT, dl, Chain, AddArg,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
ArgOffset += PtrByteSize;
|
||||
@ -3250,7 +3253,8 @@ PPCTargetLowering::LowerCall_Darwin(SDValue Chain, SDValue Callee,
|
||||
// Float varargs are always shadowed in available integer registers
|
||||
if (GPR_idx != NumGPRs) {
|
||||
SDValue Load = DAG.getLoad(PtrVT, dl, Store, PtrOff,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false,
|
||||
false, 0);
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
}
|
||||
@ -3259,7 +3263,7 @@ PPCTargetLowering::LowerCall_Darwin(SDValue Chain, SDValue Callee,
|
||||
PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, ConstFour);
|
||||
SDValue Load = DAG.getLoad(PtrVT, dl, Store, PtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
}
|
||||
@ -3308,7 +3312,7 @@ PPCTargetLowering::LowerCall_Darwin(SDValue Chain, SDValue Callee,
|
||||
if (VR_idx != NumVRs) {
|
||||
SDValue Load = DAG.getLoad(MVT::v4f32, dl, Store, PtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(VR[VR_idx++], Load));
|
||||
}
|
||||
@ -3319,7 +3323,7 @@ PPCTargetLowering::LowerCall_Darwin(SDValue Chain, SDValue Callee,
|
||||
SDValue Ix = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff,
|
||||
DAG.getConstant(i, PtrVT));
|
||||
SDValue Load = DAG.getLoad(PtrVT, dl, Store, Ix, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
}
|
||||
@ -3483,7 +3487,7 @@ SDValue PPCTargetLowering::LowerSTACKRESTORE(SDValue Op, SelectionDAG &DAG,
|
||||
// Load the old link SP.
|
||||
SDValue LoadLinkSP = DAG.getLoad(PtrVT, dl, Chain, StackPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
|
||||
// Restore the stack pointer.
|
||||
Chain = DAG.getCopyToReg(LoadLinkSP.getValue(1), dl, SP, SaveSP);
|
||||
@ -3674,7 +3678,7 @@ SDValue PPCTargetLowering::LowerFP_TO_INT(SDValue Op, SelectionDAG &DAG,
|
||||
FIPtr = DAG.getNode(ISD::ADD, dl, FIPtr.getValueType(), FIPtr,
|
||||
DAG.getConstant(4, FIPtr.getValueType()));
|
||||
return DAG.getLoad(Op.getValueType(), dl, Chain, FIPtr, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue PPCTargetLowering::LowerSINT_TO_FP(SDValue Op,
|
||||
@ -3718,7 +3722,7 @@ SDValue PPCTargetLowering::LowerSINT_TO_FP(SDValue Op,
|
||||
Ops, 4, MVT::i64, MMO);
|
||||
// Load the value as a double.
|
||||
SDValue Ld = DAG.getLoad(MVT::f64, dl, Store, FIdx, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
|
||||
// FCFID it and return it.
|
||||
SDValue FP = DAG.getNode(PPCISD::FCFID, dl, MVT::f64, Ld);
|
||||
@ -3770,7 +3774,7 @@ SDValue PPCTargetLowering::LowerFLT_ROUNDS_(SDValue Op,
|
||||
SDValue Four = DAG.getConstant(4, PtrVT);
|
||||
SDValue Addr = DAG.getNode(ISD::ADD, dl, PtrVT, StackSlot, Four);
|
||||
SDValue CWD = DAG.getLoad(MVT::i32, dl, Store, Addr, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
|
||||
// Transform as necessary
|
||||
SDValue CWD1 =
|
||||
@ -4441,7 +4445,7 @@ SDValue PPCTargetLowering::LowerSCALAR_TO_VECTOR(SDValue Op,
|
||||
false, false, 0);
|
||||
// Load it out.
|
||||
return DAG.getLoad(Op.getValueType(), dl, Store, FIdx, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue PPCTargetLowering::LowerMUL(SDValue Op, SelectionDAG &DAG) const {
|
||||
@ -5729,13 +5733,13 @@ SDValue PPCTargetLowering::LowerRETURNADDR(SDValue Op,
|
||||
return DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(),
|
||||
DAG.getNode(ISD::ADD, dl, getPointerTy(),
|
||||
FrameAddr, Offset),
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
}
|
||||
|
||||
// Just load the return address off the stack.
|
||||
SDValue RetAddrFI = getReturnAddrFrameIndex(DAG);
|
||||
return DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(),
|
||||
RetAddrFI, MachinePointerInfo(), false, false, 0);
|
||||
RetAddrFI, MachinePointerInfo(), false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue PPCTargetLowering::LowerFRAMEADDR(SDValue Op,
|
||||
@ -5758,7 +5762,8 @@ SDValue PPCTargetLowering::LowerFRAMEADDR(SDValue Op,
|
||||
PtrVT);
|
||||
while (Depth--)
|
||||
FrameAddr = DAG.getLoad(Op.getValueType(), dl, DAG.getEntryNode(),
|
||||
FrameAddr, MachinePointerInfo(), false, false, 0);
|
||||
FrameAddr, MachinePointerInfo(), false, false,
|
||||
false, 0);
|
||||
return FrameAddr;
|
||||
}
|
||||
|
||||
|
@ -175,7 +175,7 @@ SparcTargetLowering::LowerFormalArguments(SDValue Chain,
|
||||
SDValue FIPtr = DAG.getFrameIndex(FrameIdx, MVT::i32);
|
||||
SDValue Arg = DAG.getLoad(MVT::i32, dl, Chain, FIPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
InVals.push_back(Arg);
|
||||
continue;
|
||||
}
|
||||
@ -197,7 +197,7 @@ SparcTargetLowering::LowerFormalArguments(SDValue Chain,
|
||||
SDValue FIPtr = DAG.getFrameIndex(FrameIdx, MVT::i32);
|
||||
LoVal = DAG.getLoad(MVT::i32, dl, Chain, FIPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
} else {
|
||||
unsigned loReg = MF.addLiveIn(NextVA.getLocReg(),
|
||||
&SP::IntRegsRegClass);
|
||||
@ -237,7 +237,7 @@ SparcTargetLowering::LowerFormalArguments(SDValue Chain,
|
||||
SDValue FIPtr = DAG.getFrameIndex(FI, getPointerTy());
|
||||
SDValue Load = DAG.getLoad(VA.getValVT(), dl, Chain, FIPtr,
|
||||
MachinePointerInfo(),
|
||||
false,false, 0);
|
||||
false,false, false, 0);
|
||||
InVals.push_back(Load);
|
||||
continue;
|
||||
}
|
||||
@ -248,7 +248,7 @@ SparcTargetLowering::LowerFormalArguments(SDValue Chain,
|
||||
SDValue FIPtr = DAG.getFrameIndex(FI, getPointerTy());
|
||||
SDValue HiVal = DAG.getLoad(MVT::i32, dl, Chain, FIPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
int FI2 = MF.getFrameInfo()->CreateFixedObject(4,
|
||||
Offset+4,
|
||||
true);
|
||||
@ -256,7 +256,7 @@ SparcTargetLowering::LowerFormalArguments(SDValue Chain,
|
||||
|
||||
SDValue LoVal = DAG.getLoad(MVT::i32, dl, Chain, FIPtr2,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
|
||||
SDValue WholeValue =
|
||||
DAG.getNode(ISD::BUILD_PAIR, dl, MVT::i64, LoVal, HiVal);
|
||||
@ -273,7 +273,7 @@ SparcTargetLowering::LowerFormalArguments(SDValue Chain,
|
||||
if (VA.getValVT() == MVT::i32 || VA.getValVT() == MVT::f32) {
|
||||
Load = DAG.getLoad(VA.getValVT(), dl, Chain, FIPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
} else {
|
||||
ISD::LoadExtType LoadOp = ISD::SEXTLOAD;
|
||||
// Sparc is big endian, so add an offset based on the ObjectVT.
|
||||
@ -467,13 +467,13 @@ SparcTargetLowering::LowerCall(SDValue Chain, SDValue Callee,
|
||||
false, false, 0);
|
||||
// Sparc is big-endian, so the high part comes first.
|
||||
SDValue Hi = DAG.getLoad(MVT::i32, dl, Store, StackPtr,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
// Increment the pointer to the other half.
|
||||
StackPtr = DAG.getNode(ISD::ADD, dl, StackPtr.getValueType(), StackPtr,
|
||||
DAG.getIntPtrConstant(4));
|
||||
// Load the low part.
|
||||
SDValue Lo = DAG.getLoad(MVT::i32, dl, Store, StackPtr,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
|
||||
if (VA.isRegLoc()) {
|
||||
RegsToPass.push_back(std::make_pair(VA.getLocReg(), Hi));
|
||||
@ -897,7 +897,7 @@ SDValue SparcTargetLowering::LowerGlobalAddress(SDValue Op,
|
||||
SDValue AbsAddr = DAG.getNode(ISD::ADD, dl, MVT::i32,
|
||||
GlobalBase, RelAddr);
|
||||
return DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(),
|
||||
AbsAddr, MachinePointerInfo(), false, false, 0);
|
||||
AbsAddr, MachinePointerInfo(), false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue SparcTargetLowering::LowerConstantPool(SDValue Op,
|
||||
@ -918,7 +918,7 @@ SDValue SparcTargetLowering::LowerConstantPool(SDValue Op,
|
||||
SDValue AbsAddr = DAG.getNode(ISD::ADD, dl, MVT::i32,
|
||||
GlobalBase, RelAddr);
|
||||
return DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(),
|
||||
AbsAddr, MachinePointerInfo(), false, false, 0);
|
||||
AbsAddr, MachinePointerInfo(), false, false, false, 0);
|
||||
}
|
||||
|
||||
static SDValue LowerFP_TO_SINT(SDValue Op, SelectionDAG &DAG) {
|
||||
@ -1026,7 +1026,7 @@ static SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG) {
|
||||
const Value *SV = cast<SrcValueSDNode>(Node->getOperand(2))->getValue();
|
||||
DebugLoc dl = Node->getDebugLoc();
|
||||
SDValue VAList = DAG.getLoad(MVT::i32, dl, InChain, VAListPtr,
|
||||
MachinePointerInfo(SV), false, false, 0);
|
||||
MachinePointerInfo(SV), false, false, false, 0);
|
||||
// Increment the pointer, VAList, to the next vaarg
|
||||
SDValue NextPtr = DAG.getNode(ISD::ADD, dl, MVT::i32, VAList,
|
||||
DAG.getConstant(VT.getSizeInBits()/8,
|
||||
@ -1038,11 +1038,11 @@ static SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG) {
|
||||
// f64 load.
|
||||
if (VT != MVT::f64)
|
||||
return DAG.getLoad(VT, dl, InChain, VAList, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
|
||||
// Otherwise, load it as i64, then do a bitconvert.
|
||||
SDValue V = DAG.getLoad(MVT::i64, dl, InChain, VAList, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
|
||||
// Bit-Convert the value to f64.
|
||||
SDValue Ops[2] = {
|
||||
@ -1103,7 +1103,7 @@ static SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) {
|
||||
FrameAddr = DAG.getLoad(MVT::i32, dl,
|
||||
Chain,
|
||||
Ptr,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
}
|
||||
}
|
||||
return FrameAddr;
|
||||
@ -1135,7 +1135,7 @@ static SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) {
|
||||
RetAddr = DAG.getLoad(MVT::i32, dl,
|
||||
Chain,
|
||||
Ptr,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
}
|
||||
}
|
||||
return RetAddr;
|
||||
|
@ -1707,7 +1707,7 @@ X86TargetLowering::LowerMemArgument(SDValue Chain,
|
||||
SDValue FIN = DAG.getFrameIndex(FI, getPointerTy());
|
||||
return DAG.getLoad(ValVT, dl, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(FI),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1810,7 +1810,7 @@ X86TargetLowering::LowerFormalArguments(SDValue Chain,
|
||||
// If value is passed via pointer - do a load.
|
||||
if (VA.getLocInfo() == CCValAssign::Indirect)
|
||||
ArgValue = DAG.getLoad(VA.getValVT(), dl, Chain, ArgValue,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
|
||||
InVals.push_back(ArgValue);
|
||||
}
|
||||
@ -2009,7 +2009,7 @@ X86TargetLowering::EmitTailCallLoadRetAddr(SelectionDAG &DAG,
|
||||
|
||||
// Load the "old" Return address.
|
||||
OutRetAddr = DAG.getLoad(VT, dl, Chain, OutRetAddr, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
return SDValue(OutRetAddr.getNode(), 1);
|
||||
}
|
||||
|
||||
@ -2371,7 +2371,7 @@ X86TargetLowering::LowerCall(SDValue Chain, SDValue Callee,
|
||||
if (ExtraLoad)
|
||||
Callee = DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(), Callee,
|
||||
MachinePointerInfo::getGOT(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
} else if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(Callee)) {
|
||||
unsigned char OpFlags = 0;
|
||||
@ -4982,7 +4982,7 @@ X86TargetLowering::LowerAsSplatVectorLoad(SDValue SrcOp, EVT VT, DebugLoc dl,
|
||||
EVT NVT = EVT::getVectorVT(*DAG.getContext(), PVT, NumElems);
|
||||
SDValue V1 = DAG.getLoad(NVT, dl, Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(StartOffset),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
|
||||
// Canonicalize it to a v4i32 or v8i32 shuffle.
|
||||
SmallVector<int, 8> Mask;
|
||||
@ -5047,11 +5047,12 @@ static SDValue EltsFromConsecutiveLoads(EVT VT, SmallVectorImpl<SDValue> &Elts,
|
||||
if (DAG.InferPtrAlignment(LDBase->getBasePtr()) >= 16)
|
||||
return DAG.getLoad(VT, DL, LDBase->getChain(), LDBase->getBasePtr(),
|
||||
LDBase->getPointerInfo(),
|
||||
LDBase->isVolatile(), LDBase->isNonTemporal(), 0);
|
||||
LDBase->isVolatile(), LDBase->isNonTemporal(),
|
||||
LDBase->isInvariant(), 0);
|
||||
return DAG.getLoad(VT, DL, LDBase->getChain(), LDBase->getBasePtr(),
|
||||
LDBase->getPointerInfo(),
|
||||
LDBase->isVolatile(), LDBase->isNonTemporal(),
|
||||
LDBase->getAlignment());
|
||||
LDBase->isInvariant(), LDBase->getAlignment());
|
||||
} else if (NumElems == 4 && LastLoadedElt == 1 &&
|
||||
DAG.getTargetLoweringInfo().isTypeLegal(MVT::v2i64)) {
|
||||
SDVTList Tys = DAG.getVTList(MVT::v2i64, MVT::Other);
|
||||
@ -7304,7 +7305,7 @@ X86TargetLowering::LowerExternalSymbol(SDValue Op, SelectionDAG &DAG) const {
|
||||
// load.
|
||||
if (isGlobalStubReference(OpFlag))
|
||||
Result = DAG.getLoad(getPointerTy(), DL, DAG.getEntryNode(), Result,
|
||||
MachinePointerInfo::getGOT(), false, false, 0);
|
||||
MachinePointerInfo::getGOT(), false, false, false, 0);
|
||||
|
||||
return Result;
|
||||
}
|
||||
@ -7372,7 +7373,7 @@ X86TargetLowering::LowerGlobalAddress(const GlobalValue *GV, DebugLoc dl,
|
||||
// load.
|
||||
if (isGlobalStubReference(OpFlags))
|
||||
Result = DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(), Result,
|
||||
MachinePointerInfo::getGOT(), false, false, 0);
|
||||
MachinePointerInfo::getGOT(), false, false, false, 0);
|
||||
|
||||
// If there was a non-zero offset that we didn't fold, create an explicit
|
||||
// addition for it.
|
||||
@ -7451,7 +7452,8 @@ static SDValue LowerToTLSExecModel(GlobalAddressSDNode *GA, SelectionDAG &DAG,
|
||||
|
||||
SDValue ThreadPointer = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(),
|
||||
DAG.getIntPtrConstant(0),
|
||||
MachinePointerInfo(Ptr), false, false, 0);
|
||||
MachinePointerInfo(Ptr),
|
||||
false, false, false, 0);
|
||||
|
||||
unsigned char OperandFlags = 0;
|
||||
// Most TLS accesses are not RIP relative, even on x86-64. One exception is
|
||||
@ -7477,7 +7479,7 @@ static SDValue LowerToTLSExecModel(GlobalAddressSDNode *GA, SelectionDAG &DAG,
|
||||
|
||||
if (model == TLSModel::InitialExec)
|
||||
Offset = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), Offset,
|
||||
MachinePointerInfo::getGOT(), false, false, 0);
|
||||
MachinePointerInfo::getGOT(), false, false, false, 0);
|
||||
|
||||
// The address of the thread local variable is the add of the thread
|
||||
// pointer with the offset of the variable.
|
||||
@ -7701,7 +7703,7 @@ SDValue X86TargetLowering::BuildFILD(SDValue Op, EVT SrcVT, SDValue Chain,
|
||||
Op.getValueType(), MMO);
|
||||
Result = DAG.getLoad(Op.getValueType(), DL, Chain, StackSlot,
|
||||
MachinePointerInfo::getFixedStack(SSFI),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
return Result;
|
||||
@ -7775,12 +7777,12 @@ SDValue X86TargetLowering::LowerUINT_TO_FP_i64(SDValue Op,
|
||||
SDValue Unpck1 = getUnpackl(DAG, dl, MVT::v4i32, XR1, XR2);
|
||||
SDValue CLod0 = DAG.getLoad(MVT::v4i32, dl, DAG.getEntryNode(), CPIdx0,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 16);
|
||||
false, false, false, 16);
|
||||
SDValue Unpck2 = getUnpackl(DAG, dl, MVT::v4i32, Unpck1, CLod0);
|
||||
SDValue XR2F = DAG.getNode(ISD::BITCAST, dl, MVT::v2f64, Unpck2);
|
||||
SDValue CLod1 = DAG.getLoad(MVT::v2f64, dl, CLod0.getValue(1), CPIdx1,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 16);
|
||||
false, false, false, 16);
|
||||
SDValue Sub = DAG.getNode(ISD::FSUB, dl, MVT::v2f64, XR2F, CLod1);
|
||||
|
||||
// Add the halves; easiest way is to swap them into another reg first.
|
||||
@ -8012,7 +8014,8 @@ SDValue X86TargetLowering::LowerFP_TO_SINT(SDValue Op,
|
||||
|
||||
// Load the result.
|
||||
return DAG.getLoad(Op.getValueType(), Op.getDebugLoc(),
|
||||
FIST, StackSlot, MachinePointerInfo(), false, false, 0);
|
||||
FIST, StackSlot, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue X86TargetLowering::LowerFP_TO_UINT(SDValue Op,
|
||||
@ -8023,7 +8026,8 @@ SDValue X86TargetLowering::LowerFP_TO_UINT(SDValue Op,
|
||||
|
||||
// Load the result.
|
||||
return DAG.getLoad(Op.getValueType(), Op.getDebugLoc(),
|
||||
FIST, StackSlot, MachinePointerInfo(), false, false, 0);
|
||||
FIST, StackSlot, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue X86TargetLowering::LowerFABS(SDValue Op,
|
||||
@ -8050,7 +8054,7 @@ SDValue X86TargetLowering::LowerFABS(SDValue Op,
|
||||
SDValue CPIdx = DAG.getConstantPool(C, getPointerTy(), 16);
|
||||
SDValue Mask = DAG.getLoad(VT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 16);
|
||||
false, false, false, 16);
|
||||
return DAG.getNode(X86ISD::FAND, dl, VT, Op.getOperand(0), Mask);
|
||||
}
|
||||
|
||||
@ -8077,7 +8081,7 @@ SDValue X86TargetLowering::LowerFNEG(SDValue Op, SelectionDAG &DAG) const {
|
||||
SDValue CPIdx = DAG.getConstantPool(C, getPointerTy(), 16);
|
||||
SDValue Mask = DAG.getLoad(VT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 16);
|
||||
false, false, false, 16);
|
||||
if (VT.isVector()) {
|
||||
return DAG.getNode(ISD::BITCAST, dl, VT,
|
||||
DAG.getNode(ISD::XOR, dl, MVT::v2i64,
|
||||
@ -8126,7 +8130,7 @@ SDValue X86TargetLowering::LowerFCOPYSIGN(SDValue Op, SelectionDAG &DAG) const {
|
||||
SDValue CPIdx = DAG.getConstantPool(C, getPointerTy(), 16);
|
||||
SDValue Mask1 = DAG.getLoad(SrcVT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 16);
|
||||
false, false, false, 16);
|
||||
SDValue SignBit = DAG.getNode(X86ISD::FAND, dl, SrcVT, Op1, Mask1);
|
||||
|
||||
// Shift sign bit right or left if the two operands have different types.
|
||||
@ -8155,7 +8159,7 @@ SDValue X86TargetLowering::LowerFCOPYSIGN(SDValue Op, SelectionDAG &DAG) const {
|
||||
CPIdx = DAG.getConstantPool(C, getPointerTy(), 16);
|
||||
SDValue Mask2 = DAG.getLoad(VT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 16);
|
||||
false, false, false, 16);
|
||||
SDValue Val = DAG.getNode(X86ISD::FAND, dl, VT, Op0, Mask2);
|
||||
|
||||
// Or the value with the sign bit.
|
||||
@ -9282,7 +9286,7 @@ SDValue X86TargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG) const {
|
||||
Chain,
|
||||
VAARG,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue X86TargetLowering::LowerVACOPY(SDValue Op, SelectionDAG &DAG) const {
|
||||
@ -9608,13 +9612,13 @@ SDValue X86TargetLowering::LowerRETURNADDR(SDValue Op,
|
||||
return DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(),
|
||||
DAG.getNode(ISD::ADD, dl, getPointerTy(),
|
||||
FrameAddr, Offset),
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
}
|
||||
|
||||
// Just load the return address.
|
||||
SDValue RetAddrFI = getReturnAddressFrameIndex(DAG);
|
||||
return DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(),
|
||||
RetAddrFI, MachinePointerInfo(), false, false, 0);
|
||||
RetAddrFI, MachinePointerInfo(), false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue X86TargetLowering::LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const {
|
||||
@ -9629,7 +9633,7 @@ SDValue X86TargetLowering::LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const {
|
||||
while (Depth--)
|
||||
FrameAddr = DAG.getLoad(VT, dl, DAG.getEntryNode(), FrameAddr,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
return FrameAddr;
|
||||
}
|
||||
|
||||
@ -9861,7 +9865,7 @@ SDValue X86TargetLowering::LowerFLT_ROUNDS_(SDValue Op,
|
||||
|
||||
// Load FP Control Word from stack slot
|
||||
SDValue CWD = DAG.getLoad(MVT::i16, DL, Chain, StackSlot,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
|
||||
// Transform as necessary
|
||||
SDValue CWD1 =
|
||||
@ -10201,7 +10205,7 @@ SDValue X86TargetLowering::LowerShift(SDValue Op, SelectionDAG &DAG) const {
|
||||
SDValue CPIdx = DAG.getConstantPool(C, getPointerTy(), 16);
|
||||
SDValue Addend = DAG.getLoad(VT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 16);
|
||||
false, false, false, 16);
|
||||
|
||||
Op = DAG.getNode(ISD::ADD, dl, VT, Op, Addend);
|
||||
Op = DAG.getNode(ISD::BITCAST, dl, MVT::v4f32, Op);
|
||||
@ -10223,7 +10227,7 @@ SDValue X86TargetLowering::LowerShift(SDValue Op, SelectionDAG &DAG) const {
|
||||
SDValue CPIdx = DAG.getConstantPool(C, getPointerTy(), 16);
|
||||
SDValue M = DAG.getLoad(VT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 16);
|
||||
false, false, false, 16);
|
||||
|
||||
// r = pblendv(r, psllw(r & (char16)15, 4), a);
|
||||
M = DAG.getNode(ISD::AND, dl, VT, R, M);
|
||||
@ -10238,7 +10242,7 @@ SDValue X86TargetLowering::LowerShift(SDValue Op, SelectionDAG &DAG) const {
|
||||
CPIdx = DAG.getConstantPool(C, getPointerTy(), 16);
|
||||
M = DAG.getLoad(VT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
false, false, 16);
|
||||
false, false, false, 16);
|
||||
|
||||
// r = pblendv(r, psllw(r & (char16)63, 2), a);
|
||||
M = DAG.getNode(ISD::AND, dl, VT, R, M);
|
||||
@ -10739,7 +10743,8 @@ void X86TargetLowering::ReplaceNodeResults(SDNode *N,
|
||||
EVT VT = N->getValueType(0);
|
||||
// Return a load from the stack slot.
|
||||
Results.push_back(DAG.getLoad(VT, dl, FIST, StackSlot,
|
||||
MachinePointerInfo(), false, false, 0));
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0));
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -12807,7 +12812,7 @@ static SDValue PerformEXTRACT_VECTOR_ELTCombine(SDNode *N, SelectionDAG &DAG,
|
||||
// Load the scalar.
|
||||
SDValue LoadScalar = DAG.getLoad(Extract->getValueType(0), dl, Ch,
|
||||
ScalarAddr, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
|
||||
// Replace the exact with the load.
|
||||
DAG.ReplaceAllUsesOfValueWith(SDValue(Extract, 0), LoadScalar);
|
||||
@ -13837,7 +13842,8 @@ static SDValue PerformLOADCombine(SDNode *N, SelectionDAG &DAG,
|
||||
SDValue ScalarLoad = DAG.getLoad(SclrLoadTy, dl, Ld->getChain(),
|
||||
Ld->getBasePtr(),
|
||||
Ld->getPointerInfo(), Ld->isVolatile(),
|
||||
Ld->isNonTemporal(), Ld->getAlignment());
|
||||
Ld->isNonTemporal(), Ld->isInvariant(),
|
||||
Ld->getAlignment());
|
||||
|
||||
// Insert the word loaded into a vector.
|
||||
SDValue ScalarInVector = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl,
|
||||
@ -14033,7 +14039,8 @@ static SDValue PerformSTORECombine(SDNode *N, SelectionDAG &DAG,
|
||||
EVT LdVT = Subtarget->is64Bit() ? MVT::i64 : MVT::f64;
|
||||
SDValue NewLd = DAG.getLoad(LdVT, LdDL, Ld->getChain(), Ld->getBasePtr(),
|
||||
Ld->getPointerInfo(), Ld->isVolatile(),
|
||||
Ld->isNonTemporal(), Ld->getAlignment());
|
||||
Ld->isNonTemporal(), Ld->isInvariant(),
|
||||
Ld->getAlignment());
|
||||
SDValue NewChain = NewLd.getValue(1);
|
||||
if (TokenFactorIndex != -1) {
|
||||
Ops.push_back(NewChain);
|
||||
@ -14054,10 +14061,11 @@ static SDValue PerformSTORECombine(SDNode *N, SelectionDAG &DAG,
|
||||
SDValue LoLd = DAG.getLoad(MVT::i32, LdDL, Ld->getChain(), LoAddr,
|
||||
Ld->getPointerInfo(),
|
||||
Ld->isVolatile(), Ld->isNonTemporal(),
|
||||
Ld->getAlignment());
|
||||
Ld->isInvariant(), Ld->getAlignment());
|
||||
SDValue HiLd = DAG.getLoad(MVT::i32, LdDL, Ld->getChain(), HiAddr,
|
||||
Ld->getPointerInfo().getWithOffset(4),
|
||||
Ld->isVolatile(), Ld->isNonTemporal(),
|
||||
Ld->isInvariant(),
|
||||
MinAlign(Ld->getAlignment(), 4));
|
||||
|
||||
SDValue NewChain = LoLd.getValue(1);
|
||||
|
@ -427,7 +427,7 @@ LowerLOAD(SDValue Op, SelectionDAG &DAG) const {
|
||||
//
|
||||
return DAG.getLoad(getPointerTy(), DL, Chain, BasePtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
// Lower to
|
||||
// ldw low, base[offset >> 2]
|
||||
@ -444,9 +444,11 @@ LowerLOAD(SDValue Op, SelectionDAG &DAG) const {
|
||||
SDValue HighAddr = DAG.getNode(ISD::ADD, DL, MVT::i32, Base, HighOffset);
|
||||
|
||||
SDValue Low = DAG.getLoad(getPointerTy(), DL, Chain,
|
||||
LowAddr, MachinePointerInfo(), false, false, 0);
|
||||
LowAddr, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue High = DAG.getLoad(getPointerTy(), DL, Chain,
|
||||
HighAddr, MachinePointerInfo(), false, false, 0);
|
||||
HighAddr, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue LowShifted = DAG.getNode(ISD::SRL, DL, MVT::i32, Low, LowShift);
|
||||
SDValue HighShifted = DAG.getNode(ISD::SHL, DL, MVT::i32, High, HighShift);
|
||||
SDValue Result = DAG.getNode(ISD::OR, DL, MVT::i32, LowShifted, HighShifted);
|
||||
@ -761,7 +763,7 @@ LowerVAARG(SDValue Op, SelectionDAG &DAG) const
|
||||
EVT VT = Node->getValueType(0);
|
||||
SDValue VAList = DAG.getLoad(getPointerTy(), dl, Node->getOperand(0),
|
||||
Node->getOperand(1), MachinePointerInfo(V),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
// Increment the pointer, VAList, to the next vararg
|
||||
SDValue Tmp3 = DAG.getNode(ISD::ADD, dl, getPointerTy(), VAList,
|
||||
DAG.getConstant(VT.getSizeInBits(),
|
||||
@ -771,7 +773,7 @@ LowerVAARG(SDValue Op, SelectionDAG &DAG) const
|
||||
MachinePointerInfo(V), false, false, 0);
|
||||
// Load the actual argument out of the pointer VAList
|
||||
return DAG.getLoad(VT, dl, Tmp3, VAList, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue XCoreTargetLowering::
|
||||
@ -1146,7 +1148,7 @@ XCoreTargetLowering::LowerCCCArguments(SDValue Chain,
|
||||
SDValue FIN = DAG.getFrameIndex(FI, MVT::i32);
|
||||
InVals.push_back(DAG.getLoad(VA.getLocVT(), dl, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(FI),
|
||||
false, false, 0));
|
||||
false, false, false, 0));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user