[clang] [llvm] [BPF] Do atomic_fetch_*() pattern matching with memory ordering (PR #107343)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 16 16:19:05 PDT 2024
================
@@ -0,0 +1,186 @@
+; RUN: llc -march=bpfel -mcpu=v3 -filetype=asm -o - %s | FileCheck -check-prefixes=CHECK %s
+; RUN: llc -march=bpfeb -mcpu=v3 -filetype=asm -o - %s | FileCheck -check-prefixes=CHECK %s
+;
+; Source:
+; #include <stdatomic.h>
+; struct gstruct_t {
+; _Atomic int a;
+; } gstruct;
+; extern _Atomic int ext;
+; _Atomic int gbl;
+; _Atomic int *pgbl;
+; volatile _Atomic int vvar;
+; _Atomic int foo(_Atomic int a1, _Atomic int *p1) {
+; (void)__c11_atomic_fetch_add(&gstruct.a, 1, memory_order_relaxed);
+; (void)__c11_atomic_fetch_add(&ext, 1, memory_order_relaxed);
+; (void)__c11_atomic_fetch_add(&gbl, 1, memory_order_relaxed);
+; (void)__c11_atomic_fetch_add(pgbl, 1, memory_order_relaxed);
+; (void)__c11_atomic_fetch_add(&vvar, 1, memory_order_relaxed);
+; (void)__c11_atomic_fetch_add(p1, 1, memory_order_relaxed);
+;
+; return a1;
+; }
+
+target triple = "bpf"
+
+%struct.gstruct_t = type { i32 }
+
+ at gstruct = dso_local global %struct.gstruct_t zeroinitializer, align 4, !dbg !0
+ at ext = external dso_local global i32, align 4, !dbg !26
+ at gbl = dso_local global i32 0, align 4, !dbg !16
+ at pgbl = dso_local local_unnamed_addr global ptr null, align 8, !dbg !20
+ at vvar = dso_local global i32 0, align 4, !dbg !23
+
+; Function Attrs: mustprogress nofree norecurse nounwind willreturn
+define dso_local i32 @foo(i32 returned %a1, ptr nocapture noundef %p1) local_unnamed_addr #0 !dbg !37 {
+entry:
+ #dbg_value(i32 %a1, !41, !DIExpression(), !43)
+ #dbg_value(ptr %p1, !42, !DIExpression(), !43)
+ %0 = atomicrmw add ptr @gstruct, i32 1 monotonic, align 4, !dbg !44
+ %1 = atomicrmw add ptr @ext, i32 1 monotonic, align 4, !dbg !45
+ %2 = atomicrmw add ptr @gbl, i32 1 monotonic, align 4, !dbg !46
+ %3 = load ptr, ptr @pgbl, align 8, !dbg !47, !tbaa !48
+ %4 = atomicrmw add ptr %3, i32 1 monotonic, align 4, !dbg !52
+ %5 = atomicrmw volatile add ptr @vvar, i32 1 monotonic, align 4, !dbg !53
+ %6 = atomicrmw add ptr %p1, i32 1 monotonic, align 4, !dbg !54
+ ret i32 %a1, !dbg !55
+}
+
+; CHECK: .long 1 # BTF_KIND_INT(id = 1)
----------------
eddyz87 wrote:
Nit: such tests are extremely hard to follow. I suggest to reuse my old [python script](https://github.com/llvm/llvm-project/blob/14033e79d9b4988807145e52540a76889b477459/llvm/test/CodeGen/BPF/BTF/print_btf.py#L1) that hadn't made it into `main` yet.
https://github.com/llvm/llvm-project/pull/107343
More information about the cfe-commits
mailing list