summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReed Kotler <rkotler@mips.com>2012-12-20 06:57:00 +0000
committerReed Kotler <rkotler@mips.com>2012-12-20 06:57:00 +0000
commit8965d24a2a74a692573e5493a9f68d5d30a4462b (patch)
tree8a1b9c0283037334ef52e324190d6702b0b12d81
parent56605448f2f7cb80fe2d0fdae99e588c558268ce (diff)
downloadbcm5719-llvm-8965d24a2a74a692573e5493a9f68d5d30a4462b.tar.gz
bcm5719-llvm-8965d24a2a74a692573e5493a9f68d5d30a4462b.zip
There is one more patch to finish large frames. Make sure we assert
on code that has large frames which will not yet compile correctly. llvm-svn: 170673
-rw-r--r--llvm/lib/Target/Mips/Mips16RegisterInfo.cpp4
-rw-r--r--llvm/lib/Target/Mips/MipsInstrInfo.td4
2 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Target/Mips/Mips16RegisterInfo.cpp b/llvm/lib/Target/Mips/Mips16RegisterInfo.cpp
index ff0f5a0dfbc..3af62a17da2 100644
--- a/llvm/lib/Target/Mips/Mips16RegisterInfo.cpp
+++ b/llvm/lib/Target/Mips/Mips16RegisterInfo.cpp
@@ -146,6 +146,10 @@ void Mips16RegisterInfo::eliminateFI(MachineBasicBlock::iterator II,
DEBUG(errs() << "Offset : " << Offset << "\n" << "<--------->\n");
+ if (!MI.isDebugValue() && ( ((FrameReg != Mips::SP) && !isInt<16>(Offset)) ||
+ ((FrameReg == Mips::SP) && !isInt<15>(Offset)) )) {
+ assert(false && "frame offset does not fit in instruction");
+ }
MI.getOperand(OpNo).ChangeToRegister(FrameReg, false);
MI.getOperand(OpNo + 1).ChangeToImmediate(Offset);
diff --git a/llvm/lib/Target/Mips/MipsInstrInfo.td b/llvm/lib/Target/Mips/MipsInstrInfo.td
index af9df4ba658..43a6b82a571 100644
--- a/llvm/lib/Target/Mips/MipsInstrInfo.td
+++ b/llvm/lib/Target/Mips/MipsInstrInfo.td
@@ -298,6 +298,10 @@ def HI16 : SDNodeXForm<imm, [{
// e.g. addi, andi
def immSExt16 : PatLeaf<(imm), [{ return isInt<16>(N->getSExtValue()); }]>;
+// Node immediate fits as 15-bit sign extended on target immediate.
+// e.g. addi, andi
+def immSExt15 : PatLeaf<(imm), [{ return isInt<15>(N->getSExtValue()); }]>;
+
// Node immediate fits as 16-bit zero extended on target immediate.
// The LO16 param means that only the lower 16 bits of the node
// immediate are caught.
OpenPOWER on IntegriCloud