mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-17 04:24:00 +00:00
Mark that the return is using EAX so that we don't use it for some other
purpose. Fixes PR9080! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124903 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -735,6 +735,27 @@ void RAFast::handleThroughOperands(MachineInstr *MI,
|
|||||||
void RAFast::AllocateBasicBlock() {
|
void RAFast::AllocateBasicBlock() {
|
||||||
DEBUG(dbgs() << "\nAllocating " << *MBB);
|
DEBUG(dbgs() << "\nAllocating " << *MBB);
|
||||||
|
|
||||||
|
// FIXME: This should probably be added by instruction selection instead?
|
||||||
|
// If the last instruction in the block is a return, make sure to mark it as
|
||||||
|
// using all of the live-out values in the function. Things marked both call
|
||||||
|
// and return are tail calls; do not do this for them. The tail callee need
|
||||||
|
// not take the same registers as input that it produces as output, and there
|
||||||
|
// are dependencies for its input registers elsewhere.
|
||||||
|
if (!MBB->empty() && MBB->back().getDesc().isReturn() &&
|
||||||
|
!MBB->back().getDesc().isCall()) {
|
||||||
|
MachineInstr *Ret = &MBB->back();
|
||||||
|
|
||||||
|
for (MachineRegisterInfo::liveout_iterator
|
||||||
|
I = MF->getRegInfo().liveout_begin(),
|
||||||
|
E = MF->getRegInfo().liveout_end(); I != E; ++I) {
|
||||||
|
assert(TargetRegisterInfo::isPhysicalRegister(*I) &&
|
||||||
|
"Cannot have a live-out virtual register.");
|
||||||
|
|
||||||
|
// Add live-out registers as implicit uses.
|
||||||
|
Ret->addRegisterKilled(*I, TRI, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PhysRegState.assign(TRI->getNumRegs(), regDisabled);
|
PhysRegState.assign(TRI->getNumRegs(), regDisabled);
|
||||||
assert(LiveVirtRegs.empty() && "Mapping not cleared form last block?");
|
assert(LiveVirtRegs.empty() && "Mapping not cleared form last block?");
|
||||||
|
|
||||||
|
14
test/CodeGen/X86/2011-02-04-FastRegallocNoFP.ll
Normal file
14
test/CodeGen/X86/2011-02-04-FastRegallocNoFP.ll
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
; RUN: llc -O0 < %s | FileCheck %s
|
||||||
|
|
||||||
|
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
||||||
|
target triple = "x86_64-unknown-linux-gnu"
|
||||||
|
|
||||||
|
declare i32 @foo()
|
||||||
|
|
||||||
|
define i32 @bar() nounwind {
|
||||||
|
; CHECK: bar
|
||||||
|
; CHECK-NOT: pop.*ax
|
||||||
|
%call = call i32 @foo()
|
||||||
|
ret i32 %call
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user