Skip to content

Commit 5dba71f

Browse files
committed
fix bug; add more test cases
1 parent 316f608 commit 5dba71f

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

clang/lib/AST/ExprConstant.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13148,6 +13148,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1314813148
case Builtin::BI__builtin_popcountl:
1314913149
case Builtin::BI__builtin_popcountll:
1315013150
case Builtin::BI__builtin_popcountg:
13151+
case Builtin::BI__builtin_elementwise_popcount:
1315113152
case Builtin::BI__popcnt16: // Microsoft variants of popcount
1315213153
case Builtin::BI__popcnt:
1315313154
case Builtin::BI__popcnt64: {

clang/test/Sema/constant_builtins_vector.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,3 +802,16 @@ static_assert(__builtin_reduce_add(__builtin_elementwise_popcount((vector4int){1
802802
static_assert(__builtin_reduce_add(__builtin_elementwise_popcount((vector4int){0, 0xF0F0, ~0, ~0xF0F0})) == 16 * sizeof(int));
803803
static_assert(__builtin_reduce_add(__builtin_elementwise_popcount((vector4long){1L, 2L, 3L, 4L})) == 5L);
804804
static_assert(__builtin_reduce_add(__builtin_elementwise_popcount((vector4long){0L, 0xF0F0L, ~0L, ~0xF0F0L})) == 16 * sizeof(long long));
805+
static_assert(__builtin_reduce_add(__builtin_elementwise_popcount((vector4uint){1U, 2U, 3U, 4U})) == 5U);
806+
static_assert(__builtin_reduce_add(__builtin_elementwise_popcount((vector4uint){0U, 0xF0F0U, ~0U, ~0xF0F0U})) == 16 * sizeof(int));
807+
static_assert(__builtin_reduce_add(__builtin_elementwise_popcount((vector4ulong){1UL, 2UL, 3UL, 4UL})) == 5L);
808+
static_assert(__builtin_reduce_add(__builtin_elementwise_popcount((vector4ulong){0UL, 0xF0F0UL, ~0UL, ~0xF0F0UL})) == 16 * sizeof(long long));
809+
static_assert(__builtin_elementwise_popcount(0) == 0);
810+
static_assert(__builtin_elementwise_popcount(0xF0F0) == 8);
811+
static_assert(__builtin_elementwise_popcount(~0) == 8 * sizeof(int));
812+
static_assert(__builtin_elementwise_popcount(0U) == 0);
813+
static_assert(__builtin_elementwise_popcount(0xF0F0U) == 8);
814+
static_assert(__builtin_elementwise_popcount(~0U) == 8 * sizeof(int));
815+
static_assert(__builtin_elementwise_popcount(0L) == 0);
816+
static_assert(__builtin_elementwise_popcount(0xF0F0L) == 8);
817+
static_assert(__builtin_elementwise_popcount(~0LL) == 8 * sizeof(long long));

0 commit comments

Comments
 (0)