================
@@ -78,6 +79,21 @@ void HandleComplexComplexDiv(llvm::APFloat A, llvm::APFloat
B, llvm::APFloat C,
CharUnits GetAlignOfExpr(const ASTContext &Ctx, const Expr *E,
UnaryExprOrTypeTrait ExprKind);
+/// Return the (normalized) builtin ID to dispatch on in the constant
+/// evaluators' target-specific cases, or 0 if the builtin is not one those
+/// cases should handle. Translates an auxiliary target builtin ID back to its
+/// canonical value and only returns IDs for architectures the constant
+/// evaluators can fold (currently x86/x86_64).
+///
+/// The ID-based overload performs no work beyond a single comparison for
+/// target-independent builtins, so it is suitable for hot paths (e.g. the
+/// bytecode interpreter's builtin dispatch) where re-deriving the ID from the
+/// call expression would be wasteful.
+unsigned getConstantEvaluatedBuiltinID(const ASTContext &Ctx,
+ unsigned BuiltinID);
----------------
efriedma-quic wrote:
This still has the problem that it assumes we only care about x86 builtins, in
a non-obvious way. It's not obvious how we adjust this to support other
targets.
Maybe this signature is fine, though; we can rename the function to
`ConvertBuiltinIDToX86BuiltinID`, or something like that, which more accurately
describes what it's doing.
https://github.com/llvm/llvm-project/pull/201805
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits