Hi all,

We already have a STORE flag that we use for builtins. This patch introduces a 
LOAD set
that uses AUTO_FP and FLAG_READ_MEMORY. This allows for more aggressive 
optimisation of the load
intrinsics.

Turns out we have a great many testcases that do:
float16x4x2_t
f_vld2_lane_f16 (float16_t * p, float16x4x2_t v)
{
  float16x4x2_t res;
  /* { dg-error "lane 4 out of range 0 - 3" "" { target *-*-* } 0 } */
  res = vld2_lane_f16 (p, v, 4);
  /* { dg-error "lane -1 out of range 0 - 3" "" { target *-*-* } 0 } */
  res = vld2_lane_f16 (p, v, -1);
  return res;
}

but since the first res is unused it now gets eliminated early on before we get 
to give an error
message. Ideally we'd like to warn for both.
This patch takes the conservative approach and doesn't convert the load-lane 
builtins to LOAD ; that's something we can improve later.

Bootstrapped and tested on aarch64-none-linux-gnu.
Pushing to trunk.
Thanks,
Kyrill

gcc/ChangeLog:

        * config/aarch64/aarch64-builtins.c (FLAG_LOAD): Define.
        * config/aarch64/aarch64-simd-builtins.def (ld1x2, ld2, ld3, ld4, ld2r,
        ld3r, ld4r, ld1, ld1x3, ld1x4): Use LOAD flags.

Attachment: load-flag.patch
Description: load-flag.patch

Reply via email to