This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: fragile test case ivopt_infer_2.c
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: "Bin.Cheng" <amker dot cheng at gmail dot com>
- Cc: "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Date: Wed, 19 Jun 2013 10:43:23 +0200
- Subject: Re: fragile test case ivopt_infer_2.c
- References: <CAHFci28EcT0DfHTj=OvMq6ccQpC-P_CZoq=r_yUU=71OUNJF1Q at mail dot gmail dot com>
On Wed, Jun 19, 2013 at 10:04 AM, Bin.Cheng <amker.cheng@gmail.com> wrote:
> Hi,
> For test case gcc.dg/tree-ssa/ivopt_inter_2.c
>
> #ifndef TYPE
> #define TYPE char*
> #endif
>
> extern char a[];
>
> /* Can not infer loop iteration from array -- exit test can not be replaced. */
> void foo (unsigned int i_width, TYPE dst)
> {
> unsigned long long i = 0;
> unsigned long long j = 0;
> for ( ; j < i_width; )
> {
> *dst = a[i];
> dst++;
> i += 2;
> j += 1;
> }
> }
>
> /* { dg-final { scan-tree-dump-times "Replacing" 0 "ivopts"} } */
> /* { dg-final { cleanup-tree-dump "ivopts" } } */
>
> It checks whether the test is eliminated by address iv candidate,
> which is fragile.
> Giving the ivopt dump file :
>
> foo (unsigned int i_width, char * dst)
> {
> long long unsigned int j;
> long long unsigned int i;
> long long unsigned int _4;
> char _9;
> long long unsigned int _18;
>
> <bb 2>:
> _18 = (long long unsigned int) i_width_7(D);
> if (_18 != 0)
> goto <bb 3>;
> else
> goto <bb 7>;
>
> <bb 3>:
>
> <bb 4>:
> # j_21 = PHI <j_13(5), 0(3)>
> _9 = MEM[symbol: a, index: j_21, step: 2, offset: 0B];
> MEM[base: dst_5(D), index: j_21, offset: 0B] = _9;
> j_13 = j_21 + 1;
> if (j_13 < _18)
> goto <bb 5>;
> else
> goto <bb 6>;
>
> <bb 5>:
> goto <bb 4>;
>
> <bb 6>:
>
> <bb 7>:
> return;
> }
>
> It's possible to have "if (j_13 < _18)" eliminated into "if (j_13 !=
> _18)", and the case would fail because of dump message "Replacing exit
> test: if (j_13 < _18)"
>
> Same story for ivopt_mult_3.c
>
> Any idea how it should be handled?
Probably by checking for the real issue - I suppose at some point
the number of iterations was infered to be zero or one.
Richard.
> Thanks.
> bin
> --
> Best Regards.