Skip to content
  • Chris Lattner's avatar
    implement rdar://6653118 - fastisel should fold loads where possible. · eeba0c73
    Chris Lattner authored
    Since mem2reg isn't run at -O0, we get a ton of reloads from the stack,
    for example, before, this code:
    
    int foo(int x, int y, int z) {
      return x+y+z;
    }
    
    used to compile into:
    
    _foo:                                   ## @foo
    	subq	$12, %rsp
    	movl	%edi, 8(%rsp)
    	movl	%esi, 4(%rsp)
    	movl	%edx, (%rsp)
    	movl	8(%rsp), %edx
    	movl	4(%rsp), %esi
    	addl	%edx, %esi
    	movl	(%rsp), %edx
    	addl	%esi, %edx
    	movl	%edx, %eax
    	addq	$12, %rsp
    	ret
    
    Now we produce:
    
    _foo:                                   ## @foo
    	subq	$12, %rsp
    	movl	%edi, 8(%rsp)
    	movl	%esi, 4(%rsp)
    	movl	%edx, (%rsp)
    	movl	8(%rsp), %edx
    	addl	4(%rsp), %edx    ## Folded load
    	addl	(%rsp), %edx     ## Folded load
    	movl	%edx, %eax
    	addq	$12, %rsp
    	ret
    
    Fewer instructions and less register use = faster compiles.
    
    llvm-svn: 113102
    eeba0c73
Loading