OSDN Git Service

* config/darwin.c (machopic_symbol_defined_p): In addition to
[pf3gnuchains/gcc-fork.git] / gcc / calls.c
index 8b28c46..2e500bd 100644 (file)
@@ -691,7 +691,7 @@ precompute_register_parameters (int num_actuals, struct arg_data *args, int *reg
            && args[i].mode != BLKmode
            && rtx_cost (args[i].value, SET) > COSTS_N_INSNS (1)
            && ((SMALL_REGISTER_CLASSES && *reg_parm_seen)
-               || preserve_subexpressions_p ()))
+               || optimize))
          args[i].value = copy_to_mode_reg (args[i].mode, args[i].value);
       }
 }
@@ -1505,8 +1505,7 @@ load_register_parameters (struct arg_data *args, int num_actuals,
                     seem worth generating rtl to say that.  */
                  reg = gen_rtx_REG (word_mode, REGNO (reg));
                  x = expand_shift (LSHIFT_EXPR, word_mode, reg,
-                                   build_int_cst (NULL_TREE, FIXMEFORMAT
-                                                  shift, 0),
+                                   build_int_cst (NULL_TREE, shift),
                                    reg, 1);
                  if (x != reg)
                    emit_move_insn (reg, x);
@@ -1544,7 +1543,7 @@ load_register_parameters (struct arg_data *args, int num_actuals,
 
                  emit_move_insn (x, tem);
                  x = expand_shift (dir, word_mode, x,
-                                   build_int_cst (NULL_TREE, shift, 0),
+                                   build_int_cst (NULL_TREE, shift),
                                    ri, 1);
                  if (x != ri)
                    emit_move_insn (ri, x);
@@ -1785,45 +1784,6 @@ purge_reg_equiv_notes (void)
     }
 }
 
-/* Clear RTX_UNCHANGING_P flag of incoming argument MEMs.  */
-
-static void
-purge_mem_unchanging_flag (rtx x)
-{
-  RTX_CODE code;
-  int i, j;
-  const char *fmt;
-
-  if (x == NULL_RTX)
-    return;
-
-  code = GET_CODE (x);
-
-  if (code == MEM)
-    {
-      if (RTX_UNCHANGING_P (x)
-         && (XEXP (x, 0) == current_function_internal_arg_pointer
-             || (GET_CODE (XEXP (x, 0)) == PLUS
-                 && XEXP (XEXP (x, 0), 0) ==
-                    current_function_internal_arg_pointer
-                 && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT)))
-       RTX_UNCHANGING_P (x) = 0;
-      return;
-    }
-
-  /* Scan all subexpressions.  */
-  fmt = GET_RTX_FORMAT (code);
-  for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
-    {
-      if (*fmt == 'e')
-       purge_mem_unchanging_flag (XEXP (x, i));
-      else if (*fmt == 'E')
-       for (j = 0; j < XVECLEN (x, i); j++)
-         purge_mem_unchanging_flag (XVECEXP (x, i, j));
-    }
-}
-
-
 /* Generate all the code for a function call
    and return an rtx for its value.
    Store the value in TARGET (specified as an rtx) if convenient.
@@ -3004,22 +2964,6 @@ expand_call (tree exp, rtx target, int ignore)
        if (args[i].aligned_regs)
          free (args[i].aligned_regs);
 
-      /* If this function is returning into a memory location marked as
-        readonly, it means it is initializing that location. We normally treat
-        functions as not clobbering such locations, so we need to specify that
-        this one does. We do this by adding the appropriate CLOBBER to the
-        CALL_INSN function usage list.  This cannot be done by emitting a
-        standalone CLOBBER after the call because the latter would be ignored
-        by at least the delay slot scheduling pass. We do this now instead of
-        adding to call_fusage before the call to emit_call_1 because TARGET
-        may be modified in the meantime.  */
-      if (structure_value_addr != 0 && target != 0
-         && MEM_P (target) && RTX_UNCHANGING_P (target))
-       add_function_usage_to
-         (last_call_insn (),
-          gen_rtx_EXPR_LIST (VOIDmode, gen_rtx_CLOBBER (VOIDmode, target),
-                             NULL_RTX));
-
       insns = get_insns ();
       end_sequence ();
 
@@ -3100,32 +3044,7 @@ expand_call (tree exp, rtx target, int ignore)
 void
 fixup_tail_calls (void)
 {
-  rtx insn;
-  tree arg;
-
   purge_reg_equiv_notes ();
-
-  /* A sibling call sequence also may invalidate RTX_UNCHANGING_P
-     flag of some incoming arguments MEM RTLs, because it can write into
-     those slots.  We clear all those bits now.
-
-     This is (slight) overkill, we could keep track of which arguments
-     we actually write into.  */
-  for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
-    {
-      if (INSN_P (insn))
-       purge_mem_unchanging_flag (PATTERN (insn));
-    }
-
-  /* Similarly, invalidate RTX_UNCHANGING_P for any incoming
-     arguments passed in registers.  */
-  for (arg = DECL_ARGUMENTS (current_function_decl);
-       arg;
-       arg = TREE_CHAIN (arg))
-    {
-      if (REG_P (DECL_RTL (arg)))
-       RTX_UNCHANGING_P (DECL_RTL (arg)) = false;
-    }
 }
 
 /* Traverse an argument list in VALUES and expand all complex