mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-03 10:19:25 +00:00
Don't convert to MOVLP if using shufps etc. may allow load folding.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30847 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
dc4c38279f
commit
23425f5c74
@ -3053,9 +3053,13 @@ static inline bool isScalarLoadToVector(SDNode *N) {
|
||||
/// V1 (and in order), and the upper half elements should come from the upper
|
||||
/// half of V2 (and in order). And since V1 will become the source of the
|
||||
/// MOVLP, it must be either a vector load or a scalar load to vector.
|
||||
static bool ShouldXformToMOVLP(SDNode *V1, SDNode *Mask) {
|
||||
static bool ShouldXformToMOVLP(SDNode *V1, SDNode *V2, SDNode *Mask) {
|
||||
if (!ISD::isNON_EXTLoad(V1) && !isScalarLoadToVector(V1))
|
||||
return false;
|
||||
// Is V2 is a vector load, don't do this transformation. We will try to use
|
||||
// load folding shufps op.
|
||||
if (ISD::isNON_EXTLoad(V2))
|
||||
return false;
|
||||
|
||||
unsigned NumElems = Mask->getNumOperands();
|
||||
if (NumElems != 2 && NumElems != 4)
|
||||
@ -3497,7 +3501,7 @@ X86TargetLowering::LowerVECTOR_SHUFFLE(SDOperand Op, SelectionDAG &DAG) {
|
||||
return Op;
|
||||
|
||||
if (ShouldXformToMOVHLPS(PermMask.Val) ||
|
||||
ShouldXformToMOVLP(V1.Val, PermMask.Val))
|
||||
ShouldXformToMOVLP(V1.Val, V2.Val, PermMask.Val))
|
||||
return CommuteVectorShuffle(Op, DAG);
|
||||
|
||||
bool V1IsSplat = isSplatVector(V1.Val);
|
||||
|
Loading…
Reference in New Issue
Block a user