On Wed, Jun 26, 2019 at 12:57:15PM +0200, Martin Liška wrote: > --- a/gcc/asan.c > +++ b/gcc/asan.c > @@ -1713,8 +1713,8 @@ asan_emit_allocas_unpoison (rtx top, rtx bot, rtx_insn > *before) > rtx ret = init_one_libfunc ("__asan_allocas_unpoison"); > top = convert_memory_address (ptr_mode, top); > bot = convert_memory_address (ptr_mode, bot); > - ret = emit_library_call_value (ret, NULL_RTX, LCT_NORMAL, ptr_mode, > - top, ptr_mode, bot, ptr_mode); > + emit_library_call_value (ret, NULL_RTX, LCT_NORMAL, ptr_mode, > + top, ptr_mode, bot, ptr_mode);
If you don't need the return value, you should use emit_library_call, not emit_library_call_value. > --- a/gcc/cfgexpand.c > +++ b/gcc/cfgexpand.c > @@ -3044,7 +3044,7 @@ expand_asm_stmt (gasm *stmt) > } > } > } > - unsigned nclobbers = clobber_rvec.length(); > + unsigned nclobbers; Can you instead move the nclobbers declaration to the spot where it is initialized (right now the second time), and add space before ( there too? > --- a/gcc/config/i386/i386-expand.c > +++ b/gcc/config/i386/i386-expand.c > @@ -16051,8 +16051,6 @@ ix86_expand_rounddf_32 (rtx operand0, rtx operand1) > mhalf = expand_simple_binop (mode, MINUS, half, one, NULL_RTX, > 0, OPTAB_DIRECT); > > - /* Compensate. */ > - tmp = gen_reg_rtx (mode); > /* xa2 = xa2 - (dxa > 0.5 ? 1 : 0) */ > tmp = ix86_expand_sse_compare_mask (UNGT, dxa, half, false); > emit_insn (gen_rtx_SET (tmp, gen_rtx_AND (mode, one, tmp))); Is this really desirable? Just quick look suggests perhaps it wants to use one temporary for the gen_reg_rtx (mode) and use that on the lhs of SET, and another one as the last operand to AND holding ix86_expand_sse_compare_mask? Though, such problem is in most of the ix86_expand_sse_compare_mask callers. While ix86_expand_sse_compare_mask returns a result of gen_reg_rtx too, I think it is better not to reuse pseudos for different values. I'd say take out this change and deal with it with i386 maintainers separately. > --- a/gcc/tree-vect-stmts.c > +++ b/gcc/tree-vect-stmts.c > @@ -3483,8 +3483,7 @@ vectorizable_call (stmt_vec_info stmt_info, > gimple_stmt_iterator *gsi, > = gimple_build_call_internal_vec (ifn, vargs); > gimple_call_set_lhs (call, half_res); > gimple_call_set_nothrow (call, true); > - new_stmt_info > - = vect_finish_stmt_generation (stmt_info, call, gsi); > + vect_finish_stmt_generation (stmt_info, call, gsi); > if ((i & 1) == 0) > { > prev_res = half_res; > @@ -3583,8 +3582,7 @@ vectorizable_call (stmt_vec_info stmt_info, > gimple_stmt_iterator *gsi, > gcall *call = gimple_build_call_internal_vec (ifn, vargs); > gimple_call_set_lhs (call, half_res); > gimple_call_set_nothrow (call, true); > - new_stmt_info > - = vect_finish_stmt_generation (stmt_info, call, gsi); > + vect_finish_stmt_generation (stmt_info, call, gsi); > if ((j & 1) == 0) > { > prev_res = half_res; This looks wrong. There should have been SLP_TREE_VEC_STMTS (slp_node).quick_push (new_stmt_info); in between for slp_node, or the usual code like: if (cond_for_first) STMT_VINFO_VEC_STMT (stmt_info) = *vec_stmt = new_stmt_info; else STMT_VINFO_RELATED_STMT (prev_stmt_info) = new_stmt_info; prev_stmt_info = new_stmt_info; otherwise. In any case, I think this should be dealt with separately. Jakub