This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/32377] can't determine dependence (source/destination overlap without more than size)
- From: "sebpop at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 3 Jul 2007 13:57:30 -0000
- Subject: [Bug tree-optimization/32377] can't determine dependence (source/destination overlap without more than size)
- References: <bug-32377-33@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #8 from sebpop at gmail dot com 2007-07-03 13:57 -------
Subject: Re: can't determine dependence (source/destination overlap without
more than size)
On 3 Jul 2007 12:57:33 -0000, irar at il dot ibm dot com
<gcc-bugzilla@gcc.gnu.org> wrote:
> for (i = 0; i < N; i++){
> ia[i+1] = ia[i] * 4;
> }
> the ddr is {ld, st} and distance 1
>
> and for
> for (i = 0; i < N; i++){
> ia[i] = ia[i+1] * 4;
> }
> the ddr is also {ld, st} with distance 1.
>
> How can we distinguish between these cases?
>
There is no way to distinguish between these two in the classical distance
vector representation, however I have seen that I only have that code in
the graphite branch:
DDR_REVERSED_P (ddr) = true;
I'm setting this in the block of code that is tested for not being lexico
positive vectors:
if (!lambda_vector_lexico_pos (dist_v, DDR_NB_LOOPS (ddr)))
I can submit a patch for merging that part of code in trunk if you need
this flag to test if you are in one or the other case. But again in the
classical distance representation this cannot be distinguished.
Sebastian
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32377