brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.8 KiB · 9da127c Raw
386 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=bpfel -mcpu=v1 -filetype=asm < %s | FileCheck %s3;4; Source:5; $ cat atomics_mem_order_v1.c6;   #include <stdatomic.h>7;8;   void test_fetch_add_32_noret(int _Atomic *i) {9;     (void)__c11_atomic_fetch_add(i, 10, memory_order_relaxed);10;     (void)__c11_atomic_fetch_add(i, 10, memory_order_acquire);11;     (void)__c11_atomic_fetch_add(i, 10, memory_order_release);12;     (void)__c11_atomic_fetch_add(i, 10, memory_order_acq_rel);13;     (void)__c11_atomic_fetch_add(i, 10, memory_order_seq_cst);14;   }15;16;   void test_fetch_add_64_noret(long _Atomic *i) {17;     (void)__c11_atomic_fetch_add(i, 10, memory_order_relaxed);18;     (void)__c11_atomic_fetch_add(i, 10, memory_order_acquire);19;     (void)__c11_atomic_fetch_add(i, 10, memory_order_release);20;     (void)__c11_atomic_fetch_add(i, 10, memory_order_acq_rel);21;     (void)__c11_atomic_fetch_add(i, 10, memory_order_seq_cst);22;   }23;24;   void test_fetch_sub_64_noret(long _Atomic *i) {25;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_relaxed);26;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_acquire);27;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_release);28;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_acq_rel);29;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_seq_cst);30;   }31;32;   long test_fetch_sub_64_ret(long _Atomic *i) {33;      return __c11_atomic_fetch_sub(i, 10, memory_order_acquire) +34;             __c11_atomic_fetch_sub(i, 10, memory_order_release) +35;             __c11_atomic_fetch_sub(i, 10, memory_order_acq_rel) +36;             __c11_atomic_fetch_sub(i, 10, memory_order_seq_cst);37;   }38;39;   void test_fetch_and_64_noret(long _Atomic *i) {40;     (void)__c11_atomic_fetch_and(i, 10, memory_order_relaxed);41;     (void)__c11_atomic_fetch_and(i, 10, memory_order_acquire);42;     (void)__c11_atomic_fetch_and(i, 10, memory_order_release);43;     (void)__c11_atomic_fetch_and(i, 10, memory_order_acq_rel);44;     (void)__c11_atomic_fetch_and(i, 10, memory_order_seq_cst);45;   }46;47;   long test_fetch_and_64_ret(long _Atomic *i) {48;     return __c11_atomic_fetch_and(i, 10, memory_order_relaxed) +49;            __c11_atomic_fetch_and(i, 10, memory_order_acquire) +50;            __c11_atomic_fetch_and(i, 10, memory_order_release) +51;            __c11_atomic_fetch_and(i, 10, memory_order_acq_rel) +52;            __c11_atomic_fetch_and(i, 10, memory_order_seq_cst);53;   }54;55;   void test_fetch_or_64_noret(long _Atomic *i) {56;     (void)__c11_atomic_fetch_or(i, 10, memory_order_relaxed);57;     (void)__c11_atomic_fetch_or(i, 10, memory_order_acquire);58;     (void)__c11_atomic_fetch_or(i, 10, memory_order_release);59;     (void)__c11_atomic_fetch_or(i, 10, memory_order_acq_rel);60;     (void)__c11_atomic_fetch_or(i, 10, memory_order_seq_cst);61;   }62;63;   long test_fetch_or_64_ret(long _Atomic *i) {64;     return __c11_atomic_fetch_or(i, 10, memory_order_relaxed) +65;            __c11_atomic_fetch_or(i, 10, memory_order_acquire) +66;            __c11_atomic_fetch_or(i, 10, memory_order_release) +67;            __c11_atomic_fetch_or(i, 10, memory_order_acq_rel) +68;            __c11_atomic_fetch_or(i, 10, memory_order_seq_cst);69;   }70;71;   void test_fetch_xor_64_noret(long _Atomic *i) {72;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_relaxed);73;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_acquire);74;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_release);75;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_acq_rel);76;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_seq_cst);77;   }78;79;   long test_fetch_xor_64_ret(long _Atomic *i) {80;     return __c11_atomic_fetch_xor(i, 10, memory_order_relaxed) +81;            __c11_atomic_fetch_xor(i, 10, memory_order_acquire) +82;            __c11_atomic_fetch_xor(i, 10, memory_order_release) +83;            __c11_atomic_fetch_xor(i, 10, memory_order_acq_rel) +84;            __c11_atomic_fetch_xor(i, 10, memory_order_seq_cst);85;   }86 87target triple = "bpf"88 89; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)90define dso_local void @test_fetch_add_32_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {91; CHECK-LABEL: test_fetch_add_32_noret:92; CHECK:       .Ltest_fetch_add_32_noret$local:93; CHECK-NEXT:    .type .Ltest_fetch_add_32_noret$local,@function94; CHECK-NEXT:  # %bb.0: # %entry95; CHECK-NEXT:    r2 = 1096; CHECK-NEXT:    r3 = 1097; CHECK-NEXT:    lock *(u32 *)(r1 + 0) += r398; CHECK-NEXT:    r3 = 1099; CHECK-NEXT:    lock *(u32 *)(r1 + 0) += r3100; CHECK-NEXT:    r3 = 10101; CHECK-NEXT:    lock *(u32 *)(r1 + 0) += r3102; CHECK-NEXT:    r3 = 10103; CHECK-NEXT:    lock *(u32 *)(r1 + 0) += r3104; CHECK-NEXT:    lock *(u32 *)(r1 + 0) += r2105; CHECK-NEXT:    exit106entry:107  %0 = atomicrmw add ptr %i, i32 10 monotonic, align 4108  %1 = atomicrmw add ptr %i, i32 10 acquire, align 4109  %2 = atomicrmw add ptr %i, i32 10 release, align 4110  %3 = atomicrmw add ptr %i, i32 10 acq_rel, align 4111  %4 = atomicrmw add ptr %i, i32 10 seq_cst, align 4112  ret void113}114 115; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)116define dso_local void @test_fetch_add_64_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {117; CHECK-LABEL: test_fetch_add_64_noret:118; CHECK:       .Ltest_fetch_add_64_noret$local:119; CHECK-NEXT:    .type .Ltest_fetch_add_64_noret$local,@function120; CHECK-NEXT:  # %bb.0: # %entry121; CHECK-NEXT:    r2 = 10122; CHECK-NEXT:    r3 = 10123; CHECK-NEXT:    lock *(u64 *)(r1 + 0) += r3124; CHECK-NEXT:    r3 = 10125; CHECK-NEXT:    lock *(u64 *)(r1 + 0) += r3126; CHECK-NEXT:    r3 = 10127; CHECK-NEXT:    lock *(u64 *)(r1 + 0) += r3128; CHECK-NEXT:    r3 = 10129; CHECK-NEXT:    lock *(u64 *)(r1 + 0) += r3130; CHECK-NEXT:    lock *(u64 *)(r1 + 0) += r2131; CHECK-NEXT:    exit132entry:133  %0 = atomicrmw add ptr %i, i64 10 monotonic, align 8134  %1 = atomicrmw add ptr %i, i64 10 acquire, align 8135  %2 = atomicrmw add ptr %i, i64 10 release, align 8136  %3 = atomicrmw add ptr %i, i64 10 acq_rel, align 8137  %4 = atomicrmw add ptr %i, i64 10 seq_cst, align 8138  ret void139}140 141; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)142define dso_local void @test_fetch_sub_64_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {143; CHECK-LABEL: test_fetch_sub_64_noret:144; CHECK:       .Ltest_fetch_sub_64_noret$local:145; CHECK-NEXT:    .type .Ltest_fetch_sub_64_noret$local,@function146; CHECK-NEXT:  # %bb.0: # %entry147; CHECK-NEXT:    r2 = 10148; CHECK-NEXT:    r2 = -r2149; CHECK-NEXT:    r3 = r2150; CHECK-NEXT:    lock *(u64 *)(r1 + 0) += r3151; CHECK-NEXT:    r3 = r2152; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)153; CHECK-NEXT:    r3 = r2154; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)155; CHECK-NEXT:    r3 = r2156; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)157; CHECK-NEXT:    r2 = atomic_fetch_add((u64 *)(r1 + 0), r2)158; CHECK-NEXT:    exit159entry:160  %0 = atomicrmw sub ptr %i, i64 10 monotonic, align 8161  %1 = atomicrmw sub ptr %i, i64 10 acquire, align 8162  %2 = atomicrmw sub ptr %i, i64 10 release, align 8163  %3 = atomicrmw sub ptr %i, i64 10 acq_rel, align 8164  %4 = atomicrmw sub ptr %i, i64 10 seq_cst, align 8165  ret void166}167 168; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)169define dso_local i64 @test_fetch_sub_64_ret(ptr nocapture noundef %i) local_unnamed_addr #0 {170; CHECK-LABEL: test_fetch_sub_64_ret:171; CHECK:       .Ltest_fetch_sub_64_ret$local:172; CHECK-NEXT:    .type .Ltest_fetch_sub_64_ret$local,@function173; CHECK-NEXT:  # %bb.0: # %entry174; CHECK-NEXT:    r2 = 10175; CHECK-NEXT:    r2 = -r2176; CHECK-NEXT:    r3 = r2177; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)178; CHECK-NEXT:    r0 = r2179; CHECK-NEXT:    r0 = atomic_fetch_add((u64 *)(r1 + 0), r0)180; CHECK-NEXT:    r0 += r3181; CHECK-NEXT:    r3 = r2182; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)183; CHECK-NEXT:    r0 += r3184; CHECK-NEXT:    r2 = atomic_fetch_add((u64 *)(r1 + 0), r2)185; CHECK-NEXT:    r0 += r2186; CHECK-NEXT:    exit187entry:188  %0 = atomicrmw sub ptr %i, i64 10 acquire, align 8189  %1 = atomicrmw sub ptr %i, i64 10 release, align 8190  %add = add nsw i64 %1, %0191  %2 = atomicrmw sub ptr %i, i64 10 acq_rel, align 8192  %add5 = add nsw i64 %add, %2193  %3 = atomicrmw sub ptr %i, i64 10 seq_cst, align 8194  %add8 = add nsw i64 %add5, %3195  ret i64 %add8196}197 198; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)199define dso_local void @test_fetch_and_64_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {200; CHECK-LABEL: test_fetch_and_64_noret:201; CHECK:       .Ltest_fetch_and_64_noret$local:202; CHECK-NEXT:    .type .Ltest_fetch_and_64_noret$local,@function203; CHECK-NEXT:  # %bb.0: # %entry204; CHECK-NEXT:    r2 = 10205; CHECK-NEXT:    r3 = 10206; CHECK-NEXT:    lock *(u64 *)(r1 + 0) &= r3207; CHECK-NEXT:    r3 = 10208; CHECK-NEXT:    r3 = atomic_fetch_and((u64 *)(r1 + 0), r3)209; CHECK-NEXT:    r3 = 10210; CHECK-NEXT:    r3 = atomic_fetch_and((u64 *)(r1 + 0), r3)211; CHECK-NEXT:    r3 = 10212; CHECK-NEXT:    r3 = atomic_fetch_and((u64 *)(r1 + 0), r3)213; CHECK-NEXT:    r2 = atomic_fetch_and((u64 *)(r1 + 0), r2)214; CHECK-NEXT:    exit215entry:216  %0 = atomicrmw and ptr %i, i64 10 monotonic, align 8217  %1 = atomicrmw and ptr %i, i64 10 acquire, align 8218  %2 = atomicrmw and ptr %i, i64 10 release, align 8219  %3 = atomicrmw and ptr %i, i64 10 acq_rel, align 8220  %4 = atomicrmw and ptr %i, i64 10 seq_cst, align 8221  ret void222}223 224; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)225define dso_local i64 @test_fetch_and_64_ret(ptr nocapture noundef %i) local_unnamed_addr #0 {226; CHECK-LABEL: test_fetch_and_64_ret:227; CHECK:       .Ltest_fetch_and_64_ret$local:228; CHECK-NEXT:    .type .Ltest_fetch_and_64_ret$local,@function229; CHECK-NEXT:  # %bb.0: # %entry230; CHECK-NEXT:    r2 = 10231; CHECK-NEXT:    r3 = 10232; CHECK-NEXT:    r3 = atomic_fetch_and((u64 *)(r1 + 0), r3)233; CHECK-NEXT:    r0 = 10234; CHECK-NEXT:    r0 = atomic_fetch_and((u64 *)(r1 + 0), r0)235; CHECK-NEXT:    r0 += r3236; CHECK-NEXT:    r3 = 10237; CHECK-NEXT:    r3 = atomic_fetch_and((u64 *)(r1 + 0), r3)238; CHECK-NEXT:    r0 += r3239; CHECK-NEXT:    r3 = 10240; CHECK-NEXT:    r3 = atomic_fetch_and((u64 *)(r1 + 0), r3)241; CHECK-NEXT:    r0 += r3242; CHECK-NEXT:    r2 = atomic_fetch_and((u64 *)(r1 + 0), r2)243; CHECK-NEXT:    r0 += r2244; CHECK-NEXT:    exit245entry:246  %0 = atomicrmw and ptr %i, i64 10 monotonic, align 8247  %1 = atomicrmw and ptr %i, i64 10 acquire, align 8248  %add = add nsw i64 %1, %0249  %2 = atomicrmw and ptr %i, i64 10 release, align 8250  %add5 = add nsw i64 %add, %2251  %3 = atomicrmw and ptr %i, i64 10 acq_rel, align 8252  %add8 = add nsw i64 %add5, %3253  %4 = atomicrmw and ptr %i, i64 10 seq_cst, align 8254  %add11 = add nsw i64 %add8, %4255  ret i64 %add11256}257 258; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)259define dso_local void @test_fetch_or_64_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {260; CHECK-LABEL: test_fetch_or_64_noret:261; CHECK:       .Ltest_fetch_or_64_noret$local:262; CHECK-NEXT:    .type .Ltest_fetch_or_64_noret$local,@function263; CHECK-NEXT:  # %bb.0: # %entry264; CHECK-NEXT:    r2 = 10265; CHECK-NEXT:    r3 = 10266; CHECK-NEXT:    lock *(u64 *)(r1 + 0) |= r3267; CHECK-NEXT:    r3 = 10268; CHECK-NEXT:    r3 = atomic_fetch_or((u64 *)(r1 + 0), r3)269; CHECK-NEXT:    r3 = 10270; CHECK-NEXT:    r3 = atomic_fetch_or((u64 *)(r1 + 0), r3)271; CHECK-NEXT:    r3 = 10272; CHECK-NEXT:    r3 = atomic_fetch_or((u64 *)(r1 + 0), r3)273; CHECK-NEXT:    r2 = atomic_fetch_or((u64 *)(r1 + 0), r2)274; CHECK-NEXT:    exit275entry:276  %0 = atomicrmw or ptr %i, i64 10 monotonic, align 8277  %1 = atomicrmw or ptr %i, i64 10 acquire, align 8278  %2 = atomicrmw or ptr %i, i64 10 release, align 8279  %3 = atomicrmw or ptr %i, i64 10 acq_rel, align 8280  %4 = atomicrmw or ptr %i, i64 10 seq_cst, align 8281  ret void282}283 284; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)285define dso_local i64 @test_fetch_or_64_ret(ptr nocapture noundef %i) local_unnamed_addr #0 {286; CHECK-LABEL: test_fetch_or_64_ret:287; CHECK:       .Ltest_fetch_or_64_ret$local:288; CHECK-NEXT:    .type .Ltest_fetch_or_64_ret$local,@function289; CHECK-NEXT:  # %bb.0: # %entry290; CHECK-NEXT:    r2 = 10291; CHECK-NEXT:    r3 = 10292; CHECK-NEXT:    r3 = atomic_fetch_or((u64 *)(r1 + 0), r3)293; CHECK-NEXT:    r0 = 10294; CHECK-NEXT:    r0 = atomic_fetch_or((u64 *)(r1 + 0), r0)295; CHECK-NEXT:    r0 += r3296; CHECK-NEXT:    r3 = 10297; CHECK-NEXT:    r3 = atomic_fetch_or((u64 *)(r1 + 0), r3)298; CHECK-NEXT:    r0 += r3299; CHECK-NEXT:    r3 = 10300; CHECK-NEXT:    r3 = atomic_fetch_or((u64 *)(r1 + 0), r3)301; CHECK-NEXT:    r0 += r3302; CHECK-NEXT:    r2 = atomic_fetch_or((u64 *)(r1 + 0), r2)303; CHECK-NEXT:    r0 += r2304; CHECK-NEXT:    exit305entry:306  %0 = atomicrmw or ptr %i, i64 10 monotonic, align 8307  %1 = atomicrmw or ptr %i, i64 10 acquire, align 8308  %add = add nsw i64 %1, %0309  %2 = atomicrmw or ptr %i, i64 10 release, align 8310  %add5 = add nsw i64 %add, %2311  %3 = atomicrmw or ptr %i, i64 10 acq_rel, align 8312  %add8 = add nsw i64 %add5, %3313  %4 = atomicrmw or ptr %i, i64 10 seq_cst, align 8314  %add11 = add nsw i64 %add8, %4315  ret i64 %add11316}317 318; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)319define dso_local void @test_fetch_xor_64_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {320; CHECK-LABEL: test_fetch_xor_64_noret:321; CHECK:       .Ltest_fetch_xor_64_noret$local:322; CHECK-NEXT:    .type .Ltest_fetch_xor_64_noret$local,@function323; CHECK-NEXT:  # %bb.0: # %entry324; CHECK-NEXT:    r2 = 10325; CHECK-NEXT:    r3 = 10326; CHECK-NEXT:    lock *(u64 *)(r1 + 0) ^= r3327; CHECK-NEXT:    r3 = 10328; CHECK-NEXT:    r3 = atomic_fetch_xor((u64 *)(r1 + 0), r3)329; CHECK-NEXT:    r3 = 10330; CHECK-NEXT:    r3 = atomic_fetch_xor((u64 *)(r1 + 0), r3)331; CHECK-NEXT:    r3 = 10332; CHECK-NEXT:    r3 = atomic_fetch_xor((u64 *)(r1 + 0), r3)333; CHECK-NEXT:    r2 = atomic_fetch_xor((u64 *)(r1 + 0), r2)334; CHECK-NEXT:    exit335entry:336  %0 = atomicrmw xor ptr %i, i64 10 monotonic, align 8337  %1 = atomicrmw xor ptr %i, i64 10 acquire, align 8338  %2 = atomicrmw xor ptr %i, i64 10 release, align 8339  %3 = atomicrmw xor ptr %i, i64 10 acq_rel, align 8340  %4 = atomicrmw xor ptr %i, i64 10 seq_cst, align 8341  ret void342}343 344; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)345define dso_local i64 @test_fetch_xor_64_ret(ptr nocapture noundef %i) local_unnamed_addr #0 {346; CHECK-LABEL: test_fetch_xor_64_ret:347; CHECK:       .Ltest_fetch_xor_64_ret$local:348; CHECK-NEXT:    .type .Ltest_fetch_xor_64_ret$local,@function349; CHECK-NEXT:  # %bb.0: # %entry350; CHECK-NEXT:    r2 = 10351; CHECK-NEXT:    r3 = 10352; CHECK-NEXT:    r3 = atomic_fetch_xor((u64 *)(r1 + 0), r3)353; CHECK-NEXT:    r0 = 10354; CHECK-NEXT:    r0 = atomic_fetch_xor((u64 *)(r1 + 0), r0)355; CHECK-NEXT:    r0 += r3356; CHECK-NEXT:    r3 = 10357; CHECK-NEXT:    r3 = atomic_fetch_xor((u64 *)(r1 + 0), r3)358; CHECK-NEXT:    r0 += r3359; CHECK-NEXT:    r3 = 10360; CHECK-NEXT:    r3 = atomic_fetch_xor((u64 *)(r1 + 0), r3)361; CHECK-NEXT:    r0 += r3362; CHECK-NEXT:    r2 = atomic_fetch_xor((u64 *)(r1 + 0), r2)363; CHECK-NEXT:    r0 += r2364; CHECK-NEXT:    exit365entry:366  %0 = atomicrmw xor ptr %i, i64 10 monotonic, align 8367  %1 = atomicrmw xor ptr %i, i64 10 acquire, align 8368  %add = add nsw i64 %1, %0369  %2 = atomicrmw xor ptr %i, i64 10 release, align 8370  %add5 = add nsw i64 %add, %2371  %3 = atomicrmw xor ptr %i, i64 10 acq_rel, align 8372  %add8 = add nsw i64 %add5, %3373  %4 = atomicrmw xor ptr %i, i64 10 seq_cst, align 8374  %add11 = add nsw i64 %add8, %4375  ret i64 %add11376}377 378attributes #0 = { mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite) "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="v1" }379 380!llvm.module.flags = !{!0, !1}381!llvm.ident = !{!2}382 383!0 = !{i32 1, !"wchar_size", i32 4}384!1 = !{i32 7, !"frame-pointer", i32 2}385!2 = !{!"clang version 20.0.0git (git@github.com:yonghong-song/llvm-project.git 6f71e34e194dab5a52cb2211af575c6067e9e504)"}386