Jeff Law <l...@redhat.com> writes:
> On 01/09/2018 11:39 AM, Richard Sandiford wrote:
>> This patch generalises various places that used hwi tree accessors
>> so that they can handle poly_ints instead.  Earlier patches did
>> this while updating interfaces; this patch just mops up some
>> left-over pieces that weren't necessary to make things compile,
>> but that still make sense.
>> 
>> In many cases these changes are by inspection rather than because
>> something had shown them to be necessary.
>> 
>> I think the alias.c part is a minor bug fix: previously we used
>> fits_uhwi_p for a signed HOST_WIDE_INT (which the caller does
>> treat as signed rather than unsigned).  We also checked whether
>> each individual offset overflowed but didn't check whether the
>> sum did.
>> 
>> Sorry for not posting this earlier.  I kept holding it back in case
>> more examples showed up.
>> 
>> Tested on aarch64-linux-gnu, x86_64-linux-gnu and powerpc64le-linux-gnu.
>> Also tested by comparing the before-and-after assembly output for at
>> least one target per CPU directory.  OK to install?
>> 
>> Richard
>> 
>> 
>> 2018-01-09  Richard Sandiford  <richard.sandif...@linaro.org>
>> 
>> gcc/
>>      * alias.c (adjust_offset_for_component_ref): Use poly_int_tree_p
>>      and wi::to_poly_offset.  Add the current offset and then check
>>      whether the sum fits, rather than using an unchecked addition of
>>      a checked term.  Check for a shwi rather than a uhwi.
>>      * expr.c (get_bit_range): Use tree_to_poly_uint64.
>>      (store_constructor): Use poly_int_tree_p.
>>      (expand_expr_real_1): Likewise.
>>      * function.c (assign_temp): Likewise.
>>      * fold-const.c (const_binop): Use poly_int_tree_p and
>>      wi::to_poly_offset.
>>      (fold_indirect_ref_1): Likewise.  Use known_in_range_p to test
>>      for an in-range vector access and multiple_p to attempt an exact
>>      division.
>>      * gimplify.c (gimple_add_tmp_var_fn): Use tree_fits_poly_uint64_p.
>>      (gimple_add_tmp_var): Likewise.
>>      * ipa-icf-gimple.c (func_checker::compare_operand): Use
>>      to_poly_offset for MEM offsets.
>>      * ipa-icf.c (sem_variable::equals): Likewise.
>>      * stor-layout.c (compute_record_mode): Use poly_int_tree_p.
>>      * tree-vectorizer.c (get_vec_alignment_for_array_type): Likewise.
>>      * tree-predcom.c (aff_combination_dr_offset): Use wi::to_poly_widest
>>      rather than wi::to_widest for DR_INITs.
>>      * tree-ssa-sccvn.c (ao_ref_init_from_vn_reference): Use
>>      wi::to_poly_offset for BIT_FIELD_REF offsets.
>>      (vn_reference_maybe_forwprop_address): Use poly_int_tree_p and
>>      wi::to_poly_offset.
>>      * tree-vect-data-refs.c (vect_find_same_alignment_drs): Use
>>      wi::to_poly_offset for DR_INIT.
>>      (vect_analyze_data_ref_accesses): Require both DR_INITs to be
>>      INTEGER_CSTs.
>>      (vect_analyze_group_access_1): Note that here.
>>      * var-tracking.c (emit_note_insn_var_location): Use
>>      tree_to_poly_uint64.
> How important is this?  We're just about to move into stage4 and this
> feels a bit more like something we should do in stage1.

The gimplify.c part is needed in order to build libgfortran for SVE.
There were certainly failures without the DR_INIT changes too.
I think at least some of the others are also needed to fix test
failures, but after a certain point I tried to proactively convert
code rather than wait for a testcase to show up why.

Sorry for not keeping better notes.

Most of these changes are old -- the gimplify.c part has been around
for a year and half -- but I was trying to roll stuff up to avoid
posting too many patches of this kind.

I can try to redo it so that it*s only shwi->poly_int64 and
uhwi->poly_uint64 (and so drop things like the alias.c bounds
checking fix) if that seems safer at this stage.

Richard

Reply via email to