From a631cd85ca010f303e64362a03bd8ecce8b3a2fc Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Mon, 23 Feb 2015 23:04:28 +0000 Subject: [PATCH] Fix based on post-commit comment on D7816 & rL230177 - BUILD_VECTOR operand truncation was using the the BV's output scalar type instead of the input type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230278 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 1f98fde13a8..fecbe9fec8d 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -11447,10 +11447,11 @@ SDValue DAGCombiner::visitCONCAT_VECTORS(SDNode *N) { if (!SVT.isFloatingPoint()) // If BUILD_VECTOR are from built from integer, they may have different // operand types. Get the smaller type and truncate all operands to it. - for (const SDValue &Op : N->ops()) { - EVT OpSVT = Op.getValueType().getScalarType(); - MinVT = MinVT.bitsLE(OpSVT) ? MinVT : OpSVT; - } + for (const SDValue &Op : N->ops()) + if (ISD::BUILD_VECTOR == Op.getOpcode()) { + EVT OpSVT = Op.getOperand(0)->getValueType(0); + MinVT = MinVT.bitsLE(OpSVT) ? MinVT : OpSVT; + } for (const SDValue &Op : N->ops()) { EVT OpVT = Op.getValueType();