This patch introduces two new experimental IR intrinsics and SDAG nodes to represent vector strided loads and stores.
|50 ms||x64 debian > LLVM.Bindings/Go::go.test|
Script: -- : 'RUN: at line 1'; /var/lib/buildkite-agent/builds/llvm-project/build/bin/llvm-go go=/usr/bin/go test llvm.org/llvm/bindings/go/llvm
Is this an existing mistake in the documentation? Can you just push this as an NFC commit? No need to bury it in this patch.
Since this accesses multiple disjoint memory locations, the Size is not MemVT.getStoreSize(). It probably needs to always be unknown. I guess it would be if the stride were statically known to be 0, but not sure it is worth special casing that.
Same as load, the Size can't be based on the store type.
This Size doesn't make sense. I think it needs to be unknown.
Can these be SmallVectorImpl<SDValue>?
- use explicit return type in Intrinsic::getDeclaration() for experimental_vp_strided_load
- get first argument type from first operand in Intrinsic::getDeclaration() for experimental_vp_strided_store
Reflecting on how the strided versions work, I was thinking if, semantically speaking, it would be better to define the pointer operand as a pointer to the scalar element type of the data/return operand instead of a pointer to a vector (this is only relevant while opaque pointers are not the default)
The stride can have a different number of bits than the ptr.