diff options
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/gcc/function.c b/gcc/function.c index d616f5f..cdfcc4b 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -3013,8 +3013,8 @@ assign_parm_setup_block (struct assign_parm_data_all *all, to the value directly in mode MODE, otherwise we must start with the register in word_mode and explicitly convert it. */ - if (targetm.truly_noop_truncation (size * BITS_PER_UNIT, - BITS_PER_WORD)) + if (mode == word_mode + || TRULY_NOOP_TRUNCATION_MODES_P (mode, word_mode)) reg = gen_rtx_REG (mode, REGNO (entry_parm)); else { @@ -3913,9 +3913,8 @@ gimplify_parameters (gimple_seq *cleanup) as we'll query that flag during gimplification. */ if (TREE_ADDRESSABLE (parm)) TREE_ADDRESSABLE (local) = 1; - else if (TREE_CODE (type) == COMPLEX_TYPE - || TREE_CODE (type) == VECTOR_TYPE) - DECL_GIMPLE_REG_P (local) = 1; + if (DECL_NOT_GIMPLE_REG_P (parm)) + DECL_NOT_GIMPLE_REG_P (local) = 1; if (!is_gimple_reg (local) && flag_stack_reuse != SR_NONE) |