llvmpipe: Utility function to get the pointer to a structure member.

This commit is contained in:
José Fonseca 2009-09-07 14:25:02 +01:00
parent 866fbacf2b
commit b1eff018c7
2 changed files with 29 additions and 4 deletions

View File

@ -41,18 +41,31 @@
#include "lp_bld_struct.h" #include "lp_bld_struct.h"
LLVMValueRef
lp_build_struct_get_ptr(LLVMBuilderRef builder,
LLVMValueRef ptr,
unsigned member,
const char *name)
{
LLVMValueRef indices[2];
LLVMValueRef member_ptr;
indices[0] = LLVMConstInt(LLVMInt32Type(), 0, 0);
indices[1] = LLVMConstInt(LLVMInt32Type(), member, 0);
member_ptr = LLVMBuildGEP(builder, ptr, indices, Elements(indices), "");
lp_build_name(member_ptr, "%s.%s_ptr", LLVMGetValueName(ptr), name);
return member_ptr;
}
LLVMValueRef LLVMValueRef
lp_build_struct_get(LLVMBuilderRef builder, lp_build_struct_get(LLVMBuilderRef builder,
LLVMValueRef ptr, LLVMValueRef ptr,
unsigned member, unsigned member,
const char *name) const char *name)
{ {
LLVMValueRef indices[2];
LLVMValueRef member_ptr; LLVMValueRef member_ptr;
LLVMValueRef res; LLVMValueRef res;
indices[0] = LLVMConstInt(LLVMInt32Type(), 0, 0); member_ptr = lp_build_struct_get_ptr(builder, ptr, member, name);
indices[1] = LLVMConstInt(LLVMInt32Type(), member, 0);
member_ptr = LLVMBuildGEP(builder, ptr, indices, Elements(indices), "");
res = LLVMBuildLoad(builder, member_ptr, ""); res = LLVMBuildLoad(builder, member_ptr, "");
lp_build_name(res, "%s.%s", LLVMGetValueName(ptr), name); lp_build_name(res, "%s.%s", LLVMGetValueName(ptr), name);
return res; return res;

View File

@ -53,6 +53,18 @@
offsetof(_ctype, _cmember)) offsetof(_ctype, _cmember))
/**
* Get value pointer to a structure member.
*/
LLVMValueRef
lp_build_struct_get_ptr(LLVMBuilderRef builder,
LLVMValueRef ptr,
unsigned member,
const char *name);
/**
* Get the value of a structure member.
*/
LLVMValueRef LLVMValueRef
lp_build_struct_get(LLVMBuilderRef builder, lp_build_struct_get(LLVMBuilderRef builder,
LLVMValueRef ptr, LLVMValueRef ptr,