[PATCH] D72330: [ARM][MVE] Enable masked gathers from base + vector of offsets
Dave Green via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 9 14:00:31 PST 2020
dmgreen added inline comments.
================
Comment at: llvm/lib/Target/ARM/MVEGatherScatterLowering.cpp:174-188
+ Value *GEPPtr = GEP->getPointerOperand();
+ if (GEPPtr->getType()->isVectorTy()) {
+ // FIXME: In this case, we could try to build a QI gather load
+ LLVM_DEBUG(dbgs() << "masked gathers: gather from a vector of pointers"
+ << " hidden behind a getelementptr currently not"
+ << " supported. Expanding.\n");
+ return false;
----------------
These return false's are worrying me a little. There may be cases where we cannot select this as a GEP, but it would be fine to fall back to selecting the qi variant instead. Maybe something like this, for example:
```
define arm_aapcs_vfpcc <4 x i32> @qi4(<4 x i32*> %p) {
entry:
%g = getelementptr inbounds i32, <4 x i32*> %p, i32 4
%gather = call <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*> %g, i32 4, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> undef)
ret <4 x i32> %gather
}
```
It can also be selected as a `VLDRW.u32 Qd, [P, 4]` I think, but we should be able to get a `VLDRW.u32 Qd, [g]` at least. I believe you mentioned something similar to this when talking about scatter lowering.
Also it probably makes sense to check these basic things about the GEP before the offset code above. (Although I think any GEP we see will always has at least 1 offset, it makes conceptual sense to check the number of operands before using them).
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D72330/new/
https://reviews.llvm.org/D72330
More information about the llvm-commits
mailing list