On Thu, Sep 8, 2016 at 5:29 AM, Kugan Vivekanandarajah
<kugan.vivekanandara...@linaro.org> wrote:
> Hi Richard,
>
> On 7 September 2016 at 19:35, Richard Biener <richard.guent...@gmail.com> 
> wrote:
>> On Wed, Sep 7, 2016 at 2:21 AM, Kugan Vivekanandarajah
>> <kugan.vivekanandara...@linaro.org> wrote:
>>> Hi Richard,
>>>
>>> On 6 September 2016 at 19:08, Richard Biener <richard.guent...@gmail.com> 
>>> wrote:
>>>> On Tue, Sep 6, 2016 at 2:24 AM, Kugan Vivekanandarajah
>>>> <kugan.vivekanandara...@linaro.org> wrote:
>>>>> Hi Richard,
>>>>>
>>>>> On 5 September 2016 at 17:57, Richard Biener <richard.guent...@gmail.com> 
>>>>> wrote:
>>>>>> On Mon, Sep 5, 2016 at 7:26 AM, Kugan Vivekanandarajah
>>>>>> <kugan.vivekanandara...@linaro.org> wrote:
>>>>>>> Hi All,
>>>>>>>
>>>>>>> While looking at gcc source, I noticed that we are iterating over SSA
>>>>>>> variable from 0 to num_ssa_names in some cases and 1 to num_ssa_names
>>>>>>> in others. It seems that variable 0 is always NULL TREE.
>>>>>>
>>>>>> Yeah, that's artificial because we don't assign SSA name version 0 (for 
>>>>>> some
>>>>>> unknown reason).
>>>>>>
>>>>>>> But it can
>>>>>>> confuse people who are looking for the first time. Therefore It might
>>>>>>> be good to follow some consistent usage here.
>>>>>>>
>>>>>>> It might be also good to gave a FOR_EACH_SSAVAR iterator as we do in
>>>>>>> other case. Here is attempt to do this based on what is done in other
>>>>>>> places. Bootstrapped and regression tested on X86_64-linux-gnu with no
>>>>>>> new regressions. is this OK?
>>>>>>
>>>>>> First of all some bikeshedding - FOR_EACH_SSA_NAME would be better
>>>>>> as SSAVAR might be confused with iterating over SSA_NAME_VAR.
>>>>>>
>>>>>> Then, if you add an iterator why leave the name == NULL handling to 
>>>>>> consumers?
>>>>>> That looks odd.
>>>>>>
>>>>>> Then, SSA names are just in a vector thus why not re-use the vector 
>>>>>> iterator?
>>>>>>
>>>>>> That is,
>>>>>>
>>>>>> #define FOR_EACH_SSA_NAME (name) \
>>>>>>   for (unsigned i = 1; SSANAMES (cfun).iterate (i, &name); ++i)
>>>>>>
>>>>>> would be equivalent to your patch?
>>>>>>
>>>>>> Please also don't add new iterators that implicitely use 'cfun' but 
>>>>>> always use
>>>>>> one that passes it as explicit arg.
>>>>>
>>>>> I think defining FOR_EACH_SSA_NAME with vector iterator is better. But
>>>>> we will not be able to skill NULL ssa_names with that.
>>>>
>>>> Why?  Can't you simply do
>>>>
>>>>   #define FOR_EACH_SSA_NAME (name) \
>>>>     for (unsigned i = 1; SSANAMES (cfun).iterate (i, &name); ++i) \
>>>>        if (name)
>>>>
>>>> ?
>>>
>>> Indeed.  I missed the if at the end :(.  Here is an updated patch.
>>> Bootstrapped and regression tested on x86_64-linux-gnu with no new
>>> regressions.
>>
>> Quoting myself:
>>
>>> As I said
>>> I'd like 'cfun' to be explicit, thus
>>>
>>> #define FOR_EACH_SSA_NAME(I, VAR, FN) \
>>>  for (I = 1; SSANAMES (FN)->iterate ((I), &(VAR)); ++(I)) \
>>>   if (VAR)
>>
>> the patch doesn't seem to contain that FN part.  Please also put declarations
>> of 'name' you need to add right before the FOR_EACH_SSA_NAME rather
>> than far away.
>
> Please find the attached patch does this. Bootstrapped and regression
> tested on x86_64-linux-gnu with no new regressions.
>
> Is this OK?

Ok.

Thanks,
Richard.

> Thanks,
> Kugan
>
>>
>> Thanks,
>> Richard.
>>
>>> Thanks,
>>> Kugan
>>>>
>>>>> I also added
>>>>> index variable to the macro so that there want be any conflicts if the
>>>>> index variable "i" (or whatever) is also defined in the loop.
>>>>>
>>>>> Bootstrapped and regression tested on x86_64-linux-gnu with no new
>>>>> regressions. Is this OK for trunk?
>>>>>
>>>>> Thanks,
>>>>> Kugan
>>>>>
>>>>>
>>>>> gcc/ChangeLog:
>>>>>
>>>>> 2016-09-06  Kugan Vivekanandarajah  <kug...@linaro.org>
>>>>>
>>>>>     * tree-ssanames.h (FOR_EACH_SSA_NAME): New.
>>>>>     * cfgexpand.c (update_alias_info_with_stack_vars): Use
>>>>>     FOR_EACH_SSA_NAME to iterate over SSA variables.
>>>>>     (pass_expand::execute): Likewise.
>>>>>     * omp-simd-clone.c (ipa_simd_modify_function_body): Likewise.
>>>>>     * tree-cfg.c (dump_function_to_file): Likewise.
>>>>>     * tree-into-ssa.c (pass_build_ssa::execute): Likewise.
>>>>>     (update_ssa): Likewise.
>>>>>     * tree-ssa-alias.c (dump_alias_info): Likewise.
>>>>>     * tree-ssa-ccp.c (ccp_finalize): Likewise.
>>>>>     * tree-ssa-coalesce.c (build_ssa_conflict_graph): Likewise.
>>>>>     (create_outofssa_var_map): Likewise.
>>>>>     (coalesce_ssa_name): Likewise.
>>>>>     * tree-ssa-operands.c (dump_immediate_uses): Likewise.
>>>>>     * tree-ssa-pre.c (compute_avail): Likewise.
>>>>>     * tree-ssa-sccvn.c (init_scc_vn): Likewise.
>>>>>     (scc_vn_restore_ssa_info): Likewise.
>>>>>     (free_scc_vn): Likwise.
>>>>>     (run_scc_vn): Likewise.
>>>>>     * tree-ssa-structalias.c (compute_points_to_sets): Likewise.
>>>>>     * tree-ssa-ter.c (new_temp_expr_table): Likewise.
>>>>>     * tree-ssa-copy.c (fini_copy_prop): Likewise.
>>>>>     * tree-ssa.c (verify_ssa): Likewise.
>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Richard.
>>>>>>
>>>>>>
>>>>>>> Thanks,
>>>>>>> Kugan
>>>>>>>
>>>>>>>
>>>>>>> gcc/ChangeLog:
>>>>>>>
>>>>>>> 2016-09-05  Kugan Vivekanandarajah  <kug...@linaro.org>
>>>>>>>
>>>>>>>     * tree-ssanames.h (ssa_iterator::ssa_iterator): New.
>>>>>>>     (ssa_iterator::get): Likewise.
>>>>>>>     (ssa_iterator::next): Likewise.
>>>>>>>     (FOR_EACH_SSAVAR): Likewise.
>>>>>>>     * cfgexpand.c (update_alias_info_with_stack_vars): Use
>>>>>>>     FOR_EACH_SSAVAR to iterate over SSA variables.
>>>>>>>     (pass_expand::execute): Likewise.
>>>>>>>     * omp-simd-clone.c (ipa_simd_modify_function_body): Likewise.
>>>>>>>     * tree-cfg.c (dump_function_to_file): Likewise.
>>>>>>>     * tree-into-ssa.c (pass_build_ssa::execute): Likewise.
>>>>>>>     (update_ssa): Likewise.
>>>>>>>     * tree-ssa-alias.c (dump_alias_info): Likewise.
>>>>>>>     * tree-ssa-ccp.c (ccp_finalize): Likewise.
>>>>>>>     * tree-ssa-coalesce.c (build_ssa_conflict_graph): Likewise.
>>>>>>>     (create_outofssa_var_map): Likewise.
>>>>>>>     (coalesce_ssa_name): Likewise.
>>>>>>>     * tree-ssa-operands.c (dump_immediate_uses): Likewise.
>>>>>>>     * tree-ssa-pre.c (compute_avail): Likewise.
>>>>>>>     * tree-ssa-sccvn.c (init_scc_vn): Likewise.
>>>>>>>     (scc_vn_restore_ssa_info): Likewise.
>>>>>>>     (free_scc_vn): Likwise.
>>>>>>>     (run_scc_vn): Likewise.
>>>>>>>     * tree-ssa-structalias.c (compute_points_to_sets): Likewise.
>>>>>>>     * tree-ssa-ter.c (new_temp_expr_table): Likewise.

Reply via email to