mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-18 18:42:46 +02:00
[opaque pointer types] Update GetElementPtr creation APIs to
consistently accept a pointee-type argument. Note: this also adds a new C API and soft-deprecates the old C API. Differential Revision: https://reviews.llvm.org/D56559 llvm-svn: 351124
This commit is contained in:
parent
f17c67ebda
commit
363d3df24d
@ -2085,9 +2085,14 @@ LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
|
||||
LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant);
|
||||
LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
|
||||
LLVMValueRef *ConstantIndices, unsigned NumIndices);
|
||||
LLVMValueRef LLVMConstGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal,
|
||||
LLVMValueRef *ConstantIndices, unsigned NumIndices);
|
||||
LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
|
||||
LLVMValueRef *ConstantIndices,
|
||||
unsigned NumIndices);
|
||||
LLVMValueRef LLVMConstInBoundsGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal,
|
||||
LLVMValueRef *ConstantIndices,
|
||||
unsigned NumIndices);
|
||||
LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
|
||||
LLVMValueRef LLVMConstSExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
|
||||
LLVMValueRef LLVMConstZExt(LLVMValueRef ConstantVal, LLVMTypeRef ToType);
|
||||
@ -3604,6 +3609,8 @@ LLVMValueRef LLVMBuildLoad(LLVMBuilderRef, LLVMValueRef PointerVal,
|
||||
LLVMValueRef LLVMBuildLoad2(LLVMBuilderRef, LLVMTypeRef Ty,
|
||||
LLVMValueRef PointerVal, const char *Name);
|
||||
LLVMValueRef LLVMBuildStore(LLVMBuilderRef, LLVMValueRef Val, LLVMValueRef Ptr);
|
||||
// LLVMBuildGEP, LLVMBuildInBoundsGEP, and LLVMBuildStructGEP are deprecated in
|
||||
// favor of LLVMBuild*GEP2, in preparation for opaque pointer types.
|
||||
LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
|
||||
LLVMValueRef *Indices, unsigned NumIndices,
|
||||
const char *Name);
|
||||
@ -3612,6 +3619,15 @@ LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
|
||||
const char *Name);
|
||||
LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
|
||||
unsigned Idx, const char *Name);
|
||||
LLVMValueRef LLVMBuildGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
|
||||
LLVMValueRef Pointer, LLVMValueRef *Indices,
|
||||
unsigned NumIndices, const char *Name);
|
||||
LLVMValueRef LLVMBuildInBoundsGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
|
||||
LLVMValueRef Pointer, LLVMValueRef *Indices,
|
||||
unsigned NumIndices, const char *Name);
|
||||
LLVMValueRef LLVMBuildStructGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
|
||||
LLVMValueRef Pointer, unsigned Idx,
|
||||
const char *Name);
|
||||
LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
|
||||
const char *Name);
|
||||
LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
|
||||
|
@ -1563,50 +1563,69 @@ public:
|
||||
return Insert(GetElementPtrInst::CreateInBounds(Ty, Ptr, Idxs), Name);
|
||||
}
|
||||
|
||||
Value *CreateConstGEP1_64(Value *Ptr, uint64_t Idx0, const Twine &Name = "") {
|
||||
Value *CreateConstGEP1_64(Type *Ty, Value *Ptr, uint64_t Idx0,
|
||||
const Twine &Name = "") {
|
||||
Value *Idx = ConstantInt::get(Type::getInt64Ty(Context), Idx0);
|
||||
|
||||
if (auto *PC = dyn_cast<Constant>(Ptr))
|
||||
return Insert(Folder.CreateGetElementPtr(nullptr, PC, Idx), Name);
|
||||
return Insert(Folder.CreateGetElementPtr(Ty, PC, Idx), Name);
|
||||
|
||||
return Insert(GetElementPtrInst::Create(nullptr, Ptr, Idx), Name);
|
||||
return Insert(GetElementPtrInst::Create(Ty, Ptr, Idx), Name);
|
||||
}
|
||||
|
||||
Value *CreateConstGEP1_64(Value *Ptr, uint64_t Idx0, const Twine &Name = "") {
|
||||
return CreateConstGEP1_64(nullptr, Ptr, Idx0, Name);
|
||||
}
|
||||
|
||||
Value *CreateConstInBoundsGEP1_64(Type *Ty, Value *Ptr, uint64_t Idx0,
|
||||
const Twine &Name = "") {
|
||||
Value *Idx = ConstantInt::get(Type::getInt64Ty(Context), Idx0);
|
||||
|
||||
if (auto *PC = dyn_cast<Constant>(Ptr))
|
||||
return Insert(Folder.CreateInBoundsGetElementPtr(Ty, PC, Idx), Name);
|
||||
|
||||
return Insert(GetElementPtrInst::CreateInBounds(Ty, Ptr, Idx), Name);
|
||||
}
|
||||
|
||||
Value *CreateConstInBoundsGEP1_64(Value *Ptr, uint64_t Idx0,
|
||||
const Twine &Name = "") {
|
||||
Value *Idx = ConstantInt::get(Type::getInt64Ty(Context), Idx0);
|
||||
|
||||
if (auto *PC = dyn_cast<Constant>(Ptr))
|
||||
return Insert(Folder.CreateInBoundsGetElementPtr(nullptr, PC, Idx), Name);
|
||||
|
||||
return Insert(GetElementPtrInst::CreateInBounds(nullptr, Ptr, Idx), Name);
|
||||
return CreateConstInBoundsGEP1_64(nullptr, Ptr, Idx0, Name);
|
||||
}
|
||||
|
||||
Value *CreateConstGEP2_64(Value *Ptr, uint64_t Idx0, uint64_t Idx1,
|
||||
const Twine &Name = "") {
|
||||
Value *CreateConstGEP2_64(Type *Ty, Value *Ptr, uint64_t Idx0, uint64_t Idx1,
|
||||
const Twine &Name = "") {
|
||||
Value *Idxs[] = {
|
||||
ConstantInt::get(Type::getInt64Ty(Context), Idx0),
|
||||
ConstantInt::get(Type::getInt64Ty(Context), Idx1)
|
||||
};
|
||||
|
||||
if (auto *PC = dyn_cast<Constant>(Ptr))
|
||||
return Insert(Folder.CreateGetElementPtr(nullptr, PC, Idxs), Name);
|
||||
return Insert(Folder.CreateGetElementPtr(Ty, PC, Idxs), Name);
|
||||
|
||||
return Insert(GetElementPtrInst::Create(nullptr, Ptr, Idxs), Name);
|
||||
return Insert(GetElementPtrInst::Create(Ty, Ptr, Idxs), Name);
|
||||
}
|
||||
|
||||
Value *CreateConstGEP2_64(Value *Ptr, uint64_t Idx0, uint64_t Idx1,
|
||||
const Twine &Name = "") {
|
||||
return CreateConstGEP2_64(nullptr, Ptr, Idx0, Idx1, Name);
|
||||
}
|
||||
|
||||
Value *CreateConstInBoundsGEP2_64(Type *Ty, Value *Ptr, uint64_t Idx0,
|
||||
uint64_t Idx1, const Twine &Name = "") {
|
||||
Value *Idxs[] = {
|
||||
ConstantInt::get(Type::getInt64Ty(Context), Idx0),
|
||||
ConstantInt::get(Type::getInt64Ty(Context), Idx1)
|
||||
};
|
||||
|
||||
if (auto *PC = dyn_cast<Constant>(Ptr))
|
||||
return Insert(Folder.CreateInBoundsGetElementPtr(Ty, PC, Idxs), Name);
|
||||
|
||||
return Insert(GetElementPtrInst::CreateInBounds(Ty, Ptr, Idxs), Name);
|
||||
}
|
||||
|
||||
Value *CreateConstInBoundsGEP2_64(Value *Ptr, uint64_t Idx0, uint64_t Idx1,
|
||||
const Twine &Name = "") {
|
||||
Value *Idxs[] = {
|
||||
ConstantInt::get(Type::getInt64Ty(Context), Idx0),
|
||||
ConstantInt::get(Type::getInt64Ty(Context), Idx1)
|
||||
};
|
||||
|
||||
if (auto *PC = dyn_cast<Constant>(Ptr))
|
||||
return Insert(Folder.CreateInBoundsGetElementPtr(nullptr, PC, Idxs),
|
||||
Name);
|
||||
|
||||
return Insert(GetElementPtrInst::CreateInBounds(nullptr, Ptr, Idxs), Name);
|
||||
return CreateConstInBoundsGEP2_64(nullptr, Ptr, Idx0, Idx1, Name);
|
||||
}
|
||||
|
||||
Value *CreateStructGEP(Type *Ty, Value *Ptr, unsigned Idx,
|
||||
|
@ -1617,17 +1617,21 @@ LLVMValueRef LLVMConstGEP(LLVMValueRef ConstantVal,
|
||||
LLVMValueRef *ConstantIndices, unsigned NumIndices) {
|
||||
ArrayRef<Constant *> IdxList(unwrap<Constant>(ConstantIndices, NumIndices),
|
||||
NumIndices);
|
||||
return wrap(ConstantExpr::getGetElementPtr(
|
||||
nullptr, unwrap<Constant>(ConstantVal), IdxList));
|
||||
Constant *Val = unwrap<Constant>(ConstantVal);
|
||||
Type *Ty =
|
||||
cast<PointerType>(Val->getType()->getScalarType())->getElementType();
|
||||
return wrap(ConstantExpr::getGetElementPtr(Ty, Val, IdxList));
|
||||
}
|
||||
|
||||
LLVMValueRef LLVMConstInBoundsGEP(LLVMValueRef ConstantVal,
|
||||
LLVMValueRef *ConstantIndices,
|
||||
unsigned NumIndices) {
|
||||
Constant* Val = unwrap<Constant>(ConstantVal);
|
||||
ArrayRef<Constant *> IdxList(unwrap<Constant>(ConstantIndices, NumIndices),
|
||||
NumIndices);
|
||||
return wrap(ConstantExpr::getInBoundsGetElementPtr(nullptr, Val, IdxList));
|
||||
Constant *Val = unwrap<Constant>(ConstantVal);
|
||||
Type *Ty =
|
||||
cast<PointerType>(Val->getType()->getScalarType())->getElementType();
|
||||
return wrap(ConstantExpr::getInBoundsGetElementPtr(Ty, Val, IdxList));
|
||||
}
|
||||
|
||||
LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType) {
|
||||
@ -3409,20 +3413,50 @@ LLVMValueRef LLVMBuildGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
|
||||
LLVMValueRef *Indices, unsigned NumIndices,
|
||||
const char *Name) {
|
||||
ArrayRef<Value *> IdxList(unwrap(Indices), NumIndices);
|
||||
return wrap(unwrap(B)->CreateGEP(nullptr, unwrap(Pointer), IdxList, Name));
|
||||
Value *Val = unwrap(Pointer);
|
||||
Type *Ty =
|
||||
cast<PointerType>(Val->getType()->getScalarType())->getElementType();
|
||||
return wrap(unwrap(B)->CreateGEP(Ty, Val, IdxList, Name));
|
||||
}
|
||||
|
||||
LLVMValueRef LLVMBuildGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
|
||||
LLVMValueRef Pointer, LLVMValueRef *Indices,
|
||||
unsigned NumIndices, const char *Name) {
|
||||
ArrayRef<Value *> IdxList(unwrap(Indices), NumIndices);
|
||||
return wrap(unwrap(B)->CreateGEP(unwrap(Ty), unwrap(Pointer), IdxList, Name));
|
||||
}
|
||||
|
||||
LLVMValueRef LLVMBuildInBoundsGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
|
||||
LLVMValueRef *Indices, unsigned NumIndices,
|
||||
const char *Name) {
|
||||
ArrayRef<Value *> IdxList(unwrap(Indices), NumIndices);
|
||||
Value *Val = unwrap(Pointer);
|
||||
Type *Ty =
|
||||
cast<PointerType>(Val->getType()->getScalarType())->getElementType();
|
||||
return wrap(unwrap(B)->CreateInBoundsGEP(Ty, Val, IdxList, Name));
|
||||
}
|
||||
|
||||
LLVMValueRef LLVMBuildInBoundsGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
|
||||
LLVMValueRef Pointer, LLVMValueRef *Indices,
|
||||
unsigned NumIndices, const char *Name) {
|
||||
ArrayRef<Value *> IdxList(unwrap(Indices), NumIndices);
|
||||
return wrap(
|
||||
unwrap(B)->CreateInBoundsGEP(nullptr, unwrap(Pointer), IdxList, Name));
|
||||
unwrap(B)->CreateInBoundsGEP(unwrap(Ty), unwrap(Pointer), IdxList, Name));
|
||||
}
|
||||
|
||||
LLVMValueRef LLVMBuildStructGEP(LLVMBuilderRef B, LLVMValueRef Pointer,
|
||||
unsigned Idx, const char *Name) {
|
||||
return wrap(unwrap(B)->CreateStructGEP(nullptr, unwrap(Pointer), Idx, Name));
|
||||
Value *Val = unwrap(Pointer);
|
||||
Type *Ty =
|
||||
cast<PointerType>(Val->getType()->getScalarType())->getElementType();
|
||||
return wrap(unwrap(B)->CreateStructGEP(Ty, Val, Idx, Name));
|
||||
}
|
||||
|
||||
LLVMValueRef LLVMBuildStructGEP2(LLVMBuilderRef B, LLVMTypeRef Ty,
|
||||
LLVMValueRef Pointer, unsigned Idx,
|
||||
const char *Name) {
|
||||
return wrap(
|
||||
unwrap(B)->CreateStructGEP(unwrap(Ty), unwrap(Pointer), Idx, Name));
|
||||
}
|
||||
|
||||
LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str,
|
||||
|
Loading…
Reference in New Issue
Block a user