diff options
| author | Akira Hatanaka <ahatanaka@mips.com> | 2012-02-24 22:34:47 +0000 |
|---|---|---|
| committer | Akira Hatanaka <ahatanaka@mips.com> | 2012-02-24 22:34:47 +0000 |
| commit | b049aef2d13d9c49a1c4909f7d16e01fe1e88bf9 (patch) | |
| tree | bdbf4bf7acfde048f042bdcbafa6367ee17153c6 /clang/lib/CodeGen/CodeGenFunction.cpp | |
| parent | 324df5564eec718d086219888a87a6c317b8ed28 (diff) | |
| download | llvm-b049aef2d13d9c49a1c4909f7d16e01fe1e88bf9.zip llvm-b049aef2d13d9c49a1c4909f7d16e01fe1e88bf9.tar.gz llvm-b049aef2d13d9c49a1c4909f7d16e01fe1e88bf9.tar.bz2 | |
Add an option to use a virtual register as the global base register instead of
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
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.cpp')
0 files changed, 0 insertions, 0 deletions
