gallivm: added lp_sizeof_llvm_type()

This commit is contained in:
Brian Paul 2010-05-14 13:22:45 -06:00
parent 9a0ff95425
commit 11b7c4b1ac
2 changed files with 41 additions and 0 deletions

View File

@ -238,6 +238,43 @@ lp_wider_type(struct lp_type type)
}
/**
* Return the size of the LLVMType in bits.
* XXX this function doesn't necessarily handle all LLVM types.
*/
unsigned
lp_sizeof_llvm_type(LLVMTypeRef t)
{
LLVMTypeKind k = LLVMGetTypeKind(t);
switch (k) {
case LLVMIntegerTypeKind:
return LLVMGetIntTypeWidth(t);
case LLVMFloatTypeKind:
return 8 * sizeof(float);
case LLVMDoubleTypeKind:
return 8 * sizeof(double);
case LLVMVectorTypeKind:
{
LLVMTypeRef elem = LLVMGetElementType(t);
unsigned len = LLVMGetVectorSize(t);
return len * lp_sizeof_llvm_type(elem);
}
break;
case LLVMArrayTypeKind:
{
LLVMTypeRef elem = LLVMGetElementType(t);
unsigned len = LLVMGetArrayLength(t);
return len * lp_sizeof_llvm_type(elem);
}
break;
default:
assert(0 && "Unexpected type in lp_get_llvm_type_size()");
return 0;
}
}
/**
* Return string name for a LLVMTypeKind. Useful for debugging.
*/

View File

@ -316,6 +316,10 @@ struct lp_type
lp_wider_type(struct lp_type type);
unsigned
lp_sizeof_llvm_type(LLVMTypeRef t);
const char *
lp_typekind_name(LLVMTypeKind t);