[PATCH] D74856: [AArch64][SVE] Add backend support for splats of immediates

Cameron McInally via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 20 10:02:04 PST 2020


cameron.mcinally marked an inline comment as done.
cameron.mcinally added inline comments.


================
Comment at: llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td:13
 
+def SVE8BitLslImm : ComplexPattern<i32, 2, "SelectSVE8BitLslImm", [imm]>;
+
----------------
cameron.mcinally wrote:
> efriedma wrote:
> > cameron.mcinally wrote:
> > > efriedma wrote:
> > > > Is there some reason you can't use the existing cpy_imm8_opt_lsl_i8?
> > > I'm not sure I understand this one. What should I replace with cpy_imm8_opt_lsl_i8?
> > > 
> > > SVE8BitLslImm is looking for two i8 immediates (i8 value and i8 shift amount).
> > > 
> > > cpy_imm8_opt_lsl_i8 is just checking for one i8 immediate, IINM.
> > "class imm8_opt_lsl" has some code which looks like it supposed to be used for matching.  Granted, it's using ImmLeaf, so maybe it's just broken.
> Oh, yeah, I see what you mean now. I'll dig into that...
Looking closer, this seems to be in line with the other ComplexPattern uses (e.g. SVEAddSubImm8Pat).

The SVE8BitLslImm ComplexPattern is used to match the two i8 operands, $imm and $shift. If I tried to use cpy_imm8_opt_lsl_i64 in its place, I don't see a way to get the individual operands by name. E.g. something like:

```
  def : Pat<(nxv2i64 (AArch64dup (i64 (cpy_imm8_opt_lsl_i64 i64:$imm)))),
            (DUP_ZI_D $???, $???)>;
```


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

https://reviews.llvm.org/D74856





More information about the llvm-commits mailing list