diff options
author | Richard Henderson <rth@cygnus.com> | 2000-01-28 13:21:49 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2000-01-28 13:21:49 -0800 |
commit | ae20388c7d5fea2bbea463fa0057468aa4a3b311 (patch) | |
tree | e15d1b8e09e399a4cb2f7ac75ac84465d4d558a0 /gcc | |
parent | a3e0a73bd7eb20ac5121a946486713f694373eda (diff) | |
download | gcc-ae20388c7d5fea2bbea463fa0057468aa4a3b311.zip gcc-ae20388c7d5fea2bbea463fa0057468aa4a3b311.tar.gz gcc-ae20388c7d5fea2bbea463fa0057468aa4a3b311.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/Makefile.in | 2 | ||||
-rw-r--r-- | gcc/flow.c | 44 |
3 files changed, 32 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b1c8859..c39ab7f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +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> * configure.in: Make --enable-cpplib the default. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 22ddebc..328611a 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1573,7 +1573,7 @@ unroll.o : unroll.c $(CONFIG_H) system.h $(RTL_H) insn-config.h function.h \ varray.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) \ - 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 \ 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 @@ -133,7 +133,6 @@ Boston, MA 02111-1307, USA. */ #include "except.h" #include "toplev.h" #include "recog.h" -#include "expr.h" #include "insn-flags.h" #include "obstack.h" @@ -2783,8 +2782,7 @@ static void mark_regs_live_at_end (set) regset set; { - tree return_decl, return_type; - rtx return_reg; + tree type; int i; /* If exiting needs the right stack value, consider the stack pointer @@ -2843,34 +2841,42 @@ mark_regs_live_at_end (set) /* Mark function return value. */ - return_decl = DECL_RESULT (current_function_decl); - return_type = TREE_TYPE (return_decl); - return_reg = DECL_RTL (return_decl); - if (return_reg) + type = TREE_TYPE (DECL_RESULT (current_function_decl)); + if (type != void_type_node) { - if (GET_CODE (return_reg) == REG - && REGNO (return_reg) < FIRST_PSEUDO_REGISTER) - { - /* Use hard_function_value to avoid examining a BLKmode register. */ - return_reg - = hard_function_value (return_type, current_function_decl, 1); - mark_reg (set, return_reg); - } - else if (GET_CODE (return_reg) == PARALLEL) + rtx outgoing; + + if (current_function_returns_struct + || current_function_returns_pcc_struct) + type = build_pointer_type (type); + +#ifdef FUNCTION_OUTGOING_VALUE + outgoing = FUNCTION_OUTGOING_VALUE (type, current_function_decl); +#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 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) { - rtx r = XVECEXP (return_reg, 0, i); + rtx r = XVECEXP (outgoing, 0, i); if (GET_CODE (r) == REG) mark_reg (set, r); } } + else + abort (); } } |