diff options
Diffstat (limited to 'llvm/include')
117 files changed, 838 insertions, 376 deletions
diff --git a/llvm/include/llvm/ADT/APFloat.h b/llvm/include/llvm/ADT/APFloat.h index bccdb89..82ac9a3 100644 --- a/llvm/include/llvm/ADT/APFloat.h +++ b/llvm/include/llvm/ADT/APFloat.h @@ -152,7 +152,7 @@ public:    static constexpr unsigned integerPartWidth = APInt::APINT_BITS_PER_WORD;    /// A signed type to represent a floating point numbers unbiased exponent. -  typedef int32_t ExponentType; +  using ExponentType = int32_t;    /// \name Floating Point Semantics.    /// @{ @@ -938,8 +938,8 @@ LLVM_ABI DoubleAPFloat frexp(const DoubleAPFloat &X, int &Exp, roundingMode);  // This is a interface class that is currently forwarding functionalities from  // detail::IEEEFloat.  class APFloat : public APFloatBase { -  typedef detail::IEEEFloat IEEEFloat; -  typedef detail::DoubleAPFloat DoubleAPFloat; +  using IEEEFloat = detail::IEEEFloat; +  using DoubleAPFloat = detail::DoubleAPFloat;    static_assert(std::is_standard_layout<IEEEFloat>::value); diff --git a/llvm/include/llvm/ADT/APInt.h b/llvm/include/llvm/ADT/APInt.h index 9fa98ad..26283d2 100644 --- a/llvm/include/llvm/ADT/APInt.h +++ b/llvm/include/llvm/ADT/APInt.h @@ -77,7 +77,7 @@ inline APInt operator-(APInt);  ///  class [[nodiscard]] APInt {  public: -  typedef uint64_t WordType; +  using WordType = uint64_t;    /// Byte size of a word.    static constexpr unsigned APINT_WORD_SIZE = sizeof(WordType); diff --git a/llvm/include/llvm/ADT/AddressRanges.h b/llvm/include/llvm/ADT/AddressRanges.h index 79ba5d5..6ea097d 100644 --- a/llvm/include/llvm/ADT/AddressRanges.h +++ b/llvm/include/llvm/ADT/AddressRanges.h @@ -21,7 +21,7 @@ namespace llvm {  /// a start and an end address: [Start, End).  class AddressRange {  public: -  AddressRange() {} +  AddressRange() = default;    AddressRange(uint64_t S, uint64_t E) : Start(S), End(E) {      assert(Start <= End);    } diff --git a/llvm/include/llvm/ADT/BitVector.h b/llvm/include/llvm/ADT/BitVector.h index 9e81a4b..cc3f3a9 100644 --- a/llvm/include/llvm/ADT/BitVector.h +++ b/llvm/include/llvm/ADT/BitVector.h @@ -99,7 +99,7 @@ public:  };  class BitVector { -  typedef uintptr_t BitWord; +  using BitWord = uintptr_t;    enum { BITWORD_SIZE = (unsigned)sizeof(BitWord) * CHAR_BIT }; @@ -147,8 +147,8 @@ public:      }    }; -  typedef const_set_bits_iterator_impl<BitVector> const_set_bits_iterator; -  typedef const_set_bits_iterator set_iterator; +  using const_set_bits_iterator = const_set_bits_iterator_impl<BitVector>; +  using set_iterator = const_set_bits_iterator;    const_set_bits_iterator set_bits_begin() const {      return const_set_bits_iterator(*this); diff --git a/llvm/include/llvm/ADT/FloatingPointMode.h b/llvm/include/llvm/ADT/FloatingPointMode.h index 0314b4c..a9702c6 100644 --- a/llvm/include/llvm/ADT/FloatingPointMode.h +++ b/llvm/include/llvm/ADT/FloatingPointMode.h @@ -191,7 +191,7 @@ inline DenormalMode::DenormalModeKind  parseDenormalFPAttributeComponent(StringRef Str) {    // Assume ieee on unspecified attribute.    return StringSwitch<DenormalMode::DenormalModeKind>(Str) -      .Cases("", "ieee", DenormalMode::IEEE) +      .Cases({"", "ieee"}, DenormalMode::IEEE)        .Case("preserve-sign", DenormalMode::PreserveSign)        .Case("positive-zero", DenormalMode::PositiveZero)        .Case("dynamic", DenormalMode::Dynamic) diff --git a/llvm/include/llvm/ADT/GenericSSAContext.h b/llvm/include/llvm/ADT/GenericSSAContext.h index e9f99ba..426a083 100644 --- a/llvm/include/llvm/ADT/GenericSSAContext.h +++ b/llvm/include/llvm/ADT/GenericSSAContext.h @@ -25,7 +25,7 @@ template <typename, bool> class DominatorTreeBase;  template <typename> class SmallVectorImpl;  namespace Intrinsic { -typedef unsigned ID; +using ID = unsigned;  }  // Specializations of this template should provide the types used by the diff --git a/llvm/include/llvm/ADT/STLExtras.h b/llvm/include/llvm/ADT/STLExtras.h index a9841c6..8de8eb5 100644 --- a/llvm/include/llvm/ADT/STLExtras.h +++ b/llvm/include/llvm/ADT/STLExtras.h @@ -1516,8 +1516,8 @@ template <class Iterator, class RNG>  void shuffle(Iterator first, Iterator last, RNG &&g) {    // It would be better to use a std::uniform_int_distribution,    // but that would be stdlib dependent. -  typedef -      typename std::iterator_traits<Iterator>::difference_type difference_type; +  using difference_type = +      typename std::iterator_traits<Iterator>::difference_type;    for (auto size = last - first; size > 1; ++first, (void)--size) {      difference_type offset = g() % size;      // Avoid self-assignment due to incorrect assertions in libstdc++ diff --git a/llvm/include/llvm/ADT/StringMap.h b/llvm/include/llvm/ADT/StringMap.h index 01cbf2d3..7901365 100644 --- a/llvm/include/llvm/ADT/StringMap.h +++ b/llvm/include/llvm/ADT/StringMap.h @@ -302,7 +302,7 @@ public:        if (FindInRHS == RHS.end())          return false; -      if constexpr (!std::is_same_v<ValueTy, std::nullopt_t>) { +      if constexpr (!std::is_same_v<ValueTy, EmptyStringSetTag>) {          if (!(KeyValue.getValue() == FindInRHS->getValue()))            return false;        } diff --git a/llvm/include/llvm/ADT/StringMapEntry.h b/llvm/include/llvm/ADT/StringMapEntry.h index 21be5ec..b0a3c8c 100644 --- a/llvm/include/llvm/ADT/StringMapEntry.h +++ b/llvm/include/llvm/ADT/StringMapEntry.h @@ -21,6 +21,9 @@  namespace llvm { +/// The "value type" of StringSet represented as an empty struct. +struct EmptyStringSetTag {}; +  /// StringMapEntryBase - Shared base class of StringMapEntry instances.  class StringMapEntryBase {    size_t keyLength; @@ -85,14 +88,13 @@ public:  };  template <> -class StringMapEntryStorage<std::nullopt_t> : public StringMapEntryBase { +class StringMapEntryStorage<EmptyStringSetTag> : public StringMapEntryBase {  public: -  explicit StringMapEntryStorage(size_t keyLength, -                                 std::nullopt_t = std::nullopt) +  explicit StringMapEntryStorage(size_t keyLength, EmptyStringSetTag = {})        : StringMapEntryBase(keyLength) {}    StringMapEntryStorage(StringMapEntryStorage &entry) = delete; -  std::nullopt_t getValue() const { return std::nullopt; } +  EmptyStringSetTag getValue() const { return {}; }  };  /// StringMapEntry - This is used to represent one value that is inserted into diff --git a/llvm/include/llvm/ADT/StringSet.h b/llvm/include/llvm/ADT/StringSet.h index c8be3f2..dc154af 100644 --- a/llvm/include/llvm/ADT/StringSet.h +++ b/llvm/include/llvm/ADT/StringSet.h @@ -22,8 +22,8 @@ namespace llvm {  /// StringSet - A wrapper for StringMap that provides set-like functionality.  template <class AllocatorTy = MallocAllocator> -class StringSet : public StringMap<std::nullopt_t, AllocatorTy> { -  using Base = StringMap<std::nullopt_t, AllocatorTy>; +class StringSet : public StringMap<EmptyStringSetTag, AllocatorTy> { +  using Base = StringMap<EmptyStringSetTag, AllocatorTy>;  public:    StringSet() = default; diff --git a/llvm/include/llvm/ADT/StringSwitch.h b/llvm/include/llvm/ADT/StringSwitch.h index 98685de..53ebec1 100644 --- a/llvm/include/llvm/ADT/StringSwitch.h +++ b/llvm/include/llvm/ADT/StringSwitch.h @@ -14,7 +14,6 @@  #define LLVM_ADT_STRINGSWITCH_H  #include "llvm/ADT/StringRef.h" -#include "llvm/Support/Compiler.h"  #include "llvm/Support/ErrorHandling.h"  #include <cassert>  #include <cstring> @@ -42,6 +41,8 @@ namespace llvm {  ///   .Cases({"violet", "purple"}, Violet)  ///   .Default(UnknownColor);  /// \endcode +/// +/// When multiple matches are found, the value of the first match is returned.  template<typename T, typename R = T>  class StringSwitch {    /// The string we are matching. @@ -64,7 +65,7 @@ public:    void operator=(const StringSwitch &) = delete;    void operator=(StringSwitch &&) = delete; -  // Case-sensitive case matchers +  // Case-sensitive case matchers.    StringSwitch &Case(StringLiteral S, T Value) {      CaseImpl(S, Value);      return *this; @@ -89,6 +90,7 @@ public:      return CasesImpl(CaseStrings, Value);    } +  [[deprecated("Pass cases in std::initializer_list instead")]]    StringSwitch &Cases(StringLiteral S0, StringLiteral S1, T Value) {      return CasesImpl({S0, S1}, Value);    } @@ -173,6 +175,7 @@ public:      return CasesLowerImpl(CaseStrings, Value);    } +  [[deprecated("Pass cases in std::initializer_list instead")]]    StringSwitch &CasesLower(StringLiteral S0, StringLiteral S1, T Value) {      return CasesLowerImpl({S0, S1}, Value);    } @@ -212,23 +215,30 @@ public:    [[nodiscard]] operator R() { return DefaultUnreachable(); }  private: -  // Returns true when `Str` matches the `S` argument, and stores the result. +  // Returns true when a match is found. If `Str` matches the `S` argument, +  // stores the result.    bool CaseImpl(StringLiteral S, T &Value) { -    if (!Result && Str == S) { -      Result = std::move(Value); +    if (Result)        return true; -    } -    return false; + +    if (Str != S) +      return false; + +    Result = std::move(Value); +    return true;    } -  // Returns true when `Str` matches the `S` argument (case-insensitive), and -  // stores the result. +  // Returns true when a match is found. If `Str` matches the `S` argument +  // (case-insensitive), stores the result.    bool CaseLowerImpl(StringLiteral S, T &Value) { -    if (!Result && Str.equals_insensitive(S)) { -      Result = std::move(Value); +    if (Result)        return true; -    } -    return false; + +    if (!Str.equals_insensitive(S)) +      return false; + +    Result = std::move(Value); +    return true;    }    StringSwitch &CasesImpl(std::initializer_list<StringLiteral> Cases, diff --git a/llvm/include/llvm/ADT/ilist.h b/llvm/include/llvm/ADT/ilist.h index aed19cc..6439290 100644 --- a/llvm/include/llvm/ADT/ilist.h +++ b/llvm/include/llvm/ADT/ilist.h @@ -108,21 +108,21 @@ template <typename Ty> struct ilist_traits<const Ty> {};  /// list.  template <class IntrusiveListT, class TraitsT>  class iplist_impl : public TraitsT, IntrusiveListT { -  typedef IntrusiveListT base_list_type; +  using base_list_type = IntrusiveListT;  public: -  typedef typename base_list_type::pointer pointer; -  typedef typename base_list_type::const_pointer const_pointer; -  typedef typename base_list_type::reference reference; -  typedef typename base_list_type::const_reference const_reference; -  typedef typename base_list_type::value_type value_type; -  typedef typename base_list_type::size_type size_type; -  typedef typename base_list_type::difference_type difference_type; -  typedef typename base_list_type::iterator iterator; -  typedef typename base_list_type::const_iterator const_iterator; -  typedef typename base_list_type::reverse_iterator reverse_iterator; -  typedef -      typename base_list_type::const_reverse_iterator const_reverse_iterator; +  using pointer = typename base_list_type::pointer; +  using const_pointer = typename base_list_type::const_pointer; +  using reference = typename base_list_type::reference; +  using const_reference = typename base_list_type::const_reference; +  using value_type = typename base_list_type::value_type; +  using size_type = typename base_list_type::size_type; +  using difference_type = typename base_list_type::difference_type; +  using iterator = typename base_list_type::iterator; +  using const_iterator = typename base_list_type::const_iterator; +  using reverse_iterator = typename base_list_type::reverse_iterator; +  using const_reverse_iterator = +      typename base_list_type::const_reverse_iterator;  private:    static bool op_less(const_reference L, const_reference R) { return L < R; } diff --git a/llvm/include/llvm/ADT/ilist_node_options.h b/llvm/include/llvm/ADT/ilist_node_options.h index 003d5da..53719b0 100644 --- a/llvm/include/llvm/ADT/ilist_node_options.h +++ b/llvm/include/llvm/ADT/ilist_node_options.h @@ -58,8 +58,8 @@ namespace ilist_detail {  template <bool IsExplicit> struct explicitness {    static const bool is_explicit = IsExplicit;  }; -typedef explicitness<true> is_explicit; -typedef explicitness<false> is_implicit; +using is_explicit = explicitness<true>; +using is_implicit = explicitness<false>;  /// Check whether an option is valid.  /// @@ -103,12 +103,12 @@ struct is_valid_option<ilist_sentinel_tracking<EnableSentinelTracking>>  template <class... Options> struct extract_tag;  template <class Tag, class... Options>  struct extract_tag<ilist_tag<Tag>, Options...> { -  typedef Tag type; +  using type = Tag;  };  template <class Option1, class... Options>  struct extract_tag<Option1, Options...> : extract_tag<Options...> {};  template <> struct extract_tag<> { -  typedef void type; +  using type = void;  };  template <class Tag> struct is_valid_option<ilist_tag<Tag>> : std::true_type {}; @@ -134,11 +134,13 @@ struct is_valid_option<ilist_iterator_bits<IteratorBits>> : std::true_type {};  template <class... Options> struct extract_parent;  template <class ParentTy, class... Options>  struct extract_parent<ilist_parent<ParentTy>, Options...> { -  typedef ParentTy type; +  using type = ParentTy;  };  template <class Option1, class... Options>  struct extract_parent<Option1, Options...> : extract_parent<Options...> {}; -template <> struct extract_parent<> { typedef void type; }; +template <> struct extract_parent<> { +  using type = void; +};  template <class ParentTy>  struct is_valid_option<ilist_parent<ParentTy>> : std::true_type {}; @@ -154,28 +156,27 @@ struct check_options : std::conjunction<is_valid_option<Options>...> {};  template <class T, bool EnableSentinelTracking, bool IsSentinelTrackingExplicit,            class TagT, bool HasIteratorBits, class ParentTy>  struct node_options { -  typedef T value_type; -  typedef T *pointer; -  typedef T &reference; -  typedef const T *const_pointer; -  typedef const T &const_reference; +  using value_type = T; +  using pointer = T *; +  using reference = T &; +  using const_pointer = const T *; +  using const_reference = const T &;    static const bool enable_sentinel_tracking = EnableSentinelTracking;    static const bool is_sentinel_tracking_explicit = IsSentinelTrackingExplicit;    static const bool has_iterator_bits = HasIteratorBits; -  typedef TagT tag; -  typedef ParentTy parent_ty; -  typedef ilist_node_base<enable_sentinel_tracking, parent_ty> node_base_type; -  typedef ilist_base<enable_sentinel_tracking, parent_ty> list_base_type; +  using tag = TagT; +  using parent_ty = ParentTy; +  using node_base_type = ilist_node_base<enable_sentinel_tracking, parent_ty>; +  using list_base_type = ilist_base<enable_sentinel_tracking, parent_ty>;  };  template <class T, class... Options> struct compute_node_options { -  typedef node_options<T, extract_sentinel_tracking<Options...>::value, -                       extract_sentinel_tracking<Options...>::is_explicit, -                       typename extract_tag<Options...>::type, -                       extract_iterator_bits<Options...>::value, -                       typename extract_parent<Options...>::type> -      type; +  using type = node_options<T, extract_sentinel_tracking<Options...>::value, +                            extract_sentinel_tracking<Options...>::is_explicit, +                            typename extract_tag<Options...>::type, +                            extract_iterator_bits<Options...>::value, +                            typename extract_parent<Options...>::type>;  };  } // end namespace ilist_detail diff --git a/llvm/include/llvm/Analysis/AliasAnalysis.h b/llvm/include/llvm/Analysis/AliasAnalysis.h index 1681079..878b7e7 100644 --- a/llvm/include/llvm/Analysis/AliasAnalysis.h +++ b/llvm/include/llvm/Analysis/AliasAnalysis.h @@ -861,7 +861,7 @@ protected:    // Provide all the copy and move constructors so that derived types aren't    // constrained. -  AAResultBase(const AAResultBase &Arg) {} +  AAResultBase(const AAResultBase &Arg) = default;    AAResultBase(AAResultBase &&Arg) {}  public: diff --git a/llvm/include/llvm/Analysis/ConstantFolding.h b/llvm/include/llvm/Analysis/ConstantFolding.h index 5f91f97..ea22ed4 100644 --- a/llvm/include/llvm/Analysis/ConstantFolding.h +++ b/llvm/include/llvm/Analysis/ConstantFolding.h @@ -119,12 +119,6 @@ ConstantFoldFPInstOperands(unsigned Opcode, Constant *LHS, Constant *RHS,  LLVM_ABI Constant *FlushFPConstant(Constant *Operand, const Instruction *I,                                     bool IsOutput); -/// Attempt to constant fold a select instruction with the specified -/// operands. The constant result is returned if successful; if not, null is -/// returned. -LLVM_ABI Constant *ConstantFoldSelectInstruction(Constant *Cond, Constant *V1, -                                                 Constant *V2); -  /// Attempt to constant fold a cast with the specified operand.  If it  /// fails, it returns a constant expression of the specified operand.  LLVM_ABI Constant *ConstantFoldCastOperand(unsigned Opcode, Constant *C, @@ -135,40 +129,6 @@ LLVM_ABI Constant *ConstantFoldCastOperand(unsigned Opcode, Constant *C,  LLVM_ABI Constant *ConstantFoldIntegerCast(Constant *C, Type *DestTy,                                             bool IsSigned, const DataLayout &DL); -/// ConstantFoldInsertValueInstruction - Attempt to constant fold an insertvalue -/// instruction with the specified operands and indices.  The constant result is -/// returned if successful; if not, null is returned. -LLVM_ABI Constant *ConstantFoldInsertValueInstruction(Constant *Agg, -                                                      Constant *Val, -                                                      ArrayRef<unsigned> Idxs); - -/// Attempt to constant fold an extractvalue instruction with the -/// specified operands and indices.  The constant result is returned if -/// successful; if not, null is returned. -LLVM_ABI Constant *ConstantFoldExtractValueInstruction(Constant *Agg, -                                                       ArrayRef<unsigned> Idxs); - -/// Attempt to constant fold an insertelement instruction with the -/// specified operands and indices.  The constant result is returned if -/// successful; if not, null is returned. -LLVM_ABI Constant *ConstantFoldInsertElementInstruction(Constant *Val, -                                                        Constant *Elt, -                                                        Constant *Idx); - -/// Attempt to constant fold an extractelement instruction with the -/// specified operands and indices.  The constant result is returned if -/// successful; if not, null is returned. -LLVM_ABI Constant *ConstantFoldExtractElementInstruction(Constant *Val, -                                                         Constant *Idx); - -/// Attempt to constant fold a shufflevector instruction with the -/// specified operands and mask.  See class ShuffleVectorInst for a description -/// of the mask representation. The constant result is returned if successful; -/// if not, null is returned. -LLVM_ABI Constant *ConstantFoldShuffleVectorInstruction(Constant *V1, -                                                        Constant *V2, -                                                        ArrayRef<int> Mask); -  /// Extract value of C at the given Offset reinterpreted as Ty. If bits past  /// the end of C are accessed, they are assumed to be poison.  LLVM_ABI Constant *ConstantFoldLoadFromConst(Constant *C, Type *Ty, diff --git a/llvm/include/llvm/Analysis/ConstraintSystem.h b/llvm/include/llvm/Analysis/ConstraintSystem.h index 307ad50..1d9ac49 100644 --- a/llvm/include/llvm/Analysis/ConstraintSystem.h +++ b/llvm/include/llvm/Analysis/ConstraintSystem.h @@ -64,7 +64,7 @@ class ConstraintSystem {    SmallVector<std::string> getVarNamesList() const;  public: -  ConstraintSystem() {} +  ConstraintSystem() = default;    ConstraintSystem(ArrayRef<Value *> FunctionArgs) {      NumVariables += FunctionArgs.size();      for (auto *Arg : FunctionArgs) { diff --git a/llvm/include/llvm/Analysis/DDG.h b/llvm/include/llvm/Analysis/DDG.h index 1c53291..120bb46 100644 --- a/llvm/include/llvm/Analysis/DDG.h +++ b/llvm/include/llvm/Analysis/DDG.h @@ -60,11 +60,7 @@ public:    DDGNode(DDGNode &&N) : DDGNodeBase(std::move(N)), Kind(N.Kind) {}    virtual ~DDGNode() = 0; -  DDGNode &operator=(const DDGNode &N) { -    DGNode::operator=(N); -    Kind = N.Kind; -    return *this; -  } +  DDGNode &operator=(const DDGNode &N) = default;    DDGNode &operator=(DDGNode &&N) {      DGNode::operator=(std::move(N)); diff --git a/llvm/include/llvm/Analysis/DOTGraphTraitsPass.h b/llvm/include/llvm/Analysis/DOTGraphTraitsPass.h index ba5ee1d..19a202f 100644 --- a/llvm/include/llvm/Analysis/DOTGraphTraitsPass.h +++ b/llvm/include/llvm/Analysis/DOTGraphTraitsPass.h @@ -80,7 +80,7 @@ protected:    /// virtual destructor needed. Making this dtor protected stops accidental    /// invocation when the derived class destructor should have been called.    /// Those derived classes sould be marked final to avoid the warning. -  ~DOTGraphTraitsViewer() {} +  ~DOTGraphTraitsViewer() = default;  private:    StringRef Name; @@ -161,7 +161,7 @@ protected:    /// virtual destructor needed. Making this dtor protected stops accidental    /// invocation when the derived class destructor should have been called.    /// Those derived classes sould be marked final to avoid the warning. -  ~DOTGraphTraitsPrinter() {} +  ~DOTGraphTraitsPrinter() = default;  private:    StringRef Name; diff --git a/llvm/include/llvm/Analysis/IR2Vec.h b/llvm/include/llvm/Analysis/IR2Vec.h index 71055dd16..7a68773 100644 --- a/llvm/include/llvm/Analysis/IR2Vec.h +++ b/llvm/include/llvm/Analysis/IR2Vec.h @@ -72,7 +72,7 @@ enum class IR2VecKind { Symbolic, FlowAware };  namespace ir2vec { -extern llvm::cl::OptionCategory IR2VecCategory; +LLVM_ABI extern llvm::cl::OptionCategory IR2VecCategory;  LLVM_ABI extern cl::opt<float> OpcWeight;  LLVM_ABI extern cl::opt<float> TypeWeight;  LLVM_ABI extern cl::opt<float> ArgWeight; @@ -110,8 +110,8 @@ public:      return Data[Itr];    } -  using iterator = typename std::vector<double>::iterator; -  using const_iterator = typename std::vector<double>::const_iterator; +  using iterator = std::vector<double>::iterator; +  using const_iterator = std::vector<double>::const_iterator;    iterator begin() { return Data.begin(); }    iterator end() { return Data.end(); } diff --git a/llvm/include/llvm/Analysis/LoopIterator.h b/llvm/include/llvm/Analysis/LoopIterator.h index 523d2a2..1ac8e68 100644 --- a/llvm/include/llvm/Analysis/LoopIterator.h +++ b/llvm/include/llvm/Analysis/LoopIterator.h @@ -45,12 +45,12 @@ struct LoopBodyTraits {    class WrappedSuccIterator        : public iterator_adaptor_base<              WrappedSuccIterator, succ_iterator, -            typename std::iterator_traits<succ_iterator>::iterator_category, -            NodeRef, std::ptrdiff_t, NodeRef *, NodeRef> { +            std::iterator_traits<succ_iterator>::iterator_category, NodeRef, +            std::ptrdiff_t, NodeRef *, NodeRef> {      using BaseT = iterator_adaptor_base<          WrappedSuccIterator, succ_iterator, -        typename std::iterator_traits<succ_iterator>::iterator_category, -        NodeRef, std::ptrdiff_t, NodeRef *, NodeRef>; +        std::iterator_traits<succ_iterator>::iterator_category, NodeRef, +        std::ptrdiff_t, NodeRef *, NodeRef>;      const Loop *L; diff --git a/llvm/include/llvm/Analysis/MemorySSA.h b/llvm/include/llvm/Analysis/MemorySSA.h index cbb942f..07d39ab 100644 --- a/llvm/include/llvm/Analysis/MemorySSA.h +++ b/llvm/include/llvm/Analysis/MemorySSA.h @@ -1247,7 +1247,7 @@ public:      return DefIterator == Other.DefIterator;    } -  typename std::iterator_traits<BaseT>::reference operator*() const { +  std::iterator_traits<BaseT>::reference operator*() const {      assert(DefIterator != OriginalAccess->defs_end() &&             "Tried to access past the end of our iterator");      return CurrentPair; diff --git a/llvm/include/llvm/Analysis/TargetFolder.h b/llvm/include/llvm/Analysis/TargetFolder.h index d27455c..cbce482 100644 --- a/llvm/include/llvm/Analysis/TargetFolder.h +++ b/llvm/include/llvm/Analysis/TargetFolder.h @@ -20,6 +20,7 @@  #include "llvm/ADT/ArrayRef.h"  #include "llvm/Analysis/ConstantFolding.h" +#include "llvm/IR/ConstantFold.h"  #include "llvm/IR/Constants.h"  #include "llvm/IR/IRBuilderFolder.h"  #include "llvm/IR/Operator.h" diff --git a/llvm/include/llvm/Analysis/TargetTransformInfo.h b/llvm/include/llvm/Analysis/TargetTransformInfo.h index 7b7dc1b..0f17312 100644 --- a/llvm/include/llvm/Analysis/TargetTransformInfo.h +++ b/llvm/include/llvm/Analysis/TargetTransformInfo.h @@ -1764,7 +1764,7 @@ public:    /// \param Types List of types to check.    LLVM_ABI bool areTypesABICompatible(const Function *Caller,                                        const Function *Callee, -                                      const ArrayRef<Type *> &Types) const; +                                      ArrayRef<Type *> Types) const;    /// The type of load/store indexing.    enum MemIndexedMode { diff --git a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h index 4cd607c..aacb88d 100644 --- a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h +++ b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h @@ -1028,7 +1028,7 @@ public:    virtual bool areTypesABICompatible(const Function *Caller,                                       const Function *Callee, -                                     const ArrayRef<Type *> &Types) const { +                                     ArrayRef<Type *> Types) const {      return (Caller->getFnAttribute("target-cpu") ==              Callee->getFnAttribute("target-cpu")) &&             (Caller->getFnAttribute("target-features") == diff --git a/llvm/include/llvm/CAS/ActionCache.h b/llvm/include/llvm/CAS/ActionCache.h index 69ee4dd..7f5b112 100644 --- a/llvm/include/llvm/CAS/ActionCache.h +++ b/llvm/include/llvm/CAS/ActionCache.h @@ -75,6 +75,9 @@ public:                     CanBeDistributed);    } +  /// Validate the ActionCache contents. +  virtual Error validate() const = 0; +    virtual ~ActionCache() = default;  protected: @@ -97,6 +100,9 @@ private:  /// Create an action cache in memory.  std::unique_ptr<ActionCache> createInMemoryActionCache(); +/// Create an action cache on disk. +Expected<std::unique_ptr<ActionCache>> createOnDiskActionCache(StringRef Path); +  } // end namespace llvm::cas  #endif // LLVM_CAS_ACTIONCACHE_H diff --git a/llvm/include/llvm/CAS/BuiltinUnifiedCASDatabases.h b/llvm/include/llvm/CAS/BuiltinUnifiedCASDatabases.h new file mode 100644 index 0000000..6c165c4 --- /dev/null +++ b/llvm/include/llvm/CAS/BuiltinUnifiedCASDatabases.h @@ -0,0 +1,59 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CAS_BUILTINUNIFIEDCASDATABASES_H +#define LLVM_CAS_BUILTINUNIFIEDCASDATABASES_H + +#include "llvm/Support/Error.h" + +namespace llvm::cas { + +class ActionCache; +class ObjectStore; + +/// Create on-disk \c ObjectStore and \c ActionCache instances based on +/// \c ondisk::UnifiedOnDiskCache, with built-in hashing. +Expected<std::pair<std::unique_ptr<ObjectStore>, std::unique_ptr<ActionCache>>> +createOnDiskUnifiedCASDatabases(StringRef Path); + +/// Represents the result of validating the contents using +/// \c validateOnDiskUnifiedCASDatabasesIfNeeded. +/// +/// Note: invalid results are handled as an \c Error. +enum class ValidationResult { +  /// The data is already valid. +  Valid, +  /// The data was invalid, but was recovered. +  Recovered, +  /// Validation was skipped, as it was not needed. +  Skipped, +}; + +/// Validate the data in \p Path, if needed to ensure correctness. +/// +/// \param Path directory for the on-disk database. +/// \param CheckHash Whether to validate hashes match the data. +/// \param AllowRecovery Whether to automatically recover from invalid data by +/// marking the files for garbage collection. +/// \param ForceValidation Whether to force validation to occur even if it +/// should not be necessary. +/// \param LLVMCasBinaryPath If provided, validation is performed out-of-process +/// using the given \c llvm-cas executable which protects against crashes +/// during validation. Otherwise validation is performed in-process. +/// +/// \returns \c Valid if the data is already valid, \c Recovered if data +/// was invalid but has been cleared, \c Skipped if validation is not needed, +/// or an \c Error if validation cannot be performed or if the data is left +/// in an invalid state because \p AllowRecovery is false. +Expected<ValidationResult> validateOnDiskUnifiedCASDatabasesIfNeeded( +    StringRef Path, bool CheckHash, bool AllowRecovery, bool ForceValidation, +    std::optional<StringRef> LLVMCasBinaryPath); + +} // namespace llvm::cas + +#endif // LLVM_CAS_BUILTINUNIFIEDCASDATABASES_H diff --git a/llvm/include/llvm/CAS/ObjectStore.h b/llvm/include/llvm/CAS/ObjectStore.h index 6db5dd3..29950fe 100644 --- a/llvm/include/llvm/CAS/ObjectStore.h +++ b/llvm/include/llvm/CAS/ObjectStore.h @@ -5,6 +5,11 @@  // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception  //  //===----------------------------------------------------------------------===// +/// +/// \file +/// This file contains the declaration of the ObjectStore class. +/// +//===----------------------------------------------------------------------===//  #ifndef LLVM_CAS_OBJECTSTORE_H  #define LLVM_CAS_OBJECTSTORE_H @@ -111,7 +116,10 @@ public:    virtual Expected<bool> isMaterialized(ObjectRef Ref) const = 0;    /// Validate the underlying object referred by CASID. -  virtual Error validate(const CASID &ID) = 0; +  virtual Error validateObject(const CASID &ID) = 0; + +  /// Validate the entire ObjectStore. +  virtual Error validate(bool CheckHash) const = 0;  protected:    /// Load the object referenced by \p Ref. @@ -215,9 +223,39 @@ public:      return Data.size();    } +  /// Set the size for limiting growth of on-disk storage. This has an effect +  /// for when the instance is closed. +  /// +  /// Implementations may leave this unimplemented. +  virtual Error setSizeLimit(std::optional<uint64_t> SizeLimit) { +    return Error::success(); +  } + +  /// \returns the storage size of the on-disk CAS data. +  /// +  /// Implementations that don't have an implementation for this should return +  /// \p std::nullopt. +  virtual Expected<std::optional<uint64_t>> getStorageSize() const { +    return std::nullopt; +  } + +  /// Prune local storage to reduce its size according to the desired size +  /// limit. Pruning can happen concurrently with other operations. +  /// +  /// Implementations may leave this unimplemented. +  virtual Error pruneStorageData() { return Error::success(); } +    /// Validate the whole node tree.    Error validateTree(ObjectRef Ref); +  /// Import object from another CAS. This will import the full tree from the +  /// other CAS. +  Expected<ObjectRef> importObject(ObjectStore &Upstream, ObjectRef Other); + +  /// Print the ObjectStore internals for debugging purpose. +  virtual void print(raw_ostream &) const {} +  void dump() const; +    /// Get CASContext    const CASContext &getContext() const { return Context; } @@ -290,8 +328,15 @@ private:    ObjectHandle H;  }; +/// Create an in memory CAS.  std::unique_ptr<ObjectStore> createInMemoryCAS(); +/// \returns true if \c LLVM_ENABLE_ONDISK_CAS configuration was enabled. +bool isOnDiskCASEnabled(); + +/// Create a persistent on-disk path at \p Path. +Expected<std::unique_ptr<ObjectStore>> createOnDiskCAS(const Twine &Path); +  } // namespace cas  } // namespace llvm diff --git a/llvm/include/llvm/CAS/OnDiskGraphDB.h b/llvm/include/llvm/CAS/OnDiskGraphDB.h index 5f0ee0e..76cc528 100644 --- a/llvm/include/llvm/CAS/OnDiskGraphDB.h +++ b/llvm/include/llvm/CAS/OnDiskGraphDB.h @@ -340,13 +340,16 @@ public:    /// \param HashByteSize Size for the object digest hash bytes.    /// \param UpstreamDB Optional on-disk store to be used for faulting-in nodes    /// if they don't exist in the primary store. The upstream store is only used -  /// for reading nodes, new nodes are only written to the primary store. +  /// for reading nodes, new nodes are only written to the primary store. User +  /// need to make sure \p UpstreamDB outlives current instance of +  /// OnDiskGraphDB and the common usage is to have an \p UnifiedOnDiskCache to +  /// manage both.    /// \param Policy If \p UpstreamDB is provided, controls how nodes are copied    /// to primary store. This is recorded at creation time and subsequent opens    /// need to pass the same policy otherwise the \p open will fail.    static Expected<std::unique_ptr<OnDiskGraphDB>>    open(StringRef Path, StringRef HashName, unsigned HashByteSize, -       std::unique_ptr<OnDiskGraphDB> UpstreamDB = nullptr, +       OnDiskGraphDB *UpstreamDB = nullptr,         FaultInPolicy Policy = FaultInPolicy::FullTree);    ~OnDiskGraphDB(); @@ -438,8 +441,7 @@ private:    // Private constructor.    OnDiskGraphDB(StringRef RootPath, OnDiskTrieRawHashMap Index, -                OnDiskDataAllocator DataPool, -                std::unique_ptr<OnDiskGraphDB> UpstreamDB, +                OnDiskDataAllocator DataPool, OnDiskGraphDB *UpstreamDB,                  FaultInPolicy Policy);    /// Mapping from hash to object reference. @@ -459,7 +461,7 @@ private:    std::string RootPath;    /// Optional on-disk store to be used for faulting-in nodes. -  std::unique_ptr<OnDiskGraphDB> UpstreamDB; +  OnDiskGraphDB *UpstreamDB = nullptr;    /// The policy used to fault in data from upstream.    FaultInPolicy FIPolicy; diff --git a/llvm/include/llvm/CAS/OnDiskKeyValueDB.h b/llvm/include/llvm/CAS/OnDiskKeyValueDB.h index b762518..17ae52f 100644 --- a/llvm/include/llvm/CAS/OnDiskKeyValueDB.h +++ b/llvm/include/llvm/CAS/OnDiskKeyValueDB.h @@ -19,6 +19,8 @@  namespace llvm::cas::ondisk { +class UnifiedOnDiskCache; +  /// An on-disk key-value data store with the following properties:  /// * Keys are fixed length binary hashes with expected normal distribution.  /// * Values are buffers of the same size, specified at creation time. @@ -59,9 +61,13 @@ public:    /// \param KeySize Size for the key hash bytes.    /// \param ValueName Identifier name for the values.    /// \param ValueSize Size for the value bytes. +  /// \param UnifiedCache An optional UnifiedOnDiskCache that manages the size +  /// and lifetime of the CAS instance and it must owns current initializing +  /// KeyValueDB after initialized.    static Expected<std::unique_ptr<OnDiskKeyValueDB>>    open(StringRef Path, StringRef HashName, unsigned KeySize, -       StringRef ValueName, size_t ValueSize); +       StringRef ValueName, size_t ValueSize, +       UnifiedOnDiskCache *UnifiedCache = nullptr);    using CheckValueT =        function_ref<Error(FileOffset Offset, ArrayRef<char> Data)>; @@ -70,11 +76,14 @@ public:    Error validate(CheckValueT CheckValue) const;  private: -  OnDiskKeyValueDB(size_t ValueSize, OnDiskTrieRawHashMap Cache) -      : ValueSize(ValueSize), Cache(std::move(Cache)) {} +  OnDiskKeyValueDB(size_t ValueSize, OnDiskTrieRawHashMap Cache, +                   UnifiedOnDiskCache *UnifiedCache) +      : ValueSize(ValueSize), Cache(std::move(Cache)), +        UnifiedCache(UnifiedCache) {}    const size_t ValueSize;    OnDiskTrieRawHashMap Cache; +  UnifiedOnDiskCache *UnifiedCache = nullptr;  };  } // namespace llvm::cas::ondisk diff --git a/llvm/include/llvm/CAS/UnifiedOnDiskCache.h b/llvm/include/llvm/CAS/UnifiedOnDiskCache.h new file mode 100644 index 0000000..6e0878a --- /dev/null +++ b/llvm/include/llvm/CAS/UnifiedOnDiskCache.h @@ -0,0 +1,172 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CAS_UNIFIEDONDISKCACHE_H +#define LLVM_CAS_UNIFIEDONDISKCACHE_H + +#include "llvm/CAS/BuiltinUnifiedCASDatabases.h" +#include "llvm/CAS/OnDiskGraphDB.h" +#include <atomic> + +namespace llvm::cas::ondisk { + +class OnDiskKeyValueDB; + +/// A unified CAS nodes and key-value database, using on-disk storage for both. +/// It manages storage growth and provides APIs for garbage collection. +/// +/// High-level properties: +/// * While \p UnifiedOnDiskCache is open on a directory, by any process, the +///   storage size in that directory will keep growing unrestricted. For data to +///   become eligible for garbage-collection there should be no open instances +///   of \p UnifiedOnDiskCache for that directory, by any process. +/// * Garbage-collection needs to be triggered explicitly by the client. It can +///   be triggered on a directory concurrently, at any time and by any process, +///   without affecting any active readers/writers, in the same process or other +///   processes. +/// +/// Usage patterns should be that an instance of \p UnifiedOnDiskCache is open +/// for a limited period of time, e.g. for the duration of a build operation. +/// For long-living processes that need periodic access to a +/// \p UnifiedOnDiskCache, the client should devise a scheme where access is +/// performed within some defined period. For example, if a service is designed +/// to continuously wait for requests that access a \p UnifiedOnDiskCache, it +/// could keep the instance alive while new requests are coming in but close it +/// after a time period in which there are no new requests. +class UnifiedOnDiskCache { +public: +  /// The \p OnDiskGraphDB instance for the open directory. +  OnDiskGraphDB &getGraphDB() { return *PrimaryGraphDB; } + +  /// The \p OnDiskGraphDB instance for the open directory. +  OnDiskKeyValueDB &getKeyValueDB() { return *PrimaryKVDB; } + +  /// Open a \p UnifiedOnDiskCache instance for a directory. +  /// +  /// \param Path directory for the on-disk database. The directory will be +  /// created if it doesn't exist. +  /// \param SizeLimit Optional size for limiting growth. This has an effect for +  /// when the instance is closed. +  /// \param HashName Identifier name for the hashing algorithm that is going to +  /// be used. +  /// \param HashByteSize Size for the object digest hash bytes. +  /// \param FaultInPolicy Controls how nodes are copied to primary store. This +  /// is recorded at creation time and subsequent opens need to pass the same +  /// policy otherwise the \p open will fail. +  static Expected<std::unique_ptr<UnifiedOnDiskCache>> +  open(StringRef Path, std::optional<uint64_t> SizeLimit, StringRef HashName, +       unsigned HashByteSize, +       OnDiskGraphDB::FaultInPolicy FaultInPolicy = +           OnDiskGraphDB::FaultInPolicy::FullTree); + +  /// Validate the data in \p Path, if needed to ensure correctness. +  /// +  /// Note: if invalid data is detected and \p AllowRecovery is true, then +  /// recovery requires exclusive access to the CAS and it is an error to +  /// attempt recovery if there is concurrent use of the CAS. +  /// +  /// \param Path directory for the on-disk database. +  /// \param HashName Identifier name for the hashing algorithm that is going to +  /// be used. +  /// \param HashByteSize Size for the object digest hash bytes. +  /// \param CheckHash Whether to validate hashes match the data. +  /// \param AllowRecovery Whether to automatically recover from invalid data by +  /// marking the files for garbage collection. +  /// \param ForceValidation Whether to force validation to occur even if it +  /// should not be necessary. +  /// \param LLVMCasBinary If provided, validation is performed out-of-process +  /// using the given \c llvm-cas executable which protects against crashes +  /// during validation. Otherwise validation is performed in-process. +  /// +  /// \returns \c Valid if the data is already valid, \c Recovered if data +  /// was invalid but has been cleared, \c Skipped if validation is not needed, +  /// or an \c Error if validation cannot be performed or if the data is left +  /// in an invalid state because \p AllowRecovery is false. +  static Expected<ValidationResult> +  validateIfNeeded(StringRef Path, StringRef HashName, unsigned HashByteSize, +                   bool CheckHash, bool AllowRecovery, bool ForceValidation, +                   std::optional<StringRef> LLVMCasBinary); + +  /// This is called implicitly at destruction time, so it is not required for a +  /// client to call this. After calling \p close the only method that is valid +  /// to call is \p needsGarbageCollection. +  /// +  /// \param CheckSizeLimit if true it will check whether the primary store has +  /// exceeded its intended size limit. If false the check is skipped even if a +  /// \p SizeLimit was passed to the \p open call. +  Error close(bool CheckSizeLimit = true); + +  /// Set the size for limiting growth. This has an effect for when the instance +  /// is closed. +  void setSizeLimit(std::optional<uint64_t> SizeLimit); + +  /// \returns the storage size of the cache data. +  uint64_t getStorageSize() const; + +  /// \returns whether the primary store has exceeded the intended size limit. +  /// This can return false even if the overall size of the opened directory is +  /// over the \p SizeLimit passed to \p open. To know whether garbage +  /// collection needs to be triggered or not, call \p needsGarbaseCollection. +  bool hasExceededSizeLimit() const; + +  /// \returns whether there are unused data that can be deleted using a +  /// \p collectGarbage call. +  bool needsGarbageCollection() const { return NeedsGarbageCollection; } + +  /// Remove any unused data from the directory at \p Path. If there are no such +  /// data the operation is a no-op. +  /// +  /// This can be called concurrently, regardless of whether there is an open +  /// \p UnifiedOnDiskCache instance or not; it has no effect on readers/writers +  /// in the same process or other processes. +  /// +  /// It is recommended that garbage-collection is triggered concurrently in the +  /// background, so that it has minimal effect on the workload of the process. +  static Error collectGarbage(StringRef Path); + +  /// Remove unused data from the current UnifiedOnDiskCache. +  Error collectGarbage(); + +  /// Helper function to convert the value stored in KeyValueDB and ObjectID. +  static ObjectID getObjectIDFromValue(ArrayRef<char> Value); + +  using ValueBytes = std::array<char, sizeof(uint64_t)>; +  static ValueBytes getValueFromObjectID(ObjectID ID); + +  ~UnifiedOnDiskCache(); + +private: +  friend class OnDiskGraphDB; +  friend class OnDiskKeyValueDB; + +  UnifiedOnDiskCache(); + +  Expected<std::optional<ArrayRef<char>>> +  faultInFromUpstreamKV(ArrayRef<uint8_t> Key); + +  /// \returns the storage size of the primary directory. +  uint64_t getPrimaryStorageSize() const; + +  std::string RootPath; +  std::atomic<uint64_t> SizeLimit; + +  int LockFD = -1; + +  std::atomic<bool> NeedsGarbageCollection; +  std::string PrimaryDBDir; + +  std::unique_ptr<OnDiskGraphDB> UpstreamGraphDB; +  std::unique_ptr<OnDiskGraphDB> PrimaryGraphDB; + +  std::unique_ptr<OnDiskKeyValueDB> UpstreamKVDB; +  std::unique_ptr<OnDiskKeyValueDB> PrimaryKVDB; +}; + +} // namespace llvm::cas::ondisk + +#endif // LLVM_CAS_UNIFIEDONDISKCACHE_H diff --git a/llvm/include/llvm/CodeGen/BasicBlockSectionsProfileReader.h b/llvm/include/llvm/CodeGen/BasicBlockSectionsProfileReader.h index 8237530..7b1a5f5 100644 --- a/llvm/include/llvm/CodeGen/BasicBlockSectionsProfileReader.h +++ b/llvm/include/llvm/CodeGen/BasicBlockSectionsProfileReader.h @@ -66,7 +66,7 @@ public:    BasicBlockSectionsProfileReader(const MemoryBuffer *Buf)        : MBuf(Buf), LineIt(*Buf, /*SkipBlanks=*/true, /*CommentMarker=*/'#'){}; -  BasicBlockSectionsProfileReader(){}; +  BasicBlockSectionsProfileReader() = default;    // Returns true if basic block sections profile exist for function \p    // FuncName. diff --git a/llvm/include/llvm/CodeGen/DIE.h b/llvm/include/llvm/CodeGen/DIE.h index 32f4651..92265fd 100644 --- a/llvm/include/llvm/CodeGen/DIE.h +++ b/llvm/include/llvm/CodeGen/DIE.h @@ -653,7 +653,7 @@ public:    public:      const_iterator() = default;      // Placate MSVC by explicitly scoping 'iterator'. -    const_iterator(typename IntrusiveBackList<T>::iterator X) : N(X.N) {} +    const_iterator(IntrusiveBackList<T>::iterator X) : N(X.N) {}      explicit const_iterator(const T *N) : N(N) {}      const_iterator &operator++() { diff --git a/llvm/include/llvm/CodeGen/GlobalISel/CombinerHelper.h b/llvm/include/llvm/CodeGen/GlobalISel/CombinerHelper.h index 36cb90b..96cb7cd 100644 --- a/llvm/include/llvm/CodeGen/GlobalISel/CombinerHelper.h +++ b/llvm/include/llvm/CodeGen/GlobalISel/CombinerHelper.h @@ -293,7 +293,7 @@ public:                                   SmallVectorImpl<Register> &Ops) const;    /// Replace \p MI with a concat_vectors with \p Ops.    void applyCombineShuffleVector(MachineInstr &MI, -                                 const ArrayRef<Register> Ops) const; +                                 ArrayRef<Register> Ops) const;    /// Optimize memcpy intrinsics et al, e.g. constant len calls.    /// /p MaxLen if non-zero specifies the max length of a mem libcall to inline. diff --git a/llvm/include/llvm/CodeGen/GlobalMergeFunctions.h b/llvm/include/llvm/CodeGen/GlobalMergeFunctions.h index caea5b6..54ea68a 100644 --- a/llvm/include/llvm/CodeGen/GlobalMergeFunctions.h +++ b/llvm/include/llvm/CodeGen/GlobalMergeFunctions.h @@ -58,7 +58,7 @@ public:    /// The suffix used to identify the merged function that parameterizes    /// the constant values. Note that the original function, without this suffix,    /// becomes a thunk supplying contexts to the merged function via parameters. -  static constexpr const char MergingInstanceSuffix[] = ".Tgm"; +  static constexpr char MergingInstanceSuffix[] = ".Tgm";    GlobalMergeFunc(const ModuleSummaryIndex *Index) : Index(Index) {}; diff --git a/llvm/include/llvm/CodeGen/MIR2Vec.h b/llvm/include/llvm/CodeGen/MIR2Vec.h index 44f009c..18b1290 100644 --- a/llvm/include/llvm/CodeGen/MIR2Vec.h +++ b/llvm/include/llvm/CodeGen/MIR2Vec.h @@ -73,7 +73,7 @@ namespace mir2vec {  class MIREmbedder;  class SymbolicMIREmbedder; -extern llvm::cl::OptionCategory MIR2VecCategory; +LLVM_ABI extern llvm::cl::OptionCategory MIR2VecCategory;  extern cl::opt<float> OpcWeight, CommonOperandWeight, RegOperandWeight;  using Embedding = ir2vec::Embedding; @@ -154,14 +154,14 @@ class MIRVocabulary {    void buildRegisterOperandMapping();    /// Get canonical index for a machine opcode -  unsigned getCanonicalOpcodeIndex(unsigned Opcode) const; +  LLVM_ABI unsigned getCanonicalOpcodeIndex(unsigned Opcode) const;    /// Get index for a common (non-register) machine operand    unsigned    getCommonOperandIndex(MachineOperand::MachineOperandType OperandType) const;    /// Get index for a register machine operand -  unsigned getRegisterOperandIndex(Register Reg) const; +  LLVM_ABI unsigned getRegisterOperandIndex(Register Reg) const;    // Accessors for operand types    const Embedding & @@ -192,7 +192,7 @@ class MIRVocabulary {    /// Get entity ID (flat index) for a common operand type    /// This is used for triplet generation -  unsigned getEntityIDForCommonOperand( +  LLVM_ABI unsigned getEntityIDForCommonOperand(        MachineOperand::MachineOperandType OperandType) const {      return Layout.CommonOperandBase + getCommonOperandIndex(OperandType);    } @@ -221,7 +221,7 @@ public:                                               bool IsPhysical = true) const;    /// Get the string key for a vocabulary entry at the given position -  std::string getStringKey(unsigned Pos) const; +  LLVM_ABI std::string getStringKey(unsigned Pos) const;    unsigned getDimension() const { return Storage.getDimension(); } @@ -268,7 +268,7 @@ public:           const TargetRegisterInfo &TRI, const MachineRegisterInfo &MRI);    /// Create a dummy vocabulary for testing purposes. -  static Expected<MIRVocabulary> +  LLVM_ABI static Expected<MIRVocabulary>    createDummyVocabForTest(const TargetInstrInfo &TII,                            const TargetRegisterInfo &TRI,                            const MachineRegisterInfo &MRI, unsigned Dim = 1); @@ -302,10 +302,10 @@ protected:          RegOperandWeight(mir2vec::RegOperandWeight) {}    /// Function to compute embeddings. -  Embedding computeEmbeddings() const; +  LLVM_ABI Embedding computeEmbeddings() const;    /// Function to compute the embedding for a given machine basic block. -  Embedding computeEmbeddings(const MachineBasicBlock &MBB) const; +  LLVM_ABI Embedding computeEmbeddings(const MachineBasicBlock &MBB) const;    /// Function to compute the embedding for a given machine instruction.    /// Specific to the kind of embeddings being computed. @@ -316,9 +316,9 @@ public:    /// Factory method to create an Embedder object of the specified kind    /// Returns nullptr if the requested kind is not supported. -  static std::unique_ptr<MIREmbedder> create(MIR2VecKind Mode, -                                             const MachineFunction &MF, -                                             const MIRVocabulary &Vocab); +  LLVM_ABI static std::unique_ptr<MIREmbedder> +  create(MIR2VecKind Mode, const MachineFunction &MF, +         const MIRVocabulary &Vocab);    /// Computes and returns the embedding for a given machine instruction MI in    /// the machine function MF. @@ -369,7 +369,7 @@ class MIR2VecVocabProvider {  public:    MIR2VecVocabProvider(const MachineModuleInfo &MMI) : MMI(MMI) {} -  Expected<mir2vec::MIRVocabulary> getVocabulary(const Module &M); +  LLVM_ABI Expected<mir2vec::MIRVocabulary> getVocabulary(const Module &M);  private:    Error readVocabulary(VocabMap &OpcVocab, VocabMap &CommonOperandVocab, @@ -454,7 +454,7 @@ public:  };  /// Create a machine pass that prints MIR2Vec embeddings -MachineFunctionPass *createMIR2VecPrinterLegacyPass(raw_ostream &OS); +LLVM_ABI MachineFunctionPass *createMIR2VecPrinterLegacyPass(raw_ostream &OS);  } // namespace llvm diff --git a/llvm/include/llvm/CodeGen/MachineScheduler.h b/llvm/include/llvm/CodeGen/MachineScheduler.h index 5a2aee2..6c5c27c 100644 --- a/llvm/include/llvm/CodeGen/MachineScheduler.h +++ b/llvm/include/llvm/CodeGen/MachineScheduler.h @@ -829,7 +829,7 @@ private:  public:    // constructor for empty set -  explicit ResourceSegments(){}; +  explicit ResourceSegments() = default;    bool empty() const { return _Intervals.empty(); }    explicit ResourceSegments(const std::list<IntervalTy> &Intervals)        : _Intervals(Intervals) { diff --git a/llvm/include/llvm/CodeGen/RDFRegisters.h b/llvm/include/llvm/CodeGen/RDFRegisters.h index 82027ca..3b7454e 100644 --- a/llvm/include/llvm/CodeGen/RDFRegisters.h +++ b/llvm/include/llvm/CodeGen/RDFRegisters.h @@ -294,7 +294,7 @@ struct RegisterAggr {    ref_iterator ref_begin() const { return ref_iterator(*this, false); }    ref_iterator ref_end() const { return ref_iterator(*this, true); } -  using unit_iterator = typename BitVector::const_set_bits_iterator; +  using unit_iterator = BitVector::const_set_bits_iterator;    unit_iterator unit_begin() const { return Units.set_bits_begin(); }    unit_iterator unit_end() const { return Units.set_bits_end(); } diff --git a/llvm/include/llvm/CodeGen/RegAllocRegistry.h b/llvm/include/llvm/CodeGen/RegAllocRegistry.h index cd81e08..db62640 100644 --- a/llvm/include/llvm/CodeGen/RegAllocRegistry.h +++ b/llvm/include/llvm/CodeGen/RegAllocRegistry.h @@ -67,7 +67,7 @@ public:  /// RegisterRegAlloc's global Registry tracks allocator registration.  template <class T>  MachinePassRegistry<typename RegisterRegAllocBase<T>::FunctionPassCtor> -RegisterRegAllocBase<T>::Registry; +    RegisterRegAllocBase<T>::Registry;  } // end namespace llvm diff --git a/llvm/include/llvm/CodeGen/SDPatternMatch.h b/llvm/include/llvm/CodeGen/SDPatternMatch.h index 9a6bf5f..511cb56 100644 --- a/llvm/include/llvm/CodeGen/SDPatternMatch.h +++ b/llvm/include/llvm/CodeGen/SDPatternMatch.h @@ -1311,7 +1311,7 @@ template <typename... PatternTs> struct ReassociatableOpc_match {    }    [[nodiscard]] inline bool -  reassociatableMatchHelper(const ArrayRef<SmallBitVector> Matches, +  reassociatableMatchHelper(ArrayRef<SmallBitVector> Matches,                              SmallBitVector &Used, size_t Curr = 0) {      if (Curr == Matches.size())        return true; diff --git a/llvm/include/llvm/CodeGen/WindowScheduler.h b/llvm/include/llvm/CodeGen/WindowScheduler.h index 476d5ad..97776de 100644 --- a/llvm/include/llvm/CodeGen/WindowScheduler.h +++ b/llvm/include/llvm/CodeGen/WindowScheduler.h @@ -105,7 +105,7 @@ protected:  public:    WindowScheduler(MachineSchedContext *C, MachineLoop &ML); -  virtual ~WindowScheduler() {} +  virtual ~WindowScheduler() = default;    bool run(); diff --git a/llvm/include/llvm/CodeGenTypes/LowLevelType.h b/llvm/include/llvm/CodeGenTypes/LowLevelType.h index 4c1fe13..472a3f3 100644 --- a/llvm/include/llvm/CodeGenTypes/LowLevelType.h +++ b/llvm/include/llvm/CodeGenTypes/LowLevelType.h @@ -340,18 +340,18 @@ private:    ///   valid encodings, SizeInBits/SizeOfElement must be larger than 0.    /// * Non-pointer scalar (isPointer == 0 && isVector == 0):    ///   SizeInBits: 32; -  static const constexpr BitFieldInfo ScalarSizeFieldInfo{32, 29}; +  static constexpr BitFieldInfo ScalarSizeFieldInfo{32, 29};    /// * Pointer (isPointer == 1 && isVector == 0):    ///   SizeInBits: 16;    ///   AddressSpace: 24; -  static const constexpr BitFieldInfo PointerSizeFieldInfo{16, 45}; -  static const constexpr BitFieldInfo PointerAddressSpaceFieldInfo{24, 21}; +  static constexpr BitFieldInfo PointerSizeFieldInfo{16, 45}; +  static constexpr BitFieldInfo PointerAddressSpaceFieldInfo{24, 21};    /// * Vector-of-non-pointer (isPointer == 0 && isVector == 1):    ///   NumElements: 16;    ///   SizeOfElement: 32;    ///   Scalable: 1; -  static const constexpr BitFieldInfo VectorElementsFieldInfo{16, 5}; -  static const constexpr BitFieldInfo VectorScalableFieldInfo{1, 0}; +  static constexpr BitFieldInfo VectorElementsFieldInfo{16, 5}; +  static constexpr BitFieldInfo VectorScalableFieldInfo{1, 0};    /// * Vector-of-pointer (isPointer == 1 && isVector == 1):    ///   NumElements: 16;    ///   SizeOfElement: 16; diff --git a/llvm/include/llvm/DWARFLinker/StringPool.h b/llvm/include/llvm/DWARFLinker/StringPool.h index d0f4e21..7838e3b 100644 --- a/llvm/include/llvm/DWARFLinker/StringPool.h +++ b/llvm/include/llvm/DWARFLinker/StringPool.h @@ -20,7 +20,7 @@ namespace dwarf_linker {  /// StringEntry keeps data of the string: the length, external offset  /// and a string body which is placed right after StringEntry. -using StringEntry = StringMapEntry<std::nullopt_t>; +using StringEntry = StringMapEntry<EmptyStringSetTag>;  class StringPoolEntryInfo {  public: diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h index be78647..b7d6e72 100644 --- a/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h +++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h @@ -136,8 +136,8 @@ class DWARFUnitVector final : public SmallVector<std::unique_ptr<DWARFUnit>, 1>  public:    using UnitVector = SmallVectorImpl<std::unique_ptr<DWARFUnit>>; -  using iterator = typename UnitVector::iterator; -  using iterator_range = llvm::iterator_range<typename UnitVector::iterator>; +  using iterator = UnitVector::iterator; +  using iterator_range = llvm::iterator_range<UnitVector::iterator>;    using compile_unit_range =        decltype(make_filter_range(std::declval<iterator_range>(), isCompileUnit)); diff --git a/llvm/include/llvm/DebugInfo/PDB/Native/DbiModuleList.h b/llvm/include/llvm/DebugInfo/PDB/Native/DbiModuleList.h index 8992fae..bbed56b 100644 --- a/llvm/include/llvm/DebugInfo/PDB/Native/DbiModuleList.h +++ b/llvm/include/llvm/DebugInfo/PDB/Native/DbiModuleList.h @@ -32,7 +32,7 @@ struct FileInfoSubstreamHeader;  class DbiModuleSourceFilesIterator      : public iterator_facade_base<DbiModuleSourceFilesIterator,                                    std::random_access_iterator_tag, StringRef> { -  using BaseType = typename DbiModuleSourceFilesIterator::iterator_facade_base; +  using BaseType = DbiModuleSourceFilesIterator::iterator_facade_base;  public:    LLVM_ABI DbiModuleSourceFilesIterator(const DbiModuleList &Modules, diff --git a/llvm/include/llvm/Demangle/Utility.h b/llvm/include/llvm/Demangle/Utility.h index 002a1f5..6e6203d 100644 --- a/llvm/include/llvm/Demangle/Utility.h +++ b/llvm/include/llvm/Demangle/Utility.h @@ -81,7 +81,7 @@ public:    OutputBuffer(const OutputBuffer &) = delete;    OutputBuffer &operator=(const OutputBuffer &) = delete; -  virtual ~OutputBuffer() {} +  virtual ~OutputBuffer() = default;    operator std::string_view() const {      return std::string_view(Buffer, CurrentPosition); diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/aarch32.h b/llvm/include/llvm/ExecutionEngine/JITLink/aarch32.h index 98170f6..9479c10 100644 --- a/llvm/include/llvm/ExecutionEngine/JITLink/aarch32.h +++ b/llvm/include/llvm/ExecutionEngine/JITLink/aarch32.h @@ -175,7 +175,7 @@ struct HalfWords {  /// FixupInfo base class is required for dynamic lookups.  struct FixupInfoBase {    LLVM_ABI static const FixupInfoBase *getDynFixupInfo(Edge::Kind K); -  virtual ~FixupInfoBase() {} +  virtual ~FixupInfoBase() = default;  };  /// FixupInfo checks for Arm edge kinds work on 32-bit words diff --git a/llvm/include/llvm/ExecutionEngine/Orc/MachOBuilder.h b/llvm/include/llvm/ExecutionEngine/Orc/MachOBuilder.h index dd41025..1296e24 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/MachOBuilder.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/MachOBuilder.h @@ -36,7 +36,7 @@ size_t writeMachOStruct(MutableArrayRef<char> Buf, size_t Offset, MachOStruct S,  /// Base type for MachOBuilder load command wrappers.  struct MachOBuilderLoadCommandBase { -  virtual ~MachOBuilderLoadCommandBase() {} +  virtual ~MachOBuilderLoadCommandBase() = default;    virtual size_t size() const = 0;    virtual size_t write(MutableArrayRef<char> Buf, size_t Offset,                         bool SwapStruct) = 0; diff --git a/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/ExecutorSharedMemoryMapperService.h b/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/ExecutorSharedMemoryMapperService.h index 2c385de..8f87650 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/ExecutorSharedMemoryMapperService.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/ExecutorSharedMemoryMapperService.h @@ -29,7 +29,7 @@ namespace rt_bootstrap {  class LLVM_ABI ExecutorSharedMemoryMapperService final      : public ExecutorBootstrapService {  public: -  ~ExecutorSharedMemoryMapperService() override {}; +  ~ExecutorSharedMemoryMapperService() override = default;    Expected<std::pair<ExecutorAddr, std::string>> reserve(uint64_t Size);    Expected<ExecutorAddr> initialize(ExecutorAddr Reservation, diff --git a/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/LibraryResolver.h b/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/LibraryResolver.h index 9182995..7cc78d4 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/LibraryResolver.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/LibraryResolver.h @@ -100,7 +100,7 @@ public:    class FilteredView {    public:      using Map = StringMap<std::shared_ptr<LibraryInfo>>; -    using Iterator = typename Map::const_iterator; +    using Iterator = Map::const_iterator;      class FilterIterator {      public:        FilterIterator(Iterator it_, Iterator end_, LibState S, PathType K) diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h index 5331cb5..b3d7ab4 100644 --- a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h +++ b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h @@ -2383,7 +2383,7 @@ public:      /// runtime library for debugging      Value *MapNamesArray = nullptr; -    explicit TargetDataRTArgs() {} +    explicit TargetDataRTArgs() = default;      explicit TargetDataRTArgs(Value *BasePointersArray, Value *PointersArray,                                Value *SizesArray, Value *MapTypesArray,                                Value *MapTypesArrayEnd, Value *MappersArray, @@ -2451,7 +2451,7 @@ public:      bool HasNoWait = false;      // Constructors for TargetKernelArgs. -    TargetKernelArgs() {} +    TargetKernelArgs() = default;      TargetKernelArgs(unsigned NumTargetItems, TargetDataRTArgs RTArgs,                       Value *NumIterations, ArrayRef<Value *> NumTeams,                       ArrayRef<Value *> NumThreads, Value *DynCGGroupMem, @@ -2494,7 +2494,7 @@ public:      /// Whether the `target ... data` directive has a `nowait` clause.      bool HasNoWait = false; -    explicit TargetDataInfo() {} +    explicit TargetDataInfo() = default;      explicit TargetDataInfo(bool RequiresDevicePointerInfo,                              bool SeparateBeginEndCalls)          : RequiresDevicePointerInfo(RequiresDevicePointerInfo), diff --git a/llvm/include/llvm/IR/ConstantFold.h b/llvm/include/llvm/IR/ConstantFold.h index f9f2b35..4056f1f 100644 --- a/llvm/include/llvm/IR/ConstantFold.h +++ b/llvm/include/llvm/IR/ConstantFold.h @@ -26,42 +26,66 @@  #include <optional>  namespace llvm { -  template <typename T> class ArrayRef; -  class Value; -  class Constant; -  class Type; +template <typename T> class ArrayRef; +class Value; +class Constant; +class Type; -  // Constant fold various types of instruction... -  LLVM_ABI Constant * -  ConstantFoldCastInstruction(unsigned opcode, ///< The opcode of the cast -                              Constant *V,     ///< The source constant -                              Type *DestTy     ///< The destination type -  ); -  LLVM_ABI Constant *ConstantFoldSelectInstruction(Constant *Cond, Constant *V1, -                                                   Constant *V2); -  LLVM_ABI Constant *ConstantFoldExtractElementInstruction(Constant *Val, -                                                           Constant *Idx); -  LLVM_ABI Constant *ConstantFoldInsertElementInstruction(Constant *Val, -                                                          Constant *Elt, -                                                          Constant *Idx); -  LLVM_ABI Constant *ConstantFoldShuffleVectorInstruction(Constant *V1, -                                                          Constant *V2, -                                                          ArrayRef<int> Mask); -  LLVM_ABI Constant * -  ConstantFoldExtractValueInstruction(Constant *Agg, ArrayRef<unsigned> Idxs); -  LLVM_ABI Constant * -  ConstantFoldInsertValueInstruction(Constant *Agg, Constant *Val, -                                     ArrayRef<unsigned> Idxs); -  LLVM_ABI Constant *ConstantFoldUnaryInstruction(unsigned Opcode, Constant *V); -  LLVM_ABI Constant *ConstantFoldBinaryInstruction(unsigned Opcode, -                                                   Constant *V1, Constant *V2); -  LLVM_ABI Constant * -  ConstantFoldCompareInstruction(CmpInst::Predicate Predicate, Constant *C1, -                                 Constant *C2); -  LLVM_ABI Constant * -  ConstantFoldGetElementPtr(Type *Ty, Constant *C, -                            std::optional<ConstantRange> InRange, -                            ArrayRef<Value *> Idxs); -} // End llvm namespace +// Constant fold various types of instruction... +LLVM_ABI Constant * +ConstantFoldCastInstruction(unsigned opcode, ///< The opcode of the cast +                            Constant *V,     ///< The source constant +                            Type *DestTy     ///< The destination type +); + +/// Attempt to constant fold a select instruction with the specified +/// operands. The constant result is returned if successful; if not, null is +/// returned. +LLVM_ABI Constant *ConstantFoldSelectInstruction(Constant *Cond, Constant *V1, +                                                 Constant *V2); + +/// Attempt to constant fold an extractelement instruction with the +/// specified operands and indices.  The constant result is returned if +/// successful; if not, null is returned. +LLVM_ABI Constant *ConstantFoldExtractElementInstruction(Constant *Val, +                                                         Constant *Idx); + +/// Attempt to constant fold an insertelement instruction with the +/// specified operands and indices.  The constant result is returned if +/// successful; if not, null is returned. +LLVM_ABI Constant *ConstantFoldInsertElementInstruction(Constant *Val, +                                                        Constant *Elt, +                                                        Constant *Idx); + +/// Attempt to constant fold a shufflevector instruction with the +/// specified operands and mask.  See class ShuffleVectorInst for a description +/// of the mask representation. The constant result is returned if successful; +/// if not, null is returned. +LLVM_ABI Constant *ConstantFoldShuffleVectorInstruction(Constant *V1, +                                                        Constant *V2, +                                                        ArrayRef<int> Mask); + +/// Attempt to constant fold an extractvalue instruction with the +/// specified operands and indices.  The constant result is returned if +/// successful; if not, null is returned. +LLVM_ABI Constant *ConstantFoldExtractValueInstruction(Constant *Agg, +                                                       ArrayRef<unsigned> Idxs); + +/// Attempt to constant fold an insertvalue instruction with the specified +/// operands and indices.  The constant result is returned if successful; if +/// not, null is returned. +LLVM_ABI Constant *ConstantFoldInsertValueInstruction(Constant *Agg, +                                                      Constant *Val, +                                                      ArrayRef<unsigned> Idxs); +LLVM_ABI Constant *ConstantFoldUnaryInstruction(unsigned Opcode, Constant *V); +LLVM_ABI Constant *ConstantFoldBinaryInstruction(unsigned Opcode, Constant *V1, +                                                 Constant *V2); +LLVM_ABI Constant *ConstantFoldCompareInstruction(CmpInst::Predicate Predicate, +                                                  Constant *C1, Constant *C2); +LLVM_ABI Constant * +ConstantFoldGetElementPtr(Type *Ty, Constant *C, +                          std::optional<ConstantRange> InRange, +                          ArrayRef<Value *> Idxs); +} // namespace llvm  #endif diff --git a/llvm/include/llvm/IR/DataLayout.h b/llvm/include/llvm/IR/DataLayout.h index 56fc749..5445820 100644 --- a/llvm/include/llvm/IR/DataLayout.h +++ b/llvm/include/llvm/IR/DataLayout.h @@ -590,7 +590,7 @@ public:    ///    /// This is the amount that alloca reserves for this type. For example,    /// returns 12 or 16 for x86_fp80, depending on alignment. -  TypeSize getTypeAllocSize(Type *Ty) const; +  LLVM_ABI TypeSize getTypeAllocSize(Type *Ty) const;    /// Returns the offset in bits between successive objects of the    /// specified type, including alignment padding; always a multiple of 8. diff --git a/llvm/include/llvm/IR/DebugProgramInstruction.h b/llvm/include/llvm/IR/DebugProgramInstruction.h index 457c60e3b..66f44fe 100644 --- a/llvm/include/llvm/IR/DebugProgramInstruction.h +++ b/llvm/include/llvm/IR/DebugProgramInstruction.h @@ -589,7 +589,7 @@ filterDbgVars(iterator_range<simple_ilist<DbgRecord>::iterator> R) {  /// date.  class DbgMarker {  public: -  DbgMarker() {} +  DbgMarker() = default;    /// Link back to the Instruction that owns this marker. Can be null during    /// operations that move a marker from one instruction to another.    Instruction *MarkedInstr = nullptr; diff --git a/llvm/include/llvm/IR/DroppedVariableStats.h b/llvm/include/llvm/IR/DroppedVariableStats.h index 42e86dd..8a1dbd6a 100644 --- a/llvm/include/llvm/IR/DroppedVariableStats.h +++ b/llvm/include/llvm/IR/DroppedVariableStats.h @@ -42,7 +42,7 @@ class DroppedVariableStats {  public:    LLVM_ABI DroppedVariableStats(bool DroppedVarStatsEnabled); -  virtual ~DroppedVariableStats() {} +  virtual ~DroppedVariableStats() = default;    // We intend this to be unique per-compilation, thus no copies.    DroppedVariableStats(const DroppedVariableStats &) = delete; diff --git a/llvm/include/llvm/IR/IntrinsicsHexagonDep.td b/llvm/include/llvm/IR/IntrinsicsHexagonDep.td index fe95377..dde4132 100644 --- a/llvm/include/llvm/IR/IntrinsicsHexagonDep.td +++ b/llvm/include/llvm/IR/IntrinsicsHexagonDep.td @@ -6835,6 +6835,180 @@ Hexagon_v64i32_v32i32v32i32_Intrinsic<"HEXAGON_V6_vsub_hf_f8_128B">;  // V81 HVX Instructions. +def int_hexagon_V6_vabs_qf16_hf : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vabs_qf16_hf">; + +def int_hexagon_V6_vabs_qf16_hf_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vabs_qf16_hf_128B">; + +def int_hexagon_V6_vabs_qf16_qf16 : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vabs_qf16_qf16">; + +def int_hexagon_V6_vabs_qf16_qf16_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vabs_qf16_qf16_128B">; + +def int_hexagon_V6_vabs_qf32_qf32 : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vabs_qf32_qf32">; + +def int_hexagon_V6_vabs_qf32_qf32_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vabs_qf32_qf32_128B">; + +def int_hexagon_V6_vabs_qf32_sf : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vabs_qf32_sf">; + +def int_hexagon_V6_vabs_qf32_sf_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vabs_qf32_sf_128B">; + +def int_hexagon_V6_valign4 : +Hexagon_v16i32_v16i32v16i32i32_Intrinsic<"HEXAGON_V6_valign4">; + +def int_hexagon_V6_valign4_128B : +Hexagon_v32i32_v32i32v32i32i32_Intrinsic<"HEXAGON_V6_valign4_128B">; + +def int_hexagon_V6_vconv_bf_qf32 : +Hexagon_v16i32_v32i32_Intrinsic<"HEXAGON_V6_vconv_bf_qf32">; + +def int_hexagon_V6_vconv_bf_qf32_128B : +Hexagon_v32i32_v64i32_Intrinsic<"HEXAGON_V6_vconv_bf_qf32_128B">; + +def int_hexagon_V6_vconv_f8_qf16 : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vconv_f8_qf16">; + +def int_hexagon_V6_vconv_f8_qf16_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vconv_f8_qf16_128B">; + +def int_hexagon_V6_vconv_h_hf_rnd : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vconv_h_hf_rnd">; + +def int_hexagon_V6_vconv_h_hf_rnd_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vconv_h_hf_rnd_128B">; + +def int_hexagon_V6_vconv_qf16_f8 : +Hexagon_v32i32_v16i32_Intrinsic<"HEXAGON_V6_vconv_qf16_f8">; + +def int_hexagon_V6_vconv_qf16_f8_128B : +Hexagon_v64i32_v32i32_Intrinsic<"HEXAGON_V6_vconv_qf16_f8_128B">; + +def int_hexagon_V6_vconv_qf16_hf : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vconv_qf16_hf">; + +def int_hexagon_V6_vconv_qf16_hf_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vconv_qf16_hf_128B">; + +def int_hexagon_V6_vconv_qf16_qf16 : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vconv_qf16_qf16">; + +def int_hexagon_V6_vconv_qf16_qf16_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vconv_qf16_qf16_128B">; + +def int_hexagon_V6_vconv_qf32_qf32 : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vconv_qf32_qf32">; + +def int_hexagon_V6_vconv_qf32_qf32_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vconv_qf32_qf32_128B">; + +def int_hexagon_V6_vconv_qf32_sf : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vconv_qf32_sf">; + +def int_hexagon_V6_vconv_qf32_sf_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vconv_qf32_sf_128B">; + +def int_hexagon_V6_veqhf : +Hexagon_v64i1_v16i32v16i32_Intrinsic<"HEXAGON_V6_veqhf">; + +def int_hexagon_V6_veqhf_128B : +Hexagon_v128i1_v32i32v32i32_Intrinsic<"HEXAGON_V6_veqhf_128B">; + +def int_hexagon_V6_veqhf_and : +Hexagon_v64i1_v64i1v16i32v16i32_Intrinsic<"HEXAGON_V6_veqhf_and">; + +def int_hexagon_V6_veqhf_and_128B : +Hexagon_v128i1_v128i1v32i32v32i32_Intrinsic<"HEXAGON_V6_veqhf_and_128B">; + +def int_hexagon_V6_veqhf_or : +Hexagon_v64i1_v64i1v16i32v16i32_Intrinsic<"HEXAGON_V6_veqhf_or">; + +def int_hexagon_V6_veqhf_or_128B : +Hexagon_v128i1_v128i1v32i32v32i32_Intrinsic<"HEXAGON_V6_veqhf_or_128B">; + +def int_hexagon_V6_veqhf_xor : +Hexagon_v64i1_v64i1v16i32v16i32_Intrinsic<"HEXAGON_V6_veqhf_xor">; + +def int_hexagon_V6_veqhf_xor_128B : +Hexagon_v128i1_v128i1v32i32v32i32_Intrinsic<"HEXAGON_V6_veqhf_xor_128B">; + +def int_hexagon_V6_veqsf : +Hexagon_v64i1_v16i32v16i32_Intrinsic<"HEXAGON_V6_veqsf">; + +def int_hexagon_V6_veqsf_128B : +Hexagon_v128i1_v32i32v32i32_Intrinsic<"HEXAGON_V6_veqsf_128B">; + +def int_hexagon_V6_veqsf_and : +Hexagon_v64i1_v64i1v16i32v16i32_Intrinsic<"HEXAGON_V6_veqsf_and">; + +def int_hexagon_V6_veqsf_and_128B : +Hexagon_v128i1_v128i1v32i32v32i32_Intrinsic<"HEXAGON_V6_veqsf_and_128B">; + +def int_hexagon_V6_veqsf_or : +Hexagon_v64i1_v64i1v16i32v16i32_Intrinsic<"HEXAGON_V6_veqsf_or">; + +def int_hexagon_V6_veqsf_or_128B : +Hexagon_v128i1_v128i1v32i32v32i32_Intrinsic<"HEXAGON_V6_veqsf_or_128B">; + +def int_hexagon_V6_veqsf_xor : +Hexagon_v64i1_v64i1v16i32v16i32_Intrinsic<"HEXAGON_V6_veqsf_xor">; + +def int_hexagon_V6_veqsf_xor_128B : +Hexagon_v128i1_v128i1v32i32v32i32_Intrinsic<"HEXAGON_V6_veqsf_xor_128B">; + +def int_hexagon_V6_vilog2_hf : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vilog2_hf">; + +def int_hexagon_V6_vilog2_hf_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vilog2_hf_128B">; + +def int_hexagon_V6_vilog2_qf16 : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vilog2_qf16">; + +def int_hexagon_V6_vilog2_qf16_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vilog2_qf16_128B">; + +def int_hexagon_V6_vilog2_qf32 : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vilog2_qf32">; + +def int_hexagon_V6_vilog2_qf32_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vilog2_qf32_128B">; + +def int_hexagon_V6_vilog2_sf : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vilog2_sf">; + +def int_hexagon_V6_vilog2_sf_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vilog2_sf_128B">; + +def int_hexagon_V6_vneg_qf16_hf : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vneg_qf16_hf">; + +def int_hexagon_V6_vneg_qf16_hf_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vneg_qf16_hf_128B">; + +def int_hexagon_V6_vneg_qf16_qf16 : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vneg_qf16_qf16">; + +def int_hexagon_V6_vneg_qf16_qf16_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vneg_qf16_qf16_128B">; + +def int_hexagon_V6_vneg_qf32_qf32 : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vneg_qf32_qf32">; + +def int_hexagon_V6_vneg_qf32_qf32_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vneg_qf32_qf32_128B">; + +def int_hexagon_V6_vneg_qf32_sf : +Hexagon_v16i32_v16i32_Intrinsic<"HEXAGON_V6_vneg_qf32_sf">; + +def int_hexagon_V6_vneg_qf32_sf_128B : +Hexagon_v32i32_v32i32_Intrinsic<"HEXAGON_V6_vneg_qf32_sf_128B">; +  def int_hexagon_V6_vsub_hf_mix :  Hexagon_v16i32_v16i32v16i32_Intrinsic<"HEXAGON_V6_vsub_hf_mix">; diff --git a/llvm/include/llvm/IR/IntrinsicsNVVM.td b/llvm/include/llvm/IR/IntrinsicsNVVM.td index 719181a..2710853 100644 --- a/llvm/include/llvm/IR/IntrinsicsNVVM.td +++ b/llvm/include/llvm/IR/IntrinsicsNVVM.td @@ -1334,15 +1334,8 @@ let TargetPrefix = "nvvm" in {    //    let IntrProperties = [IntrNoMem] in {      foreach ftz = ["", "_ftz"] in -      def int_nvvm_ex2_approx # ftz # _f : NVVMBuiltin, -          DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty]>; - -    def int_nvvm_ex2_approx_d : NVVMBuiltin, -        DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty]>; -    def int_nvvm_ex2_approx_f16 : -        DefaultAttrsIntrinsic<[llvm_half_ty], [llvm_half_ty]>; -    def int_nvvm_ex2_approx_f16x2 : -        DefaultAttrsIntrinsic<[llvm_v2f16_ty], [llvm_v2f16_ty]>; +      def int_nvvm_ex2_approx # ftz : +          DefaultAttrsIntrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>]>;      foreach ftz = ["", "_ftz"] in        def int_nvvm_lg2_approx # ftz # _f : NVVMBuiltin, diff --git a/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h b/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h index 3381e17..ccb77e7 100644 --- a/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h +++ b/llvm/include/llvm/IR/ModuleSummaryIndexYAML.h @@ -79,7 +79,7 @@ struct CustomMappingTraits<        }        Args.push_back(Arg);      } -    io.mapRequired(Key.str().c_str(), V[Args]); +    io.mapRequired(Key, V[Args]);    }    static void output(        IO &io, @@ -91,7 +91,7 @@ struct CustomMappingTraits<            Key += ',';          Key += llvm::utostr(Arg);        } -      io.mapRequired(Key.c_str(), P.second); +      io.mapRequired(Key, P.second);      }    }  }; @@ -122,11 +122,11 @@ struct CustomMappingTraits<std::map<uint64_t, WholeProgramDevirtResolution>> {        io.setError("key not an integer");        return;      } -    io.mapRequired(Key.str().c_str(), V[KeyInt]); +    io.mapRequired(Key, V[KeyInt]);    }    static void output(IO &io, std::map<uint64_t, WholeProgramDevirtResolution> &V) {      for (auto &P : V) -      io.mapRequired(llvm::utostr(P.first).c_str(), P.second); +      io.mapRequired(llvm::utostr(P.first), P.second);    }  }; @@ -215,7 +215,7 @@ namespace yaml {  template <> struct CustomMappingTraits<GlobalValueSummaryMapTy> {    static void inputOne(IO &io, StringRef Key, GlobalValueSummaryMapTy &V) {      std::vector<GlobalValueSummaryYaml> GVSums; -    io.mapRequired(Key.str().c_str(), GVSums); +    io.mapRequired(Key, GVSums);      uint64_t KeyInt;      if (Key.getAsInteger(0, KeyInt)) {        io.setError("key not an integer"); @@ -290,7 +290,7 @@ template <> struct CustomMappingTraits<GlobalValueSummaryMapTy> {          }        }        if (!GVSums.empty()) -        io.mapRequired(llvm::utostr(P.first).c_str(), GVSums); +        io.mapRequired(llvm::utostr(P.first), GVSums);      }    }    static void fixAliaseeLinks(GlobalValueSummaryMapTy &V) { @@ -313,12 +313,12 @@ template <> struct CustomMappingTraits<GlobalValueSummaryMapTy> {  template <> struct CustomMappingTraits<TypeIdSummaryMapTy> {    static void inputOne(IO &io, StringRef Key, TypeIdSummaryMapTy &V) {      TypeIdSummary TId; -    io.mapRequired(Key.str().c_str(), TId); +    io.mapRequired(Key, TId);      V.insert({GlobalValue::getGUIDAssumingExternalLinkage(Key), {Key, TId}});    }    static void output(IO &io, TypeIdSummaryMapTy &V) {      for (auto &TidIter : V) -      io.mapRequired(TidIter.second.first.str().c_str(), TidIter.second.second); +      io.mapRequired(TidIter.second.first, TidIter.second.second);    }  }; diff --git a/llvm/include/llvm/IR/TrackingMDRef.h b/llvm/include/llvm/IR/TrackingMDRef.h index d737739..7ad7225 100644 --- a/llvm/include/llvm/IR/TrackingMDRef.h +++ b/llvm/include/llvm/IR/TrackingMDRef.h @@ -111,17 +111,14 @@ public:    explicit TypedTrackingMDRef(T *MD) : Ref(static_cast<Metadata *>(MD)) {}    TypedTrackingMDRef(TypedTrackingMDRef &&X) : Ref(std::move(X.Ref)) {} -  TypedTrackingMDRef(const TypedTrackingMDRef &X) : Ref(X.Ref) {} +  TypedTrackingMDRef(const TypedTrackingMDRef &X) = default;    TypedTrackingMDRef &operator=(TypedTrackingMDRef &&X) {      Ref = std::move(X.Ref);      return *this;    } -  TypedTrackingMDRef &operator=(const TypedTrackingMDRef &X) { -    Ref = X.Ref; -    return *this; -  } +  TypedTrackingMDRef &operator=(const TypedTrackingMDRef &X) = default;    T *get() const { return (T *)Ref.get(); }    operator T *() const { return get(); } diff --git a/llvm/include/llvm/MC/MCAssembler.h b/llvm/include/llvm/MC/MCAssembler.h index 6e1d642..bbb8bee 100644 --- a/llvm/include/llvm/MC/MCAssembler.h +++ b/llvm/include/llvm/MC/MCAssembler.h @@ -198,8 +198,8 @@ public:    const_iterator end() const { return Sections.end(); }    SmallVectorImpl<const MCSymbol *> &getSymbols() { return Symbols; } -  iterator_range<pointee_iterator< -      typename SmallVector<const MCSymbol *, 0>::const_iterator>> +  iterator_range< +      pointee_iterator<SmallVector<const MCSymbol *, 0>::const_iterator>>    symbols() const {      return make_pointee_range(Symbols);    } diff --git a/llvm/include/llvm/MC/MCRegisterInfo.h b/llvm/include/llvm/MC/MCRegisterInfo.h index e6fc707..f611edd 100644 --- a/llvm/include/llvm/MC/MCRegisterInfo.h +++ b/llvm/include/llvm/MC/MCRegisterInfo.h @@ -272,7 +272,7 @@ public:    friend class MCRegUnitRootIterator;    friend class MCRegAliasIterator; -  virtual ~MCRegisterInfo() {} +  virtual ~MCRegisterInfo() = default;    /// Initialize MCRegisterInfo, called by TableGen    /// auto-generated routines. *DO NOT USE*. diff --git a/llvm/include/llvm/MCA/SourceMgr.h b/llvm/include/llvm/MCA/SourceMgr.h index 16a60d1..300961c 100644 --- a/llvm/include/llvm/MCA/SourceMgr.h +++ b/llvm/include/llvm/MCA/SourceMgr.h @@ -50,7 +50,7 @@ struct SourceMgr {    /// Advance to the next \a SourceRef.    virtual void updateNext() = 0; -  virtual ~SourceMgr() {} +  virtual ~SourceMgr() = default;  };  /// The default implementation of \a SourceMgr. It always takes a fixed number diff --git a/llvm/include/llvm/ObjCopy/ConfigManager.h b/llvm/include/llvm/ObjCopy/ConfigManager.h index 1568799..45f847f 100644 --- a/llvm/include/llvm/ObjCopy/ConfigManager.h +++ b/llvm/include/llvm/ObjCopy/ConfigManager.h @@ -23,7 +23,7 @@ namespace llvm {  namespace objcopy {  struct LLVM_ABI ConfigManager : public MultiFormatConfig { -  ~ConfigManager() override {} +  ~ConfigManager() override = default;    const CommonConfig &getCommonConfig() const override { return Common; } diff --git a/llvm/include/llvm/ObjCopy/MultiFormatConfig.h b/llvm/include/llvm/ObjCopy/MultiFormatConfig.h index bb93f64..91baf9b 100644 --- a/llvm/include/llvm/ObjCopy/MultiFormatConfig.h +++ b/llvm/include/llvm/ObjCopy/MultiFormatConfig.h @@ -24,7 +24,7 @@ struct DXContainerConfig;  class MultiFormatConfig {  public: -  virtual ~MultiFormatConfig() {} +  virtual ~MultiFormatConfig() = default;    virtual const CommonConfig &getCommonConfig() const = 0;    virtual Expected<const ELFConfig &> getELFConfig() const = 0; diff --git a/llvm/include/llvm/Object/ELF.h b/llvm/include/llvm/Object/ELF.h index 03d5ee2..cc1e5f9 100644 --- a/llvm/include/llvm/Object/ELF.h +++ b/llvm/include/llvm/Object/ELF.h @@ -261,6 +261,8 @@ public:    ELFFile(const ELFFile &) = default;    ELFFile &operator=(const ELFFile &) = default; +  ELFFile(ELFFile &&) = default; +    // This is a callback that can be passed to a number of functions.    // It can be used to ignore non-critical errors (warnings), which is    // useful for dumpers, like llvm-readobj. diff --git a/llvm/include/llvm/Object/ELFObjectFile.h b/llvm/include/llvm/Object/ELFObjectFile.h index ced1afd..ca41357 100644 --- a/llvm/include/llvm/Object/ELFObjectFile.h +++ b/llvm/include/llvm/Object/ELFObjectFile.h @@ -1218,12 +1218,12 @@ ELFObjectFile<ELFT>::ELFObjectFile(MemoryBufferRef Object, ELFFile<ELFT> EF,      : ELFObjectFileBase(getELFType(ELFT::Endianness == llvm::endianness::little,                                     ELFT::Is64Bits),                          Object), -      EF(EF), DotDynSymSec(DotDynSymSec), DotSymtabSec(DotSymtabSec), +      EF(std::move(EF)), DotDynSymSec(DotDynSymSec), DotSymtabSec(DotSymtabSec),        DotSymtabShndxSec(DotSymtabShndx) {}  template <class ELFT>  ELFObjectFile<ELFT>::ELFObjectFile(ELFObjectFile<ELFT> &&Other) -    : ELFObjectFile(Other.Data, Other.EF, Other.DotDynSymSec, +    : ELFObjectFile(Other.Data, std::move(Other.EF), Other.DotDynSymSec,                      Other.DotSymtabSec, Other.DotSymtabShndxSec) {}  template <class ELFT> diff --git a/llvm/include/llvm/Object/SFrameParser.h b/llvm/include/llvm/Object/SFrameParser.h index 3ce5d70..23298357 100644 --- a/llvm/include/llvm/Object/SFrameParser.h +++ b/llvm/include/llvm/Object/SFrameParser.h @@ -90,7 +90,7 @@ public:                        uint32_t Idx, uint32_t Size, uint64_t Offset)        : Data(Data), FREType(FREType), Idx(Idx), Size(Size), Offset(Offset) {} -  Error inc(); +  LLVM_ABI Error inc();    const FrameRowEntry &operator*() const { return FRE; }    friend bool operator==(const FallibleFREIterator &LHS, diff --git a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h index b5b110d..fbfe306 100644 --- a/llvm/include/llvm/ObjectYAML/DXContainerYAML.h +++ b/llvm/include/llvm/ObjectYAML/DXContainerYAML.h @@ -115,7 +115,7 @@ struct RootParameterHeaderYaml {    dxbc::ShaderVisibility Visibility;    uint32_t Offset; -  RootParameterHeaderYaml(){}; +  RootParameterHeaderYaml() = default;    RootParameterHeaderYaml(dxbc::RootParameterType T) : Type(T) {}  }; @@ -123,7 +123,7 @@ struct RootParameterLocationYaml {    RootParameterHeaderYaml Header;    std::optional<size_t> IndexInSignature; -  RootParameterLocationYaml(){}; +  RootParameterLocationYaml() = default;    explicit RootParameterLocationYaml(RootParameterHeaderYaml Header)        : Header(Header) {}  }; diff --git a/llvm/include/llvm/ProfileData/DataAccessProf.h b/llvm/include/llvm/ProfileData/DataAccessProf.h index 608306f..ea256ef 100644 --- a/llvm/include/llvm/ProfileData/DataAccessProf.h +++ b/llvm/include/llvm/ProfileData/DataAccessProf.h @@ -42,7 +42,7 @@ struct SourceLocation {        : FileName(FileNameRef.str()), Line(Line) {}    // Empty constructor is used in yaml conversion. -  SourceLocation() {} +  SourceLocation() = default;    /// The filename where the data is located.    std::string FileName;    /// The line number in the source code. diff --git a/llvm/include/llvm/ProfileData/MemProfYAML.h b/llvm/include/llvm/ProfileData/MemProfYAML.h index d66e16d..c55f780 100644 --- a/llvm/include/llvm/ProfileData/MemProfYAML.h +++ b/llvm/include/llvm/ProfileData/MemProfYAML.h @@ -141,7 +141,7 @@ template <> struct CustomMappingTraits<memprof::PortableMemInfoBlock> {  #define MIBEntryDef(NameTag, Name, Type)                                       \    if (KeyStr == #Name) {                                                       \      uint64_t Value;                                                            \ -    Io.mapRequired(KeyStr.str().c_str(), Value);                               \ +    Io.mapRequired(KeyStr, Value);                                             \      MIB.Name = static_cast<Type>(Value);                                       \      MIB.Schema.set(llvm::to_underlying(memprof::Meta::Name));                  \      return;                                                                    \ diff --git a/llvm/include/llvm/SandboxIR/Context.h b/llvm/include/llvm/SandboxIR/Context.h index 7d8b2c8..a8966db 100644 --- a/llvm/include/llvm/SandboxIR/Context.h +++ b/llvm/include/llvm/SandboxIR/Context.h @@ -51,7 +51,7 @@ public:      // Uses a 64-bit integer so we don't have to worry about the unlikely case      // of overflowing a 32-bit counter.      using ValTy = uint64_t; -    static constexpr const ValTy InvalidVal = 0; +    static constexpr ValTy InvalidVal = 0;    private:      // Default initialization results in an invalid ID. diff --git a/llvm/include/llvm/SandboxIR/Instruction.h b/llvm/include/llvm/SandboxIR/Instruction.h index e1c1ca0..5e369a4 100644 --- a/llvm/include/llvm/SandboxIR/Instruction.h +++ b/llvm/include/llvm/SandboxIR/Instruction.h @@ -1866,7 +1866,7 @@ class SwitchInst : public SingleLLVMInstructionImpl<llvm::SwitchInst> {    friend class Context; // For accessing the constructor in create*()  public: -  static constexpr const unsigned DefaultPseudoIndex = +  static constexpr unsigned DefaultPseudoIndex =        llvm::SwitchInst::DefaultPseudoIndex;    LLVM_ABI static SwitchInst *create(Value *V, BasicBlock *Dest, diff --git a/llvm/include/llvm/SandboxIR/Pass.h b/llvm/include/llvm/SandboxIR/Pass.h index 267389a..eb84f21 100644 --- a/llvm/include/llvm/SandboxIR/Pass.h +++ b/llvm/include/llvm/SandboxIR/Pass.h @@ -56,7 +56,7 @@ public:             "A pass name should not contain whitespaces!");      assert(!Name.starts_with('-') && "A pass name should not start with '-'!");    } -  virtual ~Pass() {} +  virtual ~Pass() = default;    /// \Returns the name of the pass.    StringRef getName() const { return Name; }  #ifndef NDEBUG diff --git a/llvm/include/llvm/SandboxIR/PassManager.h b/llvm/include/llvm/SandboxIR/PassManager.h index 93ca710..a8117aa 100644 --- a/llvm/include/llvm/SandboxIR/PassManager.h +++ b/llvm/include/llvm/SandboxIR/PassManager.h @@ -59,10 +59,10 @@ public:      Passes.push_back(std::move(Pass));    } -  static constexpr const char EndToken = '\0'; -  static constexpr const char BeginArgsToken = '<'; -  static constexpr const char EndArgsToken = '>'; -  static constexpr const char PassDelimToken = ','; +  static constexpr char EndToken = '\0'; +  static constexpr char BeginArgsToken = '<'; +  static constexpr char EndArgsToken = '>'; +  static constexpr char PassDelimToken = ',';    /// Parses \p Pipeline as a comma-separated sequence of pass names and sets    /// the pass pipeline, using \p CreatePass to instantiate passes by name. diff --git a/llvm/include/llvm/Support/Allocator.h b/llvm/include/llvm/Support/Allocator.h index bc02659..fffcbd9 100644 --- a/llvm/include/llvm/Support/Allocator.h +++ b/llvm/include/llvm/Support/Allocator.h @@ -380,7 +380,7 @@ private:  /// The standard BumpPtrAllocator which just uses the default template  /// parameters. -typedef BumpPtrAllocatorImpl<> BumpPtrAllocator; +using BumpPtrAllocator = BumpPtrAllocatorImpl<>;  /// A BumpPtrAllocator that allows only elements of a specific type to be  /// allocated. diff --git a/llvm/include/llvm/Support/Atomic.h b/llvm/include/llvm/Support/Atomic.h index c2d9ae2..3c62672 100644 --- a/llvm/include/llvm/Support/Atomic.h +++ b/llvm/include/llvm/Support/Atomic.h @@ -30,9 +30,9 @@ namespace llvm {    LLVM_ABI void MemoryFence();  #ifdef _MSC_VER -  typedef long cas_flag; +  using cas_flag = long;  #else -  typedef uint32_t cas_flag; +  using cas_flag = uint32_t;  #endif    LLVM_ABI cas_flag CompareAndSwap(volatile cas_flag *ptr, cas_flag new_value,                                     cas_flag old_value); diff --git a/llvm/include/llvm/Support/BinaryStreamArray.h b/llvm/include/llvm/Support/BinaryStreamArray.h index ef2233c..a7d03f6 100644 --- a/llvm/include/llvm/Support/BinaryStreamArray.h +++ b/llvm/include/llvm/Support/BinaryStreamArray.h @@ -93,7 +93,7 @@ class VarStreamArray {    friend class VarStreamArrayIterator<ValueType, Extractor>;  public: -  typedef VarStreamArrayIterator<ValueType, Extractor> Iterator; +  using Iterator = VarStreamArrayIterator<ValueType, Extractor>;    VarStreamArray() = default; @@ -156,8 +156,8 @@ template <typename ValueType, typename Extractor>  class VarStreamArrayIterator      : public iterator_facade_base<VarStreamArrayIterator<ValueType, Extractor>,                                    std::forward_iterator_tag, const ValueType> { -  typedef VarStreamArrayIterator<ValueType, Extractor> IterType; -  typedef VarStreamArray<ValueType, Extractor> ArrayType; +  using IterType = VarStreamArrayIterator<ValueType, Extractor>; +  using ArrayType = VarStreamArray<ValueType, Extractor>;  public:    VarStreamArrayIterator(const ArrayType &Array, const Extractor &E, @@ -260,7 +260,7 @@ template <typename T> class FixedStreamArray {    friend class FixedStreamArrayIterator<T>;  public: -  typedef FixedStreamArrayIterator<T> Iterator; +  using Iterator = FixedStreamArrayIterator<T>;    FixedStreamArray() = default;    explicit FixedStreamArray(BinaryStreamRef Stream) : Stream(Stream) { diff --git a/llvm/include/llvm/Support/Chrono.h b/llvm/include/llvm/Support/Chrono.h index 5b8102d..e5f98249 100644 --- a/llvm/include/llvm/Support/Chrono.h +++ b/llvm/include/llvm/Support/Chrono.h @@ -150,10 +150,10 @@ template <> struct unit<std::nano> {  template <typename Rep, typename Period>  struct format_provider<std::chrono::duration<Rep, Period>> {  private: -  typedef std::chrono::duration<Rep, Period> Dur; -  typedef std::conditional_t<std::chrono::treat_as_floating_point<Rep>::value, -                             double, intmax_t> -      InternalRep; +  using Dur = std::chrono::duration<Rep, Period>; +  using InternalRep = +      std::conditional_t<std::chrono::treat_as_floating_point<Rep>::value, +                         double, intmax_t>;    template <typename AsPeriod> static InternalRep getAs(const Dur &D) {      using namespace std::chrono; diff --git a/llvm/include/llvm/Support/CommandLine.h b/llvm/include/llvm/Support/CommandLine.h index 5a5f00e..d737fbc 100644 --- a/llvm/include/llvm/Support/CommandLine.h +++ b/llvm/include/llvm/Support/CommandLine.h @@ -2099,7 +2099,7 @@ getRegisteredOptions(SubCommand &Sub = SubCommand::getTopLevel());  ///  /// This interface is useful for defining subcommands in libraries and  /// the dispatch from a single point (like in the main function). -LLVM_ABI iterator_range<typename SmallPtrSet<SubCommand *, 4>::iterator> +LLVM_ABI iterator_range<SmallPtrSet<SubCommand *, 4>::iterator>  getRegisteredSubcommands();  //===----------------------------------------------------------------------===// diff --git a/llvm/include/llvm/Support/ConvertUTF.h b/llvm/include/llvm/Support/ConvertUTF.h index bb17235..ddf7057 100644 --- a/llvm/include/llvm/Support/ConvertUTF.h +++ b/llvm/include/llvm/Support/ConvertUTF.h @@ -126,10 +126,10 @@ namespace llvm {      bit mask & shift operations.  ------------------------------------------------------------------------ */ -typedef unsigned int    UTF32;  /* at least 32 bits */ -typedef unsigned short  UTF16;  /* at least 16 bits */ -typedef unsigned char   UTF8;   /* typically 8 bits */ -typedef unsigned char   Boolean; /* 0 or 1 */ +using UTF32 = unsigned int;    /* at least 32 bits */ +using UTF16 = unsigned short;  /* at least 16 bits */ +using UTF8 = unsigned char;    /* typically 8 bits */ +using Boolean = unsigned char; /* 0 or 1 */  /* Some fundamental constants */  #define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD @@ -146,17 +146,14 @@ typedef unsigned char   Boolean; /* 0 or 1 */  #define UNI_UTF32_BYTE_ORDER_MARK_NATIVE 0x0000FEFF  #define UNI_UTF32_BYTE_ORDER_MARK_SWAPPED 0xFFFE0000 -typedef enum { -  conversionOK,           /* conversion successful */ -  sourceExhausted,        /* partial character in source, but hit end */ -  targetExhausted,        /* insuff. room in target for conversion */ -  sourceIllegal           /* source sequence is illegal/malformed */ -} ConversionResult; - -typedef enum { -  strictConversion = 0, -  lenientConversion -} ConversionFlags; +enum ConversionResult { +  conversionOK,    /* conversion successful */ +  sourceExhausted, /* partial character in source, but hit end */ +  targetExhausted, /* insuff. room in target for conversion */ +  sourceIllegal    /* source sequence is illegal/malformed */ +}; + +enum ConversionFlags { strictConversion = 0, lenientConversion };  LLVM_ABI ConversionResult ConvertUTF8toUTF16(const UTF8 **sourceStart,                                               const UTF8 *sourceEnd, diff --git a/llvm/include/llvm/Support/DebugCounter.h b/llvm/include/llvm/Support/DebugCounter.h index 39a08d4..9904a0d 100644 --- a/llvm/include/llvm/Support/DebugCounter.h +++ b/llvm/include/llvm/Support/DebugCounter.h @@ -140,7 +140,7 @@ public:    }    // Iterate through the registered counters -  typedef UniqueVector<std::string> CounterVector; +  using CounterVector = UniqueVector<std::string>;    CounterVector::const_iterator begin() const {      return RegisteredCounters.begin();    } diff --git a/llvm/include/llvm/Support/ELFAttributeParser.h b/llvm/include/llvm/Support/ELFAttributeParser.h index 97350ed..c2ad812 100644 --- a/llvm/include/llvm/Support/ELFAttributeParser.h +++ b/llvm/include/llvm/Support/ELFAttributeParser.h @@ -17,7 +17,7 @@ namespace llvm {  class ELFAttributeParser {  public: -  virtual ~ELFAttributeParser() {} +  virtual ~ELFAttributeParser() = default;    virtual Error parse(ArrayRef<uint8_t> Section, llvm::endianness Endian) {      return llvm::Error::success(); diff --git a/llvm/include/llvm/Support/ErrorHandling.h b/llvm/include/llvm/Support/ErrorHandling.h index 4c17b6e8..a4fd008 100644 --- a/llvm/include/llvm/Support/ErrorHandling.h +++ b/llvm/include/llvm/Support/ErrorHandling.h @@ -21,8 +21,8 @@ class StringRef;  class Twine;  /// An error handler callback. -typedef void (*fatal_error_handler_t)(void *user_data, const char *reason, -                                      bool gen_crash_diag); +using fatal_error_handler_t = void (*)(void *user_data, const char *reason, +                                       bool gen_crash_diag);  /// install_fatal_error_handler - Installs a new error handler to be used  /// whenever a serious (non-recoverable) error is encountered by LLVM. diff --git a/llvm/include/llvm/Support/FormatProviders.h b/llvm/include/llvm/Support/FormatProviders.h index 8eaa5e38..3377781 100644 --- a/llvm/include/llvm/Support/FormatProviders.h +++ b/llvm/include/llvm/Support/FormatProviders.h @@ -261,7 +261,7 @@ template <> struct format_provider<bool> {                    .Case("y", B ? "yes" : "no")                    .CaseLower("D", B ? "1" : "0")                    .Case("T", B ? "TRUE" : "FALSE") -                  .Cases("t", "", B ? "true" : "false") +                  .Cases({"t", ""}, B ? "true" : "false")                    .Default(B ? "1" : "0");    }  }; diff --git a/llvm/include/llvm/Support/FormatVariadicDetails.h b/llvm/include/llvm/Support/FormatVariadicDetails.h index 0fdc7b6..c0b245e 100644 --- a/llvm/include/llvm/Support/FormatVariadicDetails.h +++ b/llvm/include/llvm/Support/FormatVariadicDetails.h @@ -63,8 +63,8 @@ template <typename T> class missing_format_adapter;  template <class T> class has_FormatProvider {  public:    using Decayed = std::decay_t<T>; -  typedef void (*Signature_format)(const Decayed &, llvm::raw_ostream &, -                                   StringRef); +  using Signature_format = void (*)(const Decayed &, llvm::raw_ostream &, +                                    StringRef);    template <typename U> using check = SameType<Signature_format, &U::format>; diff --git a/llvm/include/llvm/Support/GenericLoopInfo.h b/llvm/include/llvm/Support/GenericLoopInfo.h index b6bb360..9e2f61f 100644 --- a/llvm/include/llvm/Support/GenericLoopInfo.h +++ b/llvm/include/llvm/Support/GenericLoopInfo.h @@ -150,9 +150,9 @@ public:      assert(!isInvalid() && "Loop not in a valid state!");      return SubLoops;    } -  typedef typename std::vector<LoopT *>::const_iterator iterator; -  typedef -      typename std::vector<LoopT *>::const_reverse_iterator reverse_iterator; +  using iterator = typename std::vector<LoopT *>::const_iterator; +  using reverse_iterator = +      typename std::vector<LoopT *>::const_reverse_iterator;    iterator begin() const { return getSubLoops().begin(); }    iterator end() const { return getSubLoops().end(); }    reverse_iterator rbegin() const { return getSubLoops().rbegin(); } @@ -174,7 +174,7 @@ public:      assert(!isInvalid() && "Loop not in a valid state!");      return Blocks;    } -  typedef typename ArrayRef<BlockT *>::const_iterator block_iterator; +  using block_iterator = typename ArrayRef<BlockT *>::const_iterator;    block_iterator block_begin() const { return getBlocks().begin(); }    block_iterator block_end() const { return getBlocks().end(); }    inline iterator_range<block_iterator> blocks() const { @@ -302,7 +302,7 @@ public:    bool hasNoExitBlocks() const;    /// Edge type. -  typedef std::pair<BlockT *, BlockT *> Edge; +  using Edge = std::pair<BlockT *, BlockT *>;    /// Return all pairs of (_inside_block_,_outside_block_).    void getExitEdges(SmallVectorImpl<Edge> &ExitEdges) const; @@ -575,9 +575,9 @@ public:    /// iterator/begin/end - The interface to the top-level loops in the current    /// function.    /// -  typedef typename std::vector<LoopT *>::const_iterator iterator; -  typedef -      typename std::vector<LoopT *>::const_reverse_iterator reverse_iterator; +  using iterator = typename std::vector<LoopT *>::const_iterator; +  using reverse_iterator = +      typename std::vector<LoopT *>::const_reverse_iterator;    iterator begin() const { return TopLevelLoops.begin(); }    iterator end() const { return TopLevelLoops.end(); }    reverse_iterator rbegin() const { return TopLevelLoops.rbegin(); } diff --git a/llvm/include/llvm/Support/GenericLoopInfoImpl.h b/llvm/include/llvm/Support/GenericLoopInfoImpl.h index 5416780..c830f0a 100644 --- a/llvm/include/llvm/Support/GenericLoopInfoImpl.h +++ b/llvm/include/llvm/Support/GenericLoopInfoImpl.h @@ -459,7 +459,7 @@ template <class BlockT, class LoopT>  static void discoverAndMapSubloop(LoopT *L, ArrayRef<BlockT *> Backedges,                                    LoopInfoBase<BlockT, LoopT> *LI,                                    const DomTreeBase<BlockT> &DomTree) { -  typedef GraphTraits<Inverse<BlockT *>> InvBlockTraits; +  using InvBlockTraits = GraphTraits<Inverse<BlockT *>>;    unsigned NumBlocks = 0;    unsigned NumSubloops = 0; @@ -513,8 +513,8 @@ static void discoverAndMapSubloop(LoopT *L, ArrayRef<BlockT *> Backedges,  /// Populate all loop data in a stable order during a single forward DFS.  template <class BlockT, class LoopT> class PopulateLoopsDFS { -  typedef GraphTraits<BlockT *> BlockTraits; -  typedef typename BlockTraits::ChildIteratorType SuccIterTy; +  using BlockTraits = GraphTraits<BlockT *>; +  using SuccIterTy = typename BlockTraits::ChildIteratorType;    LoopInfoBase<BlockT, LoopT> *LI; diff --git a/llvm/include/llvm/Support/GraphWriter.h b/llvm/include/llvm/Support/GraphWriter.h index 3bef75c..43d9b0c 100644 --- a/llvm/include/llvm/Support/GraphWriter.h +++ b/llvm/include/llvm/Support/GraphWriter.h @@ -128,7 +128,7 @@ public:      DTraits = DOTTraits(SN);      RenderUsingHTML = DTraits.renderNodesUsingHTML();    } -  virtual ~GraphWriterBase() {} +  virtual ~GraphWriterBase() = default;    void writeGraph(const std::string &Title = "") {      // Output the header for the graph... @@ -369,7 +369,7 @@ class GraphWriter : public GraphWriterBase<GraphType, GraphWriter<GraphType>> {  public:    GraphWriter(raw_ostream &o, const GraphType &g, bool SN)        : GraphWriterBase<GraphType, GraphWriter<GraphType>>(o, g, SN) {} -  ~GraphWriter() override {} +  ~GraphWriter() override = default;  };  template <typename GraphType> diff --git a/llvm/include/llvm/Support/JSON.h b/llvm/include/llvm/Support/JSON.h index d8c6de4..37baa7b 100644 --- a/llvm/include/llvm/Support/JSON.h +++ b/llvm/include/llvm/Support/JSON.h @@ -154,7 +154,7 @@ public:    LLVM_ABI const json::Array *getArray(StringRef K) const;    LLVM_ABI json::Array *getArray(StringRef K); -  friend bool operator==(const Object &LHS, const Object &RHS); +  friend LLVM_ABI bool operator==(const Object &LHS, const Object &RHS);  };  LLVM_ABI bool operator==(const Object &LHS, const Object &RHS);  inline bool operator!=(const Object &LHS, const Object &RHS) { @@ -318,7 +318,7 @@ public:    Value(std::string V) : Type(T_String) {      if (LLVM_UNLIKELY(!isUTF8(V))) {        assert(false && "Invalid UTF-8 in value used as JSON"); -      V = fixUTF8(std::move(V)); +      V = fixUTF8(V);      }      create<std::string>(std::move(V));    } @@ -549,10 +549,10 @@ inline const Value &Array::back() const { return V.back(); }  inline Value *Array::data() { return V.data(); }  inline const Value *Array::data() const { return V.data(); } -inline typename Array::iterator Array::begin() { return V.begin(); } -inline typename Array::const_iterator Array::begin() const { return V.begin(); } -inline typename Array::iterator Array::end() { return V.end(); } -inline typename Array::const_iterator Array::end() const { return V.end(); } +inline Array::iterator Array::begin() { return V.begin(); } +inline Array::const_iterator Array::begin() const { return V.begin(); } +inline Array::iterator Array::end() { return V.end(); } +inline Array::const_iterator Array::end() const { return V.end(); }  inline bool Array::empty() const { return V.empty(); }  inline size_t Array::size() const { return V.size(); } @@ -565,18 +565,18 @@ template <typename... Args> inline void Array::emplace_back(Args &&...A) {    V.emplace_back(std::forward<Args>(A)...);  }  inline void Array::pop_back() { V.pop_back(); } -inline typename Array::iterator Array::insert(const_iterator P, const Value &E) { +inline Array::iterator Array::insert(const_iterator P, const Value &E) {    return V.insert(P, E);  } -inline typename Array::iterator Array::insert(const_iterator P, Value &&E) { +inline Array::iterator Array::insert(const_iterator P, Value &&E) {    return V.insert(P, std::move(E));  }  template <typename It> -inline typename Array::iterator Array::insert(const_iterator P, It A, It Z) { +inline Array::iterator Array::insert(const_iterator P, It A, It Z) {    return V.insert(P, A, Z);  }  template <typename... Args> -inline typename Array::iterator Array::emplace(const_iterator P, Args &&...A) { +inline Array::iterator Array::emplace(const_iterator P, Args &&...A) {    return V.emplace(P, std::forward<Args>(A)...);  }  inline bool operator==(const Array &L, const Array &R) { return L.V == R.V; } @@ -591,7 +591,7 @@ public:    ObjectKey(std::string S) : Owned(new std::string(std::move(S))) {      if (LLVM_UNLIKELY(!isUTF8(*Owned))) {        assert(false && "Invalid UTF-8 in value used as JSON"); -      *Owned = fixUTF8(std::move(*Owned)); +      *Owned = fixUTF8(*Owned);      }      Data = *Owned;    } diff --git a/llvm/include/llvm/Support/MD5.h b/llvm/include/llvm/Support/MD5.h index 4ba3867..dbcb66d 100644 --- a/llvm/include/llvm/Support/MD5.h +++ b/llvm/include/llvm/Support/MD5.h @@ -90,7 +90,7 @@ public:  private:    // Any 32-bit or wider unsigned integer data type will do. -  typedef uint32_t MD5_u32plus; +  using MD5_u32plus = uint32_t;    // Internal State    struct { diff --git a/llvm/include/llvm/Support/Mutex.h b/llvm/include/llvm/Support/Mutex.h index d61e3fd..3ca5c9a 100644 --- a/llvm/include/llvm/Support/Mutex.h +++ b/llvm/include/llvm/Support/Mutex.h @@ -63,12 +63,12 @@ namespace llvm      };      /// Mutex - A standard, always enforced mutex. -    typedef SmartMutex<false> Mutex; +    using Mutex = SmartMutex<false>;      template <bool mt_only>      using SmartScopedLock = std::lock_guard<SmartMutex<mt_only>>; -    typedef SmartScopedLock<false> ScopedLock; +    using ScopedLock = SmartScopedLock<false>;    }  } diff --git a/llvm/include/llvm/Support/OnDiskHashTable.h b/llvm/include/llvm/Support/OnDiskHashTable.h index d7d72cf..54c6b71 100644 --- a/llvm/include/llvm/Support/OnDiskHashTable.h +++ b/llvm/include/llvm/Support/OnDiskHashTable.h @@ -69,7 +69,7 @@ template <typename Info> class OnDiskChainedHashTableGenerator {          : Key(Key), Data(Data), Next(nullptr), Hash(InfoObj.ComputeHash(Key)) {}    }; -  typedef typename Info::offset_type offset_type; +  using offset_type = typename Info::offset_type;    offset_type NumBuckets;    offset_type NumEntries;    llvm::SpecificBumpPtrAllocator<Item> BA; @@ -278,12 +278,12 @@ template <typename Info> class OnDiskChainedHashTable {    Info InfoObj;  public: -  typedef Info InfoType; -  typedef typename Info::internal_key_type internal_key_type; -  typedef typename Info::external_key_type external_key_type; -  typedef typename Info::data_type data_type; -  typedef typename Info::hash_value_type hash_value_type; -  typedef typename Info::offset_type offset_type; +  using InfoType = Info; +  using internal_key_type = typename Info::internal_key_type; +  using external_key_type = typename Info::external_key_type; +  using data_type = typename Info::data_type; +  using hash_value_type = typename Info::hash_value_type; +  using offset_type = typename Info::offset_type;    OnDiskChainedHashTable(offset_type NumBuckets, offset_type NumEntries,                           const unsigned char *Buckets, @@ -435,12 +435,12 @@ class OnDiskIterableChainedHashTable : public OnDiskChainedHashTable<Info> {    const unsigned char *Payload;  public: -  typedef OnDiskChainedHashTable<Info>          base_type; -  typedef typename base_type::internal_key_type internal_key_type; -  typedef typename base_type::external_key_type external_key_type; -  typedef typename base_type::data_type         data_type; -  typedef typename base_type::hash_value_type   hash_value_type; -  typedef typename base_type::offset_type       offset_type; +  using base_type = OnDiskChainedHashTable<Info>; +  using internal_key_type = typename base_type::internal_key_type; +  using external_key_type = typename base_type::external_key_type; +  using data_type = typename base_type::data_type; +  using hash_value_type = typename base_type::hash_value_type; +  using offset_type = typename base_type::offset_type;  private:    /// Iterates over all of the keys in the table. @@ -450,7 +450,7 @@ private:      offset_type NumEntriesLeft;    public: -    typedef external_key_type value_type; +    using value_type = external_key_type;      iterator_base(const unsigned char *const Ptr, offset_type NumEntries)          : Ptr(Ptr), NumItemsInBucketLeft(0), NumEntriesLeft(NumEntries) {} @@ -505,7 +505,7 @@ public:      Info *InfoObj;    public: -    typedef external_key_type value_type; +    using value_type = external_key_type;      key_iterator(const unsigned char *const Ptr, offset_type NumEntries,                   Info *InfoObj) @@ -551,7 +551,7 @@ public:      Info *InfoObj;    public: -    typedef data_type value_type; +    using value_type = data_type;      data_iterator(const unsigned char *const Ptr, offset_type NumEntries,                    Info *InfoObj) diff --git a/llvm/include/llvm/Support/PointerLikeTypeTraits.h b/llvm/include/llvm/Support/PointerLikeTypeTraits.h index 320f6b6..a47d684 100644 --- a/llvm/include/llvm/Support/PointerLikeTypeTraits.h +++ b/llvm/include/llvm/Support/PointerLikeTypeTraits.h @@ -70,7 +70,7 @@ template <> struct PointerLikeTypeTraits<void *> {  // Provide PointerLikeTypeTraits for const things.  template <typename T> struct PointerLikeTypeTraits<const T> { -  typedef PointerLikeTypeTraits<T> NonConst; +  using NonConst = PointerLikeTypeTraits<T>;    static inline const void *getAsVoidPointer(const T P) {      return NonConst::getAsVoidPointer(P); @@ -83,7 +83,7 @@ template <typename T> struct PointerLikeTypeTraits<const T> {  // Provide PointerLikeTypeTraits for const pointers.  template <typename T> struct PointerLikeTypeTraits<const T *> { -  typedef PointerLikeTypeTraits<T *> NonConst; +  using NonConst = PointerLikeTypeTraits<T *>;    static inline const void *getAsVoidPointer(const T *P) {      return NonConst::getAsVoidPointer(const_cast<T *>(P)); diff --git a/llvm/include/llvm/Support/Program.h b/llvm/include/llvm/Support/Program.h index 53c2e75..575e416 100644 --- a/llvm/include/llvm/Support/Program.h +++ b/llvm/include/llvm/Support/Program.h @@ -39,8 +39,8 @@ const char EnvPathSeparator = ';';  typedef unsigned long procid_t; // Must match the type of DWORD on Windows.  typedef void *process_t;        // Must match the type of HANDLE on Windows.  #else -typedef ::pid_t procid_t; -typedef procid_t process_t; +using procid_t = ::pid_t; +using process_t = procid_t;  #endif  /// This struct encapsulates information about a process. diff --git a/llvm/include/llvm/Support/RISCVISAUtils.h b/llvm/include/llvm/Support/RISCVISAUtils.h index 165bb08..05fd32e 100644 --- a/llvm/include/llvm/Support/RISCVISAUtils.h +++ b/llvm/include/llvm/Support/RISCVISAUtils.h @@ -40,8 +40,8 @@ struct ExtensionComparator {  /// OrderedExtensionMap is std::map, it's specialized to keep entries  /// in canonical order of extension. -typedef std::map<std::string, ExtensionVersion, ExtensionComparator> -    OrderedExtensionMap; +using OrderedExtensionMap = +    std::map<std::string, ExtensionVersion, ExtensionComparator>;  } // namespace RISCVISAUtils diff --git a/llvm/include/llvm/Support/RWMutex.h b/llvm/include/llvm/Support/RWMutex.h index 8d221aa..efc1ca1 100644 --- a/llvm/include/llvm/Support/RWMutex.h +++ b/llvm/include/llvm/Support/RWMutex.h @@ -162,7 +162,7 @@ public:    bool try_lock() { return impl.try_lock(); }  }; -typedef SmartRWMutex<false> RWMutex; +using RWMutex = SmartRWMutex<false>;  /// ScopedReader - RAII acquisition of a reader lock  #if !defined(LLVM_USE_RW_MUTEX_IMPL) @@ -179,7 +179,7 @@ template <bool mt_only> struct SmartScopedReader {    ~SmartScopedReader() { mutex.unlock_shared(); }  };  #endif -typedef SmartScopedReader<false> ScopedReader; +using ScopedReader = SmartScopedReader<false>;  /// ScopedWriter - RAII acquisition of a writer lock  #if !defined(LLVM_USE_RW_MUTEX_IMPL) @@ -196,7 +196,7 @@ template <bool mt_only> struct SmartScopedWriter {    ~SmartScopedWriter() { mutex.unlock(); }  };  #endif -typedef SmartScopedWriter<false> ScopedWriter; +using ScopedWriter = SmartScopedWriter<false>;  } // end namespace sys  } // end namespace llvm diff --git a/llvm/include/llvm/Support/Registry.h b/llvm/include/llvm/Support/Registry.h index c02f15e..acd3b06 100644 --- a/llvm/include/llvm/Support/Registry.h +++ b/llvm/include/llvm/Support/Registry.h @@ -43,8 +43,8 @@ namespace llvm {    template <typename T>    class Registry {    public: -    typedef T type; -    typedef SimpleRegistryEntry<T> entry; +    using type = T; +    using entry = SimpleRegistryEntry<T>;      class node;      class iterator; diff --git a/llvm/include/llvm/Support/ScaledNumber.h b/llvm/include/llvm/Support/ScaledNumber.h index 07baf15..8ca8d457e 100644 --- a/llvm/include/llvm/Support/ScaledNumber.h +++ b/llvm/include/llvm/Support/ScaledNumber.h @@ -498,10 +498,10 @@ public:    static_assert(!std::numeric_limits<DigitsT>::is_signed,                  "only unsigned floats supported"); -  typedef DigitsT DigitsType; +  using DigitsType = DigitsT;  private: -  typedef std::numeric_limits<DigitsType> DigitsLimits; +  using DigitsLimits = std::numeric_limits<DigitsType>;    static constexpr int Width = sizeof(DigitsType) * 8;    static_assert(Width <= 64, "invalid integer width for digits"); @@ -782,7 +782,7 @@ uint64_t ScaledNumber<DigitsT>::scale(uint64_t N) const {  template <class DigitsT>  template <class IntT>  IntT ScaledNumber<DigitsT>::toInt() const { -  typedef std::numeric_limits<IntT> Limits; +  using Limits = std::numeric_limits<IntT>;    if (*this < 1)      return 0;    if (*this >= Limits::max()) diff --git a/llvm/include/llvm/Support/SourceMgr.h b/llvm/include/llvm/Support/SourceMgr.h index 8320006..43f7e27 100644 --- a/llvm/include/llvm/Support/SourceMgr.h +++ b/llvm/include/llvm/Support/SourceMgr.h @@ -103,7 +103,7 @@ private:  public:    /// Create new source manager without support for include files. -  SourceMgr(); +  LLVM_ABI SourceMgr();    /// Create new source manager with the capability of finding include files    /// via the provided file system.    explicit SourceMgr(IntrusiveRefCntPtr<vfs::FileSystem> FS); @@ -111,10 +111,10 @@ public:    SourceMgr &operator=(const SourceMgr &) = delete;    SourceMgr(SourceMgr &&);    SourceMgr &operator=(SourceMgr &&); -  ~SourceMgr(); +  LLVM_ABI ~SourceMgr();    IntrusiveRefCntPtr<vfs::FileSystem> getVirtualFileSystem() const; -  void setVirtualFileSystem(IntrusiveRefCntPtr<vfs::FileSystem> FS); +  LLVM_ABI void setVirtualFileSystem(IntrusiveRefCntPtr<vfs::FileSystem> FS);    /// Return the include directories of this source manager.    ArrayRef<std::string> getIncludeDirs() const { return IncludeDirectories; } diff --git a/llvm/include/llvm/Support/SuffixTree.h b/llvm/include/llvm/Support/SuffixTree.h index 4c78235..eac66d8 100644 --- a/llvm/include/llvm/Support/SuffixTree.h +++ b/llvm/include/llvm/Support/SuffixTree.h @@ -219,7 +219,7 @@ public:      }    }; -  typedef RepeatedSubstringIterator iterator; +  using iterator = RepeatedSubstringIterator;    iterator begin() { return iterator(Root, LeafNodes); }    iterator end() { return iterator(nullptr); }  }; diff --git a/llvm/include/llvm/Support/Threading.h b/llvm/include/llvm/Support/Threading.h index 8884680..89d90b3 100644 --- a/llvm/include/llvm/Support/Threading.h +++ b/llvm/include/llvm/Support/Threading.h @@ -53,7 +53,7 @@ constexpr bool llvm_is_multithreaded() { return LLVM_ENABLE_THREADS; }  #if LLVM_THREADING_USE_STD_CALL_ONCE -  typedef std::once_flag once_flag; +using once_flag = std::once_flag;  #else diff --git a/llvm/include/llvm/Support/TrailingObjects.h b/llvm/include/llvm/Support/TrailingObjects.h index c479765..218c2e3 100644 --- a/llvm/include/llvm/Support/TrailingObjects.h +++ b/llvm/include/llvm/Support/TrailingObjects.h @@ -76,7 +76,7 @@ protected:  // number of a different type. e.g.:  //   ExtractSecondType<Foo..., int>::type  template <typename Ty1, typename Ty2> struct ExtractSecondType { -  typedef Ty2 type; +  using type = Ty2;  };  // TrailingObjectsImpl is somewhat complicated, because it is a @@ -101,8 +101,8 @@ class TrailingObjectsImpl<Align, BaseTy, TopTrailingObj, PrevTy, NextTy,      : public TrailingObjectsImpl<Align, BaseTy, TopTrailingObj, NextTy,                                   MoreTys...> { -  typedef TrailingObjectsImpl<Align, BaseTy, TopTrailingObj, NextTy, MoreTys...> -      ParentType; +  using ParentType = +      TrailingObjectsImpl<Align, BaseTy, TopTrailingObj, NextTy, MoreTys...>;    struct RequiresRealignment {      static const bool value = alignof(PrevTy) < alignof(NextTy); diff --git a/llvm/include/llvm/Support/UnicodeCharRanges.h b/llvm/include/llvm/Support/UnicodeCharRanges.h index 7f1a9b3..2b5fc83 100644 --- a/llvm/include/llvm/Support/UnicodeCharRanges.h +++ b/llvm/include/llvm/Support/UnicodeCharRanges.h @@ -37,7 +37,7 @@ inline bool operator<(UnicodeCharRange Range, uint32_t Value) {  /// array.  class UnicodeCharSet {  public: -  typedef ArrayRef<UnicodeCharRange> CharRanges; +  using CharRanges = ArrayRef<UnicodeCharRange>;    /// Constructs a UnicodeCharSet instance from an array of    /// UnicodeCharRanges. diff --git a/llvm/include/llvm/Support/VirtualFileSystem.h b/llvm/include/llvm/Support/VirtualFileSystem.h index c8911a0..dbd5a5c 100644 --- a/llvm/include/llvm/Support/VirtualFileSystem.h +++ b/llvm/include/llvm/Support/VirtualFileSystem.h @@ -1116,8 +1116,9 @@ protected:  /// Collect all pairs of <virtual path, real path> entries from the  /// \p VFS. This is used by the module dependency collector to forward  /// the entries into the reproducer output VFS YAML file. -void collectVFSEntries(RedirectingFileSystem &VFS, -                       SmallVectorImpl<YAMLVFSEntry> &CollectedEntries); +LLVM_ABI void +collectVFSEntries(RedirectingFileSystem &VFS, +                  SmallVectorImpl<YAMLVFSEntry> &CollectedEntries);  class YAMLVFSWriter {    std::vector<YAMLVFSEntry> Mappings; diff --git a/llvm/include/llvm/Support/VirtualOutputBackend.h b/llvm/include/llvm/Support/VirtualOutputBackend.h index 85caa021..78ed4b9b 100644 --- a/llvm/include/llvm/Support/VirtualOutputBackend.h +++ b/llvm/include/llvm/Support/VirtualOutputBackend.h @@ -32,7 +32,7 @@ namespace llvm::vfs {  /// If virtual functions are added here, also add them to \a  /// ProxyOutputBackend.  class OutputBackend : public RefCountedBase<OutputBackend> { -  virtual void anchor(); +  LLVM_ABI virtual void anchor();  public:    /// Get a backend that points to the same destination as this one but that @@ -47,7 +47,7 @@ public:    /// have been customized).    ///    /// Thread-safe. -  Expected<OutputFile> +  LLVM_ABI Expected<OutputFile>    createFile(const Twine &Path,               std::optional<OutputConfig> Config = std::nullopt); diff --git a/llvm/include/llvm/Support/VirtualOutputBackends.h b/llvm/include/llvm/Support/VirtualOutputBackends.h index 219bc30..13a9611 100644 --- a/llvm/include/llvm/Support/VirtualOutputBackends.h +++ b/llvm/include/llvm/Support/VirtualOutputBackends.h @@ -77,14 +77,14 @@ private:  /// An output backend that creates files on disk, wrapping APIs in sys::fs.  class OnDiskOutputBackend : public OutputBackend { -  void anchor() override; +  LLVM_ABI void anchor() override;  protected:    IntrusiveRefCntPtr<OutputBackend> cloneImpl() const override {      return clone();    } -  Expected<std::unique_ptr<OutputFileImpl>> +  LLVM_ABI Expected<std::unique_ptr<OutputFileImpl>>    createFileImpl(StringRef Path, std::optional<OutputConfig> Config) override;  public: diff --git a/llvm/include/llvm/Support/VirtualOutputError.h b/llvm/include/llvm/Support/VirtualOutputError.h index 2293ff9..44590a1 100644 --- a/llvm/include/llvm/Support/VirtualOutputError.h +++ b/llvm/include/llvm/Support/VirtualOutputError.h @@ -43,7 +43,7 @@ public:    void log(raw_ostream &OS) const override;    // Used by ErrorInfo::classID. -  static char ID; +  LLVM_ABI static char ID;    OutputError(const Twine &OutputPath, std::error_code EC)        : ErrorInfo<OutputError, ECError>(EC), OutputPath(OutputPath.str()) { @@ -99,7 +99,7 @@ public:    void log(raw_ostream &OS) const override;    // Used by ErrorInfo::classID. -  static char ID; +  LLVM_ABI static char ID;    TempFileOutputError(const Twine &TempPath, const Twine &OutputPath,                        std::error_code EC) diff --git a/llvm/include/llvm/Support/VirtualOutputFile.h b/llvm/include/llvm/Support/VirtualOutputFile.h index dd50437..d53701c 100644 --- a/llvm/include/llvm/Support/VirtualOutputFile.h +++ b/llvm/include/llvm/Support/VirtualOutputFile.h @@ -80,13 +80,13 @@ public:    ///    /// If there's an open proxy from \a createProxy(), calls \a discard() to    /// clean up temporaries followed by \a report_fatal_error(). -  Error keep(); +  LLVM_ABI Error keep();    /// Discard an output, cleaning up any temporary state. Errors if clean-up    /// fails.    ///    /// If it has already been closed, calls \a report_fatal_error(). -  Error discard(); +  LLVM_ABI Error discard();    /// Discard the output when destroying it if it's still open, sending the    /// result to \a Handler. @@ -98,7 +98,7 @@ public:    /// producer. Errors if there's already a proxy. The proxy must be deleted    /// before calling \a keep(). The proxy will crash if it's written to after    /// calling \a discard(). -  Expected<std::unique_ptr<raw_pwrite_stream>> createProxy(); +  LLVM_ABI Expected<std::unique_ptr<raw_pwrite_stream>> createProxy();    bool hasOpenProxy() const { return OpenProxy; } @@ -132,7 +132,7 @@ public:  private:    /// Destroy \a Impl. Reports fatal error if the file is open and there's no    /// handler from \a discardOnDestroy(). -  void destroy(); +  LLVM_ABI void destroy();    OutputFile &moveFrom(OutputFile &O) {      Path = std::move(O.Path);      Impl = std::move(O.Impl); diff --git a/llvm/include/llvm/Support/YAMLTraits.h b/llvm/include/llvm/Support/YAMLTraits.h index 3d36f41..b53b28d 100644 --- a/llvm/include/llvm/Support/YAMLTraits.h +++ b/llvm/include/llvm/Support/YAMLTraits.h @@ -1921,12 +1921,12 @@ template <typename T> struct StdMapStringCustomMappingTraitsImpl {    using map_type = std::map<std::string, T>;    static void inputOne(IO &io, StringRef key, map_type &v) { -    io.mapRequired(key.str().c_str(), v[std::string(key)]); +    io.mapRequired(key, v[std::string(key)]);    }    static void output(IO &io, map_type &v) {      for (auto &p : v) -      io.mapRequired(p.first.c_str(), p.second); +      io.mapRequired(p.first, p.second);    }  }; diff --git a/llvm/include/llvm/Support/float128.h b/llvm/include/llvm/Support/float128.h index e15a98d..ffad124 100644 --- a/llvm/include/llvm/Support/float128.h +++ b/llvm/include/llvm/Support/float128.h @@ -14,7 +14,7 @@ namespace llvm {  #if defined(__clang__) && defined(__FLOAT128__) &&                             \      defined(__SIZEOF_INT128__) && !defined(__LONG_DOUBLE_IBM128__)  #define HAS_IEE754_FLOAT128 -typedef __float128 float128; +using float128 = __float128;  #elif defined(__FLOAT128__) && defined(__SIZEOF_INT128__) &&                   \      !defined(__LONG_DOUBLE_IBM128__) &&                                        \      (defined(__GNUC__) || defined(__GNUG__)) diff --git a/llvm/include/llvm/Support/thread.h b/llvm/include/llvm/Support/thread.h index 16e322b..ecde62d 100644 --- a/llvm/include/llvm/Support/thread.h +++ b/llvm/include/llvm/Support/thread.h @@ -127,7 +127,7 @@ LLVM_ABI thread::id llvm_thread_get_current_id_impl();  template <class Function, class... Args>  thread::thread(std::optional<unsigned> StackSizeInBytes, Function &&f,                 Args &&...args) { -  typedef std::tuple<std::decay_t<Function>, std::decay_t<Args>...> CalleeTuple; +  using CalleeTuple = std::tuple<std::decay_t<Function>, std::decay_t<Args>...>;    std::unique_ptr<CalleeTuple> Callee(        new CalleeTuple(std::forward<Function>(f), std::forward<Args>(args)...)); diff --git a/llvm/include/llvm/Transforms/Coroutines/CoroAnnotationElide.h b/llvm/include/llvm/Transforms/Coroutines/CoroAnnotationElide.h index 352c9e14..2061098 100644 --- a/llvm/include/llvm/Transforms/Coroutines/CoroAnnotationElide.h +++ b/llvm/include/llvm/Transforms/Coroutines/CoroAnnotationElide.h @@ -24,7 +24,7 @@  namespace llvm {  struct CoroAnnotationElidePass : PassInfoMixin<CoroAnnotationElidePass> { -  CoroAnnotationElidePass() {} +  CoroAnnotationElidePass() = default;    PreservedAnalyses run(LazyCallGraph::SCC &C, CGSCCAnalysisManager &AM,                          LazyCallGraph &CG, CGSCCUpdateResult &UR); diff --git a/llvm/include/llvm/Transforms/IPO/Attributor.h b/llvm/include/llvm/Transforms/IPO/Attributor.h index a013f27..8c0342ae 100644 --- a/llvm/include/llvm/Transforms/IPO/Attributor.h +++ b/llvm/include/llvm/Transforms/IPO/Attributor.h @@ -5339,6 +5339,17 @@ struct AAPotentialConstantValues      return nullptr;    } +  /// Return the minimum trailing zeros of potential constants +  unsigned getAssumedMinTrailingZeros() const { +    unsigned TrailingZeros = getAssumedSet().begin()->getBitWidth() + 1; +    for (const APInt &It : getAssumedSet()) { +      if (It.countTrailingZeros() < TrailingZeros) +        TrailingZeros = It.countTrailingZeros(); +    } +    if (TrailingZeros > getAssumedSet().begin()->getBitWidth()) +      return 0; +    return TrailingZeros; +  }    /// See AbstractAttribute::getName()    StringRef getName() const override { return "AAPotentialConstantValues"; } diff --git a/llvm/include/llvm/Transforms/IPO/FatLTOCleanup.h b/llvm/include/llvm/Transforms/IPO/FatLTOCleanup.h index 17eab85..6fc1b262 100644 --- a/llvm/include/llvm/Transforms/IPO/FatLTOCleanup.h +++ b/llvm/include/llvm/Transforms/IPO/FatLTOCleanup.h @@ -26,7 +26,7 @@ class ModuleSummaryIndex;  class FatLtoCleanup : public PassInfoMixin<FatLtoCleanup> {  public: -  FatLtoCleanup() {} +  FatLtoCleanup() = default;    PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);    static bool isRequired() { return true; }  }; diff --git a/llvm/include/llvm/Transforms/IPO/InferFunctionAttrs.h b/llvm/include/llvm/Transforms/IPO/InferFunctionAttrs.h index 8addf49..272b960 100644 --- a/llvm/include/llvm/Transforms/IPO/InferFunctionAttrs.h +++ b/llvm/include/llvm/Transforms/IPO/InferFunctionAttrs.h @@ -23,7 +23,7 @@ class Module;  /// A pass which infers function attributes from the names and signatures of  /// function declarations in a module.  struct InferFunctionAttrsPass : PassInfoMixin<InferFunctionAttrsPass> { -  PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); +  LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);  };  } diff --git a/llvm/include/llvm/Transforms/Instrumentation/SanitizerCoverage.h b/llvm/include/llvm/Transforms/Instrumentation/SanitizerCoverage.h index a8a09fb..346e7f0 100644 --- a/llvm/include/llvm/Transforms/Instrumentation/SanitizerCoverage.h +++ b/llvm/include/llvm/Transforms/Instrumentation/SanitizerCoverage.h @@ -33,7 +33,7 @@ class FileSystem;  /// appends globals to llvm.compiler.used.  class SanitizerCoveragePass : public PassInfoMixin<SanitizerCoveragePass> {  public: -  explicit SanitizerCoveragePass( +  LLVM_ABI explicit SanitizerCoveragePass(        SanitizerCoverageOptions Options = SanitizerCoverageOptions(),        IntrusiveRefCntPtr<vfs::FileSystem> VFS = nullptr,        const std::vector<std::string> &AllowlistFiles = {}, diff --git a/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/Legality.h b/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/Legality.h index 96a2348..3d76cda 100644 --- a/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/Legality.h +++ b/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/Legality.h @@ -167,7 +167,7 @@ protected:    LegalityResult &operator=(const LegalityResult &) = delete;  public: -  virtual ~LegalityResult() {} +  virtual ~LegalityResult() = default;    LegalityResultID getSubclassID() const { return ID; }  #ifndef NDEBUG    virtual void print(raw_ostream &OS) const { diff --git a/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/SeedCollector.h b/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/SeedCollector.h index b289520..821382b 100644 --- a/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/SeedCollector.h +++ b/llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/SeedCollector.h @@ -36,7 +36,7 @@ public:    /// No need to allow copies.    SeedBundle(const SeedBundle &) = delete;    SeedBundle &operator=(const SeedBundle &) = delete; -  virtual ~SeedBundle() {} +  virtual ~SeedBundle() = default;    using iterator = SmallVector<Instruction *>::iterator;    using const_iterator = SmallVector<Instruction *>::const_iterator;  | 
