================
@@ -2196,7 +2197,44 @@ void CIRGenModule::setCIRFunctionAttributesForDefinition(
   } else if (codeGenOpts.getInlining() == CodeGenOptions::OnlyAlwaysInlining) {
     // If inlining is disabled, force everything that isn't always_inline
     // to carry an explicit noinline attribute.
+    // However, don't mark functions as noinline if they only contain
+    // builtin calls that will become intrinsics - these simple wrappers
+    // should be allowed to inline so the intrinsics can be optimized.
     if (!isAlwaysInline) {
+      // Check if this function contains any builtin calls that will become
+      // intrinsics. If so, don't mark as noinline - let the optimizer handle
+      // it.
+      if (auto *fd = dyn_cast<FunctionDecl>(decl)) {
----------------
bcardosolopes wrote:

Instead of doing a visitor walk here, which can get expensive, did you try a 
CIRGenFunction state that is flipped to true everytime if finds a builtin? 

https://github.com/llvm/llvm-project/pull/175233
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to