mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-02 20:58:15 +00:00
Merge pull request #3711 from laytan/fix-swizzle-crash
fix swizzle crash due to wrong alignment
This commit is contained in:
@@ -1383,8 +1383,6 @@ gb_internal lbValue lb_addr_load(lbProcedure *p, lbAddr const &addr) {
|
|||||||
|
|
||||||
LLVMTypeRef vector_type = nullptr;
|
LLVMTypeRef vector_type = nullptr;
|
||||||
if (lb_try_vector_cast(p->module, addr.addr, &vector_type)) {
|
if (lb_try_vector_cast(p->module, addr.addr, &vector_type)) {
|
||||||
LLVMSetAlignment(res.addr.value, cast(unsigned)lb_alignof(vector_type));
|
|
||||||
|
|
||||||
LLVMValueRef vp = LLVMBuildPointerCast(p->builder, addr.addr.value, LLVMPointerType(vector_type, 0), "");
|
LLVMValueRef vp = LLVMBuildPointerCast(p->builder, addr.addr.value, LLVMPointerType(vector_type, 0), "");
|
||||||
LLVMValueRef v = LLVMBuildLoad2(p->builder, vector_type, vp, "");
|
LLVMValueRef v = LLVMBuildLoad2(p->builder, vector_type, vp, "");
|
||||||
LLVMValueRef scalars[4] = {};
|
LLVMValueRef scalars[4] = {};
|
||||||
@@ -1394,6 +1392,8 @@ gb_internal lbValue lb_addr_load(lbProcedure *p, lbAddr const &addr) {
|
|||||||
LLVMValueRef mask = LLVMConstVector(scalars, addr.swizzle.count);
|
LLVMValueRef mask = LLVMConstVector(scalars, addr.swizzle.count);
|
||||||
LLVMValueRef sv = llvm_basic_shuffle(p, v, mask);
|
LLVMValueRef sv = llvm_basic_shuffle(p, v, mask);
|
||||||
|
|
||||||
|
LLVMSetAlignment(res.addr.value, cast(unsigned)lb_alignof(LLVMTypeOf(sv)));
|
||||||
|
|
||||||
LLVMValueRef dst = LLVMBuildPointerCast(p->builder, ptr.value, LLVMPointerType(LLVMTypeOf(sv), 0), "");
|
LLVMValueRef dst = LLVMBuildPointerCast(p->builder, ptr.value, LLVMPointerType(LLVMTypeOf(sv), 0), "");
|
||||||
LLVMBuildStore(p->builder, sv, dst);
|
LLVMBuildStore(p->builder, sv, dst);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user