Skip to content
  • Akira Hatanaka's avatar
    Add an option to use a virtual register as the global base register instead of · b049aef2
    Akira Hatanaka authored
    reserving a physical register ($gp or $28) for that purpose.
    
    This will completely eliminate loads that restore the value of $gp after every
    function call, if the register allocator assigns a callee-saved register, or
    eliminate unnecessary loads if it assigns a temporary register. 
    
    example:
    
    .cpload $25       // set $gp.
    ...
    .cprestore 16     // store $gp to stack slot 16($sp).
    ...
    jalr $25          // function call. clobbers $gp.
    lw $gp, 16($sp)   // not emitted if callee-saved reg is chosen.
    ...
    lw $2, 4($gp)
    ...
    jalr $25          // function call.
    lw $gp, 16($sp)   // not emitted if $gp is not live after this instruction.
    ...
    
    llvm-svn: 151402
    b049aef2
Loading