[PATCH] D106272: [AArch64][SME] Introduce feature for streaming mode

Cullen Rhodes via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 19 06:15:27 PDT 2021


c-rhodes created this revision.
c-rhodes added reviewers: sdesmalen, david-arm, kmclaughlin, CarolineConcatto, paulwalker-arm, dmgreen.
Herald added subscribers: danielkiss, arphaman, hiraditya, kristof.beyls.
c-rhodes requested review of this revision.
Herald added a project: LLVM.

The Scalable Matrix Extension (SME) introduces a new execution mode
called Streaming SVE mode. In streaming mode a substantial subset of the
SVE and SVE2 instruction set is available, along with new outer product,
load, store, extract and insert instructions that operate on the new
architectural register state for the matrix.

To support streaming mode this patch introduces a new subtarget feature
+streaming-sve. If enabled, the subset of SVE(2) instructions are
available. The existing behaviour for SVE(2) remains unchanged, the
subset of instructions that are legal in streaming mode are enabled if
either +sve[2] or +streaming-sve is specified. Instructions that are
illegal in streaming mode remain predicated on +sve[2].

The SME target feature has been updated to imply +streaming-sve rather
than +sve.

The following changes are made to the SVE(2) tests:

- For instructions that are legal in streaming mode:
  - added RUN line to verify +streaming-sve enables the instruction.
  - updated diagnostic to 'instruction requires: streaming-sve or sve'.
- For instructions that are illegal in streaming-mode:
  - added RUN line to verify +streaming-sve does not enable the instruction.

SVE(2) instructions that are legal in streaming mode have:

  if !HaveSVE[2]() && !HaveSME() then UNDEFINED;

at the top of the pseudocode in the XML.

The reference can be found here:
https://developer.arm.com/documentation/ddi0602/2021-06/SVE-Instructions


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D106272

Files:
  llvm/lib/Target/AArch64/AArch64.td
  llvm/lib/Target/AArch64/AArch64InstrInfo.td
  llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td
  llvm/lib/Target/AArch64/AArch64SchedA64FX.td
  llvm/lib/Target/AArch64/AArch64Subtarget.h
  llvm/test/MC/AArch64/SME/revd.s
  llvm/test/MC/AArch64/SME/sclamp.s
  llvm/test/MC/AArch64/SME/uclamp.s
  llvm/test/MC/AArch64/SVE/abs.s
  llvm/test/MC/AArch64/SVE/add.s
  llvm/test/MC/AArch64/SVE/addpl.s
  llvm/test/MC/AArch64/SVE/addvl.s
  llvm/test/MC/AArch64/SVE/and.s
  llvm/test/MC/AArch64/SVE/ands.s
  llvm/test/MC/AArch64/SVE/andv.s
  llvm/test/MC/AArch64/SVE/asr.s
  llvm/test/MC/AArch64/SVE/asrd.s
  llvm/test/MC/AArch64/SVE/asrr.s
  llvm/test/MC/AArch64/SVE/bfcvt.s
  llvm/test/MC/AArch64/SVE/bfcvtnt.s
  llvm/test/MC/AArch64/SVE/bfdot.s
  llvm/test/MC/AArch64/SVE/bfmlal.s
  llvm/test/MC/AArch64/SVE/bfmmla.s
  llvm/test/MC/AArch64/SVE/bic.s
  llvm/test/MC/AArch64/SVE/bics.s
  llvm/test/MC/AArch64/SVE/brka.s
  llvm/test/MC/AArch64/SVE/brkas.s
  llvm/test/MC/AArch64/SVE/brkb.s
  llvm/test/MC/AArch64/SVE/brkbs.s
  llvm/test/MC/AArch64/SVE/brkn.s
  llvm/test/MC/AArch64/SVE/brkns.s
  llvm/test/MC/AArch64/SVE/brkpa.s
  llvm/test/MC/AArch64/SVE/brkpas.s
  llvm/test/MC/AArch64/SVE/brkpb.s
  llvm/test/MC/AArch64/SVE/brkpbs.s
  llvm/test/MC/AArch64/SVE/clasta.s
  llvm/test/MC/AArch64/SVE/clastb.s
  llvm/test/MC/AArch64/SVE/cls.s
  llvm/test/MC/AArch64/SVE/clz.s
  llvm/test/MC/AArch64/SVE/cmpeq.s
  llvm/test/MC/AArch64/SVE/cmpge.s
  llvm/test/MC/AArch64/SVE/cmpgt.s
  llvm/test/MC/AArch64/SVE/cmphi.s
  llvm/test/MC/AArch64/SVE/cmphs.s
  llvm/test/MC/AArch64/SVE/cmple.s
  llvm/test/MC/AArch64/SVE/cmplo.s
  llvm/test/MC/AArch64/SVE/cmpls.s
  llvm/test/MC/AArch64/SVE/cmplt.s
  llvm/test/MC/AArch64/SVE/cmpne.s
  llvm/test/MC/AArch64/SVE/cnot.s
  llvm/test/MC/AArch64/SVE/cnt.s
  llvm/test/MC/AArch64/SVE/cntb.s
  llvm/test/MC/AArch64/SVE/cntd.s
  llvm/test/MC/AArch64/SVE/cnth.s
  llvm/test/MC/AArch64/SVE/cntp.s
  llvm/test/MC/AArch64/SVE/cntw.s
  llvm/test/MC/AArch64/SVE/compact.s
  llvm/test/MC/AArch64/SVE/cpy.s
  llvm/test/MC/AArch64/SVE/ctermeq.s
  llvm/test/MC/AArch64/SVE/ctermne.s
  llvm/test/MC/AArch64/SVE/decb.s
  llvm/test/MC/AArch64/SVE/decd.s
  llvm/test/MC/AArch64/SVE/dech.s
  llvm/test/MC/AArch64/SVE/decp.s
  llvm/test/MC/AArch64/SVE/decw.s
  llvm/test/MC/AArch64/SVE/dup.s
  llvm/test/MC/AArch64/SVE/dupm.s
  llvm/test/MC/AArch64/SVE/eon.s
  llvm/test/MC/AArch64/SVE/eor.s
  llvm/test/MC/AArch64/SVE/eors.s
  llvm/test/MC/AArch64/SVE/eorv.s
  llvm/test/MC/AArch64/SVE/ext.s
  llvm/test/MC/AArch64/SVE/fabd.s
  llvm/test/MC/AArch64/SVE/fabs.s
  llvm/test/MC/AArch64/SVE/facge.s
  llvm/test/MC/AArch64/SVE/facgt.s
  llvm/test/MC/AArch64/SVE/facle.s
  llvm/test/MC/AArch64/SVE/faclt.s
  llvm/test/MC/AArch64/SVE/fadd.s
  llvm/test/MC/AArch64/SVE/fadda.s
  llvm/test/MC/AArch64/SVE/faddv.s
  llvm/test/MC/AArch64/SVE/fcadd.s
  llvm/test/MC/AArch64/SVE/fcmeq.s
  llvm/test/MC/AArch64/SVE/fcmge.s
  llvm/test/MC/AArch64/SVE/fcmgt.s
  llvm/test/MC/AArch64/SVE/fcmla.s
  llvm/test/MC/AArch64/SVE/fcmle.s
  llvm/test/MC/AArch64/SVE/fcmlt.s
  llvm/test/MC/AArch64/SVE/fcmne.s
  llvm/test/MC/AArch64/SVE/fcmuo.s
  llvm/test/MC/AArch64/SVE/fcpy.s
  llvm/test/MC/AArch64/SVE/fcvt.s
  llvm/test/MC/AArch64/SVE/fcvtzs.s
  llvm/test/MC/AArch64/SVE/fcvtzu.s
  llvm/test/MC/AArch64/SVE/fdiv.s
  llvm/test/MC/AArch64/SVE/fdivr.s
  llvm/test/MC/AArch64/SVE/fdup.s
  llvm/test/MC/AArch64/SVE/fexpa.s
  llvm/test/MC/AArch64/SVE/fmad.s
  llvm/test/MC/AArch64/SVE/fmax.s
  llvm/test/MC/AArch64/SVE/fmaxnm.s
  llvm/test/MC/AArch64/SVE/fmaxnmv.s
  llvm/test/MC/AArch64/SVE/fmaxv.s
  llvm/test/MC/AArch64/SVE/fmin.s
  llvm/test/MC/AArch64/SVE/fminnm.s
  llvm/test/MC/AArch64/SVE/fminnmv.s
  llvm/test/MC/AArch64/SVE/fminv.s
  llvm/test/MC/AArch64/SVE/fmla.s
  llvm/test/MC/AArch64/SVE/fmls.s
  llvm/test/MC/AArch64/SVE/fmov.s
  llvm/test/MC/AArch64/SVE/fmsb.s
  llvm/test/MC/AArch64/SVE/fmul.s
  llvm/test/MC/AArch64/SVE/fmulx.s
  llvm/test/MC/AArch64/SVE/fneg.s
  llvm/test/MC/AArch64/SVE/fnmad.s
  llvm/test/MC/AArch64/SVE/fnmla.s
  llvm/test/MC/AArch64/SVE/fnmls.s
  llvm/test/MC/AArch64/SVE/fnmsb.s
  llvm/test/MC/AArch64/SVE/frecpe.s
  llvm/test/MC/AArch64/SVE/frecps.s
  llvm/test/MC/AArch64/SVE/frecpx.s
  llvm/test/MC/AArch64/SVE/frinta.s
  llvm/test/MC/AArch64/SVE/frinti.s
  llvm/test/MC/AArch64/SVE/frintm.s
  llvm/test/MC/AArch64/SVE/frintn.s
  llvm/test/MC/AArch64/SVE/frintp.s
  llvm/test/MC/AArch64/SVE/frintx.s
  llvm/test/MC/AArch64/SVE/frintz.s
  llvm/test/MC/AArch64/SVE/frsqrte.s
  llvm/test/MC/AArch64/SVE/frsqrts.s
  llvm/test/MC/AArch64/SVE/fscale.s
  llvm/test/MC/AArch64/SVE/fsqrt.s
  llvm/test/MC/AArch64/SVE/fsub.s
  llvm/test/MC/AArch64/SVE/fsubr.s
  llvm/test/MC/AArch64/SVE/ftmad.s
  llvm/test/MC/AArch64/SVE/ftsmul.s
  llvm/test/MC/AArch64/SVE/ftssel.s
  llvm/test/MC/AArch64/SVE/incb.s
  llvm/test/MC/AArch64/SVE/incd.s
  llvm/test/MC/AArch64/SVE/inch.s
  llvm/test/MC/AArch64/SVE/incp.s
  llvm/test/MC/AArch64/SVE/incw.s
  llvm/test/MC/AArch64/SVE/index.s
  llvm/test/MC/AArch64/SVE/insr.s
  llvm/test/MC/AArch64/SVE/lasta.s
  llvm/test/MC/AArch64/SVE/lastb.s
  llvm/test/MC/AArch64/SVE/ld1b-sve-only.s
  llvm/test/MC/AArch64/SVE/ld1b.s
  llvm/test/MC/AArch64/SVE/ld1d-sve-only.s
  llvm/test/MC/AArch64/SVE/ld1d.s
  llvm/test/MC/AArch64/SVE/ld1h-sve-only.s
  llvm/test/MC/AArch64/SVE/ld1h.s
  llvm/test/MC/AArch64/SVE/ld1rb.s
  llvm/test/MC/AArch64/SVE/ld1rd.s
  llvm/test/MC/AArch64/SVE/ld1rh.s
  llvm/test/MC/AArch64/SVE/ld1rqb.s
  llvm/test/MC/AArch64/SVE/ld1rqd.s
  llvm/test/MC/AArch64/SVE/ld1rqh.s
  llvm/test/MC/AArch64/SVE/ld1rqw.s
  llvm/test/MC/AArch64/SVE/ld1rsb.s
  llvm/test/MC/AArch64/SVE/ld1rsh.s
  llvm/test/MC/AArch64/SVE/ld1rsw.s
  llvm/test/MC/AArch64/SVE/ld1rw.s
  llvm/test/MC/AArch64/SVE/ld1sb-sve-only.s
  llvm/test/MC/AArch64/SVE/ld1sb.s
  llvm/test/MC/AArch64/SVE/ld1sh-sve-only.s
  llvm/test/MC/AArch64/SVE/ld1sh.s
  llvm/test/MC/AArch64/SVE/ld1sw-sve-only.s
  llvm/test/MC/AArch64/SVE/ld1sw.s
  llvm/test/MC/AArch64/SVE/ld1w-sve-only.s
  llvm/test/MC/AArch64/SVE/ld1w.s
  llvm/test/MC/AArch64/SVE/ld2b.s
  llvm/test/MC/AArch64/SVE/ld2d.s
  llvm/test/MC/AArch64/SVE/ld2h.s
  llvm/test/MC/AArch64/SVE/ld2w.s
  llvm/test/MC/AArch64/SVE/ld3b.s
  llvm/test/MC/AArch64/SVE/ld3d.s
  llvm/test/MC/AArch64/SVE/ld3h.s
  llvm/test/MC/AArch64/SVE/ld3w.s
  llvm/test/MC/AArch64/SVE/ld4b.s
  llvm/test/MC/AArch64/SVE/ld4d.s
  llvm/test/MC/AArch64/SVE/ld4h.s
  llvm/test/MC/AArch64/SVE/ld4w.s
  llvm/test/MC/AArch64/SVE/ldff1b.s
  llvm/test/MC/AArch64/SVE/ldff1d.s
  llvm/test/MC/AArch64/SVE/ldff1h.s
  llvm/test/MC/AArch64/SVE/ldff1sb.s
  llvm/test/MC/AArch64/SVE/ldff1sh.s
  llvm/test/MC/AArch64/SVE/ldff1sw.s
  llvm/test/MC/AArch64/SVE/ldff1w.s
  llvm/test/MC/AArch64/SVE/ldnf1b.s
  llvm/test/MC/AArch64/SVE/ldnf1d.s
  llvm/test/MC/AArch64/SVE/ldnf1h.s
  llvm/test/MC/AArch64/SVE/ldnf1sb.s
  llvm/test/MC/AArch64/SVE/ldnf1sh.s
  llvm/test/MC/AArch64/SVE/ldnf1sw.s
  llvm/test/MC/AArch64/SVE/ldnf1w.s
  llvm/test/MC/AArch64/SVE/ldnt1b.s
  llvm/test/MC/AArch64/SVE/ldnt1d.s
  llvm/test/MC/AArch64/SVE/ldnt1h.s
  llvm/test/MC/AArch64/SVE/ldnt1w.s
  llvm/test/MC/AArch64/SVE/ldr.s
  llvm/test/MC/AArch64/SVE/lsl.s
  llvm/test/MC/AArch64/SVE/lslr.s
  llvm/test/MC/AArch64/SVE/lsr.s
  llvm/test/MC/AArch64/SVE/lsrr.s
  llvm/test/MC/AArch64/SVE/mad.s
  llvm/test/MC/AArch64/SVE/matrix-multiply-fp32.s
  llvm/test/MC/AArch64/SVE/matrix-multiply-fp64.s
  llvm/test/MC/AArch64/SVE/matrix-multiply-int8.s
  llvm/test/MC/AArch64/SVE/mla.s
  llvm/test/MC/AArch64/SVE/mls.s
  llvm/test/MC/AArch64/SVE/mov.s
  llvm/test/MC/AArch64/SVE/movprfx.s
  llvm/test/MC/AArch64/SVE/movs.s
  llvm/test/MC/AArch64/SVE/msb.s
  llvm/test/MC/AArch64/SVE/mul.s
  llvm/test/MC/AArch64/SVE/nand.s
  llvm/test/MC/AArch64/SVE/nands.s
  llvm/test/MC/AArch64/SVE/neg.s
  llvm/test/MC/AArch64/SVE/nor.s
  llvm/test/MC/AArch64/SVE/nors.s
  llvm/test/MC/AArch64/SVE/not.s
  llvm/test/MC/AArch64/SVE/nots.s
  llvm/test/MC/AArch64/SVE/orn.s
  llvm/test/MC/AArch64/SVE/orns.s
  llvm/test/MC/AArch64/SVE/orr.s
  llvm/test/MC/AArch64/SVE/orrs.s
  llvm/test/MC/AArch64/SVE/orv.s
  llvm/test/MC/AArch64/SVE/pfalse.s
  llvm/test/MC/AArch64/SVE/pfirst.s
  llvm/test/MC/AArch64/SVE/pnext.s
  llvm/test/MC/AArch64/SVE/prfb-sve-only.s
  llvm/test/MC/AArch64/SVE/prfb.s
  llvm/test/MC/AArch64/SVE/prfd-sve-only.s
  llvm/test/MC/AArch64/SVE/prfd.s
  llvm/test/MC/AArch64/SVE/prfh-sve-only.s
  llvm/test/MC/AArch64/SVE/prfh.s
  llvm/test/MC/AArch64/SVE/prfw-sve-only.s
  llvm/test/MC/AArch64/SVE/prfw.s
  llvm/test/MC/AArch64/SVE/ptest.s
  llvm/test/MC/AArch64/SVE/ptrue.s
  llvm/test/MC/AArch64/SVE/ptrues.s
  llvm/test/MC/AArch64/SVE/punpkhi.s
  llvm/test/MC/AArch64/SVE/punpklo.s
  llvm/test/MC/AArch64/SVE/rbit.s
  llvm/test/MC/AArch64/SVE/rdffr.s
  llvm/test/MC/AArch64/SVE/rdffrs.s
  llvm/test/MC/AArch64/SVE/rdvl.s
  llvm/test/MC/AArch64/SVE/rev.s
  (316 more files...)



More information about the llvm-commits mailing list