diff --git a/llvm/include/llvm/IR/Attributes.h b/llvm/include/llvm/IR/Attributes.h --- a/llvm/include/llvm/IR/Attributes.h +++ b/llvm/include/llvm/IR/Attributes.h @@ -18,6 +18,7 @@ #include "llvm-c/Types.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/Optional.h" +#include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/iterator_range.h" #include "llvm/Config/llvm-config.h" @@ -756,7 +757,7 @@ /// equality, presence of attributes, etc. class AttrBuilder { std::bitset Attrs; - std::map> TargetDepAttrs; + std::map, SmallString<32>, std::less<>> TargetDepAttrs; MaybeAlign Alignment; MaybeAlign StackAlignment; uint64_t DerefBytes = 0; @@ -921,7 +922,7 @@ bool empty() const { return Attrs.none(); } // Iterators for target-dependent attributes. - using td_type = std::pair; + using td_type = decltype(TargetDepAttrs)::value_type; using td_iterator = decltype(TargetDepAttrs)::iterator; using td_const_iterator = decltype(TargetDepAttrs)::const_iterator; using td_range = iterator_range; diff --git a/llvm/lib/IR/Attributes.cpp b/llvm/lib/IR/Attributes.cpp --- a/llvm/lib/IR/Attributes.cpp +++ b/llvm/lib/IR/Attributes.cpp @@ -1624,7 +1624,7 @@ } AttrBuilder &AttrBuilder::addAttribute(StringRef A, StringRef V) { - TargetDepAttrs[std::string(A)] = std::string(V); + TargetDepAttrs[A] = V; return *this; }