authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-08-20 21:17:57-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-08-20 21:17:57-04:00
log81c441f8855d4c58f0b2ff86d3d007cf0bf395d3
tree13e7ad4dc3bed5bed86c570b59393aec1094252f
parent3b5a8858c29582daf37856534abe150b568a7bb7
signaturelock-open Commit is signed but in an unrecognized format.

remove incorrect assert regarding 128-bit integers

LLVM incorrectly reports 8 as the alignment of i128 on x86_64 but it correctly reports 16 as the alignment of i128 on aarch64. closes #3101

1 files changed, 2 insertions(+), 2 deletions(-)

src/analyze.cpp+2-2
......@@ -6051,12 +6051,12 @@ ZigType *make_int_type(CodeGen *g, bool is_signed, uint32_t size_in_bits) {
60516051 entry->abi_size = LLVMABISizeOfType(g->target_data_ref, entry->llvm_type);
60526052 entry->abi_align = LLVMABIAlignmentOfType(g->target_data_ref, entry->llvm_type);
60536053
6054 if (size_in_bits >= 128) {
6054 if (size_in_bits >= 128 && entry->abi_align < 16) {
60556055 // Override the incorrect alignment reported by LLVM. Clang does this as well.
60566056 // On x86_64 there are some instructions like CMPXCHG16B which require this.
60576057 // On all targets, integers 128 bits and above have ABI alignment of 16.
6058 // However for some targets, LLVM incorrectly reports this as 8.
60586059 // See: https://github.com/ziglang/zig/issues/2987
6059 assert(entry->abi_align == 8); // if this trips we can remove the workaround
60606060 entry->abi_align = 16;
60616061 }
60626062 }