aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/ExpandVectorPredication.cpp
diff options
context:
space:
mode:
authorLorenzo Albano <loralb@posteo.net>2022-07-18 08:49:19 +0200
committerSimon Moll <moll@cs.uni-saarland.de>2022-07-18 17:00:38 +0200
commitc00a44fa683983f2f0373f5f7b684f8b0213609f (patch)
tree3ca7b75ff2d1bb1998e595f0631901235a721079 /llvm/lib/CodeGen/ExpandVectorPredication.cpp
parent09cebfb978def7fa2a4460bca89690f8d3608216 (diff)
downloadllvm-c00a44fa683983f2f0373f5f7b684f8b0213609f.zip
llvm-c00a44fa683983f2f0373f5f7b684f8b0213609f.tar.gz
llvm-c00a44fa683983f2f0373f5f7b684f8b0213609f.tar.bz2
[VP] IR expansion pass for VP gather and scatter
Add vp_gather and vp_scatter expansion to unpredicated intrinsics. Reviewed By: simoll Differential Revision: https://reviews.llvm.org/D120664
Diffstat (limited to 'llvm/lib/CodeGen/ExpandVectorPredication.cpp')
-rw-r--r--llvm/lib/CodeGen/ExpandVectorPredication.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/ExpandVectorPredication.cpp b/llvm/lib/CodeGen/ExpandVectorPredication.cpp
index ae913f5..515484c 100644
--- a/llvm/lib/CodeGen/ExpandVectorPredication.cpp
+++ b/llvm/lib/CodeGen/ExpandVectorPredication.cpp
@@ -402,6 +402,8 @@ CachingVPExpander::expandPredicationInMemoryIntrinsic(IRBuilder<> &Builder,
VPIntrinsic &VPI) {
assert(VPI.canIgnoreVectorLengthParam());
+ const auto &DL = F.getParent()->getDataLayout();
+
Value *MaskParam = VPI.getMaskParam();
Value *PtrParam = VPI.getMemoryPointerParam();
Value *DataParam = VPI.getMemoryDataParam();
@@ -437,6 +439,22 @@ CachingVPExpander::expandPredicationInMemoryIntrinsic(IRBuilder<> &Builder,
VPI.getType(), PtrParam, AlignOpt.valueOrOne(), MaskParam);
break;
+ case Intrinsic::vp_scatter: {
+ auto *ElementType =
+ cast<VectorType>(DataParam->getType())->getElementType();
+ NewMemoryInst = Builder.CreateMaskedScatter(
+ DataParam, PtrParam,
+ AlignOpt.getValueOr(DL.getPrefTypeAlign(ElementType)), MaskParam);
+ break;
+ }
+ case Intrinsic::vp_gather: {
+ auto *ElementType = cast<VectorType>(VPI.getType())->getElementType();
+ NewMemoryInst = Builder.CreateMaskedGather(
+ VPI.getType(), PtrParam,
+ AlignOpt.getValueOr(DL.getPrefTypeAlign(ElementType)), MaskParam,
+ nullptr, VPI.getName());
+ break;
+ }
}
assert(NewMemoryInst);
@@ -525,6 +543,8 @@ Value *CachingVPExpander::expandPredication(VPIntrinsic &VPI) {
break;
case Intrinsic::vp_load:
case Intrinsic::vp_store:
+ case Intrinsic::vp_gather:
+ case Intrinsic::vp_scatter:
return expandPredicationInMemoryIntrinsic(Builder, VPI);
}