brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.0 KiB · 3e1a631 Raw
437 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple i686-pc-linux < %s | FileCheck %s --check-prefix=CHECK-323; RUN: llc -mtriple x86_64-pc-linux < %s | FileCheck %s --check-prefix=CHECK-644 5define i8 @atomicrmw_usub_cond_i8(ptr %ptr, i8 %val) {6; CHECK-32-LABEL: atomicrmw_usub_cond_i8:7; CHECK-32:       # %bb.0:8; CHECK-32-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx9; CHECK-32-NEXT:    movl {{[0-9]+}}(%esp), %edx10; CHECK-32-NEXT:    movzbl (%edx), %eax11; CHECK-32-NEXT:    jmp .LBB0_112; CHECK-32-NEXT:    .p2align 413; CHECK-32-NEXT:  .LBB0_3: # %atomicrmw.start14; CHECK-32-NEXT:    # in Loop: Header=BB0_1 Depth=115; CHECK-32-NEXT:    lock cmpxchgb %ah, (%edx)16; CHECK-32-NEXT:    je .LBB0_417; CHECK-32-NEXT:  .LBB0_1: # %atomicrmw.start18; CHECK-32-NEXT:    # =>This Inner Loop Header: Depth=119; CHECK-32-NEXT:    movb %al, %ah20; CHECK-32-NEXT:    subb %cl, %ah21; CHECK-32-NEXT:    jae .LBB0_322; CHECK-32-NEXT:  # %bb.2: # %atomicrmw.start23; CHECK-32-NEXT:    # in Loop: Header=BB0_1 Depth=124; CHECK-32-NEXT:    movb %al, %ah25; CHECK-32-NEXT:    jmp .LBB0_326; CHECK-32-NEXT:  .LBB0_4: # %atomicrmw.end27; CHECK-32-NEXT:    retl28;29; CHECK-64-LABEL: atomicrmw_usub_cond_i8:30; CHECK-64:       # %bb.0:31; CHECK-64-NEXT:    movzbl (%rdi), %eax32; CHECK-64-NEXT:    .p2align 433; CHECK-64-NEXT:  .LBB0_1: # %atomicrmw.start34; CHECK-64-NEXT:    # =>This Inner Loop Header: Depth=135; CHECK-64-NEXT:    movzbl %al, %ecx36; CHECK-64-NEXT:    subb %sil, %al37; CHECK-64-NEXT:    movzbl %al, %edx38; CHECK-64-NEXT:    cmovbl %ecx, %edx39; CHECK-64-NEXT:    movl %ecx, %eax40; CHECK-64-NEXT:    lock cmpxchgb %dl, (%rdi)41; CHECK-64-NEXT:    jne .LBB0_142; CHECK-64-NEXT:  # %bb.2: # %atomicrmw.end43; CHECK-64-NEXT:    retq44  %result = atomicrmw usub_cond ptr %ptr, i8 %val seq_cst45  ret i8 %result46}47 48define i16 @atomicrmw_usub_cond_i16(ptr %ptr, i16 %val) {49; CHECK-32-LABEL: atomicrmw_usub_cond_i16:50; CHECK-32:       # %bb.0:51; CHECK-32-NEXT:    pushl %esi52; CHECK-32-NEXT:    .cfi_def_cfa_offset 853; CHECK-32-NEXT:    .cfi_offset %esi, -854; CHECK-32-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx55; CHECK-32-NEXT:    movl {{[0-9]+}}(%esp), %edx56; CHECK-32-NEXT:    movzwl (%edx), %eax57; CHECK-32-NEXT:    jmp .LBB1_158; CHECK-32-NEXT:    .p2align 459; CHECK-32-NEXT:  .LBB1_3: # %atomicrmw.start60; CHECK-32-NEXT:    # in Loop: Header=BB1_1 Depth=161; CHECK-32-NEXT:    # kill: def $ax killed $ax killed $eax62; CHECK-32-NEXT:    lock cmpxchgw %si, (%edx)63; CHECK-32-NEXT:    # kill: def $ax killed $ax def $eax64; CHECK-32-NEXT:    je .LBB1_465; CHECK-32-NEXT:  .LBB1_1: # %atomicrmw.start66; CHECK-32-NEXT:    # =>This Inner Loop Header: Depth=167; CHECK-32-NEXT:    movl %eax, %esi68; CHECK-32-NEXT:    subw %cx, %si69; CHECK-32-NEXT:    jae .LBB1_370; CHECK-32-NEXT:  # %bb.2: # %atomicrmw.start71; CHECK-32-NEXT:    # in Loop: Header=BB1_1 Depth=172; CHECK-32-NEXT:    movl %eax, %esi73; CHECK-32-NEXT:    jmp .LBB1_374; CHECK-32-NEXT:  .LBB1_4: # %atomicrmw.end75; CHECK-32-NEXT:    # kill: def $ax killed $ax killed $eax76; CHECK-32-NEXT:    popl %esi77; CHECK-32-NEXT:    .cfi_def_cfa_offset 478; CHECK-32-NEXT:    retl79;80; CHECK-64-LABEL: atomicrmw_usub_cond_i16:81; CHECK-64:       # %bb.0:82; CHECK-64-NEXT:    movzwl (%rdi), %eax83; CHECK-64-NEXT:    .p2align 484; CHECK-64-NEXT:  .LBB1_1: # %atomicrmw.start85; CHECK-64-NEXT:    # =>This Inner Loop Header: Depth=186; CHECK-64-NEXT:    movl %eax, %ecx87; CHECK-64-NEXT:    subw %si, %cx88; CHECK-64-NEXT:    cmovbl %eax, %ecx89; CHECK-64-NEXT:    # kill: def $ax killed $ax killed $eax90; CHECK-64-NEXT:    lock cmpxchgw %cx, (%rdi)91; CHECK-64-NEXT:    # kill: def $ax killed $ax def $eax92; CHECK-64-NEXT:    jne .LBB1_193; CHECK-64-NEXT:  # %bb.2: # %atomicrmw.end94; CHECK-64-NEXT:    # kill: def $ax killed $ax killed $eax95; CHECK-64-NEXT:    retq96  %result = atomicrmw usub_cond ptr %ptr, i16 %val seq_cst97  ret i16 %result98}99 100define i32 @atomicrmw_usub_cond_i32(ptr %ptr, i32 %val) {101; CHECK-32-LABEL: atomicrmw_usub_cond_i32:102; CHECK-32:       # %bb.0:103; CHECK-32-NEXT:    pushl %esi104; CHECK-32-NEXT:    .cfi_def_cfa_offset 8105; CHECK-32-NEXT:    .cfi_offset %esi, -8106; CHECK-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx107; CHECK-32-NEXT:    movl {{[0-9]+}}(%esp), %edx108; CHECK-32-NEXT:    movl (%edx), %eax109; CHECK-32-NEXT:    jmp .LBB2_1110; CHECK-32-NEXT:    .p2align 4111; CHECK-32-NEXT:  .LBB2_3: # %atomicrmw.start112; CHECK-32-NEXT:    # in Loop: Header=BB2_1 Depth=1113; CHECK-32-NEXT:    lock cmpxchgl %esi, (%edx)114; CHECK-32-NEXT:    je .LBB2_4115; CHECK-32-NEXT:  .LBB2_1: # %atomicrmw.start116; CHECK-32-NEXT:    # =>This Inner Loop Header: Depth=1117; CHECK-32-NEXT:    movl %eax, %esi118; CHECK-32-NEXT:    subl %ecx, %esi119; CHECK-32-NEXT:    jae .LBB2_3120; CHECK-32-NEXT:  # %bb.2: # %atomicrmw.start121; CHECK-32-NEXT:    # in Loop: Header=BB2_1 Depth=1122; CHECK-32-NEXT:    movl %eax, %esi123; CHECK-32-NEXT:    jmp .LBB2_3124; CHECK-32-NEXT:  .LBB2_4: # %atomicrmw.end125; CHECK-32-NEXT:    popl %esi126; CHECK-32-NEXT:    .cfi_def_cfa_offset 4127; CHECK-32-NEXT:    retl128;129; CHECK-64-LABEL: atomicrmw_usub_cond_i32:130; CHECK-64:       # %bb.0:131; CHECK-64-NEXT:    movl (%rdi), %eax132; CHECK-64-NEXT:    .p2align 4133; CHECK-64-NEXT:  .LBB2_1: # %atomicrmw.start134; CHECK-64-NEXT:    # =>This Inner Loop Header: Depth=1135; CHECK-64-NEXT:    movl %eax, %ecx136; CHECK-64-NEXT:    subl %esi, %ecx137; CHECK-64-NEXT:    cmovbl %eax, %ecx138; CHECK-64-NEXT:    lock cmpxchgl %ecx, (%rdi)139; CHECK-64-NEXT:    jne .LBB2_1140; CHECK-64-NEXT:  # %bb.2: # %atomicrmw.end141; CHECK-64-NEXT:    retq142  %result = atomicrmw usub_cond ptr %ptr, i32 %val seq_cst143  ret i32 %result144}145 146define i64 @atomicrmw_usub_cond_i64(ptr %ptr, i64 %val) {147; CHECK-32-LABEL: atomicrmw_usub_cond_i64:148; CHECK-32:       # %bb.0:149; CHECK-32-NEXT:    pushl %ebp150; CHECK-32-NEXT:    .cfi_def_cfa_offset 8151; CHECK-32-NEXT:    pushl %ebx152; CHECK-32-NEXT:    .cfi_def_cfa_offset 12153; CHECK-32-NEXT:    pushl %edi154; CHECK-32-NEXT:    .cfi_def_cfa_offset 16155; CHECK-32-NEXT:    pushl %esi156; CHECK-32-NEXT:    .cfi_def_cfa_offset 20157; CHECK-32-NEXT:    .cfi_offset %esi, -20158; CHECK-32-NEXT:    .cfi_offset %edi, -16159; CHECK-32-NEXT:    .cfi_offset %ebx, -12160; CHECK-32-NEXT:    .cfi_offset %ebp, -8161; CHECK-32-NEXT:    movl {{[0-9]+}}(%esp), %esi162; CHECK-32-NEXT:    movl {{[0-9]+}}(%esp), %edi163; CHECK-32-NEXT:    movl {{[0-9]+}}(%esp), %ebp164; CHECK-32-NEXT:    movl (%ebp), %eax165; CHECK-32-NEXT:    movl 4(%ebp), %edx166; CHECK-32-NEXT:    jmp .LBB3_1167; CHECK-32-NEXT:    .p2align 4168; CHECK-32-NEXT:  .LBB3_3: # %atomicrmw.start169; CHECK-32-NEXT:    # in Loop: Header=BB3_1 Depth=1170; CHECK-32-NEXT:    lock cmpxchg8b (%ebp)171; CHECK-32-NEXT:    je .LBB3_4172; CHECK-32-NEXT:  .LBB3_1: # %atomicrmw.start173; CHECK-32-NEXT:    # =>This Inner Loop Header: Depth=1174; CHECK-32-NEXT:    movl %eax, %ebx175; CHECK-32-NEXT:    subl %edi, %ebx176; CHECK-32-NEXT:    movl %edx, %ecx177; CHECK-32-NEXT:    sbbl %esi, %ecx178; CHECK-32-NEXT:    jae .LBB3_3179; CHECK-32-NEXT:  # %bb.2: # %atomicrmw.start180; CHECK-32-NEXT:    # in Loop: Header=BB3_1 Depth=1181; CHECK-32-NEXT:    movl %edx, %ecx182; CHECK-32-NEXT:    movl %eax, %ebx183; CHECK-32-NEXT:    jmp .LBB3_3184; CHECK-32-NEXT:  .LBB3_4: # %atomicrmw.end185; CHECK-32-NEXT:    popl %esi186; CHECK-32-NEXT:    .cfi_def_cfa_offset 16187; CHECK-32-NEXT:    popl %edi188; CHECK-32-NEXT:    .cfi_def_cfa_offset 12189; CHECK-32-NEXT:    popl %ebx190; CHECK-32-NEXT:    .cfi_def_cfa_offset 8191; CHECK-32-NEXT:    popl %ebp192; CHECK-32-NEXT:    .cfi_def_cfa_offset 4193; CHECK-32-NEXT:    retl194;195; CHECK-64-LABEL: atomicrmw_usub_cond_i64:196; CHECK-64:       # %bb.0:197; CHECK-64-NEXT:    movq (%rdi), %rax198; CHECK-64-NEXT:    .p2align 4199; CHECK-64-NEXT:  .LBB3_1: # %atomicrmw.start200; CHECK-64-NEXT:    # =>This Inner Loop Header: Depth=1201; CHECK-64-NEXT:    movq %rax, %rcx202; CHECK-64-NEXT:    subq %rsi, %rcx203; CHECK-64-NEXT:    cmovbq %rax, %rcx204; CHECK-64-NEXT:    lock cmpxchgq %rcx, (%rdi)205; CHECK-64-NEXT:    jne .LBB3_1206; CHECK-64-NEXT:  # %bb.2: # %atomicrmw.end207; CHECK-64-NEXT:    retq208  %result = atomicrmw usub_cond ptr %ptr, i64 %val seq_cst209  ret i64 %result210}211 212define i8 @atomicrmw_usub_sat_i8(ptr %ptr, i8 %val) {213; CHECK-32-LABEL: atomicrmw_usub_sat_i8:214; CHECK-32:       # %bb.0:215; CHECK-32-NEXT:    pushl %ebx216; CHECK-32-NEXT:    .cfi_def_cfa_offset 8217; CHECK-32-NEXT:    .cfi_offset %ebx, -8218; CHECK-32-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx219; CHECK-32-NEXT:    movl {{[0-9]+}}(%esp), %edx220; CHECK-32-NEXT:    movzbl (%edx), %eax221; CHECK-32-NEXT:    jmp .LBB4_1222; CHECK-32-NEXT:    .p2align 4223; CHECK-32-NEXT:  .LBB4_3: # %atomicrmw.start224; CHECK-32-NEXT:    # in Loop: Header=BB4_1 Depth=1225; CHECK-32-NEXT:    lock cmpxchgb %bl, (%edx)226; CHECK-32-NEXT:    je .LBB4_4227; CHECK-32-NEXT:  .LBB4_1: # %atomicrmw.start228; CHECK-32-NEXT:    # =>This Inner Loop Header: Depth=1229; CHECK-32-NEXT:    movl %eax, %ebx230; CHECK-32-NEXT:    subb %cl, %bl231; CHECK-32-NEXT:    jae .LBB4_3232; CHECK-32-NEXT:  # %bb.2: # in Loop: Header=BB4_1 Depth=1233; CHECK-32-NEXT:    xorl %ebx, %ebx234; CHECK-32-NEXT:    jmp .LBB4_3235; CHECK-32-NEXT:  .LBB4_4: # %atomicrmw.end236; CHECK-32-NEXT:    popl %ebx237; CHECK-32-NEXT:    .cfi_def_cfa_offset 4238; CHECK-32-NEXT:    retl239;240; CHECK-64-LABEL: atomicrmw_usub_sat_i8:241; CHECK-64:       # %bb.0:242; CHECK-64-NEXT:    movzbl (%rdi), %eax243; CHECK-64-NEXT:    xorl %ecx, %ecx244; CHECK-64-NEXT:    .p2align 4245; CHECK-64-NEXT:  .LBB4_1: # %atomicrmw.start246; CHECK-64-NEXT:    # =>This Inner Loop Header: Depth=1247; CHECK-64-NEXT:    movl %eax, %edx248; CHECK-64-NEXT:    subb %sil, %dl249; CHECK-64-NEXT:    movzbl %dl, %edx250; CHECK-64-NEXT:    cmovbl %ecx, %edx251; CHECK-64-NEXT:    lock cmpxchgb %dl, (%rdi)252; CHECK-64-NEXT:    jne .LBB4_1253; CHECK-64-NEXT:  # %bb.2: # %atomicrmw.end254; CHECK-64-NEXT:    retq255  %result = atomicrmw usub_sat ptr %ptr, i8 %val seq_cst256  ret i8 %result257}258 259define i16 @atomicrmw_usub_sat_i16(ptr %ptr, i16 %val) {260; CHECK-32-LABEL: atomicrmw_usub_sat_i16:261; CHECK-32:       # %bb.0:262; CHECK-32-NEXT:    pushl %edi263; CHECK-32-NEXT:    .cfi_def_cfa_offset 8264; CHECK-32-NEXT:    pushl %esi265; CHECK-32-NEXT:    .cfi_def_cfa_offset 12266; CHECK-32-NEXT:    .cfi_offset %esi, -12267; CHECK-32-NEXT:    .cfi_offset %edi, -8268; CHECK-32-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx269; CHECK-32-NEXT:    movl {{[0-9]+}}(%esp), %edx270; CHECK-32-NEXT:    movzwl (%edx), %eax271; CHECK-32-NEXT:    jmp .LBB5_1272; CHECK-32-NEXT:    .p2align 4273; CHECK-32-NEXT:  .LBB5_3: # %atomicrmw.start274; CHECK-32-NEXT:    # in Loop: Header=BB5_1 Depth=1275; CHECK-32-NEXT:    lock cmpxchgw %si, (%edx)276; CHECK-32-NEXT:    je .LBB5_4277; CHECK-32-NEXT:  .LBB5_1: # %atomicrmw.start278; CHECK-32-NEXT:    # =>This Inner Loop Header: Depth=1279; CHECK-32-NEXT:    xorl %esi, %esi280; CHECK-32-NEXT:    movl %eax, %edi281; CHECK-32-NEXT:    subw %cx, %di282; CHECK-32-NEXT:    jb .LBB5_3283; CHECK-32-NEXT:  # %bb.2: # %atomicrmw.start284; CHECK-32-NEXT:    # in Loop: Header=BB5_1 Depth=1285; CHECK-32-NEXT:    movl %edi, %esi286; CHECK-32-NEXT:    jmp .LBB5_3287; CHECK-32-NEXT:  .LBB5_4: # %atomicrmw.end288; CHECK-32-NEXT:    popl %esi289; CHECK-32-NEXT:    .cfi_def_cfa_offset 8290; CHECK-32-NEXT:    popl %edi291; CHECK-32-NEXT:    .cfi_def_cfa_offset 4292; CHECK-32-NEXT:    retl293;294; CHECK-64-LABEL: atomicrmw_usub_sat_i16:295; CHECK-64:       # %bb.0:296; CHECK-64-NEXT:    movzwl (%rdi), %eax297; CHECK-64-NEXT:    xorl %ecx, %ecx298; CHECK-64-NEXT:    .p2align 4299; CHECK-64-NEXT:  .LBB5_1: # %atomicrmw.start300; CHECK-64-NEXT:    # =>This Inner Loop Header: Depth=1301; CHECK-64-NEXT:    movl %eax, %edx302; CHECK-64-NEXT:    subw %si, %dx303; CHECK-64-NEXT:    cmovbl %ecx, %edx304; CHECK-64-NEXT:    lock cmpxchgw %dx, (%rdi)305; CHECK-64-NEXT:    jne .LBB5_1306; CHECK-64-NEXT:  # %bb.2: # %atomicrmw.end307; CHECK-64-NEXT:    retq308  %result = atomicrmw usub_sat ptr %ptr, i16 %val seq_cst309  ret i16 %result310}311 312define i32 @atomicrmw_usub_sat_i32(ptr %ptr, i32 %val) {313; CHECK-32-LABEL: atomicrmw_usub_sat_i32:314; CHECK-32:       # %bb.0:315; CHECK-32-NEXT:    pushl %edi316; CHECK-32-NEXT:    .cfi_def_cfa_offset 8317; CHECK-32-NEXT:    pushl %esi318; CHECK-32-NEXT:    .cfi_def_cfa_offset 12319; CHECK-32-NEXT:    .cfi_offset %esi, -12320; CHECK-32-NEXT:    .cfi_offset %edi, -8321; CHECK-32-NEXT:    movl {{[0-9]+}}(%esp), %ecx322; CHECK-32-NEXT:    movl {{[0-9]+}}(%esp), %edx323; CHECK-32-NEXT:    movl (%edx), %eax324; CHECK-32-NEXT:    jmp .LBB6_1325; CHECK-32-NEXT:    .p2align 4326; CHECK-32-NEXT:  .LBB6_3: # %atomicrmw.start327; CHECK-32-NEXT:    # in Loop: Header=BB6_1 Depth=1328; CHECK-32-NEXT:    lock cmpxchgl %esi, (%edx)329; CHECK-32-NEXT:    je .LBB6_4330; CHECK-32-NEXT:  .LBB6_1: # %atomicrmw.start331; CHECK-32-NEXT:    # =>This Inner Loop Header: Depth=1332; CHECK-32-NEXT:    xorl %esi, %esi333; CHECK-32-NEXT:    movl %eax, %edi334; CHECK-32-NEXT:    subl %ecx, %edi335; CHECK-32-NEXT:    jb .LBB6_3336; CHECK-32-NEXT:  # %bb.2: # %atomicrmw.start337; CHECK-32-NEXT:    # in Loop: Header=BB6_1 Depth=1338; CHECK-32-NEXT:    movl %edi, %esi339; CHECK-32-NEXT:    jmp .LBB6_3340; CHECK-32-NEXT:  .LBB6_4: # %atomicrmw.end341; CHECK-32-NEXT:    popl %esi342; CHECK-32-NEXT:    .cfi_def_cfa_offset 8343; CHECK-32-NEXT:    popl %edi344; CHECK-32-NEXT:    .cfi_def_cfa_offset 4345; CHECK-32-NEXT:    retl346;347; CHECK-64-LABEL: atomicrmw_usub_sat_i32:348; CHECK-64:       # %bb.0:349; CHECK-64-NEXT:    movl (%rdi), %eax350; CHECK-64-NEXT:    xorl %ecx, %ecx351; CHECK-64-NEXT:    .p2align 4352; CHECK-64-NEXT:  .LBB6_1: # %atomicrmw.start353; CHECK-64-NEXT:    # =>This Inner Loop Header: Depth=1354; CHECK-64-NEXT:    movl %eax, %edx355; CHECK-64-NEXT:    subl %esi, %edx356; CHECK-64-NEXT:    cmovbl %ecx, %edx357; CHECK-64-NEXT:    lock cmpxchgl %edx, (%rdi)358; CHECK-64-NEXT:    jne .LBB6_1359; CHECK-64-NEXT:  # %bb.2: # %atomicrmw.end360; CHECK-64-NEXT:    retq361  %result = atomicrmw usub_sat ptr %ptr, i32 %val seq_cst362  ret i32 %result363}364 365define i64 @atomicrmw_usub_sat_i64(ptr %ptr, i64 %val) {366; CHECK-32-LABEL: atomicrmw_usub_sat_i64:367; CHECK-32:       # %bb.0:368; CHECK-32-NEXT:    pushl %ebp369; CHECK-32-NEXT:    .cfi_def_cfa_offset 8370; CHECK-32-NEXT:    pushl %ebx371; CHECK-32-NEXT:    .cfi_def_cfa_offset 12372; CHECK-32-NEXT:    pushl %edi373; CHECK-32-NEXT:    .cfi_def_cfa_offset 16374; CHECK-32-NEXT:    pushl %esi375; CHECK-32-NEXT:    .cfi_def_cfa_offset 20376; CHECK-32-NEXT:    .cfi_offset %esi, -20377; CHECK-32-NEXT:    .cfi_offset %edi, -16378; CHECK-32-NEXT:    .cfi_offset %ebx, -12379; CHECK-32-NEXT:    .cfi_offset %ebp, -8380; CHECK-32-NEXT:    movl {{[0-9]+}}(%esp), %ebp381; CHECK-32-NEXT:    movl (%ebp), %esi382; CHECK-32-NEXT:    movl 4(%ebp), %edi383; CHECK-32-NEXT:    jmp .LBB7_1384; CHECK-32-NEXT:    .p2align 4385; CHECK-32-NEXT:  .LBB7_3: # %atomicrmw.start386; CHECK-32-NEXT:    # in Loop: Header=BB7_1 Depth=1387; CHECK-32-NEXT:    movl %esi, %eax388; CHECK-32-NEXT:    movl %edi, %edx389; CHECK-32-NEXT:    lock cmpxchg8b (%ebp)390; CHECK-32-NEXT:    movl %eax, %esi391; CHECK-32-NEXT:    movl %edx, %edi392; CHECK-32-NEXT:    je .LBB7_4393; CHECK-32-NEXT:  .LBB7_1: # %atomicrmw.start394; CHECK-32-NEXT:    # =>This Inner Loop Header: Depth=1395; CHECK-32-NEXT:    xorl %ecx, %ecx396; CHECK-32-NEXT:    movl %esi, %eax397; CHECK-32-NEXT:    subl {{[0-9]+}}(%esp), %eax398; CHECK-32-NEXT:    movl %edi, %edx399; CHECK-32-NEXT:    sbbl {{[0-9]+}}(%esp), %edx400; CHECK-32-NEXT:    movl $0, %ebx401; CHECK-32-NEXT:    jb .LBB7_3402; CHECK-32-NEXT:  # %bb.2: # %atomicrmw.start403; CHECK-32-NEXT:    # in Loop: Header=BB7_1 Depth=1404; CHECK-32-NEXT:    movl %edx, %ecx405; CHECK-32-NEXT:    movl %eax, %ebx406; CHECK-32-NEXT:    jmp .LBB7_3407; CHECK-32-NEXT:  .LBB7_4: # %atomicrmw.end408; CHECK-32-NEXT:    movl %esi, %eax409; CHECK-32-NEXT:    movl %edi, %edx410; CHECK-32-NEXT:    popl %esi411; CHECK-32-NEXT:    .cfi_def_cfa_offset 16412; CHECK-32-NEXT:    popl %edi413; CHECK-32-NEXT:    .cfi_def_cfa_offset 12414; CHECK-32-NEXT:    popl %ebx415; CHECK-32-NEXT:    .cfi_def_cfa_offset 8416; CHECK-32-NEXT:    popl %ebp417; CHECK-32-NEXT:    .cfi_def_cfa_offset 4418; CHECK-32-NEXT:    retl419;420; CHECK-64-LABEL: atomicrmw_usub_sat_i64:421; CHECK-64:       # %bb.0:422; CHECK-64-NEXT:    movq (%rdi), %rax423; CHECK-64-NEXT:    xorl %ecx, %ecx424; CHECK-64-NEXT:    .p2align 4425; CHECK-64-NEXT:  .LBB7_1: # %atomicrmw.start426; CHECK-64-NEXT:    # =>This Inner Loop Header: Depth=1427; CHECK-64-NEXT:    movq %rax, %rdx428; CHECK-64-NEXT:    subq %rsi, %rdx429; CHECK-64-NEXT:    cmovbq %rcx, %rdx430; CHECK-64-NEXT:    lock cmpxchgq %rdx, (%rdi)431; CHECK-64-NEXT:    jne .LBB7_1432; CHECK-64-NEXT:  # %bb.2: # %atomicrmw.end433; CHECK-64-NEXT:    retq434  %result = atomicrmw usub_sat ptr %ptr, i64 %val seq_cst435  ret i64 %result436}437