[llvm-commits] [llvm] r160357 - in /llvm/trunk: lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp test/CodeGen/X86/2012-07-17-vtrunc.ll
Nadav Rotem
nadav.rotem at intel.com
Tue Jul 17 02:07:37 PDT 2012
Author: nadav
Date: Tue Jul 17 04:07:37 2012
New Revision: 160357
URL: http://llvm.org/viewvc/llvm-project?rev=160357&view=rev
Log:
Fix a crash in the legalization of large vectors.
When truncating a result of a vector that is split we need
to use the result of the split vector, and not re-split the dead node.
Added:
llvm/trunk/test/CodeGen/X86/2012-07-17-vtrunc.ll
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp?rev=160357&r1=160356&r2=160357&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp Tue Jul 17 04:07:37 2012
@@ -592,14 +592,11 @@
assert(isPowerOf2_32(NumElts) &&
"Promoted vector type must be a power of two");
- EVT HalfVT = EVT::getVectorVT(*DAG.getContext(), EltVT, NumElts/2);
+ SDValue EOp1, EOp2;
+ GetSplitVector(InOp, EOp1, EOp2);
+
EVT HalfNVT = EVT::getVectorVT(*DAG.getContext(), NVT.getScalarType(),
NumElts/2);
-
- SDValue EOp1 = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, HalfVT, InOp,
- DAG.getIntPtrConstant(0));
- SDValue EOp2 = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, HalfVT, InOp,
- DAG.getIntPtrConstant(NumElts/2));
EOp1 = DAG.getNode(ISD::TRUNCATE, dl, HalfNVT, EOp1);
EOp2 = DAG.getNode(ISD::TRUNCATE, dl, HalfNVT, EOp2);
Added: llvm/trunk/test/CodeGen/X86/2012-07-17-vtrunc.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2012-07-17-vtrunc.ll?rev=160357&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/2012-07-17-vtrunc.ll (added)
+++ llvm/trunk/test/CodeGen/X86/2012-07-17-vtrunc.ll Tue Jul 17 04:07:37 2012
@@ -0,0 +1,16 @@
+; RUN: llc < %s -march=x86-64 -mcpu=corei7
+
+define void @autogen_SD33189483() {
+BB:
+ br label %CF76
+
+CF76: ; preds = %CF76, %BB
+ %Shuff13 = shufflevector <4 x i64> zeroinitializer, <4 x i64> undef, <4 x i32> zeroinitializer
+ %Tr16 = trunc <8 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1> to <8 x i1>
+ %E19 = extractelement <8 x i1> %Tr16, i32 2
+ br i1 %E19, label %CF76, label %CF78
+
+CF78: ; preds = %CF78, %CF76
+ %BC = bitcast <4 x i64> %Shuff13 to <4 x double>
+ br label %CF78
+}
More information about the llvm-commits
mailing list