Fix bcc initialization and shutdown issues.

Actually call the correct LLVM init functions.

Change-Id: I883ebe70ae0bb4a535a9bc0536a517dab0cb3ebb
diff --git a/lib/Support/Initialization.cpp b/lib/Support/Initialization.cpp
index 3ef4999..e5aa607 100644
--- a/lib/Support/Initialization.cpp
+++ b/lib/Support/Initialization.cpp
@@ -18,6 +18,8 @@
 
 #include <cstdlib>
 
+#include <llvm/InitializePasses.h>
+#include <llvm/PassRegistry.h>
 #include <llvm/Support/ErrorHandling.h>
 #include <llvm/Support/TargetSelect.h>
 
@@ -45,49 +47,26 @@
   llvm::remove_fatal_error_handler();
   llvm::install_fatal_error_handler(llvm_error_handler, nullptr);
 
-#if defined(PROVIDE_ARM_CODEGEN)
-  LLVMInitializeARMAsmPrinter();
-  LLVMInitializeARMAsmParser();
-# if USE_DISASSEMBLER
-  LLVMInitializeARMDisassembler();
-# endif
-  LLVMInitializeARMTargetMC();
-  LLVMInitializeARMTargetInfo();
-  LLVMInitializeARMTarget();
-#endif
 
-#if defined(PROVIDE_MIPS_CODEGEN)
-  LLVMInitializeMipsAsmPrinter();
-  LLVMInitializeMipsAsmParser();
-# if USE_DISASSEMBLER
-  LLVMInitializeMipsDisassembler();
-# endif
-  LLVMInitializeMipsTargetMC();
-  LLVMInitializeMipsTargetInfo();
-  LLVMInitializeMipsTarget();
-#endif
-
-#if defined(PROVIDE_X86_CODEGEN)
-  LLVMInitializeX86AsmPrinter();
-  LLVMInitializeX86AsmParser();
-# if USE_DISASSEMBLER
-  LLVMInitializeX86Disassembler();
-# endif
-  LLVMInitializeX86TargetMC();
-  LLVMInitializeX86TargetInfo();
-  LLVMInitializeX86Target();
-#endif
-
-#if defined(PROVIDE_ARM64_CODEGEN)
-  LLVMInitializeAArch64AsmPrinter();
-  LLVMInitializeAArch64AsmParser();
-# if USE_DISASSEMBLER
-  LLVMInitializeAArch64Disassembler();
-# endif
-  LLVMInitializeAArch64TargetMC();
-  LLVMInitializeAArch64TargetInfo();
-  LLVMInitializeAArch64Target();
-#endif
+  llvm::InitializeAllTargets();
+  llvm::InitializeAllTargetMCs();
+  llvm::InitializeAllAsmPrinters();
+  
+  llvm::PassRegistry &Registry = *llvm::PassRegistry::getPassRegistry();
+  llvm::initializeCore(Registry);
+  llvm::initializeDebugIRPass(Registry);
+  llvm::initializeScalarOpts(Registry);
+  llvm::initializeVectorization(Registry);
+  llvm::initializeIPO(Registry);
+  llvm::initializeAnalysis(Registry);
+  llvm::initializeIPA(Registry);
+  llvm::initializeTransformUtils(Registry);
+  llvm::initializeInstCombine(Registry);
+  llvm::initializeInstrumentation(Registry);
+  llvm::initializeTarget(Registry);
+  llvm::initializeCodeGenPreparePass(Registry);
+  llvm::initializeAtomicExpandPass(Registry);
+  llvm::initializeRewriteSymbolsPass(Registry);
 
   is_initialized = true;
 
diff --git a/tools/bcc/Main.cpp b/tools/bcc/Main.cpp
index 7668b09..f1c15cc 100644
--- a/tools/bcc/Main.cpp
+++ b/tools/bcc/Main.cpp
@@ -25,6 +25,7 @@
 #include <llvm/Config/config.h>
 #include <llvm/Support/CommandLine.h>
 #include <llvm/Support/FileSystem.h>
+#include <llvm/Support/ManagedStatic.h>
 #include <llvm/Support/MemoryBuffer.h>
 #include <llvm/Support/Path.h>
 #include <llvm/Support/PluginLoader.h>
@@ -198,10 +199,12 @@
 }
 
 int main(int argc, char **argv) {
+
+  llvm::llvm_shutdown_obj Y;
+  init::Initialize();
   llvm::cl::SetVersionPrinter(BCCVersionPrinter);
   llvm::cl::ParseCommandLineOptions(argc, argv);
   std::string commandLine = bcc::getCommandLine(argc, argv);
-  init::Initialize();
 
   BCCContext context;
   RSCompilerDriver RSCD;