7490 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=mipsel-unknown-linux-gnu --disable-machine-licm -mcpu=mips32 -relocation-model=pic -verify-machineinstrs < %s | \3; RUN: FileCheck %s -check-prefix=MIPS324; RUN: llc -mtriple=mipsel-unknown-linux-gnu -O0 --disable-machine-licm -mcpu=mips32 -relocation-model=pic -verify-machineinstrs < %s | \5; RUN: FileCheck %s -check-prefix=MIPS32O06; RUN: llc -mtriple=mipsel-unknown-linux-gnu --disable-machine-licm -mcpu=mips32r2 -relocation-model=pic -verify-machineinstrs < %s | \7; RUN: FileCheck %s -check-prefix=MIPS32R28; RUN: llc -mtriple=mipsel-unknown-linux-gnu --disable-machine-licm -mcpu=mips32r6 -relocation-model=pic -verify-machineinstrs < %s | \9; RUN: FileCheck %s -check-prefix=MIPS32R610; RUN: llc -mtriple=mipsel-unknown-linux-gnu -O0 --disable-machine-licm -mcpu=mips32r6 -relocation-model=pic -verify-machineinstrs < %s | \11; RUN: FileCheck %s -check-prefix=MIPS32R6O012; RUN: llc -mtriple=mips64el-unknown-linux-gnu --disable-machine-licm -mcpu=mips4 -relocation-model=pic -verify-machineinstrs < %s | \13; RUN: FileCheck %s -check-prefix=MIPS414; RUN: llc -mtriple=mips64el-unknown-linux-gnu --disable-machine-licm -mcpu=mips64 -relocation-model=pic -verify-machineinstrs < %s | \15; RUN: FileCheck %s -check-prefix=MIPS6416; RUN: llc -mtriple=mips64el-unknown-linux-gnu --disable-machine-licm -mcpu=mips64r2 -relocation-model=pic -verify-machineinstrs < %s | \17; RUN: FileCheck %s -check-prefix=MIPS64R218; RUN: llc -mtriple=mips64el-unknown-linux-gnu --disable-machine-licm -mcpu=mips64r6 -relocation-model=pic -verify-machineinstrs < %s | \19; RUN: FileCheck %s -check-prefix=MIPS64R620; RUN: llc -mtriple=mips64-unknown-linux-gnu -O0 -mcpu=mips64r6 -relocation-model=pic -verify-machineinstrs -verify-machineinstrs < %s | \21; RUN: FileCheck %s -check-prefix=MIPS64R6O022; RUN: llc -mtriple=mipsel-unknown-linux-gnu --disable-machine-licm -mcpu=mips32r2 -mattr=micromips -relocation-model=pic -verify-machineinstrs < %s | \23; RUN: FileCheck %s -check-prefix=MM3224 25; We want to verify the produced code is well formed all optimization levels, the rest of the tests which ensure correctness.26; RUN: llc -mtriple=mipsel-unknown-linux-gnu -O1 --disable-machine-licm -mcpu=mips32 -relocation-model=pic -verify-machineinstrs < %s | FileCheck %s --check-prefix=O127; RUN: llc -mtriple=mipsel-unknown-linux-gnu -O2 --disable-machine-licm -mcpu=mips32 -relocation-model=pic -verify-machineinstrs < %s | FileCheck %s --check-prefix=O228; RUN: llc -mtriple=mipsel-unknown-linux-gnu -O3 --disable-machine-licm -mcpu=mips32 -relocation-model=pic -verify-machineinstrs < %s | FileCheck %s --check-prefix=O329 30; Keep one big-endian check so that we don't reduce testing, but don't add more31; since endianness doesn't affect the body of the atomic operations.32; RUN: llc -mtriple=mips-unknown-linux-gnu --disable-machine-licm -mcpu=mips32 -relocation-model=pic -verify-machineinstrs < %s | \33; RUN: FileCheck %s -check-prefix=MIPS32EB34 35@x = common global i32 0, align 436 37define i32 @AtomicLoadAdd32(i32 signext %incr) nounwind {38; MIPS32-LABEL: AtomicLoadAdd32:39; MIPS32: # %bb.0: # %entry40; MIPS32-NEXT: lui $2, %hi(_gp_disp)41; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)42; MIPS32-NEXT: addu $1, $2, $2543; MIPS32-NEXT: lw $1, %got(x)($1)44; MIPS32-NEXT: $BB0_1: # %entry45; MIPS32-NEXT: # =>This Inner Loop Header: Depth=146; MIPS32-NEXT: ll $2, 0($1)47; MIPS32-NEXT: addu $3, $2, $448; MIPS32-NEXT: sc $3, 0($1)49; MIPS32-NEXT: beqz $3, $BB0_150; MIPS32-NEXT: nop51; MIPS32-NEXT: # %bb.2: # %entry52; MIPS32-NEXT: jr $ra53; MIPS32-NEXT: nop54;55; MIPS32O0-LABEL: AtomicLoadAdd32:56; MIPS32O0: # %bb.0: # %entry57; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)58; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)59; MIPS32O0-NEXT: addu $1, $2, $2560; MIPS32O0-NEXT: lw $3, %got(x)($1)61; MIPS32O0-NEXT: $BB0_1: # %entry62; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=163; MIPS32O0-NEXT: ll $2, 0($3)64; MIPS32O0-NEXT: addu $1, $2, $465; MIPS32O0-NEXT: sc $1, 0($3)66; MIPS32O0-NEXT: beqz $1, $BB0_167; MIPS32O0-NEXT: nop68; MIPS32O0-NEXT: # %bb.2: # %entry69; MIPS32O0-NEXT: jr $ra70; MIPS32O0-NEXT: nop71;72; MIPS32R2-LABEL: AtomicLoadAdd32:73; MIPS32R2: # %bb.0: # %entry74; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)75; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)76; MIPS32R2-NEXT: addu $1, $2, $2577; MIPS32R2-NEXT: lw $1, %got(x)($1)78; MIPS32R2-NEXT: $BB0_1: # %entry79; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=180; MIPS32R2-NEXT: ll $2, 0($1)81; MIPS32R2-NEXT: addu $3, $2, $482; MIPS32R2-NEXT: sc $3, 0($1)83; MIPS32R2-NEXT: beqz $3, $BB0_184; MIPS32R2-NEXT: nop85; MIPS32R2-NEXT: # %bb.2: # %entry86; MIPS32R2-NEXT: jr $ra87; MIPS32R2-NEXT: nop88;89; MIPS32R6-LABEL: AtomicLoadAdd32:90; MIPS32R6: # %bb.0: # %entry91; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)92; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)93; MIPS32R6-NEXT: addu $1, $2, $2594; MIPS32R6-NEXT: lw $1, %got(x)($1)95; MIPS32R6-NEXT: $BB0_1: # %entry96; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=197; MIPS32R6-NEXT: ll $2, 0($1)98; MIPS32R6-NEXT: addu $3, $2, $499; MIPS32R6-NEXT: sc $3, 0($1)100; MIPS32R6-NEXT: beqzc $3, $BB0_1101; MIPS32R6-NEXT: nop102; MIPS32R6-NEXT: # %bb.2: # %entry103; MIPS32R6-NEXT: jrc $ra104;105; MIPS32R6O0-LABEL: AtomicLoadAdd32:106; MIPS32R6O0: # %bb.0: # %entry107; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)108; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)109; MIPS32R6O0-NEXT: addu $1, $2, $25110; MIPS32R6O0-NEXT: lw $3, %got(x)($1)111; MIPS32R6O0-NEXT: $BB0_1: # %entry112; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1113; MIPS32R6O0-NEXT: ll $2, 0($3)114; MIPS32R6O0-NEXT: addu $1, $2, $4115; MIPS32R6O0-NEXT: sc $1, 0($3)116; MIPS32R6O0-NEXT: beqzc $1, $BB0_1117; MIPS32R6O0-NEXT: nop118; MIPS32R6O0-NEXT: # %bb.2: # %entry119; MIPS32R6O0-NEXT: jrc $ra120;121; MIPS4-LABEL: AtomicLoadAdd32:122; MIPS4: # %bb.0: # %entry123; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32)))124; MIPS4-NEXT: daddu $1, $1, $25125; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32)))126; MIPS4-NEXT: ld $1, %got_disp(x)($1)127; MIPS4-NEXT: .LBB0_1: # %entry128; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1129; MIPS4-NEXT: ll $2, 0($1)130; MIPS4-NEXT: addu $3, $2, $4131; MIPS4-NEXT: sc $3, 0($1)132; MIPS4-NEXT: beqz $3, .LBB0_1133; MIPS4-NEXT: nop134; MIPS4-NEXT: # %bb.2: # %entry135; MIPS4-NEXT: jr $ra136; MIPS4-NEXT: nop137;138; MIPS64-LABEL: AtomicLoadAdd32:139; MIPS64: # %bb.0: # %entry140; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32)))141; MIPS64-NEXT: daddu $1, $1, $25142; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32)))143; MIPS64-NEXT: ld $1, %got_disp(x)($1)144; MIPS64-NEXT: .LBB0_1: # %entry145; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1146; MIPS64-NEXT: ll $2, 0($1)147; MIPS64-NEXT: addu $3, $2, $4148; MIPS64-NEXT: sc $3, 0($1)149; MIPS64-NEXT: beqz $3, .LBB0_1150; MIPS64-NEXT: nop151; MIPS64-NEXT: # %bb.2: # %entry152; MIPS64-NEXT: jr $ra153; MIPS64-NEXT: nop154;155; MIPS64R2-LABEL: AtomicLoadAdd32:156; MIPS64R2: # %bb.0: # %entry157; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32)))158; MIPS64R2-NEXT: daddu $1, $1, $25159; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32)))160; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)161; MIPS64R2-NEXT: .LBB0_1: # %entry162; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1163; MIPS64R2-NEXT: ll $2, 0($1)164; MIPS64R2-NEXT: addu $3, $2, $4165; MIPS64R2-NEXT: sc $3, 0($1)166; MIPS64R2-NEXT: beqz $3, .LBB0_1167; MIPS64R2-NEXT: nop168; MIPS64R2-NEXT: # %bb.2: # %entry169; MIPS64R2-NEXT: jr $ra170; MIPS64R2-NEXT: nop171;172; MIPS64R6-LABEL: AtomicLoadAdd32:173; MIPS64R6: # %bb.0: # %entry174; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32)))175; MIPS64R6-NEXT: daddu $1, $1, $25176; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32)))177; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)178; MIPS64R6-NEXT: .LBB0_1: # %entry179; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1180; MIPS64R6-NEXT: ll $2, 0($1)181; MIPS64R6-NEXT: addu $3, $2, $4182; MIPS64R6-NEXT: sc $3, 0($1)183; MIPS64R6-NEXT: beqzc $3, .LBB0_1184; MIPS64R6-NEXT: nop185; MIPS64R6-NEXT: # %bb.2: # %entry186; MIPS64R6-NEXT: jrc $ra187;188; MIPS64R6O0-LABEL: AtomicLoadAdd32:189; MIPS64R6O0: # %bb.0: # %entry190; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32)))191; MIPS64R6O0-NEXT: daddu $1, $1, $25192; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32)))193; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64194; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)195; MIPS64R6O0-NEXT: .LBB0_1: # %entry196; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1197; MIPS64R6O0-NEXT: ll $2, 0($3)198; MIPS64R6O0-NEXT: addu $1, $2, $4199; MIPS64R6O0-NEXT: sc $1, 0($3)200; MIPS64R6O0-NEXT: beqzc $1, .LBB0_1201; MIPS64R6O0-NEXT: nop202; MIPS64R6O0-NEXT: # %bb.2: # %entry203; MIPS64R6O0-NEXT: jrc $ra204;205; MM32-LABEL: AtomicLoadAdd32:206; MM32: # %bb.0: # %entry207; MM32-NEXT: lui $2, %hi(_gp_disp)208; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)209; MM32-NEXT: addu $2, $2, $25210; MM32-NEXT: lw $1, %got(x)($2)211; MM32-NEXT: $BB0_1: # %entry212; MM32-NEXT: # =>This Inner Loop Header: Depth=1213; MM32-NEXT: ll $2, 0($1)214; MM32-NEXT: addu16 $3, $2, $4215; MM32-NEXT: sc $3, 0($1)216; MM32-NEXT: beqzc $3, $BB0_1217; MM32-NEXT: # %bb.2: # %entry218; MM32-NEXT: jrc $ra219;220; O1-LABEL: AtomicLoadAdd32:221; O1: # %bb.0: # %entry222; O1-NEXT: lui $2, %hi(_gp_disp)223; O1-NEXT: addiu $2, $2, %lo(_gp_disp)224; O1-NEXT: addu $1, $2, $25225; O1-NEXT: lw $1, %got(x)($1)226; O1-NEXT: $BB0_1: # %entry227; O1-NEXT: # =>This Inner Loop Header: Depth=1228; O1-NEXT: ll $2, 0($1)229; O1-NEXT: addu $3, $2, $4230; O1-NEXT: sc $3, 0($1)231; O1-NEXT: beqz $3, $BB0_1232; O1-NEXT: nop233; O1-NEXT: # %bb.2: # %entry234; O1-NEXT: jr $ra235; O1-NEXT: nop236;237; O2-LABEL: AtomicLoadAdd32:238; O2: # %bb.0: # %entry239; O2-NEXT: lui $2, %hi(_gp_disp)240; O2-NEXT: addiu $2, $2, %lo(_gp_disp)241; O2-NEXT: addu $1, $2, $25242; O2-NEXT: lw $1, %got(x)($1)243; O2-NEXT: $BB0_1: # %entry244; O2-NEXT: # =>This Inner Loop Header: Depth=1245; O2-NEXT: ll $2, 0($1)246; O2-NEXT: addu $3, $2, $4247; O2-NEXT: sc $3, 0($1)248; O2-NEXT: beqz $3, $BB0_1249; O2-NEXT: nop250; O2-NEXT: # %bb.2: # %entry251; O2-NEXT: jr $ra252; O2-NEXT: nop253;254; O3-LABEL: AtomicLoadAdd32:255; O3: # %bb.0: # %entry256; O3-NEXT: lui $2, %hi(_gp_disp)257; O3-NEXT: addiu $2, $2, %lo(_gp_disp)258; O3-NEXT: addu $1, $2, $25259; O3-NEXT: lw $1, %got(x)($1)260; O3-NEXT: $BB0_1: # %entry261; O3-NEXT: # =>This Inner Loop Header: Depth=1262; O3-NEXT: ll $2, 0($1)263; O3-NEXT: addu $3, $2, $4264; O3-NEXT: sc $3, 0($1)265; O3-NEXT: beqz $3, $BB0_1266; O3-NEXT: nop267; O3-NEXT: # %bb.2: # %entry268; O3-NEXT: jr $ra269; O3-NEXT: nop270;271; MIPS32EB-LABEL: AtomicLoadAdd32:272; MIPS32EB: # %bb.0: # %entry273; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)274; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)275; MIPS32EB-NEXT: addu $1, $2, $25276; MIPS32EB-NEXT: lw $1, %got(x)($1)277; MIPS32EB-NEXT: $BB0_1: # %entry278; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1279; MIPS32EB-NEXT: ll $2, 0($1)280; MIPS32EB-NEXT: addu $3, $2, $4281; MIPS32EB-NEXT: sc $3, 0($1)282; MIPS32EB-NEXT: beqz $3, $BB0_1283; MIPS32EB-NEXT: nop284; MIPS32EB-NEXT: # %bb.2: # %entry285; MIPS32EB-NEXT: jr $ra286; MIPS32EB-NEXT: nop287entry:288 %0 = atomicrmw add ptr @x, i32 %incr monotonic289 ret i32 %0290 291}292 293define i32 @AtomicLoadSub32(i32 signext %incr) nounwind {294; MIPS32-LABEL: AtomicLoadSub32:295; MIPS32: # %bb.0: # %entry296; MIPS32-NEXT: lui $2, %hi(_gp_disp)297; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)298; MIPS32-NEXT: addu $1, $2, $25299; MIPS32-NEXT: lw $1, %got(x)($1)300; MIPS32-NEXT: $BB1_1: # %entry301; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1302; MIPS32-NEXT: ll $2, 0($1)303; MIPS32-NEXT: subu $3, $2, $4304; MIPS32-NEXT: sc $3, 0($1)305; MIPS32-NEXT: beqz $3, $BB1_1306; MIPS32-NEXT: nop307; MIPS32-NEXT: # %bb.2: # %entry308; MIPS32-NEXT: jr $ra309; MIPS32-NEXT: nop310;311; MIPS32O0-LABEL: AtomicLoadSub32:312; MIPS32O0: # %bb.0: # %entry313; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)314; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)315; MIPS32O0-NEXT: addu $1, $2, $25316; MIPS32O0-NEXT: lw $3, %got(x)($1)317; MIPS32O0-NEXT: $BB1_1: # %entry318; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1319; MIPS32O0-NEXT: ll $2, 0($3)320; MIPS32O0-NEXT: subu $1, $2, $4321; MIPS32O0-NEXT: sc $1, 0($3)322; MIPS32O0-NEXT: beqz $1, $BB1_1323; MIPS32O0-NEXT: nop324; MIPS32O0-NEXT: # %bb.2: # %entry325; MIPS32O0-NEXT: jr $ra326; MIPS32O0-NEXT: nop327;328; MIPS32R2-LABEL: AtomicLoadSub32:329; MIPS32R2: # %bb.0: # %entry330; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)331; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)332; MIPS32R2-NEXT: addu $1, $2, $25333; MIPS32R2-NEXT: lw $1, %got(x)($1)334; MIPS32R2-NEXT: $BB1_1: # %entry335; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1336; MIPS32R2-NEXT: ll $2, 0($1)337; MIPS32R2-NEXT: subu $3, $2, $4338; MIPS32R2-NEXT: sc $3, 0($1)339; MIPS32R2-NEXT: beqz $3, $BB1_1340; MIPS32R2-NEXT: nop341; MIPS32R2-NEXT: # %bb.2: # %entry342; MIPS32R2-NEXT: jr $ra343; MIPS32R2-NEXT: nop344;345; MIPS32R6-LABEL: AtomicLoadSub32:346; MIPS32R6: # %bb.0: # %entry347; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)348; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)349; MIPS32R6-NEXT: addu $1, $2, $25350; MIPS32R6-NEXT: lw $1, %got(x)($1)351; MIPS32R6-NEXT: $BB1_1: # %entry352; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1353; MIPS32R6-NEXT: ll $2, 0($1)354; MIPS32R6-NEXT: subu $3, $2, $4355; MIPS32R6-NEXT: sc $3, 0($1)356; MIPS32R6-NEXT: beqzc $3, $BB1_1357; MIPS32R6-NEXT: nop358; MIPS32R6-NEXT: # %bb.2: # %entry359; MIPS32R6-NEXT: jrc $ra360;361; MIPS32R6O0-LABEL: AtomicLoadSub32:362; MIPS32R6O0: # %bb.0: # %entry363; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)364; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)365; MIPS32R6O0-NEXT: addu $1, $2, $25366; MIPS32R6O0-NEXT: lw $3, %got(x)($1)367; MIPS32R6O0-NEXT: $BB1_1: # %entry368; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1369; MIPS32R6O0-NEXT: ll $2, 0($3)370; MIPS32R6O0-NEXT: subu $1, $2, $4371; MIPS32R6O0-NEXT: sc $1, 0($3)372; MIPS32R6O0-NEXT: beqzc $1, $BB1_1373; MIPS32R6O0-NEXT: nop374; MIPS32R6O0-NEXT: # %bb.2: # %entry375; MIPS32R6O0-NEXT: jrc $ra376;377; MIPS4-LABEL: AtomicLoadSub32:378; MIPS4: # %bb.0: # %entry379; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub32)))380; MIPS4-NEXT: daddu $1, $1, $25381; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub32)))382; MIPS4-NEXT: ld $1, %got_disp(x)($1)383; MIPS4-NEXT: .LBB1_1: # %entry384; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1385; MIPS4-NEXT: ll $2, 0($1)386; MIPS4-NEXT: subu $3, $2, $4387; MIPS4-NEXT: sc $3, 0($1)388; MIPS4-NEXT: beqz $3, .LBB1_1389; MIPS4-NEXT: nop390; MIPS4-NEXT: # %bb.2: # %entry391; MIPS4-NEXT: jr $ra392; MIPS4-NEXT: nop393;394; MIPS64-LABEL: AtomicLoadSub32:395; MIPS64: # %bb.0: # %entry396; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub32)))397; MIPS64-NEXT: daddu $1, $1, $25398; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub32)))399; MIPS64-NEXT: ld $1, %got_disp(x)($1)400; MIPS64-NEXT: .LBB1_1: # %entry401; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1402; MIPS64-NEXT: ll $2, 0($1)403; MIPS64-NEXT: subu $3, $2, $4404; MIPS64-NEXT: sc $3, 0($1)405; MIPS64-NEXT: beqz $3, .LBB1_1406; MIPS64-NEXT: nop407; MIPS64-NEXT: # %bb.2: # %entry408; MIPS64-NEXT: jr $ra409; MIPS64-NEXT: nop410;411; MIPS64R2-LABEL: AtomicLoadSub32:412; MIPS64R2: # %bb.0: # %entry413; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub32)))414; MIPS64R2-NEXT: daddu $1, $1, $25415; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub32)))416; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)417; MIPS64R2-NEXT: .LBB1_1: # %entry418; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1419; MIPS64R2-NEXT: ll $2, 0($1)420; MIPS64R2-NEXT: subu $3, $2, $4421; MIPS64R2-NEXT: sc $3, 0($1)422; MIPS64R2-NEXT: beqz $3, .LBB1_1423; MIPS64R2-NEXT: nop424; MIPS64R2-NEXT: # %bb.2: # %entry425; MIPS64R2-NEXT: jr $ra426; MIPS64R2-NEXT: nop427;428; MIPS64R6-LABEL: AtomicLoadSub32:429; MIPS64R6: # %bb.0: # %entry430; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub32)))431; MIPS64R6-NEXT: daddu $1, $1, $25432; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub32)))433; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)434; MIPS64R6-NEXT: .LBB1_1: # %entry435; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1436; MIPS64R6-NEXT: ll $2, 0($1)437; MIPS64R6-NEXT: subu $3, $2, $4438; MIPS64R6-NEXT: sc $3, 0($1)439; MIPS64R6-NEXT: beqzc $3, .LBB1_1440; MIPS64R6-NEXT: nop441; MIPS64R6-NEXT: # %bb.2: # %entry442; MIPS64R6-NEXT: jrc $ra443;444; MIPS64R6O0-LABEL: AtomicLoadSub32:445; MIPS64R6O0: # %bb.0: # %entry446; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub32)))447; MIPS64R6O0-NEXT: daddu $1, $1, $25448; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub32)))449; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64450; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)451; MIPS64R6O0-NEXT: .LBB1_1: # %entry452; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1453; MIPS64R6O0-NEXT: ll $2, 0($3)454; MIPS64R6O0-NEXT: subu $1, $2, $4455; MIPS64R6O0-NEXT: sc $1, 0($3)456; MIPS64R6O0-NEXT: beqzc $1, .LBB1_1457; MIPS64R6O0-NEXT: nop458; MIPS64R6O0-NEXT: # %bb.2: # %entry459; MIPS64R6O0-NEXT: jrc $ra460;461; MM32-LABEL: AtomicLoadSub32:462; MM32: # %bb.0: # %entry463; MM32-NEXT: lui $2, %hi(_gp_disp)464; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)465; MM32-NEXT: addu $2, $2, $25466; MM32-NEXT: lw $1, %got(x)($2)467; MM32-NEXT: $BB1_1: # %entry468; MM32-NEXT: # =>This Inner Loop Header: Depth=1469; MM32-NEXT: ll $2, 0($1)470; MM32-NEXT: subu16 $3, $2, $4471; MM32-NEXT: sc $3, 0($1)472; MM32-NEXT: beqzc $3, $BB1_1473; MM32-NEXT: # %bb.2: # %entry474; MM32-NEXT: jrc $ra475;476; O1-LABEL: AtomicLoadSub32:477; O1: # %bb.0: # %entry478; O1-NEXT: lui $2, %hi(_gp_disp)479; O1-NEXT: addiu $2, $2, %lo(_gp_disp)480; O1-NEXT: addu $1, $2, $25481; O1-NEXT: lw $1, %got(x)($1)482; O1-NEXT: $BB1_1: # %entry483; O1-NEXT: # =>This Inner Loop Header: Depth=1484; O1-NEXT: ll $2, 0($1)485; O1-NEXT: subu $3, $2, $4486; O1-NEXT: sc $3, 0($1)487; O1-NEXT: beqz $3, $BB1_1488; O1-NEXT: nop489; O1-NEXT: # %bb.2: # %entry490; O1-NEXT: jr $ra491; O1-NEXT: nop492;493; O2-LABEL: AtomicLoadSub32:494; O2: # %bb.0: # %entry495; O2-NEXT: lui $2, %hi(_gp_disp)496; O2-NEXT: addiu $2, $2, %lo(_gp_disp)497; O2-NEXT: addu $1, $2, $25498; O2-NEXT: lw $1, %got(x)($1)499; O2-NEXT: $BB1_1: # %entry500; O2-NEXT: # =>This Inner Loop Header: Depth=1501; O2-NEXT: ll $2, 0($1)502; O2-NEXT: subu $3, $2, $4503; O2-NEXT: sc $3, 0($1)504; O2-NEXT: beqz $3, $BB1_1505; O2-NEXT: nop506; O2-NEXT: # %bb.2: # %entry507; O2-NEXT: jr $ra508; O2-NEXT: nop509;510; O3-LABEL: AtomicLoadSub32:511; O3: # %bb.0: # %entry512; O3-NEXT: lui $2, %hi(_gp_disp)513; O3-NEXT: addiu $2, $2, %lo(_gp_disp)514; O3-NEXT: addu $1, $2, $25515; O3-NEXT: lw $1, %got(x)($1)516; O3-NEXT: $BB1_1: # %entry517; O3-NEXT: # =>This Inner Loop Header: Depth=1518; O3-NEXT: ll $2, 0($1)519; O3-NEXT: subu $3, $2, $4520; O3-NEXT: sc $3, 0($1)521; O3-NEXT: beqz $3, $BB1_1522; O3-NEXT: nop523; O3-NEXT: # %bb.2: # %entry524; O3-NEXT: jr $ra525; O3-NEXT: nop526;527; MIPS32EB-LABEL: AtomicLoadSub32:528; MIPS32EB: # %bb.0: # %entry529; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)530; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)531; MIPS32EB-NEXT: addu $1, $2, $25532; MIPS32EB-NEXT: lw $1, %got(x)($1)533; MIPS32EB-NEXT: $BB1_1: # %entry534; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1535; MIPS32EB-NEXT: ll $2, 0($1)536; MIPS32EB-NEXT: subu $3, $2, $4537; MIPS32EB-NEXT: sc $3, 0($1)538; MIPS32EB-NEXT: beqz $3, $BB1_1539; MIPS32EB-NEXT: nop540; MIPS32EB-NEXT: # %bb.2: # %entry541; MIPS32EB-NEXT: jr $ra542; MIPS32EB-NEXT: nop543entry:544 %0 = atomicrmw sub ptr @x, i32 %incr monotonic545 ret i32 %0546 547}548 549define i32 @AtomicLoadXor32(i32 signext %incr) nounwind {550; MIPS32-LABEL: AtomicLoadXor32:551; MIPS32: # %bb.0: # %entry552; MIPS32-NEXT: lui $2, %hi(_gp_disp)553; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)554; MIPS32-NEXT: addu $1, $2, $25555; MIPS32-NEXT: lw $1, %got(x)($1)556; MIPS32-NEXT: $BB2_1: # %entry557; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1558; MIPS32-NEXT: ll $2, 0($1)559; MIPS32-NEXT: xor $3, $2, $4560; MIPS32-NEXT: sc $3, 0($1)561; MIPS32-NEXT: beqz $3, $BB2_1562; MIPS32-NEXT: nop563; MIPS32-NEXT: # %bb.2: # %entry564; MIPS32-NEXT: jr $ra565; MIPS32-NEXT: nop566;567; MIPS32O0-LABEL: AtomicLoadXor32:568; MIPS32O0: # %bb.0: # %entry569; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)570; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)571; MIPS32O0-NEXT: addu $1, $2, $25572; MIPS32O0-NEXT: lw $3, %got(x)($1)573; MIPS32O0-NEXT: $BB2_1: # %entry574; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1575; MIPS32O0-NEXT: ll $2, 0($3)576; MIPS32O0-NEXT: xor $1, $2, $4577; MIPS32O0-NEXT: sc $1, 0($3)578; MIPS32O0-NEXT: beqz $1, $BB2_1579; MIPS32O0-NEXT: nop580; MIPS32O0-NEXT: # %bb.2: # %entry581; MIPS32O0-NEXT: jr $ra582; MIPS32O0-NEXT: nop583;584; MIPS32R2-LABEL: AtomicLoadXor32:585; MIPS32R2: # %bb.0: # %entry586; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)587; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)588; MIPS32R2-NEXT: addu $1, $2, $25589; MIPS32R2-NEXT: lw $1, %got(x)($1)590; MIPS32R2-NEXT: $BB2_1: # %entry591; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1592; MIPS32R2-NEXT: ll $2, 0($1)593; MIPS32R2-NEXT: xor $3, $2, $4594; MIPS32R2-NEXT: sc $3, 0($1)595; MIPS32R2-NEXT: beqz $3, $BB2_1596; MIPS32R2-NEXT: nop597; MIPS32R2-NEXT: # %bb.2: # %entry598; MIPS32R2-NEXT: jr $ra599; MIPS32R2-NEXT: nop600;601; MIPS32R6-LABEL: AtomicLoadXor32:602; MIPS32R6: # %bb.0: # %entry603; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)604; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)605; MIPS32R6-NEXT: addu $1, $2, $25606; MIPS32R6-NEXT: lw $1, %got(x)($1)607; MIPS32R6-NEXT: $BB2_1: # %entry608; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1609; MIPS32R6-NEXT: ll $2, 0($1)610; MIPS32R6-NEXT: xor $3, $2, $4611; MIPS32R6-NEXT: sc $3, 0($1)612; MIPS32R6-NEXT: beqzc $3, $BB2_1613; MIPS32R6-NEXT: nop614; MIPS32R6-NEXT: # %bb.2: # %entry615; MIPS32R6-NEXT: jrc $ra616;617; MIPS32R6O0-LABEL: AtomicLoadXor32:618; MIPS32R6O0: # %bb.0: # %entry619; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)620; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)621; MIPS32R6O0-NEXT: addu $1, $2, $25622; MIPS32R6O0-NEXT: lw $3, %got(x)($1)623; MIPS32R6O0-NEXT: $BB2_1: # %entry624; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1625; MIPS32R6O0-NEXT: ll $2, 0($3)626; MIPS32R6O0-NEXT: xor $1, $2, $4627; MIPS32R6O0-NEXT: sc $1, 0($3)628; MIPS32R6O0-NEXT: beqzc $1, $BB2_1629; MIPS32R6O0-NEXT: nop630; MIPS32R6O0-NEXT: # %bb.2: # %entry631; MIPS32R6O0-NEXT: jrc $ra632;633; MIPS4-LABEL: AtomicLoadXor32:634; MIPS4: # %bb.0: # %entry635; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor32)))636; MIPS4-NEXT: daddu $1, $1, $25637; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor32)))638; MIPS4-NEXT: ld $1, %got_disp(x)($1)639; MIPS4-NEXT: .LBB2_1: # %entry640; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1641; MIPS4-NEXT: ll $2, 0($1)642; MIPS4-NEXT: xor $3, $2, $4643; MIPS4-NEXT: sc $3, 0($1)644; MIPS4-NEXT: beqz $3, .LBB2_1645; MIPS4-NEXT: nop646; MIPS4-NEXT: # %bb.2: # %entry647; MIPS4-NEXT: jr $ra648; MIPS4-NEXT: nop649;650; MIPS64-LABEL: AtomicLoadXor32:651; MIPS64: # %bb.0: # %entry652; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor32)))653; MIPS64-NEXT: daddu $1, $1, $25654; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor32)))655; MIPS64-NEXT: ld $1, %got_disp(x)($1)656; MIPS64-NEXT: .LBB2_1: # %entry657; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1658; MIPS64-NEXT: ll $2, 0($1)659; MIPS64-NEXT: xor $3, $2, $4660; MIPS64-NEXT: sc $3, 0($1)661; MIPS64-NEXT: beqz $3, .LBB2_1662; MIPS64-NEXT: nop663; MIPS64-NEXT: # %bb.2: # %entry664; MIPS64-NEXT: jr $ra665; MIPS64-NEXT: nop666;667; MIPS64R2-LABEL: AtomicLoadXor32:668; MIPS64R2: # %bb.0: # %entry669; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor32)))670; MIPS64R2-NEXT: daddu $1, $1, $25671; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor32)))672; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)673; MIPS64R2-NEXT: .LBB2_1: # %entry674; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1675; MIPS64R2-NEXT: ll $2, 0($1)676; MIPS64R2-NEXT: xor $3, $2, $4677; MIPS64R2-NEXT: sc $3, 0($1)678; MIPS64R2-NEXT: beqz $3, .LBB2_1679; MIPS64R2-NEXT: nop680; MIPS64R2-NEXT: # %bb.2: # %entry681; MIPS64R2-NEXT: jr $ra682; MIPS64R2-NEXT: nop683;684; MIPS64R6-LABEL: AtomicLoadXor32:685; MIPS64R6: # %bb.0: # %entry686; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor32)))687; MIPS64R6-NEXT: daddu $1, $1, $25688; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor32)))689; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)690; MIPS64R6-NEXT: .LBB2_1: # %entry691; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1692; MIPS64R6-NEXT: ll $2, 0($1)693; MIPS64R6-NEXT: xor $3, $2, $4694; MIPS64R6-NEXT: sc $3, 0($1)695; MIPS64R6-NEXT: beqzc $3, .LBB2_1696; MIPS64R6-NEXT: nop697; MIPS64R6-NEXT: # %bb.2: # %entry698; MIPS64R6-NEXT: jrc $ra699;700; MIPS64R6O0-LABEL: AtomicLoadXor32:701; MIPS64R6O0: # %bb.0: # %entry702; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor32)))703; MIPS64R6O0-NEXT: daddu $1, $1, $25704; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor32)))705; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64706; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)707; MIPS64R6O0-NEXT: .LBB2_1: # %entry708; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1709; MIPS64R6O0-NEXT: ll $2, 0($3)710; MIPS64R6O0-NEXT: xor $1, $2, $4711; MIPS64R6O0-NEXT: sc $1, 0($3)712; MIPS64R6O0-NEXT: beqzc $1, .LBB2_1713; MIPS64R6O0-NEXT: nop714; MIPS64R6O0-NEXT: # %bb.2: # %entry715; MIPS64R6O0-NEXT: jrc $ra716;717; MM32-LABEL: AtomicLoadXor32:718; MM32: # %bb.0: # %entry719; MM32-NEXT: lui $2, %hi(_gp_disp)720; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)721; MM32-NEXT: addu $2, $2, $25722; MM32-NEXT: lw $1, %got(x)($2)723; MM32-NEXT: $BB2_1: # %entry724; MM32-NEXT: # =>This Inner Loop Header: Depth=1725; MM32-NEXT: ll $2, 0($1)726; MM32-NEXT: xor $3, $2, $4727; MM32-NEXT: sc $3, 0($1)728; MM32-NEXT: beqzc $3, $BB2_1729; MM32-NEXT: # %bb.2: # %entry730; MM32-NEXT: jrc $ra731;732; O1-LABEL: AtomicLoadXor32:733; O1: # %bb.0: # %entry734; O1-NEXT: lui $2, %hi(_gp_disp)735; O1-NEXT: addiu $2, $2, %lo(_gp_disp)736; O1-NEXT: addu $1, $2, $25737; O1-NEXT: lw $1, %got(x)($1)738; O1-NEXT: $BB2_1: # %entry739; O1-NEXT: # =>This Inner Loop Header: Depth=1740; O1-NEXT: ll $2, 0($1)741; O1-NEXT: xor $3, $2, $4742; O1-NEXT: sc $3, 0($1)743; O1-NEXT: beqz $3, $BB2_1744; O1-NEXT: nop745; O1-NEXT: # %bb.2: # %entry746; O1-NEXT: jr $ra747; O1-NEXT: nop748;749; O2-LABEL: AtomicLoadXor32:750; O2: # %bb.0: # %entry751; O2-NEXT: lui $2, %hi(_gp_disp)752; O2-NEXT: addiu $2, $2, %lo(_gp_disp)753; O2-NEXT: addu $1, $2, $25754; O2-NEXT: lw $1, %got(x)($1)755; O2-NEXT: $BB2_1: # %entry756; O2-NEXT: # =>This Inner Loop Header: Depth=1757; O2-NEXT: ll $2, 0($1)758; O2-NEXT: xor $3, $2, $4759; O2-NEXT: sc $3, 0($1)760; O2-NEXT: beqz $3, $BB2_1761; O2-NEXT: nop762; O2-NEXT: # %bb.2: # %entry763; O2-NEXT: jr $ra764; O2-NEXT: nop765;766; O3-LABEL: AtomicLoadXor32:767; O3: # %bb.0: # %entry768; O3-NEXT: lui $2, %hi(_gp_disp)769; O3-NEXT: addiu $2, $2, %lo(_gp_disp)770; O3-NEXT: addu $1, $2, $25771; O3-NEXT: lw $1, %got(x)($1)772; O3-NEXT: $BB2_1: # %entry773; O3-NEXT: # =>This Inner Loop Header: Depth=1774; O3-NEXT: ll $2, 0($1)775; O3-NEXT: xor $3, $2, $4776; O3-NEXT: sc $3, 0($1)777; O3-NEXT: beqz $3, $BB2_1778; O3-NEXT: nop779; O3-NEXT: # %bb.2: # %entry780; O3-NEXT: jr $ra781; O3-NEXT: nop782;783; MIPS32EB-LABEL: AtomicLoadXor32:784; MIPS32EB: # %bb.0: # %entry785; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)786; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)787; MIPS32EB-NEXT: addu $1, $2, $25788; MIPS32EB-NEXT: lw $1, %got(x)($1)789; MIPS32EB-NEXT: $BB2_1: # %entry790; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1791; MIPS32EB-NEXT: ll $2, 0($1)792; MIPS32EB-NEXT: xor $3, $2, $4793; MIPS32EB-NEXT: sc $3, 0($1)794; MIPS32EB-NEXT: beqz $3, $BB2_1795; MIPS32EB-NEXT: nop796; MIPS32EB-NEXT: # %bb.2: # %entry797; MIPS32EB-NEXT: jr $ra798; MIPS32EB-NEXT: nop799entry:800 %0 = atomicrmw xor ptr @x, i32 %incr monotonic801 ret i32 %0802}803 804define i32 @AtomicLoadOr32(i32 signext %incr) nounwind {805; MIPS32-LABEL: AtomicLoadOr32:806; MIPS32: # %bb.0: # %entry807; MIPS32-NEXT: lui $2, %hi(_gp_disp)808; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)809; MIPS32-NEXT: addu $1, $2, $25810; MIPS32-NEXT: lw $1, %got(x)($1)811; MIPS32-NEXT: $BB3_1: # %entry812; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1813; MIPS32-NEXT: ll $2, 0($1)814; MIPS32-NEXT: or $3, $2, $4815; MIPS32-NEXT: sc $3, 0($1)816; MIPS32-NEXT: beqz $3, $BB3_1817; MIPS32-NEXT: nop818; MIPS32-NEXT: # %bb.2: # %entry819; MIPS32-NEXT: jr $ra820; MIPS32-NEXT: nop821;822; MIPS32O0-LABEL: AtomicLoadOr32:823; MIPS32O0: # %bb.0: # %entry824; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)825; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)826; MIPS32O0-NEXT: addu $1, $2, $25827; MIPS32O0-NEXT: lw $3, %got(x)($1)828; MIPS32O0-NEXT: $BB3_1: # %entry829; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1830; MIPS32O0-NEXT: ll $2, 0($3)831; MIPS32O0-NEXT: or $1, $2, $4832; MIPS32O0-NEXT: sc $1, 0($3)833; MIPS32O0-NEXT: beqz $1, $BB3_1834; MIPS32O0-NEXT: nop835; MIPS32O0-NEXT: # %bb.2: # %entry836; MIPS32O0-NEXT: jr $ra837; MIPS32O0-NEXT: nop838;839; MIPS32R2-LABEL: AtomicLoadOr32:840; MIPS32R2: # %bb.0: # %entry841; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)842; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)843; MIPS32R2-NEXT: addu $1, $2, $25844; MIPS32R2-NEXT: lw $1, %got(x)($1)845; MIPS32R2-NEXT: $BB3_1: # %entry846; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1847; MIPS32R2-NEXT: ll $2, 0($1)848; MIPS32R2-NEXT: or $3, $2, $4849; MIPS32R2-NEXT: sc $3, 0($1)850; MIPS32R2-NEXT: beqz $3, $BB3_1851; MIPS32R2-NEXT: nop852; MIPS32R2-NEXT: # %bb.2: # %entry853; MIPS32R2-NEXT: jr $ra854; MIPS32R2-NEXT: nop855;856; MIPS32R6-LABEL: AtomicLoadOr32:857; MIPS32R6: # %bb.0: # %entry858; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)859; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)860; MIPS32R6-NEXT: addu $1, $2, $25861; MIPS32R6-NEXT: lw $1, %got(x)($1)862; MIPS32R6-NEXT: $BB3_1: # %entry863; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1864; MIPS32R6-NEXT: ll $2, 0($1)865; MIPS32R6-NEXT: or $3, $2, $4866; MIPS32R6-NEXT: sc $3, 0($1)867; MIPS32R6-NEXT: beqzc $3, $BB3_1868; MIPS32R6-NEXT: nop869; MIPS32R6-NEXT: # %bb.2: # %entry870; MIPS32R6-NEXT: jrc $ra871;872; MIPS32R6O0-LABEL: AtomicLoadOr32:873; MIPS32R6O0: # %bb.0: # %entry874; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)875; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)876; MIPS32R6O0-NEXT: addu $1, $2, $25877; MIPS32R6O0-NEXT: lw $3, %got(x)($1)878; MIPS32R6O0-NEXT: $BB3_1: # %entry879; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1880; MIPS32R6O0-NEXT: ll $2, 0($3)881; MIPS32R6O0-NEXT: or $1, $2, $4882; MIPS32R6O0-NEXT: sc $1, 0($3)883; MIPS32R6O0-NEXT: beqzc $1, $BB3_1884; MIPS32R6O0-NEXT: nop885; MIPS32R6O0-NEXT: # %bb.2: # %entry886; MIPS32R6O0-NEXT: jrc $ra887;888; MIPS4-LABEL: AtomicLoadOr32:889; MIPS4: # %bb.0: # %entry890; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr32)))891; MIPS4-NEXT: daddu $1, $1, $25892; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr32)))893; MIPS4-NEXT: ld $1, %got_disp(x)($1)894; MIPS4-NEXT: .LBB3_1: # %entry895; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1896; MIPS4-NEXT: ll $2, 0($1)897; MIPS4-NEXT: or $3, $2, $4898; MIPS4-NEXT: sc $3, 0($1)899; MIPS4-NEXT: beqz $3, .LBB3_1900; MIPS4-NEXT: nop901; MIPS4-NEXT: # %bb.2: # %entry902; MIPS4-NEXT: jr $ra903; MIPS4-NEXT: nop904;905; MIPS64-LABEL: AtomicLoadOr32:906; MIPS64: # %bb.0: # %entry907; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr32)))908; MIPS64-NEXT: daddu $1, $1, $25909; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr32)))910; MIPS64-NEXT: ld $1, %got_disp(x)($1)911; MIPS64-NEXT: .LBB3_1: # %entry912; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1913; MIPS64-NEXT: ll $2, 0($1)914; MIPS64-NEXT: or $3, $2, $4915; MIPS64-NEXT: sc $3, 0($1)916; MIPS64-NEXT: beqz $3, .LBB3_1917; MIPS64-NEXT: nop918; MIPS64-NEXT: # %bb.2: # %entry919; MIPS64-NEXT: jr $ra920; MIPS64-NEXT: nop921;922; MIPS64R2-LABEL: AtomicLoadOr32:923; MIPS64R2: # %bb.0: # %entry924; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr32)))925; MIPS64R2-NEXT: daddu $1, $1, $25926; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr32)))927; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)928; MIPS64R2-NEXT: .LBB3_1: # %entry929; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1930; MIPS64R2-NEXT: ll $2, 0($1)931; MIPS64R2-NEXT: or $3, $2, $4932; MIPS64R2-NEXT: sc $3, 0($1)933; MIPS64R2-NEXT: beqz $3, .LBB3_1934; MIPS64R2-NEXT: nop935; MIPS64R2-NEXT: # %bb.2: # %entry936; MIPS64R2-NEXT: jr $ra937; MIPS64R2-NEXT: nop938;939; MIPS64R6-LABEL: AtomicLoadOr32:940; MIPS64R6: # %bb.0: # %entry941; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr32)))942; MIPS64R6-NEXT: daddu $1, $1, $25943; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr32)))944; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)945; MIPS64R6-NEXT: .LBB3_1: # %entry946; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1947; MIPS64R6-NEXT: ll $2, 0($1)948; MIPS64R6-NEXT: or $3, $2, $4949; MIPS64R6-NEXT: sc $3, 0($1)950; MIPS64R6-NEXT: beqzc $3, .LBB3_1951; MIPS64R6-NEXT: nop952; MIPS64R6-NEXT: # %bb.2: # %entry953; MIPS64R6-NEXT: jrc $ra954;955; MIPS64R6O0-LABEL: AtomicLoadOr32:956; MIPS64R6O0: # %bb.0: # %entry957; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr32)))958; MIPS64R6O0-NEXT: daddu $1, $1, $25959; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr32)))960; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64961; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)962; MIPS64R6O0-NEXT: .LBB3_1: # %entry963; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1964; MIPS64R6O0-NEXT: ll $2, 0($3)965; MIPS64R6O0-NEXT: or $1, $2, $4966; MIPS64R6O0-NEXT: sc $1, 0($3)967; MIPS64R6O0-NEXT: beqzc $1, .LBB3_1968; MIPS64R6O0-NEXT: nop969; MIPS64R6O0-NEXT: # %bb.2: # %entry970; MIPS64R6O0-NEXT: jrc $ra971;972; MM32-LABEL: AtomicLoadOr32:973; MM32: # %bb.0: # %entry974; MM32-NEXT: lui $2, %hi(_gp_disp)975; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)976; MM32-NEXT: addu $2, $2, $25977; MM32-NEXT: lw $1, %got(x)($2)978; MM32-NEXT: $BB3_1: # %entry979; MM32-NEXT: # =>This Inner Loop Header: Depth=1980; MM32-NEXT: ll $2, 0($1)981; MM32-NEXT: or $3, $2, $4982; MM32-NEXT: sc $3, 0($1)983; MM32-NEXT: beqzc $3, $BB3_1984; MM32-NEXT: # %bb.2: # %entry985; MM32-NEXT: jrc $ra986;987; O1-LABEL: AtomicLoadOr32:988; O1: # %bb.0: # %entry989; O1-NEXT: lui $2, %hi(_gp_disp)990; O1-NEXT: addiu $2, $2, %lo(_gp_disp)991; O1-NEXT: addu $1, $2, $25992; O1-NEXT: lw $1, %got(x)($1)993; O1-NEXT: $BB3_1: # %entry994; O1-NEXT: # =>This Inner Loop Header: Depth=1995; O1-NEXT: ll $2, 0($1)996; O1-NEXT: or $3, $2, $4997; O1-NEXT: sc $3, 0($1)998; O1-NEXT: beqz $3, $BB3_1999; O1-NEXT: nop1000; O1-NEXT: # %bb.2: # %entry1001; O1-NEXT: jr $ra1002; O1-NEXT: nop1003;1004; O2-LABEL: AtomicLoadOr32:1005; O2: # %bb.0: # %entry1006; O2-NEXT: lui $2, %hi(_gp_disp)1007; O2-NEXT: addiu $2, $2, %lo(_gp_disp)1008; O2-NEXT: addu $1, $2, $251009; O2-NEXT: lw $1, %got(x)($1)1010; O2-NEXT: $BB3_1: # %entry1011; O2-NEXT: # =>This Inner Loop Header: Depth=11012; O2-NEXT: ll $2, 0($1)1013; O2-NEXT: or $3, $2, $41014; O2-NEXT: sc $3, 0($1)1015; O2-NEXT: beqz $3, $BB3_11016; O2-NEXT: nop1017; O2-NEXT: # %bb.2: # %entry1018; O2-NEXT: jr $ra1019; O2-NEXT: nop1020;1021; O3-LABEL: AtomicLoadOr32:1022; O3: # %bb.0: # %entry1023; O3-NEXT: lui $2, %hi(_gp_disp)1024; O3-NEXT: addiu $2, $2, %lo(_gp_disp)1025; O3-NEXT: addu $1, $2, $251026; O3-NEXT: lw $1, %got(x)($1)1027; O3-NEXT: $BB3_1: # %entry1028; O3-NEXT: # =>This Inner Loop Header: Depth=11029; O3-NEXT: ll $2, 0($1)1030; O3-NEXT: or $3, $2, $41031; O3-NEXT: sc $3, 0($1)1032; O3-NEXT: beqz $3, $BB3_11033; O3-NEXT: nop1034; O3-NEXT: # %bb.2: # %entry1035; O3-NEXT: jr $ra1036; O3-NEXT: nop1037;1038; MIPS32EB-LABEL: AtomicLoadOr32:1039; MIPS32EB: # %bb.0: # %entry1040; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)1041; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)1042; MIPS32EB-NEXT: addu $1, $2, $251043; MIPS32EB-NEXT: lw $1, %got(x)($1)1044; MIPS32EB-NEXT: $BB3_1: # %entry1045; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=11046; MIPS32EB-NEXT: ll $2, 0($1)1047; MIPS32EB-NEXT: or $3, $2, $41048; MIPS32EB-NEXT: sc $3, 0($1)1049; MIPS32EB-NEXT: beqz $3, $BB3_11050; MIPS32EB-NEXT: nop1051; MIPS32EB-NEXT: # %bb.2: # %entry1052; MIPS32EB-NEXT: jr $ra1053; MIPS32EB-NEXT: nop1054entry:1055 %0 = atomicrmw or ptr @x, i32 %incr monotonic1056 ret i32 %01057}1058 1059define i32 @AtomicLoadAnd32(i32 signext %incr) nounwind {1060; MIPS32-LABEL: AtomicLoadAnd32:1061; MIPS32: # %bb.0: # %entry1062; MIPS32-NEXT: lui $2, %hi(_gp_disp)1063; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)1064; MIPS32-NEXT: addu $1, $2, $251065; MIPS32-NEXT: lw $1, %got(x)($1)1066; MIPS32-NEXT: $BB4_1: # %entry1067; MIPS32-NEXT: # =>This Inner Loop Header: Depth=11068; MIPS32-NEXT: ll $2, 0($1)1069; MIPS32-NEXT: and $3, $2, $41070; MIPS32-NEXT: sc $3, 0($1)1071; MIPS32-NEXT: beqz $3, $BB4_11072; MIPS32-NEXT: nop1073; MIPS32-NEXT: # %bb.2: # %entry1074; MIPS32-NEXT: jr $ra1075; MIPS32-NEXT: nop1076;1077; MIPS32O0-LABEL: AtomicLoadAnd32:1078; MIPS32O0: # %bb.0: # %entry1079; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)1080; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)1081; MIPS32O0-NEXT: addu $1, $2, $251082; MIPS32O0-NEXT: lw $3, %got(x)($1)1083; MIPS32O0-NEXT: $BB4_1: # %entry1084; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=11085; MIPS32O0-NEXT: ll $2, 0($3)1086; MIPS32O0-NEXT: and $1, $2, $41087; MIPS32O0-NEXT: sc $1, 0($3)1088; MIPS32O0-NEXT: beqz $1, $BB4_11089; MIPS32O0-NEXT: nop1090; MIPS32O0-NEXT: # %bb.2: # %entry1091; MIPS32O0-NEXT: jr $ra1092; MIPS32O0-NEXT: nop1093;1094; MIPS32R2-LABEL: AtomicLoadAnd32:1095; MIPS32R2: # %bb.0: # %entry1096; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)1097; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)1098; MIPS32R2-NEXT: addu $1, $2, $251099; MIPS32R2-NEXT: lw $1, %got(x)($1)1100; MIPS32R2-NEXT: $BB4_1: # %entry1101; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=11102; MIPS32R2-NEXT: ll $2, 0($1)1103; MIPS32R2-NEXT: and $3, $2, $41104; MIPS32R2-NEXT: sc $3, 0($1)1105; MIPS32R2-NEXT: beqz $3, $BB4_11106; MIPS32R2-NEXT: nop1107; MIPS32R2-NEXT: # %bb.2: # %entry1108; MIPS32R2-NEXT: jr $ra1109; MIPS32R2-NEXT: nop1110;1111; MIPS32R6-LABEL: AtomicLoadAnd32:1112; MIPS32R6: # %bb.0: # %entry1113; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)1114; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)1115; MIPS32R6-NEXT: addu $1, $2, $251116; MIPS32R6-NEXT: lw $1, %got(x)($1)1117; MIPS32R6-NEXT: $BB4_1: # %entry1118; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=11119; MIPS32R6-NEXT: ll $2, 0($1)1120; MIPS32R6-NEXT: and $3, $2, $41121; MIPS32R6-NEXT: sc $3, 0($1)1122; MIPS32R6-NEXT: beqzc $3, $BB4_11123; MIPS32R6-NEXT: nop1124; MIPS32R6-NEXT: # %bb.2: # %entry1125; MIPS32R6-NEXT: jrc $ra1126;1127; MIPS32R6O0-LABEL: AtomicLoadAnd32:1128; MIPS32R6O0: # %bb.0: # %entry1129; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)1130; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)1131; MIPS32R6O0-NEXT: addu $1, $2, $251132; MIPS32R6O0-NEXT: lw $3, %got(x)($1)1133; MIPS32R6O0-NEXT: $BB4_1: # %entry1134; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=11135; MIPS32R6O0-NEXT: ll $2, 0($3)1136; MIPS32R6O0-NEXT: and $1, $2, $41137; MIPS32R6O0-NEXT: sc $1, 0($3)1138; MIPS32R6O0-NEXT: beqzc $1, $BB4_11139; MIPS32R6O0-NEXT: nop1140; MIPS32R6O0-NEXT: # %bb.2: # %entry1141; MIPS32R6O0-NEXT: jrc $ra1142;1143; MIPS4-LABEL: AtomicLoadAnd32:1144; MIPS4: # %bb.0: # %entry1145; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd32)))1146; MIPS4-NEXT: daddu $1, $1, $251147; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd32)))1148; MIPS4-NEXT: ld $1, %got_disp(x)($1)1149; MIPS4-NEXT: .LBB4_1: # %entry1150; MIPS4-NEXT: # =>This Inner Loop Header: Depth=11151; MIPS4-NEXT: ll $2, 0($1)1152; MIPS4-NEXT: and $3, $2, $41153; MIPS4-NEXT: sc $3, 0($1)1154; MIPS4-NEXT: beqz $3, .LBB4_11155; MIPS4-NEXT: nop1156; MIPS4-NEXT: # %bb.2: # %entry1157; MIPS4-NEXT: jr $ra1158; MIPS4-NEXT: nop1159;1160; MIPS64-LABEL: AtomicLoadAnd32:1161; MIPS64: # %bb.0: # %entry1162; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd32)))1163; MIPS64-NEXT: daddu $1, $1, $251164; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd32)))1165; MIPS64-NEXT: ld $1, %got_disp(x)($1)1166; MIPS64-NEXT: .LBB4_1: # %entry1167; MIPS64-NEXT: # =>This Inner Loop Header: Depth=11168; MIPS64-NEXT: ll $2, 0($1)1169; MIPS64-NEXT: and $3, $2, $41170; MIPS64-NEXT: sc $3, 0($1)1171; MIPS64-NEXT: beqz $3, .LBB4_11172; MIPS64-NEXT: nop1173; MIPS64-NEXT: # %bb.2: # %entry1174; MIPS64-NEXT: jr $ra1175; MIPS64-NEXT: nop1176;1177; MIPS64R2-LABEL: AtomicLoadAnd32:1178; MIPS64R2: # %bb.0: # %entry1179; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd32)))1180; MIPS64R2-NEXT: daddu $1, $1, $251181; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd32)))1182; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)1183; MIPS64R2-NEXT: .LBB4_1: # %entry1184; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=11185; MIPS64R2-NEXT: ll $2, 0($1)1186; MIPS64R2-NEXT: and $3, $2, $41187; MIPS64R2-NEXT: sc $3, 0($1)1188; MIPS64R2-NEXT: beqz $3, .LBB4_11189; MIPS64R2-NEXT: nop1190; MIPS64R2-NEXT: # %bb.2: # %entry1191; MIPS64R2-NEXT: jr $ra1192; MIPS64R2-NEXT: nop1193;1194; MIPS64R6-LABEL: AtomicLoadAnd32:1195; MIPS64R6: # %bb.0: # %entry1196; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd32)))1197; MIPS64R6-NEXT: daddu $1, $1, $251198; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd32)))1199; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)1200; MIPS64R6-NEXT: .LBB4_1: # %entry1201; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=11202; MIPS64R6-NEXT: ll $2, 0($1)1203; MIPS64R6-NEXT: and $3, $2, $41204; MIPS64R6-NEXT: sc $3, 0($1)1205; MIPS64R6-NEXT: beqzc $3, .LBB4_11206; MIPS64R6-NEXT: nop1207; MIPS64R6-NEXT: # %bb.2: # %entry1208; MIPS64R6-NEXT: jrc $ra1209;1210; MIPS64R6O0-LABEL: AtomicLoadAnd32:1211; MIPS64R6O0: # %bb.0: # %entry1212; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd32)))1213; MIPS64R6O0-NEXT: daddu $1, $1, $251214; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd32)))1215; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_641216; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)1217; MIPS64R6O0-NEXT: .LBB4_1: # %entry1218; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=11219; MIPS64R6O0-NEXT: ll $2, 0($3)1220; MIPS64R6O0-NEXT: and $1, $2, $41221; MIPS64R6O0-NEXT: sc $1, 0($3)1222; MIPS64R6O0-NEXT: beqzc $1, .LBB4_11223; MIPS64R6O0-NEXT: nop1224; MIPS64R6O0-NEXT: # %bb.2: # %entry1225; MIPS64R6O0-NEXT: jrc $ra1226;1227; MM32-LABEL: AtomicLoadAnd32:1228; MM32: # %bb.0: # %entry1229; MM32-NEXT: lui $2, %hi(_gp_disp)1230; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)1231; MM32-NEXT: addu $2, $2, $251232; MM32-NEXT: lw $1, %got(x)($2)1233; MM32-NEXT: $BB4_1: # %entry1234; MM32-NEXT: # =>This Inner Loop Header: Depth=11235; MM32-NEXT: ll $2, 0($1)1236; MM32-NEXT: and $3, $2, $41237; MM32-NEXT: sc $3, 0($1)1238; MM32-NEXT: beqzc $3, $BB4_11239; MM32-NEXT: # %bb.2: # %entry1240; MM32-NEXT: jrc $ra1241;1242; O1-LABEL: AtomicLoadAnd32:1243; O1: # %bb.0: # %entry1244; O1-NEXT: lui $2, %hi(_gp_disp)1245; O1-NEXT: addiu $2, $2, %lo(_gp_disp)1246; O1-NEXT: addu $1, $2, $251247; O1-NEXT: lw $1, %got(x)($1)1248; O1-NEXT: $BB4_1: # %entry1249; O1-NEXT: # =>This Inner Loop Header: Depth=11250; O1-NEXT: ll $2, 0($1)1251; O1-NEXT: and $3, $2, $41252; O1-NEXT: sc $3, 0($1)1253; O1-NEXT: beqz $3, $BB4_11254; O1-NEXT: nop1255; O1-NEXT: # %bb.2: # %entry1256; O1-NEXT: jr $ra1257; O1-NEXT: nop1258;1259; O2-LABEL: AtomicLoadAnd32:1260; O2: # %bb.0: # %entry1261; O2-NEXT: lui $2, %hi(_gp_disp)1262; O2-NEXT: addiu $2, $2, %lo(_gp_disp)1263; O2-NEXT: addu $1, $2, $251264; O2-NEXT: lw $1, %got(x)($1)1265; O2-NEXT: $BB4_1: # %entry1266; O2-NEXT: # =>This Inner Loop Header: Depth=11267; O2-NEXT: ll $2, 0($1)1268; O2-NEXT: and $3, $2, $41269; O2-NEXT: sc $3, 0($1)1270; O2-NEXT: beqz $3, $BB4_11271; O2-NEXT: nop1272; O2-NEXT: # %bb.2: # %entry1273; O2-NEXT: jr $ra1274; O2-NEXT: nop1275;1276; O3-LABEL: AtomicLoadAnd32:1277; O3: # %bb.0: # %entry1278; O3-NEXT: lui $2, %hi(_gp_disp)1279; O3-NEXT: addiu $2, $2, %lo(_gp_disp)1280; O3-NEXT: addu $1, $2, $251281; O3-NEXT: lw $1, %got(x)($1)1282; O3-NEXT: $BB4_1: # %entry1283; O3-NEXT: # =>This Inner Loop Header: Depth=11284; O3-NEXT: ll $2, 0($1)1285; O3-NEXT: and $3, $2, $41286; O3-NEXT: sc $3, 0($1)1287; O3-NEXT: beqz $3, $BB4_11288; O3-NEXT: nop1289; O3-NEXT: # %bb.2: # %entry1290; O3-NEXT: jr $ra1291; O3-NEXT: nop1292;1293; MIPS32EB-LABEL: AtomicLoadAnd32:1294; MIPS32EB: # %bb.0: # %entry1295; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)1296; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)1297; MIPS32EB-NEXT: addu $1, $2, $251298; MIPS32EB-NEXT: lw $1, %got(x)($1)1299; MIPS32EB-NEXT: $BB4_1: # %entry1300; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=11301; MIPS32EB-NEXT: ll $2, 0($1)1302; MIPS32EB-NEXT: and $3, $2, $41303; MIPS32EB-NEXT: sc $3, 0($1)1304; MIPS32EB-NEXT: beqz $3, $BB4_11305; MIPS32EB-NEXT: nop1306; MIPS32EB-NEXT: # %bb.2: # %entry1307; MIPS32EB-NEXT: jr $ra1308; MIPS32EB-NEXT: nop1309entry:1310 %0 = atomicrmw and ptr @x, i32 %incr monotonic1311 ret i32 %01312}1313 1314define i32 @AtomicLoadNand32(i32 signext %incr) nounwind {1315; MIPS32-LABEL: AtomicLoadNand32:1316; MIPS32: # %bb.0: # %entry1317; MIPS32-NEXT: lui $2, %hi(_gp_disp)1318; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)1319; MIPS32-NEXT: addu $1, $2, $251320; MIPS32-NEXT: lw $1, %got(x)($1)1321; MIPS32-NEXT: $BB5_1: # %entry1322; MIPS32-NEXT: # =>This Inner Loop Header: Depth=11323; MIPS32-NEXT: ll $2, 0($1)1324; MIPS32-NEXT: and $3, $2, $41325; MIPS32-NEXT: nor $3, $zero, $31326; MIPS32-NEXT: sc $3, 0($1)1327; MIPS32-NEXT: beqz $3, $BB5_11328; MIPS32-NEXT: nop1329; MIPS32-NEXT: # %bb.2: # %entry1330; MIPS32-NEXT: jr $ra1331; MIPS32-NEXT: nop1332;1333; MIPS32O0-LABEL: AtomicLoadNand32:1334; MIPS32O0: # %bb.0: # %entry1335; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)1336; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)1337; MIPS32O0-NEXT: addu $1, $2, $251338; MIPS32O0-NEXT: lw $3, %got(x)($1)1339; MIPS32O0-NEXT: $BB5_1: # %entry1340; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=11341; MIPS32O0-NEXT: ll $2, 0($3)1342; MIPS32O0-NEXT: and $1, $2, $41343; MIPS32O0-NEXT: nor $1, $zero, $11344; MIPS32O0-NEXT: sc $1, 0($3)1345; MIPS32O0-NEXT: beqz $1, $BB5_11346; MIPS32O0-NEXT: nop1347; MIPS32O0-NEXT: # %bb.2: # %entry1348; MIPS32O0-NEXT: jr $ra1349; MIPS32O0-NEXT: nop1350;1351; MIPS32R2-LABEL: AtomicLoadNand32:1352; MIPS32R2: # %bb.0: # %entry1353; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)1354; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)1355; MIPS32R2-NEXT: addu $1, $2, $251356; MIPS32R2-NEXT: lw $1, %got(x)($1)1357; MIPS32R2-NEXT: $BB5_1: # %entry1358; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=11359; MIPS32R2-NEXT: ll $2, 0($1)1360; MIPS32R2-NEXT: and $3, $2, $41361; MIPS32R2-NEXT: nor $3, $zero, $31362; MIPS32R2-NEXT: sc $3, 0($1)1363; MIPS32R2-NEXT: beqz $3, $BB5_11364; MIPS32R2-NEXT: nop1365; MIPS32R2-NEXT: # %bb.2: # %entry1366; MIPS32R2-NEXT: jr $ra1367; MIPS32R2-NEXT: nop1368;1369; MIPS32R6-LABEL: AtomicLoadNand32:1370; MIPS32R6: # %bb.0: # %entry1371; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)1372; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)1373; MIPS32R6-NEXT: addu $1, $2, $251374; MIPS32R6-NEXT: lw $1, %got(x)($1)1375; MIPS32R6-NEXT: $BB5_1: # %entry1376; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=11377; MIPS32R6-NEXT: ll $2, 0($1)1378; MIPS32R6-NEXT: and $3, $2, $41379; MIPS32R6-NEXT: nor $3, $zero, $31380; MIPS32R6-NEXT: sc $3, 0($1)1381; MIPS32R6-NEXT: beqzc $3, $BB5_11382; MIPS32R6-NEXT: nop1383; MIPS32R6-NEXT: # %bb.2: # %entry1384; MIPS32R6-NEXT: jrc $ra1385;1386; MIPS32R6O0-LABEL: AtomicLoadNand32:1387; MIPS32R6O0: # %bb.0: # %entry1388; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)1389; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)1390; MIPS32R6O0-NEXT: addu $1, $2, $251391; MIPS32R6O0-NEXT: lw $3, %got(x)($1)1392; MIPS32R6O0-NEXT: $BB5_1: # %entry1393; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=11394; MIPS32R6O0-NEXT: ll $2, 0($3)1395; MIPS32R6O0-NEXT: and $1, $2, $41396; MIPS32R6O0-NEXT: nor $1, $zero, $11397; MIPS32R6O0-NEXT: sc $1, 0($3)1398; MIPS32R6O0-NEXT: beqzc $1, $BB5_11399; MIPS32R6O0-NEXT: nop1400; MIPS32R6O0-NEXT: # %bb.2: # %entry1401; MIPS32R6O0-NEXT: jrc $ra1402;1403; MIPS4-LABEL: AtomicLoadNand32:1404; MIPS4: # %bb.0: # %entry1405; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand32)))1406; MIPS4-NEXT: daddu $1, $1, $251407; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand32)))1408; MIPS4-NEXT: ld $1, %got_disp(x)($1)1409; MIPS4-NEXT: .LBB5_1: # %entry1410; MIPS4-NEXT: # =>This Inner Loop Header: Depth=11411; MIPS4-NEXT: ll $2, 0($1)1412; MIPS4-NEXT: and $3, $2, $41413; MIPS4-NEXT: nor $3, $zero, $31414; MIPS4-NEXT: sc $3, 0($1)1415; MIPS4-NEXT: beqz $3, .LBB5_11416; MIPS4-NEXT: nop1417; MIPS4-NEXT: # %bb.2: # %entry1418; MIPS4-NEXT: jr $ra1419; MIPS4-NEXT: nop1420;1421; MIPS64-LABEL: AtomicLoadNand32:1422; MIPS64: # %bb.0: # %entry1423; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand32)))1424; MIPS64-NEXT: daddu $1, $1, $251425; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand32)))1426; MIPS64-NEXT: ld $1, %got_disp(x)($1)1427; MIPS64-NEXT: .LBB5_1: # %entry1428; MIPS64-NEXT: # =>This Inner Loop Header: Depth=11429; MIPS64-NEXT: ll $2, 0($1)1430; MIPS64-NEXT: and $3, $2, $41431; MIPS64-NEXT: nor $3, $zero, $31432; MIPS64-NEXT: sc $3, 0($1)1433; MIPS64-NEXT: beqz $3, .LBB5_11434; MIPS64-NEXT: nop1435; MIPS64-NEXT: # %bb.2: # %entry1436; MIPS64-NEXT: jr $ra1437; MIPS64-NEXT: nop1438;1439; MIPS64R2-LABEL: AtomicLoadNand32:1440; MIPS64R2: # %bb.0: # %entry1441; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand32)))1442; MIPS64R2-NEXT: daddu $1, $1, $251443; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand32)))1444; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)1445; MIPS64R2-NEXT: .LBB5_1: # %entry1446; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=11447; MIPS64R2-NEXT: ll $2, 0($1)1448; MIPS64R2-NEXT: and $3, $2, $41449; MIPS64R2-NEXT: nor $3, $zero, $31450; MIPS64R2-NEXT: sc $3, 0($1)1451; MIPS64R2-NEXT: beqz $3, .LBB5_11452; MIPS64R2-NEXT: nop1453; MIPS64R2-NEXT: # %bb.2: # %entry1454; MIPS64R2-NEXT: jr $ra1455; MIPS64R2-NEXT: nop1456;1457; MIPS64R6-LABEL: AtomicLoadNand32:1458; MIPS64R6: # %bb.0: # %entry1459; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand32)))1460; MIPS64R6-NEXT: daddu $1, $1, $251461; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand32)))1462; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)1463; MIPS64R6-NEXT: .LBB5_1: # %entry1464; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=11465; MIPS64R6-NEXT: ll $2, 0($1)1466; MIPS64R6-NEXT: and $3, $2, $41467; MIPS64R6-NEXT: nor $3, $zero, $31468; MIPS64R6-NEXT: sc $3, 0($1)1469; MIPS64R6-NEXT: beqzc $3, .LBB5_11470; MIPS64R6-NEXT: nop1471; MIPS64R6-NEXT: # %bb.2: # %entry1472; MIPS64R6-NEXT: jrc $ra1473;1474; MIPS64R6O0-LABEL: AtomicLoadNand32:1475; MIPS64R6O0: # %bb.0: # %entry1476; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand32)))1477; MIPS64R6O0-NEXT: daddu $1, $1, $251478; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand32)))1479; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_641480; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)1481; MIPS64R6O0-NEXT: .LBB5_1: # %entry1482; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=11483; MIPS64R6O0-NEXT: ll $2, 0($3)1484; MIPS64R6O0-NEXT: and $1, $2, $41485; MIPS64R6O0-NEXT: nor $1, $zero, $11486; MIPS64R6O0-NEXT: sc $1, 0($3)1487; MIPS64R6O0-NEXT: beqzc $1, .LBB5_11488; MIPS64R6O0-NEXT: nop1489; MIPS64R6O0-NEXT: # %bb.2: # %entry1490; MIPS64R6O0-NEXT: jrc $ra1491;1492; MM32-LABEL: AtomicLoadNand32:1493; MM32: # %bb.0: # %entry1494; MM32-NEXT: lui $2, %hi(_gp_disp)1495; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)1496; MM32-NEXT: addu $2, $2, $251497; MM32-NEXT: lw $1, %got(x)($2)1498; MM32-NEXT: $BB5_1: # %entry1499; MM32-NEXT: # =>This Inner Loop Header: Depth=11500; MM32-NEXT: ll $2, 0($1)1501; MM32-NEXT: and $3, $2, $41502; MM32-NEXT: nor $3, $zero, $31503; MM32-NEXT: sc $3, 0($1)1504; MM32-NEXT: beqzc $3, $BB5_11505; MM32-NEXT: # %bb.2: # %entry1506; MM32-NEXT: jrc $ra1507;1508; O1-LABEL: AtomicLoadNand32:1509; O1: # %bb.0: # %entry1510; O1-NEXT: lui $2, %hi(_gp_disp)1511; O1-NEXT: addiu $2, $2, %lo(_gp_disp)1512; O1-NEXT: addu $1, $2, $251513; O1-NEXT: lw $1, %got(x)($1)1514; O1-NEXT: $BB5_1: # %entry1515; O1-NEXT: # =>This Inner Loop Header: Depth=11516; O1-NEXT: ll $2, 0($1)1517; O1-NEXT: and $3, $2, $41518; O1-NEXT: nor $3, $zero, $31519; O1-NEXT: sc $3, 0($1)1520; O1-NEXT: beqz $3, $BB5_11521; O1-NEXT: nop1522; O1-NEXT: # %bb.2: # %entry1523; O1-NEXT: jr $ra1524; O1-NEXT: nop1525;1526; O2-LABEL: AtomicLoadNand32:1527; O2: # %bb.0: # %entry1528; O2-NEXT: lui $2, %hi(_gp_disp)1529; O2-NEXT: addiu $2, $2, %lo(_gp_disp)1530; O2-NEXT: addu $1, $2, $251531; O2-NEXT: lw $1, %got(x)($1)1532; O2-NEXT: $BB5_1: # %entry1533; O2-NEXT: # =>This Inner Loop Header: Depth=11534; O2-NEXT: ll $2, 0($1)1535; O2-NEXT: and $3, $2, $41536; O2-NEXT: nor $3, $zero, $31537; O2-NEXT: sc $3, 0($1)1538; O2-NEXT: beqz $3, $BB5_11539; O2-NEXT: nop1540; O2-NEXT: # %bb.2: # %entry1541; O2-NEXT: jr $ra1542; O2-NEXT: nop1543;1544; O3-LABEL: AtomicLoadNand32:1545; O3: # %bb.0: # %entry1546; O3-NEXT: lui $2, %hi(_gp_disp)1547; O3-NEXT: addiu $2, $2, %lo(_gp_disp)1548; O3-NEXT: addu $1, $2, $251549; O3-NEXT: lw $1, %got(x)($1)1550; O3-NEXT: $BB5_1: # %entry1551; O3-NEXT: # =>This Inner Loop Header: Depth=11552; O3-NEXT: ll $2, 0($1)1553; O3-NEXT: and $3, $2, $41554; O3-NEXT: nor $3, $zero, $31555; O3-NEXT: sc $3, 0($1)1556; O3-NEXT: beqz $3, $BB5_11557; O3-NEXT: nop1558; O3-NEXT: # %bb.2: # %entry1559; O3-NEXT: jr $ra1560; O3-NEXT: nop1561;1562; MIPS32EB-LABEL: AtomicLoadNand32:1563; MIPS32EB: # %bb.0: # %entry1564; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)1565; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)1566; MIPS32EB-NEXT: addu $1, $2, $251567; MIPS32EB-NEXT: lw $1, %got(x)($1)1568; MIPS32EB-NEXT: $BB5_1: # %entry1569; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=11570; MIPS32EB-NEXT: ll $2, 0($1)1571; MIPS32EB-NEXT: and $3, $2, $41572; MIPS32EB-NEXT: nor $3, $zero, $31573; MIPS32EB-NEXT: sc $3, 0($1)1574; MIPS32EB-NEXT: beqz $3, $BB5_11575; MIPS32EB-NEXT: nop1576; MIPS32EB-NEXT: # %bb.2: # %entry1577; MIPS32EB-NEXT: jr $ra1578; MIPS32EB-NEXT: nop1579entry:1580 %0 = atomicrmw nand ptr @x, i32 %incr monotonic1581 ret i32 %01582 1583}1584 1585define i32 @AtomicSwap32(i32 signext %newval) nounwind {1586; MIPS32-LABEL: AtomicSwap32:1587; MIPS32: # %bb.0: # %entry1588; MIPS32-NEXT: lui $2, %hi(_gp_disp)1589; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)1590; MIPS32-NEXT: addiu $sp, $sp, -81591; MIPS32-NEXT: addu $1, $2, $251592; MIPS32-NEXT: sw $4, 4($sp)1593; MIPS32-NEXT: lw $1, %got(x)($1)1594; MIPS32-NEXT: $BB6_1: # %entry1595; MIPS32-NEXT: # =>This Inner Loop Header: Depth=11596; MIPS32-NEXT: ll $2, 0($1)1597; MIPS32-NEXT: move $3, $41598; MIPS32-NEXT: sc $3, 0($1)1599; MIPS32-NEXT: beqz $3, $BB6_11600; MIPS32-NEXT: nop1601; MIPS32-NEXT: # %bb.2: # %entry1602; MIPS32-NEXT: jr $ra1603; MIPS32-NEXT: addiu $sp, $sp, 81604;1605; MIPS32O0-LABEL: AtomicSwap32:1606; MIPS32O0: # %bb.0: # %entry1607; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)1608; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)1609; MIPS32O0-NEXT: addiu $sp, $sp, -81610; MIPS32O0-NEXT: addu $1, $2, $251611; MIPS32O0-NEXT: sw $4, 4($sp)1612; MIPS32O0-NEXT: lw $4, 4($sp)1613; MIPS32O0-NEXT: lw $3, %got(x)($1)1614; MIPS32O0-NEXT: $BB6_1: # %entry1615; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=11616; MIPS32O0-NEXT: ll $2, 0($3)1617; MIPS32O0-NEXT: move $1, $41618; MIPS32O0-NEXT: sc $1, 0($3)1619; MIPS32O0-NEXT: beqz $1, $BB6_11620; MIPS32O0-NEXT: nop1621; MIPS32O0-NEXT: # %bb.2: # %entry1622; MIPS32O0-NEXT: addiu $sp, $sp, 81623; MIPS32O0-NEXT: jr $ra1624; MIPS32O0-NEXT: nop1625;1626; MIPS32R2-LABEL: AtomicSwap32:1627; MIPS32R2: # %bb.0: # %entry1628; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)1629; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)1630; MIPS32R2-NEXT: addiu $sp, $sp, -81631; MIPS32R2-NEXT: addu $1, $2, $251632; MIPS32R2-NEXT: sw $4, 4($sp)1633; MIPS32R2-NEXT: lw $1, %got(x)($1)1634; MIPS32R2-NEXT: $BB6_1: # %entry1635; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=11636; MIPS32R2-NEXT: ll $2, 0($1)1637; MIPS32R2-NEXT: move $3, $41638; MIPS32R2-NEXT: sc $3, 0($1)1639; MIPS32R2-NEXT: beqz $3, $BB6_11640; MIPS32R2-NEXT: nop1641; MIPS32R2-NEXT: # %bb.2: # %entry1642; MIPS32R2-NEXT: jr $ra1643; MIPS32R2-NEXT: addiu $sp, $sp, 81644;1645; MIPS32R6-LABEL: AtomicSwap32:1646; MIPS32R6: # %bb.0: # %entry1647; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)1648; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)1649; MIPS32R6-NEXT: addiu $sp, $sp, -81650; MIPS32R6-NEXT: addu $1, $2, $251651; MIPS32R6-NEXT: sw $4, 4($sp)1652; MIPS32R6-NEXT: lw $1, %got(x)($1)1653; MIPS32R6-NEXT: $BB6_1: # %entry1654; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=11655; MIPS32R6-NEXT: ll $2, 0($1)1656; MIPS32R6-NEXT: move $3, $41657; MIPS32R6-NEXT: sc $3, 0($1)1658; MIPS32R6-NEXT: beqzc $3, $BB6_11659; MIPS32R6-NEXT: nop1660; MIPS32R6-NEXT: # %bb.2: # %entry1661; MIPS32R6-NEXT: jr $ra1662; MIPS32R6-NEXT: addiu $sp, $sp, 81663;1664; MIPS32R6O0-LABEL: AtomicSwap32:1665; MIPS32R6O0: # %bb.0: # %entry1666; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)1667; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)1668; MIPS32R6O0-NEXT: addiu $sp, $sp, -81669; MIPS32R6O0-NEXT: addu $1, $2, $251670; MIPS32R6O0-NEXT: sw $4, 4($sp)1671; MIPS32R6O0-NEXT: lw $4, 4($sp)1672; MIPS32R6O0-NEXT: lw $3, %got(x)($1)1673; MIPS32R6O0-NEXT: $BB6_1: # %entry1674; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=11675; MIPS32R6O0-NEXT: ll $2, 0($3)1676; MIPS32R6O0-NEXT: move $1, $41677; MIPS32R6O0-NEXT: sc $1, 0($3)1678; MIPS32R6O0-NEXT: beqzc $1, $BB6_11679; MIPS32R6O0-NEXT: # %bb.2: # %entry1680; MIPS32R6O0-NEXT: addiu $sp, $sp, 81681; MIPS32R6O0-NEXT: jrc $ra1682;1683; MIPS4-LABEL: AtomicSwap32:1684; MIPS4: # %bb.0: # %entry1685; MIPS4-NEXT: daddiu $sp, $sp, -161686; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap32)))1687; MIPS4-NEXT: daddu $1, $1, $251688; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap32)))1689; MIPS4-NEXT: sw $4, 12($sp)1690; MIPS4-NEXT: ld $1, %got_disp(x)($1)1691; MIPS4-NEXT: .LBB6_1: # %entry1692; MIPS4-NEXT: # =>This Inner Loop Header: Depth=11693; MIPS4-NEXT: ll $2, 0($1)1694; MIPS4-NEXT: move $3, $41695; MIPS4-NEXT: sc $3, 0($1)1696; MIPS4-NEXT: beqz $3, .LBB6_11697; MIPS4-NEXT: nop1698; MIPS4-NEXT: # %bb.2: # %entry1699; MIPS4-NEXT: jr $ra1700; MIPS4-NEXT: daddiu $sp, $sp, 161701;1702; MIPS64-LABEL: AtomicSwap32:1703; MIPS64: # %bb.0: # %entry1704; MIPS64-NEXT: daddiu $sp, $sp, -161705; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap32)))1706; MIPS64-NEXT: daddu $1, $1, $251707; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap32)))1708; MIPS64-NEXT: sw $4, 12($sp)1709; MIPS64-NEXT: ld $1, %got_disp(x)($1)1710; MIPS64-NEXT: .LBB6_1: # %entry1711; MIPS64-NEXT: # =>This Inner Loop Header: Depth=11712; MIPS64-NEXT: ll $2, 0($1)1713; MIPS64-NEXT: move $3, $41714; MIPS64-NEXT: sc $3, 0($1)1715; MIPS64-NEXT: beqz $3, .LBB6_11716; MIPS64-NEXT: nop1717; MIPS64-NEXT: # %bb.2: # %entry1718; MIPS64-NEXT: jr $ra1719; MIPS64-NEXT: daddiu $sp, $sp, 161720;1721; MIPS64R2-LABEL: AtomicSwap32:1722; MIPS64R2: # %bb.0: # %entry1723; MIPS64R2-NEXT: daddiu $sp, $sp, -161724; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap32)))1725; MIPS64R2-NEXT: daddu $1, $1, $251726; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap32)))1727; MIPS64R2-NEXT: sw $4, 12($sp)1728; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)1729; MIPS64R2-NEXT: .LBB6_1: # %entry1730; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=11731; MIPS64R2-NEXT: ll $2, 0($1)1732; MIPS64R2-NEXT: move $3, $41733; MIPS64R2-NEXT: sc $3, 0($1)1734; MIPS64R2-NEXT: beqz $3, .LBB6_11735; MIPS64R2-NEXT: nop1736; MIPS64R2-NEXT: # %bb.2: # %entry1737; MIPS64R2-NEXT: jr $ra1738; MIPS64R2-NEXT: daddiu $sp, $sp, 161739;1740; MIPS64R6-LABEL: AtomicSwap32:1741; MIPS64R6: # %bb.0: # %entry1742; MIPS64R6-NEXT: daddiu $sp, $sp, -161743; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap32)))1744; MIPS64R6-NEXT: daddu $1, $1, $251745; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap32)))1746; MIPS64R6-NEXT: sw $4, 12($sp)1747; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)1748; MIPS64R6-NEXT: .LBB6_1: # %entry1749; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=11750; MIPS64R6-NEXT: ll $2, 0($1)1751; MIPS64R6-NEXT: move $3, $41752; MIPS64R6-NEXT: sc $3, 0($1)1753; MIPS64R6-NEXT: beqzc $3, .LBB6_11754; MIPS64R6-NEXT: nop1755; MIPS64R6-NEXT: # %bb.2: # %entry1756; MIPS64R6-NEXT: jr $ra1757; MIPS64R6-NEXT: daddiu $sp, $sp, 161758;1759; MIPS64R6O0-LABEL: AtomicSwap32:1760; MIPS64R6O0: # %bb.0: # %entry1761; MIPS64R6O0-NEXT: daddiu $sp, $sp, -161762; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap32)))1763; MIPS64R6O0-NEXT: daddu $1, $1, $251764; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap32)))1765; MIPS64R6O0-NEXT: move $2, $41766; MIPS64R6O0-NEXT: sw $2, 12($sp)1767; MIPS64R6O0-NEXT: lw $4, 12($sp)1768; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)1769; MIPS64R6O0-NEXT: .LBB6_1: # %entry1770; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=11771; MIPS64R6O0-NEXT: ll $2, 0($3)1772; MIPS64R6O0-NEXT: move $1, $41773; MIPS64R6O0-NEXT: sc $1, 0($3)1774; MIPS64R6O0-NEXT: beqzc $1, .LBB6_11775; MIPS64R6O0-NEXT: # %bb.2: # %entry1776; MIPS64R6O0-NEXT: daddiu $sp, $sp, 161777; MIPS64R6O0-NEXT: jrc $ra1778;1779; MM32-LABEL: AtomicSwap32:1780; MM32: # %bb.0: # %entry1781; MM32-NEXT: lui $2, %hi(_gp_disp)1782; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)1783; MM32-NEXT: addiu $sp, $sp, -81784; MM32-NEXT: addu $2, $2, $251785; MM32-NEXT: sw $4, 4($sp)1786; MM32-NEXT: lw $1, %got(x)($2)1787; MM32-NEXT: $BB6_1: # %entry1788; MM32-NEXT: # =>This Inner Loop Header: Depth=11789; MM32-NEXT: ll $2, 0($1)1790; MM32-NEXT: or $3, $4, $zero1791; MM32-NEXT: sc $3, 0($1)1792; MM32-NEXT: beqzc $3, $BB6_11793; MM32-NEXT: # %bb.2: # %entry1794; MM32-NEXT: addiusp 81795; MM32-NEXT: jrc $ra1796;1797; O1-LABEL: AtomicSwap32:1798; O1: # %bb.0: # %entry1799; O1-NEXT: lui $2, %hi(_gp_disp)1800; O1-NEXT: addiu $2, $2, %lo(_gp_disp)1801; O1-NEXT: addiu $sp, $sp, -81802; O1-NEXT: addu $1, $2, $251803; O1-NEXT: sw $4, 4($sp)1804; O1-NEXT: lw $1, %got(x)($1)1805; O1-NEXT: $BB6_1: # %entry1806; O1-NEXT: # =>This Inner Loop Header: Depth=11807; O1-NEXT: ll $2, 0($1)1808; O1-NEXT: move $3, $41809; O1-NEXT: sc $3, 0($1)1810; O1-NEXT: beqz $3, $BB6_11811; O1-NEXT: nop1812; O1-NEXT: # %bb.2: # %entry1813; O1-NEXT: jr $ra1814; O1-NEXT: addiu $sp, $sp, 81815;1816; O2-LABEL: AtomicSwap32:1817; O2: # %bb.0: # %entry1818; O2-NEXT: lui $2, %hi(_gp_disp)1819; O2-NEXT: addiu $2, $2, %lo(_gp_disp)1820; O2-NEXT: addiu $sp, $sp, -81821; O2-NEXT: addu $1, $2, $251822; O2-NEXT: sw $4, 4($sp)1823; O2-NEXT: lw $1, %got(x)($1)1824; O2-NEXT: $BB6_1: # %entry1825; O2-NEXT: # =>This Inner Loop Header: Depth=11826; O2-NEXT: ll $2, 0($1)1827; O2-NEXT: move $3, $41828; O2-NEXT: sc $3, 0($1)1829; O2-NEXT: beqz $3, $BB6_11830; O2-NEXT: nop1831; O2-NEXT: # %bb.2: # %entry1832; O2-NEXT: jr $ra1833; O2-NEXT: addiu $sp, $sp, 81834;1835; O3-LABEL: AtomicSwap32:1836; O3: # %bb.0: # %entry1837; O3-NEXT: lui $2, %hi(_gp_disp)1838; O3-NEXT: addiu $2, $2, %lo(_gp_disp)1839; O3-NEXT: addiu $sp, $sp, -81840; O3-NEXT: addu $1, $2, $251841; O3-NEXT: sw $4, 4($sp)1842; O3-NEXT: lw $1, %got(x)($1)1843; O3-NEXT: $BB6_1: # %entry1844; O3-NEXT: # =>This Inner Loop Header: Depth=11845; O3-NEXT: ll $2, 0($1)1846; O3-NEXT: move $3, $41847; O3-NEXT: sc $3, 0($1)1848; O3-NEXT: beqz $3, $BB6_11849; O3-NEXT: nop1850; O3-NEXT: # %bb.2: # %entry1851; O3-NEXT: jr $ra1852; O3-NEXT: addiu $sp, $sp, 81853;1854; MIPS32EB-LABEL: AtomicSwap32:1855; MIPS32EB: # %bb.0: # %entry1856; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)1857; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)1858; MIPS32EB-NEXT: addiu $sp, $sp, -81859; MIPS32EB-NEXT: addu $1, $2, $251860; MIPS32EB-NEXT: sw $4, 4($sp)1861; MIPS32EB-NEXT: lw $1, %got(x)($1)1862; MIPS32EB-NEXT: $BB6_1: # %entry1863; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=11864; MIPS32EB-NEXT: ll $2, 0($1)1865; MIPS32EB-NEXT: move $3, $41866; MIPS32EB-NEXT: sc $3, 0($1)1867; MIPS32EB-NEXT: beqz $3, $BB6_11868; MIPS32EB-NEXT: nop1869; MIPS32EB-NEXT: # %bb.2: # %entry1870; MIPS32EB-NEXT: jr $ra1871; MIPS32EB-NEXT: addiu $sp, $sp, 81872entry:1873 %newval.addr = alloca i32, align 41874 store i32 %newval, ptr %newval.addr, align 41875 %tmp = load i32, ptr %newval.addr, align 41876 %0 = atomicrmw xchg ptr @x, i32 %tmp monotonic1877 ret i32 %01878 1879}1880 1881define i32 @AtomicCmpSwap32(i32 signext %oldval, i32 signext %newval) nounwind {1882; MIPS32-LABEL: AtomicCmpSwap32:1883; MIPS32: # %bb.0: # %entry1884; MIPS32-NEXT: lui $2, %hi(_gp_disp)1885; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)1886; MIPS32-NEXT: addiu $sp, $sp, -81887; MIPS32-NEXT: addu $1, $2, $251888; MIPS32-NEXT: sw $5, 4($sp)1889; MIPS32-NEXT: lw $1, %got(x)($1)1890; MIPS32-NEXT: $BB7_1: # %entry1891; MIPS32-NEXT: # =>This Inner Loop Header: Depth=11892; MIPS32-NEXT: ll $2, 0($1)1893; MIPS32-NEXT: bne $2, $4, $BB7_31894; MIPS32-NEXT: nop1895; MIPS32-NEXT: # %bb.2: # %entry1896; MIPS32-NEXT: # in Loop: Header=BB7_1 Depth=11897; MIPS32-NEXT: move $3, $51898; MIPS32-NEXT: sc $3, 0($1)1899; MIPS32-NEXT: beqz $3, $BB7_11900; MIPS32-NEXT: nop1901; MIPS32-NEXT: $BB7_3: # %entry1902; MIPS32-NEXT: jr $ra1903; MIPS32-NEXT: addiu $sp, $sp, 81904;1905; MIPS32O0-LABEL: AtomicCmpSwap32:1906; MIPS32O0: # %bb.0: # %entry1907; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)1908; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)1909; MIPS32O0-NEXT: addiu $sp, $sp, -81910; MIPS32O0-NEXT: addu $1, $2, $251911; MIPS32O0-NEXT: sw $5, 4($sp)1912; MIPS32O0-NEXT: lw $6, 4($sp)1913; MIPS32O0-NEXT: lw $3, %got(x)($1)1914; MIPS32O0-NEXT: move $5, $41915; MIPS32O0-NEXT: $BB7_1: # %entry1916; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=11917; MIPS32O0-NEXT: ll $2, 0($3)1918; MIPS32O0-NEXT: bne $2, $5, $BB7_31919; MIPS32O0-NEXT: nop1920; MIPS32O0-NEXT: # %bb.2: # %entry1921; MIPS32O0-NEXT: # in Loop: Header=BB7_1 Depth=11922; MIPS32O0-NEXT: move $1, $61923; MIPS32O0-NEXT: sc $1, 0($3)1924; MIPS32O0-NEXT: beqz $1, $BB7_11925; MIPS32O0-NEXT: nop1926; MIPS32O0-NEXT: $BB7_3: # %entry1927; MIPS32O0-NEXT: xor $1, $2, $41928; MIPS32O0-NEXT: sltiu $1, $1, 11929; MIPS32O0-NEXT: addiu $sp, $sp, 81930; MIPS32O0-NEXT: jr $ra1931; MIPS32O0-NEXT: nop1932;1933; MIPS32R2-LABEL: AtomicCmpSwap32:1934; MIPS32R2: # %bb.0: # %entry1935; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)1936; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)1937; MIPS32R2-NEXT: addiu $sp, $sp, -81938; MIPS32R2-NEXT: addu $1, $2, $251939; MIPS32R2-NEXT: sw $5, 4($sp)1940; MIPS32R2-NEXT: lw $1, %got(x)($1)1941; MIPS32R2-NEXT: $BB7_1: # %entry1942; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=11943; MIPS32R2-NEXT: ll $2, 0($1)1944; MIPS32R2-NEXT: bne $2, $4, $BB7_31945; MIPS32R2-NEXT: nop1946; MIPS32R2-NEXT: # %bb.2: # %entry1947; MIPS32R2-NEXT: # in Loop: Header=BB7_1 Depth=11948; MIPS32R2-NEXT: move $3, $51949; MIPS32R2-NEXT: sc $3, 0($1)1950; MIPS32R2-NEXT: beqz $3, $BB7_11951; MIPS32R2-NEXT: nop1952; MIPS32R2-NEXT: $BB7_3: # %entry1953; MIPS32R2-NEXT: jr $ra1954; MIPS32R2-NEXT: addiu $sp, $sp, 81955;1956; MIPS32R6-LABEL: AtomicCmpSwap32:1957; MIPS32R6: # %bb.0: # %entry1958; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)1959; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)1960; MIPS32R6-NEXT: addiu $sp, $sp, -81961; MIPS32R6-NEXT: addu $1, $2, $251962; MIPS32R6-NEXT: sw $5, 4($sp)1963; MIPS32R6-NEXT: lw $1, %got(x)($1)1964; MIPS32R6-NEXT: $BB7_1: # %entry1965; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=11966; MIPS32R6-NEXT: ll $2, 0($1)1967; MIPS32R6-NEXT: bnec $2, $4, $BB7_31968; MIPS32R6-NEXT: # %bb.2: # %entry1969; MIPS32R6-NEXT: # in Loop: Header=BB7_1 Depth=11970; MIPS32R6-NEXT: move $3, $51971; MIPS32R6-NEXT: sc $3, 0($1)1972; MIPS32R6-NEXT: beqzc $3, $BB7_11973; MIPS32R6-NEXT: nop1974; MIPS32R6-NEXT: $BB7_3: # %entry1975; MIPS32R6-NEXT: jr $ra1976; MIPS32R6-NEXT: addiu $sp, $sp, 81977;1978; MIPS32R6O0-LABEL: AtomicCmpSwap32:1979; MIPS32R6O0: # %bb.0: # %entry1980; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)1981; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)1982; MIPS32R6O0-NEXT: addiu $sp, $sp, -81983; MIPS32R6O0-NEXT: addu $1, $2, $251984; MIPS32R6O0-NEXT: sw $5, 4($sp)1985; MIPS32R6O0-NEXT: lw $5, 4($sp)1986; MIPS32R6O0-NEXT: lw $3, %got(x)($1)1987; MIPS32R6O0-NEXT: $BB7_1: # %entry1988; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=11989; MIPS32R6O0-NEXT: ll $2, 0($3)1990; MIPS32R6O0-NEXT: bnec $2, $4, $BB7_31991; MIPS32R6O0-NEXT: # %bb.2: # %entry1992; MIPS32R6O0-NEXT: # in Loop: Header=BB7_1 Depth=11993; MIPS32R6O0-NEXT: move $1, $51994; MIPS32R6O0-NEXT: sc $1, 0($3)1995; MIPS32R6O0-NEXT: beqzc $1, $BB7_11996; MIPS32R6O0-NEXT: $BB7_3: # %entry1997; MIPS32R6O0-NEXT: addiu $sp, $sp, 81998; MIPS32R6O0-NEXT: jrc $ra1999;2000; MIPS4-LABEL: AtomicCmpSwap32:2001; MIPS4: # %bb.0: # %entry2002; MIPS4-NEXT: daddiu $sp, $sp, -162003; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap32)))2004; MIPS4-NEXT: daddu $1, $1, $252005; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap32)))2006; MIPS4-NEXT: sw $5, 12($sp)2007; MIPS4-NEXT: ld $1, %got_disp(x)($1)2008; MIPS4-NEXT: .LBB7_1: # %entry2009; MIPS4-NEXT: # =>This Inner Loop Header: Depth=12010; MIPS4-NEXT: ll $2, 0($1)2011; MIPS4-NEXT: bne $2, $4, .LBB7_32012; MIPS4-NEXT: nop2013; MIPS4-NEXT: # %bb.2: # %entry2014; MIPS4-NEXT: # in Loop: Header=BB7_1 Depth=12015; MIPS4-NEXT: move $3, $52016; MIPS4-NEXT: sc $3, 0($1)2017; MIPS4-NEXT: beqz $3, .LBB7_12018; MIPS4-NEXT: nop2019; MIPS4-NEXT: .LBB7_3: # %entry2020; MIPS4-NEXT: jr $ra2021; MIPS4-NEXT: daddiu $sp, $sp, 162022;2023; MIPS64-LABEL: AtomicCmpSwap32:2024; MIPS64: # %bb.0: # %entry2025; MIPS64-NEXT: daddiu $sp, $sp, -162026; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap32)))2027; MIPS64-NEXT: daddu $1, $1, $252028; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap32)))2029; MIPS64-NEXT: sw $5, 12($sp)2030; MIPS64-NEXT: ld $1, %got_disp(x)($1)2031; MIPS64-NEXT: .LBB7_1: # %entry2032; MIPS64-NEXT: # =>This Inner Loop Header: Depth=12033; MIPS64-NEXT: ll $2, 0($1)2034; MIPS64-NEXT: bne $2, $4, .LBB7_32035; MIPS64-NEXT: nop2036; MIPS64-NEXT: # %bb.2: # %entry2037; MIPS64-NEXT: # in Loop: Header=BB7_1 Depth=12038; MIPS64-NEXT: move $3, $52039; MIPS64-NEXT: sc $3, 0($1)2040; MIPS64-NEXT: beqz $3, .LBB7_12041; MIPS64-NEXT: nop2042; MIPS64-NEXT: .LBB7_3: # %entry2043; MIPS64-NEXT: jr $ra2044; MIPS64-NEXT: daddiu $sp, $sp, 162045;2046; MIPS64R2-LABEL: AtomicCmpSwap32:2047; MIPS64R2: # %bb.0: # %entry2048; MIPS64R2-NEXT: daddiu $sp, $sp, -162049; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap32)))2050; MIPS64R2-NEXT: daddu $1, $1, $252051; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap32)))2052; MIPS64R2-NEXT: sw $5, 12($sp)2053; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)2054; MIPS64R2-NEXT: .LBB7_1: # %entry2055; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=12056; MIPS64R2-NEXT: ll $2, 0($1)2057; MIPS64R2-NEXT: bne $2, $4, .LBB7_32058; MIPS64R2-NEXT: nop2059; MIPS64R2-NEXT: # %bb.2: # %entry2060; MIPS64R2-NEXT: # in Loop: Header=BB7_1 Depth=12061; MIPS64R2-NEXT: move $3, $52062; MIPS64R2-NEXT: sc $3, 0($1)2063; MIPS64R2-NEXT: beqz $3, .LBB7_12064; MIPS64R2-NEXT: nop2065; MIPS64R2-NEXT: .LBB7_3: # %entry2066; MIPS64R2-NEXT: jr $ra2067; MIPS64R2-NEXT: daddiu $sp, $sp, 162068;2069; MIPS64R6-LABEL: AtomicCmpSwap32:2070; MIPS64R6: # %bb.0: # %entry2071; MIPS64R6-NEXT: daddiu $sp, $sp, -162072; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap32)))2073; MIPS64R6-NEXT: daddu $1, $1, $252074; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap32)))2075; MIPS64R6-NEXT: sw $5, 12($sp)2076; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)2077; MIPS64R6-NEXT: .LBB7_1: # %entry2078; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=12079; MIPS64R6-NEXT: ll $2, 0($1)2080; MIPS64R6-NEXT: bnec $2, $4, .LBB7_32081; MIPS64R6-NEXT: # %bb.2: # %entry2082; MIPS64R6-NEXT: # in Loop: Header=BB7_1 Depth=12083; MIPS64R6-NEXT: move $3, $52084; MIPS64R6-NEXT: sc $3, 0($1)2085; MIPS64R6-NEXT: beqzc $3, .LBB7_12086; MIPS64R6-NEXT: nop2087; MIPS64R6-NEXT: .LBB7_3: # %entry2088; MIPS64R6-NEXT: jr $ra2089; MIPS64R6-NEXT: daddiu $sp, $sp, 162090;2091; MIPS64R6O0-LABEL: AtomicCmpSwap32:2092; MIPS64R6O0: # %bb.0: # %entry2093; MIPS64R6O0-NEXT: daddiu $sp, $sp, -162094; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap32)))2095; MIPS64R6O0-NEXT: daddu $1, $1, $252096; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap32)))2097; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_642098; MIPS64R6O0-NEXT: move $2, $52099; MIPS64R6O0-NEXT: sw $2, 12($sp)2100; MIPS64R6O0-NEXT: lw $5, 12($sp)2101; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)2102; MIPS64R6O0-NEXT: .LBB7_1: # %entry2103; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=12104; MIPS64R6O0-NEXT: ll $2, 0($3)2105; MIPS64R6O0-NEXT: bnec $2, $4, .LBB7_32106; MIPS64R6O0-NEXT: # %bb.2: # %entry2107; MIPS64R6O0-NEXT: # in Loop: Header=BB7_1 Depth=12108; MIPS64R6O0-NEXT: move $1, $52109; MIPS64R6O0-NEXT: sc $1, 0($3)2110; MIPS64R6O0-NEXT: beqzc $1, .LBB7_12111; MIPS64R6O0-NEXT: .LBB7_3: # %entry2112; MIPS64R6O0-NEXT: daddiu $sp, $sp, 162113; MIPS64R6O0-NEXT: jrc $ra2114;2115; MM32-LABEL: AtomicCmpSwap32:2116; MM32: # %bb.0: # %entry2117; MM32-NEXT: lui $2, %hi(_gp_disp)2118; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)2119; MM32-NEXT: addiu $sp, $sp, -82120; MM32-NEXT: addu $2, $2, $252121; MM32-NEXT: sw $5, 4($sp)2122; MM32-NEXT: lw $1, %got(x)($2)2123; MM32-NEXT: $BB7_1: # %entry2124; MM32-NEXT: # =>This Inner Loop Header: Depth=12125; MM32-NEXT: ll $2, 0($1)2126; MM32-NEXT: bne $2, $4, $BB7_32127; MM32-NEXT: nop2128; MM32-NEXT: # %bb.2: # %entry2129; MM32-NEXT: # in Loop: Header=BB7_1 Depth=12130; MM32-NEXT: move $3, $52131; MM32-NEXT: sc $3, 0($1)2132; MM32-NEXT: beqzc $3, $BB7_12133; MM32-NEXT: $BB7_3: # %entry2134; MM32-NEXT: addiusp 82135; MM32-NEXT: jrc $ra2136;2137; O1-LABEL: AtomicCmpSwap32:2138; O1: # %bb.0: # %entry2139; O1-NEXT: lui $2, %hi(_gp_disp)2140; O1-NEXT: addiu $2, $2, %lo(_gp_disp)2141; O1-NEXT: addiu $sp, $sp, -82142; O1-NEXT: addu $1, $2, $252143; O1-NEXT: sw $5, 4($sp)2144; O1-NEXT: lw $1, %got(x)($1)2145; O1-NEXT: $BB7_1: # %entry2146; O1-NEXT: # =>This Inner Loop Header: Depth=12147; O1-NEXT: ll $2, 0($1)2148; O1-NEXT: bne $2, $4, $BB7_32149; O1-NEXT: nop2150; O1-NEXT: # %bb.2: # %entry2151; O1-NEXT: # in Loop: Header=BB7_1 Depth=12152; O1-NEXT: move $3, $52153; O1-NEXT: sc $3, 0($1)2154; O1-NEXT: beqz $3, $BB7_12155; O1-NEXT: nop2156; O1-NEXT: $BB7_3: # %entry2157; O1-NEXT: jr $ra2158; O1-NEXT: addiu $sp, $sp, 82159;2160; O2-LABEL: AtomicCmpSwap32:2161; O2: # %bb.0: # %entry2162; O2-NEXT: lui $2, %hi(_gp_disp)2163; O2-NEXT: addiu $2, $2, %lo(_gp_disp)2164; O2-NEXT: addiu $sp, $sp, -82165; O2-NEXT: addu $1, $2, $252166; O2-NEXT: sw $5, 4($sp)2167; O2-NEXT: lw $1, %got(x)($1)2168; O2-NEXT: $BB7_1: # %entry2169; O2-NEXT: # =>This Inner Loop Header: Depth=12170; O2-NEXT: ll $2, 0($1)2171; O2-NEXT: bne $2, $4, $BB7_32172; O2-NEXT: nop2173; O2-NEXT: # %bb.2: # %entry2174; O2-NEXT: # in Loop: Header=BB7_1 Depth=12175; O2-NEXT: move $3, $52176; O2-NEXT: sc $3, 0($1)2177; O2-NEXT: beqz $3, $BB7_12178; O2-NEXT: nop2179; O2-NEXT: $BB7_3: # %entry2180; O2-NEXT: jr $ra2181; O2-NEXT: addiu $sp, $sp, 82182;2183; O3-LABEL: AtomicCmpSwap32:2184; O3: # %bb.0: # %entry2185; O3-NEXT: lui $2, %hi(_gp_disp)2186; O3-NEXT: addiu $2, $2, %lo(_gp_disp)2187; O3-NEXT: addiu $sp, $sp, -82188; O3-NEXT: addu $1, $2, $252189; O3-NEXT: sw $5, 4($sp)2190; O3-NEXT: lw $1, %got(x)($1)2191; O3-NEXT: $BB7_1: # %entry2192; O3-NEXT: # =>This Inner Loop Header: Depth=12193; O3-NEXT: ll $2, 0($1)2194; O3-NEXT: bne $2, $4, $BB7_32195; O3-NEXT: nop2196; O3-NEXT: # %bb.2: # %entry2197; O3-NEXT: # in Loop: Header=BB7_1 Depth=12198; O3-NEXT: move $3, $52199; O3-NEXT: sc $3, 0($1)2200; O3-NEXT: beqz $3, $BB7_12201; O3-NEXT: nop2202; O3-NEXT: $BB7_3: # %entry2203; O3-NEXT: jr $ra2204; O3-NEXT: addiu $sp, $sp, 82205;2206; MIPS32EB-LABEL: AtomicCmpSwap32:2207; MIPS32EB: # %bb.0: # %entry2208; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)2209; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)2210; MIPS32EB-NEXT: addiu $sp, $sp, -82211; MIPS32EB-NEXT: addu $1, $2, $252212; MIPS32EB-NEXT: sw $5, 4($sp)2213; MIPS32EB-NEXT: lw $1, %got(x)($1)2214; MIPS32EB-NEXT: $BB7_1: # %entry2215; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=12216; MIPS32EB-NEXT: ll $2, 0($1)2217; MIPS32EB-NEXT: bne $2, $4, $BB7_32218; MIPS32EB-NEXT: nop2219; MIPS32EB-NEXT: # %bb.2: # %entry2220; MIPS32EB-NEXT: # in Loop: Header=BB7_1 Depth=12221; MIPS32EB-NEXT: move $3, $52222; MIPS32EB-NEXT: sc $3, 0($1)2223; MIPS32EB-NEXT: beqz $3, $BB7_12224; MIPS32EB-NEXT: nop2225; MIPS32EB-NEXT: $BB7_3: # %entry2226; MIPS32EB-NEXT: jr $ra2227; MIPS32EB-NEXT: addiu $sp, $sp, 82228entry:2229 %newval.addr = alloca i32, align 42230 store i32 %newval, ptr %newval.addr, align 42231 %tmp = load i32, ptr %newval.addr, align 42232 %0 = cmpxchg ptr @x, i32 %oldval, i32 %tmp monotonic monotonic2233 %1 = extractvalue { i32, i1 } %0, 02234 ret i32 %12235 2236}2237 2238@y = common global i8 0, align 12239 2240define signext i8 @AtomicLoadAdd8(i8 signext %incr) nounwind {2241; MIPS32-LABEL: AtomicLoadAdd8:2242; MIPS32: # %bb.0: # %entry2243; MIPS32-NEXT: lui $2, %hi(_gp_disp)2244; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)2245; MIPS32-NEXT: addu $1, $2, $252246; MIPS32-NEXT: lw $1, %got(y)($1)2247; MIPS32-NEXT: addiu $2, $zero, -42248; MIPS32-NEXT: and $3, $1, $22249; MIPS32-NEXT: andi $1, $1, 32250; MIPS32-NEXT: sll $1, $1, 32251; MIPS32-NEXT: ori $2, $zero, 2552252; MIPS32-NEXT: sllv $5, $2, $12253; MIPS32-NEXT: nor $6, $zero, $52254; MIPS32-NEXT: sllv $4, $4, $12255; MIPS32-NEXT: $BB8_1: # %entry2256; MIPS32-NEXT: # =>This Inner Loop Header: Depth=12257; MIPS32-NEXT: ll $7, 0($3)2258; MIPS32-NEXT: addu $8, $7, $42259; MIPS32-NEXT: and $8, $8, $52260; MIPS32-NEXT: and $9, $7, $62261; MIPS32-NEXT: or $9, $9, $82262; MIPS32-NEXT: sc $9, 0($3)2263; MIPS32-NEXT: beqz $9, $BB8_12264; MIPS32-NEXT: nop2265; MIPS32-NEXT: # %bb.2: # %entry2266; MIPS32-NEXT: and $2, $7, $52267; MIPS32-NEXT: srlv $2, $2, $12268; MIPS32-NEXT: sll $2, $2, 242269; MIPS32-NEXT: sra $2, $2, 242270; MIPS32-NEXT: # %bb.3: # %entry2271; MIPS32-NEXT: jr $ra2272; MIPS32-NEXT: nop2273;2274; MIPS32O0-LABEL: AtomicLoadAdd8:2275; MIPS32O0: # %bb.0: # %entry2276; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)2277; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)2278; MIPS32O0-NEXT: addiu $sp, $sp, -82279; MIPS32O0-NEXT: addu $1, $2, $252280; MIPS32O0-NEXT: lw $1, %got(y)($1)2281; MIPS32O0-NEXT: addiu $2, $zero, -42282; MIPS32O0-NEXT: and $5, $1, $22283; MIPS32O0-NEXT: andi $1, $1, 32284; MIPS32O0-NEXT: sll $9, $1, 32285; MIPS32O0-NEXT: ori $1, $zero, 2552286; MIPS32O0-NEXT: sllv $7, $1, $92287; MIPS32O0-NEXT: nor $8, $zero, $72288; MIPS32O0-NEXT: sllv $6, $4, $92289; MIPS32O0-NEXT: $BB8_1: # %entry2290; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=12291; MIPS32O0-NEXT: ll $2, 0($5)2292; MIPS32O0-NEXT: addu $3, $2, $62293; MIPS32O0-NEXT: and $3, $3, $72294; MIPS32O0-NEXT: and $4, $2, $82295; MIPS32O0-NEXT: or $4, $4, $32296; MIPS32O0-NEXT: sc $4, 0($5)2297; MIPS32O0-NEXT: beqz $4, $BB8_12298; MIPS32O0-NEXT: nop2299; MIPS32O0-NEXT: # %bb.2: # %entry2300; MIPS32O0-NEXT: and $1, $2, $72301; MIPS32O0-NEXT: srlv $1, $1, $92302; MIPS32O0-NEXT: sll $1, $1, 242303; MIPS32O0-NEXT: sra $1, $1, 242304; MIPS32O0-NEXT: # %bb.3: # %entry2305; MIPS32O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill2306; MIPS32O0-NEXT: # %bb.4: # %entry2307; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload2308; MIPS32O0-NEXT: sll $1, $1, 242309; MIPS32O0-NEXT: sra $2, $1, 242310; MIPS32O0-NEXT: addiu $sp, $sp, 82311; MIPS32O0-NEXT: jr $ra2312; MIPS32O0-NEXT: nop2313;2314; MIPS32R2-LABEL: AtomicLoadAdd8:2315; MIPS32R2: # %bb.0: # %entry2316; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)2317; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)2318; MIPS32R2-NEXT: addu $1, $2, $252319; MIPS32R2-NEXT: lw $1, %got(y)($1)2320; MIPS32R2-NEXT: addiu $2, $zero, -42321; MIPS32R2-NEXT: and $3, $1, $22322; MIPS32R2-NEXT: andi $1, $1, 32323; MIPS32R2-NEXT: sll $1, $1, 32324; MIPS32R2-NEXT: ori $2, $zero, 2552325; MIPS32R2-NEXT: sllv $5, $2, $12326; MIPS32R2-NEXT: nor $6, $zero, $52327; MIPS32R2-NEXT: sllv $4, $4, $12328; MIPS32R2-NEXT: $BB8_1: # %entry2329; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=12330; MIPS32R2-NEXT: ll $7, 0($3)2331; MIPS32R2-NEXT: addu $8, $7, $42332; MIPS32R2-NEXT: and $8, $8, $52333; MIPS32R2-NEXT: and $9, $7, $62334; MIPS32R2-NEXT: or $9, $9, $82335; MIPS32R2-NEXT: sc $9, 0($3)2336; MIPS32R2-NEXT: beqz $9, $BB8_12337; MIPS32R2-NEXT: nop2338; MIPS32R2-NEXT: # %bb.2: # %entry2339; MIPS32R2-NEXT: and $2, $7, $52340; MIPS32R2-NEXT: srlv $2, $2, $12341; MIPS32R2-NEXT: seb $2, $22342; MIPS32R2-NEXT: # %bb.3: # %entry2343; MIPS32R2-NEXT: jr $ra2344; MIPS32R2-NEXT: nop2345;2346; MIPS32R6-LABEL: AtomicLoadAdd8:2347; MIPS32R6: # %bb.0: # %entry2348; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)2349; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)2350; MIPS32R6-NEXT: addu $1, $2, $252351; MIPS32R6-NEXT: lw $1, %got(y)($1)2352; MIPS32R6-NEXT: addiu $2, $zero, -42353; MIPS32R6-NEXT: and $3, $1, $22354; MIPS32R6-NEXT: andi $1, $1, 32355; MIPS32R6-NEXT: sll $1, $1, 32356; MIPS32R6-NEXT: ori $2, $zero, 2552357; MIPS32R6-NEXT: sllv $5, $2, $12358; MIPS32R6-NEXT: nor $6, $zero, $52359; MIPS32R6-NEXT: sllv $4, $4, $12360; MIPS32R6-NEXT: $BB8_1: # %entry2361; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=12362; MIPS32R6-NEXT: ll $7, 0($3)2363; MIPS32R6-NEXT: addu $8, $7, $42364; MIPS32R6-NEXT: and $8, $8, $52365; MIPS32R6-NEXT: and $9, $7, $62366; MIPS32R6-NEXT: or $9, $9, $82367; MIPS32R6-NEXT: sc $9, 0($3)2368; MIPS32R6-NEXT: beqzc $9, $BB8_12369; MIPS32R6-NEXT: # %bb.2: # %entry2370; MIPS32R6-NEXT: and $2, $7, $52371; MIPS32R6-NEXT: srlv $2, $2, $12372; MIPS32R6-NEXT: seb $2, $22373; MIPS32R6-NEXT: # %bb.3: # %entry2374; MIPS32R6-NEXT: jrc $ra2375;2376; MIPS32R6O0-LABEL: AtomicLoadAdd8:2377; MIPS32R6O0: # %bb.0: # %entry2378; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)2379; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)2380; MIPS32R6O0-NEXT: addiu $sp, $sp, -82381; MIPS32R6O0-NEXT: addu $1, $2, $252382; MIPS32R6O0-NEXT: # kill: def $v0 killed $a02383; MIPS32R6O0-NEXT: lw $1, %got(y)($1)2384; MIPS32R6O0-NEXT: addiu $2, $zero, -42385; MIPS32R6O0-NEXT: and $5, $1, $22386; MIPS32R6O0-NEXT: andi $1, $1, 32387; MIPS32R6O0-NEXT: sll $9, $1, 32388; MIPS32R6O0-NEXT: ori $1, $zero, 2552389; MIPS32R6O0-NEXT: sllv $7, $1, $92390; MIPS32R6O0-NEXT: nor $8, $zero, $72391; MIPS32R6O0-NEXT: sllv $6, $4, $92392; MIPS32R6O0-NEXT: $BB8_1: # %entry2393; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=12394; MIPS32R6O0-NEXT: ll $2, 0($5)2395; MIPS32R6O0-NEXT: addu $3, $2, $62396; MIPS32R6O0-NEXT: and $3, $3, $72397; MIPS32R6O0-NEXT: and $4, $2, $82398; MIPS32R6O0-NEXT: or $4, $4, $32399; MIPS32R6O0-NEXT: sc $4, 0($5)2400; MIPS32R6O0-NEXT: beqzc $4, $BB8_12401; MIPS32R6O0-NEXT: # %bb.2: # %entry2402; MIPS32R6O0-NEXT: and $1, $2, $72403; MIPS32R6O0-NEXT: srlv $1, $1, $92404; MIPS32R6O0-NEXT: seb $1, $12405; MIPS32R6O0-NEXT: # %bb.3: # %entry2406; MIPS32R6O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill2407; MIPS32R6O0-NEXT: # %bb.4: # %entry2408; MIPS32R6O0-NEXT: lw $2, 4($sp) # 4-byte Folded Reload2409; MIPS32R6O0-NEXT: addiu $sp, $sp, 82410; MIPS32R6O0-NEXT: jrc $ra2411;2412; MIPS4-LABEL: AtomicLoadAdd8:2413; MIPS4: # %bb.0: # %entry2414; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd8)))2415; MIPS4-NEXT: daddu $1, $1, $252416; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd8)))2417; MIPS4-NEXT: ld $1, %got_disp(y)($1)2418; MIPS4-NEXT: daddiu $2, $zero, -42419; MIPS4-NEXT: and $3, $1, $22420; MIPS4-NEXT: andi $1, $1, 32421; MIPS4-NEXT: sll $1, $1, 32422; MIPS4-NEXT: ori $2, $zero, 2552423; MIPS4-NEXT: sllv $5, $2, $12424; MIPS4-NEXT: nor $6, $zero, $52425; MIPS4-NEXT: sllv $4, $4, $12426; MIPS4-NEXT: .LBB8_1: # %entry2427; MIPS4-NEXT: # =>This Inner Loop Header: Depth=12428; MIPS4-NEXT: ll $7, 0($3)2429; MIPS4-NEXT: addu $8, $7, $42430; MIPS4-NEXT: and $8, $8, $52431; MIPS4-NEXT: and $9, $7, $62432; MIPS4-NEXT: or $9, $9, $82433; MIPS4-NEXT: sc $9, 0($3)2434; MIPS4-NEXT: beqz $9, .LBB8_12435; MIPS4-NEXT: nop2436; MIPS4-NEXT: # %bb.2: # %entry2437; MIPS4-NEXT: and $2, $7, $52438; MIPS4-NEXT: srlv $2, $2, $12439; MIPS4-NEXT: sll $2, $2, 242440; MIPS4-NEXT: sra $2, $2, 242441; MIPS4-NEXT: # %bb.3: # %entry2442; MIPS4-NEXT: jr $ra2443; MIPS4-NEXT: nop2444;2445; MIPS64-LABEL: AtomicLoadAdd8:2446; MIPS64: # %bb.0: # %entry2447; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd8)))2448; MIPS64-NEXT: daddu $1, $1, $252449; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd8)))2450; MIPS64-NEXT: ld $1, %got_disp(y)($1)2451; MIPS64-NEXT: daddiu $2, $zero, -42452; MIPS64-NEXT: and $3, $1, $22453; MIPS64-NEXT: andi $1, $1, 32454; MIPS64-NEXT: sll $1, $1, 32455; MIPS64-NEXT: ori $2, $zero, 2552456; MIPS64-NEXT: sllv $5, $2, $12457; MIPS64-NEXT: nor $6, $zero, $52458; MIPS64-NEXT: sllv $4, $4, $12459; MIPS64-NEXT: .LBB8_1: # %entry2460; MIPS64-NEXT: # =>This Inner Loop Header: Depth=12461; MIPS64-NEXT: ll $7, 0($3)2462; MIPS64-NEXT: addu $8, $7, $42463; MIPS64-NEXT: and $8, $8, $52464; MIPS64-NEXT: and $9, $7, $62465; MIPS64-NEXT: or $9, $9, $82466; MIPS64-NEXT: sc $9, 0($3)2467; MIPS64-NEXT: beqz $9, .LBB8_12468; MIPS64-NEXT: nop2469; MIPS64-NEXT: # %bb.2: # %entry2470; MIPS64-NEXT: and $2, $7, $52471; MIPS64-NEXT: srlv $2, $2, $12472; MIPS64-NEXT: sll $2, $2, 242473; MIPS64-NEXT: sra $2, $2, 242474; MIPS64-NEXT: # %bb.3: # %entry2475; MIPS64-NEXT: jr $ra2476; MIPS64-NEXT: nop2477;2478; MIPS64R2-LABEL: AtomicLoadAdd8:2479; MIPS64R2: # %bb.0: # %entry2480; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd8)))2481; MIPS64R2-NEXT: daddu $1, $1, $252482; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd8)))2483; MIPS64R2-NEXT: ld $1, %got_disp(y)($1)2484; MIPS64R2-NEXT: daddiu $2, $zero, -42485; MIPS64R2-NEXT: and $3, $1, $22486; MIPS64R2-NEXT: andi $1, $1, 32487; MIPS64R2-NEXT: sll $1, $1, 32488; MIPS64R2-NEXT: ori $2, $zero, 2552489; MIPS64R2-NEXT: sllv $5, $2, $12490; MIPS64R2-NEXT: nor $6, $zero, $52491; MIPS64R2-NEXT: sllv $4, $4, $12492; MIPS64R2-NEXT: .LBB8_1: # %entry2493; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=12494; MIPS64R2-NEXT: ll $7, 0($3)2495; MIPS64R2-NEXT: addu $8, $7, $42496; MIPS64R2-NEXT: and $8, $8, $52497; MIPS64R2-NEXT: and $9, $7, $62498; MIPS64R2-NEXT: or $9, $9, $82499; MIPS64R2-NEXT: sc $9, 0($3)2500; MIPS64R2-NEXT: beqz $9, .LBB8_12501; MIPS64R2-NEXT: nop2502; MIPS64R2-NEXT: # %bb.2: # %entry2503; MIPS64R2-NEXT: and $2, $7, $52504; MIPS64R2-NEXT: srlv $2, $2, $12505; MIPS64R2-NEXT: seb $2, $22506; MIPS64R2-NEXT: # %bb.3: # %entry2507; MIPS64R2-NEXT: jr $ra2508; MIPS64R2-NEXT: nop2509;2510; MIPS64R6-LABEL: AtomicLoadAdd8:2511; MIPS64R6: # %bb.0: # %entry2512; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd8)))2513; MIPS64R6-NEXT: daddu $1, $1, $252514; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd8)))2515; MIPS64R6-NEXT: ld $1, %got_disp(y)($1)2516; MIPS64R6-NEXT: daddiu $2, $zero, -42517; MIPS64R6-NEXT: and $3, $1, $22518; MIPS64R6-NEXT: andi $1, $1, 32519; MIPS64R6-NEXT: sll $1, $1, 32520; MIPS64R6-NEXT: ori $2, $zero, 2552521; MIPS64R6-NEXT: sllv $5, $2, $12522; MIPS64R6-NEXT: nor $6, $zero, $52523; MIPS64R6-NEXT: sllv $4, $4, $12524; MIPS64R6-NEXT: .LBB8_1: # %entry2525; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=12526; MIPS64R6-NEXT: ll $7, 0($3)2527; MIPS64R6-NEXT: addu $8, $7, $42528; MIPS64R6-NEXT: and $8, $8, $52529; MIPS64R6-NEXT: and $9, $7, $62530; MIPS64R6-NEXT: or $9, $9, $82531; MIPS64R6-NEXT: sc $9, 0($3)2532; MIPS64R6-NEXT: beqzc $9, .LBB8_12533; MIPS64R6-NEXT: # %bb.2: # %entry2534; MIPS64R6-NEXT: and $2, $7, $52535; MIPS64R6-NEXT: srlv $2, $2, $12536; MIPS64R6-NEXT: seb $2, $22537; MIPS64R6-NEXT: # %bb.3: # %entry2538; MIPS64R6-NEXT: jrc $ra2539;2540; MIPS64R6O0-LABEL: AtomicLoadAdd8:2541; MIPS64R6O0: # %bb.0: # %entry2542; MIPS64R6O0-NEXT: daddiu $sp, $sp, -162543; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd8)))2544; MIPS64R6O0-NEXT: daddu $1, $1, $252545; MIPS64R6O0-NEXT: daddiu $2, $1, %lo(%neg(%gp_rel(AtomicLoadAdd8)))2546; MIPS64R6O0-NEXT: move $1, $42547; MIPS64R6O0-NEXT: ld $2, %got_disp(y)($2)2548; MIPS64R6O0-NEXT: daddiu $3, $zero, -42549; MIPS64R6O0-NEXT: and $5, $2, $32550; MIPS64R6O0-NEXT: andi $2, $2, 32551; MIPS64R6O0-NEXT: xori $2, $2, 32552; MIPS64R6O0-NEXT: sll $9, $2, 32553; MIPS64R6O0-NEXT: ori $2, $zero, 2552554; MIPS64R6O0-NEXT: sllv $7, $2, $92555; MIPS64R6O0-NEXT: nor $8, $zero, $72556; MIPS64R6O0-NEXT: sllv $6, $1, $92557; MIPS64R6O0-NEXT: .LBB8_1: # %entry2558; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=12559; MIPS64R6O0-NEXT: ll $2, 0($5)2560; MIPS64R6O0-NEXT: addu $3, $2, $62561; MIPS64R6O0-NEXT: and $3, $3, $72562; MIPS64R6O0-NEXT: and $4, $2, $82563; MIPS64R6O0-NEXT: or $4, $4, $32564; MIPS64R6O0-NEXT: sc $4, 0($5)2565; MIPS64R6O0-NEXT: beqzc $4, .LBB8_12566; MIPS64R6O0-NEXT: # %bb.2: # %entry2567; MIPS64R6O0-NEXT: and $1, $2, $72568; MIPS64R6O0-NEXT: srlv $1, $1, $92569; MIPS64R6O0-NEXT: seb $1, $12570; MIPS64R6O0-NEXT: # %bb.3: # %entry2571; MIPS64R6O0-NEXT: sw $1, 12($sp) # 4-byte Folded Spill2572; MIPS64R6O0-NEXT: # %bb.4: # %entry2573; MIPS64R6O0-NEXT: lw $2, 12($sp) # 4-byte Folded Reload2574; MIPS64R6O0-NEXT: daddiu $sp, $sp, 162575; MIPS64R6O0-NEXT: jrc $ra2576;2577; MM32-LABEL: AtomicLoadAdd8:2578; MM32: # %bb.0: # %entry2579; MM32-NEXT: lui $2, %hi(_gp_disp)2580; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)2581; MM32-NEXT: addu $2, $2, $252582; MM32-NEXT: lw $1, %got(y)($2)2583; MM32-NEXT: addiu $2, $zero, -42584; MM32-NEXT: and $3, $1, $22585; MM32-NEXT: andi $1, $1, 32586; MM32-NEXT: sll $1, $1, 32587; MM32-NEXT: ori $2, $zero, 2552588; MM32-NEXT: sllv $5, $2, $12589; MM32-NEXT: nor $6, $zero, $52590; MM32-NEXT: sllv $4, $4, $12591; MM32-NEXT: $BB8_1: # %entry2592; MM32-NEXT: # =>This Inner Loop Header: Depth=12593; MM32-NEXT: ll $7, 0($3)2594; MM32-NEXT: addu $8, $7, $42595; MM32-NEXT: and $8, $8, $52596; MM32-NEXT: and $9, $7, $62597; MM32-NEXT: or $9, $9, $82598; MM32-NEXT: sc $9, 0($3)2599; MM32-NEXT: beqzc $9, $BB8_12600; MM32-NEXT: # %bb.2: # %entry2601; MM32-NEXT: and $2, $7, $52602; MM32-NEXT: srlv $2, $2, $12603; MM32-NEXT: seb $2, $22604; MM32-NEXT: # %bb.3: # %entry2605; MM32-NEXT: jrc $ra2606;2607; O1-LABEL: AtomicLoadAdd8:2608; O1: # %bb.0: # %entry2609; O1-NEXT: lui $2, %hi(_gp_disp)2610; O1-NEXT: addiu $2, $2, %lo(_gp_disp)2611; O1-NEXT: addu $1, $2, $252612; O1-NEXT: lw $1, %got(y)($1)2613; O1-NEXT: addiu $2, $zero, -42614; O1-NEXT: and $3, $1, $22615; O1-NEXT: andi $1, $1, 32616; O1-NEXT: sll $1, $1, 32617; O1-NEXT: ori $2, $zero, 2552618; O1-NEXT: sllv $5, $2, $12619; O1-NEXT: nor $6, $zero, $52620; O1-NEXT: sllv $4, $4, $12621; O1-NEXT: $BB8_1: # %entry2622; O1-NEXT: # =>This Inner Loop Header: Depth=12623; O1-NEXT: ll $7, 0($3)2624; O1-NEXT: addu $8, $7, $42625; O1-NEXT: and $8, $8, $52626; O1-NEXT: and $9, $7, $62627; O1-NEXT: or $9, $9, $82628; O1-NEXT: sc $9, 0($3)2629; O1-NEXT: beqz $9, $BB8_12630; O1-NEXT: nop2631; O1-NEXT: # %bb.2: # %entry2632; O1-NEXT: and $2, $7, $52633; O1-NEXT: srlv $2, $2, $12634; O1-NEXT: sll $2, $2, 242635; O1-NEXT: sra $2, $2, 242636; O1-NEXT: # %bb.3: # %entry2637; O1-NEXT: jr $ra2638; O1-NEXT: nop2639;2640; O2-LABEL: AtomicLoadAdd8:2641; O2: # %bb.0: # %entry2642; O2-NEXT: lui $2, %hi(_gp_disp)2643; O2-NEXT: addiu $2, $2, %lo(_gp_disp)2644; O2-NEXT: addu $1, $2, $252645; O2-NEXT: lw $1, %got(y)($1)2646; O2-NEXT: addiu $2, $zero, -42647; O2-NEXT: and $3, $1, $22648; O2-NEXT: andi $1, $1, 32649; O2-NEXT: sll $1, $1, 32650; O2-NEXT: ori $2, $zero, 2552651; O2-NEXT: sllv $5, $2, $12652; O2-NEXT: nor $6, $zero, $52653; O2-NEXT: sllv $4, $4, $12654; O2-NEXT: $BB8_1: # %entry2655; O2-NEXT: # =>This Inner Loop Header: Depth=12656; O2-NEXT: ll $7, 0($3)2657; O2-NEXT: addu $8, $7, $42658; O2-NEXT: and $8, $8, $52659; O2-NEXT: and $9, $7, $62660; O2-NEXT: or $9, $9, $82661; O2-NEXT: sc $9, 0($3)2662; O2-NEXT: beqz $9, $BB8_12663; O2-NEXT: nop2664; O2-NEXT: # %bb.2: # %entry2665; O2-NEXT: and $2, $7, $52666; O2-NEXT: srlv $2, $2, $12667; O2-NEXT: sll $2, $2, 242668; O2-NEXT: sra $2, $2, 242669; O2-NEXT: # %bb.3: # %entry2670; O2-NEXT: jr $ra2671; O2-NEXT: nop2672;2673; O3-LABEL: AtomicLoadAdd8:2674; O3: # %bb.0: # %entry2675; O3-NEXT: lui $2, %hi(_gp_disp)2676; O3-NEXT: addiu $2, $2, %lo(_gp_disp)2677; O3-NEXT: addu $1, $2, $252678; O3-NEXT: addiu $2, $zero, -42679; O3-NEXT: lw $1, %got(y)($1)2680; O3-NEXT: and $3, $1, $22681; O3-NEXT: andi $1, $1, 32682; O3-NEXT: ori $2, $zero, 2552683; O3-NEXT: sll $1, $1, 32684; O3-NEXT: sllv $5, $2, $12685; O3-NEXT: sllv $4, $4, $12686; O3-NEXT: nor $6, $zero, $52687; O3-NEXT: $BB8_1: # %entry2688; O3-NEXT: # =>This Inner Loop Header: Depth=12689; O3-NEXT: ll $7, 0($3)2690; O3-NEXT: addu $8, $7, $42691; O3-NEXT: and $8, $8, $52692; O3-NEXT: and $9, $7, $62693; O3-NEXT: or $9, $9, $82694; O3-NEXT: sc $9, 0($3)2695; O3-NEXT: beqz $9, $BB8_12696; O3-NEXT: nop2697; O3-NEXT: # %bb.2: # %entry2698; O3-NEXT: and $2, $7, $52699; O3-NEXT: srlv $2, $2, $12700; O3-NEXT: sll $2, $2, 242701; O3-NEXT: sra $2, $2, 242702; O3-NEXT: # %bb.3: # %entry2703; O3-NEXT: jr $ra2704; O3-NEXT: nop2705;2706; MIPS32EB-LABEL: AtomicLoadAdd8:2707; MIPS32EB: # %bb.0: # %entry2708; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)2709; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)2710; MIPS32EB-NEXT: addu $1, $2, $252711; MIPS32EB-NEXT: lw $1, %got(y)($1)2712; MIPS32EB-NEXT: addiu $2, $zero, -42713; MIPS32EB-NEXT: and $3, $1, $22714; MIPS32EB-NEXT: andi $1, $1, 32715; MIPS32EB-NEXT: xori $1, $1, 32716; MIPS32EB-NEXT: sll $1, $1, 32717; MIPS32EB-NEXT: ori $2, $zero, 2552718; MIPS32EB-NEXT: sllv $5, $2, $12719; MIPS32EB-NEXT: nor $6, $zero, $52720; MIPS32EB-NEXT: sllv $4, $4, $12721; MIPS32EB-NEXT: $BB8_1: # %entry2722; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=12723; MIPS32EB-NEXT: ll $7, 0($3)2724; MIPS32EB-NEXT: addu $8, $7, $42725; MIPS32EB-NEXT: and $8, $8, $52726; MIPS32EB-NEXT: and $9, $7, $62727; MIPS32EB-NEXT: or $9, $9, $82728; MIPS32EB-NEXT: sc $9, 0($3)2729; MIPS32EB-NEXT: beqz $9, $BB8_12730; MIPS32EB-NEXT: nop2731; MIPS32EB-NEXT: # %bb.2: # %entry2732; MIPS32EB-NEXT: and $2, $7, $52733; MIPS32EB-NEXT: srlv $2, $2, $12734; MIPS32EB-NEXT: sll $2, $2, 242735; MIPS32EB-NEXT: sra $2, $2, 242736; MIPS32EB-NEXT: # %bb.3: # %entry2737; MIPS32EB-NEXT: jr $ra2738; MIPS32EB-NEXT: nop2739entry:2740 %0 = atomicrmw add ptr @y, i8 %incr monotonic2741 ret i8 %02742}2743 2744define signext i8 @AtomicLoadSub8(i8 signext %incr) nounwind {2745; MIPS32-LABEL: AtomicLoadSub8:2746; MIPS32: # %bb.0: # %entry2747; MIPS32-NEXT: lui $2, %hi(_gp_disp)2748; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)2749; MIPS32-NEXT: addu $1, $2, $252750; MIPS32-NEXT: lw $1, %got(y)($1)2751; MIPS32-NEXT: addiu $2, $zero, -42752; MIPS32-NEXT: and $3, $1, $22753; MIPS32-NEXT: andi $1, $1, 32754; MIPS32-NEXT: sll $1, $1, 32755; MIPS32-NEXT: ori $2, $zero, 2552756; MIPS32-NEXT: sllv $5, $2, $12757; MIPS32-NEXT: nor $6, $zero, $52758; MIPS32-NEXT: sllv $4, $4, $12759; MIPS32-NEXT: $BB9_1: # %entry2760; MIPS32-NEXT: # =>This Inner Loop Header: Depth=12761; MIPS32-NEXT: ll $7, 0($3)2762; MIPS32-NEXT: subu $8, $7, $42763; MIPS32-NEXT: and $8, $8, $52764; MIPS32-NEXT: and $9, $7, $62765; MIPS32-NEXT: or $9, $9, $82766; MIPS32-NEXT: sc $9, 0($3)2767; MIPS32-NEXT: beqz $9, $BB9_12768; MIPS32-NEXT: nop2769; MIPS32-NEXT: # %bb.2: # %entry2770; MIPS32-NEXT: and $2, $7, $52771; MIPS32-NEXT: srlv $2, $2, $12772; MIPS32-NEXT: sll $2, $2, 242773; MIPS32-NEXT: sra $2, $2, 242774; MIPS32-NEXT: # %bb.3: # %entry2775; MIPS32-NEXT: jr $ra2776; MIPS32-NEXT: nop2777;2778; MIPS32O0-LABEL: AtomicLoadSub8:2779; MIPS32O0: # %bb.0: # %entry2780; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)2781; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)2782; MIPS32O0-NEXT: addiu $sp, $sp, -82783; MIPS32O0-NEXT: addu $1, $2, $252784; MIPS32O0-NEXT: lw $1, %got(y)($1)2785; MIPS32O0-NEXT: addiu $2, $zero, -42786; MIPS32O0-NEXT: and $5, $1, $22787; MIPS32O0-NEXT: andi $1, $1, 32788; MIPS32O0-NEXT: sll $9, $1, 32789; MIPS32O0-NEXT: ori $1, $zero, 2552790; MIPS32O0-NEXT: sllv $7, $1, $92791; MIPS32O0-NEXT: nor $8, $zero, $72792; MIPS32O0-NEXT: sllv $6, $4, $92793; MIPS32O0-NEXT: $BB9_1: # %entry2794; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=12795; MIPS32O0-NEXT: ll $2, 0($5)2796; MIPS32O0-NEXT: subu $3, $2, $62797; MIPS32O0-NEXT: and $3, $3, $72798; MIPS32O0-NEXT: and $4, $2, $82799; MIPS32O0-NEXT: or $4, $4, $32800; MIPS32O0-NEXT: sc $4, 0($5)2801; MIPS32O0-NEXT: beqz $4, $BB9_12802; MIPS32O0-NEXT: nop2803; MIPS32O0-NEXT: # %bb.2: # %entry2804; MIPS32O0-NEXT: and $1, $2, $72805; MIPS32O0-NEXT: srlv $1, $1, $92806; MIPS32O0-NEXT: sll $1, $1, 242807; MIPS32O0-NEXT: sra $1, $1, 242808; MIPS32O0-NEXT: # %bb.3: # %entry2809; MIPS32O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill2810; MIPS32O0-NEXT: # %bb.4: # %entry2811; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload2812; MIPS32O0-NEXT: sll $1, $1, 242813; MIPS32O0-NEXT: sra $2, $1, 242814; MIPS32O0-NEXT: addiu $sp, $sp, 82815; MIPS32O0-NEXT: jr $ra2816; MIPS32O0-NEXT: nop2817;2818; MIPS32R2-LABEL: AtomicLoadSub8:2819; MIPS32R2: # %bb.0: # %entry2820; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)2821; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)2822; MIPS32R2-NEXT: addu $1, $2, $252823; MIPS32R2-NEXT: lw $1, %got(y)($1)2824; MIPS32R2-NEXT: addiu $2, $zero, -42825; MIPS32R2-NEXT: and $3, $1, $22826; MIPS32R2-NEXT: andi $1, $1, 32827; MIPS32R2-NEXT: sll $1, $1, 32828; MIPS32R2-NEXT: ori $2, $zero, 2552829; MIPS32R2-NEXT: sllv $5, $2, $12830; MIPS32R2-NEXT: nor $6, $zero, $52831; MIPS32R2-NEXT: sllv $4, $4, $12832; MIPS32R2-NEXT: $BB9_1: # %entry2833; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=12834; MIPS32R2-NEXT: ll $7, 0($3)2835; MIPS32R2-NEXT: subu $8, $7, $42836; MIPS32R2-NEXT: and $8, $8, $52837; MIPS32R2-NEXT: and $9, $7, $62838; MIPS32R2-NEXT: or $9, $9, $82839; MIPS32R2-NEXT: sc $9, 0($3)2840; MIPS32R2-NEXT: beqz $9, $BB9_12841; MIPS32R2-NEXT: nop2842; MIPS32R2-NEXT: # %bb.2: # %entry2843; MIPS32R2-NEXT: and $2, $7, $52844; MIPS32R2-NEXT: srlv $2, $2, $12845; MIPS32R2-NEXT: seb $2, $22846; MIPS32R2-NEXT: # %bb.3: # %entry2847; MIPS32R2-NEXT: jr $ra2848; MIPS32R2-NEXT: nop2849;2850; MIPS32R6-LABEL: AtomicLoadSub8:2851; MIPS32R6: # %bb.0: # %entry2852; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)2853; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)2854; MIPS32R6-NEXT: addu $1, $2, $252855; MIPS32R6-NEXT: lw $1, %got(y)($1)2856; MIPS32R6-NEXT: addiu $2, $zero, -42857; MIPS32R6-NEXT: and $3, $1, $22858; MIPS32R6-NEXT: andi $1, $1, 32859; MIPS32R6-NEXT: sll $1, $1, 32860; MIPS32R6-NEXT: ori $2, $zero, 2552861; MIPS32R6-NEXT: sllv $5, $2, $12862; MIPS32R6-NEXT: nor $6, $zero, $52863; MIPS32R6-NEXT: sllv $4, $4, $12864; MIPS32R6-NEXT: $BB9_1: # %entry2865; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=12866; MIPS32R6-NEXT: ll $7, 0($3)2867; MIPS32R6-NEXT: subu $8, $7, $42868; MIPS32R6-NEXT: and $8, $8, $52869; MIPS32R6-NEXT: and $9, $7, $62870; MIPS32R6-NEXT: or $9, $9, $82871; MIPS32R6-NEXT: sc $9, 0($3)2872; MIPS32R6-NEXT: beqzc $9, $BB9_12873; MIPS32R6-NEXT: # %bb.2: # %entry2874; MIPS32R6-NEXT: and $2, $7, $52875; MIPS32R6-NEXT: srlv $2, $2, $12876; MIPS32R6-NEXT: seb $2, $22877; MIPS32R6-NEXT: # %bb.3: # %entry2878; MIPS32R6-NEXT: jrc $ra2879;2880; MIPS32R6O0-LABEL: AtomicLoadSub8:2881; MIPS32R6O0: # %bb.0: # %entry2882; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)2883; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)2884; MIPS32R6O0-NEXT: addiu $sp, $sp, -82885; MIPS32R6O0-NEXT: addu $1, $2, $252886; MIPS32R6O0-NEXT: # kill: def $v0 killed $a02887; MIPS32R6O0-NEXT: lw $1, %got(y)($1)2888; MIPS32R6O0-NEXT: addiu $2, $zero, -42889; MIPS32R6O0-NEXT: and $5, $1, $22890; MIPS32R6O0-NEXT: andi $1, $1, 32891; MIPS32R6O0-NEXT: sll $9, $1, 32892; MIPS32R6O0-NEXT: ori $1, $zero, 2552893; MIPS32R6O0-NEXT: sllv $7, $1, $92894; MIPS32R6O0-NEXT: nor $8, $zero, $72895; MIPS32R6O0-NEXT: sllv $6, $4, $92896; MIPS32R6O0-NEXT: $BB9_1: # %entry2897; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=12898; MIPS32R6O0-NEXT: ll $2, 0($5)2899; MIPS32R6O0-NEXT: subu $3, $2, $62900; MIPS32R6O0-NEXT: and $3, $3, $72901; MIPS32R6O0-NEXT: and $4, $2, $82902; MIPS32R6O0-NEXT: or $4, $4, $32903; MIPS32R6O0-NEXT: sc $4, 0($5)2904; MIPS32R6O0-NEXT: beqzc $4, $BB9_12905; MIPS32R6O0-NEXT: # %bb.2: # %entry2906; MIPS32R6O0-NEXT: and $1, $2, $72907; MIPS32R6O0-NEXT: srlv $1, $1, $92908; MIPS32R6O0-NEXT: seb $1, $12909; MIPS32R6O0-NEXT: # %bb.3: # %entry2910; MIPS32R6O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill2911; MIPS32R6O0-NEXT: # %bb.4: # %entry2912; MIPS32R6O0-NEXT: lw $2, 4($sp) # 4-byte Folded Reload2913; MIPS32R6O0-NEXT: addiu $sp, $sp, 82914; MIPS32R6O0-NEXT: jrc $ra2915;2916; MIPS4-LABEL: AtomicLoadSub8:2917; MIPS4: # %bb.0: # %entry2918; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub8)))2919; MIPS4-NEXT: daddu $1, $1, $252920; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub8)))2921; MIPS4-NEXT: ld $1, %got_disp(y)($1)2922; MIPS4-NEXT: daddiu $2, $zero, -42923; MIPS4-NEXT: and $3, $1, $22924; MIPS4-NEXT: andi $1, $1, 32925; MIPS4-NEXT: sll $1, $1, 32926; MIPS4-NEXT: ori $2, $zero, 2552927; MIPS4-NEXT: sllv $5, $2, $12928; MIPS4-NEXT: nor $6, $zero, $52929; MIPS4-NEXT: sllv $4, $4, $12930; MIPS4-NEXT: .LBB9_1: # %entry2931; MIPS4-NEXT: # =>This Inner Loop Header: Depth=12932; MIPS4-NEXT: ll $7, 0($3)2933; MIPS4-NEXT: subu $8, $7, $42934; MIPS4-NEXT: and $8, $8, $52935; MIPS4-NEXT: and $9, $7, $62936; MIPS4-NEXT: or $9, $9, $82937; MIPS4-NEXT: sc $9, 0($3)2938; MIPS4-NEXT: beqz $9, .LBB9_12939; MIPS4-NEXT: nop2940; MIPS4-NEXT: # %bb.2: # %entry2941; MIPS4-NEXT: and $2, $7, $52942; MIPS4-NEXT: srlv $2, $2, $12943; MIPS4-NEXT: sll $2, $2, 242944; MIPS4-NEXT: sra $2, $2, 242945; MIPS4-NEXT: # %bb.3: # %entry2946; MIPS4-NEXT: jr $ra2947; MIPS4-NEXT: nop2948;2949; MIPS64-LABEL: AtomicLoadSub8:2950; MIPS64: # %bb.0: # %entry2951; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub8)))2952; MIPS64-NEXT: daddu $1, $1, $252953; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub8)))2954; MIPS64-NEXT: ld $1, %got_disp(y)($1)2955; MIPS64-NEXT: daddiu $2, $zero, -42956; MIPS64-NEXT: and $3, $1, $22957; MIPS64-NEXT: andi $1, $1, 32958; MIPS64-NEXT: sll $1, $1, 32959; MIPS64-NEXT: ori $2, $zero, 2552960; MIPS64-NEXT: sllv $5, $2, $12961; MIPS64-NEXT: nor $6, $zero, $52962; MIPS64-NEXT: sllv $4, $4, $12963; MIPS64-NEXT: .LBB9_1: # %entry2964; MIPS64-NEXT: # =>This Inner Loop Header: Depth=12965; MIPS64-NEXT: ll $7, 0($3)2966; MIPS64-NEXT: subu $8, $7, $42967; MIPS64-NEXT: and $8, $8, $52968; MIPS64-NEXT: and $9, $7, $62969; MIPS64-NEXT: or $9, $9, $82970; MIPS64-NEXT: sc $9, 0($3)2971; MIPS64-NEXT: beqz $9, .LBB9_12972; MIPS64-NEXT: nop2973; MIPS64-NEXT: # %bb.2: # %entry2974; MIPS64-NEXT: and $2, $7, $52975; MIPS64-NEXT: srlv $2, $2, $12976; MIPS64-NEXT: sll $2, $2, 242977; MIPS64-NEXT: sra $2, $2, 242978; MIPS64-NEXT: # %bb.3: # %entry2979; MIPS64-NEXT: jr $ra2980; MIPS64-NEXT: nop2981;2982; MIPS64R2-LABEL: AtomicLoadSub8:2983; MIPS64R2: # %bb.0: # %entry2984; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub8)))2985; MIPS64R2-NEXT: daddu $1, $1, $252986; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub8)))2987; MIPS64R2-NEXT: ld $1, %got_disp(y)($1)2988; MIPS64R2-NEXT: daddiu $2, $zero, -42989; MIPS64R2-NEXT: and $3, $1, $22990; MIPS64R2-NEXT: andi $1, $1, 32991; MIPS64R2-NEXT: sll $1, $1, 32992; MIPS64R2-NEXT: ori $2, $zero, 2552993; MIPS64R2-NEXT: sllv $5, $2, $12994; MIPS64R2-NEXT: nor $6, $zero, $52995; MIPS64R2-NEXT: sllv $4, $4, $12996; MIPS64R2-NEXT: .LBB9_1: # %entry2997; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=12998; MIPS64R2-NEXT: ll $7, 0($3)2999; MIPS64R2-NEXT: subu $8, $7, $43000; MIPS64R2-NEXT: and $8, $8, $53001; MIPS64R2-NEXT: and $9, $7, $63002; MIPS64R2-NEXT: or $9, $9, $83003; MIPS64R2-NEXT: sc $9, 0($3)3004; MIPS64R2-NEXT: beqz $9, .LBB9_13005; MIPS64R2-NEXT: nop3006; MIPS64R2-NEXT: # %bb.2: # %entry3007; MIPS64R2-NEXT: and $2, $7, $53008; MIPS64R2-NEXT: srlv $2, $2, $13009; MIPS64R2-NEXT: seb $2, $23010; MIPS64R2-NEXT: # %bb.3: # %entry3011; MIPS64R2-NEXT: jr $ra3012; MIPS64R2-NEXT: nop3013;3014; MIPS64R6-LABEL: AtomicLoadSub8:3015; MIPS64R6: # %bb.0: # %entry3016; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub8)))3017; MIPS64R6-NEXT: daddu $1, $1, $253018; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub8)))3019; MIPS64R6-NEXT: ld $1, %got_disp(y)($1)3020; MIPS64R6-NEXT: daddiu $2, $zero, -43021; MIPS64R6-NEXT: and $3, $1, $23022; MIPS64R6-NEXT: andi $1, $1, 33023; MIPS64R6-NEXT: sll $1, $1, 33024; MIPS64R6-NEXT: ori $2, $zero, 2553025; MIPS64R6-NEXT: sllv $5, $2, $13026; MIPS64R6-NEXT: nor $6, $zero, $53027; MIPS64R6-NEXT: sllv $4, $4, $13028; MIPS64R6-NEXT: .LBB9_1: # %entry3029; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=13030; MIPS64R6-NEXT: ll $7, 0($3)3031; MIPS64R6-NEXT: subu $8, $7, $43032; MIPS64R6-NEXT: and $8, $8, $53033; MIPS64R6-NEXT: and $9, $7, $63034; MIPS64R6-NEXT: or $9, $9, $83035; MIPS64R6-NEXT: sc $9, 0($3)3036; MIPS64R6-NEXT: beqzc $9, .LBB9_13037; MIPS64R6-NEXT: # %bb.2: # %entry3038; MIPS64R6-NEXT: and $2, $7, $53039; MIPS64R6-NEXT: srlv $2, $2, $13040; MIPS64R6-NEXT: seb $2, $23041; MIPS64R6-NEXT: # %bb.3: # %entry3042; MIPS64R6-NEXT: jrc $ra3043;3044; MIPS64R6O0-LABEL: AtomicLoadSub8:3045; MIPS64R6O0: # %bb.0: # %entry3046; MIPS64R6O0-NEXT: daddiu $sp, $sp, -163047; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub8)))3048; MIPS64R6O0-NEXT: daddu $1, $1, $253049; MIPS64R6O0-NEXT: daddiu $2, $1, %lo(%neg(%gp_rel(AtomicLoadSub8)))3050; MIPS64R6O0-NEXT: move $1, $43051; MIPS64R6O0-NEXT: ld $2, %got_disp(y)($2)3052; MIPS64R6O0-NEXT: daddiu $3, $zero, -43053; MIPS64R6O0-NEXT: and $5, $2, $33054; MIPS64R6O0-NEXT: andi $2, $2, 33055; MIPS64R6O0-NEXT: xori $2, $2, 33056; MIPS64R6O0-NEXT: sll $9, $2, 33057; MIPS64R6O0-NEXT: ori $2, $zero, 2553058; MIPS64R6O0-NEXT: sllv $7, $2, $93059; MIPS64R6O0-NEXT: nor $8, $zero, $73060; MIPS64R6O0-NEXT: sllv $6, $1, $93061; MIPS64R6O0-NEXT: .LBB9_1: # %entry3062; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=13063; MIPS64R6O0-NEXT: ll $2, 0($5)3064; MIPS64R6O0-NEXT: subu $3, $2, $63065; MIPS64R6O0-NEXT: and $3, $3, $73066; MIPS64R6O0-NEXT: and $4, $2, $83067; MIPS64R6O0-NEXT: or $4, $4, $33068; MIPS64R6O0-NEXT: sc $4, 0($5)3069; MIPS64R6O0-NEXT: beqzc $4, .LBB9_13070; MIPS64R6O0-NEXT: # %bb.2: # %entry3071; MIPS64R6O0-NEXT: and $1, $2, $73072; MIPS64R6O0-NEXT: srlv $1, $1, $93073; MIPS64R6O0-NEXT: seb $1, $13074; MIPS64R6O0-NEXT: # %bb.3: # %entry3075; MIPS64R6O0-NEXT: sw $1, 12($sp) # 4-byte Folded Spill3076; MIPS64R6O0-NEXT: # %bb.4: # %entry3077; MIPS64R6O0-NEXT: lw $2, 12($sp) # 4-byte Folded Reload3078; MIPS64R6O0-NEXT: daddiu $sp, $sp, 163079; MIPS64R6O0-NEXT: jrc $ra3080;3081; MM32-LABEL: AtomicLoadSub8:3082; MM32: # %bb.0: # %entry3083; MM32-NEXT: lui $2, %hi(_gp_disp)3084; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)3085; MM32-NEXT: addu $2, $2, $253086; MM32-NEXT: lw $1, %got(y)($2)3087; MM32-NEXT: addiu $2, $zero, -43088; MM32-NEXT: and $3, $1, $23089; MM32-NEXT: andi $1, $1, 33090; MM32-NEXT: sll $1, $1, 33091; MM32-NEXT: ori $2, $zero, 2553092; MM32-NEXT: sllv $5, $2, $13093; MM32-NEXT: nor $6, $zero, $53094; MM32-NEXT: sllv $4, $4, $13095; MM32-NEXT: $BB9_1: # %entry3096; MM32-NEXT: # =>This Inner Loop Header: Depth=13097; MM32-NEXT: ll $7, 0($3)3098; MM32-NEXT: subu $8, $7, $43099; MM32-NEXT: and $8, $8, $53100; MM32-NEXT: and $9, $7, $63101; MM32-NEXT: or $9, $9, $83102; MM32-NEXT: sc $9, 0($3)3103; MM32-NEXT: beqzc $9, $BB9_13104; MM32-NEXT: # %bb.2: # %entry3105; MM32-NEXT: and $2, $7, $53106; MM32-NEXT: srlv $2, $2, $13107; MM32-NEXT: seb $2, $23108; MM32-NEXT: # %bb.3: # %entry3109; MM32-NEXT: jrc $ra3110;3111; O1-LABEL: AtomicLoadSub8:3112; O1: # %bb.0: # %entry3113; O1-NEXT: lui $2, %hi(_gp_disp)3114; O1-NEXT: addiu $2, $2, %lo(_gp_disp)3115; O1-NEXT: addu $1, $2, $253116; O1-NEXT: lw $1, %got(y)($1)3117; O1-NEXT: addiu $2, $zero, -43118; O1-NEXT: and $3, $1, $23119; O1-NEXT: andi $1, $1, 33120; O1-NEXT: sll $1, $1, 33121; O1-NEXT: ori $2, $zero, 2553122; O1-NEXT: sllv $5, $2, $13123; O1-NEXT: nor $6, $zero, $53124; O1-NEXT: sllv $4, $4, $13125; O1-NEXT: $BB9_1: # %entry3126; O1-NEXT: # =>This Inner Loop Header: Depth=13127; O1-NEXT: ll $7, 0($3)3128; O1-NEXT: subu $8, $7, $43129; O1-NEXT: and $8, $8, $53130; O1-NEXT: and $9, $7, $63131; O1-NEXT: or $9, $9, $83132; O1-NEXT: sc $9, 0($3)3133; O1-NEXT: beqz $9, $BB9_13134; O1-NEXT: nop3135; O1-NEXT: # %bb.2: # %entry3136; O1-NEXT: and $2, $7, $53137; O1-NEXT: srlv $2, $2, $13138; O1-NEXT: sll $2, $2, 243139; O1-NEXT: sra $2, $2, 243140; O1-NEXT: # %bb.3: # %entry3141; O1-NEXT: jr $ra3142; O1-NEXT: nop3143;3144; O2-LABEL: AtomicLoadSub8:3145; O2: # %bb.0: # %entry3146; O2-NEXT: lui $2, %hi(_gp_disp)3147; O2-NEXT: addiu $2, $2, %lo(_gp_disp)3148; O2-NEXT: addu $1, $2, $253149; O2-NEXT: lw $1, %got(y)($1)3150; O2-NEXT: addiu $2, $zero, -43151; O2-NEXT: and $3, $1, $23152; O2-NEXT: andi $1, $1, 33153; O2-NEXT: sll $1, $1, 33154; O2-NEXT: ori $2, $zero, 2553155; O2-NEXT: sllv $5, $2, $13156; O2-NEXT: nor $6, $zero, $53157; O2-NEXT: sllv $4, $4, $13158; O2-NEXT: $BB9_1: # %entry3159; O2-NEXT: # =>This Inner Loop Header: Depth=13160; O2-NEXT: ll $7, 0($3)3161; O2-NEXT: subu $8, $7, $43162; O2-NEXT: and $8, $8, $53163; O2-NEXT: and $9, $7, $63164; O2-NEXT: or $9, $9, $83165; O2-NEXT: sc $9, 0($3)3166; O2-NEXT: beqz $9, $BB9_13167; O2-NEXT: nop3168; O2-NEXT: # %bb.2: # %entry3169; O2-NEXT: and $2, $7, $53170; O2-NEXT: srlv $2, $2, $13171; O2-NEXT: sll $2, $2, 243172; O2-NEXT: sra $2, $2, 243173; O2-NEXT: # %bb.3: # %entry3174; O2-NEXT: jr $ra3175; O2-NEXT: nop3176;3177; O3-LABEL: AtomicLoadSub8:3178; O3: # %bb.0: # %entry3179; O3-NEXT: lui $2, %hi(_gp_disp)3180; O3-NEXT: addiu $2, $2, %lo(_gp_disp)3181; O3-NEXT: addu $1, $2, $253182; O3-NEXT: addiu $2, $zero, -43183; O3-NEXT: lw $1, %got(y)($1)3184; O3-NEXT: and $3, $1, $23185; O3-NEXT: andi $1, $1, 33186; O3-NEXT: ori $2, $zero, 2553187; O3-NEXT: sll $1, $1, 33188; O3-NEXT: sllv $5, $2, $13189; O3-NEXT: sllv $4, $4, $13190; O3-NEXT: nor $6, $zero, $53191; O3-NEXT: $BB9_1: # %entry3192; O3-NEXT: # =>This Inner Loop Header: Depth=13193; O3-NEXT: ll $7, 0($3)3194; O3-NEXT: subu $8, $7, $43195; O3-NEXT: and $8, $8, $53196; O3-NEXT: and $9, $7, $63197; O3-NEXT: or $9, $9, $83198; O3-NEXT: sc $9, 0($3)3199; O3-NEXT: beqz $9, $BB9_13200; O3-NEXT: nop3201; O3-NEXT: # %bb.2: # %entry3202; O3-NEXT: and $2, $7, $53203; O3-NEXT: srlv $2, $2, $13204; O3-NEXT: sll $2, $2, 243205; O3-NEXT: sra $2, $2, 243206; O3-NEXT: # %bb.3: # %entry3207; O3-NEXT: jr $ra3208; O3-NEXT: nop3209;3210; MIPS32EB-LABEL: AtomicLoadSub8:3211; MIPS32EB: # %bb.0: # %entry3212; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)3213; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)3214; MIPS32EB-NEXT: addu $1, $2, $253215; MIPS32EB-NEXT: lw $1, %got(y)($1)3216; MIPS32EB-NEXT: addiu $2, $zero, -43217; MIPS32EB-NEXT: and $3, $1, $23218; MIPS32EB-NEXT: andi $1, $1, 33219; MIPS32EB-NEXT: xori $1, $1, 33220; MIPS32EB-NEXT: sll $1, $1, 33221; MIPS32EB-NEXT: ori $2, $zero, 2553222; MIPS32EB-NEXT: sllv $5, $2, $13223; MIPS32EB-NEXT: nor $6, $zero, $53224; MIPS32EB-NEXT: sllv $4, $4, $13225; MIPS32EB-NEXT: $BB9_1: # %entry3226; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=13227; MIPS32EB-NEXT: ll $7, 0($3)3228; MIPS32EB-NEXT: subu $8, $7, $43229; MIPS32EB-NEXT: and $8, $8, $53230; MIPS32EB-NEXT: and $9, $7, $63231; MIPS32EB-NEXT: or $9, $9, $83232; MIPS32EB-NEXT: sc $9, 0($3)3233; MIPS32EB-NEXT: beqz $9, $BB9_13234; MIPS32EB-NEXT: nop3235; MIPS32EB-NEXT: # %bb.2: # %entry3236; MIPS32EB-NEXT: and $2, $7, $53237; MIPS32EB-NEXT: srlv $2, $2, $13238; MIPS32EB-NEXT: sll $2, $2, 243239; MIPS32EB-NEXT: sra $2, $2, 243240; MIPS32EB-NEXT: # %bb.3: # %entry3241; MIPS32EB-NEXT: jr $ra3242; MIPS32EB-NEXT: nop3243entry:3244 %0 = atomicrmw sub ptr @y, i8 %incr monotonic3245 ret i8 %03246 3247}3248 3249define signext i8 @AtomicLoadNand8(i8 signext %incr) nounwind {3250; MIPS32-LABEL: AtomicLoadNand8:3251; MIPS32: # %bb.0: # %entry3252; MIPS32-NEXT: lui $2, %hi(_gp_disp)3253; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)3254; MIPS32-NEXT: addu $1, $2, $253255; MIPS32-NEXT: lw $1, %got(y)($1)3256; MIPS32-NEXT: addiu $2, $zero, -43257; MIPS32-NEXT: and $3, $1, $23258; MIPS32-NEXT: andi $1, $1, 33259; MIPS32-NEXT: sll $1, $1, 33260; MIPS32-NEXT: ori $2, $zero, 2553261; MIPS32-NEXT: sllv $5, $2, $13262; MIPS32-NEXT: nor $6, $zero, $53263; MIPS32-NEXT: sllv $4, $4, $13264; MIPS32-NEXT: $BB10_1: # %entry3265; MIPS32-NEXT: # =>This Inner Loop Header: Depth=13266; MIPS32-NEXT: ll $7, 0($3)3267; MIPS32-NEXT: and $8, $7, $43268; MIPS32-NEXT: nor $8, $zero, $83269; MIPS32-NEXT: and $8, $8, $53270; MIPS32-NEXT: and $9, $7, $63271; MIPS32-NEXT: or $9, $9, $83272; MIPS32-NEXT: sc $9, 0($3)3273; MIPS32-NEXT: beqz $9, $BB10_13274; MIPS32-NEXT: nop3275; MIPS32-NEXT: # %bb.2: # %entry3276; MIPS32-NEXT: and $2, $7, $53277; MIPS32-NEXT: srlv $2, $2, $13278; MIPS32-NEXT: sll $2, $2, 243279; MIPS32-NEXT: sra $2, $2, 243280; MIPS32-NEXT: # %bb.3: # %entry3281; MIPS32-NEXT: jr $ra3282; MIPS32-NEXT: nop3283;3284; MIPS32O0-LABEL: AtomicLoadNand8:3285; MIPS32O0: # %bb.0: # %entry3286; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)3287; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)3288; MIPS32O0-NEXT: addiu $sp, $sp, -83289; MIPS32O0-NEXT: addu $1, $2, $253290; MIPS32O0-NEXT: lw $1, %got(y)($1)3291; MIPS32O0-NEXT: addiu $2, $zero, -43292; MIPS32O0-NEXT: and $5, $1, $23293; MIPS32O0-NEXT: andi $1, $1, 33294; MIPS32O0-NEXT: sll $9, $1, 33295; MIPS32O0-NEXT: ori $1, $zero, 2553296; MIPS32O0-NEXT: sllv $7, $1, $93297; MIPS32O0-NEXT: nor $8, $zero, $73298; MIPS32O0-NEXT: sllv $6, $4, $93299; MIPS32O0-NEXT: $BB10_1: # %entry3300; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=13301; MIPS32O0-NEXT: ll $2, 0($5)3302; MIPS32O0-NEXT: and $3, $2, $63303; MIPS32O0-NEXT: nor $3, $zero, $33304; MIPS32O0-NEXT: and $3, $3, $73305; MIPS32O0-NEXT: and $4, $2, $83306; MIPS32O0-NEXT: or $4, $4, $33307; MIPS32O0-NEXT: sc $4, 0($5)3308; MIPS32O0-NEXT: beqz $4, $BB10_13309; MIPS32O0-NEXT: nop3310; MIPS32O0-NEXT: # %bb.2: # %entry3311; MIPS32O0-NEXT: and $1, $2, $73312; MIPS32O0-NEXT: srlv $1, $1, $93313; MIPS32O0-NEXT: sll $1, $1, 243314; MIPS32O0-NEXT: sra $1, $1, 243315; MIPS32O0-NEXT: # %bb.3: # %entry3316; MIPS32O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill3317; MIPS32O0-NEXT: # %bb.4: # %entry3318; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload3319; MIPS32O0-NEXT: sll $1, $1, 243320; MIPS32O0-NEXT: sra $2, $1, 243321; MIPS32O0-NEXT: addiu $sp, $sp, 83322; MIPS32O0-NEXT: jr $ra3323; MIPS32O0-NEXT: nop3324;3325; MIPS32R2-LABEL: AtomicLoadNand8:3326; MIPS32R2: # %bb.0: # %entry3327; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)3328; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)3329; MIPS32R2-NEXT: addu $1, $2, $253330; MIPS32R2-NEXT: lw $1, %got(y)($1)3331; MIPS32R2-NEXT: addiu $2, $zero, -43332; MIPS32R2-NEXT: and $3, $1, $23333; MIPS32R2-NEXT: andi $1, $1, 33334; MIPS32R2-NEXT: sll $1, $1, 33335; MIPS32R2-NEXT: ori $2, $zero, 2553336; MIPS32R2-NEXT: sllv $5, $2, $13337; MIPS32R2-NEXT: nor $6, $zero, $53338; MIPS32R2-NEXT: sllv $4, $4, $13339; MIPS32R2-NEXT: $BB10_1: # %entry3340; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=13341; MIPS32R2-NEXT: ll $7, 0($3)3342; MIPS32R2-NEXT: and $8, $7, $43343; MIPS32R2-NEXT: nor $8, $zero, $83344; MIPS32R2-NEXT: and $8, $8, $53345; MIPS32R2-NEXT: and $9, $7, $63346; MIPS32R2-NEXT: or $9, $9, $83347; MIPS32R2-NEXT: sc $9, 0($3)3348; MIPS32R2-NEXT: beqz $9, $BB10_13349; MIPS32R2-NEXT: nop3350; MIPS32R2-NEXT: # %bb.2: # %entry3351; MIPS32R2-NEXT: and $2, $7, $53352; MIPS32R2-NEXT: srlv $2, $2, $13353; MIPS32R2-NEXT: seb $2, $23354; MIPS32R2-NEXT: # %bb.3: # %entry3355; MIPS32R2-NEXT: jr $ra3356; MIPS32R2-NEXT: nop3357;3358; MIPS32R6-LABEL: AtomicLoadNand8:3359; MIPS32R6: # %bb.0: # %entry3360; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)3361; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)3362; MIPS32R6-NEXT: addu $1, $2, $253363; MIPS32R6-NEXT: lw $1, %got(y)($1)3364; MIPS32R6-NEXT: addiu $2, $zero, -43365; MIPS32R6-NEXT: and $3, $1, $23366; MIPS32R6-NEXT: andi $1, $1, 33367; MIPS32R6-NEXT: sll $1, $1, 33368; MIPS32R6-NEXT: ori $2, $zero, 2553369; MIPS32R6-NEXT: sllv $5, $2, $13370; MIPS32R6-NEXT: nor $6, $zero, $53371; MIPS32R6-NEXT: sllv $4, $4, $13372; MIPS32R6-NEXT: $BB10_1: # %entry3373; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=13374; MIPS32R6-NEXT: ll $7, 0($3)3375; MIPS32R6-NEXT: and $8, $7, $43376; MIPS32R6-NEXT: nor $8, $zero, $83377; MIPS32R6-NEXT: and $8, $8, $53378; MIPS32R6-NEXT: and $9, $7, $63379; MIPS32R6-NEXT: or $9, $9, $83380; MIPS32R6-NEXT: sc $9, 0($3)3381; MIPS32R6-NEXT: beqzc $9, $BB10_13382; MIPS32R6-NEXT: # %bb.2: # %entry3383; MIPS32R6-NEXT: and $2, $7, $53384; MIPS32R6-NEXT: srlv $2, $2, $13385; MIPS32R6-NEXT: seb $2, $23386; MIPS32R6-NEXT: # %bb.3: # %entry3387; MIPS32R6-NEXT: jrc $ra3388;3389; MIPS32R6O0-LABEL: AtomicLoadNand8:3390; MIPS32R6O0: # %bb.0: # %entry3391; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)3392; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)3393; MIPS32R6O0-NEXT: addiu $sp, $sp, -83394; MIPS32R6O0-NEXT: addu $1, $2, $253395; MIPS32R6O0-NEXT: # kill: def $v0 killed $a03396; MIPS32R6O0-NEXT: lw $1, %got(y)($1)3397; MIPS32R6O0-NEXT: addiu $2, $zero, -43398; MIPS32R6O0-NEXT: and $5, $1, $23399; MIPS32R6O0-NEXT: andi $1, $1, 33400; MIPS32R6O0-NEXT: sll $9, $1, 33401; MIPS32R6O0-NEXT: ori $1, $zero, 2553402; MIPS32R6O0-NEXT: sllv $7, $1, $93403; MIPS32R6O0-NEXT: nor $8, $zero, $73404; MIPS32R6O0-NEXT: sllv $6, $4, $93405; MIPS32R6O0-NEXT: $BB10_1: # %entry3406; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=13407; MIPS32R6O0-NEXT: ll $2, 0($5)3408; MIPS32R6O0-NEXT: and $3, $2, $63409; MIPS32R6O0-NEXT: nor $3, $zero, $33410; MIPS32R6O0-NEXT: and $3, $3, $73411; MIPS32R6O0-NEXT: and $4, $2, $83412; MIPS32R6O0-NEXT: or $4, $4, $33413; MIPS32R6O0-NEXT: sc $4, 0($5)3414; MIPS32R6O0-NEXT: beqzc $4, $BB10_13415; MIPS32R6O0-NEXT: # %bb.2: # %entry3416; MIPS32R6O0-NEXT: and $1, $2, $73417; MIPS32R6O0-NEXT: srlv $1, $1, $93418; MIPS32R6O0-NEXT: seb $1, $13419; MIPS32R6O0-NEXT: # %bb.3: # %entry3420; MIPS32R6O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill3421; MIPS32R6O0-NEXT: # %bb.4: # %entry3422; MIPS32R6O0-NEXT: lw $2, 4($sp) # 4-byte Folded Reload3423; MIPS32R6O0-NEXT: addiu $sp, $sp, 83424; MIPS32R6O0-NEXT: jrc $ra3425;3426; MIPS4-LABEL: AtomicLoadNand8:3427; MIPS4: # %bb.0: # %entry3428; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand8)))3429; MIPS4-NEXT: daddu $1, $1, $253430; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand8)))3431; MIPS4-NEXT: ld $1, %got_disp(y)($1)3432; MIPS4-NEXT: daddiu $2, $zero, -43433; MIPS4-NEXT: and $3, $1, $23434; MIPS4-NEXT: andi $1, $1, 33435; MIPS4-NEXT: sll $1, $1, 33436; MIPS4-NEXT: ori $2, $zero, 2553437; MIPS4-NEXT: sllv $5, $2, $13438; MIPS4-NEXT: nor $6, $zero, $53439; MIPS4-NEXT: sllv $4, $4, $13440; MIPS4-NEXT: .LBB10_1: # %entry3441; MIPS4-NEXT: # =>This Inner Loop Header: Depth=13442; MIPS4-NEXT: ll $7, 0($3)3443; MIPS4-NEXT: and $8, $7, $43444; MIPS4-NEXT: nor $8, $zero, $83445; MIPS4-NEXT: and $8, $8, $53446; MIPS4-NEXT: and $9, $7, $63447; MIPS4-NEXT: or $9, $9, $83448; MIPS4-NEXT: sc $9, 0($3)3449; MIPS4-NEXT: beqz $9, .LBB10_13450; MIPS4-NEXT: nop3451; MIPS4-NEXT: # %bb.2: # %entry3452; MIPS4-NEXT: and $2, $7, $53453; MIPS4-NEXT: srlv $2, $2, $13454; MIPS4-NEXT: sll $2, $2, 243455; MIPS4-NEXT: sra $2, $2, 243456; MIPS4-NEXT: # %bb.3: # %entry3457; MIPS4-NEXT: jr $ra3458; MIPS4-NEXT: nop3459;3460; MIPS64-LABEL: AtomicLoadNand8:3461; MIPS64: # %bb.0: # %entry3462; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand8)))3463; MIPS64-NEXT: daddu $1, $1, $253464; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand8)))3465; MIPS64-NEXT: ld $1, %got_disp(y)($1)3466; MIPS64-NEXT: daddiu $2, $zero, -43467; MIPS64-NEXT: and $3, $1, $23468; MIPS64-NEXT: andi $1, $1, 33469; MIPS64-NEXT: sll $1, $1, 33470; MIPS64-NEXT: ori $2, $zero, 2553471; MIPS64-NEXT: sllv $5, $2, $13472; MIPS64-NEXT: nor $6, $zero, $53473; MIPS64-NEXT: sllv $4, $4, $13474; MIPS64-NEXT: .LBB10_1: # %entry3475; MIPS64-NEXT: # =>This Inner Loop Header: Depth=13476; MIPS64-NEXT: ll $7, 0($3)3477; MIPS64-NEXT: and $8, $7, $43478; MIPS64-NEXT: nor $8, $zero, $83479; MIPS64-NEXT: and $8, $8, $53480; MIPS64-NEXT: and $9, $7, $63481; MIPS64-NEXT: or $9, $9, $83482; MIPS64-NEXT: sc $9, 0($3)3483; MIPS64-NEXT: beqz $9, .LBB10_13484; MIPS64-NEXT: nop3485; MIPS64-NEXT: # %bb.2: # %entry3486; MIPS64-NEXT: and $2, $7, $53487; MIPS64-NEXT: srlv $2, $2, $13488; MIPS64-NEXT: sll $2, $2, 243489; MIPS64-NEXT: sra $2, $2, 243490; MIPS64-NEXT: # %bb.3: # %entry3491; MIPS64-NEXT: jr $ra3492; MIPS64-NEXT: nop3493;3494; MIPS64R2-LABEL: AtomicLoadNand8:3495; MIPS64R2: # %bb.0: # %entry3496; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand8)))3497; MIPS64R2-NEXT: daddu $1, $1, $253498; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand8)))3499; MIPS64R2-NEXT: ld $1, %got_disp(y)($1)3500; MIPS64R2-NEXT: daddiu $2, $zero, -43501; MIPS64R2-NEXT: and $3, $1, $23502; MIPS64R2-NEXT: andi $1, $1, 33503; MIPS64R2-NEXT: sll $1, $1, 33504; MIPS64R2-NEXT: ori $2, $zero, 2553505; MIPS64R2-NEXT: sllv $5, $2, $13506; MIPS64R2-NEXT: nor $6, $zero, $53507; MIPS64R2-NEXT: sllv $4, $4, $13508; MIPS64R2-NEXT: .LBB10_1: # %entry3509; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=13510; MIPS64R2-NEXT: ll $7, 0($3)3511; MIPS64R2-NEXT: and $8, $7, $43512; MIPS64R2-NEXT: nor $8, $zero, $83513; MIPS64R2-NEXT: and $8, $8, $53514; MIPS64R2-NEXT: and $9, $7, $63515; MIPS64R2-NEXT: or $9, $9, $83516; MIPS64R2-NEXT: sc $9, 0($3)3517; MIPS64R2-NEXT: beqz $9, .LBB10_13518; MIPS64R2-NEXT: nop3519; MIPS64R2-NEXT: # %bb.2: # %entry3520; MIPS64R2-NEXT: and $2, $7, $53521; MIPS64R2-NEXT: srlv $2, $2, $13522; MIPS64R2-NEXT: seb $2, $23523; MIPS64R2-NEXT: # %bb.3: # %entry3524; MIPS64R2-NEXT: jr $ra3525; MIPS64R2-NEXT: nop3526;3527; MIPS64R6-LABEL: AtomicLoadNand8:3528; MIPS64R6: # %bb.0: # %entry3529; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand8)))3530; MIPS64R6-NEXT: daddu $1, $1, $253531; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand8)))3532; MIPS64R6-NEXT: ld $1, %got_disp(y)($1)3533; MIPS64R6-NEXT: daddiu $2, $zero, -43534; MIPS64R6-NEXT: and $3, $1, $23535; MIPS64R6-NEXT: andi $1, $1, 33536; MIPS64R6-NEXT: sll $1, $1, 33537; MIPS64R6-NEXT: ori $2, $zero, 2553538; MIPS64R6-NEXT: sllv $5, $2, $13539; MIPS64R6-NEXT: nor $6, $zero, $53540; MIPS64R6-NEXT: sllv $4, $4, $13541; MIPS64R6-NEXT: .LBB10_1: # %entry3542; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=13543; MIPS64R6-NEXT: ll $7, 0($3)3544; MIPS64R6-NEXT: and $8, $7, $43545; MIPS64R6-NEXT: nor $8, $zero, $83546; MIPS64R6-NEXT: and $8, $8, $53547; MIPS64R6-NEXT: and $9, $7, $63548; MIPS64R6-NEXT: or $9, $9, $83549; MIPS64R6-NEXT: sc $9, 0($3)3550; MIPS64R6-NEXT: beqzc $9, .LBB10_13551; MIPS64R6-NEXT: # %bb.2: # %entry3552; MIPS64R6-NEXT: and $2, $7, $53553; MIPS64R6-NEXT: srlv $2, $2, $13554; MIPS64R6-NEXT: seb $2, $23555; MIPS64R6-NEXT: # %bb.3: # %entry3556; MIPS64R6-NEXT: jrc $ra3557;3558; MIPS64R6O0-LABEL: AtomicLoadNand8:3559; MIPS64R6O0: # %bb.0: # %entry3560; MIPS64R6O0-NEXT: daddiu $sp, $sp, -163561; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand8)))3562; MIPS64R6O0-NEXT: daddu $1, $1, $253563; MIPS64R6O0-NEXT: daddiu $2, $1, %lo(%neg(%gp_rel(AtomicLoadNand8)))3564; MIPS64R6O0-NEXT: move $1, $43565; MIPS64R6O0-NEXT: ld $2, %got_disp(y)($2)3566; MIPS64R6O0-NEXT: daddiu $3, $zero, -43567; MIPS64R6O0-NEXT: and $5, $2, $33568; MIPS64R6O0-NEXT: andi $2, $2, 33569; MIPS64R6O0-NEXT: xori $2, $2, 33570; MIPS64R6O0-NEXT: sll $9, $2, 33571; MIPS64R6O0-NEXT: ori $2, $zero, 2553572; MIPS64R6O0-NEXT: sllv $7, $2, $93573; MIPS64R6O0-NEXT: nor $8, $zero, $73574; MIPS64R6O0-NEXT: sllv $6, $1, $93575; MIPS64R6O0-NEXT: .LBB10_1: # %entry3576; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=13577; MIPS64R6O0-NEXT: ll $2, 0($5)3578; MIPS64R6O0-NEXT: and $3, $2, $63579; MIPS64R6O0-NEXT: nor $3, $zero, $33580; MIPS64R6O0-NEXT: and $3, $3, $73581; MIPS64R6O0-NEXT: and $4, $2, $83582; MIPS64R6O0-NEXT: or $4, $4, $33583; MIPS64R6O0-NEXT: sc $4, 0($5)3584; MIPS64R6O0-NEXT: beqzc $4, .LBB10_13585; MIPS64R6O0-NEXT: # %bb.2: # %entry3586; MIPS64R6O0-NEXT: and $1, $2, $73587; MIPS64R6O0-NEXT: srlv $1, $1, $93588; MIPS64R6O0-NEXT: seb $1, $13589; MIPS64R6O0-NEXT: # %bb.3: # %entry3590; MIPS64R6O0-NEXT: sw $1, 12($sp) # 4-byte Folded Spill3591; MIPS64R6O0-NEXT: # %bb.4: # %entry3592; MIPS64R6O0-NEXT: lw $2, 12($sp) # 4-byte Folded Reload3593; MIPS64R6O0-NEXT: daddiu $sp, $sp, 163594; MIPS64R6O0-NEXT: jrc $ra3595;3596; MM32-LABEL: AtomicLoadNand8:3597; MM32: # %bb.0: # %entry3598; MM32-NEXT: lui $2, %hi(_gp_disp)3599; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)3600; MM32-NEXT: addu $2, $2, $253601; MM32-NEXT: lw $1, %got(y)($2)3602; MM32-NEXT: addiu $2, $zero, -43603; MM32-NEXT: and $3, $1, $23604; MM32-NEXT: andi $1, $1, 33605; MM32-NEXT: sll $1, $1, 33606; MM32-NEXT: ori $2, $zero, 2553607; MM32-NEXT: sllv $5, $2, $13608; MM32-NEXT: nor $6, $zero, $53609; MM32-NEXT: sllv $4, $4, $13610; MM32-NEXT: $BB10_1: # %entry3611; MM32-NEXT: # =>This Inner Loop Header: Depth=13612; MM32-NEXT: ll $7, 0($3)3613; MM32-NEXT: and $8, $7, $43614; MM32-NEXT: nor $8, $zero, $83615; MM32-NEXT: and $8, $8, $53616; MM32-NEXT: and $9, $7, $63617; MM32-NEXT: or $9, $9, $83618; MM32-NEXT: sc $9, 0($3)3619; MM32-NEXT: beqzc $9, $BB10_13620; MM32-NEXT: # %bb.2: # %entry3621; MM32-NEXT: and $2, $7, $53622; MM32-NEXT: srlv $2, $2, $13623; MM32-NEXT: seb $2, $23624; MM32-NEXT: # %bb.3: # %entry3625; MM32-NEXT: jrc $ra3626;3627; O1-LABEL: AtomicLoadNand8:3628; O1: # %bb.0: # %entry3629; O1-NEXT: lui $2, %hi(_gp_disp)3630; O1-NEXT: addiu $2, $2, %lo(_gp_disp)3631; O1-NEXT: addu $1, $2, $253632; O1-NEXT: lw $1, %got(y)($1)3633; O1-NEXT: addiu $2, $zero, -43634; O1-NEXT: and $3, $1, $23635; O1-NEXT: andi $1, $1, 33636; O1-NEXT: sll $1, $1, 33637; O1-NEXT: ori $2, $zero, 2553638; O1-NEXT: sllv $5, $2, $13639; O1-NEXT: nor $6, $zero, $53640; O1-NEXT: sllv $4, $4, $13641; O1-NEXT: $BB10_1: # %entry3642; O1-NEXT: # =>This Inner Loop Header: Depth=13643; O1-NEXT: ll $7, 0($3)3644; O1-NEXT: and $8, $7, $43645; O1-NEXT: nor $8, $zero, $83646; O1-NEXT: and $8, $8, $53647; O1-NEXT: and $9, $7, $63648; O1-NEXT: or $9, $9, $83649; O1-NEXT: sc $9, 0($3)3650; O1-NEXT: beqz $9, $BB10_13651; O1-NEXT: nop3652; O1-NEXT: # %bb.2: # %entry3653; O1-NEXT: and $2, $7, $53654; O1-NEXT: srlv $2, $2, $13655; O1-NEXT: sll $2, $2, 243656; O1-NEXT: sra $2, $2, 243657; O1-NEXT: # %bb.3: # %entry3658; O1-NEXT: jr $ra3659; O1-NEXT: nop3660;3661; O2-LABEL: AtomicLoadNand8:3662; O2: # %bb.0: # %entry3663; O2-NEXT: lui $2, %hi(_gp_disp)3664; O2-NEXT: addiu $2, $2, %lo(_gp_disp)3665; O2-NEXT: addu $1, $2, $253666; O2-NEXT: lw $1, %got(y)($1)3667; O2-NEXT: addiu $2, $zero, -43668; O2-NEXT: and $3, $1, $23669; O2-NEXT: andi $1, $1, 33670; O2-NEXT: sll $1, $1, 33671; O2-NEXT: ori $2, $zero, 2553672; O2-NEXT: sllv $5, $2, $13673; O2-NEXT: nor $6, $zero, $53674; O2-NEXT: sllv $4, $4, $13675; O2-NEXT: $BB10_1: # %entry3676; O2-NEXT: # =>This Inner Loop Header: Depth=13677; O2-NEXT: ll $7, 0($3)3678; O2-NEXT: and $8, $7, $43679; O2-NEXT: nor $8, $zero, $83680; O2-NEXT: and $8, $8, $53681; O2-NEXT: and $9, $7, $63682; O2-NEXT: or $9, $9, $83683; O2-NEXT: sc $9, 0($3)3684; O2-NEXT: beqz $9, $BB10_13685; O2-NEXT: nop3686; O2-NEXT: # %bb.2: # %entry3687; O2-NEXT: and $2, $7, $53688; O2-NEXT: srlv $2, $2, $13689; O2-NEXT: sll $2, $2, 243690; O2-NEXT: sra $2, $2, 243691; O2-NEXT: # %bb.3: # %entry3692; O2-NEXT: jr $ra3693; O2-NEXT: nop3694;3695; O3-LABEL: AtomicLoadNand8:3696; O3: # %bb.0: # %entry3697; O3-NEXT: lui $2, %hi(_gp_disp)3698; O3-NEXT: addiu $2, $2, %lo(_gp_disp)3699; O3-NEXT: addu $1, $2, $253700; O3-NEXT: addiu $2, $zero, -43701; O3-NEXT: lw $1, %got(y)($1)3702; O3-NEXT: and $3, $1, $23703; O3-NEXT: andi $1, $1, 33704; O3-NEXT: ori $2, $zero, 2553705; O3-NEXT: sll $1, $1, 33706; O3-NEXT: sllv $5, $2, $13707; O3-NEXT: sllv $4, $4, $13708; O3-NEXT: nor $6, $zero, $53709; O3-NEXT: $BB10_1: # %entry3710; O3-NEXT: # =>This Inner Loop Header: Depth=13711; O3-NEXT: ll $7, 0($3)3712; O3-NEXT: and $8, $7, $43713; O3-NEXT: nor $8, $zero, $83714; O3-NEXT: and $8, $8, $53715; O3-NEXT: and $9, $7, $63716; O3-NEXT: or $9, $9, $83717; O3-NEXT: sc $9, 0($3)3718; O3-NEXT: beqz $9, $BB10_13719; O3-NEXT: nop3720; O3-NEXT: # %bb.2: # %entry3721; O3-NEXT: and $2, $7, $53722; O3-NEXT: srlv $2, $2, $13723; O3-NEXT: sll $2, $2, 243724; O3-NEXT: sra $2, $2, 243725; O3-NEXT: # %bb.3: # %entry3726; O3-NEXT: jr $ra3727; O3-NEXT: nop3728;3729; MIPS32EB-LABEL: AtomicLoadNand8:3730; MIPS32EB: # %bb.0: # %entry3731; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)3732; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)3733; MIPS32EB-NEXT: addu $1, $2, $253734; MIPS32EB-NEXT: lw $1, %got(y)($1)3735; MIPS32EB-NEXT: addiu $2, $zero, -43736; MIPS32EB-NEXT: and $3, $1, $23737; MIPS32EB-NEXT: andi $1, $1, 33738; MIPS32EB-NEXT: xori $1, $1, 33739; MIPS32EB-NEXT: sll $1, $1, 33740; MIPS32EB-NEXT: ori $2, $zero, 2553741; MIPS32EB-NEXT: sllv $5, $2, $13742; MIPS32EB-NEXT: nor $6, $zero, $53743; MIPS32EB-NEXT: sllv $4, $4, $13744; MIPS32EB-NEXT: $BB10_1: # %entry3745; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=13746; MIPS32EB-NEXT: ll $7, 0($3)3747; MIPS32EB-NEXT: and $8, $7, $43748; MIPS32EB-NEXT: nor $8, $zero, $83749; MIPS32EB-NEXT: and $8, $8, $53750; MIPS32EB-NEXT: and $9, $7, $63751; MIPS32EB-NEXT: or $9, $9, $83752; MIPS32EB-NEXT: sc $9, 0($3)3753; MIPS32EB-NEXT: beqz $9, $BB10_13754; MIPS32EB-NEXT: nop3755; MIPS32EB-NEXT: # %bb.2: # %entry3756; MIPS32EB-NEXT: and $2, $7, $53757; MIPS32EB-NEXT: srlv $2, $2, $13758; MIPS32EB-NEXT: sll $2, $2, 243759; MIPS32EB-NEXT: sra $2, $2, 243760; MIPS32EB-NEXT: # %bb.3: # %entry3761; MIPS32EB-NEXT: jr $ra3762; MIPS32EB-NEXT: nop3763entry:3764 %0 = atomicrmw nand ptr @y, i8 %incr monotonic3765 ret i8 %03766 3767}3768 3769define signext i8 @AtomicSwap8(i8 signext %newval) nounwind {3770; MIPS32-LABEL: AtomicSwap8:3771; MIPS32: # %bb.0: # %entry3772; MIPS32-NEXT: lui $2, %hi(_gp_disp)3773; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)3774; MIPS32-NEXT: addu $1, $2, $253775; MIPS32-NEXT: lw $1, %got(y)($1)3776; MIPS32-NEXT: addiu $2, $zero, -43777; MIPS32-NEXT: and $3, $1, $23778; MIPS32-NEXT: andi $1, $1, 33779; MIPS32-NEXT: sll $1, $1, 33780; MIPS32-NEXT: ori $2, $zero, 2553781; MIPS32-NEXT: sllv $5, $2, $13782; MIPS32-NEXT: nor $6, $zero, $53783; MIPS32-NEXT: sllv $4, $4, $13784; MIPS32-NEXT: $BB11_1: # %entry3785; MIPS32-NEXT: # =>This Inner Loop Header: Depth=13786; MIPS32-NEXT: ll $7, 0($3)3787; MIPS32-NEXT: and $8, $4, $53788; MIPS32-NEXT: and $9, $7, $63789; MIPS32-NEXT: or $9, $9, $83790; MIPS32-NEXT: sc $9, 0($3)3791; MIPS32-NEXT: beqz $9, $BB11_13792; MIPS32-NEXT: nop3793; MIPS32-NEXT: # %bb.2: # %entry3794; MIPS32-NEXT: and $2, $7, $53795; MIPS32-NEXT: srlv $2, $2, $13796; MIPS32-NEXT: sll $2, $2, 243797; MIPS32-NEXT: sra $2, $2, 243798; MIPS32-NEXT: # %bb.3: # %entry3799; MIPS32-NEXT: jr $ra3800; MIPS32-NEXT: nop3801;3802; MIPS32O0-LABEL: AtomicSwap8:3803; MIPS32O0: # %bb.0: # %entry3804; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)3805; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)3806; MIPS32O0-NEXT: addiu $sp, $sp, -83807; MIPS32O0-NEXT: addu $1, $2, $253808; MIPS32O0-NEXT: lw $1, %got(y)($1)3809; MIPS32O0-NEXT: addiu $2, $zero, -43810; MIPS32O0-NEXT: and $5, $1, $23811; MIPS32O0-NEXT: andi $1, $1, 33812; MIPS32O0-NEXT: sll $9, $1, 33813; MIPS32O0-NEXT: ori $1, $zero, 2553814; MIPS32O0-NEXT: sllv $7, $1, $93815; MIPS32O0-NEXT: nor $8, $zero, $73816; MIPS32O0-NEXT: sllv $6, $4, $93817; MIPS32O0-NEXT: $BB11_1: # %entry3818; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=13819; MIPS32O0-NEXT: ll $2, 0($5)3820; MIPS32O0-NEXT: and $3, $6, $73821; MIPS32O0-NEXT: and $4, $2, $83822; MIPS32O0-NEXT: or $4, $4, $33823; MIPS32O0-NEXT: sc $4, 0($5)3824; MIPS32O0-NEXT: beqz $4, $BB11_13825; MIPS32O0-NEXT: nop3826; MIPS32O0-NEXT: # %bb.2: # %entry3827; MIPS32O0-NEXT: and $1, $2, $73828; MIPS32O0-NEXT: srlv $1, $1, $93829; MIPS32O0-NEXT: sll $1, $1, 243830; MIPS32O0-NEXT: sra $1, $1, 243831; MIPS32O0-NEXT: # %bb.3: # %entry3832; MIPS32O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill3833; MIPS32O0-NEXT: # %bb.4: # %entry3834; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload3835; MIPS32O0-NEXT: sll $1, $1, 243836; MIPS32O0-NEXT: sra $2, $1, 243837; MIPS32O0-NEXT: addiu $sp, $sp, 83838; MIPS32O0-NEXT: jr $ra3839; MIPS32O0-NEXT: nop3840;3841; MIPS32R2-LABEL: AtomicSwap8:3842; MIPS32R2: # %bb.0: # %entry3843; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)3844; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)3845; MIPS32R2-NEXT: addu $1, $2, $253846; MIPS32R2-NEXT: lw $1, %got(y)($1)3847; MIPS32R2-NEXT: addiu $2, $zero, -43848; MIPS32R2-NEXT: and $3, $1, $23849; MIPS32R2-NEXT: andi $1, $1, 33850; MIPS32R2-NEXT: sll $1, $1, 33851; MIPS32R2-NEXT: ori $2, $zero, 2553852; MIPS32R2-NEXT: sllv $5, $2, $13853; MIPS32R2-NEXT: nor $6, $zero, $53854; MIPS32R2-NEXT: sllv $4, $4, $13855; MIPS32R2-NEXT: $BB11_1: # %entry3856; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=13857; MIPS32R2-NEXT: ll $7, 0($3)3858; MIPS32R2-NEXT: and $8, $4, $53859; MIPS32R2-NEXT: and $9, $7, $63860; MIPS32R2-NEXT: or $9, $9, $83861; MIPS32R2-NEXT: sc $9, 0($3)3862; MIPS32R2-NEXT: beqz $9, $BB11_13863; MIPS32R2-NEXT: nop3864; MIPS32R2-NEXT: # %bb.2: # %entry3865; MIPS32R2-NEXT: and $2, $7, $53866; MIPS32R2-NEXT: srlv $2, $2, $13867; MIPS32R2-NEXT: seb $2, $23868; MIPS32R2-NEXT: # %bb.3: # %entry3869; MIPS32R2-NEXT: jr $ra3870; MIPS32R2-NEXT: nop3871;3872; MIPS32R6-LABEL: AtomicSwap8:3873; MIPS32R6: # %bb.0: # %entry3874; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)3875; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)3876; MIPS32R6-NEXT: addu $1, $2, $253877; MIPS32R6-NEXT: lw $1, %got(y)($1)3878; MIPS32R6-NEXT: addiu $2, $zero, -43879; MIPS32R6-NEXT: and $3, $1, $23880; MIPS32R6-NEXT: andi $1, $1, 33881; MIPS32R6-NEXT: sll $1, $1, 33882; MIPS32R6-NEXT: ori $2, $zero, 2553883; MIPS32R6-NEXT: sllv $5, $2, $13884; MIPS32R6-NEXT: nor $6, $zero, $53885; MIPS32R6-NEXT: sllv $4, $4, $13886; MIPS32R6-NEXT: $BB11_1: # %entry3887; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=13888; MIPS32R6-NEXT: ll $7, 0($3)3889; MIPS32R6-NEXT: and $8, $4, $53890; MIPS32R6-NEXT: and $9, $7, $63891; MIPS32R6-NEXT: or $9, $9, $83892; MIPS32R6-NEXT: sc $9, 0($3)3893; MIPS32R6-NEXT: beqzc $9, $BB11_13894; MIPS32R6-NEXT: # %bb.2: # %entry3895; MIPS32R6-NEXT: and $2, $7, $53896; MIPS32R6-NEXT: srlv $2, $2, $13897; MIPS32R6-NEXT: seb $2, $23898; MIPS32R6-NEXT: # %bb.3: # %entry3899; MIPS32R6-NEXT: jrc $ra3900;3901; MIPS32R6O0-LABEL: AtomicSwap8:3902; MIPS32R6O0: # %bb.0: # %entry3903; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)3904; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)3905; MIPS32R6O0-NEXT: addiu $sp, $sp, -83906; MIPS32R6O0-NEXT: addu $1, $2, $253907; MIPS32R6O0-NEXT: # kill: def $v0 killed $a03908; MIPS32R6O0-NEXT: lw $1, %got(y)($1)3909; MIPS32R6O0-NEXT: addiu $2, $zero, -43910; MIPS32R6O0-NEXT: and $5, $1, $23911; MIPS32R6O0-NEXT: andi $1, $1, 33912; MIPS32R6O0-NEXT: sll $9, $1, 33913; MIPS32R6O0-NEXT: ori $1, $zero, 2553914; MIPS32R6O0-NEXT: sllv $7, $1, $93915; MIPS32R6O0-NEXT: nor $8, $zero, $73916; MIPS32R6O0-NEXT: sllv $6, $4, $93917; MIPS32R6O0-NEXT: $BB11_1: # %entry3918; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=13919; MIPS32R6O0-NEXT: ll $2, 0($5)3920; MIPS32R6O0-NEXT: and $3, $6, $73921; MIPS32R6O0-NEXT: and $4, $2, $83922; MIPS32R6O0-NEXT: or $4, $4, $33923; MIPS32R6O0-NEXT: sc $4, 0($5)3924; MIPS32R6O0-NEXT: beqzc $4, $BB11_13925; MIPS32R6O0-NEXT: # %bb.2: # %entry3926; MIPS32R6O0-NEXT: and $1, $2, $73927; MIPS32R6O0-NEXT: srlv $1, $1, $93928; MIPS32R6O0-NEXT: seb $1, $13929; MIPS32R6O0-NEXT: # %bb.3: # %entry3930; MIPS32R6O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill3931; MIPS32R6O0-NEXT: # %bb.4: # %entry3932; MIPS32R6O0-NEXT: lw $2, 4($sp) # 4-byte Folded Reload3933; MIPS32R6O0-NEXT: addiu $sp, $sp, 83934; MIPS32R6O0-NEXT: jrc $ra3935;3936; MIPS4-LABEL: AtomicSwap8:3937; MIPS4: # %bb.0: # %entry3938; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap8)))3939; MIPS4-NEXT: daddu $1, $1, $253940; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap8)))3941; MIPS4-NEXT: ld $1, %got_disp(y)($1)3942; MIPS4-NEXT: daddiu $2, $zero, -43943; MIPS4-NEXT: and $3, $1, $23944; MIPS4-NEXT: andi $1, $1, 33945; MIPS4-NEXT: sll $1, $1, 33946; MIPS4-NEXT: ori $2, $zero, 2553947; MIPS4-NEXT: sllv $5, $2, $13948; MIPS4-NEXT: nor $6, $zero, $53949; MIPS4-NEXT: sllv $4, $4, $13950; MIPS4-NEXT: .LBB11_1: # %entry3951; MIPS4-NEXT: # =>This Inner Loop Header: Depth=13952; MIPS4-NEXT: ll $7, 0($3)3953; MIPS4-NEXT: and $8, $4, $53954; MIPS4-NEXT: and $9, $7, $63955; MIPS4-NEXT: or $9, $9, $83956; MIPS4-NEXT: sc $9, 0($3)3957; MIPS4-NEXT: beqz $9, .LBB11_13958; MIPS4-NEXT: nop3959; MIPS4-NEXT: # %bb.2: # %entry3960; MIPS4-NEXT: and $2, $7, $53961; MIPS4-NEXT: srlv $2, $2, $13962; MIPS4-NEXT: sll $2, $2, 243963; MIPS4-NEXT: sra $2, $2, 243964; MIPS4-NEXT: # %bb.3: # %entry3965; MIPS4-NEXT: jr $ra3966; MIPS4-NEXT: nop3967;3968; MIPS64-LABEL: AtomicSwap8:3969; MIPS64: # %bb.0: # %entry3970; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap8)))3971; MIPS64-NEXT: daddu $1, $1, $253972; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap8)))3973; MIPS64-NEXT: ld $1, %got_disp(y)($1)3974; MIPS64-NEXT: daddiu $2, $zero, -43975; MIPS64-NEXT: and $3, $1, $23976; MIPS64-NEXT: andi $1, $1, 33977; MIPS64-NEXT: sll $1, $1, 33978; MIPS64-NEXT: ori $2, $zero, 2553979; MIPS64-NEXT: sllv $5, $2, $13980; MIPS64-NEXT: nor $6, $zero, $53981; MIPS64-NEXT: sllv $4, $4, $13982; MIPS64-NEXT: .LBB11_1: # %entry3983; MIPS64-NEXT: # =>This Inner Loop Header: Depth=13984; MIPS64-NEXT: ll $7, 0($3)3985; MIPS64-NEXT: and $8, $4, $53986; MIPS64-NEXT: and $9, $7, $63987; MIPS64-NEXT: or $9, $9, $83988; MIPS64-NEXT: sc $9, 0($3)3989; MIPS64-NEXT: beqz $9, .LBB11_13990; MIPS64-NEXT: nop3991; MIPS64-NEXT: # %bb.2: # %entry3992; MIPS64-NEXT: and $2, $7, $53993; MIPS64-NEXT: srlv $2, $2, $13994; MIPS64-NEXT: sll $2, $2, 243995; MIPS64-NEXT: sra $2, $2, 243996; MIPS64-NEXT: # %bb.3: # %entry3997; MIPS64-NEXT: jr $ra3998; MIPS64-NEXT: nop3999;4000; MIPS64R2-LABEL: AtomicSwap8:4001; MIPS64R2: # %bb.0: # %entry4002; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap8)))4003; MIPS64R2-NEXT: daddu $1, $1, $254004; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap8)))4005; MIPS64R2-NEXT: ld $1, %got_disp(y)($1)4006; MIPS64R2-NEXT: daddiu $2, $zero, -44007; MIPS64R2-NEXT: and $3, $1, $24008; MIPS64R2-NEXT: andi $1, $1, 34009; MIPS64R2-NEXT: sll $1, $1, 34010; MIPS64R2-NEXT: ori $2, $zero, 2554011; MIPS64R2-NEXT: sllv $5, $2, $14012; MIPS64R2-NEXT: nor $6, $zero, $54013; MIPS64R2-NEXT: sllv $4, $4, $14014; MIPS64R2-NEXT: .LBB11_1: # %entry4015; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=14016; MIPS64R2-NEXT: ll $7, 0($3)4017; MIPS64R2-NEXT: and $8, $4, $54018; MIPS64R2-NEXT: and $9, $7, $64019; MIPS64R2-NEXT: or $9, $9, $84020; MIPS64R2-NEXT: sc $9, 0($3)4021; MIPS64R2-NEXT: beqz $9, .LBB11_14022; MIPS64R2-NEXT: nop4023; MIPS64R2-NEXT: # %bb.2: # %entry4024; MIPS64R2-NEXT: and $2, $7, $54025; MIPS64R2-NEXT: srlv $2, $2, $14026; MIPS64R2-NEXT: seb $2, $24027; MIPS64R2-NEXT: # %bb.3: # %entry4028; MIPS64R2-NEXT: jr $ra4029; MIPS64R2-NEXT: nop4030;4031; MIPS64R6-LABEL: AtomicSwap8:4032; MIPS64R6: # %bb.0: # %entry4033; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap8)))4034; MIPS64R6-NEXT: daddu $1, $1, $254035; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap8)))4036; MIPS64R6-NEXT: ld $1, %got_disp(y)($1)4037; MIPS64R6-NEXT: daddiu $2, $zero, -44038; MIPS64R6-NEXT: and $3, $1, $24039; MIPS64R6-NEXT: andi $1, $1, 34040; MIPS64R6-NEXT: sll $1, $1, 34041; MIPS64R6-NEXT: ori $2, $zero, 2554042; MIPS64R6-NEXT: sllv $5, $2, $14043; MIPS64R6-NEXT: nor $6, $zero, $54044; MIPS64R6-NEXT: sllv $4, $4, $14045; MIPS64R6-NEXT: .LBB11_1: # %entry4046; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=14047; MIPS64R6-NEXT: ll $7, 0($3)4048; MIPS64R6-NEXT: and $8, $4, $54049; MIPS64R6-NEXT: and $9, $7, $64050; MIPS64R6-NEXT: or $9, $9, $84051; MIPS64R6-NEXT: sc $9, 0($3)4052; MIPS64R6-NEXT: beqzc $9, .LBB11_14053; MIPS64R6-NEXT: # %bb.2: # %entry4054; MIPS64R6-NEXT: and $2, $7, $54055; MIPS64R6-NEXT: srlv $2, $2, $14056; MIPS64R6-NEXT: seb $2, $24057; MIPS64R6-NEXT: # %bb.3: # %entry4058; MIPS64R6-NEXT: jrc $ra4059;4060; MIPS64R6O0-LABEL: AtomicSwap8:4061; MIPS64R6O0: # %bb.0: # %entry4062; MIPS64R6O0-NEXT: daddiu $sp, $sp, -164063; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap8)))4064; MIPS64R6O0-NEXT: daddu $1, $1, $254065; MIPS64R6O0-NEXT: daddiu $2, $1, %lo(%neg(%gp_rel(AtomicSwap8)))4066; MIPS64R6O0-NEXT: move $1, $44067; MIPS64R6O0-NEXT: ld $2, %got_disp(y)($2)4068; MIPS64R6O0-NEXT: daddiu $3, $zero, -44069; MIPS64R6O0-NEXT: and $5, $2, $34070; MIPS64R6O0-NEXT: andi $2, $2, 34071; MIPS64R6O0-NEXT: xori $2, $2, 34072; MIPS64R6O0-NEXT: sll $9, $2, 34073; MIPS64R6O0-NEXT: ori $2, $zero, 2554074; MIPS64R6O0-NEXT: sllv $7, $2, $94075; MIPS64R6O0-NEXT: nor $8, $zero, $74076; MIPS64R6O0-NEXT: sllv $6, $1, $94077; MIPS64R6O0-NEXT: .LBB11_1: # %entry4078; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=14079; MIPS64R6O0-NEXT: ll $2, 0($5)4080; MIPS64R6O0-NEXT: and $3, $6, $74081; MIPS64R6O0-NEXT: and $4, $2, $84082; MIPS64R6O0-NEXT: or $4, $4, $34083; MIPS64R6O0-NEXT: sc $4, 0($5)4084; MIPS64R6O0-NEXT: beqzc $4, .LBB11_14085; MIPS64R6O0-NEXT: # %bb.2: # %entry4086; MIPS64R6O0-NEXT: and $1, $2, $74087; MIPS64R6O0-NEXT: srlv $1, $1, $94088; MIPS64R6O0-NEXT: seb $1, $14089; MIPS64R6O0-NEXT: # %bb.3: # %entry4090; MIPS64R6O0-NEXT: sw $1, 12($sp) # 4-byte Folded Spill4091; MIPS64R6O0-NEXT: # %bb.4: # %entry4092; MIPS64R6O0-NEXT: lw $2, 12($sp) # 4-byte Folded Reload4093; MIPS64R6O0-NEXT: daddiu $sp, $sp, 164094; MIPS64R6O0-NEXT: jrc $ra4095;4096; MM32-LABEL: AtomicSwap8:4097; MM32: # %bb.0: # %entry4098; MM32-NEXT: lui $2, %hi(_gp_disp)4099; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)4100; MM32-NEXT: addu $2, $2, $254101; MM32-NEXT: lw $1, %got(y)($2)4102; MM32-NEXT: addiu $2, $zero, -44103; MM32-NEXT: and $3, $1, $24104; MM32-NEXT: andi $1, $1, 34105; MM32-NEXT: sll $1, $1, 34106; MM32-NEXT: ori $2, $zero, 2554107; MM32-NEXT: sllv $5, $2, $14108; MM32-NEXT: nor $6, $zero, $54109; MM32-NEXT: sllv $4, $4, $14110; MM32-NEXT: $BB11_1: # %entry4111; MM32-NEXT: # =>This Inner Loop Header: Depth=14112; MM32-NEXT: ll $7, 0($3)4113; MM32-NEXT: and $8, $4, $54114; MM32-NEXT: and $9, $7, $64115; MM32-NEXT: or $9, $9, $84116; MM32-NEXT: sc $9, 0($3)4117; MM32-NEXT: beqzc $9, $BB11_14118; MM32-NEXT: # %bb.2: # %entry4119; MM32-NEXT: and $2, $7, $54120; MM32-NEXT: srlv $2, $2, $14121; MM32-NEXT: seb $2, $24122; MM32-NEXT: # %bb.3: # %entry4123; MM32-NEXT: jrc $ra4124;4125; O1-LABEL: AtomicSwap8:4126; O1: # %bb.0: # %entry4127; O1-NEXT: lui $2, %hi(_gp_disp)4128; O1-NEXT: addiu $2, $2, %lo(_gp_disp)4129; O1-NEXT: addu $1, $2, $254130; O1-NEXT: lw $1, %got(y)($1)4131; O1-NEXT: addiu $2, $zero, -44132; O1-NEXT: and $3, $1, $24133; O1-NEXT: andi $1, $1, 34134; O1-NEXT: sll $1, $1, 34135; O1-NEXT: ori $2, $zero, 2554136; O1-NEXT: sllv $5, $2, $14137; O1-NEXT: nor $6, $zero, $54138; O1-NEXT: sllv $4, $4, $14139; O1-NEXT: $BB11_1: # %entry4140; O1-NEXT: # =>This Inner Loop Header: Depth=14141; O1-NEXT: ll $7, 0($3)4142; O1-NEXT: and $8, $4, $54143; O1-NEXT: and $9, $7, $64144; O1-NEXT: or $9, $9, $84145; O1-NEXT: sc $9, 0($3)4146; O1-NEXT: beqz $9, $BB11_14147; O1-NEXT: nop4148; O1-NEXT: # %bb.2: # %entry4149; O1-NEXT: and $2, $7, $54150; O1-NEXT: srlv $2, $2, $14151; O1-NEXT: sll $2, $2, 244152; O1-NEXT: sra $2, $2, 244153; O1-NEXT: # %bb.3: # %entry4154; O1-NEXT: jr $ra4155; O1-NEXT: nop4156;4157; O2-LABEL: AtomicSwap8:4158; O2: # %bb.0: # %entry4159; O2-NEXT: lui $2, %hi(_gp_disp)4160; O2-NEXT: addiu $2, $2, %lo(_gp_disp)4161; O2-NEXT: addu $1, $2, $254162; O2-NEXT: lw $1, %got(y)($1)4163; O2-NEXT: addiu $2, $zero, -44164; O2-NEXT: and $3, $1, $24165; O2-NEXT: andi $1, $1, 34166; O2-NEXT: sll $1, $1, 34167; O2-NEXT: ori $2, $zero, 2554168; O2-NEXT: sllv $5, $2, $14169; O2-NEXT: nor $6, $zero, $54170; O2-NEXT: sllv $4, $4, $14171; O2-NEXT: $BB11_1: # %entry4172; O2-NEXT: # =>This Inner Loop Header: Depth=14173; O2-NEXT: ll $7, 0($3)4174; O2-NEXT: and $8, $4, $54175; O2-NEXT: and $9, $7, $64176; O2-NEXT: or $9, $9, $84177; O2-NEXT: sc $9, 0($3)4178; O2-NEXT: beqz $9, $BB11_14179; O2-NEXT: nop4180; O2-NEXT: # %bb.2: # %entry4181; O2-NEXT: and $2, $7, $54182; O2-NEXT: srlv $2, $2, $14183; O2-NEXT: sll $2, $2, 244184; O2-NEXT: sra $2, $2, 244185; O2-NEXT: # %bb.3: # %entry4186; O2-NEXT: jr $ra4187; O2-NEXT: nop4188;4189; O3-LABEL: AtomicSwap8:4190; O3: # %bb.0: # %entry4191; O3-NEXT: lui $2, %hi(_gp_disp)4192; O3-NEXT: addiu $2, $2, %lo(_gp_disp)4193; O3-NEXT: addu $1, $2, $254194; O3-NEXT: addiu $2, $zero, -44195; O3-NEXT: lw $1, %got(y)($1)4196; O3-NEXT: and $3, $1, $24197; O3-NEXT: andi $1, $1, 34198; O3-NEXT: ori $2, $zero, 2554199; O3-NEXT: sll $1, $1, 34200; O3-NEXT: sllv $5, $2, $14201; O3-NEXT: sllv $4, $4, $14202; O3-NEXT: nor $6, $zero, $54203; O3-NEXT: $BB11_1: # %entry4204; O3-NEXT: # =>This Inner Loop Header: Depth=14205; O3-NEXT: ll $7, 0($3)4206; O3-NEXT: and $8, $4, $54207; O3-NEXT: and $9, $7, $64208; O3-NEXT: or $9, $9, $84209; O3-NEXT: sc $9, 0($3)4210; O3-NEXT: beqz $9, $BB11_14211; O3-NEXT: nop4212; O3-NEXT: # %bb.2: # %entry4213; O3-NEXT: and $2, $7, $54214; O3-NEXT: srlv $2, $2, $14215; O3-NEXT: sll $2, $2, 244216; O3-NEXT: sra $2, $2, 244217; O3-NEXT: # %bb.3: # %entry4218; O3-NEXT: jr $ra4219; O3-NEXT: nop4220;4221; MIPS32EB-LABEL: AtomicSwap8:4222; MIPS32EB: # %bb.0: # %entry4223; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)4224; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)4225; MIPS32EB-NEXT: addu $1, $2, $254226; MIPS32EB-NEXT: lw $1, %got(y)($1)4227; MIPS32EB-NEXT: addiu $2, $zero, -44228; MIPS32EB-NEXT: and $3, $1, $24229; MIPS32EB-NEXT: andi $1, $1, 34230; MIPS32EB-NEXT: xori $1, $1, 34231; MIPS32EB-NEXT: sll $1, $1, 34232; MIPS32EB-NEXT: ori $2, $zero, 2554233; MIPS32EB-NEXT: sllv $5, $2, $14234; MIPS32EB-NEXT: nor $6, $zero, $54235; MIPS32EB-NEXT: sllv $4, $4, $14236; MIPS32EB-NEXT: $BB11_1: # %entry4237; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=14238; MIPS32EB-NEXT: ll $7, 0($3)4239; MIPS32EB-NEXT: and $8, $4, $54240; MIPS32EB-NEXT: and $9, $7, $64241; MIPS32EB-NEXT: or $9, $9, $84242; MIPS32EB-NEXT: sc $9, 0($3)4243; MIPS32EB-NEXT: beqz $9, $BB11_14244; MIPS32EB-NEXT: nop4245; MIPS32EB-NEXT: # %bb.2: # %entry4246; MIPS32EB-NEXT: and $2, $7, $54247; MIPS32EB-NEXT: srlv $2, $2, $14248; MIPS32EB-NEXT: sll $2, $2, 244249; MIPS32EB-NEXT: sra $2, $2, 244250; MIPS32EB-NEXT: # %bb.3: # %entry4251; MIPS32EB-NEXT: jr $ra4252; MIPS32EB-NEXT: nop4253entry:4254 %0 = atomicrmw xchg ptr @y, i8 %newval monotonic4255 ret i8 %04256}4257 4258define signext i8 @AtomicCmpSwap8(i8 signext %oldval, i8 signext %newval) nounwind {4259; MIPS32-LABEL: AtomicCmpSwap8:4260; MIPS32: # %bb.0: # %entry4261; MIPS32-NEXT: lui $2, %hi(_gp_disp)4262; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)4263; MIPS32-NEXT: addu $1, $2, $254264; MIPS32-NEXT: lw $1, %got(y)($1)4265; MIPS32-NEXT: addiu $2, $zero, -44266; MIPS32-NEXT: and $3, $1, $24267; MIPS32-NEXT: andi $1, $1, 34268; MIPS32-NEXT: sll $1, $1, 34269; MIPS32-NEXT: ori $2, $zero, 2554270; MIPS32-NEXT: sllv $6, $2, $14271; MIPS32-NEXT: nor $7, $zero, $64272; MIPS32-NEXT: andi $2, $4, 2554273; MIPS32-NEXT: sllv $4, $2, $14274; MIPS32-NEXT: andi $2, $5, 2554275; MIPS32-NEXT: sllv $5, $2, $14276; MIPS32-NEXT: $BB12_1: # %entry4277; MIPS32-NEXT: # =>This Inner Loop Header: Depth=14278; MIPS32-NEXT: ll $8, 0($3)4279; MIPS32-NEXT: and $9, $8, $64280; MIPS32-NEXT: bne $9, $4, $BB12_34281; MIPS32-NEXT: nop4282; MIPS32-NEXT: # %bb.2: # %entry4283; MIPS32-NEXT: # in Loop: Header=BB12_1 Depth=14284; MIPS32-NEXT: and $8, $8, $74285; MIPS32-NEXT: or $8, $8, $54286; MIPS32-NEXT: sc $8, 0($3)4287; MIPS32-NEXT: beqz $8, $BB12_14288; MIPS32-NEXT: nop4289; MIPS32-NEXT: $BB12_3: # %entry4290; MIPS32-NEXT: srlv $2, $9, $14291; MIPS32-NEXT: sll $2, $2, 244292; MIPS32-NEXT: sra $2, $2, 244293; MIPS32-NEXT: # %bb.4: # %entry4294; MIPS32-NEXT: jr $ra4295; MIPS32-NEXT: nop4296;4297; MIPS32O0-LABEL: AtomicCmpSwap8:4298; MIPS32O0: # %bb.0: # %entry4299; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)4300; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)4301; MIPS32O0-NEXT: addiu $sp, $sp, -84302; MIPS32O0-NEXT: addu $3, $2, $254303; MIPS32O0-NEXT: move $1, $54304; MIPS32O0-NEXT: move $2, $44305; MIPS32O0-NEXT: lw $3, %got(y)($3)4306; MIPS32O0-NEXT: addiu $4, $zero, -44307; MIPS32O0-NEXT: and $4, $3, $44308; MIPS32O0-NEXT: andi $3, $3, 34309; MIPS32O0-NEXT: sll $9, $3, 34310; MIPS32O0-NEXT: ori $3, $zero, 2554311; MIPS32O0-NEXT: sllv $5, $3, $94312; MIPS32O0-NEXT: nor $7, $zero, $54313; MIPS32O0-NEXT: andi $2, $2, 2554314; MIPS32O0-NEXT: sllv $6, $2, $94315; MIPS32O0-NEXT: andi $1, $1, 2554316; MIPS32O0-NEXT: sllv $8, $1, $94317; MIPS32O0-NEXT: $BB12_1: # %entry4318; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=14319; MIPS32O0-NEXT: ll $2, 0($4)4320; MIPS32O0-NEXT: and $3, $2, $54321; MIPS32O0-NEXT: bne $3, $6, $BB12_34322; MIPS32O0-NEXT: nop4323; MIPS32O0-NEXT: # %bb.2: # %entry4324; MIPS32O0-NEXT: # in Loop: Header=BB12_1 Depth=14325; MIPS32O0-NEXT: and $2, $2, $74326; MIPS32O0-NEXT: or $2, $2, $84327; MIPS32O0-NEXT: sc $2, 0($4)4328; MIPS32O0-NEXT: beqz $2, $BB12_14329; MIPS32O0-NEXT: nop4330; MIPS32O0-NEXT: $BB12_3: # %entry4331; MIPS32O0-NEXT: srlv $1, $3, $94332; MIPS32O0-NEXT: sll $1, $1, 244333; MIPS32O0-NEXT: sra $1, $1, 244334; MIPS32O0-NEXT: # %bb.4: # %entry4335; MIPS32O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill4336; MIPS32O0-NEXT: # %bb.5: # %entry4337; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload4338; MIPS32O0-NEXT: sll $1, $1, 244339; MIPS32O0-NEXT: sra $2, $1, 244340; MIPS32O0-NEXT: addiu $sp, $sp, 84341; MIPS32O0-NEXT: jr $ra4342; MIPS32O0-NEXT: nop4343;4344; MIPS32R2-LABEL: AtomicCmpSwap8:4345; MIPS32R2: # %bb.0: # %entry4346; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)4347; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)4348; MIPS32R2-NEXT: addu $1, $2, $254349; MIPS32R2-NEXT: lw $1, %got(y)($1)4350; MIPS32R2-NEXT: addiu $2, $zero, -44351; MIPS32R2-NEXT: and $3, $1, $24352; MIPS32R2-NEXT: andi $1, $1, 34353; MIPS32R2-NEXT: sll $1, $1, 34354; MIPS32R2-NEXT: ori $2, $zero, 2554355; MIPS32R2-NEXT: sllv $6, $2, $14356; MIPS32R2-NEXT: nor $7, $zero, $64357; MIPS32R2-NEXT: andi $2, $4, 2554358; MIPS32R2-NEXT: sllv $4, $2, $14359; MIPS32R2-NEXT: andi $2, $5, 2554360; MIPS32R2-NEXT: sllv $5, $2, $14361; MIPS32R2-NEXT: $BB12_1: # %entry4362; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=14363; MIPS32R2-NEXT: ll $8, 0($3)4364; MIPS32R2-NEXT: and $9, $8, $64365; MIPS32R2-NEXT: bne $9, $4, $BB12_34366; MIPS32R2-NEXT: nop4367; MIPS32R2-NEXT: # %bb.2: # %entry4368; MIPS32R2-NEXT: # in Loop: Header=BB12_1 Depth=14369; MIPS32R2-NEXT: and $8, $8, $74370; MIPS32R2-NEXT: or $8, $8, $54371; MIPS32R2-NEXT: sc $8, 0($3)4372; MIPS32R2-NEXT: beqz $8, $BB12_14373; MIPS32R2-NEXT: nop4374; MIPS32R2-NEXT: $BB12_3: # %entry4375; MIPS32R2-NEXT: srlv $2, $9, $14376; MIPS32R2-NEXT: seb $2, $24377; MIPS32R2-NEXT: # %bb.4: # %entry4378; MIPS32R2-NEXT: jr $ra4379; MIPS32R2-NEXT: nop4380;4381; MIPS32R6-LABEL: AtomicCmpSwap8:4382; MIPS32R6: # %bb.0: # %entry4383; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)4384; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)4385; MIPS32R6-NEXT: addu $1, $2, $254386; MIPS32R6-NEXT: lw $1, %got(y)($1)4387; MIPS32R6-NEXT: addiu $2, $zero, -44388; MIPS32R6-NEXT: and $3, $1, $24389; MIPS32R6-NEXT: andi $1, $1, 34390; MIPS32R6-NEXT: sll $1, $1, 34391; MIPS32R6-NEXT: ori $2, $zero, 2554392; MIPS32R6-NEXT: sllv $6, $2, $14393; MIPS32R6-NEXT: nor $7, $zero, $64394; MIPS32R6-NEXT: andi $2, $4, 2554395; MIPS32R6-NEXT: sllv $4, $2, $14396; MIPS32R6-NEXT: andi $2, $5, 2554397; MIPS32R6-NEXT: sllv $5, $2, $14398; MIPS32R6-NEXT: $BB12_1: # %entry4399; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=14400; MIPS32R6-NEXT: ll $8, 0($3)4401; MIPS32R6-NEXT: and $9, $8, $64402; MIPS32R6-NEXT: bnec $9, $4, $BB12_34403; MIPS32R6-NEXT: # %bb.2: # %entry4404; MIPS32R6-NEXT: # in Loop: Header=BB12_1 Depth=14405; MIPS32R6-NEXT: and $8, $8, $74406; MIPS32R6-NEXT: or $8, $8, $54407; MIPS32R6-NEXT: sc $8, 0($3)4408; MIPS32R6-NEXT: beqzc $8, $BB12_14409; MIPS32R6-NEXT: $BB12_3: # %entry4410; MIPS32R6-NEXT: srlv $2, $9, $14411; MIPS32R6-NEXT: seb $2, $24412; MIPS32R6-NEXT: # %bb.4: # %entry4413; MIPS32R6-NEXT: jrc $ra4414;4415; MIPS32R6O0-LABEL: AtomicCmpSwap8:4416; MIPS32R6O0: # %bb.0: # %entry4417; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)4418; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)4419; MIPS32R6O0-NEXT: addiu $sp, $sp, -84420; MIPS32R6O0-NEXT: addu $3, $2, $254421; MIPS32R6O0-NEXT: move $1, $54422; MIPS32R6O0-NEXT: move $2, $44423; MIPS32R6O0-NEXT: # kill: def $a1 killed $at4424; MIPS32R6O0-NEXT: # kill: def $a0 killed $v04425; MIPS32R6O0-NEXT: lw $3, %got(y)($3)4426; MIPS32R6O0-NEXT: addiu $4, $zero, -44427; MIPS32R6O0-NEXT: and $4, $3, $44428; MIPS32R6O0-NEXT: andi $3, $3, 34429; MIPS32R6O0-NEXT: sll $9, $3, 34430; MIPS32R6O0-NEXT: ori $3, $zero, 2554431; MIPS32R6O0-NEXT: sllv $5, $3, $94432; MIPS32R6O0-NEXT: nor $7, $zero, $54433; MIPS32R6O0-NEXT: andi $2, $2, 2554434; MIPS32R6O0-NEXT: sllv $6, $2, $94435; MIPS32R6O0-NEXT: andi $1, $1, 2554436; MIPS32R6O0-NEXT: sllv $8, $1, $94437; MIPS32R6O0-NEXT: $BB12_1: # %entry4438; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=14439; MIPS32R6O0-NEXT: ll $2, 0($4)4440; MIPS32R6O0-NEXT: and $3, $2, $54441; MIPS32R6O0-NEXT: bnec $3, $6, $BB12_34442; MIPS32R6O0-NEXT: # %bb.2: # %entry4443; MIPS32R6O0-NEXT: # in Loop: Header=BB12_1 Depth=14444; MIPS32R6O0-NEXT: and $2, $2, $74445; MIPS32R6O0-NEXT: or $2, $2, $84446; MIPS32R6O0-NEXT: sc $2, 0($4)4447; MIPS32R6O0-NEXT: beqzc $2, $BB12_14448; MIPS32R6O0-NEXT: $BB12_3: # %entry4449; MIPS32R6O0-NEXT: srlv $1, $3, $94450; MIPS32R6O0-NEXT: seb $1, $14451; MIPS32R6O0-NEXT: # %bb.4: # %entry4452; MIPS32R6O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill4453; MIPS32R6O0-NEXT: # %bb.5: # %entry4454; MIPS32R6O0-NEXT: lw $2, 4($sp) # 4-byte Folded Reload4455; MIPS32R6O0-NEXT: addiu $sp, $sp, 84456; MIPS32R6O0-NEXT: jrc $ra4457;4458; MIPS4-LABEL: AtomicCmpSwap8:4459; MIPS4: # %bb.0: # %entry4460; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap8)))4461; MIPS4-NEXT: daddu $1, $1, $254462; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap8)))4463; MIPS4-NEXT: ld $1, %got_disp(y)($1)4464; MIPS4-NEXT: daddiu $2, $zero, -44465; MIPS4-NEXT: and $3, $1, $24466; MIPS4-NEXT: andi $1, $1, 34467; MIPS4-NEXT: sll $1, $1, 34468; MIPS4-NEXT: ori $2, $zero, 2554469; MIPS4-NEXT: sllv $6, $2, $14470; MIPS4-NEXT: nor $7, $zero, $64471; MIPS4-NEXT: andi $2, $4, 2554472; MIPS4-NEXT: sllv $4, $2, $14473; MIPS4-NEXT: andi $2, $5, 2554474; MIPS4-NEXT: sllv $5, $2, $14475; MIPS4-NEXT: .LBB12_1: # %entry4476; MIPS4-NEXT: # =>This Inner Loop Header: Depth=14477; MIPS4-NEXT: ll $8, 0($3)4478; MIPS4-NEXT: and $9, $8, $64479; MIPS4-NEXT: bne $9, $4, .LBB12_34480; MIPS4-NEXT: nop4481; MIPS4-NEXT: # %bb.2: # %entry4482; MIPS4-NEXT: # in Loop: Header=BB12_1 Depth=14483; MIPS4-NEXT: and $8, $8, $74484; MIPS4-NEXT: or $8, $8, $54485; MIPS4-NEXT: sc $8, 0($3)4486; MIPS4-NEXT: beqz $8, .LBB12_14487; MIPS4-NEXT: nop4488; MIPS4-NEXT: .LBB12_3: # %entry4489; MIPS4-NEXT: srlv $2, $9, $14490; MIPS4-NEXT: sll $2, $2, 244491; MIPS4-NEXT: sra $2, $2, 244492; MIPS4-NEXT: # %bb.4: # %entry4493; MIPS4-NEXT: jr $ra4494; MIPS4-NEXT: nop4495;4496; MIPS64-LABEL: AtomicCmpSwap8:4497; MIPS64: # %bb.0: # %entry4498; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap8)))4499; MIPS64-NEXT: daddu $1, $1, $254500; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap8)))4501; MIPS64-NEXT: ld $1, %got_disp(y)($1)4502; MIPS64-NEXT: daddiu $2, $zero, -44503; MIPS64-NEXT: and $3, $1, $24504; MIPS64-NEXT: andi $1, $1, 34505; MIPS64-NEXT: sll $1, $1, 34506; MIPS64-NEXT: ori $2, $zero, 2554507; MIPS64-NEXT: sllv $6, $2, $14508; MIPS64-NEXT: nor $7, $zero, $64509; MIPS64-NEXT: andi $2, $4, 2554510; MIPS64-NEXT: sllv $4, $2, $14511; MIPS64-NEXT: andi $2, $5, 2554512; MIPS64-NEXT: sllv $5, $2, $14513; MIPS64-NEXT: .LBB12_1: # %entry4514; MIPS64-NEXT: # =>This Inner Loop Header: Depth=14515; MIPS64-NEXT: ll $8, 0($3)4516; MIPS64-NEXT: and $9, $8, $64517; MIPS64-NEXT: bne $9, $4, .LBB12_34518; MIPS64-NEXT: nop4519; MIPS64-NEXT: # %bb.2: # %entry4520; MIPS64-NEXT: # in Loop: Header=BB12_1 Depth=14521; MIPS64-NEXT: and $8, $8, $74522; MIPS64-NEXT: or $8, $8, $54523; MIPS64-NEXT: sc $8, 0($3)4524; MIPS64-NEXT: beqz $8, .LBB12_14525; MIPS64-NEXT: nop4526; MIPS64-NEXT: .LBB12_3: # %entry4527; MIPS64-NEXT: srlv $2, $9, $14528; MIPS64-NEXT: sll $2, $2, 244529; MIPS64-NEXT: sra $2, $2, 244530; MIPS64-NEXT: # %bb.4: # %entry4531; MIPS64-NEXT: jr $ra4532; MIPS64-NEXT: nop4533;4534; MIPS64R2-LABEL: AtomicCmpSwap8:4535; MIPS64R2: # %bb.0: # %entry4536; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap8)))4537; MIPS64R2-NEXT: daddu $1, $1, $254538; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap8)))4539; MIPS64R2-NEXT: ld $1, %got_disp(y)($1)4540; MIPS64R2-NEXT: daddiu $2, $zero, -44541; MIPS64R2-NEXT: and $3, $1, $24542; MIPS64R2-NEXT: andi $1, $1, 34543; MIPS64R2-NEXT: sll $1, $1, 34544; MIPS64R2-NEXT: ori $2, $zero, 2554545; MIPS64R2-NEXT: sllv $6, $2, $14546; MIPS64R2-NEXT: nor $7, $zero, $64547; MIPS64R2-NEXT: andi $2, $4, 2554548; MIPS64R2-NEXT: sllv $4, $2, $14549; MIPS64R2-NEXT: andi $2, $5, 2554550; MIPS64R2-NEXT: sllv $5, $2, $14551; MIPS64R2-NEXT: .LBB12_1: # %entry4552; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=14553; MIPS64R2-NEXT: ll $8, 0($3)4554; MIPS64R2-NEXT: and $9, $8, $64555; MIPS64R2-NEXT: bne $9, $4, .LBB12_34556; MIPS64R2-NEXT: nop4557; MIPS64R2-NEXT: # %bb.2: # %entry4558; MIPS64R2-NEXT: # in Loop: Header=BB12_1 Depth=14559; MIPS64R2-NEXT: and $8, $8, $74560; MIPS64R2-NEXT: or $8, $8, $54561; MIPS64R2-NEXT: sc $8, 0($3)4562; MIPS64R2-NEXT: beqz $8, .LBB12_14563; MIPS64R2-NEXT: nop4564; MIPS64R2-NEXT: .LBB12_3: # %entry4565; MIPS64R2-NEXT: srlv $2, $9, $14566; MIPS64R2-NEXT: seb $2, $24567; MIPS64R2-NEXT: # %bb.4: # %entry4568; MIPS64R2-NEXT: jr $ra4569; MIPS64R2-NEXT: nop4570;4571; MIPS64R6-LABEL: AtomicCmpSwap8:4572; MIPS64R6: # %bb.0: # %entry4573; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap8)))4574; MIPS64R6-NEXT: daddu $1, $1, $254575; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap8)))4576; MIPS64R6-NEXT: ld $1, %got_disp(y)($1)4577; MIPS64R6-NEXT: daddiu $2, $zero, -44578; MIPS64R6-NEXT: and $3, $1, $24579; MIPS64R6-NEXT: andi $1, $1, 34580; MIPS64R6-NEXT: sll $1, $1, 34581; MIPS64R6-NEXT: ori $2, $zero, 2554582; MIPS64R6-NEXT: sllv $6, $2, $14583; MIPS64R6-NEXT: nor $7, $zero, $64584; MIPS64R6-NEXT: andi $2, $4, 2554585; MIPS64R6-NEXT: sllv $4, $2, $14586; MIPS64R6-NEXT: andi $2, $5, 2554587; MIPS64R6-NEXT: sllv $5, $2, $14588; MIPS64R6-NEXT: .LBB12_1: # %entry4589; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=14590; MIPS64R6-NEXT: ll $8, 0($3)4591; MIPS64R6-NEXT: and $9, $8, $64592; MIPS64R6-NEXT: bnec $9, $4, .LBB12_34593; MIPS64R6-NEXT: # %bb.2: # %entry4594; MIPS64R6-NEXT: # in Loop: Header=BB12_1 Depth=14595; MIPS64R6-NEXT: and $8, $8, $74596; MIPS64R6-NEXT: or $8, $8, $54597; MIPS64R6-NEXT: sc $8, 0($3)4598; MIPS64R6-NEXT: beqzc $8, .LBB12_14599; MIPS64R6-NEXT: .LBB12_3: # %entry4600; MIPS64R6-NEXT: srlv $2, $9, $14601; MIPS64R6-NEXT: seb $2, $24602; MIPS64R6-NEXT: # %bb.4: # %entry4603; MIPS64R6-NEXT: jrc $ra4604;4605; MIPS64R6O0-LABEL: AtomicCmpSwap8:4606; MIPS64R6O0: # %bb.0: # %entry4607; MIPS64R6O0-NEXT: daddiu $sp, $sp, -164608; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap8)))4609; MIPS64R6O0-NEXT: daddu $1, $1, $254610; MIPS64R6O0-NEXT: daddiu $3, $1, %lo(%neg(%gp_rel(AtomicCmpSwap8)))4611; MIPS64R6O0-NEXT: move $1, $54612; MIPS64R6O0-NEXT: move $2, $44613; MIPS64R6O0-NEXT: ld $3, %got_disp(y)($3)4614; MIPS64R6O0-NEXT: daddiu $4, $zero, -44615; MIPS64R6O0-NEXT: and $4, $3, $44616; MIPS64R6O0-NEXT: andi $3, $3, 34617; MIPS64R6O0-NEXT: xori $3, $3, 34618; MIPS64R6O0-NEXT: sll $9, $3, 34619; MIPS64R6O0-NEXT: ori $3, $zero, 2554620; MIPS64R6O0-NEXT: sllv $5, $3, $94621; MIPS64R6O0-NEXT: nor $7, $zero, $54622; MIPS64R6O0-NEXT: andi $2, $2, 2554623; MIPS64R6O0-NEXT: sllv $6, $2, $94624; MIPS64R6O0-NEXT: andi $1, $1, 2554625; MIPS64R6O0-NEXT: sllv $8, $1, $94626; MIPS64R6O0-NEXT: .LBB12_1: # %entry4627; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=14628; MIPS64R6O0-NEXT: ll $2, 0($4)4629; MIPS64R6O0-NEXT: and $3, $2, $54630; MIPS64R6O0-NEXT: bnec $3, $6, .LBB12_34631; MIPS64R6O0-NEXT: # %bb.2: # %entry4632; MIPS64R6O0-NEXT: # in Loop: Header=BB12_1 Depth=14633; MIPS64R6O0-NEXT: and $2, $2, $74634; MIPS64R6O0-NEXT: or $2, $2, $84635; MIPS64R6O0-NEXT: sc $2, 0($4)4636; MIPS64R6O0-NEXT: beqzc $2, .LBB12_14637; MIPS64R6O0-NEXT: .LBB12_3: # %entry4638; MIPS64R6O0-NEXT: srlv $1, $3, $94639; MIPS64R6O0-NEXT: seb $1, $14640; MIPS64R6O0-NEXT: # %bb.4: # %entry4641; MIPS64R6O0-NEXT: sw $1, 12($sp) # 4-byte Folded Spill4642; MIPS64R6O0-NEXT: # %bb.5: # %entry4643; MIPS64R6O0-NEXT: lw $2, 12($sp) # 4-byte Folded Reload4644; MIPS64R6O0-NEXT: daddiu $sp, $sp, 164645; MIPS64R6O0-NEXT: jrc $ra4646;4647; MM32-LABEL: AtomicCmpSwap8:4648; MM32: # %bb.0: # %entry4649; MM32-NEXT: lui $2, %hi(_gp_disp)4650; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)4651; MM32-NEXT: addu $2, $2, $254652; MM32-NEXT: lw $1, %got(y)($2)4653; MM32-NEXT: addiu $2, $zero, -44654; MM32-NEXT: and $3, $1, $24655; MM32-NEXT: andi $1, $1, 34656; MM32-NEXT: sll $1, $1, 34657; MM32-NEXT: ori $2, $zero, 2554658; MM32-NEXT: sllv $6, $2, $14659; MM32-NEXT: nor $7, $zero, $64660; MM32-NEXT: andi $2, $4, 2554661; MM32-NEXT: sllv $4, $2, $14662; MM32-NEXT: andi $2, $5, 2554663; MM32-NEXT: sllv $5, $2, $14664; MM32-NEXT: $BB12_1: # %entry4665; MM32-NEXT: # =>This Inner Loop Header: Depth=14666; MM32-NEXT: ll $8, 0($3)4667; MM32-NEXT: and $9, $8, $64668; MM32-NEXT: bne $9, $4, $BB12_34669; MM32-NEXT: nop4670; MM32-NEXT: # %bb.2: # %entry4671; MM32-NEXT: # in Loop: Header=BB12_1 Depth=14672; MM32-NEXT: and $8, $8, $74673; MM32-NEXT: or $8, $8, $54674; MM32-NEXT: sc $8, 0($3)4675; MM32-NEXT: beqzc $8, $BB12_14676; MM32-NEXT: $BB12_3: # %entry4677; MM32-NEXT: srlv $2, $9, $14678; MM32-NEXT: seb $2, $24679; MM32-NEXT: # %bb.4: # %entry4680; MM32-NEXT: jrc $ra4681;4682; O1-LABEL: AtomicCmpSwap8:4683; O1: # %bb.0: # %entry4684; O1-NEXT: lui $2, %hi(_gp_disp)4685; O1-NEXT: addiu $2, $2, %lo(_gp_disp)4686; O1-NEXT: addu $1, $2, $254687; O1-NEXT: lw $1, %got(y)($1)4688; O1-NEXT: addiu $2, $zero, -44689; O1-NEXT: and $3, $1, $24690; O1-NEXT: andi $1, $1, 34691; O1-NEXT: sll $1, $1, 34692; O1-NEXT: ori $2, $zero, 2554693; O1-NEXT: sllv $6, $2, $14694; O1-NEXT: nor $7, $zero, $64695; O1-NEXT: andi $2, $4, 2554696; O1-NEXT: sllv $4, $2, $14697; O1-NEXT: andi $2, $5, 2554698; O1-NEXT: sllv $5, $2, $14699; O1-NEXT: $BB12_1: # %entry4700; O1-NEXT: # =>This Inner Loop Header: Depth=14701; O1-NEXT: ll $8, 0($3)4702; O1-NEXT: and $9, $8, $64703; O1-NEXT: bne $9, $4, $BB12_34704; O1-NEXT: nop4705; O1-NEXT: # %bb.2: # %entry4706; O1-NEXT: # in Loop: Header=BB12_1 Depth=14707; O1-NEXT: and $8, $8, $74708; O1-NEXT: or $8, $8, $54709; O1-NEXT: sc $8, 0($3)4710; O1-NEXT: beqz $8, $BB12_14711; O1-NEXT: nop4712; O1-NEXT: $BB12_3: # %entry4713; O1-NEXT: srlv $2, $9, $14714; O1-NEXT: sll $2, $2, 244715; O1-NEXT: sra $2, $2, 244716; O1-NEXT: # %bb.4: # %entry4717; O1-NEXT: jr $ra4718; O1-NEXT: nop4719;4720; O2-LABEL: AtomicCmpSwap8:4721; O2: # %bb.0: # %entry4722; O2-NEXT: lui $2, %hi(_gp_disp)4723; O2-NEXT: addiu $2, $2, %lo(_gp_disp)4724; O2-NEXT: addu $1, $2, $254725; O2-NEXT: lw $1, %got(y)($1)4726; O2-NEXT: addiu $2, $zero, -44727; O2-NEXT: and $3, $1, $24728; O2-NEXT: andi $1, $1, 34729; O2-NEXT: sll $1, $1, 34730; O2-NEXT: ori $2, $zero, 2554731; O2-NEXT: sllv $6, $2, $14732; O2-NEXT: nor $7, $zero, $64733; O2-NEXT: andi $2, $4, 2554734; O2-NEXT: sllv $4, $2, $14735; O2-NEXT: andi $2, $5, 2554736; O2-NEXT: sllv $5, $2, $14737; O2-NEXT: $BB12_1: # %entry4738; O2-NEXT: # =>This Inner Loop Header: Depth=14739; O2-NEXT: ll $8, 0($3)4740; O2-NEXT: and $9, $8, $64741; O2-NEXT: bne $9, $4, $BB12_34742; O2-NEXT: nop4743; O2-NEXT: # %bb.2: # %entry4744; O2-NEXT: # in Loop: Header=BB12_1 Depth=14745; O2-NEXT: and $8, $8, $74746; O2-NEXT: or $8, $8, $54747; O2-NEXT: sc $8, 0($3)4748; O2-NEXT: beqz $8, $BB12_14749; O2-NEXT: nop4750; O2-NEXT: $BB12_3: # %entry4751; O2-NEXT: srlv $2, $9, $14752; O2-NEXT: sll $2, $2, 244753; O2-NEXT: sra $2, $2, 244754; O2-NEXT: # %bb.4: # %entry4755; O2-NEXT: jr $ra4756; O2-NEXT: nop4757;4758; O3-LABEL: AtomicCmpSwap8:4759; O3: # %bb.0: # %entry4760; O3-NEXT: lui $2, %hi(_gp_disp)4761; O3-NEXT: addiu $2, $2, %lo(_gp_disp)4762; O3-NEXT: addu $1, $2, $254763; O3-NEXT: addiu $2, $zero, -44764; O3-NEXT: lw $1, %got(y)($1)4765; O3-NEXT: and $3, $1, $24766; O3-NEXT: andi $1, $1, 34767; O3-NEXT: ori $2, $zero, 2554768; O3-NEXT: sll $1, $1, 34769; O3-NEXT: sllv $6, $2, $14770; O3-NEXT: andi $2, $4, 2554771; O3-NEXT: sllv $4, $2, $14772; O3-NEXT: andi $2, $5, 2554773; O3-NEXT: nor $7, $zero, $64774; O3-NEXT: sllv $5, $2, $14775; O3-NEXT: $BB12_1: # %entry4776; O3-NEXT: # =>This Inner Loop Header: Depth=14777; O3-NEXT: ll $8, 0($3)4778; O3-NEXT: and $9, $8, $64779; O3-NEXT: bne $9, $4, $BB12_34780; O3-NEXT: nop4781; O3-NEXT: # %bb.2: # %entry4782; O3-NEXT: # in Loop: Header=BB12_1 Depth=14783; O3-NEXT: and $8, $8, $74784; O3-NEXT: or $8, $8, $54785; O3-NEXT: sc $8, 0($3)4786; O3-NEXT: beqz $8, $BB12_14787; O3-NEXT: nop4788; O3-NEXT: $BB12_3: # %entry4789; O3-NEXT: srlv $2, $9, $14790; O3-NEXT: sll $2, $2, 244791; O3-NEXT: sra $2, $2, 244792; O3-NEXT: # %bb.4: # %entry4793; O3-NEXT: jr $ra4794; O3-NEXT: nop4795;4796; MIPS32EB-LABEL: AtomicCmpSwap8:4797; MIPS32EB: # %bb.0: # %entry4798; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)4799; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)4800; MIPS32EB-NEXT: addu $1, $2, $254801; MIPS32EB-NEXT: lw $1, %got(y)($1)4802; MIPS32EB-NEXT: addiu $2, $zero, -44803; MIPS32EB-NEXT: and $3, $1, $24804; MIPS32EB-NEXT: andi $1, $1, 34805; MIPS32EB-NEXT: xori $1, $1, 34806; MIPS32EB-NEXT: sll $1, $1, 34807; MIPS32EB-NEXT: ori $2, $zero, 2554808; MIPS32EB-NEXT: sllv $6, $2, $14809; MIPS32EB-NEXT: nor $7, $zero, $64810; MIPS32EB-NEXT: andi $2, $4, 2554811; MIPS32EB-NEXT: sllv $4, $2, $14812; MIPS32EB-NEXT: andi $2, $5, 2554813; MIPS32EB-NEXT: sllv $5, $2, $14814; MIPS32EB-NEXT: $BB12_1: # %entry4815; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=14816; MIPS32EB-NEXT: ll $8, 0($3)4817; MIPS32EB-NEXT: and $9, $8, $64818; MIPS32EB-NEXT: bne $9, $4, $BB12_34819; MIPS32EB-NEXT: nop4820; MIPS32EB-NEXT: # %bb.2: # %entry4821; MIPS32EB-NEXT: # in Loop: Header=BB12_1 Depth=14822; MIPS32EB-NEXT: and $8, $8, $74823; MIPS32EB-NEXT: or $8, $8, $54824; MIPS32EB-NEXT: sc $8, 0($3)4825; MIPS32EB-NEXT: beqz $8, $BB12_14826; MIPS32EB-NEXT: nop4827; MIPS32EB-NEXT: $BB12_3: # %entry4828; MIPS32EB-NEXT: srlv $2, $9, $14829; MIPS32EB-NEXT: sll $2, $2, 244830; MIPS32EB-NEXT: sra $2, $2, 244831; MIPS32EB-NEXT: # %bb.4: # %entry4832; MIPS32EB-NEXT: jr $ra4833; MIPS32EB-NEXT: nop4834entry:4835 %pair0 = cmpxchg ptr @y, i8 %oldval, i8 %newval monotonic monotonic4836 %0 = extractvalue { i8, i1 } %pair0, 04837 ret i8 %04838}4839 4840define i1 @AtomicCmpSwapRes8(ptr %ptr, i8 signext %oldval, i8 signext %newval) nounwind {4841; MIPS32-LABEL: AtomicCmpSwapRes8:4842; MIPS32: # %bb.0: # %entry4843; MIPS32-NEXT: addiu $1, $zero, -44844; MIPS32-NEXT: and $2, $4, $14845; MIPS32-NEXT: andi $1, $4, 34846; MIPS32-NEXT: sll $3, $1, 34847; MIPS32-NEXT: ori $1, $zero, 2554848; MIPS32-NEXT: sllv $4, $1, $34849; MIPS32-NEXT: nor $7, $zero, $44850; MIPS32-NEXT: andi $1, $5, 2554851; MIPS32-NEXT: sllv $8, $1, $34852; MIPS32-NEXT: andi $1, $6, 2554853; MIPS32-NEXT: sllv $6, $1, $34854; MIPS32-NEXT: $BB13_1: # %entry4855; MIPS32-NEXT: # =>This Inner Loop Header: Depth=14856; MIPS32-NEXT: ll $9, 0($2)4857; MIPS32-NEXT: and $10, $9, $44858; MIPS32-NEXT: bne $10, $8, $BB13_34859; MIPS32-NEXT: nop4860; MIPS32-NEXT: # %bb.2: # %entry4861; MIPS32-NEXT: # in Loop: Header=BB13_1 Depth=14862; MIPS32-NEXT: and $9, $9, $74863; MIPS32-NEXT: or $9, $9, $64864; MIPS32-NEXT: sc $9, 0($2)4865; MIPS32-NEXT: beqz $9, $BB13_14866; MIPS32-NEXT: nop4867; MIPS32-NEXT: $BB13_3: # %entry4868; MIPS32-NEXT: srlv $1, $10, $34869; MIPS32-NEXT: sll $1, $1, 244870; MIPS32-NEXT: sra $1, $1, 244871; MIPS32-NEXT: # %bb.4: # %entry4872; MIPS32-NEXT: xor $1, $1, $54873; MIPS32-NEXT: jr $ra4874; MIPS32-NEXT: sltiu $2, $1, 14875;4876; MIPS32O0-LABEL: AtomicCmpSwapRes8:4877; MIPS32O0: # %bb.0: # %entry4878; MIPS32O0-NEXT: addiu $sp, $sp, -84879; MIPS32O0-NEXT: move $1, $64880; MIPS32O0-NEXT: move $2, $54881; MIPS32O0-NEXT: move $3, $44882; MIPS32O0-NEXT: sw $2, 0($sp) # 4-byte Folded Spill4883; MIPS32O0-NEXT: addiu $4, $zero, -44884; MIPS32O0-NEXT: and $4, $3, $44885; MIPS32O0-NEXT: andi $3, $3, 34886; MIPS32O0-NEXT: sll $9, $3, 34887; MIPS32O0-NEXT: ori $3, $zero, 2554888; MIPS32O0-NEXT: sllv $5, $3, $94889; MIPS32O0-NEXT: nor $7, $zero, $54890; MIPS32O0-NEXT: andi $2, $2, 2554891; MIPS32O0-NEXT: sllv $6, $2, $94892; MIPS32O0-NEXT: andi $1, $1, 2554893; MIPS32O0-NEXT: sllv $8, $1, $94894; MIPS32O0-NEXT: $BB13_1: # %entry4895; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=14896; MIPS32O0-NEXT: ll $2, 0($4)4897; MIPS32O0-NEXT: and $3, $2, $54898; MIPS32O0-NEXT: bne $3, $6, $BB13_34899; MIPS32O0-NEXT: nop4900; MIPS32O0-NEXT: # %bb.2: # %entry4901; MIPS32O0-NEXT: # in Loop: Header=BB13_1 Depth=14902; MIPS32O0-NEXT: and $2, $2, $74903; MIPS32O0-NEXT: or $2, $2, $84904; MIPS32O0-NEXT: sc $2, 0($4)4905; MIPS32O0-NEXT: beqz $2, $BB13_14906; MIPS32O0-NEXT: nop4907; MIPS32O0-NEXT: $BB13_3: # %entry4908; MIPS32O0-NEXT: srlv $1, $3, $94909; MIPS32O0-NEXT: sll $1, $1, 244910; MIPS32O0-NEXT: sra $1, $1, 244911; MIPS32O0-NEXT: # %bb.4: # %entry4912; MIPS32O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill4913; MIPS32O0-NEXT: # %bb.5: # %entry4914; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload4915; MIPS32O0-NEXT: lw $2, 0($sp) # 4-byte Folded Reload4916; MIPS32O0-NEXT: sll $2, $2, 244917; MIPS32O0-NEXT: sra $2, $2, 244918; MIPS32O0-NEXT: xor $1, $1, $24919; MIPS32O0-NEXT: sltiu $2, $1, 14920; MIPS32O0-NEXT: addiu $sp, $sp, 84921; MIPS32O0-NEXT: jr $ra4922; MIPS32O0-NEXT: nop4923;4924; MIPS32R2-LABEL: AtomicCmpSwapRes8:4925; MIPS32R2: # %bb.0: # %entry4926; MIPS32R2-NEXT: addiu $1, $zero, -44927; MIPS32R2-NEXT: and $2, $4, $14928; MIPS32R2-NEXT: andi $1, $4, 34929; MIPS32R2-NEXT: sll $3, $1, 34930; MIPS32R2-NEXT: ori $1, $zero, 2554931; MIPS32R2-NEXT: sllv $4, $1, $34932; MIPS32R2-NEXT: nor $7, $zero, $44933; MIPS32R2-NEXT: andi $1, $5, 2554934; MIPS32R2-NEXT: sllv $8, $1, $34935; MIPS32R2-NEXT: andi $1, $6, 2554936; MIPS32R2-NEXT: sllv $6, $1, $34937; MIPS32R2-NEXT: $BB13_1: # %entry4938; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=14939; MIPS32R2-NEXT: ll $9, 0($2)4940; MIPS32R2-NEXT: and $10, $9, $44941; MIPS32R2-NEXT: bne $10, $8, $BB13_34942; MIPS32R2-NEXT: nop4943; MIPS32R2-NEXT: # %bb.2: # %entry4944; MIPS32R2-NEXT: # in Loop: Header=BB13_1 Depth=14945; MIPS32R2-NEXT: and $9, $9, $74946; MIPS32R2-NEXT: or $9, $9, $64947; MIPS32R2-NEXT: sc $9, 0($2)4948; MIPS32R2-NEXT: beqz $9, $BB13_14949; MIPS32R2-NEXT: nop4950; MIPS32R2-NEXT: $BB13_3: # %entry4951; MIPS32R2-NEXT: srlv $1, $10, $34952; MIPS32R2-NEXT: seb $1, $14953; MIPS32R2-NEXT: # %bb.4: # %entry4954; MIPS32R2-NEXT: xor $1, $1, $54955; MIPS32R2-NEXT: jr $ra4956; MIPS32R2-NEXT: sltiu $2, $1, 14957;4958; MIPS32R6-LABEL: AtomicCmpSwapRes8:4959; MIPS32R6: # %bb.0: # %entry4960; MIPS32R6-NEXT: addiu $1, $zero, -44961; MIPS32R6-NEXT: and $2, $4, $14962; MIPS32R6-NEXT: andi $1, $4, 34963; MIPS32R6-NEXT: sll $3, $1, 34964; MIPS32R6-NEXT: ori $1, $zero, 2554965; MIPS32R6-NEXT: sllv $4, $1, $34966; MIPS32R6-NEXT: nor $7, $zero, $44967; MIPS32R6-NEXT: andi $1, $5, 2554968; MIPS32R6-NEXT: sllv $8, $1, $34969; MIPS32R6-NEXT: andi $1, $6, 2554970; MIPS32R6-NEXT: sllv $6, $1, $34971; MIPS32R6-NEXT: $BB13_1: # %entry4972; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=14973; MIPS32R6-NEXT: ll $9, 0($2)4974; MIPS32R6-NEXT: and $10, $9, $44975; MIPS32R6-NEXT: bnec $10, $8, $BB13_34976; MIPS32R6-NEXT: # %bb.2: # %entry4977; MIPS32R6-NEXT: # in Loop: Header=BB13_1 Depth=14978; MIPS32R6-NEXT: and $9, $9, $74979; MIPS32R6-NEXT: or $9, $9, $64980; MIPS32R6-NEXT: sc $9, 0($2)4981; MIPS32R6-NEXT: beqzc $9, $BB13_14982; MIPS32R6-NEXT: $BB13_3: # %entry4983; MIPS32R6-NEXT: srlv $1, $10, $34984; MIPS32R6-NEXT: seb $1, $14985; MIPS32R6-NEXT: # %bb.4: # %entry4986; MIPS32R6-NEXT: xor $1, $1, $54987; MIPS32R6-NEXT: jr $ra4988; MIPS32R6-NEXT: sltiu $2, $1, 14989;4990; MIPS32R6O0-LABEL: AtomicCmpSwapRes8:4991; MIPS32R6O0: # %bb.0: # %entry4992; MIPS32R6O0-NEXT: addiu $sp, $sp, -84993; MIPS32R6O0-NEXT: move $1, $64994; MIPS32R6O0-NEXT: move $2, $54995; MIPS32R6O0-NEXT: sw $2, 0($sp) # 4-byte Folded Spill4996; MIPS32R6O0-NEXT: move $3, $44997; MIPS32R6O0-NEXT: # kill: def $a2 killed $at4998; MIPS32R6O0-NEXT: # kill: def $a1 killed $v04999; MIPS32R6O0-NEXT: addiu $4, $zero, -45000; MIPS32R6O0-NEXT: and $4, $3, $45001; MIPS32R6O0-NEXT: andi $3, $3, 35002; MIPS32R6O0-NEXT: sll $9, $3, 35003; MIPS32R6O0-NEXT: ori $3, $zero, 2555004; MIPS32R6O0-NEXT: sllv $5, $3, $95005; MIPS32R6O0-NEXT: nor $7, $zero, $55006; MIPS32R6O0-NEXT: andi $2, $2, 2555007; MIPS32R6O0-NEXT: sllv $6, $2, $95008; MIPS32R6O0-NEXT: andi $1, $1, 2555009; MIPS32R6O0-NEXT: sllv $8, $1, $95010; MIPS32R6O0-NEXT: $BB13_1: # %entry5011; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=15012; MIPS32R6O0-NEXT: ll $2, 0($4)5013; MIPS32R6O0-NEXT: and $3, $2, $55014; MIPS32R6O0-NEXT: bnec $3, $6, $BB13_35015; MIPS32R6O0-NEXT: # %bb.2: # %entry5016; MIPS32R6O0-NEXT: # in Loop: Header=BB13_1 Depth=15017; MIPS32R6O0-NEXT: and $2, $2, $75018; MIPS32R6O0-NEXT: or $2, $2, $85019; MIPS32R6O0-NEXT: sc $2, 0($4)5020; MIPS32R6O0-NEXT: beqzc $2, $BB13_15021; MIPS32R6O0-NEXT: $BB13_3: # %entry5022; MIPS32R6O0-NEXT: srlv $1, $3, $95023; MIPS32R6O0-NEXT: seb $1, $15024; MIPS32R6O0-NEXT: # %bb.4: # %entry5025; MIPS32R6O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill5026; MIPS32R6O0-NEXT: # %bb.5: # %entry5027; MIPS32R6O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload5028; MIPS32R6O0-NEXT: lw $2, 0($sp) # 4-byte Folded Reload5029; MIPS32R6O0-NEXT: xor $1, $1, $25030; MIPS32R6O0-NEXT: sltiu $2, $1, 15031; MIPS32R6O0-NEXT: addiu $sp, $sp, 85032; MIPS32R6O0-NEXT: jrc $ra5033;5034; MIPS4-LABEL: AtomicCmpSwapRes8:5035; MIPS4: # %bb.0: # %entry5036; MIPS4-NEXT: daddiu $1, $zero, -45037; MIPS4-NEXT: and $2, $4, $15038; MIPS4-NEXT: andi $1, $4, 35039; MIPS4-NEXT: sll $3, $1, 35040; MIPS4-NEXT: ori $1, $zero, 2555041; MIPS4-NEXT: sllv $4, $1, $35042; MIPS4-NEXT: nor $7, $zero, $45043; MIPS4-NEXT: andi $1, $5, 2555044; MIPS4-NEXT: sllv $8, $1, $35045; MIPS4-NEXT: andi $1, $6, 2555046; MIPS4-NEXT: sllv $6, $1, $35047; MIPS4-NEXT: .LBB13_1: # %entry5048; MIPS4-NEXT: # =>This Inner Loop Header: Depth=15049; MIPS4-NEXT: ll $9, 0($2)5050; MIPS4-NEXT: and $10, $9, $45051; MIPS4-NEXT: bne $10, $8, .LBB13_35052; MIPS4-NEXT: nop5053; MIPS4-NEXT: # %bb.2: # %entry5054; MIPS4-NEXT: # in Loop: Header=BB13_1 Depth=15055; MIPS4-NEXT: and $9, $9, $75056; MIPS4-NEXT: or $9, $9, $65057; MIPS4-NEXT: sc $9, 0($2)5058; MIPS4-NEXT: beqz $9, .LBB13_15059; MIPS4-NEXT: nop5060; MIPS4-NEXT: .LBB13_3: # %entry5061; MIPS4-NEXT: srlv $1, $10, $35062; MIPS4-NEXT: sll $1, $1, 245063; MIPS4-NEXT: sra $1, $1, 245064; MIPS4-NEXT: # %bb.4: # %entry5065; MIPS4-NEXT: xor $1, $1, $55066; MIPS4-NEXT: jr $ra5067; MIPS4-NEXT: sltiu $2, $1, 15068;5069; MIPS64-LABEL: AtomicCmpSwapRes8:5070; MIPS64: # %bb.0: # %entry5071; MIPS64-NEXT: daddiu $1, $zero, -45072; MIPS64-NEXT: and $2, $4, $15073; MIPS64-NEXT: andi $1, $4, 35074; MIPS64-NEXT: sll $3, $1, 35075; MIPS64-NEXT: ori $1, $zero, 2555076; MIPS64-NEXT: sllv $4, $1, $35077; MIPS64-NEXT: nor $7, $zero, $45078; MIPS64-NEXT: andi $1, $5, 2555079; MIPS64-NEXT: sllv $8, $1, $35080; MIPS64-NEXT: andi $1, $6, 2555081; MIPS64-NEXT: sllv $6, $1, $35082; MIPS64-NEXT: .LBB13_1: # %entry5083; MIPS64-NEXT: # =>This Inner Loop Header: Depth=15084; MIPS64-NEXT: ll $9, 0($2)5085; MIPS64-NEXT: and $10, $9, $45086; MIPS64-NEXT: bne $10, $8, .LBB13_35087; MIPS64-NEXT: nop5088; MIPS64-NEXT: # %bb.2: # %entry5089; MIPS64-NEXT: # in Loop: Header=BB13_1 Depth=15090; MIPS64-NEXT: and $9, $9, $75091; MIPS64-NEXT: or $9, $9, $65092; MIPS64-NEXT: sc $9, 0($2)5093; MIPS64-NEXT: beqz $9, .LBB13_15094; MIPS64-NEXT: nop5095; MIPS64-NEXT: .LBB13_3: # %entry5096; MIPS64-NEXT: srlv $1, $10, $35097; MIPS64-NEXT: sll $1, $1, 245098; MIPS64-NEXT: sra $1, $1, 245099; MIPS64-NEXT: # %bb.4: # %entry5100; MIPS64-NEXT: xor $1, $1, $55101; MIPS64-NEXT: jr $ra5102; MIPS64-NEXT: sltiu $2, $1, 15103;5104; MIPS64R2-LABEL: AtomicCmpSwapRes8:5105; MIPS64R2: # %bb.0: # %entry5106; MIPS64R2-NEXT: daddiu $1, $zero, -45107; MIPS64R2-NEXT: and $2, $4, $15108; MIPS64R2-NEXT: andi $1, $4, 35109; MIPS64R2-NEXT: sll $3, $1, 35110; MIPS64R2-NEXT: ori $1, $zero, 2555111; MIPS64R2-NEXT: sllv $4, $1, $35112; MIPS64R2-NEXT: nor $7, $zero, $45113; MIPS64R2-NEXT: andi $1, $5, 2555114; MIPS64R2-NEXT: sllv $8, $1, $35115; MIPS64R2-NEXT: andi $1, $6, 2555116; MIPS64R2-NEXT: sllv $6, $1, $35117; MIPS64R2-NEXT: .LBB13_1: # %entry5118; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=15119; MIPS64R2-NEXT: ll $9, 0($2)5120; MIPS64R2-NEXT: and $10, $9, $45121; MIPS64R2-NEXT: bne $10, $8, .LBB13_35122; MIPS64R2-NEXT: nop5123; MIPS64R2-NEXT: # %bb.2: # %entry5124; MIPS64R2-NEXT: # in Loop: Header=BB13_1 Depth=15125; MIPS64R2-NEXT: and $9, $9, $75126; MIPS64R2-NEXT: or $9, $9, $65127; MIPS64R2-NEXT: sc $9, 0($2)5128; MIPS64R2-NEXT: beqz $9, .LBB13_15129; MIPS64R2-NEXT: nop5130; MIPS64R2-NEXT: .LBB13_3: # %entry5131; MIPS64R2-NEXT: srlv $1, $10, $35132; MIPS64R2-NEXT: seb $1, $15133; MIPS64R2-NEXT: # %bb.4: # %entry5134; MIPS64R2-NEXT: xor $1, $1, $55135; MIPS64R2-NEXT: jr $ra5136; MIPS64R2-NEXT: sltiu $2, $1, 15137;5138; MIPS64R6-LABEL: AtomicCmpSwapRes8:5139; MIPS64R6: # %bb.0: # %entry5140; MIPS64R6-NEXT: daddiu $1, $zero, -45141; MIPS64R6-NEXT: and $2, $4, $15142; MIPS64R6-NEXT: andi $1, $4, 35143; MIPS64R6-NEXT: sll $3, $1, 35144; MIPS64R6-NEXT: ori $1, $zero, 2555145; MIPS64R6-NEXT: sllv $4, $1, $35146; MIPS64R6-NEXT: nor $7, $zero, $45147; MIPS64R6-NEXT: andi $1, $5, 2555148; MIPS64R6-NEXT: sllv $8, $1, $35149; MIPS64R6-NEXT: andi $1, $6, 2555150; MIPS64R6-NEXT: sllv $6, $1, $35151; MIPS64R6-NEXT: .LBB13_1: # %entry5152; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=15153; MIPS64R6-NEXT: ll $9, 0($2)5154; MIPS64R6-NEXT: and $10, $9, $45155; MIPS64R6-NEXT: bnec $10, $8, .LBB13_35156; MIPS64R6-NEXT: # %bb.2: # %entry5157; MIPS64R6-NEXT: # in Loop: Header=BB13_1 Depth=15158; MIPS64R6-NEXT: and $9, $9, $75159; MIPS64R6-NEXT: or $9, $9, $65160; MIPS64R6-NEXT: sc $9, 0($2)5161; MIPS64R6-NEXT: beqzc $9, .LBB13_15162; MIPS64R6-NEXT: .LBB13_3: # %entry5163; MIPS64R6-NEXT: srlv $1, $10, $35164; MIPS64R6-NEXT: seb $1, $15165; MIPS64R6-NEXT: # %bb.4: # %entry5166; MIPS64R6-NEXT: xor $1, $1, $55167; MIPS64R6-NEXT: jr $ra5168; MIPS64R6-NEXT: sltiu $2, $1, 15169;5170; MIPS64R6O0-LABEL: AtomicCmpSwapRes8:5171; MIPS64R6O0: # %bb.0: # %entry5172; MIPS64R6O0-NEXT: daddiu $sp, $sp, -165173; MIPS64R6O0-NEXT: move $3, $45174; MIPS64R6O0-NEXT: move $1, $65175; MIPS64R6O0-NEXT: move $2, $55176; MIPS64R6O0-NEXT: sw $2, 8($sp) # 4-byte Folded Spill5177; MIPS64R6O0-NEXT: daddiu $4, $zero, -45178; MIPS64R6O0-NEXT: and $4, $3, $45179; MIPS64R6O0-NEXT: andi $3, $3, 35180; MIPS64R6O0-NEXT: xori $3, $3, 35181; MIPS64R6O0-NEXT: sll $9, $3, 35182; MIPS64R6O0-NEXT: ori $3, $zero, 2555183; MIPS64R6O0-NEXT: sllv $5, $3, $95184; MIPS64R6O0-NEXT: nor $7, $zero, $55185; MIPS64R6O0-NEXT: andi $2, $2, 2555186; MIPS64R6O0-NEXT: sllv $6, $2, $95187; MIPS64R6O0-NEXT: andi $1, $1, 2555188; MIPS64R6O0-NEXT: sllv $8, $1, $95189; MIPS64R6O0-NEXT: .LBB13_1: # %entry5190; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=15191; MIPS64R6O0-NEXT: ll $2, 0($4)5192; MIPS64R6O0-NEXT: and $3, $2, $55193; MIPS64R6O0-NEXT: bnec $3, $6, .LBB13_35194; MIPS64R6O0-NEXT: # %bb.2: # %entry5195; MIPS64R6O0-NEXT: # in Loop: Header=BB13_1 Depth=15196; MIPS64R6O0-NEXT: and $2, $2, $75197; MIPS64R6O0-NEXT: or $2, $2, $85198; MIPS64R6O0-NEXT: sc $2, 0($4)5199; MIPS64R6O0-NEXT: beqzc $2, .LBB13_15200; MIPS64R6O0-NEXT: .LBB13_3: # %entry5201; MIPS64R6O0-NEXT: srlv $1, $3, $95202; MIPS64R6O0-NEXT: seb $1, $15203; MIPS64R6O0-NEXT: # %bb.4: # %entry5204; MIPS64R6O0-NEXT: sw $1, 12($sp) # 4-byte Folded Spill5205; MIPS64R6O0-NEXT: # %bb.5: # %entry5206; MIPS64R6O0-NEXT: lw $1, 12($sp) # 4-byte Folded Reload5207; MIPS64R6O0-NEXT: lw $2, 8($sp) # 4-byte Folded Reload5208; MIPS64R6O0-NEXT: xor $1, $1, $25209; MIPS64R6O0-NEXT: sltiu $2, $1, 15210; MIPS64R6O0-NEXT: daddiu $sp, $sp, 165211; MIPS64R6O0-NEXT: jrc $ra5212;5213; MM32-LABEL: AtomicCmpSwapRes8:5214; MM32: # %bb.0: # %entry5215; MM32-NEXT: addiu $1, $zero, -45216; MM32-NEXT: and $2, $4, $15217; MM32-NEXT: andi $1, $4, 35218; MM32-NEXT: sll $3, $1, 35219; MM32-NEXT: ori $1, $zero, 2555220; MM32-NEXT: sllv $4, $1, $35221; MM32-NEXT: nor $7, $zero, $45222; MM32-NEXT: andi $1, $5, 2555223; MM32-NEXT: sllv $8, $1, $35224; MM32-NEXT: andi $1, $6, 2555225; MM32-NEXT: sllv $6, $1, $35226; MM32-NEXT: $BB13_1: # %entry5227; MM32-NEXT: # =>This Inner Loop Header: Depth=15228; MM32-NEXT: ll $9, 0($2)5229; MM32-NEXT: and $10, $9, $45230; MM32-NEXT: bne $10, $8, $BB13_35231; MM32-NEXT: nop5232; MM32-NEXT: # %bb.2: # %entry5233; MM32-NEXT: # in Loop: Header=BB13_1 Depth=15234; MM32-NEXT: and $9, $9, $75235; MM32-NEXT: or $9, $9, $65236; MM32-NEXT: sc $9, 0($2)5237; MM32-NEXT: beqzc $9, $BB13_15238; MM32-NEXT: $BB13_3: # %entry5239; MM32-NEXT: srlv $1, $10, $35240; MM32-NEXT: seb $1, $15241; MM32-NEXT: # %bb.4: # %entry5242; MM32-NEXT: xor $1, $1, $55243; MM32-NEXT: jr $ra5244; MM32-NEXT: sltiu $2, $1, 15245;5246; O1-LABEL: AtomicCmpSwapRes8:5247; O1: # %bb.0: # %entry5248; O1-NEXT: addiu $1, $zero, -45249; O1-NEXT: and $2, $4, $15250; O1-NEXT: andi $1, $4, 35251; O1-NEXT: sll $3, $1, 35252; O1-NEXT: ori $1, $zero, 2555253; O1-NEXT: sllv $4, $1, $35254; O1-NEXT: nor $7, $zero, $45255; O1-NEXT: andi $1, $5, 2555256; O1-NEXT: sllv $8, $1, $35257; O1-NEXT: andi $1, $6, 2555258; O1-NEXT: sllv $6, $1, $35259; O1-NEXT: $BB13_1: # %entry5260; O1-NEXT: # =>This Inner Loop Header: Depth=15261; O1-NEXT: ll $9, 0($2)5262; O1-NEXT: and $10, $9, $45263; O1-NEXT: bne $10, $8, $BB13_35264; O1-NEXT: nop5265; O1-NEXT: # %bb.2: # %entry5266; O1-NEXT: # in Loop: Header=BB13_1 Depth=15267; O1-NEXT: and $9, $9, $75268; O1-NEXT: or $9, $9, $65269; O1-NEXT: sc $9, 0($2)5270; O1-NEXT: beqz $9, $BB13_15271; O1-NEXT: nop5272; O1-NEXT: $BB13_3: # %entry5273; O1-NEXT: srlv $1, $10, $35274; O1-NEXT: sll $1, $1, 245275; O1-NEXT: sra $1, $1, 245276; O1-NEXT: # %bb.4: # %entry5277; O1-NEXT: xor $1, $1, $55278; O1-NEXT: jr $ra5279; O1-NEXT: sltiu $2, $1, 15280;5281; O2-LABEL: AtomicCmpSwapRes8:5282; O2: # %bb.0: # %entry5283; O2-NEXT: addiu $1, $zero, -45284; O2-NEXT: and $2, $4, $15285; O2-NEXT: andi $1, $4, 35286; O2-NEXT: sll $3, $1, 35287; O2-NEXT: ori $1, $zero, 2555288; O2-NEXT: sllv $4, $1, $35289; O2-NEXT: nor $7, $zero, $45290; O2-NEXT: andi $1, $5, 2555291; O2-NEXT: sllv $8, $1, $35292; O2-NEXT: andi $1, $6, 2555293; O2-NEXT: sllv $6, $1, $35294; O2-NEXT: $BB13_1: # %entry5295; O2-NEXT: # =>This Inner Loop Header: Depth=15296; O2-NEXT: ll $9, 0($2)5297; O2-NEXT: and $10, $9, $45298; O2-NEXT: bne $10, $8, $BB13_35299; O2-NEXT: nop5300; O2-NEXT: # %bb.2: # %entry5301; O2-NEXT: # in Loop: Header=BB13_1 Depth=15302; O2-NEXT: and $9, $9, $75303; O2-NEXT: or $9, $9, $65304; O2-NEXT: sc $9, 0($2)5305; O2-NEXT: beqz $9, $BB13_15306; O2-NEXT: nop5307; O2-NEXT: $BB13_3: # %entry5308; O2-NEXT: srlv $1, $10, $35309; O2-NEXT: sll $1, $1, 245310; O2-NEXT: sra $1, $1, 245311; O2-NEXT: # %bb.4: # %entry5312; O2-NEXT: xor $1, $1, $55313; O2-NEXT: jr $ra5314; O2-NEXT: sltiu $2, $1, 15315;5316; O3-LABEL: AtomicCmpSwapRes8:5317; O3: # %bb.0: # %entry5318; O3-NEXT: addiu $1, $zero, -45319; O3-NEXT: and $2, $4, $15320; O3-NEXT: andi $1, $4, 35321; O3-NEXT: sll $3, $1, 35322; O3-NEXT: ori $1, $zero, 2555323; O3-NEXT: sllv $4, $1, $35324; O3-NEXT: andi $1, $5, 2555325; O3-NEXT: sllv $8, $1, $35326; O3-NEXT: andi $1, $6, 2555327; O3-NEXT: nor $7, $zero, $45328; O3-NEXT: sllv $6, $1, $35329; O3-NEXT: $BB13_1: # %entry5330; O3-NEXT: # =>This Inner Loop Header: Depth=15331; O3-NEXT: ll $9, 0($2)5332; O3-NEXT: and $10, $9, $45333; O3-NEXT: bne $10, $8, $BB13_35334; O3-NEXT: nop5335; O3-NEXT: # %bb.2: # %entry5336; O3-NEXT: # in Loop: Header=BB13_1 Depth=15337; O3-NEXT: and $9, $9, $75338; O3-NEXT: or $9, $9, $65339; O3-NEXT: sc $9, 0($2)5340; O3-NEXT: beqz $9, $BB13_15341; O3-NEXT: nop5342; O3-NEXT: $BB13_3: # %entry5343; O3-NEXT: srlv $1, $10, $35344; O3-NEXT: sll $1, $1, 245345; O3-NEXT: sra $1, $1, 245346; O3-NEXT: # %bb.4: # %entry5347; O3-NEXT: xor $1, $1, $55348; O3-NEXT: jr $ra5349; O3-NEXT: sltiu $2, $1, 15350;5351; MIPS32EB-LABEL: AtomicCmpSwapRes8:5352; MIPS32EB: # %bb.0: # %entry5353; MIPS32EB-NEXT: addiu $1, $zero, -45354; MIPS32EB-NEXT: and $2, $4, $15355; MIPS32EB-NEXT: andi $1, $4, 35356; MIPS32EB-NEXT: xori $1, $1, 35357; MIPS32EB-NEXT: sll $3, $1, 35358; MIPS32EB-NEXT: ori $1, $zero, 2555359; MIPS32EB-NEXT: sllv $4, $1, $35360; MIPS32EB-NEXT: nor $7, $zero, $45361; MIPS32EB-NEXT: andi $1, $5, 2555362; MIPS32EB-NEXT: sllv $8, $1, $35363; MIPS32EB-NEXT: andi $1, $6, 2555364; MIPS32EB-NEXT: sllv $6, $1, $35365; MIPS32EB-NEXT: $BB13_1: # %entry5366; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=15367; MIPS32EB-NEXT: ll $9, 0($2)5368; MIPS32EB-NEXT: and $10, $9, $45369; MIPS32EB-NEXT: bne $10, $8, $BB13_35370; MIPS32EB-NEXT: nop5371; MIPS32EB-NEXT: # %bb.2: # %entry5372; MIPS32EB-NEXT: # in Loop: Header=BB13_1 Depth=15373; MIPS32EB-NEXT: and $9, $9, $75374; MIPS32EB-NEXT: or $9, $9, $65375; MIPS32EB-NEXT: sc $9, 0($2)5376; MIPS32EB-NEXT: beqz $9, $BB13_15377; MIPS32EB-NEXT: nop5378; MIPS32EB-NEXT: $BB13_3: # %entry5379; MIPS32EB-NEXT: srlv $1, $10, $35380; MIPS32EB-NEXT: sll $1, $1, 245381; MIPS32EB-NEXT: sra $1, $1, 245382; MIPS32EB-NEXT: # %bb.4: # %entry5383; MIPS32EB-NEXT: xor $1, $1, $55384; MIPS32EB-NEXT: jr $ra5385; MIPS32EB-NEXT: sltiu $2, $1, 15386entry:5387 %0 = cmpxchg ptr %ptr, i8 %oldval, i8 %newval monotonic monotonic5388 %1 = extractvalue { i8, i1 } %0, 15389 ret i1 %15390; FIXME: -march=mips produces a redundant sign extension here...5391; FIXME: ...Leading to this split check.5392 5393}5394 5395; Check one i16 so that we cover the seh sign extend5396@z = common global i16 0, align 15397 5398define signext i16 @AtomicLoadAdd16(i16 signext %incr) nounwind {5399; MIPS32-LABEL: AtomicLoadAdd16:5400; MIPS32: # %bb.0: # %entry5401; MIPS32-NEXT: lui $2, %hi(_gp_disp)5402; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)5403; MIPS32-NEXT: addu $1, $2, $255404; MIPS32-NEXT: lw $1, %got(z)($1)5405; MIPS32-NEXT: addiu $2, $zero, -45406; MIPS32-NEXT: and $3, $1, $25407; MIPS32-NEXT: andi $1, $1, 35408; MIPS32-NEXT: sll $1, $1, 35409; MIPS32-NEXT: ori $2, $zero, 655355410; MIPS32-NEXT: sllv $5, $2, $15411; MIPS32-NEXT: nor $6, $zero, $55412; MIPS32-NEXT: sllv $4, $4, $15413; MIPS32-NEXT: $BB14_1: # %entry5414; MIPS32-NEXT: # =>This Inner Loop Header: Depth=15415; MIPS32-NEXT: ll $7, 0($3)5416; MIPS32-NEXT: addu $8, $7, $45417; MIPS32-NEXT: and $8, $8, $55418; MIPS32-NEXT: and $9, $7, $65419; MIPS32-NEXT: or $9, $9, $85420; MIPS32-NEXT: sc $9, 0($3)5421; MIPS32-NEXT: beqz $9, $BB14_15422; MIPS32-NEXT: nop5423; MIPS32-NEXT: # %bb.2: # %entry5424; MIPS32-NEXT: and $2, $7, $55425; MIPS32-NEXT: srlv $2, $2, $15426; MIPS32-NEXT: sll $2, $2, 165427; MIPS32-NEXT: sra $2, $2, 165428; MIPS32-NEXT: # %bb.3: # %entry5429; MIPS32-NEXT: jr $ra5430; MIPS32-NEXT: nop5431;5432; MIPS32O0-LABEL: AtomicLoadAdd16:5433; MIPS32O0: # %bb.0: # %entry5434; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)5435; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)5436; MIPS32O0-NEXT: addiu $sp, $sp, -85437; MIPS32O0-NEXT: addu $1, $2, $255438; MIPS32O0-NEXT: lw $1, %got(z)($1)5439; MIPS32O0-NEXT: addiu $2, $zero, -45440; MIPS32O0-NEXT: and $5, $1, $25441; MIPS32O0-NEXT: andi $1, $1, 35442; MIPS32O0-NEXT: sll $9, $1, 35443; MIPS32O0-NEXT: ori $1, $zero, 655355444; MIPS32O0-NEXT: sllv $7, $1, $95445; MIPS32O0-NEXT: nor $8, $zero, $75446; MIPS32O0-NEXT: sllv $6, $4, $95447; MIPS32O0-NEXT: $BB14_1: # %entry5448; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=15449; MIPS32O0-NEXT: ll $2, 0($5)5450; MIPS32O0-NEXT: addu $3, $2, $65451; MIPS32O0-NEXT: and $3, $3, $75452; MIPS32O0-NEXT: and $4, $2, $85453; MIPS32O0-NEXT: or $4, $4, $35454; MIPS32O0-NEXT: sc $4, 0($5)5455; MIPS32O0-NEXT: beqz $4, $BB14_15456; MIPS32O0-NEXT: nop5457; MIPS32O0-NEXT: # %bb.2: # %entry5458; MIPS32O0-NEXT: and $1, $2, $75459; MIPS32O0-NEXT: srlv $1, $1, $95460; MIPS32O0-NEXT: sll $1, $1, 165461; MIPS32O0-NEXT: sra $1, $1, 165462; MIPS32O0-NEXT: # %bb.3: # %entry5463; MIPS32O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill5464; MIPS32O0-NEXT: # %bb.4: # %entry5465; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload5466; MIPS32O0-NEXT: sll $1, $1, 165467; MIPS32O0-NEXT: sra $2, $1, 165468; MIPS32O0-NEXT: addiu $sp, $sp, 85469; MIPS32O0-NEXT: jr $ra5470; MIPS32O0-NEXT: nop5471;5472; MIPS32R2-LABEL: AtomicLoadAdd16:5473; MIPS32R2: # %bb.0: # %entry5474; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)5475; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)5476; MIPS32R2-NEXT: addu $1, $2, $255477; MIPS32R2-NEXT: lw $1, %got(z)($1)5478; MIPS32R2-NEXT: addiu $2, $zero, -45479; MIPS32R2-NEXT: and $3, $1, $25480; MIPS32R2-NEXT: andi $1, $1, 35481; MIPS32R2-NEXT: sll $1, $1, 35482; MIPS32R2-NEXT: ori $2, $zero, 655355483; MIPS32R2-NEXT: sllv $5, $2, $15484; MIPS32R2-NEXT: nor $6, $zero, $55485; MIPS32R2-NEXT: sllv $4, $4, $15486; MIPS32R2-NEXT: $BB14_1: # %entry5487; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=15488; MIPS32R2-NEXT: ll $7, 0($3)5489; MIPS32R2-NEXT: addu $8, $7, $45490; MIPS32R2-NEXT: and $8, $8, $55491; MIPS32R2-NEXT: and $9, $7, $65492; MIPS32R2-NEXT: or $9, $9, $85493; MIPS32R2-NEXT: sc $9, 0($3)5494; MIPS32R2-NEXT: beqz $9, $BB14_15495; MIPS32R2-NEXT: nop5496; MIPS32R2-NEXT: # %bb.2: # %entry5497; MIPS32R2-NEXT: and $2, $7, $55498; MIPS32R2-NEXT: srlv $2, $2, $15499; MIPS32R2-NEXT: seh $2, $25500; MIPS32R2-NEXT: # %bb.3: # %entry5501; MIPS32R2-NEXT: jr $ra5502; MIPS32R2-NEXT: nop5503;5504; MIPS32R6-LABEL: AtomicLoadAdd16:5505; MIPS32R6: # %bb.0: # %entry5506; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)5507; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)5508; MIPS32R6-NEXT: addu $1, $2, $255509; MIPS32R6-NEXT: lw $1, %got(z)($1)5510; MIPS32R6-NEXT: addiu $2, $zero, -45511; MIPS32R6-NEXT: and $3, $1, $25512; MIPS32R6-NEXT: andi $1, $1, 35513; MIPS32R6-NEXT: sll $1, $1, 35514; MIPS32R6-NEXT: ori $2, $zero, 655355515; MIPS32R6-NEXT: sllv $5, $2, $15516; MIPS32R6-NEXT: nor $6, $zero, $55517; MIPS32R6-NEXT: sllv $4, $4, $15518; MIPS32R6-NEXT: $BB14_1: # %entry5519; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=15520; MIPS32R6-NEXT: ll $7, 0($3)5521; MIPS32R6-NEXT: addu $8, $7, $45522; MIPS32R6-NEXT: and $8, $8, $55523; MIPS32R6-NEXT: and $9, $7, $65524; MIPS32R6-NEXT: or $9, $9, $85525; MIPS32R6-NEXT: sc $9, 0($3)5526; MIPS32R6-NEXT: beqzc $9, $BB14_15527; MIPS32R6-NEXT: # %bb.2: # %entry5528; MIPS32R6-NEXT: and $2, $7, $55529; MIPS32R6-NEXT: srlv $2, $2, $15530; MIPS32R6-NEXT: seh $2, $25531; MIPS32R6-NEXT: # %bb.3: # %entry5532; MIPS32R6-NEXT: jrc $ra5533;5534; MIPS32R6O0-LABEL: AtomicLoadAdd16:5535; MIPS32R6O0: # %bb.0: # %entry5536; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)5537; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)5538; MIPS32R6O0-NEXT: addiu $sp, $sp, -85539; MIPS32R6O0-NEXT: addu $1, $2, $255540; MIPS32R6O0-NEXT: # kill: def $v0 killed $a05541; MIPS32R6O0-NEXT: lw $1, %got(z)($1)5542; MIPS32R6O0-NEXT: addiu $2, $zero, -45543; MIPS32R6O0-NEXT: and $5, $1, $25544; MIPS32R6O0-NEXT: andi $1, $1, 35545; MIPS32R6O0-NEXT: sll $9, $1, 35546; MIPS32R6O0-NEXT: ori $1, $zero, 655355547; MIPS32R6O0-NEXT: sllv $7, $1, $95548; MIPS32R6O0-NEXT: nor $8, $zero, $75549; MIPS32R6O0-NEXT: sllv $6, $4, $95550; MIPS32R6O0-NEXT: $BB14_1: # %entry5551; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=15552; MIPS32R6O0-NEXT: ll $2, 0($5)5553; MIPS32R6O0-NEXT: addu $3, $2, $65554; MIPS32R6O0-NEXT: and $3, $3, $75555; MIPS32R6O0-NEXT: and $4, $2, $85556; MIPS32R6O0-NEXT: or $4, $4, $35557; MIPS32R6O0-NEXT: sc $4, 0($5)5558; MIPS32R6O0-NEXT: beqzc $4, $BB14_15559; MIPS32R6O0-NEXT: # %bb.2: # %entry5560; MIPS32R6O0-NEXT: and $1, $2, $75561; MIPS32R6O0-NEXT: srlv $1, $1, $95562; MIPS32R6O0-NEXT: seh $1, $15563; MIPS32R6O0-NEXT: # %bb.3: # %entry5564; MIPS32R6O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill5565; MIPS32R6O0-NEXT: # %bb.4: # %entry5566; MIPS32R6O0-NEXT: lw $2, 4($sp) # 4-byte Folded Reload5567; MIPS32R6O0-NEXT: addiu $sp, $sp, 85568; MIPS32R6O0-NEXT: jrc $ra5569;5570; MIPS4-LABEL: AtomicLoadAdd16:5571; MIPS4: # %bb.0: # %entry5572; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd16)))5573; MIPS4-NEXT: daddu $1, $1, $255574; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd16)))5575; MIPS4-NEXT: ld $1, %got_disp(z)($1)5576; MIPS4-NEXT: daddiu $2, $zero, -45577; MIPS4-NEXT: and $3, $1, $25578; MIPS4-NEXT: andi $1, $1, 35579; MIPS4-NEXT: sll $1, $1, 35580; MIPS4-NEXT: ori $2, $zero, 655355581; MIPS4-NEXT: sllv $5, $2, $15582; MIPS4-NEXT: nor $6, $zero, $55583; MIPS4-NEXT: sllv $4, $4, $15584; MIPS4-NEXT: .LBB14_1: # %entry5585; MIPS4-NEXT: # =>This Inner Loop Header: Depth=15586; MIPS4-NEXT: ll $7, 0($3)5587; MIPS4-NEXT: addu $8, $7, $45588; MIPS4-NEXT: and $8, $8, $55589; MIPS4-NEXT: and $9, $7, $65590; MIPS4-NEXT: or $9, $9, $85591; MIPS4-NEXT: sc $9, 0($3)5592; MIPS4-NEXT: beqz $9, .LBB14_15593; MIPS4-NEXT: nop5594; MIPS4-NEXT: # %bb.2: # %entry5595; MIPS4-NEXT: and $2, $7, $55596; MIPS4-NEXT: srlv $2, $2, $15597; MIPS4-NEXT: sll $2, $2, 165598; MIPS4-NEXT: sra $2, $2, 165599; MIPS4-NEXT: # %bb.3: # %entry5600; MIPS4-NEXT: jr $ra5601; MIPS4-NEXT: nop5602;5603; MIPS64-LABEL: AtomicLoadAdd16:5604; MIPS64: # %bb.0: # %entry5605; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd16)))5606; MIPS64-NEXT: daddu $1, $1, $255607; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd16)))5608; MIPS64-NEXT: ld $1, %got_disp(z)($1)5609; MIPS64-NEXT: daddiu $2, $zero, -45610; MIPS64-NEXT: and $3, $1, $25611; MIPS64-NEXT: andi $1, $1, 35612; MIPS64-NEXT: sll $1, $1, 35613; MIPS64-NEXT: ori $2, $zero, 655355614; MIPS64-NEXT: sllv $5, $2, $15615; MIPS64-NEXT: nor $6, $zero, $55616; MIPS64-NEXT: sllv $4, $4, $15617; MIPS64-NEXT: .LBB14_1: # %entry5618; MIPS64-NEXT: # =>This Inner Loop Header: Depth=15619; MIPS64-NEXT: ll $7, 0($3)5620; MIPS64-NEXT: addu $8, $7, $45621; MIPS64-NEXT: and $8, $8, $55622; MIPS64-NEXT: and $9, $7, $65623; MIPS64-NEXT: or $9, $9, $85624; MIPS64-NEXT: sc $9, 0($3)5625; MIPS64-NEXT: beqz $9, .LBB14_15626; MIPS64-NEXT: nop5627; MIPS64-NEXT: # %bb.2: # %entry5628; MIPS64-NEXT: and $2, $7, $55629; MIPS64-NEXT: srlv $2, $2, $15630; MIPS64-NEXT: sll $2, $2, 165631; MIPS64-NEXT: sra $2, $2, 165632; MIPS64-NEXT: # %bb.3: # %entry5633; MIPS64-NEXT: jr $ra5634; MIPS64-NEXT: nop5635;5636; MIPS64R2-LABEL: AtomicLoadAdd16:5637; MIPS64R2: # %bb.0: # %entry5638; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd16)))5639; MIPS64R2-NEXT: daddu $1, $1, $255640; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd16)))5641; MIPS64R2-NEXT: ld $1, %got_disp(z)($1)5642; MIPS64R2-NEXT: daddiu $2, $zero, -45643; MIPS64R2-NEXT: and $3, $1, $25644; MIPS64R2-NEXT: andi $1, $1, 35645; MIPS64R2-NEXT: sll $1, $1, 35646; MIPS64R2-NEXT: ori $2, $zero, 655355647; MIPS64R2-NEXT: sllv $5, $2, $15648; MIPS64R2-NEXT: nor $6, $zero, $55649; MIPS64R2-NEXT: sllv $4, $4, $15650; MIPS64R2-NEXT: .LBB14_1: # %entry5651; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=15652; MIPS64R2-NEXT: ll $7, 0($3)5653; MIPS64R2-NEXT: addu $8, $7, $45654; MIPS64R2-NEXT: and $8, $8, $55655; MIPS64R2-NEXT: and $9, $7, $65656; MIPS64R2-NEXT: or $9, $9, $85657; MIPS64R2-NEXT: sc $9, 0($3)5658; MIPS64R2-NEXT: beqz $9, .LBB14_15659; MIPS64R2-NEXT: nop5660; MIPS64R2-NEXT: # %bb.2: # %entry5661; MIPS64R2-NEXT: and $2, $7, $55662; MIPS64R2-NEXT: srlv $2, $2, $15663; MIPS64R2-NEXT: seh $2, $25664; MIPS64R2-NEXT: # %bb.3: # %entry5665; MIPS64R2-NEXT: jr $ra5666; MIPS64R2-NEXT: nop5667;5668; MIPS64R6-LABEL: AtomicLoadAdd16:5669; MIPS64R6: # %bb.0: # %entry5670; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd16)))5671; MIPS64R6-NEXT: daddu $1, $1, $255672; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd16)))5673; MIPS64R6-NEXT: ld $1, %got_disp(z)($1)5674; MIPS64R6-NEXT: daddiu $2, $zero, -45675; MIPS64R6-NEXT: and $3, $1, $25676; MIPS64R6-NEXT: andi $1, $1, 35677; MIPS64R6-NEXT: sll $1, $1, 35678; MIPS64R6-NEXT: ori $2, $zero, 655355679; MIPS64R6-NEXT: sllv $5, $2, $15680; MIPS64R6-NEXT: nor $6, $zero, $55681; MIPS64R6-NEXT: sllv $4, $4, $15682; MIPS64R6-NEXT: .LBB14_1: # %entry5683; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=15684; MIPS64R6-NEXT: ll $7, 0($3)5685; MIPS64R6-NEXT: addu $8, $7, $45686; MIPS64R6-NEXT: and $8, $8, $55687; MIPS64R6-NEXT: and $9, $7, $65688; MIPS64R6-NEXT: or $9, $9, $85689; MIPS64R6-NEXT: sc $9, 0($3)5690; MIPS64R6-NEXT: beqzc $9, .LBB14_15691; MIPS64R6-NEXT: # %bb.2: # %entry5692; MIPS64R6-NEXT: and $2, $7, $55693; MIPS64R6-NEXT: srlv $2, $2, $15694; MIPS64R6-NEXT: seh $2, $25695; MIPS64R6-NEXT: # %bb.3: # %entry5696; MIPS64R6-NEXT: jrc $ra5697;5698; MIPS64R6O0-LABEL: AtomicLoadAdd16:5699; MIPS64R6O0: # %bb.0: # %entry5700; MIPS64R6O0-NEXT: daddiu $sp, $sp, -165701; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd16)))5702; MIPS64R6O0-NEXT: daddu $1, $1, $255703; MIPS64R6O0-NEXT: daddiu $2, $1, %lo(%neg(%gp_rel(AtomicLoadAdd16)))5704; MIPS64R6O0-NEXT: move $1, $45705; MIPS64R6O0-NEXT: ld $2, %got_disp(z)($2)5706; MIPS64R6O0-NEXT: daddiu $3, $zero, -45707; MIPS64R6O0-NEXT: and $5, $2, $35708; MIPS64R6O0-NEXT: andi $2, $2, 35709; MIPS64R6O0-NEXT: xori $2, $2, 25710; MIPS64R6O0-NEXT: sll $9, $2, 35711; MIPS64R6O0-NEXT: ori $2, $zero, 655355712; MIPS64R6O0-NEXT: sllv $7, $2, $95713; MIPS64R6O0-NEXT: nor $8, $zero, $75714; MIPS64R6O0-NEXT: sllv $6, $1, $95715; MIPS64R6O0-NEXT: .LBB14_1: # %entry5716; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=15717; MIPS64R6O0-NEXT: ll $2, 0($5)5718; MIPS64R6O0-NEXT: addu $3, $2, $65719; MIPS64R6O0-NEXT: and $3, $3, $75720; MIPS64R6O0-NEXT: and $4, $2, $85721; MIPS64R6O0-NEXT: or $4, $4, $35722; MIPS64R6O0-NEXT: sc $4, 0($5)5723; MIPS64R6O0-NEXT: beqzc $4, .LBB14_15724; MIPS64R6O0-NEXT: # %bb.2: # %entry5725; MIPS64R6O0-NEXT: and $1, $2, $75726; MIPS64R6O0-NEXT: srlv $1, $1, $95727; MIPS64R6O0-NEXT: seh $1, $15728; MIPS64R6O0-NEXT: # %bb.3: # %entry5729; MIPS64R6O0-NEXT: sw $1, 12($sp) # 4-byte Folded Spill5730; MIPS64R6O0-NEXT: # %bb.4: # %entry5731; MIPS64R6O0-NEXT: lw $2, 12($sp) # 4-byte Folded Reload5732; MIPS64R6O0-NEXT: daddiu $sp, $sp, 165733; MIPS64R6O0-NEXT: jrc $ra5734;5735; MM32-LABEL: AtomicLoadAdd16:5736; MM32: # %bb.0: # %entry5737; MM32-NEXT: lui $2, %hi(_gp_disp)5738; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)5739; MM32-NEXT: addu $2, $2, $255740; MM32-NEXT: lw $1, %got(z)($2)5741; MM32-NEXT: addiu $2, $zero, -45742; MM32-NEXT: and $3, $1, $25743; MM32-NEXT: andi $1, $1, 35744; MM32-NEXT: sll $1, $1, 35745; MM32-NEXT: ori $2, $zero, 655355746; MM32-NEXT: sllv $5, $2, $15747; MM32-NEXT: nor $6, $zero, $55748; MM32-NEXT: sllv $4, $4, $15749; MM32-NEXT: $BB14_1: # %entry5750; MM32-NEXT: # =>This Inner Loop Header: Depth=15751; MM32-NEXT: ll $7, 0($3)5752; MM32-NEXT: addu $8, $7, $45753; MM32-NEXT: and $8, $8, $55754; MM32-NEXT: and $9, $7, $65755; MM32-NEXT: or $9, $9, $85756; MM32-NEXT: sc $9, 0($3)5757; MM32-NEXT: beqzc $9, $BB14_15758; MM32-NEXT: # %bb.2: # %entry5759; MM32-NEXT: and $2, $7, $55760; MM32-NEXT: srlv $2, $2, $15761; MM32-NEXT: seh $2, $25762; MM32-NEXT: # %bb.3: # %entry5763; MM32-NEXT: jrc $ra5764;5765; O1-LABEL: AtomicLoadAdd16:5766; O1: # %bb.0: # %entry5767; O1-NEXT: lui $2, %hi(_gp_disp)5768; O1-NEXT: addiu $2, $2, %lo(_gp_disp)5769; O1-NEXT: addu $1, $2, $255770; O1-NEXT: lw $1, %got(z)($1)5771; O1-NEXT: addiu $2, $zero, -45772; O1-NEXT: and $3, $1, $25773; O1-NEXT: andi $1, $1, 35774; O1-NEXT: sll $1, $1, 35775; O1-NEXT: ori $2, $zero, 655355776; O1-NEXT: sllv $5, $2, $15777; O1-NEXT: nor $6, $zero, $55778; O1-NEXT: sllv $4, $4, $15779; O1-NEXT: $BB14_1: # %entry5780; O1-NEXT: # =>This Inner Loop Header: Depth=15781; O1-NEXT: ll $7, 0($3)5782; O1-NEXT: addu $8, $7, $45783; O1-NEXT: and $8, $8, $55784; O1-NEXT: and $9, $7, $65785; O1-NEXT: or $9, $9, $85786; O1-NEXT: sc $9, 0($3)5787; O1-NEXT: beqz $9, $BB14_15788; O1-NEXT: nop5789; O1-NEXT: # %bb.2: # %entry5790; O1-NEXT: and $2, $7, $55791; O1-NEXT: srlv $2, $2, $15792; O1-NEXT: sll $2, $2, 165793; O1-NEXT: sra $2, $2, 165794; O1-NEXT: # %bb.3: # %entry5795; O1-NEXT: jr $ra5796; O1-NEXT: nop5797;5798; O2-LABEL: AtomicLoadAdd16:5799; O2: # %bb.0: # %entry5800; O2-NEXT: lui $2, %hi(_gp_disp)5801; O2-NEXT: addiu $2, $2, %lo(_gp_disp)5802; O2-NEXT: addu $1, $2, $255803; O2-NEXT: lw $1, %got(z)($1)5804; O2-NEXT: addiu $2, $zero, -45805; O2-NEXT: and $3, $1, $25806; O2-NEXT: andi $1, $1, 35807; O2-NEXT: sll $1, $1, 35808; O2-NEXT: ori $2, $zero, 655355809; O2-NEXT: sllv $5, $2, $15810; O2-NEXT: nor $6, $zero, $55811; O2-NEXT: sllv $4, $4, $15812; O2-NEXT: $BB14_1: # %entry5813; O2-NEXT: # =>This Inner Loop Header: Depth=15814; O2-NEXT: ll $7, 0($3)5815; O2-NEXT: addu $8, $7, $45816; O2-NEXT: and $8, $8, $55817; O2-NEXT: and $9, $7, $65818; O2-NEXT: or $9, $9, $85819; O2-NEXT: sc $9, 0($3)5820; O2-NEXT: beqz $9, $BB14_15821; O2-NEXT: nop5822; O2-NEXT: # %bb.2: # %entry5823; O2-NEXT: and $2, $7, $55824; O2-NEXT: srlv $2, $2, $15825; O2-NEXT: sll $2, $2, 165826; O2-NEXT: sra $2, $2, 165827; O2-NEXT: # %bb.3: # %entry5828; O2-NEXT: jr $ra5829; O2-NEXT: nop5830;5831; O3-LABEL: AtomicLoadAdd16:5832; O3: # %bb.0: # %entry5833; O3-NEXT: lui $2, %hi(_gp_disp)5834; O3-NEXT: addiu $2, $2, %lo(_gp_disp)5835; O3-NEXT: addu $1, $2, $255836; O3-NEXT: addiu $2, $zero, -45837; O3-NEXT: lw $1, %got(z)($1)5838; O3-NEXT: and $3, $1, $25839; O3-NEXT: andi $1, $1, 35840; O3-NEXT: ori $2, $zero, 655355841; O3-NEXT: sll $1, $1, 35842; O3-NEXT: sllv $5, $2, $15843; O3-NEXT: sllv $4, $4, $15844; O3-NEXT: nor $6, $zero, $55845; O3-NEXT: $BB14_1: # %entry5846; O3-NEXT: # =>This Inner Loop Header: Depth=15847; O3-NEXT: ll $7, 0($3)5848; O3-NEXT: addu $8, $7, $45849; O3-NEXT: and $8, $8, $55850; O3-NEXT: and $9, $7, $65851; O3-NEXT: or $9, $9, $85852; O3-NEXT: sc $9, 0($3)5853; O3-NEXT: beqz $9, $BB14_15854; O3-NEXT: nop5855; O3-NEXT: # %bb.2: # %entry5856; O3-NEXT: and $2, $7, $55857; O3-NEXT: srlv $2, $2, $15858; O3-NEXT: sll $2, $2, 165859; O3-NEXT: sra $2, $2, 165860; O3-NEXT: # %bb.3: # %entry5861; O3-NEXT: jr $ra5862; O3-NEXT: nop5863;5864; MIPS32EB-LABEL: AtomicLoadAdd16:5865; MIPS32EB: # %bb.0: # %entry5866; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)5867; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)5868; MIPS32EB-NEXT: addu $1, $2, $255869; MIPS32EB-NEXT: lw $1, %got(z)($1)5870; MIPS32EB-NEXT: addiu $2, $zero, -45871; MIPS32EB-NEXT: and $3, $1, $25872; MIPS32EB-NEXT: andi $1, $1, 35873; MIPS32EB-NEXT: xori $1, $1, 25874; MIPS32EB-NEXT: sll $1, $1, 35875; MIPS32EB-NEXT: ori $2, $zero, 655355876; MIPS32EB-NEXT: sllv $5, $2, $15877; MIPS32EB-NEXT: nor $6, $zero, $55878; MIPS32EB-NEXT: sllv $4, $4, $15879; MIPS32EB-NEXT: $BB14_1: # %entry5880; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=15881; MIPS32EB-NEXT: ll $7, 0($3)5882; MIPS32EB-NEXT: addu $8, $7, $45883; MIPS32EB-NEXT: and $8, $8, $55884; MIPS32EB-NEXT: and $9, $7, $65885; MIPS32EB-NEXT: or $9, $9, $85886; MIPS32EB-NEXT: sc $9, 0($3)5887; MIPS32EB-NEXT: beqz $9, $BB14_15888; MIPS32EB-NEXT: nop5889; MIPS32EB-NEXT: # %bb.2: # %entry5890; MIPS32EB-NEXT: and $2, $7, $55891; MIPS32EB-NEXT: srlv $2, $2, $15892; MIPS32EB-NEXT: sll $2, $2, 165893; MIPS32EB-NEXT: sra $2, $2, 165894; MIPS32EB-NEXT: # %bb.3: # %entry5895; MIPS32EB-NEXT: jr $ra5896; MIPS32EB-NEXT: nop5897entry:5898 %0 = atomicrmw add ptr @z, i16 %incr monotonic5899 ret i16 %05900 5901}5902 5903; Test that the i16 return value from cmpxchg is recognised as signed,5904; so that setCC doesn't end up comparing an unsigned value to a signed5905; value.5906; The rest of the functions here are testing the atomic expansion, so5907; we just match the end of the function.5908define {i16, i1} @foo(ptr %addr, i16 %l, i16 %r, i16 %new) {5909; MIPS32-LABEL: foo:5910; MIPS32: # %bb.0:5911; MIPS32-NEXT: addu $1, $5, $65912; MIPS32-NEXT: sync5913; MIPS32-NEXT: addiu $2, $zero, -45914; MIPS32-NEXT: and $3, $4, $25915; MIPS32-NEXT: andi $2, $4, 35916; MIPS32-NEXT: sll $4, $2, 35917; MIPS32-NEXT: ori $2, $zero, 655355918; MIPS32-NEXT: sllv $5, $2, $45919; MIPS32-NEXT: nor $6, $zero, $55920; MIPS32-NEXT: andi $2, $1, 655355921; MIPS32-NEXT: sllv $8, $2, $45922; MIPS32-NEXT: andi $2, $7, 655355923; MIPS32-NEXT: sllv $7, $2, $45924; MIPS32-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=15925; MIPS32-NEXT: ll $9, 0($3)5926; MIPS32-NEXT: and $10, $9, $55927; MIPS32-NEXT: bne $10, $8, $BB15_35928; MIPS32-NEXT: nop5929; MIPS32-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=15930; MIPS32-NEXT: and $9, $9, $65931; MIPS32-NEXT: or $9, $9, $75932; MIPS32-NEXT: sc $9, 0($3)5933; MIPS32-NEXT: beqz $9, $BB15_15934; MIPS32-NEXT: nop5935; MIPS32-NEXT: $BB15_3:5936; MIPS32-NEXT: srlv $2, $10, $45937; MIPS32-NEXT: sll $2, $2, 165938; MIPS32-NEXT: sra $2, $2, 165939; MIPS32-NEXT: # %bb.4:5940; MIPS32-NEXT: sll $1, $1, 165941; MIPS32-NEXT: sra $1, $1, 165942; MIPS32-NEXT: xor $1, $2, $15943; MIPS32-NEXT: sltiu $3, $1, 15944; MIPS32-NEXT: sync5945; MIPS32-NEXT: jr $ra5946; MIPS32-NEXT: nop5947;5948; MIPS32O0-LABEL: foo:5949; MIPS32O0: # %bb.0:5950; MIPS32O0-NEXT: addiu $sp, $sp, -85951; MIPS32O0-NEXT: .cfi_def_cfa_offset 85952; MIPS32O0-NEXT: move $1, $75953; MIPS32O0-NEXT: move $3, $45954; MIPS32O0-NEXT: addu $2, $5, $65955; MIPS32O0-NEXT: sw $2, 0($sp) # 4-byte Folded Spill5956; MIPS32O0-NEXT: sync5957; MIPS32O0-NEXT: addiu $4, $zero, -45958; MIPS32O0-NEXT: and $4, $3, $45959; MIPS32O0-NEXT: andi $3, $3, 35960; MIPS32O0-NEXT: sll $9, $3, 35961; MIPS32O0-NEXT: ori $3, $zero, 655355962; MIPS32O0-NEXT: sllv $5, $3, $95963; MIPS32O0-NEXT: nor $7, $zero, $55964; MIPS32O0-NEXT: andi $2, $2, 655355965; MIPS32O0-NEXT: sllv $6, $2, $95966; MIPS32O0-NEXT: andi $1, $1, 655355967; MIPS32O0-NEXT: sllv $8, $1, $95968; MIPS32O0-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=15969; MIPS32O0-NEXT: ll $2, 0($4)5970; MIPS32O0-NEXT: and $3, $2, $55971; MIPS32O0-NEXT: bne $3, $6, $BB15_35972; MIPS32O0-NEXT: nop5973; MIPS32O0-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=15974; MIPS32O0-NEXT: and $2, $2, $75975; MIPS32O0-NEXT: or $2, $2, $85976; MIPS32O0-NEXT: sc $2, 0($4)5977; MIPS32O0-NEXT: beqz $2, $BB15_15978; MIPS32O0-NEXT: nop5979; MIPS32O0-NEXT: $BB15_3:5980; MIPS32O0-NEXT: srlv $1, $3, $95981; MIPS32O0-NEXT: sll $1, $1, 165982; MIPS32O0-NEXT: sra $1, $1, 165983; MIPS32O0-NEXT: # %bb.4:5984; MIPS32O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill5985; MIPS32O0-NEXT: # %bb.5:5986; MIPS32O0-NEXT: lw $2, 4($sp) # 4-byte Folded Reload5987; MIPS32O0-NEXT: lw $1, 0($sp) # 4-byte Folded Reload5988; MIPS32O0-NEXT: sll $1, $1, 165989; MIPS32O0-NEXT: sra $1, $1, 165990; MIPS32O0-NEXT: xor $1, $2, $15991; MIPS32O0-NEXT: sltiu $3, $1, 15992; MIPS32O0-NEXT: sync5993; MIPS32O0-NEXT: addiu $sp, $sp, 85994; MIPS32O0-NEXT: jr $ra5995; MIPS32O0-NEXT: nop5996;5997; MIPS32R2-LABEL: foo:5998; MIPS32R2: # %bb.0:5999; MIPS32R2-NEXT: addu $1, $5, $66000; MIPS32R2-NEXT: sync6001; MIPS32R2-NEXT: addiu $2, $zero, -46002; MIPS32R2-NEXT: and $3, $4, $26003; MIPS32R2-NEXT: andi $2, $4, 36004; MIPS32R2-NEXT: sll $4, $2, 36005; MIPS32R2-NEXT: ori $2, $zero, 655356006; MIPS32R2-NEXT: sllv $5, $2, $46007; MIPS32R2-NEXT: nor $6, $zero, $56008; MIPS32R2-NEXT: andi $2, $1, 655356009; MIPS32R2-NEXT: sllv $8, $2, $46010; MIPS32R2-NEXT: andi $2, $7, 655356011; MIPS32R2-NEXT: sllv $7, $2, $46012; MIPS32R2-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=16013; MIPS32R2-NEXT: ll $9, 0($3)6014; MIPS32R2-NEXT: and $10, $9, $56015; MIPS32R2-NEXT: bne $10, $8, $BB15_36016; MIPS32R2-NEXT: nop6017; MIPS32R2-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=16018; MIPS32R2-NEXT: and $9, $9, $66019; MIPS32R2-NEXT: or $9, $9, $76020; MIPS32R2-NEXT: sc $9, 0($3)6021; MIPS32R2-NEXT: beqz $9, $BB15_16022; MIPS32R2-NEXT: nop6023; MIPS32R2-NEXT: $BB15_3:6024; MIPS32R2-NEXT: srlv $2, $10, $46025; MIPS32R2-NEXT: seh $2, $26026; MIPS32R2-NEXT: # %bb.4:6027; MIPS32R2-NEXT: seh $1, $16028; MIPS32R2-NEXT: xor $1, $2, $16029; MIPS32R2-NEXT: sltiu $3, $1, 16030; MIPS32R2-NEXT: sync6031; MIPS32R2-NEXT: jr $ra6032; MIPS32R2-NEXT: nop6033;6034; MIPS32R6-LABEL: foo:6035; MIPS32R6: # %bb.0:6036; MIPS32R6-NEXT: addu $1, $5, $66037; MIPS32R6-NEXT: sync6038; MIPS32R6-NEXT: addiu $2, $zero, -46039; MIPS32R6-NEXT: and $3, $4, $26040; MIPS32R6-NEXT: andi $2, $4, 36041; MIPS32R6-NEXT: sll $4, $2, 36042; MIPS32R6-NEXT: ori $2, $zero, 655356043; MIPS32R6-NEXT: sllv $5, $2, $46044; MIPS32R6-NEXT: nor $6, $zero, $56045; MIPS32R6-NEXT: andi $2, $1, 655356046; MIPS32R6-NEXT: sllv $8, $2, $46047; MIPS32R6-NEXT: andi $2, $7, 655356048; MIPS32R6-NEXT: sllv $7, $2, $46049; MIPS32R6-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=16050; MIPS32R6-NEXT: ll $9, 0($3)6051; MIPS32R6-NEXT: and $10, $9, $56052; MIPS32R6-NEXT: bnec $10, $8, $BB15_36053; MIPS32R6-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=16054; MIPS32R6-NEXT: and $9, $9, $66055; MIPS32R6-NEXT: or $9, $9, $76056; MIPS32R6-NEXT: sc $9, 0($3)6057; MIPS32R6-NEXT: beqzc $9, $BB15_16058; MIPS32R6-NEXT: $BB15_3:6059; MIPS32R6-NEXT: srlv $2, $10, $46060; MIPS32R6-NEXT: seh $2, $26061; MIPS32R6-NEXT: # %bb.4:6062; MIPS32R6-NEXT: seh $1, $16063; MIPS32R6-NEXT: xor $1, $2, $16064; MIPS32R6-NEXT: sltiu $3, $1, 16065; MIPS32R6-NEXT: sync6066; MIPS32R6-NEXT: jrc $ra6067;6068; MIPS32R6O0-LABEL: foo:6069; MIPS32R6O0: # %bb.0:6070; MIPS32R6O0-NEXT: addiu $sp, $sp, -86071; MIPS32R6O0-NEXT: .cfi_def_cfa_offset 86072; MIPS32R6O0-NEXT: move $1, $76073; MIPS32R6O0-NEXT: move $3, $46074; MIPS32R6O0-NEXT: # kill: def $a3 killed $at6075; MIPS32R6O0-NEXT: # kill: def $v0 killed $a26076; MIPS32R6O0-NEXT: # kill: def $v0 killed $a16077; MIPS32R6O0-NEXT: addu $2, $5, $66078; MIPS32R6O0-NEXT: sw $2, 0($sp) # 4-byte Folded Spill6079; MIPS32R6O0-NEXT: sync6080; MIPS32R6O0-NEXT: addiu $4, $zero, -46081; MIPS32R6O0-NEXT: and $4, $3, $46082; MIPS32R6O0-NEXT: andi $3, $3, 36083; MIPS32R6O0-NEXT: sll $9, $3, 36084; MIPS32R6O0-NEXT: ori $3, $zero, 655356085; MIPS32R6O0-NEXT: sllv $5, $3, $96086; MIPS32R6O0-NEXT: nor $7, $zero, $56087; MIPS32R6O0-NEXT: andi $2, $2, 655356088; MIPS32R6O0-NEXT: sllv $6, $2, $96089; MIPS32R6O0-NEXT: andi $1, $1, 655356090; MIPS32R6O0-NEXT: sllv $8, $1, $96091; MIPS32R6O0-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=16092; MIPS32R6O0-NEXT: ll $2, 0($4)6093; MIPS32R6O0-NEXT: and $3, $2, $56094; MIPS32R6O0-NEXT: bnec $3, $6, $BB15_36095; MIPS32R6O0-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=16096; MIPS32R6O0-NEXT: and $2, $2, $76097; MIPS32R6O0-NEXT: or $2, $2, $86098; MIPS32R6O0-NEXT: sc $2, 0($4)6099; MIPS32R6O0-NEXT: beqzc $2, $BB15_16100; MIPS32R6O0-NEXT: $BB15_3:6101; MIPS32R6O0-NEXT: srlv $1, $3, $96102; MIPS32R6O0-NEXT: seh $1, $16103; MIPS32R6O0-NEXT: # %bb.4:6104; MIPS32R6O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill6105; MIPS32R6O0-NEXT: # %bb.5:6106; MIPS32R6O0-NEXT: lw $2, 4($sp) # 4-byte Folded Reload6107; MIPS32R6O0-NEXT: lw $1, 0($sp) # 4-byte Folded Reload6108; MIPS32R6O0-NEXT: seh $1, $16109; MIPS32R6O0-NEXT: xor $1, $2, $16110; MIPS32R6O0-NEXT: sltiu $3, $1, 16111; MIPS32R6O0-NEXT: sync6112; MIPS32R6O0-NEXT: addiu $sp, $sp, 86113; MIPS32R6O0-NEXT: jrc $ra6114;6115; MIPS4-LABEL: foo:6116; MIPS4: # %bb.0:6117; MIPS4-NEXT: sll $1, $6, 06118; MIPS4-NEXT: sll $2, $5, 06119; MIPS4-NEXT: addu $1, $2, $16120; MIPS4-NEXT: sync6121; MIPS4-NEXT: sll $2, $7, 06122; MIPS4-NEXT: daddiu $3, $zero, -46123; MIPS4-NEXT: and $3, $4, $36124; MIPS4-NEXT: andi $4, $4, 36125; MIPS4-NEXT: sll $4, $4, 36126; MIPS4-NEXT: ori $5, $zero, 655356127; MIPS4-NEXT: sllv $5, $5, $46128; MIPS4-NEXT: nor $6, $zero, $56129; MIPS4-NEXT: andi $7, $1, 655356130; MIPS4-NEXT: sllv $7, $7, $46131; MIPS4-NEXT: andi $2, $2, 655356132; MIPS4-NEXT: sllv $8, $2, $46133; MIPS4-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=16134; MIPS4-NEXT: ll $9, 0($3)6135; MIPS4-NEXT: and $10, $9, $56136; MIPS4-NEXT: bne $10, $7, .LBB15_36137; MIPS4-NEXT: nop6138; MIPS4-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=16139; MIPS4-NEXT: and $9, $9, $66140; MIPS4-NEXT: or $9, $9, $86141; MIPS4-NEXT: sc $9, 0($3)6142; MIPS4-NEXT: beqz $9, .LBB15_16143; MIPS4-NEXT: nop6144; MIPS4-NEXT: .LBB15_3:6145; MIPS4-NEXT: srlv $2, $10, $46146; MIPS4-NEXT: sll $2, $2, 166147; MIPS4-NEXT: sra $2, $2, 166148; MIPS4-NEXT: # %bb.4:6149; MIPS4-NEXT: sll $1, $1, 166150; MIPS4-NEXT: sra $1, $1, 166151; MIPS4-NEXT: xor $1, $2, $16152; MIPS4-NEXT: sltiu $3, $1, 16153; MIPS4-NEXT: sync6154; MIPS4-NEXT: jr $ra6155; MIPS4-NEXT: nop6156;6157; MIPS64-LABEL: foo:6158; MIPS64: # %bb.0:6159; MIPS64-NEXT: sll $1, $6, 06160; MIPS64-NEXT: sll $2, $5, 06161; MIPS64-NEXT: addu $1, $2, $16162; MIPS64-NEXT: sync6163; MIPS64-NEXT: sll $2, $7, 06164; MIPS64-NEXT: daddiu $3, $zero, -46165; MIPS64-NEXT: and $3, $4, $36166; MIPS64-NEXT: andi $4, $4, 36167; MIPS64-NEXT: sll $4, $4, 36168; MIPS64-NEXT: ori $5, $zero, 655356169; MIPS64-NEXT: sllv $5, $5, $46170; MIPS64-NEXT: nor $6, $zero, $56171; MIPS64-NEXT: andi $7, $1, 655356172; MIPS64-NEXT: sllv $7, $7, $46173; MIPS64-NEXT: andi $2, $2, 655356174; MIPS64-NEXT: sllv $8, $2, $46175; MIPS64-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=16176; MIPS64-NEXT: ll $9, 0($3)6177; MIPS64-NEXT: and $10, $9, $56178; MIPS64-NEXT: bne $10, $7, .LBB15_36179; MIPS64-NEXT: nop6180; MIPS64-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=16181; MIPS64-NEXT: and $9, $9, $66182; MIPS64-NEXT: or $9, $9, $86183; MIPS64-NEXT: sc $9, 0($3)6184; MIPS64-NEXT: beqz $9, .LBB15_16185; MIPS64-NEXT: nop6186; MIPS64-NEXT: .LBB15_3:6187; MIPS64-NEXT: srlv $2, $10, $46188; MIPS64-NEXT: sll $2, $2, 166189; MIPS64-NEXT: sra $2, $2, 166190; MIPS64-NEXT: # %bb.4:6191; MIPS64-NEXT: sll $1, $1, 166192; MIPS64-NEXT: sra $1, $1, 166193; MIPS64-NEXT: xor $1, $2, $16194; MIPS64-NEXT: sltiu $3, $1, 16195; MIPS64-NEXT: sync6196; MIPS64-NEXT: jr $ra6197; MIPS64-NEXT: nop6198;6199; MIPS64R2-LABEL: foo:6200; MIPS64R2: # %bb.0:6201; MIPS64R2-NEXT: sll $1, $6, 06202; MIPS64R2-NEXT: sll $2, $5, 06203; MIPS64R2-NEXT: addu $1, $2, $16204; MIPS64R2-NEXT: sync6205; MIPS64R2-NEXT: sll $2, $7, 06206; MIPS64R2-NEXT: daddiu $3, $zero, -46207; MIPS64R2-NEXT: and $3, $4, $36208; MIPS64R2-NEXT: andi $4, $4, 36209; MIPS64R2-NEXT: sll $4, $4, 36210; MIPS64R2-NEXT: ori $5, $zero, 655356211; MIPS64R2-NEXT: sllv $5, $5, $46212; MIPS64R2-NEXT: nor $6, $zero, $56213; MIPS64R2-NEXT: andi $7, $1, 655356214; MIPS64R2-NEXT: sllv $7, $7, $46215; MIPS64R2-NEXT: andi $2, $2, 655356216; MIPS64R2-NEXT: sllv $8, $2, $46217; MIPS64R2-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=16218; MIPS64R2-NEXT: ll $9, 0($3)6219; MIPS64R2-NEXT: and $10, $9, $56220; MIPS64R2-NEXT: bne $10, $7, .LBB15_36221; MIPS64R2-NEXT: nop6222; MIPS64R2-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=16223; MIPS64R2-NEXT: and $9, $9, $66224; MIPS64R2-NEXT: or $9, $9, $86225; MIPS64R2-NEXT: sc $9, 0($3)6226; MIPS64R2-NEXT: beqz $9, .LBB15_16227; MIPS64R2-NEXT: nop6228; MIPS64R2-NEXT: .LBB15_3:6229; MIPS64R2-NEXT: srlv $2, $10, $46230; MIPS64R2-NEXT: seh $2, $26231; MIPS64R2-NEXT: # %bb.4:6232; MIPS64R2-NEXT: seh $1, $16233; MIPS64R2-NEXT: xor $1, $2, $16234; MIPS64R2-NEXT: sltiu $3, $1, 16235; MIPS64R2-NEXT: sync6236; MIPS64R2-NEXT: jr $ra6237; MIPS64R2-NEXT: nop6238;6239; MIPS64R6-LABEL: foo:6240; MIPS64R6: # %bb.0:6241; MIPS64R6-NEXT: sll $1, $6, 06242; MIPS64R6-NEXT: sll $2, $5, 06243; MIPS64R6-NEXT: addu $1, $2, $16244; MIPS64R6-NEXT: sync6245; MIPS64R6-NEXT: sll $2, $7, 06246; MIPS64R6-NEXT: daddiu $3, $zero, -46247; MIPS64R6-NEXT: and $3, $4, $36248; MIPS64R6-NEXT: andi $4, $4, 36249; MIPS64R6-NEXT: sll $4, $4, 36250; MIPS64R6-NEXT: ori $5, $zero, 655356251; MIPS64R6-NEXT: sllv $5, $5, $46252; MIPS64R6-NEXT: nor $6, $zero, $56253; MIPS64R6-NEXT: andi $7, $1, 655356254; MIPS64R6-NEXT: sllv $7, $7, $46255; MIPS64R6-NEXT: andi $2, $2, 655356256; MIPS64R6-NEXT: sllv $8, $2, $46257; MIPS64R6-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=16258; MIPS64R6-NEXT: ll $9, 0($3)6259; MIPS64R6-NEXT: and $10, $9, $56260; MIPS64R6-NEXT: bnec $10, $7, .LBB15_36261; MIPS64R6-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=16262; MIPS64R6-NEXT: and $9, $9, $66263; MIPS64R6-NEXT: or $9, $9, $86264; MIPS64R6-NEXT: sc $9, 0($3)6265; MIPS64R6-NEXT: beqzc $9, .LBB15_16266; MIPS64R6-NEXT: .LBB15_3:6267; MIPS64R6-NEXT: srlv $2, $10, $46268; MIPS64R6-NEXT: seh $2, $26269; MIPS64R6-NEXT: # %bb.4:6270; MIPS64R6-NEXT: seh $1, $16271; MIPS64R6-NEXT: xor $1, $2, $16272; MIPS64R6-NEXT: sltiu $3, $1, 16273; MIPS64R6-NEXT: sync6274; MIPS64R6-NEXT: jrc $ra6275;6276; MIPS64R6O0-LABEL: foo:6277; MIPS64R6O0: # %bb.0:6278; MIPS64R6O0-NEXT: daddiu $sp, $sp, -166279; MIPS64R6O0-NEXT: .cfi_def_cfa_offset 166280; MIPS64R6O0-NEXT: move $3, $46281; MIPS64R6O0-NEXT: move $1, $76282; MIPS64R6O0-NEXT: sll $1, $1, 06283; MIPS64R6O0-NEXT: move $2, $66284; MIPS64R6O0-NEXT: sll $4, $2, 06285; MIPS64R6O0-NEXT: move $2, $56286; MIPS64R6O0-NEXT: sll $2, $2, 06287; MIPS64R6O0-NEXT: addu $2, $2, $46288; MIPS64R6O0-NEXT: sw $2, 8($sp) # 4-byte Folded Spill6289; MIPS64R6O0-NEXT: sync6290; MIPS64R6O0-NEXT: daddiu $4, $zero, -46291; MIPS64R6O0-NEXT: and $4, $3, $46292; MIPS64R6O0-NEXT: andi $3, $3, 36293; MIPS64R6O0-NEXT: xori $3, $3, 26294; MIPS64R6O0-NEXT: sll $9, $3, 36295; MIPS64R6O0-NEXT: ori $3, $zero, 655356296; MIPS64R6O0-NEXT: sllv $5, $3, $96297; MIPS64R6O0-NEXT: nor $7, $zero, $56298; MIPS64R6O0-NEXT: andi $2, $2, 655356299; MIPS64R6O0-NEXT: sllv $6, $2, $96300; MIPS64R6O0-NEXT: andi $1, $1, 655356301; MIPS64R6O0-NEXT: sllv $8, $1, $96302; MIPS64R6O0-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=16303; MIPS64R6O0-NEXT: ll $2, 0($4)6304; MIPS64R6O0-NEXT: and $3, $2, $56305; MIPS64R6O0-NEXT: bnec $3, $6, .LBB15_36306; MIPS64R6O0-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=16307; MIPS64R6O0-NEXT: and $2, $2, $76308; MIPS64R6O0-NEXT: or $2, $2, $86309; MIPS64R6O0-NEXT: sc $2, 0($4)6310; MIPS64R6O0-NEXT: beqzc $2, .LBB15_16311; MIPS64R6O0-NEXT: .LBB15_3:6312; MIPS64R6O0-NEXT: srlv $1, $3, $96313; MIPS64R6O0-NEXT: seh $1, $16314; MIPS64R6O0-NEXT: # %bb.4:6315; MIPS64R6O0-NEXT: sw $1, 12($sp) # 4-byte Folded Spill6316; MIPS64R6O0-NEXT: # %bb.5:6317; MIPS64R6O0-NEXT: lw $2, 12($sp) # 4-byte Folded Reload6318; MIPS64R6O0-NEXT: lw $1, 8($sp) # 4-byte Folded Reload6319; MIPS64R6O0-NEXT: seh $1, $16320; MIPS64R6O0-NEXT: xor $1, $2, $16321; MIPS64R6O0-NEXT: sltiu $3, $1, 16322; MIPS64R6O0-NEXT: sync6323; MIPS64R6O0-NEXT: daddiu $sp, $sp, 166324; MIPS64R6O0-NEXT: jrc $ra6325;6326; MM32-LABEL: foo:6327; MM32: # %bb.0:6328; MM32-NEXT: addu16 $3, $5, $66329; MM32-NEXT: sync6330; MM32-NEXT: addiu $1, $zero, -46331; MM32-NEXT: and $1, $4, $16332; MM32-NEXT: andi $2, $4, 36333; MM32-NEXT: sll $4, $2, 36334; MM32-NEXT: ori $2, $zero, 655356335; MM32-NEXT: sllv $5, $2, $46336; MM32-NEXT: nor $6, $zero, $56337; MM32-NEXT: andi $2, $3, 655356338; MM32-NEXT: sllv $8, $2, $46339; MM32-NEXT: andi $2, $7, 655356340; MM32-NEXT: sllv $7, $2, $46341; MM32-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=16342; MM32-NEXT: ll $9, 0($1)6343; MM32-NEXT: and $10, $9, $56344; MM32-NEXT: bne $10, $8, $BB15_36345; MM32-NEXT: nop6346; MM32-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=16347; MM32-NEXT: and $9, $9, $66348; MM32-NEXT: or $9, $9, $76349; MM32-NEXT: sc $9, 0($1)6350; MM32-NEXT: beqzc $9, $BB15_16351; MM32-NEXT: $BB15_3:6352; MM32-NEXT: srlv $2, $10, $46353; MM32-NEXT: seh $2, $26354; MM32-NEXT: # %bb.4:6355; MM32-NEXT: seh $1, $36356; MM32-NEXT: xor $1, $2, $16357; MM32-NEXT: sltiu $3, $1, 16358; MM32-NEXT: sync6359; MM32-NEXT: jrc $ra6360;6361; O1-LABEL: foo:6362; O1: # %bb.0:6363; O1-NEXT: addu $1, $5, $66364; O1-NEXT: sync6365; O1-NEXT: addiu $2, $zero, -46366; O1-NEXT: and $3, $4, $26367; O1-NEXT: andi $2, $4, 36368; O1-NEXT: sll $4, $2, 36369; O1-NEXT: ori $2, $zero, 655356370; O1-NEXT: sllv $5, $2, $46371; O1-NEXT: nor $6, $zero, $56372; O1-NEXT: andi $2, $1, 655356373; O1-NEXT: sllv $8, $2, $46374; O1-NEXT: andi $2, $7, 655356375; O1-NEXT: sllv $7, $2, $46376; O1-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=16377; O1-NEXT: ll $9, 0($3)6378; O1-NEXT: and $10, $9, $56379; O1-NEXT: bne $10, $8, $BB15_36380; O1-NEXT: nop6381; O1-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=16382; O1-NEXT: and $9, $9, $66383; O1-NEXT: or $9, $9, $76384; O1-NEXT: sc $9, 0($3)6385; O1-NEXT: beqz $9, $BB15_16386; O1-NEXT: nop6387; O1-NEXT: $BB15_3:6388; O1-NEXT: srlv $2, $10, $46389; O1-NEXT: sll $2, $2, 166390; O1-NEXT: sra $2, $2, 166391; O1-NEXT: # %bb.4:6392; O1-NEXT: sll $1, $1, 166393; O1-NEXT: sra $1, $1, 166394; O1-NEXT: xor $1, $2, $16395; O1-NEXT: sltiu $3, $1, 16396; O1-NEXT: sync6397; O1-NEXT: jr $ra6398; O1-NEXT: nop6399;6400; O2-LABEL: foo:6401; O2: # %bb.0:6402; O2-NEXT: addu $1, $5, $66403; O2-NEXT: sync6404; O2-NEXT: addiu $2, $zero, -46405; O2-NEXT: and $3, $4, $26406; O2-NEXT: andi $2, $4, 36407; O2-NEXT: sll $4, $2, 36408; O2-NEXT: ori $2, $zero, 655356409; O2-NEXT: sllv $5, $2, $46410; O2-NEXT: nor $6, $zero, $56411; O2-NEXT: andi $2, $1, 655356412; O2-NEXT: sllv $8, $2, $46413; O2-NEXT: andi $2, $7, 655356414; O2-NEXT: sllv $7, $2, $46415; O2-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=16416; O2-NEXT: ll $9, 0($3)6417; O2-NEXT: and $10, $9, $56418; O2-NEXT: bne $10, $8, $BB15_36419; O2-NEXT: nop6420; O2-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=16421; O2-NEXT: and $9, $9, $66422; O2-NEXT: or $9, $9, $76423; O2-NEXT: sc $9, 0($3)6424; O2-NEXT: beqz $9, $BB15_16425; O2-NEXT: nop6426; O2-NEXT: $BB15_3:6427; O2-NEXT: srlv $2, $10, $46428; O2-NEXT: sll $2, $2, 166429; O2-NEXT: sra $2, $2, 166430; O2-NEXT: # %bb.4:6431; O2-NEXT: sll $1, $1, 166432; O2-NEXT: sra $1, $1, 166433; O2-NEXT: xor $1, $2, $16434; O2-NEXT: sltiu $3, $1, 16435; O2-NEXT: sync6436; O2-NEXT: jr $ra6437; O2-NEXT: nop6438;6439; O3-LABEL: foo:6440; O3: # %bb.0:6441; O3-NEXT: addiu $2, $zero, -46442; O3-NEXT: addu $1, $5, $66443; O3-NEXT: sync6444; O3-NEXT: and $3, $4, $26445; O3-NEXT: andi $2, $4, 36446; O3-NEXT: sll $4, $2, 36447; O3-NEXT: ori $2, $zero, 655356448; O3-NEXT: sllv $5, $2, $46449; O3-NEXT: andi $2, $1, 655356450; O3-NEXT: sll $1, $1, 166451; O3-NEXT: sllv $8, $2, $46452; O3-NEXT: andi $2, $7, 655356453; O3-NEXT: nor $6, $zero, $56454; O3-NEXT: sra $1, $1, 166455; O3-NEXT: sllv $7, $2, $46456; O3-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=16457; O3-NEXT: ll $9, 0($3)6458; O3-NEXT: and $10, $9, $56459; O3-NEXT: bne $10, $8, $BB15_36460; O3-NEXT: nop6461; O3-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=16462; O3-NEXT: and $9, $9, $66463; O3-NEXT: or $9, $9, $76464; O3-NEXT: sc $9, 0($3)6465; O3-NEXT: beqz $9, $BB15_16466; O3-NEXT: nop6467; O3-NEXT: $BB15_3:6468; O3-NEXT: srlv $2, $10, $46469; O3-NEXT: sll $2, $2, 166470; O3-NEXT: sra $2, $2, 166471; O3-NEXT: # %bb.4:6472; O3-NEXT: sync6473; O3-NEXT: xor $1, $2, $16474; O3-NEXT: jr $ra6475; O3-NEXT: sltiu $3, $1, 16476;6477; MIPS32EB-LABEL: foo:6478; MIPS32EB: # %bb.0:6479; MIPS32EB-NEXT: addu $1, $5, $66480; MIPS32EB-NEXT: sync6481; MIPS32EB-NEXT: addiu $2, $zero, -46482; MIPS32EB-NEXT: and $3, $4, $26483; MIPS32EB-NEXT: andi $2, $4, 36484; MIPS32EB-NEXT: xori $2, $2, 26485; MIPS32EB-NEXT: sll $4, $2, 36486; MIPS32EB-NEXT: ori $2, $zero, 655356487; MIPS32EB-NEXT: sllv $5, $2, $46488; MIPS32EB-NEXT: nor $6, $zero, $56489; MIPS32EB-NEXT: andi $2, $1, 655356490; MIPS32EB-NEXT: sllv $8, $2, $46491; MIPS32EB-NEXT: andi $2, $7, 655356492; MIPS32EB-NEXT: sllv $7, $2, $46493; MIPS32EB-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=16494; MIPS32EB-NEXT: ll $9, 0($3)6495; MIPS32EB-NEXT: and $10, $9, $56496; MIPS32EB-NEXT: bne $10, $8, $BB15_36497; MIPS32EB-NEXT: nop6498; MIPS32EB-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=16499; MIPS32EB-NEXT: and $9, $9, $66500; MIPS32EB-NEXT: or $9, $9, $76501; MIPS32EB-NEXT: sc $9, 0($3)6502; MIPS32EB-NEXT: beqz $9, $BB15_16503; MIPS32EB-NEXT: nop6504; MIPS32EB-NEXT: $BB15_3:6505; MIPS32EB-NEXT: srlv $2, $10, $46506; MIPS32EB-NEXT: sll $2, $2, 166507; MIPS32EB-NEXT: sra $2, $2, 166508; MIPS32EB-NEXT: # %bb.4:6509; MIPS32EB-NEXT: sll $1, $1, 166510; MIPS32EB-NEXT: sra $1, $1, 166511; MIPS32EB-NEXT: xor $1, $2, $16512; MIPS32EB-NEXT: sltiu $3, $1, 16513; MIPS32EB-NEXT: sync6514; MIPS32EB-NEXT: jr $ra6515; MIPS32EB-NEXT: nop6516 %desired = add i16 %l, %r6517 %res = cmpxchg ptr %addr, i16 %desired, i16 %new seq_cst seq_cst6518 ret {i16, i1} %res6519}6520 6521@countsint = common global i32 0, align 46522 6523define i32 @CheckSync(i32 signext %v) nounwind noinline {6524; MIPS32-LABEL: CheckSync:6525; MIPS32: # %bb.0: # %entry6526; MIPS32-NEXT: lui $2, %hi(_gp_disp)6527; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)6528; MIPS32-NEXT: addu $1, $2, $256529; MIPS32-NEXT: sync6530; MIPS32-NEXT: lw $1, %got(countsint)($1)6531; MIPS32-NEXT: $BB16_1: # %entry6532; MIPS32-NEXT: # =>This Inner Loop Header: Depth=16533; MIPS32-NEXT: ll $2, 0($1)6534; MIPS32-NEXT: addu $3, $2, $46535; MIPS32-NEXT: sc $3, 0($1)6536; MIPS32-NEXT: beqz $3, $BB16_16537; MIPS32-NEXT: nop6538; MIPS32-NEXT: # %bb.2: # %entry6539; MIPS32-NEXT: sync6540; MIPS32-NEXT: jr $ra6541; MIPS32-NEXT: nop6542;6543; MIPS32O0-LABEL: CheckSync:6544; MIPS32O0: # %bb.0: # %entry6545; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)6546; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)6547; MIPS32O0-NEXT: addu $1, $2, $256548; MIPS32O0-NEXT: sync6549; MIPS32O0-NEXT: lw $3, %got(countsint)($1)6550; MIPS32O0-NEXT: $BB16_1: # %entry6551; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=16552; MIPS32O0-NEXT: ll $2, 0($3)6553; MIPS32O0-NEXT: addu $1, $2, $46554; MIPS32O0-NEXT: sc $1, 0($3)6555; MIPS32O0-NEXT: beqz $1, $BB16_16556; MIPS32O0-NEXT: nop6557; MIPS32O0-NEXT: # %bb.2: # %entry6558; MIPS32O0-NEXT: sync6559; MIPS32O0-NEXT: jr $ra6560; MIPS32O0-NEXT: nop6561;6562; MIPS32R2-LABEL: CheckSync:6563; MIPS32R2: # %bb.0: # %entry6564; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)6565; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)6566; MIPS32R2-NEXT: addu $1, $2, $256567; MIPS32R2-NEXT: sync6568; MIPS32R2-NEXT: lw $1, %got(countsint)($1)6569; MIPS32R2-NEXT: $BB16_1: # %entry6570; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=16571; MIPS32R2-NEXT: ll $2, 0($1)6572; MIPS32R2-NEXT: addu $3, $2, $46573; MIPS32R2-NEXT: sc $3, 0($1)6574; MIPS32R2-NEXT: beqz $3, $BB16_16575; MIPS32R2-NEXT: nop6576; MIPS32R2-NEXT: # %bb.2: # %entry6577; MIPS32R2-NEXT: sync6578; MIPS32R2-NEXT: jr $ra6579; MIPS32R2-NEXT: nop6580;6581; MIPS32R6-LABEL: CheckSync:6582; MIPS32R6: # %bb.0: # %entry6583; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)6584; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)6585; MIPS32R6-NEXT: addu $1, $2, $256586; MIPS32R6-NEXT: sync6587; MIPS32R6-NEXT: lw $1, %got(countsint)($1)6588; MIPS32R6-NEXT: $BB16_1: # %entry6589; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=16590; MIPS32R6-NEXT: ll $2, 0($1)6591; MIPS32R6-NEXT: addu $3, $2, $46592; MIPS32R6-NEXT: sc $3, 0($1)6593; MIPS32R6-NEXT: beqzc $3, $BB16_16594; MIPS32R6-NEXT: # %bb.2: # %entry6595; MIPS32R6-NEXT: sync6596; MIPS32R6-NEXT: jrc $ra6597;6598; MIPS32R6O0-LABEL: CheckSync:6599; MIPS32R6O0: # %bb.0: # %entry6600; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)6601; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)6602; MIPS32R6O0-NEXT: addu $1, $2, $256603; MIPS32R6O0-NEXT: sync6604; MIPS32R6O0-NEXT: lw $3, %got(countsint)($1)6605; MIPS32R6O0-NEXT: $BB16_1: # %entry6606; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=16607; MIPS32R6O0-NEXT: ll $2, 0($3)6608; MIPS32R6O0-NEXT: addu $1, $2, $46609; MIPS32R6O0-NEXT: sc $1, 0($3)6610; MIPS32R6O0-NEXT: beqzc $1, $BB16_16611; MIPS32R6O0-NEXT: # %bb.2: # %entry6612; MIPS32R6O0-NEXT: sync6613; MIPS32R6O0-NEXT: jrc $ra6614;6615; MIPS4-LABEL: CheckSync:6616; MIPS4: # %bb.0: # %entry6617; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(CheckSync)))6618; MIPS4-NEXT: daddu $1, $1, $256619; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(CheckSync)))6620; MIPS4-NEXT: sync6621; MIPS4-NEXT: ld $1, %got_disp(countsint)($1)6622; MIPS4-NEXT: .LBB16_1: # %entry6623; MIPS4-NEXT: # =>This Inner Loop Header: Depth=16624; MIPS4-NEXT: ll $2, 0($1)6625; MIPS4-NEXT: addu $3, $2, $46626; MIPS4-NEXT: sc $3, 0($1)6627; MIPS4-NEXT: beqz $3, .LBB16_16628; MIPS4-NEXT: nop6629; MIPS4-NEXT: # %bb.2: # %entry6630; MIPS4-NEXT: sync6631; MIPS4-NEXT: jr $ra6632; MIPS4-NEXT: nop6633;6634; MIPS64-LABEL: CheckSync:6635; MIPS64: # %bb.0: # %entry6636; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(CheckSync)))6637; MIPS64-NEXT: daddu $1, $1, $256638; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(CheckSync)))6639; MIPS64-NEXT: sync6640; MIPS64-NEXT: ld $1, %got_disp(countsint)($1)6641; MIPS64-NEXT: .LBB16_1: # %entry6642; MIPS64-NEXT: # =>This Inner Loop Header: Depth=16643; MIPS64-NEXT: ll $2, 0($1)6644; MIPS64-NEXT: addu $3, $2, $46645; MIPS64-NEXT: sc $3, 0($1)6646; MIPS64-NEXT: beqz $3, .LBB16_16647; MIPS64-NEXT: nop6648; MIPS64-NEXT: # %bb.2: # %entry6649; MIPS64-NEXT: sync6650; MIPS64-NEXT: jr $ra6651; MIPS64-NEXT: nop6652;6653; MIPS64R2-LABEL: CheckSync:6654; MIPS64R2: # %bb.0: # %entry6655; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(CheckSync)))6656; MIPS64R2-NEXT: daddu $1, $1, $256657; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(CheckSync)))6658; MIPS64R2-NEXT: sync6659; MIPS64R2-NEXT: ld $1, %got_disp(countsint)($1)6660; MIPS64R2-NEXT: .LBB16_1: # %entry6661; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=16662; MIPS64R2-NEXT: ll $2, 0($1)6663; MIPS64R2-NEXT: addu $3, $2, $46664; MIPS64R2-NEXT: sc $3, 0($1)6665; MIPS64R2-NEXT: beqz $3, .LBB16_16666; MIPS64R2-NEXT: nop6667; MIPS64R2-NEXT: # %bb.2: # %entry6668; MIPS64R2-NEXT: sync6669; MIPS64R2-NEXT: jr $ra6670; MIPS64R2-NEXT: nop6671;6672; MIPS64R6-LABEL: CheckSync:6673; MIPS64R6: # %bb.0: # %entry6674; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(CheckSync)))6675; MIPS64R6-NEXT: daddu $1, $1, $256676; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(CheckSync)))6677; MIPS64R6-NEXT: sync6678; MIPS64R6-NEXT: ld $1, %got_disp(countsint)($1)6679; MIPS64R6-NEXT: .LBB16_1: # %entry6680; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=16681; MIPS64R6-NEXT: ll $2, 0($1)6682; MIPS64R6-NEXT: addu $3, $2, $46683; MIPS64R6-NEXT: sc $3, 0($1)6684; MIPS64R6-NEXT: beqzc $3, .LBB16_16685; MIPS64R6-NEXT: # %bb.2: # %entry6686; MIPS64R6-NEXT: sync6687; MIPS64R6-NEXT: jrc $ra6688;6689; MIPS64R6O0-LABEL: CheckSync:6690; MIPS64R6O0: # %bb.0: # %entry6691; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(CheckSync)))6692; MIPS64R6O0-NEXT: daddu $1, $1, $256693; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(CheckSync)))6694; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_646695; MIPS64R6O0-NEXT: sync6696; MIPS64R6O0-NEXT: ld $3, %got_disp(countsint)($1)6697; MIPS64R6O0-NEXT: .LBB16_1: # %entry6698; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=16699; MIPS64R6O0-NEXT: ll $2, 0($3)6700; MIPS64R6O0-NEXT: addu $1, $2, $46701; MIPS64R6O0-NEXT: sc $1, 0($3)6702; MIPS64R6O0-NEXT: beqzc $1, .LBB16_16703; MIPS64R6O0-NEXT: # %bb.2: # %entry6704; MIPS64R6O0-NEXT: sync6705; MIPS64R6O0-NEXT: jrc $ra6706;6707; MM32-LABEL: CheckSync:6708; MM32: # %bb.0: # %entry6709; MM32-NEXT: lui $2, %hi(_gp_disp)6710; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)6711; MM32-NEXT: addu $2, $2, $256712; MM32-NEXT: sync6713; MM32-NEXT: lw $1, %got(countsint)($2)6714; MM32-NEXT: $BB16_1: # %entry6715; MM32-NEXT: # =>This Inner Loop Header: Depth=16716; MM32-NEXT: ll $2, 0($1)6717; MM32-NEXT: addu16 $3, $2, $46718; MM32-NEXT: sc $3, 0($1)6719; MM32-NEXT: beqzc $3, $BB16_16720; MM32-NEXT: # %bb.2: # %entry6721; MM32-NEXT: sync6722; MM32-NEXT: jrc $ra6723;6724; O1-LABEL: CheckSync:6725; O1: # %bb.0: # %entry6726; O1-NEXT: lui $2, %hi(_gp_disp)6727; O1-NEXT: addiu $2, $2, %lo(_gp_disp)6728; O1-NEXT: addu $1, $2, $256729; O1-NEXT: sync6730; O1-NEXT: lw $1, %got(countsint)($1)6731; O1-NEXT: $BB16_1: # %entry6732; O1-NEXT: # =>This Inner Loop Header: Depth=16733; O1-NEXT: ll $2, 0($1)6734; O1-NEXT: addu $3, $2, $46735; O1-NEXT: sc $3, 0($1)6736; O1-NEXT: beqz $3, $BB16_16737; O1-NEXT: nop6738; O1-NEXT: # %bb.2: # %entry6739; O1-NEXT: sync6740; O1-NEXT: jr $ra6741; O1-NEXT: nop6742;6743; O2-LABEL: CheckSync:6744; O2: # %bb.0: # %entry6745; O2-NEXT: lui $2, %hi(_gp_disp)6746; O2-NEXT: addiu $2, $2, %lo(_gp_disp)6747; O2-NEXT: addu $1, $2, $256748; O2-NEXT: sync6749; O2-NEXT: lw $1, %got(countsint)($1)6750; O2-NEXT: $BB16_1: # %entry6751; O2-NEXT: # =>This Inner Loop Header: Depth=16752; O2-NEXT: ll $2, 0($1)6753; O2-NEXT: addu $3, $2, $46754; O2-NEXT: sc $3, 0($1)6755; O2-NEXT: beqz $3, $BB16_16756; O2-NEXT: nop6757; O2-NEXT: # %bb.2: # %entry6758; O2-NEXT: sync6759; O2-NEXT: jr $ra6760; O2-NEXT: nop6761;6762; O3-LABEL: CheckSync:6763; O3: # %bb.0: # %entry6764; O3-NEXT: lui $2, %hi(_gp_disp)6765; O3-NEXT: addiu $2, $2, %lo(_gp_disp)6766; O3-NEXT: addu $1, $2, $256767; O3-NEXT: sync6768; O3-NEXT: lw $1, %got(countsint)($1)6769; O3-NEXT: $BB16_1: # %entry6770; O3-NEXT: # =>This Inner Loop Header: Depth=16771; O3-NEXT: ll $2, 0($1)6772; O3-NEXT: addu $3, $2, $46773; O3-NEXT: sc $3, 0($1)6774; O3-NEXT: beqz $3, $BB16_16775; O3-NEXT: nop6776; O3-NEXT: # %bb.2: # %entry6777; O3-NEXT: sync6778; O3-NEXT: jr $ra6779; O3-NEXT: nop6780;6781; MIPS32EB-LABEL: CheckSync:6782; MIPS32EB: # %bb.0: # %entry6783; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)6784; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)6785; MIPS32EB-NEXT: addu $1, $2, $256786; MIPS32EB-NEXT: sync6787; MIPS32EB-NEXT: lw $1, %got(countsint)($1)6788; MIPS32EB-NEXT: $BB16_1: # %entry6789; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=16790; MIPS32EB-NEXT: ll $2, 0($1)6791; MIPS32EB-NEXT: addu $3, $2, $46792; MIPS32EB-NEXT: sc $3, 0($1)6793; MIPS32EB-NEXT: beqz $3, $BB16_16794; MIPS32EB-NEXT: nop6795; MIPS32EB-NEXT: # %bb.2: # %entry6796; MIPS32EB-NEXT: sync6797; MIPS32EB-NEXT: jr $ra6798; MIPS32EB-NEXT: nop6799entry:6800 %0 = atomicrmw add ptr @countsint, i32 %v seq_cst6801 ret i32 %06802}6803 6804; make sure that this assertion in6805; TwoAddressInstructionPass::TryInstructionTransform does not fail:6806;6807; line 1203: assert(TargetRegisterInfo::isVirtualRegister(regB) &&6808;6809; it failed when MipsDAGToDAGISel::ReplaceUsesWithZeroReg replaced an6810; operand of an atomic instruction with register $zero.6811@a = external global i326812 6813define i32 @zeroreg() nounwind {6814; MIPS32-LABEL: zeroreg:6815; MIPS32: # %bb.0: # %entry6816; MIPS32-NEXT: lui $2, %hi(_gp_disp)6817; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)6818; MIPS32-NEXT: addu $1, $2, $256819; MIPS32-NEXT: sync6820; MIPS32-NEXT: addiu $2, $zero, 06821; MIPS32-NEXT: addiu $3, $zero, 16822; MIPS32-NEXT: lw $1, %got(a)($1)6823; MIPS32-NEXT: $BB17_1: # %entry6824; MIPS32-NEXT: # =>This Inner Loop Header: Depth=16825; MIPS32-NEXT: ll $4, 0($1)6826; MIPS32-NEXT: bne $4, $3, $BB17_36827; MIPS32-NEXT: nop6828; MIPS32-NEXT: # %bb.2: # %entry6829; MIPS32-NEXT: # in Loop: Header=BB17_1 Depth=16830; MIPS32-NEXT: move $5, $26831; MIPS32-NEXT: sc $5, 0($1)6832; MIPS32-NEXT: beqz $5, $BB17_16833; MIPS32-NEXT: nop6834; MIPS32-NEXT: $BB17_3: # %entry6835; MIPS32-NEXT: xor $1, $4, $36836; MIPS32-NEXT: sltiu $2, $1, 16837; MIPS32-NEXT: sync6838; MIPS32-NEXT: jr $ra6839; MIPS32-NEXT: nop6840;6841; MIPS32O0-LABEL: zeroreg:6842; MIPS32O0: # %bb.0: # %entry6843; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)6844; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)6845; MIPS32O0-NEXT: addu $1, $2, $256846; MIPS32O0-NEXT: sync6847; MIPS32O0-NEXT: lw $4, %got(a)($1)6848; MIPS32O0-NEXT: addiu $6, $zero, 06849; MIPS32O0-NEXT: addiu $2, $zero, 16850; MIPS32O0-NEXT: move $5, $26851; MIPS32O0-NEXT: $BB17_1: # %entry6852; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=16853; MIPS32O0-NEXT: ll $1, 0($4)6854; MIPS32O0-NEXT: bne $1, $5, $BB17_36855; MIPS32O0-NEXT: nop6856; MIPS32O0-NEXT: # %bb.2: # %entry6857; MIPS32O0-NEXT: # in Loop: Header=BB17_1 Depth=16858; MIPS32O0-NEXT: move $3, $66859; MIPS32O0-NEXT: sc $3, 0($4)6860; MIPS32O0-NEXT: beqz $3, $BB17_16861; MIPS32O0-NEXT: nop6862; MIPS32O0-NEXT: $BB17_3: # %entry6863; MIPS32O0-NEXT: xor $2, $1, $26864; MIPS32O0-NEXT: sltiu $2, $2, 16865; MIPS32O0-NEXT: sync6866; MIPS32O0-NEXT: addiu $2, $zero, 16867; MIPS32O0-NEXT: xor $1, $1, $26868; MIPS32O0-NEXT: sltiu $1, $1, 16869; MIPS32O0-NEXT: andi $2, $1, 16870; MIPS32O0-NEXT: jr $ra6871; MIPS32O0-NEXT: nop6872;6873; MIPS32R2-LABEL: zeroreg:6874; MIPS32R2: # %bb.0: # %entry6875; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)6876; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)6877; MIPS32R2-NEXT: addu $1, $2, $256878; MIPS32R2-NEXT: sync6879; MIPS32R2-NEXT: addiu $2, $zero, 06880; MIPS32R2-NEXT: addiu $3, $zero, 16881; MIPS32R2-NEXT: lw $1, %got(a)($1)6882; MIPS32R2-NEXT: $BB17_1: # %entry6883; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=16884; MIPS32R2-NEXT: ll $4, 0($1)6885; MIPS32R2-NEXT: bne $4, $3, $BB17_36886; MIPS32R2-NEXT: nop6887; MIPS32R2-NEXT: # %bb.2: # %entry6888; MIPS32R2-NEXT: # in Loop: Header=BB17_1 Depth=16889; MIPS32R2-NEXT: move $5, $26890; MIPS32R2-NEXT: sc $5, 0($1)6891; MIPS32R2-NEXT: beqz $5, $BB17_16892; MIPS32R2-NEXT: nop6893; MIPS32R2-NEXT: $BB17_3: # %entry6894; MIPS32R2-NEXT: xor $1, $4, $36895; MIPS32R2-NEXT: sltiu $2, $1, 16896; MIPS32R2-NEXT: sync6897; MIPS32R2-NEXT: jr $ra6898; MIPS32R2-NEXT: nop6899;6900; MIPS32R6-LABEL: zeroreg:6901; MIPS32R6: # %bb.0: # %entry6902; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)6903; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)6904; MIPS32R6-NEXT: addu $1, $2, $256905; MIPS32R6-NEXT: sync6906; MIPS32R6-NEXT: addiu $2, $zero, 06907; MIPS32R6-NEXT: addiu $3, $zero, 16908; MIPS32R6-NEXT: lw $1, %got(a)($1)6909; MIPS32R6-NEXT: $BB17_1: # %entry6910; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=16911; MIPS32R6-NEXT: ll $4, 0($1)6912; MIPS32R6-NEXT: bnec $4, $3, $BB17_36913; MIPS32R6-NEXT: # %bb.2: # %entry6914; MIPS32R6-NEXT: # in Loop: Header=BB17_1 Depth=16915; MIPS32R6-NEXT: move $5, $26916; MIPS32R6-NEXT: sc $5, 0($1)6917; MIPS32R6-NEXT: beqzc $5, $BB17_16918; MIPS32R6-NEXT: $BB17_3: # %entry6919; MIPS32R6-NEXT: xor $1, $4, $36920; MIPS32R6-NEXT: sltiu $2, $1, 16921; MIPS32R6-NEXT: sync6922; MIPS32R6-NEXT: jrc $ra6923;6924; MIPS32R6O0-LABEL: zeroreg:6925; MIPS32R6O0: # %bb.0: # %entry6926; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)6927; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)6928; MIPS32R6O0-NEXT: addu $1, $2, $256929; MIPS32R6O0-NEXT: sync6930; MIPS32R6O0-NEXT: lw $4, %got(a)($1)6931; MIPS32R6O0-NEXT: addiu $6, $zero, 06932; MIPS32R6O0-NEXT: addiu $2, $zero, 16933; MIPS32R6O0-NEXT: move $5, $26934; MIPS32R6O0-NEXT: $BB17_1: # %entry6935; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=16936; MIPS32R6O0-NEXT: ll $1, 0($4)6937; MIPS32R6O0-NEXT: bnec $1, $5, $BB17_36938; MIPS32R6O0-NEXT: # %bb.2: # %entry6939; MIPS32R6O0-NEXT: # in Loop: Header=BB17_1 Depth=16940; MIPS32R6O0-NEXT: move $3, $66941; MIPS32R6O0-NEXT: sc $3, 0($4)6942; MIPS32R6O0-NEXT: beqzc $3, $BB17_16943; MIPS32R6O0-NEXT: $BB17_3: # %entry6944; MIPS32R6O0-NEXT: xor $1, $1, $26945; MIPS32R6O0-NEXT: sltiu $2, $1, 16946; MIPS32R6O0-NEXT: sync6947; MIPS32R6O0-NEXT: jrc $ra6948;6949; MIPS4-LABEL: zeroreg:6950; MIPS4: # %bb.0: # %entry6951; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(zeroreg)))6952; MIPS4-NEXT: daddu $1, $1, $256953; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(zeroreg)))6954; MIPS4-NEXT: sync6955; MIPS4-NEXT: addiu $2, $zero, 06956; MIPS4-NEXT: addiu $3, $zero, 16957; MIPS4-NEXT: ld $1, %got_disp(a)($1)6958; MIPS4-NEXT: .LBB17_1: # %entry6959; MIPS4-NEXT: # =>This Inner Loop Header: Depth=16960; MIPS4-NEXT: ll $4, 0($1)6961; MIPS4-NEXT: bne $4, $3, .LBB17_36962; MIPS4-NEXT: nop6963; MIPS4-NEXT: # %bb.2: # %entry6964; MIPS4-NEXT: # in Loop: Header=BB17_1 Depth=16965; MIPS4-NEXT: move $5, $26966; MIPS4-NEXT: sc $5, 0($1)6967; MIPS4-NEXT: beqz $5, .LBB17_16968; MIPS4-NEXT: nop6969; MIPS4-NEXT: .LBB17_3: # %entry6970; MIPS4-NEXT: xor $1, $4, $36971; MIPS4-NEXT: sltiu $2, $1, 16972; MIPS4-NEXT: sync6973; MIPS4-NEXT: jr $ra6974; MIPS4-NEXT: nop6975;6976; MIPS64-LABEL: zeroreg:6977; MIPS64: # %bb.0: # %entry6978; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(zeroreg)))6979; MIPS64-NEXT: daddu $1, $1, $256980; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(zeroreg)))6981; MIPS64-NEXT: sync6982; MIPS64-NEXT: addiu $2, $zero, 06983; MIPS64-NEXT: addiu $3, $zero, 16984; MIPS64-NEXT: ld $1, %got_disp(a)($1)6985; MIPS64-NEXT: .LBB17_1: # %entry6986; MIPS64-NEXT: # =>This Inner Loop Header: Depth=16987; MIPS64-NEXT: ll $4, 0($1)6988; MIPS64-NEXT: bne $4, $3, .LBB17_36989; MIPS64-NEXT: nop6990; MIPS64-NEXT: # %bb.2: # %entry6991; MIPS64-NEXT: # in Loop: Header=BB17_1 Depth=16992; MIPS64-NEXT: move $5, $26993; MIPS64-NEXT: sc $5, 0($1)6994; MIPS64-NEXT: beqz $5, .LBB17_16995; MIPS64-NEXT: nop6996; MIPS64-NEXT: .LBB17_3: # %entry6997; MIPS64-NEXT: xor $1, $4, $36998; MIPS64-NEXT: sltiu $2, $1, 16999; MIPS64-NEXT: sync7000; MIPS64-NEXT: jr $ra7001; MIPS64-NEXT: nop7002;7003; MIPS64R2-LABEL: zeroreg:7004; MIPS64R2: # %bb.0: # %entry7005; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(zeroreg)))7006; MIPS64R2-NEXT: daddu $1, $1, $257007; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(zeroreg)))7008; MIPS64R2-NEXT: sync7009; MIPS64R2-NEXT: addiu $2, $zero, 07010; MIPS64R2-NEXT: addiu $3, $zero, 17011; MIPS64R2-NEXT: ld $1, %got_disp(a)($1)7012; MIPS64R2-NEXT: .LBB17_1: # %entry7013; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=17014; MIPS64R2-NEXT: ll $4, 0($1)7015; MIPS64R2-NEXT: bne $4, $3, .LBB17_37016; MIPS64R2-NEXT: nop7017; MIPS64R2-NEXT: # %bb.2: # %entry7018; MIPS64R2-NEXT: # in Loop: Header=BB17_1 Depth=17019; MIPS64R2-NEXT: move $5, $27020; MIPS64R2-NEXT: sc $5, 0($1)7021; MIPS64R2-NEXT: beqz $5, .LBB17_17022; MIPS64R2-NEXT: nop7023; MIPS64R2-NEXT: .LBB17_3: # %entry7024; MIPS64R2-NEXT: xor $1, $4, $37025; MIPS64R2-NEXT: sltiu $2, $1, 17026; MIPS64R2-NEXT: sync7027; MIPS64R2-NEXT: jr $ra7028; MIPS64R2-NEXT: nop7029;7030; MIPS64R6-LABEL: zeroreg:7031; MIPS64R6: # %bb.0: # %entry7032; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(zeroreg)))7033; MIPS64R6-NEXT: daddu $1, $1, $257034; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(zeroreg)))7035; MIPS64R6-NEXT: sync7036; MIPS64R6-NEXT: addiu $2, $zero, 07037; MIPS64R6-NEXT: addiu $3, $zero, 17038; MIPS64R6-NEXT: ld $1, %got_disp(a)($1)7039; MIPS64R6-NEXT: .LBB17_1: # %entry7040; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=17041; MIPS64R6-NEXT: ll $4, 0($1)7042; MIPS64R6-NEXT: bnec $4, $3, .LBB17_37043; MIPS64R6-NEXT: # %bb.2: # %entry7044; MIPS64R6-NEXT: # in Loop: Header=BB17_1 Depth=17045; MIPS64R6-NEXT: move $5, $27046; MIPS64R6-NEXT: sc $5, 0($1)7047; MIPS64R6-NEXT: beqzc $5, .LBB17_17048; MIPS64R6-NEXT: .LBB17_3: # %entry7049; MIPS64R6-NEXT: xor $1, $4, $37050; MIPS64R6-NEXT: sltiu $2, $1, 17051; MIPS64R6-NEXT: sync7052; MIPS64R6-NEXT: jrc $ra7053;7054; MIPS64R6O0-LABEL: zeroreg:7055; MIPS64R6O0: # %bb.0: # %entry7056; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(zeroreg)))7057; MIPS64R6O0-NEXT: daddu $1, $1, $257058; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(zeroreg)))7059; MIPS64R6O0-NEXT: sync7060; MIPS64R6O0-NEXT: ld $4, %got_disp(a)($1)7061; MIPS64R6O0-NEXT: addiu $6, $zero, 07062; MIPS64R6O0-NEXT: addiu $2, $zero, 17063; MIPS64R6O0-NEXT: move $5, $27064; MIPS64R6O0-NEXT: .LBB17_1: # %entry7065; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=17066; MIPS64R6O0-NEXT: ll $1, 0($4)7067; MIPS64R6O0-NEXT: bnec $1, $5, .LBB17_37068; MIPS64R6O0-NEXT: # %bb.2: # %entry7069; MIPS64R6O0-NEXT: # in Loop: Header=BB17_1 Depth=17070; MIPS64R6O0-NEXT: move $3, $67071; MIPS64R6O0-NEXT: sc $3, 0($4)7072; MIPS64R6O0-NEXT: beqzc $3, .LBB17_17073; MIPS64R6O0-NEXT: .LBB17_3: # %entry7074; MIPS64R6O0-NEXT: xor $1, $1, $27075; MIPS64R6O0-NEXT: sltiu $2, $1, 17076; MIPS64R6O0-NEXT: sync7077; MIPS64R6O0-NEXT: jrc $ra7078;7079; MM32-LABEL: zeroreg:7080; MM32: # %bb.0: # %entry7081; MM32-NEXT: lui $2, %hi(_gp_disp)7082; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)7083; MM32-NEXT: addu $2, $2, $257084; MM32-NEXT: sync7085; MM32-NEXT: li16 $3, 07086; MM32-NEXT: li16 $4, 17087; MM32-NEXT: lw $1, %got(a)($2)7088; MM32-NEXT: $BB17_1: # %entry7089; MM32-NEXT: # =>This Inner Loop Header: Depth=17090; MM32-NEXT: ll $2, 0($1)7091; MM32-NEXT: bne $2, $4, $BB17_37092; MM32-NEXT: nop7093; MM32-NEXT: # %bb.2: # %entry7094; MM32-NEXT: # in Loop: Header=BB17_1 Depth=17095; MM32-NEXT: move $5, $37096; MM32-NEXT: sc $5, 0($1)7097; MM32-NEXT: beqzc $5, $BB17_17098; MM32-NEXT: $BB17_3: # %entry7099; MM32-NEXT: xor $1, $2, $47100; MM32-NEXT: sltiu $2, $1, 17101; MM32-NEXT: sync7102; MM32-NEXT: jrc $ra7103;7104; O1-LABEL: zeroreg:7105; O1: # %bb.0: # %entry7106; O1-NEXT: lui $2, %hi(_gp_disp)7107; O1-NEXT: addiu $2, $2, %lo(_gp_disp)7108; O1-NEXT: addu $1, $2, $257109; O1-NEXT: sync7110; O1-NEXT: addiu $2, $zero, 07111; O1-NEXT: addiu $3, $zero, 17112; O1-NEXT: lw $1, %got(a)($1)7113; O1-NEXT: $BB17_1: # %entry7114; O1-NEXT: # =>This Inner Loop Header: Depth=17115; O1-NEXT: ll $4, 0($1)7116; O1-NEXT: bne $4, $3, $BB17_37117; O1-NEXT: nop7118; O1-NEXT: # %bb.2: # %entry7119; O1-NEXT: # in Loop: Header=BB17_1 Depth=17120; O1-NEXT: move $5, $27121; O1-NEXT: sc $5, 0($1)7122; O1-NEXT: beqz $5, $BB17_17123; O1-NEXT: nop7124; O1-NEXT: $BB17_3: # %entry7125; O1-NEXT: xor $1, $4, $37126; O1-NEXT: sltiu $2, $1, 17127; O1-NEXT: sync7128; O1-NEXT: jr $ra7129; O1-NEXT: nop7130;7131; O2-LABEL: zeroreg:7132; O2: # %bb.0: # %entry7133; O2-NEXT: lui $2, %hi(_gp_disp)7134; O2-NEXT: addiu $2, $2, %lo(_gp_disp)7135; O2-NEXT: addu $1, $2, $257136; O2-NEXT: sync7137; O2-NEXT: addiu $2, $zero, 07138; O2-NEXT: addiu $3, $zero, 17139; O2-NEXT: lw $1, %got(a)($1)7140; O2-NEXT: $BB17_1: # %entry7141; O2-NEXT: # =>This Inner Loop Header: Depth=17142; O2-NEXT: ll $4, 0($1)7143; O2-NEXT: bne $4, $3, $BB17_37144; O2-NEXT: nop7145; O2-NEXT: # %bb.2: # %entry7146; O2-NEXT: # in Loop: Header=BB17_1 Depth=17147; O2-NEXT: move $5, $27148; O2-NEXT: sc $5, 0($1)7149; O2-NEXT: beqz $5, $BB17_17150; O2-NEXT: nop7151; O2-NEXT: $BB17_3: # %entry7152; O2-NEXT: xor $1, $4, $37153; O2-NEXT: sltiu $2, $1, 17154; O2-NEXT: sync7155; O2-NEXT: jr $ra7156; O2-NEXT: nop7157;7158; O3-LABEL: zeroreg:7159; O3: # %bb.0: # %entry7160; O3-NEXT: lui $2, %hi(_gp_disp)7161; O3-NEXT: addiu $2, $2, %lo(_gp_disp)7162; O3-NEXT: addu $1, $2, $257163; O3-NEXT: addiu $2, $zero, 07164; O3-NEXT: addiu $3, $zero, 17165; O3-NEXT: sync7166; O3-NEXT: lw $1, %got(a)($1)7167; O3-NEXT: $BB17_1: # %entry7168; O3-NEXT: # =>This Inner Loop Header: Depth=17169; O3-NEXT: ll $4, 0($1)7170; O3-NEXT: bne $4, $3, $BB17_37171; O3-NEXT: nop7172; O3-NEXT: # %bb.2: # %entry7173; O3-NEXT: # in Loop: Header=BB17_1 Depth=17174; O3-NEXT: move $5, $27175; O3-NEXT: sc $5, 0($1)7176; O3-NEXT: beqz $5, $BB17_17177; O3-NEXT: nop7178; O3-NEXT: $BB17_3: # %entry7179; O3-NEXT: sync7180; O3-NEXT: xor $1, $4, $37181; O3-NEXT: jr $ra7182; O3-NEXT: sltiu $2, $1, 17183;7184; MIPS32EB-LABEL: zeroreg:7185; MIPS32EB: # %bb.0: # %entry7186; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)7187; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)7188; MIPS32EB-NEXT: addu $1, $2, $257189; MIPS32EB-NEXT: sync7190; MIPS32EB-NEXT: addiu $2, $zero, 07191; MIPS32EB-NEXT: addiu $3, $zero, 17192; MIPS32EB-NEXT: lw $1, %got(a)($1)7193; MIPS32EB-NEXT: $BB17_1: # %entry7194; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=17195; MIPS32EB-NEXT: ll $4, 0($1)7196; MIPS32EB-NEXT: bne $4, $3, $BB17_37197; MIPS32EB-NEXT: nop7198; MIPS32EB-NEXT: # %bb.2: # %entry7199; MIPS32EB-NEXT: # in Loop: Header=BB17_1 Depth=17200; MIPS32EB-NEXT: move $5, $27201; MIPS32EB-NEXT: sc $5, 0($1)7202; MIPS32EB-NEXT: beqz $5, $BB17_17203; MIPS32EB-NEXT: nop7204; MIPS32EB-NEXT: $BB17_3: # %entry7205; MIPS32EB-NEXT: xor $1, $4, $37206; MIPS32EB-NEXT: sltiu $2, $1, 17207; MIPS32EB-NEXT: sync7208; MIPS32EB-NEXT: jr $ra7209; MIPS32EB-NEXT: nop7210entry:7211 %pair0 = cmpxchg ptr @a, i32 1, i32 0 seq_cst seq_cst7212 %0 = extractvalue { i32, i1 } %pair0, 07213 %1 = icmp eq i32 %0, 17214 %conv = zext i1 %1 to i327215 ret i32 %conv7216}7217 7218; Check that MIPS32R6 has the correct offset range.7219; FIXME: At the moment, we don't seem to do addr+offset for any atomic load/store.7220define i32 @AtomicLoadAdd32_OffGt9Bit(i32 signext %incr) nounwind {7221; MIPS32-LABEL: AtomicLoadAdd32_OffGt9Bit:7222; MIPS32: # %bb.0: # %entry7223; MIPS32-NEXT: lui $2, %hi(_gp_disp)7224; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp)7225; MIPS32-NEXT: addu $1, $2, $257226; MIPS32-NEXT: lw $1, %got(x)($1)7227; MIPS32-NEXT: addiu $1, $1, 10247228; MIPS32-NEXT: $BB18_1: # %entry7229; MIPS32-NEXT: # =>This Inner Loop Header: Depth=17230; MIPS32-NEXT: ll $2, 0($1)7231; MIPS32-NEXT: addu $3, $2, $47232; MIPS32-NEXT: sc $3, 0($1)7233; MIPS32-NEXT: beqz $3, $BB18_17234; MIPS32-NEXT: nop7235; MIPS32-NEXT: # %bb.2: # %entry7236; MIPS32-NEXT: jr $ra7237; MIPS32-NEXT: nop7238;7239; MIPS32O0-LABEL: AtomicLoadAdd32_OffGt9Bit:7240; MIPS32O0: # %bb.0: # %entry7241; MIPS32O0-NEXT: lui $2, %hi(_gp_disp)7242; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp)7243; MIPS32O0-NEXT: addu $1, $2, $257244; MIPS32O0-NEXT: lw $1, %got(x)($1)7245; MIPS32O0-NEXT: addiu $3, $1, 10247246; MIPS32O0-NEXT: $BB18_1: # %entry7247; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=17248; MIPS32O0-NEXT: ll $2, 0($3)7249; MIPS32O0-NEXT: addu $1, $2, $47250; MIPS32O0-NEXT: sc $1, 0($3)7251; MIPS32O0-NEXT: beqz $1, $BB18_17252; MIPS32O0-NEXT: nop7253; MIPS32O0-NEXT: # %bb.2: # %entry7254; MIPS32O0-NEXT: jr $ra7255; MIPS32O0-NEXT: nop7256;7257; MIPS32R2-LABEL: AtomicLoadAdd32_OffGt9Bit:7258; MIPS32R2: # %bb.0: # %entry7259; MIPS32R2-NEXT: lui $2, %hi(_gp_disp)7260; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp)7261; MIPS32R2-NEXT: addu $1, $2, $257262; MIPS32R2-NEXT: lw $1, %got(x)($1)7263; MIPS32R2-NEXT: addiu $1, $1, 10247264; MIPS32R2-NEXT: $BB18_1: # %entry7265; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=17266; MIPS32R2-NEXT: ll $2, 0($1)7267; MIPS32R2-NEXT: addu $3, $2, $47268; MIPS32R2-NEXT: sc $3, 0($1)7269; MIPS32R2-NEXT: beqz $3, $BB18_17270; MIPS32R2-NEXT: nop7271; MIPS32R2-NEXT: # %bb.2: # %entry7272; MIPS32R2-NEXT: jr $ra7273; MIPS32R2-NEXT: nop7274;7275; MIPS32R6-LABEL: AtomicLoadAdd32_OffGt9Bit:7276; MIPS32R6: # %bb.0: # %entry7277; MIPS32R6-NEXT: lui $2, %hi(_gp_disp)7278; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp)7279; MIPS32R6-NEXT: addu $1, $2, $257280; MIPS32R6-NEXT: lw $1, %got(x)($1)7281; MIPS32R6-NEXT: addiu $1, $1, 10247282; MIPS32R6-NEXT: $BB18_1: # %entry7283; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=17284; MIPS32R6-NEXT: ll $2, 0($1)7285; MIPS32R6-NEXT: addu $3, $2, $47286; MIPS32R6-NEXT: sc $3, 0($1)7287; MIPS32R6-NEXT: beqzc $3, $BB18_17288; MIPS32R6-NEXT: nop7289; MIPS32R6-NEXT: # %bb.2: # %entry7290; MIPS32R6-NEXT: jrc $ra7291;7292; MIPS32R6O0-LABEL: AtomicLoadAdd32_OffGt9Bit:7293; MIPS32R6O0: # %bb.0: # %entry7294; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp)7295; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp)7296; MIPS32R6O0-NEXT: addu $1, $2, $257297; MIPS32R6O0-NEXT: lw $1, %got(x)($1)7298; MIPS32R6O0-NEXT: addiu $3, $1, 10247299; MIPS32R6O0-NEXT: $BB18_1: # %entry7300; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=17301; MIPS32R6O0-NEXT: ll $2, 0($3)7302; MIPS32R6O0-NEXT: addu $1, $2, $47303; MIPS32R6O0-NEXT: sc $1, 0($3)7304; MIPS32R6O0-NEXT: beqzc $1, $BB18_17305; MIPS32R6O0-NEXT: nop7306; MIPS32R6O0-NEXT: # %bb.2: # %entry7307; MIPS32R6O0-NEXT: jrc $ra7308;7309; MIPS4-LABEL: AtomicLoadAdd32_OffGt9Bit:7310; MIPS4: # %bb.0: # %entry7311; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit)))7312; MIPS4-NEXT: daddu $1, $1, $257313; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit)))7314; MIPS4-NEXT: ld $1, %got_disp(x)($1)7315; MIPS4-NEXT: daddiu $1, $1, 10247316; MIPS4-NEXT: .LBB18_1: # %entry7317; MIPS4-NEXT: # =>This Inner Loop Header: Depth=17318; MIPS4-NEXT: ll $2, 0($1)7319; MIPS4-NEXT: addu $3, $2, $47320; MIPS4-NEXT: sc $3, 0($1)7321; MIPS4-NEXT: beqz $3, .LBB18_17322; MIPS4-NEXT: nop7323; MIPS4-NEXT: # %bb.2: # %entry7324; MIPS4-NEXT: jr $ra7325; MIPS4-NEXT: nop7326;7327; MIPS64-LABEL: AtomicLoadAdd32_OffGt9Bit:7328; MIPS64: # %bb.0: # %entry7329; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit)))7330; MIPS64-NEXT: daddu $1, $1, $257331; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit)))7332; MIPS64-NEXT: ld $1, %got_disp(x)($1)7333; MIPS64-NEXT: daddiu $1, $1, 10247334; MIPS64-NEXT: .LBB18_1: # %entry7335; MIPS64-NEXT: # =>This Inner Loop Header: Depth=17336; MIPS64-NEXT: ll $2, 0($1)7337; MIPS64-NEXT: addu $3, $2, $47338; MIPS64-NEXT: sc $3, 0($1)7339; MIPS64-NEXT: beqz $3, .LBB18_17340; MIPS64-NEXT: nop7341; MIPS64-NEXT: # %bb.2: # %entry7342; MIPS64-NEXT: jr $ra7343; MIPS64-NEXT: nop7344;7345; MIPS64R2-LABEL: AtomicLoadAdd32_OffGt9Bit:7346; MIPS64R2: # %bb.0: # %entry7347; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit)))7348; MIPS64R2-NEXT: daddu $1, $1, $257349; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit)))7350; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)7351; MIPS64R2-NEXT: daddiu $1, $1, 10247352; MIPS64R2-NEXT: .LBB18_1: # %entry7353; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=17354; MIPS64R2-NEXT: ll $2, 0($1)7355; MIPS64R2-NEXT: addu $3, $2, $47356; MIPS64R2-NEXT: sc $3, 0($1)7357; MIPS64R2-NEXT: beqz $3, .LBB18_17358; MIPS64R2-NEXT: nop7359; MIPS64R2-NEXT: # %bb.2: # %entry7360; MIPS64R2-NEXT: jr $ra7361; MIPS64R2-NEXT: nop7362;7363; MIPS64R6-LABEL: AtomicLoadAdd32_OffGt9Bit:7364; MIPS64R6: # %bb.0: # %entry7365; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit)))7366; MIPS64R6-NEXT: daddu $1, $1, $257367; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit)))7368; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)7369; MIPS64R6-NEXT: daddiu $1, $1, 10247370; MIPS64R6-NEXT: .LBB18_1: # %entry7371; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=17372; MIPS64R6-NEXT: ll $2, 0($1)7373; MIPS64R6-NEXT: addu $3, $2, $47374; MIPS64R6-NEXT: sc $3, 0($1)7375; MIPS64R6-NEXT: beqzc $3, .LBB18_17376; MIPS64R6-NEXT: nop7377; MIPS64R6-NEXT: # %bb.2: # %entry7378; MIPS64R6-NEXT: jrc $ra7379;7380; MIPS64R6O0-LABEL: AtomicLoadAdd32_OffGt9Bit:7381; MIPS64R6O0: # %bb.0: # %entry7382; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit)))7383; MIPS64R6O0-NEXT: daddu $1, $1, $257384; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit)))7385; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_647386; MIPS64R6O0-NEXT: ld $1, %got_disp(x)($1)7387; MIPS64R6O0-NEXT: daddiu $3, $1, 10247388; MIPS64R6O0-NEXT: .LBB18_1: # %entry7389; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=17390; MIPS64R6O0-NEXT: ll $2, 0($3)7391; MIPS64R6O0-NEXT: addu $1, $2, $47392; MIPS64R6O0-NEXT: sc $1, 0($3)7393; MIPS64R6O0-NEXT: beqzc $1, .LBB18_17394; MIPS64R6O0-NEXT: nop7395; MIPS64R6O0-NEXT: # %bb.2: # %entry7396; MIPS64R6O0-NEXT: jrc $ra7397;7398; MM32-LABEL: AtomicLoadAdd32_OffGt9Bit:7399; MM32: # %bb.0: # %entry7400; MM32-NEXT: lui $2, %hi(_gp_disp)7401; MM32-NEXT: addiu $2, $2, %lo(_gp_disp)7402; MM32-NEXT: addu $2, $2, $257403; MM32-NEXT: lw $1, %got(x)($2)7404; MM32-NEXT: addiu $1, $1, 10247405; MM32-NEXT: $BB18_1: # %entry7406; MM32-NEXT: # =>This Inner Loop Header: Depth=17407; MM32-NEXT: ll $2, 0($1)7408; MM32-NEXT: addu16 $3, $2, $47409; MM32-NEXT: sc $3, 0($1)7410; MM32-NEXT: beqzc $3, $BB18_17411; MM32-NEXT: # %bb.2: # %entry7412; MM32-NEXT: jrc $ra7413;7414; O1-LABEL: AtomicLoadAdd32_OffGt9Bit:7415; O1: # %bb.0: # %entry7416; O1-NEXT: lui $2, %hi(_gp_disp)7417; O1-NEXT: addiu $2, $2, %lo(_gp_disp)7418; O1-NEXT: addu $1, $2, $257419; O1-NEXT: lw $1, %got(x)($1)7420; O1-NEXT: addiu $1, $1, 10247421; O1-NEXT: $BB18_1: # %entry7422; O1-NEXT: # =>This Inner Loop Header: Depth=17423; O1-NEXT: ll $2, 0($1)7424; O1-NEXT: addu $3, $2, $47425; O1-NEXT: sc $3, 0($1)7426; O1-NEXT: beqz $3, $BB18_17427; O1-NEXT: nop7428; O1-NEXT: # %bb.2: # %entry7429; O1-NEXT: jr $ra7430; O1-NEXT: nop7431;7432; O2-LABEL: AtomicLoadAdd32_OffGt9Bit:7433; O2: # %bb.0: # %entry7434; O2-NEXT: lui $2, %hi(_gp_disp)7435; O2-NEXT: addiu $2, $2, %lo(_gp_disp)7436; O2-NEXT: addu $1, $2, $257437; O2-NEXT: lw $1, %got(x)($1)7438; O2-NEXT: addiu $1, $1, 10247439; O2-NEXT: $BB18_1: # %entry7440; O2-NEXT: # =>This Inner Loop Header: Depth=17441; O2-NEXT: ll $2, 0($1)7442; O2-NEXT: addu $3, $2, $47443; O2-NEXT: sc $3, 0($1)7444; O2-NEXT: beqz $3, $BB18_17445; O2-NEXT: nop7446; O2-NEXT: # %bb.2: # %entry7447; O2-NEXT: jr $ra7448; O2-NEXT: nop7449;7450; O3-LABEL: AtomicLoadAdd32_OffGt9Bit:7451; O3: # %bb.0: # %entry7452; O3-NEXT: lui $2, %hi(_gp_disp)7453; O3-NEXT: addiu $2, $2, %lo(_gp_disp)7454; O3-NEXT: addu $1, $2, $257455; O3-NEXT: lw $1, %got(x)($1)7456; O3-NEXT: addiu $1, $1, 10247457; O3-NEXT: $BB18_1: # %entry7458; O3-NEXT: # =>This Inner Loop Header: Depth=17459; O3-NEXT: ll $2, 0($1)7460; O3-NEXT: addu $3, $2, $47461; O3-NEXT: sc $3, 0($1)7462; O3-NEXT: beqz $3, $BB18_17463; O3-NEXT: nop7464; O3-NEXT: # %bb.2: # %entry7465; O3-NEXT: jr $ra7466; O3-NEXT: nop7467;7468; MIPS32EB-LABEL: AtomicLoadAdd32_OffGt9Bit:7469; MIPS32EB: # %bb.0: # %entry7470; MIPS32EB-NEXT: lui $2, %hi(_gp_disp)7471; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp)7472; MIPS32EB-NEXT: addu $1, $2, $257473; MIPS32EB-NEXT: lw $1, %got(x)($1)7474; MIPS32EB-NEXT: addiu $1, $1, 10247475; MIPS32EB-NEXT: $BB18_1: # %entry7476; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=17477; MIPS32EB-NEXT: ll $2, 0($1)7478; MIPS32EB-NEXT: addu $3, $2, $47479; MIPS32EB-NEXT: sc $3, 0($1)7480; MIPS32EB-NEXT: beqz $3, $BB18_17481; MIPS32EB-NEXT: nop7482; MIPS32EB-NEXT: # %bb.2: # %entry7483; MIPS32EB-NEXT: jr $ra7484; MIPS32EB-NEXT: nop7485entry:7486 %0 = atomicrmw add ptr getelementptr(i32, ptr @x, i32 256), i32 %incr monotonic7487 ret i32 %07488 7489}7490