diff options
author | Sander de Smalen <sander.desmalen@arm.com> | 2020-06-18 10:08:25 +0100 |
---|---|---|
committer | Sander de Smalen <sander.desmalen@arm.com> | 2020-06-18 11:06:16 +0100 |
commit | 4ea8e27a642c6f97ca69cd39bbe44f7366870f6c (patch) | |
tree | 9bc9b787a3bc318254c3666dc7d91b5ed8edbfe6 /clang/lib | |
parent | 108560e58c41fc70341d763b941a0d6c24c4d3a9 (diff) | |
download | llvm-4ea8e27a642c6f97ca69cd39bbe44f7366870f6c.zip llvm-4ea8e27a642c6f97ca69cd39bbe44f7366870f6c.tar.gz llvm-4ea8e27a642c6f97ca69cd39bbe44f7366870f6c.tar.bz2 |
[SveEmitter] Add builtins to insert/extract subvectors from tuples (svget/svset)
For example:
svint32_t svget4(svint32x4_t tuple, uint64_t imm_index)
returns the subvector at `index`, which must be in range `0..3`.
svint32x3_t svset3(svint32x3_t tuple, uint64_t index, svint32_t vec)
returns a tuple vector with `vec` inserted into `tuple` at `index`,
which must be in range `0..2`.
Reviewers: c-rhodes, efriedma
Reviewed By: c-rhodes
Tags: #clang
Differential Revision: https://reviews.llvm.org/D81464
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 12 |
2 files changed, 14 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 8f8481a..7a138c5 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -8030,10 +8030,10 @@ SmallVector<llvm::Type *, 2> CodeGenFunction::getSVEOverloadTypes( if (TypeFlags.isOverloadWhileRW()) return {getSVEPredType(TypeFlags), Ops[0]->getType()}; - if (TypeFlags.isOverloadCvt()) + if (TypeFlags.isOverloadCvt() || TypeFlags.isTupleSet()) return {Ops[0]->getType(), Ops.back()->getType()}; - if (TypeFlags.isTupleCreate()) + if (TypeFlags.isTupleCreate() || TypeFlags.isTupleGet()) return {ResultType, Ops[0]->getType()}; assert(TypeFlags.isOverloadDefault() && "Unexpected value for overloads"); diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index b847161..821074d 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -2131,6 +2131,18 @@ bool Sema::CheckSVEBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { diag::err_rotation_argument_to_cmla)) HasError = true; break; + case SVETypeFlags::ImmCheck0_1: + if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 1)) + HasError = true; + break; + case SVETypeFlags::ImmCheck0_2: + if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 2)) + HasError = true; + break; + case SVETypeFlags::ImmCheck0_3: + if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 3)) + HasError = true; + break; } } |