Enclose directive .cprestore with .set macro and nomacro to silence assembler

warning. 

llvm-svn: 137378
This commit is contained in:
Akira Hatanaka 2011-08-11 22:42:31 +00:00
parent aee9e76722
commit 79d60d0e94
2 changed files with 25 additions and 3 deletions

View File

@ -254,9 +254,15 @@ void MipsFrameLowering::emitPrologue(MachineFunction &MF) const {
}
// Restore GP from the saved stack location
if (MipsFI->needGPSaveRestore())
BuildMI(MBB, MBBI, dl, TII.get(Mips::CPRESTORE))
.addImm(MFI->getObjectOffset(MipsFI->getGPFI()));
if (MipsFI->needGPSaveRestore()) {
unsigned Offset = MFI->getObjectOffset(MipsFI->getGPFI());
BuildMI(MBB, MBBI, dl, TII.get(Mips::CPRESTORE)).addImm(Offset);
if (Offset >= 0x8000) {
BuildMI(MBB, llvm::prior(MBBI), dl, TII.get(Mips::MACRO));
BuildMI(MBB, MBBI, dl, TII.get(Mips::NOMACRO));
}
}
}
void MipsFrameLowering::emitEpilogue(MachineFunction &MF,

View File

@ -0,0 +1,16 @@
; RUN: llc -march=mipsel < %s | FileCheck %s
; CHECK: .set macro
; CHECK-NEXT: .cprestore
; CHECK-NEXT: .set nomacro
%struct.S = type { [16384 x i32] }
define void @foo2() nounwind {
entry:
%s = alloca %struct.S, align 4
call void @foo1(%struct.S* byval %s)
ret void
}
declare void @foo1(%struct.S* byval)