diff options
author | Edward Smith-Rowland <3dw4rd@verizon.net> | 2017-07-20 14:54:44 +0000 |
---|---|---|
committer | Edward Smith-Rowland <3dw4rd@verizon.net> | 2017-07-20 14:54:44 +0000 |
commit | 3acaf2e51caf356a9afc763cfd70b91d1ab094b5 (patch) | |
tree | f13b1087143457ae5c053b6ec3b664c2aaeab169 /gcc/calls.c | |
parent | c4d46197c5fe4461da59ce027bc68306c43186b0 (diff) |
Merged revisions r232323 through r250392 to the branch
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/tr29124@250393 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/calls.c')
-rw-r--r-- | gcc/calls.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/gcc/calls.c b/gcc/calls.c index c92e35ea5a8..8a23b50fc66 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -821,6 +821,8 @@ flags_from_decl_or_type (const_tree exp) flags |= ECF_NOVOPS; if (lookup_attribute ("leaf", DECL_ATTRIBUTES (exp))) flags |= ECF_LEAF; + if (lookup_attribute ("cold", DECL_ATTRIBUTES (exp))) + flags |= ECF_COLD; if (TREE_NOTHROW (exp)) flags |= ECF_NOTHROW; @@ -1164,7 +1166,7 @@ store_unaligned_arguments_into_pseudos (struct arg_data *args, int num_actuals) args[i].aligned_regs[j] = reg; word = extract_bit_field (word, bitsize, 0, 1, NULL_RTX, - word_mode, word_mode, false); + word_mode, word_mode, false, NULL); /* There is no need to restrict this code to loading items in TYPE_ALIGN sized hunks. The bitfield instructions can @@ -1270,7 +1272,7 @@ get_size_range (tree exp, tree range[2]) wide_int min, max; enum value_range_type range_type - = (TREE_CODE (exp) == SSA_NAME + = ((TREE_CODE (exp) == SSA_NAME && INTEGRAL_TYPE_P (TREE_TYPE (exp))) ? get_range_info (exp, &min, &max) : VR_VARYING); if (range_type == VR_VARYING) @@ -2557,7 +2559,8 @@ load_register_parameters (struct arg_data *args, int num_actuals, unsigned int bitoff = (nregs - 1) * BITS_PER_WORD; unsigned int bitsize = size * BITS_PER_UNIT - bitoff; rtx x = extract_bit_field (mem, bitsize, bitoff, 1, dest, - word_mode, word_mode, false); + word_mode, word_mode, false, + NULL); if (BYTES_BIG_ENDIAN) x = expand_shift (LSHIFT_EXPR, word_mode, x, BITS_PER_WORD - bitsize, dest, 1); @@ -2644,13 +2647,8 @@ combine_pending_stack_adjustment_and_call (int unadjusted_args_size, adjustment = pending_stack_adjust; /* Push enough additional bytes that the stack will be aligned after the arguments are pushed. */ - if (preferred_unit_stack_boundary > 1) - { - if (unadjusted_alignment > 0) - adjustment -= preferred_unit_stack_boundary - unadjusted_alignment; - else - adjustment += unadjusted_alignment; - } + if (preferred_unit_stack_boundary > 1 && unadjusted_alignment) + adjustment -= preferred_unit_stack_boundary - unadjusted_alignment; /* Now, sets ARGS_SIZE->CONSTANT so that we pop the right number of bytes after the call. The right number is the entire |