[all-commits] [llvm/llvm-project] 3e6d1a: [NFC][AArch64] Precommit test to optimize instruct...

Mingming Liu via All-commits all-commits at lists.llvm.org
Fri Aug 19 13:18:15 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 3e6d1a6f54264bb50216069c68845b57428fc932
      https://github.com/llvm/llvm-project/commit/3e6d1a6f54264bb50216069c68845b57428fc932
  Author: Mingming Liu <mingmingl at google.com>
  Date:   2022-08-19 (Fri, 19 Aug 2022)

  Changed paths:
    A llvm/test/CodeGen/AArch64/aarch64-pmull2.ll
    M llvm/test/CodeGen/AArch64/pmull-ldr-merge.ll

  Log Message:
  -----------
  [NFC][AArch64] Precommit test to optimize instruction selection for aarch64_neon_pmull64 intrinsic.

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


  Commit: 945a3065015a62cf3b4ceabaa0755500fc7ddd71
      https://github.com/llvm/llvm-project/commit/945a3065015a62cf3b4ceabaa0755500fc7ddd71
  Author: Mingming Liu <mingmingl at google.com>
  Date:   2022-08-19 (Fri, 19 Aug 2022)

  Changed paths:
    M llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
    M llvm/lib/Target/AArch64/AArch64ISelLowering.h
    M llvm/lib/Target/AArch64/AArch64InstrFormats.td
    M llvm/lib/Target/AArch64/AArch64InstrInfo.td
    M llvm/test/CodeGen/AArch64/aarch64-pmull2.ll
    M llvm/test/CodeGen/AArch64/pmull-ldr-merge.ll

  Log Message:
  -----------
  [AArch64] Change aarch64_neon_pmull{,64} intrinsic ISel through a new
SDNode.

How:
1) Add AArch64ISD::PMULL SDNode, and extend aarch64_neon_pmull intrinsic
   tablegen pattern for this SDNode.
2) For aarch64_neon_pmull64, canonicalize i64 operands to v1i64 vectors
   during legalization.
3) For {aarch64_neon_pmull, aarch64_neon_pmull64}, combine intrinsic to
   SDNode.

Why
1) Adding the SDNode makes it easier to canonicalize i64 inputs (required by
   aarch64_neon_pmull64) to vector inputs. Vector inputs carries lane
   information, which helps dag-combiner to combine nodes (e.g. rewrite to a
   better node to prepare for instruction selection) and instruction-selection
   to emit instructions that use higher-half inputs in place
   (i.e., no need to move lane 1 content to lane 0).
2) Using the SDNode for aarch64_neon_pmull64 is NFC, yet without this we
   have to move the definition of {PMULLv1i64, PMULLv2i64} out of its
   current group of records without gains.

Test cases are commented with what is being tested in
`aarch64-pmull2.ll` and `pmull-ldr-merge.ll` under directory
`llvm/test/CodeGen/AArch64`.

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


Compare: https://github.com/llvm/llvm-project/compare/4d977663167e...945a3065015a


More information about the All-commits mailing list