diff --git a/llvm-gcc-4.2/gcc/cgraph.c b/llvm-gcc-4.2/gcc/cgraph.c
index 7365e34..6360106 100644
--- a/llvm-gcc-4.2/gcc/cgraph.c
+++ b/llvm-gcc-4.2/gcc/cgraph.c
@@ -601,7 +601,7 @@
       if (!n->next_clone && !n->global.inlined_to
 	  && (cgraph_global_info_ready
               /* LLVM LOCAL extern inline */
-	      && (TREE_ASM_WRITTEN (n->decl) || OMIT_FUNCTION_BODY (n->decl))))
+	      && (TREE_ASM_WRITTEN (n->decl) || IS_EXTERN_INLINE (n->decl))))
 	kill_body = true;
     }
 
@@ -1185,7 +1185,7 @@
 
   else if (!(*targetm.binds_local_p) (node->decl)
            /* LLVM LOCAL extern inline */
-	   && !DECL_COMDAT (node->decl) && !OMIT_FUNCTION_BODY (node->decl))
+	   && !DECL_COMDAT (node->decl) && !IS_EXTERN_INLINE (node->decl))
     avail = AVAIL_OVERWRITABLE;
   else avail = AVAIL_AVAILABLE;
 
diff --git a/llvm-gcc-4.2/gcc/cgraph.h b/llvm-gcc-4.2/gcc/cgraph.h
index e9e23b7..419cb02 100644
--- a/llvm-gcc-4.2/gcc/cgraph.h
+++ b/llvm-gcc-4.2/gcc/cgraph.h
@@ -335,12 +335,14 @@
 bool cgraph_default_inline_p (struct cgraph_node *, const char **);
 
 /* LLVM LOCAL begin 6501843 */
-/* Make sure bodies of "extern inline" functions are output to LLVM IR.
+/* We're no longer running gcc's inliner at all, so the bodies of 
+   used extern always-inline functions must be passed down to the LLVM BE.
    cgraph used to remove these.  (gcc "extern inline" == c99 "inline") */
 #ifdef ENABLE_LLVM
-#define OMIT_FUNCTION_BODY(f) (false)
+#define IS_EXTERN_INLINE(f) (DECL_EXTERNAL(f) && \
+           !lookup_attribute("always_inline", DECL_ATTRIBUTES(f)))
 #else
-#define OMIT_FUNCTION_BODY(f) (DECL_EXTERNAL(f))
+#define IS_EXTERN_INLINE(f) (DECL_EXTERNAL(f))
 #endif
 /* LLVM LOCAL end */
 #endif  /* GCC_CGRAPH_H  */
diff --git a/llvm-gcc-4.2/gcc/cgraphunit.c b/llvm-gcc-4.2/gcc/cgraphunit.c
index 6bcdf60..a2c8724 100644
--- a/llvm-gcc-4.2/gcc/cgraphunit.c
+++ b/llvm-gcc-4.2/gcc/cgraphunit.c
@@ -385,7 +385,7 @@
       if (!n->global.inlined_to
 	  && !n->alias
           /* LLVM LOCAL extern inline */
-	  && !OMIT_FUNCTION_BODY (n->decl))
+	  && !IS_EXTERN_INLINE (n->decl))
 	{
 	  cgraph_expand_function (n);
 	  output = true;
@@ -849,7 +849,7 @@
   if (node->analyzed
       && DECL_SAVED_TREE (node->decl) && !TREE_ASM_WRITTEN (node->decl)
       /* LLVM LOCAL extern inline */ 
-      && (!OMIT_FUNCTION_BODY (node->decl) || node->global.inlined_to))
+      && (!IS_EXTERN_INLINE (node->decl) || node->global.inlined_to))
     {
       if (this_cfun->cfg)
 	{
@@ -942,10 +942,7 @@
 
   if (!TREE_ASM_WRITTEN (decl)
       && !node->alias
-      /* LLVM LOCAL begin extern inline */
-      && (!DECL_EXTERNAL (decl) ||
-          (TREE_CODE (decl) == FUNCTION_DECL && !OMIT_FUNCTION_BODY(decl)))
-      /* LLVM LOCAL end extern inline */
+      && !DECL_EXTERNAL (decl)
       && (TREE_CODE (decl) != VAR_DECL || !DECL_HAS_VALUE_EXPR_P (decl)))
     {
       assemble_variable (decl, 0, 1, 0);
@@ -1298,7 +1295,7 @@
 	      || (e && node->reachable))
 	  && !TREE_ASM_WRITTEN (decl)
           /* LLVM LOCAL extern inline */
-	  && !OMIT_FUNCTION_BODY (decl))
+	  && !IS_EXTERN_INLINE (decl))
 	node->output = 1;
       else
 	{
@@ -1306,7 +1303,7 @@
 #ifdef ENABLE_CHECKING
 	  if (!node->global.inlined_to && DECL_SAVED_TREE (decl)
               /* LLVM LOCAL extern inline */
-	      && !OMIT_FUNCTION_BODY (decl))
+	      && !IS_EXTERN_INLINE (decl))
 	    {
 	      dump_cgraph_node (stderr, node);
 	      internal_error ("failed to reclaim unneeded function");
@@ -1314,7 +1311,7 @@
 #endif
           /* LLVM LOCAL extern inline */
 	  gcc_assert (node->global.inlined_to || !DECL_SAVED_TREE (decl)
-		      || OMIT_FUNCTION_BODY (decl));
+		      || IS_EXTERN_INLINE (decl));
 	}
 
     }
diff --git a/llvm-gcc-4.2/gcc/cp/semantics.c b/llvm-gcc-4.2/gcc/cp/semantics.c
index 365a8ac..9656e9a 100644
--- a/llvm-gcc-4.2/gcc/cp/semantics.c
+++ b/llvm-gcc-4.2/gcc/cp/semantics.c
@@ -3223,18 +3223,14 @@
      `-fexternal-templates'; we instantiate the function, even though
      we're not planning on emitting it, in case we get a chance to
      inline it.  */
-  /* LLVM LOCAL extern inline */
-  if (OMIT_FUNCTION_BODY (fn))
+  if (DECL_EXTERNAL (fn))
     return;
 
   /* ??? When is this needed?  */
   saved_function = current_function_decl;
 
   /* Emit any thunks that should be emitted at the same time as FN.  */
-  /* LLVM LOCAL begin extern inline */
-  if (!DECL_EXTERNAL (fn))
-    emit_associated_thunks (fn);
-  /* LLVM LOCAL end extern inline */
+  emit_associated_thunks (fn);
 
   /* This function is only called from cgraph, or recursively from
      emit_associated_thunks.  In neither case should we be currently
diff --git a/llvm-gcc-4.2/gcc/ipa.c b/llvm-gcc-4.2/gcc/ipa.c
index fd56c0c..9e49a6f 100644
--- a/llvm-gcc-4.2/gcc/ipa.c
+++ b/llvm-gcc-4.2/gcc/ipa.c
@@ -113,7 +113,7 @@
   for (node = cgraph_nodes; node; node = node->next)
     if (node->needed && !node->global.inlined_to
         /* LLVM LOCAL extern inline */
-	&& ((!OMIT_FUNCTION_BODY (node->decl))
+	&& ((!IS_EXTERN_INLINE (node->decl))
             || !node->analyzed
             || before_inlining_p))
       {
@@ -137,7 +137,7 @@
 	    && node->analyzed
 	    && (!e->inline_failed || !e->callee->analyzed
                 /* LLVM LOCAL extern inline */
-		|| !OMIT_FUNCTION_BODY(e->callee->decl)
+		|| !IS_EXTERN_INLINE(e->callee->decl)
                 || before_inlining_p))
 	  {
 	    e->callee->aux = first;
@@ -169,7 +169,7 @@
 	  if (file)
 	    fprintf (file, " %s", cgraph_node_name (node));
               /* LLVM LOCAL extern inline */
-	  if (!node->analyzed || !OMIT_FUNCTION_BODY(node->decl)
+	  if (!node->analyzed || !IS_EXTERN_INLINE(node->decl)
 	      || before_inlining_p)
 	    cgraph_remove_node (node);
 	  else
diff --git a/llvm-gcc-4.2/gcc/llvm-convert.cpp b/llvm-gcc-4.2/gcc/llvm-convert.cpp
index 7b30706..2437381 100644
--- a/llvm-gcc-4.2/gcc/llvm-convert.cpp
+++ b/llvm-gcc-4.2/gcc/llvm-convert.cpp
@@ -490,14 +490,21 @@
 
   // The function should not already have a body.
   assert(Fn->empty() && "Function expanded multiple times!");
-
+  
   // Compute the linkage that the function should get.
+  // Functions declared "always inline" should not have a body
+  // emitted; hack this by pretending they're static.  That will either
+  // make them go away or emit a static definition that won't collide with
+  // anything.
   if (DECL_LLVM_PRIVATE(FnDecl)) {
     Fn->setLinkage(Function::PrivateLinkage);
   } else if (DECL_LLVM_LINKER_PRIVATE(FnDecl)) {
     Fn->setLinkage(Function::LinkerPrivateLinkage);
   } else if (!TREE_PUBLIC(FnDecl) /*|| lang_hooks.llvm_is_in_anon(subr)*/) {
     Fn->setLinkage(Function::InternalLinkage);
+  } else if (DECL_EXTERNAL(FnDecl) && 
+             lookup_attribute ("always_inline", DECL_ATTRIBUTES (FnDecl))) {
+    Fn->setLinkage(Function::InternalLinkage);
   } else if (DECL_COMDAT(FnDecl)) {
     Fn->setLinkage(Function::getLinkOnceLinkage(flag_odr));
   } else if (DECL_WEAK(FnDecl)) {
@@ -505,8 +512,6 @@
     Fn->setLinkage(Function::WeakAnyLinkage);
   } else if (DECL_ONE_ONLY(FnDecl)) {
     Fn->setLinkage(Function::getWeakLinkage(flag_odr));
-  } else if (DECL_EXTERNAL(FnDecl)) {
-    Fn->setLinkage(Function::AvailableExternallyLinkage);
   }
 
 #ifdef TARGET_ADJUST_LLVM_LINKAGE
