Skip to content
  • Chris Lattner's avatar
    Add support to the local allocator for fusing spill code into the instructions · 4e21b235
    Chris Lattner authored
    that need them.  This is very useful on CISCy targets like the X86 because it
    reduces the total spill pressure, and makes better use of it's (large)
    instruction set.  Though the X86 backend doesn't know how to rewrite many
    instructions yet, this already makes a substantial difference on 176.gcc for
    example:
    
    Before:
    Time:
       8.0099 ( 31.2%)   0.0100 ( 12.5%)   8.0199 ( 31.2%)   7.7186 ( 30.0%)  Local Register Allocator
    
    Code quality:
    734559 asm-printer           - Number of machine instrs printed
    111395 ra-local              - Number of registers reloaded
     79902 ra-local              - Number of registers spilled
    231554 x86-peephole          - Number of peephole optimization performed
    
    After:
    Time:
       7.8700 ( 30.6%)   0.0099 ( 19.9%)   7.8800 ( 30.6%)   7.7892 ( 30.2%)  Local Register Allocator
    Code quality:
    733083 asm-printer           - Number of machine instrs printed
      2379 ra-local              - Number of reloads fused into instructions
    109046 ra-local              - Number of registers reloaded
     79881 ra-local              - Number of registers spilled
    230658 x86-peephole          - Number of peephole optimization performed
    
    So by fusing 2300 instructions, we reduced the  static number of instructions
    by 1500, and reduces the number of peepholes (and thus the work) by about 900.
    This also clearly reduces the number of reload/spill instructions that are
    emitted.
    
    llvm-svn: 11542
    4e21b235
Loading