brintos

brintos / llvm-project-archived public Read only

0
0
Text · 26.5 KiB · 71ab432 Raw
745 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc %s -o - -mtriple=m68k -mcpu=M68000 -verify-machineinstrs | FileCheck %s --check-prefix=NO-ATOMIC3; RUN: llc %s -o - -mtriple=m68k -mcpu=M68010 -verify-machineinstrs | FileCheck %s --check-prefix=NO-ATOMIC4; RUN: llc %s -o - -mtriple=m68k -mcpu=M68020 -verify-machineinstrs | FileCheck %s --check-prefix=ATOMIC5; RUN: llc %s -o - -mtriple=m68k -mcpu=M68030 -verify-machineinstrs | FileCheck %s --check-prefix=ATOMIC6; RUN: llc %s -o - -mtriple=m68k -mcpu=M68040 -verify-machineinstrs | FileCheck %s --check-prefix=ATOMIC7 8define i8 @atomicrmw_add_i8(i8 %val, ptr %ptr) {9; NO-ATOMIC-LABEL: atomicrmw_add_i8:10; NO-ATOMIC:         .cfi_startproc11; NO-ATOMIC-NEXT:  ; %bb.0:12; NO-ATOMIC-NEXT:    suba.l #12, %sp13; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -1614; NO-ATOMIC-NEXT:    move.b (19,%sp), %d015; NO-ATOMIC-NEXT:    and.l #255, %d016; NO-ATOMIC-NEXT:    move.l %d0, (4,%sp)17; NO-ATOMIC-NEXT:    move.l (20,%sp), (%sp)18; NO-ATOMIC-NEXT:    jsr __sync_fetch_and_add_119; NO-ATOMIC-NEXT:    adda.l #12, %sp20; NO-ATOMIC-NEXT:    rts21;22; ATOMIC-LABEL: atomicrmw_add_i8:23; ATOMIC:         .cfi_startproc24; ATOMIC-NEXT:  ; %bb.0:25; ATOMIC-NEXT:    suba.l #8, %sp26; ATOMIC-NEXT:    .cfi_def_cfa_offset -1227; ATOMIC-NEXT:    movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill28; ATOMIC-NEXT:    move.b (15,%sp), %d129; ATOMIC-NEXT:    move.l (16,%sp), %a030; ATOMIC-NEXT:    move.b (%a0), %d231; ATOMIC-NEXT:    move.b %d2, %d032; ATOMIC-NEXT:  .LBB0_1: ; %atomicrmw.start33; ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=134; ATOMIC-NEXT:    move.b %d2, %d335; ATOMIC-NEXT:    add.b %d1, %d336; ATOMIC-NEXT:    cas.b %d0, %d3, (%a0)37; ATOMIC-NEXT:    move.b %d0, %d338; ATOMIC-NEXT:    sub.b %d2, %d339; ATOMIC-NEXT:    seq %d240; ATOMIC-NEXT:    and.b #1, %d241; ATOMIC-NEXT:    cmpi.b #0, %d242; ATOMIC-NEXT:    move.b %d0, %d243; ATOMIC-NEXT:    beq .LBB0_144; ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.end45; ATOMIC-NEXT:    movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload46; ATOMIC-NEXT:    adda.l #8, %sp47; ATOMIC-NEXT:    rts48  %old = atomicrmw add ptr %ptr, i8 %val monotonic49  ret i8 %old50}51 52define i16 @atomicrmw_sub_i16(i16 %val, ptr %ptr) {53; NO-ATOMIC-LABEL: atomicrmw_sub_i16:54; NO-ATOMIC:         .cfi_startproc55; NO-ATOMIC-NEXT:  ; %bb.0:56; NO-ATOMIC-NEXT:    suba.l #12, %sp57; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -1658; NO-ATOMIC-NEXT:    move.w (18,%sp), %d059; NO-ATOMIC-NEXT:    and.l #65535, %d060; NO-ATOMIC-NEXT:    move.l %d0, (4,%sp)61; NO-ATOMIC-NEXT:    move.l (20,%sp), (%sp)62; NO-ATOMIC-NEXT:    jsr __sync_fetch_and_sub_263; NO-ATOMIC-NEXT:    adda.l #12, %sp64; NO-ATOMIC-NEXT:    rts65;66; ATOMIC-LABEL: atomicrmw_sub_i16:67; ATOMIC:         .cfi_startproc68; ATOMIC-NEXT:  ; %bb.0:69; ATOMIC-NEXT:    suba.l #8, %sp70; ATOMIC-NEXT:    .cfi_def_cfa_offset -1271; ATOMIC-NEXT:    movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill72; ATOMIC-NEXT:    move.w (14,%sp), %d173; ATOMIC-NEXT:    move.l (16,%sp), %a074; ATOMIC-NEXT:    move.w (%a0), %d275; ATOMIC-NEXT:    move.w %d2, %d076; ATOMIC-NEXT:  .LBB1_1: ; %atomicrmw.start77; ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=178; ATOMIC-NEXT:    move.w %d2, %d379; ATOMIC-NEXT:    sub.w %d1, %d380; ATOMIC-NEXT:    cas.w %d0, %d3, (%a0)81; ATOMIC-NEXT:    move.w %d0, %d382; ATOMIC-NEXT:    sub.w %d2, %d383; ATOMIC-NEXT:    seq %d284; ATOMIC-NEXT:    and.b #1, %d285; ATOMIC-NEXT:    cmpi.b #0, %d286; ATOMIC-NEXT:    move.w %d0, %d287; ATOMIC-NEXT:    beq .LBB1_188; ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.end89; ATOMIC-NEXT:    movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload90; ATOMIC-NEXT:    adda.l #8, %sp91; ATOMIC-NEXT:    rts92  %old = atomicrmw sub ptr %ptr, i16 %val acquire93  ret i16 %old94}95 96define i32 @atomicrmw_and_i32(i32 %val, ptr %ptr) {97; NO-ATOMIC-LABEL: atomicrmw_and_i32:98; NO-ATOMIC:         .cfi_startproc99; NO-ATOMIC-NEXT:  ; %bb.0:100; NO-ATOMIC-NEXT:    suba.l #12, %sp101; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -16102; NO-ATOMIC-NEXT:    move.l (16,%sp), (4,%sp)103; NO-ATOMIC-NEXT:    move.l (20,%sp), (%sp)104; NO-ATOMIC-NEXT:    jsr __sync_fetch_and_and_4105; NO-ATOMIC-NEXT:    adda.l #12, %sp106; NO-ATOMIC-NEXT:    rts107;108; ATOMIC-LABEL: atomicrmw_and_i32:109; ATOMIC:         .cfi_startproc110; ATOMIC-NEXT:  ; %bb.0:111; ATOMIC-NEXT:    suba.l #8, %sp112; ATOMIC-NEXT:    .cfi_def_cfa_offset -12113; ATOMIC-NEXT:    movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill114; ATOMIC-NEXT:    move.l (12,%sp), %d1115; ATOMIC-NEXT:    move.l (16,%sp), %a0116; ATOMIC-NEXT:    move.l (%a0), %d2117; ATOMIC-NEXT:    move.l %d2, %d0118; ATOMIC-NEXT:  .LBB2_1: ; %atomicrmw.start119; ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=1120; ATOMIC-NEXT:    move.l %d2, %d3121; ATOMIC-NEXT:    and.l %d1, %d3122; ATOMIC-NEXT:    cas.l %d0, %d3, (%a0)123; ATOMIC-NEXT:    move.l %d0, %d3124; ATOMIC-NEXT:    sub.l %d2, %d3125; ATOMIC-NEXT:    seq %d2126; ATOMIC-NEXT:    and.b #1, %d2127; ATOMIC-NEXT:    cmpi.b #0, %d2128; ATOMIC-NEXT:    move.l %d0, %d2129; ATOMIC-NEXT:    beq .LBB2_1130; ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.end131; ATOMIC-NEXT:    movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload132; ATOMIC-NEXT:    adda.l #8, %sp133; ATOMIC-NEXT:    rts134  %old = atomicrmw and ptr %ptr, i32 %val seq_cst135  ret i32 %old136}137 138define i64 @atomicrmw_xor_i64(i64 %val, ptr %ptr) {139; NO-ATOMIC-LABEL: atomicrmw_xor_i64:140; NO-ATOMIC:         .cfi_startproc141; NO-ATOMIC-NEXT:  ; %bb.0:142; NO-ATOMIC-NEXT:    suba.l #20, %sp143; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -24144; NO-ATOMIC-NEXT:    move.l #3, (12,%sp)145; NO-ATOMIC-NEXT:    move.l (28,%sp), (8,%sp)146; NO-ATOMIC-NEXT:    move.l (24,%sp), (4,%sp)147; NO-ATOMIC-NEXT:    move.l (32,%sp), (%sp)148; NO-ATOMIC-NEXT:    jsr __atomic_fetch_xor_8149; NO-ATOMIC-NEXT:    adda.l #20, %sp150; NO-ATOMIC-NEXT:    rts151;152; ATOMIC-LABEL: atomicrmw_xor_i64:153; ATOMIC:         .cfi_startproc154; ATOMIC-NEXT:  ; %bb.0:155; ATOMIC-NEXT:    suba.l #20, %sp156; ATOMIC-NEXT:    .cfi_def_cfa_offset -24157; ATOMIC-NEXT:    move.l #3, (12,%sp)158; ATOMIC-NEXT:    move.l (28,%sp), (8,%sp)159; ATOMIC-NEXT:    move.l (24,%sp), (4,%sp)160; ATOMIC-NEXT:    move.l (32,%sp), (%sp)161; ATOMIC-NEXT:    jsr __atomic_fetch_xor_8162; ATOMIC-NEXT:    adda.l #20, %sp163; ATOMIC-NEXT:    rts164  %old = atomicrmw xor ptr %ptr, i64 %val release165  ret i64 %old166}167 168define i8 @atomicrmw_or_i8(i8 %val, ptr %ptr) {169; NO-ATOMIC-LABEL: atomicrmw_or_i8:170; NO-ATOMIC:         .cfi_startproc171; NO-ATOMIC-NEXT:  ; %bb.0:172; NO-ATOMIC-NEXT:    suba.l #12, %sp173; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -16174; NO-ATOMIC-NEXT:    move.b (19,%sp), %d0175; NO-ATOMIC-NEXT:    and.l #255, %d0176; NO-ATOMIC-NEXT:    move.l %d0, (4,%sp)177; NO-ATOMIC-NEXT:    move.l (20,%sp), (%sp)178; NO-ATOMIC-NEXT:    jsr __sync_fetch_and_or_1179; NO-ATOMIC-NEXT:    adda.l #12, %sp180; NO-ATOMIC-NEXT:    rts181;182; ATOMIC-LABEL: atomicrmw_or_i8:183; ATOMIC:         .cfi_startproc184; ATOMIC-NEXT:  ; %bb.0:185; ATOMIC-NEXT:    suba.l #8, %sp186; ATOMIC-NEXT:    .cfi_def_cfa_offset -12187; ATOMIC-NEXT:    movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill188; ATOMIC-NEXT:    move.b (15,%sp), %d1189; ATOMIC-NEXT:    move.l (16,%sp), %a0190; ATOMIC-NEXT:    move.b (%a0), %d2191; ATOMIC-NEXT:    move.b %d2, %d0192; ATOMIC-NEXT:  .LBB4_1: ; %atomicrmw.start193; ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=1194; ATOMIC-NEXT:    move.b %d2, %d3195; ATOMIC-NEXT:    or.b %d1, %d3196; ATOMIC-NEXT:    cas.b %d0, %d3, (%a0)197; ATOMIC-NEXT:    move.b %d0, %d3198; ATOMIC-NEXT:    sub.b %d2, %d3199; ATOMIC-NEXT:    seq %d2200; ATOMIC-NEXT:    and.b #1, %d2201; ATOMIC-NEXT:    cmpi.b #0, %d2202; ATOMIC-NEXT:    move.b %d0, %d2203; ATOMIC-NEXT:    beq .LBB4_1204; ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.end205; ATOMIC-NEXT:    movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload206; ATOMIC-NEXT:    adda.l #8, %sp207; ATOMIC-NEXT:    rts208  %old = atomicrmw or ptr %ptr, i8 %val monotonic209  ret i8 %old210}211 212define i16 @atmoicrmw_nand_i16(i16 %val, ptr %ptr) {213; NO-ATOMIC-LABEL: atmoicrmw_nand_i16:214; NO-ATOMIC:         .cfi_startproc215; NO-ATOMIC-NEXT:  ; %bb.0:216; NO-ATOMIC-NEXT:    suba.l #12, %sp217; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -16218; NO-ATOMIC-NEXT:    movem.l %d2, (8,%sp) ; 8-byte Folded Spill219; NO-ATOMIC-NEXT:    move.w (18,%sp), %d2220; NO-ATOMIC-NEXT:    move.l %d2, %d0221; NO-ATOMIC-NEXT:    and.l #65535, %d0222; NO-ATOMIC-NEXT:    move.l %d0, (4,%sp)223; NO-ATOMIC-NEXT:    move.l (20,%sp), (%sp)224; NO-ATOMIC-NEXT:    jsr __sync_fetch_and_nand_2225; NO-ATOMIC-NEXT:    move.w %d2, %d0226; NO-ATOMIC-NEXT:    movem.l (8,%sp), %d2 ; 8-byte Folded Reload227; NO-ATOMIC-NEXT:    adda.l #12, %sp228; NO-ATOMIC-NEXT:    rts229;230; ATOMIC-LABEL: atmoicrmw_nand_i16:231; ATOMIC:         .cfi_startproc232; ATOMIC-NEXT:  ; %bb.0:233; ATOMIC-NEXT:    suba.l #8, %sp234; ATOMIC-NEXT:    .cfi_def_cfa_offset -12235; ATOMIC-NEXT:    movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill236; ATOMIC-NEXT:    move.w (14,%sp), %d0237; ATOMIC-NEXT:    move.l (16,%sp), %a0238; ATOMIC-NEXT:    move.w (%a0), %d2239; ATOMIC-NEXT:    move.w %d2, %d1240; ATOMIC-NEXT:  .LBB5_1: ; %atomicrmw.start241; ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=1242; ATOMIC-NEXT:    move.w %d2, %d3243; ATOMIC-NEXT:    and.w %d0, %d3244; ATOMIC-NEXT:    not.w %d3245; ATOMIC-NEXT:    cas.w %d1, %d3, (%a0)246; ATOMIC-NEXT:    move.w %d1, %d3247; ATOMIC-NEXT:    sub.w %d2, %d3248; ATOMIC-NEXT:    seq %d2249; ATOMIC-NEXT:    and.b #1, %d2250; ATOMIC-NEXT:    cmpi.b #0, %d2251; ATOMIC-NEXT:    move.w %d1, %d2252; ATOMIC-NEXT:    beq .LBB5_1253; ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.end254; ATOMIC-NEXT:    movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload255; ATOMIC-NEXT:    adda.l #8, %sp256; ATOMIC-NEXT:    rts257  %old = atomicrmw nand ptr %ptr, i16 %val seq_cst258  ret i16 %val259}260 261define i32 @atomicrmw_min_i32(i32 %val, ptr %ptr) {262; NO-ATOMIC-LABEL: atomicrmw_min_i32:263; NO-ATOMIC:         .cfi_startproc264; NO-ATOMIC-NEXT:  ; %bb.0:265; NO-ATOMIC-NEXT:    suba.l #12, %sp266; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -16267; NO-ATOMIC-NEXT:    move.l (16,%sp), (4,%sp)268; NO-ATOMIC-NEXT:    move.l (20,%sp), (%sp)269; NO-ATOMIC-NEXT:    jsr __sync_fetch_and_min_4270; NO-ATOMIC-NEXT:    adda.l #12, %sp271; NO-ATOMIC-NEXT:    rts272;273; ATOMIC-LABEL: atomicrmw_min_i32:274; ATOMIC:         .cfi_startproc275; ATOMIC-NEXT:  ; %bb.0:276; ATOMIC-NEXT:    suba.l #8, %sp277; ATOMIC-NEXT:    .cfi_def_cfa_offset -12278; ATOMIC-NEXT:    movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill279; ATOMIC-NEXT:    move.l (12,%sp), %d1280; ATOMIC-NEXT:    move.l (16,%sp), %a0281; ATOMIC-NEXT:    move.l (%a0), %d2282; ATOMIC-NEXT:    bra .LBB6_1283; ATOMIC-NEXT:  .LBB6_3: ; %atomicrmw.start284; ATOMIC-NEXT:    ; in Loop: Header=BB6_1 Depth=1285; ATOMIC-NEXT:    move.l %d2, %d0286; ATOMIC-NEXT:    cas.l %d0, %d3, (%a0)287; ATOMIC-NEXT:    move.l %d0, %d3288; ATOMIC-NEXT:    sub.l %d2, %d3289; ATOMIC-NEXT:    seq %d2290; ATOMIC-NEXT:    and.b #1, %d2291; ATOMIC-NEXT:    cmpi.b #0, %d2292; ATOMIC-NEXT:    move.l %d0, %d2293; ATOMIC-NEXT:    bne .LBB6_4294; ATOMIC-NEXT:  .LBB6_1: ; %atomicrmw.start295; ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=1296; ATOMIC-NEXT:    move.l %d2, %d0297; ATOMIC-NEXT:    sub.l %d1, %d0298; ATOMIC-NEXT:    move.l %d2, %d3299; ATOMIC-NEXT:    ble .LBB6_3300; ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.start301; ATOMIC-NEXT:    ; in Loop: Header=BB6_1 Depth=1302; ATOMIC-NEXT:    move.l %d1, %d3303; ATOMIC-NEXT:    bra .LBB6_3304; ATOMIC-NEXT:  .LBB6_4: ; %atomicrmw.end305; ATOMIC-NEXT:    movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload306; ATOMIC-NEXT:    adda.l #8, %sp307; ATOMIC-NEXT:    rts308  %old = atomicrmw min ptr %ptr, i32 %val acquire309  ret i32 %old310}311 312define i64 @atomicrmw_max_i64(i64 %val, ptr %ptr) {313; NO-ATOMIC-LABEL: atomicrmw_max_i64:314; NO-ATOMIC:         .cfi_startproc315; NO-ATOMIC-NEXT:  ; %bb.0:316; NO-ATOMIC-NEXT:    suba.l #52, %sp317; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -56318; NO-ATOMIC-NEXT:    movem.l %d2-%d4/%a2-%a3, (32,%sp) ; 24-byte Folded Spill319; NO-ATOMIC-NEXT:    move.l (60,%sp), %d3320; NO-ATOMIC-NEXT:    move.l (56,%sp), %d4321; NO-ATOMIC-NEXT:    move.l (64,%sp), %a2322; NO-ATOMIC-NEXT:    move.l (4,%a2), %d1323; NO-ATOMIC-NEXT:    move.l (%a2), %d0324; NO-ATOMIC-NEXT:    lea (24,%sp), %a3325; NO-ATOMIC-NEXT:    bra .LBB7_1326; NO-ATOMIC-NEXT:  .LBB7_3: ; %atomicrmw.start327; NO-ATOMIC-NEXT:    ; in Loop: Header=BB7_1 Depth=1328; NO-ATOMIC-NEXT:    move.l %d1, (12,%sp)329; NO-ATOMIC-NEXT:    move.l %d0, (8,%sp)330; NO-ATOMIC-NEXT:    move.l #5, (20,%sp)331; NO-ATOMIC-NEXT:    move.l #5, (16,%sp)332; NO-ATOMIC-NEXT:    jsr __atomic_compare_exchange_8333; NO-ATOMIC-NEXT:    move.b %d0, %d2334; NO-ATOMIC-NEXT:    move.l (28,%sp), %d1335; NO-ATOMIC-NEXT:    move.l (24,%sp), %d0336; NO-ATOMIC-NEXT:    cmpi.b #0, %d2337; NO-ATOMIC-NEXT:    bne .LBB7_4338; NO-ATOMIC-NEXT:  .LBB7_1: ; %atomicrmw.start339; NO-ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=1340; NO-ATOMIC-NEXT:    move.l %d0, (24,%sp)341; NO-ATOMIC-NEXT:    move.l %d1, (28,%sp)342; NO-ATOMIC-NEXT:    move.l %a2, (%sp)343; NO-ATOMIC-NEXT:    move.l %a3, (4,%sp)344; NO-ATOMIC-NEXT:    move.l %d3, %d2345; NO-ATOMIC-NEXT:    sub.l %d1, %d2346; NO-ATOMIC-NEXT:    move.l %d4, %d2347; NO-ATOMIC-NEXT:    subx.l %d0, %d2348; NO-ATOMIC-NEXT:    slt %d2349; NO-ATOMIC-NEXT:    cmpi.b #0, %d2350; NO-ATOMIC-NEXT:    bne .LBB7_3351; NO-ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.start352; NO-ATOMIC-NEXT:    ; in Loop: Header=BB7_1 Depth=1353; NO-ATOMIC-NEXT:    move.l %d3, %d1354; NO-ATOMIC-NEXT:    move.l %d4, %d0355; NO-ATOMIC-NEXT:    bra .LBB7_3356; NO-ATOMIC-NEXT:  .LBB7_4: ; %atomicrmw.end357; NO-ATOMIC-NEXT:    movem.l (32,%sp), %d2-%d4/%a2-%a3 ; 24-byte Folded Reload358; NO-ATOMIC-NEXT:    adda.l #52, %sp359; NO-ATOMIC-NEXT:    rts360;361; ATOMIC-LABEL: atomicrmw_max_i64:362; ATOMIC:         .cfi_startproc363; ATOMIC-NEXT:  ; %bb.0:364; ATOMIC-NEXT:    suba.l #52, %sp365; ATOMIC-NEXT:    .cfi_def_cfa_offset -56366; ATOMIC-NEXT:    movem.l %d2-%d4/%a2-%a3, (32,%sp) ; 24-byte Folded Spill367; ATOMIC-NEXT:    move.l (60,%sp), %d3368; ATOMIC-NEXT:    move.l (56,%sp), %d4369; ATOMIC-NEXT:    move.l (64,%sp), %a2370; ATOMIC-NEXT:    move.l (4,%a2), %d1371; ATOMIC-NEXT:    move.l (%a2), %d0372; ATOMIC-NEXT:    lea (24,%sp), %a3373; ATOMIC-NEXT:    bra .LBB7_1374; ATOMIC-NEXT:  .LBB7_3: ; %atomicrmw.start375; ATOMIC-NEXT:    ; in Loop: Header=BB7_1 Depth=1376; ATOMIC-NEXT:    move.l %d1, (12,%sp)377; ATOMIC-NEXT:    move.l %d0, (8,%sp)378; ATOMIC-NEXT:    move.l #5, (20,%sp)379; ATOMIC-NEXT:    move.l #5, (16,%sp)380; ATOMIC-NEXT:    jsr __atomic_compare_exchange_8381; ATOMIC-NEXT:    move.b %d0, %d2382; ATOMIC-NEXT:    move.l (28,%sp), %d1383; ATOMIC-NEXT:    move.l (24,%sp), %d0384; ATOMIC-NEXT:    cmpi.b #0, %d2385; ATOMIC-NEXT:    bne .LBB7_4386; ATOMIC-NEXT:  .LBB7_1: ; %atomicrmw.start387; ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=1388; ATOMIC-NEXT:    move.l %d0, (24,%sp)389; ATOMIC-NEXT:    move.l %d1, (28,%sp)390; ATOMIC-NEXT:    move.l %a2, (%sp)391; ATOMIC-NEXT:    move.l %a3, (4,%sp)392; ATOMIC-NEXT:    move.l %d3, %d2393; ATOMIC-NEXT:    sub.l %d1, %d2394; ATOMIC-NEXT:    move.l %d4, %d2395; ATOMIC-NEXT:    subx.l %d0, %d2396; ATOMIC-NEXT:    slt %d2397; ATOMIC-NEXT:    cmpi.b #0, %d2398; ATOMIC-NEXT:    bne .LBB7_3399; ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.start400; ATOMIC-NEXT:    ; in Loop: Header=BB7_1 Depth=1401; ATOMIC-NEXT:    move.l %d3, %d1402; ATOMIC-NEXT:    move.l %d4, %d0403; ATOMIC-NEXT:    bra .LBB7_3404; ATOMIC-NEXT:  .LBB7_4: ; %atomicrmw.end405; ATOMIC-NEXT:    movem.l (32,%sp), %d2-%d4/%a2-%a3 ; 24-byte Folded Reload406; ATOMIC-NEXT:    adda.l #52, %sp407; ATOMIC-NEXT:    rts408  %old = atomicrmw max ptr %ptr, i64 %val seq_cst409  ret i64 %old410}411 412define i8 @atomicrmw_i8_umin(i8 %val, ptr %ptr) {413; NO-ATOMIC-LABEL: atomicrmw_i8_umin:414; NO-ATOMIC:         .cfi_startproc415; NO-ATOMIC-NEXT:  ; %bb.0:416; NO-ATOMIC-NEXT:    suba.l #12, %sp417; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -16418; NO-ATOMIC-NEXT:    move.b (19,%sp), %d0419; NO-ATOMIC-NEXT:    and.l #255, %d0420; NO-ATOMIC-NEXT:    move.l %d0, (4,%sp)421; NO-ATOMIC-NEXT:    move.l (20,%sp), (%sp)422; NO-ATOMIC-NEXT:    jsr __sync_fetch_and_umin_1423; NO-ATOMIC-NEXT:    adda.l #12, %sp424; NO-ATOMIC-NEXT:    rts425;426; ATOMIC-LABEL: atomicrmw_i8_umin:427; ATOMIC:         .cfi_startproc428; ATOMIC-NEXT:  ; %bb.0:429; ATOMIC-NEXT:    suba.l #8, %sp430; ATOMIC-NEXT:    .cfi_def_cfa_offset -12431; ATOMIC-NEXT:    movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill432; ATOMIC-NEXT:    move.b (15,%sp), %d1433; ATOMIC-NEXT:    move.l (16,%sp), %a0434; ATOMIC-NEXT:    move.b (%a0), %d2435; ATOMIC-NEXT:    bra .LBB8_1436; ATOMIC-NEXT:  .LBB8_3: ; %atomicrmw.start437; ATOMIC-NEXT:    ; in Loop: Header=BB8_1 Depth=1438; ATOMIC-NEXT:    move.b %d2, %d0439; ATOMIC-NEXT:    cas.b %d0, %d3, (%a0)440; ATOMIC-NEXT:    move.b %d0, %d3441; ATOMIC-NEXT:    sub.b %d2, %d3442; ATOMIC-NEXT:    seq %d2443; ATOMIC-NEXT:    and.b #1, %d2444; ATOMIC-NEXT:    cmpi.b #0, %d2445; ATOMIC-NEXT:    move.b %d0, %d2446; ATOMIC-NEXT:    bne .LBB8_4447; ATOMIC-NEXT:  .LBB8_1: ; %atomicrmw.start448; ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=1449; ATOMIC-NEXT:    move.b %d2, %d0450; ATOMIC-NEXT:    sub.b %d1, %d0451; ATOMIC-NEXT:    move.b %d2, %d3452; ATOMIC-NEXT:    bls .LBB8_3453; ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.start454; ATOMIC-NEXT:    ; in Loop: Header=BB8_1 Depth=1455; ATOMIC-NEXT:    move.b %d1, %d3456; ATOMIC-NEXT:    bra .LBB8_3457; ATOMIC-NEXT:  .LBB8_4: ; %atomicrmw.end458; ATOMIC-NEXT:    movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload459; ATOMIC-NEXT:    adda.l #8, %sp460; ATOMIC-NEXT:    rts461  %old = atomicrmw umin ptr %ptr, i8 %val release462  ret i8 %old463}464 465define i16 @atomicrmw_umax_i16(i16 %val, ptr %ptr) {466; NO-ATOMIC-LABEL: atomicrmw_umax_i16:467; NO-ATOMIC:         .cfi_startproc468; NO-ATOMIC-NEXT:  ; %bb.0:469; NO-ATOMIC-NEXT:    suba.l #12, %sp470; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -16471; NO-ATOMIC-NEXT:    move.w (18,%sp), %d0472; NO-ATOMIC-NEXT:    and.l #65535, %d0473; NO-ATOMIC-NEXT:    move.l %d0, (4,%sp)474; NO-ATOMIC-NEXT:    move.l (20,%sp), (%sp)475; NO-ATOMIC-NEXT:    jsr __sync_fetch_and_umax_2476; NO-ATOMIC-NEXT:    adda.l #12, %sp477; NO-ATOMIC-NEXT:    rts478;479; ATOMIC-LABEL: atomicrmw_umax_i16:480; ATOMIC:         .cfi_startproc481; ATOMIC-NEXT:  ; %bb.0:482; ATOMIC-NEXT:    suba.l #8, %sp483; ATOMIC-NEXT:    .cfi_def_cfa_offset -12484; ATOMIC-NEXT:    movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill485; ATOMIC-NEXT:    move.w (14,%sp), %d1486; ATOMIC-NEXT:    move.l (16,%sp), %a0487; ATOMIC-NEXT:    move.w (%a0), %d2488; ATOMIC-NEXT:    bra .LBB9_1489; ATOMIC-NEXT:  .LBB9_3: ; %atomicrmw.start490; ATOMIC-NEXT:    ; in Loop: Header=BB9_1 Depth=1491; ATOMIC-NEXT:    move.w %d2, %d0492; ATOMIC-NEXT:    cas.w %d0, %d3, (%a0)493; ATOMIC-NEXT:    move.w %d0, %d3494; ATOMIC-NEXT:    sub.w %d2, %d3495; ATOMIC-NEXT:    seq %d2496; ATOMIC-NEXT:    and.b #1, %d2497; ATOMIC-NEXT:    cmpi.b #0, %d2498; ATOMIC-NEXT:    move.w %d0, %d2499; ATOMIC-NEXT:    bne .LBB9_4500; ATOMIC-NEXT:  .LBB9_1: ; %atomicrmw.start501; ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=1502; ATOMIC-NEXT:    move.w %d2, %d0503; ATOMIC-NEXT:    sub.w %d1, %d0504; ATOMIC-NEXT:    move.w %d2, %d3505; ATOMIC-NEXT:    bhi .LBB9_3506; ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.start507; ATOMIC-NEXT:    ; in Loop: Header=BB9_1 Depth=1508; ATOMIC-NEXT:    move.w %d1, %d3509; ATOMIC-NEXT:    bra .LBB9_3510; ATOMIC-NEXT:  .LBB9_4: ; %atomicrmw.end511; ATOMIC-NEXT:    movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload512; ATOMIC-NEXT:    adda.l #8, %sp513; ATOMIC-NEXT:    rts514  %old = atomicrmw umax ptr %ptr, i16 %val seq_cst515  ret i16 %old516}517 518define i16 @atomicrmw_xchg_i16(i16 %val, ptr %ptr) {519; NO-ATOMIC-LABEL: atomicrmw_xchg_i16:520; NO-ATOMIC:         .cfi_startproc521; NO-ATOMIC-NEXT:  ; %bb.0: ; %entry522; NO-ATOMIC-NEXT:    suba.l #12, %sp523; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -16524; NO-ATOMIC-NEXT:    move.w (18,%sp), %d0525; NO-ATOMIC-NEXT:    and.l #65535, %d0526; NO-ATOMIC-NEXT:    move.l %d0, (4,%sp)527; NO-ATOMIC-NEXT:    move.l (20,%sp), (%sp)528; NO-ATOMIC-NEXT:    jsr __sync_lock_test_and_set_2529; NO-ATOMIC-NEXT:    adda.l #12, %sp530; NO-ATOMIC-NEXT:    rts531;532; ATOMIC-LABEL: atomicrmw_xchg_i16:533; ATOMIC:         .cfi_startproc534; ATOMIC-NEXT:  ; %bb.0: ; %entry535; ATOMIC-NEXT:    suba.l #8, %sp536; ATOMIC-NEXT:    .cfi_def_cfa_offset -12537; ATOMIC-NEXT:    movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill538; ATOMIC-NEXT:    move.w (14,%sp), %d1539; ATOMIC-NEXT:    move.l (16,%sp), %a0540; ATOMIC-NEXT:    move.w (%a0), %d2541; ATOMIC-NEXT:    move.w %d2, %d0542; ATOMIC-NEXT:  .LBB10_1: ; %atomicrmw.start543; ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=1544; ATOMIC-NEXT:    cas.w %d0, %d1, (%a0)545; ATOMIC-NEXT:    move.w %d0, %d3546; ATOMIC-NEXT:    sub.w %d2, %d3547; ATOMIC-NEXT:    seq %d2548; ATOMIC-NEXT:    and.b #1, %d2549; ATOMIC-NEXT:    cmpi.b #0, %d2550; ATOMIC-NEXT:    move.w %d0, %d2551; ATOMIC-NEXT:    beq .LBB10_1552; ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.end553; ATOMIC-NEXT:    movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload554; ATOMIC-NEXT:    adda.l #8, %sp555; ATOMIC-NEXT:    rts556entry:557  %old = atomicrmw xchg ptr %ptr, i16 %val monotonic558  ret i16 %old559}560 561define i32 @atomicrmw_xchg_i32(i32 %val, ptr %ptr) {562; NO-ATOMIC-LABEL: atomicrmw_xchg_i32:563; NO-ATOMIC:         .cfi_startproc564; NO-ATOMIC-NEXT:  ; %bb.0: ; %entry565; NO-ATOMIC-NEXT:    suba.l #12, %sp566; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -16567; NO-ATOMIC-NEXT:    move.l (16,%sp), (4,%sp)568; NO-ATOMIC-NEXT:    move.l (20,%sp), (%sp)569; NO-ATOMIC-NEXT:    jsr __sync_lock_test_and_set_4570; NO-ATOMIC-NEXT:    adda.l #12, %sp571; NO-ATOMIC-NEXT:    rts572;573; ATOMIC-LABEL: atomicrmw_xchg_i32:574; ATOMIC:         .cfi_startproc575; ATOMIC-NEXT:  ; %bb.0: ; %entry576; ATOMIC-NEXT:    suba.l #8, %sp577; ATOMIC-NEXT:    .cfi_def_cfa_offset -12578; ATOMIC-NEXT:    movem.l %d2-%d3, (0,%sp) ; 12-byte Folded Spill579; ATOMIC-NEXT:    move.l (12,%sp), %d1580; ATOMIC-NEXT:    move.l (16,%sp), %a0581; ATOMIC-NEXT:    move.l (%a0), %d2582; ATOMIC-NEXT:    move.l %d2, %d0583; ATOMIC-NEXT:  .LBB11_1: ; %atomicrmw.start584; ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=1585; ATOMIC-NEXT:    cas.l %d0, %d1, (%a0)586; ATOMIC-NEXT:    move.l %d0, %d3587; ATOMIC-NEXT:    sub.l %d2, %d3588; ATOMIC-NEXT:    seq %d2589; ATOMIC-NEXT:    and.b #1, %d2590; ATOMIC-NEXT:    cmpi.b #0, %d2591; ATOMIC-NEXT:    move.l %d0, %d2592; ATOMIC-NEXT:    beq .LBB11_1593; ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.end594; ATOMIC-NEXT:    movem.l (0,%sp), %d2-%d3 ; 12-byte Folded Reload595; ATOMIC-NEXT:    adda.l #8, %sp596; ATOMIC-NEXT:    rts597entry:598  %old = atomicrmw xchg ptr %ptr, i32 %val monotonic599  ret i32 %old600}601 602define i8 @atomicrmw_sub_i8_arid(ptr align 2 %self) {603; NO-ATOMIC-LABEL: atomicrmw_sub_i8_arid:604; NO-ATOMIC:         .cfi_startproc605; NO-ATOMIC-NEXT:  ; %bb.0: ; %start606; NO-ATOMIC-NEXT:    suba.l #12, %sp607; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -16608; NO-ATOMIC-NEXT:    move.l (16,%sp), %a0609; NO-ATOMIC-NEXT:    move.l (%a0), %d0610; NO-ATOMIC-NEXT:    add.l #4, %d0611; NO-ATOMIC-NEXT:    move.l %d0, (%sp)612; NO-ATOMIC-NEXT:    move.l #1, (4,%sp)613; NO-ATOMIC-NEXT:    jsr __sync_fetch_and_sub_1614; NO-ATOMIC-NEXT:    adda.l #12, %sp615; NO-ATOMIC-NEXT:    rts616;617; ATOMIC-LABEL: atomicrmw_sub_i8_arid:618; ATOMIC:         .cfi_startproc619; ATOMIC-NEXT:  ; %bb.0: ; %start620; ATOMIC-NEXT:    suba.l #4, %sp621; ATOMIC-NEXT:    .cfi_def_cfa_offset -8622; ATOMIC-NEXT:    movem.l %d2, (0,%sp) ; 8-byte Folded Spill623; ATOMIC-NEXT:    move.l (8,%sp), %a0624; ATOMIC-NEXT:    move.l (%a0), %a0625; ATOMIC-NEXT:    move.b (4,%a0), %d1626; ATOMIC-NEXT:    move.b %d1, %d0627; ATOMIC-NEXT:  .LBB12_1: ; %atomicrmw.start628; ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=1629; ATOMIC-NEXT:    move.b %d1, %d2630; ATOMIC-NEXT:    add.b #-1, %d2631; ATOMIC-NEXT:    cas.b %d0, %d2, (4,%a0)632; ATOMIC-NEXT:    move.b %d0, %d2633; ATOMIC-NEXT:    sub.b %d1, %d2634; ATOMIC-NEXT:    seq %d1635; ATOMIC-NEXT:    and.b #1, %d1636; ATOMIC-NEXT:    cmpi.b #0, %d1637; ATOMIC-NEXT:    move.b %d0, %d1638; ATOMIC-NEXT:    beq .LBB12_1639; ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.end640; ATOMIC-NEXT:    movem.l (0,%sp), %d2 ; 8-byte Folded Reload641; ATOMIC-NEXT:    adda.l #4, %sp642; ATOMIC-NEXT:    rts643start:644  %self1 = load ptr, ptr %self, align 2645  %_18.i.i = getelementptr inbounds i8, ptr %self1, i32 4646  %6 = atomicrmw sub ptr %_18.i.i, i8 1 release, align 4647  ret i8 %6648}649 650define i16 @atomicrmw_sub_i16_arid(ptr align 2 %self) {651; NO-ATOMIC-LABEL: atomicrmw_sub_i16_arid:652; NO-ATOMIC:         .cfi_startproc653; NO-ATOMIC-NEXT:  ; %bb.0: ; %start654; NO-ATOMIC-NEXT:    suba.l #12, %sp655; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -16656; NO-ATOMIC-NEXT:    move.l (16,%sp), %a0657; NO-ATOMIC-NEXT:    move.l (%a0), %d0658; NO-ATOMIC-NEXT:    add.l #4, %d0659; NO-ATOMIC-NEXT:    move.l %d0, (%sp)660; NO-ATOMIC-NEXT:    move.l #1, (4,%sp)661; NO-ATOMIC-NEXT:    jsr __sync_fetch_and_sub_2662; NO-ATOMIC-NEXT:    adda.l #12, %sp663; NO-ATOMIC-NEXT:    rts664;665; ATOMIC-LABEL: atomicrmw_sub_i16_arid:666; ATOMIC:         .cfi_startproc667; ATOMIC-NEXT:  ; %bb.0: ; %start668; ATOMIC-NEXT:    suba.l #4, %sp669; ATOMIC-NEXT:    .cfi_def_cfa_offset -8670; ATOMIC-NEXT:    movem.l %d2, (0,%sp) ; 8-byte Folded Spill671; ATOMIC-NEXT:    move.l (8,%sp), %a0672; ATOMIC-NEXT:    move.l (%a0), %a0673; ATOMIC-NEXT:    move.w (4,%a0), %d1674; ATOMIC-NEXT:    move.w %d1, %d0675; ATOMIC-NEXT:  .LBB13_1: ; %atomicrmw.start676; ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=1677; ATOMIC-NEXT:    move.w %d1, %d2678; ATOMIC-NEXT:    add.w #-1, %d2679; ATOMIC-NEXT:    cas.w %d0, %d2, (4,%a0)680; ATOMIC-NEXT:    move.w %d0, %d2681; ATOMIC-NEXT:    sub.w %d1, %d2682; ATOMIC-NEXT:    seq %d1683; ATOMIC-NEXT:    and.b #1, %d1684; ATOMIC-NEXT:    cmpi.b #0, %d1685; ATOMIC-NEXT:    move.w %d0, %d1686; ATOMIC-NEXT:    beq .LBB13_1687; ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.end688; ATOMIC-NEXT:    movem.l (0,%sp), %d2 ; 8-byte Folded Reload689; ATOMIC-NEXT:    adda.l #4, %sp690; ATOMIC-NEXT:    rts691start:692  %self1 = load ptr, ptr %self, align 2693  %_18.i.i = getelementptr inbounds i8, ptr %self1, i32 4694  %6 = atomicrmw sub ptr %_18.i.i, i16 1 release, align 4695  ret i16 %6696}697 698define i32 @atomicrmw_sub_i32_arid(ptr align 2 %self) {699; NO-ATOMIC-LABEL: atomicrmw_sub_i32_arid:700; NO-ATOMIC:         .cfi_startproc701; NO-ATOMIC-NEXT:  ; %bb.0: ; %start702; NO-ATOMIC-NEXT:    suba.l #12, %sp703; NO-ATOMIC-NEXT:    .cfi_def_cfa_offset -16704; NO-ATOMIC-NEXT:    move.l (16,%sp), %a0705; NO-ATOMIC-NEXT:    move.l (%a0), %d0706; NO-ATOMIC-NEXT:    add.l #4, %d0707; NO-ATOMIC-NEXT:    move.l %d0, (%sp)708; NO-ATOMIC-NEXT:    move.l #1, (4,%sp)709; NO-ATOMIC-NEXT:    jsr __sync_fetch_and_sub_4710; NO-ATOMIC-NEXT:    adda.l #12, %sp711; NO-ATOMIC-NEXT:    rts712;713; ATOMIC-LABEL: atomicrmw_sub_i32_arid:714; ATOMIC:         .cfi_startproc715; ATOMIC-NEXT:  ; %bb.0: ; %start716; ATOMIC-NEXT:    suba.l #4, %sp717; ATOMIC-NEXT:    .cfi_def_cfa_offset -8718; ATOMIC-NEXT:    movem.l %d2, (0,%sp) ; 8-byte Folded Spill719; ATOMIC-NEXT:    move.l (8,%sp), %a0720; ATOMIC-NEXT:    move.l (%a0), %a0721; ATOMIC-NEXT:    move.l (4,%a0), %d1722; ATOMIC-NEXT:    move.l %d1, %d0723; ATOMIC-NEXT:  .LBB14_1: ; %atomicrmw.start724; ATOMIC-NEXT:    ; =>This Inner Loop Header: Depth=1725; ATOMIC-NEXT:    move.l %d1, %d2726; ATOMIC-NEXT:    add.l #-1, %d2727; ATOMIC-NEXT:    cas.l %d0, %d2, (4,%a0)728; ATOMIC-NEXT:    move.l %d0, %d2729; ATOMIC-NEXT:    sub.l %d1, %d2730; ATOMIC-NEXT:    seq %d1731; ATOMIC-NEXT:    and.b #1, %d1732; ATOMIC-NEXT:    cmpi.b #0, %d1733; ATOMIC-NEXT:    move.l %d0, %d1734; ATOMIC-NEXT:    beq .LBB14_1735; ATOMIC-NEXT:  ; %bb.2: ; %atomicrmw.end736; ATOMIC-NEXT:    movem.l (0,%sp), %d2 ; 8-byte Folded Reload737; ATOMIC-NEXT:    adda.l #4, %sp738; ATOMIC-NEXT:    rts739start:740  %self1 = load ptr, ptr %self, align 2741  %_18.i.i = getelementptr inbounds i8, ptr %self1, i32 4742  %6 = atomicrmw sub ptr %_18.i.i, i32 1 release, align 4743  ret i32 %6744}745