diff options
author | Derek Schuff <dschuff@google.com> | 2016-01-26 22:47:43 +0000 |
---|---|---|
committer | Derek Schuff <dschuff@google.com> | 2016-01-26 22:47:43 +0000 |
commit | 90d9e8d37048f799d7e2174426f831a27cd0d23f (patch) | |
tree | 9a690bc744a37131733688961c3bd202f631e9d1 /llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp | |
parent | c2752daa6bf70786ebbb448208af8fb62a431ecc (diff) | |
download | bcm5719-llvm-90d9e8d37048f799d7e2174426f831a27cd0d23f.tar.gz bcm5719-llvm-90d9e8d37048f799d7e2174426f831a27cd0d23f.zip |
[WebAssembly] Omit no-op adds for non-mem uses of FrameIndex
Differential Revision: http://reviews.llvm.org/D16554
llvm-svn: 258872
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp index 95f7326a7d5..46f271c20af 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyRegisterInfo.cpp @@ -81,15 +81,18 @@ void WebAssemblyRegisterInfo::eliminateFrameIndex( auto &MRI = MF.getRegInfo(); const auto *TII = MF.getSubtarget<WebAssemblySubtarget>().getInstrInfo(); - unsigned OffsetReg = MRI.createVirtualRegister(&WebAssembly::I32RegClass); - BuildMI(MBB, MI, MI.getDebugLoc(), TII->get(WebAssembly::CONST_I32), - OffsetReg) - .addImm(FrameOffset); - BuildMI(MBB, MI, MI.getDebugLoc(), TII->get(WebAssembly::ADD_I32), - OffsetReg) - .addReg(WebAssembly::SP32) - .addReg(OffsetReg); - MI.getOperand(FIOperandNum).ChangeToRegister(OffsetReg, /*IsDef=*/false); + unsigned FIRegOperand = WebAssembly::SP32; + if (FrameOffset) { + FIRegOperand = MRI.createVirtualRegister(&WebAssembly::I32RegClass); + BuildMI(MBB, MI, MI.getDebugLoc(), TII->get(WebAssembly::CONST_I32), + FIRegOperand) + .addImm(FrameOffset); + BuildMI(MBB, MI, MI.getDebugLoc(), TII->get(WebAssembly::ADD_I32), + FIRegOperand) + .addReg(WebAssembly::SP32) + .addReg(FIRegOperand); + } + MI.getOperand(FIOperandNum).ChangeToRegister(FIRegOperand, /*IsDef=*/false); } } |