diff options
author | Nadav Rotem <nadav.rotem@intel.com> | 2012-01-17 09:13:19 +0000 |
---|---|---|
committer | Nadav Rotem <nadav.rotem@intel.com> | 2012-01-17 09:13:19 +0000 |
commit | 0b94b5f52b11092a69267159dfe0df3acdfcabd7 (patch) | |
tree | b45380bed39149eb39f7b51d33fea1b2ecced347 /lib/Target | |
parent | d3b588965daf43d5fd13c7bf6603c9f8017a041c (diff) | |
download | external_llvm-0b94b5f52b11092a69267159dfe0df3acdfcabd7.zip external_llvm-0b94b5f52b11092a69267159dfe0df3acdfcabd7.tar.gz external_llvm-0b94b5f52b11092a69267159dfe0df3acdfcabd7.tar.bz2 |
Fix 11769.
In CanXFormVExtractWithShuffleIntoLoad we assumed that EXTRACT_VECTOR_ELT can be later handled by the DAGCombiner.
However, in some cases on AVX, the EXTRACT_VECTOR_ELT is legalized to EXTRACT_SUBVECTOR + EXTRACT_VECTOR_ELT, which
currently is not handled by the DAGCombiner. In this patch I added a check that we only extract from the XMM part.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148298 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
-rw-r--r-- | lib/Target/X86/X86ISelLowering.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 0431108..8f69b0e 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -6241,6 +6241,13 @@ bool CanXFormVExtractWithShuffleIntoLoad(SDValue V, SelectionDAG &DAG, int Idx = (Elt > NumElems) ? -1 : SVOp->getMaskElt(Elt); V = (Idx < (int)NumElems) ? V.getOperand(0) : V.getOperand(1); + // If we are accessing the upper part of a YMM register + // then the EXTRACT_VECTOR_ELT is likely to be legalized to a sequence of + // EXTRACT_SUBVECTOR + EXTRACT_VECTOR_ELT, which are not detected at this point + // because the legalization of N did not happen yet. + if (Idx >= NumElems/2 && VT.getSizeInBits() == 256) + return false; + // Skip one more bit_convert if necessary if (V.getOpcode() == ISD::BITCAST) V = V.getOperand(0); |