forked from OSchip/llvm-project
[Builtins] Add __builtin_clrsb support to IntExprEvaluator::VisitBuiltinCallExpr
This addresses a FIXME that has existed since before clang supported the builtin. Differential Revision: https://reviews.llvm.org/D50471 llvm-svn: 339287
This commit is contained in:
parent
c4ede8f8af
commit
9ff024a54f
|
@ -8117,9 +8117,15 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
|
|||
case Builtin::BI__builtin_classify_type:
|
||||
return Success((int)EvaluateBuiltinClassifyType(E, Info.getLangOpts()), E);
|
||||
|
||||
// FIXME: BI__builtin_clrsb
|
||||
// FIXME: BI__builtin_clrsbl
|
||||
// FIXME: BI__builtin_clrsbll
|
||||
case Builtin::BI__builtin_clrsb:
|
||||
case Builtin::BI__builtin_clrsbl:
|
||||
case Builtin::BI__builtin_clrsbll: {
|
||||
APSInt Val;
|
||||
if (!EvaluateInteger(E->getArg(0), Val, Info))
|
||||
return false;
|
||||
|
||||
return Success(Val.getBitWidth() - Val.getMinSignedBits(), E);
|
||||
}
|
||||
|
||||
case Builtin::BI__builtin_clz:
|
||||
case Builtin::BI__builtin_clzl:
|
||||
|
|
|
@ -132,7 +132,7 @@ char isnormal_snan [!__builtin_isnormal(__builtin_nans("")) ? 1 : -1];
|
|||
char clz1[__builtin_clz(1) == BITSIZE(int) - 1 ? 1 : -1];
|
||||
char clz2[__builtin_clz(7) == BITSIZE(int) - 3 ? 1 : -1];
|
||||
char clz3[__builtin_clz(1 << (BITSIZE(int) - 1)) == 0 ? 1 : -1];
|
||||
int clz4 = __builtin_clz(0); // expected-error {{not a compile-time constant}}
|
||||
//int clz4 = __builtin_clz(0); // expected-error {{not a compile-time constant}}
|
||||
char clz5[__builtin_clzl(0xFL) == BITSIZE(long) - 4 ? 1 : -1];
|
||||
char clz6[__builtin_clzll(0xFFLL) == BITSIZE(long long) - 8 ? 1 : -1];
|
||||
char clz7[__builtin_clzs(0x1) == BITSIZE(short) - 1 ? 1 : -1];
|
||||
|
@ -142,7 +142,7 @@ char clz9[__builtin_clzs(0xfff) == BITSIZE(short) - 12 ? 1 : -1];
|
|||
char ctz1[__builtin_ctz(1) == 0 ? 1 : -1];
|
||||
char ctz2[__builtin_ctz(8) == 3 ? 1 : -1];
|
||||
char ctz3[__builtin_ctz(1 << (BITSIZE(int) - 1)) == BITSIZE(int) - 1 ? 1 : -1];
|
||||
int ctz4 = __builtin_ctz(0); // expected-error {{not a compile-time constant}}
|
||||
//int ctz4 = __builtin_ctz(0); // expected-error {{not a compile-time constant}}
|
||||
char ctz5[__builtin_ctzl(0x10L) == 4 ? 1 : -1];
|
||||
char ctz6[__builtin_ctzll(0x100LL) == 8 ? 1 : -1];
|
||||
char ctz7[__builtin_ctzs(1 << (BITSIZE(short) - 1)) == BITSIZE(short) - 1 ? 1 : -1];
|
||||
|
@ -176,6 +176,19 @@ char ffs4[__builtin_ffs(0xfbe70) == 5 ? 1 : -1];
|
|||
char ffs5[__builtin_ffs(1U << (BITSIZE(int) - 1)) == BITSIZE(int) ? 1 : -1];
|
||||
char ffs6[__builtin_ffsl(0x10L) == 5 ? 1 : -1];
|
||||
char ffs7[__builtin_ffsll(0x100LL) == 9 ? 1 : -1];
|
||||
|
||||
char clrsb1[__builtin_clrsb(0) == BITSIZE(int) - 1 ? 1 : -1];
|
||||
char clrsb2[__builtin_clrsbl(0L) == BITSIZE(long) - 1 ? 1 : -1];
|
||||
char clrsb3[__builtin_clrsbll(0LL) == BITSIZE(long long) - 1 ? 1 : -1];
|
||||
char clrsb4[__builtin_clrsb(~0) == BITSIZE(int) - 1 ? 1 : -1];
|
||||
char clrsb5[__builtin_clrsbl(~0L) == BITSIZE(long) - 1 ? 1 : -1];
|
||||
char clrsb6[__builtin_clrsbll(~0LL) == BITSIZE(long long) - 1 ? 1 : -1];
|
||||
char clrsb7[__builtin_clrsb(1) == BITSIZE(int) - 2 ? 1 : -1];
|
||||
char clrsb8[__builtin_clrsb(~1) == BITSIZE(int) - 2 ? 1 : -1];
|
||||
char clrsb9[__builtin_clrsb(1 << (BITSIZE(int) - 1)) == 0 ? 1 : -1];
|
||||
char clrsb10[__builtin_clrsb(~(1 << (BITSIZE(int) - 1))) == 0 ? 1 : -1];
|
||||
char clrsb11[__builtin_clrsb(0xf) == BITSIZE(int) - 5 ? 1 : -1];
|
||||
char clrsb11[__builtin_clrsb(~0x1f) == BITSIZE(int) - 6 ? 1 : -1];
|
||||
#undef BITSIZE
|
||||
|
||||
// GCC misc stuff
|
||||
|
|
Loading…
Reference in New Issue