diff options
author | Chris Lattner <sabre@nondot.org> | 2006-03-17 17:27:47 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-03-17 17:27:47 +0000 |
commit | 89fad2c3b27f62c53a807839c752626f2b11142f (patch) | |
tree | 770066debf29738766159cdb8211a4989352cfd4 | |
parent | 64f9930ea4cc0a338063e461dfd9305b8ca1105c (diff) |
Disable x86 fastcc from passing args in registers
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26824 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/X86ISelLowering.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 7374855c4a..c17795f394 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -639,12 +639,24 @@ static unsigned AddLiveIn(MachineFunction &MF, unsigned PReg, return VReg; } -enum { - // FASTCC_NUM_INT_ARGS_INREGS - This is the max number of integer arguments - // to pass in registers. 0 is none, 1 is is "use EAX", 2 is "use EAX and - // EDX". Anything more is illegal. - FASTCC_NUM_INT_ARGS_INREGS = 2 -}; +// FASTCC_NUM_INT_ARGS_INREGS - This is the max number of integer arguments +// to pass in registers. 0 is none, 1 is is "use EAX", 2 is "use EAX and +// EDX". Anything more is illegal. +// +// FIXME: The linscan register allocator currently has problem with +// coallescing. At the time of this writing, whenever it decides to coallesce +// a physreg with a virtreg, this increases the size of the physreg's live +// range, and the live range cannot ever be reduced. This causes problems if +// too many physregs are coalleced with virtregs, which can cause the register +// allocator to wedge itself. +// +// This code triggers this problem more often if we pass args in registers, +// so disable it until this is fixed. +// +// NOTE: this isn't marked const, so that GCC doesn't emit annoying warnings +// about code being dead. +// +static unsigned FASTCC_NUM_INT_ARGS_INREGS = 0; std::vector<SDOperand> |