mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-05 02:07:16 +00:00
Rewrite 73900 per Duncan's suggestion.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74082 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
71d259bc4b
commit
8539cfd30e
@ -3181,27 +3181,17 @@ static SDValue getMemcpyLoadsAndStores(SelectionDAG &DAG, DebugLoc dl,
|
||||
} else {
|
||||
// The type might not be legal for the target. This should only happen
|
||||
// if the type is smaller than a legal type, as on PPC, so the right
|
||||
// thing to do is generate a LoadExt/StoreTrunc pair.
|
||||
// thing to do is generate a LoadExt/StoreTrunc pair. These simplify
|
||||
// to Load/Store if NVT==VT.
|
||||
// FIXME does the case above also need this?
|
||||
if (TLI.isTypeLegal(VT)) {
|
||||
Value = DAG.getLoad(VT, dl, Chain,
|
||||
getMemBasePlusOffset(Src, SrcOff, DAG),
|
||||
SrcSV, SrcSVOff + SrcOff, false, Align);
|
||||
Store = DAG.getStore(Chain, dl, Value,
|
||||
MVT NVT = TLI.getTypeToTransformTo(VT);
|
||||
assert(NVT.bitsGE(VT));
|
||||
Value = DAG.getExtLoad(ISD::EXTLOAD, dl, NVT, Chain,
|
||||
getMemBasePlusOffset(Src, SrcOff, DAG),
|
||||
SrcSV, SrcSVOff + SrcOff, VT, false, Align);
|
||||
Store = DAG.getTruncStore(Chain, dl, Value,
|
||||
getMemBasePlusOffset(Dst, DstOff, DAG),
|
||||
DstSV, DstSVOff + DstOff, false, DstAlign);
|
||||
} else {
|
||||
MVT NVT = VT;
|
||||
while (!TLI.isTypeLegal(NVT)) {
|
||||
NVT = (MVT::SimpleValueType(NVT.getSimpleVT() + 1));
|
||||
}
|
||||
Value = DAG.getExtLoad(ISD::EXTLOAD, dl, NVT, Chain,
|
||||
getMemBasePlusOffset(Src, SrcOff, DAG),
|
||||
SrcSV, SrcSVOff + SrcOff, VT, false, Align);
|
||||
Store = DAG.getTruncStore(Chain, dl, Value,
|
||||
getMemBasePlusOffset(Dst, DstOff, DAG),
|
||||
DstSV, DstSVOff + DstOff, VT, false, DstAlign);
|
||||
}
|
||||
DstSV, DstSVOff + DstOff, VT, false, DstAlign);
|
||||
}
|
||||
OutChains.push_back(Store);
|
||||
SrcOff += VTSize;
|
||||
|
Loading…
Reference in New Issue
Block a user