OSDN Git Service

Daily bump.
[pf3gnuchains/gcc-fork.git] / gcc / calls.c
index 6eb1f21..1413c8d 100644 (file)
@@ -742,7 +742,7 @@ precompute_register_parameters (int num_actuals, struct arg_data *args,
                     || (GET_CODE (args[i].value) == SUBREG
                         && REG_P (SUBREG_REG (args[i].value)))))
                 && args[i].mode != BLKmode
-                && rtx_cost (args[i].value, SET, optimize_insn_for_speed_p ())
+                && set_src_cost (args[i].value, optimize_insn_for_speed_p ())
                    > COSTS_N_INSNS (1)
                 && ((*reg_parm_seen
                      && targetm.small_register_classes_for_mode_p (args[i].mode))
@@ -1756,7 +1756,8 @@ load_register_parameters (struct arg_data *args, int num_actuals,
          if (GET_CODE (reg) == PARALLEL)
            use_group_regs (call_fusage, reg);
          else if (nregs == -1)
-           use_reg (call_fusage, reg);
+           use_reg_mode (call_fusage, reg,
+                         TYPE_MODE (TREE_TYPE (args[i].tree_value)));
          else if (nregs > 0)
            use_regs (call_fusage, REGNO (reg), nregs);
        }
@@ -2815,10 +2816,10 @@ expand_call (tree exp, rtx target, int ignore)
              }
 
          if (args[i].stack)
-           call_fusage = gen_rtx_EXPR_LIST (VOIDmode,
-                                            gen_rtx_USE (VOIDmode,
-                                                         args[i].stack),
-                                            call_fusage);
+           call_fusage
+             = gen_rtx_EXPR_LIST (TYPE_MODE (TREE_TYPE (args[i].tree_value)),
+                                  gen_rtx_USE (VOIDmode, args[i].stack),
+                                  call_fusage);
        }
 
       /* If we have a parm that is passed in registers but not in memory
@@ -3128,18 +3129,12 @@ expand_call (tree exp, rtx target, int ignore)
 
       if (old_stack_level)
        {
-         rtx last, set;
+         rtx prev = get_last_insn ();
 
          emit_stack_restore (SAVE_BLOCK, old_stack_level);
          stack_pointer_delta = old_stack_pointer_delta;
 
-         /* ??? Is this assert warrented, given emit_stack_restore?
-            or should we just mark the last insn no matter what?  */
-         last = get_last_insn ();
-         set = single_set (last);
-         gcc_assert (set != NULL);
-         gcc_assert (SET_DEST (set) == stack_pointer_rtx);
-         add_reg_note (last, REG_ARGS_SIZE, GEN_INT (stack_pointer_delta));
+         fixup_args_size_notes (prev, get_last_insn (), stack_pointer_delta);
 
          pending_stack_adjust = old_pending_adj;
          old_stack_allocated = stack_pointer_delta - pending_stack_adjust;