This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [018/nnn] poly_int: MEM_OFFSET and MEM_SIZE


On 10/23/2017 11:07 AM, Richard Sandiford wrote:
> This patch changes the MEM_OFFSET and MEM_SIZE memory attributes
> from HOST_WIDE_INT to poly_int64.  Most of it is mechanical,
> but there is one nonbovious change in widen_memory_access.
> Previously the main while loop broke with:
> 
>       /* Similarly for the decl.  */
>       else if (DECL_P (attrs.expr)
>                && DECL_SIZE_UNIT (attrs.expr)
>                && TREE_CODE (DECL_SIZE_UNIT (attrs.expr)) == INTEGER_CST
>                && compare_tree_int (DECL_SIZE_UNIT (attrs.expr), size) >= 0
>                && (! attrs.offset_known_p || attrs.offset >= 0))
>         break;
> 
> but it seemed wrong to optimistically assume the best case
> when the offset isn't known (and thus might be negative).
> As it happens, the "! attrs.offset_known_p" condition was
> always false, because we'd already nullified attrs.expr in
> that case:
> 
>   /* If we don't know what offset we were at within the expression, then
>      we can't know if we've overstepped the bounds.  */
>   if (! attrs.offset_known_p)
>     attrs.expr = NULL_TREE;
> 
> The patch therefore drops "! attrs.offset_known_p ||" when
> converting the offset check to the may/must interface.
> 
> 
> 2017-10-23  Richard Sandiford  <richard.sandiford@linaro.org>
> 	    Alan Hayward  <alan.hayward@arm.com>
> 	    David Sherwood  <david.sherwood@arm.com>
> 
> gcc/
> 	* rtl.h (mem_attrs): Add a default constructor.  Change size and
> 	offset from HOST_WIDE_INT to poly_int64.
> 	* emit-rtl.h (set_mem_offset, set_mem_size, adjust_address_1)
> 	(adjust_automodify_address_1, set_mem_attributes_minus_bitpos)
> 	(widen_memory_access): Take the sizes and offsets as poly_int64s
> 	rather than HOST_WIDE_INTs.
> 	* alias.c (ao_ref_from_mem): Handle the new form of MEM_OFFSET.
> 	(offset_overlap_p): Take poly_int64s rather than HOST_WIDE_INTs
> 	and ints.
> 	(adjust_offset_for_component_ref): Change the offset from a
> 	HOST_WIDE_INT to a poly_int64.
> 	(nonoverlapping_memrefs_p): Track polynomial offsets and sizes.
> 	* cfgcleanup.c (merge_memattrs): Update after mem_attrs changes.
> 	* dce.c (find_call_stack_args): Likewise.
> 	* dse.c (record_store): Likewise.
> 	* dwarf2out.c (tls_mem_loc_descriptor, dw_sra_loc_expr): Likewise.
> 	* print-rtl.c (rtx_writer::print_rtx): Likewise.
> 	* read-rtl-function.c (test_loading_mem): Likewise.
> 	* rtlanal.c (may_trap_p_1): Likewise.
> 	* simplify-rtx.c (delegitimize_mem_from_attrs): Likewise.
> 	* var-tracking.c (int_mem_offset, track_expr_p): Likewise.
> 	* emit-rtl.c (mem_attrs_eq_p, get_mem_align_offset): Likewise.
> 	(mem_attrs::mem_attrs): New function.
> 	(set_mem_attributes_minus_bitpos): Change bitpos from a
> 	HOST_WIDE_INT to poly_int64.
> 	(set_mem_alias_set, set_mem_addr_space, set_mem_align, set_mem_expr)
> 	(clear_mem_offset, clear_mem_size, change_address)
> 	(get_spill_slot_decl, set_mem_attrs_for_spill): Directly
> 	initialize mem_attrs.
> 	(set_mem_offset, set_mem_size, adjust_address_1)
> 	(adjust_automodify_address_1, offset_address, widen_memory_access):
> 	Likewise.  Take poly_int64s rather than HOST_WIDE_INT.
> 

OK.
jeff


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]