diff options
author | Andrzej Warzynski <andrzej.warzynski@arm.com> | 2020-04-07 11:09:01 +0100 |
---|---|---|
committer | Andrzej Warzynski <andrzej.warzynski@arm.com> | 2020-04-22 13:21:39 +0100 |
commit | 72f565899dd4bf1fcb183555ba9089b7452b3f8a (patch) | |
tree | 6890ca23fc29a6a41025ada5a6142a2a528ada73 /clang/lib/CodeGen/CodeGenFunction.h | |
parent | 67266d879c715cdcfb790acf0153da757dafd195 (diff) | |
download | llvm-72f565899dd4bf1fcb183555ba9089b7452b3f8a.zip llvm-72f565899dd4bf1fcb183555ba9089b7452b3f8a.tar.gz llvm-72f565899dd4bf1fcb183555ba9089b7452b3f8a.tar.bz2 |
[SveEmitter] Implement builtins for gathers/scatters
This patch adds builtins for:
* regular, first-faulting and non-temporal gather loads
* regular and non-temporal scatter stores
Differential Revision: https://reviews.llvm.org/D77735
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.h')
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.h | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h index 2429f5d..786117a 100644 --- a/clang/lib/CodeGen/CodeGenFunction.h +++ b/clang/lib/CodeGen/CodeGenFunction.h @@ -3903,9 +3903,21 @@ public: llvm::Value *EmitNeonRShiftImm(llvm::Value *Vec, llvm::Value *Amt, llvm::Type *Ty, bool usgn, const char *name); llvm::Value *vectorWrapScalar16(llvm::Value *Op); + /// SVEBuiltinMemEltTy - Returns the memory element type for this memory + /// access builtin. Only required if it can't be inferred from the base + /// pointer operand. + llvm::Type *SVEBuiltinMemEltTy(SVETypeFlags TypeFlags); - llvm::Type *getSVEType(const SVETypeFlags &TypeFlags); + llvm::Type *getEltType(SVETypeFlags TypeFlags); + + llvm::VectorType *getSVEType(const SVETypeFlags &TypeFlags); llvm::Value *EmitSVEPredicateCast(llvm::Value *Pred, llvm::VectorType *VTy); + llvm::Value *EmitSVEGatherLoad(SVETypeFlags TypeFlags, + llvm::SmallVectorImpl<llvm::Value *> &Ops, + unsigned IntID); + llvm::Value *EmitSVEScatterStore(SVETypeFlags TypeFlags, + llvm::SmallVectorImpl<llvm::Value *> &Ops, + unsigned IntID); llvm::Value *EmitSVEMaskedLoad(const CallExpr *, llvm::Type *ReturnTy, SmallVectorImpl<llvm::Value *> &Ops, unsigned BuiltinID, bool IsZExtReturn); |