[cfe-commits] r108469 - in /cfe/trunk: lib/CodeGen/CodeGenModule.cpp test/CodeGen/available-externally-suppress.c

Douglas Gregor dgregor at apple.com
Thu Jul 15 15:58:18 PDT 2010


Author: dgregor
Date: Thu Jul 15 17:58:18 2010
New Revision: 108469

URL: http://llvm.org/viewvc/llvm-project?rev=108469&view=rev
Log:
Don't suppress the emission of available_externally functions marked
with always_inline attribute. Thanks to Howard for the tip.

Modified:
    cfe/trunk/lib/CodeGen/CodeGenModule.cpp
    cfe/trunk/test/CodeGen/available-externally-suppress.c

Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=108469&r1=108468&r2=108469&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Thu Jul 15 17:58:18 2010
@@ -816,7 +816,8 @@
   if (const FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
     // At -O0, don't generate IR for functions with available_externally 
     // linkage.
-    if (CodeGenOpts.OptimizationLevel == 0 &&
+    if (CodeGenOpts.OptimizationLevel == 0 && 
+        !Function->hasAttr<AlwaysInlineAttr>() &&
         getFunctionLinkage(Function) 
                                   == llvm::Function::AvailableExternallyLinkage)
       return;

Modified: cfe/trunk/test/CodeGen/available-externally-suppress.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/available-externally-suppress.c?rev=108469&r1=108468&r2=108469&view=diff
==============================================================================
--- cfe/trunk/test/CodeGen/available-externally-suppress.c (original)
+++ cfe/trunk/test/CodeGen/available-externally-suppress.c Thu Jul 15 17:58:18 2010
@@ -10,3 +10,17 @@
 void test() {
   f0(17);
 }
+
+inline int __attribute__((always_inline)) f1(int x) { 
+  int blarg = 0;
+  for (int i = 0; i < x; ++i)
+    blarg = blarg + x * i;
+  return blarg; 
+}
+
+int test1(int x) { 
+  // CHECK: br i1
+  // CHECK-NOT: call
+  // CHECK: ret i32
+  return f1(x); 
+}





More information about the cfe-commits mailing list