Do not give realistic estimates for loop with array accesses
Bin.Cheng
amker.cheng@gmail.com
Wed Mar 30 15:30:00 GMT 2016
On Wed, Mar 30, 2016 at 3:22 PM, Jan Hubicka <hubicka@ucw.cz> wrote:
>> > - /* If access is not executed on every iteration, we must ensure that overlow may
>> > - not make the access valid later. */
>> > + /* If access is not executed on every iteration, we must ensure that overlow
>> > + may not make the access valid later. */
>> > if (!dominated_by_p (CDI_DOMINATORS, loop->latch, gimple_bb (data->stmt))
>> > && scev_probably_wraps_p (initial_condition_in_loop_num (ev, loop->num),
>> > step, data->stmt, loop, true))
>> > - reliable = false;
>> > + upper = false;
>> >
>> > - record_nonwrapping_iv (loop, init, step, data->stmt, low, high, reliable, upper);
>> > + record_nonwrapping_iv (loop, init, step, data->stmt, low, high, false, upper);
>> > return true;
>> > }
>> Hi,
>> I have a concern that GCC records bound information from basic blocks
>> even that don't dominate loop latch. Given below example:
>>
>> extern int b[];
>> void bar (int *);
>> int foo (int x, int n)
>> {
>> int i;
>> int arr[128] = {0};
>>
>> for (i = 0; i < n; i++)
>> {
>> if (x > i)
>> {
>> a[i] = i;
>> b[i] = i;
>> }
>> }
>> bar (arr);
>> return 0;
>> }
>
> This testcase is not affected, becase scev_probably_wraps_p returns false in this case.
> In the wrapping case, we can't derive upper bound - this is indeed a correctness issue.
In the wrapping case, we still can derive upper bound if the index's
wrapping range is larger than array bound. But I agree it looks like
very corner case and not likely be useful in practice.
Thanks,
bin
>
> I am experiemtning with enabling loop peeling by default. For that I extended the code
> to record likely upper bounds, which can be used to test if the loop most probably has
> low trip count. This is also useful to trottle other transformations.
>
> In this case we can probably assume that no sane person would count
> on wrapping and record this as likely bound.
>
> Honza
More information about the Gcc-patches
mailing list