[llvm-commits] [llvm] r40478 - in /llvm/trunk: lib/Target/X86/X86ISelLowering.cpp test/CodeGen/X86/v4f32-immediate.ll

Evan Cheng evan.cheng at apple.com
Wed Jul 25 23:45:30 PDT 2007


How did I miss that one? Duh. Thanks!

Evan

On Jul 24, 2007, at 3:55 PM, Dan Gohman wrote:

> Author: djg
> Date: Tue Jul 24 17:55:08 2007
> New Revision: 40478
>
> URL: http://llvm.org/viewvc/llvm-project?rev=40478&view=rev
> Log:
> Use movaps to load a v4f32 build_vector of all-constant values into a
> register instead of loading each element individually.
>
> Added:
>     llvm/trunk/test/CodeGen/X86/v4f32-immediate.ll
> Modified:
>     llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>
> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/ 
> X86ISelLowering.cpp?rev=40478&r1=40477&r2=40478&view=diff
>
> ====================================================================== 
> ========
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Tue Jul 24  
> 17:55:08 2007
> @@ -2495,6 +2495,7 @@
>    unsigned NumZero  = 0;
>    unsigned NumNonZero = 0;
>    unsigned NonZeros = 0;
> +  unsigned NumNonZeroImms = 0;
>    std::set<SDOperand> Values;
>    for (unsigned i = 0; i < NumElems; ++i) {
>      SDOperand Elt = Op.getOperand(i);
> @@ -2505,6 +2506,9 @@
>        else {
>          NonZeros |= (1 << i);
>          NumNonZero++;
> +        if (Elt.getOpcode() == ISD::Constant ||
> +            Elt.getOpcode() == ISD::ConstantFP)
> +          NumNonZeroImms++;
>        }
>      }
>    }
> @@ -2548,6 +2552,11 @@
>      }
>    }
>
> +  // A vector full of immediates; various special cases are already
> +  // handled, so this is best done with a single constant-pool load.
> +  if (NumNonZero == NumNonZeroImms)
> +    return SDOperand();
> +
>    // Let legalizer expand 2-wide build_vectors.
>    if (EVTBits == 64)
>      return SDOperand();
>
> Added: llvm/trunk/test/CodeGen/X86/v4f32-immediate.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ 
> X86/v4f32-immediate.ll?rev=40478&view=auto
>
> ====================================================================== 
> ========
> --- llvm/trunk/test/CodeGen/X86/v4f32-immediate.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/v4f32-immediate.ll Tue Jul 24  
> 17:55:08 2007
> @@ -0,0 +1,5 @@
> +; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse | grep movaps
> +
> +define <4 x float> @foo() {
> +  ret <4 x float> <float 3.223542354, float 2.3, float 1.2, float  
> 0.1>
> +}
>
>
> _______________________________________________
> 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