| ... | ... | @@ -5644,6 +5644,14 @@ pub const FuncGen = struct { |
| 5644 | 5644 | const base_ptr = self.builder.buildExtractValue(slice, 0, ""); |
| 5645 | 5645 | const indices: [1]*llvm.Value = .{index}; |
| 5646 | 5646 | const ptr = self.builder.buildInBoundsGEP(llvm_elem_ty, base_ptr, &indices, indices.len, ""); |
| 5647 | if (isByRef(elem_ty)) { |
| 5648 | if (self.canElideLoad(body_tail)) |
| 5649 | return ptr; |
| 5650 | |
| 5651 | const target = self.dg.module.getTarget(); |
| 5652 | return self.loadByRef(ptr, elem_ty, elem_ty.abiAlignment(target), false); |
| 5653 | } |
| 5654 | |
| 5647 | 5655 | return self.load(ptr, slice_ty); |
| 5648 | 5656 | } |
| 5649 | 5657 | |
| ... | ... | @@ -5709,6 +5717,14 @@ pub const FuncGen = struct { |
| 5709 | 5717 | const indices: [1]*llvm.Value = .{rhs}; |
| 5710 | 5718 | break :ptr self.builder.buildInBoundsGEP(llvm_elem_ty, base_ptr, &indices, indices.len, ""); |
| 5711 | 5719 | }; |
| 5720 | if (isByRef(elem_ty)) { |
| 5721 | if (self.canElideLoad(body_tail)) |
| 5722 | return ptr; |
| 5723 | |
| 5724 | const target = self.dg.module.getTarget(); |
| 5725 | return self.loadByRef(ptr, elem_ty, elem_ty.abiAlignment(target), false); |
| 5726 | } |
| 5727 | |
| 5712 | 5728 | return self.load(ptr, ptr_ty); |
| 5713 | 5729 | } |
| 5714 | 5730 | |
| ... | ... | @@ -5832,7 +5848,14 @@ pub const FuncGen = struct { |
| 5832 | 5848 | const struct_llvm_ty = try self.dg.lowerType(struct_ty); |
| 5833 | 5849 | const field_ptr = self.builder.buildStructGEP(struct_llvm_ty, struct_llvm_val, llvm_field_index, ""); |
| 5834 | 5850 | const field_ptr_ty = Type.initPayload(&ptr_ty_buf.base); |
| 5835 | | return self.load(field_ptr, field_ptr_ty); |
| 5851 | if (isByRef(field_ty)) { |
| 5852 | if (canElideLoad(self, body_tail)) |
| 5853 | return field_ptr; |
| 5854 | |
| 5855 | return self.loadByRef(field_ptr, field_ty, ptr_ty_buf.data.alignment(target), false); |
| 5856 | } else { |
| 5857 | return self.load(field_ptr, field_ptr_ty); |
| 5858 | } |
| 5836 | 5859 | }, |
| 5837 | 5860 | .Union => { |
| 5838 | 5861 | const union_llvm_ty = try self.dg.lowerType(struct_ty); |