[llvm-commits] [llvm] r160357 - in /llvm/trunk: lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp test/CodeGen/X86/2012-07-17-vtrunc.ll
Duncan Sands
baldrick at free.fr
Tue Jul 17 02:16:13 PDT 2012
Hi Nadav,
> Fix a crash in the legalization of large vectors.
how was this crashing? While the previous code was silly, it should have worked
as far as I can see.
Ciao, Duncan.
> 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
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list