brintos

brintos / llvm-project-archived public Read only

0
0
Text · 32.0 KiB · 76475ac Raw
782 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=bpfel -mcpu=v3 -filetype=asm < %s | FileCheck %s3;4; Source:5; $ cat atomics_mem_order_v3.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;   int test_fetch_add_32_ret(int _Atomic *i) {17;     return __c11_atomic_fetch_add(i, 10, memory_order_relaxed) +18;            __c11_atomic_fetch_add(i, 10, memory_order_acquire) +19;            __c11_atomic_fetch_add(i, 10, memory_order_release) +20;            __c11_atomic_fetch_add(i, 10, memory_order_acq_rel) +21;            __c11_atomic_fetch_add(i, 10, memory_order_seq_cst);22;   }23;24;   void test_fetch_add_64_noret(long _Atomic *i) {25;     (void)__c11_atomic_fetch_add(i, 10, memory_order_relaxed);26;     (void)__c11_atomic_fetch_add(i, 10, memory_order_acquire);27;     (void)__c11_atomic_fetch_add(i, 10, memory_order_release);28;     (void)__c11_atomic_fetch_add(i, 10, memory_order_acq_rel);29;     (void)__c11_atomic_fetch_add(i, 10, memory_order_seq_cst);30;   }31;32;   long test_fetch_add_64_ret(long _Atomic *i) {33;     return __c11_atomic_fetch_add(i, 10, memory_order_relaxed) +34;            __c11_atomic_fetch_add(i, 10, memory_order_acquire) +35;            __c11_atomic_fetch_add(i, 10, memory_order_release) +36;            __c11_atomic_fetch_add(i, 10, memory_order_acq_rel) +37;            __c11_atomic_fetch_add(i, 10, memory_order_seq_cst);38;   }39;40;   void test_fetch_sub_32_noret(int _Atomic *i) {41;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_relaxed);42;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_acquire);43;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_release);44;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_acq_rel);45;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_seq_cst);46;   }47;48;   int test_fetch_sub_32_ret(int _Atomic *i) {49;      return __c11_atomic_fetch_sub(i, 10, memory_order_relaxed) +50;             __c11_atomic_fetch_sub(i, 10, memory_order_acquire) +51;             __c11_atomic_fetch_sub(i, 10, memory_order_release) +52;             __c11_atomic_fetch_sub(i, 10, memory_order_acq_rel) +53;             __c11_atomic_fetch_sub(i, 10, memory_order_seq_cst);54;   }55;56;   void test_fetch_sub_64_noret(long _Atomic *i) {57;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_relaxed);58;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_acquire);59;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_release);60;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_acq_rel);61;     (void)__c11_atomic_fetch_sub(i, 10, memory_order_seq_cst);62;   }63;64;   long test_fetch_sub_64_ret(long _Atomic *i) {65;     return __c11_atomic_fetch_sub(i, 10, memory_order_relaxed) +66;            __c11_atomic_fetch_sub(i, 10, memory_order_acquire) +67;            __c11_atomic_fetch_sub(i, 10, memory_order_release) +68;            __c11_atomic_fetch_sub(i, 10, memory_order_acq_rel) +69;            __c11_atomic_fetch_sub(i, 10, memory_order_seq_cst);70;   }71;72;   void test_fetch_and_32_noret(int _Atomic *i) {73;     (void)__c11_atomic_fetch_and(i, 10, memory_order_relaxed);74;     (void)__c11_atomic_fetch_and(i, 10, memory_order_acquire);75;     (void)__c11_atomic_fetch_and(i, 10, memory_order_release);76;     (void)__c11_atomic_fetch_and(i, 10, memory_order_acq_rel);77;     (void)__c11_atomic_fetch_and(i, 10, memory_order_seq_cst);78;   }79;80;   int test_fetch_and_32_ret(int _Atomic *i) {81;     return __c11_atomic_fetch_and(i, 10, memory_order_relaxed) +82;            __c11_atomic_fetch_and(i, 10, memory_order_acquire) +83;            __c11_atomic_fetch_and(i, 10, memory_order_release) +84;            __c11_atomic_fetch_and(i, 10, memory_order_acq_rel) +85;            __c11_atomic_fetch_and(i, 10, memory_order_seq_cst);86;   }87;88;   void test_fetch_and_64_noret(long _Atomic *i) {89;     (void)__c11_atomic_fetch_and(i, 10, memory_order_relaxed);90;     (void)__c11_atomic_fetch_and(i, 10, memory_order_acquire);91;     (void)__c11_atomic_fetch_and(i, 10, memory_order_release);92;     (void)__c11_atomic_fetch_and(i, 10, memory_order_acq_rel);93;     (void)__c11_atomic_fetch_and(i, 10, memory_order_seq_cst);94;   }95;96;   long test_fetch_and_64_ret(long _Atomic *i) {97;      return __c11_atomic_fetch_and(i, 10, memory_order_relaxed) +98;             __c11_atomic_fetch_and(i, 10, memory_order_acquire) +99;             __c11_atomic_fetch_and(i, 10, memory_order_release) +100;             __c11_atomic_fetch_and(i, 10, memory_order_acq_rel) +101;             __c11_atomic_fetch_and(i, 10, memory_order_seq_cst);102;   }103;104;   void test_fetch_or_32_noret(int _Atomic *i) {105;     (void)__c11_atomic_fetch_or(i, 10, memory_order_relaxed);106;     (void)__c11_atomic_fetch_or(i, 10, memory_order_acquire);107;     (void)__c11_atomic_fetch_or(i, 10, memory_order_release);108;     (void)__c11_atomic_fetch_or(i, 10, memory_order_acq_rel);109;     (void)__c11_atomic_fetch_or(i, 10, memory_order_seq_cst);110;   }111;112;   int test_fetch_or_32_ret(int _Atomic *i) {113;      return __c11_atomic_fetch_or(i, 10, memory_order_relaxed) +114;             __c11_atomic_fetch_or(i, 10, memory_order_acquire) +115;             __c11_atomic_fetch_or(i, 10, memory_order_release) +116;             __c11_atomic_fetch_or(i, 10, memory_order_acq_rel) +117;             __c11_atomic_fetch_or(i, 10, memory_order_seq_cst);118;   }119;120;   void test_fetch_or_64_noret(long _Atomic *i) {121;     (void)__c11_atomic_fetch_or(i, 10, memory_order_relaxed);122;     (void)__c11_atomic_fetch_or(i, 10, memory_order_acquire);123;     (void)__c11_atomic_fetch_or(i, 10, memory_order_release);124;     (void)__c11_atomic_fetch_or(i, 10, memory_order_acq_rel);125;     (void)__c11_atomic_fetch_or(i, 10, memory_order_seq_cst);126;   }127;128;   long test_fetch_or_64_ret(long _Atomic *i) {129;     return __c11_atomic_fetch_or(i, 10, memory_order_relaxed) +130;            __c11_atomic_fetch_or(i, 10, memory_order_acquire) +131;            __c11_atomic_fetch_or(i, 10, memory_order_release) +132;            __c11_atomic_fetch_or(i, 10, memory_order_acq_rel) +133;            __c11_atomic_fetch_or(i, 10, memory_order_seq_cst);134;   }135;136;   void test_fetch_xor_32_noret(int _Atomic *i) {137;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_relaxed);138;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_acquire);139;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_release);140;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_acq_rel);141;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_seq_cst);142;   }143;144;   int test_fetch_xor_32_ret(int _Atomic *i) {145;     return __c11_atomic_fetch_xor(i, 10, memory_order_relaxed) +146;            __c11_atomic_fetch_xor(i, 10, memory_order_acquire) +147;            __c11_atomic_fetch_xor(i, 10, memory_order_release) +148;            __c11_atomic_fetch_xor(i, 10, memory_order_acq_rel) +149;            __c11_atomic_fetch_xor(i, 10, memory_order_seq_cst);150;   }151;152;   void test_fetch_xor_64_noret(long _Atomic *i) {153;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_relaxed);154;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_acquire);155;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_release);156;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_acq_rel);157;     (void)__c11_atomic_fetch_xor(i, 10, memory_order_seq_cst);158;   }159;160;   long test_fetch_xor_64_ret(long _Atomic *i) {161;      return __c11_atomic_fetch_xor(i, 10, memory_order_relaxed) +162;             __c11_atomic_fetch_xor(i, 10, memory_order_acquire) +163;             __c11_atomic_fetch_xor(i, 10, memory_order_release) +164;             __c11_atomic_fetch_xor(i, 10, memory_order_acq_rel) +165;             __c11_atomic_fetch_xor(i, 10, memory_order_seq_cst);166;   }167 168target triple = "bpf"169 170; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)171define dso_local void @test_fetch_add_32_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {172; CHECK-LABEL: test_fetch_add_32_noret:173; CHECK:       .Ltest_fetch_add_32_noret$local:174; CHECK-NEXT:    .type .Ltest_fetch_add_32_noret$local,@function175; CHECK-NEXT:  # %bb.0: # %entry176; CHECK-NEXT:    w2 = 10177; CHECK-NEXT:    w3 = 10178; CHECK-NEXT:    lock *(u32 *)(r1 + 0) += w3179; CHECK-NEXT:    w3 = 10180; CHECK-NEXT:    w3 = atomic_fetch_add((u32 *)(r1 + 0), w3)181; CHECK-NEXT:    w3 = 10182; CHECK-NEXT:    w3 = atomic_fetch_add((u32 *)(r1 + 0), w3)183; CHECK-NEXT:    w3 = 10184; CHECK-NEXT:    w3 = atomic_fetch_add((u32 *)(r1 + 0), w3)185; CHECK-NEXT:    w2 = atomic_fetch_add((u32 *)(r1 + 0), w2)186; CHECK-NEXT:    exit187entry:188  %0 = atomicrmw add ptr %i, i32 10 monotonic, align 4189  %1 = atomicrmw add ptr %i, i32 10 acquire, align 4190  %2 = atomicrmw add ptr %i, i32 10 release, align 4191  %3 = atomicrmw add ptr %i, i32 10 acq_rel, align 4192  %4 = atomicrmw add ptr %i, i32 10 seq_cst, align 4193  ret void194}195 196; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)197define dso_local i32 @test_fetch_add_32_ret(ptr nocapture noundef %i) local_unnamed_addr #0 {198; CHECK-LABEL: test_fetch_add_32_ret:199; CHECK:       .Ltest_fetch_add_32_ret$local:200; CHECK-NEXT:    .type .Ltest_fetch_add_32_ret$local,@function201; CHECK-NEXT:  # %bb.0: # %entry202; CHECK-NEXT:    w2 = 10203; CHECK-NEXT:    w3 = 10204; CHECK-NEXT:    lock *(u32 *)(r1 + 0) += w3205; CHECK-NEXT:    w0 = 10206; CHECK-NEXT:    w0 = atomic_fetch_add((u32 *)(r1 + 0), w0)207; CHECK-NEXT:    w0 += w3208; CHECK-NEXT:    w3 = 10209; CHECK-NEXT:    w3 = atomic_fetch_add((u32 *)(r1 + 0), w3)210; CHECK-NEXT:    w0 += w3211; CHECK-NEXT:    w3 = 10212; CHECK-NEXT:    w3 = atomic_fetch_add((u32 *)(r1 + 0), w3)213; CHECK-NEXT:    w0 += w3214; CHECK-NEXT:    w2 = atomic_fetch_add((u32 *)(r1 + 0), w2)215; CHECK-NEXT:    w0 += w2216; CHECK-NEXT:    exit217entry:218  %0 = atomicrmw add ptr %i, i32 10 monotonic, align 4219  %1 = atomicrmw add ptr %i, i32 10 acquire, align 4220  %add = add nsw i32 %1, %0221  %2 = atomicrmw add ptr %i, i32 10 release, align 4222  %add5 = add nsw i32 %add, %2223  %3 = atomicrmw add ptr %i, i32 10 acq_rel, align 4224  %add8 = add nsw i32 %add5, %3225  %4 = atomicrmw add ptr %i, i32 10 seq_cst, align 4226  %add11 = add nsw i32 %add8, %4227  ret i32 %add11228}229 230; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)231define dso_local void @test_fetch_add_64_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {232; CHECK-LABEL: test_fetch_add_64_noret:233; CHECK:       .Ltest_fetch_add_64_noret$local:234; CHECK-NEXT:    .type .Ltest_fetch_add_64_noret$local,@function235; CHECK-NEXT:  # %bb.0: # %entry236; CHECK-NEXT:    r2 = 10237; CHECK-NEXT:    r3 = 10238; CHECK-NEXT:    lock *(u64 *)(r1 + 0) += r3239; CHECK-NEXT:    r3 = 10240; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)241; CHECK-NEXT:    r3 = 10242; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)243; CHECK-NEXT:    r3 = 10244; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)245; CHECK-NEXT:    r2 = atomic_fetch_add((u64 *)(r1 + 0), r2)246; CHECK-NEXT:    exit247entry:248  %0 = atomicrmw add ptr %i, i64 10 monotonic, align 8249  %1 = atomicrmw add ptr %i, i64 10 acquire, align 8250  %2 = atomicrmw add ptr %i, i64 10 release, align 8251  %3 = atomicrmw add ptr %i, i64 10 acq_rel, align 8252  %4 = atomicrmw add ptr %i, i64 10 seq_cst, align 8253  ret void254}255 256; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)257define dso_local i64 @test_fetch_add_64_ret(ptr nocapture noundef %i) local_unnamed_addr #0 {258; CHECK-LABEL: test_fetch_add_64_ret:259; CHECK:       .Ltest_fetch_add_64_ret$local:260; CHECK-NEXT:    .type .Ltest_fetch_add_64_ret$local,@function261; CHECK-NEXT:  # %bb.0: # %entry262; CHECK-NEXT:    r2 = 10263; CHECK-NEXT:    r3 = 10264; CHECK-NEXT:    lock *(u64 *)(r1 + 0) += r3265; CHECK-NEXT:    r0 = 10266; CHECK-NEXT:    r0 = atomic_fetch_add((u64 *)(r1 + 0), r0)267; CHECK-NEXT:    r0 += r3268; CHECK-NEXT:    r3 = 10269; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)270; CHECK-NEXT:    r0 += r3271; CHECK-NEXT:    r3 = 10272; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)273; CHECK-NEXT:    r0 += r3274; CHECK-NEXT:    r2 = atomic_fetch_add((u64 *)(r1 + 0), r2)275; CHECK-NEXT:    r0 += r2276; CHECK-NEXT:    exit277entry:278  %0 = atomicrmw add ptr %i, i64 10 monotonic, align 8279  %1 = atomicrmw add ptr %i, i64 10 acquire, align 8280  %add = add nsw i64 %1, %0281  %2 = atomicrmw add ptr %i, i64 10 release, align 8282  %add5 = add nsw i64 %add, %2283  %3 = atomicrmw add ptr %i, i64 10 acq_rel, align 8284  %add8 = add nsw i64 %add5, %3285  %4 = atomicrmw add ptr %i, i64 10 seq_cst, align 8286  %add11 = add nsw i64 %add8, %4287  ret i64 %add11288}289 290; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)291define dso_local void @test_fetch_sub_32_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {292; CHECK-LABEL: test_fetch_sub_32_noret:293; CHECK:       .Ltest_fetch_sub_32_noret$local:294; CHECK-NEXT:    .type .Ltest_fetch_sub_32_noret$local,@function295; CHECK-NEXT:  # %bb.0: # %entry296; CHECK-NEXT:    w2 = 10297; CHECK-NEXT:    w2 = -w2298; CHECK-NEXT:    w3 = w2299; CHECK-NEXT:    lock *(u32 *)(r1 + 0) += w3300; CHECK-NEXT:    w3 = w2301; CHECK-NEXT:    w3 = atomic_fetch_add((u32 *)(r1 + 0), w3)302; CHECK-NEXT:    w3 = w2303; CHECK-NEXT:    w3 = atomic_fetch_add((u32 *)(r1 + 0), w3)304; CHECK-NEXT:    w3 = w2305; CHECK-NEXT:    w3 = atomic_fetch_add((u32 *)(r1 + 0), w3)306; CHECK-NEXT:    w2 = atomic_fetch_add((u32 *)(r1 + 0), w2)307; CHECK-NEXT:    exit308entry:309  %0 = atomicrmw sub ptr %i, i32 10 monotonic, align 4310  %1 = atomicrmw sub ptr %i, i32 10 acquire, align 4311  %2 = atomicrmw sub ptr %i, i32 10 release, align 4312  %3 = atomicrmw sub ptr %i, i32 10 acq_rel, align 4313  %4 = atomicrmw sub ptr %i, i32 10 seq_cst, align 4314  ret void315}316 317; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)318define dso_local i32 @test_fetch_sub_32_ret(ptr nocapture noundef %i) local_unnamed_addr #0 {319; CHECK-LABEL: test_fetch_sub_32_ret:320; CHECK:       .Ltest_fetch_sub_32_ret$local:321; CHECK-NEXT:    .type .Ltest_fetch_sub_32_ret$local,@function322; CHECK-NEXT:  # %bb.0: # %entry323; CHECK-NEXT:    w2 = 10324; CHECK-NEXT:    w2 = -w2325; CHECK-NEXT:    w3 = w2326; CHECK-NEXT:    lock *(u32 *)(r1 + 0) += w3327; CHECK-NEXT:    w0 = w2328; CHECK-NEXT:    w0 = atomic_fetch_add((u32 *)(r1 + 0), w0)329; CHECK-NEXT:    w0 += w3330; CHECK-NEXT:    w3 = w2331; CHECK-NEXT:    w3 = atomic_fetch_add((u32 *)(r1 + 0), w3)332; CHECK-NEXT:    w0 += w3333; CHECK-NEXT:    w3 = w2334; CHECK-NEXT:    w3 = atomic_fetch_add((u32 *)(r1 + 0), w3)335; CHECK-NEXT:    w0 += w3336; CHECK-NEXT:    w2 = atomic_fetch_add((u32 *)(r1 + 0), w2)337; CHECK-NEXT:    w0 += w2338; CHECK-NEXT:    exit339entry:340  %0 = atomicrmw sub ptr %i, i32 10 monotonic, align 4341  %1 = atomicrmw sub ptr %i, i32 10 acquire, align 4342  %add = add nsw i32 %1, %0343  %2 = atomicrmw sub ptr %i, i32 10 release, align 4344  %add5 = add nsw i32 %add, %2345  %3 = atomicrmw sub ptr %i, i32 10 acq_rel, align 4346  %add8 = add nsw i32 %add5, %3347  %4 = atomicrmw sub ptr %i, i32 10 seq_cst, align 4348  %add11 = add nsw i32 %add8, %4349  ret i32 %add11350}351 352; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)353define dso_local void @test_fetch_sub_64_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {354; CHECK-LABEL: test_fetch_sub_64_noret:355; CHECK:       .Ltest_fetch_sub_64_noret$local:356; CHECK-NEXT:    .type .Ltest_fetch_sub_64_noret$local,@function357; CHECK-NEXT:  # %bb.0: # %entry358; CHECK-NEXT:    r2 = 10359; CHECK-NEXT:    r2 = -r2360; CHECK-NEXT:    r3 = r2361; CHECK-NEXT:    lock *(u64 *)(r1 + 0) += r3362; CHECK-NEXT:    r3 = r2363; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)364; CHECK-NEXT:    r3 = r2365; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)366; CHECK-NEXT:    r3 = r2367; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)368; CHECK-NEXT:    r2 = atomic_fetch_add((u64 *)(r1 + 0), r2)369; CHECK-NEXT:    exit370entry:371  %0 = atomicrmw sub ptr %i, i64 10 monotonic, align 8372  %1 = atomicrmw sub ptr %i, i64 10 acquire, align 8373  %2 = atomicrmw sub ptr %i, i64 10 release, align 8374  %3 = atomicrmw sub ptr %i, i64 10 acq_rel, align 8375  %4 = atomicrmw sub ptr %i, i64 10 seq_cst, align 8376  ret void377}378 379; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)380define dso_local i64 @test_fetch_sub_64_ret(ptr nocapture noundef %i) local_unnamed_addr #0 {381; CHECK-LABEL: test_fetch_sub_64_ret:382; CHECK:       .Ltest_fetch_sub_64_ret$local:383; CHECK-NEXT:    .type .Ltest_fetch_sub_64_ret$local,@function384; CHECK-NEXT:  # %bb.0: # %entry385; CHECK-NEXT:    r2 = 10386; CHECK-NEXT:    r2 = -r2387; CHECK-NEXT:    r3 = r2388; CHECK-NEXT:    lock *(u64 *)(r1 + 0) += r3389; CHECK-NEXT:    r0 = r2390; CHECK-NEXT:    r0 = atomic_fetch_add((u64 *)(r1 + 0), r0)391; CHECK-NEXT:    r0 += r3392; CHECK-NEXT:    r3 = r2393; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)394; CHECK-NEXT:    r0 += r3395; CHECK-NEXT:    r3 = r2396; CHECK-NEXT:    r3 = atomic_fetch_add((u64 *)(r1 + 0), r3)397; CHECK-NEXT:    r0 += r3398; CHECK-NEXT:    r2 = atomic_fetch_add((u64 *)(r1 + 0), r2)399; CHECK-NEXT:    r0 += r2400; CHECK-NEXT:    exit401entry:402  %0 = atomicrmw sub ptr %i, i64 10 monotonic, align 8403  %1 = atomicrmw sub ptr %i, i64 10 acquire, align 8404  %add = add nsw i64 %1, %0405  %2 = atomicrmw sub ptr %i, i64 10 release, align 8406  %add5 = add nsw i64 %add, %2407  %3 = atomicrmw sub ptr %i, i64 10 acq_rel, align 8408  %add8 = add nsw i64 %add5, %3409  %4 = atomicrmw sub ptr %i, i64 10 seq_cst, align 8410  %add11 = add nsw i64 %add8, %4411  ret i64 %add11412}413 414; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)415define dso_local void @test_fetch_and_32_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {416; CHECK-LABEL: test_fetch_and_32_noret:417; CHECK:       .Ltest_fetch_and_32_noret$local:418; CHECK-NEXT:    .type .Ltest_fetch_and_32_noret$local,@function419; CHECK-NEXT:  # %bb.0: # %entry420; CHECK-NEXT:    w2 = 10421; CHECK-NEXT:    w3 = 10422; CHECK-NEXT:    lock *(u32 *)(r1 + 0) &= w3423; CHECK-NEXT:    w3 = 10424; CHECK-NEXT:    w3 = atomic_fetch_and((u32 *)(r1 + 0), w3)425; CHECK-NEXT:    w3 = 10426; CHECK-NEXT:    w3 = atomic_fetch_and((u32 *)(r1 + 0), w3)427; CHECK-NEXT:    w3 = 10428; CHECK-NEXT:    w3 = atomic_fetch_and((u32 *)(r1 + 0), w3)429; CHECK-NEXT:    w2 = atomic_fetch_and((u32 *)(r1 + 0), w2)430; CHECK-NEXT:    exit431entry:432  %0 = atomicrmw and ptr %i, i32 10 monotonic, align 4433  %1 = atomicrmw and ptr %i, i32 10 acquire, align 4434  %2 = atomicrmw and ptr %i, i32 10 release, align 4435  %3 = atomicrmw and ptr %i, i32 10 acq_rel, align 4436  %4 = atomicrmw and ptr %i, i32 10 seq_cst, align 4437  ret void438}439 440; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)441define dso_local i32 @test_fetch_and_32_ret(ptr nocapture noundef %i) local_unnamed_addr #0 {442; CHECK-LABEL: test_fetch_and_32_ret:443; CHECK:       .Ltest_fetch_and_32_ret$local:444; CHECK-NEXT:    .type .Ltest_fetch_and_32_ret$local,@function445; CHECK-NEXT:  # %bb.0: # %entry446; CHECK-NEXT:    w2 = 10447; CHECK-NEXT:    w3 = 10448; CHECK-NEXT:    lock *(u32 *)(r1 + 0) &= w3449; CHECK-NEXT:    w0 = 10450; CHECK-NEXT:    w0 = atomic_fetch_and((u32 *)(r1 + 0), w0)451; CHECK-NEXT:    w0 += w3452; CHECK-NEXT:    w3 = 10453; CHECK-NEXT:    w3 = atomic_fetch_and((u32 *)(r1 + 0), w3)454; CHECK-NEXT:    w0 += w3455; CHECK-NEXT:    w3 = 10456; CHECK-NEXT:    w3 = atomic_fetch_and((u32 *)(r1 + 0), w3)457; CHECK-NEXT:    w0 += w3458; CHECK-NEXT:    w2 = atomic_fetch_and((u32 *)(r1 + 0), w2)459; CHECK-NEXT:    w0 += w2460; CHECK-NEXT:    exit461entry:462  %0 = atomicrmw and ptr %i, i32 10 monotonic, align 4463  %1 = atomicrmw and ptr %i, i32 10 acquire, align 4464  %add = add nsw i32 %1, %0465  %2 = atomicrmw and ptr %i, i32 10 release, align 4466  %add5 = add nsw i32 %add, %2467  %3 = atomicrmw and ptr %i, i32 10 acq_rel, align 4468  %add8 = add nsw i32 %add5, %3469  %4 = atomicrmw and ptr %i, i32 10 seq_cst, align 4470  %add11 = add nsw i32 %add8, %4471  ret i32 %add11472}473 474; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)475define dso_local void @test_fetch_and_64_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {476; CHECK-LABEL: test_fetch_and_64_noret:477; CHECK:       .Ltest_fetch_and_64_noret$local:478; CHECK-NEXT:    .type .Ltest_fetch_and_64_noret$local,@function479; CHECK-NEXT:  # %bb.0: # %entry480; CHECK-NEXT:    r2 = 10481; CHECK-NEXT:    r3 = 10482; CHECK-NEXT:    lock *(u64 *)(r1 + 0) &= r3483; CHECK-NEXT:    r3 = 10484; CHECK-NEXT:    r3 = atomic_fetch_and((u64 *)(r1 + 0), r3)485; CHECK-NEXT:    r3 = 10486; CHECK-NEXT:    r3 = atomic_fetch_and((u64 *)(r1 + 0), r3)487; CHECK-NEXT:    r3 = 10488; CHECK-NEXT:    r3 = atomic_fetch_and((u64 *)(r1 + 0), r3)489; CHECK-NEXT:    r2 = atomic_fetch_and((u64 *)(r1 + 0), r2)490; CHECK-NEXT:    exit491entry:492  %0 = atomicrmw and ptr %i, i64 10 monotonic, align 8493  %1 = atomicrmw and ptr %i, i64 10 acquire, align 8494  %2 = atomicrmw and ptr %i, i64 10 release, align 8495  %3 = atomicrmw and ptr %i, i64 10 acq_rel, align 8496  %4 = atomicrmw and ptr %i, i64 10 seq_cst, align 8497  ret void498}499 500; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)501define dso_local i64 @test_fetch_and_64_ret(ptr nocapture noundef %i) local_unnamed_addr #0 {502; CHECK-LABEL: test_fetch_and_64_ret:503; CHECK:       .Ltest_fetch_and_64_ret$local:504; CHECK-NEXT:    .type .Ltest_fetch_and_64_ret$local,@function505; CHECK-NEXT:  # %bb.0: # %entry506; CHECK-NEXT:    r2 = 10507; CHECK-NEXT:    r3 = 10508; CHECK-NEXT:    r3 = atomic_fetch_and((u64 *)(r1 + 0), r3)509; CHECK-NEXT:    r0 = 10510; CHECK-NEXT:    r0 = atomic_fetch_and((u64 *)(r1 + 0), r0)511; CHECK-NEXT:    r0 += r3512; CHECK-NEXT:    r3 = 10513; CHECK-NEXT:    r3 = atomic_fetch_and((u64 *)(r1 + 0), r3)514; CHECK-NEXT:    r0 += r3515; CHECK-NEXT:    r3 = 10516; CHECK-NEXT:    r3 = atomic_fetch_and((u64 *)(r1 + 0), r3)517; CHECK-NEXT:    r0 += r3518; CHECK-NEXT:    r2 = atomic_fetch_and((u64 *)(r1 + 0), r2)519; CHECK-NEXT:    r0 += r2520; CHECK-NEXT:    exit521entry:522  %0 = atomicrmw and ptr %i, i64 10 monotonic, align 8523  %1 = atomicrmw and ptr %i, i64 10 acquire, align 8524  %add = add nsw i64 %1, %0525  %2 = atomicrmw and ptr %i, i64 10 release, align 8526  %add5 = add nsw i64 %add, %2527  %3 = atomicrmw and ptr %i, i64 10 acq_rel, align 8528  %add8 = add nsw i64 %add5, %3529  %4 = atomicrmw and ptr %i, i64 10 seq_cst, align 8530  %add11 = add nsw i64 %add8, %4531  ret i64 %add11532}533 534; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)535define dso_local void @test_fetch_or_32_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {536; CHECK-LABEL: test_fetch_or_32_noret:537; CHECK:       .Ltest_fetch_or_32_noret$local:538; CHECK-NEXT:    .type .Ltest_fetch_or_32_noret$local,@function539; CHECK-NEXT:  # %bb.0: # %entry540; CHECK-NEXT:    w2 = 10541; CHECK-NEXT:    w3 = 10542; CHECK-NEXT:    lock *(u32 *)(r1 + 0) |= w3543; CHECK-NEXT:    w3 = 10544; CHECK-NEXT:    w3 = atomic_fetch_or((u32 *)(r1 + 0), w3)545; CHECK-NEXT:    w3 = 10546; CHECK-NEXT:    w3 = atomic_fetch_or((u32 *)(r1 + 0), w3)547; CHECK-NEXT:    w3 = 10548; CHECK-NEXT:    w3 = atomic_fetch_or((u32 *)(r1 + 0), w3)549; CHECK-NEXT:    w2 = atomic_fetch_or((u32 *)(r1 + 0), w2)550; CHECK-NEXT:    exit551entry:552  %0 = atomicrmw or ptr %i, i32 10 monotonic, align 4553  %1 = atomicrmw or ptr %i, i32 10 acquire, align 4554  %2 = atomicrmw or ptr %i, i32 10 release, align 4555  %3 = atomicrmw or ptr %i, i32 10 acq_rel, align 4556  %4 = atomicrmw or ptr %i, i32 10 seq_cst, align 4557  ret void558}559 560; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)561define dso_local i32 @test_fetch_or_32_ret(ptr nocapture noundef %i) local_unnamed_addr #0 {562; CHECK-LABEL: test_fetch_or_32_ret:563; CHECK:       .Ltest_fetch_or_32_ret$local:564; CHECK-NEXT:    .type .Ltest_fetch_or_32_ret$local,@function565; CHECK-NEXT:  # %bb.0: # %entry566; CHECK-NEXT:    w2 = 10567; CHECK-NEXT:    w3 = 10568; CHECK-NEXT:    lock *(u32 *)(r1 + 0) |= w3569; CHECK-NEXT:    w0 = 10570; CHECK-NEXT:    w0 = atomic_fetch_or((u32 *)(r1 + 0), w0)571; CHECK-NEXT:    w0 += w3572; CHECK-NEXT:    w3 = 10573; CHECK-NEXT:    w3 = atomic_fetch_or((u32 *)(r1 + 0), w3)574; CHECK-NEXT:    w0 += w3575; CHECK-NEXT:    w3 = 10576; CHECK-NEXT:    w3 = atomic_fetch_or((u32 *)(r1 + 0), w3)577; CHECK-NEXT:    w0 += w3578; CHECK-NEXT:    w2 = atomic_fetch_or((u32 *)(r1 + 0), w2)579; CHECK-NEXT:    w0 += w2580; CHECK-NEXT:    exit581entry:582  %0 = atomicrmw or ptr %i, i32 10 monotonic, align 4583  %1 = atomicrmw or ptr %i, i32 10 acquire, align 4584  %add = add nsw i32 %1, %0585  %2 = atomicrmw or ptr %i, i32 10 release, align 4586  %add5 = add nsw i32 %add, %2587  %3 = atomicrmw or ptr %i, i32 10 acq_rel, align 4588  %add8 = add nsw i32 %add5, %3589  %4 = atomicrmw or ptr %i, i32 10 seq_cst, align 4590  %add11 = add nsw i32 %add8, %4591  ret i32 %add11592}593 594; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)595define dso_local void @test_fetch_or_64_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {596; CHECK-LABEL: test_fetch_or_64_noret:597; CHECK:       .Ltest_fetch_or_64_noret$local:598; CHECK-NEXT:    .type .Ltest_fetch_or_64_noret$local,@function599; CHECK-NEXT:  # %bb.0: # %entry600; CHECK-NEXT:    r2 = 10601; CHECK-NEXT:    r3 = 10602; CHECK-NEXT:    lock *(u64 *)(r1 + 0) |= r3603; CHECK-NEXT:    r3 = 10604; CHECK-NEXT:    r3 = atomic_fetch_or((u64 *)(r1 + 0), r3)605; CHECK-NEXT:    r3 = 10606; CHECK-NEXT:    r3 = atomic_fetch_or((u64 *)(r1 + 0), r3)607; CHECK-NEXT:    r3 = 10608; CHECK-NEXT:    r3 = atomic_fetch_or((u64 *)(r1 + 0), r3)609; CHECK-NEXT:    r2 = atomic_fetch_or((u64 *)(r1 + 0), r2)610; CHECK-NEXT:    exit611entry:612  %0 = atomicrmw or ptr %i, i64 10 monotonic, align 8613  %1 = atomicrmw or ptr %i, i64 10 acquire, align 8614  %2 = atomicrmw or ptr %i, i64 10 release, align 8615  %3 = atomicrmw or ptr %i, i64 10 acq_rel, align 8616  %4 = atomicrmw or ptr %i, i64 10 seq_cst, align 8617  ret void618}619 620; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)621define dso_local i64 @test_fetch_or_64_ret(ptr nocapture noundef %i) local_unnamed_addr #0 {622; CHECK-LABEL: test_fetch_or_64_ret:623; CHECK:       .Ltest_fetch_or_64_ret$local:624; CHECK-NEXT:    .type .Ltest_fetch_or_64_ret$local,@function625; CHECK-NEXT:  # %bb.0: # %entry626; CHECK-NEXT:    r2 = 10627; CHECK-NEXT:    r3 = 10628; CHECK-NEXT:    r3 = atomic_fetch_or((u64 *)(r1 + 0), r3)629; CHECK-NEXT:    r0 = 10630; CHECK-NEXT:    r0 = atomic_fetch_or((u64 *)(r1 + 0), r0)631; CHECK-NEXT:    r0 += r3632; CHECK-NEXT:    r3 = 10633; CHECK-NEXT:    r3 = atomic_fetch_or((u64 *)(r1 + 0), r3)634; CHECK-NEXT:    r0 += r3635; CHECK-NEXT:    r3 = 10636; CHECK-NEXT:    r3 = atomic_fetch_or((u64 *)(r1 + 0), r3)637; CHECK-NEXT:    r0 += r3638; CHECK-NEXT:    r2 = atomic_fetch_or((u64 *)(r1 + 0), r2)639; CHECK-NEXT:    r0 += r2640; CHECK-NEXT:    exit641entry:642  %0 = atomicrmw or ptr %i, i64 10 monotonic, align 8643  %1 = atomicrmw or ptr %i, i64 10 acquire, align 8644  %add = add nsw i64 %1, %0645  %2 = atomicrmw or ptr %i, i64 10 release, align 8646  %add5 = add nsw i64 %add, %2647  %3 = atomicrmw or ptr %i, i64 10 acq_rel, align 8648  %add8 = add nsw i64 %add5, %3649  %4 = atomicrmw or ptr %i, i64 10 seq_cst, align 8650  %add11 = add nsw i64 %add8, %4651  ret i64 %add11652}653 654; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)655define dso_local void @test_fetch_xor_32_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {656; CHECK-LABEL: test_fetch_xor_32_noret:657; CHECK:       .Ltest_fetch_xor_32_noret$local:658; CHECK-NEXT:    .type .Ltest_fetch_xor_32_noret$local,@function659; CHECK-NEXT:  # %bb.0: # %entry660; CHECK-NEXT:    w2 = 10661; CHECK-NEXT:    w3 = 10662; CHECK-NEXT:    lock *(u32 *)(r1 + 0) ^= w3663; CHECK-NEXT:    w3 = 10664; CHECK-NEXT:    w3 = atomic_fetch_xor((u32 *)(r1 + 0), w3)665; CHECK-NEXT:    w3 = 10666; CHECK-NEXT:    w3 = atomic_fetch_xor((u32 *)(r1 + 0), w3)667; CHECK-NEXT:    w3 = 10668; CHECK-NEXT:    w3 = atomic_fetch_xor((u32 *)(r1 + 0), w3)669; CHECK-NEXT:    w2 = atomic_fetch_xor((u32 *)(r1 + 0), w2)670; CHECK-NEXT:    exit671entry:672  %0 = atomicrmw xor ptr %i, i32 10 monotonic, align 4673  %1 = atomicrmw xor ptr %i, i32 10 acquire, align 4674  %2 = atomicrmw xor ptr %i, i32 10 release, align 4675  %3 = atomicrmw xor ptr %i, i32 10 acq_rel, align 4676  %4 = atomicrmw xor ptr %i, i32 10 seq_cst, align 4677  ret void678}679 680; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)681define dso_local i32 @test_fetch_xor_32_ret(ptr nocapture noundef %i) local_unnamed_addr #0 {682; CHECK-LABEL: test_fetch_xor_32_ret:683; CHECK:       .Ltest_fetch_xor_32_ret$local:684; CHECK-NEXT:    .type .Ltest_fetch_xor_32_ret$local,@function685; CHECK-NEXT:  # %bb.0: # %entry686; CHECK-NEXT:    w2 = 10687; CHECK-NEXT:    w3 = 10688; CHECK-NEXT:    lock *(u32 *)(r1 + 0) ^= w3689; CHECK-NEXT:    w0 = 10690; CHECK-NEXT:    w0 = atomic_fetch_xor((u32 *)(r1 + 0), w0)691; CHECK-NEXT:    w0 += w3692; CHECK-NEXT:    w3 = 10693; CHECK-NEXT:    w3 = atomic_fetch_xor((u32 *)(r1 + 0), w3)694; CHECK-NEXT:    w0 += w3695; CHECK-NEXT:    w3 = 10696; CHECK-NEXT:    w3 = atomic_fetch_xor((u32 *)(r1 + 0), w3)697; CHECK-NEXT:    w0 += w3698; CHECK-NEXT:    w2 = atomic_fetch_xor((u32 *)(r1 + 0), w2)699; CHECK-NEXT:    w0 += w2700; CHECK-NEXT:    exit701entry:702  %0 = atomicrmw xor ptr %i, i32 10 monotonic, align 4703  %1 = atomicrmw xor ptr %i, i32 10 acquire, align 4704  %add = add nsw i32 %1, %0705  %2 = atomicrmw xor ptr %i, i32 10 release, align 4706  %add5 = add nsw i32 %add, %2707  %3 = atomicrmw xor ptr %i, i32 10 acq_rel, align 4708  %add8 = add nsw i32 %add5, %3709  %4 = atomicrmw xor ptr %i, i32 10 seq_cst, align 4710  %add11 = add nsw i32 %add8, %4711  ret i32 %add11712}713 714; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)715define dso_local void @test_fetch_xor_64_noret(ptr nocapture noundef %i) local_unnamed_addr #0 {716; CHECK-LABEL: test_fetch_xor_64_noret:717; CHECK:       .Ltest_fetch_xor_64_noret$local:718; CHECK-NEXT:    .type .Ltest_fetch_xor_64_noret$local,@function719; CHECK-NEXT:  # %bb.0: # %entry720; CHECK-NEXT:    r2 = 10721; CHECK-NEXT:    r3 = 10722; CHECK-NEXT:    lock *(u64 *)(r1 + 0) ^= r3723; CHECK-NEXT:    r3 = 10724; CHECK-NEXT:    r3 = atomic_fetch_xor((u64 *)(r1 + 0), r3)725; CHECK-NEXT:    r3 = 10726; CHECK-NEXT:    r3 = atomic_fetch_xor((u64 *)(r1 + 0), r3)727; CHECK-NEXT:    r3 = 10728; CHECK-NEXT:    r3 = atomic_fetch_xor((u64 *)(r1 + 0), r3)729; CHECK-NEXT:    r2 = atomic_fetch_xor((u64 *)(r1 + 0), r2)730; CHECK-NEXT:    exit731entry:732  %0 = atomicrmw xor ptr %i, i64 10 monotonic, align 8733  %1 = atomicrmw xor ptr %i, i64 10 acquire, align 8734  %2 = atomicrmw xor ptr %i, i64 10 release, align 8735  %3 = atomicrmw xor ptr %i, i64 10 acq_rel, align 8736  %4 = atomicrmw xor ptr %i, i64 10 seq_cst, align 8737  ret void738}739 740; Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite)741define dso_local i64 @test_fetch_xor_64_ret(ptr nocapture noundef %i) local_unnamed_addr #0 {742; CHECK-LABEL: test_fetch_xor_64_ret:743; CHECK:       .Ltest_fetch_xor_64_ret$local:744; CHECK-NEXT:    .type .Ltest_fetch_xor_64_ret$local,@function745; CHECK-NEXT:  # %bb.0: # %entry746; CHECK-NEXT:    r2 = 10747; CHECK-NEXT:    r3 = 10748; CHECK-NEXT:    r3 = atomic_fetch_xor((u64 *)(r1 + 0), r3)749; CHECK-NEXT:    r0 = 10750; CHECK-NEXT:    r0 = atomic_fetch_xor((u64 *)(r1 + 0), r0)751; CHECK-NEXT:    r0 += r3752; CHECK-NEXT:    r3 = 10753; CHECK-NEXT:    r3 = atomic_fetch_xor((u64 *)(r1 + 0), r3)754; CHECK-NEXT:    r0 += r3755; CHECK-NEXT:    r3 = 10756; CHECK-NEXT:    r3 = atomic_fetch_xor((u64 *)(r1 + 0), r3)757; CHECK-NEXT:    r0 += r3758; CHECK-NEXT:    r2 = atomic_fetch_xor((u64 *)(r1 + 0), r2)759; CHECK-NEXT:    r0 += r2760; CHECK-NEXT:    exit761entry:762  %0 = atomicrmw xor ptr %i, i64 10 monotonic, align 8763  %1 = atomicrmw xor ptr %i, i64 10 acquire, align 8764  %add = add nsw i64 %1, %0765  %2 = atomicrmw xor ptr %i, i64 10 release, align 8766  %add5 = add nsw i64 %add, %2767  %3 = atomicrmw xor ptr %i, i64 10 acq_rel, align 8768  %add8 = add nsw i64 %add5, %3769  %4 = atomicrmw xor ptr %i, i64 10 seq_cst, align 8770  %add11 = add nsw i64 %add8, %4771  ret i64 %add11772}773 774attributes #0 = { mustprogress nofree norecurse nounwind willreturn memory(argmem: readwrite) "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="v3" }775 776!llvm.module.flags = !{!0, !1}777!llvm.ident = !{!2}778 779!0 = !{i32 1, !"wchar_size", i32 4}780!1 = !{i32 7, !"frame-pointer", i32 2}781!2 = !{!"clang version 20.0.0git (git@github.com:yonghong-song/llvm-project.git 6f71e34e194dab5a52cb2211af575c6067e9e504)"}782