[PATCH, ARM] Misaligned access support for ARM Neon

Richard Guenther richard.guenther@gmail.com
Thu Dec 3 16:57:00 GMT 2009


On Thu, Dec 3, 2009 at 4:09 PM, Plotnikov Dmitry <dplotnikov@ispras.ru> wrote:
>> Other failures are due to things like vectorizing *more* loops than
>> expected in several tests, and (as written before) missing parts in the
>> NEON support. I don't think there's anything which indicates actual
>> breakage.
>
> There seems to be a problem though: building libevas with
> this patch causes miscompile.
>
> Sometimes SLP pass somehow brokes data dependencies and causes
> "dirty = list_zeroed" initialization to be removed by DCE pass on rtl
> in the sample code below:
>
> #include <stdlib.h>
> #include <assert.h>
> struct list {
>  int *head;
>  int *tail;
> };
>
> typedef struct list list_t;
> static const list_t list_zeroed = { NULL, NULL };
>
> int seg(list_t *arg){
>  if (arg->tail) {
>   return 1;
>  }
>  return 0;
> }
>
> int main(int argc, char* argv[]){
>  list_t dirty = list_zeroed;
>  assert(seg(&dirty)==0);
>  return 0;
> }
>
> We used GCC 4.5 snapshot from November 12, 2009 with options:
> "-ftree-vectorize -mfpu=neon -mfloat-abi=softfp -O2 -fno-inline"
>
> With -fno-tree-slp-vectorize option it works well.

That sounds more like an alias bug of either the vectorizer or
the alias-export code.  Can you re-check with a more recent
snapshot and file a bugreport?

Thanks,
Richard.



More information about the Gcc-patches mailing list