[llvm] [RFC][BPF] Do atomic_fetch_*() pattern matching with memory ordering (PR #107343)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 5 21:55:33 PDT 2024
yonghong-song wrote:
> Also note:
>
> ```c
> $ cat test2.c
> long f1(_Atomic long *i) { return __c11_atomic_fetch_add(i, 10, __ATOMIC_RELAXED); }
> ```
>
> ```c
> $ clang --target=bpf -mcpu=v3 -O2 test2.c -c -o - | llvm-objdump -Sdr -
> test2.c:1:6: error: Invalid usage of the XADD return value
> 1 | long f1(_Atomic long *i) { return __c11_atomic_fetch_add(i, 10, __ATOMIC_RELAXED); }
> | ^
> 1 error generated.
>
> <stdin>: file format elf64-bpf
>
> Disassembly of section .text:
>
> 0000000000000000 <f1>:
> 0: b7 00 00 00 0a 00 00 00 r0 = 0xa
> 1: db 01 00 00 00 00 00 00 lock *(u64 *)(r1 + 0x0) += r0
> 2: 95 00 00 00 00 00 00 00 exit
> ```
>
> Which seems incorrect.
You are right. Yes, if the func return value is used, we should just use atomic_fetch_*() insns instead of locked insns.
https://github.com/llvm/llvm-project/pull/107343
More information about the llvm-commits
mailing list