Skip to content
  • Chris Lattner's avatar
    Implement rdar://7860110 (also in target/readme.txt) narrowing · 4041ab6e
    Chris Lattner authored
    a load/or/and/store sequence into a narrower store when it is
    safe.  Daniel tells me that clang will start producing this sort
    of thing with bitfields, and this does  trigger a few dozen times
    on 176.gcc produced by llvm-gcc even now.
    
    This compiles code like CodeGen/X86/2009-05-28-DAGCombineCrash.ll 
    into:
    
            movl    %eax, 36(%rdi)
    
    instead of:
    
            movl    $4294967295, %eax       ## imm = 0xFFFFFFFF
            andq    32(%rdi), %rax
            shlq    $32, %rcx
            addq    %rax, %rcx
            movq    %rcx, 32(%rdi)
    
    and each of the testcases into a single store.  Each of them used
    to compile into craziness like this:
    
    _test4:
    	movl	$65535, %eax            ## imm = 0xFFFF
    	andl	(%rdi), %eax
    	shll	$16, %esi
    	addl	%eax, %esi
    	movl	%esi, (%rdi)
    	ret
    
    llvm-svn: 101343
    4041ab6e
Loading