[AArch64][SVE] Add intrinsics for first-faulting gather loads

Authored by andwar on Feb 21 2020, 5:59 AM.


[AArch64][SVE] Add intrinsics for first-faulting gather loads

The following intrinsics are added:

  • @llvm.aarch64.sve.ldff1.gather
  • @llvm.aarch64.sve.ldff1.gather.index
  • @llvm.aarch64.sve.ldff1.gather_sxtw
  • @llvm.aarch64.sve.ldff1.gather.uxtw
  • @llvm.aarch64.sve.ldff1.gather_sxtw.index
  • @llvm.aarch64.sve.ldff1.gather.uxtw.index
  • @llvm.aarch64.sve.ldff1.gather.scalar.offset

Although this patch is quite substantial, the vast majority of the
implementation is just a 'copy & paste' of the implementation of regular
gather loads, including tests. There's only a handful of new

  • AArch64ISD nodes defined in AArch64ISelLowering.h (e.g. GLDFF1)
  • Seleciton DAG Types in AArch64SVEInstrInfo.td (e.g. AArch64ldff1_gather)
  • intrinsics in IntrinsicsAArch64.td (e.g. aarch64_sve_ldff1_gather)
  • Pseudo instructions in SVEInstrFormats.td to workaround the issue of use-before-def for the FFR register.

Reviewed By: sdesmalen

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