mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 17:32:19 +00:00
Extend ConstantUniqueMap with a new template parameter ValRefType,
representing a constant reference to ValType. Normally this is just "const ValType &", but when ValType is a std::vector we want to use ArrayRef as the reference type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133611 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4383c282af
commit
2a4a6fecf0
@ -124,6 +124,13 @@ namespace llvm {
|
||||
return std::vector<T>(Data, Data+Length);
|
||||
}
|
||||
|
||||
/// @}
|
||||
/// @name Conversion operators
|
||||
/// @{
|
||||
operator std::vector<T>() const {
|
||||
return std::vector<T>(Data, Data+Length);
|
||||
}
|
||||
|
||||
/// @}
|
||||
};
|
||||
|
||||
|
@ -25,15 +25,16 @@ class PointerType;
|
||||
class FunctionType;
|
||||
class Module;
|
||||
struct InlineAsmKeyType;
|
||||
template<class ValType, class TypeClass, class ConstantClass, bool HasLargeKey>
|
||||
template<class ValType, class ValRefType, class TypeClass, class ConstantClass,
|
||||
bool HasLargeKey>
|
||||
class ConstantUniqueMap;
|
||||
template<class ConstantClass, class TypeClass, class ValType>
|
||||
struct ConstantCreator;
|
||||
|
||||
class InlineAsm : public Value {
|
||||
friend struct ConstantCreator<InlineAsm, PointerType, InlineAsmKeyType>;
|
||||
friend class ConstantUniqueMap<InlineAsmKeyType, PointerType, InlineAsm,
|
||||
false>;
|
||||
friend class ConstantUniqueMap<InlineAsmKeyType, const InlineAsmKeyType&,
|
||||
PointerType, InlineAsm, false>;
|
||||
|
||||
InlineAsm(const InlineAsm &); // do not implement
|
||||
void operator=(const InlineAsm&); // do not implement
|
||||
|
@ -568,7 +568,7 @@ struct ConstantKeyData<InlineAsm> {
|
||||
}
|
||||
};
|
||||
|
||||
template<class ValType, class TypeClass, class ConstantClass,
|
||||
template<class ValType, class ValRefType, class TypeClass, class ConstantClass,
|
||||
bool HasLargeKey = false /*true for arrays and structs*/ >
|
||||
class ConstantUniqueMap : public AbstractTypeUser {
|
||||
public:
|
||||
@ -656,7 +656,7 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
ConstantClass* Create(const TypeClass *Ty, const ValType &V,
|
||||
ConstantClass* Create(const TypeClass *Ty, ValRefType V,
|
||||
typename MapTy::iterator I) {
|
||||
ConstantClass* Result =
|
||||
ConstantCreator<ConstantClass,TypeClass,ValType>::create(Ty, V);
|
||||
@ -675,7 +675,7 @@ public:
|
||||
|
||||
/// getOrCreate - Return the specified constant from the map, creating it if
|
||||
/// necessary.
|
||||
ConstantClass *getOrCreate(const TypeClass *Ty, const ValType &V) {
|
||||
ConstantClass *getOrCreate(const TypeClass *Ty, ValRefType V) {
|
||||
MapKey Lookup(Ty, V);
|
||||
ConstantClass* Result = 0;
|
||||
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "llvm/Support/ValueHandle.h"
|
||||
#include "llvm/ADT/APFloat.h"
|
||||
#include "llvm/ADT/APInt.h"
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/FoldingSet.h"
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
@ -138,27 +139,30 @@ public:
|
||||
// on Context destruction.
|
||||
SmallPtrSet<MDNode*, 1> NonUniquedMDNodes;
|
||||
|
||||
ConstantUniqueMap<char, Type, ConstantAggregateZero> AggZeroConstants;
|
||||
ConstantUniqueMap<char, char, Type, ConstantAggregateZero> AggZeroConstants;
|
||||
|
||||
typedef ConstantUniqueMap<std::vector<Constant*>, ArrayType,
|
||||
ConstantArray, true /*largekey*/> ArrayConstantsTy;
|
||||
typedef ConstantUniqueMap<std::vector<Constant*>, ArrayRef<Constant*>,
|
||||
ArrayType, ConstantArray, true /*largekey*/> ArrayConstantsTy;
|
||||
ArrayConstantsTy ArrayConstants;
|
||||
|
||||
typedef ConstantUniqueMap<std::vector<Constant*>, StructType,
|
||||
ConstantStruct, true /*largekey*/> StructConstantsTy;
|
||||
typedef ConstantUniqueMap<std::vector<Constant*>, ArrayRef<Constant*>,
|
||||
StructType, ConstantStruct, true /*largekey*/> StructConstantsTy;
|
||||
StructConstantsTy StructConstants;
|
||||
|
||||
typedef ConstantUniqueMap<std::vector<Constant*>, VectorType,
|
||||
ConstantVector> VectorConstantsTy;
|
||||
typedef ConstantUniqueMap<std::vector<Constant*>, ArrayRef<Constant*>,
|
||||
VectorType, ConstantVector> VectorConstantsTy;
|
||||
VectorConstantsTy VectorConstants;
|
||||
|
||||
ConstantUniqueMap<char, PointerType, ConstantPointerNull> NullPtrConstants;
|
||||
ConstantUniqueMap<char, Type, UndefValue> UndefValueConstants;
|
||||
ConstantUniqueMap<char, char, PointerType, ConstantPointerNull>
|
||||
NullPtrConstants;
|
||||
ConstantUniqueMap<char, char, Type, UndefValue> UndefValueConstants;
|
||||
|
||||
DenseMap<std::pair<Function*, BasicBlock*> , BlockAddress*> BlockAddresses;
|
||||
ConstantUniqueMap<ExprMapKeyType, Type, ConstantExpr> ExprConstants;
|
||||
ConstantUniqueMap<ExprMapKeyType, const ExprMapKeyType&, Type, ConstantExpr>
|
||||
ExprConstants;
|
||||
|
||||
ConstantUniqueMap<InlineAsmKeyType, PointerType, InlineAsm> InlineAsms;
|
||||
ConstantUniqueMap<InlineAsmKeyType, const InlineAsmKeyType&, PointerType,
|
||||
InlineAsm> InlineAsms;
|
||||
|
||||
ConstantInt *TheTrueVal;
|
||||
ConstantInt *TheFalseVal;
|
||||
|
Loading…
x
Reference in New Issue
Block a user