Mesa (master): gallivm: added lp_sizeof_llvm_type()
Brian Paul
brianp at kemper.freedesktop.org
Fri May 14 19:24:36 UTC 2010
Module: Mesa
Branch: master
Commit: 11b7c4b1ac0093781f6631c17a5441bea0be93d4
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=11b7c4b1ac0093781f6631c17a5441bea0be93d4
Author: Brian Paul <brianp at vmware.com>
Date: Fri May 14 13:22:45 2010 -0600
gallivm: added lp_sizeof_llvm_type()
---
src/gallium/auxiliary/gallivm/lp_bld_type.c | 37 +++++++++++++++++++++++++++
src/gallium/auxiliary/gallivm/lp_bld_type.h | 4 +++
2 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_type.c b/src/gallium/auxiliary/gallivm/lp_bld_type.c
index 37d278d..70ac755 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_type.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_type.c
@@ -239,6 +239,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.
*/
const char *
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_type.h b/src/gallium/auxiliary/gallivm/lp_bld_type.h
index b3f9e91..17819d4 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_type.h
+++ b/src/gallium/auxiliary/gallivm/lp_bld_type.h
@@ -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);
More information about the mesa-commit
mailing list