[PATCH] D159267: [AArch64] Remove copy instruction between uaddlv and dup

JinGu Kang via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 4 02:54:07 PDT 2023


jaykang10 added a comment.

Yep, it looks there are patterns for `dup(extract_element) --> duplane`.

  multiclass DUPWithTruncPats<ValueType ResVT, ValueType Src64VT,
                              ValueType Src128VT, ValueType ScalVT,
                              Instruction DUP, SDNodeXForm IdxXFORM> {
    def : Pat<(ResVT (AArch64dup (ScalVT (vector_extract (Src128VT V128:$Rn),
                                                       imm:$idx)))),
              (DUP V128:$Rn, (IdxXFORM imm:$idx))>;
  
    def : Pat<(ResVT (AArch64dup (ScalVT (vector_extract (Src64VT V64:$Rn),
                                                       imm:$idx)))),
              (DUP (SUBREG_TO_REG (i64 0), V64:$Rn, dsub), (IdxXFORM imm:$idx))>;
  }
  
  defm : DUPWithTruncPats<v8i8,   v4i16, v8i16, i32, DUPv8i8lane,  VecIndex_x2>;
  defm : DUPWithTruncPats<v8i8,   v2i32, v4i32, i32, DUPv8i8lane,  VecIndex_x4>;
  defm : DUPWithTruncPats<v4i16,  v2i32, v4i32, i32, DUPv4i16lane, VecIndex_x2>;

Let me add a custom SDNode `AArch64uaddlv` for uaddlv and pattern for it.
Thanks for checking it.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D159267/new/

https://reviews.llvm.org/D159267



More information about the llvm-commits mailing list