brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.0 KiB · f6fc65e Raw
176 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple x86_64-pc-linux < %s | FileCheck %s3 4define i8 @atomicrmw_uinc_wrap_i8(ptr %ptr, i8 %val) {5; CHECK-LABEL: atomicrmw_uinc_wrap_i8:6; CHECK:       # %bb.0:7; CHECK-NEXT:    movzbl (%rdi), %eax8; CHECK-NEXT:    xorl %ecx, %ecx9; CHECK-NEXT:    .p2align 410; CHECK-NEXT:  .LBB0_1: # %atomicrmw.start11; CHECK-NEXT:    # =>This Inner Loop Header: Depth=112; CHECK-NEXT:    leal 1(%rax), %edx13; CHECK-NEXT:    cmpb %sil, %al14; CHECK-NEXT:    movzbl %dl, %edx15; CHECK-NEXT:    cmovael %ecx, %edx16; CHECK-NEXT:    # kill: def $al killed $al killed $rax17; CHECK-NEXT:    lock cmpxchgb %dl, (%rdi)18; CHECK-NEXT:    # kill: def $al killed $al def $rax19; CHECK-NEXT:    jne .LBB0_120; CHECK-NEXT:  # %bb.2: # %atomicrmw.end21; CHECK-NEXT:    # kill: def $al killed $al killed $rax22; CHECK-NEXT:    retq23  %result = atomicrmw uinc_wrap ptr %ptr, i8 %val seq_cst24  ret i8 %result25}26 27define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {28; CHECK-LABEL: atomicrmw_uinc_wrap_i16:29; CHECK:       # %bb.0:30; CHECK-NEXT:    movzwl (%rdi), %eax31; CHECK-NEXT:    xorl %ecx, %ecx32; CHECK-NEXT:    .p2align 433; CHECK-NEXT:  .LBB1_1: # %atomicrmw.start34; CHECK-NEXT:    # =>This Inner Loop Header: Depth=135; CHECK-NEXT:    leal 1(%rax), %edx36; CHECK-NEXT:    cmpw %si, %ax37; CHECK-NEXT:    cmovael %ecx, %edx38; CHECK-NEXT:    # kill: def $ax killed $ax killed $rax39; CHECK-NEXT:    lock cmpxchgw %dx, (%rdi)40; CHECK-NEXT:    # kill: def $ax killed $ax def $rax41; CHECK-NEXT:    jne .LBB1_142; CHECK-NEXT:  # %bb.2: # %atomicrmw.end43; CHECK-NEXT:    # kill: def $ax killed $ax killed $rax44; CHECK-NEXT:    retq45  %result = atomicrmw uinc_wrap ptr %ptr, i16 %val seq_cst46  ret i16 %result47}48 49define i32 @atomicrmw_uinc_wrap_i32(ptr %ptr, i32 %val) {50; CHECK-LABEL: atomicrmw_uinc_wrap_i32:51; CHECK:       # %bb.0:52; CHECK-NEXT:    movl (%rdi), %eax53; CHECK-NEXT:    xorl %ecx, %ecx54; CHECK-NEXT:    .p2align 455; CHECK-NEXT:  .LBB2_1: # %atomicrmw.start56; CHECK-NEXT:    # =>This Inner Loop Header: Depth=157; CHECK-NEXT:    leal 1(%rax), %edx58; CHECK-NEXT:    cmpl %esi, %eax59; CHECK-NEXT:    cmovael %ecx, %edx60; CHECK-NEXT:    # kill: def $eax killed $eax killed $rax61; CHECK-NEXT:    lock cmpxchgl %edx, (%rdi)62; CHECK-NEXT:    # kill: def $eax killed $eax def $rax63; CHECK-NEXT:    jne .LBB2_164; CHECK-NEXT:  # %bb.2: # %atomicrmw.end65; CHECK-NEXT:    # kill: def $eax killed $eax killed $rax66; CHECK-NEXT:    retq67  %result = atomicrmw uinc_wrap ptr %ptr, i32 %val seq_cst68  ret i32 %result69}70 71define i64 @atomicrmw_uinc_wrap_i64(ptr %ptr, i64 %val) {72; CHECK-LABEL: atomicrmw_uinc_wrap_i64:73; CHECK:       # %bb.0:74; CHECK-NEXT:    movq (%rdi), %rax75; CHECK-NEXT:    xorl %ecx, %ecx76; CHECK-NEXT:    .p2align 477; CHECK-NEXT:  .LBB3_1: # %atomicrmw.start78; CHECK-NEXT:    # =>This Inner Loop Header: Depth=179; CHECK-NEXT:    leaq 1(%rax), %rdx80; CHECK-NEXT:    cmpq %rsi, %rax81; CHECK-NEXT:    cmovaeq %rcx, %rdx82; CHECK-NEXT:    lock cmpxchgq %rdx, (%rdi)83; CHECK-NEXT:    jne .LBB3_184; CHECK-NEXT:  # %bb.2: # %atomicrmw.end85; CHECK-NEXT:    retq86  %result = atomicrmw uinc_wrap ptr %ptr, i64 %val seq_cst87  ret i64 %result88}89 90define i8 @atomicrmw_udec_wrap_i8(ptr %ptr, i8 %val) {91; CHECK-LABEL: atomicrmw_udec_wrap_i8:92; CHECK:       # %bb.0:93; CHECK-NEXT:    movzbl (%rdi), %eax94; CHECK-NEXT:    movzbl %sil, %ecx95; CHECK-NEXT:    .p2align 496; CHECK-NEXT:  .LBB4_1: # %atomicrmw.start97; CHECK-NEXT:    # =>This Inner Loop Header: Depth=198; CHECK-NEXT:    movl %eax, %edx99; CHECK-NEXT:    subb $1, %dl100; CHECK-NEXT:    cmpb %cl, %al101; CHECK-NEXT:    movzbl %dl, %edx102; CHECK-NEXT:    cmoval %ecx, %edx103; CHECK-NEXT:    cmpb $1, %al104; CHECK-NEXT:    cmovbl %ecx, %edx105; CHECK-NEXT:    lock cmpxchgb %dl, (%rdi)106; CHECK-NEXT:    jne .LBB4_1107; CHECK-NEXT:  # %bb.2: # %atomicrmw.end108; CHECK-NEXT:    retq109  %result = atomicrmw udec_wrap ptr %ptr, i8 %val seq_cst110  ret i8 %result111}112 113define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {114; CHECK-LABEL: atomicrmw_udec_wrap_i16:115; CHECK:       # %bb.0:116; CHECK-NEXT:    movzwl (%rdi), %eax117; CHECK-NEXT:    .p2align 4118; CHECK-NEXT:  .LBB5_1: # %atomicrmw.start119; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1120; CHECK-NEXT:    movl %eax, %ecx121; CHECK-NEXT:    subw $1, %cx122; CHECK-NEXT:    cmpw %si, %ax123; CHECK-NEXT:    cmoval %esi, %ecx124; CHECK-NEXT:    cmpw $1, %ax125; CHECK-NEXT:    cmovbl %esi, %ecx126; CHECK-NEXT:    lock cmpxchgw %cx, (%rdi)127; CHECK-NEXT:    jne .LBB5_1128; CHECK-NEXT:  # %bb.2: # %atomicrmw.end129; CHECK-NEXT:    retq130  %result = atomicrmw udec_wrap ptr %ptr, i16 %val seq_cst131  ret i16 %result132}133 134define i32 @atomicrmw_udec_wrap_i32(ptr %ptr, i32 %val) {135; CHECK-LABEL: atomicrmw_udec_wrap_i32:136; CHECK:       # %bb.0:137; CHECK-NEXT:    movl (%rdi), %eax138; CHECK-NEXT:    .p2align 4139; CHECK-NEXT:  .LBB6_1: # %atomicrmw.start140; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1141; CHECK-NEXT:    leal -1(%rax), %ecx142; CHECK-NEXT:    cmpl %esi, %eax143; CHECK-NEXT:    cmoval %esi, %ecx144; CHECK-NEXT:    cmpl $1, %eax145; CHECK-NEXT:    cmovbl %esi, %ecx146; CHECK-NEXT:    # kill: def $eax killed $eax killed $rax147; CHECK-NEXT:    lock cmpxchgl %ecx, (%rdi)148; CHECK-NEXT:    # kill: def $eax killed $eax def $rax149; CHECK-NEXT:    jne .LBB6_1150; CHECK-NEXT:  # %bb.2: # %atomicrmw.end151; CHECK-NEXT:    # kill: def $eax killed $eax killed $rax152; CHECK-NEXT:    retq153  %result = atomicrmw udec_wrap ptr %ptr, i32 %val seq_cst154  ret i32 %result155}156 157define i64 @atomicrmw_udec_wrap_i64(ptr %ptr, i64 %val) {158; CHECK-LABEL: atomicrmw_udec_wrap_i64:159; CHECK:       # %bb.0:160; CHECK-NEXT:    movq (%rdi), %rax161; CHECK-NEXT:    .p2align 4162; CHECK-NEXT:  .LBB7_1: # %atomicrmw.start163; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1164; CHECK-NEXT:    leaq -1(%rax), %rcx165; CHECK-NEXT:    cmpq %rsi, %rax166; CHECK-NEXT:    cmovaq %rsi, %rcx167; CHECK-NEXT:    cmpq $1, %rax168; CHECK-NEXT:    cmovbq %rsi, %rcx169; CHECK-NEXT:    lock cmpxchgq %rcx, (%rdi)170; CHECK-NEXT:    jne .LBB7_1171; CHECK-NEXT:  # %bb.2: # %atomicrmw.end172; CHECK-NEXT:    retq173  %result = atomicrmw udec_wrap ptr %ptr, i64 %val seq_cst174  ret i64 %result175}176