forked from OSchip/llvm-project
[SelectionDAG] Get rid of bool parameters in SelectionDAG::getLoad, getStore, and friends.
Summary: Instead, we take a single flags arg (a bitset). Also add a default 0 alignment, and change the order of arguments so the alignment comes before the flags. This greatly simplifies many callsites, and fixes a bug in AMDGPUISelLowering, wherein the order of the args to getLoad was inverted. It also greatly simplifies the process of adding another flag to getLoad. Reviewers: chandlerc, tstellarAMD Subscribers: jholewinski, arsenm, jyknight, dsanders, nemanjai, llvm-commits Differential Revision: http://reviews.llvm.org/D22249 llvm-svn: 275592
This commit is contained in:
parent
0af80cd6f0
commit
9c375817ac
|
@ -912,18 +912,21 @@ public:
|
|||
/// Loads are not normal binary operators: their result type is not
|
||||
/// determined by their operands, and they produce a value AND a token chain.
|
||||
///
|
||||
/// This function will set the MOLoad flag on MMOFlags, but you can set it if
|
||||
/// you want. The MOStore flag must not be set.
|
||||
SDValue getLoad(EVT VT, const SDLoc &dl, SDValue Chain, SDValue Ptr,
|
||||
MachinePointerInfo PtrInfo, bool isVolatile,
|
||||
bool isNonTemporal, bool isInvariant, unsigned Alignment,
|
||||
MachinePointerInfo PtrInfo, unsigned Alignment = 0,
|
||||
MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
|
||||
const AAMDNodes &AAInfo = AAMDNodes(),
|
||||
const MDNode *Ranges = nullptr);
|
||||
SDValue getLoad(EVT VT, const SDLoc &dl, SDValue Chain, SDValue Ptr,
|
||||
MachineMemOperand *MMO);
|
||||
SDValue getExtLoad(ISD::LoadExtType ExtType, const SDLoc &dl, EVT VT,
|
||||
SDValue Chain, SDValue Ptr, MachinePointerInfo PtrInfo,
|
||||
EVT MemVT, bool isVolatile, bool isNonTemporal,
|
||||
bool isInvariant, unsigned Alignment,
|
||||
const AAMDNodes &AAInfo = AAMDNodes());
|
||||
SDValue
|
||||
getExtLoad(ISD::LoadExtType ExtType, const SDLoc &dl, EVT VT, SDValue Chain,
|
||||
SDValue Ptr, MachinePointerInfo PtrInfo, EVT MemVT,
|
||||
unsigned Alignment = 0,
|
||||
MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
|
||||
const AAMDNodes &AAInfo = AAMDNodes());
|
||||
SDValue getExtLoad(ISD::LoadExtType ExtType, const SDLoc &dl, EVT VT,
|
||||
SDValue Chain, SDValue Ptr, EVT MemVT,
|
||||
MachineMemOperand *MMO);
|
||||
|
@ -931,8 +934,8 @@ public:
|
|||
SDValue Offset, ISD::MemIndexedMode AM);
|
||||
SDValue getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType, EVT VT,
|
||||
const SDLoc &dl, SDValue Chain, SDValue Ptr, SDValue Offset,
|
||||
MachinePointerInfo PtrInfo, EVT MemVT, bool isVolatile,
|
||||
bool isNonTemporal, bool isInvariant, unsigned Alignment,
|
||||
MachinePointerInfo PtrInfo, EVT MemVT, unsigned Alignment = 0,
|
||||
MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
|
||||
const AAMDNodes &AAInfo = AAMDNodes(),
|
||||
const MDNode *Ranges = nullptr);
|
||||
SDValue getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType, EVT VT,
|
||||
|
@ -940,16 +943,21 @@ public:
|
|||
EVT MemVT, MachineMemOperand *MMO);
|
||||
|
||||
/// Helper function to build ISD::STORE nodes.
|
||||
SDValue getStore(SDValue Chain, const SDLoc &dl, SDValue Val, SDValue Ptr,
|
||||
MachinePointerInfo PtrInfo, bool isVolatile,
|
||||
bool isNonTemporal, unsigned Alignment,
|
||||
const AAMDNodes &AAInfo = AAMDNodes());
|
||||
///
|
||||
/// This function will set the MOStore flag on MMOFlags, but you can set it if
|
||||
/// you want. The MOLoad and MOInvariant flags must not be set.
|
||||
SDValue
|
||||
getStore(SDValue Chain, const SDLoc &dl, SDValue Val, SDValue Ptr,
|
||||
MachinePointerInfo PtrInfo, unsigned Alignment = 0,
|
||||
MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
|
||||
const AAMDNodes &AAInfo = AAMDNodes());
|
||||
SDValue getStore(SDValue Chain, const SDLoc &dl, SDValue Val, SDValue Ptr,
|
||||
MachineMemOperand *MMO);
|
||||
SDValue getTruncStore(SDValue Chain, const SDLoc &dl, SDValue Val,
|
||||
SDValue Ptr, MachinePointerInfo PtrInfo, EVT TVT,
|
||||
bool isNonTemporal, bool isVolatile, unsigned Alignment,
|
||||
const AAMDNodes &AAInfo = AAMDNodes());
|
||||
SDValue
|
||||
getTruncStore(SDValue Chain, const SDLoc &dl, SDValue Val, SDValue Ptr,
|
||||
MachinePointerInfo PtrInfo, EVT TVT, unsigned Alignment = 0,
|
||||
MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
|
||||
const AAMDNodes &AAInfo = AAMDNodes());
|
||||
SDValue getTruncStore(SDValue Chain, const SDLoc &dl, SDValue Val,
|
||||
SDValue Ptr, EVT TVT, MachineMemOperand *MMO);
|
||||
SDValue getIndexedStore(SDValue OrigStoe, const SDLoc &dl, SDValue Base,
|
||||
|
|
|
@ -3273,12 +3273,10 @@ SDValue DAGCombiner::visitAND(SDNode *N) {
|
|||
|
||||
AddToWorklist(NewPtr.getNode());
|
||||
|
||||
SDValue Load =
|
||||
DAG.getExtLoad(ISD::ZEXTLOAD, SDLoc(LN0), LoadResultTy,
|
||||
LN0->getChain(), NewPtr,
|
||||
LN0->getPointerInfo(),
|
||||
ExtVT, LN0->isVolatile(), LN0->isNonTemporal(),
|
||||
LN0->isInvariant(), Alignment, LN0->getAAInfo());
|
||||
SDValue Load = DAG.getExtLoad(
|
||||
ISD::ZEXTLOAD, SDLoc(LN0), LoadResultTy, LN0->getChain(), NewPtr,
|
||||
LN0->getPointerInfo(), ExtVT, Alignment,
|
||||
LN0->getMemOperand()->getFlags(), LN0->getAAInfo());
|
||||
AddToWorklist(N);
|
||||
CombineTo(LN0, Load, Load.getValue(1));
|
||||
return SDValue(N, 0); // Return N so it doesn't get rechecked!
|
||||
|
@ -5985,9 +5983,8 @@ SDValue DAGCombiner::CombineExtLoad(SDNode *N) {
|
|||
|
||||
SDValue SplitLoad = DAG.getExtLoad(
|
||||
ExtType, DL, SplitDstVT, LN0->getChain(), BasePtr,
|
||||
LN0->getPointerInfo().getWithOffset(Offset), SplitSrcVT,
|
||||
LN0->isVolatile(), LN0->isNonTemporal(), LN0->isInvariant(),
|
||||
Align, LN0->getAAInfo());
|
||||
LN0->getPointerInfo().getWithOffset(Offset), SplitSrcVT, Align,
|
||||
LN0->getMemOperand()->getFlags(), LN0->getAAInfo());
|
||||
|
||||
BasePtr = DAG.getNode(ISD::ADD, DL, BasePtr.getValueType(), BasePtr,
|
||||
DAG.getConstant(Stride, DL, BasePtr.getValueType()));
|
||||
|
@ -6901,15 +6898,14 @@ SDValue DAGCombiner::ReduceLoadWidth(SDNode *N) {
|
|||
|
||||
SDValue Load;
|
||||
if (ExtType == ISD::NON_EXTLOAD)
|
||||
Load = DAG.getLoad(VT, SDLoc(N0), LN0->getChain(), NewPtr,
|
||||
LN0->getPointerInfo().getWithOffset(PtrOff),
|
||||
LN0->isVolatile(), LN0->isNonTemporal(),
|
||||
LN0->isInvariant(), NewAlign, LN0->getAAInfo());
|
||||
Load = DAG.getLoad(VT, SDLoc(N0), LN0->getChain(), NewPtr,
|
||||
LN0->getPointerInfo().getWithOffset(PtrOff), NewAlign,
|
||||
LN0->getMemOperand()->getFlags(), LN0->getAAInfo());
|
||||
else
|
||||
Load = DAG.getExtLoad(ExtType, SDLoc(N0), VT, LN0->getChain(),NewPtr,
|
||||
LN0->getPointerInfo().getWithOffset(PtrOff),
|
||||
ExtVT, LN0->isVolatile(), LN0->isNonTemporal(),
|
||||
LN0->isInvariant(), NewAlign, LN0->getAAInfo());
|
||||
Load = DAG.getExtLoad(ExtType, SDLoc(N0), VT, LN0->getChain(), NewPtr,
|
||||
LN0->getPointerInfo().getWithOffset(PtrOff), ExtVT,
|
||||
NewAlign, LN0->getMemOperand()->getFlags(),
|
||||
LN0->getAAInfo());
|
||||
|
||||
// Replace the old load's chain with the new load's chain.
|
||||
WorklistRemover DeadNodes(*this);
|
||||
|
@ -7327,9 +7323,8 @@ SDValue DAGCombiner::CombineConsecutiveLoads(SDNode *N, EVT VT) {
|
|||
|
||||
if (NewAlign <= Align &&
|
||||
(!LegalOperations || TLI.isOperationLegal(ISD::LOAD, VT)))
|
||||
return DAG.getLoad(VT, SDLoc(N), LD1->getChain(),
|
||||
LD1->getBasePtr(), LD1->getPointerInfo(),
|
||||
false, false, false, Align);
|
||||
return DAG.getLoad(VT, SDLoc(N), LD1->getChain(), LD1->getBasePtr(),
|
||||
LD1->getPointerInfo(), Align);
|
||||
}
|
||||
|
||||
return SDValue();
|
||||
|
@ -7438,11 +7433,10 @@ SDValue DAGCombiner::visitBITCAST(SDNode *N) {
|
|||
if (TLI.allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(), VT,
|
||||
LN0->getAddressSpace(), OrigAlign, &Fast) &&
|
||||
Fast) {
|
||||
SDValue Load = DAG.getLoad(VT, SDLoc(N), LN0->getChain(),
|
||||
LN0->getBasePtr(), LN0->getPointerInfo(),
|
||||
LN0->isVolatile(), LN0->isNonTemporal(),
|
||||
LN0->isInvariant(), OrigAlign,
|
||||
LN0->getAAInfo());
|
||||
SDValue Load =
|
||||
DAG.getLoad(VT, SDLoc(N), LN0->getChain(), LN0->getBasePtr(),
|
||||
LN0->getPointerInfo(), OrigAlign,
|
||||
LN0->getMemOperand()->getFlags(), LN0->getAAInfo());
|
||||
DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), Load.getValue(1));
|
||||
return Load;
|
||||
}
|
||||
|
@ -10108,13 +10102,10 @@ SDValue DAGCombiner::visitLOAD(SDNode *N) {
|
|||
if (OptLevel != CodeGenOpt::None && LD->isUnindexed()) {
|
||||
if (unsigned Align = DAG.InferPtrAlignment(Ptr)) {
|
||||
if (Align > LD->getMemOperand()->getBaseAlignment()) {
|
||||
SDValue NewLoad =
|
||||
DAG.getExtLoad(LD->getExtensionType(), SDLoc(N),
|
||||
LD->getValueType(0),
|
||||
Chain, Ptr, LD->getPointerInfo(),
|
||||
LD->getMemoryVT(),
|
||||
LD->isVolatile(), LD->isNonTemporal(),
|
||||
LD->isInvariant(), Align, LD->getAAInfo());
|
||||
SDValue NewLoad = DAG.getExtLoad(
|
||||
LD->getExtensionType(), SDLoc(N), LD->getValueType(0), Chain, Ptr,
|
||||
LD->getPointerInfo(), LD->getMemoryVT(), Align,
|
||||
LD->getMemOperand()->getFlags(), LD->getAAInfo());
|
||||
if (NewLoad.getNode() != N)
|
||||
return CombineTo(N, NewLoad, SDValue(NewLoad.getNode(), 1), true);
|
||||
}
|
||||
|
@ -10415,10 +10406,10 @@ struct LoadedSlice {
|
|||
EVT SliceType = getLoadedType();
|
||||
|
||||
// Create the load for the slice.
|
||||
SDValue LastInst = DAG->getLoad(
|
||||
SliceType, SDLoc(Origin), Origin->getChain(), BaseAddr,
|
||||
Origin->getPointerInfo().getWithOffset(Offset), Origin->isVolatile(),
|
||||
Origin->isNonTemporal(), Origin->isInvariant(), getAlignment());
|
||||
SDValue LastInst =
|
||||
DAG->getLoad(SliceType, SDLoc(Origin), Origin->getChain(), BaseAddr,
|
||||
Origin->getPointerInfo().getWithOffset(Offset),
|
||||
getAlignment(), Origin->getMemOperand()->getFlags());
|
||||
// If the final type is not the same as the loaded type, this means that
|
||||
// we have to pad with zero. Create a zero extend for that.
|
||||
EVT FinalType = Inst->getValueType(0);
|
||||
|
@ -10842,9 +10833,10 @@ ShrinkLoadReplaceStoreWithStore(const std::pair<unsigned, unsigned> &MaskInfo,
|
|||
IVal = DAG.getNode(ISD::TRUNCATE, SDLoc(IVal), VT, IVal);
|
||||
|
||||
++OpsNarrowed;
|
||||
return DAG.getStore(St->getChain(), SDLoc(St), IVal, Ptr,
|
||||
St->getPointerInfo().getWithOffset(StOffset),
|
||||
false, false, NewAlign).getNode();
|
||||
return DAG
|
||||
.getStore(St->getChain(), SDLoc(St), IVal, Ptr,
|
||||
St->getPointerInfo().getWithOffset(StOffset), NewAlign)
|
||||
.getNode();
|
||||
}
|
||||
|
||||
|
||||
|
@ -10950,19 +10942,16 @@ SDValue DAGCombiner::ReduceLoadOpStoreWidth(SDNode *N) {
|
|||
Ptr.getValueType(), Ptr,
|
||||
DAG.getConstant(PtrOff, SDLoc(LD),
|
||||
Ptr.getValueType()));
|
||||
SDValue NewLD = DAG.getLoad(NewVT, SDLoc(N0),
|
||||
LD->getChain(), NewPtr,
|
||||
LD->getPointerInfo().getWithOffset(PtrOff),
|
||||
LD->isVolatile(), LD->isNonTemporal(),
|
||||
LD->isInvariant(), NewAlign,
|
||||
LD->getAAInfo());
|
||||
SDValue NewLD =
|
||||
DAG.getLoad(NewVT, SDLoc(N0), LD->getChain(), NewPtr,
|
||||
LD->getPointerInfo().getWithOffset(PtrOff), NewAlign,
|
||||
LD->getMemOperand()->getFlags(), LD->getAAInfo());
|
||||
SDValue NewVal = DAG.getNode(Opc, SDLoc(Value), NewVT, NewLD,
|
||||
DAG.getConstant(NewImm, SDLoc(Value),
|
||||
NewVT));
|
||||
SDValue NewST = DAG.getStore(Chain, SDLoc(N),
|
||||
NewVal, NewPtr,
|
||||
ST->getPointerInfo().getWithOffset(PtrOff),
|
||||
false, false, NewAlign);
|
||||
SDValue NewST =
|
||||
DAG.getStore(Chain, SDLoc(N), NewVal, NewPtr,
|
||||
ST->getPointerInfo().getWithOffset(PtrOff), NewAlign);
|
||||
|
||||
AddToWorklist(NewPtr.getNode());
|
||||
AddToWorklist(NewLD.getNode());
|
||||
|
@ -11011,15 +11000,13 @@ SDValue DAGCombiner::TransformFPLoadStorePair(SDNode *N) {
|
|||
if (LDAlign < ABIAlign || STAlign < ABIAlign)
|
||||
return SDValue();
|
||||
|
||||
SDValue NewLD = DAG.getLoad(IntVT, SDLoc(Value),
|
||||
LD->getChain(), LD->getBasePtr(),
|
||||
LD->getPointerInfo(),
|
||||
false, false, false, LDAlign);
|
||||
SDValue NewLD =
|
||||
DAG.getLoad(IntVT, SDLoc(Value), LD->getChain(), LD->getBasePtr(),
|
||||
LD->getPointerInfo(), LDAlign);
|
||||
|
||||
SDValue NewST = DAG.getStore(NewLD.getValue(1), SDLoc(N),
|
||||
NewLD, ST->getBasePtr(),
|
||||
ST->getPointerInfo(),
|
||||
false, false, STAlign);
|
||||
SDValue NewST =
|
||||
DAG.getStore(NewLD.getValue(1), SDLoc(N), NewLD, ST->getBasePtr(),
|
||||
ST->getPointerInfo(), STAlign);
|
||||
|
||||
AddToWorklist(NewLD.getNode());
|
||||
AddToWorklist(NewST.getNode());
|
||||
|
@ -11318,7 +11305,6 @@ bool DAGCombiner::MergeStoresOfConstantsOrVecElts(
|
|||
SDValue NewStore = DAG.getStore(NewChain, DL, StoredVal,
|
||||
FirstInChain->getBasePtr(),
|
||||
FirstInChain->getPointerInfo(),
|
||||
false, false,
|
||||
FirstInChain->getAlignment());
|
||||
|
||||
bool UseAA = CombinerAA.getNumOccurrences() > 0 ? CombinerAA
|
||||
|
@ -11863,16 +11849,16 @@ bool DAGCombiner::MergeConsecutiveStores(StoreSDNode* St) {
|
|||
|
||||
// The merged loads are required to have the same incoming chain, so
|
||||
// using the first's chain is acceptable.
|
||||
SDValue NewLoad = DAG.getLoad(
|
||||
JointMemOpVT, LoadDL, FirstLoad->getChain(), FirstLoad->getBasePtr(),
|
||||
FirstLoad->getPointerInfo(), false, false, false, FirstLoadAlign);
|
||||
SDValue NewLoad = DAG.getLoad(JointMemOpVT, LoadDL, FirstLoad->getChain(),
|
||||
FirstLoad->getBasePtr(),
|
||||
FirstLoad->getPointerInfo(), FirstLoadAlign);
|
||||
|
||||
SDValue NewStoreChain =
|
||||
DAG.getNode(ISD::TokenFactor, StoreDL, MVT::Other, MergeStoreChains);
|
||||
|
||||
SDValue NewStore = DAG.getStore(
|
||||
NewStoreChain, StoreDL, NewLoad, FirstInChain->getBasePtr(),
|
||||
FirstInChain->getPointerInfo(), false, false, FirstStoreAlign);
|
||||
SDValue NewStore =
|
||||
DAG.getStore(NewStoreChain, StoreDL, NewLoad, FirstInChain->getBasePtr(),
|
||||
FirstInChain->getPointerInfo(), FirstStoreAlign);
|
||||
|
||||
// Transfer chain users from old loads to the new load.
|
||||
for (unsigned i = 0; i < NumElem; ++i) {
|
||||
|
@ -11987,21 +11973,17 @@ SDValue DAGCombiner::replaceStoreOfFPConstant(StoreSDNode *ST) {
|
|||
std::swap(Lo, Hi);
|
||||
|
||||
unsigned Alignment = ST->getAlignment();
|
||||
bool isVolatile = ST->isVolatile();
|
||||
bool isNonTemporal = ST->isNonTemporal();
|
||||
MachineMemOperand::Flags MMOFlags = ST->getMemOperand()->getFlags();
|
||||
AAMDNodes AAInfo = ST->getAAInfo();
|
||||
|
||||
SDValue St0 = DAG.getStore(Chain, DL, Lo,
|
||||
Ptr, ST->getPointerInfo(),
|
||||
isVolatile, isNonTemporal,
|
||||
ST->getAlignment(), AAInfo);
|
||||
SDValue St0 = DAG.getStore(Chain, DL, Lo, Ptr, ST->getPointerInfo(),
|
||||
ST->getAlignment(), MMOFlags, AAInfo);
|
||||
Ptr = DAG.getNode(ISD::ADD, DL, Ptr.getValueType(), Ptr,
|
||||
DAG.getConstant(4, DL, Ptr.getValueType()));
|
||||
Alignment = MinAlign(Alignment, 4U);
|
||||
SDValue St1 = DAG.getStore(Chain, DL, Hi,
|
||||
Ptr, ST->getPointerInfo().getWithOffset(4),
|
||||
isVolatile, isNonTemporal,
|
||||
Alignment, AAInfo);
|
||||
SDValue St1 = DAG.getStore(Chain, DL, Hi, Ptr,
|
||||
ST->getPointerInfo().getWithOffset(4),
|
||||
Alignment, MMOFlags, AAInfo);
|
||||
return DAG.getNode(ISD::TokenFactor, DL, MVT::Other,
|
||||
St0, St1);
|
||||
}
|
||||
|
@ -12029,10 +12011,9 @@ SDValue DAGCombiner::visitSTORE(SDNode *N) {
|
|||
if (TLI.allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(), SVT,
|
||||
ST->getAddressSpace(), OrigAlign, &Fast) &&
|
||||
Fast) {
|
||||
return DAG.getStore(Chain, SDLoc(N), Value.getOperand(0),
|
||||
Ptr, ST->getPointerInfo(), ST->isVolatile(),
|
||||
ST->isNonTemporal(), OrigAlign,
|
||||
ST->getAAInfo());
|
||||
return DAG.getStore(Chain, SDLoc(N), Value.getOperand(0), Ptr,
|
||||
ST->getPointerInfo(), OrigAlign,
|
||||
ST->getMemOperand()->getFlags(), ST->getAAInfo());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12046,10 +12027,9 @@ SDValue DAGCombiner::visitSTORE(SDNode *N) {
|
|||
if (unsigned Align = DAG.InferPtrAlignment(Ptr)) {
|
||||
if (Align > ST->getAlignment()) {
|
||||
SDValue NewStore =
|
||||
DAG.getTruncStore(Chain, SDLoc(N), Value,
|
||||
Ptr, ST->getPointerInfo(), ST->getMemoryVT(),
|
||||
ST->isVolatile(), ST->isNonTemporal(), Align,
|
||||
ST->getAAInfo());
|
||||
DAG.getTruncStore(Chain, SDLoc(N), Value, Ptr, ST->getPointerInfo(),
|
||||
ST->getMemoryVT(), Align,
|
||||
ST->getMemOperand()->getFlags(), ST->getAAInfo());
|
||||
if (NewStore.getNode() != N)
|
||||
return CombineTo(ST, NewStore, true);
|
||||
}
|
||||
|
@ -12301,16 +12281,15 @@ SDValue DAGCombiner::ReplaceExtractVectorEltOfLoadWithNarrowedLoad(
|
|||
VecEltVT)
|
||||
? ISD::ZEXTLOAD
|
||||
: ISD::EXTLOAD;
|
||||
Load = DAG.getExtLoad(
|
||||
ExtType, SDLoc(EVE), ResultVT, OriginalLoad->getChain(), NewPtr, MPI,
|
||||
VecEltVT, OriginalLoad->isVolatile(), OriginalLoad->isNonTemporal(),
|
||||
OriginalLoad->isInvariant(), Align, OriginalLoad->getAAInfo());
|
||||
Load = DAG.getExtLoad(ExtType, SDLoc(EVE), ResultVT,
|
||||
OriginalLoad->getChain(), NewPtr, MPI, VecEltVT,
|
||||
Align, OriginalLoad->getMemOperand()->getFlags(),
|
||||
OriginalLoad->getAAInfo());
|
||||
Chain = Load.getValue(1);
|
||||
} else {
|
||||
Load = DAG.getLoad(
|
||||
VecEltVT, SDLoc(EVE), OriginalLoad->getChain(), NewPtr, MPI,
|
||||
OriginalLoad->isVolatile(), OriginalLoad->isNonTemporal(),
|
||||
OriginalLoad->isInvariant(), Align, OriginalLoad->getAAInfo());
|
||||
Load = DAG.getLoad(VecEltVT, SDLoc(EVE), OriginalLoad->getChain(), NewPtr,
|
||||
MPI, Align, OriginalLoad->getMemOperand()->getFlags(),
|
||||
OriginalLoad->getAAInfo());
|
||||
Chain = Load.getValue(1);
|
||||
if (ResultVT.bitsLT(VecEltVT))
|
||||
Load = DAG.getNode(ISD::TRUNCATE, SDLoc(EVE), ResultVT, Load);
|
||||
|
@ -14122,24 +14101,22 @@ bool DAGCombiner::SimplifySelectOps(SDNode *TheSelect, SDValue LHS,
|
|||
// It is safe to replace the two loads if they have different alignments,
|
||||
// but the new load must be the minimum (most restrictive) alignment of the
|
||||
// inputs.
|
||||
bool isInvariant = LLD->isInvariant() & RLD->isInvariant();
|
||||
unsigned Alignment = std::min(LLD->getAlignment(), RLD->getAlignment());
|
||||
MachineMemOperand::Flags MMOFlags = LLD->getMemOperand()->getFlags();
|
||||
if (!RLD->isInvariant())
|
||||
MMOFlags &= ~MachineMemOperand::MOInvariant;
|
||||
if (LLD->getExtensionType() == ISD::NON_EXTLOAD) {
|
||||
Load = DAG.getLoad(TheSelect->getValueType(0),
|
||||
SDLoc(TheSelect),
|
||||
// FIXME: Discards pointer and AA info.
|
||||
LLD->getChain(), Addr, MachinePointerInfo(),
|
||||
LLD->isVolatile(), LLD->isNonTemporal(),
|
||||
isInvariant, Alignment);
|
||||
// FIXME: Discards pointer and AA info.
|
||||
Load = DAG.getLoad(TheSelect->getValueType(0), SDLoc(TheSelect),
|
||||
LLD->getChain(), Addr, MachinePointerInfo(), Alignment,
|
||||
MMOFlags);
|
||||
} else {
|
||||
Load = DAG.getExtLoad(LLD->getExtensionType() == ISD::EXTLOAD ?
|
||||
RLD->getExtensionType() : LLD->getExtensionType(),
|
||||
SDLoc(TheSelect),
|
||||
TheSelect->getValueType(0),
|
||||
// FIXME: Discards pointer and AA info.
|
||||
LLD->getChain(), Addr, MachinePointerInfo(),
|
||||
LLD->getMemoryVT(), LLD->isVolatile(),
|
||||
LLD->isNonTemporal(), isInvariant, Alignment);
|
||||
// FIXME: Discards pointer and AA info.
|
||||
Load = DAG.getExtLoad(
|
||||
LLD->getExtensionType() == ISD::EXTLOAD ? RLD->getExtensionType()
|
||||
: LLD->getExtensionType(),
|
||||
SDLoc(TheSelect), TheSelect->getValueType(0), LLD->getChain(), Addr,
|
||||
MachinePointerInfo(), LLD->getMemoryVT(), Alignment, MMOFlags);
|
||||
}
|
||||
|
||||
// Users of the select now use the result of the load.
|
||||
|
@ -14247,7 +14224,7 @@ SDValue DAGCombiner::SimplifySelectCC(const SDLoc &DL, SDValue N0, SDValue N1,
|
|||
return DAG.getLoad(
|
||||
TV->getValueType(0), DL, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
|
||||
false, false, false, Alignment);
|
||||
Alignment);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -282,13 +282,12 @@ SelectionDAGLegalize::ExpandConstantFP(ConstantFPSDNode *CFP, bool UseCP) {
|
|||
SDValue Result = DAG.getExtLoad(
|
||||
ISD::EXTLOAD, dl, OrigVT, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), VT,
|
||||
false, false, false, Alignment);
|
||||
Alignment);
|
||||
return Result;
|
||||
}
|
||||
SDValue Result =
|
||||
DAG.getLoad(OrigVT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
|
||||
false, false, false, Alignment);
|
||||
SDValue Result = DAG.getLoad(
|
||||
OrigVT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), Alignment);
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
@ -299,10 +298,9 @@ SDValue SelectionDAGLegalize::ExpandConstant(ConstantSDNode *CP) {
|
|||
SDValue CPIdx = DAG.getConstantPool(CP->getConstantIntValue(),
|
||||
TLI.getPointerTy(DAG.getDataLayout()));
|
||||
unsigned Alignment = cast<ConstantPoolSDNode>(CPIdx)->getAlignment();
|
||||
SDValue Result =
|
||||
DAG.getLoad(VT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
|
||||
false, false, false, Alignment);
|
||||
SDValue Result = DAG.getLoad(
|
||||
VT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), Alignment);
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
@ -335,8 +333,7 @@ SDValue SelectionDAGLegalize::PerformInsertVectorEltInMemory(SDValue Vec,
|
|||
// Store the vector.
|
||||
SDValue Ch = DAG.getStore(
|
||||
DAG.getEntryNode(), dl, Tmp1, StackPtr,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), SPFI), false,
|
||||
false, 0);
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), SPFI));
|
||||
|
||||
// Truncate or zero extend offset to target pointer type.
|
||||
Tmp3 = DAG.getZExtOrTrunc(Tmp3, dl, PtrVT);
|
||||
|
@ -346,12 +343,10 @@ SDValue SelectionDAGLegalize::PerformInsertVectorEltInMemory(SDValue Vec,
|
|||
DAG.getConstant(EltSize, dl, IdxVT));
|
||||
SDValue StackPtr2 = DAG.getNode(ISD::ADD, dl, IdxVT, Tmp3, StackPtr);
|
||||
// Store the scalar value.
|
||||
Ch = DAG.getTruncStore(Ch, dl, Tmp2, StackPtr2, MachinePointerInfo(), EltVT,
|
||||
false, false, 0);
|
||||
Ch = DAG.getTruncStore(Ch, dl, Tmp2, StackPtr2, MachinePointerInfo(), EltVT);
|
||||
// Load the updated vector.
|
||||
return DAG.getLoad(VT, dl, Ch, StackPtr, MachinePointerInfo::getFixedStack(
|
||||
DAG.getMachineFunction(), SPFI),
|
||||
false, false, false, 0);
|
||||
DAG.getMachineFunction(), SPFI));
|
||||
}
|
||||
|
||||
SDValue SelectionDAGLegalize::ExpandINSERT_VECTOR_ELT(SDValue Vec, SDValue Val,
|
||||
|
@ -392,8 +387,7 @@ SDValue SelectionDAGLegalize::OptimizeFloatStore(StoreSDNode* ST) {
|
|||
SDValue Chain = ST->getChain();
|
||||
SDValue Ptr = ST->getBasePtr();
|
||||
unsigned Alignment = ST->getAlignment();
|
||||
bool isVolatile = ST->isVolatile();
|
||||
bool isNonTemporal = ST->isNonTemporal();
|
||||
MachineMemOperand::Flags MMOFlags = ST->getMemOperand()->getFlags();
|
||||
AAMDNodes AAInfo = ST->getAAInfo();
|
||||
SDLoc dl(ST);
|
||||
if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(ST->getValue())) {
|
||||
|
@ -402,8 +396,8 @@ SDValue SelectionDAGLegalize::OptimizeFloatStore(StoreSDNode* ST) {
|
|||
SDValue Con = DAG.getConstant(CFP->getValueAPF().
|
||||
bitcastToAPInt().zextOrTrunc(32),
|
||||
SDLoc(CFP), MVT::i32);
|
||||
return DAG.getStore(Chain, dl, Con, Ptr, ST->getPointerInfo(),
|
||||
isVolatile, isNonTemporal, Alignment, AAInfo);
|
||||
return DAG.getStore(Chain, dl, Con, Ptr, ST->getPointerInfo(), Alignment,
|
||||
MMOFlags, AAInfo);
|
||||
}
|
||||
|
||||
if (CFP->getValueType(0) == MVT::f64) {
|
||||
|
@ -412,7 +406,7 @@ SDValue SelectionDAGLegalize::OptimizeFloatStore(StoreSDNode* ST) {
|
|||
SDValue Con = DAG.getConstant(CFP->getValueAPF().bitcastToAPInt().
|
||||
zextOrTrunc(64), SDLoc(CFP), MVT::i64);
|
||||
return DAG.getStore(Chain, dl, Con, Ptr, ST->getPointerInfo(),
|
||||
isVolatile, isNonTemporal, Alignment, AAInfo);
|
||||
Alignment, MMOFlags, AAInfo);
|
||||
}
|
||||
|
||||
if (TLI.isTypeLegal(MVT::i32) && !ST->isVolatile()) {
|
||||
|
@ -425,14 +419,13 @@ SDValue SelectionDAGLegalize::OptimizeFloatStore(StoreSDNode* ST) {
|
|||
if (DAG.getDataLayout().isBigEndian())
|
||||
std::swap(Lo, Hi);
|
||||
|
||||
Lo = DAG.getStore(Chain, dl, Lo, Ptr, ST->getPointerInfo(), isVolatile,
|
||||
isNonTemporal, Alignment, AAInfo);
|
||||
Lo = DAG.getStore(Chain, dl, Lo, Ptr, ST->getPointerInfo(), Alignment,
|
||||
MMOFlags, AAInfo);
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
|
||||
DAG.getConstant(4, dl, Ptr.getValueType()));
|
||||
Hi = DAG.getStore(Chain, dl, Hi, Ptr,
|
||||
ST->getPointerInfo().getWithOffset(4),
|
||||
isVolatile, isNonTemporal, MinAlign(Alignment, 4U),
|
||||
AAInfo);
|
||||
MinAlign(Alignment, 4U), MMOFlags, AAInfo);
|
||||
|
||||
return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Lo, Hi);
|
||||
}
|
||||
|
@ -448,8 +441,7 @@ void SelectionDAGLegalize::LegalizeStoreOps(SDNode *Node) {
|
|||
SDLoc dl(Node);
|
||||
|
||||
unsigned Alignment = ST->getAlignment();
|
||||
bool isVolatile = ST->isVolatile();
|
||||
bool isNonTemporal = ST->isNonTemporal();
|
||||
MachineMemOperand::Flags MMOFlags = ST->getMemOperand()->getFlags();
|
||||
AAMDNodes AAInfo = ST->getAAInfo();
|
||||
|
||||
if (!ST->isTruncatingStore()) {
|
||||
|
@ -488,9 +480,8 @@ void SelectionDAGLegalize::LegalizeStoreOps(SDNode *Node) {
|
|||
"Can only promote stores to same size type");
|
||||
Value = DAG.getNode(ISD::BITCAST, dl, NVT, Value);
|
||||
SDValue Result =
|
||||
DAG.getStore(Chain, dl, Value, Ptr,
|
||||
ST->getPointerInfo(), isVolatile,
|
||||
isNonTemporal, Alignment, AAInfo);
|
||||
DAG.getStore(Chain, dl, Value, Ptr, ST->getPointerInfo(),
|
||||
Alignment, MMOFlags, AAInfo);
|
||||
ReplaceNode(SDValue(Node, 0), Result);
|
||||
break;
|
||||
}
|
||||
|
@ -512,8 +503,8 @@ void SelectionDAGLegalize::LegalizeStoreOps(SDNode *Node) {
|
|||
StVT.getStoreSizeInBits());
|
||||
Value = DAG.getZeroExtendInReg(Value, dl, StVT);
|
||||
SDValue Result =
|
||||
DAG.getTruncStore(Chain, dl, Value, Ptr, ST->getPointerInfo(),
|
||||
NVT, isVolatile, isNonTemporal, Alignment, AAInfo);
|
||||
DAG.getTruncStore(Chain, dl, Value, Ptr, ST->getPointerInfo(), NVT,
|
||||
Alignment, MMOFlags, AAInfo);
|
||||
ReplaceNode(SDValue(Node, 0), Result);
|
||||
} else if (StWidth & (StWidth - 1)) {
|
||||
// If not storing a power-of-2 number of bits, expand as two stores.
|
||||
|
@ -533,9 +524,7 @@ void SelectionDAGLegalize::LegalizeStoreOps(SDNode *Node) {
|
|||
// TRUNCSTORE:i24 X -> TRUNCSTORE:i16 X, TRUNCSTORE@+2:i8 (srl X, 16)
|
||||
// Store the bottom RoundWidth bits.
|
||||
Lo = DAG.getTruncStore(Chain, dl, Value, Ptr, ST->getPointerInfo(),
|
||||
RoundVT,
|
||||
isVolatile, isNonTemporal, Alignment,
|
||||
AAInfo);
|
||||
RoundVT, Alignment, MMOFlags, AAInfo);
|
||||
|
||||
// Store the remaining ExtraWidth bits.
|
||||
IncrementSize = RoundWidth / 8;
|
||||
|
@ -546,10 +535,10 @@ void SelectionDAGLegalize::LegalizeStoreOps(SDNode *Node) {
|
|||
ISD::SRL, dl, Value.getValueType(), Value,
|
||||
DAG.getConstant(RoundWidth, dl,
|
||||
TLI.getShiftAmountTy(Value.getValueType(), DL)));
|
||||
Hi = DAG.getTruncStore(Chain, dl, Hi, Ptr,
|
||||
ST->getPointerInfo().getWithOffset(IncrementSize),
|
||||
ExtraVT, isVolatile, isNonTemporal,
|
||||
MinAlign(Alignment, IncrementSize), AAInfo);
|
||||
Hi = DAG.getTruncStore(
|
||||
Chain, dl, Hi, Ptr,
|
||||
ST->getPointerInfo().getWithOffset(IncrementSize), ExtraVT,
|
||||
MinAlign(Alignment, IncrementSize), MMOFlags, AAInfo);
|
||||
} else {
|
||||
// Big endian - avoid unaligned stores.
|
||||
// TRUNCSTORE:i24 X -> TRUNCSTORE:i16 (srl X, 8), TRUNCSTORE@+2:i8 X
|
||||
|
@ -559,18 +548,17 @@ void SelectionDAGLegalize::LegalizeStoreOps(SDNode *Node) {
|
|||
DAG.getConstant(ExtraWidth, dl,
|
||||
TLI.getShiftAmountTy(Value.getValueType(), DL)));
|
||||
Hi = DAG.getTruncStore(Chain, dl, Hi, Ptr, ST->getPointerInfo(),
|
||||
RoundVT, isVolatile, isNonTemporal, Alignment,
|
||||
AAInfo);
|
||||
RoundVT, Alignment, MMOFlags, AAInfo);
|
||||
|
||||
// Store the remaining ExtraWidth bits.
|
||||
IncrementSize = RoundWidth / 8;
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
|
||||
DAG.getConstant(IncrementSize, dl,
|
||||
Ptr.getValueType()));
|
||||
Lo = DAG.getTruncStore(Chain, dl, Value, Ptr,
|
||||
ST->getPointerInfo().getWithOffset(IncrementSize),
|
||||
ExtraVT, isVolatile, isNonTemporal,
|
||||
MinAlign(Alignment, IncrementSize), AAInfo);
|
||||
Lo = DAG.getTruncStore(
|
||||
Chain, dl, Value, Ptr,
|
||||
ST->getPointerInfo().getWithOffset(IncrementSize), ExtraVT,
|
||||
MinAlign(Alignment, IncrementSize), MMOFlags, AAInfo);
|
||||
}
|
||||
|
||||
// The order of the stores doesn't matter.
|
||||
|
@ -606,8 +594,8 @@ void SelectionDAGLegalize::LegalizeStoreOps(SDNode *Node) {
|
|||
"Do not know how to expand this store!");
|
||||
Value = DAG.getNode(ISD::TRUNCATE, dl, StVT, Value);
|
||||
SDValue Result =
|
||||
DAG.getStore(Chain, dl, Value, Ptr, ST->getPointerInfo(),
|
||||
isVolatile, isNonTemporal, Alignment, AAInfo);
|
||||
DAG.getStore(Chain, dl, Value, Ptr, ST->getPointerInfo(),
|
||||
Alignment, MMOFlags, AAInfo);
|
||||
ReplaceNode(SDValue(Node, 0), Result);
|
||||
break;
|
||||
}
|
||||
|
@ -676,9 +664,7 @@ void SelectionDAGLegalize::LegalizeLoadOps(SDNode *Node) {
|
|||
EVT SrcVT = LD->getMemoryVT();
|
||||
unsigned SrcWidth = SrcVT.getSizeInBits();
|
||||
unsigned Alignment = LD->getAlignment();
|
||||
bool isVolatile = LD->isVolatile();
|
||||
bool isNonTemporal = LD->isNonTemporal();
|
||||
bool isInvariant = LD->isInvariant();
|
||||
MachineMemOperand::Flags MMOFlags = LD->getMemOperand()->getFlags();
|
||||
AAMDNodes AAInfo = LD->getAAInfo();
|
||||
|
||||
if (SrcWidth != SrcVT.getStoreSizeInBits() &&
|
||||
|
@ -705,10 +691,8 @@ void SelectionDAGLegalize::LegalizeLoadOps(SDNode *Node) {
|
|||
ExtType == ISD::ZEXTLOAD ? ISD::ZEXTLOAD : ISD::EXTLOAD;
|
||||
|
||||
SDValue Result =
|
||||
DAG.getExtLoad(NewExtType, dl, Node->getValueType(0),
|
||||
Chain, Ptr, LD->getPointerInfo(),
|
||||
NVT, isVolatile, isNonTemporal, isInvariant, Alignment,
|
||||
AAInfo);
|
||||
DAG.getExtLoad(NewExtType, dl, Node->getValueType(0), Chain, Ptr,
|
||||
LD->getPointerInfo(), NVT, Alignment, MMOFlags, AAInfo);
|
||||
|
||||
Ch = Result.getValue(1); // The chain.
|
||||
|
||||
|
@ -743,10 +727,9 @@ void SelectionDAGLegalize::LegalizeLoadOps(SDNode *Node) {
|
|||
if (DL.isLittleEndian()) {
|
||||
// EXTLOAD:i24 -> ZEXTLOAD:i16 | (shl EXTLOAD@+2:i8, 16)
|
||||
// Load the bottom RoundWidth bits.
|
||||
Lo = DAG.getExtLoad(ISD::ZEXTLOAD, dl, Node->getValueType(0),
|
||||
Chain, Ptr,
|
||||
LD->getPointerInfo(), RoundVT, isVolatile,
|
||||
isNonTemporal, isInvariant, Alignment, AAInfo);
|
||||
Lo = DAG.getExtLoad(ISD::ZEXTLOAD, dl, Node->getValueType(0), Chain, Ptr,
|
||||
LD->getPointerInfo(), RoundVT, Alignment, MMOFlags,
|
||||
AAInfo);
|
||||
|
||||
// Load the remaining ExtraWidth bits.
|
||||
IncrementSize = RoundWidth / 8;
|
||||
|
@ -755,8 +738,8 @@ void SelectionDAGLegalize::LegalizeLoadOps(SDNode *Node) {
|
|||
Ptr.getValueType()));
|
||||
Hi = DAG.getExtLoad(ExtType, dl, Node->getValueType(0), Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(IncrementSize),
|
||||
ExtraVT, isVolatile, isNonTemporal, isInvariant,
|
||||
MinAlign(Alignment, IncrementSize), AAInfo);
|
||||
ExtraVT, MinAlign(Alignment, IncrementSize), MMOFlags,
|
||||
AAInfo);
|
||||
|
||||
// Build a factor node to remember that this load is independent of
|
||||
// the other one.
|
||||
|
@ -776,19 +759,18 @@ void SelectionDAGLegalize::LegalizeLoadOps(SDNode *Node) {
|
|||
// EXTLOAD:i24 -> (shl EXTLOAD:i16, 8) | ZEXTLOAD@+2:i8
|
||||
// Load the top RoundWidth bits.
|
||||
Hi = DAG.getExtLoad(ExtType, dl, Node->getValueType(0), Chain, Ptr,
|
||||
LD->getPointerInfo(), RoundVT, isVolatile,
|
||||
isNonTemporal, isInvariant, Alignment, AAInfo);
|
||||
LD->getPointerInfo(), RoundVT, Alignment, MMOFlags,
|
||||
AAInfo);
|
||||
|
||||
// Load the remaining ExtraWidth bits.
|
||||
IncrementSize = RoundWidth / 8;
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
|
||||
DAG.getConstant(IncrementSize, dl,
|
||||
Ptr.getValueType()));
|
||||
Lo = DAG.getExtLoad(ISD::ZEXTLOAD,
|
||||
dl, Node->getValueType(0), Chain, Ptr,
|
||||
Lo = DAG.getExtLoad(ISD::ZEXTLOAD, dl, Node->getValueType(0), Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(IncrementSize),
|
||||
ExtraVT, isVolatile, isNonTemporal, isInvariant,
|
||||
MinAlign(Alignment, IncrementSize), AAInfo);
|
||||
ExtraVT, MinAlign(Alignment, IncrementSize), MMOFlags,
|
||||
AAInfo);
|
||||
|
||||
// Build a factor node to remember that this load is independent of
|
||||
// the other one.
|
||||
|
@ -1217,7 +1199,7 @@ SDValue SelectionDAGLegalize::ExpandExtractFromVectorThroughStack(SDValue Op) {
|
|||
// Store the value to a temporary stack slot, then LOAD the returned part.
|
||||
StackPtr = DAG.CreateStackTemporary(Vec.getValueType());
|
||||
Ch = DAG.getStore(DAG.getEntryNode(), dl, Vec, StackPtr,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo());
|
||||
}
|
||||
|
||||
// Add the offset to the index.
|
||||
|
@ -1232,12 +1214,12 @@ SDValue SelectionDAGLegalize::ExpandExtractFromVectorThroughStack(SDValue Op) {
|
|||
SDValue NewLoad;
|
||||
|
||||
if (Op.getValueType().isVector())
|
||||
NewLoad = DAG.getLoad(Op.getValueType(), dl, Ch, StackPtr,
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
NewLoad =
|
||||
DAG.getLoad(Op.getValueType(), dl, Ch, StackPtr, MachinePointerInfo());
|
||||
else
|
||||
NewLoad = DAG.getExtLoad(
|
||||
ISD::EXTLOAD, dl, Op.getValueType(), Ch, StackPtr, MachinePointerInfo(),
|
||||
Vec.getValueType().getVectorElementType(), false, false, false, 0);
|
||||
NewLoad = DAG.getExtLoad(ISD::EXTLOAD, dl, Op.getValueType(), Ch, StackPtr,
|
||||
MachinePointerInfo(),
|
||||
Vec.getValueType().getVectorElementType());
|
||||
|
||||
// Replace the chain going out of the store, by the one out of the load.
|
||||
DAG.ReplaceAllUsesOfValueWith(Ch, SDValue(NewLoad.getNode(), 1));
|
||||
|
@ -1268,8 +1250,7 @@ SDValue SelectionDAGLegalize::ExpandInsertToVectorThroughStack(SDValue Op) {
|
|||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI);
|
||||
|
||||
// First store the whole vector.
|
||||
SDValue Ch = DAG.getStore(DAG.getEntryNode(), dl, Vec, StackPtr, PtrInfo,
|
||||
false, false, 0);
|
||||
SDValue Ch = DAG.getStore(DAG.getEntryNode(), dl, Vec, StackPtr, PtrInfo);
|
||||
|
||||
// Then store the inserted part.
|
||||
|
||||
|
@ -1285,12 +1266,10 @@ SDValue SelectionDAGLegalize::ExpandInsertToVectorThroughStack(SDValue Op) {
|
|||
StackPtr);
|
||||
|
||||
// Store the subvector.
|
||||
Ch = DAG.getStore(Ch, dl, Part, SubStackPtr,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
Ch = DAG.getStore(Ch, dl, Part, SubStackPtr, MachinePointerInfo());
|
||||
|
||||
// Finally, load the updated vector.
|
||||
return DAG.getLoad(Op.getValueType(), dl, Ch, StackPtr, PtrInfo,
|
||||
false, false, false, 0);
|
||||
return DAG.getLoad(Op.getValueType(), dl, Ch, StackPtr, PtrInfo);
|
||||
}
|
||||
|
||||
SDValue SelectionDAGLegalize::ExpandVectorBuildThroughStack(SDNode* Node) {
|
||||
|
@ -1324,13 +1303,10 @@ SDValue SelectionDAGLegalize::ExpandVectorBuildThroughStack(SDNode* Node) {
|
|||
if (EltVT.bitsLT(Node->getOperand(i).getValueType().getScalarType())) {
|
||||
Stores.push_back(DAG.getTruncStore(DAG.getEntryNode(), dl,
|
||||
Node->getOperand(i), Idx,
|
||||
PtrInfo.getWithOffset(Offset),
|
||||
EltVT, false, false, 0));
|
||||
PtrInfo.getWithOffset(Offset), EltVT));
|
||||
} else
|
||||
Stores.push_back(DAG.getStore(DAG.getEntryNode(), dl,
|
||||
Node->getOperand(i), Idx,
|
||||
PtrInfo.getWithOffset(Offset),
|
||||
false, false, 0));
|
||||
Stores.push_back(DAG.getStore(DAG.getEntryNode(), dl, Node->getOperand(i),
|
||||
Idx, PtrInfo.getWithOffset(Offset)));
|
||||
}
|
||||
|
||||
SDValue StoreChain;
|
||||
|
@ -1340,8 +1316,7 @@ 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, false, 0);
|
||||
return DAG.getLoad(VT, dl, StoreChain, FIPtr, PtrInfo);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
@ -1389,7 +1364,7 @@ void SelectionDAGLegalize::getSignAsIntValue(FloatSignAsInt &State,
|
|||
MachineFunction &MF = DAG.getMachineFunction();
|
||||
State.FloatPointerInfo = MachinePointerInfo::getFixedStack(MF, FI);
|
||||
State.Chain = DAG.getStore(DAG.getEntryNode(), DL, Value, State.FloatPtr,
|
||||
State.FloatPointerInfo, false, false, 0);
|
||||
State.FloatPointerInfo);
|
||||
|
||||
SDValue IntPtr;
|
||||
if (DataLayout.isBigEndian()) {
|
||||
|
@ -1407,9 +1382,8 @@ void SelectionDAGLegalize::getSignAsIntValue(FloatSignAsInt &State,
|
|||
}
|
||||
|
||||
State.IntPtr = IntPtr;
|
||||
State.IntValue = DAG.getExtLoad(ISD::EXTLOAD, DL, LoadTy, State.Chain,
|
||||
IntPtr, State.IntPointerInfo, MVT::i8,
|
||||
false, false, false, 0);
|
||||
State.IntValue = DAG.getExtLoad(ISD::EXTLOAD, DL, LoadTy, State.Chain, IntPtr,
|
||||
State.IntPointerInfo, MVT::i8);
|
||||
State.SignMask = APInt::getOneBitSet(LoadTy.getSizeInBits(), 7);
|
||||
State.SignBit = 7;
|
||||
}
|
||||
|
@ -1424,10 +1398,9 @@ SDValue SelectionDAGLegalize::modifySignAsInt(const FloatSignAsInt &State,
|
|||
|
||||
// Override the part containing the sign bit in the value stored on the stack.
|
||||
SDValue Chain = DAG.getTruncStore(State.Chain, DL, NewIntValue, State.IntPtr,
|
||||
State.IntPointerInfo, MVT::i8, false, false,
|
||||
0);
|
||||
State.IntPointerInfo, MVT::i8);
|
||||
return DAG.getLoad(State.FloatVT, DL, Chain, State.FloatPtr,
|
||||
State.FloatPointerInfo, false, false, false, 0);
|
||||
State.FloatPointerInfo);
|
||||
}
|
||||
|
||||
SDValue SelectionDAGLegalize::ExpandFCOPYSIGN(SDNode *Node) const {
|
||||
|
@ -1687,22 +1660,21 @@ SDValue SelectionDAGLegalize::EmitStackConvert(SDValue SrcOp, EVT SlotVT,
|
|||
SDValue Store;
|
||||
|
||||
if (SrcSize > SlotSize)
|
||||
Store = DAG.getTruncStore(DAG.getEntryNode(), dl, SrcOp, FIPtr,
|
||||
PtrInfo, SlotVT, false, false, SrcAlign);
|
||||
Store = DAG.getTruncStore(DAG.getEntryNode(), dl, SrcOp, FIPtr, PtrInfo,
|
||||
SlotVT, SrcAlign);
|
||||
else {
|
||||
assert(SrcSize == SlotSize && "Invalid store");
|
||||
Store = DAG.getStore(DAG.getEntryNode(), dl, SrcOp, FIPtr,
|
||||
PtrInfo, false, false, SrcAlign);
|
||||
Store =
|
||||
DAG.getStore(DAG.getEntryNode(), dl, SrcOp, FIPtr, PtrInfo, SrcAlign);
|
||||
}
|
||||
|
||||
// Result is a load from the stack slot.
|
||||
if (SlotSize == DestSize)
|
||||
return DAG.getLoad(DestVT, dl, Store, FIPtr, PtrInfo,
|
||||
false, false, false, DestAlign);
|
||||
return DAG.getLoad(DestVT, dl, Store, FIPtr, PtrInfo, DestAlign);
|
||||
|
||||
assert(SlotSize < DestSize && "Unknown extension!");
|
||||
return DAG.getExtLoad(ISD::EXTLOAD, dl, DestVT, Store, FIPtr,
|
||||
PtrInfo, SlotVT, false, false, false, DestAlign);
|
||||
return DAG.getExtLoad(ISD::EXTLOAD, dl, DestVT, Store, FIPtr, PtrInfo, SlotVT,
|
||||
DestAlign);
|
||||
}
|
||||
|
||||
SDValue SelectionDAGLegalize::ExpandSCALAR_TO_VECTOR(SDNode *Node) {
|
||||
|
@ -1717,11 +1689,10 @@ SDValue SelectionDAGLegalize::ExpandSCALAR_TO_VECTOR(SDNode *Node) {
|
|||
SDValue Ch = DAG.getTruncStore(
|
||||
DAG.getEntryNode(), dl, Node->getOperand(0), StackPtr,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), SPFI),
|
||||
Node->getValueType(0).getVectorElementType(), false, false, 0);
|
||||
Node->getValueType(0).getVectorElementType());
|
||||
return DAG.getLoad(
|
||||
Node->getValueType(0), dl, Ch, StackPtr,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), SPFI), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), SPFI));
|
||||
}
|
||||
|
||||
static bool
|
||||
|
@ -1889,8 +1860,8 @@ SDValue SelectionDAGLegalize::ExpandBUILD_VECTOR(SDNode *Node) {
|
|||
unsigned Alignment = cast<ConstantPoolSDNode>(CPIdx)->getAlignment();
|
||||
return DAG.getLoad(
|
||||
VT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, Alignment);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
|
||||
Alignment);
|
||||
}
|
||||
|
||||
SmallSet<SDValue, 16> DefinedValues;
|
||||
|
@ -2142,8 +2113,8 @@ SelectionDAGLegalize::ExpandDivRemLibCall(SDNode *Node,
|
|||
std::pair<SDValue, SDValue> CallInfo = TLI.LowerCallTo(CLI);
|
||||
|
||||
// Remainder is loaded back from the stack frame.
|
||||
SDValue Rem = DAG.getLoad(RetVT, dl, CallInfo.second, FIPtr,
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
SDValue Rem =
|
||||
DAG.getLoad(RetVT, dl, CallInfo.second, FIPtr, MachinePointerInfo());
|
||||
Results.push_back(CallInfo.first);
|
||||
Results.push_back(Rem);
|
||||
}
|
||||
|
@ -2252,10 +2223,10 @@ SelectionDAGLegalize::ExpandSinCosLibCall(SDNode *Node,
|
|||
|
||||
std::pair<SDValue, SDValue> CallInfo = TLI.LowerCallTo(CLI);
|
||||
|
||||
Results.push_back(DAG.getLoad(RetVT, dl, CallInfo.second, SinPtr,
|
||||
MachinePointerInfo(), false, false, false, 0));
|
||||
Results.push_back(DAG.getLoad(RetVT, dl, CallInfo.second, CosPtr,
|
||||
MachinePointerInfo(), false, false, false, 0));
|
||||
Results.push_back(
|
||||
DAG.getLoad(RetVT, dl, CallInfo.second, SinPtr, MachinePointerInfo()));
|
||||
Results.push_back(
|
||||
DAG.getLoad(RetVT, dl, CallInfo.second, CosPtr, MachinePointerInfo()));
|
||||
}
|
||||
|
||||
/// This function is responsible for legalizing a
|
||||
|
@ -2293,18 +2264,16 @@ SDValue SelectionDAGLegalize::ExpandLegalINT_TO_FP(bool isSigned, SDValue Op0,
|
|||
Op0Mapped = Op0;
|
||||
}
|
||||
// store the lo of the constructed double - based on integer input
|
||||
SDValue Store1 = DAG.getStore(DAG.getEntryNode(), dl,
|
||||
Op0Mapped, Lo, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
SDValue Store1 = DAG.getStore(DAG.getEntryNode(), dl, Op0Mapped, Lo,
|
||||
MachinePointerInfo());
|
||||
// initial hi portion of constructed double
|
||||
SDValue InitialHi = DAG.getConstant(0x43300000u, dl, MVT::i32);
|
||||
// store the hi of the constructed double - biased exponent
|
||||
SDValue Store2 = DAG.getStore(Store1, dl, InitialHi, Hi,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
SDValue Store2 =
|
||||
DAG.getStore(Store1, dl, InitialHi, Hi, MachinePointerInfo());
|
||||
// load the constructed double
|
||||
SDValue Load = DAG.getLoad(MVT::f64, dl, Store2, StackSlot,
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
SDValue Load =
|
||||
DAG.getLoad(MVT::f64, dl, Store2, StackSlot, MachinePointerInfo());
|
||||
// FP constant to bias correct the final result
|
||||
SDValue Bias = DAG.getConstantFP(isSigned ?
|
||||
BitsToDouble(0x4330000080000000ULL) :
|
||||
|
@ -2452,13 +2421,13 @@ SDValue SelectionDAGLegalize::ExpandLegalINT_TO_FP(bool isSigned, SDValue Op0,
|
|||
if (DestVT == MVT::f32)
|
||||
FudgeInReg = DAG.getLoad(
|
||||
MVT::f32, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, Alignment);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
|
||||
Alignment);
|
||||
else {
|
||||
SDValue Load = DAG.getExtLoad(
|
||||
ISD::EXTLOAD, dl, DestVT, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), MVT::f32,
|
||||
false, false, false, Alignment);
|
||||
Alignment);
|
||||
HandleSDNode Handle(Load);
|
||||
LegalizeOp(Load.getNode());
|
||||
FudgeInReg = Handle.getValue();
|
||||
|
@ -3505,8 +3474,7 @@ bool SelectionDAGLegalize::ExpandNode(SDNode *Node) {
|
|||
EVT MemVT = EVT::getIntegerVT(*DAG.getContext(), EntrySize * 8);
|
||||
SDValue LD = DAG.getExtLoad(
|
||||
ISD::SEXTLOAD, dl, PTy, Chain, Addr,
|
||||
MachinePointerInfo::getJumpTable(DAG.getMachineFunction()), MemVT,
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getJumpTable(DAG.getMachineFunction()), MemVT);
|
||||
Addr = LD;
|
||||
if (TM.isPositionIndependent()) {
|
||||
// For PIC, the sequence is:
|
||||
|
|
|
@ -631,12 +631,13 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_LOAD(SDNode *N, unsigned ResNo) {
|
|||
EVT NVT = TLI.getTypeToTransformTo(*DAG.getContext(), VT);
|
||||
SDLoc dl(N);
|
||||
|
||||
auto MMOFlags =
|
||||
L->getMemOperand()->getFlags() & ~MachineMemOperand::MOInvariant;
|
||||
SDValue NewL;
|
||||
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(), false, L->getAlignment(),
|
||||
NewL = DAG.getLoad(L->getAddressingMode(), L->getExtensionType(), NVT, dl,
|
||||
L->getChain(), L->getBasePtr(), L->getOffset(),
|
||||
L->getPointerInfo(), NVT, L->getAlignment(), MMOFlags,
|
||||
L->getAAInfo());
|
||||
// Legalized the chain result - switch anything that used the old chain to
|
||||
// use the new one.
|
||||
|
@ -646,12 +647,10 @@ SDValue DAGTypeLegalizer::SoftenFloatRes_LOAD(SDNode *N, unsigned ResNo) {
|
|||
}
|
||||
|
||||
// Do a non-extending load followed by FP_EXTEND.
|
||||
NewL = DAG.getLoad(L->getAddressingMode(), ISD::NON_EXTLOAD,
|
||||
L->getMemoryVT(), dl, L->getChain(),
|
||||
L->getBasePtr(), L->getOffset(), L->getPointerInfo(),
|
||||
L->getMemoryVT(), L->isVolatile(),
|
||||
L->isNonTemporal(), false, L->getAlignment(),
|
||||
L->getAAInfo());
|
||||
NewL = DAG.getLoad(L->getAddressingMode(), ISD::NON_EXTLOAD, L->getMemoryVT(),
|
||||
dl, L->getChain(), L->getBasePtr(), L->getOffset(),
|
||||
L->getPointerInfo(), L->getMemoryVT(), L->getAlignment(),
|
||||
MMOFlags, L->getAAInfo());
|
||||
// Legalized the chain result - switch anything that used the old chain to
|
||||
// use the new one.
|
||||
ReplaceValueWith(SDValue(N, 1), NewL.getValue(1));
|
||||
|
@ -2082,13 +2081,14 @@ SDValue DAGTypeLegalizer::PromoteFloatRes_LOAD(SDNode *N) {
|
|||
LoadSDNode *L = cast<LoadSDNode>(N);
|
||||
EVT VT = N->getValueType(0);
|
||||
|
||||
// Load the value as an integer value with the same number of bits
|
||||
// Load the value as an integer value with the same number of bits.
|
||||
EVT IVT = EVT::getIntegerVT(*DAG.getContext(), VT.getSizeInBits());
|
||||
SDValue newL = DAG.getLoad(L->getAddressingMode(), L->getExtensionType(),
|
||||
IVT, SDLoc(N), L->getChain(), L->getBasePtr(),
|
||||
L->getOffset(), L->getPointerInfo(), IVT, L->isVolatile(),
|
||||
L->isNonTemporal(), false, L->getAlignment(),
|
||||
L->getAAInfo());
|
||||
auto MMOFlags =
|
||||
L->getMemOperand()->getFlags() & ~MachineMemOperand::MOInvariant;
|
||||
SDValue newL = DAG.getLoad(L->getAddressingMode(), L->getExtensionType(), IVT,
|
||||
SDLoc(N), L->getChain(), L->getBasePtr(),
|
||||
L->getOffset(), L->getPointerInfo(), IVT,
|
||||
L->getAlignment(), MMOFlags, L->getAAInfo());
|
||||
// Legalize the chain result by replacing uses of the old value chain with the
|
||||
// new one
|
||||
ReplaceValueWith(SDValue(N, 1), newL.getValue(1));
|
||||
|
|
|
@ -2047,9 +2047,7 @@ void DAGTypeLegalizer::ExpandIntRes_LOAD(LoadSDNode *N,
|
|||
SDValue Ptr = N->getBasePtr();
|
||||
ISD::LoadExtType ExtType = N->getExtensionType();
|
||||
unsigned Alignment = N->getAlignment();
|
||||
bool isVolatile = N->isVolatile();
|
||||
bool isNonTemporal = N->isNonTemporal();
|
||||
bool isInvariant = N->isInvariant();
|
||||
MachineMemOperand::Flags MMOFlags = N->getMemOperand()->getFlags();
|
||||
AAMDNodes AAInfo = N->getAAInfo();
|
||||
SDLoc dl(N);
|
||||
|
||||
|
@ -2058,9 +2056,8 @@ void DAGTypeLegalizer::ExpandIntRes_LOAD(LoadSDNode *N,
|
|||
if (N->getMemoryVT().bitsLE(NVT)) {
|
||||
EVT MemVT = N->getMemoryVT();
|
||||
|
||||
Lo = DAG.getExtLoad(ExtType, dl, NVT, Ch, Ptr, N->getPointerInfo(),
|
||||
MemVT, isVolatile, isNonTemporal, isInvariant,
|
||||
Alignment, AAInfo);
|
||||
Lo = DAG.getExtLoad(ExtType, dl, NVT, Ch, Ptr, N->getPointerInfo(), MemVT,
|
||||
Alignment, MMOFlags, AAInfo);
|
||||
|
||||
// Remember the chain.
|
||||
Ch = Lo.getValue(1);
|
||||
|
@ -2082,8 +2079,7 @@ void DAGTypeLegalizer::ExpandIntRes_LOAD(LoadSDNode *N,
|
|||
}
|
||||
} else if (DAG.getDataLayout().isLittleEndian()) {
|
||||
// Little-endian - low bits are at low addresses.
|
||||
Lo = DAG.getLoad(NVT, dl, Ch, Ptr, N->getPointerInfo(),
|
||||
isVolatile, isNonTemporal, isInvariant, Alignment,
|
||||
Lo = DAG.getLoad(NVT, dl, Ch, Ptr, N->getPointerInfo(), Alignment, MMOFlags,
|
||||
AAInfo);
|
||||
|
||||
unsigned ExcessBits =
|
||||
|
@ -2096,8 +2092,7 @@ void DAGTypeLegalizer::ExpandIntRes_LOAD(LoadSDNode *N,
|
|||
DAG.getConstant(IncrementSize, dl, Ptr.getValueType()));
|
||||
Hi = DAG.getExtLoad(ExtType, dl, NVT, Ch, Ptr,
|
||||
N->getPointerInfo().getWithOffset(IncrementSize), NEVT,
|
||||
isVolatile, isNonTemporal, isInvariant,
|
||||
MinAlign(Alignment, IncrementSize), AAInfo);
|
||||
MinAlign(Alignment, IncrementSize), MMOFlags, AAInfo);
|
||||
|
||||
// Build a factor node to remember that this load is independent of the
|
||||
// other one.
|
||||
|
@ -2115,8 +2110,7 @@ void DAGTypeLegalizer::ExpandIntRes_LOAD(LoadSDNode *N,
|
|||
Hi = DAG.getExtLoad(ExtType, dl, NVT, Ch, Ptr, N->getPointerInfo(),
|
||||
EVT::getIntegerVT(*DAG.getContext(),
|
||||
MemVT.getSizeInBits() - ExcessBits),
|
||||
isVolatile, isNonTemporal, isInvariant, Alignment,
|
||||
AAInfo);
|
||||
Alignment, MMOFlags, AAInfo);
|
||||
|
||||
// Increment the pointer to the other half.
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
|
||||
|
@ -2125,8 +2119,7 @@ void DAGTypeLegalizer::ExpandIntRes_LOAD(LoadSDNode *N,
|
|||
Lo = DAG.getExtLoad(ISD::ZEXTLOAD, dl, NVT, Ch, Ptr,
|
||||
N->getPointerInfo().getWithOffset(IncrementSize),
|
||||
EVT::getIntegerVT(*DAG.getContext(), ExcessBits),
|
||||
isVolatile, isNonTemporal, isInvariant,
|
||||
MinAlign(Alignment, IncrementSize), AAInfo);
|
||||
MinAlign(Alignment, IncrementSize), MMOFlags, AAInfo);
|
||||
|
||||
// Build a factor node to remember that this load is independent of the
|
||||
// other one.
|
||||
|
@ -2578,9 +2571,9 @@ void DAGTypeLegalizer::ExpandIntRes_XMULO(SDNode *N,
|
|||
|
||||
SDValue Temp = DAG.CreateStackTemporary(PtrVT);
|
||||
// Temporary for the overflow value, default it to zero.
|
||||
SDValue Chain = DAG.getStore(DAG.getEntryNode(), dl,
|
||||
DAG.getConstant(0, dl, PtrVT), Temp,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Chain =
|
||||
DAG.getStore(DAG.getEntryNode(), dl, DAG.getConstant(0, dl, PtrVT), Temp,
|
||||
MachinePointerInfo());
|
||||
|
||||
TargetLowering::ArgListTy Args;
|
||||
TargetLowering::ArgListEntry Entry;
|
||||
|
@ -2611,8 +2604,8 @@ void DAGTypeLegalizer::ExpandIntRes_XMULO(SDNode *N,
|
|||
std::pair<SDValue, SDValue> CallInfo = TLI.LowerCallTo(CLI);
|
||||
|
||||
SplitInteger(CallInfo.first, Lo, Hi);
|
||||
SDValue Temp2 = DAG.getLoad(PtrVT, dl, CallInfo.second, Temp,
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
SDValue Temp2 =
|
||||
DAG.getLoad(PtrVT, dl, CallInfo.second, Temp, MachinePointerInfo());
|
||||
SDValue Ofl = DAG.getSetCC(dl, N->getValueType(1), Temp2,
|
||||
DAG.getConstant(0, dl, PtrVT),
|
||||
ISD::SETNE);
|
||||
|
@ -3039,8 +3032,7 @@ SDValue DAGTypeLegalizer::ExpandIntOp_STORE(StoreSDNode *N, unsigned OpNo) {
|
|||
SDValue Ch = N->getChain();
|
||||
SDValue Ptr = N->getBasePtr();
|
||||
unsigned Alignment = N->getAlignment();
|
||||
bool isVolatile = N->isVolatile();
|
||||
bool isNonTemporal = N->isNonTemporal();
|
||||
MachineMemOperand::Flags MMOFlags = N->getMemOperand()->getFlags();
|
||||
AAMDNodes AAInfo = N->getAAInfo();
|
||||
SDLoc dl(N);
|
||||
SDValue Lo, Hi;
|
||||
|
@ -3050,16 +3042,15 @@ SDValue DAGTypeLegalizer::ExpandIntOp_STORE(StoreSDNode *N, unsigned OpNo) {
|
|||
if (N->getMemoryVT().bitsLE(NVT)) {
|
||||
GetExpandedInteger(N->getValue(), Lo, Hi);
|
||||
return DAG.getTruncStore(Ch, dl, Lo, Ptr, N->getPointerInfo(),
|
||||
N->getMemoryVT(), isVolatile, isNonTemporal,
|
||||
Alignment, AAInfo);
|
||||
N->getMemoryVT(), Alignment, MMOFlags, AAInfo);
|
||||
}
|
||||
|
||||
if (DAG.getDataLayout().isLittleEndian()) {
|
||||
// Little-endian - low bits are at low addresses.
|
||||
GetExpandedInteger(N->getValue(), Lo, Hi);
|
||||
|
||||
Lo = DAG.getStore(Ch, dl, Lo, Ptr, N->getPointerInfo(),
|
||||
isVolatile, isNonTemporal, Alignment, AAInfo);
|
||||
Lo = DAG.getStore(Ch, dl, Lo, Ptr, N->getPointerInfo(), Alignment, MMOFlags,
|
||||
AAInfo);
|
||||
|
||||
unsigned ExcessBits =
|
||||
N->getMemoryVT().getSizeInBits() - NVT.getSizeInBits();
|
||||
|
@ -3069,10 +3060,9 @@ SDValue DAGTypeLegalizer::ExpandIntOp_STORE(StoreSDNode *N, unsigned OpNo) {
|
|||
unsigned IncrementSize = NVT.getSizeInBits()/8;
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
|
||||
DAG.getConstant(IncrementSize, dl, Ptr.getValueType()));
|
||||
Hi = DAG.getTruncStore(Ch, dl, Hi, Ptr,
|
||||
N->getPointerInfo().getWithOffset(IncrementSize),
|
||||
NEVT, isVolatile, isNonTemporal,
|
||||
MinAlign(Alignment, IncrementSize), AAInfo);
|
||||
Hi = DAG.getTruncStore(
|
||||
Ch, dl, Hi, Ptr, N->getPointerInfo().getWithOffset(IncrementSize), NEVT,
|
||||
MinAlign(Alignment, IncrementSize), MMOFlags, AAInfo);
|
||||
return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Lo, Hi);
|
||||
}
|
||||
|
||||
|
@ -3100,8 +3090,8 @@ SDValue DAGTypeLegalizer::ExpandIntOp_STORE(StoreSDNode *N, unsigned OpNo) {
|
|||
}
|
||||
|
||||
// Store both the high bits and maybe some of the low bits.
|
||||
Hi = DAG.getTruncStore(Ch, dl, Hi, Ptr, N->getPointerInfo(),
|
||||
HiVT, isVolatile, isNonTemporal, Alignment, AAInfo);
|
||||
Hi = DAG.getTruncStore(Ch, dl, Hi, Ptr, N->getPointerInfo(), HiVT, Alignment,
|
||||
MMOFlags, AAInfo);
|
||||
|
||||
// Increment the pointer to the other half.
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
|
||||
|
@ -3110,8 +3100,7 @@ SDValue DAGTypeLegalizer::ExpandIntOp_STORE(StoreSDNode *N, unsigned OpNo) {
|
|||
Lo = DAG.getTruncStore(Ch, dl, Lo, Ptr,
|
||||
N->getPointerInfo().getWithOffset(IncrementSize),
|
||||
EVT::getIntegerVT(*DAG.getContext(), ExcessBits),
|
||||
isVolatile, isNonTemporal,
|
||||
MinAlign(Alignment, IncrementSize), AAInfo);
|
||||
MinAlign(Alignment, IncrementSize), MMOFlags, AAInfo);
|
||||
return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Lo, Hi);
|
||||
}
|
||||
|
||||
|
@ -3187,7 +3176,7 @@ SDValue DAGTypeLegalizer::ExpandIntOp_UINT_TO_FP(SDNode *N) {
|
|||
SDValue Fudge = DAG.getExtLoad(
|
||||
ISD::EXTLOAD, dl, DstVT, DAG.getEntryNode(), FudgePtr,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), MVT::f32,
|
||||
false, false, false, Alignment);
|
||||
Alignment);
|
||||
return DAG.getNode(ISD::FADD, dl, DstVT, SignedConv, Fudge);
|
||||
}
|
||||
|
||||
|
|
|
@ -927,11 +927,10 @@ SDValue DAGTypeLegalizer::CreateStackStoreLoad(SDValue Op,
|
|||
// the source and destination types.
|
||||
SDValue StackPtr = DAG.CreateStackTemporary(Op.getValueType(), DestVT);
|
||||
// Emit a store to the stack slot.
|
||||
SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, Op, StackPtr,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(DAG.getEntryNode(), dl, Op, StackPtr, MachinePointerInfo());
|
||||
// Result is a load from the stack slot.
|
||||
return DAG.getLoad(DestVT, dl, Store, StackPtr, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
return DAG.getLoad(DestVT, dl, Store, StackPtr, MachinePointerInfo());
|
||||
}
|
||||
|
||||
/// Replace the node's results with custom code provided by the target and
|
||||
|
|
|
@ -170,12 +170,10 @@ void DAGTypeLegalizer::ExpandRes_BITCAST(SDNode *N, SDValue &Lo, SDValue &Hi) {
|
|||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), SPFI);
|
||||
|
||||
// Emit a store to the stack slot.
|
||||
SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, InOp, StackPtr, PtrInfo,
|
||||
false, false, 0);
|
||||
SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, InOp, StackPtr, PtrInfo);
|
||||
|
||||
// Load the first half from the stack slot.
|
||||
Lo = DAG.getLoad(NOutVT, dl, Store, StackPtr, PtrInfo,
|
||||
false, false, false, 0);
|
||||
Lo = DAG.getLoad(NOutVT, dl, Store, StackPtr, PtrInfo);
|
||||
|
||||
// Increment the pointer to the other half.
|
||||
unsigned IncrementSize = NOutVT.getSizeInBits() / 8;
|
||||
|
@ -185,8 +183,8 @@ 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, false, MinAlign(Alignment, IncrementSize));
|
||||
PtrInfo.getWithOffset(IncrementSize),
|
||||
MinAlign(Alignment, IncrementSize));
|
||||
|
||||
// Handle endianness of the load.
|
||||
if (TLI.hasBigEndianPartOrdering(OutVT, DAG.getDataLayout()))
|
||||
|
@ -263,16 +261,12 @@ void DAGTypeLegalizer::ExpandRes_NormalLoad(SDNode *N, SDValue &Lo,
|
|||
SDValue Chain = LD->getChain();
|
||||
SDValue Ptr = LD->getBasePtr();
|
||||
unsigned Alignment = LD->getAlignment();
|
||||
bool isVolatile = LD->isVolatile();
|
||||
bool isNonTemporal = LD->isNonTemporal();
|
||||
bool isInvariant = LD->isInvariant();
|
||||
AAMDNodes AAInfo = LD->getAAInfo();
|
||||
|
||||
assert(NVT.isByteSized() && "Expanded type not byte sized!");
|
||||
|
||||
Lo = DAG.getLoad(NVT, dl, Chain, Ptr, LD->getPointerInfo(),
|
||||
isVolatile, isNonTemporal, isInvariant, Alignment,
|
||||
AAInfo);
|
||||
Lo = DAG.getLoad(NVT, dl, Chain, Ptr, LD->getPointerInfo(), Alignment,
|
||||
LD->getMemOperand()->getFlags(), AAInfo);
|
||||
|
||||
// Increment the pointer to the other half.
|
||||
unsigned IncrementSize = NVT.getSizeInBits() / 8;
|
||||
|
@ -280,8 +274,8 @@ void DAGTypeLegalizer::ExpandRes_NormalLoad(SDNode *N, SDValue &Lo,
|
|||
DAG.getConstant(IncrementSize, dl, Ptr.getValueType()));
|
||||
Hi = DAG.getLoad(NVT, dl, Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(IncrementSize),
|
||||
isVolatile, isNonTemporal, isInvariant,
|
||||
MinAlign(Alignment, IncrementSize), AAInfo);
|
||||
MinAlign(Alignment, IncrementSize),
|
||||
LD->getMemOperand()->getFlags(), AAInfo);
|
||||
|
||||
// Build a factor node to remember that this load is independent of the
|
||||
// other one.
|
||||
|
@ -478,8 +472,6 @@ SDValue DAGTypeLegalizer::ExpandOp_NormalStore(SDNode *N, unsigned OpNo) {
|
|||
SDValue Chain = St->getChain();
|
||||
SDValue Ptr = St->getBasePtr();
|
||||
unsigned Alignment = St->getAlignment();
|
||||
bool isVolatile = St->isVolatile();
|
||||
bool isNonTemporal = St->isNonTemporal();
|
||||
AAMDNodes AAInfo = St->getAAInfo();
|
||||
|
||||
assert(NVT.isByteSized() && "Expanded type not byte sized!");
|
||||
|
@ -491,15 +483,15 @@ SDValue DAGTypeLegalizer::ExpandOp_NormalStore(SDNode *N, unsigned OpNo) {
|
|||
if (TLI.hasBigEndianPartOrdering(ValueVT, DAG.getDataLayout()))
|
||||
std::swap(Lo, Hi);
|
||||
|
||||
Lo = DAG.getStore(Chain, dl, Lo, Ptr, St->getPointerInfo(),
|
||||
isVolatile, isNonTemporal, Alignment, AAInfo);
|
||||
Lo = DAG.getStore(Chain, dl, Lo, Ptr, St->getPointerInfo(), Alignment,
|
||||
St->getMemOperand()->getFlags(), AAInfo);
|
||||
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
|
||||
DAG.getConstant(IncrementSize, dl, Ptr.getValueType()));
|
||||
Hi = DAG.getStore(Chain, dl, Hi, Ptr,
|
||||
St->getPointerInfo().getWithOffset(IncrementSize),
|
||||
isVolatile, isNonTemporal,
|
||||
MinAlign(Alignment, IncrementSize), AAInfo);
|
||||
MinAlign(Alignment, IncrementSize),
|
||||
St->getMemOperand()->getFlags(), AAInfo);
|
||||
|
||||
return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Lo, Hi);
|
||||
}
|
||||
|
|
|
@ -535,24 +535,22 @@ SDValue VectorLegalizer::ExpandLoad(SDValue Op) {
|
|||
unsigned LoadBytes = WideBytes;
|
||||
|
||||
if (RemainingBytes >= LoadBytes) {
|
||||
ScalarLoad = DAG.getLoad(WideVT, dl, Chain, BasePTR,
|
||||
LD->getPointerInfo().getWithOffset(Offset),
|
||||
LD->isVolatile(), LD->isNonTemporal(),
|
||||
LD->isInvariant(),
|
||||
MinAlign(LD->getAlignment(), Offset),
|
||||
LD->getAAInfo());
|
||||
ScalarLoad =
|
||||
DAG.getLoad(WideVT, dl, Chain, BasePTR,
|
||||
LD->getPointerInfo().getWithOffset(Offset),
|
||||
MinAlign(LD->getAlignment(), Offset),
|
||||
LD->getMemOperand()->getFlags(), LD->getAAInfo());
|
||||
} else {
|
||||
EVT LoadVT = WideVT;
|
||||
while (RemainingBytes < LoadBytes) {
|
||||
LoadBytes >>= 1; // Reduce the load size by half.
|
||||
LoadVT = EVT::getIntegerVT(*DAG.getContext(), LoadBytes << 3);
|
||||
}
|
||||
ScalarLoad = DAG.getExtLoad(ISD::EXTLOAD, dl, WideVT, Chain, BasePTR,
|
||||
LD->getPointerInfo().getWithOffset(Offset),
|
||||
LoadVT, LD->isVolatile(),
|
||||
LD->isNonTemporal(), LD->isInvariant(),
|
||||
MinAlign(LD->getAlignment(), Offset),
|
||||
LD->getAAInfo());
|
||||
ScalarLoad =
|
||||
DAG.getExtLoad(ISD::EXTLOAD, dl, WideVT, Chain, BasePTR,
|
||||
LD->getPointerInfo().getWithOffset(Offset), LoadVT,
|
||||
MinAlign(LD->getAlignment(), Offset),
|
||||
LD->getMemOperand()->getFlags(), LD->getAAInfo());
|
||||
}
|
||||
|
||||
RemainingBytes -= LoadBytes;
|
||||
|
@ -659,13 +657,10 @@ SDValue VectorLegalizer::ExpandStore(SDValue Op) {
|
|||
MemSclVT.getIntegerVT(Ctx, NextPowerOf2(ScalarSize)),
|
||||
StVT.getVectorNumElements());
|
||||
|
||||
SDValue NewVectorStore
|
||||
= DAG.getTruncStore(ST->getChain(), SDLoc(Op), ST->getValue(),
|
||||
ST->getBasePtr(),
|
||||
ST->getPointerInfo(), NewMemVT,
|
||||
ST->isVolatile(), ST->isNonTemporal(),
|
||||
ST->getAlignment(),
|
||||
ST->getAAInfo());
|
||||
SDValue NewVectorStore = DAG.getTruncStore(
|
||||
ST->getChain(), SDLoc(Op), ST->getValue(), ST->getBasePtr(),
|
||||
ST->getPointerInfo(), NewMemVT, ST->getAlignment(),
|
||||
ST->getMemOperand()->getFlags(), ST->getAAInfo());
|
||||
ST = cast<StoreSDNode>(NewVectorStore.getNode());
|
||||
}
|
||||
|
||||
|
|
|
@ -223,17 +223,13 @@ SDValue DAGTypeLegalizer::ScalarizeVecRes_INSERT_VECTOR_ELT(SDNode *N) {
|
|||
SDValue DAGTypeLegalizer::ScalarizeVecRes_LOAD(LoadSDNode *N) {
|
||||
assert(N->isUnindexed() && "Indexed vector load?");
|
||||
|
||||
SDValue Result = DAG.getLoad(ISD::UNINDEXED,
|
||||
N->getExtensionType(),
|
||||
N->getValueType(0).getVectorElementType(),
|
||||
SDLoc(N),
|
||||
N->getChain(), N->getBasePtr(),
|
||||
DAG.getUNDEF(N->getBasePtr().getValueType()),
|
||||
N->getPointerInfo(),
|
||||
N->getMemoryVT().getVectorElementType(),
|
||||
N->isVolatile(), N->isNonTemporal(),
|
||||
N->isInvariant(), N->getOriginalAlignment(),
|
||||
N->getAAInfo());
|
||||
SDValue Result = DAG.getLoad(
|
||||
ISD::UNINDEXED, N->getExtensionType(),
|
||||
N->getValueType(0).getVectorElementType(), SDLoc(N), N->getChain(),
|
||||
N->getBasePtr(), DAG.getUNDEF(N->getBasePtr().getValueType()),
|
||||
N->getPointerInfo(), N->getMemoryVT().getVectorElementType(),
|
||||
N->getOriginalAlignment(), N->getMemOperand()->getFlags(),
|
||||
N->getAAInfo());
|
||||
|
||||
// Legalize the chain result - switch anything that used the old chain to
|
||||
// use the new one.
|
||||
|
@ -535,17 +531,16 @@ SDValue DAGTypeLegalizer::ScalarizeVecOp_STORE(StoreSDNode *N, unsigned OpNo){
|
|||
SDLoc dl(N);
|
||||
|
||||
if (N->isTruncatingStore())
|
||||
return DAG.getTruncStore(N->getChain(), dl,
|
||||
GetScalarizedVector(N->getOperand(1)),
|
||||
N->getBasePtr(), N->getPointerInfo(),
|
||||
N->getMemoryVT().getVectorElementType(),
|
||||
N->isVolatile(), N->isNonTemporal(),
|
||||
N->getAlignment(), N->getAAInfo());
|
||||
return DAG.getTruncStore(
|
||||
N->getChain(), dl, GetScalarizedVector(N->getOperand(1)),
|
||||
N->getBasePtr(), N->getPointerInfo(),
|
||||
N->getMemoryVT().getVectorElementType(), N->getAlignment(),
|
||||
N->getMemOperand()->getFlags(), N->getAAInfo());
|
||||
|
||||
return DAG.getStore(N->getChain(), dl, GetScalarizedVector(N->getOperand(1)),
|
||||
N->getBasePtr(), N->getPointerInfo(),
|
||||
N->isVolatile(), N->isNonTemporal(),
|
||||
N->getOriginalAlignment(), N->getAAInfo());
|
||||
N->getOriginalAlignment(), N->getMemOperand()->getFlags(),
|
||||
N->getAAInfo());
|
||||
}
|
||||
|
||||
/// If the value to round is a vector that needs to be scalarized, it must be
|
||||
|
@ -873,19 +868,18 @@ void DAGTypeLegalizer::SplitVecRes_INSERT_SUBVECTOR(SDNode *N, SDValue &Lo,
|
|||
|
||||
// Spill the vector to the stack.
|
||||
SDValue StackPtr = DAG.CreateStackTemporary(VecVT);
|
||||
SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, Vec, StackPtr,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(DAG.getEntryNode(), dl, Vec, StackPtr, MachinePointerInfo());
|
||||
|
||||
// Store the new subvector into the specified index.
|
||||
SDValue SubVecPtr = GetVectorElementPointer(StackPtr, VecElemVT, Idx);
|
||||
Type *VecType = VecVT.getTypeForEVT(*DAG.getContext());
|
||||
unsigned Alignment = DAG.getDataLayout().getPrefTypeAlignment(VecType);
|
||||
Store = DAG.getStore(Store, dl, SubVec, SubVecPtr, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
Store = DAG.getStore(Store, dl, SubVec, SubVecPtr, MachinePointerInfo());
|
||||
|
||||
// Load the Lo part from the stack slot.
|
||||
Lo = DAG.getLoad(Lo.getValueType(), dl, Store, StackPtr, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
Lo =
|
||||
DAG.getLoad(Lo.getValueType(), dl, Store, StackPtr, MachinePointerInfo());
|
||||
|
||||
// Increment the pointer to the other part.
|
||||
unsigned IncrementSize = Lo.getValueType().getSizeInBits() / 8;
|
||||
|
@ -895,7 +889,7 @@ void DAGTypeLegalizer::SplitVecRes_INSERT_SUBVECTOR(SDNode *N, SDValue &Lo,
|
|||
|
||||
// Load the Hi part from the stack slot.
|
||||
Hi = DAG.getLoad(Hi.getValueType(), dl, Store, StackPtr, MachinePointerInfo(),
|
||||
false, false, false, MinAlign(Alignment, IncrementSize));
|
||||
MinAlign(Alignment, IncrementSize));
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::SplitVecRes_FPOWI(SDNode *N, SDValue &Lo,
|
||||
|
@ -1004,20 +998,20 @@ void DAGTypeLegalizer::SplitVecRes_INSERT_VECTOR_ELT(SDNode *N, SDValue &Lo,
|
|||
EVT VecVT = Vec.getValueType();
|
||||
EVT EltVT = VecVT.getVectorElementType();
|
||||
SDValue StackPtr = DAG.CreateStackTemporary(VecVT);
|
||||
SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, Vec, StackPtr,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(DAG.getEntryNode(), dl, Vec, StackPtr, MachinePointerInfo());
|
||||
|
||||
// Store the new element. This may be larger than the vector element type,
|
||||
// so use a truncating store.
|
||||
SDValue EltPtr = GetVectorElementPointer(StackPtr, EltVT, Idx);
|
||||
Type *VecType = VecVT.getTypeForEVT(*DAG.getContext());
|
||||
unsigned Alignment = DAG.getDataLayout().getPrefTypeAlignment(VecType);
|
||||
Store = DAG.getTruncStore(Store, dl, Elt, EltPtr, MachinePointerInfo(), EltVT,
|
||||
false, false, 0);
|
||||
Store =
|
||||
DAG.getTruncStore(Store, dl, Elt, EltPtr, MachinePointerInfo(), EltVT);
|
||||
|
||||
// Load the Lo part from the stack slot.
|
||||
Lo = DAG.getLoad(Lo.getValueType(), dl, Store, StackPtr, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
Lo =
|
||||
DAG.getLoad(Lo.getValueType(), dl, Store, StackPtr, MachinePointerInfo());
|
||||
|
||||
// Increment the pointer to the other part.
|
||||
unsigned IncrementSize = Lo.getValueType().getSizeInBits() / 8;
|
||||
|
@ -1027,7 +1021,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, false, MinAlign(Alignment, IncrementSize));
|
||||
MinAlign(Alignment, IncrementSize));
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::SplitVecRes_SCALAR_TO_VECTOR(SDNode *N, SDValue &Lo,
|
||||
|
@ -1052,25 +1046,21 @@ void DAGTypeLegalizer::SplitVecRes_LOAD(LoadSDNode *LD, SDValue &Lo,
|
|||
SDValue Offset = DAG.getUNDEF(Ptr.getValueType());
|
||||
EVT MemoryVT = LD->getMemoryVT();
|
||||
unsigned Alignment = LD->getOriginalAlignment();
|
||||
bool isVolatile = LD->isVolatile();
|
||||
bool isNonTemporal = LD->isNonTemporal();
|
||||
bool isInvariant = LD->isInvariant();
|
||||
MachineMemOperand::Flags MMOFlags = LD->getMemOperand()->getFlags();
|
||||
AAMDNodes AAInfo = LD->getAAInfo();
|
||||
|
||||
EVT LoMemVT, HiMemVT;
|
||||
std::tie(LoMemVT, HiMemVT) = DAG.GetSplitDestVTs(MemoryVT);
|
||||
|
||||
Lo = DAG.getLoad(ISD::UNINDEXED, ExtType, LoVT, dl, Ch, Ptr, Offset,
|
||||
LD->getPointerInfo(), LoMemVT, isVolatile, isNonTemporal,
|
||||
isInvariant, Alignment, AAInfo);
|
||||
LD->getPointerInfo(), LoMemVT, Alignment, MMOFlags, AAInfo);
|
||||
|
||||
unsigned IncrementSize = LoMemVT.getSizeInBits()/8;
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
|
||||
DAG.getConstant(IncrementSize, dl, Ptr.getValueType()));
|
||||
Hi = DAG.getLoad(ISD::UNINDEXED, ExtType, HiVT, dl, Ch, Ptr, Offset,
|
||||
LD->getPointerInfo().getWithOffset(IncrementSize),
|
||||
HiMemVT, isVolatile, isNonTemporal, isInvariant, Alignment,
|
||||
AAInfo);
|
||||
LD->getPointerInfo().getWithOffset(IncrementSize), HiMemVT,
|
||||
Alignment, MMOFlags, AAInfo);
|
||||
|
||||
// Build a factor node to remember that this load is independent of the
|
||||
// other one.
|
||||
|
@ -1657,13 +1647,13 @@ SDValue DAGTypeLegalizer::SplitVecOp_EXTRACT_VECTOR_ELT(SDNode *N) {
|
|||
|
||||
// Store the vector to the stack.
|
||||
SDValue StackPtr = DAG.CreateStackTemporary(VecVT);
|
||||
SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, Vec, StackPtr,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(DAG.getEntryNode(), dl, Vec, StackPtr, MachinePointerInfo());
|
||||
|
||||
// Load back the required element.
|
||||
StackPtr = GetVectorElementPointer(StackPtr, EltVT, Idx);
|
||||
return DAG.getExtLoad(ISD::EXTLOAD, dl, N->getValueType(0), Store, StackPtr,
|
||||
MachinePointerInfo(), EltVT, false, false, false, 0);
|
||||
MachinePointerInfo(), EltVT);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SplitVecOp_MGATHER(MaskedGatherSDNode *MGT,
|
||||
|
@ -1867,8 +1857,7 @@ SDValue DAGTypeLegalizer::SplitVecOp_STORE(StoreSDNode *N, unsigned OpNo) {
|
|||
SDValue Ptr = N->getBasePtr();
|
||||
EVT MemoryVT = N->getMemoryVT();
|
||||
unsigned Alignment = N->getOriginalAlignment();
|
||||
bool isVol = N->isVolatile();
|
||||
bool isNT = N->isNonTemporal();
|
||||
MachineMemOperand::Flags MMOFlags = N->getMemOperand()->getFlags();
|
||||
AAMDNodes AAInfo = N->getAAInfo();
|
||||
SDValue Lo, Hi;
|
||||
GetSplitVector(N->getOperand(1), Lo, Hi);
|
||||
|
@ -1879,11 +1868,11 @@ SDValue DAGTypeLegalizer::SplitVecOp_STORE(StoreSDNode *N, unsigned OpNo) {
|
|||
unsigned IncrementSize = LoMemVT.getSizeInBits()/8;
|
||||
|
||||
if (isTruncating)
|
||||
Lo = DAG.getTruncStore(Ch, DL, Lo, Ptr, N->getPointerInfo(),
|
||||
LoMemVT, isVol, isNT, Alignment, AAInfo);
|
||||
Lo = DAG.getTruncStore(Ch, DL, Lo, Ptr, N->getPointerInfo(), LoMemVT,
|
||||
Alignment, MMOFlags, AAInfo);
|
||||
else
|
||||
Lo = DAG.getStore(Ch, DL, Lo, Ptr, N->getPointerInfo(),
|
||||
isVol, isNT, Alignment, AAInfo);
|
||||
Lo = DAG.getStore(Ch, DL, Lo, Ptr, N->getPointerInfo(), Alignment, MMOFlags,
|
||||
AAInfo);
|
||||
|
||||
// Increment the pointer to the other half.
|
||||
Ptr = DAG.getNode(ISD::ADD, DL, Ptr.getValueType(), Ptr,
|
||||
|
@ -1892,11 +1881,11 @@ SDValue DAGTypeLegalizer::SplitVecOp_STORE(StoreSDNode *N, unsigned OpNo) {
|
|||
if (isTruncating)
|
||||
Hi = DAG.getTruncStore(Ch, DL, Hi, Ptr,
|
||||
N->getPointerInfo().getWithOffset(IncrementSize),
|
||||
HiMemVT, isVol, isNT, Alignment, AAInfo);
|
||||
HiMemVT, Alignment, MMOFlags, AAInfo);
|
||||
else
|
||||
Hi = DAG.getStore(Ch, DL, Hi, Ptr,
|
||||
N->getPointerInfo().getWithOffset(IncrementSize),
|
||||
isVol, isNT, Alignment, AAInfo);
|
||||
Alignment, MMOFlags, AAInfo);
|
||||
|
||||
return DAG.getNode(ISD::TokenFactor, DL, MVT::Other, Lo, Hi);
|
||||
}
|
||||
|
@ -3498,24 +3487,21 @@ SDValue DAGTypeLegalizer::GenWidenVectorLoads(SmallVectorImpl<SDValue> &LdChain,
|
|||
assert(LdVT.getVectorElementType() == WidenVT.getVectorElementType());
|
||||
|
||||
// Load information
|
||||
SDValue Chain = LD->getChain();
|
||||
SDValue BasePtr = LD->getBasePtr();
|
||||
unsigned Align = LD->getAlignment();
|
||||
bool isVolatile = LD->isVolatile();
|
||||
bool isNonTemporal = LD->isNonTemporal();
|
||||
bool isInvariant = LD->isInvariant();
|
||||
SDValue Chain = LD->getChain();
|
||||
SDValue BasePtr = LD->getBasePtr();
|
||||
unsigned Align = LD->getAlignment();
|
||||
MachineMemOperand::Flags MMOFlags = LD->getMemOperand()->getFlags();
|
||||
AAMDNodes AAInfo = LD->getAAInfo();
|
||||
|
||||
int LdWidth = LdVT.getSizeInBits();
|
||||
int WidthDiff = WidenWidth - LdWidth;
|
||||
unsigned LdAlign = (isVolatile) ? 0 : Align; // Allow wider loads.
|
||||
unsigned LdAlign = LD->isVolatile() ? 0 : Align; // Allow wider loads.
|
||||
|
||||
// Find the vector type that can load from.
|
||||
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, isInvariant, Align,
|
||||
AAInfo);
|
||||
Align, MMOFlags, AAInfo);
|
||||
LdChain.push_back(LdOp.getValue(1));
|
||||
|
||||
// Check if we can load the element with one instruction.
|
||||
|
@ -3558,9 +3544,8 @@ SDValue DAGTypeLegalizer::GenWidenVectorLoads(SmallVectorImpl<SDValue> &LdChain,
|
|||
NewVT = FindMemType(DAG, TLI, LdWidth, WidenVT, LdAlign, WidthDiff);
|
||||
NewVTWidth = NewVT.getSizeInBits();
|
||||
L = DAG.getLoad(NewVT, dl, Chain, BasePtr,
|
||||
LD->getPointerInfo().getWithOffset(Offset), isVolatile,
|
||||
isNonTemporal, isInvariant, MinAlign(Align, Increment),
|
||||
AAInfo);
|
||||
LD->getPointerInfo().getWithOffset(Offset),
|
||||
MinAlign(Align, Increment), MMOFlags, AAInfo);
|
||||
LdChain.push_back(L.getValue(1));
|
||||
if (L->getValueType(0).isVector()) {
|
||||
SmallVector<SDValue, 16> Loads;
|
||||
|
@ -3574,9 +3559,8 @@ SDValue DAGTypeLegalizer::GenWidenVectorLoads(SmallVectorImpl<SDValue> &LdChain,
|
|||
}
|
||||
} else {
|
||||
L = DAG.getLoad(NewVT, dl, Chain, BasePtr,
|
||||
LD->getPointerInfo().getWithOffset(Offset), isVolatile,
|
||||
isNonTemporal, isInvariant, MinAlign(Align, Increment),
|
||||
AAInfo);
|
||||
LD->getPointerInfo().getWithOffset(Offset),
|
||||
MinAlign(Align, Increment), MMOFlags, AAInfo);
|
||||
LdChain.push_back(L.getValue(1));
|
||||
}
|
||||
|
||||
|
@ -3651,12 +3635,10 @@ DAGTypeLegalizer::GenWidenVectorExtLoads(SmallVectorImpl<SDValue> &LdChain,
|
|||
assert(LdVT.isVector() && WidenVT.isVector());
|
||||
|
||||
// Load information
|
||||
SDValue Chain = LD->getChain();
|
||||
SDValue BasePtr = LD->getBasePtr();
|
||||
unsigned Align = LD->getAlignment();
|
||||
bool isVolatile = LD->isVolatile();
|
||||
bool isNonTemporal = LD->isNonTemporal();
|
||||
bool isInvariant = LD->isInvariant();
|
||||
SDValue Chain = LD->getChain();
|
||||
SDValue BasePtr = LD->getBasePtr();
|
||||
unsigned Align = LD->getAlignment();
|
||||
MachineMemOperand::Flags MMOFlags = LD->getMemOperand()->getFlags();
|
||||
AAMDNodes AAInfo = LD->getAAInfo();
|
||||
|
||||
EVT EltVT = WidenVT.getVectorElementType();
|
||||
|
@ -3667,10 +3649,9 @@ DAGTypeLegalizer::GenWidenVectorExtLoads(SmallVectorImpl<SDValue> &LdChain,
|
|||
unsigned WidenNumElts = WidenVT.getVectorNumElements();
|
||||
SmallVector<SDValue, 16> Ops(WidenNumElts);
|
||||
unsigned Increment = LdEltVT.getSizeInBits() / 8;
|
||||
Ops[0] = DAG.getExtLoad(ExtType, dl, EltVT, Chain, BasePtr,
|
||||
LD->getPointerInfo(),
|
||||
LdEltVT, isVolatile, isNonTemporal, isInvariant,
|
||||
Align, AAInfo);
|
||||
Ops[0] =
|
||||
DAG.getExtLoad(ExtType, dl, EltVT, Chain, BasePtr, LD->getPointerInfo(),
|
||||
LdEltVT, Align, MMOFlags, AAInfo);
|
||||
LdChain.push_back(Ops[0].getValue(1));
|
||||
unsigned i = 0, Offset = Increment;
|
||||
for (i=1; i < NumElts; ++i, Offset += Increment) {
|
||||
|
@ -3680,8 +3661,7 @@ DAGTypeLegalizer::GenWidenVectorExtLoads(SmallVectorImpl<SDValue> &LdChain,
|
|||
BasePtr.getValueType()));
|
||||
Ops[i] = DAG.getExtLoad(ExtType, dl, EltVT, Chain, NewBasePtr,
|
||||
LD->getPointerInfo().getWithOffset(Offset), LdEltVT,
|
||||
isVolatile, isNonTemporal, isInvariant, Align,
|
||||
AAInfo);
|
||||
Align, MMOFlags, AAInfo);
|
||||
LdChain.push_back(Ops[i].getValue(1));
|
||||
}
|
||||
|
||||
|
@ -3702,8 +3682,7 @@ void DAGTypeLegalizer::GenWidenVectorStores(SmallVectorImpl<SDValue> &StChain,
|
|||
SDValue Chain = ST->getChain();
|
||||
SDValue BasePtr = ST->getBasePtr();
|
||||
unsigned Align = ST->getAlignment();
|
||||
bool isVolatile = ST->isVolatile();
|
||||
bool isNonTemporal = ST->isNonTemporal();
|
||||
MachineMemOperand::Flags MMOFlags = ST->getMemOperand()->getFlags();
|
||||
AAMDNodes AAInfo = ST->getAAInfo();
|
||||
SDValue ValOp = GetWidenedVector(ST->getValue());
|
||||
SDLoc dl(ST);
|
||||
|
@ -3729,10 +3708,9 @@ void DAGTypeLegalizer::GenWidenVectorStores(SmallVectorImpl<SDValue> &StChain,
|
|||
SDValue EOp = DAG.getNode(
|
||||
ISD::EXTRACT_SUBVECTOR, dl, NewVT, ValOp,
|
||||
DAG.getConstant(Idx, dl, TLI.getVectorIdxTy(DAG.getDataLayout())));
|
||||
StChain.push_back(DAG.getStore(Chain, dl, EOp, BasePtr,
|
||||
ST->getPointerInfo().getWithOffset(Offset),
|
||||
isVolatile, isNonTemporal,
|
||||
MinAlign(Align, Offset), AAInfo));
|
||||
StChain.push_back(DAG.getStore(
|
||||
Chain, dl, EOp, BasePtr, ST->getPointerInfo().getWithOffset(Offset),
|
||||
MinAlign(Align, Offset), MMOFlags, AAInfo));
|
||||
StWidth -= NewVTWidth;
|
||||
Offset += Increment;
|
||||
Idx += NumVTElts;
|
||||
|
@ -3752,10 +3730,9 @@ void DAGTypeLegalizer::GenWidenVectorStores(SmallVectorImpl<SDValue> &StChain,
|
|||
ISD::EXTRACT_VECTOR_ELT, dl, NewVT, VecOp,
|
||||
DAG.getConstant(Idx++, dl,
|
||||
TLI.getVectorIdxTy(DAG.getDataLayout())));
|
||||
StChain.push_back(DAG.getStore(Chain, dl, EOp, BasePtr,
|
||||
ST->getPointerInfo().getWithOffset(Offset),
|
||||
isVolatile, isNonTemporal,
|
||||
MinAlign(Align, Offset), AAInfo));
|
||||
StChain.push_back(DAG.getStore(
|
||||
Chain, dl, EOp, BasePtr, ST->getPointerInfo().getWithOffset(Offset),
|
||||
MinAlign(Align, Offset), MMOFlags, AAInfo));
|
||||
StWidth -= NewVTWidth;
|
||||
Offset += Increment;
|
||||
BasePtr = DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(), BasePtr,
|
||||
|
@ -3773,13 +3750,12 @@ DAGTypeLegalizer::GenWidenVectorTruncStores(SmallVectorImpl<SDValue> &StChain,
|
|||
StoreSDNode *ST) {
|
||||
// For extension loads, it may not be more efficient to truncate the vector
|
||||
// and then store it. Instead, we extract each element and then store it.
|
||||
SDValue Chain = ST->getChain();
|
||||
SDValue BasePtr = ST->getBasePtr();
|
||||
SDValue Chain = ST->getChain();
|
||||
SDValue BasePtr = ST->getBasePtr();
|
||||
unsigned Align = ST->getAlignment();
|
||||
bool isVolatile = ST->isVolatile();
|
||||
bool isNonTemporal = ST->isNonTemporal();
|
||||
MachineMemOperand::Flags MMOFlags = ST->getMemOperand()->getFlags();
|
||||
AAMDNodes AAInfo = ST->getAAInfo();
|
||||
SDValue ValOp = GetWidenedVector(ST->getValue());
|
||||
SDValue ValOp = GetWidenedVector(ST->getValue());
|
||||
SDLoc dl(ST);
|
||||
|
||||
EVT StVT = ST->getMemoryVT();
|
||||
|
@ -3800,9 +3776,8 @@ DAGTypeLegalizer::GenWidenVectorTruncStores(SmallVectorImpl<SDValue> &StChain,
|
|||
ISD::EXTRACT_VECTOR_ELT, dl, ValEltVT, ValOp,
|
||||
DAG.getConstant(0, dl, TLI.getVectorIdxTy(DAG.getDataLayout())));
|
||||
StChain.push_back(DAG.getTruncStore(Chain, dl, EOp, BasePtr,
|
||||
ST->getPointerInfo(), StEltVT,
|
||||
isVolatile, isNonTemporal, Align,
|
||||
AAInfo));
|
||||
ST->getPointerInfo(), StEltVT, Align,
|
||||
MMOFlags, AAInfo));
|
||||
unsigned Offset = Increment;
|
||||
for (unsigned i=1; i < NumElts; ++i, Offset += Increment) {
|
||||
SDValue NewBasePtr = DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(),
|
||||
|
@ -3812,10 +3787,9 @@ DAGTypeLegalizer::GenWidenVectorTruncStores(SmallVectorImpl<SDValue> &StChain,
|
|||
SDValue EOp = DAG.getNode(
|
||||
ISD::EXTRACT_VECTOR_ELT, dl, ValEltVT, ValOp,
|
||||
DAG.getConstant(0, dl, TLI.getVectorIdxTy(DAG.getDataLayout())));
|
||||
StChain.push_back(DAG.getTruncStore(Chain, dl, EOp, NewBasePtr,
|
||||
ST->getPointerInfo().getWithOffset(Offset),
|
||||
StEltVT, isVolatile, isNonTemporal,
|
||||
MinAlign(Align, Offset), AAInfo));
|
||||
StChain.push_back(DAG.getTruncStore(
|
||||
Chain, dl, EOp, NewBasePtr, ST->getPointerInfo().getWithOffset(Offset),
|
||||
StEltVT, MinAlign(Align, Offset), MMOFlags, AAInfo));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1822,9 +1822,8 @@ SDValue SelectionDAG::expandVAArg(SDNode *Node) {
|
|||
SDValue Tmp2 = Node->getOperand(1);
|
||||
unsigned Align = Node->getConstantOperandVal(3);
|
||||
|
||||
SDValue VAListLoad =
|
||||
getLoad(TLI.getPointerTy(getDataLayout()), dl, Tmp1, Tmp2,
|
||||
MachinePointerInfo(V), false, false, false, 0);
|
||||
SDValue VAListLoad = getLoad(TLI.getPointerTy(getDataLayout()), dl, Tmp1,
|
||||
Tmp2, MachinePointerInfo(V));
|
||||
SDValue VAList = VAListLoad;
|
||||
|
||||
if (Align > TLI.getMinStackArgumentAlignment()) {
|
||||
|
@ -1843,11 +1842,10 @@ SDValue SelectionDAG::expandVAArg(SDNode *Node) {
|
|||
VT.getTypeForEVT(*getContext())),
|
||||
dl, VAList.getValueType()));
|
||||
// Store the incremented VAList to the legalized pointer
|
||||
Tmp1 = getStore(VAListLoad.getValue(1), dl, Tmp1, Tmp2,
|
||||
MachinePointerInfo(V), false, false, 0);
|
||||
Tmp1 =
|
||||
getStore(VAListLoad.getValue(1), dl, Tmp1, Tmp2, MachinePointerInfo(V));
|
||||
// Load the actual argument out of the pointer VAList
|
||||
return getLoad(VT, dl, Tmp1, VAList, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
return getLoad(VT, dl, Tmp1, VAList, MachinePointerInfo());
|
||||
}
|
||||
|
||||
SDValue SelectionDAG::expandVACopy(SDNode *Node) {
|
||||
|
@ -1857,11 +1855,11 @@ SDValue SelectionDAG::expandVACopy(SDNode *Node) {
|
|||
// output, returning the chain.
|
||||
const Value *VD = cast<SrcValueSDNode>(Node->getOperand(3))->getValue();
|
||||
const Value *VS = cast<SrcValueSDNode>(Node->getOperand(4))->getValue();
|
||||
SDValue Tmp1 = getLoad(TLI.getPointerTy(getDataLayout()), dl,
|
||||
Node->getOperand(0), Node->getOperand(2),
|
||||
MachinePointerInfo(VS), false, false, false, 0);
|
||||
SDValue Tmp1 =
|
||||
getLoad(TLI.getPointerTy(getDataLayout()), dl, Node->getOperand(0),
|
||||
Node->getOperand(2), MachinePointerInfo(VS));
|
||||
return getStore(Tmp1.getValue(1), dl, Tmp1, Node->getOperand(1),
|
||||
MachinePointerInfo(VD), false, false, 0);
|
||||
MachinePointerInfo(VD));
|
||||
}
|
||||
|
||||
SDValue SelectionDAG::CreateStackTemporary(EVT VT, unsigned minAlign) {
|
||||
|
@ -4350,6 +4348,8 @@ static SDValue getMemcpyLoadsAndStores(SelectionDAG &DAG, const SDLoc &dl,
|
|||
}
|
||||
}
|
||||
|
||||
MachineMemOperand::Flags MMOFlags =
|
||||
isVol ? MachineMemOperand::MOVolatile : MachineMemOperand::MONone;
|
||||
SmallVector<SDValue, 8> OutChains;
|
||||
unsigned NumMemOps = MemOps.size();
|
||||
uint64_t SrcOff = 0, DstOff = 0;
|
||||
|
@ -4377,8 +4377,7 @@ static SDValue getMemcpyLoadsAndStores(SelectionDAG &DAG, const SDLoc &dl,
|
|||
if (Value.getNode())
|
||||
Store = DAG.getStore(Chain, dl, Value,
|
||||
DAG.getMemBasePlusOffset(Dst, DstOff, dl),
|
||||
DstPtrInfo.getWithOffset(DstOff), isVol,
|
||||
false, Align);
|
||||
DstPtrInfo.getWithOffset(DstOff), Align, MMOFlags);
|
||||
}
|
||||
|
||||
if (!Store.getNode()) {
|
||||
|
@ -4391,13 +4390,12 @@ static SDValue getMemcpyLoadsAndStores(SelectionDAG &DAG, const SDLoc &dl,
|
|||
assert(NVT.bitsGE(VT));
|
||||
Value = DAG.getExtLoad(ISD::EXTLOAD, dl, NVT, Chain,
|
||||
DAG.getMemBasePlusOffset(Src, SrcOff, dl),
|
||||
SrcPtrInfo.getWithOffset(SrcOff), VT, isVol, false,
|
||||
false, MinAlign(SrcAlign, SrcOff));
|
||||
SrcPtrInfo.getWithOffset(SrcOff), VT,
|
||||
MinAlign(SrcAlign, SrcOff), MMOFlags);
|
||||
OutChains.push_back(Value.getValue(1));
|
||||
Store = DAG.getTruncStore(Chain, dl, Value,
|
||||
DAG.getMemBasePlusOffset(Dst, DstOff, dl),
|
||||
DstPtrInfo.getWithOffset(DstOff), VT, isVol,
|
||||
false, Align);
|
||||
Store = DAG.getTruncStore(
|
||||
Chain, dl, Value, DAG.getMemBasePlusOffset(Dst, DstOff, dl),
|
||||
DstPtrInfo.getWithOffset(DstOff), VT, Align, MMOFlags);
|
||||
}
|
||||
OutChains.push_back(Store);
|
||||
SrcOff += VTSize;
|
||||
|
@ -4453,6 +4451,8 @@ static SDValue getMemmoveLoadsAndStores(SelectionDAG &DAG, const SDLoc &dl,
|
|||
}
|
||||
}
|
||||
|
||||
MachineMemOperand::Flags MMOFlags =
|
||||
isVol ? MachineMemOperand::MOVolatile : MachineMemOperand::MONone;
|
||||
uint64_t SrcOff = 0, DstOff = 0;
|
||||
SmallVector<SDValue, 8> LoadValues;
|
||||
SmallVector<SDValue, 8> LoadChains;
|
||||
|
@ -4463,10 +4463,9 @@ static SDValue getMemmoveLoadsAndStores(SelectionDAG &DAG, const SDLoc &dl,
|
|||
unsigned VTSize = VT.getSizeInBits() / 8;
|
||||
SDValue Value;
|
||||
|
||||
Value = DAG.getLoad(VT, dl, Chain,
|
||||
DAG.getMemBasePlusOffset(Src, SrcOff, dl),
|
||||
SrcPtrInfo.getWithOffset(SrcOff), isVol,
|
||||
false, false, SrcAlign);
|
||||
Value =
|
||||
DAG.getLoad(VT, dl, Chain, DAG.getMemBasePlusOffset(Src, SrcOff, dl),
|
||||
SrcPtrInfo.getWithOffset(SrcOff), SrcAlign, MMOFlags);
|
||||
LoadValues.push_back(Value);
|
||||
LoadChains.push_back(Value.getValue(1));
|
||||
SrcOff += VTSize;
|
||||
|
@ -4480,7 +4479,7 @@ static SDValue getMemmoveLoadsAndStores(SelectionDAG &DAG, const SDLoc &dl,
|
|||
|
||||
Store = DAG.getStore(Chain, dl, LoadValues[i],
|
||||
DAG.getMemBasePlusOffset(Dst, DstOff, dl),
|
||||
DstPtrInfo.getWithOffset(DstOff), isVol, false, Align);
|
||||
DstPtrInfo.getWithOffset(DstOff), Align, MMOFlags);
|
||||
OutChains.push_back(Store);
|
||||
DstOff += VTSize;
|
||||
}
|
||||
|
@ -4577,10 +4576,10 @@ static SDValue getMemsetStores(SelectionDAG &DAG, const SDLoc &dl,
|
|||
Value = getMemsetValue(Src, VT, DAG, dl);
|
||||
}
|
||||
assert(Value.getValueType() == VT && "Value with wrong type.");
|
||||
SDValue Store = DAG.getStore(Chain, dl, Value,
|
||||
DAG.getMemBasePlusOffset(Dst, DstOff, dl),
|
||||
DstPtrInfo.getWithOffset(DstOff),
|
||||
isVol, false, Align);
|
||||
SDValue Store = DAG.getStore(
|
||||
Chain, dl, Value, DAG.getMemBasePlusOffset(Dst, DstOff, dl),
|
||||
DstPtrInfo.getWithOffset(DstOff), Align,
|
||||
isVol ? MachineMemOperand::MOVolatile : MachineMemOperand::MONone);
|
||||
OutChains.push_back(Store);
|
||||
DstOff += VT.getSizeInBits() / 8;
|
||||
Size -= VTSize;
|
||||
|
@ -5051,31 +5050,24 @@ SDValue SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
|
|||
EVT VT, const SDLoc &dl, SDValue Chain,
|
||||
SDValue Ptr, SDValue Offset,
|
||||
MachinePointerInfo PtrInfo, EVT MemVT,
|
||||
bool isVolatile, bool isNonTemporal,
|
||||
bool isInvariant, unsigned Alignment,
|
||||
unsigned Alignment,
|
||||
MachineMemOperand::Flags MMOFlags,
|
||||
const AAMDNodes &AAInfo, const MDNode *Ranges) {
|
||||
assert(Chain.getValueType() == MVT::Other &&
|
||||
"Invalid chain type");
|
||||
if (Alignment == 0) // Ensure that codegen never sees alignment 0
|
||||
Alignment = getEVTAlignment(VT);
|
||||
|
||||
auto Flags = MachineMemOperand::MOLoad;
|
||||
if (isVolatile)
|
||||
Flags |= MachineMemOperand::MOVolatile;
|
||||
if (isNonTemporal)
|
||||
Flags |= MachineMemOperand::MONonTemporal;
|
||||
if (isInvariant)
|
||||
Flags |= MachineMemOperand::MOInvariant;
|
||||
|
||||
MMOFlags |= MachineMemOperand::MOLoad;
|
||||
assert((MMOFlags & MachineMemOperand::MOStore) == 0);
|
||||
// If we don't have a PtrInfo, infer the trivial frame index case to simplify
|
||||
// clients.
|
||||
if (PtrInfo.V.isNull())
|
||||
PtrInfo = InferPointerInfo(*this, Ptr, Offset);
|
||||
|
||||
MachineFunction &MF = getMachineFunction();
|
||||
MachineMemOperand *MMO =
|
||||
MF.getMachineMemOperand(PtrInfo, Flags, MemVT.getStoreSize(), Alignment,
|
||||
AAInfo, Ranges);
|
||||
MachineMemOperand *MMO = MF.getMachineMemOperand(
|
||||
PtrInfo, MMOFlags, MemVT.getStoreSize(), Alignment, AAInfo, Ranges);
|
||||
return getLoad(AM, ExtType, VT, dl, Chain, Ptr, Offset, MemVT, MMO);
|
||||
}
|
||||
|
||||
|
@ -5129,13 +5121,12 @@ SDValue SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
|
|||
|
||||
SDValue SelectionDAG::getLoad(EVT VT, const SDLoc &dl, SDValue Chain,
|
||||
SDValue Ptr, MachinePointerInfo PtrInfo,
|
||||
bool isVolatile, bool isNonTemporal,
|
||||
bool isInvariant, unsigned Alignment,
|
||||
unsigned Alignment,
|
||||
MachineMemOperand::Flags MMOFlags,
|
||||
const AAMDNodes &AAInfo, const MDNode *Ranges) {
|
||||
SDValue Undef = getUNDEF(Ptr.getValueType());
|
||||
return getLoad(ISD::UNINDEXED, ISD::NON_EXTLOAD, VT, dl, Chain, Ptr, Undef,
|
||||
PtrInfo, VT, isVolatile, isNonTemporal, isInvariant, Alignment,
|
||||
AAInfo, Ranges);
|
||||
PtrInfo, VT, Alignment, MMOFlags, AAInfo, Ranges);
|
||||
}
|
||||
|
||||
SDValue SelectionDAG::getLoad(EVT VT, const SDLoc &dl, SDValue Chain,
|
||||
|
@ -5148,13 +5139,12 @@ SDValue SelectionDAG::getLoad(EVT VT, const SDLoc &dl, SDValue Chain,
|
|||
SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, const SDLoc &dl,
|
||||
EVT VT, SDValue Chain, SDValue Ptr,
|
||||
MachinePointerInfo PtrInfo, EVT MemVT,
|
||||
bool isVolatile, bool isNonTemporal,
|
||||
bool isInvariant, unsigned Alignment,
|
||||
unsigned Alignment,
|
||||
MachineMemOperand::Flags MMOFlags,
|
||||
const AAMDNodes &AAInfo) {
|
||||
SDValue Undef = getUNDEF(Ptr.getValueType());
|
||||
return getLoad(ISD::UNINDEXED, ExtType, VT, dl, Chain, Ptr, Undef,
|
||||
PtrInfo, MemVT, isVolatile, isNonTemporal, isInvariant,
|
||||
Alignment, AAInfo);
|
||||
return getLoad(ISD::UNINDEXED, ExtType, VT, dl, Chain, Ptr, Undef, PtrInfo,
|
||||
MemVT, Alignment, MMOFlags, AAInfo);
|
||||
}
|
||||
|
||||
SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, const SDLoc &dl,
|
||||
|
@ -5170,35 +5160,32 @@ SDValue SelectionDAG::getIndexedLoad(SDValue OrigLoad, const SDLoc &dl,
|
|||
ISD::MemIndexedMode AM) {
|
||||
LoadSDNode *LD = cast<LoadSDNode>(OrigLoad);
|
||||
assert(LD->getOffset().isUndef() && "Load is already a indexed load!");
|
||||
// Don't propagate the invariant flag.
|
||||
auto MMOFlags =
|
||||
LD->getMemOperand()->getFlags() & ~MachineMemOperand::MOInvariant;
|
||||
return getLoad(AM, LD->getExtensionType(), OrigLoad.getValueType(), dl,
|
||||
LD->getChain(), Base, Offset, LD->getPointerInfo(),
|
||||
LD->getMemoryVT(), LD->isVolatile(), LD->isNonTemporal(),
|
||||
false, LD->getAlignment());
|
||||
LD->getMemoryVT(), LD->getAlignment(), MMOFlags);
|
||||
}
|
||||
|
||||
SDValue SelectionDAG::getStore(SDValue Chain, const SDLoc &dl, SDValue Val,
|
||||
SDValue Ptr, MachinePointerInfo PtrInfo,
|
||||
bool isVolatile, bool isNonTemporal,
|
||||
unsigned Alignment, const AAMDNodes &AAInfo) {
|
||||
unsigned Alignment,
|
||||
MachineMemOperand::Flags MMOFlags,
|
||||
const AAMDNodes &AAInfo) {
|
||||
assert(Chain.getValueType() == MVT::Other && "Invalid chain type");
|
||||
if (Alignment == 0) // Ensure that codegen never sees alignment 0
|
||||
Alignment = getEVTAlignment(Val.getValueType());
|
||||
|
||||
auto Flags = MachineMemOperand::MOStore;
|
||||
if (isVolatile)
|
||||
Flags |= MachineMemOperand::MOVolatile;
|
||||
if (isNonTemporal)
|
||||
Flags |= MachineMemOperand::MONonTemporal;
|
||||
MMOFlags |= MachineMemOperand::MOStore;
|
||||
assert((MMOFlags & MachineMemOperand::MOLoad) == 0);
|
||||
|
||||
if (PtrInfo.V.isNull())
|
||||
PtrInfo = InferPointerInfo(*this, Ptr);
|
||||
|
||||
MachineFunction &MF = getMachineFunction();
|
||||
MachineMemOperand *MMO =
|
||||
MF.getMachineMemOperand(PtrInfo, Flags,
|
||||
Val.getValueType().getStoreSize(), Alignment,
|
||||
AAInfo);
|
||||
|
||||
MachineMemOperand *MMO = MF.getMachineMemOperand(
|
||||
PtrInfo, MMOFlags, Val.getValueType().getStoreSize(), Alignment, AAInfo);
|
||||
return getStore(Chain, dl, Val, Ptr, MMO);
|
||||
}
|
||||
|
||||
|
@ -5232,28 +5219,23 @@ SDValue SelectionDAG::getStore(SDValue Chain, const SDLoc &dl, SDValue Val,
|
|||
|
||||
SDValue SelectionDAG::getTruncStore(SDValue Chain, const SDLoc &dl, SDValue Val,
|
||||
SDValue Ptr, MachinePointerInfo PtrInfo,
|
||||
EVT SVT, bool isVolatile,
|
||||
bool isNonTemporal, unsigned Alignment,
|
||||
EVT SVT, unsigned Alignment,
|
||||
MachineMemOperand::Flags MMOFlags,
|
||||
const AAMDNodes &AAInfo) {
|
||||
assert(Chain.getValueType() == MVT::Other &&
|
||||
"Invalid chain type");
|
||||
if (Alignment == 0) // Ensure that codegen never sees alignment 0
|
||||
Alignment = getEVTAlignment(SVT);
|
||||
|
||||
auto Flags = MachineMemOperand::MOStore;
|
||||
if (isVolatile)
|
||||
Flags |= MachineMemOperand::MOVolatile;
|
||||
if (isNonTemporal)
|
||||
Flags |= MachineMemOperand::MONonTemporal;
|
||||
MMOFlags |= MachineMemOperand::MOStore;
|
||||
assert((MMOFlags & MachineMemOperand::MOLoad) == 0);
|
||||
|
||||
if (PtrInfo.V.isNull())
|
||||
PtrInfo = InferPointerInfo(*this, Ptr);
|
||||
|
||||
MachineFunction &MF = getMachineFunction();
|
||||
MachineMemOperand *MMO =
|
||||
MF.getMachineMemOperand(PtrInfo, Flags, SVT.getStoreSize(), Alignment,
|
||||
AAInfo);
|
||||
|
||||
MachineMemOperand *MMO = MF.getMachineMemOperand(
|
||||
PtrInfo, MMOFlags, SVT.getStoreSize(), Alignment, AAInfo);
|
||||
return getTruncStore(Chain, dl, Val, Ptr, SVT, MMO);
|
||||
}
|
||||
|
||||
|
|
|
@ -1423,11 +1423,10 @@ void SelectionDAGBuilder::visitRet(const ReturnInst &I) {
|
|||
DAG.getIntPtrConstant(Offsets[i],
|
||||
getCurSDLoc()),
|
||||
&Flags);
|
||||
Chains[i] =
|
||||
DAG.getStore(Chain, getCurSDLoc(),
|
||||
SDValue(RetOp.getNode(), RetOp.getResNo() + i),
|
||||
// FIXME: better loc info would be nice.
|
||||
Add, MachinePointerInfo(), false, false, 0);
|
||||
Chains[i] = DAG.getStore(Chain, getCurSDLoc(),
|
||||
SDValue(RetOp.getNode(), RetOp.getResNo() + i),
|
||||
// FIXME: better loc info would be nice.
|
||||
Add, MachinePointerInfo());
|
||||
}
|
||||
|
||||
Chain = DAG.getNode(ISD::TokenFactor, getCurSDLoc(),
|
||||
|
@ -2046,8 +2045,8 @@ void SelectionDAGBuilder::visitSPDescriptorParent(StackProtectorDescriptor &SPD,
|
|||
// Generate code to load the content of the guard slot.
|
||||
SDValue StackSlot = DAG.getLoad(
|
||||
PtrTy, dl, DAG.getEntryNode(), StackSlotPtr,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI), true,
|
||||
false, false, Align);
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI), Align,
|
||||
MachineMemOperand::MOVolatile);
|
||||
|
||||
// Retrieve guard check function, nullptr if instrumentation is inlined.
|
||||
if (const Value *GuardCheck = TLI.getSSPStackGuardCheck(M)) {
|
||||
|
@ -2088,7 +2087,7 @@ void SelectionDAGBuilder::visitSPDescriptorParent(StackProtectorDescriptor &SPD,
|
|||
|
||||
Guard =
|
||||
DAG.getLoad(PtrTy, dl, Chain, GuardPtr, MachinePointerInfo(IRGuard, 0),
|
||||
true, false, false, Align);
|
||||
Align, MachineMemOperand::MOVolatile);
|
||||
}
|
||||
|
||||
// Perform the comparison via a subtract/getsetcc.
|
||||
|
@ -3534,10 +3533,17 @@ void SelectionDAGBuilder::visitLoad(const LoadInst &I) {
|
|||
PtrVT, Ptr,
|
||||
DAG.getConstant(Offsets[i], dl, PtrVT),
|
||||
&Flags);
|
||||
SDValue L = DAG.getLoad(ValueVTs[i], dl, Root,
|
||||
A, MachinePointerInfo(SV, Offsets[i]), isVolatile,
|
||||
isNonTemporal, isInvariant, Alignment, AAInfo,
|
||||
Ranges);
|
||||
auto MMOFlags = MachineMemOperand::MONone;
|
||||
if (isVolatile)
|
||||
MMOFlags |= MachineMemOperand::MOVolatile;
|
||||
if (isNonTemporal)
|
||||
MMOFlags |= MachineMemOperand::MONonTemporal;
|
||||
if (isInvariant)
|
||||
MMOFlags |= MachineMemOperand::MOInvariant;
|
||||
|
||||
SDValue L = DAG.getLoad(ValueVTs[i], dl, Root, A,
|
||||
MachinePointerInfo(SV, Offsets[i]), Alignment,
|
||||
MMOFlags, AAInfo, Ranges);
|
||||
|
||||
Values[i] = L;
|
||||
Chains[ChainI] = L.getValue(1);
|
||||
|
@ -3652,15 +3658,18 @@ void SelectionDAGBuilder::visitStore(const StoreInst &I) {
|
|||
|
||||
SDValue Root = getRoot();
|
||||
SmallVector<SDValue, 4> Chains(std::min(MaxParallelChains, NumValues));
|
||||
EVT PtrVT = Ptr.getValueType();
|
||||
bool isVolatile = I.isVolatile();
|
||||
bool isNonTemporal = I.getMetadata(LLVMContext::MD_nontemporal) != nullptr;
|
||||
unsigned Alignment = I.getAlignment();
|
||||
SDLoc dl = getCurSDLoc();
|
||||
|
||||
EVT PtrVT = Ptr.getValueType();
|
||||
unsigned Alignment = I.getAlignment();
|
||||
AAMDNodes AAInfo;
|
||||
I.getAAMetadata(AAInfo);
|
||||
|
||||
auto MMOFlags = MachineMemOperand::MONone;
|
||||
if (I.isVolatile())
|
||||
MMOFlags |= MachineMemOperand::MOVolatile;
|
||||
if (I.getMetadata(LLVMContext::MD_nontemporal) != nullptr)
|
||||
MMOFlags |= MachineMemOperand::MONonTemporal;
|
||||
|
||||
// An aggregate load cannot wrap around the address space, so offsets to its
|
||||
// parts don't wrap either.
|
||||
SDNodeFlags Flags;
|
||||
|
@ -3677,10 +3686,9 @@ void SelectionDAGBuilder::visitStore(const StoreInst &I) {
|
|||
}
|
||||
SDValue Add = DAG.getNode(ISD::ADD, dl, PtrVT, Ptr,
|
||||
DAG.getConstant(Offsets[i], dl, PtrVT), &Flags);
|
||||
SDValue St = DAG.getStore(Root, dl,
|
||||
SDValue(Src.getNode(), Src.getResNo() + i),
|
||||
Add, MachinePointerInfo(PtrV, Offsets[i]),
|
||||
isVolatile, isNonTemporal, Alignment, AAInfo);
|
||||
SDValue St = DAG.getStore(
|
||||
Root, dl, SDValue(Src.getNode(), Src.getResNo() + i), Add,
|
||||
MachinePointerInfo(PtrV, Offsets[i]), Alignment, MMOFlags, AAInfo);
|
||||
Chains[ChainI] = St;
|
||||
}
|
||||
|
||||
|
@ -5358,9 +5366,9 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) {
|
|||
} else {
|
||||
const Value *Global = TLI.getSDagStackGuard(M);
|
||||
unsigned Align = DL->getPrefTypeAlignment(Global->getType());
|
||||
Res =
|
||||
DAG.getLoad(PtrTy, sdl, Chain, getValue(Global),
|
||||
MachinePointerInfo(Global, 0), true, false, false, Align);
|
||||
Res = DAG.getLoad(PtrTy, sdl, Chain, getValue(Global),
|
||||
MachinePointerInfo(Global, 0), Align,
|
||||
MachineMemOperand::MOVolatile);
|
||||
}
|
||||
DAG.setRoot(Chain);
|
||||
setValue(&I, Res);
|
||||
|
@ -5388,7 +5396,7 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) {
|
|||
// Store the stack protector onto the stack.
|
||||
Res = DAG.getStore(Chain, sdl, Src, FIN, MachinePointerInfo::getFixedStack(
|
||||
DAG.getMachineFunction(), FI),
|
||||
true, false, 0);
|
||||
/* Alignment = */ 0, MachineMemOperand::MOVolatile);
|
||||
setValue(&I, Res);
|
||||
DAG.setRoot(Res);
|
||||
return nullptr;
|
||||
|
@ -5881,9 +5889,7 @@ static SDValue getMemCmpLoad(const Value *PtrVal, MVT LoadVT,
|
|||
SDValue Ptr = Builder.getValue(PtrVal);
|
||||
SDValue LoadVal = Builder.DAG.getLoad(LoadVT, Builder.getCurSDLoc(), Root,
|
||||
Ptr, MachinePointerInfo(PtrVal),
|
||||
false /*volatile*/,
|
||||
false /*nontemporal*/,
|
||||
false /*isinvariant*/, 1 /* align=1 */);
|
||||
/* Alignment = */ 1);
|
||||
|
||||
if (!ConstantMemory)
|
||||
Builder.PendingLoads.push_back(LoadVal.getValue(1));
|
||||
|
@ -6722,8 +6728,7 @@ void SelectionDAGBuilder::visitInlineAsm(ImmutableCallSite CS) {
|
|||
DAG.getFrameIndex(SSFI, TLI.getPointerTy(DAG.getDataLayout()));
|
||||
Chain = DAG.getStore(
|
||||
Chain, getCurSDLoc(), OpInfo.CallOperand, StackSlot,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), SSFI),
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), SSFI));
|
||||
OpInfo.CallOperand = StackSlot;
|
||||
}
|
||||
|
||||
|
@ -7082,11 +7087,9 @@ void SelectionDAGBuilder::visitInlineAsm(ImmutableCallSite CS) {
|
|||
// Emit the non-flagged stores from the physregs.
|
||||
SmallVector<SDValue, 8> OutChains;
|
||||
for (unsigned i = 0, e = StoresToEmit.size(); i != e; ++i) {
|
||||
SDValue Val = DAG.getStore(Chain, getCurSDLoc(),
|
||||
StoresToEmit[i].first,
|
||||
SDValue Val = DAG.getStore(Chain, getCurSDLoc(), StoresToEmit[i].first,
|
||||
getValue(StoresToEmit[i].second),
|
||||
MachinePointerInfo(StoresToEmit[i].second),
|
||||
false, false, 0);
|
||||
MachinePointerInfo(StoresToEmit[i].second));
|
||||
OutChains.push_back(Val);
|
||||
}
|
||||
|
||||
|
@ -7738,7 +7741,7 @@ TargetLowering::LowerCallTo(TargetLowering::CallLoweringInfo &CLI) const {
|
|||
RetTys[i], CLI.DL, CLI.Chain, Add,
|
||||
MachinePointerInfo::getFixedStack(CLI.DAG.getMachineFunction(),
|
||||
DemoteStackIdx, Offsets[i]),
|
||||
false, false, false, 1);
|
||||
/* Alignment = */ 1);
|
||||
ReturnValues[i] = L;
|
||||
Chains[i] = L.getValue(1);
|
||||
}
|
||||
|
|
|
@ -358,8 +358,7 @@ spillIncomingStatepointValue(SDValue Incoming, SDValue Chain,
|
|||
|
||||
Chain = Builder.DAG.getStore(Chain, Builder.getCurSDLoc(), Incoming, Loc,
|
||||
MachinePointerInfo::getFixedStack(
|
||||
Builder.DAG.getMachineFunction(), Index),
|
||||
false, false, 0);
|
||||
Builder.DAG.getMachineFunction(), Index));
|
||||
|
||||
Builder.StatepointLowering.setLocation(Incoming, Loc);
|
||||
}
|
||||
|
@ -927,8 +926,7 @@ void SelectionDAGBuilder::visitGCRelocate(const GCRelocateInst &Relocate) {
|
|||
SDValue SpillLoad =
|
||||
DAG.getLoad(SpillSlot.getValueType(), getCurSDLoc(), Chain, SpillSlot,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(),
|
||||
*DerivedPtrLocation),
|
||||
false, false, false, 0);
|
||||
*DerivedPtrLocation));
|
||||
|
||||
// Again, be conservative, don't emit pending loads
|
||||
DAG.setRoot(SpillLoad.getValue(1));
|
||||
|
|
|
@ -1553,9 +1553,9 @@ SDValue TargetLowering::SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
|
|||
Ptr = DAG.getNode(ISD::ADD, dl, PtrType, Lod->getBasePtr(),
|
||||
DAG.getConstant(bestOffset, dl, PtrType));
|
||||
unsigned NewAlign = MinAlign(Lod->getAlignment(), bestOffset);
|
||||
SDValue NewLoad = DAG.getLoad(newVT, dl, Lod->getChain(), Ptr,
|
||||
Lod->getPointerInfo().getWithOffset(bestOffset),
|
||||
false, false, false, NewAlign);
|
||||
SDValue NewLoad = DAG.getLoad(
|
||||
newVT, dl, Lod->getChain(), Ptr,
|
||||
Lod->getPointerInfo().getWithOffset(bestOffset), NewAlign);
|
||||
return DAG.getSetCC(dl, VT,
|
||||
DAG.getNode(ISD::AND, dl, newVT, NewLoad,
|
||||
DAG.getConstant(bestMask.trunc(bestWidth),
|
||||
|
@ -3166,12 +3166,11 @@ SDValue TargetLowering::scalarizeVectorLoad(LoadSDNode *LD,
|
|||
SmallVector<SDValue, 8> LoadChains;
|
||||
|
||||
for (unsigned Idx = 0; Idx < NumElem; ++Idx) {
|
||||
SDValue ScalarLoad = DAG.getExtLoad(
|
||||
ExtType, SL, DstEltVT,
|
||||
Chain, BasePTR, LD->getPointerInfo().getWithOffset(Idx * Stride),
|
||||
SrcEltVT,
|
||||
LD->isVolatile(), LD->isNonTemporal(), LD->isInvariant(),
|
||||
MinAlign(LD->getAlignment(), Idx * Stride), LD->getAAInfo());
|
||||
SDValue ScalarLoad =
|
||||
DAG.getExtLoad(ExtType, SL, DstEltVT, Chain, BasePTR,
|
||||
LD->getPointerInfo().getWithOffset(Idx * Stride),
|
||||
SrcEltVT, MinAlign(LD->getAlignment(), Idx * Stride),
|
||||
LD->getMemOperand()->getFlags(), LD->getAAInfo());
|
||||
|
||||
BasePTR = DAG.getNode(ISD::ADD, SL, PtrVT, BasePTR,
|
||||
DAG.getConstant(Stride, SL, PtrVT));
|
||||
|
@ -3198,11 +3197,6 @@ SDValue TargetLowering::scalarizeVectorStore(StoreSDNode *ST,
|
|||
SDValue Value = ST->getValue();
|
||||
EVT StVT = ST->getMemoryVT();
|
||||
|
||||
unsigned Alignment = ST->getAlignment();
|
||||
bool isVolatile = ST->isVolatile();
|
||||
bool isNonTemporal = ST->isNonTemporal();
|
||||
AAMDNodes AAInfo = ST->getAAInfo();
|
||||
|
||||
// The type of the data we want to save
|
||||
EVT RegVT = Value.getValueType();
|
||||
EVT RegSclVT = RegVT.getScalarType();
|
||||
|
@ -3229,10 +3223,9 @@ SDValue TargetLowering::scalarizeVectorStore(StoreSDNode *ST,
|
|||
|
||||
// This scalar TruncStore may be illegal, but we legalize it later.
|
||||
SDValue Store = DAG.getTruncStore(
|
||||
Chain, SL, Elt, Ptr,
|
||||
ST->getPointerInfo().getWithOffset(Idx * Stride), MemSclVT,
|
||||
isVolatile, isNonTemporal, MinAlign(Alignment, Idx * Stride),
|
||||
AAInfo);
|
||||
Chain, SL, Elt, Ptr, ST->getPointerInfo().getWithOffset(Idx * Stride),
|
||||
MemSclVT, MinAlign(ST->getAlignment(), Idx * Stride),
|
||||
ST->getMemOperand()->getFlags(), ST->getAAInfo());
|
||||
|
||||
Stores.push_back(Store);
|
||||
}
|
||||
|
@ -3293,15 +3286,13 @@ TargetLowering::expandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG) const {
|
|||
// Do all but one copies using the full register width.
|
||||
for (unsigned i = 1; i < NumRegs; i++) {
|
||||
// Load one integer register's worth from the original location.
|
||||
SDValue Load = DAG.getLoad(RegVT, dl, Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(Offset),
|
||||
LD->isVolatile(), LD->isNonTemporal(),
|
||||
LD->isInvariant(),
|
||||
MinAlign(LD->getAlignment(), Offset),
|
||||
LD->getAAInfo());
|
||||
SDValue Load = DAG.getLoad(
|
||||
RegVT, dl, Chain, Ptr, LD->getPointerInfo().getWithOffset(Offset),
|
||||
MinAlign(LD->getAlignment(), Offset), LD->getMemOperand()->getFlags(),
|
||||
LD->getAAInfo());
|
||||
// Follow the load with a store to the stack slot. Remember the store.
|
||||
Stores.push_back(DAG.getStore(Load.getValue(1), dl, Load, StackPtr,
|
||||
MachinePointerInfo(), false, false, 0));
|
||||
MachinePointerInfo()));
|
||||
// Increment the pointers.
|
||||
Offset += RegBytes;
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, PtrVT, Ptr, PtrIncrement);
|
||||
|
@ -3312,27 +3303,23 @@ TargetLowering::expandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG) const {
|
|||
// The last copy may be partial. Do an extending load.
|
||||
EVT MemVT = EVT::getIntegerVT(*DAG.getContext(),
|
||||
8 * (LoadedBytes - Offset));
|
||||
SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, RegVT, Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(Offset),
|
||||
MemVT, LD->isVolatile(),
|
||||
LD->isNonTemporal(),
|
||||
LD->isInvariant(),
|
||||
MinAlign(LD->getAlignment(), Offset),
|
||||
LD->getAAInfo());
|
||||
SDValue Load =
|
||||
DAG.getExtLoad(ISD::EXTLOAD, dl, RegVT, Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(Offset), MemVT,
|
||||
MinAlign(LD->getAlignment(), Offset),
|
||||
LD->getMemOperand()->getFlags(), LD->getAAInfo());
|
||||
// Follow the load with a store to the stack slot. Remember the store.
|
||||
// On big-endian machines this requires a truncating store to ensure
|
||||
// that the bits end up in the right place.
|
||||
Stores.push_back(DAG.getTruncStore(Load.getValue(1), dl, Load, StackPtr,
|
||||
MachinePointerInfo(), MemVT,
|
||||
false, false, 0));
|
||||
MachinePointerInfo(), MemVT));
|
||||
|
||||
// The order of the stores doesn't matter - say it with a TokenFactor.
|
||||
SDValue TF = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Stores);
|
||||
|
||||
// Finally, perform the original load only redirected to the stack slot.
|
||||
Load = DAG.getExtLoad(LD->getExtensionType(), dl, VT, TF, StackBase,
|
||||
MachinePointerInfo(), LoadedVT, false,false, false,
|
||||
0);
|
||||
MachinePointerInfo(), LoadedVT);
|
||||
|
||||
// Callers expect a MERGE_VALUES node.
|
||||
return std::make_pair(Load, TF);
|
||||
|
@ -3360,28 +3347,24 @@ TargetLowering::expandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG) const {
|
|||
SDValue Lo, Hi;
|
||||
if (DAG.getDataLayout().isLittleEndian()) {
|
||||
Lo = DAG.getExtLoad(ISD::ZEXTLOAD, dl, VT, Chain, Ptr, LD->getPointerInfo(),
|
||||
NewLoadedVT, LD->isVolatile(),
|
||||
LD->isNonTemporal(), LD->isInvariant(), Alignment,
|
||||
NewLoadedVT, Alignment, LD->getMemOperand()->getFlags(),
|
||||
LD->getAAInfo());
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
|
||||
DAG.getConstant(IncrementSize, dl, Ptr.getValueType()));
|
||||
Hi = DAG.getExtLoad(HiExtType, dl, VT, Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(IncrementSize),
|
||||
NewLoadedVT, LD->isVolatile(),
|
||||
LD->isNonTemporal(),LD->isInvariant(),
|
||||
MinAlign(Alignment, IncrementSize), LD->getAAInfo());
|
||||
NewLoadedVT, MinAlign(Alignment, IncrementSize),
|
||||
LD->getMemOperand()->getFlags(), LD->getAAInfo());
|
||||
} else {
|
||||
Hi = DAG.getExtLoad(HiExtType, dl, VT, Chain, Ptr, LD->getPointerInfo(),
|
||||
NewLoadedVT, LD->isVolatile(),
|
||||
LD->isNonTemporal(), LD->isInvariant(), Alignment,
|
||||
NewLoadedVT, Alignment, LD->getMemOperand()->getFlags(),
|
||||
LD->getAAInfo());
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
|
||||
DAG.getConstant(IncrementSize, dl, Ptr.getValueType()));
|
||||
Lo = DAG.getExtLoad(ISD::ZEXTLOAD, dl, VT, Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(IncrementSize),
|
||||
NewLoadedVT, LD->isVolatile(),
|
||||
LD->isNonTemporal(), LD->isInvariant(),
|
||||
MinAlign(Alignment, IncrementSize), LD->getAAInfo());
|
||||
NewLoadedVT, MinAlign(Alignment, IncrementSize),
|
||||
LD->getMemOperand()->getFlags(), LD->getAAInfo());
|
||||
}
|
||||
|
||||
// aggregate the two parts
|
||||
|
@ -3423,7 +3406,7 @@ SDValue TargetLowering::expandUnalignedStore(StoreSDNode *ST,
|
|||
// FIXME: Does not handle truncating floating point stores!
|
||||
SDValue Result = DAG.getNode(ISD::BITCAST, dl, intVT, Val);
|
||||
Result = DAG.getStore(Chain, dl, Result, Ptr, ST->getPointerInfo(),
|
||||
ST->isVolatile(), ST->isNonTemporal(), Alignment);
|
||||
Alignment, ST->getMemOperand()->getFlags());
|
||||
return Result;
|
||||
}
|
||||
// Do a (aligned) store to a stack slot, then copy from the stack slot
|
||||
|
@ -3442,9 +3425,8 @@ SDValue TargetLowering::expandUnalignedStore(StoreSDNode *ST,
|
|||
SDValue StackPtr = DAG.CreateStackTemporary(StoredVT, RegVT);
|
||||
|
||||
// Perform the original store, only redirected to the stack slot.
|
||||
SDValue Store = DAG.getTruncStore(Chain, dl,
|
||||
Val, StackPtr, MachinePointerInfo(),
|
||||
StoredVT, false, false, 0);
|
||||
SDValue Store = DAG.getTruncStore(Chain, dl, Val, StackPtr,
|
||||
MachinePointerInfo(), StoredVT);
|
||||
|
||||
EVT StackPtrVT = StackPtr.getValueType();
|
||||
|
||||
|
@ -3456,14 +3438,13 @@ SDValue TargetLowering::expandUnalignedStore(StoreSDNode *ST,
|
|||
// Do all but one copies using the full register width.
|
||||
for (unsigned i = 1; i < NumRegs; i++) {
|
||||
// Load one integer register's worth from the stack slot.
|
||||
SDValue Load = DAG.getLoad(RegVT, dl, Store, StackPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Load =
|
||||
DAG.getLoad(RegVT, dl, Store, StackPtr, MachinePointerInfo());
|
||||
// Store it to the final location. Remember the store.
|
||||
Stores.push_back(DAG.getStore(Load.getValue(1), dl, Load, Ptr,
|
||||
ST->getPointerInfo().getWithOffset(Offset),
|
||||
ST->isVolatile(), ST->isNonTemporal(),
|
||||
MinAlign(ST->getAlignment(), Offset)));
|
||||
ST->getPointerInfo().getWithOffset(Offset),
|
||||
MinAlign(ST->getAlignment(), Offset),
|
||||
ST->getMemOperand()->getFlags()));
|
||||
// Increment the pointers.
|
||||
Offset += RegBytes;
|
||||
StackPtr = DAG.getNode(ISD::ADD, dl, StackPtrVT,
|
||||
|
@ -3479,16 +3460,13 @@ SDValue TargetLowering::expandUnalignedStore(StoreSDNode *ST,
|
|||
|
||||
// Load from the stack slot.
|
||||
SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, RegVT, Store, StackPtr,
|
||||
MachinePointerInfo(),
|
||||
MemVT, false, false, false, 0);
|
||||
MachinePointerInfo(), MemVT);
|
||||
|
||||
Stores.push_back(DAG.getTruncStore(Load.getValue(1), dl, Load, Ptr,
|
||||
ST->getPointerInfo()
|
||||
.getWithOffset(Offset),
|
||||
MemVT, ST->isVolatile(),
|
||||
ST->isNonTemporal(),
|
||||
MinAlign(ST->getAlignment(), Offset),
|
||||
ST->getAAInfo()));
|
||||
Stores.push_back(
|
||||
DAG.getTruncStore(Load.getValue(1), dl, Load, Ptr,
|
||||
ST->getPointerInfo().getWithOffset(Offset), MemVT,
|
||||
MinAlign(ST->getAlignment(), Offset),
|
||||
ST->getMemOperand()->getFlags(), ST->getAAInfo()));
|
||||
// The order of the stores doesn't matter - say it with a TokenFactor.
|
||||
SDValue Result = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Stores);
|
||||
return Result;
|
||||
|
@ -3513,8 +3491,8 @@ SDValue TargetLowering::expandUnalignedStore(StoreSDNode *ST,
|
|||
SDValue Store1, Store2;
|
||||
Store1 = DAG.getTruncStore(Chain, dl,
|
||||
DAG.getDataLayout().isLittleEndian() ? Lo : Hi,
|
||||
Ptr, ST->getPointerInfo(), NewStoredVT,
|
||||
ST->isVolatile(), ST->isNonTemporal(), Alignment);
|
||||
Ptr, ST->getPointerInfo(), NewStoredVT, Alignment,
|
||||
ST->getMemOperand()->getFlags());
|
||||
|
||||
EVT PtrVT = Ptr.getValueType();
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, PtrVT, Ptr,
|
||||
|
@ -3522,8 +3500,8 @@ SDValue TargetLowering::expandUnalignedStore(StoreSDNode *ST,
|
|||
Alignment = MinAlign(Alignment, IncrementSize);
|
||||
Store2 = DAG.getTruncStore(
|
||||
Chain, dl, DAG.getDataLayout().isLittleEndian() ? Hi : Lo, Ptr,
|
||||
ST->getPointerInfo().getWithOffset(IncrementSize), NewStoredVT,
|
||||
ST->isVolatile(), ST->isNonTemporal(), Alignment, ST->getAAInfo());
|
||||
ST->getPointerInfo().getWithOffset(IncrementSize), NewStoredVT, Alignment,
|
||||
ST->getMemOperand()->getFlags(), ST->getAAInfo());
|
||||
|
||||
SDValue Result =
|
||||
DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Store1, Store2);
|
||||
|
|
|
@ -2587,7 +2587,7 @@ SDValue AArch64TargetLowering::LowerFormalArguments(
|
|||
ArgValue = DAG.getExtLoad(
|
||||
ExtType, DL, VA.getLocVT(), Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI),
|
||||
MemVT, false, false, false, 0);
|
||||
MemVT);
|
||||
|
||||
InVals.push_back(ArgValue);
|
||||
}
|
||||
|
@ -2662,8 +2662,7 @@ void AArch64TargetLowering::saveVarArgRegisters(CCState &CCInfo,
|
|||
SDValue Val = DAG.getCopyFromReg(Chain, DL, VReg, MVT::i64);
|
||||
SDValue Store = DAG.getStore(
|
||||
Val.getValue(1), DL, Val, FIN,
|
||||
MachinePointerInfo::getStack(DAG.getMachineFunction(), i * 8), false,
|
||||
false, 0);
|
||||
MachinePointerInfo::getStack(DAG.getMachineFunction(), i * 8));
|
||||
MemOps.push_back(Store);
|
||||
FIN =
|
||||
DAG.getNode(ISD::ADD, DL, PtrVT, FIN, DAG.getConstant(8, DL, PtrVT));
|
||||
|
@ -2692,8 +2691,7 @@ void AArch64TargetLowering::saveVarArgRegisters(CCState &CCInfo,
|
|||
|
||||
SDValue Store = DAG.getStore(
|
||||
Val.getValue(1), DL, Val, FIN,
|
||||
MachinePointerInfo::getStack(DAG.getMachineFunction(), i * 16),
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getStack(DAG.getMachineFunction(), i * 16));
|
||||
MemOps.push_back(Store);
|
||||
FIN = DAG.getNode(ISD::ADD, DL, PtrVT, FIN,
|
||||
DAG.getConstant(16, DL, PtrVT));
|
||||
|
@ -3150,8 +3148,7 @@ AArch64TargetLowering::LowerCall(CallLoweringInfo &CLI,
|
|||
VA.getValVT() == MVT::i16)
|
||||
Arg = DAG.getNode(ISD::TRUNCATE, DL, VA.getValVT(), Arg);
|
||||
|
||||
SDValue Store =
|
||||
DAG.getStore(Chain, DL, Arg, DstAddr, DstInfo, false, false, 0);
|
||||
SDValue Store = DAG.getStore(Chain, DL, Arg, DstAddr, DstInfo);
|
||||
MemOpChains.push_back(Store);
|
||||
}
|
||||
}
|
||||
|
@ -3442,8 +3439,9 @@ AArch64TargetLowering::LowerDarwinGlobalTLSAddress(SDValue Op,
|
|||
SDValue Chain = DAG.getEntryNode();
|
||||
SDValue FuncTLVGet =
|
||||
DAG.getLoad(MVT::i64, DL, Chain, DescAddr,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()), false,
|
||||
true, true, 8);
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()),
|
||||
/* Alignment = */ 8, MachineMemOperand::MONonTemporal |
|
||||
MachineMemOperand::MOInvariant);
|
||||
Chain = FuncTLVGet.getValue(1);
|
||||
|
||||
MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo();
|
||||
|
@ -4216,7 +4214,7 @@ SDValue AArch64TargetLowering::LowerDarwin_VASTART(SDValue Op,
|
|||
getPointerTy(DAG.getDataLayout()));
|
||||
const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue();
|
||||
return DAG.getStore(Op.getOperand(0), DL, FR, Op.getOperand(1),
|
||||
MachinePointerInfo(SV), false, false, 0);
|
||||
MachinePointerInfo(SV));
|
||||
}
|
||||
|
||||
SDValue AArch64TargetLowering::LowerAAPCS_VASTART(SDValue Op,
|
||||
|
@ -4236,7 +4234,7 @@ SDValue AArch64TargetLowering::LowerAAPCS_VASTART(SDValue Op,
|
|||
// void *__stack at offset 0
|
||||
SDValue Stack = DAG.getFrameIndex(FuncInfo->getVarArgsStackIndex(), PtrVT);
|
||||
MemOps.push_back(DAG.getStore(Chain, DL, Stack, VAList,
|
||||
MachinePointerInfo(SV), false, false, 8));
|
||||
MachinePointerInfo(SV), /* Alignment = */ 8));
|
||||
|
||||
// void *__gr_top at offset 8
|
||||
int GPRSize = FuncInfo->getVarArgsGPRSize();
|
||||
|
@ -4251,7 +4249,8 @@ SDValue AArch64TargetLowering::LowerAAPCS_VASTART(SDValue Op,
|
|||
DAG.getConstant(GPRSize, DL, PtrVT));
|
||||
|
||||
MemOps.push_back(DAG.getStore(Chain, DL, GRTop, GRTopAddr,
|
||||
MachinePointerInfo(SV, 8), false, false, 8));
|
||||
MachinePointerInfo(SV, 8),
|
||||
/* Alignment = */ 8));
|
||||
}
|
||||
|
||||
// void *__vr_top at offset 16
|
||||
|
@ -4266,24 +4265,23 @@ SDValue AArch64TargetLowering::LowerAAPCS_VASTART(SDValue Op,
|
|||
DAG.getConstant(FPRSize, DL, PtrVT));
|
||||
|
||||
MemOps.push_back(DAG.getStore(Chain, DL, VRTop, VRTopAddr,
|
||||
MachinePointerInfo(SV, 16), false, false, 8));
|
||||
MachinePointerInfo(SV, 16),
|
||||
/* Alignment = */ 8));
|
||||
}
|
||||
|
||||
// int __gr_offs at offset 24
|
||||
SDValue GROffsAddr =
|
||||
DAG.getNode(ISD::ADD, DL, PtrVT, VAList, DAG.getConstant(24, DL, PtrVT));
|
||||
MemOps.push_back(DAG.getStore(Chain, DL,
|
||||
DAG.getConstant(-GPRSize, DL, MVT::i32),
|
||||
GROffsAddr, MachinePointerInfo(SV, 24), false,
|
||||
false, 4));
|
||||
MemOps.push_back(DAG.getStore(
|
||||
Chain, DL, DAG.getConstant(-GPRSize, DL, MVT::i32), GROffsAddr,
|
||||
MachinePointerInfo(SV, 24), /* Alignment = */ 4));
|
||||
|
||||
// int __vr_offs at offset 28
|
||||
SDValue VROffsAddr =
|
||||
DAG.getNode(ISD::ADD, DL, PtrVT, VAList, DAG.getConstant(28, DL, PtrVT));
|
||||
MemOps.push_back(DAG.getStore(Chain, DL,
|
||||
DAG.getConstant(-FPRSize, DL, MVT::i32),
|
||||
VROffsAddr, MachinePointerInfo(SV, 28), false,
|
||||
false, 4));
|
||||
MemOps.push_back(DAG.getStore(
|
||||
Chain, DL, DAG.getConstant(-FPRSize, DL, MVT::i32), VROffsAddr,
|
||||
MachinePointerInfo(SV, 28), /* Alignment = */ 4));
|
||||
|
||||
return DAG.getNode(ISD::TokenFactor, DL, MVT::Other, MemOps);
|
||||
}
|
||||
|
@ -4322,8 +4320,7 @@ SDValue AArch64TargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG) const {
|
|||
unsigned Align = Op.getConstantOperandVal(3);
|
||||
auto PtrVT = getPointerTy(DAG.getDataLayout());
|
||||
|
||||
SDValue VAList = DAG.getLoad(PtrVT, DL, Chain, Addr, MachinePointerInfo(V),
|
||||
false, false, false, 0);
|
||||
SDValue VAList = DAG.getLoad(PtrVT, DL, Chain, Addr, MachinePointerInfo(V));
|
||||
Chain = VAList.getValue(1);
|
||||
|
||||
if (Align > 8) {
|
||||
|
@ -4353,14 +4350,14 @@ SDValue AArch64TargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG) const {
|
|||
SDValue VANext = DAG.getNode(ISD::ADD, DL, PtrVT, VAList,
|
||||
DAG.getConstant(ArgSize, DL, PtrVT));
|
||||
// Store the incremented VAList to the legalized pointer
|
||||
SDValue APStore = DAG.getStore(Chain, DL, VANext, Addr, MachinePointerInfo(V),
|
||||
false, false, 0);
|
||||
SDValue APStore =
|
||||
DAG.getStore(Chain, DL, VANext, Addr, MachinePointerInfo(V));
|
||||
|
||||
// Load the actual argument out of the pointer VAList
|
||||
if (NeedFPTrunc) {
|
||||
// Load the value as an f64.
|
||||
SDValue WideFP = DAG.getLoad(MVT::f64, DL, APStore, VAList,
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
SDValue WideFP =
|
||||
DAG.getLoad(MVT::f64, DL, APStore, VAList, MachinePointerInfo());
|
||||
// Round the value down to an f32.
|
||||
SDValue NarrowFP = DAG.getNode(ISD::FP_ROUND, DL, VT, WideFP.getValue(0),
|
||||
DAG.getIntPtrConstant(1, DL));
|
||||
|
@ -4369,8 +4366,7 @@ SDValue AArch64TargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG) const {
|
|||
return DAG.getMergeValues(Ops, DL);
|
||||
}
|
||||
|
||||
return DAG.getLoad(VT, DL, APStore, VAList, MachinePointerInfo(), false,
|
||||
false, false, 0);
|
||||
return DAG.getLoad(VT, DL, APStore, VAList, MachinePointerInfo());
|
||||
}
|
||||
|
||||
SDValue AArch64TargetLowering::LowerFRAMEADDR(SDValue Op,
|
||||
|
@ -4385,7 +4381,7 @@ SDValue AArch64TargetLowering::LowerFRAMEADDR(SDValue Op,
|
|||
DAG.getCopyFromReg(DAG.getEntryNode(), DL, AArch64::FP, VT);
|
||||
while (Depth--)
|
||||
FrameAddr = DAG.getLoad(VT, DL, DAG.getEntryNode(), FrameAddr,
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
MachinePointerInfo());
|
||||
return FrameAddr;
|
||||
}
|
||||
|
||||
|
@ -4416,7 +4412,7 @@ SDValue AArch64TargetLowering::LowerRETURNADDR(SDValue Op,
|
|||
SDValue Offset = DAG.getConstant(8, DL, getPointerTy(DAG.getDataLayout()));
|
||||
return DAG.getLoad(VT, DL, DAG.getEntryNode(),
|
||||
DAG.getNode(ISD::ADD, DL, VT, FrameAddr, Offset),
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
MachinePointerInfo());
|
||||
}
|
||||
|
||||
// Return LR, which contains the return address. Mark it an implicit live-in.
|
||||
|
@ -7664,9 +7660,8 @@ static SDValue performIntToFpCombine(SDNode *N, SelectionDAG &DAG,
|
|||
!cast<LoadSDNode>(N0)->isVolatile()) {
|
||||
LoadSDNode *LN0 = cast<LoadSDNode>(N0);
|
||||
SDValue Load = DAG.getLoad(VT, SDLoc(N), LN0->getChain(), LN0->getBasePtr(),
|
||||
LN0->getPointerInfo(), LN0->isVolatile(),
|
||||
LN0->isNonTemporal(), LN0->isInvariant(),
|
||||
LN0->getAlignment());
|
||||
LN0->getPointerInfo(), LN0->getAlignment(),
|
||||
LN0->getMemOperand()->getFlags());
|
||||
|
||||
// Make sure successors of the original load stay after it by updating them
|
||||
// to use the new Chain.
|
||||
|
@ -8721,15 +8716,15 @@ static SDValue replaceSplatVectorStore(SelectionDAG &DAG, StoreSDNode *St) {
|
|||
SDValue BasePtr = St->getBasePtr();
|
||||
SDValue NewST1 =
|
||||
DAG.getStore(St->getChain(), DL, SplatVal, BasePtr, St->getPointerInfo(),
|
||||
St->isVolatile(), St->isNonTemporal(), St->getAlignment());
|
||||
St->getAlignment(), St->getMemOperand()->getFlags());
|
||||
|
||||
unsigned Offset = EltOffset;
|
||||
while (--NumVecElts) {
|
||||
SDValue OffsetPtr = DAG.getNode(ISD::ADD, DL, MVT::i64, BasePtr,
|
||||
DAG.getConstant(Offset, DL, MVT::i64));
|
||||
NewST1 = DAG.getStore(NewST1.getValue(0), DL, SplatVal, OffsetPtr,
|
||||
St->getPointerInfo(), St->isVolatile(),
|
||||
St->isNonTemporal(), Alignment);
|
||||
St->getPointerInfo(), Alignment,
|
||||
St->getMemOperand()->getFlags());
|
||||
Offset += EltOffset;
|
||||
}
|
||||
return NewST1;
|
||||
|
@ -8791,12 +8786,12 @@ static SDValue split16BStores(SDNode *N, TargetLowering::DAGCombinerInfo &DCI,
|
|||
SDValue BasePtr = S->getBasePtr();
|
||||
SDValue NewST1 =
|
||||
DAG.getStore(S->getChain(), DL, SubVector0, BasePtr, S->getPointerInfo(),
|
||||
S->isVolatile(), S->isNonTemporal(), S->getAlignment());
|
||||
S->getAlignment(), S->getMemOperand()->getFlags());
|
||||
SDValue OffsetPtr = DAG.getNode(ISD::ADD, DL, MVT::i64, BasePtr,
|
||||
DAG.getConstant(8, DL, MVT::i64));
|
||||
return DAG.getStore(NewST1.getValue(0), DL, SubVector1, OffsetPtr,
|
||||
S->getPointerInfo(), S->isVolatile(), S->isNonTemporal(),
|
||||
S->getAlignment());
|
||||
S->getPointerInfo(), S->getAlignment(),
|
||||
S->getMemOperand()->getFlags());
|
||||
}
|
||||
|
||||
/// Target-specific DAG combine function for post-increment LD1 (lane) and
|
||||
|
|
|
@ -768,16 +768,16 @@ SDValue AMDGPUTargetLowering::LowerConstantInitializer(const Constant* Init,
|
|||
EVT VT = EVT::getEVT(InitTy);
|
||||
PointerType *PtrTy = PointerType::get(InitTy, AMDGPUAS::PRIVATE_ADDRESS);
|
||||
return DAG.getStore(Chain, DL, DAG.getConstant(*CI, DL, VT), InitPtr,
|
||||
MachinePointerInfo(UndefValue::get(PtrTy)), false,
|
||||
false, TD.getPrefTypeAlignment(InitTy));
|
||||
MachinePointerInfo(UndefValue::get(PtrTy)),
|
||||
TD.getPrefTypeAlignment(InitTy));
|
||||
}
|
||||
|
||||
if (const ConstantFP *CFP = dyn_cast<ConstantFP>(Init)) {
|
||||
EVT VT = EVT::getEVT(CFP->getType());
|
||||
PointerType *PtrTy = PointerType::get(CFP->getType(), 0);
|
||||
return DAG.getStore(Chain, DL, DAG.getConstantFP(*CFP, DL, VT), InitPtr,
|
||||
MachinePointerInfo(UndefValue::get(PtrTy)), false,
|
||||
false, TD.getPrefTypeAlignment(CFP->getType()));
|
||||
MachinePointerInfo(UndefValue::get(PtrTy)),
|
||||
TD.getPrefTypeAlignment(CFP->getType()));
|
||||
}
|
||||
|
||||
if (StructType *ST = dyn_cast<StructType>(InitTy)) {
|
||||
|
@ -825,8 +825,8 @@ SDValue AMDGPUTargetLowering::LowerConstantInitializer(const Constant* Init,
|
|||
EVT VT = EVT::getEVT(InitTy);
|
||||
PointerType *PtrTy = PointerType::get(InitTy, AMDGPUAS::PRIVATE_ADDRESS);
|
||||
return DAG.getStore(Chain, DL, DAG.getUNDEF(VT), InitPtr,
|
||||
MachinePointerInfo(UndefValue::get(PtrTy)), false,
|
||||
false, TD.getPrefTypeAlignment(InitTy));
|
||||
MachinePointerInfo(UndefValue::get(PtrTy)),
|
||||
TD.getPrefTypeAlignment(InitTy));
|
||||
}
|
||||
|
||||
Init->dump();
|
||||
|
@ -1085,22 +1085,15 @@ SDValue AMDGPUTargetLowering::SplitVectorLoad(const SDValue Op,
|
|||
unsigned BaseAlign = Load->getAlignment();
|
||||
unsigned HiAlign = MinAlign(BaseAlign, Size);
|
||||
|
||||
SDValue LoLoad
|
||||
= DAG.getExtLoad(Load->getExtensionType(), SL, LoVT,
|
||||
Load->getChain(), BasePtr,
|
||||
SrcValue,
|
||||
LoMemVT, Load->isVolatile(), Load->isNonTemporal(),
|
||||
Load->isInvariant(), BaseAlign);
|
||||
|
||||
SDValue LoLoad = DAG.getExtLoad(Load->getExtensionType(), SL, LoVT,
|
||||
Load->getChain(), BasePtr, SrcValue, LoMemVT,
|
||||
BaseAlign, Load->getMemOperand()->getFlags());
|
||||
SDValue HiPtr = DAG.getNode(ISD::ADD, SL, PtrVT, BasePtr,
|
||||
DAG.getConstant(Size, SL, PtrVT));
|
||||
|
||||
SDValue HiLoad
|
||||
= DAG.getExtLoad(Load->getExtensionType(), SL, HiVT,
|
||||
Load->getChain(), HiPtr,
|
||||
SrcValue.getWithOffset(LoMemVT.getStoreSize()),
|
||||
HiMemVT, Load->isVolatile(), Load->isNonTemporal(),
|
||||
Load->isInvariant(), HiAlign);
|
||||
SDValue HiLoad =
|
||||
DAG.getExtLoad(Load->getExtensionType(), SL, HiVT, Load->getChain(),
|
||||
HiPtr, SrcValue.getWithOffset(LoMemVT.getStoreSize()),
|
||||
HiMemVT, HiAlign, Load->getMemOperand()->getFlags());
|
||||
|
||||
SDValue Ops[] = {
|
||||
DAG.getNode(ISD::CONCAT_VECTORS, SL, VT, LoLoad, HiLoad),
|
||||
|
@ -1159,16 +1152,15 @@ SDValue AMDGPUTargetLowering::MergeVectorStore(const SDValue &Op,
|
|||
if (PackedSize < 32) {
|
||||
EVT PackedVT = EVT::getIntegerVT(*DAG.getContext(), PackedSize);
|
||||
return DAG.getTruncStore(Store->getChain(), DL, PackedValue, Ptr,
|
||||
Store->getMemOperand()->getPointerInfo(),
|
||||
PackedVT,
|
||||
Store->isNonTemporal(), Store->isVolatile(),
|
||||
Store->getAlignment());
|
||||
Store->getMemOperand()->getPointerInfo(), PackedVT,
|
||||
Store->getAlignment(),
|
||||
Store->getMemOperand()->getFlags());
|
||||
}
|
||||
|
||||
return DAG.getStore(Store->getChain(), DL, PackedValue, Ptr,
|
||||
Store->getMemOperand()->getPointerInfo(),
|
||||
Store->isVolatile(), Store->isNonTemporal(),
|
||||
Store->getAlignment());
|
||||
Store->getAlignment(),
|
||||
Store->getMemOperand()->getFlags());
|
||||
}
|
||||
|
||||
SDValue AMDGPUTargetLowering::SplitVectorStore(SDValue Op,
|
||||
|
@ -1205,22 +1197,12 @@ SDValue AMDGPUTargetLowering::SplitVectorStore(SDValue Op,
|
|||
unsigned Size = LoMemVT.getStoreSize();
|
||||
unsigned HiAlign = MinAlign(BaseAlign, Size);
|
||||
|
||||
SDValue LoStore
|
||||
= DAG.getTruncStore(Chain, SL, Lo,
|
||||
BasePtr,
|
||||
SrcValue,
|
||||
LoMemVT,
|
||||
Store->isNonTemporal(),
|
||||
Store->isVolatile(),
|
||||
BaseAlign);
|
||||
SDValue HiStore
|
||||
= DAG.getTruncStore(Chain, SL, Hi,
|
||||
HiPtr,
|
||||
SrcValue.getWithOffset(Size),
|
||||
HiMemVT,
|
||||
Store->isNonTemporal(),
|
||||
Store->isVolatile(),
|
||||
HiAlign);
|
||||
SDValue LoStore =
|
||||
DAG.getTruncStore(Chain, SL, Lo, BasePtr, SrcValue, LoMemVT, BaseAlign,
|
||||
Store->getMemOperand()->getFlags());
|
||||
SDValue HiStore =
|
||||
DAG.getTruncStore(Chain, SL, Hi, HiPtr, SrcValue.getWithOffset(Size),
|
||||
HiMemVT, HiAlign, Store->getMemOperand()->getFlags());
|
||||
|
||||
return DAG.getNode(ISD::TokenFactor, SL, MVT::Other, LoStore, HiStore);
|
||||
}
|
||||
|
|
|
@ -1077,8 +1077,7 @@ SDValue R600TargetLowering::LowerImplicitParameter(SelectionDAG &DAG, EVT VT,
|
|||
|
||||
return DAG.getLoad(VT, DL, DAG.getEntryNode(),
|
||||
DAG.getConstant(ByteOffset, DL, MVT::i32), // PTR
|
||||
MachinePointerInfo(ConstantPointerNull::get(PtrType)),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo(ConstantPointerNull::get(PtrType)));
|
||||
}
|
||||
|
||||
bool R600TargetLowering::isZero(SDValue Op) const {
|
||||
|
@ -1646,12 +1645,9 @@ SDValue R600TargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const {
|
|||
if (LoadNode->getExtensionType() == ISD::SEXTLOAD) {
|
||||
EVT MemVT = LoadNode->getMemoryVT();
|
||||
assert(!MemVT.isVector() && (MemVT == MVT::i16 || MemVT == MVT::i8));
|
||||
SDValue NewLoad = DAG.getExtLoad(ISD::EXTLOAD, DL, VT, Chain, Ptr,
|
||||
LoadNode->getPointerInfo(), MemVT,
|
||||
LoadNode->isVolatile(),
|
||||
LoadNode->isNonTemporal(),
|
||||
LoadNode->isInvariant(),
|
||||
LoadNode->getAlignment());
|
||||
SDValue NewLoad = DAG.getExtLoad(
|
||||
ISD::EXTLOAD, DL, VT, Chain, Ptr, LoadNode->getPointerInfo(), MemVT,
|
||||
LoadNode->getAlignment(), LoadNode->getMemOperand()->getFlags());
|
||||
SDValue Res = DAG.getNode(ISD::SIGN_EXTEND_INREG, DL, VT, NewLoad,
|
||||
DAG.getValueType(MemVT));
|
||||
|
||||
|
@ -1794,11 +1790,11 @@ SDValue R600TargetLowering::LowerFormalArguments(
|
|||
unsigned Offset = 36 + VA.getLocMemOffset();
|
||||
|
||||
MachinePointerInfo PtrInfo(UndefValue::get(PtrTy), PartOffset - ValBase);
|
||||
SDValue Arg = DAG.getLoad(ISD::UNINDEXED, Ext, VT, DL, Chain,
|
||||
DAG.getConstant(Offset, DL, MVT::i32),
|
||||
DAG.getUNDEF(MVT::i32),
|
||||
PtrInfo,
|
||||
MemVT, false, true, true, 4);
|
||||
SDValue Arg = DAG.getLoad(
|
||||
ISD::UNINDEXED, Ext, VT, DL, Chain,
|
||||
DAG.getConstant(Offset, DL, MVT::i32), DAG.getUNDEF(MVT::i32), PtrInfo,
|
||||
MemVT, /* Alignment = */ 4,
|
||||
MachineMemOperand::MONonTemporal | MachineMemOperand::MOInvariant);
|
||||
|
||||
// 4 is the preferred alignment for the CONSTANT memory space.
|
||||
InVals.push_back(Arg);
|
||||
|
|
|
@ -577,12 +577,9 @@ SDValue SITargetLowering::LowerParameter(SelectionDAG &DAG, EVT VT, EVT MemVT,
|
|||
ExtTy = ISD::EXTLOAD;
|
||||
|
||||
SDValue Ptr = LowerParameterPtr(DAG, SL, Chain, Offset);
|
||||
return DAG.getLoad(ISD::UNINDEXED, ExtTy,
|
||||
VT, SL, Chain, Ptr, PtrOffset, PtrInfo, MemVT,
|
||||
false, // isVolatile
|
||||
true, // isNonTemporal
|
||||
true, // isInvariant
|
||||
Align); // Alignment
|
||||
return DAG.getLoad(ISD::UNINDEXED, ExtTy, VT, SL, Chain, Ptr, PtrOffset,
|
||||
PtrInfo, MemVT, Align, MachineMemOperand::MONonTemporal |
|
||||
MachineMemOperand::MOInvariant);
|
||||
}
|
||||
|
||||
SDValue SITargetLowering::LowerFormalArguments(
|
||||
|
@ -1453,10 +1450,9 @@ SDValue SITargetLowering::getSegmentAperture(unsigned AS,
|
|||
AMDGPUAS::CONSTANT_ADDRESS));
|
||||
|
||||
MachinePointerInfo PtrInfo(V, StructOffset);
|
||||
return DAG.getLoad(MVT::i32, SL, QueuePtr.getValue(1), Ptr,
|
||||
PtrInfo, false,
|
||||
false, true,
|
||||
MinAlign(64, StructOffset));
|
||||
return DAG.getLoad(MVT::i32, SL, QueuePtr.getValue(1), Ptr, PtrInfo,
|
||||
MinAlign(64, StructOffset),
|
||||
MachineMemOperand::MOInvariant);
|
||||
}
|
||||
|
||||
SDValue SITargetLowering::lowerADDRSPACECAST(SDValue Op,
|
||||
|
@ -1573,8 +1569,8 @@ SDValue SITargetLowering::LowerGlobalAddress(AMDGPUMachineFunction *MFI,
|
|||
// FIXME: Use a PseudoSourceValue once those can be assigned an address space.
|
||||
MachinePointerInfo PtrInfo(UndefValue::get(PtrTy));
|
||||
|
||||
return DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), GOTAddr,
|
||||
PtrInfo, false, false, true, Align);
|
||||
return DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), GOTAddr, PtrInfo, Align,
|
||||
MachineMemOperand::MOInvariant);
|
||||
}
|
||||
|
||||
SDValue SITargetLowering::lowerTRAP(SDValue Op,
|
||||
|
|
|
@ -1541,8 +1541,7 @@ SDValue ARMTargetLowering::LowerMemOpCallTo(SDValue Chain, SDValue StackPtr,
|
|||
StackPtr, PtrOff);
|
||||
return DAG.getStore(
|
||||
Chain, dl, Arg, PtrOff,
|
||||
MachinePointerInfo::getStack(DAG.getMachineFunction(), LocMemOffset),
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getStack(DAG.getMachineFunction(), LocMemOffset));
|
||||
}
|
||||
|
||||
void ARMTargetLowering::PassF64ArgInRegs(const SDLoc &dl, SelectionDAG &DAG,
|
||||
|
@ -1727,7 +1726,6 @@ ARMTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
|
|||
SDValue AddArg = DAG.getNode(ISD::ADD, dl, PtrVT, Arg, Const);
|
||||
SDValue Load = DAG.getLoad(PtrVT, dl, Chain, AddArg,
|
||||
MachinePointerInfo(),
|
||||
false, false, false,
|
||||
DAG.InferPtrAlignment(AddArg));
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(j, Load));
|
||||
|
@ -1834,8 +1832,7 @@ ARMTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
|
|||
CPAddr = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, CPAddr);
|
||||
Callee = DAG.getLoad(
|
||||
PtrVt, dl, DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
} else if (ExternalSymbolSDNode *S=dyn_cast<ExternalSymbolSDNode>(Callee)) {
|
||||
const char *Sym = S->getSymbol();
|
||||
|
||||
|
@ -1849,8 +1846,7 @@ ARMTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
|
|||
CPAddr = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, CPAddr);
|
||||
Callee = DAG.getLoad(
|
||||
PtrVt, dl, DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
}
|
||||
} else if (isa<GlobalAddressSDNode>(Callee)) {
|
||||
// If we're optimizing for minimum size and the function is called three or
|
||||
|
@ -1879,7 +1875,7 @@ ARMTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
|
|||
Callee =
|
||||
DAG.getLoad(PtrVt, dl, DAG.getEntryNode(), Callee,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()),
|
||||
false, false, true, 0);
|
||||
/* Alignment = */ 0, MachineMemOperand::MOInvariant);
|
||||
} else if (Subtarget->isTargetCOFF()) {
|
||||
assert(Subtarget->isTargetWindows() &&
|
||||
"Windows is the only supported COFF target");
|
||||
|
@ -1892,8 +1888,7 @@ ARMTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
|
|||
Callee =
|
||||
DAG.getLoad(PtrVt, dl, DAG.getEntryNode(),
|
||||
DAG.getNode(ARMISD::Wrapper, dl, PtrVt, Callee),
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()));
|
||||
} else {
|
||||
Callee = DAG.getTargetGlobalAddress(GV, dl, PtrVt, 0, 0);
|
||||
}
|
||||
|
@ -1911,8 +1906,7 @@ ARMTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
|
|||
CPAddr = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, CPAddr);
|
||||
Callee = DAG.getLoad(
|
||||
PtrVt, dl, DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex, dl, MVT::i32);
|
||||
Callee = DAG.getNode(ARMISD::PIC_ADD, dl, PtrVt, Callee, PICLabel);
|
||||
} else {
|
||||
|
@ -2547,10 +2541,9 @@ SDValue ARMTargetLowering::LowerBlockAddress(SDValue Op,
|
|||
CPAddr = DAG.getTargetConstantPool(CPV, PtrVT, 4);
|
||||
}
|
||||
CPAddr = DAG.getNode(ARMISD::Wrapper, DL, PtrVT, CPAddr);
|
||||
SDValue Result =
|
||||
DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
SDValue Result = DAG.getLoad(
|
||||
PtrVT, DL, DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
if (!IsPositionIndependent)
|
||||
return Result;
|
||||
SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex, DL, MVT::i32);
|
||||
|
@ -2597,7 +2590,8 @@ ARMTargetLowering::LowerGlobalTLSAddressDarwin(SDValue Op,
|
|||
SDValue FuncTLVGet =
|
||||
DAG.getLoad(MVT::i32, DL, Chain, DescAddr,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()),
|
||||
false, true, true, 4);
|
||||
/* Alignment = */ 4, MachineMemOperand::MONonTemporal |
|
||||
MachineMemOperand::MOInvariant);
|
||||
Chain = FuncTLVGet.getValue(1);
|
||||
|
||||
MachineFunction &F = DAG.getMachineFunction();
|
||||
|
@ -2650,8 +2644,7 @@ ARMTargetLowering::LowerGlobalTLSAddressWindows(SDValue Op,
|
|||
// A pointer to the TLS array is located at offset 0x2c from the TEB.
|
||||
SDValue TLSArray =
|
||||
DAG.getNode(ISD::ADD, DL, PtrVT, TEB, DAG.getIntPtrConstant(0x2c, DL));
|
||||
TLSArray = DAG.getLoad(PtrVT, DL, Chain, TLSArray, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
TLSArray = DAG.getLoad(PtrVT, DL, Chain, TLSArray, MachinePointerInfo());
|
||||
|
||||
// The pointer to the thread's TLS data area is at the TLS Index scaled by 4
|
||||
// offset into the TLSArray.
|
||||
|
@ -2660,24 +2653,21 @@ ARMTargetLowering::LowerGlobalTLSAddressWindows(SDValue Op,
|
|||
SDValue TLSIndex =
|
||||
DAG.getTargetExternalSymbol("_tls_index", PtrVT, ARMII::MO_NO_FLAG);
|
||||
TLSIndex = DAG.getNode(ARMISD::Wrapper, DL, PtrVT, TLSIndex);
|
||||
TLSIndex = DAG.getLoad(PtrVT, DL, Chain, TLSIndex, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
TLSIndex = DAG.getLoad(PtrVT, DL, Chain, TLSIndex, MachinePointerInfo());
|
||||
|
||||
SDValue Slot = DAG.getNode(ISD::SHL, DL, PtrVT, TLSIndex,
|
||||
DAG.getConstant(2, DL, MVT::i32));
|
||||
SDValue TLS = DAG.getLoad(PtrVT, DL, Chain,
|
||||
DAG.getNode(ISD::ADD, DL, PtrVT, TLSArray, Slot),
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
MachinePointerInfo());
|
||||
|
||||
// Get the offset of the start of the .tls section (section base)
|
||||
const auto *GA = cast<GlobalAddressSDNode>(Op);
|
||||
auto *CPV = ARMConstantPoolConstant::Create(GA->getGlobal(), ARMCP::SECREL);
|
||||
SDValue Offset =
|
||||
DAG.getLoad(PtrVT, DL, Chain,
|
||||
DAG.getNode(ARMISD::Wrapper, DL, MVT::i32,
|
||||
DAG.getTargetConstantPool(CPV, PtrVT, 4)),
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
SDValue Offset = DAG.getLoad(
|
||||
PtrVT, DL, Chain, DAG.getNode(ARMISD::Wrapper, DL, MVT::i32,
|
||||
DAG.getTargetConstantPool(CPV, PtrVT, 4)),
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
|
||||
return DAG.getNode(ISD::ADD, DL, PtrVT, TLS, Offset);
|
||||
}
|
||||
|
@ -2697,10 +2687,9 @@ ARMTargetLowering::LowerToTLSGeneralDynamicModel(GlobalAddressSDNode *GA,
|
|||
ARMCP::CPValue, PCAdj, ARMCP::TLSGD, true);
|
||||
SDValue Argument = DAG.getTargetConstantPool(CPV, PtrVT, 4);
|
||||
Argument = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, Argument);
|
||||
Argument =
|
||||
DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), Argument,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
Argument = DAG.getLoad(
|
||||
PtrVT, dl, DAG.getEntryNode(), Argument,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
SDValue Chain = Argument.getValue(1);
|
||||
|
||||
SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex, dl, MVT::i32);
|
||||
|
@ -2751,8 +2740,7 @@ ARMTargetLowering::LowerToTLSExecModels(GlobalAddressSDNode *GA,
|
|||
Offset = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, Offset);
|
||||
Offset = DAG.getLoad(
|
||||
PtrVT, dl, Chain, Offset,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
Chain = Offset.getValue(1);
|
||||
|
||||
SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex, dl, MVT::i32);
|
||||
|
@ -2760,8 +2748,7 @@ ARMTargetLowering::LowerToTLSExecModels(GlobalAddressSDNode *GA,
|
|||
|
||||
Offset = DAG.getLoad(
|
||||
PtrVT, dl, Chain, Offset,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
} else {
|
||||
// local exec model
|
||||
assert(model == TLSModel::LocalExec);
|
||||
|
@ -2771,8 +2758,7 @@ ARMTargetLowering::LowerToTLSExecModels(GlobalAddressSDNode *GA,
|
|||
Offset = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, Offset);
|
||||
Offset = DAG.getLoad(
|
||||
PtrVT, dl, Chain, Offset,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
}
|
||||
|
||||
// The address of the thread local variable is the add of the thread
|
||||
|
@ -2830,15 +2816,14 @@ SDValue ARMTargetLowering::LowerGlobalAddressELF(SDValue Op,
|
|||
CPAddr = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, CPAddr);
|
||||
SDValue Result = DAG.getLoad(
|
||||
PtrVT, dl, DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
SDValue Chain = Result.getValue(1);
|
||||
SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex, dl, MVT::i32);
|
||||
Result = DAG.getNode(ARMISD::PIC_ADD, dl, PtrVT, Result, PICLabel);
|
||||
if (UseGOT_PREL)
|
||||
Result = DAG.getLoad(PtrVT, dl, Chain, Result,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
Result =
|
||||
DAG.getLoad(PtrVT, dl, Chain, Result,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()));
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
@ -2855,8 +2840,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(DAG.getMachineFunction()), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2879,8 +2863,7 @@ SDValue ARMTargetLowering::LowerGlobalAddressDarwin(SDValue Op,
|
|||
|
||||
if (Subtarget->isGVIndirectSymbol(GV))
|
||||
Result = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), Result,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()));
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
@ -2906,8 +2889,7 @@ SDValue ARMTargetLowering::LowerGlobalAddressWindows(SDValue Op,
|
|||
TargetFlags));
|
||||
if (GV->hasDLLImportStorageClass())
|
||||
Result = DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), Result,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()));
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
@ -2965,8 +2947,7 @@ ARMTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG,
|
|||
CPAddr = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, CPAddr);
|
||||
SDValue Result = DAG.getLoad(
|
||||
PtrVT, dl, DAG.getEntryNode(), CPAddr,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
|
||||
if (IsPositionIndependent) {
|
||||
SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex, dl, MVT::i32);
|
||||
|
@ -3085,7 +3066,7 @@ static SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG) {
|
|||
SDValue FR = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(), PtrVT);
|
||||
const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue();
|
||||
return DAG.getStore(Op.getOperand(0), dl, FR, Op.getOperand(1),
|
||||
MachinePointerInfo(SV), false, false, 0);
|
||||
MachinePointerInfo(SV));
|
||||
}
|
||||
|
||||
SDValue ARMTargetLowering::GetF64FormalArgument(CCValAssign &VA,
|
||||
|
@ -3115,8 +3096,7 @@ SDValue ARMTargetLowering::GetF64FormalArgument(CCValAssign &VA,
|
|||
SDValue FIN = DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout()));
|
||||
ArgValue2 = DAG.getLoad(
|
||||
MVT::i32, dl, Root, FIN,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI));
|
||||
} else {
|
||||
Reg = MF.addLiveIn(NextVA.getLocReg(), RC);
|
||||
ArgValue2 = DAG.getCopyFromReg(Root, dl, Reg, MVT::i32);
|
||||
|
@ -3176,9 +3156,8 @@ int ARMTargetLowering::StoreByValRegs(CCState &CCInfo, SelectionDAG &DAG,
|
|||
for (unsigned Reg = RBegin, i = 0; Reg < REnd; ++Reg, ++i) {
|
||||
unsigned VReg = MF.addLiveIn(Reg, RC);
|
||||
SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i32);
|
||||
SDValue Store =
|
||||
DAG.getStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo(OrigArg, 4 * i), false, false, 0);
|
||||
SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo(OrigArg, 4 * i));
|
||||
MemOps.push_back(Store);
|
||||
FIN = DAG.getNode(ISD::ADD, dl, PtrVT, FIN, DAG.getConstant(4, dl, PtrVT));
|
||||
}
|
||||
|
@ -3293,10 +3272,9 @@ SDValue ARMTargetLowering::LowerFormalArguments(
|
|||
if (VA.isMemLoc()) {
|
||||
int FI = MFI->CreateFixedObject(8, VA.getLocMemOffset(), true);
|
||||
SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
|
||||
ArgValue2 = DAG.getLoad(
|
||||
MVT::f64, dl, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI),
|
||||
false, false, false, 0);
|
||||
ArgValue2 = DAG.getLoad(MVT::f64, dl, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(
|
||||
DAG.getMachineFunction(), FI));
|
||||
} else {
|
||||
ArgValue2 = GetF64FormalArgument(VA, ArgLocs[++i],
|
||||
Chain, DAG, dl);
|
||||
|
@ -3389,10 +3367,9 @@ SDValue ARMTargetLowering::LowerFormalArguments(
|
|||
|
||||
// Create load nodes to retrieve arguments from the stack.
|
||||
SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
|
||||
InVals.push_back(DAG.getLoad(
|
||||
VA.getValVT(), dl, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI),
|
||||
false, false, false, 0));
|
||||
InVals.push_back(DAG.getLoad(VA.getValVT(), dl, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(
|
||||
DAG.getMachineFunction(), FI)));
|
||||
}
|
||||
lastInsIndex = index;
|
||||
}
|
||||
|
@ -3981,10 +3958,9 @@ static SDValue bitcastf32Toi32(SDValue Op, SelectionDAG &DAG) {
|
|||
return DAG.getConstant(0, SDLoc(Op), MVT::i32);
|
||||
|
||||
if (LoadSDNode *Ld = dyn_cast<LoadSDNode>(Op))
|
||||
return DAG.getLoad(MVT::i32, SDLoc(Op),
|
||||
Ld->getChain(), Ld->getBasePtr(), Ld->getPointerInfo(),
|
||||
Ld->isVolatile(), Ld->isNonTemporal(),
|
||||
Ld->isInvariant(), Ld->getAlignment());
|
||||
return DAG.getLoad(MVT::i32, SDLoc(Op), Ld->getChain(), Ld->getBasePtr(),
|
||||
Ld->getPointerInfo(), Ld->getAlignment(),
|
||||
Ld->getMemOperand()->getFlags());
|
||||
|
||||
llvm_unreachable("Unknown VFP cmp argument!");
|
||||
}
|
||||
|
@ -4001,21 +3977,17 @@ static void expandf64Toi32(SDValue Op, SelectionDAG &DAG,
|
|||
|
||||
if (LoadSDNode *Ld = dyn_cast<LoadSDNode>(Op)) {
|
||||
SDValue Ptr = Ld->getBasePtr();
|
||||
RetVal1 = DAG.getLoad(MVT::i32, dl,
|
||||
Ld->getChain(), Ptr,
|
||||
Ld->getPointerInfo(),
|
||||
Ld->isVolatile(), Ld->isNonTemporal(),
|
||||
Ld->isInvariant(), Ld->getAlignment());
|
||||
RetVal1 =
|
||||
DAG.getLoad(MVT::i32, dl, Ld->getChain(), Ptr, Ld->getPointerInfo(),
|
||||
Ld->getAlignment(), Ld->getMemOperand()->getFlags());
|
||||
|
||||
EVT PtrType = Ptr.getValueType();
|
||||
unsigned NewAlign = MinAlign(Ld->getAlignment(), 4);
|
||||
SDValue NewPtr = DAG.getNode(ISD::ADD, dl,
|
||||
PtrType, Ptr, DAG.getConstant(4, dl, PtrType));
|
||||
RetVal2 = DAG.getLoad(MVT::i32, dl,
|
||||
Ld->getChain(), NewPtr,
|
||||
Ld->getPointerInfo().getWithOffset(4),
|
||||
Ld->isVolatile(), Ld->isNonTemporal(),
|
||||
Ld->isInvariant(), NewAlign);
|
||||
RetVal2 = DAG.getLoad(MVT::i32, dl, Ld->getChain(), NewPtr,
|
||||
Ld->getPointerInfo().getWithOffset(4), NewAlign,
|
||||
Ld->getMemOperand()->getFlags());
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -4152,16 +4124,14 @@ SDValue ARMTargetLowering::LowerBR_JT(SDValue Op, SelectionDAG &DAG) const {
|
|||
if (isPositionIndependent()) {
|
||||
Addr =
|
||||
DAG.getLoad((EVT)MVT::i32, dl, Chain, Addr,
|
||||
MachinePointerInfo::getJumpTable(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getJumpTable(DAG.getMachineFunction()));
|
||||
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);
|
||||
} else {
|
||||
Addr =
|
||||
DAG.getLoad(PTy, dl, Chain, Addr,
|
||||
MachinePointerInfo::getJumpTable(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getJumpTable(DAG.getMachineFunction()));
|
||||
Chain = Addr.getValue(1);
|
||||
return DAG.getNode(ARMISD::BR_JT, dl, MVT::Other, Chain, Addr, JTI);
|
||||
}
|
||||
|
@ -4355,7 +4325,7 @@ SDValue ARMTargetLowering::LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const{
|
|||
SDValue Offset = DAG.getConstant(4, dl, MVT::i32);
|
||||
return DAG.getLoad(VT, dl, DAG.getEntryNode(),
|
||||
DAG.getNode(ISD::ADD, dl, VT, FrameAddr, Offset),
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
MachinePointerInfo());
|
||||
}
|
||||
|
||||
// Return LR, which contains the return address. Mark it an implicit live-in.
|
||||
|
@ -4377,8 +4347,7 @@ SDValue ARMTargetLowering::LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const {
|
|||
SDValue FrameAddr = DAG.getCopyFromReg(DAG.getEntryNode(), dl, FrameReg, VT);
|
||||
while (Depth--)
|
||||
FrameAddr = DAG.getLoad(VT, dl, DAG.getEntryNode(), FrameAddr,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo());
|
||||
return FrameAddr;
|
||||
}
|
||||
|
||||
|
@ -6570,17 +6539,16 @@ static SDValue SkipLoadExtensionForVMULL(LoadSDNode *LD, SelectionDAG& DAG) {
|
|||
// The load already has the right type.
|
||||
if (ExtendedTy == LD->getMemoryVT())
|
||||
return DAG.getLoad(LD->getMemoryVT(), SDLoc(LD), LD->getChain(),
|
||||
LD->getBasePtr(), LD->getPointerInfo(), LD->isVolatile(),
|
||||
LD->isNonTemporal(), LD->isInvariant(),
|
||||
LD->getAlignment());
|
||||
LD->getBasePtr(), LD->getPointerInfo(),
|
||||
LD->getAlignment(), LD->getMemOperand()->getFlags());
|
||||
|
||||
// We need to create a zextload/sextload. We cannot just create a load
|
||||
// followed by a zext/zext node because LowerMUL is also run during normal
|
||||
// operation legalization where we can't create illegal types.
|
||||
return DAG.getExtLoad(LD->getExtensionType(), SDLoc(LD), ExtendedTy,
|
||||
LD->getChain(), LD->getBasePtr(), LD->getPointerInfo(),
|
||||
LD->getMemoryVT(), LD->isVolatile(), LD->isInvariant(),
|
||||
LD->isNonTemporal(), LD->getAlignment());
|
||||
LD->getMemoryVT(), LD->getAlignment(),
|
||||
LD->getMemOperand()->getFlags());
|
||||
}
|
||||
|
||||
/// SkipExtensionForVMULL - For a node that is a SIGN_EXTEND, ZERO_EXTEND,
|
||||
|
@ -6989,14 +6957,14 @@ SDValue ARMTargetLowering::LowerFSINCOS(SDValue Op, SelectionDAG &DAG) const {
|
|||
if (!ShouldUseSRet)
|
||||
return CallResult.first;
|
||||
|
||||
SDValue LoadSin = DAG.getLoad(ArgVT, dl, CallResult.second, SRet,
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
SDValue LoadSin =
|
||||
DAG.getLoad(ArgVT, dl, CallResult.second, SRet, MachinePointerInfo());
|
||||
|
||||
// Address of cos field.
|
||||
SDValue Add = DAG.getNode(ISD::ADD, dl, PtrVT, SRet,
|
||||
DAG.getIntPtrConstant(ArgVT.getStoreSize(), dl));
|
||||
SDValue LoadCos = DAG.getLoad(ArgVT, dl, LoadSin.getValue(1), Add,
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
SDValue LoadCos =
|
||||
DAG.getLoad(ArgVT, dl, LoadSin.getValue(1), Add, MachinePointerInfo());
|
||||
|
||||
SDVTList Tys = DAG.getVTList(ArgVT, ArgVT);
|
||||
return DAG.getNode(ISD::MERGE_VALUES, dl, Tys,
|
||||
|
@ -9661,17 +9629,15 @@ static SDValue PerformVMOVRRDCombine(SDNode *N,
|
|||
SelectionDAG &DAG = DCI.DAG;
|
||||
SDLoc DL(LD);
|
||||
SDValue BasePtr = LD->getBasePtr();
|
||||
SDValue NewLD1 = DAG.getLoad(MVT::i32, DL, LD->getChain(), BasePtr,
|
||||
LD->getPointerInfo(), LD->isVolatile(),
|
||||
LD->isNonTemporal(), LD->isInvariant(),
|
||||
LD->getAlignment());
|
||||
SDValue NewLD1 =
|
||||
DAG.getLoad(MVT::i32, DL, LD->getChain(), BasePtr, LD->getPointerInfo(),
|
||||
LD->getAlignment(), LD->getMemOperand()->getFlags());
|
||||
|
||||
SDValue OffsetPtr = DAG.getNode(ISD::ADD, DL, MVT::i32, BasePtr,
|
||||
DAG.getConstant(4, DL, MVT::i32));
|
||||
SDValue NewLD2 = DAG.getLoad(MVT::i32, DL, NewLD1.getValue(1), OffsetPtr,
|
||||
LD->getPointerInfo(), LD->isVolatile(),
|
||||
LD->isNonTemporal(), LD->isInvariant(),
|
||||
std::min(4U, LD->getAlignment() / 2));
|
||||
SDValue NewLD2 = DAG.getLoad(
|
||||
MVT::i32, DL, NewLD1.getValue(1), OffsetPtr, LD->getPointerInfo(),
|
||||
std::min(4U, LD->getAlignment() / 2), LD->getMemOperand()->getFlags());
|
||||
|
||||
DAG.ReplaceAllUsesOfValueWith(SDValue(LD, 1), NewLD2.getValue(1));
|
||||
if (DCI.DAG.getDataLayout().isBigEndian())
|
||||
|
@ -10342,8 +10308,8 @@ static SDValue PerformSTORECombine(SDNode *N,
|
|||
StoreType, ShuffWide,
|
||||
DAG.getIntPtrConstant(I, DL));
|
||||
SDValue Ch = DAG.getStore(St->getChain(), DL, SubVec, BasePtr,
|
||||
St->getPointerInfo(), St->isVolatile(),
|
||||
St->isNonTemporal(), St->getAlignment());
|
||||
St->getPointerInfo(), St->getAlignment(),
|
||||
St->getMemOperand()->getFlags());
|
||||
BasePtr = DAG.getNode(ISD::ADD, DL, BasePtr.getValueType(), BasePtr,
|
||||
Increment);
|
||||
Chains.push_back(Ch);
|
||||
|
@ -10362,18 +10328,18 @@ static SDValue PerformSTORECombine(SDNode *N,
|
|||
bool isBigEndian = DAG.getDataLayout().isBigEndian();
|
||||
SDLoc DL(St);
|
||||
SDValue BasePtr = St->getBasePtr();
|
||||
SDValue NewST1 = DAG.getStore(St->getChain(), DL,
|
||||
StVal.getNode()->getOperand(isBigEndian ? 1 : 0 ),
|
||||
BasePtr, St->getPointerInfo(), St->isVolatile(),
|
||||
St->isNonTemporal(), St->getAlignment());
|
||||
SDValue NewST1 = DAG.getStore(
|
||||
St->getChain(), DL, StVal.getNode()->getOperand(isBigEndian ? 1 : 0),
|
||||
BasePtr, St->getPointerInfo(), St->getAlignment(),
|
||||
St->getMemOperand()->getFlags());
|
||||
|
||||
SDValue OffsetPtr = DAG.getNode(ISD::ADD, DL, MVT::i32, BasePtr,
|
||||
DAG.getConstant(4, DL, MVT::i32));
|
||||
return DAG.getStore(NewST1.getValue(0), DL,
|
||||
StVal.getNode()->getOperand(isBigEndian ? 0 : 1),
|
||||
OffsetPtr, St->getPointerInfo(), St->isVolatile(),
|
||||
St->isNonTemporal(),
|
||||
std::min(4U, St->getAlignment() / 2));
|
||||
OffsetPtr, St->getPointerInfo(),
|
||||
std::min(4U, St->getAlignment() / 2),
|
||||
St->getMemOperand()->getFlags());
|
||||
}
|
||||
|
||||
if (StVal.getValueType() == MVT::i64 &&
|
||||
|
@ -10396,9 +10362,8 @@ static SDValue PerformSTORECombine(SDNode *N,
|
|||
DCI.AddToWorklist(ExtElt.getNode());
|
||||
DCI.AddToWorklist(V.getNode());
|
||||
return DAG.getStore(St->getChain(), dl, V, St->getBasePtr(),
|
||||
St->getPointerInfo(), St->isVolatile(),
|
||||
St->isNonTemporal(), St->getAlignment(),
|
||||
St->getAAInfo());
|
||||
St->getPointerInfo(), St->getAlignment(),
|
||||
St->getMemOperand()->getFlags(), St->getAAInfo());
|
||||
}
|
||||
|
||||
// If this is a legal vector store, try to combine it into a VST1_UPD.
|
||||
|
|
|
@ -212,8 +212,7 @@ SDValue ARMSelectionDAGInfo::EmitTargetCodeForMemcpy(
|
|||
Loads[i] = DAG.getLoad(VT, dl, Chain,
|
||||
DAG.getNode(ISD::ADD, dl, MVT::i32, Src,
|
||||
DAG.getConstant(SrcOff, dl, MVT::i32)),
|
||||
SrcPtrInfo.getWithOffset(SrcOff),
|
||||
false, false, false, 0);
|
||||
SrcPtrInfo.getWithOffset(SrcOff));
|
||||
TFOps[i] = Loads[i].getValue(1);
|
||||
++i;
|
||||
SrcOff += VTSize;
|
||||
|
@ -236,7 +235,7 @@ SDValue ARMSelectionDAGInfo::EmitTargetCodeForMemcpy(
|
|||
TFOps[i] = DAG.getStore(Chain, dl, Loads[i],
|
||||
DAG.getNode(ISD::ADD, dl, MVT::i32, Dst,
|
||||
DAG.getConstant(DstOff, dl, MVT::i32)),
|
||||
DstPtrInfo.getWithOffset(DstOff), false, false, 0);
|
||||
DstPtrInfo.getWithOffset(DstOff));
|
||||
++i;
|
||||
DstOff += VTSize;
|
||||
BytesLeft -= VTSize;
|
||||
|
|
|
@ -425,11 +425,11 @@ SDNode *HexagonDAGToDAGISel::StoreInstrForLoadIntrinsic(MachineSDNode *LoadN,
|
|||
SDValue Loc = IntN->getOperand(3);
|
||||
|
||||
if (Size >= 4)
|
||||
TS = CurDAG->getStore(SDValue(LoadN,2), dl, SDValue(LoadN, 0), Loc, PI,
|
||||
false, false, Size);
|
||||
TS = CurDAG->getStore(SDValue(LoadN, 2), dl, SDValue(LoadN, 0), Loc, PI,
|
||||
Size);
|
||||
else
|
||||
TS = CurDAG->getTruncStore(SDValue(LoadN,2), dl, SDValue(LoadN,0), Loc, PI,
|
||||
MVT::getIntegerVT(Size*8), false, false, Size);
|
||||
TS = CurDAG->getTruncStore(SDValue(LoadN, 2), dl, SDValue(LoadN, 0), Loc,
|
||||
PI, MVT::getIntegerVT(Size * 8), Size);
|
||||
|
||||
SDNode *StoreN;
|
||||
{
|
||||
|
|
|
@ -772,8 +772,7 @@ HexagonTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
|
|||
} else {
|
||||
MachinePointerInfo LocPI = MachinePointerInfo::getStack(
|
||||
DAG.getMachineFunction(), LocMemOffset);
|
||||
SDValue S = DAG.getStore(Chain, dl, Arg, MemAddr, LocPI, false,
|
||||
false, 0);
|
||||
SDValue S = DAG.getStore(Chain, dl, Arg, MemAddr, LocPI);
|
||||
MemOpChains.push_back(S);
|
||||
}
|
||||
continue;
|
||||
|
@ -1180,9 +1179,8 @@ SDValue HexagonTargetLowering::LowerFormalArguments(
|
|||
// location.
|
||||
InVals.push_back(FIN);
|
||||
} else {
|
||||
InVals.push_back(DAG.getLoad(VA.getLocVT(), dl, Chain, FIN,
|
||||
MachinePointerInfo(), false, false,
|
||||
false, 0));
|
||||
InVals.push_back(
|
||||
DAG.getLoad(VA.getLocVT(), dl, Chain, FIN, MachinePointerInfo()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1210,9 +1208,8 @@ HexagonTargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG) const {
|
|||
HexagonMachineFunctionInfo *QFI = MF.getInfo<HexagonMachineFunctionInfo>();
|
||||
SDValue Addr = DAG.getFrameIndex(QFI->getVarArgsFrameIndex(), MVT::i32);
|
||||
const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue();
|
||||
return DAG.getStore(Op.getOperand(0), SDLoc(Op), Addr,
|
||||
Op.getOperand(1), MachinePointerInfo(SV), false,
|
||||
false, 0);
|
||||
return DAG.getStore(Op.getOperand(0), SDLoc(Op), Addr, Op.getOperand(1),
|
||||
MachinePointerInfo(SV));
|
||||
}
|
||||
|
||||
// Creates a SPLAT instruction for a constant value VAL.
|
||||
|
@ -1338,20 +1335,14 @@ SDValue HexagonTargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const {
|
|||
SDValue Loads[4];
|
||||
// Base load.
|
||||
Loads[0] = DAG.getExtLoad(Ext, DL, MVT::i32, Chain, Base,
|
||||
LoadNode->getPointerInfo(), MVT::i16,
|
||||
LoadNode->isVolatile(),
|
||||
LoadNode->isNonTemporal(),
|
||||
LoadNode->isInvariant(),
|
||||
Alignment);
|
||||
LoadNode->getPointerInfo(), MVT::i16, Alignment,
|
||||
LoadNode->getMemOperand()->getFlags());
|
||||
// Base+2 load.
|
||||
SDValue Increment = DAG.getConstant(2, DL, MVT::i32);
|
||||
Ptr = DAG.getNode(ISD::ADD, DL, Base.getValueType(), Base, Increment);
|
||||
Loads[1] = DAG.getExtLoad(Ext, DL, MVT::i32, Chain, Ptr,
|
||||
LoadNode->getPointerInfo(), MVT::i16,
|
||||
LoadNode->isVolatile(),
|
||||
LoadNode->isNonTemporal(),
|
||||
LoadNode->isInvariant(),
|
||||
Alignment);
|
||||
LoadNode->getPointerInfo(), MVT::i16, Alignment,
|
||||
LoadNode->getMemOperand()->getFlags());
|
||||
// SHL 16, then OR base and base+2.
|
||||
SDValue ShiftAmount = DAG.getConstant(16, DL, MVT::i32);
|
||||
SDValue Tmp1 = DAG.getNode(ISD::SHL, DL, MVT::i32, Loads[1], ShiftAmount);
|
||||
|
@ -1360,20 +1351,14 @@ SDValue HexagonTargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const {
|
|||
Increment = DAG.getConstant(4, DL, MVT::i32);
|
||||
Ptr = DAG.getNode(ISD::ADD, DL, Base.getValueType(), Base, Increment);
|
||||
Loads[2] = DAG.getExtLoad(Ext, DL, MVT::i32, Chain, Ptr,
|
||||
LoadNode->getPointerInfo(), MVT::i16,
|
||||
LoadNode->isVolatile(),
|
||||
LoadNode->isNonTemporal(),
|
||||
LoadNode->isInvariant(),
|
||||
Alignment);
|
||||
LoadNode->getPointerInfo(), MVT::i16, Alignment,
|
||||
LoadNode->getMemOperand()->getFlags());
|
||||
// Base + 6.
|
||||
Increment = DAG.getConstant(6, DL, MVT::i32);
|
||||
Ptr = DAG.getNode(ISD::ADD, DL, Base.getValueType(), Base, Increment);
|
||||
Loads[3] = DAG.getExtLoad(Ext, DL, MVT::i32, Chain, Ptr,
|
||||
LoadNode->getPointerInfo(), MVT::i16,
|
||||
LoadNode->isVolatile(),
|
||||
LoadNode->isNonTemporal(),
|
||||
LoadNode->isInvariant(),
|
||||
Alignment);
|
||||
LoadNode->getPointerInfo(), MVT::i16, Alignment,
|
||||
LoadNode->getMemOperand()->getFlags());
|
||||
// SHL 16, then OR base+4 and base+6.
|
||||
Tmp1 = DAG.getNode(ISD::SHL, DL, MVT::i32, Loads[3], ShiftAmount);
|
||||
SDValue Tmp4 = DAG.getNode(ISD::OR, DL, MVT::i32, Tmp1, Loads[2]);
|
||||
|
@ -1386,8 +1371,8 @@ SDValue HexagonTargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const {
|
|||
} else {
|
||||
// Perform default type expansion.
|
||||
Result = DAG.getLoad(MVT::i64, DL, Chain, Ptr, LoadNode->getPointerInfo(),
|
||||
LoadNode->isVolatile(), LoadNode->isNonTemporal(),
|
||||
LoadNode->isInvariant(), LoadNode->getAlignment());
|
||||
LoadNode->getAlignment(),
|
||||
LoadNode->getMemOperand()->getFlags());
|
||||
LoadChain = Result.getValue(1);
|
||||
}
|
||||
} else
|
||||
|
@ -1451,7 +1436,7 @@ HexagonTargetLowering::LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const {
|
|||
SDValue Offset = DAG.getConstant(4, dl, MVT::i32);
|
||||
return DAG.getLoad(VT, dl, DAG.getEntryNode(),
|
||||
DAG.getNode(ISD::ADD, dl, VT, FrameAddr, Offset),
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
MachinePointerInfo());
|
||||
}
|
||||
|
||||
// Return LR, which contains the return address. Mark it an implicit live-in.
|
||||
|
@ -1472,8 +1457,7 @@ HexagonTargetLowering::LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const {
|
|||
HRI.getFrameRegister(), VT);
|
||||
while (Depth--)
|
||||
FrameAddr = DAG.getLoad(VT, dl, DAG.getEntryNode(), FrameAddr,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo());
|
||||
return FrameAddr;
|
||||
}
|
||||
|
||||
|
@ -1611,9 +1595,8 @@ HexagonTargetLowering::LowerToTLSInitialExecModel(GlobalAddressSDNode *GA,
|
|||
|
||||
// Load the offset value for TLS symbol.This offset is relative to
|
||||
// thread pointer.
|
||||
SDValue LoadOffset = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), Sym,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue LoadOffset =
|
||||
DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), Sym, MachinePointerInfo());
|
||||
|
||||
// Address of the thread local variable is the add of thread
|
||||
// pointer and the offset of the variable.
|
||||
|
@ -2746,8 +2729,7 @@ HexagonTargetLowering::LowerEH_RETURN(SDValue Op, SelectionDAG &DAG) const {
|
|||
SDValue StoreAddr =
|
||||
DAG.getNode(ISD::ADD, dl, PtrVT, DAG.getRegister(Hexagon::R30, PtrVT),
|
||||
DAG.getIntPtrConstant(4, dl));
|
||||
Chain = DAG.getStore(Chain, dl, Handler, StoreAddr, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
Chain = DAG.getStore(Chain, dl, Handler, StoreAddr, MachinePointerInfo());
|
||||
Chain = DAG.getCopyToReg(Chain, dl, OffsetReg, Offset);
|
||||
|
||||
// Not needed we already use it as explict input to EH_RETURN.
|
||||
|
|
|
@ -490,8 +490,7 @@ SDValue MSP430TargetLowering::LowerCCCArguments(
|
|||
SDValue FIN = DAG.getFrameIndex(FI, MVT::i16);
|
||||
InVal = DAG.getLoad(
|
||||
VA.getLocVT(), dl, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI));
|
||||
}
|
||||
|
||||
InVals.push_back(InVal);
|
||||
|
@ -625,8 +624,7 @@ SDValue MSP430TargetLowering::LowerCCCCallTo(
|
|||
MachinePointerInfo(),
|
||||
MachinePointerInfo());
|
||||
} else {
|
||||
MemOp = DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
MemOp = DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo());
|
||||
}
|
||||
|
||||
MemOpChains.push_back(MemOp);
|
||||
|
@ -1025,13 +1023,13 @@ SDValue MSP430TargetLowering::LowerRETURNADDR(SDValue Op,
|
|||
DAG.getConstant(DAG.getDataLayout().getPointerSize(), dl, MVT::i16);
|
||||
return DAG.getLoad(PtrVT, dl, DAG.getEntryNode(),
|
||||
DAG.getNode(ISD::ADD, dl, PtrVT, FrameAddr, Offset),
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
MachinePointerInfo());
|
||||
}
|
||||
|
||||
// Just load the return address.
|
||||
SDValue RetAddrFI = getReturnAddressFrameIndex(DAG);
|
||||
return DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), RetAddrFI,
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
MachinePointerInfo());
|
||||
}
|
||||
|
||||
SDValue MSP430TargetLowering::LowerFRAMEADDR(SDValue Op,
|
||||
|
@ -1046,8 +1044,7 @@ SDValue MSP430TargetLowering::LowerFRAMEADDR(SDValue Op,
|
|||
MSP430::FP, VT);
|
||||
while (Depth--)
|
||||
FrameAddr = DAG.getLoad(VT, dl, DAG.getEntryNode(), FrameAddr,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo());
|
||||
return FrameAddr;
|
||||
}
|
||||
|
||||
|
@ -1063,9 +1060,8 @@ SDValue MSP430TargetLowering::LowerVASTART(SDValue Op,
|
|||
const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue();
|
||||
|
||||
// Create a store of the frame index to the location operand
|
||||
return DAG.getStore(Op.getOperand(0), SDLoc(Op), FrameIndex,
|
||||
Op.getOperand(1), MachinePointerInfo(SV),
|
||||
false, false, 0);
|
||||
return DAG.getStore(Op.getOperand(0), SDLoc(Op), FrameIndex, Op.getOperand(1),
|
||||
MachinePointerInfo(SV));
|
||||
}
|
||||
|
||||
SDValue MSP430TargetLowering::LowerJumpTable(SDValue Op,
|
||||
|
|
|
@ -1677,10 +1677,9 @@ SDValue MipsTargetLowering::lowerBR_JT(SDValue Op, SelectionDAG &DAG) const {
|
|||
SDValue Addr = DAG.getNode(ISD::ADD, DL, PTy, Index, Table);
|
||||
|
||||
EVT MemVT = EVT::getIntegerVT(*DAG.getContext(), EntrySize * 8);
|
||||
Addr =
|
||||
DAG.getExtLoad(ISD::SEXTLOAD, DL, PTy, Chain, Addr,
|
||||
MachinePointerInfo::getJumpTable(DAG.getMachineFunction()),
|
||||
MemVT, false, false, false, 0);
|
||||
Addr = DAG.getExtLoad(
|
||||
ISD::SEXTLOAD, DL, PTy, Chain, Addr,
|
||||
MachinePointerInfo::getJumpTable(DAG.getMachineFunction()), MemVT);
|
||||
Chain = Addr.getValue(1);
|
||||
|
||||
if (isPositionIndependent() || ABI.IsN64()) {
|
||||
|
@ -1864,9 +1863,8 @@ lowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const
|
|||
MipsII::MO_GOTTPREL);
|
||||
TGA = DAG.getNode(MipsISD::Wrapper, DL, PtrVT, getGlobalReg(DAG, PtrVT),
|
||||
TGA);
|
||||
Offset = DAG.getLoad(PtrVT, DL,
|
||||
DAG.getEntryNode(), TGA, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
Offset =
|
||||
DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), TGA, MachinePointerInfo());
|
||||
} else {
|
||||
// Local Exec TLS Model
|
||||
assert(model == TLSModel::LocalExec);
|
||||
|
@ -1929,7 +1927,7 @@ SDValue MipsTargetLowering::lowerVASTART(SDValue Op, SelectionDAG &DAG) const {
|
|||
// memory location argument.
|
||||
const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue();
|
||||
return DAG.getStore(Op.getOperand(0), DL, FI, Op.getOperand(1),
|
||||
MachinePointerInfo(SV), false, false, 0);
|
||||
MachinePointerInfo(SV));
|
||||
}
|
||||
|
||||
SDValue MipsTargetLowering::lowerVAARG(SDValue Op, SelectionDAG &DAG) const {
|
||||
|
@ -1942,9 +1940,8 @@ SDValue MipsTargetLowering::lowerVAARG(SDValue Op, SelectionDAG &DAG) const {
|
|||
SDLoc DL(Node);
|
||||
unsigned ArgSlotSizeInBytes = (ABI.IsN32() || ABI.IsN64()) ? 8 : 4;
|
||||
|
||||
SDValue VAListLoad =
|
||||
DAG.getLoad(getPointerTy(DAG.getDataLayout()), DL, Chain, VAListPtr,
|
||||
MachinePointerInfo(SV), false, false, false, 0);
|
||||
SDValue VAListLoad = DAG.getLoad(getPointerTy(DAG.getDataLayout()), DL, Chain,
|
||||
VAListPtr, MachinePointerInfo(SV));
|
||||
SDValue VAList = VAListLoad;
|
||||
|
||||
// Re-align the pointer if necessary.
|
||||
|
@ -1975,7 +1972,7 @@ SDValue MipsTargetLowering::lowerVAARG(SDValue Op, SelectionDAG &DAG) const {
|
|||
DL, VAList.getValueType()));
|
||||
// Store the incremented VAList to the legalized pointer
|
||||
Chain = DAG.getStore(VAListLoad.getValue(1), DL, Tmp3, VAListPtr,
|
||||
MachinePointerInfo(SV), false, false, 0);
|
||||
MachinePointerInfo(SV));
|
||||
|
||||
// In big-endian mode we must adjust the pointer when the load size is smaller
|
||||
// than the argument slot size. We must also reduce the known alignment to
|
||||
|
@ -1988,8 +1985,7 @@ SDValue MipsTargetLowering::lowerVAARG(SDValue Op, SelectionDAG &DAG) const {
|
|||
DAG.getIntPtrConstant(Adjustment, DL));
|
||||
}
|
||||
// Load the actual argument out of the pointer VAList
|
||||
return DAG.getLoad(VT, DL, Chain, VAList, MachinePointerInfo(), false, false,
|
||||
false, 0);
|
||||
return DAG.getLoad(VT, DL, Chain, VAList, MachinePointerInfo());
|
||||
}
|
||||
|
||||
static SDValue lowerFCOPYSIGN32(SDValue Op, SelectionDAG &DAG,
|
||||
|
@ -2379,10 +2375,9 @@ static SDValue lowerFP_TO_SINT_STORE(StoreSDNode *SD, SelectionDAG &DAG) {
|
|||
EVT FPTy = EVT::getFloatingPointVT(Val.getValueSizeInBits());
|
||||
SDValue Tr = DAG.getNode(MipsISD::TruncIntFP, SDLoc(Val), FPTy,
|
||||
Val.getOperand(0));
|
||||
|
||||
return DAG.getStore(SD->getChain(), SDLoc(SD), Tr, SD->getBasePtr(),
|
||||
SD->getPointerInfo(), SD->isVolatile(),
|
||||
SD->isNonTemporal(), SD->getAlignment());
|
||||
SD->getPointerInfo(), SD->getAlignment(),
|
||||
SD->getMemOperand()->getFlags());
|
||||
}
|
||||
|
||||
SDValue MipsTargetLowering::lowerSTORE(SDValue Op, SelectionDAG &DAG) const {
|
||||
|
@ -2576,15 +2571,14 @@ SDValue MipsTargetLowering::passArgOnStack(SDValue StackPtr, unsigned Offset,
|
|||
SDValue PtrOff =
|
||||
DAG.getNode(ISD::ADD, DL, getPointerTy(DAG.getDataLayout()), StackPtr,
|
||||
DAG.getIntPtrConstant(Offset, DL));
|
||||
return DAG.getStore(Chain, DL, Arg, PtrOff, MachinePointerInfo(), false,
|
||||
false, 0);
|
||||
return DAG.getStore(Chain, DL, Arg, PtrOff, MachinePointerInfo());
|
||||
}
|
||||
|
||||
MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo();
|
||||
int FI = MFI->CreateFixedObject(Arg.getValueSizeInBits() / 8, Offset, false);
|
||||
SDValue FIN = DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout()));
|
||||
return DAG.getStore(Chain, DL, Arg, FIN, MachinePointerInfo(),
|
||||
/*isVolatile=*/ true, false, 0);
|
||||
/* Alignment = */ 0, MachineMemOperand::MOVolatile);
|
||||
}
|
||||
|
||||
void MipsTargetLowering::
|
||||
|
@ -3129,8 +3123,7 @@ SDValue MipsTargetLowering::LowerFormalArguments(
|
|||
SDValue FIN = DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout()));
|
||||
SDValue ArgValue = DAG.getLoad(
|
||||
LocVT, DL, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI));
|
||||
OutChains.push_back(ArgValue.getValue(1));
|
||||
|
||||
ArgValue = UnpackFromArgumentSlot(ArgValue, VA, Ins[i].ArgVT, DL, DAG);
|
||||
|
@ -3759,8 +3752,7 @@ void MipsTargetLowering::copyByValRegs(
|
|||
SDValue StorePtr = DAG.getNode(ISD::ADD, DL, PtrTy, FIN,
|
||||
DAG.getConstant(Offset, DL, PtrTy));
|
||||
SDValue Store = DAG.getStore(Chain, DL, DAG.getRegister(VReg, RegTy),
|
||||
StorePtr, MachinePointerInfo(FuncArg, Offset),
|
||||
false, false, 0);
|
||||
StorePtr, MachinePointerInfo(FuncArg, Offset));
|
||||
OutChains.push_back(Store);
|
||||
}
|
||||
}
|
||||
|
@ -3791,8 +3783,7 @@ void MipsTargetLowering::passByValArg(
|
|||
SDValue LoadPtr = DAG.getNode(ISD::ADD, DL, PtrTy, Arg,
|
||||
DAG.getConstant(OffsetInBytes, DL, PtrTy));
|
||||
SDValue LoadVal = DAG.getLoad(RegTy, DL, Chain, LoadPtr,
|
||||
MachinePointerInfo(), false, false, false,
|
||||
Alignment);
|
||||
MachinePointerInfo(), Alignment);
|
||||
MemOpChains.push_back(LoadVal.getValue(1));
|
||||
unsigned ArgReg = ArgRegs[FirstReg + I];
|
||||
RegsToPass.push_back(std::make_pair(ArgReg, LoadVal));
|
||||
|
@ -3819,8 +3810,7 @@ void MipsTargetLowering::passByValArg(
|
|||
PtrTy));
|
||||
SDValue LoadVal = DAG.getExtLoad(
|
||||
ISD::ZEXTLOAD, DL, RegTy, Chain, LoadPtr, MachinePointerInfo(),
|
||||
MVT::getIntegerVT(LoadSizeInBytes * 8), false, false, false,
|
||||
Alignment);
|
||||
MVT::getIntegerVT(LoadSizeInBytes * 8), Alignment);
|
||||
MemOpChains.push_back(LoadVal.getValue(1));
|
||||
|
||||
// Shift the loaded value.
|
||||
|
@ -3903,8 +3893,8 @@ void MipsTargetLowering::writeVarArgRegs(std::vector<SDValue> &OutChains,
|
|||
SDValue ArgValue = DAG.getCopyFromReg(Chain, DL, Reg, RegTy);
|
||||
FI = MFI->CreateFixedObject(RegSizeInBytes, VaArgOffset, true);
|
||||
SDValue PtrOff = DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout()));
|
||||
SDValue Store = DAG.getStore(Chain, DL, ArgValue, PtrOff,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(Chain, DL, ArgValue, PtrOff, MachinePointerInfo());
|
||||
cast<StoreSDNode>(Store.getNode())->getMemOperand()->setValue(
|
||||
(Value *)nullptr);
|
||||
OutChains.push_back(Store);
|
||||
|
|
|
@ -311,8 +311,7 @@ namespace llvm {
|
|||
getTargetNode(N, Ty, DAG, GOTFlag));
|
||||
SDValue Load =
|
||||
DAG.getLoad(Ty, DL, DAG.getEntryNode(), GOT,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()));
|
||||
unsigned LoFlag = IsN32OrN64 ? MipsII::MO_GOT_OFST : MipsII::MO_ABS_LO;
|
||||
SDValue Lo = DAG.getNode(MipsISD::Lo, DL, Ty,
|
||||
getTargetNode(N, Ty, DAG, LoFlag));
|
||||
|
@ -329,7 +328,7 @@ namespace llvm {
|
|||
const MachinePointerInfo &PtrInfo) const {
|
||||
SDValue Tgt = DAG.getNode(MipsISD::Wrapper, DL, Ty, getGlobalReg(DAG, Ty),
|
||||
getTargetNode(N, Ty, DAG, Flag));
|
||||
return DAG.getLoad(Ty, DL, Chain, Tgt, PtrInfo, false, false, false, 0);
|
||||
return DAG.getLoad(Ty, DL, Chain, Tgt, PtrInfo);
|
||||
}
|
||||
|
||||
// This method creates the following nodes, which are necessary for
|
||||
|
@ -346,8 +345,7 @@ namespace llvm {
|
|||
Hi = DAG.getNode(ISD::ADD, DL, Ty, Hi, getGlobalReg(DAG, Ty));
|
||||
SDValue Wrapper = DAG.getNode(MipsISD::Wrapper, DL, Ty, Hi,
|
||||
getTargetNode(N, Ty, DAG, LoFlag));
|
||||
return DAG.getLoad(Ty, DL, Chain, Wrapper, PtrInfo, false, false, false,
|
||||
0);
|
||||
return DAG.getLoad(Ty, DL, Chain, Wrapper, PtrInfo);
|
||||
}
|
||||
|
||||
// This method creates the following nodes, which are necessary for
|
||||
|
|
|
@ -1218,17 +1218,14 @@ SDValue MipsSETargetLowering::lowerLOAD(SDValue Op, SelectionDAG &DAG) const {
|
|||
EVT PtrVT = Ptr.getValueType();
|
||||
|
||||
// i32 load from lower address.
|
||||
SDValue Lo = DAG.getLoad(MVT::i32, DL, Chain, Ptr,
|
||||
MachinePointerInfo(), Nd.isVolatile(),
|
||||
Nd.isNonTemporal(), Nd.isInvariant(),
|
||||
Nd.getAlignment());
|
||||
SDValue Lo = DAG.getLoad(MVT::i32, DL, Chain, Ptr, MachinePointerInfo(),
|
||||
Nd.getAlignment(), Nd.getMemOperand()->getFlags());
|
||||
|
||||
// i32 load from higher address.
|
||||
Ptr = DAG.getNode(ISD::ADD, DL, PtrVT, Ptr, DAG.getConstant(4, DL, PtrVT));
|
||||
SDValue Hi = DAG.getLoad(MVT::i32, DL, Lo.getValue(1), Ptr,
|
||||
MachinePointerInfo(), Nd.isVolatile(),
|
||||
Nd.isNonTemporal(), Nd.isInvariant(),
|
||||
std::min(Nd.getAlignment(), 4U));
|
||||
SDValue Hi = DAG.getLoad(
|
||||
MVT::i32, DL, Lo.getValue(1), Ptr, MachinePointerInfo(),
|
||||
std::min(Nd.getAlignment(), 4U), Nd.getMemOperand()->getFlags());
|
||||
|
||||
if (!Subtarget.isLittle())
|
||||
std::swap(Lo, Hi);
|
||||
|
@ -1257,15 +1254,15 @@ SDValue MipsSETargetLowering::lowerSTORE(SDValue Op, SelectionDAG &DAG) const {
|
|||
std::swap(Lo, Hi);
|
||||
|
||||
// i32 store to lower address.
|
||||
Chain = DAG.getStore(Chain, DL, Lo, Ptr, MachinePointerInfo(),
|
||||
Nd.isVolatile(), Nd.isNonTemporal(), Nd.getAlignment(),
|
||||
Nd.getAAInfo());
|
||||
Chain =
|
||||
DAG.getStore(Chain, DL, Lo, Ptr, MachinePointerInfo(), Nd.getAlignment(),
|
||||
Nd.getMemOperand()->getFlags(), Nd.getAAInfo());
|
||||
|
||||
// i32 store to higher address.
|
||||
Ptr = DAG.getNode(ISD::ADD, DL, PtrVT, Ptr, DAG.getConstant(4, DL, PtrVT));
|
||||
return DAG.getStore(Chain, DL, Hi, Ptr, MachinePointerInfo(),
|
||||
Nd.isVolatile(), Nd.isNonTemporal(),
|
||||
std::min(Nd.getAlignment(), 4U), Nd.getAAInfo());
|
||||
std::min(Nd.getAlignment(), 4U),
|
||||
Nd.getMemOperand()->getFlags(), Nd.getAAInfo());
|
||||
}
|
||||
|
||||
SDValue MipsSETargetLowering::lowerMulDiv(SDValue Op, unsigned NewOpc,
|
||||
|
@ -2181,9 +2178,8 @@ static SDValue lowerMSALoadIntr(SDValue Op, SelectionDAG &DAG, unsigned Intr) {
|
|||
EVT PtrTy = Address->getValueType(0);
|
||||
|
||||
Address = DAG.getNode(ISD::ADD, DL, PtrTy, Address, Offset);
|
||||
|
||||
return DAG.getLoad(ResTy, DL, ChainIn, Address, MachinePointerInfo(), false,
|
||||
false, false, 16);
|
||||
return DAG.getLoad(ResTy, DL, ChainIn, Address, MachinePointerInfo(),
|
||||
/* Alignment = */ 16);
|
||||
}
|
||||
|
||||
SDValue MipsSETargetLowering::lowerINTRINSIC_W_CHAIN(SDValue Op,
|
||||
|
@ -2250,8 +2246,8 @@ static SDValue lowerMSAStoreIntr(SDValue Op, SelectionDAG &DAG, unsigned Intr) {
|
|||
|
||||
Address = DAG.getNode(ISD::ADD, DL, PtrTy, Address, Offset);
|
||||
|
||||
return DAG.getStore(ChainIn, DL, Value, Address, MachinePointerInfo(), false,
|
||||
false, 16);
|
||||
return DAG.getStore(ChainIn, DL, Value, Address, MachinePointerInfo(),
|
||||
/* Alignment = */ 16);
|
||||
}
|
||||
|
||||
SDValue MipsSETargetLowering::lowerINTRINSIC_VOID(SDValue Op,
|
||||
|
|
|
@ -1353,8 +1353,7 @@ SDValue NVPTXTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
|
|||
SDValue srcAddr = DAG.getNode(ISD::ADD, dl, PtrVT, OutVals[OIdx],
|
||||
DAG.getConstant(curOffset, dl, PtrVT));
|
||||
SDValue theVal = DAG.getLoad(elemtype, dl, tempChain, srcAddr,
|
||||
MachinePointerInfo(), false, false, false,
|
||||
PartAlign);
|
||||
MachinePointerInfo(), PartAlign);
|
||||
if (elemtype.getSizeInBits() < 16) {
|
||||
theVal = DAG.getNode(ISD::ANY_EXTEND, dl, MVT::i16, theVal);
|
||||
}
|
||||
|
@ -1886,10 +1885,9 @@ SDValue NVPTXTargetLowering::LowerLOADi1(SDValue Op, SelectionDAG &DAG) const {
|
|||
assert(LD->getExtensionType() == ISD::NON_EXTLOAD);
|
||||
assert(Node->getValueType(0) == MVT::i1 &&
|
||||
"Custom lowering for i1 load only");
|
||||
SDValue newLD =
|
||||
DAG.getLoad(MVT::i16, dl, LD->getChain(), LD->getBasePtr(),
|
||||
LD->getPointerInfo(), LD->isVolatile(), LD->isNonTemporal(),
|
||||
LD->isInvariant(), LD->getAlignment());
|
||||
SDValue newLD = DAG.getLoad(MVT::i16, dl, LD->getChain(), LD->getBasePtr(),
|
||||
LD->getPointerInfo(), LD->getAlignment(),
|
||||
LD->getMemOperand()->getFlags());
|
||||
SDValue result = DAG.getNode(ISD::TRUNCATE, dl, MVT::i1, newLD);
|
||||
// The legalizer (the caller) is expecting two values from the legalized
|
||||
// load, so we build a MergeValues node for it. See ExpandUnalignedLoad()
|
||||
|
@ -2016,13 +2014,10 @@ SDValue NVPTXTargetLowering::LowerSTOREi1(SDValue Op, SelectionDAG &DAG) const {
|
|||
SDValue Tmp2 = ST->getBasePtr();
|
||||
SDValue Tmp3 = ST->getValue();
|
||||
assert(Tmp3.getValueType() == MVT::i1 && "Custom lowering for i1 store only");
|
||||
unsigned Alignment = ST->getAlignment();
|
||||
bool isVolatile = ST->isVolatile();
|
||||
bool isNonTemporal = ST->isNonTemporal();
|
||||
Tmp3 = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i16, Tmp3);
|
||||
SDValue Result = DAG.getTruncStore(Tmp1, dl, Tmp3, Tmp2,
|
||||
ST->getPointerInfo(), MVT::i8, isNonTemporal,
|
||||
isVolatile, Alignment);
|
||||
SDValue Result =
|
||||
DAG.getTruncStore(Tmp1, dl, Tmp3, Tmp2, ST->getPointerInfo(), MVT::i8,
|
||||
ST->getAlignment(), ST->getMemOperand()->getFlags());
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
@ -2186,12 +2181,10 @@ SDValue NVPTXTargetLowering::LowerFormalArguments(
|
|||
ISD::LoadExtType ExtOp = Ins[InsIdx].Flags.isSExt() ?
|
||||
ISD::SEXTLOAD : ISD::ZEXTLOAD;
|
||||
p = DAG.getExtLoad(ExtOp, dl, Ins[InsIdx].VT, Root, srcAddr,
|
||||
MachinePointerInfo(srcValue), partVT, false,
|
||||
false, false, partAlign);
|
||||
MachinePointerInfo(srcValue), partVT, partAlign);
|
||||
} else {
|
||||
p = DAG.getLoad(partVT, dl, Root, srcAddr,
|
||||
MachinePointerInfo(srcValue), false, false, false,
|
||||
partAlign);
|
||||
MachinePointerInfo(srcValue), partAlign);
|
||||
}
|
||||
if (p.getNode())
|
||||
p.getNode()->setIROrder(idx + 1);
|
||||
|
@ -2217,9 +2210,9 @@ SDValue NVPTXTargetLowering::LowerFormalArguments(
|
|||
Value *SrcValue = Constant::getNullValue(PointerType::get(
|
||||
EltVT.getTypeForEVT(F->getContext()), llvm::ADDRESS_SPACE_PARAM));
|
||||
SDValue P = DAG.getLoad(
|
||||
EltVT, dl, Root, Arg, MachinePointerInfo(SrcValue), false, false,
|
||||
true,
|
||||
DL.getABITypeAlignment(EltVT.getTypeForEVT(F->getContext())));
|
||||
EltVT, dl, Root, Arg, MachinePointerInfo(SrcValue),
|
||||
DL.getABITypeAlignment(EltVT.getTypeForEVT(F->getContext())),
|
||||
MachineMemOperand::MOInvariant);
|
||||
if (P.getNode())
|
||||
P.getNode()->setIROrder(idx + 1);
|
||||
|
||||
|
@ -2234,9 +2227,9 @@ SDValue NVPTXTargetLowering::LowerFormalArguments(
|
|||
Value *SrcValue = Constant::getNullValue(PointerType::get(
|
||||
VecVT.getTypeForEVT(F->getContext()), llvm::ADDRESS_SPACE_PARAM));
|
||||
SDValue P = DAG.getLoad(
|
||||
VecVT, dl, Root, Arg, MachinePointerInfo(SrcValue), false, false,
|
||||
true,
|
||||
DL.getABITypeAlignment(VecVT.getTypeForEVT(F->getContext())));
|
||||
VecVT, dl, Root, Arg, MachinePointerInfo(SrcValue),
|
||||
DL.getABITypeAlignment(VecVT.getTypeForEVT(F->getContext())),
|
||||
MachineMemOperand::MOInvariant);
|
||||
if (P.getNode())
|
||||
P.getNode()->setIROrder(idx + 1);
|
||||
|
||||
|
@ -2256,10 +2249,9 @@ SDValue NVPTXTargetLowering::LowerFormalArguments(
|
|||
} else {
|
||||
// V4 loads
|
||||
// We have at least 4 elements (<3 x Ty> expands to 4 elements) and
|
||||
// the
|
||||
// vector will be expanded to a power of 2 elements, so we know we can
|
||||
// always round up to the next multiple of 4 when creating the vector
|
||||
// loads.
|
||||
// the vector will be expanded to a power of 2 elements, so we know we
|
||||
// can always round up to the next multiple of 4 when creating the
|
||||
// vector loads.
|
||||
// e.g. 4 elem => 1 ld.v4
|
||||
// 6 elem => 2 ld.v4
|
||||
// 8 elem => 2 ld.v4
|
||||
|
@ -2277,9 +2269,9 @@ SDValue NVPTXTargetLowering::LowerFormalArguments(
|
|||
SDValue SrcAddr = DAG.getNode(ISD::ADD, dl, PtrVT, Arg,
|
||||
DAG.getConstant(Ofst, dl, PtrVT));
|
||||
SDValue P = DAG.getLoad(
|
||||
VecVT, dl, Root, SrcAddr, MachinePointerInfo(SrcValue), false,
|
||||
false, true,
|
||||
DL.getABITypeAlignment(VecVT.getTypeForEVT(F->getContext())));
|
||||
VecVT, dl, Root, SrcAddr, MachinePointerInfo(SrcValue),
|
||||
DL.getABITypeAlignment(VecVT.getTypeForEVT(F->getContext())),
|
||||
MachineMemOperand::MOInvariant);
|
||||
if (P.getNode())
|
||||
P.getNode()->setIROrder(idx + 1);
|
||||
|
||||
|
@ -2313,12 +2305,11 @@ SDValue NVPTXTargetLowering::LowerFormalArguments(
|
|||
ISD::SEXTLOAD : ISD::ZEXTLOAD;
|
||||
p = DAG.getExtLoad(
|
||||
ExtOp, dl, Ins[InsIdx].VT, Root, Arg, MachinePointerInfo(srcValue),
|
||||
ObjectVT, false, false, false,
|
||||
ObjectVT,
|
||||
DL.getABITypeAlignment(ObjectVT.getTypeForEVT(F->getContext())));
|
||||
} else {
|
||||
p = DAG.getLoad(
|
||||
Ins[InsIdx].VT, dl, Root, Arg, MachinePointerInfo(srcValue), false,
|
||||
false, false,
|
||||
Ins[InsIdx].VT, dl, Root, Arg, MachinePointerInfo(srcValue),
|
||||
DL.getABITypeAlignment(ObjectVT.getTypeForEVT(F->getContext())));
|
||||
}
|
||||
if (p.getNode())
|
||||
|
|
|
@ -2330,8 +2330,7 @@ SDValue PPCTargetLowering::LowerGlobalAddress(SDValue Op,
|
|||
// If the global reference is actually to a non-lazy-pointer, we have to do an
|
||||
// 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, false, 0);
|
||||
Ptr = DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), Ptr, MachinePointerInfo());
|
||||
return Ptr;
|
||||
}
|
||||
|
||||
|
@ -2412,8 +2411,7 @@ SDValue PPCTargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG) const {
|
|||
|
||||
// gpr_index
|
||||
SDValue GprIndex = DAG.getExtLoad(ISD::ZEXTLOAD, dl, MVT::i32, InChain,
|
||||
VAListPtr, MachinePointerInfo(SV), MVT::i8,
|
||||
false, false, false, 0);
|
||||
VAListPtr, MachinePointerInfo(SV), MVT::i8);
|
||||
InChain = GprIndex.getValue(1);
|
||||
|
||||
if (VT == MVT::i64) {
|
||||
|
@ -2435,8 +2433,7 @@ SDValue PPCTargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG) const {
|
|||
|
||||
// fpr
|
||||
SDValue FprIndex = DAG.getExtLoad(ISD::ZEXTLOAD, dl, MVT::i32, InChain,
|
||||
FprPtr, MachinePointerInfo(SV), MVT::i8,
|
||||
false, false, false, 0);
|
||||
FprPtr, MachinePointerInfo(SV), MVT::i8);
|
||||
InChain = FprIndex.getValue(1);
|
||||
|
||||
SDValue RegSaveAreaPtr = DAG.getNode(ISD::ADD, dl, PtrVT, VAListPtr,
|
||||
|
@ -2446,14 +2443,12 @@ SDValue PPCTargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG) const {
|
|||
DAG.getConstant(4, dl, MVT::i32));
|
||||
|
||||
// areas
|
||||
SDValue OverflowArea = DAG.getLoad(MVT::i32, dl, InChain, OverflowAreaPtr,
|
||||
MachinePointerInfo(), false, false,
|
||||
false, 0);
|
||||
SDValue OverflowArea =
|
||||
DAG.getLoad(MVT::i32, dl, InChain, OverflowAreaPtr, MachinePointerInfo());
|
||||
InChain = OverflowArea.getValue(1);
|
||||
|
||||
SDValue RegSaveArea = DAG.getLoad(MVT::i32, dl, InChain, RegSaveAreaPtr,
|
||||
MachinePointerInfo(), false, false,
|
||||
false, 0);
|
||||
SDValue RegSaveArea =
|
||||
DAG.getLoad(MVT::i32, dl, InChain, RegSaveAreaPtr, MachinePointerInfo());
|
||||
InChain = RegSaveArea.getValue(1);
|
||||
|
||||
// select overflow_area if index > 8
|
||||
|
@ -2483,8 +2478,7 @@ SDValue PPCTargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG) const {
|
|||
|
||||
InChain = DAG.getTruncStore(InChain, dl, IndexPlus1,
|
||||
VT.isInteger() ? VAListPtr : FprPtr,
|
||||
MachinePointerInfo(SV),
|
||||
MVT::i8, false, false, 0);
|
||||
MachinePointerInfo(SV), MVT::i8);
|
||||
|
||||
// determine if we should load from reg_save_area or overflow_area
|
||||
SDValue Result = DAG.getNode(ISD::SELECT, dl, PtrVT, CC, OurReg, OverflowArea);
|
||||
|
@ -2497,13 +2491,10 @@ SDValue PPCTargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG) const {
|
|||
OverflowArea = DAG.getNode(ISD::SELECT, dl, MVT::i32, CC, OverflowArea,
|
||||
OverflowAreaPlusN);
|
||||
|
||||
InChain = DAG.getTruncStore(InChain, dl, OverflowArea,
|
||||
OverflowAreaPtr,
|
||||
MachinePointerInfo(),
|
||||
MVT::i32, false, false, 0);
|
||||
InChain = DAG.getTruncStore(InChain, dl, OverflowArea, OverflowAreaPtr,
|
||||
MachinePointerInfo(), MVT::i32);
|
||||
|
||||
return DAG.getLoad(VT, dl, InChain, Result, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
return DAG.getLoad(VT, dl, InChain, Result, MachinePointerInfo());
|
||||
}
|
||||
|
||||
SDValue PPCTargetLowering::LowerVACOPY(SDValue Op, SelectionDAG &DAG) const {
|
||||
|
@ -2572,8 +2563,7 @@ SDValue PPCTargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG) const {
|
|||
SDValue FR = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(), PtrVT);
|
||||
const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue();
|
||||
return DAG.getStore(Op.getOperand(0), dl, FR, Op.getOperand(1),
|
||||
MachinePointerInfo(SV),
|
||||
false, false, 0);
|
||||
MachinePointerInfo(SV));
|
||||
}
|
||||
|
||||
// For the 32-bit SVR4 ABI we follow the layout of the va_list struct.
|
||||
|
@ -2619,35 +2609,29 @@ SDValue PPCTargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG) const {
|
|||
const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue();
|
||||
|
||||
// Store first byte : number of int regs
|
||||
SDValue firstStore = DAG.getTruncStore(Op.getOperand(0), dl, ArgGPR,
|
||||
Op.getOperand(1),
|
||||
MachinePointerInfo(SV),
|
||||
MVT::i8, false, false, 0);
|
||||
SDValue firstStore =
|
||||
DAG.getTruncStore(Op.getOperand(0), dl, ArgGPR, Op.getOperand(1),
|
||||
MachinePointerInfo(SV), MVT::i8);
|
||||
uint64_t nextOffset = FPROffset;
|
||||
SDValue nextPtr = DAG.getNode(ISD::ADD, dl, PtrVT, Op.getOperand(1),
|
||||
ConstFPROffset);
|
||||
|
||||
// Store second byte : number of float regs
|
||||
SDValue secondStore =
|
||||
DAG.getTruncStore(firstStore, dl, ArgFPR, nextPtr,
|
||||
MachinePointerInfo(SV, nextOffset), MVT::i8,
|
||||
false, false, 0);
|
||||
DAG.getTruncStore(firstStore, dl, ArgFPR, nextPtr,
|
||||
MachinePointerInfo(SV, nextOffset), MVT::i8);
|
||||
nextOffset += StackOffset;
|
||||
nextPtr = DAG.getNode(ISD::ADD, dl, PtrVT, nextPtr, ConstStackOffset);
|
||||
|
||||
// Store second word : arguments given on stack
|
||||
SDValue thirdStore =
|
||||
DAG.getStore(secondStore, dl, StackOffsetFI, nextPtr,
|
||||
MachinePointerInfo(SV, nextOffset),
|
||||
false, false, 0);
|
||||
SDValue thirdStore = DAG.getStore(secondStore, dl, StackOffsetFI, nextPtr,
|
||||
MachinePointerInfo(SV, nextOffset));
|
||||
nextOffset += FrameOffset;
|
||||
nextPtr = DAG.getNode(ISD::ADD, dl, PtrVT, nextPtr, ConstFrameOffset);
|
||||
|
||||
// Store third word : arguments given in registers
|
||||
return DAG.getStore(thirdStore, dl, FR, nextPtr,
|
||||
MachinePointerInfo(SV, nextOffset),
|
||||
false, false, 0);
|
||||
|
||||
MachinePointerInfo(SV, nextOffset));
|
||||
}
|
||||
|
||||
#include "PPCGenCallingConv.inc"
|
||||
|
@ -2998,9 +2982,8 @@ SDValue PPCTargetLowering::LowerFormalArguments_32SVR4(
|
|||
|
||||
// Create load nodes to retrieve arguments from the stack.
|
||||
SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
|
||||
InVals.push_back(DAG.getLoad(VA.getValVT(), dl, Chain, FIN,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0));
|
||||
InVals.push_back(
|
||||
DAG.getLoad(VA.getValVT(), dl, Chain, FIN, MachinePointerInfo()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3072,8 +3055,8 @@ SDValue PPCTargetLowering::LowerFormalArguments_32SVR4(
|
|||
VReg = MF.addLiveIn(GPArgRegs[GPRIndex], &PPC::GPRCRegClass);
|
||||
|
||||
SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT);
|
||||
SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(Val.getValue(1), dl, Val, FIN, MachinePointerInfo());
|
||||
MemOps.push_back(Store);
|
||||
// Increment the address by four for the next argument to store
|
||||
SDValue PtrOff = DAG.getConstant(PtrVT.getSizeInBits()/8, dl, PtrVT);
|
||||
|
@ -3091,8 +3074,8 @@ SDValue PPCTargetLowering::LowerFormalArguments_32SVR4(
|
|||
VReg = MF.addLiveIn(FPArgRegs[FPRIndex], &PPC::F8RCRegClass);
|
||||
|
||||
SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, MVT::f64);
|
||||
SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(Val.getValue(1), dl, Val, FIN, MachinePointerInfo());
|
||||
MemOps.push_back(Store);
|
||||
// Increment the address by eight for the next argument to store
|
||||
SDValue PtrOff = DAG.getConstant(MVT(MVT::f64).getSizeInBits()/8, dl,
|
||||
|
@ -3285,15 +3268,13 @@ SDValue PPCTargetLowering::LowerFormalArguments_64SVR4(
|
|||
EVT ObjType = (ObjSize == 1 ? MVT::i8 :
|
||||
(ObjSize == 2 ? MVT::i16 : MVT::i32));
|
||||
Store = DAG.getTruncStore(Val.getValue(1), dl, Val, Arg,
|
||||
MachinePointerInfo(&*FuncArg), ObjType,
|
||||
false, false, 0);
|
||||
MachinePointerInfo(&*FuncArg), ObjType);
|
||||
} else {
|
||||
// For sizes that don't fit a truncating store (3, 5, 6, 7),
|
||||
// store the whole register as-is to the parameter save area
|
||||
// slot.
|
||||
Store =
|
||||
DAG.getStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo(&*FuncArg), false, false, 0);
|
||||
Store = DAG.getStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo(&*FuncArg));
|
||||
}
|
||||
|
||||
MemOps.push_back(Store);
|
||||
|
@ -3320,9 +3301,8 @@ SDValue PPCTargetLowering::LowerFormalArguments_64SVR4(
|
|||
SDValue Off = DAG.getConstant(j, dl, PtrVT);
|
||||
Addr = DAG.getNode(ISD::ADD, dl, Off.getValueType(), Addr, Off);
|
||||
}
|
||||
SDValue Store =
|
||||
DAG.getStore(Val.getValue(1), dl, Val, Addr,
|
||||
MachinePointerInfo(&*FuncArg, j), false, false, 0);
|
||||
SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, Addr,
|
||||
MachinePointerInfo(&*FuncArg, j));
|
||||
MemOps.push_back(Store);
|
||||
++GPR_idx;
|
||||
}
|
||||
|
@ -3488,8 +3468,7 @@ SDValue PPCTargetLowering::LowerFormalArguments_64SVR4(
|
|||
CurArgOffset += ArgSize - ObjSize;
|
||||
int FI = MFI->CreateFixedObject(ObjSize, CurArgOffset, isImmutable);
|
||||
SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
|
||||
ArgVal = DAG.getLoad(ObjectVT, dl, Chain, FIN, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
ArgVal = DAG.getLoad(ObjectVT, dl, Chain, FIN, MachinePointerInfo());
|
||||
}
|
||||
|
||||
InVals.push_back(ArgVal);
|
||||
|
@ -3526,8 +3505,8 @@ SDValue PPCTargetLowering::LowerFormalArguments_64SVR4(
|
|||
GPR_idx < Num_GPR_Regs; ++GPR_idx) {
|
||||
unsigned VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass);
|
||||
SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT);
|
||||
SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(Val.getValue(1), dl, Val, FIN, MachinePointerInfo());
|
||||
MemOps.push_back(Store);
|
||||
// Increment the address by four for the next argument to store
|
||||
SDValue PtrOff = DAG.getConstant(PtrByteSize, dl, PtrVT);
|
||||
|
@ -3695,9 +3674,9 @@ SDValue PPCTargetLowering::LowerFormalArguments_Darwin(
|
|||
VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::GPRCRegClass);
|
||||
SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT);
|
||||
EVT ObjType = ObjSize == 1 ? MVT::i8 : MVT::i16;
|
||||
SDValue Store = DAG.getTruncStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo(&*FuncArg),
|
||||
ObjType, false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getTruncStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo(&*FuncArg), ObjType);
|
||||
MemOps.push_back(Store);
|
||||
++GPR_idx;
|
||||
}
|
||||
|
@ -3719,9 +3698,8 @@ SDValue PPCTargetLowering::LowerFormalArguments_Darwin(
|
|||
int FI = MFI->CreateFixedObject(PtrByteSize, ArgOffset, true);
|
||||
SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
|
||||
SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT);
|
||||
SDValue Store =
|
||||
DAG.getStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo(&*FuncArg, j), false, false, 0);
|
||||
SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo(&*FuncArg, j));
|
||||
MemOps.push_back(Store);
|
||||
++GPR_idx;
|
||||
ArgOffset += PtrByteSize;
|
||||
|
@ -3842,8 +3820,7 @@ SDValue PPCTargetLowering::LowerFormalArguments_Darwin(
|
|||
CurArgOffset + (ArgSize - ObjSize),
|
||||
isImmutable);
|
||||
SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
|
||||
ArgVal = DAG.getLoad(ObjectVT, dl, Chain, FIN, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
ArgVal = DAG.getLoad(ObjectVT, dl, Chain, FIN, MachinePointerInfo());
|
||||
}
|
||||
|
||||
InVals.push_back(ArgVal);
|
||||
|
@ -3888,8 +3865,8 @@ SDValue PPCTargetLowering::LowerFormalArguments_Darwin(
|
|||
VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::GPRCRegClass);
|
||||
|
||||
SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT);
|
||||
SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(Val.getValue(1), dl, Val, FIN, MachinePointerInfo());
|
||||
MemOps.push_back(Store);
|
||||
// Increment the address by four for the next argument to store
|
||||
SDValue PtrOff = DAG.getConstant(PtrVT.getSizeInBits()/8, dl, PtrVT);
|
||||
|
@ -4170,8 +4147,7 @@ static void StoreTailCallArgumentsToStackSlot(
|
|||
// Store relative to framepointer.
|
||||
MemOpChains.push_back(DAG.getStore(
|
||||
Chain, dl, Arg, FIN,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI), false,
|
||||
false, 0));
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4193,8 +4169,7 @@ static SDValue EmitTailCallStoreFPAndRetAddr(SelectionDAG &DAG, SDValue Chain,
|
|||
EVT VT = isPPC64 ? MVT::i64 : MVT::i32;
|
||||
SDValue NewRetAddrFrIdx = DAG.getFrameIndex(NewRetAddr, VT);
|
||||
Chain = DAG.getStore(Chain, dl, OldRetAddr, NewRetAddrFrIdx,
|
||||
MachinePointerInfo::getFixedStack(MF, NewRetAddr),
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(MF, NewRetAddr));
|
||||
|
||||
// When using the 32/64-bit SVR4 ABI there is no need to move the FP stack
|
||||
// slot as the FP is never overwritten.
|
||||
|
@ -4203,10 +4178,9 @@ static SDValue EmitTailCallStoreFPAndRetAddr(SelectionDAG &DAG, SDValue Chain,
|
|||
int NewFPIdx = MF.getFrameInfo()->CreateFixedObject(SlotSize, NewFPLoc,
|
||||
true);
|
||||
SDValue NewFramePtrIdx = DAG.getFrameIndex(NewFPIdx, VT);
|
||||
Chain = DAG.getStore(
|
||||
Chain, dl, OldFP, NewFramePtrIdx,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), NewFPIdx),
|
||||
false, false, 0);
|
||||
Chain = DAG.getStore(Chain, dl, OldFP, NewFramePtrIdx,
|
||||
MachinePointerInfo::getFixedStack(
|
||||
DAG.getMachineFunction(), NewFPIdx));
|
||||
}
|
||||
}
|
||||
return Chain;
|
||||
|
@ -4240,16 +4214,14 @@ SDValue PPCTargetLowering::EmitTailCallLoadFPAndRetAddr(
|
|||
// Load the LR and FP stack slot for later adjusting.
|
||||
EVT VT = Subtarget.isPPC64() ? MVT::i64 : MVT::i32;
|
||||
LROpOut = getReturnAddrFrameIndex(DAG);
|
||||
LROpOut = DAG.getLoad(VT, dl, Chain, LROpOut, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
LROpOut = DAG.getLoad(VT, dl, Chain, LROpOut, MachinePointerInfo());
|
||||
Chain = SDValue(LROpOut.getNode(), 1);
|
||||
|
||||
// When using the 32/64-bit SVR4 ABI there is no need to load the FP stack
|
||||
// slot as the FP is never overwritten.
|
||||
if (Subtarget.isDarwinABI()) {
|
||||
FPOpOut = getFramePointerFrameIndex(DAG);
|
||||
FPOpOut = DAG.getLoad(VT, dl, Chain, FPOpOut, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
FPOpOut = DAG.getLoad(VT, dl, Chain, FPOpOut, MachinePointerInfo());
|
||||
Chain = SDValue(FPOpOut.getNode(), 1);
|
||||
}
|
||||
}
|
||||
|
@ -4289,9 +4261,9 @@ static void LowerMemOpCallTo(
|
|||
PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr,
|
||||
DAG.getConstant(ArgOffset, dl, PtrVT));
|
||||
}
|
||||
MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, PtrOff,
|
||||
MachinePointerInfo(), false, false, 0));
|
||||
// Calculate and remember argument location.
|
||||
MemOpChains.push_back(
|
||||
DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo()));
|
||||
// Calculate and remember argument location.
|
||||
} else CalculateTailCallArgDest(DAG, MF, isPPC64, Arg, SPDiff, ArgOffset,
|
||||
TailCallArguments);
|
||||
}
|
||||
|
@ -4447,24 +4419,26 @@ PrepareCall(SelectionDAG &DAG, SDValue &Callee, SDValue &InFlag, SDValue &Chain,
|
|||
if (LDChain.getValueType() == MVT::Glue)
|
||||
LDChain = CallSeqStart.getValue(CallSeqStart->getNumValues()-2);
|
||||
|
||||
bool LoadsInv = Subtarget.hasInvariantFunctionDescriptors();
|
||||
auto MMOFlags = Subtarget.hasInvariantFunctionDescriptors()
|
||||
? MachineMemOperand::MOInvariant
|
||||
: MachineMemOperand::MONone;
|
||||
|
||||
MachinePointerInfo MPI(CS ? CS->getCalledValue() : nullptr);
|
||||
SDValue LoadFuncPtr = DAG.getLoad(MVT::i64, dl, LDChain, Callee, MPI,
|
||||
false, false, LoadsInv, 8);
|
||||
/* Alignment = */ 8, MMOFlags);
|
||||
|
||||
// Load environment pointer into r11.
|
||||
SDValue PtrOff = DAG.getIntPtrConstant(16, dl);
|
||||
SDValue AddPtr = DAG.getNode(ISD::ADD, dl, MVT::i64, Callee, PtrOff);
|
||||
SDValue LoadEnvPtr = DAG.getLoad(MVT::i64, dl, LDChain, AddPtr,
|
||||
MPI.getWithOffset(16), false, false,
|
||||
LoadsInv, 8);
|
||||
SDValue LoadEnvPtr =
|
||||
DAG.getLoad(MVT::i64, dl, LDChain, AddPtr, MPI.getWithOffset(16),
|
||||
/* Alignment = */ 8, MMOFlags);
|
||||
|
||||
SDValue TOCOff = DAG.getIntPtrConstant(8, dl);
|
||||
SDValue AddTOC = DAG.getNode(ISD::ADD, dl, MVT::i64, Callee, TOCOff);
|
||||
SDValue TOCPtr = DAG.getLoad(MVT::i64, dl, LDChain, AddTOC,
|
||||
MPI.getWithOffset(8), false, false,
|
||||
LoadsInv, 8);
|
||||
SDValue TOCPtr =
|
||||
DAG.getLoad(MVT::i64, dl, LDChain, AddTOC, MPI.getWithOffset(8),
|
||||
/* Alignment = */ 8, MMOFlags);
|
||||
|
||||
setUsesTOCBasePtr(DAG);
|
||||
SDValue TOCVal = DAG.getCopyToReg(Chain, dl, PPC::X2, TOCPtr,
|
||||
|
@ -4920,9 +4894,8 @@ SDValue PPCTargetLowering::LowerCall_32SVR4(
|
|||
PtrOff = DAG.getNode(ISD::ADD, dl, getPointerTy(MF.getDataLayout()),
|
||||
StackPtr, PtrOff);
|
||||
|
||||
MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, PtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0));
|
||||
MemOpChains.push_back(
|
||||
DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo()));
|
||||
} else {
|
||||
// Calculate and remember argument location.
|
||||
CalculateTailCallArgDest(DAG, MF, false, Arg, SPDiff, LocMemOffset,
|
||||
|
@ -5226,8 +5199,7 @@ SDValue PPCTargetLowering::LowerCall_64SVR4(
|
|||
EVT VT = (Size==1) ? MVT::i8 : ((Size==2) ? MVT::i16 : MVT::i32);
|
||||
if (GPR_idx != NumGPRs) {
|
||||
SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, PtrVT, Chain, Arg,
|
||||
MachinePointerInfo(), VT,
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo(), VT);
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
|
||||
|
@ -5287,9 +5259,8 @@ SDValue PPCTargetLowering::LowerCall_64SVR4(
|
|||
Flags, DAG, dl);
|
||||
|
||||
// Load the slot into the register.
|
||||
SDValue Load = DAG.getLoad(PtrVT, dl, Chain, PtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Load =
|
||||
DAG.getLoad(PtrVT, dl, Chain, PtrOff, MachinePointerInfo());
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
|
||||
|
@ -5304,9 +5275,8 @@ SDValue PPCTargetLowering::LowerCall_64SVR4(
|
|||
SDValue Const = DAG.getConstant(j, dl, PtrOff.getValueType());
|
||||
SDValue AddArg = DAG.getNode(ISD::ADD, dl, PtrVT, Arg, Const);
|
||||
if (GPR_idx != NumGPRs) {
|
||||
SDValue Load = DAG.getLoad(PtrVT, dl, Chain, AddArg,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Load =
|
||||
DAG.getLoad(PtrVT, dl, Chain, AddArg, MachinePointerInfo());
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
ArgOffset += PtrByteSize;
|
||||
|
@ -5460,13 +5430,12 @@ SDValue PPCTargetLowering::LowerCall_64SVR4(
|
|||
if (isVarArg) {
|
||||
// We could elide this store in the case where the object fits
|
||||
// entirely in R registers. Maybe later.
|
||||
SDValue Store = DAG.getStore(Chain, dl, Arg, PtrOff,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo());
|
||||
MemOpChains.push_back(Store);
|
||||
if (VR_idx != NumVRs) {
|
||||
SDValue Load = DAG.getLoad(MVT::v4f32, dl, Store, PtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Load =
|
||||
DAG.getLoad(MVT::v4f32, dl, Store, PtrOff, MachinePointerInfo());
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
|
||||
unsigned VReg = (Arg.getSimpleValueType() == MVT::v2f64 ||
|
||||
|
@ -5482,8 +5451,8 @@ SDValue PPCTargetLowering::LowerCall_64SVR4(
|
|||
break;
|
||||
SDValue Ix = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff,
|
||||
DAG.getConstant(i, dl, PtrVT));
|
||||
SDValue Load = DAG.getLoad(PtrVT, dl, Store, Ix, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Load =
|
||||
DAG.getLoad(PtrVT, dl, Store, Ix, MachinePointerInfo());
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
}
|
||||
|
@ -5524,13 +5493,12 @@ SDValue PPCTargetLowering::LowerCall_64SVR4(
|
|||
if (isVarArg) {
|
||||
// We could elide this store in the case where the object fits
|
||||
// entirely in R registers. Maybe later.
|
||||
SDValue Store = DAG.getStore(Chain, dl, Arg, PtrOff,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo());
|
||||
MemOpChains.push_back(Store);
|
||||
if (QFPR_idx != NumQFPRs) {
|
||||
SDValue Load = DAG.getLoad(IsF32 ? MVT::v4f32 : MVT::v4f64, dl,
|
||||
Store, PtrOff, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Load = DAG.getLoad(IsF32 ? MVT::v4f32 : MVT::v4f64, dl, Store,
|
||||
PtrOff, MachinePointerInfo());
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(QFPR[QFPR_idx++], Load));
|
||||
}
|
||||
|
@ -5540,8 +5508,8 @@ SDValue PPCTargetLowering::LowerCall_64SVR4(
|
|||
break;
|
||||
SDValue Ix = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff,
|
||||
DAG.getConstant(i, dl, PtrVT));
|
||||
SDValue Load = DAG.getLoad(PtrVT, dl, Store, Ix, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Load =
|
||||
DAG.getLoad(PtrVT, dl, Store, Ix, MachinePointerInfo());
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
}
|
||||
|
@ -5590,8 +5558,7 @@ SDValue PPCTargetLowering::LowerCall_64SVR4(
|
|||
SDValue AddPtr = DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr, PtrOff);
|
||||
Chain = DAG.getStore(
|
||||
Val.getValue(1), dl, Val, AddPtr,
|
||||
MachinePointerInfo::getStack(DAG.getMachineFunction(), TOCSaveOffset),
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getStack(DAG.getMachineFunction(), TOCSaveOffset));
|
||||
// In the ELFv2 ABI, R12 must contain the address of an indirect callee.
|
||||
// This does not mean the MTCTR instruction must use R12; it's easier
|
||||
// to model this as an extra parameter, so do that.
|
||||
|
@ -5781,8 +5748,7 @@ SDValue PPCTargetLowering::LowerCall_Darwin(
|
|||
EVT VT = (Size==1) ? MVT::i8 : MVT::i16;
|
||||
if (GPR_idx != NumGPRs) {
|
||||
SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, PtrVT, Chain, Arg,
|
||||
MachinePointerInfo(), VT,
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo(), VT);
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
|
||||
|
@ -5812,9 +5778,8 @@ SDValue PPCTargetLowering::LowerCall_Darwin(
|
|||
SDValue Const = DAG.getConstant(j, dl, PtrOff.getValueType());
|
||||
SDValue AddArg = DAG.getNode(ISD::ADD, dl, PtrVT, Arg, Const);
|
||||
if (GPR_idx != NumGPRs) {
|
||||
SDValue Load = DAG.getLoad(PtrVT, dl, Chain, AddArg,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Load =
|
||||
DAG.getLoad(PtrVT, dl, Chain, AddArg, MachinePointerInfo());
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
ArgOffset += PtrByteSize;
|
||||
|
@ -5849,24 +5814,22 @@ SDValue PPCTargetLowering::LowerCall_Darwin(
|
|||
RegsToPass.push_back(std::make_pair(FPR[FPR_idx++], Arg));
|
||||
|
||||
if (isVarArg) {
|
||||
SDValue Store = DAG.getStore(Chain, dl, Arg, PtrOff,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo());
|
||||
MemOpChains.push_back(Store);
|
||||
|
||||
// Float varargs are always shadowed in available integer registers
|
||||
if (GPR_idx != NumGPRs) {
|
||||
SDValue Load = DAG.getLoad(PtrVT, dl, Store, PtrOff,
|
||||
MachinePointerInfo(), false, false,
|
||||
false, 0);
|
||||
SDValue Load =
|
||||
DAG.getLoad(PtrVT, dl, Store, PtrOff, MachinePointerInfo());
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
}
|
||||
if (GPR_idx != NumGPRs && Arg.getValueType() == MVT::f64 && !isPPC64){
|
||||
SDValue ConstFour = DAG.getConstant(4, dl, PtrOff.getValueType());
|
||||
PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, ConstFour);
|
||||
SDValue Load = DAG.getLoad(PtrVT, dl, Store, PtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Load =
|
||||
DAG.getLoad(PtrVT, dl, Store, PtrOff, MachinePointerInfo());
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
}
|
||||
|
@ -5908,13 +5871,12 @@ SDValue PPCTargetLowering::LowerCall_Darwin(
|
|||
// entirely in R registers. Maybe later.
|
||||
PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr,
|
||||
DAG.getConstant(ArgOffset, dl, PtrVT));
|
||||
SDValue Store = DAG.getStore(Chain, dl, Arg, PtrOff,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo());
|
||||
MemOpChains.push_back(Store);
|
||||
if (VR_idx != NumVRs) {
|
||||
SDValue Load = DAG.getLoad(MVT::v4f32, dl, Store, PtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Load =
|
||||
DAG.getLoad(MVT::v4f32, dl, Store, PtrOff, MachinePointerInfo());
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(VR[VR_idx++], Load));
|
||||
}
|
||||
|
@ -5924,8 +5886,8 @@ SDValue PPCTargetLowering::LowerCall_Darwin(
|
|||
break;
|
||||
SDValue Ix = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff,
|
||||
DAG.getConstant(i, dl, PtrVT));
|
||||
SDValue Load = DAG.getLoad(PtrVT, dl, Store, Ix, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Load =
|
||||
DAG.getLoad(PtrVT, dl, Store, Ix, MachinePointerInfo());
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
}
|
||||
|
@ -6120,16 +6082,14 @@ SDValue PPCTargetLowering::LowerSTACKRESTORE(SDValue Op,
|
|||
SDValue SaveSP = Op.getOperand(1);
|
||||
|
||||
// Load the old link SP.
|
||||
SDValue LoadLinkSP = DAG.getLoad(PtrVT, dl, Chain, StackPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue LoadLinkSP =
|
||||
DAG.getLoad(PtrVT, dl, Chain, StackPtr, MachinePointerInfo());
|
||||
|
||||
// Restore the stack pointer.
|
||||
Chain = DAG.getCopyToReg(LoadLinkSP.getValue(1), dl, SP, SaveSP);
|
||||
|
||||
// Store the old link SP.
|
||||
return DAG.getStore(Chain, dl, LoadLinkSP, StackPtr, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
return DAG.getStore(Chain, dl, LoadLinkSP, StackPtr, MachinePointerInfo());
|
||||
}
|
||||
|
||||
SDValue PPCTargetLowering::getReturnAddrFrameIndex(SelectionDAG &DAG) const {
|
||||
|
@ -6418,8 +6378,7 @@ void PPCTargetLowering::LowerFP_TO_INTForReuse(SDValue Op, ReuseLoadInfo &RLI,
|
|||
Chain = DAG.getMemIntrinsicNode(PPCISD::STFIWX, dl,
|
||||
DAG.getVTList(MVT::Other), Ops, MVT::i32, MMO);
|
||||
} else
|
||||
Chain = DAG.getStore(DAG.getEntryNode(), dl, Tmp, FIPtr,
|
||||
MPI, false, false, 0);
|
||||
Chain = DAG.getStore(DAG.getEntryNode(), dl, Tmp, FIPtr, MPI);
|
||||
|
||||
// Result is a load from the stack slot. If loading 4 bytes, make sure to
|
||||
// add in a bias on big endian.
|
||||
|
@ -6477,9 +6436,11 @@ SDValue PPCTargetLowering::LowerFP_TO_INT(SDValue Op, SelectionDAG &DAG,
|
|||
ReuseLoadInfo RLI;
|
||||
LowerFP_TO_INTForReuse(Op, RLI, DAG, dl);
|
||||
|
||||
return DAG.getLoad(Op.getValueType(), dl, RLI.Chain, RLI.Ptr, RLI.MPI, false,
|
||||
false, RLI.IsInvariant, RLI.Alignment, RLI.AAInfo,
|
||||
RLI.Ranges);
|
||||
return DAG.getLoad(Op.getValueType(), dl, RLI.Chain, RLI.Ptr, RLI.MPI,
|
||||
RLI.Alignment,
|
||||
RLI.IsInvariant ? MachineMemOperand::MOInvariant
|
||||
: MachineMemOperand::MONone,
|
||||
RLI.AAInfo, RLI.Ranges);
|
||||
}
|
||||
|
||||
// We're trying to insert a regular store, S, and then a load, L. If the
|
||||
|
@ -6714,9 +6675,11 @@ SDValue PPCTargetLowering::LowerINT_TO_FP(SDValue Op,
|
|||
|
||||
MachineFunction &MF = DAG.getMachineFunction();
|
||||
if (canReuseLoadAddress(SINT, MVT::i64, RLI, DAG)) {
|
||||
Bits = DAG.getLoad(MVT::f64, dl, RLI.Chain, RLI.Ptr, RLI.MPI, false,
|
||||
false, RLI.IsInvariant, RLI.Alignment, RLI.AAInfo,
|
||||
RLI.Ranges);
|
||||
Bits =
|
||||
DAG.getLoad(MVT::f64, dl, RLI.Chain, RLI.Ptr, RLI.MPI, RLI.Alignment,
|
||||
RLI.IsInvariant ? MachineMemOperand::MOInvariant
|
||||
: MachineMemOperand::MONone,
|
||||
RLI.AAInfo, RLI.Ranges);
|
||||
spliceIntoChain(RLI.ResChain, Bits.getValue(1), DAG);
|
||||
} else if (Subtarget.hasLFIWAX() &&
|
||||
canReuseLoadAddress(SINT, MVT::i32, RLI, DAG, ISD::SEXTLOAD)) {
|
||||
|
@ -6749,10 +6712,10 @@ SDValue PPCTargetLowering::LowerINT_TO_FP(SDValue Op,
|
|||
int FrameIdx = FrameInfo->CreateStackObject(4, 4, false);
|
||||
SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT);
|
||||
|
||||
SDValue Store = DAG.getStore(
|
||||
DAG.getEntryNode(), dl, SINT.getOperand(0), FIdx,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx),
|
||||
false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(DAG.getEntryNode(), dl, SINT.getOperand(0), FIdx,
|
||||
MachinePointerInfo::getFixedStack(
|
||||
DAG.getMachineFunction(), FrameIdx));
|
||||
|
||||
assert(cast<StoreSDNode>(Store)->getMemoryVT() == MVT::i32 &&
|
||||
"Expected an i32 store");
|
||||
|
@ -6801,10 +6764,10 @@ SDValue PPCTargetLowering::LowerINT_TO_FP(SDValue Op,
|
|||
int FrameIdx = FrameInfo->CreateStackObject(4, 4, false);
|
||||
SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT);
|
||||
|
||||
SDValue Store = DAG.getStore(
|
||||
DAG.getEntryNode(), dl, Op.getOperand(0), FIdx,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx),
|
||||
false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(DAG.getEntryNode(), dl, Op.getOperand(0), FIdx,
|
||||
MachinePointerInfo::getFixedStack(
|
||||
DAG.getMachineFunction(), FrameIdx));
|
||||
|
||||
assert(cast<StoreSDNode>(Store)->getMemoryVT() == MVT::i32 &&
|
||||
"Expected an i32 store");
|
||||
|
@ -6839,14 +6802,12 @@ SDValue PPCTargetLowering::LowerINT_TO_FP(SDValue Op,
|
|||
// STD the extended value into the stack slot.
|
||||
SDValue Store = DAG.getStore(
|
||||
DAG.getEntryNode(), dl, Ext64, FIdx,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx),
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx));
|
||||
|
||||
// Load the value as a double.
|
||||
Ld = DAG.getLoad(
|
||||
MVT::f64, dl, Store, FIdx,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx));
|
||||
}
|
||||
|
||||
// FCFID it and return it.
|
||||
|
@ -6893,14 +6854,13 @@ SDValue PPCTargetLowering::LowerFLT_ROUNDS_(SDValue Op,
|
|||
// Save FP register to stack slot
|
||||
int SSFI = MF.getFrameInfo()->CreateStackObject(8, 8, false);
|
||||
SDValue StackSlot = DAG.getFrameIndex(SSFI, PtrVT);
|
||||
SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, Chain,
|
||||
StackSlot, MachinePointerInfo(), false, false,0);
|
||||
SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, Chain, StackSlot,
|
||||
MachinePointerInfo());
|
||||
|
||||
// Load FP Control Word from low 32 bits of stack slot.
|
||||
SDValue Four = DAG.getConstant(4, dl, PtrVT);
|
||||
SDValue Addr = DAG.getNode(ISD::ADD, dl, PtrVT, StackSlot, Four);
|
||||
SDValue CWD = DAG.getLoad(MVT::i32, dl, Store, Addr, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue CWD = DAG.getLoad(MVT::i32, dl, Store, Addr, MachinePointerInfo());
|
||||
|
||||
// Transform as necessary
|
||||
SDValue CWD1 =
|
||||
|
@ -7149,19 +7109,16 @@ SDValue PPCTargetLowering::LowerBUILD_VECTOR(SDValue Op,
|
|||
|
||||
unsigned StoreSize = BVN->getOperand(i).getValueType().getStoreSize();
|
||||
if (StoreSize > 4) {
|
||||
Stores.push_back(DAG.getTruncStore(DAG.getEntryNode(), dl,
|
||||
BVN->getOperand(i), Idx,
|
||||
PtrInfo.getWithOffset(Offset),
|
||||
MVT::i32, false, false, 0));
|
||||
Stores.push_back(
|
||||
DAG.getTruncStore(DAG.getEntryNode(), dl, BVN->getOperand(i), Idx,
|
||||
PtrInfo.getWithOffset(Offset), MVT::i32));
|
||||
} else {
|
||||
SDValue StoreValue = BVN->getOperand(i);
|
||||
if (StoreSize < 4)
|
||||
StoreValue = DAG.getNode(ISD::ANY_EXTEND, dl, MVT::i32, StoreValue);
|
||||
|
||||
Stores.push_back(DAG.getStore(DAG.getEntryNode(), dl,
|
||||
StoreValue, Idx,
|
||||
PtrInfo.getWithOffset(Offset),
|
||||
false, false, 0));
|
||||
Stores.push_back(DAG.getStore(DAG.getEntryNode(), dl, StoreValue, Idx,
|
||||
PtrInfo.getWithOffset(Offset)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7876,12 +7833,10 @@ SDValue PPCTargetLowering::LowerSCALAR_TO_VECTOR(SDValue Op,
|
|||
SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT);
|
||||
|
||||
// Store the input value into Value#0 of the stack slot.
|
||||
SDValue Store = DAG.getStore(DAG.getEntryNode(), dl,
|
||||
Op.getOperand(0), FIdx, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, Op.getOperand(0), FIdx,
|
||||
MachinePointerInfo());
|
||||
// Load it out.
|
||||
return DAG.getLoad(Op.getValueType(), dl, Store, FIdx, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
return DAG.getLoad(Op.getValueType(), dl, Store, FIdx, MachinePointerInfo());
|
||||
}
|
||||
|
||||
SDValue PPCTargetLowering::LowerEXTRACT_VECTOR_ELT(SDValue Op,
|
||||
|
@ -7934,9 +7889,8 @@ SDValue PPCTargetLowering::LowerEXTRACT_VECTOR_ELT(SDValue Op,
|
|||
SDValue Idx = DAG.getConstant(Offset, dl, FIdx.getValueType());
|
||||
Idx = DAG.getNode(ISD::ADD, dl, FIdx.getValueType(), FIdx, Idx);
|
||||
|
||||
SDValue IntVal = DAG.getLoad(MVT::i32, dl, StoreChain, Idx,
|
||||
PtrInfo.getWithOffset(Offset),
|
||||
false, false, false, 0);
|
||||
SDValue IntVal =
|
||||
DAG.getLoad(MVT::i32, dl, StoreChain, Idx, PtrInfo.getWithOffset(Offset));
|
||||
|
||||
if (!Subtarget.useCRBits())
|
||||
return IntVal;
|
||||
|
@ -7969,20 +7923,16 @@ SDValue PPCTargetLowering::LowerVectorLoad(SDValue Op,
|
|||
for (unsigned Idx = 0; Idx < 4; ++Idx) {
|
||||
SDValue Load;
|
||||
if (ScalarVT != ScalarMemVT)
|
||||
Load =
|
||||
DAG.getExtLoad(LN->getExtensionType(), dl, ScalarVT, LoadChain,
|
||||
BasePtr,
|
||||
LN->getPointerInfo().getWithOffset(Idx*Stride),
|
||||
ScalarMemVT, LN->isVolatile(), LN->isNonTemporal(),
|
||||
LN->isInvariant(), MinAlign(Alignment, Idx*Stride),
|
||||
LN->getAAInfo());
|
||||
Load = DAG.getExtLoad(LN->getExtensionType(), dl, ScalarVT, LoadChain,
|
||||
BasePtr,
|
||||
LN->getPointerInfo().getWithOffset(Idx * Stride),
|
||||
ScalarMemVT, MinAlign(Alignment, Idx * Stride),
|
||||
LN->getMemOperand()->getFlags(), LN->getAAInfo());
|
||||
else
|
||||
Load =
|
||||
DAG.getLoad(ScalarVT, dl, LoadChain, BasePtr,
|
||||
LN->getPointerInfo().getWithOffset(Idx*Stride),
|
||||
LN->isVolatile(), LN->isNonTemporal(),
|
||||
LN->isInvariant(), MinAlign(Alignment, Idx*Stride),
|
||||
LN->getAAInfo());
|
||||
Load = DAG.getLoad(ScalarVT, dl, LoadChain, BasePtr,
|
||||
LN->getPointerInfo().getWithOffset(Idx * Stride),
|
||||
MinAlign(Alignment, Idx * Stride),
|
||||
LN->getMemOperand()->getFlags(), LN->getAAInfo());
|
||||
|
||||
if (Idx == 0 && LN->isIndexed()) {
|
||||
assert(LN->getAddressingMode() == ISD::PRE_INC &&
|
||||
|
@ -8022,11 +7972,10 @@ SDValue PPCTargetLowering::LowerVectorLoad(SDValue Op,
|
|||
SDValue Idx = DAG.getConstant(i, dl, BasePtr.getValueType());
|
||||
Idx = DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(), BasePtr, Idx);
|
||||
|
||||
VectElmts[i] = DAG.getExtLoad(ISD::EXTLOAD, dl, MVT::i32, LoadChain, Idx,
|
||||
LN->getPointerInfo().getWithOffset(i),
|
||||
MVT::i8 /* memory type */, LN->isVolatile(),
|
||||
LN->isNonTemporal(), LN->isInvariant(),
|
||||
1 /* alignment */, LN->getAAInfo());
|
||||
VectElmts[i] = DAG.getExtLoad(
|
||||
ISD::EXTLOAD, dl, MVT::i32, LoadChain, Idx,
|
||||
LN->getPointerInfo().getWithOffset(i), MVT::i8,
|
||||
/* Alignment = */ 1, LN->getMemOperand()->getFlags(), LN->getAAInfo());
|
||||
VectElmtChains[i] = VectElmts[i].getValue(1);
|
||||
}
|
||||
|
||||
|
@ -8067,16 +8016,15 @@ SDValue PPCTargetLowering::LowerVectorStore(SDValue Op,
|
|||
SDValue Store;
|
||||
if (ScalarVT != ScalarMemVT)
|
||||
Store =
|
||||
DAG.getTruncStore(StoreChain, dl, Ex, BasePtr,
|
||||
SN->getPointerInfo().getWithOffset(Idx*Stride),
|
||||
ScalarMemVT, SN->isVolatile(), SN->isNonTemporal(),
|
||||
MinAlign(Alignment, Idx*Stride), SN->getAAInfo());
|
||||
DAG.getTruncStore(StoreChain, dl, Ex, BasePtr,
|
||||
SN->getPointerInfo().getWithOffset(Idx * Stride),
|
||||
ScalarMemVT, MinAlign(Alignment, Idx * Stride),
|
||||
SN->getMemOperand()->getFlags(), SN->getAAInfo());
|
||||
else
|
||||
Store =
|
||||
DAG.getStore(StoreChain, dl, Ex, BasePtr,
|
||||
SN->getPointerInfo().getWithOffset(Idx*Stride),
|
||||
SN->isVolatile(), SN->isNonTemporal(),
|
||||
MinAlign(Alignment, Idx*Stride), SN->getAAInfo());
|
||||
Store = DAG.getStore(StoreChain, dl, Ex, BasePtr,
|
||||
SN->getPointerInfo().getWithOffset(Idx * Stride),
|
||||
MinAlign(Alignment, Idx * Stride),
|
||||
SN->getMemOperand()->getFlags(), SN->getAAInfo());
|
||||
|
||||
if (Idx == 0 && SN->isIndexed()) {
|
||||
assert(SN->getAddressingMode() == ISD::PRE_INC &&
|
||||
|
@ -8142,9 +8090,8 @@ SDValue PPCTargetLowering::LowerVectorStore(SDValue Op,
|
|||
SDValue Idx = DAG.getConstant(Offset, dl, FIdx.getValueType());
|
||||
Idx = DAG.getNode(ISD::ADD, dl, FIdx.getValueType(), FIdx, Idx);
|
||||
|
||||
Loads[i] =
|
||||
DAG.getLoad(MVT::i32, dl, StoreChain, Idx,
|
||||
PtrInfo.getWithOffset(Offset), false, false, false, 0);
|
||||
Loads[i] = DAG.getLoad(MVT::i32, dl, StoreChain, Idx,
|
||||
PtrInfo.getWithOffset(Offset));
|
||||
LoadChains[i] = Loads[i].getValue(1);
|
||||
}
|
||||
|
||||
|
@ -8157,8 +8104,8 @@ SDValue PPCTargetLowering::LowerVectorStore(SDValue Op,
|
|||
|
||||
Stores[i] = DAG.getTruncStore(
|
||||
StoreChain, dl, Loads[i], Idx, SN->getPointerInfo().getWithOffset(i),
|
||||
MVT::i8 /* memory type */, SN->isNonTemporal(), SN->isVolatile(),
|
||||
1 /* alignment */, SN->getAAInfo());
|
||||
MVT::i8, /* Alignment = */ 1, SN->getMemOperand()->getFlags(),
|
||||
SN->getAAInfo());
|
||||
}
|
||||
|
||||
StoreChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Stores);
|
||||
|
@ -10728,18 +10675,18 @@ SDValue PPCTargetLowering::PerformDAGCombine(SDNode *N,
|
|||
LD->getOffset());
|
||||
}
|
||||
|
||||
SDValue FloatLoad =
|
||||
DAG.getLoad(MVT::f32, dl, LD->getChain(), BasePtr,
|
||||
LD->getPointerInfo(), false, LD->isNonTemporal(),
|
||||
LD->isInvariant(), LD->getAlignment(), LD->getAAInfo());
|
||||
auto MMOFlags =
|
||||
LD->getMemOperand()->getFlags() & ~MachineMemOperand::MOVolatile;
|
||||
SDValue FloatLoad = DAG.getLoad(MVT::f32, dl, LD->getChain(), BasePtr,
|
||||
LD->getPointerInfo(), LD->getAlignment(),
|
||||
MMOFlags, LD->getAAInfo());
|
||||
SDValue AddPtr =
|
||||
DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(),
|
||||
BasePtr, DAG.getIntPtrConstant(4, dl));
|
||||
SDValue FloatLoad2 =
|
||||
DAG.getLoad(MVT::f32, dl, SDValue(FloatLoad.getNode(), 1), AddPtr,
|
||||
LD->getPointerInfo().getWithOffset(4), false,
|
||||
LD->isNonTemporal(), LD->isInvariant(),
|
||||
MinAlign(LD->getAlignment(), 4), LD->getAAInfo());
|
||||
SDValue FloatLoad2 = DAG.getLoad(
|
||||
MVT::f32, dl, SDValue(FloatLoad.getNode(), 1), AddPtr,
|
||||
LD->getPointerInfo().getWithOffset(4),
|
||||
MinAlign(LD->getAlignment(), 4), MMOFlags, LD->getAAInfo());
|
||||
|
||||
if (LD->isIndexed()) {
|
||||
// Note that DAGCombine should re-form any pre-increment load(s) from
|
||||
|
@ -11615,13 +11562,13 @@ SDValue PPCTargetLowering::LowerRETURNADDR(SDValue Op,
|
|||
isPPC64 ? MVT::i64 : MVT::i32);
|
||||
return DAG.getLoad(PtrVT, dl, DAG.getEntryNode(),
|
||||
DAG.getNode(ISD::ADD, dl, PtrVT, FrameAddr, Offset),
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
MachinePointerInfo());
|
||||
}
|
||||
|
||||
// Just load the return address off the stack.
|
||||
SDValue RetAddrFI = getReturnAddrFrameIndex(DAG);
|
||||
return DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), RetAddrFI,
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
MachinePointerInfo());
|
||||
}
|
||||
|
||||
SDValue PPCTargetLowering::LowerFRAMEADDR(SDValue Op,
|
||||
|
@ -11648,8 +11595,7 @@ SDValue PPCTargetLowering::LowerFRAMEADDR(SDValue Op,
|
|||
PtrVT);
|
||||
while (Depth--)
|
||||
FrameAddr = DAG.getLoad(Op.getValueType(), dl, DAG.getEntryNode(),
|
||||
FrameAddr, MachinePointerInfo(), false, false,
|
||||
false, 0);
|
||||
FrameAddr, MachinePointerInfo());
|
||||
return FrameAddr;
|
||||
}
|
||||
|
||||
|
|
|
@ -405,9 +405,8 @@ SDValue SparcTargetLowering::LowerFormalArguments_32(
|
|||
// Get SRet from [%fp+64].
|
||||
int FrameIdx = MF.getFrameInfo()->CreateFixedObject(4, 64, true);
|
||||
SDValue FIPtr = DAG.getFrameIndex(FrameIdx, MVT::i32);
|
||||
SDValue Arg = DAG.getLoad(MVT::i32, dl, Chain, FIPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Arg =
|
||||
DAG.getLoad(MVT::i32, dl, Chain, FIPtr, MachinePointerInfo());
|
||||
InVals.push_back(Arg);
|
||||
continue;
|
||||
}
|
||||
|
@ -428,9 +427,7 @@ SDValue SparcTargetLowering::LowerFormalArguments_32(
|
|||
int FrameIdx = MF.getFrameInfo()->
|
||||
CreateFixedObject(4, StackOffset+NextVA.getLocMemOffset(),true);
|
||||
SDValue FIPtr = DAG.getFrameIndex(FrameIdx, MVT::i32);
|
||||
LoVal = DAG.getLoad(MVT::i32, dl, Chain, FIPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
LoVal = DAG.getLoad(MVT::i32, dl, Chain, FIPtr, MachinePointerInfo());
|
||||
} else {
|
||||
unsigned loReg = MF.addLiveIn(NextVA.getLocReg(),
|
||||
&SP::IntRegsRegClass);
|
||||
|
@ -473,9 +470,8 @@ SDValue SparcTargetLowering::LowerFormalArguments_32(
|
|||
Offset,
|
||||
true);
|
||||
SDValue FIPtr = DAG.getFrameIndex(FI, PtrVT);
|
||||
SDValue Load = DAG.getLoad(VA.getValVT(), dl, Chain, FIPtr,
|
||||
MachinePointerInfo(),
|
||||
false,false, false, 0);
|
||||
SDValue Load =
|
||||
DAG.getLoad(VA.getValVT(), dl, Chain, FIPtr, MachinePointerInfo());
|
||||
InVals.push_back(Load);
|
||||
continue;
|
||||
}
|
||||
|
@ -484,17 +480,15 @@ SDValue SparcTargetLowering::LowerFormalArguments_32(
|
|||
Offset,
|
||||
true);
|
||||
SDValue FIPtr = DAG.getFrameIndex(FI, PtrVT);
|
||||
SDValue HiVal = DAG.getLoad(MVT::i32, dl, Chain, FIPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue HiVal =
|
||||
DAG.getLoad(MVT::i32, dl, Chain, FIPtr, MachinePointerInfo());
|
||||
int FI2 = MF.getFrameInfo()->CreateFixedObject(4,
|
||||
Offset+4,
|
||||
true);
|
||||
SDValue FIPtr2 = DAG.getFrameIndex(FI2, PtrVT);
|
||||
|
||||
SDValue LoVal = DAG.getLoad(MVT::i32, dl, Chain, FIPtr2,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue LoVal =
|
||||
DAG.getLoad(MVT::i32, dl, Chain, FIPtr2, MachinePointerInfo());
|
||||
|
||||
if (IsLittleEndian)
|
||||
std::swap(LoVal, HiVal);
|
||||
|
@ -512,9 +506,7 @@ SDValue SparcTargetLowering::LowerFormalArguments_32(
|
|||
SDValue FIPtr = DAG.getFrameIndex(FI, PtrVT);
|
||||
SDValue Load ;
|
||||
if (VA.getValVT() == MVT::i32 || VA.getValVT() == MVT::f32) {
|
||||
Load = DAG.getLoad(VA.getValVT(), dl, Chain, FIPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
Load = DAG.getLoad(VA.getValVT(), dl, Chain, FIPtr, MachinePointerInfo());
|
||||
} else if (VA.getValVT() == MVT::f128) {
|
||||
report_fatal_error("SPARCv8 does not handle f128 in calls; "
|
||||
"pass indirectly");
|
||||
|
@ -566,9 +558,8 @@ SDValue SparcTargetLowering::LowerFormalArguments_32(
|
|||
true);
|
||||
SDValue FIPtr = DAG.getFrameIndex(FrameIdx, MVT::i32);
|
||||
|
||||
OutChains.push_back(DAG.getStore(DAG.getRoot(), dl, Arg, FIPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0));
|
||||
OutChains.push_back(
|
||||
DAG.getStore(DAG.getRoot(), dl, Arg, FIPtr, MachinePointerInfo()));
|
||||
ArgOffset += 4;
|
||||
}
|
||||
|
||||
|
@ -648,10 +639,10 @@ SDValue SparcTargetLowering::LowerFormalArguments_64(
|
|||
if (VA.isExtInLoc())
|
||||
Offset += 8 - ValSize;
|
||||
int FI = MF.getFrameInfo()->CreateFixedObject(ValSize, Offset, true);
|
||||
InVals.push_back(DAG.getLoad(
|
||||
VA.getValVT(), DL, Chain,
|
||||
DAG.getFrameIndex(FI, getPointerTy(MF.getDataLayout())),
|
||||
MachinePointerInfo::getFixedStack(MF, FI), false, false, false, 0));
|
||||
InVals.push_back(
|
||||
DAG.getLoad(VA.getValVT(), DL, Chain,
|
||||
DAG.getFrameIndex(FI, getPointerTy(MF.getDataLayout())),
|
||||
MachinePointerInfo::getFixedStack(MF, FI)));
|
||||
}
|
||||
|
||||
if (!IsVarArg)
|
||||
|
@ -679,9 +670,9 @@ SDValue SparcTargetLowering::LowerFormalArguments_64(
|
|||
SDValue VArg = DAG.getCopyFromReg(Chain, DL, VReg, MVT::i64);
|
||||
int FI = MF.getFrameInfo()->CreateFixedObject(8, ArgOffset + ArgArea, true);
|
||||
auto PtrVT = getPointerTy(MF.getDataLayout());
|
||||
OutChains.push_back(DAG.getStore(
|
||||
Chain, DL, VArg, DAG.getFrameIndex(FI, PtrVT),
|
||||
MachinePointerInfo::getFixedStack(MF, FI), false, false, 0));
|
||||
OutChains.push_back(
|
||||
DAG.getStore(Chain, DL, VArg, DAG.getFrameIndex(FI, PtrVT),
|
||||
MachinePointerInfo::getFixedStack(MF, FI)));
|
||||
}
|
||||
|
||||
if (!OutChains.empty())
|
||||
|
@ -829,9 +820,8 @@ SparcTargetLowering::LowerCall_32(TargetLowering::CallLoweringInfo &CLI,
|
|||
SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32);
|
||||
SDValue PtrOff = DAG.getIntPtrConstant(64, dl);
|
||||
PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff);
|
||||
MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, PtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0));
|
||||
MemOpChains.push_back(
|
||||
DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo()));
|
||||
hasStructRetAttr = true;
|
||||
continue;
|
||||
}
|
||||
|
@ -846,9 +836,8 @@ SparcTargetLowering::LowerCall_32(TargetLowering::CallLoweringInfo &CLI,
|
|||
SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32);
|
||||
SDValue PtrOff = DAG.getIntPtrConstant(Offset, dl);
|
||||
PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff);
|
||||
MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, PtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0));
|
||||
MemOpChains.push_back(
|
||||
DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo()));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -883,9 +872,8 @@ SparcTargetLowering::LowerCall_32(TargetLowering::CallLoweringInfo &CLI,
|
|||
SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32);
|
||||
SDValue PtrOff = DAG.getIntPtrConstant(Offset, dl);
|
||||
PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff);
|
||||
MemOpChains.push_back(DAG.getStore(Chain, dl, Part1, PtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0));
|
||||
MemOpChains.push_back(
|
||||
DAG.getStore(Chain, dl, Part1, PtrOff, MachinePointerInfo()));
|
||||
}
|
||||
} else {
|
||||
unsigned Offset = VA.getLocMemOffset() + StackOffset;
|
||||
|
@ -893,15 +881,13 @@ SparcTargetLowering::LowerCall_32(TargetLowering::CallLoweringInfo &CLI,
|
|||
SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32);
|
||||
SDValue PtrOff = DAG.getIntPtrConstant(Offset, dl);
|
||||
PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff);
|
||||
MemOpChains.push_back(DAG.getStore(Chain, dl, Part0, PtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0));
|
||||
MemOpChains.push_back(
|
||||
DAG.getStore(Chain, dl, Part0, PtrOff, MachinePointerInfo()));
|
||||
// Store the second part.
|
||||
PtrOff = DAG.getIntPtrConstant(Offset + 4, dl);
|
||||
PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff);
|
||||
MemOpChains.push_back(DAG.getStore(Chain, dl, Part1, PtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0));
|
||||
MemOpChains.push_back(
|
||||
DAG.getStore(Chain, dl, Part1, PtrOff, MachinePointerInfo()));
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
@ -925,9 +911,8 @@ SparcTargetLowering::LowerCall_32(TargetLowering::CallLoweringInfo &CLI,
|
|||
SDValue PtrOff = DAG.getIntPtrConstant(VA.getLocMemOffset() + StackOffset,
|
||||
dl);
|
||||
PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff);
|
||||
MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, PtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0));
|
||||
MemOpChains.push_back(
|
||||
DAG.getStore(Chain, dl, Arg, PtrOff, MachinePointerInfo()));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1232,16 +1217,13 @@ SparcTargetLowering::LowerCall_64(TargetLowering::CallLoweringInfo &CLI,
|
|||
LoPtrOff = DAG.getNode(ISD::ADD, DL, PtrVT, StackPtr, LoPtrOff);
|
||||
|
||||
// Store to %sp+BIAS+128+Offset
|
||||
SDValue Store = DAG.getStore(Chain, DL, Arg, HiPtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(Chain, DL, Arg, HiPtrOff, MachinePointerInfo());
|
||||
// Load into Reg and Reg+1
|
||||
SDValue Hi64 = DAG.getLoad(MVT::i64, DL, Store, HiPtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Lo64 = DAG.getLoad(MVT::i64, DL, Store, LoPtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Hi64 =
|
||||
DAG.getLoad(MVT::i64, DL, Store, HiPtrOff, MachinePointerInfo());
|
||||
SDValue Lo64 =
|
||||
DAG.getLoad(MVT::i64, DL, Store, LoPtrOff, MachinePointerInfo());
|
||||
RegsToPass.push_back(std::make_pair(toCallerWindow(VA.getLocReg()),
|
||||
Hi64));
|
||||
RegsToPass.push_back(std::make_pair(toCallerWindow(VA.getLocReg()+1),
|
||||
|
@ -1280,9 +1262,8 @@ SparcTargetLowering::LowerCall_64(TargetLowering::CallLoweringInfo &CLI,
|
|||
Subtarget->getStackPointerBias() +
|
||||
128, DL);
|
||||
PtrOff = DAG.getNode(ISD::ADD, DL, PtrVT, StackPtr, PtrOff);
|
||||
MemOpChains.push_back(DAG.getStore(Chain, DL, Arg, PtrOff,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0));
|
||||
MemOpChains.push_back(
|
||||
DAG.getStore(Chain, DL, Arg, PtrOff, MachinePointerInfo()));
|
||||
}
|
||||
|
||||
// Emit all stores, make sure they occur before the call.
|
||||
|
@ -1983,8 +1964,7 @@ SDValue SparcTargetLowering::makeAddress(SDValue Op, SelectionDAG &DAG) const {
|
|||
MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo();
|
||||
MFI->setHasCalls(true);
|
||||
return DAG.getLoad(VT, DL, DAG.getEntryNode(), AbsAddr,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()));
|
||||
}
|
||||
|
||||
// This is one of the absolute code models.
|
||||
|
@ -2152,14 +2132,8 @@ SDValue SparcTargetLowering::LowerF128_LibCallArg(SDValue Chain,
|
|||
// Create a stack object and pass the pointer to the library function.
|
||||
int FI = MFI->CreateStackObject(16, 8, false);
|
||||
SDValue FIPtr = DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout()));
|
||||
Chain = DAG.getStore(Chain,
|
||||
DL,
|
||||
Entry.Node,
|
||||
FIPtr,
|
||||
MachinePointerInfo(),
|
||||
false,
|
||||
false,
|
||||
8);
|
||||
Chain = DAG.getStore(Chain, DL, Entry.Node, FIPtr, MachinePointerInfo(),
|
||||
/* Alignment = */ 8);
|
||||
|
||||
Entry.Node = FIPtr;
|
||||
Entry.Ty = PointerType::getUnqual(ArgTy);
|
||||
|
@ -2217,12 +2191,8 @@ SparcTargetLowering::LowerF128Op(SDValue Op, SelectionDAG &DAG,
|
|||
Chain = CallInfo.second;
|
||||
|
||||
// Load RetPtr to get the return value.
|
||||
return DAG.getLoad(Op.getValueType(),
|
||||
SDLoc(Op),
|
||||
Chain,
|
||||
RetPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 8);
|
||||
return DAG.getLoad(Op.getValueType(), SDLoc(Op), Chain, RetPtr,
|
||||
MachinePointerInfo(), /* Alignment = */ 8);
|
||||
}
|
||||
|
||||
SDValue SparcTargetLowering::LowerF128Compare(SDValue LHS, SDValue RHS,
|
||||
|
@ -2557,7 +2527,7 @@ static SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG,
|
|||
DAG.getIntPtrConstant(FuncInfo->getVarArgsFrameOffset(), DL));
|
||||
const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue();
|
||||
return DAG.getStore(Op.getOperand(0), DL, Offset, Op.getOperand(1),
|
||||
MachinePointerInfo(SV), false, false, 0);
|
||||
MachinePointerInfo(SV));
|
||||
}
|
||||
|
||||
static SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG) {
|
||||
|
@ -2568,20 +2538,19 @@ static SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG) {
|
|||
EVT PtrVT = VAListPtr.getValueType();
|
||||
const Value *SV = cast<SrcValueSDNode>(Node->getOperand(2))->getValue();
|
||||
SDLoc DL(Node);
|
||||
SDValue VAList = DAG.getLoad(PtrVT, DL, InChain, VAListPtr,
|
||||
MachinePointerInfo(SV), false, false, false, 0);
|
||||
SDValue VAList =
|
||||
DAG.getLoad(PtrVT, DL, InChain, VAListPtr, MachinePointerInfo(SV));
|
||||
// Increment the pointer, VAList, to the next vaarg.
|
||||
SDValue NextPtr = DAG.getNode(ISD::ADD, DL, PtrVT, VAList,
|
||||
DAG.getIntPtrConstant(VT.getSizeInBits()/8,
|
||||
DL));
|
||||
// Store the incremented VAList to the legalized pointer.
|
||||
InChain = DAG.getStore(VAList.getValue(1), DL, NextPtr,
|
||||
VAListPtr, MachinePointerInfo(SV), false, false, 0);
|
||||
InChain = DAG.getStore(VAList.getValue(1), DL, NextPtr, VAListPtr,
|
||||
MachinePointerInfo(SV));
|
||||
// Load the actual argument out of the pointer VAList.
|
||||
// We can't count on greater alignment than the word size.
|
||||
return DAG.getLoad(VT, DL, InChain, VAList, MachinePointerInfo(),
|
||||
false, false, false,
|
||||
std::min(PtrVT.getSizeInBits(), VT.getSizeInBits())/8);
|
||||
std::min(PtrVT.getSizeInBits(), VT.getSizeInBits()) / 8);
|
||||
}
|
||||
|
||||
static SDValue LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG,
|
||||
|
@ -2644,8 +2613,7 @@ static SDValue getFRAMEADDR(uint64_t depth, SDValue Op, SelectionDAG &DAG,
|
|||
while (depth--) {
|
||||
SDValue Ptr = DAG.getNode(ISD::ADD, dl, VT, FrameAddr,
|
||||
DAG.getIntPtrConstant(Offset, dl));
|
||||
FrameAddr = DAG.getLoad(VT, dl, Chain, Ptr, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
FrameAddr = DAG.getLoad(VT, dl, Chain, Ptr, MachinePointerInfo());
|
||||
}
|
||||
if (Subtarget->is64Bit())
|
||||
FrameAddr = DAG.getNode(ISD::ADD, dl, VT, FrameAddr,
|
||||
|
@ -2692,8 +2660,7 @@ static SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG,
|
|||
dl, VT,
|
||||
FrameAddr,
|
||||
DAG.getIntPtrConstant(Offset, dl));
|
||||
RetAddr = DAG.getLoad(VT, dl, DAG.getEntryNode(), Ptr,
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
RetAddr = DAG.getLoad(VT, dl, DAG.getEntryNode(), Ptr, MachinePointerInfo());
|
||||
|
||||
return RetAddr;
|
||||
}
|
||||
|
@ -2743,22 +2710,15 @@ static SDValue LowerF128Load(SDValue Op, SelectionDAG &DAG)
|
|||
if (alignment > 8)
|
||||
alignment = 8;
|
||||
|
||||
SDValue Hi64 = DAG.getLoad(MVT::f64,
|
||||
dl,
|
||||
LdNode->getChain(),
|
||||
LdNode->getBasePtr(),
|
||||
LdNode->getPointerInfo(),
|
||||
false, false, false, alignment);
|
||||
SDValue Hi64 =
|
||||
DAG.getLoad(MVT::f64, dl, LdNode->getChain(), LdNode->getBasePtr(),
|
||||
LdNode->getPointerInfo(), alignment);
|
||||
EVT addrVT = LdNode->getBasePtr().getValueType();
|
||||
SDValue LoPtr = DAG.getNode(ISD::ADD, dl, addrVT,
|
||||
LdNode->getBasePtr(),
|
||||
DAG.getConstant(8, dl, addrVT));
|
||||
SDValue Lo64 = DAG.getLoad(MVT::f64,
|
||||
dl,
|
||||
LdNode->getChain(),
|
||||
LoPtr,
|
||||
LdNode->getPointerInfo(),
|
||||
false, false, false, alignment);
|
||||
SDValue Lo64 = DAG.getLoad(MVT::f64, dl, LdNode->getChain(), LoPtr,
|
||||
LdNode->getPointerInfo(), alignment);
|
||||
|
||||
SDValue SubRegEven = DAG.getTargetConstant(SP::sub_even64, dl, MVT::i32);
|
||||
SDValue SubRegOdd = DAG.getTargetConstant(SP::sub_odd64, dl, MVT::i32);
|
||||
|
@ -2818,22 +2778,15 @@ static SDValue LowerF128Store(SDValue Op, SelectionDAG &DAG) {
|
|||
alignment = 8;
|
||||
|
||||
SDValue OutChains[2];
|
||||
OutChains[0] = DAG.getStore(StNode->getChain(),
|
||||
dl,
|
||||
SDValue(Hi64, 0),
|
||||
StNode->getBasePtr(),
|
||||
MachinePointerInfo(),
|
||||
false, false, alignment);
|
||||
OutChains[0] =
|
||||
DAG.getStore(StNode->getChain(), dl, SDValue(Hi64, 0),
|
||||
StNode->getBasePtr(), MachinePointerInfo(), alignment);
|
||||
EVT addrVT = StNode->getBasePtr().getValueType();
|
||||
SDValue LoPtr = DAG.getNode(ISD::ADD, dl, addrVT,
|
||||
StNode->getBasePtr(),
|
||||
DAG.getConstant(8, dl, addrVT));
|
||||
OutChains[1] = DAG.getStore(StNode->getChain(),
|
||||
dl,
|
||||
SDValue(Lo64, 0),
|
||||
LoPtr,
|
||||
MachinePointerInfo(),
|
||||
false, false, alignment);
|
||||
OutChains[1] = DAG.getStore(StNode->getChain(), dl, SDValue(Lo64, 0), LoPtr,
|
||||
MachinePointerInfo(), alignment);
|
||||
return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains);
|
||||
}
|
||||
|
||||
|
@ -2852,8 +2805,7 @@ static SDValue LowerSTORE(SDValue Op, SelectionDAG &DAG)
|
|||
SDValue Val = DAG.getNode(ISD::BITCAST, dl, MVT::v2i32, St->getValue());
|
||||
SDValue Chain = DAG.getStore(
|
||||
St->getChain(), dl, Val, St->getBasePtr(), St->getPointerInfo(),
|
||||
St->isVolatile(), St->isNonTemporal(), St->getAlignment(),
|
||||
St->getAAInfo());
|
||||
St->isVolatile(), St->getMemOperand()->getFlags(), St->getAAInfo());
|
||||
return Chain;
|
||||
}
|
||||
|
||||
|
@ -3549,10 +3501,9 @@ void SparcTargetLowering::ReplaceNodeResults(SDNode *N,
|
|||
|
||||
SDLoc dl(N);
|
||||
SDValue LoadRes = DAG.getExtLoad(
|
||||
Ld->getExtensionType(), dl, MVT::v2i32,
|
||||
Ld->getChain(), Ld->getBasePtr(), Ld->getPointerInfo(),
|
||||
MVT::v2i32, Ld->isVolatile(), Ld->isNonTemporal(),
|
||||
Ld->isInvariant(), Ld->getAlignment(), Ld->getAAInfo());
|
||||
Ld->getExtensionType(), dl, MVT::v2i32, Ld->getChain(),
|
||||
Ld->getBasePtr(), Ld->getPointerInfo(), MVT::v2i32, Ld->getAlignment(),
|
||||
Ld->getMemOperand()->getFlags(), Ld->getAAInfo());
|
||||
|
||||
SDValue Res = DAG.getNode(ISD::BITCAST, dl, MVT::i64, LoadRes);
|
||||
Results.push_back(Res);
|
||||
|
|
|
@ -938,16 +938,14 @@ SDValue SystemZTargetLowering::LowerFormalArguments(
|
|||
FIN = DAG.getNode(ISD::ADD, DL, PtrVT, FIN,
|
||||
DAG.getIntPtrConstant(4, DL));
|
||||
ArgValue = DAG.getLoad(LocVT, DL, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(MF, FI), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(MF, FI));
|
||||
}
|
||||
|
||||
// Convert the value of the argument register into the value that's
|
||||
// being passed.
|
||||
if (VA.getLocInfo() == CCValAssign::Indirect) {
|
||||
InVals.push_back(DAG.getLoad(VA.getValVT(), DL, Chain,
|
||||
ArgValue, MachinePointerInfo(),
|
||||
false, false, false, 0));
|
||||
InVals.push_back(DAG.getLoad(VA.getValVT(), DL, Chain, ArgValue,
|
||||
MachinePointerInfo()));
|
||||
// If the original argument was split (e.g. i128), we need
|
||||
// to load all parts of it here (using the same address).
|
||||
unsigned ArgIndex = Ins[I].OrigArgIndex;
|
||||
|
@ -957,9 +955,8 @@ SDValue SystemZTargetLowering::LowerFormalArguments(
|
|||
unsigned PartOffset = Ins[I + 1].PartOffset;
|
||||
SDValue Address = DAG.getNode(ISD::ADD, DL, PtrVT, ArgValue,
|
||||
DAG.getIntPtrConstant(PartOffset, DL));
|
||||
InVals.push_back(DAG.getLoad(PartVA.getValVT(), DL, Chain,
|
||||
Address, MachinePointerInfo(),
|
||||
false, false, false, 0));
|
||||
InVals.push_back(DAG.getLoad(PartVA.getValVT(), DL, Chain, Address,
|
||||
MachinePointerInfo()));
|
||||
++I;
|
||||
}
|
||||
} else
|
||||
|
@ -994,8 +991,7 @@ SDValue SystemZTargetLowering::LowerFormalArguments(
|
|||
&SystemZ::FP64BitRegClass);
|
||||
SDValue ArgValue = DAG.getCopyFromReg(Chain, DL, VReg, MVT::f64);
|
||||
MemOps[I] = DAG.getStore(ArgValue.getValue(1), DL, ArgValue, FIN,
|
||||
MachinePointerInfo::getFixedStack(MF, FI),
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(MF, FI));
|
||||
}
|
||||
// Join the stores, which are independent of one another.
|
||||
Chain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other,
|
||||
|
@ -1081,9 +1077,9 @@ SystemZTargetLowering::LowerCall(CallLoweringInfo &CLI,
|
|||
// Store the argument in a stack slot and pass its address.
|
||||
SDValue SpillSlot = DAG.CreateStackTemporary(Outs[I].ArgVT);
|
||||
int FI = cast<FrameIndexSDNode>(SpillSlot)->getIndex();
|
||||
MemOpChains.push_back(DAG.getStore(
|
||||
Chain, DL, ArgValue, SpillSlot,
|
||||
MachinePointerInfo::getFixedStack(MF, FI), false, false, 0));
|
||||
MemOpChains.push_back(
|
||||
DAG.getStore(Chain, DL, ArgValue, SpillSlot,
|
||||
MachinePointerInfo::getFixedStack(MF, FI)));
|
||||
// If the original argument was split (e.g. i128), we need
|
||||
// to store all parts of it here (and pass just one address).
|
||||
unsigned ArgIndex = Outs[I].OrigArgIndex;
|
||||
|
@ -1093,9 +1089,9 @@ SystemZTargetLowering::LowerCall(CallLoweringInfo &CLI,
|
|||
unsigned PartOffset = Outs[I + 1].PartOffset;
|
||||
SDValue Address = DAG.getNode(ISD::ADD, DL, PtrVT, SpillSlot,
|
||||
DAG.getIntPtrConstant(PartOffset, DL));
|
||||
MemOpChains.push_back(DAG.getStore(
|
||||
Chain, DL, PartValue, Address,
|
||||
MachinePointerInfo::getFixedStack(MF, FI), false, false, 0));
|
||||
MemOpChains.push_back(
|
||||
DAG.getStore(Chain, DL, PartValue, Address,
|
||||
MachinePointerInfo::getFixedStack(MF, FI)));
|
||||
++I;
|
||||
}
|
||||
ArgValue = SpillSlot;
|
||||
|
@ -1119,9 +1115,8 @@ SystemZTargetLowering::LowerCall(CallLoweringInfo &CLI,
|
|||
DAG.getIntPtrConstant(Offset, DL));
|
||||
|
||||
// Emit the store.
|
||||
MemOpChains.push_back(DAG.getStore(Chain, DL, ArgValue, Address,
|
||||
MachinePointerInfo(),
|
||||
false, false, 0));
|
||||
MemOpChains.push_back(
|
||||
DAG.getStore(Chain, DL, ArgValue, Address, MachinePointerInfo()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1665,11 +1660,10 @@ static void adjustSubwordCmp(SelectionDAG &DAG, const SDLoc &DL,
|
|||
ISD::ZEXTLOAD);
|
||||
if (C.Op0.getValueType() != MVT::i32 ||
|
||||
Load->getExtensionType() != ExtType)
|
||||
C.Op0 = DAG.getExtLoad(ExtType, SDLoc(Load), MVT::i32,
|
||||
Load->getChain(), Load->getBasePtr(),
|
||||
Load->getPointerInfo(), Load->getMemoryVT(),
|
||||
Load->isVolatile(), Load->isNonTemporal(),
|
||||
Load->isInvariant(), Load->getAlignment());
|
||||
C.Op0 = DAG.getExtLoad(ExtType, SDLoc(Load), MVT::i32, Load->getChain(),
|
||||
Load->getBasePtr(), Load->getPointerInfo(),
|
||||
Load->getMemoryVT(), Load->getAlignment(),
|
||||
Load->getMemOperand()->getFlags());
|
||||
|
||||
// Make sure that the second operand is an i32 with the right value.
|
||||
if (C.Op1.getValueType() != MVT::i32 ||
|
||||
|
@ -2487,8 +2481,7 @@ SDValue SystemZTargetLowering::lowerGlobalAddress(GlobalAddressSDNode *Node,
|
|||
Result = DAG.getTargetGlobalAddress(GV, DL, PtrVT, 0, SystemZII::MO_GOT);
|
||||
Result = DAG.getNode(SystemZISD::PCREL_WRAPPER, DL, PtrVT, Result);
|
||||
Result = DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), Result,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()));
|
||||
}
|
||||
|
||||
// If there was a non-zero offset that we didn't fold, create an explicit
|
||||
|
@ -2589,8 +2582,7 @@ SDValue SystemZTargetLowering::lowerGlobalTLSAddress(GlobalAddressSDNode *Node,
|
|||
Offset = DAG.getConstantPool(CPV, PtrVT, 8);
|
||||
Offset = DAG.getLoad(
|
||||
PtrVT, DL, DAG.getEntryNode(), Offset,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
|
||||
// Call __tls_get_offset to retrieve the offset.
|
||||
Offset = lowerTLSGetOffset(Node, DAG, SystemZISD::TLS_GDCALL, Offset);
|
||||
|
@ -2605,8 +2597,7 @@ SDValue SystemZTargetLowering::lowerGlobalTLSAddress(GlobalAddressSDNode *Node,
|
|||
Offset = DAG.getConstantPool(CPV, PtrVT, 8);
|
||||
Offset = DAG.getLoad(
|
||||
PtrVT, DL, DAG.getEntryNode(), Offset,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
|
||||
// Call __tls_get_offset to retrieve the module base offset.
|
||||
Offset = lowerTLSGetOffset(Node, DAG, SystemZISD::TLS_LDCALL, Offset);
|
||||
|
@ -2624,8 +2615,7 @@ SDValue SystemZTargetLowering::lowerGlobalTLSAddress(GlobalAddressSDNode *Node,
|
|||
SDValue DTPOffset = DAG.getConstantPool(CPV, PtrVT, 8);
|
||||
DTPOffset = DAG.getLoad(
|
||||
PtrVT, DL, DAG.getEntryNode(), DTPOffset,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
|
||||
Offset = DAG.getNode(ISD::ADD, DL, PtrVT, Offset, DTPOffset);
|
||||
break;
|
||||
|
@ -2636,9 +2626,9 @@ SDValue SystemZTargetLowering::lowerGlobalTLSAddress(GlobalAddressSDNode *Node,
|
|||
Offset = DAG.getTargetGlobalAddress(GV, DL, PtrVT, 0,
|
||||
SystemZII::MO_INDNTPOFF);
|
||||
Offset = DAG.getNode(SystemZISD::PCREL_WRAPPER, DL, PtrVT, Offset);
|
||||
Offset = DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), Offset,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
Offset =
|
||||
DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), Offset,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()));
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2650,8 +2640,7 @@ SDValue SystemZTargetLowering::lowerGlobalTLSAddress(GlobalAddressSDNode *Node,
|
|||
Offset = DAG.getConstantPool(CPV, PtrVT, 8);
|
||||
Offset = DAG.getLoad(
|
||||
PtrVT, DL, DAG.getEntryNode(), Offset,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -2825,8 +2814,7 @@ SDValue SystemZTargetLowering::lowerVASTART(SDValue Op,
|
|||
FieldAddr = DAG.getNode(ISD::ADD, DL, PtrVT, FieldAddr,
|
||||
DAG.getIntPtrConstant(Offset, DL));
|
||||
MemOps[I] = DAG.getStore(Chain, DL, Fields[I], FieldAddr,
|
||||
MachinePointerInfo(SV, Offset),
|
||||
false, false, 0);
|
||||
MachinePointerInfo(SV, Offset));
|
||||
Offset += 8;
|
||||
}
|
||||
return DAG.getNode(ISD::TokenFactor, DL, MVT::Other, MemOps);
|
||||
|
@ -2877,8 +2865,7 @@ lowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG) const {
|
|||
// If we need a backchain, save it now.
|
||||
SDValue Backchain;
|
||||
if (StoreBackchain)
|
||||
Backchain = DAG.getLoad(MVT::i64, DL, Chain, OldSP, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
Backchain = DAG.getLoad(MVT::i64, DL, Chain, OldSP, MachinePointerInfo());
|
||||
|
||||
// Add extra space for alignment if needed.
|
||||
if (ExtraAlignSpace)
|
||||
|
@ -2908,8 +2895,7 @@ lowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG) const {
|
|||
}
|
||||
|
||||
if (StoreBackchain)
|
||||
Chain = DAG.getStore(Chain, DL, Backchain, NewSP, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
Chain = DAG.getStore(Chain, DL, Backchain, NewSP, MachinePointerInfo());
|
||||
|
||||
SDValue Ops[2] = { Result, Chain };
|
||||
return DAG.getMergeValues(Ops, DL);
|
||||
|
@ -3378,15 +3364,13 @@ SDValue SystemZTargetLowering::lowerSTACKRESTORE(SDValue Op,
|
|||
|
||||
if (StoreBackchain) {
|
||||
SDValue OldSP = DAG.getCopyFromReg(Chain, DL, SystemZ::R15D, MVT::i64);
|
||||
Backchain = DAG.getLoad(MVT::i64, DL, Chain, OldSP, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
Backchain = DAG.getLoad(MVT::i64, DL, Chain, OldSP, MachinePointerInfo());
|
||||
}
|
||||
|
||||
Chain = DAG.getCopyToReg(Chain, DL, SystemZ::R15D, NewSP);
|
||||
|
||||
if (StoreBackchain)
|
||||
Chain = DAG.getStore(Chain, DL, Backchain, NewSP, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
Chain = DAG.getStore(Chain, DL, Backchain, NewSP, MachinePointerInfo());
|
||||
|
||||
return Chain;
|
||||
}
|
||||
|
|
|
@ -68,10 +68,9 @@ static SDValue memsetStore(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain,
|
|||
uint64_t StoreVal = ByteVal;
|
||||
for (unsigned I = 1; I < Size; ++I)
|
||||
StoreVal |= ByteVal << (I * 8);
|
||||
return DAG.getStore(Chain, DL,
|
||||
DAG.getConstant(StoreVal, DL,
|
||||
MVT::getIntegerVT(Size * 8)),
|
||||
Dst, DstPtrInfo, false, false, Align);
|
||||
return DAG.getStore(
|
||||
Chain, DL, DAG.getConstant(StoreVal, DL, MVT::getIntegerVT(Size * 8)),
|
||||
Dst, DstPtrInfo, Align);
|
||||
}
|
||||
|
||||
SDValue SystemZSelectionDAGInfo::EmitTargetCodeForMemset(
|
||||
|
@ -112,15 +111,14 @@ SDValue SystemZSelectionDAGInfo::EmitTargetCodeForMemset(
|
|||
} else {
|
||||
// Handle one and two bytes using STC.
|
||||
if (Bytes <= 2) {
|
||||
SDValue Chain1 = DAG.getStore(Chain, DL, Byte, Dst, DstPtrInfo,
|
||||
false, false, Align);
|
||||
SDValue Chain1 = DAG.getStore(Chain, DL, Byte, Dst, DstPtrInfo, Align);
|
||||
if (Bytes == 1)
|
||||
return Chain1;
|
||||
SDValue Dst2 = DAG.getNode(ISD::ADD, DL, PtrVT, Dst,
|
||||
DAG.getConstant(1, DL, PtrVT));
|
||||
SDValue Chain2 = DAG.getStore(Chain, DL, Byte, Dst2,
|
||||
DstPtrInfo.getWithOffset(1),
|
||||
false, false, 1);
|
||||
SDValue Chain2 =
|
||||
DAG.getStore(Chain, DL, Byte, Dst2, DstPtrInfo.getWithOffset(1),
|
||||
/* Alignment = */ 1);
|
||||
return DAG.getNode(ISD::TokenFactor, DL, MVT::Other, Chain1, Chain2);
|
||||
}
|
||||
}
|
||||
|
@ -134,8 +132,7 @@ SDValue SystemZSelectionDAGInfo::EmitTargetCodeForMemset(
|
|||
|
||||
// Copy the byte to the first location and then use MVC to copy
|
||||
// it to the rest.
|
||||
Chain = DAG.getStore(Chain, DL, Byte, Dst, DstPtrInfo,
|
||||
false, false, Align);
|
||||
Chain = DAG.getStore(Chain, DL, Byte, Dst, DstPtrInfo, Align);
|
||||
SDValue DstPlus1 = DAG.getNode(ISD::ADD, DL, PtrVT, Dst,
|
||||
DAG.getConstant(1, DL, PtrVT));
|
||||
return emitMemMem(DAG, DL, SystemZISD::MVC, SystemZISD::MVC_LOOP,
|
||||
|
|
|
@ -629,13 +629,11 @@ void X86DAGToDAGISel::PreprocessISelDAG() {
|
|||
SDLoc dl(N);
|
||||
|
||||
// FIXME: optimize the case where the src/dest is a load or store?
|
||||
SDValue Store = CurDAG->getTruncStore(CurDAG->getEntryNode(), dl,
|
||||
N->getOperand(0),
|
||||
MemTmp, MachinePointerInfo(), MemVT,
|
||||
false, false, 0);
|
||||
SDValue Store =
|
||||
CurDAG->getTruncStore(CurDAG->getEntryNode(), dl, N->getOperand(0),
|
||||
MemTmp, MachinePointerInfo(), MemVT);
|
||||
SDValue Result = CurDAG->getExtLoad(ISD::EXTLOAD, dl, DstVT, Store, MemTmp,
|
||||
MachinePointerInfo(),
|
||||
MemVT, false, false, false, 0);
|
||||
MachinePointerInfo(), MemVT);
|
||||
|
||||
// We're about to replace all uses of the FP_ROUND/FP_EXTEND with the
|
||||
// extload we created. This will cause general havok on the dag because
|
||||
|
|
|
@ -2500,8 +2500,7 @@ X86TargetLowering::LowerMemArgument(SDValue Chain, CallingConv::ID CallConv,
|
|||
SDValue FIN = DAG.getFrameIndex(FI, getPointerTy(DAG.getDataLayout()));
|
||||
SDValue Val = DAG.getLoad(
|
||||
ValVT, dl, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI));
|
||||
return ExtendedInMem ?
|
||||
DAG.getNode(ISD::TRUNCATE, dl, VA.getValVT(), Val) : Val;
|
||||
}
|
||||
|
@ -2668,8 +2667,8 @@ SDValue X86TargetLowering::LowerFormalArguments(
|
|||
|
||||
// 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, false, 0);
|
||||
ArgValue =
|
||||
DAG.getLoad(VA.getValVT(), dl, Chain, ArgValue, MachinePointerInfo());
|
||||
|
||||
InVals.push_back(ArgValue);
|
||||
}
|
||||
|
@ -2779,8 +2778,7 @@ SDValue X86TargetLowering::LowerFormalArguments(
|
|||
DAG.getStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo::getFixedStack(
|
||||
DAG.getMachineFunction(),
|
||||
FuncInfo->getRegSaveFrameIndex(), Offset),
|
||||
false, false, 0);
|
||||
FuncInfo->getRegSaveFrameIndex(), Offset));
|
||||
MemOps.push_back(Store);
|
||||
Offset += 8;
|
||||
}
|
||||
|
@ -2905,8 +2903,7 @@ SDValue X86TargetLowering::LowerMemOpCallTo(SDValue Chain, SDValue StackPtr,
|
|||
|
||||
return DAG.getStore(
|
||||
Chain, dl, Arg, PtrOff,
|
||||
MachinePointerInfo::getStack(DAG.getMachineFunction(), LocMemOffset),
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getStack(DAG.getMachineFunction(), LocMemOffset));
|
||||
}
|
||||
|
||||
/// Emit a load of return address if tail call
|
||||
|
@ -2919,8 +2916,7 @@ SDValue X86TargetLowering::EmitTailCallLoadRetAddr(
|
|||
OutRetAddr = getReturnAddressFrameIndex(DAG);
|
||||
|
||||
// Load the "old" Return address.
|
||||
OutRetAddr = DAG.getLoad(VT, dl, Chain, OutRetAddr, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
OutRetAddr = DAG.getLoad(VT, dl, Chain, OutRetAddr, MachinePointerInfo());
|
||||
return SDValue(OutRetAddr.getNode(), 1);
|
||||
}
|
||||
|
||||
|
@ -2939,8 +2935,7 @@ static SDValue EmitTailCallStoreRetAddr(SelectionDAG &DAG, MachineFunction &MF,
|
|||
SDValue NewRetAddrFrIdx = DAG.getFrameIndex(NewReturnAddrFI, PtrVT);
|
||||
Chain = DAG.getStore(Chain, dl, RetAddrFrIdx, NewRetAddrFrIdx,
|
||||
MachinePointerInfo::getFixedStack(
|
||||
DAG.getMachineFunction(), NewReturnAddrFI),
|
||||
false, false, 0);
|
||||
DAG.getMachineFunction(), NewReturnAddrFI));
|
||||
return Chain;
|
||||
}
|
||||
|
||||
|
@ -3130,8 +3125,7 @@ X86TargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
|
|||
int FI = cast<FrameIndexSDNode>(SpillSlot)->getIndex();
|
||||
Chain = DAG.getStore(
|
||||
Chain, dl, Arg, SpillSlot,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI),
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI));
|
||||
Arg = SpillSlot;
|
||||
break;
|
||||
}
|
||||
|
@ -3269,8 +3263,7 @@ X86TargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
|
|||
// Store relative to framepointer.
|
||||
MemOpChains2.push_back(DAG.getStore(
|
||||
ArgChain, dl, Arg, FIN,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI),
|
||||
false, false, 0));
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3319,9 +3312,8 @@ X86TargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
|
|||
getPointerTy(DAG.getDataLayout()), Callee);
|
||||
// Add extra indirection
|
||||
Callee = DAG.getLoad(
|
||||
getPointerTy(DAG.getDataLayout()), dl, DAG.getEntryNode(), Callee,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()), false, false,
|
||||
false, 0);
|
||||
getPointerTy(DAG.getDataLayout()), dl, DAG.getEntryNode(), Callee,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()));
|
||||
}
|
||||
}
|
||||
} else if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(Callee)) {
|
||||
|
@ -5543,8 +5535,7 @@ static SDValue LowerAsSplatVectorLoad(SDValue SrcOp, MVT VT, const SDLoc &dl,
|
|||
|
||||
EVT NVT = EVT::getVectorVT(*DAG.getContext(), PVT, NumElems);
|
||||
SDValue V1 = DAG.getLoad(NVT, dl, Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(StartOffset),
|
||||
false, false, false, 0);
|
||||
LD->getPointerInfo().getWithOffset(StartOffset));
|
||||
|
||||
SmallVector<int, 8> Mask(NumElems, EltNo);
|
||||
|
||||
|
@ -5630,10 +5621,12 @@ static SDValue EltsFromConsecutiveLoads(EVT VT, ArrayRef<SDValue> Elts,
|
|||
}
|
||||
|
||||
auto CreateLoad = [&DAG, &DL](EVT VT, LoadSDNode *LDBase) {
|
||||
SDValue NewLd = DAG.getLoad(
|
||||
VT, DL, LDBase->getChain(), LDBase->getBasePtr(),
|
||||
LDBase->getPointerInfo(), false /*LDBase->isVolatile()*/,
|
||||
LDBase->isNonTemporal(), LDBase->isInvariant(), LDBase->getAlignment());
|
||||
auto MMOFlags = LDBase->getMemOperand()->getFlags();
|
||||
assert(!(MMOFlags & MachineMemOperand::MOVolatile) &&
|
||||
"Cannot merge volatile loads.");
|
||||
SDValue NewLd =
|
||||
DAG.getLoad(VT, DL, LDBase->getChain(), LDBase->getBasePtr(),
|
||||
LDBase->getPointerInfo(), LDBase->getAlignment(), MMOFlags);
|
||||
|
||||
if (LDBase->hasAnyUseOfValue(1)) {
|
||||
SDValue NewChain =
|
||||
|
@ -5863,8 +5856,8 @@ static SDValue LowerVectorBroadcast(SDValue Op, const X86Subtarget &Subtarget,
|
|||
unsigned Alignment = cast<ConstantPoolSDNode>(CP)->getAlignment();
|
||||
Ld = DAG.getLoad(
|
||||
CVT, dl, DAG.getEntryNode(), CP,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), false,
|
||||
false, false, Alignment);
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
|
||||
Alignment);
|
||||
|
||||
return DAG.getNode(X86ISD::VBROADCAST, dl, VT, Ld);
|
||||
}
|
||||
|
@ -12934,8 +12927,7 @@ X86TargetLowering::LowerExternalSymbol(SDValue Op, SelectionDAG &DAG) const {
|
|||
// load.
|
||||
if (isGlobalStubReference(OpFlag))
|
||||
Result = DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), Result,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()));
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
@ -13001,8 +12993,7 @@ SDValue X86TargetLowering::LowerGlobalAddress(const GlobalValue *GV,
|
|||
// load.
|
||||
if (isGlobalStubReference(OpFlags))
|
||||
Result = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), Result,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()));
|
||||
|
||||
// If there was a non-zero offset that we didn't fold, create an explicit
|
||||
// addition for it.
|
||||
|
@ -13124,7 +13115,7 @@ static SDValue LowerToTLSExecModel(GlobalAddressSDNode *GA, SelectionDAG &DAG,
|
|||
|
||||
SDValue ThreadPointer =
|
||||
DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), DAG.getIntPtrConstant(0, dl),
|
||||
MachinePointerInfo(Ptr), false, false, false, 0);
|
||||
MachinePointerInfo(Ptr));
|
||||
|
||||
unsigned char OperandFlags = 0;
|
||||
// Most TLS accesses are not RIP relative, even on x86-64. One exception is
|
||||
|
@ -13159,8 +13150,7 @@ static SDValue LowerToTLSExecModel(GlobalAddressSDNode *GA, SelectionDAG &DAG,
|
|||
}
|
||||
|
||||
Offset = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), Offset,
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getGOT(DAG.getMachineFunction()));
|
||||
}
|
||||
|
||||
// The address of the thread local variable is the add of the thread
|
||||
|
@ -13277,8 +13267,7 @@ X86TargetLowering::LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const {
|
|||
: DAG.getExternalSymbol("_tls_array", PtrVT));
|
||||
|
||||
SDValue ThreadPointer =
|
||||
DAG.getLoad(PtrVT, dl, Chain, TlsArray, MachinePointerInfo(Ptr), false,
|
||||
false, false, 0);
|
||||
DAG.getLoad(PtrVT, dl, Chain, TlsArray, MachinePointerInfo(Ptr));
|
||||
|
||||
SDValue res;
|
||||
if (GV->getThreadLocalMode() == GlobalVariable::LocalExecTLSModel) {
|
||||
|
@ -13288,11 +13277,9 @@ X86TargetLowering::LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const {
|
|||
SDValue IDX = DAG.getExternalSymbol("_tls_index", PtrVT);
|
||||
if (Subtarget.is64Bit())
|
||||
IDX = DAG.getExtLoad(ISD::ZEXTLOAD, dl, PtrVT, Chain, IDX,
|
||||
MachinePointerInfo(), MVT::i32, false, false,
|
||||
false, 0);
|
||||
MachinePointerInfo(), MVT::i32);
|
||||
else
|
||||
IDX = DAG.getLoad(PtrVT, dl, Chain, IDX, MachinePointerInfo(), false,
|
||||
false, false, 0);
|
||||
IDX = DAG.getLoad(PtrVT, dl, Chain, IDX, MachinePointerInfo());
|
||||
|
||||
auto &DL = DAG.getDataLayout();
|
||||
SDValue Scale =
|
||||
|
@ -13302,8 +13289,7 @@ X86TargetLowering::LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const {
|
|||
res = DAG.getNode(ISD::ADD, dl, PtrVT, ThreadPointer, IDX);
|
||||
}
|
||||
|
||||
res = DAG.getLoad(PtrVT, dl, Chain, res, MachinePointerInfo(), false, false,
|
||||
false, 0);
|
||||
res = DAG.getLoad(PtrVT, dl, Chain, res, MachinePointerInfo());
|
||||
|
||||
// Get the offset of start of .tls section
|
||||
SDValue TGA = DAG.getTargetGlobalAddress(GA->getGlobal(), dl,
|
||||
|
@ -13421,8 +13407,7 @@ SDValue X86TargetLowering::LowerSINT_TO_FP(SDValue Op,
|
|||
SDValue StackSlot = DAG.getFrameIndex(SSFI, PtrVT);
|
||||
SDValue Chain = DAG.getStore(
|
||||
DAG.getEntryNode(), dl, ValueToStore, StackSlot,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), SSFI), false,
|
||||
false, 0);
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), SSFI));
|
||||
return BuildFILD(Op, SrcVT, Chain, StackSlot, DAG);
|
||||
}
|
||||
|
||||
|
@ -13480,8 +13465,7 @@ SDValue X86TargetLowering::BuildFILD(SDValue Op, EVT SrcVT, SDValue Chain,
|
|||
Ops, Op.getValueType(), MMO);
|
||||
Result = DAG.getLoad(
|
||||
Op.getValueType(), DL, Chain, StackSlot,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), SSFI),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), SSFI));
|
||||
}
|
||||
|
||||
return Result;
|
||||
|
@ -13528,14 +13512,14 @@ SDValue X86TargetLowering::LowerUINT_TO_FP_i64(SDValue Op,
|
|||
SDValue CLod0 =
|
||||
DAG.getLoad(MVT::v4i32, dl, DAG.getEntryNode(), CPIdx0,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
|
||||
false, false, false, 16);
|
||||
/* Alignment = */ 16);
|
||||
SDValue Unpck1 =
|
||||
getUnpackl(DAG, dl, MVT::v4i32, DAG.getBitcast(MVT::v4i32, XR1), CLod0);
|
||||
|
||||
SDValue CLod1 =
|
||||
DAG.getLoad(MVT::v2f64, dl, CLod0.getValue(1), CPIdx1,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
|
||||
false, false, false, 16);
|
||||
/* Alignment = */ 16);
|
||||
SDValue XR2F = DAG.getBitcast(MVT::v2f64, Unpck1);
|
||||
// TODO: Are there any fast-math-flags to propagate here?
|
||||
SDValue Sub = DAG.getNode(ISD::FSUB, dl, MVT::v2f64, XR2F, CLod1);
|
||||
|
@ -13762,11 +13746,9 @@ SDValue X86TargetLowering::LowerUINT_TO_FP(SDValue Op,
|
|||
if (SrcVT == MVT::i32) {
|
||||
SDValue OffsetSlot = DAG.getMemBasePlusOffset(StackSlot, 4, dl);
|
||||
SDValue Store1 = DAG.getStore(DAG.getEntryNode(), dl, Op.getOperand(0),
|
||||
StackSlot, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
StackSlot, MachinePointerInfo());
|
||||
SDValue Store2 = DAG.getStore(Store1, dl, DAG.getConstant(0, dl, MVT::i32),
|
||||
OffsetSlot, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
OffsetSlot, MachinePointerInfo());
|
||||
SDValue Fild = BuildFILD(Op, MVT::i64, Store2, StackSlot, DAG);
|
||||
return Fild;
|
||||
}
|
||||
|
@ -13778,9 +13760,8 @@ SDValue X86TargetLowering::LowerUINT_TO_FP(SDValue Op,
|
|||
// an SSE register, avoiding the store forwarding penalty that would come
|
||||
// with two 32-bit stores.
|
||||
ValueToStore = DAG.getBitcast(MVT::f64, ValueToStore);
|
||||
SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, ValueToStore,
|
||||
StackSlot, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, ValueToStore, StackSlot,
|
||||
MachinePointerInfo());
|
||||
// For i64 source, we need to add the appropriate power of 2 if the input
|
||||
// was negative. This is the same as the optimization in
|
||||
// DAGTypeLegalizer::ExpandIntOp_UNIT_TO_FP, and for it to be safe here,
|
||||
|
@ -13819,7 +13800,7 @@ SDValue X86TargetLowering::LowerUINT_TO_FP(SDValue Op,
|
|||
SDValue Fudge = DAG.getExtLoad(
|
||||
ISD::EXTLOAD, dl, MVT::f80, DAG.getEntryNode(), FudgePtr,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), MVT::f32,
|
||||
false, false, false, 4);
|
||||
/* Alignment = */ 4);
|
||||
// Extend everything to 80 bits to force it to be done on x87.
|
||||
// TODO: Are there any fast-math-flags to propagate here?
|
||||
SDValue Add = DAG.getNode(ISD::FADD, dl, MVT::f80, Fild, Fudge);
|
||||
|
@ -13950,8 +13931,7 @@ X86TargetLowering::FP_TO_INTHelper(SDValue Op, SelectionDAG &DAG,
|
|||
if (isScalarFPTypeInSSEReg(TheVT)) {
|
||||
assert(DstTy == MVT::i64 && "Invalid FP_TO_SINT to lower!");
|
||||
Chain = DAG.getStore(Chain, DL, Value, StackSlot,
|
||||
MachinePointerInfo::getFixedStack(MF, SSFI), false,
|
||||
false, 0);
|
||||
MachinePointerInfo::getFixedStack(MF, SSFI));
|
||||
SDVTList Tys = DAG.getVTList(Op.getOperand(0).getValueType(), MVT::Other);
|
||||
SDValue Ops[] = {
|
||||
Chain, StackSlot, DAG.getValueType(TheVT)
|
||||
|
@ -13979,14 +13959,12 @@ X86TargetLowering::FP_TO_INTHelper(SDValue Op, SelectionDAG &DAG,
|
|||
SDValue FIST = DAG.getMemIntrinsicNode(Opc, DL, DAG.getVTList(MVT::Other),
|
||||
FistOps, DstTy, MMO);
|
||||
|
||||
SDValue Low32 = DAG.getLoad(MVT::i32, DL, FIST, StackSlot,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Low32 =
|
||||
DAG.getLoad(MVT::i32, DL, FIST, StackSlot, MachinePointerInfo());
|
||||
SDValue HighAddr = DAG.getMemBasePlusOffset(StackSlot, 4, DL);
|
||||
|
||||
SDValue High32 = DAG.getLoad(MVT::i32, DL, FIST, HighAddr,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue High32 =
|
||||
DAG.getLoad(MVT::i32, DL, FIST, HighAddr, MachinePointerInfo());
|
||||
High32 = DAG.getNode(ISD::XOR, DL, MVT::i32, High32, Adjust);
|
||||
|
||||
if (Subtarget.is64Bit()) {
|
||||
|
@ -14295,9 +14273,8 @@ SDValue X86TargetLowering::LowerFP_TO_SINT(SDValue Op,
|
|||
|
||||
if (StackSlot.getNode())
|
||||
// Load the result.
|
||||
return DAG.getLoad(Op.getValueType(), SDLoc(Op),
|
||||
FIST, StackSlot, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
return DAG.getLoad(Op.getValueType(), SDLoc(Op), FIST, StackSlot,
|
||||
MachinePointerInfo());
|
||||
|
||||
// The node is the result.
|
||||
return FIST;
|
||||
|
@ -14314,9 +14291,8 @@ SDValue X86TargetLowering::LowerFP_TO_UINT(SDValue Op,
|
|||
|
||||
if (StackSlot.getNode())
|
||||
// Load the result.
|
||||
return DAG.getLoad(Op.getValueType(), SDLoc(Op),
|
||||
FIST, StackSlot, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
return DAG.getLoad(Op.getValueType(), SDLoc(Op), FIST, StackSlot,
|
||||
MachinePointerInfo());
|
||||
|
||||
// The node is the result.
|
||||
return FIST;
|
||||
|
@ -14392,10 +14368,9 @@ static SDValue LowerFABSorFNEG(SDValue Op, SelectionDAG &DAG) {
|
|||
const TargetLowering &TLI = DAG.getTargetLoweringInfo();
|
||||
SDValue CPIdx = DAG.getConstantPool(C, TLI.getPointerTy(DAG.getDataLayout()));
|
||||
unsigned Alignment = cast<ConstantPoolSDNode>(CPIdx)->getAlignment();
|
||||
SDValue Mask =
|
||||
DAG.getLoad(LogicVT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
|
||||
false, false, false, Alignment);
|
||||
SDValue Mask = DAG.getLoad(
|
||||
LogicVT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()), Alignment);
|
||||
|
||||
SDValue Op0 = Op.getOperand(0);
|
||||
bool IsFNABS = !IsFABS && (Op0.getOpcode() == ISD::FABS);
|
||||
|
@ -14463,7 +14438,7 @@ static SDValue LowerFCOPYSIGN(SDValue Op, SelectionDAG &DAG) {
|
|||
SDValue Mask1 =
|
||||
DAG.getLoad(LogicVT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
|
||||
false, false, false, 16);
|
||||
/* Alignment = */ 16);
|
||||
if (!IsF128)
|
||||
Op1 = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl, LogicVT, Op1);
|
||||
SDValue SignBit = DAG.getNode(X86ISD::FAND, dl, LogicVT, Op1, Mask1);
|
||||
|
@ -14489,7 +14464,7 @@ static SDValue LowerFCOPYSIGN(SDValue Op, SelectionDAG &DAG) {
|
|||
SDValue Val =
|
||||
DAG.getLoad(LogicVT, dl, DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(DAG.getMachineFunction()),
|
||||
false, false, false, 16);
|
||||
/* Alignment = */ 16);
|
||||
// If the magnitude operand wasn't a constant, we need to AND out the sign.
|
||||
if (!isa<ConstantFPSDNode>(Op0)) {
|
||||
if (!IsF128)
|
||||
|
@ -16409,8 +16384,8 @@ static SDValue LowerExtendedLoad(SDValue Op, const X86Subtarget &Subtarget,
|
|||
"it must be a legal 128-bit vector "
|
||||
"type!");
|
||||
Load = DAG.getLoad(MemVT, dl, Ld->getChain(), Ld->getBasePtr(),
|
||||
Ld->getPointerInfo(), Ld->isVolatile(), Ld->isNonTemporal(),
|
||||
Ld->isInvariant(), Ld->getAlignment());
|
||||
Ld->getPointerInfo(), Ld->getAlignment(),
|
||||
Ld->getMemOperand()->getFlags());
|
||||
} else {
|
||||
assert(MemSz < 128 &&
|
||||
"Can't extend a type wider than 128 bits to a 256 bit vector!");
|
||||
|
@ -16423,9 +16398,8 @@ static SDValue LowerExtendedLoad(SDValue Op, const X86Subtarget &Subtarget,
|
|||
EVT HalfVecVT = EVT::getVectorVT(*DAG.getContext(), HalfEltVT, NumElems);
|
||||
Load =
|
||||
DAG.getExtLoad(Ext, dl, HalfVecVT, Ld->getChain(), Ld->getBasePtr(),
|
||||
Ld->getPointerInfo(), MemVT, Ld->isVolatile(),
|
||||
Ld->isNonTemporal(), Ld->isInvariant(),
|
||||
Ld->getAlignment());
|
||||
Ld->getPointerInfo(), MemVT, Ld->getAlignment(),
|
||||
Ld->getMemOperand()->getFlags());
|
||||
}
|
||||
|
||||
// Replace chain users with the new chain.
|
||||
|
@ -16493,8 +16467,7 @@ static SDValue LowerExtendedLoad(SDValue Op, const X86Subtarget &Subtarget,
|
|||
// Perform a single load.
|
||||
SDValue ScalarLoad =
|
||||
DAG.getLoad(SclrLoadTy, dl, Ld->getChain(), Ptr, Ld->getPointerInfo(),
|
||||
Ld->isVolatile(), Ld->isNonTemporal(), Ld->isInvariant(),
|
||||
Ld->getAlignment());
|
||||
Ld->getAlignment(), Ld->getMemOperand()->getFlags());
|
||||
Chains.push_back(ScalarLoad.getValue(1));
|
||||
// Create the first element type using SCALAR_TO_VECTOR in order to avoid
|
||||
// another round of DAGCombining.
|
||||
|
@ -16942,7 +16915,7 @@ SDValue X86TargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG) const {
|
|||
// memory location argument.
|
||||
SDValue FR = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(), PtrVT);
|
||||
return DAG.getStore(Op.getOperand(0), DL, FR, Op.getOperand(1),
|
||||
MachinePointerInfo(SV), false, false, 0);
|
||||
MachinePointerInfo(SV));
|
||||
}
|
||||
|
||||
// __va_list_tag:
|
||||
|
@ -16953,34 +16926,34 @@ SDValue X86TargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG) const {
|
|||
SmallVector<SDValue, 8> MemOps;
|
||||
SDValue FIN = Op.getOperand(1);
|
||||
// Store gp_offset
|
||||
SDValue Store = DAG.getStore(Op.getOperand(0), DL,
|
||||
DAG.getConstant(FuncInfo->getVarArgsGPOffset(),
|
||||
DL, MVT::i32),
|
||||
FIN, MachinePointerInfo(SV), false, false, 0);
|
||||
SDValue Store = DAG.getStore(
|
||||
Op.getOperand(0), DL,
|
||||
DAG.getConstant(FuncInfo->getVarArgsGPOffset(), DL, MVT::i32), FIN,
|
||||
MachinePointerInfo(SV));
|
||||
MemOps.push_back(Store);
|
||||
|
||||
// Store fp_offset
|
||||
FIN = DAG.getMemBasePlusOffset(FIN, 4, DL);
|
||||
Store = DAG.getStore(Op.getOperand(0), DL,
|
||||
DAG.getConstant(FuncInfo->getVarArgsFPOffset(), DL,
|
||||
MVT::i32),
|
||||
FIN, MachinePointerInfo(SV, 4), false, false, 0);
|
||||
Store = DAG.getStore(
|
||||
Op.getOperand(0), DL,
|
||||
DAG.getConstant(FuncInfo->getVarArgsFPOffset(), DL, MVT::i32), FIN,
|
||||
MachinePointerInfo(SV, 4));
|
||||
MemOps.push_back(Store);
|
||||
|
||||
// Store ptr to overflow_arg_area
|
||||
FIN = DAG.getNode(ISD::ADD, DL, PtrVT, FIN, DAG.getIntPtrConstant(4, DL));
|
||||
SDValue OVFIN = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(), PtrVT);
|
||||
Store = DAG.getStore(Op.getOperand(0), DL, OVFIN, FIN,
|
||||
MachinePointerInfo(SV, 8),
|
||||
false, false, 0);
|
||||
Store =
|
||||
DAG.getStore(Op.getOperand(0), DL, OVFIN, FIN, MachinePointerInfo(SV, 8));
|
||||
MemOps.push_back(Store);
|
||||
|
||||
// Store ptr to reg_save_area.
|
||||
FIN = DAG.getNode(ISD::ADD, DL, PtrVT, FIN, DAG.getIntPtrConstant(
|
||||
Subtarget.isTarget64BitLP64() ? 8 : 4, DL));
|
||||
SDValue RSFIN = DAG.getFrameIndex(FuncInfo->getRegSaveFrameIndex(), PtrVT);
|
||||
Store = DAG.getStore(Op.getOperand(0), DL, RSFIN, FIN, MachinePointerInfo(
|
||||
SV, Subtarget.isTarget64BitLP64() ? 16 : 12), false, false, 0);
|
||||
Store = DAG.getStore(
|
||||
Op.getOperand(0), DL, RSFIN, FIN,
|
||||
MachinePointerInfo(SV, Subtarget.isTarget64BitLP64() ? 16 : 12));
|
||||
MemOps.push_back(Store);
|
||||
return DAG.getNode(ISD::TokenFactor, DL, MVT::Other, MemOps);
|
||||
}
|
||||
|
@ -17042,11 +17015,7 @@ SDValue X86TargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG) const {
|
|||
Chain = VAARG.getValue(1);
|
||||
|
||||
// Load the next argument and return it
|
||||
return DAG.getLoad(ArgVT, dl,
|
||||
Chain,
|
||||
VAARG,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
return DAG.getLoad(ArgVT, dl, Chain, VAARG, MachinePointerInfo());
|
||||
}
|
||||
|
||||
static SDValue LowerVACOPY(SDValue Op, const X86Subtarget &Subtarget,
|
||||
|
@ -18340,7 +18309,7 @@ static void getReadTimeStampCounter(SDNode *N, const SDLoc &DL, unsigned Opcode,
|
|||
// Explicitly store the content of ECX at the location passed in input
|
||||
// to the 'rdtscp' intrinsic.
|
||||
Chain = DAG.getStore(ecx.getValue(1), DL, ecx, N->getOperand(2),
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo());
|
||||
}
|
||||
|
||||
if (Subtarget.is64Bit()) {
|
||||
|
@ -18521,8 +18490,7 @@ static SDValue LowerINTRINSIC_W_CHAIN(SDValue Op, const X86Subtarget &Subtarget,
|
|||
SDValue Res = DAG.getNode(IntrData->Opc0, dl, VTs, Op.getOperand(3),
|
||||
Op.getOperand(4), GenCF.getValue(1));
|
||||
SDValue Store = DAG.getStore(Op.getOperand(0), dl, Res.getValue(0),
|
||||
Op.getOperand(5), MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
Op.getOperand(5), MachinePointerInfo());
|
||||
SDValue SetCC = DAG.getNode(X86ISD::SETCC, dl, MVT::i8,
|
||||
DAG.getConstant(X86::COND_B, dl, MVT::i8),
|
||||
Res.getValue(1));
|
||||
|
@ -18613,15 +18581,14 @@ SDValue X86TargetLowering::LowerRETURNADDR(SDValue Op,
|
|||
const X86RegisterInfo *RegInfo = Subtarget.getRegisterInfo();
|
||||
SDValue Offset = DAG.getConstant(RegInfo->getSlotSize(), dl, PtrVT);
|
||||
return DAG.getLoad(PtrVT, dl, DAG.getEntryNode(),
|
||||
DAG.getNode(ISD::ADD, dl, PtrVT,
|
||||
FrameAddr, Offset),
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
DAG.getNode(ISD::ADD, dl, PtrVT, FrameAddr, Offset),
|
||||
MachinePointerInfo());
|
||||
}
|
||||
|
||||
// Just load the return address.
|
||||
SDValue RetAddrFI = getReturnAddressFrameIndex(DAG);
|
||||
return DAG.getLoad(PtrVT, dl, DAG.getEntryNode(),
|
||||
RetAddrFI, MachinePointerInfo(), false, false, false, 0);
|
||||
return DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), RetAddrFI,
|
||||
MachinePointerInfo());
|
||||
}
|
||||
|
||||
SDValue X86TargetLowering::LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const {
|
||||
|
@ -18658,8 +18625,7 @@ SDValue X86TargetLowering::LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const {
|
|||
SDValue FrameAddr = DAG.getCopyFromReg(DAG.getEntryNode(), dl, FrameReg, VT);
|
||||
while (Depth--)
|
||||
FrameAddr = DAG.getLoad(VT, dl, DAG.getEntryNode(), FrameAddr,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
MachinePointerInfo());
|
||||
return FrameAddr;
|
||||
}
|
||||
|
||||
|
@ -18742,8 +18708,7 @@ SDValue X86TargetLowering::LowerEH_RETURN(SDValue Op, SelectionDAG &DAG) const {
|
|||
DAG.getIntPtrConstant(RegInfo->getSlotSize(),
|
||||
dl));
|
||||
StoreAddr = DAG.getNode(ISD::ADD, dl, PtrVT, StoreAddr, Offset);
|
||||
Chain = DAG.getStore(Chain, dl, Handler, StoreAddr, MachinePointerInfo(),
|
||||
false, false, 0);
|
||||
Chain = DAG.getStore(Chain, dl, Handler, StoreAddr, MachinePointerInfo());
|
||||
Chain = DAG.getCopyToReg(Chain, dl, StoreAddrReg, StoreAddr);
|
||||
|
||||
return DAG.getNode(X86ISD::EH_RETURN, dl, MVT::Other, Chain,
|
||||
|
@ -18813,14 +18778,13 @@ SDValue X86TargetLowering::LowerINIT_TRAMPOLINE(SDValue Op,
|
|||
unsigned OpCode = ((MOV64ri | N86R11) << 8) | REX_WB; // movabsq r11
|
||||
SDValue Addr = Trmp;
|
||||
OutChains[0] = DAG.getStore(Root, dl, DAG.getConstant(OpCode, dl, MVT::i16),
|
||||
Addr, MachinePointerInfo(TrmpAddr),
|
||||
false, false, 0);
|
||||
Addr, MachinePointerInfo(TrmpAddr));
|
||||
|
||||
Addr = DAG.getNode(ISD::ADD, dl, MVT::i64, Trmp,
|
||||
DAG.getConstant(2, dl, MVT::i64));
|
||||
OutChains[1] = DAG.getStore(Root, dl, FPtr, Addr,
|
||||
MachinePointerInfo(TrmpAddr, 2),
|
||||
false, false, 2);
|
||||
OutChains[1] =
|
||||
DAG.getStore(Root, dl, FPtr, Addr, MachinePointerInfo(TrmpAddr, 2),
|
||||
/* Alignment = */ 2);
|
||||
|
||||
// Load the 'nest' parameter value into R10.
|
||||
// R10 is specified in X86CallingConv.td
|
||||
|
@ -18828,29 +18792,26 @@ SDValue X86TargetLowering::LowerINIT_TRAMPOLINE(SDValue Op,
|
|||
Addr = DAG.getNode(ISD::ADD, dl, MVT::i64, Trmp,
|
||||
DAG.getConstant(10, dl, MVT::i64));
|
||||
OutChains[2] = DAG.getStore(Root, dl, DAG.getConstant(OpCode, dl, MVT::i16),
|
||||
Addr, MachinePointerInfo(TrmpAddr, 10),
|
||||
false, false, 0);
|
||||
Addr, MachinePointerInfo(TrmpAddr, 10));
|
||||
|
||||
Addr = DAG.getNode(ISD::ADD, dl, MVT::i64, Trmp,
|
||||
DAG.getConstant(12, dl, MVT::i64));
|
||||
OutChains[3] = DAG.getStore(Root, dl, Nest, Addr,
|
||||
MachinePointerInfo(TrmpAddr, 12),
|
||||
false, false, 2);
|
||||
OutChains[3] =
|
||||
DAG.getStore(Root, dl, Nest, Addr, MachinePointerInfo(TrmpAddr, 12),
|
||||
/* Alignment = */ 2);
|
||||
|
||||
// Jump to the nested function.
|
||||
OpCode = (JMP64r << 8) | REX_WB; // jmpq *...
|
||||
Addr = DAG.getNode(ISD::ADD, dl, MVT::i64, Trmp,
|
||||
DAG.getConstant(20, dl, MVT::i64));
|
||||
OutChains[4] = DAG.getStore(Root, dl, DAG.getConstant(OpCode, dl, MVT::i16),
|
||||
Addr, MachinePointerInfo(TrmpAddr, 20),
|
||||
false, false, 0);
|
||||
Addr, MachinePointerInfo(TrmpAddr, 20));
|
||||
|
||||
unsigned char ModRM = N86R11 | (4 << 3) | (3 << 6); // ...r11
|
||||
Addr = DAG.getNode(ISD::ADD, dl, MVT::i64, Trmp,
|
||||
DAG.getConstant(22, dl, MVT::i64));
|
||||
OutChains[5] = DAG.getStore(Root, dl, DAG.getConstant(ModRM, dl, MVT::i8),
|
||||
Addr, MachinePointerInfo(TrmpAddr, 22),
|
||||
false, false, 0);
|
||||
Addr, MachinePointerInfo(TrmpAddr, 22));
|
||||
|
||||
return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains);
|
||||
} else {
|
||||
|
@ -18910,29 +18871,28 @@ SDValue X86TargetLowering::LowerINIT_TRAMPOLINE(SDValue Op,
|
|||
// This is storing the opcode for MOV32ri.
|
||||
const unsigned char MOV32ri = 0xB8; // X86::MOV32ri's opcode byte.
|
||||
const unsigned char N86Reg = TRI->getEncodingValue(NestReg) & 0x7;
|
||||
OutChains[0] = DAG.getStore(Root, dl,
|
||||
DAG.getConstant(MOV32ri|N86Reg, dl, MVT::i8),
|
||||
Trmp, MachinePointerInfo(TrmpAddr),
|
||||
false, false, 0);
|
||||
OutChains[0] =
|
||||
DAG.getStore(Root, dl, DAG.getConstant(MOV32ri | N86Reg, dl, MVT::i8),
|
||||
Trmp, MachinePointerInfo(TrmpAddr));
|
||||
|
||||
Addr = DAG.getNode(ISD::ADD, dl, MVT::i32, Trmp,
|
||||
DAG.getConstant(1, dl, MVT::i32));
|
||||
OutChains[1] = DAG.getStore(Root, dl, Nest, Addr,
|
||||
MachinePointerInfo(TrmpAddr, 1),
|
||||
false, false, 1);
|
||||
OutChains[1] =
|
||||
DAG.getStore(Root, dl, Nest, Addr, MachinePointerInfo(TrmpAddr, 1),
|
||||
/* Alignment = */ 1);
|
||||
|
||||
const unsigned char JMP = 0xE9; // jmp <32bit dst> opcode.
|
||||
Addr = DAG.getNode(ISD::ADD, dl, MVT::i32, Trmp,
|
||||
DAG.getConstant(5, dl, MVT::i32));
|
||||
OutChains[2] = DAG.getStore(Root, dl, DAG.getConstant(JMP, dl, MVT::i8),
|
||||
Addr, MachinePointerInfo(TrmpAddr, 5),
|
||||
false, false, 1);
|
||||
/* Alignment = */ 1);
|
||||
|
||||
Addr = DAG.getNode(ISD::ADD, dl, MVT::i32, Trmp,
|
||||
DAG.getConstant(6, dl, MVT::i32));
|
||||
OutChains[3] = DAG.getStore(Root, dl, Disp, Addr,
|
||||
MachinePointerInfo(TrmpAddr, 6),
|
||||
false, false, 1);
|
||||
OutChains[3] =
|
||||
DAG.getStore(Root, dl, Disp, Addr, MachinePointerInfo(TrmpAddr, 6),
|
||||
/* Alignment = */ 1);
|
||||
|
||||
return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains);
|
||||
}
|
||||
|
@ -18980,8 +18940,8 @@ SDValue X86TargetLowering::LowerFLT_ROUNDS_(SDValue Op,
|
|||
Ops, MVT::i16, MMO);
|
||||
|
||||
// Load FP Control Word from stack slot
|
||||
SDValue CWD = DAG.getLoad(MVT::i16, DL, Chain, StackSlot,
|
||||
MachinePointerInfo(), false, false, false, 0);
|
||||
SDValue CWD =
|
||||
DAG.getLoad(MVT::i16, DL, Chain, StackSlot, MachinePointerInfo());
|
||||
|
||||
// Transform as necessary
|
||||
SDValue CWD1 =
|
||||
|
@ -19627,8 +19587,8 @@ SDValue X86TargetLowering::LowerWin64_i128OP(SDValue Op, SelectionDAG &DAG) cons
|
|||
"Unexpected argument type for lowering");
|
||||
SDValue StackPtr = DAG.CreateStackTemporary(ArgVT, 16);
|
||||
Entry.Node = StackPtr;
|
||||
InChain = DAG.getStore(InChain, dl, Op->getOperand(i), StackPtr, MachinePointerInfo(),
|
||||
false, false, 16);
|
||||
InChain = DAG.getStore(InChain, dl, Op->getOperand(i), StackPtr,
|
||||
MachinePointerInfo(), /* Alignment = */ 16);
|
||||
Type *ArgTy = ArgVT.getTypeForEVT(*DAG.getContext());
|
||||
Entry.Ty = PointerType::get(ArgTy,0);
|
||||
Entry.isSExt = false;
|
||||
|
@ -21917,9 +21877,8 @@ void X86TargetLowering::ReplaceNodeResults(SDNode *N,
|
|||
EVT VT = N->getValueType(0);
|
||||
// Return a load from the stack slot.
|
||||
if (StackSlot.getNode())
|
||||
Results.push_back(DAG.getLoad(VT, dl, FIST, StackSlot,
|
||||
MachinePointerInfo(),
|
||||
false, false, false, 0));
|
||||
Results.push_back(
|
||||
DAG.getLoad(VT, dl, FIST, StackSlot, MachinePointerInfo()));
|
||||
else
|
||||
Results.push_back(FIST);
|
||||
}
|
||||
|
@ -26435,7 +26394,7 @@ static SDValue combineExtractVectorElt(SDNode *N, SelectionDAG &DAG,
|
|||
// Store the value to a temporary stack slot.
|
||||
SDValue StackPtr = DAG.CreateStackTemporary(InputVector.getValueType());
|
||||
SDValue Ch = DAG.getStore(DAG.getEntryNode(), dl, InputVector, StackPtr,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo());
|
||||
|
||||
EVT ElementType = InputVector.getValueType().getVectorElementType();
|
||||
unsigned EltSize = ElementType.getSizeInBits() / 8;
|
||||
|
@ -26450,10 +26409,8 @@ static SDValue combineExtractVectorElt(SDNode *N, SelectionDAG &DAG,
|
|||
DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr, OffsetVal);
|
||||
|
||||
// Load the scalar.
|
||||
Vals[i] = DAG.getLoad(ElementType, dl, Ch,
|
||||
ScalarAddr, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
|
||||
Vals[i] =
|
||||
DAG.getLoad(ElementType, dl, Ch, ScalarAddr, MachinePointerInfo());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28844,16 +28801,14 @@ static SDValue combineLoad(SDNode *N, SelectionDAG &DAG,
|
|||
|
||||
EVT HalfVT = EVT::getVectorVT(*DAG.getContext(), MemVT.getScalarType(),
|
||||
NumElems/2);
|
||||
SDValue Load1 = DAG.getLoad(HalfVT, dl, Ld->getChain(), Ptr,
|
||||
Ld->getPointerInfo(), Ld->isVolatile(),
|
||||
Ld->isNonTemporal(), Ld->isInvariant(),
|
||||
Alignment);
|
||||
SDValue Load1 =
|
||||
DAG.getLoad(HalfVT, dl, Ld->getChain(), Ptr, Ld->getPointerInfo(),
|
||||
Alignment, Ld->getMemOperand()->getFlags());
|
||||
|
||||
Ptr = DAG.getMemBasePlusOffset(Ptr, 16, dl);
|
||||
SDValue Load2 = DAG.getLoad(HalfVT, dl, Ld->getChain(), Ptr,
|
||||
Ld->getPointerInfo(), Ld->isVolatile(),
|
||||
Ld->isNonTemporal(), Ld->isInvariant(),
|
||||
std::min(16U, Alignment));
|
||||
SDValue Load2 =
|
||||
DAG.getLoad(HalfVT, dl, Ld->getChain(), Ptr, Ld->getPointerInfo(),
|
||||
std::min(16U, Alignment), Ld->getMemOperand()->getFlags());
|
||||
SDValue TF = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
|
||||
Load1.getValue(1),
|
||||
Load2.getValue(1));
|
||||
|
@ -28947,9 +28902,9 @@ reduceMaskedLoadToScalarLoad(MaskedLoadSDNode *ML, SelectionDAG &DAG,
|
|||
SDLoc DL(ML);
|
||||
EVT VT = ML->getValueType(0);
|
||||
EVT EltVT = VT.getVectorElementType();
|
||||
SDValue Load = DAG.getLoad(EltVT, DL, ML->getChain(), Addr,
|
||||
ML->getPointerInfo(), ML->isVolatile(),
|
||||
ML->isNonTemporal(), ML->isInvariant(), Alignment);
|
||||
SDValue Load =
|
||||
DAG.getLoad(EltVT, DL, ML->getChain(), Addr, ML->getPointerInfo(),
|
||||
Alignment, ML->getMemOperand()->getFlags());
|
||||
|
||||
// Insert the loaded element into the appropriate place in the vector.
|
||||
SDValue Insert = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL, VT, ML->getSrc0(),
|
||||
|
@ -29113,7 +29068,7 @@ static SDValue reduceMaskedStoreToScalarStore(MaskedStoreSDNode *MS,
|
|||
|
||||
// Store that element at the appropriate offset from the base pointer.
|
||||
return DAG.getStore(MS->getChain(), DL, Extract, Addr, MS->getPointerInfo(),
|
||||
MS->isVolatile(), MS->isNonTemporal(), Alignment);
|
||||
Alignment, MS->getMemOperand()->getFlags());
|
||||
}
|
||||
|
||||
static SDValue combineMaskedStore(SDNode *N, SelectionDAG &DAG,
|
||||
|
@ -29233,13 +29188,12 @@ static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
|
|||
SDValue Ptr0 = St->getBasePtr();
|
||||
SDValue Ptr1 = DAG.getMemBasePlusOffset(Ptr0, 16, dl);
|
||||
|
||||
SDValue Ch0 = DAG.getStore(St->getChain(), dl, Value0, Ptr0,
|
||||
St->getPointerInfo(), St->isVolatile(),
|
||||
St->isNonTemporal(), Alignment);
|
||||
SDValue Ch1 = DAG.getStore(St->getChain(), dl, Value1, Ptr1,
|
||||
St->getPointerInfo(), St->isVolatile(),
|
||||
St->isNonTemporal(),
|
||||
std::min(16U, Alignment));
|
||||
SDValue Ch0 =
|
||||
DAG.getStore(St->getChain(), dl, Value0, Ptr0, St->getPointerInfo(),
|
||||
Alignment, St->getMemOperand()->getFlags());
|
||||
SDValue Ch1 =
|
||||
DAG.getStore(St->getChain(), dl, Value1, Ptr1, St->getPointerInfo(),
|
||||
std::min(16U, Alignment), St->getMemOperand()->getFlags());
|
||||
return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Ch0, Ch1);
|
||||
}
|
||||
|
||||
|
@ -29253,8 +29207,8 @@ static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
|
|||
if (SDValue Avg = detectAVGPattern(St->getValue(), St->getMemoryVT(), DAG,
|
||||
Subtarget, dl))
|
||||
return DAG.getStore(St->getChain(), dl, Avg, St->getBasePtr(),
|
||||
St->getPointerInfo(), St->isVolatile(),
|
||||
St->isNonTemporal(), St->getAlignment());
|
||||
St->getPointerInfo(), St->getAlignment(),
|
||||
St->getMemOperand()->getFlags());
|
||||
|
||||
const TargetLowering &TLI = DAG.getTargetLoweringInfo();
|
||||
unsigned NumElems = VT.getVectorNumElements();
|
||||
|
@ -29325,9 +29279,9 @@ static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
|
|||
SDValue SubVec = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl,
|
||||
StoreType, ShuffWide,
|
||||
DAG.getIntPtrConstant(i, dl));
|
||||
SDValue Ch = DAG.getStore(St->getChain(), dl, SubVec, Ptr,
|
||||
St->getPointerInfo(), St->isVolatile(),
|
||||
St->isNonTemporal(), St->getAlignment());
|
||||
SDValue Ch =
|
||||
DAG.getStore(St->getChain(), dl, SubVec, Ptr, St->getPointerInfo(),
|
||||
St->getAlignment(), St->getMemOperand()->getFlags());
|
||||
Ptr = DAG.getMemBasePlusOffset(Ptr, StoreType.getStoreSize(), dl);
|
||||
Chains.push_back(Ch);
|
||||
}
|
||||
|
@ -29391,18 +29345,16 @@ static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
|
|||
if (Subtarget.is64Bit() || F64IsLegal) {
|
||||
MVT LdVT = Subtarget.is64Bit() ? MVT::i64 : MVT::f64;
|
||||
SDValue NewLd = DAG.getLoad(LdVT, LdDL, Ld->getChain(), Ld->getBasePtr(),
|
||||
Ld->getPointerInfo(), Ld->isVolatile(),
|
||||
Ld->isNonTemporal(), Ld->isInvariant(),
|
||||
Ld->getAlignment());
|
||||
Ld->getPointerInfo(), Ld->getAlignment(),
|
||||
Ld->getMemOperand()->getFlags());
|
||||
SDValue NewChain = NewLd.getValue(1);
|
||||
if (TokenFactorIndex >= 0) {
|
||||
Ops.push_back(NewChain);
|
||||
NewChain = DAG.getNode(ISD::TokenFactor, LdDL, MVT::Other, Ops);
|
||||
}
|
||||
return DAG.getStore(NewChain, StDL, NewLd, St->getBasePtr(),
|
||||
St->getPointerInfo(),
|
||||
St->isVolatile(), St->isNonTemporal(),
|
||||
St->getAlignment());
|
||||
St->getPointerInfo(), St->getAlignment(),
|
||||
St->getMemOperand()->getFlags());
|
||||
}
|
||||
|
||||
// Otherwise, lower to two pairs of 32-bit loads / stores.
|
||||
|
@ -29410,14 +29362,12 @@ static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
|
|||
SDValue HiAddr = DAG.getMemBasePlusOffset(LoAddr, 4, LdDL);
|
||||
|
||||
SDValue LoLd = DAG.getLoad(MVT::i32, LdDL, Ld->getChain(), LoAddr,
|
||||
Ld->getPointerInfo(),
|
||||
Ld->isVolatile(), Ld->isNonTemporal(),
|
||||
Ld->isInvariant(), Ld->getAlignment());
|
||||
Ld->getPointerInfo(), Ld->getAlignment(),
|
||||
Ld->getMemOperand()->getFlags());
|
||||
SDValue HiLd = DAG.getLoad(MVT::i32, LdDL, Ld->getChain(), HiAddr,
|
||||
Ld->getPointerInfo().getWithOffset(4),
|
||||
Ld->isVolatile(), Ld->isNonTemporal(),
|
||||
Ld->isInvariant(),
|
||||
MinAlign(Ld->getAlignment(), 4));
|
||||
MinAlign(Ld->getAlignment(), 4),
|
||||
Ld->getMemOperand()->getFlags());
|
||||
|
||||
SDValue NewChain = LoLd.getValue(1);
|
||||
if (TokenFactorIndex >= 0) {
|
||||
|
@ -29429,15 +29379,12 @@ static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
|
|||
LoAddr = St->getBasePtr();
|
||||
HiAddr = DAG.getMemBasePlusOffset(LoAddr, 4, StDL);
|
||||
|
||||
SDValue LoSt = DAG.getStore(NewChain, StDL, LoLd, LoAddr,
|
||||
St->getPointerInfo(),
|
||||
St->isVolatile(), St->isNonTemporal(),
|
||||
St->getAlignment());
|
||||
SDValue HiSt = DAG.getStore(NewChain, StDL, HiLd, HiAddr,
|
||||
St->getPointerInfo().getWithOffset(4),
|
||||
St->isVolatile(),
|
||||
St->isNonTemporal(),
|
||||
MinAlign(St->getAlignment(), 4));
|
||||
SDValue LoSt =
|
||||
DAG.getStore(NewChain, StDL, LoLd, LoAddr, St->getPointerInfo(),
|
||||
St->getAlignment(), St->getMemOperand()->getFlags());
|
||||
SDValue HiSt = DAG.getStore(
|
||||
NewChain, StDL, HiLd, HiAddr, St->getPointerInfo().getWithOffset(4),
|
||||
MinAlign(St->getAlignment(), 4), St->getMemOperand()->getFlags());
|
||||
return DAG.getNode(ISD::TokenFactor, StDL, MVT::Other, LoSt, HiSt);
|
||||
}
|
||||
|
||||
|
@ -29457,8 +29404,8 @@ static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
|
|||
SDValue NewExtract = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, MVT::f64,
|
||||
BitCast, OldExtract.getOperand(1));
|
||||
return DAG.getStore(St->getChain(), dl, NewExtract, St->getBasePtr(),
|
||||
St->getPointerInfo(), St->isVolatile(),
|
||||
St->isNonTemporal(), St->getAlignment());
|
||||
St->getPointerInfo(), St->getAlignment(),
|
||||
St->getMemOperand()->getFlags());
|
||||
}
|
||||
|
||||
return SDValue();
|
||||
|
|
|
@ -306,8 +306,7 @@ LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const
|
|||
Type::getInt8Ty(*DAG.getContext()), GA, Idx);
|
||||
SDValue CP = DAG.getConstantPool(GAI, MVT::i32);
|
||||
return DAG.getLoad(getPointerTy(DAG.getDataLayout()), DL,
|
||||
DAG.getEntryNode(), CP, MachinePointerInfo(), false,
|
||||
false, false, 0);
|
||||
DAG.getEntryNode(), CP, MachinePointerInfo());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -373,8 +372,7 @@ SDValue XCoreTargetLowering::lowerLoadWordFromAlignedBasePlusOffset(
|
|||
SelectionDAG &DAG) const {
|
||||
auto PtrVT = getPointerTy(DAG.getDataLayout());
|
||||
if ((Offset & 0x3) == 0) {
|
||||
return DAG.getLoad(PtrVT, DL, Chain, Base, MachinePointerInfo(), false,
|
||||
false, false, 0);
|
||||
return DAG.getLoad(PtrVT, DL, Chain, Base, MachinePointerInfo());
|
||||
}
|
||||
// Lower to pair of consecutive word aligned loads plus some bit shifting.
|
||||
int32_t HighOffset = alignTo(Offset, 4);
|
||||
|
@ -395,10 +393,8 @@ SDValue XCoreTargetLowering::lowerLoadWordFromAlignedBasePlusOffset(
|
|||
SDValue LowShift = DAG.getConstant((Offset - LowOffset) * 8, DL, MVT::i32);
|
||||
SDValue HighShift = DAG.getConstant((HighOffset - Offset) * 8, DL, MVT::i32);
|
||||
|
||||
SDValue Low = DAG.getLoad(PtrVT, DL, Chain, LowAddr, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue High = DAG.getLoad(PtrVT, DL, Chain, HighAddr, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
SDValue Low = DAG.getLoad(PtrVT, DL, Chain, LowAddr, MachinePointerInfo());
|
||||
SDValue High = DAG.getLoad(PtrVT, DL, Chain, HighAddr, MachinePointerInfo());
|
||||
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);
|
||||
|
@ -458,17 +454,16 @@ LowerLOAD(SDValue Op, SelectionDAG &DAG) const {
|
|||
}
|
||||
|
||||
if (LD->getAlignment() == 2) {
|
||||
SDValue Low = DAG.getExtLoad(ISD::ZEXTLOAD, DL, MVT::i32, Chain,
|
||||
BasePtr, LD->getPointerInfo(), MVT::i16,
|
||||
LD->isVolatile(), LD->isNonTemporal(),
|
||||
LD->isInvariant(), 2);
|
||||
SDValue Low =
|
||||
DAG.getExtLoad(ISD::ZEXTLOAD, DL, MVT::i32, Chain, BasePtr,
|
||||
LD->getPointerInfo(), MVT::i16,
|
||||
/* Alignment = */ 2, LD->getMemOperand()->getFlags());
|
||||
SDValue HighAddr = DAG.getNode(ISD::ADD, DL, MVT::i32, BasePtr,
|
||||
DAG.getConstant(2, DL, MVT::i32));
|
||||
SDValue High = DAG.getExtLoad(ISD::EXTLOAD, DL, MVT::i32, Chain,
|
||||
HighAddr,
|
||||
LD->getPointerInfo().getWithOffset(2),
|
||||
MVT::i16, LD->isVolatile(),
|
||||
LD->isNonTemporal(), LD->isInvariant(), 2);
|
||||
SDValue High =
|
||||
DAG.getExtLoad(ISD::EXTLOAD, DL, MVT::i32, Chain, HighAddr,
|
||||
LD->getPointerInfo().getWithOffset(2), MVT::i16,
|
||||
/* Alignment = */ 2, LD->getMemOperand()->getFlags());
|
||||
SDValue HighShifted = DAG.getNode(ISD::SHL, DL, MVT::i32, High,
|
||||
DAG.getConstant(16, DL, MVT::i32));
|
||||
SDValue Result = DAG.getNode(ISD::OR, DL, MVT::i32, Low, HighShifted);
|
||||
|
@ -525,16 +520,14 @@ LowerSTORE(SDValue Op, SelectionDAG &DAG) const
|
|||
SDValue Low = Value;
|
||||
SDValue High = DAG.getNode(ISD::SRL, dl, MVT::i32, Value,
|
||||
DAG.getConstant(16, dl, MVT::i32));
|
||||
SDValue StoreLow = DAG.getTruncStore(Chain, dl, Low, BasePtr,
|
||||
ST->getPointerInfo(), MVT::i16,
|
||||
ST->isVolatile(), ST->isNonTemporal(),
|
||||
2);
|
||||
SDValue StoreLow = DAG.getTruncStore(
|
||||
Chain, dl, Low, BasePtr, ST->getPointerInfo(), MVT::i16,
|
||||
/* Alignment = */ 2, ST->getMemOperand()->getFlags());
|
||||
SDValue HighAddr = DAG.getNode(ISD::ADD, dl, MVT::i32, BasePtr,
|
||||
DAG.getConstant(2, dl, MVT::i32));
|
||||
SDValue StoreHigh = DAG.getTruncStore(Chain, dl, High, HighAddr,
|
||||
ST->getPointerInfo().getWithOffset(2),
|
||||
MVT::i16, ST->isVolatile(),
|
||||
ST->isNonTemporal(), 2);
|
||||
SDValue StoreHigh = DAG.getTruncStore(
|
||||
Chain, dl, High, HighAddr, ST->getPointerInfo().getWithOffset(2),
|
||||
MVT::i16, /* Alignment = */ 2, ST->getMemOperand()->getFlags());
|
||||
return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, StoreLow, StoreHigh);
|
||||
}
|
||||
|
||||
|
@ -768,19 +761,17 @@ LowerVAARG(SDValue Op, SelectionDAG &DAG) const
|
|||
EVT PtrVT = VAListPtr.getValueType();
|
||||
const Value *SV = cast<SrcValueSDNode>(Node->getOperand(2))->getValue();
|
||||
SDLoc dl(Node);
|
||||
SDValue VAList = DAG.getLoad(PtrVT, dl, InChain,
|
||||
VAListPtr, MachinePointerInfo(SV),
|
||||
false, false, false, 0);
|
||||
SDValue VAList =
|
||||
DAG.getLoad(PtrVT, dl, InChain, VAListPtr, MachinePointerInfo(SV));
|
||||
// Increment the pointer, VAList, to the next vararg
|
||||
SDValue nextPtr = DAG.getNode(ISD::ADD, dl, PtrVT, VAList,
|
||||
DAG.getIntPtrConstant(VT.getSizeInBits() / 8,
|
||||
dl));
|
||||
// Store the incremented VAList to the legalized pointer
|
||||
InChain = DAG.getStore(VAList.getValue(1), dl, nextPtr, VAListPtr,
|
||||
MachinePointerInfo(SV), false, false, 0);
|
||||
MachinePointerInfo(SV));
|
||||
// Load the actual argument out of the pointer VAList
|
||||
return DAG.getLoad(VT, dl, InChain, VAList, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
return DAG.getLoad(VT, dl, InChain, VAList, MachinePointerInfo());
|
||||
}
|
||||
|
||||
SDValue XCoreTargetLowering::
|
||||
|
@ -793,7 +784,7 @@ LowerVASTART(SDValue Op, SelectionDAG &DAG) const
|
|||
XCoreFunctionInfo *XFI = MF.getInfo<XCoreFunctionInfo>();
|
||||
SDValue Addr = DAG.getFrameIndex(XFI->getVarArgsFrameIndex(), MVT::i32);
|
||||
return DAG.getStore(Op.getOperand(0), dl, Addr, Op.getOperand(1),
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
MachinePointerInfo());
|
||||
}
|
||||
|
||||
SDValue XCoreTargetLowering::LowerFRAMEADDR(SDValue Op,
|
||||
|
@ -826,9 +817,9 @@ LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const {
|
|||
XCoreFunctionInfo *XFI = MF.getInfo<XCoreFunctionInfo>();
|
||||
int FI = XFI->createLRSpillSlot(MF);
|
||||
SDValue FIN = DAG.getFrameIndex(FI, MVT::i32);
|
||||
return DAG.getLoad(
|
||||
getPointerTy(DAG.getDataLayout()), SDLoc(Op), DAG.getEntryNode(), FIN,
|
||||
MachinePointerInfo::getFixedStack(MF, FI), false, false, false, 0);
|
||||
return DAG.getLoad(getPointerTy(DAG.getDataLayout()), SDLoc(Op),
|
||||
DAG.getEntryNode(), FIN,
|
||||
MachinePointerInfo::getFixedStack(MF, FI));
|
||||
}
|
||||
|
||||
SDValue XCoreTargetLowering::
|
||||
|
@ -909,33 +900,31 @@ LowerINIT_TRAMPOLINE(SDValue Op, SelectionDAG &DAG) const {
|
|||
SDValue Addr = Trmp;
|
||||
|
||||
SDLoc dl(Op);
|
||||
OutChains[0] = DAG.getStore(Chain, dl,
|
||||
DAG.getConstant(0x0a3cd805, dl, MVT::i32), Addr,
|
||||
MachinePointerInfo(TrmpAddr), false, false, 0);
|
||||
OutChains[0] =
|
||||
DAG.getStore(Chain, dl, DAG.getConstant(0x0a3cd805, dl, MVT::i32), Addr,
|
||||
MachinePointerInfo(TrmpAddr));
|
||||
|
||||
Addr = DAG.getNode(ISD::ADD, dl, MVT::i32, Trmp,
|
||||
DAG.getConstant(4, dl, MVT::i32));
|
||||
OutChains[1] = DAG.getStore(Chain, dl,
|
||||
DAG.getConstant(0xd80456c0, dl, MVT::i32), Addr,
|
||||
MachinePointerInfo(TrmpAddr, 4), false, false, 0);
|
||||
OutChains[1] =
|
||||
DAG.getStore(Chain, dl, DAG.getConstant(0xd80456c0, dl, MVT::i32), Addr,
|
||||
MachinePointerInfo(TrmpAddr, 4));
|
||||
|
||||
Addr = DAG.getNode(ISD::ADD, dl, MVT::i32, Trmp,
|
||||
DAG.getConstant(8, dl, MVT::i32));
|
||||
OutChains[2] = DAG.getStore(Chain, dl,
|
||||
DAG.getConstant(0x27fb0a3c, dl, MVT::i32), Addr,
|
||||
MachinePointerInfo(TrmpAddr, 8), false, false, 0);
|
||||
OutChains[2] =
|
||||
DAG.getStore(Chain, dl, DAG.getConstant(0x27fb0a3c, dl, MVT::i32), Addr,
|
||||
MachinePointerInfo(TrmpAddr, 8));
|
||||
|
||||
Addr = DAG.getNode(ISD::ADD, dl, MVT::i32, Trmp,
|
||||
DAG.getConstant(12, dl, MVT::i32));
|
||||
OutChains[3] = DAG.getStore(Chain, dl, Nest, Addr,
|
||||
MachinePointerInfo(TrmpAddr, 12), false, false,
|
||||
0);
|
||||
OutChains[3] =
|
||||
DAG.getStore(Chain, dl, Nest, Addr, MachinePointerInfo(TrmpAddr, 12));
|
||||
|
||||
Addr = DAG.getNode(ISD::ADD, dl, MVT::i32, Trmp,
|
||||
DAG.getConstant(16, dl, MVT::i32));
|
||||
OutChains[4] = DAG.getStore(Chain, dl, FPtr, Addr,
|
||||
MachinePointerInfo(TrmpAddr, 16), false, false,
|
||||
0);
|
||||
OutChains[4] =
|
||||
DAG.getStore(Chain, dl, FPtr, Addr, MachinePointerInfo(TrmpAddr, 16));
|
||||
|
||||
return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, OutChains);
|
||||
}
|
||||
|
@ -975,22 +964,22 @@ LowerATOMIC_LOAD(SDValue Op, SelectionDAG &DAG) const {
|
|||
report_fatal_error("atomic load must be aligned");
|
||||
return DAG.getLoad(getPointerTy(DAG.getDataLayout()), SDLoc(Op),
|
||||
N->getChain(), N->getBasePtr(), N->getPointerInfo(),
|
||||
N->isVolatile(), N->isNonTemporal(), N->isInvariant(),
|
||||
N->getAlignment(), N->getAAInfo(), N->getRanges());
|
||||
N->getAlignment(), N->getMemOperand()->getFlags(),
|
||||
N->getAAInfo(), N->getRanges());
|
||||
}
|
||||
if (N->getMemoryVT() == MVT::i16) {
|
||||
if (N->getAlignment() < 2)
|
||||
report_fatal_error("atomic load must be aligned");
|
||||
return DAG.getExtLoad(ISD::EXTLOAD, SDLoc(Op), MVT::i32, N->getChain(),
|
||||
N->getBasePtr(), N->getPointerInfo(), MVT::i16,
|
||||
N->isVolatile(), N->isNonTemporal(),
|
||||
N->isInvariant(), N->getAlignment(), N->getAAInfo());
|
||||
N->getAlignment(), N->getMemOperand()->getFlags(),
|
||||
N->getAAInfo());
|
||||
}
|
||||
if (N->getMemoryVT() == MVT::i8)
|
||||
return DAG.getExtLoad(ISD::EXTLOAD, SDLoc(Op), MVT::i32, N->getChain(),
|
||||
N->getBasePtr(), N->getPointerInfo(), MVT::i8,
|
||||
N->isVolatile(), N->isNonTemporal(),
|
||||
N->isInvariant(), N->getAlignment(), N->getAAInfo());
|
||||
N->getAlignment(), N->getMemOperand()->getFlags(),
|
||||
N->getAAInfo());
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
|
@ -1004,24 +993,23 @@ LowerATOMIC_STORE(SDValue Op, SelectionDAG &DAG) const {
|
|||
if (N->getMemoryVT() == MVT::i32) {
|
||||
if (N->getAlignment() < 4)
|
||||
report_fatal_error("atomic store must be aligned");
|
||||
return DAG.getStore(N->getChain(), SDLoc(Op), N->getVal(),
|
||||
N->getBasePtr(), N->getPointerInfo(),
|
||||
N->isVolatile(), N->isNonTemporal(),
|
||||
N->getAlignment(), N->getAAInfo());
|
||||
return DAG.getStore(N->getChain(), SDLoc(Op), N->getVal(), N->getBasePtr(),
|
||||
N->getPointerInfo(), N->getAlignment(),
|
||||
N->getMemOperand()->getFlags(), N->getAAInfo());
|
||||
}
|
||||
if (N->getMemoryVT() == MVT::i16) {
|
||||
if (N->getAlignment() < 2)
|
||||
report_fatal_error("atomic store must be aligned");
|
||||
return DAG.getTruncStore(N->getChain(), SDLoc(Op), N->getVal(),
|
||||
N->getBasePtr(), N->getPointerInfo(), MVT::i16,
|
||||
N->isVolatile(), N->isNonTemporal(),
|
||||
N->getAlignment(), N->getAAInfo());
|
||||
N->getAlignment(), N->getMemOperand()->getFlags(),
|
||||
N->getAAInfo());
|
||||
}
|
||||
if (N->getMemoryVT() == MVT::i8)
|
||||
return DAG.getTruncStore(N->getChain(), SDLoc(Op), N->getVal(),
|
||||
N->getBasePtr(), N->getPointerInfo(), MVT::i8,
|
||||
N->isVolatile(), N->isNonTemporal(),
|
||||
N->getAlignment(), N->getAAInfo());
|
||||
N->getAlignment(), N->getMemOperand()->getFlags(),
|
||||
N->getAAInfo());
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
|
@ -1344,8 +1332,7 @@ SDValue XCoreTargetLowering::LowerCCCArguments(
|
|||
//from this parameter
|
||||
SDValue FIN = DAG.getFrameIndex(FI, MVT::i32);
|
||||
ArgIn = DAG.getLoad(VA.getLocVT(), dl, Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(MF, FI), false,
|
||||
false, false, 0);
|
||||
MachinePointerInfo::getFixedStack(MF, FI));
|
||||
}
|
||||
const ArgDataPair ADP = { ArgIn, Ins[i].Flags };
|
||||
ArgData.push_back(ADP);
|
||||
|
@ -1377,8 +1364,8 @@ SDValue XCoreTargetLowering::LowerCCCArguments(
|
|||
SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i32);
|
||||
CFRegNode.push_back(Val.getValue(Val->getNumValues() - 1));
|
||||
// Move argument from virt reg -> stack
|
||||
SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo(), false, false, 0);
|
||||
SDValue Store =
|
||||
DAG.getStore(Val.getValue(1), dl, Val, FIN, MachinePointerInfo());
|
||||
MemOps.push_back(Store);
|
||||
}
|
||||
} else {
|
||||
|
@ -1496,8 +1483,7 @@ XCoreTargetLowering::LowerReturn(SDValue Chain, CallingConv::ID CallConv,
|
|||
SDValue FIN = DAG.getFrameIndex(FI, MVT::i32);
|
||||
MemOpChains.push_back(DAG.getStore(
|
||||
Chain, dl, OutVals[i], FIN,
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI), false,
|
||||
false, 0));
|
||||
MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI)));
|
||||
}
|
||||
|
||||
// Transform all store nodes into one single node because
|
||||
|
|
Loading…
Reference in New Issue