Skip to content
  • Chris Lattner's avatar
    Add a really quick hack at a machine code sinking pass, enabled with --enable-sinking. · f3edc09f
    Chris Lattner authored
    It is missing validity checks, so it is known broken.  However, it is powerful enough
    to compile this contrived code:
    
    void test1(int C, double A, double B, double *P) {
      double Tmp = A*A+B*B;
      *P = C ? Tmp : A;
    }
    
    into:
    
    _test1:
    	movsd	8(%esp), %xmm0
    	cmpl	$0, 4(%esp)
    	je	LBB1_2	# entry
    LBB1_1:	# entry
    	movsd	16(%esp), %xmm1
    	mulsd	%xmm1, %xmm1
    	mulsd	%xmm0, %xmm0
    	addsd	%xmm1, %xmm0
    LBB1_2:	# entry
    	movl	24(%esp), %eax
    	movsd	%xmm0, (%eax)
    	ret
    
    instead of:
    
    _test1:
    	movsd	16(%esp), %xmm0
    	mulsd	%xmm0, %xmm0
    	movsd	8(%esp), %xmm1
    	movapd	%xmm1, %xmm2
    	mulsd	%xmm2, %xmm2
    	addsd	%xmm0, %xmm2
    	cmpl	$0, 4(%esp)
    	je	LBB1_2	# entry
    LBB1_1:	# entry
    	movapd	%xmm2, %xmm1
    LBB1_2:	# entry
    	movl	24(%esp), %eax
    	movsd	%xmm1, (%eax)
    	ret
    
    woo.
    
    llvm-svn: 45570
    f3edc09f
Loading