aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Sema/DeclSpec.cpp
diff options
context:
space:
mode:
authorAhsan Saghir <saghir@ca.ibm.com>2020-06-14 20:37:29 -0500
committerAhsan Saghir <saghir@ca.ibm.com>2020-06-23 21:25:56 -0500
commitf4c337ab85c0b7ec206da0f2c6576730eefb36c2 (patch)
tree15e3aa4ef4706489b1add2be0b9a6d6baf90dd85 /clang/lib/Sema/DeclSpec.cpp
parentfceadbcb335da23d0a9beba8c4080a3e4222a385 (diff)
downloadllvm-f4c337ab85c0b7ec206da0f2c6576730eefb36c2.zip
llvm-f4c337ab85c0b7ec206da0f2c6576730eefb36c2.tar.gz
llvm-f4c337ab85c0b7ec206da0f2c6576730eefb36c2.tar.bz2
[PowerPC] Add support for vector bool __int128 for Power10
Summary: This patch adds support for `vector bool __int128` type for Power10. Reviewers: #powerpc, hfinkel, lei, stefanp, amyk Reviewed By: #powerpc, lei, amyk Subscribers: lei, amyk, wuzish, nemanjai, shchenz, cfe-commits Tags: #llvm, #powerpc, #clang Differential Revision: https://reviews.llvm.org/D81816
Diffstat (limited to 'clang/lib/Sema/DeclSpec.cpp')
-rw-r--r--clang/lib/Sema/DeclSpec.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/clang/lib/Sema/DeclSpec.cpp b/clang/lib/Sema/DeclSpec.cpp
index 6ad50e1..f4c30c9 100644
--- a/clang/lib/Sema/DeclSpec.cpp
+++ b/clang/lib/Sema/DeclSpec.cpp
@@ -1150,14 +1150,20 @@ void DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {
S.Diag(TSSLoc, diag::err_invalid_vector_bool_decl_spec)
<< getSpecifierName((TSS)TypeSpecSign);
}
-
- // Only char/int are valid with vector bool. (PIM 2.1)
+ // Only char/int are valid with vector bool prior to Power10.
+ // Power10 adds instructions that produce vector bool data
+ // for quadwords as well so allow vector bool __int128.
if (((TypeSpecType != TST_unspecified) && (TypeSpecType != TST_char) &&
- (TypeSpecType != TST_int)) || TypeAltiVecPixel) {
+ (TypeSpecType != TST_int) && (TypeSpecType != TST_int128)) ||
+ TypeAltiVecPixel) {
S.Diag(TSTLoc, diag::err_invalid_vector_bool_decl_spec)
<< (TypeAltiVecPixel ? "__pixel" :
getSpecifierName((TST)TypeSpecType, Policy));
}
+ // vector bool __int128 requires Power10.
+ if ((TypeSpecType == TST_int128) &&
+ (!S.Context.getTargetInfo().hasFeature("power10-vector")))
+ S.Diag(TSTLoc, diag::err_invalid_vector_bool_int128_decl_spec);
// Only 'short' and 'long long' are valid with vector bool. (PIM 2.1)
if ((TypeSpecWidth != TSW_unspecified) && (TypeSpecWidth != TSW_short) &&
@@ -1174,7 +1180,7 @@ void DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {
// Elements of vector bool are interpreted as unsigned. (PIM 2.1)
if ((TypeSpecType == TST_char) || (TypeSpecType == TST_int) ||
- (TypeSpecWidth != TSW_unspecified))
+ (TypeSpecType == TST_int128) || (TypeSpecWidth != TSW_unspecified))
TypeSpecSign = TSS_unsigned;
} else if (TypeSpecType == TST_double) {
// vector long double and vector long long double are never allowed.