[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