DAGCombiner: Check legality before creating extract_vector_elt
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Mon, 7 Mar 2016 21:10:09 +0000 (21:10 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Mon, 7 Mar 2016 21:10:09 +0000 (21:10 +0000)
Problem not hit by any in tree target.

llvm-svn: 262852

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

index 36af244..b7c468a 100644 (file)
@@ -7207,7 +7207,9 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
   if (N0.getOpcode() == ISD::BITCAST && !VT.isVector()) {
     SDValue VecSrc = N0.getOperand(0);
     EVT SrcVT = VecSrc.getValueType();
-    if (SrcVT.isVector() && SrcVT.getScalarType() == VT) {
+    if (SrcVT.isVector() && SrcVT.getScalarType() == VT &&
+        (!LegalOperations ||
+         TLI.isOperationLegal(ISD::EXTRACT_VECTOR_ELT, SrcVT))) {
       SDLoc SL(N);
 
       EVT IdxVT = TLI.getVectorIdxTy(DAG.getDataLayout());