+2013-10-19 Uros Bizjak <ubizjak@gmail.com>
+
+ * mode-switching.c (create_pre_exit): Rename maybe_builtin_apply
+ to multi_reg_return. Clarify that we are skipping USEs of multiple
+ return registers. Use bool type where appropriate.
+
2013-10-18 Jan Hubicka <jh@suse.cz>
* config/i386/i386.h (ACCUMULATE_OUTGOING_ARGS): Disable accumulation
(X86_TUNE_PUSH_MEMORY): Likewise.
(X86_TUNE_AVX256_UNALIGNED_LOAD_OPTIMAL,
X86_TUNE_AVX256_UNALIGNED_STORE_OPTIMAL): New.
- (X86_TUNE_ACCUMULATE_OUTGOING_ARGS, X86_TUNE_ALWAYS_FANCY_MATH_387): New.
+ (X86_TUNE_ACCUMULATE_OUTGOING_ARGS, X86_TUNE_ALWAYS_FANCY_MATH_387):
+ New.
* i386.c (x86_accumulate_outgoing_args, x86_arch_always_fancy_math_387,
x86_avx256_split_unaligned_load, x86_avx256_split_unaligned_store):
Remove.
2013-10-18 Andrew MacLeod <amacleod@redhat.com>
- * tree-ssa.h: Don't include gimple-low.h, tree-ssa-address.h, sbitmap.h,
- tree-ssa-threadedge.h, tree-ssa-dom.h, and tree-cfgcleanup.h.
+ * tree-ssa.h: Don't include gimple-low.h, tree-ssa-address.h,
+ sbitmap.h, tree-ssa-threadedge.h, tree-ssa-dom.h and tree-cfgcleanup.h.
* gimple-low.c (gimple_check_call_arg,
gimple_check_call_matching_types): Move to cgraph.c.
* gimple-low.h: Remove prototype.
* tree-ssa-threadupdate.c: Do not include "tm.h" or "tm_p.h".
* tree-ssa-threadupdate.c: Include "dbgcnt.h".
- (register_jump_thread): Add "registered_jump_thread" debug counter support.
+ (register_jump_thread): Add "registered_jump_thread" debug
+ counter support.
* dbgcnt.def (registered_jump_thread): New debug counter.
2013-10-18 Andrew MacLeod <amacleod@redhat.com>
int ret_start = REGNO (ret_reg);
int nregs = hard_regno_nregs[ret_start][GET_MODE (ret_reg)];
int ret_end = ret_start + nregs;
- int short_block = 0;
- int maybe_builtin_apply = 0;
- int forced_late_switch = 0;
+ bool short_block = false;
+ bool multi_reg_return = false;
+ bool forced_late_switch = false;
rtx before_return_copy;
do
copy yet, the copy must have been deleted. */
if (CALL_P (return_copy))
{
- short_block = 1;
+ short_block = true;
break;
}
return_copy_pat = PATTERN (return_copy);
switch (GET_CODE (return_copy_pat))
{
case USE:
- /* Skip __builtin_apply pattern. */
+ /* Skip USEs of multiple return registers.
+ __builtin_apply pattern is also handled here. */
if (GET_CODE (XEXP (return_copy_pat, 0)) == REG
&& (targetm.calls.function_value_regno_p
(REGNO (XEXP (return_copy_pat, 0)))))
{
- maybe_builtin_apply = 1;
+ multi_reg_return = true;
last_insn = return_copy;
continue;
}
there are no return copy insns at all. This
avoids an ice on that invalid function. */
if (ret_start + nregs == ret_end)
- short_block = 1;
+ short_block = true;
break;
}
if (!targetm.calls.function_value_regno_p (copy_start))
another mode than MODE_EXIT, even if it is
unrelated to the return value, so we want to put
the final mode switch after it. */
- if (maybe_builtin_apply
+ if (multi_reg_return
&& targetm.calls.function_value_regno_p
(copy_start))
- forced_late_switch = 1;
+ forced_late_switch = true;
/* For the SH4, floating point loads depend on fpscr,
thus we might need to put the final mode switch
if (copy_start >= ret_start
&& copy_start + copy_num <= ret_end
&& OBJECT_P (SET_SRC (return_copy_pat)))
- forced_late_switch = 1;
+ forced_late_switch = true;
break;
}
if (copy_num == 0)
if (copy_start >= ret_start
&& copy_start + copy_num <= ret_end)
nregs -= copy_num;
- else if (!maybe_builtin_apply
+ else if (!multi_reg_return
|| !targetm.calls.function_value_regno_p
(copy_start))
break;
isolated use. */
if (return_copy == BB_HEAD (src_bb))
{
- short_block = 1;
+ short_block = true;
break;
}
last_insn = return_copy;