Skip to content
  1. Aug 26, 2010
    • Chris Lattner's avatar
      8df99b52
    • Chris Lattner's avatar
      Change handling of illegal vector types to widen when possible instead of · 75ff0534
      Chris Lattner authored
      expanding: e.g. <2 x float> -> <4 x float> instead of -> 2 floats.  This
      affects two places in the code: handling cross block values and handling
      function return and arguments.  Since vectors are already widened by 
      legalizetypes, this gives us much better code and unblocks x86-64 abi
      and SPU abi work.
      
      For example, this (which is a silly example of a cross-block value):
      define <4 x float> @test2(<4 x float> %A) nounwind {
       %B = shufflevector <4 x float> %A, <4 x float> undef, <2 x i32> <i32 0, i32 1>
       %C = fadd <2 x float> %B, %B
        br label %BB
      BB:
       %D = fadd <2 x float> %C, %C
       %E = shufflevector <2 x float> %D, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
       ret <4 x float> %E
      }
      
      Now compiles into:
      
      _test2:                                 ## @test2
      ## BB#0:
       addps %xmm0, %xmm0
       addps %xmm0, %xmm0
       ret
      
      previously it compiled into:
      
      _test2:                                 ## @test2
      ## BB#0:
       addps %xmm0, %xmm0
       pshufd $1, %xmm0, %xmm1
                                              ## kill: XMM0<def> XMM0<kill> XMM0<def>
       insertps $0, %xmm0, %xmm0
       insertps $16, %xmm1, %xmm0
       addps %xmm0, %xmm0
       ret
      
      This implements rdar://8230384
      
      llvm-svn: 112101
      75ff0534
  2. Aug 25, 2010
  3. Aug 24, 2010
Loading