Skip to content

Commit 67935ac

Browse files
committed
[Clang] Allow vector and matrix type attributes for sub-byte _BitInt
Signed-off-by: Sidorov, Dmitry <[email protected]>
1 parent ba63150 commit 67935ac

File tree

4 files changed

+6
-16
lines changed

4 files changed

+6
-16
lines changed

clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3257,8 +3257,7 @@ def err_attribute_too_few_arguments : Error<
32573257
"%0 attribute takes at least %1 argument%s1">;
32583258
def err_attribute_invalid_vector_type : Error<"invalid vector element type %0">;
32593259
def err_attribute_invalid_bitint_vector_type : Error<
3260-
"'_BitInt' %select{vector|matrix}0 element width must be %select{a power of 2|"
3261-
"at least as wide as 'CHAR_BIT'}1">;
3260+
"'_BitInt' %select{vector|matrix}0 element width must be a power of 2">;
32623261
def err_attribute_invalid_matrix_type : Error<"invalid matrix element type %0">;
32633262
def err_attribute_bad_neon_vector_size : Error<
32643263
"Neon vector size must be 64 or 128 bits">;

clang/lib/Sema/SemaType.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2321,9 +2321,9 @@ static bool CheckBitIntElementType(Sema &S, SourceLocation AttrLoc,
23212321
bool ForMatrixType = false) {
23222322
// Only support _BitInt elements with byte-sized power of 2 NumBits.
23232323
unsigned NumBits = BIT->getNumBits();
2324-
if (!llvm::isPowerOf2_32(NumBits) || NumBits < 8)
2324+
if (!llvm::isPowerOf2_32(NumBits))
23252325
return S.Diag(AttrLoc, diag::err_attribute_invalid_bitint_vector_type)
2326-
<< ForMatrixType << (NumBits < 8);
2326+
<< ForMatrixType;
23272327
return false;
23282328
}
23292329

clang/test/SemaCXX/ext-int.cpp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -84,17 +84,9 @@ struct is_same<T,T> {
8484
};
8585

8686
// Reject vector types:
87-
// expected-error@+1{{'_BitInt' vector element width must be at least as wide as 'CHAR_BIT'}}
88-
typedef _BitInt(2) __attribute__((vector_size(16))) VecTy;
89-
// expected-error@+1{{'_BitInt' vector element width must be at least as wide as 'CHAR_BIT'}}
90-
typedef _BitInt(2) __attribute__((ext_vector_type(32))) OtherVecTy;
91-
// expected-error@+1{{'_BitInt' vector element width must be at least as wide as 'CHAR_BIT'}}
92-
typedef _BitInt(4) __attribute__((vector_size(16))) VecTy2;
93-
// expected-error@+1{{'_BitInt' vector element width must be at least as wide as 'CHAR_BIT'}}
94-
typedef _BitInt(4) __attribute__((ext_vector_type(32))) OtherVecTy2;
95-
// expected-error@+1{{'_BitInt' vector element width must be at least as wide as 'CHAR_BIT'}}
87+
// expected-error@+1{{'_BitInt' vector element width must be a power of 2}}
9688
typedef _BitInt(5) __attribute__((vector_size(16))) VecTy3;
97-
// expected-error@+1{{'_BitInt' vector element width must be at least as wide as 'CHAR_BIT'}}
89+
// expected-error@+1{{'_BitInt' vector element width must be a power of 2}}
9890
typedef _BitInt(5) __attribute__((ext_vector_type(32))) OtherVecTy3;
9991
// expected-error@+1{{'_BitInt' vector element width must be a power of 2}}
10092
typedef _BitInt(37) __attribute__((vector_size(16))) VecTy4;

clang/test/SemaCXX/matrix-type.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ void matrix_unsupported_element_type() {
3131
}
3232

3333
void matrix_unsupported_bit_int() {
34-
using m1 = _BitInt(2) __attribute__((matrix_type(4, 4))); // expected-error{{'_BitInt' matrix element width must be at least as wide as 'CHAR_BIT'}}
35-
using m2 = _BitInt(7) __attribute__((matrix_type(4, 4))); // expected-error{{'_BitInt' matrix element width must be at least as wide as 'CHAR_BIT'}}
34+
using m2 = _BitInt(7) __attribute__((matrix_type(4, 4))); // expected-error{{'_BitInt' matrix element width must be a power of 2}}
3635
using m3 = _BitInt(9) __attribute__((matrix_type(4, 4))); // expected-error{{'_BitInt' matrix element width must be a power of 2}}
3736
using m4 = _BitInt(12) __attribute__((matrix_type(4, 4))); // expected-error{{'_BitInt' matrix element width must be a power of 2}}
3837
using m5 = _BitInt(8) __attribute__((matrix_type(4, 4)));

0 commit comments

Comments
 (0)