Support ForEachExpand on non-root functions.

BUG=6000538

Change-Id: I36e78ced0715b060af0938f1480df240cf6ba707
diff --git a/lib/ExecutionEngine/Compiler.h b/lib/ExecutionEngine/Compiler.h
index b99588a..8cc3d2e 100644
--- a/lib/ExecutionEngine/Compiler.h
+++ b/lib/ExecutionEngine/Compiler.h
@@ -80,6 +80,8 @@
     static const llvm::StringRef PragmaMetadataName;
     static const llvm::StringRef ExportVarMetadataName;
     static const llvm::StringRef ExportFuncMetadataName;
+    static const llvm::StringRef ExportForEachNameMetadataName;
+    static const llvm::StringRef ExportForEachMetadataName;
     static const llvm::StringRef ObjectSlotMetadataName;
 
     friend class CodeEmitter;
@@ -176,11 +178,13 @@
 #if USE_MCJIT
     static void *resolveSymbolAdapter(void *context, char const *name);
 #endif
-    int runInternalPasses();
+    int runInternalPasses(std::vector<std::string>& Names,
+                          std::vector<uint32_t>& Signatures);
 
     int runLTO(llvm::TargetData *TD,
                llvm::NamedMDNode const *ExportVarMetadata,
-               llvm::NamedMDNode const *ExportFuncMetadata);
+               llvm::NamedMDNode const *ExportFuncMetadata,
+               std::vector<std::string>& ForEachExpandList);
 
     bool hasError() const {
       return !mError.empty();