asking your advice about bug
Tobias Grosser
tobias@grosser.es
Thu Mar 6 13:28:00 GMT 2014
On 02/17/2014 06:50 PM, Roman Gareev wrote:
>
>
> Hi Tobias,
>
>
> thanks for the answer!
>
>
> I think that the segfault is being caused by NULL arguments being passedto compute_deps
> by loop_level_carries_dependences.*This is **causing **an* *assignment of**
> NULL values to the following parameters of **compute_deps:* must_raw_no_source,
> may_raw_no_source, must_war_no_source, may_war_no_source,
> must_waw_no_source, may_waw_no_source. They are being passed to subtract_commutative_associative_deps
> and dereferenced in the following statements:
>
>
> *must_raw_no_source = isl_union_map_subtract (*must_raw_no_source,
> x_must_raw_no_source);
>
>
> *may_raw_no_source = isl_union_map_subtract (*may_raw_no_source,
> x_may_raw_no_source);
>
>
> *must_war_no_source = isl_union_map_subtract (*must_war_no_source,
> x_must_war_no_source);
>
>
> *may_war_no_source = isl_union_map_subtract (*may_war_no_source,
> x_may_war_no_source);
>
>
> *must_waw_no_source = isl_union_map_subtract (*must_waw_no_source,
> x_must_waw_no_source);
>
>
> *may_waw_no_source = isl_union_map_subtract (*may_waw_no_source,
> x_may_waw_no_source);
>
>
> This is the reason of segfault. (All functions mentioned above are located
> in gcc/graphite-dependences.c)
>
>
> I think that this can be solved by the addition to
> subtract_commutative_associative_deps of NULL checking of the following
> variables: must_raw_no_source, may_raw_no_source, must_war_no_source,
> may_war_no_source, must_waw_no_source, may_waw_no_source. I've implemented
> this in the patch, which can be found below.
>
>
> Tested x86_64-unknown-linux-gnu, applying to revisions 189156, 207802
> (svn://gcc.gnu.org/svn/gcc/trunk) and 207802
> (svn://gcc.gnu.org/svn/gcc/branches/ibm/gcc-4_8-branch)
>
>
> Thanks for your answers and advice, Sven!
>
>
> --
>
> Roman Gareev
>
> -- --- You received this message because you are subscribed to the
> Google Groups "GCC GRAPHITE" group. To unsubscribe from this group and
> stop receiving emails from it, send an email to
> gcc-graphite+unsubscribe@googlegroups.com. For more options, visit
> https://groups.google.com/groups/opt_out.
>
>
> patch
>
>
> diff --git a/gcc/graphite-dependences.c b/gcc/graphite-dependences.c
> index b0f8680..002e3d1 100644
> --- a/gcc/graphite-dependences.c
> +++ b/gcc/graphite-dependences.c
> @@ -424,24 +424,83 @@ subtract_commutative_associative_deps (scop_p scop,
> &x_may_waw_no_source);
> gcc_assert (res == 0);
>
> - *must_raw = isl_union_map_subtract (*must_raw, x_must_raw);
> - *may_raw = isl_union_map_subtract (*may_raw, x_may_raw);
> - *must_raw_no_source = isl_union_map_subtract (*must_raw_no_source,
> - x_must_raw_no_source);
> - *may_raw_no_source = isl_union_map_subtract (*may_raw_no_source,
> - x_may_raw_no_source);
> - *must_war = isl_union_map_subtract (*must_war, x_must_war);
> - *may_war = isl_union_map_subtract (*may_war, x_may_war);
> - *must_war_no_source = isl_union_map_subtract (*must_war_no_source,
> - x_must_war_no_source);
> - *may_war_no_source = isl_union_map_subtract (*may_war_no_source,
> - x_may_war_no_source);
> - *must_waw = isl_union_map_subtract (*must_waw, x_must_waw);
> - *may_waw = isl_union_map_subtract (*may_waw, x_may_waw);
> - *must_waw_no_source = isl_union_map_subtract (*must_waw_no_source,
> - x_must_waw_no_source);
> - *may_waw_no_source = isl_union_map_subtract (*may_waw_no_source,
> - x_may_waw_no_source);
> + if (must_raw)
> + *must_raw = isl_union_map_subtract (*must_raw, x_must_raw);
> + else
> + isl_union_map_free (x_must_raw);
> +
> + if (may_raw)
> + *may_raw = isl_union_map_subtract (*may_raw, x_may_raw);
> + else
> + isl_union_map_free (x_may_raw);
In my understanding, it is sufficient to guard the no_source statements, no?
> +
> + if (must_raw_no_source)
> + {
> + *must_raw_no_source = isl_union_map_subtract (*must_raw_no_source,
> + x_must_raw_no_source);
> + }
> + else
> + isl_union_map_free (x_must_raw_no_source);
Could you remove the '{' '}' around the first statement?
> +
> + if (may_raw_no_source)
> + {
> + *may_raw_no_source = isl_union_map_subtract (*may_raw_no_source,
> + x_may_raw_no_source);
> + }
> + else
> + isl_union_map_free (x_may_raw_no_source);
Could you remove the '{' '}' around the first statement?
> + if (must_war)
> + *must_war = isl_union_map_subtract (*must_war, x_must_war);
> + else
> + isl_union_map_free (x_must_war);
> +
> + if (may_war)
> + *may_war = isl_union_map_subtract (*may_war, x_may_war);
> + else
> + isl_union_map_free (x_may_war);
Those do not seem to be necessary, no?
> +
> + if (must_war_no_source)
> + {
> + *must_war_no_source = isl_union_map_subtract (*must_war_no_source,
> + x_must_war_no_source);
> + }
> + else
> + isl_union_map_free (x_must_war_no_source);
> +
> + if (may_war_no_source)
> + {
> + *may_war_no_source = isl_union_map_subtract (*may_war_no_source,
> + x_may_war_no_source);
> + }
> + else
> + isl_union_map_free (x_may_war_no_source);
Could you remove the '{' '}' around the first statement?
> +
> + if (must_waw)
> + *must_waw = isl_union_map_subtract (*must_waw, x_must_waw);
> + else
> + isl_union_map_free (x_must_waw);
> +
> + if (may_waw)
> + *may_waw = isl_union_map_subtract (*may_waw, x_may_waw);
> + else
> + isl_union_map_free (x_may_waw);
Those do not seem to be necessary, no?
> +
> + if (must_waw_no_source)
> + {
> + *must_waw_no_source = isl_union_map_subtract (*must_waw_no_source,
> + x_must_waw_no_source);
> + }
> + else
> + isl_union_map_free (x_must_waw_no_source);
> +
> + if (may_waw_no_source)
> + {
> + *may_waw_no_source = isl_union_map_subtract (*may_waw_no_source,
> + x_may_waw_no_source);
> + }
> + else
> + isl_union_map_free (x_may_waw_no_source);
Could you remove the '{' '}' around the first statement?
Otherwise, the patch looks good.
To commit this patch, could you please provide a ChangeLog entry as well
as a commit message that _briefly_ describes the findings mentioned in
you last email and submit this patch to gcc-patches?
Thanks again,
Tobias
More information about the Gcc
mailing list