Targets affected: - NVPTX and BPF: set to 64 bits. - ARC, Lanai, and MSP430: set to 0 (they don't implement atomics). Those which didn't yet add AtomicExpandPass to their pass pipeline now do so. This will result in larger atomic operations getting expanded to `__atomic_*` libcalls via AtomicExpandPass. On all these targets, this now matches what Clang already does in the frontend. The only targets which do not configure AtomicExpandPass now are: - DirectX and SPIRV: they aren't normal backends. - AVR: a single-cpu architecture with no privileged/user divide, which could implement all atomics by disabling/enabling interrupts, regardless of size/alignment. Will be addressed by future work.
13 lines
363 B
LLVM
13 lines
363 B
LLVM
; RUN: llc -mtriple=bpf < %s | FileCheck %s
|
|
; XFAIL: *
|
|
; Doesn't currently build, with error 'only small returns supported'.
|
|
|
|
define void @test(ptr %a) nounwind {
|
|
; CHECK-LABEL: test:
|
|
; CHECK: call __atomic_load_16
|
|
; CHECK: call __atomic_store_16
|
|
%1 = load atomic i128, ptr %a monotonic, align 16
|
|
store atomic i128 %1, ptr %a monotonic, align 16
|
|
ret void
|
|
}
|