Chris Lattner
							
						 | 
						
							
							
							
							
							
								
							
							
								94656b1c8c
								
							
						 | 
						
							
							
								
								fix the buildvector->insertp[sd] logic to not always create a redundant
							
							
							
							
							
							
							
							insertp[sd] $0, which is a noop.  Before:
_f32:                                   ## @f32
	pshufd	$1, %xmm1, %xmm2
	pshufd	$1, %xmm0, %xmm3
	addss	%xmm2, %xmm3
	addss	%xmm1, %xmm0
                                        ## kill: XMM0<def> XMM0<kill> XMM0<def>
	insertps	$0, %xmm0, %xmm0
	insertps	$16, %xmm3, %xmm0
	ret
after:
_f32:                                   ## @f32
	movdqa	%xmm0, %xmm2
	addss	%xmm1, %xmm2
	pshufd	$1, %xmm1, %xmm1
	pshufd	$1, %xmm0, %xmm3
	addss	%xmm1, %xmm3
	movdqa	%xmm2, %xmm0
	insertps	$16, %xmm3, %xmm0
	ret
The extra movs are due to a random (poor) scheduling decision.
llvm-svn: 112379
							
						 | 
						
							2010-08-28 17:59:08 +00:00 |