summaryrefslogtreecommitdiff
path: root/lib/Target/Mips/Mips16InstrInfo.h
diff options
context:
space:
mode:
authorReed Kotler <rkotler@mips.com>2013-02-13 20:28:27 +0000
committerReed Kotler <rkotler@mips.com>2013-02-13 20:28:27 +0000
commit6b9d4617800d9450825f8a4b122a9aeb76f2795f (patch)
treec93e5dc6df7bc40175ee7348f5c282e659c0c8b6 /lib/Target/Mips/Mips16InstrInfo.h
parentf098620095727dd2a823a94a3a8d47108361ad83 (diff)
downloadllvm-6b9d4617800d9450825f8a4b122a9aeb76f2795f.tar.gz
llvm-6b9d4617800d9450825f8a4b122a9aeb76f2795f.tar.bz2
llvm-6b9d4617800d9450825f8a4b122a9aeb76f2795f.tar.xz
For Mips 16, add the optimization where the 16 bit form of addiu sp can be used
if the offset fits in 11 bits. This makes use of the fact that the abi requires sp to be 8 byte aligned so the actual offset can fit in 8 bits. It will be shifted left and sign extended before being actually used. The assembler or direct object emitter will shift right the 11 bit signed field by 3 bits. We don't need to deal with that here. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175073 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Mips/Mips16InstrInfo.h')
-rw-r--r--lib/Target/Mips/Mips16InstrInfo.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/Target/Mips/Mips16InstrInfo.h b/lib/Target/Mips/Mips16InstrInfo.h
index 26a5a5e5fb..f8570bdc27 100644
--- a/lib/Target/Mips/Mips16InstrInfo.h
+++ b/lib/Target/Mips/Mips16InstrInfo.h
@@ -86,6 +86,18 @@ public:
MachineBasicBlock::iterator II, DebugLoc DL,
unsigned &NewImm) const;
+ static bool validSpImm8(int offset) {
+ return ((offset & 7) == 0) && isInt<11>(offset);
+ }
+
+ //
+ // build the proper one based on the Imm field
+ //
+ void BuildAddiuSpImm(MachineBasicBlock &MBB,
+ MachineBasicBlock::iterator II, DebugLoc DL,
+ int64_t Imm) const;
+
+
private:
virtual unsigned GetAnalyzableBrOpc(unsigned Opc) const;