brintos

brintos / llvm-project-archived public Read only

0
0
Text · 33.9 KiB · bf78429 Raw
1020 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-windows-pc-msvc -disable-post-ra -verify-machineinstrs < %s | FileCheck %s3 4@var8 = dso_local global i8 05@var16 = dso_local global i16 06@var32 = dso_local global i32 07@var64 = dso_local global i64 08 9define dso_local i8 @test_atomic_load_add_i8(i8 %offset) nounwind {10; CHECK-LABEL: test_atomic_load_add_i8:11; CHECK:       // %bb.0:12; CHECK-NEXT:    adrp x9, var813; CHECK-NEXT:    add x9, x9, :lo12:var814; CHECK-NEXT:  .LBB0_1: // %atomicrmw.start15; CHECK-NEXT:    // =>This Inner Loop Header: Depth=116; CHECK-NEXT:    ldaxrb w8, [x9]17; CHECK-NEXT:    add w10, w8, w018; CHECK-NEXT:    stlxrb w11, w10, [x9]19; CHECK-NEXT:    cbnz w11, .LBB0_120; CHECK-NEXT:  // %bb.2: // %atomicrmw.end21; CHECK-NEXT:    mov w0, w822; CHECK-NEXT:    dmb ish23; CHECK-NEXT:    ret24   %old = atomicrmw add ptr @var8, i8 %offset seq_cst25   ret i8 %old26}27 28define dso_local i16 @test_atomic_load_add_i16(i16 %offset) nounwind {29; CHECK-LABEL: test_atomic_load_add_i16:30; CHECK:       // %bb.0:31; CHECK-NEXT:    adrp x9, var1632; CHECK-NEXT:    add x9, x9, :lo12:var1633; CHECK-NEXT:  .LBB1_1: // %atomicrmw.start34; CHECK-NEXT:    // =>This Inner Loop Header: Depth=135; CHECK-NEXT:    ldaxrh w8, [x9]36; CHECK-NEXT:    add w10, w8, w037; CHECK-NEXT:    stxrh w11, w10, [x9]38; CHECK-NEXT:    cbnz w11, .LBB1_139; CHECK-NEXT:  // %bb.2: // %atomicrmw.end40; CHECK-NEXT:    mov w0, w841; CHECK-NEXT:    ret42   %old = atomicrmw add ptr @var16, i16 %offset acquire43   ret i16 %old44}45 46define dso_local i32 @test_atomic_load_add_i32(i32 %offset) nounwind {47; CHECK-LABEL: test_atomic_load_add_i32:48; CHECK:       // %bb.0:49; CHECK-NEXT:    adrp x9, var3250; CHECK-NEXT:    add x9, x9, :lo12:var3251; CHECK-NEXT:  .LBB2_1: // %atomicrmw.start52; CHECK-NEXT:    // =>This Inner Loop Header: Depth=153; CHECK-NEXT:    ldxr w8, [x9]54; CHECK-NEXT:    add w10, w8, w055; CHECK-NEXT:    stlxr w11, w10, [x9]56; CHECK-NEXT:    cbnz w11, .LBB2_157; CHECK-NEXT:  // %bb.2: // %atomicrmw.end58; CHECK-NEXT:    mov w0, w859; CHECK-NEXT:    ret60   %old = atomicrmw add ptr @var32, i32 %offset release61   ret i32 %old62}63 64define dso_local i64 @test_atomic_load_add_i64(i64 %offset) nounwind {65; CHECK-LABEL: test_atomic_load_add_i64:66; CHECK:       // %bb.0:67; CHECK-NEXT:    adrp x9, var6468; CHECK-NEXT:    add x9, x9, :lo12:var6469; CHECK-NEXT:  .LBB3_1: // %atomicrmw.start70; CHECK-NEXT:    // =>This Inner Loop Header: Depth=171; CHECK-NEXT:    ldxr x8, [x9]72; CHECK-NEXT:    add x10, x8, x073; CHECK-NEXT:    stxr w11, x10, [x9]74; CHECK-NEXT:    cbnz w11, .LBB3_175; CHECK-NEXT:  // %bb.2: // %atomicrmw.end76; CHECK-NEXT:    mov x0, x877; CHECK-NEXT:    ret78   %old = atomicrmw add ptr @var64, i64 %offset monotonic79   ret i64 %old80}81 82define dso_local i8 @test_atomic_load_sub_i8(i8 %offset) nounwind {83; CHECK-LABEL: test_atomic_load_sub_i8:84; CHECK:       // %bb.0:85; CHECK-NEXT:    adrp x9, var886; CHECK-NEXT:    add x9, x9, :lo12:var887; CHECK-NEXT:  .LBB4_1: // %atomicrmw.start88; CHECK-NEXT:    // =>This Inner Loop Header: Depth=189; CHECK-NEXT:    ldxrb w8, [x9]90; CHECK-NEXT:    sub w10, w8, w091; CHECK-NEXT:    stxrb w11, w10, [x9]92; CHECK-NEXT:    cbnz w11, .LBB4_193; CHECK-NEXT:  // %bb.2: // %atomicrmw.end94; CHECK-NEXT:    mov w0, w895; CHECK-NEXT:    ret96   %old = atomicrmw sub ptr @var8, i8 %offset monotonic97   ret i8 %old98}99 100define dso_local i16 @test_atomic_load_sub_i16(i16 %offset) nounwind {101; CHECK-LABEL: test_atomic_load_sub_i16:102; CHECK:       // %bb.0:103; CHECK-NEXT:    adrp x9, var16104; CHECK-NEXT:    add x9, x9, :lo12:var16105; CHECK-NEXT:  .LBB5_1: // %atomicrmw.start106; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1107; CHECK-NEXT:    ldxrh w8, [x9]108; CHECK-NEXT:    sub w10, w8, w0109; CHECK-NEXT:    stlxrh w11, w10, [x9]110; CHECK-NEXT:    cbnz w11, .LBB5_1111; CHECK-NEXT:  // %bb.2: // %atomicrmw.end112; CHECK-NEXT:    mov w0, w8113; CHECK-NEXT:    ret114   %old = atomicrmw sub ptr @var16, i16 %offset release115   ret i16 %old116}117 118define dso_local i32 @test_atomic_load_sub_i32(i32 %offset) nounwind {119; CHECK-LABEL: test_atomic_load_sub_i32:120; CHECK:       // %bb.0:121; CHECK-NEXT:    adrp x9, var32122; CHECK-NEXT:    add x9, x9, :lo12:var32123; CHECK-NEXT:  .LBB6_1: // %atomicrmw.start124; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1125; CHECK-NEXT:    ldaxr w8, [x9]126; CHECK-NEXT:    sub w10, w8, w0127; CHECK-NEXT:    stxr w11, w10, [x9]128; CHECK-NEXT:    cbnz w11, .LBB6_1129; CHECK-NEXT:  // %bb.2: // %atomicrmw.end130; CHECK-NEXT:    mov w0, w8131; CHECK-NEXT:    ret132   %old = atomicrmw sub ptr @var32, i32 %offset acquire133   ret i32 %old134}135 136define dso_local i64 @test_atomic_load_sub_i64(i64 %offset) nounwind {137; CHECK-LABEL: test_atomic_load_sub_i64:138; CHECK:       // %bb.0:139; CHECK-NEXT:    mov x8, x0140; CHECK-NEXT:    adrp x9, var64141; CHECK-NEXT:    add x9, x9, :lo12:var64142; CHECK-NEXT:  .LBB7_1: // %atomicrmw.start143; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1144; CHECK-NEXT:    ldaxr x0, [x9]145; CHECK-NEXT:    sub x10, x0, x8146; CHECK-NEXT:    stlxr w11, x10, [x9]147; CHECK-NEXT:    cbnz w11, .LBB7_1148; CHECK-NEXT:  // %bb.2: // %atomicrmw.end149; CHECK-NEXT:    dmb ish150; CHECK-NEXT:    ret151   %old = atomicrmw sub ptr @var64, i64 %offset seq_cst152   ret i64 %old153}154 155define dso_local i8 @test_atomic_load_and_i8(i8 %offset) nounwind {156; CHECK-LABEL: test_atomic_load_and_i8:157; CHECK:       // %bb.0:158; CHECK-NEXT:    adrp x9, var8159; CHECK-NEXT:    add x9, x9, :lo12:var8160; CHECK-NEXT:  .LBB8_1: // %atomicrmw.start161; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1162; CHECK-NEXT:    ldxrb w8, [x9]163; CHECK-NEXT:    and w10, w8, w0164; CHECK-NEXT:    stlxrb w11, w10, [x9]165; CHECK-NEXT:    cbnz w11, .LBB8_1166; CHECK-NEXT:  // %bb.2: // %atomicrmw.end167; CHECK-NEXT:    mov w0, w8168; CHECK-NEXT:    ret169   %old = atomicrmw and ptr @var8, i8 %offset release170   ret i8 %old171}172 173define dso_local i16 @test_atomic_load_and_i16(i16 %offset) nounwind {174; CHECK-LABEL: test_atomic_load_and_i16:175; CHECK:       // %bb.0:176; CHECK-NEXT:    adrp x9, var16177; CHECK-NEXT:    add x9, x9, :lo12:var16178; CHECK-NEXT:  .LBB9_1: // %atomicrmw.start179; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1180; CHECK-NEXT:    ldxrh w8, [x9]181; CHECK-NEXT:    and w10, w8, w0182; CHECK-NEXT:    stxrh w11, w10, [x9]183; CHECK-NEXT:    cbnz w11, .LBB9_1184; CHECK-NEXT:  // %bb.2: // %atomicrmw.end185; CHECK-NEXT:    mov w0, w8186; CHECK-NEXT:    ret187   %old = atomicrmw and ptr @var16, i16 %offset monotonic188   ret i16 %old189}190 191define dso_local i32 @test_atomic_load_and_i32(i32 %offset) nounwind {192; CHECK-LABEL: test_atomic_load_and_i32:193; CHECK:       // %bb.0:194; CHECK-NEXT:    adrp x9, var32195; CHECK-NEXT:    add x9, x9, :lo12:var32196; CHECK-NEXT:  .LBB10_1: // %atomicrmw.start197; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1198; CHECK-NEXT:    ldaxr w8, [x9]199; CHECK-NEXT:    and w10, w8, w0200; CHECK-NEXT:    stlxr w11, w10, [x9]201; CHECK-NEXT:    cbnz w11, .LBB10_1202; CHECK-NEXT:  // %bb.2: // %atomicrmw.end203; CHECK-NEXT:    mov w0, w8204; CHECK-NEXT:    dmb ish205; CHECK-NEXT:    ret206   %old = atomicrmw and ptr @var32, i32 %offset seq_cst207   ret i32 %old208}209 210define dso_local i64 @test_atomic_load_and_i64(i64 %offset) nounwind {211; CHECK-LABEL: test_atomic_load_and_i64:212; CHECK:       // %bb.0:213; CHECK-NEXT:    adrp x9, var64214; CHECK-NEXT:    add x9, x9, :lo12:var64215; CHECK-NEXT:  .LBB11_1: // %atomicrmw.start216; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1217; CHECK-NEXT:    ldaxr x8, [x9]218; CHECK-NEXT:    and x10, x8, x0219; CHECK-NEXT:    stxr w11, x10, [x9]220; CHECK-NEXT:    cbnz w11, .LBB11_1221; CHECK-NEXT:  // %bb.2: // %atomicrmw.end222; CHECK-NEXT:    mov x0, x8223; CHECK-NEXT:    ret224   %old = atomicrmw and ptr @var64, i64 %offset acquire225   ret i64 %old226}227 228define dso_local i8 @test_atomic_load_or_i8(i8 %offset) nounwind {229; CHECK-LABEL: test_atomic_load_or_i8:230; CHECK:       // %bb.0:231; CHECK-NEXT:    adrp x9, var8232; CHECK-NEXT:    add x9, x9, :lo12:var8233; CHECK-NEXT:  .LBB12_1: // %atomicrmw.start234; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1235; CHECK-NEXT:    ldaxrb w8, [x9]236; CHECK-NEXT:    orr w10, w8, w0237; CHECK-NEXT:    stlxrb w11, w10, [x9]238; CHECK-NEXT:    cbnz w11, .LBB12_1239; CHECK-NEXT:  // %bb.2: // %atomicrmw.end240; CHECK-NEXT:    mov w0, w8241; CHECK-NEXT:    dmb ish242; CHECK-NEXT:    ret243   %old = atomicrmw or ptr @var8, i8 %offset seq_cst244   ret i8 %old245}246 247define dso_local i16 @test_atomic_load_or_i16(i16 %offset) nounwind {248; CHECK-LABEL: test_atomic_load_or_i16:249; CHECK:       // %bb.0:250; CHECK-NEXT:    adrp x9, var16251; CHECK-NEXT:    add x9, x9, :lo12:var16252; CHECK-NEXT:  .LBB13_1: // %atomicrmw.start253; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1254; CHECK-NEXT:    ldxrh w8, [x9]255; CHECK-NEXT:    orr w10, w8, w0256; CHECK-NEXT:    stxrh w11, w10, [x9]257; CHECK-NEXT:    cbnz w11, .LBB13_1258; CHECK-NEXT:  // %bb.2: // %atomicrmw.end259; CHECK-NEXT:    mov w0, w8260; CHECK-NEXT:    ret261   %old = atomicrmw or ptr @var16, i16 %offset monotonic262   ret i16 %old263}264 265define dso_local i32 @test_atomic_load_or_i32(i32 %offset) nounwind {266; CHECK-LABEL: test_atomic_load_or_i32:267; CHECK:       // %bb.0:268; CHECK-NEXT:    adrp x9, var32269; CHECK-NEXT:    add x9, x9, :lo12:var32270; CHECK-NEXT:  .LBB14_1: // %atomicrmw.start271; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1272; CHECK-NEXT:    ldaxr w8, [x9]273; CHECK-NEXT:    orr w10, w8, w0274; CHECK-NEXT:    stxr w11, w10, [x9]275; CHECK-NEXT:    cbnz w11, .LBB14_1276; CHECK-NEXT:  // %bb.2: // %atomicrmw.end277; CHECK-NEXT:    mov w0, w8278; CHECK-NEXT:    ret279   %old = atomicrmw or ptr @var32, i32 %offset acquire280   ret i32 %old281}282 283define dso_local i64 @test_atomic_load_or_i64(i64 %offset) nounwind {284; CHECK-LABEL: test_atomic_load_or_i64:285; CHECK:       // %bb.0:286; CHECK-NEXT:    adrp x9, var64287; CHECK-NEXT:    add x9, x9, :lo12:var64288; CHECK-NEXT:  .LBB15_1: // %atomicrmw.start289; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1290; CHECK-NEXT:    ldxr x8, [x9]291; CHECK-NEXT:    orr x10, x8, x0292; CHECK-NEXT:    stlxr w11, x10, [x9]293; CHECK-NEXT:    cbnz w11, .LBB15_1294; CHECK-NEXT:  // %bb.2: // %atomicrmw.end295; CHECK-NEXT:    mov x0, x8296; CHECK-NEXT:    ret297   %old = atomicrmw or ptr @var64, i64 %offset release298   ret i64 %old299}300 301define dso_local i8 @test_atomic_load_xor_i8(i8 %offset) nounwind {302; CHECK-LABEL: test_atomic_load_xor_i8:303; CHECK:       // %bb.0:304; CHECK-NEXT:    adrp x9, var8305; CHECK-NEXT:    add x9, x9, :lo12:var8306; CHECK-NEXT:  .LBB16_1: // %atomicrmw.start307; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1308; CHECK-NEXT:    ldaxrb w8, [x9]309; CHECK-NEXT:    eor w10, w8, w0310; CHECK-NEXT:    stxrb w11, w10, [x9]311; CHECK-NEXT:    cbnz w11, .LBB16_1312; CHECK-NEXT:  // %bb.2: // %atomicrmw.end313; CHECK-NEXT:    mov w0, w8314; CHECK-NEXT:    ret315   %old = atomicrmw xor ptr @var8, i8 %offset acquire316   ret i8 %old317}318 319define dso_local i16 @test_atomic_load_xor_i16(i16 %offset) nounwind {320; CHECK-LABEL: test_atomic_load_xor_i16:321; CHECK:       // %bb.0:322; CHECK-NEXT:    adrp x9, var16323; CHECK-NEXT:    add x9, x9, :lo12:var16324; CHECK-NEXT:  .LBB17_1: // %atomicrmw.start325; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1326; CHECK-NEXT:    ldxrh w8, [x9]327; CHECK-NEXT:    eor w10, w8, w0328; CHECK-NEXT:    stlxrh w11, w10, [x9]329; CHECK-NEXT:    cbnz w11, .LBB17_1330; CHECK-NEXT:  // %bb.2: // %atomicrmw.end331; CHECK-NEXT:    mov w0, w8332; CHECK-NEXT:    ret333   %old = atomicrmw xor ptr @var16, i16 %offset release334   ret i16 %old335}336 337define dso_local i32 @test_atomic_load_xor_i32(i32 %offset) nounwind {338; CHECK-LABEL: test_atomic_load_xor_i32:339; CHECK:       // %bb.0:340; CHECK-NEXT:    adrp x9, var32341; CHECK-NEXT:    add x9, x9, :lo12:var32342; CHECK-NEXT:  .LBB18_1: // %atomicrmw.start343; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1344; CHECK-NEXT:    ldaxr w8, [x9]345; CHECK-NEXT:    eor w10, w8, w0346; CHECK-NEXT:    stlxr w11, w10, [x9]347; CHECK-NEXT:    cbnz w11, .LBB18_1348; CHECK-NEXT:  // %bb.2: // %atomicrmw.end349; CHECK-NEXT:    mov w0, w8350; CHECK-NEXT:    dmb ish351; CHECK-NEXT:    ret352   %old = atomicrmw xor ptr @var32, i32 %offset seq_cst353   ret i32 %old354}355 356define dso_local i64 @test_atomic_load_xor_i64(i64 %offset) nounwind {357; CHECK-LABEL: test_atomic_load_xor_i64:358; CHECK:       // %bb.0:359; CHECK-NEXT:    adrp x9, var64360; CHECK-NEXT:    add x9, x9, :lo12:var64361; CHECK-NEXT:  .LBB19_1: // %atomicrmw.start362; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1363; CHECK-NEXT:    ldxr x8, [x9]364; CHECK-NEXT:    eor x10, x8, x0365; CHECK-NEXT:    stxr w11, x10, [x9]366; CHECK-NEXT:    cbnz w11, .LBB19_1367; CHECK-NEXT:  // %bb.2: // %atomicrmw.end368; CHECK-NEXT:    mov x0, x8369; CHECK-NEXT:    ret370   %old = atomicrmw xor ptr @var64, i64 %offset monotonic371   ret i64 %old372}373 374define dso_local i8 @test_atomic_load_xchg_i8(i8 %offset) nounwind {375; CHECK-LABEL: test_atomic_load_xchg_i8:376; CHECK:       // %bb.0:377; CHECK-NEXT:    adrp x9, var8378; CHECK-NEXT:    add x9, x9, :lo12:var8379; CHECK-NEXT:  .LBB20_1: // %atomicrmw.start380; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1381; CHECK-NEXT:    ldxrb w8, [x9]382; CHECK-NEXT:    stxrb w10, w0, [x9]383; CHECK-NEXT:    cbnz w10, .LBB20_1384; CHECK-NEXT:  // %bb.2: // %atomicrmw.end385; CHECK-NEXT:    mov w0, w8386; CHECK-NEXT:    ret387   %old = atomicrmw xchg ptr @var8, i8 %offset monotonic388   ret i8 %old389}390 391define dso_local i16 @test_atomic_load_xchg_i16(i16 %offset) nounwind {392; CHECK-LABEL: test_atomic_load_xchg_i16:393; CHECK:       // %bb.0:394; CHECK-NEXT:    mov w8, w0395; CHECK-NEXT:    adrp x9, var16396; CHECK-NEXT:    add x9, x9, :lo12:var16397; CHECK-NEXT:  .LBB21_1: // %atomicrmw.start398; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1399; CHECK-NEXT:    ldaxrh w0, [x9]400; CHECK-NEXT:    stlxrh w10, w8, [x9]401; CHECK-NEXT:    cbnz w10, .LBB21_1402; CHECK-NEXT:  // %bb.2: // %atomicrmw.end403; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0404; CHECK-NEXT:    dmb ish405; CHECK-NEXT:    ret406   %old = atomicrmw xchg ptr @var16, i16 %offset seq_cst407   ret i16 %old408}409 410define dso_local i32 @test_atomic_load_xchg_i32(i32 %offset) nounwind {411; CHECK-LABEL: test_atomic_load_xchg_i32:412; CHECK:       // %bb.0:413; CHECK-NEXT:    mov w8, w0414; CHECK-NEXT:    adrp x9, var32415; CHECK-NEXT:    add x9, x9, :lo12:var32416; CHECK-NEXT:  .LBB22_1: // %atomicrmw.start417; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1418; CHECK-NEXT:    ldxr w0, [x9]419; CHECK-NEXT:    stlxr w10, w8, [x9]420; CHECK-NEXT:    cbnz w10, .LBB22_1421; CHECK-NEXT:  // %bb.2: // %atomicrmw.end422; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0423; CHECK-NEXT:    ret424   %old = atomicrmw xchg ptr @var32, i32 %offset release425   ret i32 %old426}427 428define dso_local i64 @test_atomic_load_xchg_i64(i64 %offset) nounwind {429; CHECK-LABEL: test_atomic_load_xchg_i64:430; CHECK:       // %bb.0:431; CHECK-NEXT:    adrp x9, var64432; CHECK-NEXT:    add x9, x9, :lo12:var64433; CHECK-NEXT:  .LBB23_1: // %atomicrmw.start434; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1435; CHECK-NEXT:    ldaxr x8, [x9]436; CHECK-NEXT:    stxr w10, x0, [x9]437; CHECK-NEXT:    cbnz w10, .LBB23_1438; CHECK-NEXT:  // %bb.2: // %atomicrmw.end439; CHECK-NEXT:    mov x0, x8440; CHECK-NEXT:    ret441   %old = atomicrmw xchg ptr @var64, i64 %offset acquire442   ret i64 %old443}444 445 446define dso_local i8 @test_atomic_load_min_i8(i8 %offset) nounwind {447; CHECK-LABEL: test_atomic_load_min_i8:448; CHECK:       // %bb.0:449; CHECK-NEXT:    adrp x9, var8450; CHECK-NEXT:    add x9, x9, :lo12:var8451; CHECK-NEXT:  .LBB24_1: // %atomicrmw.start452; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1453; CHECK-NEXT:    ldaxrb w10, [x9]454; CHECK-NEXT:    sxtb w8, w10455; CHECK-NEXT:    cmp w8, w0, sxtb456; CHECK-NEXT:    csel w10, w10, w0, le457; CHECK-NEXT:    stxrb w11, w10, [x9]458; CHECK-NEXT:    cbnz w11, .LBB24_1459; CHECK-NEXT:  // %bb.2: // %atomicrmw.end460; CHECK-NEXT:    mov w0, w8461; CHECK-NEXT:    ret462   %old = atomicrmw min ptr @var8, i8 %offset acquire463   ret i8 %old464}465 466define dso_local i16 @test_atomic_load_min_i16(i16 %offset) nounwind {467; CHECK-LABEL: test_atomic_load_min_i16:468; CHECK:       // %bb.0:469; CHECK-NEXT:    adrp x9, var16470; CHECK-NEXT:    add x9, x9, :lo12:var16471; CHECK-NEXT:  .LBB25_1: // %atomicrmw.start472; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1473; CHECK-NEXT:    ldxrh w10, [x9]474; CHECK-NEXT:    sxth w8, w10475; CHECK-NEXT:    cmp w8, w0, sxth476; CHECK-NEXT:    csel w10, w10, w0, le477; CHECK-NEXT:    stlxrh w11, w10, [x9]478; CHECK-NEXT:    cbnz w11, .LBB25_1479; CHECK-NEXT:  // %bb.2: // %atomicrmw.end480; CHECK-NEXT:    mov w0, w8481; CHECK-NEXT:    ret482   %old = atomicrmw min ptr @var16, i16 %offset release483   ret i16 %old484}485 486define dso_local i32 @test_atomic_load_min_i32(i32 %offset) nounwind {487; CHECK-LABEL: test_atomic_load_min_i32:488; CHECK:       // %bb.0:489; CHECK-NEXT:    adrp x9, var32490; CHECK-NEXT:    add x9, x9, :lo12:var32491; CHECK-NEXT:  .LBB26_1: // %atomicrmw.start492; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1493; CHECK-NEXT:    ldxr w8, [x9]494; CHECK-NEXT:    cmp w8, w0495; CHECK-NEXT:    csel w10, w8, w0, le496; CHECK-NEXT:    stxr w11, w10, [x9]497; CHECK-NEXT:    cbnz w11, .LBB26_1498; CHECK-NEXT:  // %bb.2: // %atomicrmw.end499; CHECK-NEXT:    mov w0, w8500; CHECK-NEXT:    ret501   %old = atomicrmw min ptr @var32, i32 %offset monotonic502   ret i32 %old503}504 505define dso_local i64 @test_atomic_load_min_i64(i64 %offset) nounwind {506; CHECK-LABEL: test_atomic_load_min_i64:507; CHECK:       // %bb.0:508; CHECK-NEXT:    mov x8, x0509; CHECK-NEXT:    adrp x9, var64510; CHECK-NEXT:    add x9, x9, :lo12:var64511; CHECK-NEXT:  .LBB27_1: // %atomicrmw.start512; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1513; CHECK-NEXT:    ldaxr x0, [x9]514; CHECK-NEXT:    cmp x0, x8515; CHECK-NEXT:    csel x10, x0, x8, le516; CHECK-NEXT:    stlxr w11, x10, [x9]517; CHECK-NEXT:    cbnz w11, .LBB27_1518; CHECK-NEXT:  // %bb.2: // %atomicrmw.end519; CHECK-NEXT:    dmb ish520; CHECK-NEXT:    ret521   %old = atomicrmw min ptr @var64, i64 %offset seq_cst522   ret i64 %old523}524 525define dso_local i8 @test_atomic_load_max_i8(i8 %offset) nounwind {526; CHECK-LABEL: test_atomic_load_max_i8:527; CHECK:       // %bb.0:528; CHECK-NEXT:    adrp x9, var8529; CHECK-NEXT:    add x9, x9, :lo12:var8530; CHECK-NEXT:  .LBB28_1: // %atomicrmw.start531; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1532; CHECK-NEXT:    ldaxrb w10, [x9]533; CHECK-NEXT:    sxtb w8, w10534; CHECK-NEXT:    cmp w8, w0, sxtb535; CHECK-NEXT:    csel w10, w10, w0, gt536; CHECK-NEXT:    stlxrb w11, w10, [x9]537; CHECK-NEXT:    cbnz w11, .LBB28_1538; CHECK-NEXT:  // %bb.2: // %atomicrmw.end539; CHECK-NEXT:    mov w0, w8540; CHECK-NEXT:    dmb ish541; CHECK-NEXT:    ret542   %old = atomicrmw max ptr @var8, i8 %offset seq_cst543   ret i8 %old544}545 546define dso_local i16 @test_atomic_load_max_i16(i16 %offset) nounwind {547; CHECK-LABEL: test_atomic_load_max_i16:548; CHECK:       // %bb.0:549; CHECK-NEXT:    adrp x9, var16550; CHECK-NEXT:    add x9, x9, :lo12:var16551; CHECK-NEXT:  .LBB29_1: // %atomicrmw.start552; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1553; CHECK-NEXT:    ldaxrh w10, [x9]554; CHECK-NEXT:    sxth w8, w10555; CHECK-NEXT:    cmp w8, w0, sxth556; CHECK-NEXT:    csel w10, w10, w0, gt557; CHECK-NEXT:    stxrh w11, w10, [x9]558; CHECK-NEXT:    cbnz w11, .LBB29_1559; CHECK-NEXT:  // %bb.2: // %atomicrmw.end560; CHECK-NEXT:    mov w0, w8561; CHECK-NEXT:    ret562   %old = atomicrmw max ptr @var16, i16 %offset acquire563   ret i16 %old564}565 566define dso_local i32 @test_atomic_load_max_i32(i32 %offset) nounwind {567; CHECK-LABEL: test_atomic_load_max_i32:568; CHECK:       // %bb.0:569; CHECK-NEXT:    adrp x9, var32570; CHECK-NEXT:    add x9, x9, :lo12:var32571; CHECK-NEXT:  .LBB30_1: // %atomicrmw.start572; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1573; CHECK-NEXT:    ldxr w8, [x9]574; CHECK-NEXT:    cmp w8, w0575; CHECK-NEXT:    csel w10, w8, w0, gt576; CHECK-NEXT:    stlxr w11, w10, [x9]577; CHECK-NEXT:    cbnz w11, .LBB30_1578; CHECK-NEXT:  // %bb.2: // %atomicrmw.end579; CHECK-NEXT:    mov w0, w8580; CHECK-NEXT:    ret581   %old = atomicrmw max ptr @var32, i32 %offset release582   ret i32 %old583}584 585define dso_local i64 @test_atomic_load_max_i64(i64 %offset) nounwind {586; CHECK-LABEL: test_atomic_load_max_i64:587; CHECK:       // %bb.0:588; CHECK-NEXT:    adrp x9, var64589; CHECK-NEXT:    add x9, x9, :lo12:var64590; CHECK-NEXT:  .LBB31_1: // %atomicrmw.start591; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1592; CHECK-NEXT:    ldxr x8, [x9]593; CHECK-NEXT:    cmp x8, x0594; CHECK-NEXT:    csel x10, x8, x0, gt595; CHECK-NEXT:    stxr w11, x10, [x9]596; CHECK-NEXT:    cbnz w11, .LBB31_1597; CHECK-NEXT:  // %bb.2: // %atomicrmw.end598; CHECK-NEXT:    mov x0, x8599; CHECK-NEXT:    ret600   %old = atomicrmw max ptr @var64, i64 %offset monotonic601   ret i64 %old602}603 604define dso_local i8 @test_atomic_load_umin_i8(i8 %offset) nounwind {605; CHECK-LABEL: test_atomic_load_umin_i8:606; CHECK:       // %bb.0:607; CHECK-NEXT:    adrp x8, var8608; CHECK-NEXT:    add x8, x8, :lo12:var8609; CHECK-NEXT:    and w9, w0, #0xff610; CHECK-NEXT:  .LBB32_1: // %atomicrmw.start611; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1612; CHECK-NEXT:    ldxrb w0, [x8]613; CHECK-NEXT:    cmp w0, w9614; CHECK-NEXT:    csel w10, w0, w9, ls615; CHECK-NEXT:    stxrb w11, w10, [x8]616; CHECK-NEXT:    cbnz w11, .LBB32_1617; CHECK-NEXT:  // %bb.2: // %atomicrmw.end618; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0619; CHECK-NEXT:    ret620   %old = atomicrmw umin ptr @var8, i8 %offset monotonic621   ret i8 %old622}623 624define dso_local i16 @test_atomic_load_umin_i16(i16 %offset) nounwind {625; CHECK-LABEL: test_atomic_load_umin_i16:626; CHECK:       // %bb.0:627; CHECK-NEXT:    adrp x8, var16628; CHECK-NEXT:    add x8, x8, :lo12:var16629; CHECK-NEXT:    and w9, w0, #0xffff630; CHECK-NEXT:  .LBB33_1: // %atomicrmw.start631; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1632; CHECK-NEXT:    ldaxrh w0, [x8]633; CHECK-NEXT:    cmp w0, w9634; CHECK-NEXT:    csel w10, w0, w9, ls635; CHECK-NEXT:    stxrh w11, w10, [x8]636; CHECK-NEXT:    cbnz w11, .LBB33_1637; CHECK-NEXT:  // %bb.2: // %atomicrmw.end638; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0639; CHECK-NEXT:    ret640   %old = atomicrmw umin ptr @var16, i16 %offset acquire641   ret i16 %old642}643 644define dso_local i32 @test_atomic_load_umin_i32(i32 %offset) nounwind {645; CHECK-LABEL: test_atomic_load_umin_i32:646; CHECK:       // %bb.0:647; CHECK-NEXT:    adrp x9, var32648; CHECK-NEXT:    add x9, x9, :lo12:var32649; CHECK-NEXT:  .LBB34_1: // %atomicrmw.start650; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1651; CHECK-NEXT:    ldaxr w8, [x9]652; CHECK-NEXT:    cmp w8, w0653; CHECK-NEXT:    csel w10, w8, w0, ls654; CHECK-NEXT:    stlxr w11, w10, [x9]655; CHECK-NEXT:    cbnz w11, .LBB34_1656; CHECK-NEXT:  // %bb.2: // %atomicrmw.end657; CHECK-NEXT:    mov w0, w8658; CHECK-NEXT:    dmb ish659; CHECK-NEXT:    ret660   %old = atomicrmw umin ptr @var32, i32 %offset seq_cst661   ret i32 %old662}663 664define dso_local i64 @test_atomic_load_umin_i64(i64 %offset) nounwind {665; CHECK-LABEL: test_atomic_load_umin_i64:666; CHECK:       // %bb.0:667; CHECK-NEXT:    adrp x9, var64668; CHECK-NEXT:    add x9, x9, :lo12:var64669; CHECK-NEXT:  .LBB35_1: // %atomicrmw.start670; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1671; CHECK-NEXT:    ldaxr x8, [x9]672; CHECK-NEXT:    cmp x8, x0673; CHECK-NEXT:    csel x10, x8, x0, ls674; CHECK-NEXT:    stlxr w11, x10, [x9]675; CHECK-NEXT:    cbnz w11, .LBB35_1676; CHECK-NEXT:  // %bb.2: // %atomicrmw.end677; CHECK-NEXT:    mov x0, x8678; CHECK-NEXT:    ret679   %old = atomicrmw umin ptr @var64, i64 %offset acq_rel680   ret i64 %old681}682 683define dso_local i8 @test_atomic_load_umax_i8(i8 %offset) nounwind {684; CHECK-LABEL: test_atomic_load_umax_i8:685; CHECK:       // %bb.0:686; CHECK-NEXT:    adrp x8, var8687; CHECK-NEXT:    add x8, x8, :lo12:var8688; CHECK-NEXT:    and w9, w0, #0xff689; CHECK-NEXT:  .LBB36_1: // %atomicrmw.start690; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1691; CHECK-NEXT:    ldaxrb w0, [x8]692; CHECK-NEXT:    cmp w0, w9693; CHECK-NEXT:    csel w10, w0, w9, hi694; CHECK-NEXT:    stlxrb w11, w10, [x8]695; CHECK-NEXT:    cbnz w11, .LBB36_1696; CHECK-NEXT:  // %bb.2: // %atomicrmw.end697; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0698; CHECK-NEXT:    ret699   %old = atomicrmw umax ptr @var8, i8 %offset acq_rel700   ret i8 %old701}702 703define dso_local i16 @test_atomic_load_umax_i16(i16 %offset) nounwind {704; CHECK-LABEL: test_atomic_load_umax_i16:705; CHECK:       // %bb.0:706; CHECK-NEXT:    adrp x8, var16707; CHECK-NEXT:    add x8, x8, :lo12:var16708; CHECK-NEXT:    and w9, w0, #0xffff709; CHECK-NEXT:  .LBB37_1: // %atomicrmw.start710; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1711; CHECK-NEXT:    ldxrh w0, [x8]712; CHECK-NEXT:    cmp w0, w9713; CHECK-NEXT:    csel w10, w0, w9, hi714; CHECK-NEXT:    stxrh w11, w10, [x8]715; CHECK-NEXT:    cbnz w11, .LBB37_1716; CHECK-NEXT:  // %bb.2: // %atomicrmw.end717; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0718; CHECK-NEXT:    ret719   %old = atomicrmw umax ptr @var16, i16 %offset monotonic720   ret i16 %old721}722 723define dso_local i32 @test_atomic_load_umax_i32(i32 %offset) nounwind {724; CHECK-LABEL: test_atomic_load_umax_i32:725; CHECK:       // %bb.0:726; CHECK-NEXT:    adrp x9, var32727; CHECK-NEXT:    add x9, x9, :lo12:var32728; CHECK-NEXT:  .LBB38_1: // %atomicrmw.start729; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1730; CHECK-NEXT:    ldaxr w8, [x9]731; CHECK-NEXT:    cmp w8, w0732; CHECK-NEXT:    csel w10, w8, w0, hi733; CHECK-NEXT:    stlxr w11, w10, [x9]734; CHECK-NEXT:    cbnz w11, .LBB38_1735; CHECK-NEXT:  // %bb.2: // %atomicrmw.end736; CHECK-NEXT:    mov w0, w8737; CHECK-NEXT:    dmb ish738; CHECK-NEXT:    ret739   %old = atomicrmw umax ptr @var32, i32 %offset seq_cst740   ret i32 %old741}742 743define dso_local i64 @test_atomic_load_umax_i64(i64 %offset) nounwind {744; CHECK-LABEL: test_atomic_load_umax_i64:745; CHECK:       // %bb.0:746; CHECK-NEXT:    adrp x9, var64747; CHECK-NEXT:    add x9, x9, :lo12:var64748; CHECK-NEXT:  .LBB39_1: // %atomicrmw.start749; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1750; CHECK-NEXT:    ldxr x8, [x9]751; CHECK-NEXT:    cmp x8, x0752; CHECK-NEXT:    csel x10, x8, x0, hi753; CHECK-NEXT:    stlxr w11, x10, [x9]754; CHECK-NEXT:    cbnz w11, .LBB39_1755; CHECK-NEXT:  // %bb.2: // %atomicrmw.end756; CHECK-NEXT:    mov x0, x8757; CHECK-NEXT:    ret758   %old = atomicrmw umax ptr @var64, i64 %offset release759   ret i64 %old760}761 762define dso_local i8 @test_atomic_cmpxchg_i8(i8 %wanted, i8 %new) nounwind {763; CHECK-LABEL: test_atomic_cmpxchg_i8:764; CHECK:       // %bb.0:765; CHECK-NEXT:    and w8, w0, #0xff766; CHECK-NEXT:    adrp x9, var8767; CHECK-NEXT:    add x9, x9, :lo12:var8768; CHECK-NEXT:  .LBB40_1: // %cmpxchg.start769; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1770; CHECK-NEXT:    ldaxrb w0, [x9]771; CHECK-NEXT:    cmp w0, w8772; CHECK-NEXT:    b.ne .LBB40_4773; CHECK-NEXT:  // %bb.2: // %cmpxchg.trystore774; CHECK-NEXT:    // in Loop: Header=BB40_1 Depth=1775; CHECK-NEXT:    stxrb w10, w1, [x9]776; CHECK-NEXT:    cbnz w10, .LBB40_1777; CHECK-NEXT:  // %bb.3: // %cmpxchg.end778; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0779; CHECK-NEXT:    ret780; CHECK-NEXT:  .LBB40_4: // %cmpxchg.nostore781; CHECK-NEXT:    clrex782; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0783; CHECK-NEXT:    ret784   %pair = cmpxchg ptr @var8, i8 %wanted, i8 %new acquire acquire785   %old = extractvalue { i8, i1 } %pair, 0786   ret i8 %old787}788 789define dso_local i16 @test_atomic_cmpxchg_i16(i16 %wanted, i16 %new) nounwind {790; CHECK-LABEL: test_atomic_cmpxchg_i16:791; CHECK:       // %bb.0:792; CHECK-NEXT:    and w8, w0, #0xffff793; CHECK-NEXT:    adrp x9, var16794; CHECK-NEXT:    add x9, x9, :lo12:var16795; CHECK-NEXT:  .LBB41_1: // %cmpxchg.start796; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1797; CHECK-NEXT:    ldaxrh w0, [x9]798; CHECK-NEXT:    cmp w0, w8799; CHECK-NEXT:    b.ne .LBB41_4800; CHECK-NEXT:  // %bb.2: // %cmpxchg.trystore801; CHECK-NEXT:    // in Loop: Header=BB41_1 Depth=1802; CHECK-NEXT:    stlxrh w10, w1, [x9]803; CHECK-NEXT:    cbnz w10, .LBB41_1804; CHECK-NEXT:  // %bb.3: // %cmpxchg.success805; CHECK-NEXT:    dmb ish806; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0807; CHECK-NEXT:    ret808; CHECK-NEXT:  .LBB41_4: // %cmpxchg.nostore809; CHECK-NEXT:    clrex810; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0811; CHECK-NEXT:    ret812   %pair = cmpxchg ptr @var16, i16 %wanted, i16 %new seq_cst seq_cst813   %old = extractvalue { i16, i1 } %pair, 0814   ret i16 %old815}816 817define dso_local i32 @test_atomic_cmpxchg_i32(i32 %wanted, i32 %new) nounwind {818; CHECK-LABEL: test_atomic_cmpxchg_i32:819; CHECK:       // %bb.0:820; CHECK-NEXT:    mov w8, w0821; CHECK-NEXT:    adrp x9, var32822; CHECK-NEXT:    add x9, x9, :lo12:var32823; CHECK-NEXT:  .LBB42_1: // %cmpxchg.start824; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1825; CHECK-NEXT:    ldxr w0, [x9]826; CHECK-NEXT:    cmp w0, w8827; CHECK-NEXT:    b.ne .LBB42_4828; CHECK-NEXT:  // %bb.2: // %cmpxchg.trystore829; CHECK-NEXT:    // in Loop: Header=BB42_1 Depth=1830; CHECK-NEXT:    stlxr w10, w1, [x9]831; CHECK-NEXT:    cbnz w10, .LBB42_1832; CHECK-NEXT:  // %bb.3: // %cmpxchg.end833; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0834; CHECK-NEXT:    ret835; CHECK-NEXT:  .LBB42_4: // %cmpxchg.nostore836; CHECK-NEXT:    clrex837; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x0838; CHECK-NEXT:    ret839   %pair = cmpxchg ptr @var32, i32 %wanted, i32 %new release monotonic840   %old = extractvalue { i32, i1 } %pair, 0841   ret i32 %old842}843 844define dso_local void @test_atomic_cmpxchg_i64(i64 %wanted, i64 %new) nounwind {845; CHECK-LABEL: test_atomic_cmpxchg_i64:846; CHECK:       // %bb.0:847; CHECK-NEXT:    adrp x9, var64848; CHECK-NEXT:    add x9, x9, :lo12:var64849; CHECK-NEXT:  .LBB43_1: // %cmpxchg.start850; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1851; CHECK-NEXT:    ldxr x8, [x9]852; CHECK-NEXT:    cmp x8, x0853; CHECK-NEXT:    b.ne .LBB43_4854; CHECK-NEXT:  // %bb.2: // %cmpxchg.trystore855; CHECK-NEXT:    // in Loop: Header=BB43_1 Depth=1856; CHECK-NEXT:    stxr w10, x1, [x9]857; CHECK-NEXT:    cbnz w10, .LBB43_1858; CHECK-NEXT:  .LBB43_3: // %cmpxchg.end859; CHECK-NEXT:    adrp x9, var64860; CHECK-NEXT:    str x8, [x9, :lo12:var64]861; CHECK-NEXT:    ret862; CHECK-NEXT:  .LBB43_4: // %cmpxchg.nostore863; CHECK-NEXT:    clrex864; CHECK-NEXT:    b .LBB43_3865   %pair = cmpxchg ptr @var64, i64 %wanted, i64 %new monotonic monotonic866   %old = extractvalue { i64, i1 } %pair, 0867   store i64 %old, ptr @var64868   ret void869}870 871define dso_local i8 @test_atomic_load_monotonic_i8() nounwind {872; CHECK-LABEL: test_atomic_load_monotonic_i8:873; CHECK:       // %bb.0:874; CHECK-NEXT:    adrp x8, var8875; CHECK-NEXT:    ldrb w0, [x8, :lo12:var8]876; CHECK-NEXT:    ret877  %val = load atomic i8, ptr @var8 monotonic, align 1878  ret i8 %val879}880 881define dso_local i8 @test_atomic_load_monotonic_regoff_i8(i64 %base, i64 %off) nounwind {882; CHECK-LABEL: test_atomic_load_monotonic_regoff_i8:883; CHECK:       // %bb.0:884; CHECK-NEXT:    ldrb w0, [x0, x1]885; CHECK-NEXT:    ret886  %addr_int = add i64 %base, %off887  %addr = inttoptr i64 %addr_int to ptr888  %val = load atomic i8, ptr %addr monotonic, align 1889  ret i8 %val890}891 892define dso_local i8 @test_atomic_load_acquire_i8() nounwind {893; CHECK-LABEL: test_atomic_load_acquire_i8:894; CHECK:       // %bb.0:895; CHECK-NEXT:    adrp x8, var8896; CHECK-NEXT:    add x8, x8, :lo12:var8897; CHECK-NEXT:    ldarb w0, [x8]898; CHECK-NEXT:    ret899  %val = load atomic i8, ptr @var8 acquire, align 1900  ret i8 %val901}902 903define dso_local i8 @test_atomic_load_seq_cst_i8() nounwind {904; CHECK-LABEL: test_atomic_load_seq_cst_i8:905; CHECK:       // %bb.0:906; CHECK-NEXT:    adrp x8, var8907; CHECK-NEXT:    add x8, x8, :lo12:var8908; CHECK-NEXT:    ldarb w0, [x8]909; CHECK-NEXT:    ret910  %val = load atomic i8, ptr @var8 seq_cst, align 1911  ret i8 %val912}913 914define dso_local i16 @test_atomic_load_monotonic_i16() nounwind {915; CHECK-LABEL: test_atomic_load_monotonic_i16:916; CHECK:       // %bb.0:917; CHECK-NEXT:    adrp x8, var16918; CHECK-NEXT:    ldrh w0, [x8, :lo12:var16]919; CHECK-NEXT:    ret920  %val = load atomic i16, ptr @var16 monotonic, align 2921  ret i16 %val922}923 924define dso_local i32 @test_atomic_load_monotonic_regoff_i32(i64 %base, i64 %off) nounwind {925; CHECK-LABEL: test_atomic_load_monotonic_regoff_i32:926; CHECK:       // %bb.0:927; CHECK-NEXT:    ldr w0, [x0, x1]928; CHECK-NEXT:    ret929  %addr_int = add i64 %base, %off930  %addr = inttoptr i64 %addr_int to ptr931  %val = load atomic i32, ptr %addr monotonic, align 4932  ret i32 %val933}934 935define dso_local i64 @test_atomic_load_seq_cst_i64() nounwind {936; CHECK-LABEL: test_atomic_load_seq_cst_i64:937; CHECK:       // %bb.0:938; CHECK-NEXT:    adrp x8, var64939; CHECK-NEXT:    add x8, x8, :lo12:var64940; CHECK-NEXT:    ldar x0, [x8]941; CHECK-NEXT:    ret942  %val = load atomic i64, ptr @var64 seq_cst, align 8943  ret i64 %val944}945 946define dso_local void @test_atomic_store_monotonic_i8(i8 %val) nounwind {947; CHECK-LABEL: test_atomic_store_monotonic_i8:948; CHECK:       // %bb.0:949; CHECK-NEXT:    adrp x8, var8950; CHECK-NEXT:    strb w0, [x8, :lo12:var8]951; CHECK-NEXT:    ret952  store atomic i8 %val, ptr @var8 monotonic, align 1953  ret void954}955 956define dso_local void @test_atomic_store_monotonic_regoff_i8(i64 %base, i64 %off, i8 %val) nounwind {957; CHECK-LABEL: test_atomic_store_monotonic_regoff_i8:958; CHECK:       // %bb.0:959; CHECK-NEXT:    strb w2, [x0, x1]960; CHECK-NEXT:    ret961  %addr_int = add i64 %base, %off962  %addr = inttoptr i64 %addr_int to ptr963  store atomic i8 %val, ptr %addr monotonic, align 1964  ret void965}966define dso_local void @test_atomic_store_release_i8(i8 %val) nounwind {967; CHECK-LABEL: test_atomic_store_release_i8:968; CHECK:       // %bb.0:969; CHECK-NEXT:    adrp x8, var8970; CHECK-NEXT:    add x8, x8, :lo12:var8971; CHECK-NEXT:    stlrb w0, [x8]972; CHECK-NEXT:    ret973  store atomic i8 %val, ptr @var8 release, align 1974  ret void975}976 977define dso_local void @test_atomic_store_seq_cst_i8(i8 %val) nounwind {978; CHECK-LABEL: test_atomic_store_seq_cst_i8:979; CHECK:       // %bb.0:980; CHECK-NEXT:    adrp x8, var8981; CHECK-NEXT:    add x8, x8, :lo12:var8982; CHECK-NEXT:    stlrb w0, [x8]983; CHECK-NEXT:    dmb ish984; CHECK-NEXT:    ret985  store atomic i8 %val, ptr @var8 seq_cst, align 1986  ret void987}988 989define dso_local void @test_atomic_store_monotonic_i16(i16 %val) nounwind {990; CHECK-LABEL: test_atomic_store_monotonic_i16:991; CHECK:       // %bb.0:992; CHECK-NEXT:    adrp x8, var16993; CHECK-NEXT:    strh w0, [x8, :lo12:var16]994; CHECK-NEXT:    ret995  store atomic i16 %val, ptr @var16 monotonic, align 2996  ret void997}998 999define dso_local void @test_atomic_store_monotonic_regoff_i32(i64 %base, i64 %off, i32 %val) nounwind {1000; CHECK-LABEL: test_atomic_store_monotonic_regoff_i32:1001; CHECK:       // %bb.0:1002; CHECK-NEXT:    str w2, [x0, x1]1003; CHECK-NEXT:    ret1004  %addr_int = add i64 %base, %off1005  %addr = inttoptr i64 %addr_int to ptr1006  store atomic i32 %val, ptr %addr monotonic, align 41007  ret void1008}1009 1010define dso_local void @test_atomic_store_release_i64(i64 %val) nounwind {1011; CHECK-LABEL: test_atomic_store_release_i64:1012; CHECK:       // %bb.0:1013; CHECK-NEXT:    adrp x8, var641014; CHECK-NEXT:    add x8, x8, :lo12:var641015; CHECK-NEXT:    stlr x0, [x8]1016; CHECK-NEXT:    ret1017  store atomic i64 %val, ptr @var64 release, align 81018  ret void1019}1020