aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Target/ARM/ARMISelDAGToDAG.cpp6
-rw-r--r--test/CodeGen/ARM/call.ll2
2 files changed, 6 insertions, 2 deletions
diff --git a/lib/Target/ARM/ARMISelDAGToDAG.cpp b/lib/Target/ARM/ARMISelDAGToDAG.cpp
index 107ce5c543..167c052c33 100644
--- a/lib/Target/ARM/ARMISelDAGToDAG.cpp
+++ b/lib/Target/ARM/ARMISelDAGToDAG.cpp
@@ -181,6 +181,8 @@ public:
}
unsigned getStackSize(void) {
int last = is_reg.size() - 1;
+ if (last < 0)
+ return 0;
if (isRegister(last))
return 0;
return getOffset(last) + MVT::getSizeInBits(getType(last))/8;
@@ -193,7 +195,7 @@ public:
last--;
return last;
}
- unsigned lastRegNum(void) {
+ int lastRegNum(void) {
int l = lastRegArg();
if (l < 0)
return -1;
@@ -264,7 +266,7 @@ static SDOperand LowerCALL(SDOperand Op, SelectionDAG &DAG) {
// Build a sequence of copy-to-reg nodes chained together with token chain
// and flag operands which copy the outgoing args into the appropriate regs.
SDOperand InFlag;
- for (unsigned i = 0, e = Layout.lastRegArg(); i <= e; ++i) {
+ for (int i = 0, e = Layout.lastRegArg(); i <= e; ++i) {
SDOperand Arg = Op.getOperand(5+2*i);
unsigned RegNum = Layout.getRegisterNum(i);
unsigned Reg1 = regs[RegNum];
diff --git a/test/CodeGen/ARM/call.ll b/test/CodeGen/ARM/call.ll
index cfffa99eb0..890018396e 100644
--- a/test/CodeGen/ARM/call.ll
+++ b/test/CodeGen/ARM/call.ll
@@ -2,7 +2,9 @@
void %f() {
entry:
call void %g( int 1, int 2, int 3, int 4 )
+ call void %h()
ret void
}
declare void %g(int, int, int, int)
+declare void %h()