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
This commit is contained in:
Andrew Kelley 2019-08-20 21:17:57 -04:00
parent 3b5a8858c2
commit 81c441f885
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9

View File

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