Skip to content
  • Chris Lattner's avatar
    implement a readme entry, compiling the code into: · 7c709a5d
    Chris Lattner authored
    _foo:
    	movl	$12, %eax
    	andl	4(%esp), %eax
    	movl	_array(%eax), %eax
    	ret
    
    instead of:
    
    _foo:
    	movl	4(%esp), %eax
    	shrl	$2, %eax
    	andl	$3, %eax
    	movl	_array(,%eax,4), %eax
    	ret
    
    As it turns out, this triggers all the time, in a wide variety of
    situations, for example, I see diffs like this in various programs:
    
    -       movl    8(%eax), %eax
    -       shll    $2, %eax
    -       andl    $1020, %eax
    -       movl    (%esi,%eax), %eax
    +       movzbl  8(%eax), %eax
    +       movl    (%esi,%eax,4), %eax
    
    
    -       shll    $2, %edx
    -       andl    $1020, %edx
    -       movl    (%edi,%edx), %edx
    +       andl    $255, %edx
    +       movl    (%edi,%edx,4), %edx
    
    Unfortunately, I also see stuff like this, which can be fixed in the
    X86 backend:
    
    -       andl    $85, %ebx
    -       addl    _bit_count(,%ebx,4), %ebp
    +       shll    $2, %ebx
    +       andl    $340, %ebx
    +       addl    _bit_count(%ebx), %ebp
    
    llvm-svn: 44656
    7c709a5d
Loading