[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