aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/llvm_backend.cpp')
-rw-r--r--src/llvm_backend.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index e7ba224b3..e199b01a0 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -6886,6 +6886,17 @@ lbValue lb_emit_conv(lbProcedure *p, lbValue value, Type *t) {
i64 sz = type_size_of(default_type(src));
i64 dz = type_size_of(default_type(dst));
+
+ if (sz == dz) {
+ if (dz > 1 && !types_have_same_internal_endian(src, dst)) {
+ return lb_emit_byte_swap(p, value, t);
+ }
+ lbValue res = {};
+ res.value = value.value;
+ res.type = t;
+ return res;
+ }
+
if (sz > 1 && is_type_different_to_arch_endianness(src)) {
Type *platform_src_type = integer_endian_type_to_platform_type(src);
value = lb_emit_byte_swap(p, value, platform_src_type);