]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - opencl/llvm.git/commitdiff
[x86] Explicitly lower to a blend early if it is trivial to do so for
authorChandler Carruth <chandlerc@gmail.com>
Sun, 21 Sep 2014 11:40:39 +0000 (11:40 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sun, 21 Sep 2014 11:40:39 +0000 (11:40 +0000)
v8f32 shuffles in the new vector shuffle lowering code.

This is very cheap to do and makes it much more clear that anything more
expensive but overlapping with this lowering should be selected
afterward (for example using AVX2's VPERMPS). However, no functionality
changed here as without this code we would fall through to create no-op
shuffles of each input and a blend. =]

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218209 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp

index a3871339a495971e41d2b79d95a3208fd832e7be..bfe52247b7ae37ff667937365ab9056aefa1c27d 100644 (file)
@@ -7238,6 +7238,7 @@ static SDValue lowerVectorShuffleAsBlend(SDLoc DL, MVT VT, SDValue V1,
   case MVT::v2f64:
   case MVT::v4f32:
   case MVT::v4f64:
+  case MVT::v8f32:
     return DAG.getNode(X86ISD::BLENDI, DL, VT, V1, V2,
                        DAG.getConstant(BlendMask, MVT::i8));
 
@@ -9319,6 +9320,10 @@ static SDValue lowerV8F32VectorShuffle(SDValue Op, SDValue V1, SDValue V2,
       isSingleInputShuffleMask(Mask))
     return splitAndLower256BitVectorShuffle(Op, V1, V2, Subtarget, DAG);
 
+  if (SDValue Blend =
+          lowerVectorShuffleAsBlend(DL, MVT::v8f32, V1, V2, Mask, DAG))
+    return Blend;
+
   // Shuffle the input elements into the desired positions in V1 and V2 and
   // blend them together.
   int V1Mask[] = {-1, -1, -1, -1, -1, -1, -1, -1};