[Bug target/38900] ICE: unable to find a register to spill
ebotcazou at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Mon Jul 6 12:50:00 GMT 2009
------- Comment #8 from ebotcazou at gcc dot gnu dot org 2009-07-06 12:49 -------
> Index: config/i386/i386.md
> ===================================================================
> --- config/i386/i386.md (revision 149152)
> +++ config/i386/i386.md (working copy)
> @@ -15536,7 +15536,7 @@
> [(set_attr "type" "call")])
>
> (define_insn "*sibcall_1"
> - [(call (mem:QI (match_operand:SI 0 "sibcall_insn_operand" "s,c,d,a"))
> + [(call (mem:QI (match_operand:SI 0 "sibcall_insn_operand" "s,c,d,a,b"))
> (match_operand 1 "" ""))]
> "SIBLING_CALL_P (insn) && !TARGET_64BIT"
> {
> @@ -22183,7 +22183,7 @@
>
> (define_insn "*sibcall_value_1"
> [(set (match_operand 0 "" "")
> - (call (mem:QI (match_operand:SI 1 "sibcall_insn_operand" "s,c,d,a"))
> + (call (mem:QI (match_operand:SI 1 "sibcall_insn_operand" "s,c,d,a,b"))
> (match_operand:SI 2 "" "")))]
> "SIBLING_CALL_P (insn) && !TARGET_64BIT"
> {
This cannot be correct in the general case as %ebx is call-saved, you cannot
clobber it through a function call. A solution could be to disparage the 'c'
alternative, but a x86 maintainer will know better.
--
ebotcazou at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |ebotcazou at gcc dot gnu dot
| |org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38900
More information about the Gcc-bugs
mailing list