Index: include/llvm/ExecutionEngine/ExecutionEngine.h
===================================================================
--- include/llvm/ExecutionEngine/ExecutionEngine.h
+++ include/llvm/ExecutionEngine/ExecutionEngine.h
@@ -565,7 +565,7 @@
   }
 
   /// setOptLevel - Set the optimization level for the JIT.  This option
-  /// defaults to CodeGenOpt::Default.
+  /// defaults to CodeGenOpt::Default.-
   EngineBuilder &setOptLevel(CodeGenOpt::Level l) {
     OptLevel = l;
     return *this;
Index: test/Bitcode/module_hash.ll
===================================================================
--- test/Bitcode/module_hash.ll
+++ test/Bitcode/module_hash.ll
@@ -1,14 +1,14 @@
 ; Check per module hash.
-; RUN: llvm-as  -module-hash  %s -o - | llvm-bcanalyzer -dump | FileCheck %s --check-prefix=MOD1
+; RUN: opt  -module-hash  %s -o - | llvm-bcanalyzer -dump | FileCheck %s --check-prefix=MOD1
 ; MOD1: 
-; RUN: llvm-as  -module-hash  %p/Inputs/module_hash.ll -o - | llvm-bcanalyzer -dump | FileCheck %s --check-prefix=MOD2
+; RUN: opt  -module-hash  %p/Inputs/module_hash.ll -o - | llvm-bcanalyzer -dump | FileCheck %s --check-prefix=MOD2
 ; MOD2: 
 
 ; Check that the hash matches in the combined index.
 
 ; First regenerate the modules with a summary
-; RUN: llvm-as  -module-hash -module-summary %s -o %t.m1.bc
-; RUN: llvm-as  -module-hash -module-summary %p/Inputs/module_hash.ll -o %t.m2.bc
+; RUN: opt  -module-hash -module-summary %s -o %t.m1.bc
+; RUN: opt  -module-hash -module-summary %p/Inputs/module_hash.ll -o %t.m2.bc
 
 ; Recover the hashes from the modules themselves.
 ; RUN: llvm-bcanalyzer -dump %t.m1.bc | grep ' %t.hash
Index: test/Bitcode/thinlto-function-summary-callgraph-pgo.ll
===================================================================
--- test/Bitcode/thinlto-function-summary-callgraph-pgo.ll
+++ test/Bitcode/thinlto-function-summary-callgraph-pgo.ll
@@ -1,7 +1,7 @@
 ; Test to check the callgraph in summary when there is PGO
-; RUN: llvm-as -module-summary %s -o %t.o
+; RUN: opt -module-summary %s -o %t.o
 ; RUN: llvm-bcanalyzer -dump %t.o | FileCheck %s
-; RUN: llvm-as -module-summary %p/Inputs/thinlto-function-summary-callgraph.ll -o %t2.o
+; RUN: opt -module-summary %p/Inputs/thinlto-function-summary-callgraph.ll -o %t2.o
 ; RUN: llvm-lto -thinlto -o %t3 %t.o %t2.o
 ; RUN: llvm-bcanalyzer -dump %t3.thinlto.bc | FileCheck %s --check-prefix=COMBINED
 
Index: test/Bitcode/thinlto-function-summary-callgraph.ll
===================================================================
--- test/Bitcode/thinlto-function-summary-callgraph.ll
+++ test/Bitcode/thinlto-function-summary-callgraph.ll
@@ -1,7 +1,7 @@
 ; Test to check the callgraph in summary
-; RUN: llvm-as -module-summary %s -o %t.o
+; RUN: opt -module-summary %s -o %t.o
 ; RUN: llvm-bcanalyzer -dump %t.o | FileCheck %s
-; RUN: llvm-as -module-summary %p/Inputs/thinlto-function-summary-callgraph.ll -o %t2.o
+; RUN: opt -module-summary %p/Inputs/thinlto-function-summary-callgraph.ll -o %t2.o
 ; RUN: llvm-lto -thinlto -o %t3 %t.o %t2.o
 ; RUN: llvm-bcanalyzer -dump %t3.thinlto.bc | FileCheck %s --check-prefix=COMBINED
 
Index: test/Bitcode/thinlto-function-summary-refgraph.ll
===================================================================
--- test/Bitcode/thinlto-function-summary-refgraph.ll
+++ test/Bitcode/thinlto-function-summary-refgraph.ll
@@ -1,5 +1,5 @@
 ; Test to check both the callgraph and refgraph in summary
-; RUN: llvm-as -module-summary %s -o %t.o
+; RUN: opt -module-summary %s -o %t.o
 ; RUN: llvm-bcanalyzer -dump %t.o | FileCheck %s
 
 ; See if the calls and other references are recorded properly using the
Index: test/Bitcode/thinlto-function-summary.ll
===================================================================
--- test/Bitcode/thinlto-function-summary.ll
+++ test/Bitcode/thinlto-function-summary.ll
@@ -1,4 +1,4 @@
-; RUN: llvm-as -module-summary < %s | llvm-bcanalyzer -dump | FileCheck %s -check-prefix=BC
+; RUN: opt -module-summary < %s | llvm-bcanalyzer -dump | FileCheck %s -check-prefix=BC
 ; Check for summary block/records.
 
 ; Check the value ids in the summary entries against the
@@ -13,7 +13,7 @@
 ; BC-NEXT:  record string = 'bar'
 ; BC-NEXT:  record string = 'f'
 
-; RUN: llvm-as -module-summary < %s | llvm-dis | FileCheck %s
+; RUN: opt -module-summary < %s | llvm-dis | FileCheck %s
 ; Check that this round-trips correctly.
 
 ; ModuleID = ''
Index: test/Bitcode/thinlto-summary-linkage-types.ll
===================================================================
--- test/Bitcode/thinlto-summary-linkage-types.ll
+++ test/Bitcode/thinlto-summary-linkage-types.ll
@@ -1,5 +1,5 @@
 ; Check the linkage types in both the per-module and combined summaries.
-; RUN: llvm-as -module-summary %s -o %t.o
+; RUN: opt -module-summary %s -o %t.o
 ; RUN: llvm-bcanalyzer -dump %t.o | FileCheck %s
 ; RUN: llvm-lto -thinlto -o %t2 %t.o
 ; RUN: llvm-bcanalyzer -dump %t2.thinlto.bc | FileCheck %s --check-prefix=COMBINED
Index: test/Linker/funcimport.ll
===================================================================
--- test/Linker/funcimport.ll
+++ test/Linker/funcimport.ll
@@ -1,13 +1,13 @@
 ; First ensure that the ThinLTO handling in llvm-link and llvm-lto handles
 ; bitcode without summary sections gracefully.
-; RUN: llvm-as %s -o %t.bc
-; RUN: llvm-as %p/Inputs/funcimport.ll -o %t2.bc
+; RUN: opt %s -o %t.bc
+; RUN: opt %p/Inputs/funcimport.ll -o %t2.bc
 ; RUN: llvm-link %t.bc -summary-index=%t.bc -S
 ; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc
 
 ; Do setup work for all below tests: generate bitcode and combined index
-; RUN: llvm-as -module-summary %s -o %t.bc
-; RUN: llvm-as -module-summary %p/Inputs/funcimport.ll -o %t2.bc
+; RUN: opt -module-summary %s -o %t.bc
+; RUN: opt -module-summary %p/Inputs/funcimport.ll -o %t2.bc
 ; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc
 
 ; Ensure statics are promoted/renamed correctly from this file (all but
Index: test/Linker/funcimport2.ll
===================================================================
--- test/Linker/funcimport2.ll
+++ test/Linker/funcimport2.ll
@@ -1,5 +1,5 @@
-; RUN: llvm-as -module-summary %s -o %t1.bc
-; RUN: llvm-as -module-summary %p/Inputs/funcimport2.ll -o %t2.bc
+; RUN: opt -module-summary %s -o %t1.bc
+; RUN: opt -module-summary %p/Inputs/funcimport2.ll -o %t2.bc
 ; RUN: llvm-lto -thinlto -o %t3 %t1.bc %t2.bc
 ; RUN: llvm-link -import=bar:%t2.bc %t1.bc -summary-index=%t3.thinlto.bc -S | FileCheck %s
 
Index: test/Linker/funcimport_appending_global.ll
===================================================================
--- test/Linker/funcimport_appending_global.ll
+++ test/Linker/funcimport_appending_global.ll
@@ -1,5 +1,5 @@
-; RUN: llvm-as -module-summary %s -o %t.bc
-; RUN: llvm-as -module-summary %p/Inputs/funcimport_appending_global.ll -o %t2.bc
+; RUN: opt -module-summary %s -o %t.bc
+; RUN: opt -module-summary %p/Inputs/funcimport_appending_global.ll -o %t2.bc
 ; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc
 
 ; Do the import now
Index: test/Linker/funcimport_comdat.ll
===================================================================
--- test/Linker/funcimport_comdat.ll
+++ test/Linker/funcimport_comdat.ll
@@ -1,6 +1,6 @@
 ; Do setup work for all below tests: generate bitcode and combined index
-; RUN: llvm-as -module-summary %s -o %t.bc
-; RUN: llvm-as -module-summary %p/Inputs/funcimport_comdat.ll -o %t2.bc
+; RUN: opt -module-summary %s -o %t.bc
+; RUN: opt -module-summary %p/Inputs/funcimport_comdat.ll -o %t2.bc
 ; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc
 
 ; Ensure linking of comdat containing external linkage global and function
Index: test/Linker/thinlto_funcimport_debug.ll
===================================================================
--- test/Linker/thinlto_funcimport_debug.ll
+++ test/Linker/thinlto_funcimport_debug.ll
@@ -1,6 +1,6 @@
 ; Do setup work for all below tests: generate bitcode and combined index
-; RUN: llvm-as -module-summary %s -o %t.bc
-; RUN: llvm-as -module-summary %p/Inputs/thinlto_funcimport_debug.ll -o %t2.bc
+; RUN: opt -module-summary %s -o %t.bc
+; RUN: opt -module-summary %p/Inputs/thinlto_funcimport_debug.ll -o %t2.bc
 ; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc
 
 ; If we import func1 and not func2 we should only link DISubprogram for func1
Index: test/ThinLTO/X86/funcimport.ll
===================================================================
--- test/ThinLTO/X86/funcimport.ll
+++ test/ThinLTO/X86/funcimport.ll
@@ -1,6 +1,6 @@
 ; Do setup work for all below tests: generate bitcode and combined index
-; RUN: llvm-as -module-summary %s -o %t.bc
-; RUN: llvm-as -module-summary %p/Inputs/funcimport.ll -o %t2.bc
+; RUN: opt -module-summary %s -o %t.bc
+; RUN: opt -module-summary %p/Inputs/funcimport.ll -o %t2.bc
 ; RUN: llvm-lto -thinlto-action=thinlink -o %t3.bc %t.bc %t2.bc
 
 ; Ensure statics are promoted/renamed correctly from this file (all but
Index: test/ThinLTO/X86/odr_resolution.ll
===================================================================
--- test/ThinLTO/X86/odr_resolution.ll
+++ test/ThinLTO/X86/odr_resolution.ll
@@ -1,6 +1,6 @@
 ; Do setup work for all below tests: generate bitcode and combined index
-; RUN: llvm-as -module-summary %s -o %t.bc
-; RUN: llvm-as -module-summary %p/Inputs/odr_resolution.ll -o %t2.bc
+; RUN: opt -module-summary %s -o %t.bc
+; RUN: opt -module-summary %p/Inputs/odr_resolution.ll -o %t2.bc
 ; RUN: llvm-lto -thinlto-action=thinlink -o %t3.bc %t.bc %t2.bc
 
 ; Verify that only one ODR is selected across modules, but non ODR are not affected.
Index: test/Transforms/FunctionImport/adjustable_threshold.ll
===================================================================
--- test/Transforms/FunctionImport/adjustable_threshold.ll
+++ test/Transforms/FunctionImport/adjustable_threshold.ll
@@ -1,6 +1,6 @@
 ; Do setup work for all below tests: generate bitcode and combined index
-; RUN: llvm-as -module-summary %s -o %t.bc
-; RUN: llvm-as -module-summary %p/Inputs/adjustable_threshold.ll -o %t2.bc
+; RUN: opt -module-summary %s -o %t.bc
+; RUN: opt -module-summary %p/Inputs/adjustable_threshold.ll -o %t2.bc
 ; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc
 
 ; Test import with default progressive instruction factor
Index: test/Transforms/FunctionImport/funcimport.ll
===================================================================
--- test/Transforms/FunctionImport/funcimport.ll
+++ test/Transforms/FunctionImport/funcimport.ll
@@ -1,6 +1,6 @@
 ; Do setup work for all below tests: generate bitcode and combined index
-; RUN: llvm-as -module-summary %s -o %t.bc
-; RUN: llvm-as -module-summary %p/Inputs/funcimport.ll -o %t2.bc
+; RUN: opt -module-summary %s -o %t.bc
+; RUN: opt -module-summary %p/Inputs/funcimport.ll -o %t2.bc
 ; RUN: llvm-lto -thinlto -print-summary-global-ids -o %t3 %t.bc %t2.bc 2>&1 | FileCheck %s --check-prefix=GUID
 
 ; Do the import now
Index: test/Transforms/FunctionImport/funcimport_alias.ll
===================================================================
--- test/Transforms/FunctionImport/funcimport_alias.ll
+++ test/Transforms/FunctionImport/funcimport_alias.ll
@@ -1,6 +1,6 @@
 ; Do setup work for all below tests: generate bitcode and combined index
-; RUN: llvm-as -module-summary %s -o %t.bc
-; RUN: llvm-as -module-summary %p/Inputs/funcimport_alias.ll -o %t2.bc
+; RUN: opt -module-summary %s -o %t.bc
+; RUN: opt -module-summary %p/Inputs/funcimport_alias.ll -o %t2.bc
 ; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc
 
 ; Do the import now. Ensures that the importer handles an external call
Index: test/Transforms/FunctionImport/funcimport_debug.ll
===================================================================
--- test/Transforms/FunctionImport/funcimport_debug.ll
+++ test/Transforms/FunctionImport/funcimport_debug.ll
@@ -1,6 +1,6 @@
 ; Do setup work for all below tests: generate bitcode and combined index
-; RUN: llvm-as -module-summary %s -o %t.bc
-; RUN: llvm-as -module-summary %p/Inputs/funcimport_debug.ll -o %t2.bc
+; RUN: opt -module-summary %s -o %t.bc
+; RUN: opt -module-summary %p/Inputs/funcimport_debug.ll -o %t2.bc
 ; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc
 
 ; Do the import now and confirm that metadata is linked for imported function.
Index: test/tools/llvm-lto/thinlto.ll
===================================================================
--- test/tools/llvm-lto/thinlto.ll
+++ test/tools/llvm-lto/thinlto.ll
@@ -1,6 +1,6 @@
 ; Test combined function index generation for ThinLTO via llvm-lto.
-; RUN: llvm-as -module-summary %s -o %t.o
-; RUN: llvm-as -module-summary %p/Inputs/thinlto.ll -o %t2.o
+; RUN: opt -module-summary %s -o %t.o
+; RUN: opt -module-summary %p/Inputs/thinlto.ll -o %t2.o
 ; RUN: llvm-lto -thinlto -o %t3 %t.o %t2.o
 ; RUN: llvm-bcanalyzer -dump %t3.thinlto.bc | FileCheck %s --check-prefix=COMBINED
 ; RUN: not test -e %t3
Index: tools/llvm-as/llvm-as.cpp
===================================================================
--- tools/llvm-as/llvm-as.cpp
+++ tools/llvm-as/llvm-as.cpp
@@ -45,10 +45,6 @@
 static cl::opt DisableOutput("disable-output", cl::desc("Disable output"),
                                    cl::init(false));
 
-static cl::opt EmitSummaryIndex("module-summary",
-                                      cl::desc("Emit module summary index"),
-                                      cl::init(false));
-
 static cl::opt EmitModuleHash("module-hash", cl::desc("Emit module hash"),
                                     cl::init(false));
 
@@ -84,14 +80,9 @@
     exit(1);
   }
 
-  if (Force || !CheckBitcodeOutputToConsole(Out->os(), true)) {
-    std::unique_ptr Index;
-    if (EmitSummaryIndex)
-      Index = ModuleSummaryIndexBuilder(M).takeIndex();
-
-    WriteBitcodeToFile(M, Out->os(), PreserveBitcodeUseListOrder, Index.get(),
+  if (Force || !CheckBitcodeOutputToConsole(Out->os(), true))
+    WriteBitcodeToFile(M, Out->os(), PreserveBitcodeUseListOrder, nullptr,
                        EmitModuleHash);
-  }
 
   // Declare success.
   Out->keep();
Index: tools/opt/opt.cpp
===================================================================
--- tools/opt/opt.cpp
+++ tools/opt/opt.cpp
@@ -158,6 +158,12 @@
                         cl::desc("Disable the slp vectorization pass"),
                         cl::init(false));
 
+static cl::opt EmitSummaryIndex("module-summary",
+                                      cl::desc("Emit module summary index"),
+                                      cl::init(false));
+
+static cl::opt EmitModuleHash("module-hash", cl::desc("Emit module hash"),
+                                    cl::init(false));
 
 static cl::opt
 DisableSimplifyLibCalls("disable-simplify-libcalls",
@@ -617,7 +623,8 @@
     if (OutputAssembly)
       Passes.add(createPrintModulePass(*OS, "", PreserveAssemblyUseListOrder));
     else
-      Passes.add(createBitcodeWriterPass(*OS, PreserveBitcodeUseListOrder));
+      Passes.add(createBitcodeWriterPass(*OS, PreserveBitcodeUseListOrder,
+                                         EmitSummaryIndex, EmitModuleHash));
   }
 
   // Before executing passes, print the final values of the LLVM options.