MC: prevent early DCE of empty sections
[oota-llvm.git] / lib / IR / LLVMContextImpl.cpp
index 50740a0c348265bc78e44f7e386e7ee828849ed6..4c2791f0a8d531aeb1bd36dd673df16eee5ecd39 100644 (file)
 #include "LLVMContextImpl.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/IR/Attributes.h"
+#include "llvm/IR/DiagnosticInfo.h"
 #include "llvm/IR/Module.h"
-#include "llvm/PassSupport.h"
-#include "llvm/Support/CommandLine.h"
-#include "llvm/Support/Regex.h"
 #include <algorithm>
 using namespace llvm;
 
-/// Notify that we finished running a pass.
-void LLVMContextImpl::notifyPassRun(LLVMContext *C, Pass *P, Module *M,
-                                    Function *F, BasicBlock *BB) {
-  for (auto const &L : RunListeners)
-    L->passRun(C, P, M, F, BB);
-}
-/// Register the given PassRunListener to receive notifyPassRun()
-/// callbacks whenever a pass ran.
-void LLVMContextImpl::addRunListener(PassRunListener *L) {
-  RunListeners.push_back(L);
-}
-/// Unregister a PassRunListener so that it no longer receives
-/// notifyPassRun() callbacks.
-void LLVMContextImpl::removeRunListener(PassRunListener *L) {
-  auto I = std::find(RunListeners.begin(), RunListeners.end(), L);
-  assert(I != RunListeners.end() && "RunListener not registered!");
-  delete *I;
-  RunListeners.erase(I);
-}
-
 LLVMContextImpl::LLVMContextImpl(LLVMContext &C)
   : TheTrueVal(nullptr), TheFalseVal(nullptr),
     VoidTy(C, Type::VoidTyID),
@@ -62,68 +40,16 @@ LLVMContextImpl::LLVMContextImpl(LLVMContext &C)
   InlineAsmDiagContext = nullptr;
   DiagnosticHandler = nullptr;
   DiagnosticContext = nullptr;
+  YieldCallback = nullptr;
+  YieldOpaqueHandle = nullptr;
   NamedStructTypesUniqueID = 0;
 }
 
-namespace {
-
-/// \brief Regular expression corresponding to the value given in the
-/// command line flag -pass-remarks. Passes whose name matches this
-/// regexp will emit a diagnostic when calling
-/// LLVMContext::emitOptimizationRemark.
-static Regex *OptimizationRemarkPattern = nullptr;
-
-/// \brief String to hold all the values passed via -pass-remarks. Every
-/// instance of -pass-remarks on the command line will be concatenated
-/// to this string. Values are stored inside braces and concatenated with
-/// the '|' operator. This implements the expected semantics that multiple
-/// -pass-remarks are additive.
-static std::string OptimizationRemarkExpr;
-
-struct PassRemarksOpt {
-  void operator=(const std::string &Val) const {
-    // Create a regexp object to match pass names for emitOptimizationRemark.
-    if (!Val.empty()) {
-      if (!OptimizationRemarkExpr.empty())
-        OptimizationRemarkExpr += "|";
-      OptimizationRemarkExpr += "(" + Val + ")";
-      delete OptimizationRemarkPattern;
-      OptimizationRemarkPattern = new Regex(OptimizationRemarkExpr);
-      std::string RegexError;
-      if (!OptimizationRemarkPattern->isValid(RegexError))
-        report_fatal_error("Invalid regular expression '" + Val +
-                               "' in -pass-remarks: " + RegexError,
-                           false);
-    }
-  };
-};
-
-static PassRemarksOpt PassRemarksOptLoc;
-
-// -pass-remarks
-//    Command line flag to enable LLVMContext::emitOptimizationRemark()
-//    and LLVMContext::emitOptimizationNote() calls.
-static cl::opt<PassRemarksOpt, true, cl::parser<std::string>>
-PassRemarks("pass-remarks", cl::value_desc("pattern"),
-            cl::desc("Enable optimization remarks from passes whose name match "
-                     "the given regular expression"),
-            cl::Hidden, cl::location(PassRemarksOptLoc), cl::ValueRequired,
-            cl::ZeroOrMore);
-}
-
-bool
-LLVMContextImpl::optimizationRemarksEnabledFor(const char *PassName) const {
-  return OptimizationRemarkPattern &&
-         OptimizationRemarkPattern->match(PassName);
-}
-
-
 namespace {
 struct DropReferences {
   // Takes the value_type of a ConstantUniqueMap's internal map, whose 'second'
   // is a Constant*.
-  template<typename PairT>
-  void operator()(const PairT &P) {
+  template <typename PairT> void operator()(const PairT &P) {
     P.second->dropAllReferences();
   }
 };
@@ -209,11 +135,6 @@ LLVMContextImpl::~LLVMContextImpl() {
 
   // Destroy MDStrings.
   DeleteContainerSeconds(MDStringCache);
-
-  // Destroy all run listeners.
-  for (auto &L : RunListeners)
-    delete L;
-  RunListeners.clear();
 }
 
 // ConstantsContext anchors