mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
[mips] Make sure that we don't adjust the stack pointer by zero amount.
Reviewers: dsanders Reviewed By: dsanders Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D8638 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233904 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2278d23c53
commit
cb64898a22
@ -293,6 +293,9 @@ void Mips16InstrInfo::adjustStackPtrBigUnrestricted(
|
|||||||
void Mips16InstrInfo::adjustStackPtr(unsigned SP, int64_t Amount,
|
void Mips16InstrInfo::adjustStackPtr(unsigned SP, int64_t Amount,
|
||||||
MachineBasicBlock &MBB,
|
MachineBasicBlock &MBB,
|
||||||
MachineBasicBlock::iterator I) const {
|
MachineBasicBlock::iterator I) const {
|
||||||
|
if (Amount == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
if (isInt<16>(Amount)) // need to change to addiu sp, ....and isInt<16>
|
if (isInt<16>(Amount)) // need to change to addiu sp, ....and isInt<16>
|
||||||
BuildAddiuSpImm(MBB, I, Amount);
|
BuildAddiuSpImm(MBB, I, Amount);
|
||||||
else
|
else
|
||||||
|
@ -364,6 +364,9 @@ void MipsSEInstrInfo::adjustStackPtr(unsigned SP, int64_t Amount,
|
|||||||
unsigned ADDu = STI.isABI_N64() ? Mips::DADDu : Mips::ADDu;
|
unsigned ADDu = STI.isABI_N64() ? Mips::DADDu : Mips::ADDu;
|
||||||
unsigned ADDiu = STI.isABI_N64() ? Mips::DADDiu : Mips::ADDiu;
|
unsigned ADDiu = STI.isABI_N64() ? Mips::DADDiu : Mips::ADDiu;
|
||||||
|
|
||||||
|
if (Amount == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
if (isInt<16>(Amount))// addi sp, sp, amount
|
if (isInt<16>(Amount))// addi sp, sp, amount
|
||||||
BuildMI(MBB, I, DL, get(ADDiu), SP).addReg(SP).addImm(Amount);
|
BuildMI(MBB, I, DL, get(ADDiu), SP).addReg(SP).addImm(Amount);
|
||||||
else { // Expand immediate that doesn't fit in 16-bit.
|
else { // Expand immediate that doesn't fit in 16-bit.
|
||||||
|
20
test/CodeGen/Mips/adjust-callstack-sp.ll
Normal file
20
test/CodeGen/Mips/adjust-callstack-sp.ll
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
; RUN: llc < %s -march=mips -mcpu=mips16 | FileCheck %s -check-prefix=M16
|
||||||
|
; RUN: llc < %s -march=mips -mcpu=mips2 | FileCheck %s -check-prefix=GP32
|
||||||
|
; RUN: llc < %s -march=mips -mcpu=mips32 | FileCheck %s -check-prefix=GP32
|
||||||
|
; RUN: llc < %s -march=mips -mcpu=mips32r6 | FileCheck %s -check-prefix=GP32
|
||||||
|
; RUN: llc < %s -march=mips -mcpu=mips3 | FileCheck %s -check-prefix=GP64
|
||||||
|
; RUN: llc < %s -march=mips -mcpu=mips64 | FileCheck %s -check-prefix=GP64
|
||||||
|
; RUN: llc < %s -march=mips -mcpu=mips64r6 | FileCheck %s -check-prefix=GP64
|
||||||
|
|
||||||
|
declare void @bar(i32*)
|
||||||
|
|
||||||
|
define void @foo(i32 %sz) {
|
||||||
|
; ALL-LABEL: foo:
|
||||||
|
|
||||||
|
; M16-NOT: addiu $sp, 0 # 16 bit inst
|
||||||
|
; GP32-NOT: addiu $sp, $sp, 0
|
||||||
|
; GP64-NOT: daddiu $sp, $sp, 0
|
||||||
|
%a = alloca i32, i32 %sz
|
||||||
|
call void @bar(i32* %a)
|
||||||
|
ret void
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user