diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2015-12-30 11:46:15 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2015-12-30 11:46:15 +0000 | 
| commit | dd58ef019b700900793a1eb48b52123db01b654e (patch) | |
| tree | fcfbb4df56a744f4ddc6122c50521dd3f1c5e196 /lib/IR/Module.cpp | |
| parent | 2fe5752e3a7c345cdb59e869278d36af33c13fa4 (diff) | |
Notes
Diffstat (limited to 'lib/IR/Module.cpp')
| -rw-r--r-- | lib/IR/Module.cpp | 60 | 
1 files changed, 32 insertions, 28 deletions
| diff --git a/lib/IR/Module.cpp b/lib/IR/Module.cpp index 043f74e12da3..ac578d6dba0f 100644 --- a/lib/IR/Module.cpp +++ b/lib/IR/Module.cpp @@ -29,6 +29,7 @@  #include <algorithm>  #include <cstdarg>  #include <cstdlib> +  using namespace llvm;  //===----------------------------------------------------------------------===// @@ -37,9 +38,9 @@ using namespace llvm;  // Explicit instantiations of SymbolTableListTraits since some of the methods  // are not in the public header file. -template class llvm::SymbolTableListTraits<Function, Module>; -template class llvm::SymbolTableListTraits<GlobalVariable, Module>; -template class llvm::SymbolTableListTraits<GlobalAlias, Module>; +template class llvm::SymbolTableListTraits<Function>; +template class llvm::SymbolTableListTraits<GlobalVariable>; +template class llvm::SymbolTableListTraits<GlobalAlias>;  //===----------------------------------------------------------------------===//  // Primitive Module methods. @@ -81,7 +82,6 @@ RandomNumberGenerator *Module::createRNG(const Pass* P) const {    return new RandomNumberGenerator(Salt);  } -  /// getNamedValue - Return the first global value in the module with  /// the specified name, of arbitrary type.  This method returns null  /// if a global with the specified name is not found. @@ -102,6 +102,9 @@ void Module::getMDKindNames(SmallVectorImpl<StringRef> &Result) const {    return Context.getMDKindNames(Result);  } +void Module::getOperandBundleTags(SmallVectorImpl<StringRef> &Result) const { +  return Context.getOperandBundleTags(Result); +}  //===----------------------------------------------------------------------===//  // Methods for easy access to the functions in the module. @@ -274,7 +277,7 @@ NamedMDNode *Module::getOrInsertNamedMetadata(StringRef Name) {  /// delete it.  void Module::eraseNamedMetadata(NamedMDNode *NMD) {    static_cast<StringMap<NamedMDNode *> *>(NamedMDSymTab)->erase(NMD->getName()); -  NamedMDList.erase(NMD); +  NamedMDList.erase(NMD->getIterator());  }  bool Module::isValidModFlagBehavior(Metadata *MD, ModFlagBehavior &MFB) { @@ -376,17 +379,11 @@ const DataLayout &Module::getDataLayout() const { return DL; }  //  void Module::setMaterializer(GVMaterializer *GVM) {    assert(!Materializer && -         "Module already has a GVMaterializer.  Call MaterializeAllPermanently" +         "Module already has a GVMaterializer.  Call materializeAll"           " to clear it out before setting another one.");    Materializer.reset(GVM);  } -bool Module::isDematerializable(const GlobalValue *GV) const { -  if (Materializer) -    return Materializer->isDematerializable(GV); -  return false; -} -  std::error_code Module::materialize(GlobalValue *GV) {    if (!Materializer)      return std::error_code(); @@ -394,23 +391,11 @@ std::error_code Module::materialize(GlobalValue *GV) {    return Materializer->materialize(GV);  } -void Module::dematerialize(GlobalValue *GV) { -  if (Materializer) -    return Materializer->dematerialize(GV); -} -  std::error_code Module::materializeAll() {    if (!Materializer)      return std::error_code(); -  return Materializer->materializeModule(this); -} - -std::error_code Module::materializeAllPermanently() { -  if (std::error_code EC = materializeAll()) -    return EC; - -  Materializer.reset(); -  return std::error_code(); +  std::unique_ptr<GVMaterializer> M = std::move(Materializer); +  return M->materializeModule();  }  std::error_code Module::materializeMetadata() { @@ -458,7 +443,14 @@ void Module::dropAllReferences() {  unsigned Module::getDwarfVersion() const {    auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("Dwarf Version"));    if (!Val) -    return dwarf::DWARF_VERSION; +    return 0; +  return cast<ConstantInt>(Val->getValue())->getZExtValue(); +} + +unsigned Module::getCodeViewFlag() const { +  auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("CodeView")); +  if (!Val) +    return 0;    return cast<ConstantInt>(Val->getValue())->getZExtValue();  } @@ -471,7 +463,7 @@ Comdat *Module::getOrInsertComdat(StringRef Name) {  PICLevel::Level Module::getPICLevel() const {    auto *Val = cast_or_null<ConstantAsMetadata>(getModuleFlag("PIC Level")); -  if (Val == NULL) +  if (!Val)      return PICLevel::Default;    return static_cast<PICLevel::Level>( @@ -481,3 +473,15 @@ PICLevel::Level Module::getPICLevel() const {  void Module::setPICLevel(PICLevel::Level PL) {    addModuleFlag(ModFlagBehavior::Error, "PIC Level", PL);  } + +void Module::setMaximumFunctionCount(uint64_t Count) { +  addModuleFlag(ModFlagBehavior::Error, "MaxFunctionCount", Count); +} + +Optional<uint64_t> Module::getMaximumFunctionCount() { +  auto *Val = +      cast_or_null<ConstantAsMetadata>(getModuleFlag("MaxFunctionCount")); +  if (!Val) +    return None; +  return cast<ConstantInt>(Val->getValue())->getZExtValue(); +} | 
