https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70729

--- Comment #24 from rguenther at suse dot de <rguenther at suse dot de> ---
On Wed, 8 Jun 2016, ysrumyan at gmail dot com wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70729
> 
> --- Comment #23 from Yuri Rumyantsev <ysrumyan at gmail dot com> ---
> OK. I will try to prepare the second part of patch.
> Few comments about vect-simd-clone-5.c test failure.
> 1. This loop is marked with safelen=MAX_INT.
> 2. It contains the following stmt's:
> D.3301 = foo.simdclone.1 (vect_vec_iv_.25_12, 123, _17);
>     # VUSE <.MEM_39>
>     _22 = MEM[(vector(2) long long int[2] *)&D.3301];
>     # VUSE <.MEM_39>
>     _23 = MEM[(vector(2) long long int[2] *)&D.3301 + 16B];
>     # .MEM_40 = VDEF <.MEM_39>
>     D.3301 ={v} {CLOBBER};
>     vect__3.28_24 = VEC_PACK_TRUNC_EXPR <_22, _23>;
>  and fuction ref_indep_Loop_p_1 checks that references
>  MEM[(vector(2) long long int[2] *)&D.3301]
> and
> MEM[(vector(2) long long int[2] *)&D.3301 + 16B]
> are independent.
> We can avoid such bad behavior of safelen-check (1) put restriction that loop
> does not contain non-analyzed references; (2) add additional check that
> reference does not have operands defined inside loop (D.3301 in our case).
> 
> What approach is more profitable for you?

I think that we cannot use safelen() to disregard dependences
against "non-analyzed" references.  This is because of exactly
such case.  In future we might want to make less references
"non-analyzed" and use the general alias oracle on them
(the LIM dependence analysis predates that).

So - simply put the safelen() check after the check for non-analyzed
reference in the disambiguator.

Reply via email to