On 1 December 2010 17:57, Daniel Jacobowitz <d...@codesourcery.com> wrote:
> On Wed, Dec 01, 2010 at 11:16:16AM +0200, Ira Rosen wrote:
>> The meaning of the builtin (or maybe a new tree code would be better?)
>> is that the elements of v0, v1 and v2 are deinterleaved. I wanted the
>> MEM_REFs, since we actually have three data accesses here, and
>> something (builtin or tree code) to indicate the deinterleaving. Since
>> the vectors are passed to the builtin, I don't think it's a problem if
>> the statements get separated. When the expander sees the builtin, it
>> has to remove the loads it created for the MEM_REFs and create a new
>> "vector load multiple and deinterleave". Is that possible?
>
> This is a problem I've struggled with before.  My only caution is that
> representing the MEM_REF's separately from the deinterleaving in the IR
> allows all sorts of ways (many we haven't thought of yet) for them to
> get separated, and there's no instruction to efficiently implement the
> deinterleaving from registers.  For instance, suppose a pseudo gets
> propagated into the builtin and we can't find the MEM_REFs any more.
> The resulting code could easily be worse than pre-vectorization.

I see. So one builtin for everything, like

vector_load_deinterleave (v0, v1, v2,..., stride,...)

is our only option?

Thanks,
Ira

>
> --
> Daniel Jacobowitz
> CodeSourcery
>

_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to