aboutsummaryrefslogtreecommitdiff
path: root/clang/lib
diff options
context:
space:
mode:
authorSander de Smalen <sander.desmalen@arm.com>2020-06-18 10:08:25 +0100
committerSander de Smalen <sander.desmalen@arm.com>2020-06-18 11:06:16 +0100
commit4ea8e27a642c6f97ca69cd39bbe44f7366870f6c (patch)
tree9bc9b787a3bc318254c3666dc7d91b5ed8edbfe6 /clang/lib
parent108560e58c41fc70341d763b941a0d6c24c4d3a9 (diff)
downloadllvm-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.cpp4
-rw-r--r--clang/lib/Sema/SemaChecking.cpp12
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;
}
}