From 3bed7476767d4ccf3e691c64c56db379af68c693 Mon Sep 17 00:00:00 2001 From: rsandifo Date: Wed, 20 Dec 2017 12:54:55 +0000 Subject: [PATCH] poly_int: ipa_parm_adjustment This patch changes the type of ipa_parm_adjustment::offset from HOST_WIDE_INT to poly_int64 and updates uses accordingly. 2017-12-20 Richard Sandiford Alan Hayward David Sherwood gcc/ * ipa-param-manipulation.h (ipa_parm_adjustment::offset): Change from HOST_WIDE_INT to poly_int64_pod. * ipa-param-manipulation.c (ipa_modify_call_arguments): Track polynomail parameter offsets. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255885 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 9 +++++++++ gcc/ipa-param-manipulation.c | 21 ++++++++++----------- gcc/ipa-param-manipulation.h | 2 +- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7bb3f5d5371..a909fa79349 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -2,6 +2,15 @@ Alan Hayward David Sherwood + * ipa-param-manipulation.h (ipa_parm_adjustment::offset): Change from + HOST_WIDE_INT to poly_int64_pod. + * ipa-param-manipulation.c (ipa_modify_call_arguments): Track + polynomail parameter offsets. + +2017-12-20 Richard Sandiford + Alan Hayward + David Sherwood + * gengtype.c (main): Handle poly_int64_pod. * dwarf2out.h (dw_cfi_oprnd_cfa_loc): New dw_cfi_oprnd_type. (dw_cfi_oprnd::dw_cfi_cfa_loc): New field. diff --git a/gcc/ipa-param-manipulation.c b/gcc/ipa-param-manipulation.c index bcc736b99c0..3d559f5b5a4 100644 --- a/gcc/ipa-param-manipulation.c +++ b/gcc/ipa-param-manipulation.c @@ -293,15 +293,14 @@ ipa_modify_call_arguments (struct cgraph_edge *cs, gcall *stmt, simply taking the address of a reference inside the original aggregate. */ - gcc_checking_assert (adj->offset % BITS_PER_UNIT == 0); + poly_int64 byte_offset = exact_div (adj->offset, BITS_PER_UNIT); base = gimple_call_arg (stmt, adj->base_index); loc = DECL_P (base) ? DECL_SOURCE_LOCATION (base) : EXPR_LOCATION (base); if (TREE_CODE (base) != ADDR_EXPR && POINTER_TYPE_P (TREE_TYPE (base))) - off = build_int_cst (adj->alias_ptr_type, - adj->offset / BITS_PER_UNIT); + off = build_int_cst (adj->alias_ptr_type, byte_offset); else { HOST_WIDE_INT base_offset; @@ -321,8 +320,7 @@ ipa_modify_call_arguments (struct cgraph_edge *cs, gcall *stmt, if (!base) { base = build_fold_addr_expr (prev_base); - off = build_int_cst (adj->alias_ptr_type, - adj->offset / BITS_PER_UNIT); + off = build_int_cst (adj->alias_ptr_type, byte_offset); } else if (TREE_CODE (base) == MEM_REF) { @@ -332,8 +330,7 @@ ipa_modify_call_arguments (struct cgraph_edge *cs, gcall *stmt, deref_align = TYPE_ALIGN (TREE_TYPE (base)); } off = build_int_cst (adj->alias_ptr_type, - base_offset - + adj->offset / BITS_PER_UNIT); + base_offset + byte_offset); off = int_const_binop (PLUS_EXPR, TREE_OPERAND (base, 1), off); base = TREE_OPERAND (base, 0); @@ -341,8 +338,7 @@ ipa_modify_call_arguments (struct cgraph_edge *cs, gcall *stmt, else { off = build_int_cst (adj->alias_ptr_type, - base_offset - + adj->offset / BITS_PER_UNIT); + base_offset + byte_offset); base = build_fold_addr_expr (base); } } @@ -655,7 +651,7 @@ ipa_get_adjustment_candidate (tree **expr, bool *convert, struct ipa_parm_adjustment *adj = &adjustments[i]; if (adj->base == base - && (adj->offset == offset || adj->op == IPA_PARM_OP_REMOVE)) + && (known_eq (adj->offset, offset) || adj->op == IPA_PARM_OP_REMOVE)) { cand = adj; break; @@ -756,7 +752,10 @@ ipa_dump_param_adjustments (FILE *file, ipa_parm_adjustment_vec adjustments, else if (adj->op == IPA_PARM_OP_REMOVE) fprintf (file, ", remove_param"); else - fprintf (file, ", offset %li", (long) adj->offset); + { + fprintf (file, ", offset "); + print_dec (adj->offset, file); + } if (adj->by_ref) fprintf (file, ", by_ref"); print_node_brief (file, ", type: ", adj->type, 0); diff --git a/gcc/ipa-param-manipulation.h b/gcc/ipa-param-manipulation.h index 364e4489c29..7bf942fe2c3 100644 --- a/gcc/ipa-param-manipulation.h +++ b/gcc/ipa-param-manipulation.h @@ -84,7 +84,7 @@ struct ipa_parm_adjustment /* Offset into the original parameter (for the cases when the new parameter is a component of an original one). */ - HOST_WIDE_INT offset; + poly_int64_pod offset; /* Zero based index of the original parameter this one is based on. */ int base_index; -- 2.11.4.GIT