Makefile.in (flow.o): Revert 24 Jan change.
authorRichard Henderson <rth@cygnus.com>
Fri, 28 Jan 2000 21:21:49 +0000 (13:21 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Fri, 28 Jan 2000 21:21:49 +0000 (13:21 -0800)
        * 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

gcc/ChangeLog
gcc/Makefile.in
gcc/flow.c

index b1c88590037dce7c9f0396a18f1986dc75e61163..c39ab7fd81907b90e649cf56fbe139e73020f06a 100644 (file)
@@ -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.
index 22ddebcc2f8577873957d02830eea2f099f651d4..328611af2e8f51831577a698bab1f2181a9d0c83 100644 (file)
@@ -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
index bee21d29b0beaf2a4e2088647131aab7bb0ffecb..008f0c2753f57b24db5977e66bfbc2a29cd272c8 100644 (file)
@@ -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 ();
     }
 }