diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 255959377..769f5be45 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -293,12 +293,15 @@ void lb_emit_slice_bounds_check(lbProcedure *p, Token token, lbValue low, lbValu bool lb_try_update_alignment(lbValue ptr, unsigned alignment) { LLVMValueRef addr_ptr = ptr.value; - if (LLVMGetAlignment(addr_ptr) < alignment) { - if (LLVMIsAAllocaInst(addr_ptr) || LLVMIsAGlobalValue(addr_ptr)) { - LLVMSetAlignment(addr_ptr, alignment); + if (LLVMIsAGlobalValue(addr_ptr) || LLVMIsAAllocaInst(addr_ptr) || LLVMIsALoadInst(addr_ptr)) { + if (LLVMGetAlignment(addr_ptr) < alignment) { + if (LLVMIsAAllocaInst(addr_ptr) || LLVMIsAGlobalValue(addr_ptr)) { + LLVMSetAlignment(addr_ptr, alignment); + } } + return LLVMGetAlignment(addr_ptr) >= alignment; } - return LLVMGetAlignment(addr_ptr) >= alignment; + return false; } bool lb_try_vector_cast(lbModule *m, lbValue ptr, LLVMTypeRef *vector_type_) {