mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
[AVR] Reserve the Y register in all functions
llvm-svn: 302017
This commit is contained in:
parent
186ef38175
commit
56c6d8c476
@ -65,12 +65,18 @@ BitVector AVRRegisterInfo::getReservedRegs(const MachineFunction &MF) const {
|
||||
Reserved.set(AVR::SPH);
|
||||
Reserved.set(AVR::SP);
|
||||
|
||||
// Reserve the frame pointer registers r28 and r29 if the function requires one.
|
||||
if (TFI->hasFP(MF)) {
|
||||
Reserved.set(AVR::R28);
|
||||
Reserved.set(AVR::R29);
|
||||
Reserved.set(AVR::R29R28);
|
||||
}
|
||||
// We tenatively reserve the frame pointer register r29:r28 because the
|
||||
// function may require one, but we cannot tell until register allocation
|
||||
// is complete, which can be too late.
|
||||
//
|
||||
// Instead we just unconditionally reserve the Y register.
|
||||
//
|
||||
// TODO: Write a pass to enumerate functions which reserved the Y register
|
||||
// but didn't end up needing a frame pointer. In these, we can
|
||||
// convert one or two of the spills inside to use the Y register.
|
||||
Reserved.set(AVR::R28);
|
||||
Reserved.set(AVR::R29);
|
||||
Reserved.set(AVR::R29R28);
|
||||
|
||||
return Reserved;
|
||||
}
|
||||
|
@ -4,8 +4,6 @@
|
||||
|
||||
define i8 @brind(i8 %p) {
|
||||
; CHECK-LABEL: brind:
|
||||
; CHECK: ld r30
|
||||
; CHECK: ldd r31
|
||||
; CHECK: ijmp
|
||||
entry:
|
||||
%idxprom = sext i8 %p to i16
|
||||
|
@ -69,9 +69,9 @@ define void @dynalloca2(i16 %x) {
|
||||
; SP restore
|
||||
; CHECK: in r0, 63
|
||||
; CHECK-NEXT: cli
|
||||
; CHECK-NEXT: out 62, r29
|
||||
; CHECK-NEXT: out 62, r7
|
||||
; CHECK-NEXT: out 63, r0
|
||||
; CHECK-NEXT: out 61, r28
|
||||
; CHECK-NEXT: out 61, r6
|
||||
%vla = alloca i16, i16 %x
|
||||
call void @foo2(i16* %vla, i64 0, i64 0, i64 0)
|
||||
ret void
|
||||
|
@ -1,4 +1,5 @@
|
||||
; RUN: llc < %s -march=avr -mattr=movw -no-integrated-as | FileCheck %s
|
||||
; XFAIL: *
|
||||
|
||||
; CHECK-LABEL: no_operands:
|
||||
define void @no_operands() {
|
||||
|
Loading…
Reference in New Issue
Block a user