mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-28 07:05:03 +00:00
Make sure no loads resulting from load->switch DAGCombine are marked invariant
Currently when DAGCombine converts loads feeding a switch into a switch of addresses feeding a load the new load inherits the isInvariant flag of the left side. This is incorrect since invariant loads can be reordered in cases where it is illegal to reoarder normal loads. This patch adds an isInvariant parameter to getExtLoad() and updates all call sites to pass in the data if they have it or false if they don't. It also changes the DAGCombine to use that data to make the right decision when creating the new load. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214449 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f7be7f15c1
commit
7d54c5b0f2
@ -822,7 +822,7 @@ public:
|
||||
SDValue getExtLoad(ISD::LoadExtType ExtType, SDLoc dl, EVT VT,
|
||||
SDValue Chain, SDValue Ptr, MachinePointerInfo PtrInfo,
|
||||
EVT MemVT, bool isVolatile,
|
||||
bool isNonTemporal, unsigned Alignment,
|
||||
bool isNonTemporal, bool isInvariant, unsigned Alignment,
|
||||
const AAMDNodes &AAInfo = AAMDNodes());
|
||||
SDValue getExtLoad(ISD::LoadExtType ExtType, SDLoc dl, EVT VT,
|
||||
SDValue Chain, SDValue Ptr, EVT MemVT,
|
||||
|
@ -2974,7 +2974,7 @@ SDValue DAGCombiner::visitAND(SDNode *N) {
|
||||
LN0->getChain(), NewPtr,
|
||||
LN0->getPointerInfo(),
|
||||
ExtVT, LN0->isVolatile(), LN0->isNonTemporal(),
|
||||
Alignment, LN0->getAAInfo());
|
||||
LN0->isInvariant(), Alignment, LN0->getAAInfo());
|
||||
AddToWorklist(N);
|
||||
CombineTo(LN0, Load, Load.getValue(1));
|
||||
return SDValue(N, 0); // Return N so it doesn't get rechecked!
|
||||
@ -5844,7 +5844,7 @@ SDValue DAGCombiner::ReduceLoadWidth(SDNode *N) {
|
||||
Load = DAG.getExtLoad(ExtType, SDLoc(N0), VT, LN0->getChain(),NewPtr,
|
||||
LN0->getPointerInfo().getWithOffset(PtrOff),
|
||||
ExtVT, LN0->isVolatile(), LN0->isNonTemporal(),
|
||||
NewAlign, LN0->getAAInfo());
|
||||
LN0->isInvariant(), NewAlign, LN0->getAAInfo());
|
||||
|
||||
// Replace the old load's chain with the new load's chain.
|
||||
WorklistRemover DeadNodes(*this);
|
||||
@ -8062,8 +8062,8 @@ SDValue DAGCombiner::visitLOAD(SDNode *N) {
|
||||
LD->getValueType(0),
|
||||
Chain, Ptr, LD->getPointerInfo(),
|
||||
LD->getMemoryVT(),
|
||||
LD->isVolatile(), LD->isNonTemporal(), Align,
|
||||
LD->getAAInfo());
|
||||
LD->isVolatile(), LD->isNonTemporal(),
|
||||
LD->isInvariant(), Align, LD->getAAInfo());
|
||||
return CombineTo(N, NewLoad, SDValue(NewLoad.getNode(), 1), true);
|
||||
}
|
||||
}
|
||||
@ -10035,7 +10035,7 @@ SDValue DAGCombiner::visitEXTRACT_VECTOR_ELT(SDNode *N) {
|
||||
Load = DAG.getExtLoad(ExtType, SDLoc(N), NVT, LN0->getChain(),
|
||||
NewPtr, LN0->getPointerInfo().getWithOffset(PtrOff),
|
||||
LVT, LN0->isVolatile(), LN0->isNonTemporal(),
|
||||
Align, LN0->getAAInfo());
|
||||
LN0->isInvariant(), Align, LN0->getAAInfo());
|
||||
Chain = Load.getValue(1);
|
||||
} else {
|
||||
Load = DAG.getLoad(LVT, SDLoc(N), LN0->getChain(), NewPtr,
|
||||
@ -11184,6 +11184,7 @@ 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->getAlignment() & RLD->getAlignment();
|
||||
unsigned Alignment = std::min(LLD->getAlignment(),RLD->getAlignment());
|
||||
if (LLD->getExtensionType() == ISD::NON_EXTLOAD) {
|
||||
Load = DAG.getLoad(TheSelect->getValueType(0),
|
||||
@ -11191,7 +11192,7 @@ bool DAGCombiner::SimplifySelectOps(SDNode *TheSelect, SDValue LHS,
|
||||
// FIXME: Discards pointer and AA info.
|
||||
LLD->getChain(), Addr, MachinePointerInfo(),
|
||||
LLD->isVolatile(), LLD->isNonTemporal(),
|
||||
LLD->isInvariant(), Alignment);
|
||||
isInvariant, Alignment);
|
||||
} else {
|
||||
Load = DAG.getExtLoad(LLD->getExtensionType() == ISD::EXTLOAD ?
|
||||
RLD->getExtensionType() : LLD->getExtensionType(),
|
||||
@ -11200,7 +11201,7 @@ bool DAGCombiner::SimplifySelectOps(SDNode *TheSelect, SDValue LHS,
|
||||
// FIXME: Discards pointer and AA info.
|
||||
LLD->getChain(), Addr, MachinePointerInfo(),
|
||||
LLD->getMemoryVT(), LLD->isVolatile(),
|
||||
LLD->isNonTemporal(), Alignment);
|
||||
LLD->isNonTemporal(), isInvariant, Alignment);
|
||||
}
|
||||
|
||||
// Users of the select now use the result of the load.
|
||||
|
@ -298,7 +298,7 @@ SelectionDAGLegalize::ExpandConstantFP(ConstantFPSDNode *CFP, bool UseCP) {
|
||||
DAG.getExtLoad(ISD::EXTLOAD, dl, OrigVT,
|
||||
DAG.getEntryNode(),
|
||||
CPIdx, MachinePointerInfo::getConstantPool(),
|
||||
VT, false, false, Alignment);
|
||||
VT, false, false, false, Alignment);
|
||||
return Result;
|
||||
}
|
||||
SDValue Result =
|
||||
@ -384,7 +384,7 @@ static void ExpandUnalignedStore(StoreSDNode *ST, SelectionDAG &DAG,
|
||||
// Load from the stack slot.
|
||||
SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, RegVT, Store, StackPtr,
|
||||
MachinePointerInfo(),
|
||||
MemVT, false, false, 0);
|
||||
MemVT, false, false, false, 0);
|
||||
|
||||
Stores.push_back(DAG.getTruncStore(Load.getValue(1), dl, Load, Ptr,
|
||||
ST->getPointerInfo()
|
||||
@ -501,6 +501,7 @@ ExpandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG,
|
||||
LD->getPointerInfo().getWithOffset(Offset),
|
||||
MemVT, LD->isVolatile(),
|
||||
LD->isNonTemporal(),
|
||||
LD->isInvariant(),
|
||||
MinAlign(LD->getAlignment(), Offset),
|
||||
LD->getAAInfo());
|
||||
// Follow the load with a store to the stack slot. Remember the store.
|
||||
@ -515,7 +516,8 @@ ExpandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG,
|
||||
|
||||
// Finally, perform the original load only redirected to the stack slot.
|
||||
Load = DAG.getExtLoad(LD->getExtensionType(), dl, VT, TF, StackBase,
|
||||
MachinePointerInfo(), LoadedVT, false, false, 0);
|
||||
MachinePointerInfo(), LoadedVT, false,false, false,
|
||||
0);
|
||||
|
||||
// Callers expect a MERGE_VALUES node.
|
||||
ValResult = Load;
|
||||
@ -545,25 +547,27 @@ ExpandUnalignedLoad(LoadSDNode *LD, SelectionDAG &DAG,
|
||||
if (TLI.isLittleEndian()) {
|
||||
Lo = DAG.getExtLoad(ISD::ZEXTLOAD, dl, VT, Chain, Ptr, LD->getPointerInfo(),
|
||||
NewLoadedVT, LD->isVolatile(),
|
||||
LD->isNonTemporal(), Alignment, LD->getAAInfo());
|
||||
LD->isNonTemporal(), LD->isInvariant(), Alignment,
|
||||
LD->getAAInfo());
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
|
||||
DAG.getConstant(IncrementSize, Ptr.getValueType()));
|
||||
Hi = DAG.getExtLoad(HiExtType, dl, VT, Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(IncrementSize),
|
||||
NewLoadedVT, LD->isVolatile(),
|
||||
LD->isNonTemporal(), MinAlign(Alignment, IncrementSize),
|
||||
LD->getAAInfo());
|
||||
LD->isNonTemporal(),LD->isInvariant(),
|
||||
MinAlign(Alignment, IncrementSize), LD->getAAInfo());
|
||||
} else {
|
||||
Hi = DAG.getExtLoad(HiExtType, dl, VT, Chain, Ptr, LD->getPointerInfo(),
|
||||
NewLoadedVT, LD->isVolatile(),
|
||||
LD->isNonTemporal(), Alignment, LD->getAAInfo());
|
||||
LD->isNonTemporal(), LD->isInvariant(), Alignment,
|
||||
LD->getAAInfo());
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
|
||||
DAG.getConstant(IncrementSize, Ptr.getValueType()));
|
||||
Lo = DAG.getExtLoad(ISD::ZEXTLOAD, dl, VT, Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(IncrementSize),
|
||||
NewLoadedVT, LD->isVolatile(),
|
||||
LD->isNonTemporal(), MinAlign(Alignment, IncrementSize),
|
||||
LD->getAAInfo());
|
||||
LD->isNonTemporal(), LD->isInvariant(),
|
||||
MinAlign(Alignment, IncrementSize), LD->getAAInfo());
|
||||
}
|
||||
|
||||
// aggregate the two parts
|
||||
@ -952,6 +956,7 @@ void SelectionDAGLegalize::LegalizeLoadOps(SDNode *Node) {
|
||||
unsigned Alignment = LD->getAlignment();
|
||||
bool isVolatile = LD->isVolatile();
|
||||
bool isNonTemporal = LD->isNonTemporal();
|
||||
bool isInvariant = LD->isInvariant();
|
||||
AAMDNodes AAInfo = LD->getAAInfo();
|
||||
|
||||
if (SrcWidth != SrcVT.getStoreSizeInBits() &&
|
||||
@ -979,7 +984,8 @@ void SelectionDAGLegalize::LegalizeLoadOps(SDNode *Node) {
|
||||
SDValue Result =
|
||||
DAG.getExtLoad(NewExtType, dl, Node->getValueType(0),
|
||||
Chain, Ptr, LD->getPointerInfo(),
|
||||
NVT, isVolatile, isNonTemporal, Alignment, AAInfo);
|
||||
NVT, isVolatile, isNonTemporal, isInvariant, Alignment,
|
||||
AAInfo);
|
||||
|
||||
Ch = Result.getValue(1); // The chain.
|
||||
|
||||
@ -1016,7 +1022,7 @@ void SelectionDAGLegalize::LegalizeLoadOps(SDNode *Node) {
|
||||
Lo = DAG.getExtLoad(ISD::ZEXTLOAD, dl, Node->getValueType(0),
|
||||
Chain, Ptr,
|
||||
LD->getPointerInfo(), RoundVT, isVolatile,
|
||||
isNonTemporal, Alignment, AAInfo);
|
||||
isNonTemporal, isInvariant, Alignment, AAInfo);
|
||||
|
||||
// Load the remaining ExtraWidth bits.
|
||||
IncrementSize = RoundWidth / 8;
|
||||
@ -1024,7 +1030,7 @@ void SelectionDAGLegalize::LegalizeLoadOps(SDNode *Node) {
|
||||
DAG.getConstant(IncrementSize, Ptr.getValueType()));
|
||||
Hi = DAG.getExtLoad(ExtType, dl, Node->getValueType(0), Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(IncrementSize),
|
||||
ExtraVT, isVolatile, isNonTemporal,
|
||||
ExtraVT, isVolatile, isNonTemporal, isInvariant,
|
||||
MinAlign(Alignment, IncrementSize), AAInfo);
|
||||
|
||||
// Build a factor node to remember that this load is independent of
|
||||
@ -1045,7 +1051,7 @@ void SelectionDAGLegalize::LegalizeLoadOps(SDNode *Node) {
|
||||
// Load the top RoundWidth bits.
|
||||
Hi = DAG.getExtLoad(ExtType, dl, Node->getValueType(0), Chain, Ptr,
|
||||
LD->getPointerInfo(), RoundVT, isVolatile,
|
||||
isNonTemporal, Alignment, AAInfo);
|
||||
isNonTemporal, isInvariant, Alignment, AAInfo);
|
||||
|
||||
// Load the remaining ExtraWidth bits.
|
||||
IncrementSize = RoundWidth / 8;
|
||||
@ -1054,7 +1060,7 @@ void SelectionDAGLegalize::LegalizeLoadOps(SDNode *Node) {
|
||||
Lo = DAG.getExtLoad(ISD::ZEXTLOAD,
|
||||
dl, Node->getValueType(0), Chain, Ptr,
|
||||
LD->getPointerInfo().getWithOffset(IncrementSize),
|
||||
ExtraVT, isVolatile, isNonTemporal,
|
||||
ExtraVT, isVolatile, isNonTemporal, isInvariant,
|
||||
MinAlign(Alignment, IncrementSize), AAInfo);
|
||||
|
||||
// Build a factor node to remember that this load is independent of
|
||||
@ -1467,7 +1473,7 @@ SDValue SelectionDAGLegalize::ExpandExtractFromVectorThroughStack(SDValue Op) {
|
||||
return DAG.getExtLoad(ISD::EXTLOAD, dl, Op.getValueType(), Ch, StackPtr,
|
||||
MachinePointerInfo(),
|
||||
Vec.getValueType().getVectorElementType(),
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue SelectionDAGLegalize::ExpandInsertToVectorThroughStack(SDValue Op) {
|
||||
@ -1816,7 +1822,7 @@ SDValue SelectionDAGLegalize::EmitStackConvert(SDValue SrcOp,
|
||||
|
||||
assert(SlotSize < DestSize && "Unknown extension!");
|
||||
return DAG.getExtLoad(ISD::EXTLOAD, dl, DestVT, Store, FIPtr,
|
||||
PtrInfo, SlotVT, false, false, DestAlign);
|
||||
PtrInfo, SlotVT, false, false, false, DestAlign);
|
||||
}
|
||||
|
||||
SDValue SelectionDAGLegalize::ExpandSCALAR_TO_VECTOR(SDNode *Node) {
|
||||
@ -2599,7 +2605,7 @@ SDValue SelectionDAGLegalize::ExpandLegalINT_TO_FP(bool isSigned,
|
||||
SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, DestVT,
|
||||
DAG.getEntryNode(), CPIdx,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
MVT::f32, false, false, Alignment);
|
||||
MVT::f32, false, false, false, Alignment);
|
||||
HandleSDNode Handle(Load);
|
||||
LegalizeOp(Load.getNode());
|
||||
FudgeInReg = Handle.getValue();
|
||||
@ -3887,7 +3893,7 @@ void SelectionDAGLegalize::ExpandNode(SDNode *Node) {
|
||||
EVT MemVT = EVT::getIntegerVT(*DAG.getContext(), EntrySize * 8);
|
||||
SDValue LD = DAG.getExtLoad(ISD::SEXTLOAD, dl, PTy, Chain, Addr,
|
||||
MachinePointerInfo::getJumpTable(), MemVT,
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
Addr = LD;
|
||||
if (TM.getRelocationModel() == Reloc::PIC_) {
|
||||
// For PIC, the sequence is:
|
||||
|
@ -1868,7 +1868,8 @@ void DAGTypeLegalizer::ExpandIntRes_LOAD(LoadSDNode *N,
|
||||
EVT MemVT = N->getMemoryVT();
|
||||
|
||||
Lo = DAG.getExtLoad(ExtType, dl, NVT, Ch, Ptr, N->getPointerInfo(),
|
||||
MemVT, isVolatile, isNonTemporal, Alignment, AAInfo);
|
||||
MemVT, isVolatile, isNonTemporal, isInvariant,
|
||||
Alignment, AAInfo);
|
||||
|
||||
// Remember the chain.
|
||||
Ch = Lo.getValue(1);
|
||||
@ -1903,7 +1904,7 @@ void DAGTypeLegalizer::ExpandIntRes_LOAD(LoadSDNode *N,
|
||||
DAG.getConstant(IncrementSize, Ptr.getValueType()));
|
||||
Hi = DAG.getExtLoad(ExtType, dl, NVT, Ch, Ptr,
|
||||
N->getPointerInfo().getWithOffset(IncrementSize), NEVT,
|
||||
isVolatile, isNonTemporal,
|
||||
isVolatile, isNonTemporal, isInvariant,
|
||||
MinAlign(Alignment, IncrementSize), AAInfo);
|
||||
|
||||
// Build a factor node to remember that this load is independent of the
|
||||
@ -1922,7 +1923,8 @@ 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, Alignment, AAInfo);
|
||||
isVolatile, isNonTemporal, isInvariant, Alignment,
|
||||
AAInfo);
|
||||
|
||||
// Increment the pointer to the other half.
|
||||
Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr,
|
||||
@ -1931,7 +1933,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,
|
||||
isVolatile, isNonTemporal, isInvariant,
|
||||
MinAlign(Alignment, IncrementSize), AAInfo);
|
||||
|
||||
// Build a factor node to remember that this load is independent of the
|
||||
@ -2853,7 +2855,7 @@ SDValue DAGTypeLegalizer::ExpandIntOp_UINT_TO_FP(SDNode *N) {
|
||||
FudgePtr,
|
||||
MachinePointerInfo::getConstantPool(),
|
||||
MVT::f32,
|
||||
false, false, Alignment);
|
||||
false, false, false, Alignment);
|
||||
return DAG.getNode(ISD::FADD, dl, DstVT, SignedConv, Fudge);
|
||||
}
|
||||
|
||||
|
@ -507,8 +507,8 @@ SDValue VectorLegalizer::ExpandLoad(SDValue Op) {
|
||||
ScalarLoad = DAG.getExtLoad(ISD::EXTLOAD, dl, WideVT, Chain, BasePTR,
|
||||
LD->getPointerInfo().getWithOffset(Offset),
|
||||
LoadVT, LD->isVolatile(),
|
||||
LD->isNonTemporal(), LD->getAlignment(),
|
||||
LD->getAAInfo());
|
||||
LD->isNonTemporal(), LD->isInvariant(),
|
||||
LD->getAlignment(), LD->getAAInfo());
|
||||
}
|
||||
|
||||
RemainingBytes -= LoadBytes;
|
||||
@ -578,7 +578,7 @@ SDValue VectorLegalizer::ExpandLoad(SDValue Op) {
|
||||
Op.getNode()->getValueType(0).getScalarType(),
|
||||
Chain, BasePTR, LD->getPointerInfo().getWithOffset(Idx * Stride),
|
||||
SrcVT.getScalarType(),
|
||||
LD->isVolatile(), LD->isNonTemporal(),
|
||||
LD->isVolatile(), LD->isNonTemporal(), LD->isInvariant(),
|
||||
LD->getAlignment(), LD->getAAInfo());
|
||||
|
||||
BasePTR = DAG.getNode(ISD::ADD, dl, BasePTR.getValueType(), BasePTR,
|
||||
|
@ -1358,7 +1358,7 @@ SDValue DAGTypeLegalizer::SplitVecOp_EXTRACT_VECTOR_ELT(SDNode *N) {
|
||||
// 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, 0);
|
||||
MachinePointerInfo(), EltVT, false, false, false, 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SplitVecOp_STORE(StoreSDNode *N, unsigned OpNo) {
|
||||
@ -2888,6 +2888,7 @@ DAGTypeLegalizer::GenWidenVectorExtLoads(SmallVectorImpl<SDValue> &LdChain,
|
||||
unsigned Align = LD->getAlignment();
|
||||
bool isVolatile = LD->isVolatile();
|
||||
bool isNonTemporal = LD->isNonTemporal();
|
||||
bool isInvariant = LD->isInvariant();
|
||||
AAMDNodes AAInfo = LD->getAAInfo();
|
||||
|
||||
EVT EltVT = WidenVT.getVectorElementType();
|
||||
@ -2900,7 +2901,8 @@ DAGTypeLegalizer::GenWidenVectorExtLoads(SmallVectorImpl<SDValue> &LdChain,
|
||||
unsigned Increment = LdEltVT.getSizeInBits() / 8;
|
||||
Ops[0] = DAG.getExtLoad(ExtType, dl, EltVT, Chain, BasePtr,
|
||||
LD->getPointerInfo(),
|
||||
LdEltVT, isVolatile, isNonTemporal, Align, AAInfo);
|
||||
LdEltVT, isVolatile, isNonTemporal, isInvariant,
|
||||
Align, AAInfo);
|
||||
LdChain.push_back(Ops[0].getValue(1));
|
||||
unsigned i = 0, Offset = Increment;
|
||||
for (i=1; i < NumElts; ++i, Offset += Increment) {
|
||||
@ -2910,7 +2912,8 @@ DAGTypeLegalizer::GenWidenVectorExtLoads(SmallVectorImpl<SDValue> &LdChain,
|
||||
BasePtr.getValueType()));
|
||||
Ops[i] = DAG.getExtLoad(ExtType, dl, EltVT, Chain, NewBasePtr,
|
||||
LD->getPointerInfo().getWithOffset(Offset), LdEltVT,
|
||||
isVolatile, isNonTemporal, Align, AAInfo);
|
||||
isVolatile, isNonTemporal, isInvariant, Align,
|
||||
AAInfo);
|
||||
LdChain.push_back(Ops[i].getValue(1));
|
||||
}
|
||||
|
||||
|
@ -3990,7 +3990,7 @@ static SDValue getMemcpyLoadsAndStores(SelectionDAG &DAG, SDLoc dl,
|
||||
Value = DAG.getExtLoad(ISD::EXTLOAD, dl, NVT, Chain,
|
||||
getMemBasePlusOffset(Src, SrcOff, dl, DAG),
|
||||
SrcPtrInfo.getWithOffset(SrcOff), VT, isVol, false,
|
||||
MinAlign(SrcAlign, SrcOff));
|
||||
false, MinAlign(SrcAlign, SrcOff));
|
||||
Store = DAG.getTruncStore(Chain, dl, Value,
|
||||
getMemBasePlusOffset(Dst, DstOff, dl, DAG),
|
||||
DstPtrInfo.getWithOffset(DstOff), VT, isVol,
|
||||
@ -4746,11 +4746,12 @@ SDValue SelectionDAG::getExtLoad(ISD::LoadExtType ExtType, SDLoc dl, EVT VT,
|
||||
SDValue Chain, SDValue Ptr,
|
||||
MachinePointerInfo PtrInfo, EVT MemVT,
|
||||
bool isVolatile, bool isNonTemporal,
|
||||
unsigned Alignment, const AAMDNodes &AAInfo) {
|
||||
bool isInvariant, unsigned Alignment,
|
||||
const AAMDNodes &AAInfo) {
|
||||
SDValue Undef = getUNDEF(Ptr.getValueType());
|
||||
return getLoad(ISD::UNINDEXED, ExtType, VT, dl, Chain, Ptr, Undef,
|
||||
PtrInfo, MemVT, isVolatile, isNonTemporal, false, Alignment,
|
||||
AAInfo);
|
||||
PtrInfo, MemVT, isVolatile, isNonTemporal, isInvariant,
|
||||
Alignment, AAInfo);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1809,7 +1809,7 @@ SDValue AArch64TargetLowering::LowerFormalArguments(
|
||||
|
||||
ArgValue = DAG.getExtLoad(ExtType, DL, VA.getLocVT(), Chain, FIN,
|
||||
MachinePointerInfo::getFixedStack(FI),
|
||||
MemVT, false, false, false, nullptr);
|
||||
MemVT, false, false, false, 0, nullptr);
|
||||
|
||||
InVals.push_back(ArgValue);
|
||||
}
|
||||
|
@ -5745,7 +5745,7 @@ static SDValue SkipLoadExtensionForVMULL(LoadSDNode *LD, SelectionDAG& DAG) {
|
||||
// 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->getMemoryVT(), LD->isVolatile(), LD->isInvariant(),
|
||||
LD->isNonTemporal(), LD->getAlignment());
|
||||
}
|
||||
|
||||
|
@ -1488,7 +1488,7 @@ SDValue MipsTargetLowering::lowerBR_JT(SDValue Op, SelectionDAG &DAG) const {
|
||||
EVT MemVT = EVT::getIntegerVT(*DAG.getContext(), EntrySize * 8);
|
||||
Addr = DAG.getExtLoad(ISD::SEXTLOAD, DL, PTy, Chain, Addr,
|
||||
MachinePointerInfo::getJumpTable(), MemVT, false, false,
|
||||
0);
|
||||
false, 0);
|
||||
Chain = Addr.getValue(1);
|
||||
|
||||
if ((getTargetMachine().getRelocationModel() == Reloc::PIC_) ||
|
||||
@ -3628,7 +3628,8 @@ passByValArg(SDValue Chain, SDLoc DL,
|
||||
DAG.getConstant(OffsetInBytes, PtrTy));
|
||||
SDValue LoadVal = DAG.getExtLoad(
|
||||
ISD::ZEXTLOAD, DL, RegTy, Chain, LoadPtr, MachinePointerInfo(),
|
||||
MVT::getIntegerVT(LoadSizeInBytes * 8), false, false, Alignment);
|
||||
MVT::getIntegerVT(LoadSizeInBytes * 8), false, false, false,
|
||||
Alignment);
|
||||
MemOpChains.push_back(LoadVal.getValue(1));
|
||||
|
||||
// Shift the loaded value.
|
||||
|
@ -2142,7 +2142,7 @@ SDValue NVPTXTargetLowering::LowerFormalArguments(
|
||||
ISD::SEXTLOAD : ISD::ZEXTLOAD;
|
||||
p = DAG.getExtLoad(ExtOp, dl, Ins[InsIdx].VT, Root, srcAddr,
|
||||
MachinePointerInfo(srcValue), partVT, false,
|
||||
false, partAlign);
|
||||
false, false, partAlign);
|
||||
} else {
|
||||
p = DAG.getLoad(partVT, dl, Root, srcAddr,
|
||||
MachinePointerInfo(srcValue), false, false, false,
|
||||
@ -2275,6 +2275,7 @@ SDValue NVPTXTargetLowering::LowerFormalArguments(
|
||||
ISD::SEXTLOAD : ISD::ZEXTLOAD;
|
||||
p = DAG.getExtLoad(ExtOp, dl, Ins[InsIdx].VT, Root, Arg,
|
||||
MachinePointerInfo(srcValue), ObjectVT, false, false,
|
||||
false,
|
||||
TD->getABITypeAlignment(ObjectVT.getTypeForEVT(F->getContext())));
|
||||
} else {
|
||||
p = DAG.getLoad(Ins[InsIdx].VT, dl, Root, Arg,
|
||||
|
@ -1866,7 +1866,7 @@ SDValue PPCTargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG,
|
||||
// gpr_index
|
||||
SDValue GprIndex = DAG.getExtLoad(ISD::ZEXTLOAD, dl, MVT::i32, InChain,
|
||||
VAListPtr, MachinePointerInfo(SV), MVT::i8,
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
InChain = GprIndex.getValue(1);
|
||||
|
||||
if (VT == MVT::i64) {
|
||||
@ -1889,7 +1889,7 @@ SDValue PPCTargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG,
|
||||
// fpr
|
||||
SDValue FprIndex = DAG.getExtLoad(ISD::ZEXTLOAD, dl, MVT::i32, InChain,
|
||||
FprPtr, MachinePointerInfo(SV), MVT::i8,
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
InChain = FprIndex.getValue(1);
|
||||
|
||||
SDValue RegSaveAreaPtr = DAG.getNode(ISD::ADD, dl, PtrVT, VAListPtr,
|
||||
@ -4331,7 +4331,7 @@ PPCTargetLowering::LowerCall_64SVR4(SDValue Chain, SDValue Callee,
|
||||
if (GPR_idx != NumGPRs) {
|
||||
SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, PtrVT, Chain, Arg,
|
||||
MachinePointerInfo(), VT,
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx], Load));
|
||||
|
||||
@ -4801,7 +4801,7 @@ PPCTargetLowering::LowerCall_Darwin(SDValue Chain, SDValue Callee,
|
||||
if (GPR_idx != NumGPRs) {
|
||||
SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, PtrVT, Chain, Arg,
|
||||
MachinePointerInfo(), VT,
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
MemOpChains.push_back(Load.getValue(1));
|
||||
RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
|
||||
|
||||
|
@ -1038,7 +1038,7 @@ SDValue AMDGPUTargetLowering::ScalarizeVectorLoad(const SDValue Op,
|
||||
Load->getChain(), Ptr,
|
||||
SrcValue.getWithOffset(i * MemEltSize),
|
||||
MemEltVT, Load->isVolatile(), Load->isNonTemporal(),
|
||||
Load->getAlignment());
|
||||
Load->isInvariant(), Load->getAlignment());
|
||||
Loads.push_back(NewLoad.getValue(0));
|
||||
Chains.push_back(NewLoad.getValue(1));
|
||||
}
|
||||
@ -1079,7 +1079,7 @@ SDValue AMDGPUTargetLowering::SplitVectorLoad(const SDValue Op,
|
||||
Load->getChain(), BasePtr,
|
||||
SrcValue,
|
||||
LoMemVT, Load->isVolatile(), Load->isNonTemporal(),
|
||||
Load->getAlignment());
|
||||
Load->isInvariant(), Load->getAlignment());
|
||||
|
||||
SDValue HiPtr = DAG.getNode(ISD::ADD, SL, PtrVT, BasePtr,
|
||||
DAG.getConstant(LoMemVT.getStoreSize(), PtrVT));
|
||||
@ -1089,7 +1089,7 @@ SDValue AMDGPUTargetLowering::SplitVectorLoad(const SDValue Op,
|
||||
Load->getChain(), HiPtr,
|
||||
SrcValue.getWithOffset(LoMemVT.getStoreSize()),
|
||||
HiMemVT, Load->isVolatile(), Load->isNonTemporal(),
|
||||
Load->getAlignment());
|
||||
Load->isInvariant(), Load->getAlignment());
|
||||
|
||||
SDValue Ops[] = {
|
||||
DAG.getNode(ISD::CONCAT_VECTORS, SL, VT, LoLoad, HiLoad),
|
||||
|
@ -1613,6 +1613,7 @@ SDValue R600TargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const
|
||||
LoadNode->getPointerInfo(), MemVT,
|
||||
LoadNode->isVolatile(),
|
||||
LoadNode->isNonTemporal(),
|
||||
LoadNode->isInvariant(),
|
||||
LoadNode->getAlignment());
|
||||
SDValue Shl = DAG.getNode(ISD::SHL, DL, VT, NewLoad, ShiftAmount);
|
||||
SDValue Sra = DAG.getNode(ISD::SRA, DL, VT, Shl, ShiftAmount);
|
||||
@ -1732,7 +1733,7 @@ SDValue R600TargetLowering::LowerFormalArguments(
|
||||
SDValue Arg = DAG.getExtLoad(Ext, DL, VT, Chain,
|
||||
DAG.getConstant(36 + VA.getLocMemOffset(), MVT::i32),
|
||||
MachinePointerInfo(UndefValue::get(PtrTy)),
|
||||
MemVT, false, false, 4);
|
||||
MemVT, false, false, false, 4);
|
||||
|
||||
// 4 is the preferred alignment for the CONSTANT memory space.
|
||||
InVals.push_back(Arg);
|
||||
|
@ -474,7 +474,7 @@ LowerFormalArguments_32(SDValue Chain,
|
||||
DAG.getConstant(Offset, MVT::i32));
|
||||
Load = DAG.getExtLoad(LoadOp, dl, MVT::i32, Chain, FIPtr,
|
||||
MachinePointerInfo(),
|
||||
VA.getValVT(), false, false,0);
|
||||
VA.getValVT(), false, false, false,0);
|
||||
Load = DAG.getNode(ISD::TRUNCATE, dl, VA.getValVT(), Load);
|
||||
}
|
||||
InVals.push_back(Load);
|
||||
|
@ -1192,7 +1192,7 @@ static void adjustSubwordCmp(SelectionDAG &DAG, Comparison &C) {
|
||||
Load->getChain(), Load->getBasePtr(),
|
||||
Load->getPointerInfo(), Load->getMemoryVT(),
|
||||
Load->isVolatile(), Load->isNonTemporal(),
|
||||
Load->getAlignment());
|
||||
Load->isInvariant(), Load->getAlignment());
|
||||
|
||||
// Make sure that the second operand is an i32 with the right value.
|
||||
if (C.Op1.getValueType() != MVT::i32 ||
|
||||
|
@ -544,7 +544,7 @@ void X86DAGToDAGISel::PreprocessISelDAG() {
|
||||
false, false, 0);
|
||||
SDValue Result = CurDAG->getExtLoad(ISD::EXTLOAD, dl, DstVT, Store, MemTmp,
|
||||
MachinePointerInfo(),
|
||||
MemVT, false, false, 0);
|
||||
MemVT, false, false, false, 0);
|
||||
|
||||
// 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
|
||||
|
@ -10637,7 +10637,7 @@ X86TargetLowering::LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const {
|
||||
if (Subtarget->is64Bit())
|
||||
IDX = DAG.getExtLoad(ISD::ZEXTLOAD, dl, getPointerTy(), Chain,
|
||||
IDX, MachinePointerInfo(), MVT::i32,
|
||||
false, false, 0);
|
||||
false, false, false, 0);
|
||||
else
|
||||
IDX = DAG.getLoad(getPointerTy(), dl, Chain, IDX, MachinePointerInfo(),
|
||||
false, false, false, 0);
|
||||
@ -11022,7 +11022,7 @@ SDValue X86TargetLowering::LowerUINT_TO_FP(SDValue Op,
|
||||
// FIXME: Avoid the extend by constructing the right constant pool?
|
||||
SDValue Fudge = DAG.getExtLoad(ISD::EXTLOAD, dl, MVT::f80, DAG.getEntryNode(),
|
||||
FudgePtr, MachinePointerInfo::getConstantPool(),
|
||||
MVT::f32, false, false, 4);
|
||||
MVT::f32, false, false, false, 4);
|
||||
// Extend everything to 80 bits to force it to be done on x87.
|
||||
SDValue Add = DAG.getNode(ISD::FADD, dl, MVT::f80, Fild, Fudge);
|
||||
return DAG.getNode(ISD::FP_ROUND, dl, DstVT, Add, DAG.getIntPtrConstant(0));
|
||||
@ -12919,7 +12919,8 @@ static SDValue LowerExtendedLoad(SDValue Op, const X86Subtarget *Subtarget,
|
||||
Load =
|
||||
DAG.getExtLoad(Ext, dl, HalfVecVT, Ld->getChain(), Ld->getBasePtr(),
|
||||
Ld->getPointerInfo(), MemVT, Ld->isVolatile(),
|
||||
Ld->isNonTemporal(), Ld->getAlignment());
|
||||
Ld->isNonTemporal(), Ld->isInvariant(),
|
||||
Ld->getAlignment());
|
||||
}
|
||||
|
||||
// Replace chain users with the new chain.
|
||||
|
@ -463,14 +463,15 @@ 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(), 2);
|
||||
LD->isVolatile(), LD->isNonTemporal(),
|
||||
LD->isInvariant(), 2);
|
||||
SDValue HighAddr = DAG.getNode(ISD::ADD, DL, MVT::i32, BasePtr,
|
||||
DAG.getConstant(2, MVT::i32));
|
||||
SDValue High = DAG.getExtLoad(ISD::EXTLOAD, DL, MVT::i32, Chain,
|
||||
HighAddr,
|
||||
LD->getPointerInfo().getWithOffset(2),
|
||||
MVT::i16, LD->isVolatile(),
|
||||
LD->isNonTemporal(), 2);
|
||||
LD->isNonTemporal(), LD->isInvariant(), 2);
|
||||
SDValue HighShifted = DAG.getNode(ISD::SHL, DL, MVT::i32, High,
|
||||
DAG.getConstant(16, MVT::i32));
|
||||
SDValue Result = DAG.getNode(ISD::OR, DL, MVT::i32, Low, HighShifted);
|
||||
@ -981,13 +982,13 @@ LowerATOMIC_LOAD(SDValue Op, SelectionDAG &DAG) const {
|
||||
return DAG.getExtLoad(ISD::EXTLOAD, SDLoc(Op), MVT::i32, N->getChain(),
|
||||
N->getBasePtr(), N->getPointerInfo(), MVT::i16,
|
||||
N->isVolatile(), N->isNonTemporal(),
|
||||
N->getAlignment(), N->getAAInfo());
|
||||
N->isInvariant(), N->getAlignment(), 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->getAlignment(), N->getAAInfo());
|
||||
N->isInvariant(), N->getAlignment(), N->getAAInfo());
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user