aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-06-15 01:16:19 +0100
committergingerBill <bill@gingerbill.org>2021-06-15 01:16:19 +0100
commit84a4188c7214fdf0270f9f835e626fa214a98df0 (patch)
tree959472bf032336e254fcb2b4c7dc29f15aeb705c /src/llvm_backend.cpp
parent31f1e0aeaef9cd9db6777990ddd1c7c2f1ed307a (diff)
Fix #1017
Diffstat (limited to 'src/llvm_backend.cpp')
-rw-r--r--src/llvm_backend.cpp11
1 files changed, 7 insertions, 4 deletions
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_) {