================
@@ -621,6 +642,16 @@ let Predicates = [BPFHasLdsx] in {
 
 def LDD : LOADi64<BPF_DW, BPF_MEM, "u64", load>;
 
+class acquiring_load<PatFrags base>
+    : PatFrag<(ops node:$ptr), (base node:$ptr)> {
+  let IsAtomic = 1;
----------------
eddyz87 wrote:
Note: in #107343 we decided to fallback to more strong orderings if there is no 
direct instruction available. However, for this pull request I get:

```
$ cat test4.c 
char load_acquire_i8(char *p) { return __atomic_load_n(p, __ATOMIC_RELAXED); }

$ clang -O2 -mcpu=v5 --target=bpf test4.c -c -o - | llvm-objdump -d -
fatal error: error in backend: Cannot select: t8: i32,ch = AtomicLoad<(load 
monotonic (s8) from %ir.p), zext from i8> t0, t2
  t2: i64,ch = CopyFromReg t0, Register:i64 %0
    t1: i64 = Register %0
In function: load_acquire_i8
...
```

While `consume` appears to work:

```
$ cat test4.c 
char load_acquire_i8(char *p) { return __atomic_load_n(p, __ATOMIC_CONSUME); }

$ clang -O2 -mcpu=v5 --target=bpf test4.c -c -o - | llvm-objdump -d -

<stdin>:        file format elf64-bpf

Disassembly of section .text:

0000000000000000 <load_acquire_i8>:
       0:       f1 10 00 00 00 00 00 00 w0 = load_acquire((u8 *)(r1 + 0x0))
       1:       95 00 00 00 00 00 00 00 exit
```

(Although, in the light of #107343 I think this should be a `lock ...` 
instruction).

Also, the error message for `SEQ_CST` should be more user friendly, at the 
moment it is:

```
$ cat test4.c 
char load_acquire_i8(char *p) { return __atomic_load_n(p, __ATOMIC_SEQ_CST); }

$ clang -O2 -mcpu=v5 --target=bpf test4.c -c -o - | llvm-objdump -d -
fatal error: error in backend: Cannot select: t8: i32,ch = AtomicLoad<(load 
seq_cst (s8) from %ir.p), zext from i8> t0, t2
  t2: i64,ch = CopyFromReg t0, Register:i64 %0
    t1: i64 = Register %0
In function: load_acquire_i8
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and 
include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
...
```

https://github.com/llvm/llvm-project/pull/108636
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to