HomePhabricator

[AArch64][SVE] Extend int_aarch64_sve_ld1_gather_imm

Authored by andwar on Jan 17 2020, 4:04 AM.

Description

[AArch64][SVE] Extend int_aarch64_sve_ld1_gather_imm

The ACLE distinguishes between the following addressing modes for gather
loads:

  • "scalar base, vector offset", and
  • "vector base, scalar offset".

For the "vector base, scalar offset" case, the
int_aarch64_sve_ld1_gather_imm intrinsic was added in 79f2422d.
Currently, that intrinsic assumes that the scalar offset is passed as an
immediate. As a result, it does not cater for cases where scalar offset
is stored in a register.

In this patch int_aarch64_sve_ld1_gather_imm is extended so that all
cases are covered:

  • int_aarch64_sve_ld1_gather_imm is renamed as int_aarch64_sve_ld1_gather_scalar_offset
  • new DAG combine rules are added for GLD1_IMM for scenarios where the offset is a non-immediate scalar or an out-of-range immediate
  • sve-intrinsics-gather-loads-vector-base.ll is renamed as sve-intrinsics-gather-loads-vector-base-imm-offset.ll
  • sve-intrinsics-gather-loads-vector-base-scalar-offset.ll is added to test file for non-immediate offsets

Similar changes are made for scatter store intrinsics.

Reviewed By: sdesmalen, efriedma

Differential Revision: https://reviews.llvm.org/D71773