aboutsummaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorEdward Smith-Rowland <3dw4rd@verizon.net>2017-07-20 14:54:44 +0000
committerEdward Smith-Rowland <3dw4rd@verizon.net>2017-07-20 14:54:44 +0000
commit3acaf2e51caf356a9afc763cfd70b91d1ab094b5 (patch)
treef13b1087143457ae5c053b6ec3b664c2aaeab169 /gcc/calls.c
parentc4d46197c5fe4461da59ce027bc68306c43186b0 (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.c18
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