[clang] [clang] Add sincos builtin using `llvm.sincos` intrinsic (PR #114086)

Benjamin Maxwell via cfe-commits cfe-commits at lists.llvm.org
Thu Dec 19 03:20:21 PST 2024


================
@@ -3232,6 +3264,22 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
       return RValue::get(emitUnaryMaybeConstrainedFPBuiltin(
           *this, E, Intrinsic::sinh, Intrinsic::experimental_constrained_sinh));
 
+    case Builtin::BIsincos:
+    case Builtin::BIsincosf:
+    case Builtin::BIsincosl:
+    case Builtin::BI__builtin_sincos:
+    case Builtin::BI__builtin_sincosf:
+    case Builtin::BI__builtin_sincosl:
+      // Only use the llvm.sincos.* builtin on AArch64 with optimizations.
+      // Currently, getting codegen that is no worse than the direct call
+      // requires using AA during codegen. This is not done at optlevel=none,
+      // and not all targets support this (AArch64 is one of the few known to).
+      if (!getTarget().getTriple().isAArch64() ||
+          CGM.getCodeGenOpts().OptimizationLevel == 0)
+        break;
----------------
MacDue wrote:

(Really, I only need the `noalias` metadata to work, but that still requires AA to be enabled in the DAG)

https://github.com/llvm/llvm-project/pull/114086


More information about the cfe-commits mailing list