diff options
author | Eugene Zelenko <eugene.zelenko@gmail.com> | 2016-12-07 22:06:02 +0000 |
---|---|---|
committer | Eugene Zelenko <eugene.zelenko@gmail.com> | 2016-12-07 22:06:02 +0000 |
commit | 9408c6183054d824780fa4eaf5e67b9f640b78fd (patch) | |
tree | 73f3d1ae5a4345409df61dd6cf2eef4f16ec209d /llvm/lib/IR | |
parent | 3c265b55fc18547be667cbbb84667e00bcf376e7 (diff) | |
download | bcm5719-llvm-9408c6183054d824780fa4eaf5e67b9f640b78fd.tar.gz bcm5719-llvm-9408c6183054d824780fa4eaf5e67b9f640b78fd.zip |
[ADT, IR] Fix some Clang-tidy modernize-use-equals-delete and Include What You Use warnings; other minor fixes (NFC).
llvm-svn: 288989
Diffstat (limited to 'llvm/lib/IR')
-rw-r--r-- | llvm/lib/IR/AttributeImpl.h | 42 | ||||
-rw-r--r-- | llvm/lib/IR/AttributeSetNode.h | 22 | ||||
-rw-r--r-- | llvm/lib/IR/ConstantsContext.h | 162 |
3 files changed, 151 insertions, 75 deletions
diff --git a/llvm/lib/IR/AttributeImpl.h b/llvm/lib/IR/AttributeImpl.h index 1341937c9bc..d0d27101aa8 100644 --- a/llvm/lib/IR/AttributeImpl.h +++ b/llvm/lib/IR/AttributeImpl.h @@ -16,17 +16,22 @@ #ifndef LLVM_LIB_IR_ATTRIBUTEIMPL_H #define LLVM_LIB_IR_ATTRIBUTEIMPL_H +#include "AttributeSetNode.h" +#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/FoldingSet.h" -#include "llvm/ADT/Optional.h" +#include "llvm/ADT/StringRef.h" #include "llvm/IR/Attributes.h" -#include "AttributeSetNode.h" -#include "llvm/Support/DataTypes.h" +#include "llvm/Support/TrailingObjects.h" +#include <algorithm> +#include <cassert> #include <climits> +#include <cstddef> +#include <cstdint> #include <string> +#include <utility> namespace llvm { -class Constant; class LLVMContext; //===----------------------------------------------------------------------===// @@ -36,10 +41,6 @@ class LLVMContext; class AttributeImpl : public FoldingSetNode { unsigned char KindID; ///< Holds the AttrEntryKind of the attribute - // AttributesImpl is uniqued, these should not be publicly available. - void operator=(const AttributeImpl &) = delete; - AttributeImpl(const AttributeImpl &) = delete; - protected: enum AttrEntryKind { EnumAttrEntry, @@ -50,6 +51,10 @@ protected: AttributeImpl(AttrEntryKind KindID) : KindID(KindID) {} public: + // AttributesImpl is uniqued, these should not be available. + AttributeImpl(const AttributeImpl &) = delete; + AttributeImpl &operator=(const AttributeImpl &) = delete; + virtual ~AttributeImpl(); bool isEnumAttribute() const { return KindID == EnumAttrEntry; } @@ -165,12 +170,9 @@ private: return getTrailingObjects<IndexAttrPair>() + Slot; } - // AttributesSet is uniqued, these should not be publicly available. - void operator=(const AttributeSetImpl &) = delete; - AttributeSetImpl(const AttributeSetImpl &) = delete; public: AttributeSetImpl(LLVMContext &C, - ArrayRef<std::pair<unsigned, AttributeSetNode *> > Slots) + ArrayRef<std::pair<unsigned, AttributeSetNode *>> Slots) : Context(C), NumSlots(Slots.size()), AvailableFunctionAttrs(0) { static_assert(Attribute::EndAttrKinds <= sizeof(AvailableFunctionAttrs) * CHAR_BIT, @@ -203,6 +205,10 @@ public: } } + // AttributesSetImpt is uniqued, these should not be available. + AttributeSetImpl(const AttributeSetImpl &) = delete; + AttributeSetImpl &operator=(const AttributeSetImpl &) = delete; + void operator delete(void *p) { ::operator delete(p); } /// \brief Get the context that created this AttributeSetImpl. @@ -248,16 +254,16 @@ public: Profile(ID, makeArrayRef(getNode(0), getNumSlots())); } static void Profile(FoldingSetNodeID &ID, - ArrayRef<std::pair<unsigned, AttributeSetNode*> > Nodes) { - for (unsigned i = 0, e = Nodes.size(); i != e; ++i) { - ID.AddInteger(Nodes[i].first); - ID.AddPointer(Nodes[i].second); + ArrayRef<std::pair<unsigned, AttributeSetNode*>> Nodes) { + for (const auto &Node : Nodes) { + ID.AddInteger(Node.first); + ID.AddPointer(Node.second); } } void dump() const; }; -} // end llvm namespace +} // end namespace llvm -#endif +#endif // LLVM_LIB_IR_ATTRIBUTEIMPL_H diff --git a/llvm/lib/IR/AttributeSetNode.h b/llvm/lib/IR/AttributeSetNode.h index fab1ed51e4d..23ce3713c20 100644 --- a/llvm/lib/IR/AttributeSetNode.h +++ b/llvm/lib/IR/AttributeSetNode.h @@ -15,10 +15,17 @@ #ifndef LLVM_IR_ATTRIBUTESETNODE_H #define LLVM_IR_ATTRIBUTESETNODE_H +#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/FoldingSet.h" +#include "llvm/ADT/Optional.h" +#include "llvm/ADT/StringRef.h" #include "llvm/IR/Attributes.h" #include "llvm/Support/TrailingObjects.h" +#include <algorithm> #include <climits> +#include <cstdint> +#include <string> +#include <utility> namespace llvm { @@ -49,10 +56,11 @@ class AttributeSetNode final } } - // AttributesSetNode is uniqued, these should not be publicly available. - void operator=(const AttributeSetNode &) = delete; - AttributeSetNode(const AttributeSetNode &) = delete; public: + // AttributesSetNode is uniqued, these should not be available. + AttributeSetNode(const AttributeSetNode &) = delete; + AttributeSetNode &operator=(const AttributeSetNode &) = delete; + void operator delete(void *p) { ::operator delete(p); } static AttributeSetNode *get(LLVMContext &C, ArrayRef<Attribute> Attrs); @@ -88,11 +96,11 @@ public: Profile(ID, makeArrayRef(begin(), end())); } static void Profile(FoldingSetNodeID &ID, ArrayRef<Attribute> AttrList) { - for (unsigned I = 0, E = AttrList.size(); I != E; ++I) - AttrList[I].Profile(ID); + for (const auto &Attr : AttrList) + Attr.Profile(ID); } }; -} // end llvm namespace +} // end namespace llvm -#endif +#endif // LLVM_IR_ATTRIBUTESETNODE_H diff --git a/llvm/lib/IR/ConstantsContext.h b/llvm/lib/IR/ConstantsContext.h index 7db87edff01..eda751d8af4 100644 --- a/llvm/lib/IR/ConstantsContext.h +++ b/llvm/lib/IR/ConstantsContext.h @@ -1,4 +1,4 @@ -//===-- ConstantsContext.h - Constants-related Context Interals -----------===// +//===-- ConstantsContext.h - Constants-related Context Interals -*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -15,14 +15,26 @@ #ifndef LLVM_LIB_IR_CONSTANTSCONTEXT_H #define LLVM_LIB_IR_CONSTANTSCONTEXT_H +#include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/DenseMapInfo.h" #include "llvm/ADT/DenseSet.h" #include "llvm/ADT/Hashing.h" +#include "llvm/ADT/None.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/IR/Constants.h" +#include "llvm/IR/DerivedTypes.h" #include "llvm/IR/InlineAsm.h" -#include "llvm/IR/Instructions.h" -#include "llvm/IR/Operator.h" +#include "llvm/IR/Instruction.h" +#include "llvm/IR/OperandTraits.h" +#include "llvm/Support/Casting.h" #include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" +#include <cassert> +#include <cstddef> +#include <cstdint> +#include <utility> #define DEBUG_TYPE "ir" @@ -32,16 +44,20 @@ namespace llvm { /// behind the scenes to implement unary constant exprs. class UnaryConstantExpr : public ConstantExpr { void anchor() override; - void *operator new(size_t, unsigned) = delete; + public: - // allocate space for exactly one operand - void *operator new(size_t s) { - return User::operator new(s, 1); - } UnaryConstantExpr(unsigned Opcode, Constant *C, Type *Ty) : ConstantExpr(Ty, Opcode, &Op<0>(), 1) { Op<0>() = C; } + + // allocate space for exactly one operand + void *operator new(size_t s) { + return User::operator new(s, 1); + } + + void *operator new(size_t, unsigned) = delete; + DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); }; @@ -49,12 +65,8 @@ public: /// behind the scenes to implement binary constant exprs. class BinaryConstantExpr : public ConstantExpr { void anchor() override; - void *operator new(size_t, unsigned) = delete; + public: - // allocate space for exactly two operands - void *operator new(size_t s) { - return User::operator new(s, 2); - } BinaryConstantExpr(unsigned Opcode, Constant *C1, Constant *C2, unsigned Flags) : ConstantExpr(C1->getType(), Opcode, &Op<0>(), 2) { @@ -62,6 +74,14 @@ public: Op<1>() = C2; SubclassOptionalData = Flags; } + + // allocate space for exactly two operands + void *operator new(size_t s) { + return User::operator new(s, 2); + } + + void *operator new(size_t, unsigned) = delete; + /// Transparently provide more efficient getOperand methods. DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); }; @@ -70,18 +90,22 @@ public: /// behind the scenes to implement select constant exprs. class SelectConstantExpr : public ConstantExpr { void anchor() override; - void *operator new(size_t, unsigned) = delete; + public: - // allocate space for exactly three operands - void *operator new(size_t s) { - return User::operator new(s, 3); - } SelectConstantExpr(Constant *C1, Constant *C2, Constant *C3) : ConstantExpr(C2->getType(), Instruction::Select, &Op<0>(), 3) { Op<0>() = C1; Op<1>() = C2; Op<2>() = C3; } + + // allocate space for exactly three operands + void *operator new(size_t s) { + return User::operator new(s, 3); + } + + void *operator new(size_t, unsigned) = delete; + /// Transparently provide more efficient getOperand methods. DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); }; @@ -91,18 +115,22 @@ public: /// extractelement constant exprs. class ExtractElementConstantExpr : public ConstantExpr { void anchor() override; - void *operator new(size_t, unsigned) = delete; + public: - // allocate space for exactly two operands - void *operator new(size_t s) { - return User::operator new(s, 2); - } ExtractElementConstantExpr(Constant *C1, Constant *C2) : ConstantExpr(cast<VectorType>(C1->getType())->getElementType(), Instruction::ExtractElement, &Op<0>(), 2) { Op<0>() = C1; Op<1>() = C2; } + + // allocate space for exactly two operands + void *operator new(size_t s) { + return User::operator new(s, 2); + } + + void *operator new(size_t, unsigned) = delete; + /// Transparently provide more efficient getOperand methods. DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); }; @@ -112,12 +140,8 @@ public: /// insertelement constant exprs. class InsertElementConstantExpr : public ConstantExpr { void anchor() override; - void *operator new(size_t, unsigned) = delete; + public: - // allocate space for exactly three operands - void *operator new(size_t s) { - return User::operator new(s, 3); - } InsertElementConstantExpr(Constant *C1, Constant *C2, Constant *C3) : ConstantExpr(C1->getType(), Instruction::InsertElement, &Op<0>(), 3) { @@ -125,6 +149,14 @@ public: Op<1>() = C2; Op<2>() = C3; } + + // allocate space for exactly three operands + void *operator new(size_t s) { + return User::operator new(s, 3); + } + + void *operator new(size_t, unsigned) = delete; + /// Transparently provide more efficient getOperand methods. DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); }; @@ -134,12 +166,8 @@ public: /// shufflevector constant exprs. class ShuffleVectorConstantExpr : public ConstantExpr { void anchor() override; - void *operator new(size_t, unsigned) = delete; + public: - // allocate space for exactly three operands - void *operator new(size_t s) { - return User::operator new(s, 3); - } ShuffleVectorConstantExpr(Constant *C1, Constant *C2, Constant *C3) : ConstantExpr(VectorType::get( cast<VectorType>(C1->getType())->getElementType(), @@ -150,6 +178,14 @@ public: Op<1>() = C2; Op<2>() = C3; } + + // allocate space for exactly three operands + void *operator new(size_t s) { + return User::operator new(s, 3); + } + + void *operator new(size_t, unsigned) = delete; + /// Transparently provide more efficient getOperand methods. DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); }; @@ -159,12 +195,8 @@ public: /// extractvalue constant exprs. class ExtractValueConstantExpr : public ConstantExpr { void anchor() override; - void *operator new(size_t, unsigned) = delete; + public: - // allocate space for exactly one operand - void *operator new(size_t s) { - return User::operator new(s, 1); - } ExtractValueConstantExpr(Constant *Agg, ArrayRef<unsigned> IdxList, Type *DestTy) : ConstantExpr(DestTy, Instruction::ExtractValue, &Op<0>(), 1), @@ -172,6 +204,13 @@ public: Op<0>() = Agg; } + // allocate space for exactly one operand + void *operator new(size_t s) { + return User::operator new(s, 1); + } + + void *operator new(size_t, unsigned) = delete; + /// Indices - These identify which value to extract. const SmallVector<unsigned, 4> Indices; @@ -191,12 +230,8 @@ public: /// insertvalue constant exprs. class InsertValueConstantExpr : public ConstantExpr { void anchor() override; - void *operator new(size_t, unsigned) = delete; + public: - // allocate space for exactly one operand - void *operator new(size_t s) { - return User::operator new(s, 2); - } InsertValueConstantExpr(Constant *Agg, Constant *Val, ArrayRef<unsigned> IdxList, Type *DestTy) : ConstantExpr(DestTy, Instruction::InsertValue, &Op<0>(), 2), @@ -205,6 +240,13 @@ public: Op<1>() = Val; } + // allocate space for exactly one operand + void *operator new(size_t s) { + return User::operator new(s, 2); + } + + void *operator new(size_t, unsigned) = delete; + /// Indices - These identify the position for the insertion. const SmallVector<unsigned, 4> Indices; @@ -224,10 +266,12 @@ public: class GetElementPtrConstantExpr : public ConstantExpr { Type *SrcElementTy; Type *ResElementTy; - void anchor() override; + GetElementPtrConstantExpr(Type *SrcElementTy, Constant *C, ArrayRef<Constant *> IdxList, Type *DestTy); + void anchor() override; + public: static GetElementPtrConstantExpr *Create(Type *SrcElementTy, Constant *C, ArrayRef<Constant *> IdxList, @@ -237,8 +281,10 @@ public: Result->SubclassOptionalData = Flags; return Result; } + Type *getSourceElementType() const; Type *getResultElementType() const; + /// Transparently provide more efficient getOperand methods. DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); @@ -255,12 +301,8 @@ public: // needed in order to store the predicate value for these instructions. class CompareConstantExpr : public ConstantExpr { void anchor() override; - void *operator new(size_t, unsigned) = delete; + public: - // allocate space for exactly two operands - void *operator new(size_t s) { - return User::operator new(s, 2); - } unsigned short predicate; CompareConstantExpr(Type *ty, Instruction::OtherOps opc, unsigned short pred, Constant* LHS, Constant* RHS) @@ -268,6 +310,14 @@ public: Op<0>() = LHS; Op<1>() = RHS; } + + // allocate space for exactly two operands + void *operator new(size_t s) { + return User::operator new(s, 2); + } + + void *operator new(size_t, unsigned) = delete; + /// Transparently provide more efficient getOperand methods. DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); @@ -373,6 +423,7 @@ template <class ConstantClass> struct ConstantAggrKeyType { bool operator==(const ConstantAggrKeyType &X) const { return Operands == X.Operands; } + bool operator==(const ConstantClass *C) const { if (Operands.size() != C->getNumOperands()) return false; @@ -381,6 +432,7 @@ template <class ConstantClass> struct ConstantAggrKeyType { return false; return true; } + unsigned getHash() const { return hash_combine_range(Operands.begin(), Operands.end()); } @@ -416,6 +468,7 @@ struct InlineAsmKeyType { AsmString == X.AsmString && Constraints == X.Constraints && FTy == X.FTy; } + bool operator==(const InlineAsm *Asm) const { return HasSideEffects == Asm->hasSideEffects() && IsAlignStack == Asm->isAlignStack() && @@ -424,6 +477,7 @@ struct InlineAsmKeyType { Constraints == Asm->getConstraintString() && FTy == Asm->getFunctionType(); } + unsigned getHash() const { return hash_combine(AsmString, Constraints, HasSideEffects, IsAlignStack, AsmDialect, FTy); @@ -553,22 +607,28 @@ private: static inline ConstantClass *getEmptyKey() { return ConstantClassInfo::getEmptyKey(); } + static inline ConstantClass *getTombstoneKey() { return ConstantClassInfo::getTombstoneKey(); } + static unsigned getHashValue(const ConstantClass *CP) { SmallVector<Constant *, 32> Storage; return getHashValue(LookupKey(CP->getType(), ValType(CP, Storage))); } + static bool isEqual(const ConstantClass *LHS, const ConstantClass *RHS) { return LHS == RHS; } + static unsigned getHashValue(const LookupKey &Val) { return hash_combine(Val.first, Val.second.getHash()); } + static unsigned getHashValue(const LookupKeyHashed &Val) { return Val.first; } + static bool isEqual(const LookupKey &LHS, const ConstantClass *RHS) { if (RHS == getEmptyKey() || RHS == getTombstoneKey()) return false; @@ -576,6 +636,7 @@ private: return false; return LHS.second == RHS; } + static bool isEqual(const LookupKeyHashed &LHS, const ConstantClass *RHS) { return isEqual(LHS.second, RHS); } @@ -595,6 +656,7 @@ public: for (auto &I : Map) delete I; // Asserts that use_empty(). } + private: ConstantClass *create(TypeClass *Ty, ValType V, LookupKeyHashed &HashKey) { ConstantClass *Result = V.create(Ty); @@ -665,4 +727,4 @@ public: } // end namespace llvm -#endif +#endif // LLVM_LIB_IR_CONSTANTSCONTEXT_H |