Commit ae20388c by Richard Henderson Committed by Richard Henderson

Makefile.in (flow.o): Revert 24 Jan change.

        * Makefile.in (flow.o): Revert 24 Jan change.
        * flow.c (mark_regs_live_at_end): Likewise.  Force BLKmode
        FUNCTION_VALUE result to DECL_RESULT's mode.

From-SVN: r31674
parent a3e0a73b
2000-01-28 Richard Henderson <rth@cygnus.com>
* Makefile.in (flow.o): Revert 24 Jan change.
* flow.c (mark_regs_live_at_end): Likewise. Force BLKmode
FUNCTION_VALUE result to DECL_RESULT's mode.
2000-01-28 Zack Weinberg <zack@wolery.cumb.org> 2000-01-28 Zack Weinberg <zack@wolery.cumb.org>
* configure.in: Make --enable-cpplib the default. * configure.in: Make --enable-cpplib the default.
......
...@@ -1573,7 +1573,7 @@ unroll.o : unroll.c $(CONFIG_H) system.h $(RTL_H) insn-config.h function.h \ ...@@ -1573,7 +1573,7 @@ unroll.o : unroll.c $(CONFIG_H) system.h $(RTL_H) insn-config.h function.h \
varray.h varray.h
flow.o : flow.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h insn-config.h \ flow.o : flow.c $(CONFIG_H) system.h $(RTL_H) $(TREE_H) flags.h insn-config.h \
$(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
insn-flags.h function.h except.h $(EXPR_H) insn-flags.h function.h except.h
combine.o : combine.c $(CONFIG_H) system.h $(RTL_H) flags.h function.h \ combine.o : combine.c $(CONFIG_H) system.h $(RTL_H) flags.h function.h \
insn-config.h insn-flags.h insn-codes.h insn-attr.h $(REGS_H) $(EXPR_H) \ insn-config.h insn-flags.h insn-codes.h insn-attr.h $(REGS_H) $(EXPR_H) \
$(BASIC_BLOCK_H) $(RECOG_H) real.h hard-reg-set.h toplev.h $(BASIC_BLOCK_H) $(RECOG_H) real.h hard-reg-set.h toplev.h
......
...@@ -133,7 +133,6 @@ Boston, MA 02111-1307, USA. */ ...@@ -133,7 +133,6 @@ Boston, MA 02111-1307, USA. */
#include "except.h" #include "except.h"
#include "toplev.h" #include "toplev.h"
#include "recog.h" #include "recog.h"
#include "expr.h"
#include "insn-flags.h" #include "insn-flags.h"
#include "obstack.h" #include "obstack.h"
...@@ -2783,8 +2782,7 @@ static void ...@@ -2783,8 +2782,7 @@ static void
mark_regs_live_at_end (set) mark_regs_live_at_end (set)
regset set; regset set;
{ {
tree return_decl, return_type; tree type;
rtx return_reg;
int i; int i;
/* If exiting needs the right stack value, consider the stack pointer /* If exiting needs the right stack value, consider the stack pointer
...@@ -2843,34 +2841,42 @@ mark_regs_live_at_end (set) ...@@ -2843,34 +2841,42 @@ mark_regs_live_at_end (set)
/* Mark function return value. */ /* Mark function return value. */
return_decl = DECL_RESULT (current_function_decl); type = TREE_TYPE (DECL_RESULT (current_function_decl));
return_type = TREE_TYPE (return_decl); if (type != void_type_node)
return_reg = DECL_RTL (return_decl);
if (return_reg)
{ {
if (GET_CODE (return_reg) == REG rtx outgoing;
&& REGNO (return_reg) < FIRST_PSEUDO_REGISTER)
{ if (current_function_returns_struct
/* Use hard_function_value to avoid examining a BLKmode register. */ || current_function_returns_pcc_struct)
return_reg type = build_pointer_type (type);
= hard_function_value (return_type, current_function_decl, 1);
mark_reg (set, return_reg); #ifdef FUNCTION_OUTGOING_VALUE
} outgoing = FUNCTION_OUTGOING_VALUE (type, current_function_decl);
else if (GET_CODE (return_reg) == PARALLEL) #else
outgoing = FUNCTION_VALUE (type, current_function_decl);
#endif
if (GET_MODE (outgoing) == BLKmode)
PUT_MODE (outgoing, DECL_RTL (DECL_RESULT (current_function_decl)));
if (GET_CODE (outgoing) == REG)
mark_reg (set, outgoing);
else if (GET_CODE (outgoing) == PARALLEL)
{ {
int len = XVECLEN (return_reg, 0); int len = XVECLEN (outgoing, 0);
/* Check for a NULL entry, used to indicate that the parameter /* Check for a NULL entry, used to indicate that the parameter
goes on the stack and in registers. */ goes on the stack and in registers. */
i = (XEXP (XVECEXP (return_reg, 0, 0), 0) ? 0 : 1); i = (XEXP (XVECEXP (outgoing, 0, 0), 0) ? 0 : 1);
for ( ; i < len; ++i) for ( ; i < len; ++i)
{ {
rtx r = XVECEXP (return_reg, 0, i); rtx r = XVECEXP (outgoing, 0, i);
if (GET_CODE (r) == REG) if (GET_CODE (r) == REG)
mark_reg (set, r); mark_reg (set, r);
} }
} }
else
abort ();
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment