brintos

brintos / llvm-project-archived public Read only

0
0
Text · 27.0 KiB · 8ff5f33 Raw
696 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -O0 -mtriple=i686-- -mcpu=corei7 -verify-machineinstrs | FileCheck %s --check-prefix X323 4@sc64 = external dso_local global i645 6define void @atomic_fetch_add64() nounwind {7; X32-LABEL: atomic_fetch_add64:8; X32:       # %bb.0: # %entry9; X32-NEXT:    pushl %ebx10; X32-NEXT:    pushl %esi11; X32-NEXT:    subl $40, %esp12; X32-NEXT:    movl sc64+4, %edx13; X32-NEXT:    movl sc64, %eax14; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill15; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill16; X32-NEXT:    jmp .LBB0_117; X32-NEXT:  .LBB0_1: # %atomicrmw.start1418; X32-NEXT:    # =>This Inner Loop Header: Depth=119; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload20; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload21; X32-NEXT:    movl %eax, %ebx22; X32-NEXT:    addl $1, %ebx23; X32-NEXT:    movl %edx, %ecx24; X32-NEXT:    adcl $0, %ecx25; X32-NEXT:    lock cmpxchg8b sc6426; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill27; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill28; X32-NEXT:    jne .LBB0_129; X32-NEXT:    jmp .LBB0_230; X32-NEXT:  .LBB0_2: # %atomicrmw.end1331; X32-NEXT:    movl sc64+4, %edx32; X32-NEXT:    movl sc64, %eax33; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill34; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill35; X32-NEXT:    jmp .LBB0_336; X32-NEXT:  .LBB0_3: # %atomicrmw.start837; X32-NEXT:    # =>This Inner Loop Header: Depth=138; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload39; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload40; X32-NEXT:    movl %eax, %ebx41; X32-NEXT:    addl $3, %ebx42; X32-NEXT:    movl %edx, %ecx43; X32-NEXT:    adcl $0, %ecx44; X32-NEXT:    lock cmpxchg8b sc6445; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill46; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill47; X32-NEXT:    jne .LBB0_348; X32-NEXT:    jmp .LBB0_449; X32-NEXT:  .LBB0_4: # %atomicrmw.end750; X32-NEXT:    movl sc64+4, %edx51; X32-NEXT:    movl sc64, %eax52; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill53; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill54; X32-NEXT:    jmp .LBB0_555; X32-NEXT:  .LBB0_5: # %atomicrmw.start256; X32-NEXT:    # =>This Inner Loop Header: Depth=157; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload58; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload59; X32-NEXT:    movl %eax, %ebx60; X32-NEXT:    addl $5, %ebx61; X32-NEXT:    movl %edx, %ecx62; X32-NEXT:    adcl $0, %ecx63; X32-NEXT:    lock cmpxchg8b sc6464; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill65; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill66; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill67; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill68; X32-NEXT:    jne .LBB0_569; X32-NEXT:    jmp .LBB0_670; X32-NEXT:  .LBB0_6: # %atomicrmw.end171; X32-NEXT:    movl sc64+4, %edx72; X32-NEXT:    movl sc64, %eax73; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill74; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill75; X32-NEXT:    jmp .LBB0_776; X32-NEXT:  .LBB0_7: # %atomicrmw.start77; X32-NEXT:    # =>This Inner Loop Header: Depth=178; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload79; X32-NEXT:    movl (%esp), %eax # 4-byte Reload80; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload81; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload82; X32-NEXT:    movl %eax, %ebx83; X32-NEXT:    addl %ecx, %ebx84; X32-NEXT:    movl %edx, %ecx85; X32-NEXT:    adcl %esi, %ecx86; X32-NEXT:    lock cmpxchg8b sc6487; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill88; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill89; X32-NEXT:    jne .LBB0_790; X32-NEXT:    jmp .LBB0_891; X32-NEXT:  .LBB0_8: # %atomicrmw.end92; X32-NEXT:    addl $40, %esp93; X32-NEXT:    popl %esi94; X32-NEXT:    popl %ebx95; X32-NEXT:    retl96entry:97  %t1 = atomicrmw add  ptr @sc64, i64 1 acquire98  %t2 = atomicrmw add  ptr @sc64, i64 3 acquire99  %t3 = atomicrmw add  ptr @sc64, i64 5 acquire100  %t4 = atomicrmw add  ptr @sc64, i64 %t3 acquire101  ret void102}103 104define void @atomic_fetch_sub64() nounwind {105; X32-LABEL: atomic_fetch_sub64:106; X32:       # %bb.0:107; X32-NEXT:    pushl %ebx108; X32-NEXT:    pushl %esi109; X32-NEXT:    subl $40, %esp110; X32-NEXT:    movl sc64+4, %edx111; X32-NEXT:    movl sc64, %eax112; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill113; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill114; X32-NEXT:    jmp .LBB1_1115; X32-NEXT:  .LBB1_1: # %atomicrmw.start14116; X32-NEXT:    # =>This Inner Loop Header: Depth=1117; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload118; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload119; X32-NEXT:    movl %eax, %ebx120; X32-NEXT:    addl $-1, %ebx121; X32-NEXT:    movl %edx, %ecx122; X32-NEXT:    adcl $-1, %ecx123; X32-NEXT:    lock cmpxchg8b sc64124; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill125; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill126; X32-NEXT:    jne .LBB1_1127; X32-NEXT:    jmp .LBB1_2128; X32-NEXT:  .LBB1_2: # %atomicrmw.end13129; X32-NEXT:    movl sc64+4, %edx130; X32-NEXT:    movl sc64, %eax131; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill132; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill133; X32-NEXT:    jmp .LBB1_3134; X32-NEXT:  .LBB1_3: # %atomicrmw.start8135; X32-NEXT:    # =>This Inner Loop Header: Depth=1136; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload137; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload138; X32-NEXT:    movl %eax, %ebx139; X32-NEXT:    addl $-3, %ebx140; X32-NEXT:    movl %edx, %ecx141; X32-NEXT:    adcl $-1, %ecx142; X32-NEXT:    lock cmpxchg8b sc64143; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill144; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill145; X32-NEXT:    jne .LBB1_3146; X32-NEXT:    jmp .LBB1_4147; X32-NEXT:  .LBB1_4: # %atomicrmw.end7148; X32-NEXT:    movl sc64+4, %edx149; X32-NEXT:    movl sc64, %eax150; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill151; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill152; X32-NEXT:    jmp .LBB1_5153; X32-NEXT:  .LBB1_5: # %atomicrmw.start2154; X32-NEXT:    # =>This Inner Loop Header: Depth=1155; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload156; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload157; X32-NEXT:    movl %eax, %ebx158; X32-NEXT:    addl $-5, %ebx159; X32-NEXT:    movl %edx, %ecx160; X32-NEXT:    adcl $-1, %ecx161; X32-NEXT:    lock cmpxchg8b sc64162; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill163; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill164; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill165; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill166; X32-NEXT:    jne .LBB1_5167; X32-NEXT:    jmp .LBB1_6168; X32-NEXT:  .LBB1_6: # %atomicrmw.end1169; X32-NEXT:    movl sc64+4, %edx170; X32-NEXT:    movl sc64, %eax171; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill172; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill173; X32-NEXT:    jmp .LBB1_7174; X32-NEXT:  .LBB1_7: # %atomicrmw.start175; X32-NEXT:    # =>This Inner Loop Header: Depth=1176; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload177; X32-NEXT:    movl (%esp), %eax # 4-byte Reload178; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload179; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload180; X32-NEXT:    movl %eax, %ebx181; X32-NEXT:    subl %ecx, %ebx182; X32-NEXT:    movl %edx, %ecx183; X32-NEXT:    sbbl %esi, %ecx184; X32-NEXT:    lock cmpxchg8b sc64185; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill186; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill187; X32-NEXT:    jne .LBB1_7188; X32-NEXT:    jmp .LBB1_8189; X32-NEXT:  .LBB1_8: # %atomicrmw.end190; X32-NEXT:    addl $40, %esp191; X32-NEXT:    popl %esi192; X32-NEXT:    popl %ebx193; X32-NEXT:    retl194  %t1 = atomicrmw sub  ptr @sc64, i64 1 acquire195  %t2 = atomicrmw sub  ptr @sc64, i64 3 acquire196  %t3 = atomicrmw sub  ptr @sc64, i64 5 acquire197  %t4 = atomicrmw sub  ptr @sc64, i64 %t3 acquire198  ret void199}200 201define void @atomic_fetch_and64() nounwind {202; X32-LABEL: atomic_fetch_and64:203; X32:       # %bb.0:204; X32-NEXT:    pushl %ebx205; X32-NEXT:    pushl %esi206; X32-NEXT:    subl $32, %esp207; X32-NEXT:    movl sc64+4, %edx208; X32-NEXT:    movl sc64, %eax209; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill210; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill211; X32-NEXT:    jmp .LBB2_1212; X32-NEXT:  .LBB2_1: # %atomicrmw.start8213; X32-NEXT:    # =>This Inner Loop Header: Depth=1214; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload215; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload216; X32-NEXT:    movl %eax, %ebx217; X32-NEXT:    andl $3, %ebx218; X32-NEXT:    xorl %ecx, %ecx219; X32-NEXT:    lock cmpxchg8b sc64220; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill221; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill222; X32-NEXT:    jne .LBB2_1223; X32-NEXT:    jmp .LBB2_2224; X32-NEXT:  .LBB2_2: # %atomicrmw.end7225; X32-NEXT:    movl sc64+4, %edx226; X32-NEXT:    movl sc64, %eax227; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill228; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill229; X32-NEXT:    jmp .LBB2_3230; X32-NEXT:  .LBB2_3: # %atomicrmw.start2231; X32-NEXT:    # =>This Inner Loop Header: Depth=1232; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload233; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload234; X32-NEXT:    movl %eax, %ebx235; X32-NEXT:    andl $1, %ebx236; X32-NEXT:    movl %edx, %ecx237; X32-NEXT:    andl $1, %ecx238; X32-NEXT:    lock cmpxchg8b sc64239; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill240; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill241; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill242; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill243; X32-NEXT:    jne .LBB2_3244; X32-NEXT:    jmp .LBB2_4245; X32-NEXT:  .LBB2_4: # %atomicrmw.end1246; X32-NEXT:    movl sc64+4, %edx247; X32-NEXT:    movl sc64, %eax248; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill249; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill250; X32-NEXT:    jmp .LBB2_5251; X32-NEXT:  .LBB2_5: # %atomicrmw.start252; X32-NEXT:    # =>This Inner Loop Header: Depth=1253; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload254; X32-NEXT:    movl (%esp), %eax # 4-byte Reload255; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload256; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload257; X32-NEXT:    movl %eax, %ebx258; X32-NEXT:    andl %ecx, %ebx259; X32-NEXT:    movl %edx, %ecx260; X32-NEXT:    andl %esi, %ecx261; X32-NEXT:    lock cmpxchg8b sc64262; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill263; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill264; X32-NEXT:    jne .LBB2_5265; X32-NEXT:    jmp .LBB2_6266; X32-NEXT:  .LBB2_6: # %atomicrmw.end267; X32-NEXT:    addl $32, %esp268; X32-NEXT:    popl %esi269; X32-NEXT:    popl %ebx270; X32-NEXT:    retl271  %t1 = atomicrmw and  ptr @sc64, i64 3 acquire272  %t2 = atomicrmw and  ptr @sc64, i64 4294967297 acquire273  %t3 = atomicrmw and  ptr @sc64, i64 %t2 acquire274  ret void275}276 277define void @atomic_fetch_or64() nounwind {278; X32-LABEL: atomic_fetch_or64:279; X32:       # %bb.0:280; X32-NEXT:    pushl %ebx281; X32-NEXT:    pushl %esi282; X32-NEXT:    subl $32, %esp283; X32-NEXT:    movl sc64+4, %edx284; X32-NEXT:    movl sc64, %eax285; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill286; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill287; X32-NEXT:    jmp .LBB3_1288; X32-NEXT:  .LBB3_1: # %atomicrmw.start8289; X32-NEXT:    # =>This Inner Loop Header: Depth=1290; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload291; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload292; X32-NEXT:    movl %eax, %ebx293; X32-NEXT:    orl $3, %ebx294; X32-NEXT:    movl %ecx, %edx295; X32-NEXT:    lock cmpxchg8b sc64296; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill297; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill298; X32-NEXT:    jne .LBB3_1299; X32-NEXT:    jmp .LBB3_2300; X32-NEXT:  .LBB3_2: # %atomicrmw.end7301; X32-NEXT:    movl sc64+4, %edx302; X32-NEXT:    movl sc64, %eax303; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill304; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill305; X32-NEXT:    jmp .LBB3_3306; X32-NEXT:  .LBB3_3: # %atomicrmw.start2307; X32-NEXT:    # =>This Inner Loop Header: Depth=1308; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload309; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload310; X32-NEXT:    movl %eax, %ebx311; X32-NEXT:    orl $1, %ebx312; X32-NEXT:    movl %edx, %ecx313; X32-NEXT:    orl $1, %ecx314; X32-NEXT:    lock cmpxchg8b sc64315; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill316; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill317; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill318; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill319; X32-NEXT:    jne .LBB3_3320; X32-NEXT:    jmp .LBB3_4321; X32-NEXT:  .LBB3_4: # %atomicrmw.end1322; X32-NEXT:    movl sc64+4, %edx323; X32-NEXT:    movl sc64, %eax324; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill325; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill326; X32-NEXT:    jmp .LBB3_5327; X32-NEXT:  .LBB3_5: # %atomicrmw.start328; X32-NEXT:    # =>This Inner Loop Header: Depth=1329; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload330; X32-NEXT:    movl (%esp), %eax # 4-byte Reload331; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload332; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload333; X32-NEXT:    movl %eax, %ebx334; X32-NEXT:    orl %ecx, %ebx335; X32-NEXT:    movl %edx, %ecx336; X32-NEXT:    orl %esi, %ecx337; X32-NEXT:    lock cmpxchg8b sc64338; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill339; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill340; X32-NEXT:    jne .LBB3_5341; X32-NEXT:    jmp .LBB3_6342; X32-NEXT:  .LBB3_6: # %atomicrmw.end343; X32-NEXT:    addl $32, %esp344; X32-NEXT:    popl %esi345; X32-NEXT:    popl %ebx346; X32-NEXT:    retl347  %t1 = atomicrmw or   ptr @sc64, i64 3 acquire348  %t2 = atomicrmw or   ptr @sc64, i64 4294967297 acquire349  %t3 = atomicrmw or   ptr @sc64, i64 %t2 acquire350  ret void351}352 353define void @atomic_fetch_xor64() nounwind {354; X32-LABEL: atomic_fetch_xor64:355; X32:       # %bb.0:356; X32-NEXT:    pushl %ebx357; X32-NEXT:    pushl %esi358; X32-NEXT:    subl $32, %esp359; X32-NEXT:    movl sc64+4, %edx360; X32-NEXT:    movl sc64, %eax361; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill362; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill363; X32-NEXT:    jmp .LBB4_1364; X32-NEXT:  .LBB4_1: # %atomicrmw.start8365; X32-NEXT:    # =>This Inner Loop Header: Depth=1366; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload367; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload368; X32-NEXT:    movl %eax, %ebx369; X32-NEXT:    xorl $3, %ebx370; X32-NEXT:    movl %ecx, %edx371; X32-NEXT:    lock cmpxchg8b sc64372; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill373; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill374; X32-NEXT:    jne .LBB4_1375; X32-NEXT:    jmp .LBB4_2376; X32-NEXT:  .LBB4_2: # %atomicrmw.end7377; X32-NEXT:    movl sc64+4, %edx378; X32-NEXT:    movl sc64, %eax379; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill380; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill381; X32-NEXT:    jmp .LBB4_3382; X32-NEXT:  .LBB4_3: # %atomicrmw.start2383; X32-NEXT:    # =>This Inner Loop Header: Depth=1384; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload385; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload386; X32-NEXT:    movl %eax, %ebx387; X32-NEXT:    xorl $1, %ebx388; X32-NEXT:    movl %edx, %ecx389; X32-NEXT:    xorl $1, %ecx390; X32-NEXT:    lock cmpxchg8b sc64391; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill392; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill393; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill394; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill395; X32-NEXT:    jne .LBB4_3396; X32-NEXT:    jmp .LBB4_4397; X32-NEXT:  .LBB4_4: # %atomicrmw.end1398; X32-NEXT:    movl sc64+4, %edx399; X32-NEXT:    movl sc64, %eax400; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill401; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill402; X32-NEXT:    jmp .LBB4_5403; X32-NEXT:  .LBB4_5: # %atomicrmw.start404; X32-NEXT:    # =>This Inner Loop Header: Depth=1405; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload406; X32-NEXT:    movl (%esp), %eax # 4-byte Reload407; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload408; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload409; X32-NEXT:    movl %eax, %ebx410; X32-NEXT:    xorl %ecx, %ebx411; X32-NEXT:    movl %edx, %ecx412; X32-NEXT:    xorl %esi, %ecx413; X32-NEXT:    lock cmpxchg8b sc64414; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill415; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill416; X32-NEXT:    jne .LBB4_5417; X32-NEXT:    jmp .LBB4_6418; X32-NEXT:  .LBB4_6: # %atomicrmw.end419; X32-NEXT:    addl $32, %esp420; X32-NEXT:    popl %esi421; X32-NEXT:    popl %ebx422; X32-NEXT:    retl423  %t1 = atomicrmw xor  ptr @sc64, i64 3 acquire424  %t2 = atomicrmw xor  ptr @sc64, i64 4294967297 acquire425  %t3 = atomicrmw xor  ptr @sc64, i64 %t2 acquire426  ret void427}428 429define void @atomic_fetch_nand64(i64 %x) nounwind {430; X32-LABEL: atomic_fetch_nand64:431; X32:       # %bb.0:432; X32-NEXT:    pushl %ebx433; X32-NEXT:    pushl %edi434; X32-NEXT:    pushl %esi435; X32-NEXT:    subl $16, %esp436; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax437; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill438; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax439; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill440; X32-NEXT:    movl sc64+4, %edx441; X32-NEXT:    movl sc64, %eax442; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill443; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill444; X32-NEXT:    jmp .LBB5_1445; X32-NEXT:  .LBB5_1: # %atomicrmw.start446; X32-NEXT:    # =>This Inner Loop Header: Depth=1447; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload448; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload449; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload450; X32-NEXT:    movl (%esp), %edi # 4-byte Reload451; X32-NEXT:    movl %edx, %ecx452; X32-NEXT:    andl %edi, %ecx453; X32-NEXT:    movl %eax, %ebx454; X32-NEXT:    andl %esi, %ebx455; X32-NEXT:    notl %ebx456; X32-NEXT:    notl %ecx457; X32-NEXT:    lock cmpxchg8b sc64458; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill459; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill460; X32-NEXT:    jne .LBB5_1461; X32-NEXT:    jmp .LBB5_2462; X32-NEXT:  .LBB5_2: # %atomicrmw.end463; X32-NEXT:    addl $16, %esp464; X32-NEXT:    popl %esi465; X32-NEXT:    popl %edi466; X32-NEXT:    popl %ebx467; X32-NEXT:    retl468  %t1 = atomicrmw nand ptr @sc64, i64 %x acquire469  ret void470}471 472define void @atomic_fetch_max64(i64 %x) nounwind {473; X32-LABEL: atomic_fetch_max64:474; X32:       # %bb.0:475; X32-NEXT:    pushl %ebx476; X32-NEXT:    pushl %esi477; X32-NEXT:    subl $16, %esp478; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax479; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill480; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax481; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill482; X32-NEXT:    movl sc64+4, %edx483; X32-NEXT:    movl sc64, %eax484; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill485; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill486; X32-NEXT:    jmp .LBB6_1487; X32-NEXT:  .LBB6_1: # %atomicrmw.start488; X32-NEXT:    # =>This Inner Loop Header: Depth=1489; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload490; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload491; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload492; X32-NEXT:    movl (%esp), %ecx # 4-byte Reload493; X32-NEXT:    movl %ebx, %esi494; X32-NEXT:    subl %eax, %esi495; X32-NEXT:    movl %ecx, %esi496; X32-NEXT:    sbbl %edx, %esi497; X32-NEXT:    cmovll %edx, %ecx498; X32-NEXT:    cmovll %eax, %ebx499; X32-NEXT:    lock cmpxchg8b sc64500; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill501; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill502; X32-NEXT:    jne .LBB6_1503; X32-NEXT:    jmp .LBB6_2504; X32-NEXT:  .LBB6_2: # %atomicrmw.end505; X32-NEXT:    addl $16, %esp506; X32-NEXT:    popl %esi507; X32-NEXT:    popl %ebx508; X32-NEXT:    retl509  %t1 = atomicrmw max  ptr @sc64, i64 %x acquire510  ret void511}512 513define void @atomic_fetch_min64(i64 %x) nounwind {514; X32-LABEL: atomic_fetch_min64:515; X32:       # %bb.0:516; X32-NEXT:    pushl %ebx517; X32-NEXT:    pushl %esi518; X32-NEXT:    subl $16, %esp519; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax520; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill521; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax522; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill523; X32-NEXT:    movl sc64+4, %edx524; X32-NEXT:    movl sc64, %eax525; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill526; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill527; X32-NEXT:    jmp .LBB7_1528; X32-NEXT:  .LBB7_1: # %atomicrmw.start529; X32-NEXT:    # =>This Inner Loop Header: Depth=1530; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload531; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload532; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload533; X32-NEXT:    movl (%esp), %ecx # 4-byte Reload534; X32-NEXT:    movl %ebx, %esi535; X32-NEXT:    subl %eax, %esi536; X32-NEXT:    movl %ecx, %esi537; X32-NEXT:    sbbl %edx, %esi538; X32-NEXT:    cmovgel %edx, %ecx539; X32-NEXT:    cmovgel %eax, %ebx540; X32-NEXT:    lock cmpxchg8b sc64541; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill542; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill543; X32-NEXT:    jne .LBB7_1544; X32-NEXT:    jmp .LBB7_2545; X32-NEXT:  .LBB7_2: # %atomicrmw.end546; X32-NEXT:    addl $16, %esp547; X32-NEXT:    popl %esi548; X32-NEXT:    popl %ebx549; X32-NEXT:    retl550  %t1 = atomicrmw min  ptr @sc64, i64 %x acquire551  ret void552}553 554define void @atomic_fetch_umax64(i64 %x) nounwind {555; X32-LABEL: atomic_fetch_umax64:556; X32:       # %bb.0:557; X32-NEXT:    pushl %ebx558; X32-NEXT:    pushl %esi559; X32-NEXT:    subl $16, %esp560; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax561; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill562; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax563; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill564; X32-NEXT:    movl sc64+4, %edx565; X32-NEXT:    movl sc64, %eax566; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill567; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill568; X32-NEXT:    jmp .LBB8_1569; X32-NEXT:  .LBB8_1: # %atomicrmw.start570; X32-NEXT:    # =>This Inner Loop Header: Depth=1571; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload572; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload573; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload574; X32-NEXT:    movl (%esp), %ecx # 4-byte Reload575; X32-NEXT:    movl %ebx, %esi576; X32-NEXT:    subl %eax, %esi577; X32-NEXT:    movl %ecx, %esi578; X32-NEXT:    sbbl %edx, %esi579; X32-NEXT:    cmovbl %edx, %ecx580; X32-NEXT:    cmovbl %eax, %ebx581; X32-NEXT:    lock cmpxchg8b sc64582; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill583; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill584; X32-NEXT:    jne .LBB8_1585; X32-NEXT:    jmp .LBB8_2586; X32-NEXT:  .LBB8_2: # %atomicrmw.end587; X32-NEXT:    addl $16, %esp588; X32-NEXT:    popl %esi589; X32-NEXT:    popl %ebx590; X32-NEXT:    retl591  %t1 = atomicrmw umax ptr @sc64, i64 %x acquire592  ret void593}594 595define void @atomic_fetch_umin64(i64 %x) nounwind {596; X32-LABEL: atomic_fetch_umin64:597; X32:       # %bb.0:598; X32-NEXT:    pushl %ebx599; X32-NEXT:    pushl %esi600; X32-NEXT:    subl $16, %esp601; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax602; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill603; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax604; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill605; X32-NEXT:    movl sc64+4, %edx606; X32-NEXT:    movl sc64, %eax607; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill608; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill609; X32-NEXT:    jmp .LBB9_1610; X32-NEXT:  .LBB9_1: # %atomicrmw.start611; X32-NEXT:    # =>This Inner Loop Header: Depth=1612; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload613; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload614; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload615; X32-NEXT:    movl (%esp), %ecx # 4-byte Reload616; X32-NEXT:    movl %ebx, %esi617; X32-NEXT:    subl %eax, %esi618; X32-NEXT:    movl %ecx, %esi619; X32-NEXT:    sbbl %edx, %esi620; X32-NEXT:    cmovael %edx, %ecx621; X32-NEXT:    cmovael %eax, %ebx622; X32-NEXT:    lock cmpxchg8b sc64623; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill624; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill625; X32-NEXT:    jne .LBB9_1626; X32-NEXT:    jmp .LBB9_2627; X32-NEXT:  .LBB9_2: # %atomicrmw.end628; X32-NEXT:    addl $16, %esp629; X32-NEXT:    popl %esi630; X32-NEXT:    popl %ebx631; X32-NEXT:    retl632  %t1 = atomicrmw umin ptr @sc64, i64 %x acquire633  ret void634}635 636define void @atomic_fetch_cmpxchg64() nounwind {637; X32-LABEL: atomic_fetch_cmpxchg64:638; X32:       # %bb.0:639; X32-NEXT:    pushl %ebx640; X32-NEXT:    xorl %ecx, %ecx641; X32-NEXT:    movl $1, %ebx642; X32-NEXT:    movl %ecx, %eax643; X32-NEXT:    movl %ecx, %edx644; X32-NEXT:    lock cmpxchg8b sc64645; X32-NEXT:    popl %ebx646; X32-NEXT:    retl647  %t1 = cmpxchg ptr @sc64, i64 0, i64 1 acquire acquire648  ret void649}650 651define void @atomic_fetch_store64(i64 %x) nounwind {652; X32-LABEL: atomic_fetch_store64:653; X32:       # %bb.0:654; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax655; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx656; X32-NEXT:    movd %ecx, %xmm0657; X32-NEXT:    pinsrd $1, %eax, %xmm0658; X32-NEXT:    movq %xmm0, sc64659; X32-NEXT:    retl660  store atomic i64 %x, ptr @sc64 release, align 8661  ret void662}663 664define void @atomic_fetch_swap64(i64 %x) nounwind {665; X32-LABEL: atomic_fetch_swap64:666; X32:       # %bb.0:667; X32-NEXT:    pushl %ebx668; X32-NEXT:    subl $16, %esp669; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax670; X32-NEXT:    movl %eax, (%esp) # 4-byte Spill671; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax672; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill673; X32-NEXT:    movl sc64+4, %edx674; X32-NEXT:    movl sc64, %eax675; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill676; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill677; X32-NEXT:    jmp .LBB12_1678; X32-NEXT:  .LBB12_1: # %atomicrmw.start679; X32-NEXT:    # =>This Inner Loop Header: Depth=1680; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload681; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload682; X32-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload683; X32-NEXT:    movl (%esp), %ecx # 4-byte Reload684; X32-NEXT:    lock cmpxchg8b sc64685; X32-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill686; X32-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill687; X32-NEXT:    jne .LBB12_1688; X32-NEXT:    jmp .LBB12_2689; X32-NEXT:  .LBB12_2: # %atomicrmw.end690; X32-NEXT:    addl $16, %esp691; X32-NEXT:    popl %ebx692; X32-NEXT:    retl693  %t1 = atomicrmw xchg ptr @sc64, i64 %x acquire694  ret void695}696