[clang] [TBAA] Emit int TBAA metadata on FP math libcalls (PR #96025)
Eli Friedman via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 25 09:41:59 PDT 2024
================
@@ -707,7 +707,39 @@ static RValue emitLibraryCall(CodeGenFunction &CGF, const FunctionDecl *FD,
const CallExpr *E, llvm::Constant *calleeValue) {
CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, E);
CGCallee callee = CGCallee::forDirect(calleeValue, GlobalDecl(FD));
- return CGF.EmitCall(E->getCallee()->getType(), callee, E, ReturnValueSlot());
+ RValue Call =
+ CGF.EmitCall(E->getCallee()->getType(), callee, E, ReturnValueSlot());
+
+ // Check the supported intrinsic.
+ if (unsigned BuiltinID = FD->getBuiltinID()) {
+ auto IntrinsicID = [&]() -> unsigned {
+ switch (BuiltinID) {
+ case Builtin::BIexpf:
+ case Builtin::BI__builtin_expf:
+ case Builtin::BI__builtin_expf128:
+ return true;
+ }
+ // TODO: support more FP math libcalls
+ return false;
+ }();
+
+ // Restrict to target with errno, for example, MacOS doesn't set errno.
+ if (IntrinsicID && CGF.CGM.getLangOpts().MathErrno) {
+ llvm::MDBuilder MDHelper(CGF.getLLVMContext());
+ ASTContext &Context = CGF.getContext();
+ // Emit "int" TBAA metadata on FP math libcalls.
+ clang::QualType IntTy = Context.IntTy;
+ MDNode *AliasType = CGF.CGM.getTBAATypeInfo(IntTy);
+ MDNode *MDInt = MDHelper.createTBAAStructTagNode(AliasType, AliasType, 0);
----------------
efriedma-quic wrote:
I think you want CodeGenModule::getTBAAAccessTagInfo, not getTBAATypeInfo? (My mistake.)
https://github.com/llvm/llvm-project/pull/96025
More information about the cfe-commits
mailing list