[all-commits] [llvm/llvm-project] f8f953: [AArch64][SVE] Better utilisation of unpredicated ...

Bradley Smith via All-commits all-commits at lists.llvm.org
Mon May 10 05:06:14 PDT 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: f8f953c2a6b3ee6bd50f1bc1bc81880c0d40eb6c
      https://github.com/llvm/llvm-project/commit/f8f953c2a6b3ee6bd50f1bc1bc81880c0d40eb6c
  Author: Bradley Smith <bradley.smith at arm.com>
  Date:   2021-05-10 (Mon, 10 May 2021)

  Changed paths:
    M llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
    M llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
    M llvm/lib/Target/AArch64/AArch64ISelLowering.h
    M llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
    M llvm/lib/Target/AArch64/SVEInstrFormats.td
    M llvm/test/CodeGen/AArch64/sve-intrinsics-int-arith-imm.ll
    A llvm/test/CodeGen/AArch64/sve-intrinsics-unpred-form.ll

  Log Message:
  -----------
  [AArch64][SVE] Better utilisation of unpredicated forms of arithmetic intrinsics

When using predicated arithmetic intrinsics, if the predicate used is all
lanes active, use an unpredicated form of the instruction, additionally
this allows for better use of immediate forms.

This also includes a new complex isel pattern which allows matching an
all active predicate when the types are different but the predicate is a
superset of the type being used. For example, to allow a b8 ptrue for a
b32 predicate operand.

This only includes instructions where the unpredicated/predicated forms
are mismatched between variants, meaning that the removal of the
predicate is done during instruction selection in order to prevent
spurious re-introductions of ptrue instructions.

Co-authored-by: Paul Walker <paul.walker at arm.com>

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




More information about the All-commits mailing list