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 | 553d8c82033120b1f01b27782ea6136975c609c7 (patch) | |
tree | ea110dc96677de3371004d69bc8e33469f091936 /lib/IR/ConstantsContext.h | |
parent | 4e51983ffa1ab7813de7e20e871f828217f8af58 (diff) |
[ADT, IR] Fix some Clang-tidy modernize-use-equals-delete and Include What You Use warnings; other minor fixes (NFC).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288989 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/IR/ConstantsContext.h')
-rw-r--r-- | lib/IR/ConstantsContext.h | 162 |
1 files changed, 112 insertions, 50 deletions
diff --git a/lib/IR/ConstantsContext.h b/lib/IR/ConstantsContext.h index 7db87edff01..eda751d8af4 100644 --- a/lib/IR/ConstantsContext.h +++ b/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 |