mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-07-21 02:29:22 +00:00
Rearrange argument order of ::get methods so that LLVMContext comes first,
add a ConstantDataArray::getString method that corresponds to the (to be removed) StringRef version of ConstantArray::get, but is dramatically more efficient. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148804 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
28d7e71a30
commit
3210060243
@ -358,6 +358,8 @@ public:
|
|||||||
/// of the array by one (you've been warned). However, in some situations
|
/// of the array by one (you've been warned). However, in some situations
|
||||||
/// this is not desired so if AddNull==false then the string is copied without
|
/// this is not desired so if AddNull==false then the string is copied without
|
||||||
/// null termination.
|
/// null termination.
|
||||||
|
|
||||||
|
// FIXME Remove this.
|
||||||
static Constant *get(LLVMContext &Context, StringRef Initializer,
|
static Constant *get(LLVMContext &Context, StringRef Initializer,
|
||||||
bool AddNull = true);
|
bool AddNull = true);
|
||||||
|
|
||||||
@ -697,13 +699,21 @@ public:
|
|||||||
/// get() constructors - Return a constant with array type with an element
|
/// get() constructors - Return a constant with array type with an element
|
||||||
/// count and element type matching the ArrayRef passed in. Note that this
|
/// count and element type matching the ArrayRef passed in. Note that this
|
||||||
/// can return a ConstantAggregateZero object.
|
/// can return a ConstantAggregateZero object.
|
||||||
static Constant *get(ArrayRef<uint8_t> Elts, LLVMContext &Context);
|
static Constant *get(LLVMContext &Context, ArrayRef<uint8_t> Elts);
|
||||||
static Constant *get(ArrayRef<uint16_t> Elts, LLVMContext &Context);
|
static Constant *get(LLVMContext &Context, ArrayRef<uint16_t> Elts);
|
||||||
static Constant *get(ArrayRef<uint32_t> Elts, LLVMContext &Context);
|
static Constant *get(LLVMContext &Context, ArrayRef<uint32_t> Elts);
|
||||||
static Constant *get(ArrayRef<uint64_t> Elts, LLVMContext &Context);
|
static Constant *get(LLVMContext &Context, ArrayRef<uint64_t> Elts);
|
||||||
static Constant *get(ArrayRef<float> Elts, LLVMContext &Context);
|
static Constant *get(LLVMContext &Context, ArrayRef<float> Elts);
|
||||||
static Constant *get(ArrayRef<double> Elts, LLVMContext &Context);
|
static Constant *get(LLVMContext &Context, ArrayRef<double> Elts);
|
||||||
|
|
||||||
|
/// getString - This method constructs a CDS and initializes it with a text
|
||||||
|
/// string. The default behavior (AddNull==true) causes a null terminator to
|
||||||
|
/// be placed at the end of the array (increasing the length of the string by
|
||||||
|
/// one more than the StringRef would normally indicate. Pass AddNull=false
|
||||||
|
/// to disable this behavior.
|
||||||
|
static Constant *getString(LLVMContext &Context, StringRef Initializer,
|
||||||
|
bool AddNull = true);
|
||||||
|
|
||||||
/// getType - Specialize the getType() method to always return an ArrayType,
|
/// getType - Specialize the getType() method to always return an ArrayType,
|
||||||
/// which reduces the amount of casting needed in parts of the compiler.
|
/// which reduces the amount of casting needed in parts of the compiler.
|
||||||
///
|
///
|
||||||
@ -740,12 +750,12 @@ public:
|
|||||||
/// get() constructors - Return a constant with vector type with an element
|
/// get() constructors - Return a constant with vector type with an element
|
||||||
/// count and element type matching the ArrayRef passed in. Note that this
|
/// count and element type matching the ArrayRef passed in. Note that this
|
||||||
/// can return a ConstantAggregateZero object.
|
/// can return a ConstantAggregateZero object.
|
||||||
static Constant *get(ArrayRef<uint8_t> Elts, LLVMContext &Context);
|
static Constant *get(LLVMContext &Context, ArrayRef<uint8_t> Elts);
|
||||||
static Constant *get(ArrayRef<uint16_t> Elts, LLVMContext &Context);
|
static Constant *get(LLVMContext &Context, ArrayRef<uint16_t> Elts);
|
||||||
static Constant *get(ArrayRef<uint32_t> Elts, LLVMContext &Context);
|
static Constant *get(LLVMContext &Context, ArrayRef<uint32_t> Elts);
|
||||||
static Constant *get(ArrayRef<uint64_t> Elts, LLVMContext &Context);
|
static Constant *get(LLVMContext &Context, ArrayRef<uint64_t> Elts);
|
||||||
static Constant *get(ArrayRef<float> Elts, LLVMContext &Context);
|
static Constant *get(LLVMContext &Context, ArrayRef<float> Elts);
|
||||||
static Constant *get(ArrayRef<double> Elts, LLVMContext &Context);
|
static Constant *get(LLVMContext &Context, ArrayRef<double> Elts);
|
||||||
|
|
||||||
/// getType - Specialize the getType() method to always return a VectorType,
|
/// getType - Specialize the getType() method to always return a VectorType,
|
||||||
/// which reduces the amount of casting needed in parts of the compiler.
|
/// which reduces the amount of casting needed in parts of the compiler.
|
||||||
|
@ -718,9 +718,8 @@ Constant *ConstantArray::get(LLVMContext &Context, StringRef Str,
|
|||||||
ElementVals.push_back(ConstantInt::get(Type::getInt8Ty(Context), Str[i]));
|
ElementVals.push_back(ConstantInt::get(Type::getInt8Ty(Context), Str[i]));
|
||||||
|
|
||||||
// Add a null terminator to the string...
|
// Add a null terminator to the string...
|
||||||
if (AddNull) {
|
if (AddNull)
|
||||||
ElementVals.push_back(ConstantInt::get(Type::getInt8Ty(Context), 0));
|
ElementVals.push_back(ConstantInt::get(Type::getInt8Ty(Context), 0));
|
||||||
}
|
|
||||||
|
|
||||||
ArrayType *ATy = ArrayType::get(Type::getInt8Ty(Context), ElementVals.size());
|
ArrayType *ATy = ArrayType::get(Type::getInt8Ty(Context), ElementVals.size());
|
||||||
return get(ATy, ElementVals);
|
return get(ATy, ElementVals);
|
||||||
@ -2119,56 +2118,71 @@ void ConstantDataSequential::destroyConstant() {
|
|||||||
/// get() constructors - Return a constant with array type with an element
|
/// get() constructors - Return a constant with array type with an element
|
||||||
/// count and element type matching the ArrayRef passed in. Note that this
|
/// count and element type matching the ArrayRef passed in. Note that this
|
||||||
/// can return a ConstantAggregateZero object.
|
/// can return a ConstantAggregateZero object.
|
||||||
Constant *ConstantDataArray::get(ArrayRef<uint8_t> Elts, LLVMContext &Context) {
|
Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<uint8_t> Elts) {
|
||||||
Type *Ty = ArrayType::get(Type::getInt8Ty(Context), Elts.size());
|
Type *Ty = ArrayType::get(Type::getInt8Ty(Context), Elts.size());
|
||||||
return getImpl(StringRef((char*)Elts.data(), Elts.size()*1), Ty);
|
return getImpl(StringRef((char*)Elts.data(), Elts.size()*1), Ty);
|
||||||
}
|
}
|
||||||
Constant *ConstantDataArray::get(ArrayRef<uint16_t> Elts, LLVMContext &Context){
|
Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<uint16_t> Elts){
|
||||||
Type *Ty = ArrayType::get(Type::getInt16Ty(Context), Elts.size());
|
Type *Ty = ArrayType::get(Type::getInt16Ty(Context), Elts.size());
|
||||||
return getImpl(StringRef((char*)Elts.data(), Elts.size()*2), Ty);
|
return getImpl(StringRef((char*)Elts.data(), Elts.size()*2), Ty);
|
||||||
}
|
}
|
||||||
Constant *ConstantDataArray::get(ArrayRef<uint32_t> Elts, LLVMContext &Context){
|
Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<uint32_t> Elts){
|
||||||
Type *Ty = ArrayType::get(Type::getInt32Ty(Context), Elts.size());
|
Type *Ty = ArrayType::get(Type::getInt32Ty(Context), Elts.size());
|
||||||
return getImpl(StringRef((char*)Elts.data(), Elts.size()*4), Ty);
|
return getImpl(StringRef((char*)Elts.data(), Elts.size()*4), Ty);
|
||||||
}
|
}
|
||||||
Constant *ConstantDataArray::get(ArrayRef<uint64_t> Elts, LLVMContext &Context){
|
Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<uint64_t> Elts){
|
||||||
Type *Ty = ArrayType::get(Type::getInt64Ty(Context), Elts.size());
|
Type *Ty = ArrayType::get(Type::getInt64Ty(Context), Elts.size());
|
||||||
return getImpl(StringRef((char*)Elts.data(), Elts.size()*8), Ty);
|
return getImpl(StringRef((char*)Elts.data(), Elts.size()*8), Ty);
|
||||||
}
|
}
|
||||||
Constant *ConstantDataArray::get(ArrayRef<float> Elts, LLVMContext &Context) {
|
Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<float> Elts) {
|
||||||
Type *Ty = ArrayType::get(Type::getFloatTy(Context), Elts.size());
|
Type *Ty = ArrayType::get(Type::getFloatTy(Context), Elts.size());
|
||||||
return getImpl(StringRef((char*)Elts.data(), Elts.size()*4), Ty);
|
return getImpl(StringRef((char*)Elts.data(), Elts.size()*4), Ty);
|
||||||
}
|
}
|
||||||
Constant *ConstantDataArray::get(ArrayRef<double> Elts, LLVMContext &Context) {
|
Constant *ConstantDataArray::get(LLVMContext &Context, ArrayRef<double> Elts) {
|
||||||
Type *Ty = ArrayType::get(Type::getDoubleTy(Context), Elts.size());
|
Type *Ty = ArrayType::get(Type::getDoubleTy(Context), Elts.size());
|
||||||
return getImpl(StringRef((char*)Elts.data(), Elts.size()*8), Ty);
|
return getImpl(StringRef((char*)Elts.data(), Elts.size()*8), Ty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// getString - This method constructs a CDS and initializes it with a text
|
||||||
|
/// string. The default behavior (AddNull==true) causes a null terminator to
|
||||||
|
/// be placed at the end of the array (increasing the length of the string by
|
||||||
|
/// one more than the StringRef would normally indicate. Pass AddNull=false
|
||||||
|
/// to disable this behavior.
|
||||||
|
Constant *ConstantDataArray::getString(LLVMContext &Context,
|
||||||
|
StringRef Str, bool AddNull) {
|
||||||
|
if (!AddNull)
|
||||||
|
return get(Context, ArrayRef<uint8_t>((uint8_t*)Str.data(), Str.size()));
|
||||||
|
|
||||||
|
SmallVector<uint8_t, 64> ElementVals;
|
||||||
|
ElementVals.append(Str.begin(), Str.end());
|
||||||
|
ElementVals.push_back(0);
|
||||||
|
return get(Context, ElementVals);
|
||||||
|
}
|
||||||
|
|
||||||
/// get() constructors - Return a constant with vector type with an element
|
/// get() constructors - Return a constant with vector type with an element
|
||||||
/// count and element type matching the ArrayRef passed in. Note that this
|
/// count and element type matching the ArrayRef passed in. Note that this
|
||||||
/// can return a ConstantAggregateZero object.
|
/// can return a ConstantAggregateZero object.
|
||||||
Constant *ConstantDataVector::get(ArrayRef<uint8_t> Elts, LLVMContext &Context) {
|
Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint8_t> Elts){
|
||||||
Type *Ty = VectorType::get(Type::getInt8Ty(Context), Elts.size());
|
Type *Ty = VectorType::get(Type::getInt8Ty(Context), Elts.size());
|
||||||
return getImpl(StringRef((char*)Elts.data(), Elts.size()*1), Ty);
|
return getImpl(StringRef((char*)Elts.data(), Elts.size()*1), Ty);
|
||||||
}
|
}
|
||||||
Constant *ConstantDataVector::get(ArrayRef<uint16_t> Elts, LLVMContext &Context){
|
Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint16_t> Elts){
|
||||||
Type *Ty = VectorType::get(Type::getInt16Ty(Context), Elts.size());
|
Type *Ty = VectorType::get(Type::getInt16Ty(Context), Elts.size());
|
||||||
return getImpl(StringRef((char*)Elts.data(), Elts.size()*2), Ty);
|
return getImpl(StringRef((char*)Elts.data(), Elts.size()*2), Ty);
|
||||||
}
|
}
|
||||||
Constant *ConstantDataVector::get(ArrayRef<uint32_t> Elts, LLVMContext &Context){
|
Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint32_t> Elts){
|
||||||
Type *Ty = VectorType::get(Type::getInt32Ty(Context), Elts.size());
|
Type *Ty = VectorType::get(Type::getInt32Ty(Context), Elts.size());
|
||||||
return getImpl(StringRef((char*)Elts.data(), Elts.size()*4), Ty);
|
return getImpl(StringRef((char*)Elts.data(), Elts.size()*4), Ty);
|
||||||
}
|
}
|
||||||
Constant *ConstantDataVector::get(ArrayRef<uint64_t> Elts, LLVMContext &Context){
|
Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<uint64_t> Elts){
|
||||||
Type *Ty = VectorType::get(Type::getInt64Ty(Context), Elts.size());
|
Type *Ty = VectorType::get(Type::getInt64Ty(Context), Elts.size());
|
||||||
return getImpl(StringRef((char*)Elts.data(), Elts.size()*8), Ty);
|
return getImpl(StringRef((char*)Elts.data(), Elts.size()*8), Ty);
|
||||||
}
|
}
|
||||||
Constant *ConstantDataVector::get(ArrayRef<float> Elts, LLVMContext &Context) {
|
Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<float> Elts) {
|
||||||
Type *Ty = VectorType::get(Type::getFloatTy(Context), Elts.size());
|
Type *Ty = VectorType::get(Type::getFloatTy(Context), Elts.size());
|
||||||
return getImpl(StringRef((char*)Elts.data(), Elts.size()*4), Ty);
|
return getImpl(StringRef((char*)Elts.data(), Elts.size()*4), Ty);
|
||||||
}
|
}
|
||||||
Constant *ConstantDataVector::get(ArrayRef<double> Elts, LLVMContext &Context) {
|
Constant *ConstantDataVector::get(LLVMContext &Context, ArrayRef<double> Elts) {
|
||||||
Type *Ty = VectorType::get(Type::getDoubleTy(Context), Elts.size());
|
Type *Ty = VectorType::get(Type::getDoubleTy(Context), Elts.size());
|
||||||
return getImpl(StringRef((char*)Elts.data(), Elts.size()*8), Ty);
|
return getImpl(StringRef((char*)Elts.data(), Elts.size()*8), Ty);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user