aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-03-25 22:54:49 +0000
committergingerBill <bill@gingerbill.org>2021-03-25 22:54:49 +0000
commit6271d10af7f06ff9d740dc9da718d0f59585bea0 (patch)
treed58e61ae0ac152879459783d5c794f114bc28310 /src/llvm_backend.cpp
parentc5c82e05513c723325b4804ba04e152069ecb5b3 (diff)
Fix to `OdinLLVMBuildTransmute` to `goto general_end` on different sized data
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 08b3a3980..c4babd11e 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -2832,10 +2832,12 @@ LLVMValueRef OdinLLVMBuildTransmute(lbProcedure *p, LLVMValueRef val, LLVMTypeRe
return LLVMBuildZExtOrBitCast(p->builder, val, dst_type, "");
}
- if (src_size != dst_size && (lb_is_type_kind(src_type, LLVMVectorTypeKind) ^ lb_is_type_kind(dst_type, LLVMVectorTypeKind))) {
- // Okay
- } else {
- GB_ASSERT_MSG(src_size == dst_size, "%s == %s", LLVMPrintTypeToString(src_type), LLVMPrintTypeToString(dst_type));
+ if (src_size != dst_size) {
+ if ((lb_is_type_kind(src_type, LLVMVectorTypeKind) ^ lb_is_type_kind(dst_type, LLVMVectorTypeKind))) {
+ // Okay
+ } else {
+ goto general_end;
+ }
}
LLVMTypeKind src_kind = LLVMGetTypeKind(src_type);
@@ -2856,6 +2858,7 @@ LLVMValueRef OdinLLVMBuildTransmute(lbProcedure *p, LLVMValueRef val, LLVMTypeRe
}
}
+general_end:;
if (LLVMIsALoadInst(val) && src_size <= dst_size) {
LLVMValueRef val_ptr = LLVMGetOperand(val, 0);
val_ptr = LLVMBuildPointerCast(p->builder, val_ptr, LLVMPointerType(dst_type, 0), "");