summaryrefslogtreecommitdiff
path: root/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
diff options
context:
space:
mode:
authorNadav Rotem <nadav.rotem@intel.com>2012-02-14 13:06:32 +0000
committerNadav Rotem <nadav.rotem@intel.com>2012-02-14 13:06:32 +0000
commit8b7c3d0ee42938a9e6ca37239cc327bd9f4c0cd0 (patch)
treeafd4a12dfe863553c70e722a39a07707d7b08198 /lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
parentfc52a5232300c27d57a8a9b6cd4b8cdd5d51127a (diff)
downloadllvm-8b7c3d0ee42938a9e6ca37239cc327bd9f4c0cd0.tar.gz
llvm-8b7c3d0ee42938a9e6ca37239cc327bd9f4c0cd0.tar.bz2
llvm-8b7c3d0ee42938a9e6ca37239cc327bd9f4c0cd0.tar.xz
Fix PR12000. Some vector operations may use scalar operands with types
that are greater than the vector element type. For example BUILD_VECTOR of type <1 x i1> with a constant i8 operand. This patch fixes the assertion. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150477 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/LegalizeTypes.cpp')
-rw-r--r--lib/CodeGen/SelectionDAG/LegalizeTypes.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp b/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
index 843ee2d13d..897953f57c 100644
--- a/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
+++ b/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
@@ -748,7 +748,11 @@ void DAGTypeLegalizer::SetSoftenedFloat(SDValue Op, SDValue Result) {
}
void DAGTypeLegalizer::SetScalarizedVector(SDValue Op, SDValue Result) {
- assert(Result.getValueType() == Op.getValueType().getVectorElementType() &&
+ // Note that in some cases vector operation operands may be greater than
+ // the vector element type. For example BUILD_VECTOR of type <1 x i1> with
+ // a constant i8 operand.
+ assert(Result.getValueType().getSizeInBits() >=
+ Op.getValueType().getVectorElementType().getSizeInBits() &&
"Invalid type for scalarized vector");
AnalyzeNewValue(Result);