brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.8 KiB · 362135c Raw
294 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=+cmov -mtriple=i386-pc-linux -verify-machineinstrs < %s | FileCheck %s -check-prefix=LINUX3; RUN: llc -mattr=+cmov -mtriple=i386-macosx -relocation-model=pic -verify-machineinstrs < %s | FileCheck %s -check-prefix=PIC4 5@sc64 = external dso_local global i646 7define i64 @atomic_max_i64() nounwind {8; LINUX-LABEL: atomic_max_i64:9; LINUX:       # %bb.0: # %entry10; LINUX-NEXT:    pushl %ebx11; LINUX-NEXT:    pushl %esi12; LINUX-NEXT:    movl sc64+4, %edx13; LINUX-NEXT:    movl sc64, %eax14; LINUX-NEXT:    movl $5, %esi15; LINUX-NEXT:    .p2align 416; LINUX-NEXT:  .LBB0_1: # %atomicrmw.start17; LINUX-NEXT:    # =>This Inner Loop Header: Depth=118; LINUX-NEXT:    cmpl %eax, %esi19; LINUX-NEXT:    movl $0, %ecx20; LINUX-NEXT:    sbbl %edx, %ecx21; LINUX-NEXT:    movl $0, %ecx22; LINUX-NEXT:    cmovll %edx, %ecx23; LINUX-NEXT:    movl $5, %ebx24; LINUX-NEXT:    cmovll %eax, %ebx25; LINUX-NEXT:    lock cmpxchg8b sc6426; LINUX-NEXT:    jne .LBB0_127; LINUX-NEXT:  # %bb.2: # %atomicrmw.end28; LINUX-NEXT:    popl %esi29; LINUX-NEXT:    popl %ebx30; LINUX-NEXT:    retl31;32; PIC-LABEL: atomic_max_i64:33; PIC:       ## %bb.0: ## %entry34; PIC-NEXT:    pushl %ebx35; PIC-NEXT:    pushl %edi36; PIC-NEXT:    pushl %esi37; PIC-NEXT:    calll L0$pb38; PIC-NEXT:  L0$pb:39; PIC-NEXT:    popl %eax40; PIC-NEXT:    movl L_sc64$non_lazy_ptr-L0$pb(%eax), %esi41; PIC-NEXT:    movl (%esi), %eax42; PIC-NEXT:    movl 4(%esi), %edx43; PIC-NEXT:    movl $5, %edi44; PIC-NEXT:    .p2align 445; PIC-NEXT:  LBB0_1: ## %atomicrmw.start46; PIC-NEXT:    ## =>This Inner Loop Header: Depth=147; PIC-NEXT:    cmpl %eax, %edi48; PIC-NEXT:    movl $0, %ecx49; PIC-NEXT:    sbbl %edx, %ecx50; PIC-NEXT:    movl $0, %ecx51; PIC-NEXT:    cmovll %edx, %ecx52; PIC-NEXT:    movl $5, %ebx53; PIC-NEXT:    cmovll %eax, %ebx54; PIC-NEXT:    lock cmpxchg8b (%esi)55; PIC-NEXT:    jne LBB0_156; PIC-NEXT:  ## %bb.2: ## %atomicrmw.end57; PIC-NEXT:    popl %esi58; PIC-NEXT:    popl %edi59; PIC-NEXT:    popl %ebx60; PIC-NEXT:    retl61entry:62  %max = atomicrmw max ptr @sc64, i64 5 acquire63  ret i64 %max64}65 66define i64 @atomic_min_i64() nounwind {67; LINUX-LABEL: atomic_min_i64:68; LINUX:       # %bb.0: # %entry69; LINUX-NEXT:    pushl %ebx70; LINUX-NEXT:    movl sc64+4, %edx71; LINUX-NEXT:    movl sc64, %eax72; LINUX-NEXT:    .p2align 473; LINUX-NEXT:  .LBB1_1: # %atomicrmw.start74; LINUX-NEXT:    # =>This Inner Loop Header: Depth=175; LINUX-NEXT:    cmpl $7, %eax76; LINUX-NEXT:    movl %edx, %ecx77; LINUX-NEXT:    sbbl $0, %ecx78; LINUX-NEXT:    movl $0, %ecx79; LINUX-NEXT:    cmovll %edx, %ecx80; LINUX-NEXT:    movl $6, %ebx81; LINUX-NEXT:    cmovll %eax, %ebx82; LINUX-NEXT:    lock cmpxchg8b sc6483; LINUX-NEXT:    jne .LBB1_184; LINUX-NEXT:  # %bb.2: # %atomicrmw.end85; LINUX-NEXT:    popl %ebx86; LINUX-NEXT:    retl87;88; PIC-LABEL: atomic_min_i64:89; PIC:       ## %bb.0: ## %entry90; PIC-NEXT:    pushl %ebx91; PIC-NEXT:    pushl %esi92; PIC-NEXT:    calll L1$pb93; PIC-NEXT:  L1$pb:94; PIC-NEXT:    popl %eax95; PIC-NEXT:    movl L_sc64$non_lazy_ptr-L1$pb(%eax), %esi96; PIC-NEXT:    movl (%esi), %eax97; PIC-NEXT:    movl 4(%esi), %edx98; PIC-NEXT:    .p2align 499; PIC-NEXT:  LBB1_1: ## %atomicrmw.start100; PIC-NEXT:    ## =>This Inner Loop Header: Depth=1101; PIC-NEXT:    cmpl $7, %eax102; PIC-NEXT:    movl %edx, %ecx103; PIC-NEXT:    sbbl $0, %ecx104; PIC-NEXT:    movl $0, %ecx105; PIC-NEXT:    cmovll %edx, %ecx106; PIC-NEXT:    movl $6, %ebx107; PIC-NEXT:    cmovll %eax, %ebx108; PIC-NEXT:    lock cmpxchg8b (%esi)109; PIC-NEXT:    jne LBB1_1110; PIC-NEXT:  ## %bb.2: ## %atomicrmw.end111; PIC-NEXT:    popl %esi112; PIC-NEXT:    popl %ebx113; PIC-NEXT:    retl114entry:115  %min = atomicrmw min ptr @sc64, i64 6 acquire116  ret i64 %min117}118 119define i64 @atomic_umax_i64() nounwind {120; LINUX-LABEL: atomic_umax_i64:121; LINUX:       # %bb.0: # %entry122; LINUX-NEXT:    pushl %ebx123; LINUX-NEXT:    pushl %esi124; LINUX-NEXT:    movl sc64+4, %edx125; LINUX-NEXT:    movl sc64, %eax126; LINUX-NEXT:    movl $7, %esi127; LINUX-NEXT:    .p2align 4128; LINUX-NEXT:  .LBB2_1: # %atomicrmw.start129; LINUX-NEXT:    # =>This Inner Loop Header: Depth=1130; LINUX-NEXT:    cmpl %eax, %esi131; LINUX-NEXT:    movl $0, %ecx132; LINUX-NEXT:    sbbl %edx, %ecx133; LINUX-NEXT:    movl $0, %ecx134; LINUX-NEXT:    cmovbl %edx, %ecx135; LINUX-NEXT:    movl $7, %ebx136; LINUX-NEXT:    cmovbl %eax, %ebx137; LINUX-NEXT:    lock cmpxchg8b sc64138; LINUX-NEXT:    jne .LBB2_1139; LINUX-NEXT:  # %bb.2: # %atomicrmw.end140; LINUX-NEXT:    popl %esi141; LINUX-NEXT:    popl %ebx142; LINUX-NEXT:    retl143;144; PIC-LABEL: atomic_umax_i64:145; PIC:       ## %bb.0: ## %entry146; PIC-NEXT:    pushl %ebx147; PIC-NEXT:    pushl %edi148; PIC-NEXT:    pushl %esi149; PIC-NEXT:    calll L2$pb150; PIC-NEXT:  L2$pb:151; PIC-NEXT:    popl %eax152; PIC-NEXT:    movl L_sc64$non_lazy_ptr-L2$pb(%eax), %esi153; PIC-NEXT:    movl (%esi), %eax154; PIC-NEXT:    movl 4(%esi), %edx155; PIC-NEXT:    movl $7, %edi156; PIC-NEXT:    .p2align 4157; PIC-NEXT:  LBB2_1: ## %atomicrmw.start158; PIC-NEXT:    ## =>This Inner Loop Header: Depth=1159; PIC-NEXT:    cmpl %eax, %edi160; PIC-NEXT:    movl $0, %ecx161; PIC-NEXT:    sbbl %edx, %ecx162; PIC-NEXT:    movl $0, %ecx163; PIC-NEXT:    cmovbl %edx, %ecx164; PIC-NEXT:    movl $7, %ebx165; PIC-NEXT:    cmovbl %eax, %ebx166; PIC-NEXT:    lock cmpxchg8b (%esi)167; PIC-NEXT:    jne LBB2_1168; PIC-NEXT:  ## %bb.2: ## %atomicrmw.end169; PIC-NEXT:    popl %esi170; PIC-NEXT:    popl %edi171; PIC-NEXT:    popl %ebx172; PIC-NEXT:    retl173entry:174  %umax = atomicrmw umax ptr @sc64, i64 7 acquire175  ret i64 %umax176}177 178define i64 @atomic_umin_i64() nounwind {179; LINUX-LABEL: atomic_umin_i64:180; LINUX:       # %bb.0: # %entry181; LINUX-NEXT:    pushl %ebx182; LINUX-NEXT:    movl sc64+4, %edx183; LINUX-NEXT:    movl sc64, %eax184; LINUX-NEXT:    .p2align 4185; LINUX-NEXT:  .LBB3_1: # %atomicrmw.start186; LINUX-NEXT:    # =>This Inner Loop Header: Depth=1187; LINUX-NEXT:    cmpl $9, %eax188; LINUX-NEXT:    movl %edx, %ecx189; LINUX-NEXT:    sbbl $0, %ecx190; LINUX-NEXT:    movl $0, %ecx191; LINUX-NEXT:    cmovbl %edx, %ecx192; LINUX-NEXT:    movl $8, %ebx193; LINUX-NEXT:    cmovbl %eax, %ebx194; LINUX-NEXT:    lock cmpxchg8b sc64195; LINUX-NEXT:    jne .LBB3_1196; LINUX-NEXT:  # %bb.2: # %atomicrmw.end197; LINUX-NEXT:    popl %ebx198; LINUX-NEXT:    retl199;200; PIC-LABEL: atomic_umin_i64:201; PIC:       ## %bb.0: ## %entry202; PIC-NEXT:    pushl %ebx203; PIC-NEXT:    pushl %esi204; PIC-NEXT:    calll L3$pb205; PIC-NEXT:  L3$pb:206; PIC-NEXT:    popl %eax207; PIC-NEXT:    movl L_sc64$non_lazy_ptr-L3$pb(%eax), %esi208; PIC-NEXT:    movl (%esi), %eax209; PIC-NEXT:    movl 4(%esi), %edx210; PIC-NEXT:    .p2align 4211; PIC-NEXT:  LBB3_1: ## %atomicrmw.start212; PIC-NEXT:    ## =>This Inner Loop Header: Depth=1213; PIC-NEXT:    cmpl $9, %eax214; PIC-NEXT:    movl %edx, %ecx215; PIC-NEXT:    sbbl $0, %ecx216; PIC-NEXT:    movl $0, %ecx217; PIC-NEXT:    cmovbl %edx, %ecx218; PIC-NEXT:    movl $8, %ebx219; PIC-NEXT:    cmovbl %eax, %ebx220; PIC-NEXT:    lock cmpxchg8b (%esi)221; PIC-NEXT:    jne LBB3_1222; PIC-NEXT:  ## %bb.2: ## %atomicrmw.end223; PIC-NEXT:    popl %esi224; PIC-NEXT:    popl %ebx225; PIC-NEXT:    retl226entry:227  %umin = atomicrmw umin ptr @sc64, i64 8 acquire228  ret i64 %umin229}230 231@id = internal global i64 0, align 8232 233define void @tf_bug(ptr %ptr) nounwind {234; LINUX-LABEL: tf_bug:235; LINUX:       # %bb.0: # %entry236; LINUX-NEXT:    pushl %ebx237; LINUX-NEXT:    pushl %esi238; LINUX-NEXT:    movl {{[0-9]+}}(%esp), %esi239; LINUX-NEXT:    movl id+4, %edx240; LINUX-NEXT:    movl id, %eax241; LINUX-NEXT:    .p2align 4242; LINUX-NEXT:  .LBB4_1: # %atomicrmw.start243; LINUX-NEXT:    # =>This Inner Loop Header: Depth=1244; LINUX-NEXT:    movl %eax, %ebx245; LINUX-NEXT:    addl $1, %ebx246; LINUX-NEXT:    movl %edx, %ecx247; LINUX-NEXT:    adcl $0, %ecx248; LINUX-NEXT:    lock cmpxchg8b id249; LINUX-NEXT:    jne .LBB4_1250; LINUX-NEXT:  # %bb.2: # %atomicrmw.end251; LINUX-NEXT:    addl $1, %eax252; LINUX-NEXT:    adcl $0, %edx253; LINUX-NEXT:    movl %eax, (%esi)254; LINUX-NEXT:    movl %edx, 4(%esi)255; LINUX-NEXT:    popl %esi256; LINUX-NEXT:    popl %ebx257; LINUX-NEXT:    retl258;259; PIC-LABEL: tf_bug:260; PIC:       ## %bb.0: ## %entry261; PIC-NEXT:    pushl %ebx262; PIC-NEXT:    pushl %edi263; PIC-NEXT:    pushl %esi264; PIC-NEXT:    calll L4$pb265; PIC-NEXT:  L4$pb:266; PIC-NEXT:    popl %edi267; PIC-NEXT:    movl {{[0-9]+}}(%esp), %esi268; PIC-NEXT:    movl _id-L4$pb+4(%edi), %edx269; PIC-NEXT:    movl _id-L4$pb(%edi), %eax270; PIC-NEXT:    .p2align 4271; PIC-NEXT:  LBB4_1: ## %atomicrmw.start272; PIC-NEXT:    ## =>This Inner Loop Header: Depth=1273; PIC-NEXT:    movl %eax, %ebx274; PIC-NEXT:    addl $1, %ebx275; PIC-NEXT:    movl %edx, %ecx276; PIC-NEXT:    adcl $0, %ecx277; PIC-NEXT:    lock cmpxchg8b _id-L4$pb(%edi)278; PIC-NEXT:    jne LBB4_1279; PIC-NEXT:  ## %bb.2: ## %atomicrmw.end280; PIC-NEXT:    addl $1, %eax281; PIC-NEXT:    adcl $0, %edx282; PIC-NEXT:    movl %eax, (%esi)283; PIC-NEXT:    movl %edx, 4(%esi)284; PIC-NEXT:    popl %esi285; PIC-NEXT:    popl %edi286; PIC-NEXT:    popl %ebx287; PIC-NEXT:    retl288entry:289  %tmp1 = atomicrmw add ptr @id, i64 1 seq_cst290  %tmp2 = add i64 %tmp1, 1291  store i64 %tmp2, ptr %ptr, align 4292  ret void293}294