mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-07 08:08:50 +00:00
Wrap all LLVMGetElementType uses
This commit is contained in:
+8
-8
@@ -223,7 +223,7 @@ i64 lb_sizeof(LLVMTypeRef type) {
|
|||||||
break;
|
break;
|
||||||
case LLVMArrayTypeKind:
|
case LLVMArrayTypeKind:
|
||||||
{
|
{
|
||||||
LLVMTypeRef elem = LLVMGetElementType(type);
|
LLVMTypeRef elem = OdinLLVMGetArrayElementType(type);
|
||||||
i64 elem_size = lb_sizeof(elem);
|
i64 elem_size = lb_sizeof(elem);
|
||||||
i64 count = LLVMGetArrayLength(type);
|
i64 count = LLVMGetArrayLength(type);
|
||||||
i64 size = count * elem_size;
|
i64 size = count * elem_size;
|
||||||
@@ -235,7 +235,7 @@ i64 lb_sizeof(LLVMTypeRef type) {
|
|||||||
return 8;
|
return 8;
|
||||||
case LLVMVectorTypeKind:
|
case LLVMVectorTypeKind:
|
||||||
{
|
{
|
||||||
LLVMTypeRef elem = LLVMGetElementType(type);
|
LLVMTypeRef elem = OdinLLVMGetVectorElementType(type);
|
||||||
i64 elem_size = lb_sizeof(elem);
|
i64 elem_size = lb_sizeof(elem);
|
||||||
i64 count = LLVMGetVectorSize(type);
|
i64 count = LLVMGetVectorSize(type);
|
||||||
i64 size = count * elem_size;
|
i64 size = count * elem_size;
|
||||||
@@ -283,14 +283,14 @@ i64 lb_alignof(LLVMTypeRef type) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LLVMArrayTypeKind:
|
case LLVMArrayTypeKind:
|
||||||
return lb_alignof(LLVMGetElementType(type));
|
return lb_alignof(OdinLLVMGetArrayElementType(type));
|
||||||
|
|
||||||
case LLVMX86_MMXTypeKind:
|
case LLVMX86_MMXTypeKind:
|
||||||
return 8;
|
return 8;
|
||||||
case LLVMVectorTypeKind:
|
case LLVMVectorTypeKind:
|
||||||
{
|
{
|
||||||
// TODO(bill): This appears to be correct but LLVM isn't necessarily "great" with regards to documentation
|
// TODO(bill): This appears to be correct but LLVM isn't necessarily "great" with regards to documentation
|
||||||
LLVMTypeRef elem = LLVMGetElementType(type);
|
LLVMTypeRef elem = OdinLLVMGetVectorElementType(type);
|
||||||
i64 elem_size = lb_sizeof(elem);
|
i64 elem_size = lb_sizeof(elem);
|
||||||
i64 count = LLVMGetVectorSize(type);
|
i64 count = LLVMGetVectorSize(type);
|
||||||
i64 size = count * elem_size;
|
i64 size = count * elem_size;
|
||||||
@@ -793,7 +793,7 @@ namespace lbAbiAmd64SysV {
|
|||||||
case LLVMArrayTypeKind:
|
case LLVMArrayTypeKind:
|
||||||
{
|
{
|
||||||
i64 len = LLVMGetArrayLength(t);
|
i64 len = LLVMGetArrayLength(t);
|
||||||
LLVMTypeRef elem = LLVMGetElementType(t);
|
LLVMTypeRef elem = OdinLLVMGetArrayElementType(t);
|
||||||
i64 elem_sz = lb_sizeof(elem);
|
i64 elem_sz = lb_sizeof(elem);
|
||||||
for (i64 i = 0; i < len; i++) {
|
for (i64 i = 0; i < len; i++) {
|
||||||
classify_with(elem, cls, ix, off + i*elem_sz);
|
classify_with(elem, cls, ix, off + i*elem_sz);
|
||||||
@@ -803,7 +803,7 @@ namespace lbAbiAmd64SysV {
|
|||||||
case LLVMVectorTypeKind:
|
case LLVMVectorTypeKind:
|
||||||
{
|
{
|
||||||
i64 len = LLVMGetVectorSize(t);
|
i64 len = LLVMGetVectorSize(t);
|
||||||
LLVMTypeRef elem = LLVMGetElementType(t);
|
LLVMTypeRef elem = OdinLLVMGetVectorElementType(t);
|
||||||
i64 elem_sz = lb_sizeof(elem);
|
i64 elem_sz = lb_sizeof(elem);
|
||||||
LLVMTypeKind elem_kind = LLVMGetTypeKind(elem);
|
LLVMTypeKind elem_kind = LLVMGetTypeKind(elem);
|
||||||
RegClass reg = RegClass_NoClass;
|
RegClass reg = RegClass_NoClass;
|
||||||
@@ -913,7 +913,7 @@ namespace lbAbiArm64 {
|
|||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
LLVMTypeRef elem = LLVMGetElementType(type);
|
LLVMTypeRef elem = OdinLLVMGetArrayElementType(type);
|
||||||
LLVMTypeRef base_type = nullptr;
|
LLVMTypeRef base_type = nullptr;
|
||||||
unsigned member_count = 0;
|
unsigned member_count = 0;
|
||||||
if (is_homogenous_aggregate(c, elem, &base_type, &member_count)) {
|
if (is_homogenous_aggregate(c, elem, &base_type, &member_count)) {
|
||||||
@@ -1129,7 +1129,7 @@ namespace lbAbiWasm {
|
|||||||
}
|
}
|
||||||
if (sz <= MAX_DIRECT_STRUCT_SIZE) {
|
if (sz <= MAX_DIRECT_STRUCT_SIZE) {
|
||||||
if (kind == LLVMArrayTypeKind) {
|
if (kind == LLVMArrayTypeKind) {
|
||||||
if (is_basic_register_type(LLVMGetElementType(type))) {
|
if (is_basic_register_type(OdinLLVMGetArrayElementType(type))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else if (kind == LLVMStructTypeKind) {
|
} else if (kind == LLVMStructTypeKind) {
|
||||||
|
|||||||
@@ -507,6 +507,9 @@ i64 lb_max_zero_init_size(void) {
|
|||||||
return cast(i64)(4*build_context.word_size);
|
return cast(i64)(4*build_context.word_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LLVMTypeRef OdinLLVMGetArrayElementType(LLVMTypeRef type);
|
||||||
|
LLVMTypeRef OdinLLVMGetVectorElementType(LLVMTypeRef type);
|
||||||
|
|
||||||
#define LB_STARTUP_RUNTIME_PROC_NAME "__$startup_runtime"
|
#define LB_STARTUP_RUNTIME_PROC_NAME "__$startup_runtime"
|
||||||
#define LB_STARTUP_TYPE_INFO_PROC_NAME "__$startup_type_info"
|
#define LB_STARTUP_TYPE_INFO_PROC_NAME "__$startup_type_info"
|
||||||
#define LB_TYPE_INFO_DATA_NAME "__$type_info_data"
|
#define LB_TYPE_INFO_DATA_NAME "__$type_info_data"
|
||||||
|
|||||||
@@ -2293,6 +2293,17 @@ void lb_emit_if(lbProcedure *p, lbValue cond, lbBlock *true_block, lbBlock *fals
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gb_inline LLVMTypeRef OdinLLVMGetInternalElementType(LLVMTypeRef type) {
|
||||||
|
return LLVMGetElementType(type);
|
||||||
|
}
|
||||||
|
LLVMTypeRef OdinLLVMGetArrayElementType(LLVMTypeRef type) {
|
||||||
|
GB_ASSERT(lb_is_type_kind(type, LLVMArrayTypeKind));
|
||||||
|
return OdinLLVMGetInternalElementType(type);
|
||||||
|
}
|
||||||
|
LLVMTypeRef OdinLLVMGetVectorElementType(LLVMTypeRef type) {
|
||||||
|
GB_ASSERT(lb_is_type_kind(type, LLVMVectorTypeKind));
|
||||||
|
return OdinLLVMGetInternalElementType(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
LLVMValueRef OdinLLVMBuildTransmute(lbProcedure *p, LLVMValueRef val, LLVMTypeRef dst_type) {
|
LLVMValueRef OdinLLVMBuildTransmute(lbProcedure *p, LLVMValueRef val, LLVMTypeRef dst_type) {
|
||||||
|
|||||||
@@ -130,11 +130,6 @@ lbValue lb_get_type_info_ptr(lbModule *m, Type *type) {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: The use of this method needs to be eliminated for pointers.
|
|
||||||
LLVMTypeRef llvm_get_element_type(LLVMTypeRef type) {
|
|
||||||
return LLVMGetElementType(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
LLVMTypeRef lb_get_procedure_raw_type(lbModule *m, Type *type) {
|
LLVMTypeRef lb_get_procedure_raw_type(lbModule *m, Type *type) {
|
||||||
return lb_type_internal_for_procedures_raw(m, type);
|
return lb_type_internal_for_procedures_raw(m, type);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1651,7 +1651,7 @@ LLVMValueRef llvm_vector_expand_to_power_of_two(lbProcedure *p, LLVMValueRef val
|
|||||||
LLVMValueRef llvm_vector_reduce_add(lbProcedure *p, LLVMValueRef value) {
|
LLVMValueRef llvm_vector_reduce_add(lbProcedure *p, LLVMValueRef value) {
|
||||||
LLVMTypeRef type = LLVMTypeOf(value);
|
LLVMTypeRef type = LLVMTypeOf(value);
|
||||||
GB_ASSERT(LLVMGetTypeKind(type) == LLVMVectorTypeKind);
|
GB_ASSERT(LLVMGetTypeKind(type) == LLVMVectorTypeKind);
|
||||||
LLVMTypeRef elem = LLVMGetElementType(type);
|
LLVMTypeRef elem = OdinLLVMGetVectorElementType(type);
|
||||||
unsigned len = LLVMGetVectorSize(type);
|
unsigned len = LLVMGetVectorSize(type);
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
return LLVMConstNull(type);
|
return LLVMConstNull(type);
|
||||||
@@ -1727,7 +1727,7 @@ LLVMValueRef llvm_vector_reduce_add(lbProcedure *p, LLVMValueRef value) {
|
|||||||
LLVMValueRef llvm_vector_add(lbProcedure *p, LLVMValueRef a, LLVMValueRef b) {
|
LLVMValueRef llvm_vector_add(lbProcedure *p, LLVMValueRef a, LLVMValueRef b) {
|
||||||
GB_ASSERT(LLVMTypeOf(a) == LLVMTypeOf(b));
|
GB_ASSERT(LLVMTypeOf(a) == LLVMTypeOf(b));
|
||||||
|
|
||||||
LLVMTypeRef elem = LLVMGetElementType(LLVMTypeOf(a));
|
LLVMTypeRef elem = OdinLLVMGetVectorElementType(LLVMTypeOf(a));
|
||||||
|
|
||||||
if (LLVMGetTypeKind(elem) == LLVMIntegerTypeKind) {
|
if (LLVMGetTypeKind(elem) == LLVMIntegerTypeKind) {
|
||||||
return LLVMBuildAdd(p->builder, a, b, "");
|
return LLVMBuildAdd(p->builder, a, b, "");
|
||||||
@@ -1738,7 +1738,7 @@ LLVMValueRef llvm_vector_add(lbProcedure *p, LLVMValueRef a, LLVMValueRef b) {
|
|||||||
LLVMValueRef llvm_vector_mul(lbProcedure *p, LLVMValueRef a, LLVMValueRef b) {
|
LLVMValueRef llvm_vector_mul(lbProcedure *p, LLVMValueRef a, LLVMValueRef b) {
|
||||||
GB_ASSERT(LLVMTypeOf(a) == LLVMTypeOf(b));
|
GB_ASSERT(LLVMTypeOf(a) == LLVMTypeOf(b));
|
||||||
|
|
||||||
LLVMTypeRef elem = LLVMGetElementType(LLVMTypeOf(a));
|
LLVMTypeRef elem = OdinLLVMGetVectorElementType(LLVMTypeOf(a));
|
||||||
|
|
||||||
if (LLVMGetTypeKind(elem) == LLVMIntegerTypeKind) {
|
if (LLVMGetTypeKind(elem) == LLVMIntegerTypeKind) {
|
||||||
return LLVMBuildMul(p->builder, a, b, "");
|
return LLVMBuildMul(p->builder, a, b, "");
|
||||||
@@ -1758,7 +1758,7 @@ LLVMValueRef llvm_vector_mul_add(lbProcedure *p, LLVMValueRef a, LLVMValueRef b,
|
|||||||
GB_ASSERT(t == LLVMTypeOf(c));
|
GB_ASSERT(t == LLVMTypeOf(c));
|
||||||
GB_ASSERT(LLVMGetTypeKind(t) == LLVMVectorTypeKind);
|
GB_ASSERT(LLVMGetTypeKind(t) == LLVMVectorTypeKind);
|
||||||
|
|
||||||
LLVMTypeRef elem = LLVMGetElementType(t);
|
LLVMTypeRef elem = OdinLLVMGetVectorElementType(t);
|
||||||
|
|
||||||
bool is_possible = false;
|
bool is_possible = false;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user