rfa: vectorize strided loads [2/2] [PR 18437]
Richard Guenther
richard.guenther@gmail.com
Wed Apr 11 08:29:00 GMT 2012
On Tue, Apr 10, 2012 at 6:05 PM, Michael Matz <matz@suse.de> wrote:
> Hi,
>
> On Tue, 10 Apr 2012, Richard Guenther wrote:
>
>> > + vec_inv = build_constructor (vectype, v);
>> > + new_temp = vect_init_vector (stmt, vec_inv, vectype, gsi);
>> > + new_stmt = SSA_NAME_DEF_STMT (new_temp);
>> > + mark_symbols_for_renaming (new_stmt);
>>
>> This should not be necessary - in fact please manually set the proper
>> VUSE here.
>
> I don't see how I could know the right VUSE. It might not even exist yet.
> Reusing the existing vuse from the load that is replaced isn't correct.
> Consider that there are (unrelated) stores or calls before the load, and
> those are vectorized. When updating their operands they'll get a new
> vdef, and I'd need to use _that_ one:
>
> original:
> #vdef MEM_1
> scalar_store = .... (this insn will be removed by vectorizable_store)
> #vuse MEM_1
> ... = A[i]
>
> --->
>
> #vdef MEM (note, no ssaname yet)
> vect_store = ...
> #vuse MEM_1
> ... = A[i] ( will be later removed as unused LHS)
> #vuse XXX
> ... = A[i]
> #vuse XXX
> ... = A[i+stride]
>
> So, which SSA name to use for XXX, when the vect_store doesn't yet know
> (which it doesn't).
>
> Tracking (and generating) proper VDEF SSA names is possible (we only
> vectorize a single BB, and that in stmt order), but that requires some
> rework of the vectorizer main loops, which should be a separate patch.
> Agreed?
Yeah, ok. Still the renaming is not necessary here, the operand scanner
does that automagically. The vectorizer forcefully rewrites virtual SSA form
anyways :/
Richard.
>
> Ciao,
> Michael.
More information about the Gcc-patches
mailing list