diff options
author | Akira Hatanaka <ahatanaka@mips.com> | 2013-11-27 23:38:42 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@mips.com> | 2013-11-27 23:38:42 +0000 |
commit | 168d4e5b20fde2fbe73b07f655ab5c7600de0f45 (patch) | |
tree | 5731d74895d41cf3c9631211e26a35b04c86fbff /llvm/lib/Target/Mips/MipsTargetMachine.cpp | |
parent | 6de7cd1672ad59cdb5c73edb7ec3398bfeb616dc (diff) | |
download | llvm-168d4e5b20fde2fbe73b07f655ab5c7600de0f45.zip llvm-168d4e5b20fde2fbe73b07f655ab5c7600de0f45.tar.gz llvm-168d4e5b20fde2fbe73b07f655ab5c7600de0f45.tar.bz2 |
[mips] Implement the following optimizations using dominance information to
make PIC calls a little more efficient:
1. Remove instructions setting up $gp if it is known that a function has been
called at least once.
2. Save the address of a called function in a register instead of loading
it from the GOT at every call site.
llvm-svn: 195892
Diffstat (limited to 'llvm/lib/Target/Mips/MipsTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/Mips/MipsTargetMachine.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Target/Mips/MipsTargetMachine.cpp b/llvm/lib/Target/Mips/MipsTargetMachine.cpp index 5046c1b..ab5677a 100644 --- a/llvm/lib/Target/Mips/MipsTargetMachine.cpp +++ b/llvm/lib/Target/Mips/MipsTargetMachine.cpp @@ -153,6 +153,7 @@ public: virtual void addIRPasses(); virtual bool addInstSelector(); + virtual void addMachineSSAOptimization(); virtual bool addPreEmitPass(); }; } // namespace @@ -182,6 +183,11 @@ bool MipsPassConfig::addInstSelector() { return false; } +void MipsPassConfig::addMachineSSAOptimization() { + addPass(createMipsOptimizePICCallPass(getMipsTargetMachine())); + TargetPassConfig::addMachineSSAOptimization(); +} + void MipsTargetMachine::addAnalysisPasses(PassManagerBase &PM) { if (Subtarget.allowMixed16_32()) { DEBUG(errs() << "No "); |