From: Richard Kenner Date: Wed, 23 Oct 1996 14:48:36 +0000 (-0400) Subject: (can_combine_p): When SMALL_REGISTER_CLASSES is defined, avoid X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ecd4080946e1ac6014123a65161c96c48e13ef21;p=gcc.git (can_combine_p): When SMALL_REGISTER_CLASSES is defined, avoid substituting a return register into I3. From-SVN: r13006 --- diff --git a/gcc/combine.c b/gcc/combine.c index 5f07a35e1be..745427a11a1 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -960,11 +960,16 @@ can_combine_p (insn, i3, pred, succ, pdest, psrc) /* Don't extend the life of a hard register unless it is user variable (if we have few registers) or it can't fit into the desired register (meaning something special - is going on). */ + is going on). + Also avoid substituting a return register into I3, because + reload can't handle a conflict with constraints of other + inputs. */ || (REGNO (src) < FIRST_PSEUDO_REGISTER && (! HARD_REGNO_MODE_OK (REGNO (src), GET_MODE (src)) #ifdef SMALL_REGISTER_CLASSES || (! all_adjacent && ! REG_USERVAR_P (src)) + || (FUNCTION_VALUE_REGNO_P (REGNO (src)) + && ! REG_USERVAR_P (src)) #endif )))) return 0;