mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
add some convenience methods for creating GEP instructions and
struct types. Patch by David Chisnall, with some tweaks. llvm-svn: 48531
This commit is contained in:
parent
be72114460
commit
1642451cf7
@ -220,6 +220,11 @@ public:
|
||||
static StructType *get(const std::vector<const Type*> &Params,
|
||||
bool isPacked=false);
|
||||
|
||||
/// StructType::get - This static method is a convenience method for
|
||||
/// creating structure types by specifying the elements as arguments. Note
|
||||
/// that this method always returns a non-packed struct.
|
||||
static StructType *get(const Type *type, ...) END_WITH_NULL;
|
||||
|
||||
// Iterator access to the elements
|
||||
typedef Type::subtype_iterator element_iterator;
|
||||
element_iterator element_begin() const { return ContainedTys; }
|
||||
|
@ -226,6 +226,14 @@ public:
|
||||
GetElementPtrInst *CreateGEP(Value *Ptr, Value *Idx, const char *Name = "") {
|
||||
return Insert(new GetElementPtrInst(Ptr, Idx, Name));
|
||||
}
|
||||
GetElementPtrInst *CreateStructGEP(Value *Ptr, unsigned Idx,
|
||||
const char *Name = "") {
|
||||
llvm::Value *Idxs[] = {
|
||||
ConstantInt::get(llvm::Type::Int32Ty, 0),
|
||||
ConstantInt::get(llvm::Type::Int32Ty, Idx)
|
||||
};
|
||||
return Insert(new GetElementPtrInst(Ptr, Idxs, Idxs+2, Name));
|
||||
}
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Instruction creation methods: Cast/Conversion Operators
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "llvm/Support/ManagedStatic.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include <algorithm>
|
||||
#include <cstdarg>
|
||||
using namespace llvm;
|
||||
|
||||
// DEBUG_MERGE_TYPES - Enable this #define to see how and when derived types are
|
||||
@ -1247,6 +1248,16 @@ StructType *StructType::get(const std::vector<const Type*> &ETypes,
|
||||
return ST;
|
||||
}
|
||||
|
||||
StructType *StructType::get(const Type *type, ...) {
|
||||
va_list ap;
|
||||
std::vector<const llvm::Type*> StructFields;
|
||||
va_start(ap, type);
|
||||
do {
|
||||
StructFields.push_back(type);
|
||||
} while ((type = va_arg(ap, llvm::Type*)));
|
||||
return llvm::StructType::get(StructFields);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
Loading…
Reference in New Issue
Block a user