brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.6 KiB · cb5458e Raw
288 lines · plain
1; RUN: llc < %s -O0 -mtriple=x86_64-unknown-unknown -mcpu=corei7 -verify-machineinstrs -show-mc-encoding | FileCheck %s --check-prefix X642; RUN: llc < %s -O0 -mtriple=i386-unknown-unknown -mcpu=corei7 -verify-machineinstrs | FileCheck %s --check-prefix X323 4@sc16 = external dso_local global i165@fsc16 = external dso_local global half6 7define void @atomic_fetch_add16() nounwind {8; X64-LABEL:   atomic_fetch_add169; X32-LABEL:   atomic_fetch_add1610entry:11; 32-bit12  %t1 = atomicrmw add  ptr @sc16, i16 1 acquire13; X64:       lock14; X64:       incw15; X32:       lock16; X32:       incw17  %t2 = atomicrmw add  ptr @sc16, i16 3 acquire18; X64:       lock19; X64:       addw $3, {{.*}} # encoding: [0x66,0xf020; X32:       lock21; X32:       addw $322  %t3 = atomicrmw add  ptr @sc16, i16 5 acquire23; X64:       lock24; X64:       xaddw {{.*}} # encoding: [0x66,0xf025; X32:       lock26; X32:       xaddw27  %t4 = atomicrmw add  ptr @sc16, i16 %t3 acquire28; X64:       lock29; X64:       addw {{.*}} # encoding: [0x66,0xf030; X32:       lock31; X32:       addw32  ret void33; X64:       ret34; X32:       ret35}36 37define void @atomic_fetch_sub16() nounwind {38; X64-LABEL:   atomic_fetch_sub1639; X32-LABEL:   atomic_fetch_sub1640  %t1 = atomicrmw sub  ptr @sc16, i16 1 acquire41; X64:       lock42; X64:       decw43; X32:       lock44; X32:       decw45  %t2 = atomicrmw sub  ptr @sc16, i16 3 acquire46; X64:       lock47; X64:       subw $3, {{.*}} # encoding: [0x66,0xf048; X32:       lock49; X32:       subw $350  %t3 = atomicrmw sub  ptr @sc16, i16 5 acquire51; X64:       lock52; X64:       xaddw {{.*}} # encoding: [0x66,0xf053; X32:       lock54; X32:       xaddw55  %t4 = atomicrmw sub  ptr @sc16, i16 %t3 acquire56; X64:       lock57; X64:       subw {{.*}} # encoding: [0x66,0xf058; X32:       lock59; X32:       subw60  ret void61; X64:       ret62; X32:       ret63}64 65define void @atomic_fetch_and16() nounwind {66; X64-LABEL:   atomic_fetch_and1667; X32-LABEL:   atomic_fetch_and1668  %t1 = atomicrmw and  ptr @sc16, i16 3 acquire69; X64:       lock70; X64:       andw $3, {{.*}} # encoding: [0x66,0xf071; X32:       lock72; X32:       andw $373  %t2 = atomicrmw and  ptr @sc16, i16 5 acquire74; X64:       andl75; X64:       lock76; X64:       cmpxchgw77; X32:       andl78; X32:       lock79; X32:       cmpxchgw80  %t3 = atomicrmw and  ptr @sc16, i16 %t2 acquire81; X64:       lock82; X64:       andw {{.*}} # encoding: [0x66,0xf083; X32:       lock84; X32:       andw85  ret void86; X64:       ret87; X32:       ret88}89 90define void @atomic_fetch_or16() nounwind {91; X64-LABEL:   atomic_fetch_or1692; X32-LABEL:   atomic_fetch_or1693  %t1 = atomicrmw or   ptr @sc16, i16 3 acquire94; X64:       lock95; X64:       orw $3, {{.*}} # encoding: [0x66,0xf096; X32:       lock97; X32:       orw $398  %t2 = atomicrmw or   ptr @sc16, i16 5 acquire99; X64:       orl100; X64:       lock101; X64:       cmpxchgw102; X32:       orl103; X32:       lock104; X32:       cmpxchgw105  %t3 = atomicrmw or   ptr @sc16, i16 %t2 acquire106; X64:       lock107; X64:       orw {{.*}} # encoding: [0x66,0xf0108; X32:       lock109; X32:       orw110  ret void111; X64:       ret112; X32:       ret113}114 115define void @atomic_fetch_xor16() nounwind {116; X64-LABEL:   atomic_fetch_xor16117; X32-LABEL:   atomic_fetch_xor16118  %t1 = atomicrmw xor  ptr @sc16, i16 3 acquire119; X64:       lock120; X64:       xorw $3, {{.*}} # encoding: [0x66,0xf0121; X32:       lock122; X32:       xorw $3123  %t2 = atomicrmw xor  ptr @sc16, i16 5 acquire124; X64:       xorl125; X64:       lock126; X64:       cmpxchgw127; X32:       xorl128; X32:       lock129; X32:       cmpxchgw130  %t3 = atomicrmw xor  ptr @sc16, i16 %t2 acquire131; X64:       lock132; X64:       xorw {{.*}} # encoding: [0x66,0xf0133; X32:       lock134; X32:       xorw135  ret void136; X64:       ret137; X32:       ret138}139 140define void @atomic_fetch_nand16(i16 %x) nounwind {141; X64-LABEL:   atomic_fetch_nand16142; X32-LABEL:   atomic_fetch_nand16143  %t1 = atomicrmw nand ptr @sc16, i16 %x acquire144; X64:       andl145; X64:       notl146; X64:       lock147; X64:       cmpxchgw148; X32:       andl149; X32:       notl150; X32:       lock151; X32:       cmpxchgw152  ret void153; X64:       ret154; X32:       ret155}156 157define void @atomic_fetch_max16(i16 %x) nounwind {158; X64-LABEL:   atomic_fetch_max16159; X32-LABEL:   atomic_fetch_max16160  %t1 = atomicrmw max  ptr @sc16, i16 %x acquire161; X64:       movw162; X64:       movw163; X64:       subw164; X64:       cmov165; X64:       lock166; X64:       cmpxchgw167 168; X32:       movw169; X32:       movw170; X32:       subw171; X32:       cmov172; X32:       lock173; X32:       cmpxchgw174  ret void175; X64:       ret176; X32:       ret177}178 179define void @atomic_fetch_min16(i16 %x) nounwind {180; X64-LABEL:   atomic_fetch_min16181; X32-LABEL:   atomic_fetch_min16182  %t1 = atomicrmw min  ptr @sc16, i16 %x acquire183; X64:       movw184; X64:       movw185; X64:       subw186; X64:       cmov187; X64:       lock188; X64:       cmpxchgw189 190; X32:       movw191; X32:       movw192; X32:       subw193; X32:       cmov194; X32:       lock195; X32:       cmpxchgw196  ret void197; X64:       ret198; X32:       ret199}200 201define void @atomic_fetch_umax16(i16 %x) nounwind {202; X64-LABEL:   atomic_fetch_umax16203; X32-LABEL:   atomic_fetch_umax16204  %t1 = atomicrmw umax ptr @sc16, i16 %x acquire205; X64:       movw206; X64:       movw207; X64:       subw208; X64:       cmov209; X64:       lock210; X64:       cmpxchgw211 212; X32:       movw213; X32:       movw214; X32:       subw215; X32:       cmov216; X32:       lock217; X32:       cmpxchgw218  ret void219; X64:       ret220; X32:       ret221}222 223define void @atomic_fetch_umin16(i16 %x) nounwind {224; X64-LABEL:   atomic_fetch_umin16225; X32-LABEL:   atomic_fetch_umin16226  %t1 = atomicrmw umin ptr @sc16, i16 %x acquire227; X64:       movw228; X64:       movw229; X64:       subw230; X64:       cmov231; X64:       lock232; X64:       cmpxchgw233 234; X32:       movw235; X32:       movw236; X32:       subw237; X32:       cmov238; X32:       lock239; X32:       cmpxchgw240  ret void241; X64:       ret242; X32:       ret243}244 245define void @atomic_fetch_cmpxchg16() nounwind {246  %t1 = cmpxchg ptr @sc16, i16 0, i16 1 acquire acquire247; X64:       lock248; X64:       cmpxchgw249; X32:       lock250; X32:       cmpxchgw251  ret void252; X64:       ret253; X32:       ret254}255 256define void @atomic_fetch_store16(i16 %x) nounwind {257  store atomic i16 %x, ptr @sc16 release, align 4258; X64-NOT:   lock259; X64:       movw260; X32-NOT:   lock261; X32:       movw262  ret void263; X64:       ret264; X32:       ret265}266 267define void @atomic_fetch_swap16(i16 %x) nounwind {268  %t1 = atomicrmw xchg ptr @sc16, i16 %x acquire269; X64-NOT:   lock270; X64:       xchgw271; X32-NOT:   lock272; X32:       xchgw273  ret void274; X64:       ret275; X32:       ret276}277 278define void @atomic_fetch_swapf16(half %x) nounwind {279  %t1 = atomicrmw xchg ptr @fsc16, half %x acquire280; X64-NOT:   lock281; X64:       xchgw282; X32-NOT:   lock283; X32:       xchgw284  ret void285; X64:       ret286; X32:       ret287}288