define i64 @test(i64* %p) { %x = atomicrmw sub i64* %p, i64 1 seq_cst ret i64 %x } Under -mcpu=znver1 results in: pushq %rax .cfi_def_cfa_offset 16 movl $1, %esi movl $5, %edx callq __atomic_fetch_sub_8 popq %rcx .cfi_def_cfa_offset 8 retq While it should produce a "lock xaddq" instruction. This issue was introduced in https://reviews.llvm.org/D59576, where the CMPXCHG8B feature flag was not added to ZNFeatures.
I agree this looks like a typo. @craig how safe do you think it would be for FeatureCMPXCHG16B to inherit FeatureCMPXCHG8B?
I think that's probably safe. The cmpxchg16b encoding is cmpxchg8b with a rex prefix. We didn't connect cx8 to the command line in clang. So I don't think we have to worry about something like -mno-cx8 disabling cx16.
Fixed in r368324 using Simon's proposal.
(In reply to Craig Topper from comment #3) > Fixed in r368324 using Simon's proposal. Merged to release_90 in r368423.