[cfe-commits] r152754 - in /cfe/trunk: include/clang/Frontend/CodeGenOptions.h lib/CodeGen/CodeGenFunction.cpp lib/Frontend/CompilerInvocation.cpp test/CodeGen/noinline.c

Chad Rosier mcrosier at apple.com
Wed Mar 14 16:32:11 PDT 2012


Author: mcrosier
Date: Wed Mar 14 18:32:11 2012
New Revision: 152754

URL: http://llvm.org/viewvc/llvm-project?rev=152754&view=rev
Log:
[frontend] Add support for disabling the "inline" keyword using 
-fno-inline-functions.

This behaves much like -fno-inline in gcc, but based on a discussion with 
Daniel it was decided that -fno-inline-functions should subsume -fno-inline.
Please speak up if you object.  The -fno-inline flag remains ignored.
Final part of rdar://10972766


Modified:
    cfe/trunk/include/clang/Frontend/CodeGenOptions.h
    cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
    cfe/trunk/lib/Frontend/CompilerInvocation.cpp
    cfe/trunk/test/CodeGen/noinline.c

Modified: cfe/trunk/include/clang/Frontend/CodeGenOptions.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CodeGenOptions.h?rev=152754&r1=152753&r2=152754&view=diff
==============================================================================
--- cfe/trunk/include/clang/Frontend/CodeGenOptions.h (original)
+++ cfe/trunk/include/clang/Frontend/CodeGenOptions.h Wed Mar 14 18:32:11 2012
@@ -78,6 +78,8 @@
   unsigned NoGlobalMerge     : 1; /// Set when -mno-global-merge is enabled.
   unsigned NoImplicitFloat   : 1; /// Set when -mno-implicit-float is enabled.
   unsigned NoInfsFPMath      : 1; /// Assume FP arguments, results not +-Inf.
+  unsigned NoInline          : 1; /// Set when -fno-inline-functions is enabled.
+                                  /// Disables use of inline keyword.
   unsigned NoNaNsFPMath      : 1; /// Assume FP arguments, results not NaN.
   unsigned NoZeroInitializedInBSS : 1; /// -fno-zero-initialized-in-bss
   unsigned ObjCDispatchMethod : 2; /// Method of Objective-C dispatch to use.
@@ -187,6 +189,7 @@
     NoDwarf2CFIAsm = 0;
     NoImplicitFloat = 0;
     NoInfsFPMath = 0;
+    NoInline = 0;
     NoNaNsFPMath = 0;
     NoZeroInitializedInBSS = 0;
     NumRegisterParameters = 0;

Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=152754&r1=152753&r2=152754&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Wed Mar 14 18:32:11 2012
@@ -266,13 +266,14 @@
 
   // Pass inline keyword to optimizer if it appears explicitly on any
   // declaration.
-  if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D))
-    for (FunctionDecl::redecl_iterator RI = FD->redecls_begin(),
-           RE = FD->redecls_end(); RI != RE; ++RI)
-      if (RI->isInlineSpecified()) {
-        Fn->addFnAttr(llvm::Attribute::InlineHint);
-        break;
-      }
+  if (!CGM.getCodeGenOpts().NoInline) 
+    if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D))
+      for (FunctionDecl::redecl_iterator RI = FD->redecls_begin(),
+             RE = FD->redecls_end(); RI != RE; ++RI)
+        if (RI->isInlineSpecified()) {
+          Fn->addFnAttr(llvm::Attribute::InlineHint);
+          break;
+        }
 
   if (getContext().getLangOpts().OpenCL) {
     // Add metadata for a kernel function.

Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=152754&r1=152753&r2=152754&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Wed Mar 14 18:32:11 2012
@@ -1165,8 +1165,9 @@
   Opts.Inlining = (Opts.OptimizationLevel > 1) ? CodeGenOptions::NormalInlining
     : CodeGenOptions::OnlyAlwaysInlining;
   // -fno-inline-functions overrides OptimizationLevel > 1.
-  Opts.Inlining = Args.hasArg(OPT_fno_inline_functions) ? 
-    CodeGenOptions::OnlyAlwaysInlining : Opts.Inlining;
+  Opts.NoInline = Args.hasArg(OPT_fno_inline_functions);
+  Opts.Inlining = Opts.NoInline ? CodeGenOptions::OnlyAlwaysInlining :
+    Opts.Inlining;
 
   Opts.DebugInfo = Args.hasArg(OPT_g);
   Opts.LimitDebugInfo = !Args.hasArg(OPT_fno_limit_debug_info)

Modified: cfe/trunk/test/CodeGen/noinline.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/noinline.c?rev=152754&r1=152753&r2=152754&view=diff
==============================================================================
--- cfe/trunk/test/CodeGen/noinline.c (original)
+++ cfe/trunk/test/CodeGen/noinline.c Wed Mar 14 18:32:11 2012
@@ -3,11 +3,12 @@
 
 // RUN: %clang_cc1 -O3 -fno-inline-functions -emit-llvm %s -o - | FileCheck -check-prefix=NOINLINE %s
 
-int dont_inline_me(int a, int b) { return(a+b); }
+inline int dont_inline_me(int a, int b) { return(a+b); }
 
 volatile int *pa = (int*) 0x1000;
 void foo() {
 // NOINLINE: @foo
 // NOINLINE: dont_inline_me
+// NOINLINE-NOT: inlinehint
     pa[0] = dont_inline_me(pa[1],pa[2]);	
 }





More information about the cfe-commits mailing list