[PATCH] D57504: RFC: EVL Prototype & Roadmap for vector predication in LLVM

Simon Moll via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 1 05:59:45 PST 2019


simoll marked an inline comment as done.
simoll added a comment.

In D57504#1380504 <https://reviews.llvm.org/D57504#1380504>, @programmerjake wrote:

> We will also need to adjust gather/scatter and possibly other load/store kinds to allow the address vector length to be a divisor of the main vector length (similar to mask vector length). I didn't check if there are intrinsics for strided load/store, those will need to be changed too, to allow, for example, storing <scalable 3 x float> to var.v in:


.. and as a side effect evl_load/evl_store are subsumed by evl_gather/evl_scatter:

  evl.load(%p, %M, %L) ==  evl.gather(<1 x double*> %p, <256 x i1>..) ==  evl.gather(double* %p, <256 x i1> %M, i32 %L)

Nice :)

Regarding strided memory accesses, i was hoping the stride could be pattern matched in the backend.



================
Comment at: include/llvm/IR/Intrinsics.td:1132
+                                LLVMMatchType<0>,
+                                LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
+                                llvm_i32_ty]>;
----------------
programmerjake wrote:
> We will need to change the mask parameter length to allow for mask lengths that are a divisor of the main vector length.
> See http://lists.llvm.org/pipermail/llvm-dev/2019-February/129845.html
Can we make the vector length operate at the granularity of the mask?

In your case [1] that would mean that the AVL refers to multiples of the short element vector (eg `<3 x float>`).

[1] http://lists.libre-riscv.org/pipermail/libre-riscv-dev/2019-January/000433.html


Repository:
  rL LLVM

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

https://reviews.llvm.org/D57504





More information about the llvm-commits mailing list