[AArch64] Improve SAD pattern
authorJingu Kang <jingu.kang@arm.com>
Thu, 10 Jun 2021 15:02:57 +0000 (16:02 +0100)
committerJingu Kang <jingu.kang@arm.com>
Mon, 14 Jun 2021 14:48:51 +0000 (15:48 +0100)
commit08ce52ef5e6b879216f8018b920ef5c0621e797d
tree0802a05a627667e711a51ed7573a93b5eff6e014
parentc60dd3b2626a4d9eefd9f82f9a406b0d28d3fd72
[AArch64] Improve SAD pattern

Given a vecreduce_add node, detect the below pattern and convert it to the node
sequence with UABDL, [S|U]ADB and UADDLP.

i32 vecreduce_add(
 v16i32 abs(
   v16i32 sub(
    v16i32 [sign|zero]_extend(v16i8 a), v16i32 [sign|zero]_extend(v16i8 b))))
=================>
i32 vecreduce_add(
  v4i32 UADDLP(
    v8i16 add(
      v8i16 zext(
        v8i8 [S|U]ABD low8:v16i8 a, low8:v16i8 b
      v8i16 zext(
        v8i8 [S|U]ABD high8:v16i8 a, high8:v16i8 b

Differential Revision: https://reviews.llvm.org/D104042
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/lib/Target/AArch64/AArch64ISelLowering.h
llvm/lib/Target/AArch64/AArch64InstrInfo.td
llvm/test/CodeGen/AArch64/arm64-vabs.ll
llvm/test/CodeGen/AArch64/neon-sad.ll