[llvm-commits] [llvm] r148383 - in /llvm/trunk: lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp test/CodeGen/X86/2012-01-18-vbitcast.ll

Duncan Sands baldrick at free.fr
Wed Jan 18 00:47:14 PST 2012


Hi Nadav,

> Fix a bug in the type-legalization of vector integers. When we bitcast one vector type to another, we must not bitcast the result if one type is widened while the other is promoted.

this bug has now popped up several times in different places.  How about
auditing the legalization code looking for other cases of it?

Ciao, Duncan.

>
>
> Added:
>      llvm/trunk/test/CodeGen/X86/2012-01-18-vbitcast.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=148383&r1=148382&r2=148383&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp Wed Jan 18 02:33:18 2012
> @@ -249,8 +249,10 @@
>       return DAG.getNode(ISD::BITCAST, dl, NOutVT, InOp);
>     }
>     case TargetLowering::TypeWidenVector:
> -    if (NOutVT.bitsEq(NInVT))
> -      // The input is widened to the same size.  Convert to the widened value.
> +    // The input is widened to the same size. Convert to the widened value.
> +    // Make sure that the outgoing value is not a vector, because this would
> +    // make us bitcast between two vectors which are legalized in different ways.
> +    if (NOutVT.bitsEq(NInVT)&&  !NOutVT.isVector())
>         return DAG.getNode(ISD::BITCAST, dl, NOutVT, GetWidenedVector(InOp));
>     }
>
>
> Added: llvm/trunk/test/CodeGen/X86/2012-01-18-vbitcast.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2012-01-18-vbitcast.ll?rev=148383&view=auto
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/2012-01-18-vbitcast.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/2012-01-18-vbitcast.ll Wed Jan 18 02:33:18 2012
> @@ -0,0 +1,14 @@
> +; RUN: llc<  %s -march=x86-64 -mcpu=corei7 -mtriple=x86_64-pc-win32 | FileCheck %s
> +
> +;CHECK: vcast
> +define<2 x i32>  @vcast(<2 x float>  %a,<2 x float>  %b) {
> +;CHECK: pshufd
> +;CHECK: pshufd
> +  %af = bitcast<2 x float>  %a to<2 x i32>
> +  %bf = bitcast<2 x float>  %b to<2 x i32>
> +  %x = sub<2 x i32>  %af, %bf
> +;CHECK: psubq
> +  ret<2 x i32>  %x
> +;CHECK: ret
> +}
> +
>
>
> _______________________________________________
> 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