mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-06 21:17:40 +00:00
check packed load and set alignment on all loads, not just lb_emit_load
This commit is contained in:
@@ -130,7 +130,7 @@ gb_internal lbValue lb_emit_unary_arith(lbProcedure *p, TokenKind op, lbValue x,
|
||||
LLVMTypeRef vector_type = nullptr;
|
||||
if (op != Token_Not && lb_try_vector_cast(p->module, val, &vector_type)) {
|
||||
LLVMValueRef vp = LLVMBuildPointerCast(p->builder, val.value, LLVMPointerType(vector_type, 0), "");
|
||||
LLVMValueRef v = LLVMBuildLoad2(p->builder, vector_type, vp, "");
|
||||
LLVMValueRef v = OdinLLVMBuildLoad(p, vector_type, vp);
|
||||
|
||||
LLVMValueRef opv = nullptr;
|
||||
switch (op) {
|
||||
@@ -324,8 +324,8 @@ gb_internal bool lb_try_direct_vector_arith(lbProcedure *p, TokenKind op, lbValu
|
||||
|
||||
LLVMValueRef lhs_vp = LLVMBuildPointerCast(p->builder, lhs_ptr.value, LLVMPointerType(vector_type, 0), "");
|
||||
LLVMValueRef rhs_vp = LLVMBuildPointerCast(p->builder, rhs_ptr.value, LLVMPointerType(vector_type, 0), "");
|
||||
LLVMValueRef x = LLVMBuildLoad2(p->builder, vector_type, lhs_vp, "");
|
||||
LLVMValueRef y = LLVMBuildLoad2(p->builder, vector_type, rhs_vp, "");
|
||||
LLVMValueRef x = OdinLLVMBuildLoad(p, vector_type, lhs_vp);
|
||||
LLVMValueRef y = OdinLLVMBuildLoad(p, vector_type, rhs_vp);
|
||||
LLVMValueRef z = nullptr;
|
||||
|
||||
if (is_type_float(integral_type)) {
|
||||
@@ -551,15 +551,14 @@ gb_internal LLVMValueRef lb_matrix_to_vector(lbProcedure *p, lbValue matrix) {
|
||||
Type *mt = base_type(matrix.type);
|
||||
GB_ASSERT(mt->kind == Type_Matrix);
|
||||
LLVMTypeRef elem_type = lb_type(p->module, mt->Matrix.elem);
|
||||
|
||||
|
||||
unsigned total_count = cast(unsigned)matrix_type_total_internal_elems(mt);
|
||||
LLVMTypeRef total_matrix_type = LLVMVectorType(elem_type, total_count);
|
||||
|
||||
|
||||
#if 1
|
||||
LLVMValueRef ptr = lb_address_from_load_or_generate_local(p, matrix).value;
|
||||
LLVMValueRef matrix_vector_ptr = LLVMBuildPointerCast(p->builder, ptr, LLVMPointerType(total_matrix_type, 0), "");
|
||||
LLVMValueRef matrix_vector = LLVMBuildLoad2(p->builder, total_matrix_type, matrix_vector_ptr, "");
|
||||
LLVMSetAlignment(matrix_vector, cast(unsigned)type_align_of(mt));
|
||||
LLVMValueRef matrix_vector = OdinLLVMBuildLoadAligned(p, total_matrix_type, matrix_vector_ptr, type_align_of(mt));
|
||||
return matrix_vector;
|
||||
#else
|
||||
LLVMValueRef matrix_vector = LLVMBuildBitCast(p->builder, matrix.value, total_matrix_type, "");
|
||||
|
||||
Reference in New Issue
Block a user