[llvm] r222319 - Remove StringMap::GetOrCreateValue in favor of StringMap::insert

Yaron Keren yaron.keren at gmail.com
Tue Nov 18 22:08:16 PST 2014


Thanks!

2014-11-19 7:49 GMT+02:00 David Blaikie <dblaikie at gmail.com>:

> Author: dblaikie
> Date: Tue Nov 18 23:49:42 2014
> New Revision: 222319
>
> URL: http://llvm.org/viewvc/llvm-project?rev=222319&view=rev
> Log:
> Remove StringMap::GetOrCreateValue in favor of StringMap::insert
>
> Having two ways to do this doesn't seem terribly helpful and
> consistently using the insert version (which we already has) seems like
> it'll make the code easier to understand to anyone working with standard
> data structures. (I also updated many references to the Entry's
> key and value to use first() and second instead of getKey{Data,Length,}
> and get/setValue - for similar consistency)
>
> Also removes the GetOrCreateValue functions so there's less surface area
> to StringMap to fix/improve/change/accommodate move semantics, etc.
>
> Modified:
>     llvm/trunk/include/llvm/ADT/StringMap.h
>     llvm/trunk/include/llvm/LTO/LTOModule.h
>     llvm/trunk/include/llvm/MC/StringTableBuilder.h
>     llvm/trunk/include/llvm/TableGen/StringToOffsetTable.h
>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.cpp
>     llvm/trunk/lib/CodeGen/GCMetadata.cpp
>     llvm/trunk/lib/IR/Constants.cpp
>     llvm/trunk/lib/IR/LLVMContext.cpp
>     llvm/trunk/lib/IR/Module.cpp
>     llvm/trunk/lib/IR/Type.cpp
>     llvm/trunk/lib/IR/ValueSymbolTable.cpp
>     llvm/trunk/lib/LTO/LTOModule.cpp
>     llvm/trunk/lib/Linker/LinkModules.cpp
>     llvm/trunk/lib/MC/MCContext.cpp
>     llvm/trunk/lib/MC/MCDwarf.cpp
>     llvm/trunk/lib/Support/CommandLine.cpp
>     llvm/trunk/lib/Support/Host.cpp
>     llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
>     llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
>     llvm/trunk/tools/yaml2obj/yaml2elf.cpp
>     llvm/trunk/unittests/ADT/StringMapTest.cpp
>     llvm/trunk/utils/TableGen/CodeGenRegisters.cpp
>
> Modified: llvm/trunk/include/llvm/ADT/StringMap.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/StringMap.h?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ADT/StringMap.h (original)
> +++ llvm/trunk/include/llvm/ADT/StringMap.h Tue Nov 18 23:49:42 2014
> @@ -296,7 +296,7 @@ public:
>    }
>
>    ValueTy &operator[](StringRef Key) {
> -    return GetOrCreateValue(Key).getValue();
> +    return insert(std::make_pair(Key, ValueTy())).first->second;
>    }
>
>    /// count - Return 1 if the element is in the map, 0 otherwise.
> @@ -363,19 +363,6 @@ public:
>      NumTombstones = 0;
>    }
>
> -  /// GetOrCreateValue - Look up the specified key in the table.  If a
> value
> -  /// exists, return it.  Otherwise, default construct a value, insert
> it, and
> -  /// return.
> -  template <typename InitTy>
> -  MapEntryTy &GetOrCreateValue(StringRef Key, InitTy &&Val) {
> -    return *insert(std::pair<StringRef, ValueTy>(
> -                       Key, std::forward<InitTy>(Val))).first;
> -  }
> -
> -  MapEntryTy &GetOrCreateValue(StringRef Key) {
> -    return GetOrCreateValue(Key, ValueTy());
> -  }
> -
>    /// remove - Remove the specified key/value pair from the map, but do
> not
>    /// erase it.  This aborts if the key is not in the map.
>    void remove(MapEntryTy *KeyValue) {
>
> Modified: llvm/trunk/include/llvm/LTO/LTOModule.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LTO/LTOModule.h?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/LTO/LTOModule.h (original)
> +++ llvm/trunk/include/llvm/LTO/LTOModule.h Tue Nov 18 23:49:42 2014
> @@ -16,6 +16,7 @@
>
>  #include "llvm-c/lto.h"
>  #include "llvm/ADT/StringMap.h"
> +#include "llvm/ADT/StringSet.h"
>  #include "llvm/IR/Module.h"
>  #include "llvm/MC/MCContext.h"
>  #include "llvm/MC/MCObjectFileInfo.h"
> @@ -37,8 +38,6 @@ namespace llvm {
>  ///
>  struct LTOModule {
>  private:
> -  typedef StringMap<uint8_t> StringSet;
> -
>    struct NameAndAttributes {
>      const char        *name;
>      uint32_t           attributes;
> @@ -50,13 +49,13 @@ private:
>
>    std::unique_ptr<object::IRObjectFile> IRFile;
>    std::unique_ptr<TargetMachine> _target;
> -  StringSet                               _linkeropt_strings;
> +  StringSet<>                             _linkeropt_strings;
>    std::vector<const char *>               _deplibs;
>    std::vector<const char *>               _linkeropts;
>    std::vector<NameAndAttributes>          _symbols;
>
>    // _defines and _undefines only needed to disambiguate tentative
> definitions
> -  StringSet                               _defines;
> +  StringSet<>                             _defines;
>    StringMap<NameAndAttributes> _undefines;
>    std::vector<const char*>                _asm_undefines;
>
>
> Modified: llvm/trunk/include/llvm/MC/StringTableBuilder.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/StringTableBuilder.h?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/StringTableBuilder.h (original)
> +++ llvm/trunk/include/llvm/MC/StringTableBuilder.h Tue Nov 18 23:49:42
> 2014
> @@ -26,7 +26,7 @@ public:
>    /// copy of s. Can only be used before the table is finalized.
>    StringRef add(StringRef s) {
>      assert(!isFinalized());
> -    return StringIndexMap.GetOrCreateValue(s, 0).getKey();
> +    return StringIndexMap.insert(std::make_pair(s, 0)).first->first();
>    }
>
>    enum Kind {
>
> Modified: llvm/trunk/include/llvm/TableGen/StringToOffsetTable.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/TableGen/StringToOffsetTable.h?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/TableGen/StringToOffsetTable.h (original)
> +++ llvm/trunk/include/llvm/TableGen/StringToOffsetTable.h Tue Nov 18
> 23:49:42 2014
> @@ -28,16 +28,16 @@ class StringToOffsetTable {
>
>  public:
>    unsigned GetOrAddStringOffset(StringRef Str, bool appendZero = true) {
> -    StringMapEntry<unsigned> &Entry = StringOffset.GetOrCreateValue(Str,
> -1U);
> -    if (Entry.getValue() == -1U) {
> +    auto IterBool =
> +        StringOffset.insert(std::make_pair(Str, AggregateString.size()));
> +    if (IterBool.second) {
>        // Add the string to the aggregate if this is the first time found.
> -      Entry.setValue(AggregateString.size());
>        AggregateString.append(Str.begin(), Str.end());
>        if (appendZero)
>          AggregateString += '\0';
>      }
>
> -    return Entry.getValue();
> +    return IterBool.first->second;
>    }
>
>    void EmitString(raw_ostream &O) {
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfStringPool.cpp Tue Nov 18
> 23:49:42 2014
> @@ -16,8 +16,7 @@ static std::pair<MCSymbol *, unsigned> &
>  getEntry(AsmPrinter &Asm,
>           StringMap<std::pair<MCSymbol *, unsigned>, BumpPtrAllocator &>
> &Pool,
>           StringRef Prefix, StringRef Str) {
> -  std::pair<MCSymbol *, unsigned> &Entry =
> -      Pool.GetOrCreateValue(Str).getValue();
> +  std::pair<MCSymbol *, unsigned> &Entry = Pool[Str];
>    if (!Entry.first) {
>      Entry.second = Pool.size() - 1;
>      Entry.first = Asm.GetTempSymbol(Prefix, Entry.second);
>
> Modified: llvm/trunk/lib/CodeGen/GCMetadata.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GCMetadata.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/GCMetadata.cpp (original)
> +++ llvm/trunk/lib/CodeGen/GCMetadata.cpp Tue Nov 18 23:49:42 2014
> @@ -73,7 +73,7 @@ GCStrategy *GCModuleInfo::getOrCreateStr
>        std::unique_ptr<GCStrategy> S = I->instantiate();
>        S->M = M;
>        S->Name = Name;
> -      StrategyMap.GetOrCreateValue(Name).setValue(S.get());
> +      StrategyMap[Name] = S.get();
>        StrategyList.push_back(std::move(S));
>        return StrategyList.back().get();
>      }
>
> Modified: llvm/trunk/lib/IR/Constants.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Constants.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/Constants.cpp (original)
> +++ llvm/trunk/lib/IR/Constants.cpp Tue Nov 18 23:49:42 2014
> @@ -2436,14 +2436,16 @@ Constant *ConstantDataSequential::getImp
>      return ConstantAggregateZero::get(Ty);
>
>    // Do a lookup to see if we have already formed one of these.
> -  StringMap<ConstantDataSequential*>::MapEntryTy &Slot =
> -    Ty->getContext().pImpl->CDSConstants.GetOrCreateValue(Elements);
> +  auto &Slot =
> +      *Ty->getContext()
> +           .pImpl->CDSConstants.insert(std::make_pair(Elements, nullptr))
> +           .first;
>
>    // The bucket can point to a linked list of different CDS's that have
> the same
>    // body but different types.  For example, 0,0,0,1 could be a 4 element
> array
>    // of i8, or a 1-element array of i32.  They'll both end up in the same
>    /// StringMap bucket, linked up by their Next pointers.  Walk the list.
> -  ConstantDataSequential **Entry = &Slot.getValue();
> +  ConstantDataSequential **Entry = &Slot.second;
>    for (ConstantDataSequential *Node = *Entry; Node;
>         Entry = &Node->Next, Node = *Entry)
>      if (Node->getType() == Ty)
> @@ -2452,10 +2454,10 @@ Constant *ConstantDataSequential::getImp
>    // Okay, we didn't get a hit.  Create a node of the right class, link
> it in,
>    // and return it.
>    if (isa<ArrayType>(Ty))
> -    return *Entry = new ConstantDataArray(Ty, Slot.getKeyData());
> +    return *Entry = new ConstantDataArray(Ty, Slot.first().data());
>
>    assert(isa<VectorType>(Ty));
> -  return *Entry = new ConstantDataVector(Ty, Slot.getKeyData());
> +  return *Entry = new ConstantDataVector(Ty, Slot.first().data());
>  }
>
>  void ConstantDataSequential::destroyConstant() {
>
> Modified: llvm/trunk/lib/IR/LLVMContext.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/LLVMContext.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/LLVMContext.cpp (original)
> +++ llvm/trunk/lib/IR/LLVMContext.cpp Tue Nov 18 23:49:42 2014
> @@ -253,9 +253,10 @@ unsigned LLVMContext::getMDKindID(String
>    assert(isValidName(Name) && "Invalid MDNode name");
>
>    // If this is new, assign it its ID.
> -  return
> -    pImpl->CustomMDKindNames.GetOrCreateValue(
> -      Name, pImpl->CustomMDKindNames.size()).second;
> +  return pImpl->CustomMDKindNames.insert(std::make_pair(
> +                                             Name,
> +
>  pImpl->CustomMDKindNames.size()))
> +      .first->second;
>  }
>
>  /// getHandlerNames - Populate client supplied smallvector using custome
>
> Modified: llvm/trunk/lib/IR/Module.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Module.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/Module.cpp (original)
> +++ llvm/trunk/lib/IR/Module.cpp Tue Nov 18 23:49:42 2014
> @@ -452,9 +452,7 @@ unsigned Module::getDwarfVersion() const
>  }
>
>  Comdat *Module::getOrInsertComdat(StringRef Name) {
> -  Comdat C;
> -  StringMapEntry<Comdat> &Entry =
> -      ComdatSymTab.GetOrCreateValue(Name, std::move(C));
> +  auto &Entry = *ComdatSymTab.insert(std::make_pair(Name,
> Comdat())).first;
>    Entry.second.Name = &Entry;
>    return &Entry.second;
>  }
>
> Modified: llvm/trunk/lib/IR/Type.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Type.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/Type.cpp (original)
> +++ llvm/trunk/lib/IR/Type.cpp Tue Nov 18 23:49:42 2014
> @@ -458,10 +458,11 @@ void StructType::setName(StringRef Name)
>    }
>
>    // Look up the entry for the name.
> -  EntryTy *Entry =
> &getContext().pImpl->NamedStructTypes.GetOrCreateValue(Name);
> -
> +  auto IterBool =
> +      getContext().pImpl->NamedStructTypes.insert(std::make_pair(Name,
> this));
> +
>    // While we have a name collision, try a random rename.
> -  if (Entry->getValue()) {
> +  if (!IterBool.second) {
>      SmallString<64> TempStr(Name);
>      TempStr.push_back('.');
>      raw_svector_ostream TmpStream(TempStr);
> @@ -471,19 +472,16 @@ void StructType::setName(StringRef Name)
>        TempStr.resize(NameSize + 1);
>        TmpStream.resync();
>        TmpStream << getContext().pImpl->NamedStructTypesUniqueID++;
> -
> -      Entry = &getContext().pImpl->
> -                 NamedStructTypes.GetOrCreateValue(TmpStream.str());
> -    } while (Entry->getValue());
> -  }
>
> -  // Okay, we found an entry that isn't used.  It's us!
> -  Entry->setValue(this);
> +      IterBool = getContext().pImpl->NamedStructTypes.insert(
> +          std::make_pair(TmpStream.str(), this));
> +    } while (!IterBool.second);
> +  }
>
>    // Delete the old string data.
>    if (SymbolTableEntry)
>      ((EntryTy *)SymbolTableEntry)->Destroy(SymbolTable.getAllocator());
> -  SymbolTableEntry = Entry;
> +  SymbolTableEntry = &*IterBool.first;
>  }
>
>
>  //===----------------------------------------------------------------------===//
>
> Modified: llvm/trunk/lib/IR/ValueSymbolTable.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/ValueSymbolTable.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/ValueSymbolTable.cpp (original)
> +++ llvm/trunk/lib/IR/ValueSymbolTable.cpp Tue Nov 18 23:49:42 2014
> @@ -56,11 +56,10 @@ void ValueSymbolTable::reinsertValue(Val
>      raw_svector_ostream(UniqueName) << ++LastUnique;
>
>      // Try insert the vmap entry with this suffix.
> -    ValueName &NewName = vmap.GetOrCreateValue(UniqueName);
> -    if (!NewName.getValue()) {
> +    auto IterBool = vmap.insert(std::make_pair(UniqueName, V));
> +    if (IterBool.second) {
>        // Newly inserted name.  Success!
> -      NewName.setValue(V);
> -      V->Name = &NewName;
> +      V->Name = &*IterBool.first;
>       //DEBUG(dbgs() << " Inserted value: " << UniqueName << ": " << *V <<
> "\n");
>        return;
>      }
> @@ -78,12 +77,11 @@ void ValueSymbolTable::removeValueName(V
>  /// auto-renames the name and returns that instead.
>  ValueName *ValueSymbolTable::createValueName(StringRef Name, Value *V) {
>    // In the common case, the name is not already in the symbol table.
> -  ValueName &Entry = vmap.GetOrCreateValue(Name);
> -  if (!Entry.getValue()) {
> -    Entry.setValue(V);
> +  auto IterBool = vmap.insert(std::make_pair(Name, V));
> +  if (IterBool.second) {
>      //DEBUG(dbgs() << " Inserted value: " << Entry.getKeyData() << ": "
>      //           << *V << "\n");
> -    return &Entry;
> +    return &*IterBool.first;
>    }
>
>    // Otherwise, there is a naming conflict.  Rename this value.
> @@ -95,12 +93,11 @@ ValueName *ValueSymbolTable::createValue
>      raw_svector_ostream(UniqueName) << ++LastUnique;
>
>      // Try insert the vmap entry with this suffix.
> -    ValueName &NewName = vmap.GetOrCreateValue(UniqueName);
> -    if (!NewName.getValue()) {
> -      // Newly inserted name.  Success!
> -      NewName.setValue(V);
> -     //DEBUG(dbgs() << " Inserted value: " << UniqueName << ": " << *V <<
> "\n");
> -      return &NewName;
> +    auto IterBool = vmap.insert(std::make_pair(UniqueName, V));
> +    if (IterBool.second) {
> +      // DEBUG(dbgs() << " Inserted value: " << UniqueName << ": " << *V
> <<
> +      //       "\n");
> +      return &*IterBool.first;
>      }
>    }
>  }
>
> Modified: llvm/trunk/lib/LTO/LTOModule.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOModule.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/LTO/LTOModule.cpp (original)
> +++ llvm/trunk/lib/LTO/LTOModule.cpp Tue Nov 18 23:49:42 2014
> @@ -249,27 +249,24 @@ void LTOModule::addObjCClass(const Globa
>    // second slot in __OBJC,__class is pointer to superclass name
>    std::string superclassName;
>    if (objcClassNameFromExpression(c->getOperand(1), superclassName)) {
> -    NameAndAttributes info;
> -    StringMap<NameAndAttributes>::value_type &entry =
> -      _undefines.GetOrCreateValue(superclassName);
> -    if (!entry.getValue().name) {
> -      const char *symbolName = entry.getKey().data();
> -      info.name = symbolName;
> +    auto IterBool =
> +        _undefines.insert(std::make_pair(superclassName,
> NameAndAttributes()));
> +    if (IterBool.second) {
> +      NameAndAttributes &info = IterBool.first->second;
> +      info.name = IterBool.first->first().data();
>        info.attributes = LTO_SYMBOL_DEFINITION_UNDEFINED;
>        info.isFunction = false;
>        info.symbol = clgv;
> -      entry.setValue(info);
>      }
>    }
>
>    // third slot in __OBJC,__class is pointer to class name
>    std::string className;
>    if (objcClassNameFromExpression(c->getOperand(2), className)) {
> -    StringSet::value_type &entry = _defines.GetOrCreateValue(className);
> -    entry.setValue(1);
> +    auto Iter = _defines.insert(className).first;
>
>      NameAndAttributes info;
> -    info.name = entry.getKey().data();
> +    info.name = Iter->first().data();
>      info.attributes = LTO_SYMBOL_PERMISSIONS_DATA |
>        LTO_SYMBOL_DEFINITION_REGULAR | LTO_SYMBOL_SCOPE_DEFAULT;
>      info.isFunction = false;
> @@ -288,19 +285,17 @@ void LTOModule::addObjCCategory(const Gl
>    if (!objcClassNameFromExpression(c->getOperand(1), targetclassName))
>      return;
>
> -  NameAndAttributes info;
> -  StringMap<NameAndAttributes>::value_type &entry =
> -    _undefines.GetOrCreateValue(targetclassName);
> +  auto IterBool =
> +      _undefines.insert(std::make_pair(targetclassName,
> NameAndAttributes()));
>
> -  if (entry.getValue().name)
> +  if (!IterBool.second)
>      return;
>
> -  const char *symbolName = entry.getKey().data();
> -  info.name = symbolName;
> +  NameAndAttributes &info = IterBool.first->second;
> +  info.name = IterBool.first->first().data();
>    info.attributes = LTO_SYMBOL_DEFINITION_UNDEFINED;
>    info.isFunction = false;
>    info.symbol = clgv;
> -  entry.setValue(info);
>  }
>
>  /// addObjCClassRef - Parse i386/ppc ObjC class list data structure.
> @@ -309,18 +304,17 @@ void LTOModule::addObjCClassRef(const Gl
>    if (!objcClassNameFromExpression(clgv->getInitializer(),
> targetclassName))
>      return;
>
> -  NameAndAttributes info;
> -  StringMap<NameAndAttributes>::value_type &entry =
> -    _undefines.GetOrCreateValue(targetclassName);
> -  if (entry.getValue().name)
> +  auto IterBool =
> +      _undefines.insert(std::make_pair(targetclassName,
> NameAndAttributes()));
> +
> +  if (!IterBool.second)
>      return;
>
> -  const char *symbolName = entry.getKey().data();
> -  info.name = symbolName;
> +  NameAndAttributes &info = IterBool.first->second;
> +  info.name = IterBool.first->first().data();
>    info.attributes = LTO_SYMBOL_DEFINITION_UNDEFINED;
>    info.isFunction = false;
>    info.symbol = clgv;
> -  entry.setValue(info);
>  }
>
>  void LTOModule::addDefinedDataSymbol(const object::BasicSymbolRef &Sym) {
> @@ -439,12 +433,11 @@ void LTOModule::addDefinedSymbol(const c
>    else
>      attr |= LTO_SYMBOL_SCOPE_DEFAULT;
>
> -  StringSet::value_type &entry = _defines.GetOrCreateValue(Name);
> -  entry.setValue(1);
> +  auto Iter = _defines.insert(Name).first;
>
>    // fill information structure
>    NameAndAttributes info;
> -  StringRef NameRef = entry.getKey();
> +  StringRef NameRef = Iter->first();
>    info.name = NameRef.data();
>    assert(info.name[NameRef.size()] == '\0');
>    info.attributes = attr;
> @@ -459,15 +452,13 @@ void LTOModule::addDefinedSymbol(const c
>  /// defined list.
>  void LTOModule::addAsmGlobalSymbol(const char *name,
>                                     lto_symbol_attributes scope) {
> -  StringSet::value_type &entry = _defines.GetOrCreateValue(name);
> +  auto IterBool = _defines.insert(name);
>
>    // only add new define if not already defined
> -  if (entry.getValue())
> +  if (!IterBool.second)
>      return;
>
> -  entry.setValue(1);
> -
> -  NameAndAttributes &info = _undefines[entry.getKey().data()];
> +  NameAndAttributes &info = _undefines[IterBool.first->first().data()];
>
>    if (info.symbol == nullptr) {
>      // FIXME: This is trying to take care of module ASM like this:
> @@ -479,7 +470,7 @@ void LTOModule::addAsmGlobalSymbol(const
>      // much.
>
>      // fill information structure
> -    info.name = entry.getKey().data();
> +    info.name = IterBool.first->first().data();
>      info.attributes =
>        LTO_SYMBOL_PERMISSIONS_DATA | LTO_SYMBOL_DEFINITION_REGULAR | scope;
>      info.isFunction = false;
> @@ -502,24 +493,21 @@ void LTOModule::addAsmGlobalSymbol(const
>  /// addAsmGlobalSymbolUndef - Add a global symbol from module-level ASM
> to the
>  /// undefined list.
>  void LTOModule::addAsmGlobalSymbolUndef(const char *name) {
> -  StringMap<NameAndAttributes>::value_type &entry =
> -    _undefines.GetOrCreateValue(name);
> +  auto IterBool = _undefines.insert(std::make_pair(name,
> NameAndAttributes()));
>
> -  _asm_undefines.push_back(entry.getKey().data());
> +  _asm_undefines.push_back(IterBool.first->first().data());
>
>    // we already have the symbol
> -  if (entry.getValue().name)
> +  if (!IterBool.second)
>      return;
>
>    uint32_t attr = LTO_SYMBOL_DEFINITION_UNDEFINED;
>    attr |= LTO_SYMBOL_SCOPE_DEFAULT;
> -  NameAndAttributes info;
> -  info.name = entry.getKey().data();
> +  NameAndAttributes &info = IterBool.first->second;
> +  info.name = IterBool.first->first().data();
>    info.attributes = attr;
>    info.isFunction = false;
>    info.symbol = nullptr;
> -
> -  entry.setValue(info);
>  }
>
>  /// Add a symbol which isn't defined just yet to a list to be resolved
> later.
> @@ -531,16 +519,15 @@ void LTOModule::addPotentialUndefinedSym
>      Sym.printName(OS);
>    }
>
> -  StringMap<NameAndAttributes>::value_type &entry =
> -    _undefines.GetOrCreateValue(name);
> +  auto IterBool = _undefines.insert(std::make_pair(name,
> NameAndAttributes()));
>
>    // we already have the symbol
> -  if (entry.getValue().name)
> +  if (!IterBool.second)
>      return;
>
> -  NameAndAttributes info;
> +  NameAndAttributes &info = IterBool.first->second;
>
> -  info.name = entry.getKey().data();
> +  info.name = IterBool.first->first().data();
>
>    const GlobalValue *decl = IRFile->getSymbolGV(Sym.getRawDataRefImpl());
>
> @@ -551,8 +538,6 @@ void LTOModule::addPotentialUndefinedSym
>
>    info.isFunction = isFunc;
>    info.symbol = decl;
> -
> -  entry.setValue(info);
>  }
>
>  /// parseSymbols - Parse the symbols from the module and model-level ASM
> and add
> @@ -625,8 +610,11 @@ void LTOModule::parseMetadata() {
>        MDNode *MDOptions = cast<MDNode>(LinkerOptions->getOperand(i));
>        for (unsigned ii = 0, ie = MDOptions->getNumOperands(); ii != ie;
> ++ii) {
>          MDString *MDOption = cast<MDString>(MDOptions->getOperand(ii));
> -        StringRef Op = _linkeropt_strings.
> -            GetOrCreateValue(MDOption->getString()).getKey();
> +        // FIXME: Make StringSet::insert match Self-Associative Container
> +        // requirements, returning <iter,bool> rather than bool, and use
> that
> +        // here.
> +        StringRef Op =
> +
> _linkeropt_strings.insert(MDOption->getString()).first->first();
>          StringRef DepLibName = _target->getSubtargetImpl()
>                                     ->getTargetLowering()
>                                     ->getObjFileLowering()
>
> Modified: llvm/trunk/lib/Linker/LinkModules.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/LinkModules.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Linker/LinkModules.cpp (original)
> +++ llvm/trunk/lib/Linker/LinkModules.cpp Tue Nov 18 23:49:42 2014
> @@ -1463,7 +1463,7 @@ bool ModuleLinker::run() {
>    computeTypeMapping();
>
>    ComdatsChosen.clear();
> -  for (const StringMapEntry<llvm::Comdat> &SMEC :
> SrcM->getComdatSymbolTable()) {
> +  for (const auto &SMEC : SrcM->getComdatSymbolTable()) {
>      const Comdat &C = SMEC.getValue();
>      if (ComdatsChosen.count(&C))
>        continue;
>
> Modified: llvm/trunk/lib/MC/MCContext.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCContext.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/MC/MCContext.cpp (original)
> +++ llvm/trunk/lib/MC/MCContext.cpp Tue Nov 18 23:49:42 2014
> @@ -100,16 +100,11 @@ void MCContext::reset() {
>  MCSymbol *MCContext::GetOrCreateSymbol(StringRef Name) {
>    assert(!Name.empty() && "Normal symbols cannot be unnamed!");
>
> -  // Do the lookup and get the entire StringMapEntry.  We want access to
> the
> -  // key if we are creating the entry.
> -  StringMapEntry<MCSymbol*> &Entry = Symbols.GetOrCreateValue(Name);
> -  MCSymbol *Sym = Entry.getValue();
> +  MCSymbol *&Sym = Symbols[Name];
>
> -  if (Sym)
> -    return Sym;
> +  if (!Sym)
> +    Sym = CreateSymbol(Name);
>
> -  Sym = CreateSymbol(Name);
> -  Entry.setValue(Sym);
>    return Sym;
>  }
>
> @@ -120,19 +115,17 @@ MCSymbol *MCContext::getOrCreateSectionS
>
>    StringRef Name = Section.getSectionName();
>
> -  StringMapEntry<MCSymbol*> &Entry = Symbols.GetOrCreateValue(Name);
> -  MCSymbol *OldSym = Entry.getValue();
> +  MCSymbol *&OldSym = Symbols[Name];
>    if (OldSym && OldSym->isUndefined()) {
>      Sym = OldSym;
>      return OldSym;
>    }
>
> -  StringMapEntry<bool> *NameEntry = &UsedNames.GetOrCreateValue(Name);
> -  NameEntry->setValue(true);
> -  Sym = new (*this) MCSymbol(NameEntry->getKey(), /*isTemporary*/ false);
> +  auto NameIter = UsedNames.insert(std::make_pair(Name, true)).first;
> +  Sym = new (*this) MCSymbol(NameIter->getKey(), /*isTemporary*/ false);
>
> -  if (!Entry.getValue())
> -    Entry.setValue(Sym);
> +  if (!OldSym)
> +    OldSym = Sym;
>
>    return Sym;
>  }
> @@ -143,21 +136,21 @@ MCSymbol *MCContext::CreateSymbol(String
>    if (AllowTemporaryLabels)
>      isTemporary = Name.startswith(MAI->getPrivateGlobalPrefix());
>
> -  StringMapEntry<bool> *NameEntry = &UsedNames.GetOrCreateValue(Name);
> -  if (NameEntry->getValue()) {
> +  auto NameEntry = UsedNames.insert(std::make_pair(Name, true));
> +  if (!NameEntry.second) {
>      assert(isTemporary && "Cannot rename non-temporary symbols");
>      SmallString<128> NewName = Name;
>      do {
>        NewName.resize(Name.size());
>        raw_svector_ostream(NewName) << NextUniqueID++;
> -      NameEntry = &UsedNames.GetOrCreateValue(NewName);
> -    } while (NameEntry->getValue());
> +      NameEntry = UsedNames.insert(std::make_pair(NewName, true));
> +    } while (!NameEntry.second);
>    }
> -  NameEntry->setValue(true);
>
>    // Ok, the entry doesn't already exist.  Have the MCSymbol object
> itself refer
>    // to the copy of the string that is embedded in the UsedNames entry.
> -  MCSymbol *Result = new (*this) MCSymbol(NameEntry->getKey(),
> isTemporary);
> +  MCSymbol *Result =
> +      new (*this) MCSymbol(NameEntry.first->getKey(), isTemporary);
>
>    return Result;
>  }
>
> Modified: llvm/trunk/lib/MC/MCDwarf.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDwarf.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/MC/MCDwarf.cpp (original)
> +++ llvm/trunk/lib/MC/MCDwarf.cpp Tue Nov 18 23:49:42 2014
> @@ -368,10 +368,10 @@ unsigned MCDwarfLineTableHeader::getFile
>      FileNumber = SourceIdMap.size() + 1;
>      assert((MCDwarfFiles.empty() || FileNumber == MCDwarfFiles.size()) &&
>             "Don't mix autonumbered and explicit numbered line table
> usage");
> -    StringMapEntry<unsigned> &Ent = SourceIdMap.GetOrCreateValue(
> -        (Directory + Twine('\0') + FileName).str(), FileNumber);
> -    if (Ent.getValue() != FileNumber)
> -      return Ent.getValue();
> +    auto IterBool = SourceIdMap.insert(
> +        std::make_pair((Directory + Twine('\0') + FileName).str(),
> FileNumber));
> +    if (!IterBool.second)
> +      return IterBool.first->second;
>    }
>    // Make space for this FileNumber in the MCDwarfFiles vector if needed.
>    MCDwarfFiles.resize(FileNumber + 1);
>
> Modified: llvm/trunk/lib/Support/CommandLine.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/CommandLine.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/CommandLine.cpp (original)
> +++ llvm/trunk/lib/Support/CommandLine.cpp Tue Nov 18 23:49:42 2014
> @@ -165,7 +165,7 @@ static void GetOptionInfo(SmallVectorImp
>      // Handle named options.
>      for (size_t i = 0, e = OptionNames.size(); i != e; ++i) {
>        // Add argument to the argument map!
> -      if (OptionsMap.GetOrCreateValue(OptionNames[i], O).second != O) {
> +      if (!OptionsMap.insert(std::make_pair(OptionNames[i], O)).second) {
>          errs() << ProgramName << ": CommandLine Error: Option '"
>                 << OptionNames[i] << "' registered more than once!\n";
>          HadErrors = true;
>
> Modified: llvm/trunk/lib/Support/Host.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Host.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/Host.cpp (original)
> +++ llvm/trunk/lib/Support/Host.cpp Tue Nov 18 23:49:42 2014
> @@ -759,13 +759,13 @@ bool sys::getHostCPUFeatures(StringMap<b
>  #endif
>
>      if (LLVMFeatureStr != "")
> -      Features.GetOrCreateValue(LLVMFeatureStr).setValue(true);
> +      Features[LLVMFeatureStr] = true;
>    }
>
>  #if defined(__aarch64__)
>    // If we have all crypto bits we can add the feature
>    if (crypto == (CAP_AES | CAP_PMULL | CAP_SHA1 | CAP_SHA2))
> -    Features.GetOrCreateValue("crypto").setValue(true);
> +    Features["crypto"] = true;
>  #endif
>
>    return true;
>
> Modified: llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp (original)
> +++ llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp Tue Nov
> 18 23:49:42 2014
> @@ -4140,7 +4140,7 @@ bool AArch64AsmParser::parseDirectiveReq
>    Parser.Lex(); // Consume the EndOfStatement
>
>    auto pair = std::make_pair(IsVector, RegNum);
> -  if (RegisterReqs.GetOrCreateValue(Name, pair).getValue() != pair)
> +  if (!RegisterReqs.insert(std::make_pair(Name, pair)).second)
>      Warning(L, "ignoring redefinition of register alias '" + Name + "'");
>
>    return true;
>
> Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Tue Nov 18
> 23:49:42 2014
> @@ -8732,7 +8732,7 @@ bool ARMAsmParser::parseDirectiveReq(Str
>
>    Parser.Lex(); // Consume the EndOfStatement
>
> -  if (RegisterReqs.GetOrCreateValue(Name, Reg).getValue() != Reg) {
> +  if (!RegisterReqs.insert(std::make_pair(Name, Reg)).second) {
>      Error(SRegLoc, "redefinition of '" + Name + "' does not match
> original.");
>      return false;
>    }
>
> Modified: llvm/trunk/tools/yaml2obj/yaml2elf.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2elf.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/yaml2obj/yaml2elf.cpp (original)
> +++ llvm/trunk/tools/yaml2obj/yaml2elf.cpp Tue Nov 18 23:49:42 2014
> @@ -62,11 +62,7 @@ class NameToIdxMap {
>  public:
>    /// \returns true if name is already present in the map.
>    bool addName(StringRef Name, unsigned i) {
> -    StringMapEntry<int> &Entry = Map.GetOrCreateValue(Name, -1);
> -    if (Entry.getValue() != -1)
> -      return true;
> -    Entry.setValue((int)i);
> -    return false;
> +    return !Map.insert(std::make_pair(Name, (int)i)).second;
>    }
>    /// \returns true if name is not present in the map
>    bool lookup(StringRef Name, unsigned &Idx) const {
>
> Modified: llvm/trunk/unittests/ADT/StringMapTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/StringMapTest.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/unittests/ADT/StringMapTest.cpp (original)
> +++ llvm/trunk/unittests/ADT/StringMapTest.cpp Tue Nov 18 23:49:42 2014
> @@ -250,7 +250,7 @@ struct StringMapTestStruct {
>
>  TEST_F(StringMapTest, NonDefaultConstructable) {
>    StringMap<StringMapTestStruct> t;
> -  t.GetOrCreateValue("Test", StringMapTestStruct(123));
> +  t.insert(std::make_pair("Test", StringMapTestStruct(123)));
>    StringMap<StringMapTestStruct>::iterator iter = t.find("Test");
>    ASSERT_NE(iter, t.end());
>    ASSERT_EQ(iter->second.i, 123);
> @@ -278,15 +278,13 @@ private:
>
>  TEST_F(StringMapTest, MoveOnly) {
>    StringMap<MoveOnly> t;
> -  t.GetOrCreateValue("Test", MoveOnly(42));
> +  t.insert(std::make_pair("Test", MoveOnly(42)));
>    StringRef Key = "Test";
>    StringMapEntry<MoveOnly>::Create(Key, MoveOnly(42))
>        ->Destroy();
>  }
>
>  TEST_F(StringMapTest, CtorArg) {
> -  StringMap<MoveOnly> t;
> -  t.GetOrCreateValue("Test", Immovable());
>    StringRef Key = "Test";
>    StringMapEntry<MoveOnly>::Create(Key, Immovable())
>        ->Destroy();
> @@ -294,7 +292,7 @@ TEST_F(StringMapTest, CtorArg) {
>
>  TEST_F(StringMapTest, MoveConstruct) {
>    StringMap<int> A;
> -  A.GetOrCreateValue("x", 42);
> +  A["x"] = 42;
>    StringMap<int> B = std::move(A);
>    ASSERT_EQ(A.size(), 0u);
>    ASSERT_EQ(B.size(), 1u);
> @@ -339,7 +337,7 @@ struct Countable {
>  TEST_F(StringMapTest, MoveDtor) {
>    int InstanceCount = 0;
>    StringMap<Countable> A;
> -  A.GetOrCreateValue("x", Countable(42, InstanceCount));
> +  A.insert(std::make_pair("x", Countable(42, InstanceCount)));
>    ASSERT_EQ(InstanceCount, 1);
>    auto I = A.find("x");
>    ASSERT_NE(I, A.end());
>
> Modified: llvm/trunk/utils/TableGen/CodeGenRegisters.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenRegisters.cpp?rev=222319&r1=222318&r2=222319&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/TableGen/CodeGenRegisters.cpp (original)
> +++ llvm/trunk/utils/TableGen/CodeGenRegisters.cpp Tue Nov 18 23:49:42 2014
> @@ -966,9 +966,12 @@ CodeGenRegBank::CodeGenRegBank(RecordKee
>
>    // Compute register name map.
>    for (unsigned i = 0, e = Registers.size(); i != e; ++i)
> -    RegistersByName.GetOrCreateValue(
> -                       Registers[i]->TheDef->getValueAsString("AsmName"),
> -                       Registers[i]);
> +    // FIXME: This could just be RegistersByName[name] = register, except
> that
> +    // causes some failures in MIPS - perhaps they have duplicate
> register name
> +    // entries? (or maybe there's a reason for it - I don't know much
> about this
> +    // code, just drive-by refactoring)
> +    RegistersByName.insert(std::make_pair(
> +        Registers[i]->TheDef->getValueAsString("AsmName"), Registers[i]));
>
>    // Precompute all sub-register maps.
>    // This will create Composite entries for all inferred sub-register
> indices.
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141119/181131ab/attachment.html>


More information about the llvm-commits mailing list