diff options
author | Ahsan Saghir <saghir@ca.ibm.com> | 2020-06-14 20:37:29 -0500 |
---|---|---|
committer | Ahsan Saghir <saghir@ca.ibm.com> | 2020-06-23 21:25:56 -0500 |
commit | f4c337ab85c0b7ec206da0f2c6576730eefb36c2 (patch) | |
tree | 15e3aa4ef4706489b1add2be0b9a6d6baf90dd85 /clang/lib/Sema/DeclSpec.cpp | |
parent | fceadbcb335da23d0a9beba8c4080a3e4222a385 (diff) | |
download | llvm-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.cpp | 14 |
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. |