@@ -11310,7 +11310,8 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
1131011310 switch (E->getBuiltinCallee()) {
1131111311 default:
1131211312 return false;
11313- case Builtin::BI__builtin_elementwise_popcount: {
11313+ case Builtin::BI__builtin_elementwise_popcount:
11314+ case Builtin::BI__builtin_elementwise_bitreverse: {
1131411315 APValue Source;
1131511316 if (!EvaluateAsRValue(Info, E->getArg(0), Source))
1131611317 return false;
@@ -11322,9 +11323,18 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) {
1132211323
1132311324 for (unsigned EltNum = 0; EltNum < SourceLen; ++EltNum) {
1132411325 APSInt Elt = Source.getVectorElt(EltNum).getInt();
11325- ResultElements.push_back(
11326- APValue(APSInt(APInt(Info.Ctx.getIntWidth(DestEltTy), Elt.popcount()),
11327- DestEltTy->isUnsignedIntegerOrEnumerationType())));
11326+ switch (E->getBuiltinCallee()) {
11327+ case Builtin::BI__builtin_elementwise_popcount:
11328+ ResultElements.push_back(APValue(
11329+ APSInt(APInt(Info.Ctx.getIntWidth(DestEltTy), Elt.popcount()),
11330+ DestEltTy->isUnsignedIntegerOrEnumerationType())));
11331+ break;
11332+ case Builtin::BI__builtin_elementwise_bitreverse:
11333+ ResultElements.push_back(
11334+ APValue(APSInt(Elt.reverseBits(),
11335+ DestEltTy->isUnsignedIntegerOrEnumerationType())));
11336+ break;
11337+ }
1132811338 }
1132911339
1133011340 return Success(APValue(ResultElements.data(), ResultElements.size()), E);
@@ -12833,7 +12843,8 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
1283312843 case Builtin::BI__builtin_bitreverse8:
1283412844 case Builtin::BI__builtin_bitreverse16:
1283512845 case Builtin::BI__builtin_bitreverse32:
12836- case Builtin::BI__builtin_bitreverse64: {
12846+ case Builtin::BI__builtin_bitreverse64:
12847+ case Builtin::BI__builtin_elementwise_bitreverse: {
1283712848 APSInt Val;
1283812849 if (!EvaluateInteger(E->getArg(0), Val, Info))
1283912850 return false;
0 commit comments