1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=mipsel-unknown-linux-gnu --disable-machine-licm -mcpu=mips32 -relocation-model=pic -verify-machineinstrs < %s | \ 3; RUN: FileCheck %s -check-prefix=MIPS32 4; 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=MIPS32O0 6; RUN: llc -mtriple=mipsel-unknown-linux-gnu --disable-machine-licm -mcpu=mips32r2 -relocation-model=pic -verify-machineinstrs < %s | \ 7; RUN: FileCheck %s -check-prefix=MIPS32R2 8; RUN: llc -mtriple=mipsel-unknown-linux-gnu --disable-machine-licm -mcpu=mips32r6 -relocation-model=pic -verify-machineinstrs < %s | \ 9; RUN: FileCheck %s -check-prefix=MIPS32R6 10; 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=MIPS32R6O0 12; RUN: llc -mtriple=mips64el-unknown-linux-gnu --disable-machine-licm -mcpu=mips4 -relocation-model=pic -verify-machineinstrs < %s | \ 13; RUN: FileCheck %s -check-prefix=MIPS4 14; RUN: llc -mtriple=mips64el-unknown-linux-gnu --disable-machine-licm -mcpu=mips64 -relocation-model=pic -verify-machineinstrs < %s | \ 15; RUN: FileCheck %s -check-prefix=MIPS64 16; RUN: llc -mtriple=mips64el-unknown-linux-gnu --disable-machine-licm -mcpu=mips64r2 -relocation-model=pic -verify-machineinstrs < %s | \ 17; RUN: FileCheck %s -check-prefix=MIPS64R2 18; RUN: llc -mtriple=mips64el-unknown-linux-gnu --disable-machine-licm -mcpu=mips64r6 -relocation-model=pic -verify-machineinstrs < %s | \ 19; RUN: FileCheck %s -check-prefix=MIPS64R6 20; RUN: llc -mtriple=mips64-unknown-linux-gnu -O0 -mcpu=mips64r6 -relocation-model=pic -verify-machineinstrs -verify-machineinstrs < %s | \ 21; RUN: FileCheck %s -check-prefix=MIPS64R6O0 22; 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=MM32 24 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=O1 27; RUN: llc -mtriple=mipsel-unknown-linux-gnu -O2 --disable-machine-licm -mcpu=mips32 -relocation-model=pic -verify-machineinstrs < %s | FileCheck %s --check-prefix=O2 28; RUN: llc -mtriple=mipsel-unknown-linux-gnu -O3 --disable-machine-licm -mcpu=mips32 -relocation-model=pic -verify-machineinstrs < %s | FileCheck %s --check-prefix=O3 29 30; Keep one big-endian check so that we don't reduce testing, but don't add more 31; 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=MIPS32EB 34 35@x = common global i32 0, align 4 36 37define i32 @AtomicLoadAdd32(i32 signext %incr) nounwind { 38; MIPS32-LABEL: AtomicLoadAdd32: 39; MIPS32: # %bb.0: # %entry 40; MIPS32-NEXT: lui $2, %hi(_gp_disp) 41; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 42; MIPS32-NEXT: addu $1, $2, $25 43; MIPS32-NEXT: lw $1, %got(x)($1) 44; MIPS32-NEXT: $BB0_1: # %entry 45; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 46; MIPS32-NEXT: ll $2, 0($1) 47; MIPS32-NEXT: addu $3, $2, $4 48; MIPS32-NEXT: sc $3, 0($1) 49; MIPS32-NEXT: beqz $3, $BB0_1 50; MIPS32-NEXT: nop 51; MIPS32-NEXT: # %bb.2: # %entry 52; MIPS32-NEXT: jr $ra 53; MIPS32-NEXT: nop 54; 55; MIPS32O0-LABEL: AtomicLoadAdd32: 56; MIPS32O0: # %bb.0: # %entry 57; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 58; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 59; MIPS32O0-NEXT: addu $1, $2, $25 60; MIPS32O0-NEXT: lw $1, %got(x)($1) 61; MIPS32O0-NEXT: $BB0_1: # %entry 62; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 63; MIPS32O0-NEXT: ll $2, 0($1) 64; MIPS32O0-NEXT: addu $3, $2, $4 65; MIPS32O0-NEXT: sc $3, 0($1) 66; MIPS32O0-NEXT: beqz $3, $BB0_1 67; MIPS32O0-NEXT: nop 68; MIPS32O0-NEXT: # %bb.2: # %entry 69; MIPS32O0-NEXT: jr $ra 70; MIPS32O0-NEXT: nop 71; 72; MIPS32R2-LABEL: AtomicLoadAdd32: 73; MIPS32R2: # %bb.0: # %entry 74; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 75; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 76; MIPS32R2-NEXT: addu $1, $2, $25 77; MIPS32R2-NEXT: lw $1, %got(x)($1) 78; MIPS32R2-NEXT: $BB0_1: # %entry 79; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 80; MIPS32R2-NEXT: ll $2, 0($1) 81; MIPS32R2-NEXT: addu $3, $2, $4 82; MIPS32R2-NEXT: sc $3, 0($1) 83; MIPS32R2-NEXT: beqz $3, $BB0_1 84; MIPS32R2-NEXT: nop 85; MIPS32R2-NEXT: # %bb.2: # %entry 86; MIPS32R2-NEXT: jr $ra 87; MIPS32R2-NEXT: nop 88; 89; MIPS32R6-LABEL: AtomicLoadAdd32: 90; MIPS32R6: # %bb.0: # %entry 91; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 92; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 93; MIPS32R6-NEXT: addu $1, $2, $25 94; MIPS32R6-NEXT: lw $1, %got(x)($1) 95; MIPS32R6-NEXT: $BB0_1: # %entry 96; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 97; MIPS32R6-NEXT: ll $2, 0($1) 98; MIPS32R6-NEXT: addu $3, $2, $4 99; MIPS32R6-NEXT: sc $3, 0($1) 100; MIPS32R6-NEXT: beqzc $3, $BB0_1 101; MIPS32R6-NEXT: nop 102; MIPS32R6-NEXT: # %bb.2: # %entry 103; MIPS32R6-NEXT: jrc $ra 104; 105; MIPS32R6O0-LABEL: AtomicLoadAdd32: 106; MIPS32R6O0: # %bb.0: # %entry 107; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 108; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 109; MIPS32R6O0-NEXT: addu $1, $2, $25 110; MIPS32R6O0-NEXT: lw $1, %got(x)($1) 111; MIPS32R6O0-NEXT: $BB0_1: # %entry 112; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 113; MIPS32R6O0-NEXT: ll $2, 0($1) 114; MIPS32R6O0-NEXT: addu $3, $2, $4 115; MIPS32R6O0-NEXT: sc $3, 0($1) 116; MIPS32R6O0-NEXT: beqzc $3, $BB0_1 117; MIPS32R6O0-NEXT: nop 118; MIPS32R6O0-NEXT: # %bb.2: # %entry 119; MIPS32R6O0-NEXT: jrc $ra 120; 121; MIPS4-LABEL: AtomicLoadAdd32: 122; MIPS4: # %bb.0: # %entry 123; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32))) 124; MIPS4-NEXT: daddu $1, $1, $25 125; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32))) 126; MIPS4-NEXT: ld $1, %got_disp(x)($1) 127; MIPS4-NEXT: .LBB0_1: # %entry 128; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 129; MIPS4-NEXT: ll $2, 0($1) 130; MIPS4-NEXT: addu $3, $2, $4 131; MIPS4-NEXT: sc $3, 0($1) 132; MIPS4-NEXT: beqz $3, .LBB0_1 133; MIPS4-NEXT: nop 134; MIPS4-NEXT: # %bb.2: # %entry 135; MIPS4-NEXT: jr $ra 136; MIPS4-NEXT: nop 137; 138; MIPS64-LABEL: AtomicLoadAdd32: 139; MIPS64: # %bb.0: # %entry 140; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32))) 141; MIPS64-NEXT: daddu $1, $1, $25 142; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32))) 143; MIPS64-NEXT: ld $1, %got_disp(x)($1) 144; MIPS64-NEXT: .LBB0_1: # %entry 145; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 146; MIPS64-NEXT: ll $2, 0($1) 147; MIPS64-NEXT: addu $3, $2, $4 148; MIPS64-NEXT: sc $3, 0($1) 149; MIPS64-NEXT: beqz $3, .LBB0_1 150; MIPS64-NEXT: nop 151; MIPS64-NEXT: # %bb.2: # %entry 152; MIPS64-NEXT: jr $ra 153; MIPS64-NEXT: nop 154; 155; MIPS64R2-LABEL: AtomicLoadAdd32: 156; MIPS64R2: # %bb.0: # %entry 157; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32))) 158; MIPS64R2-NEXT: daddu $1, $1, $25 159; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32))) 160; MIPS64R2-NEXT: ld $1, %got_disp(x)($1) 161; MIPS64R2-NEXT: .LBB0_1: # %entry 162; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 163; MIPS64R2-NEXT: ll $2, 0($1) 164; MIPS64R2-NEXT: addu $3, $2, $4 165; MIPS64R2-NEXT: sc $3, 0($1) 166; MIPS64R2-NEXT: beqz $3, .LBB0_1 167; MIPS64R2-NEXT: nop 168; MIPS64R2-NEXT: # %bb.2: # %entry 169; MIPS64R2-NEXT: jr $ra 170; MIPS64R2-NEXT: nop 171; 172; MIPS64R6-LABEL: AtomicLoadAdd32: 173; MIPS64R6: # %bb.0: # %entry 174; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32))) 175; MIPS64R6-NEXT: daddu $1, $1, $25 176; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32))) 177; MIPS64R6-NEXT: ld $1, %got_disp(x)($1) 178; MIPS64R6-NEXT: .LBB0_1: # %entry 179; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 180; MIPS64R6-NEXT: ll $2, 0($1) 181; MIPS64R6-NEXT: addu $3, $2, $4 182; MIPS64R6-NEXT: sc $3, 0($1) 183; MIPS64R6-NEXT: beqzc $3, .LBB0_1 184; MIPS64R6-NEXT: nop 185; MIPS64R6-NEXT: # %bb.2: # %entry 186; MIPS64R6-NEXT: jrc $ra 187; 188; MIPS64R6O0-LABEL: AtomicLoadAdd32: 189; MIPS64R6O0: # %bb.0: # %entry 190; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32))) 191; MIPS64R6O0-NEXT: daddu $1, $1, $25 192; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32))) 193; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 194; MIPS64R6O0-NEXT: ld $1, %got_disp(x)($1) 195; MIPS64R6O0-NEXT: .LBB0_1: # %entry 196; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 197; MIPS64R6O0-NEXT: ll $2, 0($1) 198; MIPS64R6O0-NEXT: addu $3, $2, $4 199; MIPS64R6O0-NEXT: sc $3, 0($1) 200; MIPS64R6O0-NEXT: beqzc $3, .LBB0_1 201; MIPS64R6O0-NEXT: nop 202; MIPS64R6O0-NEXT: # %bb.2: # %entry 203; MIPS64R6O0-NEXT: jrc $ra 204; 205; MM32-LABEL: AtomicLoadAdd32: 206; MM32: # %bb.0: # %entry 207; MM32-NEXT: lui $2, %hi(_gp_disp) 208; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 209; MM32-NEXT: addu $2, $2, $25 210; MM32-NEXT: lw $1, %got(x)($2) 211; MM32-NEXT: $BB0_1: # %entry 212; MM32-NEXT: # =>This Inner Loop Header: Depth=1 213; MM32-NEXT: ll $2, 0($1) 214; MM32-NEXT: addu16 $3, $2, $4 215; MM32-NEXT: sc $3, 0($1) 216; MM32-NEXT: beqzc $3, $BB0_1 217; MM32-NEXT: # %bb.2: # %entry 218; MM32-NEXT: jrc $ra 219; 220; O1-LABEL: AtomicLoadAdd32: 221; O1: # %bb.0: # %entry 222; O1-NEXT: lui $2, %hi(_gp_disp) 223; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 224; O1-NEXT: addu $1, $2, $25 225; O1-NEXT: lw $1, %got(x)($1) 226; O1-NEXT: $BB0_1: # %entry 227; O1-NEXT: # =>This Inner Loop Header: Depth=1 228; O1-NEXT: ll $2, 0($1) 229; O1-NEXT: addu $3, $2, $4 230; O1-NEXT: sc $3, 0($1) 231; O1-NEXT: beqz $3, $BB0_1 232; O1-NEXT: nop 233; O1-NEXT: # %bb.2: # %entry 234; O1-NEXT: jr $ra 235; O1-NEXT: nop 236; 237; O2-LABEL: AtomicLoadAdd32: 238; O2: # %bb.0: # %entry 239; O2-NEXT: lui $2, %hi(_gp_disp) 240; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 241; O2-NEXT: addu $1, $2, $25 242; O2-NEXT: lw $1, %got(x)($1) 243; O2-NEXT: $BB0_1: # %entry 244; O2-NEXT: # =>This Inner Loop Header: Depth=1 245; O2-NEXT: ll $2, 0($1) 246; O2-NEXT: addu $3, $2, $4 247; O2-NEXT: sc $3, 0($1) 248; O2-NEXT: beqz $3, $BB0_1 249; O2-NEXT: nop 250; O2-NEXT: # %bb.2: # %entry 251; O2-NEXT: jr $ra 252; O2-NEXT: nop 253; 254; O3-LABEL: AtomicLoadAdd32: 255; O3: # %bb.0: # %entry 256; O3-NEXT: lui $2, %hi(_gp_disp) 257; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 258; O3-NEXT: addu $1, $2, $25 259; O3-NEXT: lw $1, %got(x)($1) 260; O3-NEXT: $BB0_1: # %entry 261; O3-NEXT: # =>This Inner Loop Header: Depth=1 262; O3-NEXT: ll $2, 0($1) 263; O3-NEXT: addu $3, $2, $4 264; O3-NEXT: sc $3, 0($1) 265; O3-NEXT: beqz $3, $BB0_1 266; O3-NEXT: nop 267; O3-NEXT: # %bb.2: # %entry 268; O3-NEXT: jr $ra 269; O3-NEXT: nop 270; 271; MIPS32EB-LABEL: AtomicLoadAdd32: 272; MIPS32EB: # %bb.0: # %entry 273; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 274; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 275; MIPS32EB-NEXT: addu $1, $2, $25 276; MIPS32EB-NEXT: lw $1, %got(x)($1) 277; MIPS32EB-NEXT: $BB0_1: # %entry 278; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 279; MIPS32EB-NEXT: ll $2, 0($1) 280; MIPS32EB-NEXT: addu $3, $2, $4 281; MIPS32EB-NEXT: sc $3, 0($1) 282; MIPS32EB-NEXT: beqz $3, $BB0_1 283; MIPS32EB-NEXT: nop 284; MIPS32EB-NEXT: # %bb.2: # %entry 285; MIPS32EB-NEXT: jr $ra 286; MIPS32EB-NEXT: nop 287entry: 288 %0 = atomicrmw add i32* @x, i32 %incr monotonic 289 ret i32 %0 290 291} 292 293define i32 @AtomicLoadSub32(i32 signext %incr) nounwind { 294; MIPS32-LABEL: AtomicLoadSub32: 295; MIPS32: # %bb.0: # %entry 296; MIPS32-NEXT: lui $2, %hi(_gp_disp) 297; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 298; MIPS32-NEXT: addu $1, $2, $25 299; MIPS32-NEXT: lw $1, %got(x)($1) 300; MIPS32-NEXT: $BB1_1: # %entry 301; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 302; MIPS32-NEXT: ll $2, 0($1) 303; MIPS32-NEXT: subu $3, $2, $4 304; MIPS32-NEXT: sc $3, 0($1) 305; MIPS32-NEXT: beqz $3, $BB1_1 306; MIPS32-NEXT: nop 307; MIPS32-NEXT: # %bb.2: # %entry 308; MIPS32-NEXT: jr $ra 309; MIPS32-NEXT: nop 310; 311; MIPS32O0-LABEL: AtomicLoadSub32: 312; MIPS32O0: # %bb.0: # %entry 313; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 314; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 315; MIPS32O0-NEXT: addu $1, $2, $25 316; MIPS32O0-NEXT: lw $1, %got(x)($1) 317; MIPS32O0-NEXT: $BB1_1: # %entry 318; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 319; MIPS32O0-NEXT: ll $2, 0($1) 320; MIPS32O0-NEXT: subu $3, $2, $4 321; MIPS32O0-NEXT: sc $3, 0($1) 322; MIPS32O0-NEXT: beqz $3, $BB1_1 323; MIPS32O0-NEXT: nop 324; MIPS32O0-NEXT: # %bb.2: # %entry 325; MIPS32O0-NEXT: jr $ra 326; MIPS32O0-NEXT: nop 327; 328; MIPS32R2-LABEL: AtomicLoadSub32: 329; MIPS32R2: # %bb.0: # %entry 330; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 331; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 332; MIPS32R2-NEXT: addu $1, $2, $25 333; MIPS32R2-NEXT: lw $1, %got(x)($1) 334; MIPS32R2-NEXT: $BB1_1: # %entry 335; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 336; MIPS32R2-NEXT: ll $2, 0($1) 337; MIPS32R2-NEXT: subu $3, $2, $4 338; MIPS32R2-NEXT: sc $3, 0($1) 339; MIPS32R2-NEXT: beqz $3, $BB1_1 340; MIPS32R2-NEXT: nop 341; MIPS32R2-NEXT: # %bb.2: # %entry 342; MIPS32R2-NEXT: jr $ra 343; MIPS32R2-NEXT: nop 344; 345; MIPS32R6-LABEL: AtomicLoadSub32: 346; MIPS32R6: # %bb.0: # %entry 347; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 348; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 349; MIPS32R6-NEXT: addu $1, $2, $25 350; MIPS32R6-NEXT: lw $1, %got(x)($1) 351; MIPS32R6-NEXT: $BB1_1: # %entry 352; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 353; MIPS32R6-NEXT: ll $2, 0($1) 354; MIPS32R6-NEXT: subu $3, $2, $4 355; MIPS32R6-NEXT: sc $3, 0($1) 356; MIPS32R6-NEXT: beqzc $3, $BB1_1 357; MIPS32R6-NEXT: nop 358; MIPS32R6-NEXT: # %bb.2: # %entry 359; MIPS32R6-NEXT: jrc $ra 360; 361; MIPS32R6O0-LABEL: AtomicLoadSub32: 362; MIPS32R6O0: # %bb.0: # %entry 363; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 364; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 365; MIPS32R6O0-NEXT: addu $1, $2, $25 366; MIPS32R6O0-NEXT: lw $1, %got(x)($1) 367; MIPS32R6O0-NEXT: $BB1_1: # %entry 368; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 369; MIPS32R6O0-NEXT: ll $2, 0($1) 370; MIPS32R6O0-NEXT: subu $3, $2, $4 371; MIPS32R6O0-NEXT: sc $3, 0($1) 372; MIPS32R6O0-NEXT: beqzc $3, $BB1_1 373; MIPS32R6O0-NEXT: nop 374; MIPS32R6O0-NEXT: # %bb.2: # %entry 375; MIPS32R6O0-NEXT: jrc $ra 376; 377; MIPS4-LABEL: AtomicLoadSub32: 378; MIPS4: # %bb.0: # %entry 379; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub32))) 380; MIPS4-NEXT: daddu $1, $1, $25 381; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub32))) 382; MIPS4-NEXT: ld $1, %got_disp(x)($1) 383; MIPS4-NEXT: .LBB1_1: # %entry 384; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 385; MIPS4-NEXT: ll $2, 0($1) 386; MIPS4-NEXT: subu $3, $2, $4 387; MIPS4-NEXT: sc $3, 0($1) 388; MIPS4-NEXT: beqz $3, .LBB1_1 389; MIPS4-NEXT: nop 390; MIPS4-NEXT: # %bb.2: # %entry 391; MIPS4-NEXT: jr $ra 392; MIPS4-NEXT: nop 393; 394; MIPS64-LABEL: AtomicLoadSub32: 395; MIPS64: # %bb.0: # %entry 396; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub32))) 397; MIPS64-NEXT: daddu $1, $1, $25 398; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub32))) 399; MIPS64-NEXT: ld $1, %got_disp(x)($1) 400; MIPS64-NEXT: .LBB1_1: # %entry 401; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 402; MIPS64-NEXT: ll $2, 0($1) 403; MIPS64-NEXT: subu $3, $2, $4 404; MIPS64-NEXT: sc $3, 0($1) 405; MIPS64-NEXT: beqz $3, .LBB1_1 406; MIPS64-NEXT: nop 407; MIPS64-NEXT: # %bb.2: # %entry 408; MIPS64-NEXT: jr $ra 409; MIPS64-NEXT: nop 410; 411; MIPS64R2-LABEL: AtomicLoadSub32: 412; MIPS64R2: # %bb.0: # %entry 413; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub32))) 414; MIPS64R2-NEXT: daddu $1, $1, $25 415; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub32))) 416; MIPS64R2-NEXT: ld $1, %got_disp(x)($1) 417; MIPS64R2-NEXT: .LBB1_1: # %entry 418; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 419; MIPS64R2-NEXT: ll $2, 0($1) 420; MIPS64R2-NEXT: subu $3, $2, $4 421; MIPS64R2-NEXT: sc $3, 0($1) 422; MIPS64R2-NEXT: beqz $3, .LBB1_1 423; MIPS64R2-NEXT: nop 424; MIPS64R2-NEXT: # %bb.2: # %entry 425; MIPS64R2-NEXT: jr $ra 426; MIPS64R2-NEXT: nop 427; 428; MIPS64R6-LABEL: AtomicLoadSub32: 429; MIPS64R6: # %bb.0: # %entry 430; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub32))) 431; MIPS64R6-NEXT: daddu $1, $1, $25 432; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub32))) 433; MIPS64R6-NEXT: ld $1, %got_disp(x)($1) 434; MIPS64R6-NEXT: .LBB1_1: # %entry 435; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 436; MIPS64R6-NEXT: ll $2, 0($1) 437; MIPS64R6-NEXT: subu $3, $2, $4 438; MIPS64R6-NEXT: sc $3, 0($1) 439; MIPS64R6-NEXT: beqzc $3, .LBB1_1 440; MIPS64R6-NEXT: nop 441; MIPS64R6-NEXT: # %bb.2: # %entry 442; MIPS64R6-NEXT: jrc $ra 443; 444; MIPS64R6O0-LABEL: AtomicLoadSub32: 445; MIPS64R6O0: # %bb.0: # %entry 446; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub32))) 447; MIPS64R6O0-NEXT: daddu $1, $1, $25 448; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub32))) 449; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 450; MIPS64R6O0-NEXT: ld $1, %got_disp(x)($1) 451; MIPS64R6O0-NEXT: .LBB1_1: # %entry 452; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 453; MIPS64R6O0-NEXT: ll $2, 0($1) 454; MIPS64R6O0-NEXT: subu $3, $2, $4 455; MIPS64R6O0-NEXT: sc $3, 0($1) 456; MIPS64R6O0-NEXT: beqzc $3, .LBB1_1 457; MIPS64R6O0-NEXT: nop 458; MIPS64R6O0-NEXT: # %bb.2: # %entry 459; MIPS64R6O0-NEXT: jrc $ra 460; 461; MM32-LABEL: AtomicLoadSub32: 462; MM32: # %bb.0: # %entry 463; MM32-NEXT: lui $2, %hi(_gp_disp) 464; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 465; MM32-NEXT: addu $2, $2, $25 466; MM32-NEXT: lw $1, %got(x)($2) 467; MM32-NEXT: $BB1_1: # %entry 468; MM32-NEXT: # =>This Inner Loop Header: Depth=1 469; MM32-NEXT: ll $2, 0($1) 470; MM32-NEXT: subu16 $3, $2, $4 471; MM32-NEXT: sc $3, 0($1) 472; MM32-NEXT: beqzc $3, $BB1_1 473; MM32-NEXT: # %bb.2: # %entry 474; MM32-NEXT: jrc $ra 475; 476; O1-LABEL: AtomicLoadSub32: 477; O1: # %bb.0: # %entry 478; O1-NEXT: lui $2, %hi(_gp_disp) 479; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 480; O1-NEXT: addu $1, $2, $25 481; O1-NEXT: lw $1, %got(x)($1) 482; O1-NEXT: $BB1_1: # %entry 483; O1-NEXT: # =>This Inner Loop Header: Depth=1 484; O1-NEXT: ll $2, 0($1) 485; O1-NEXT: subu $3, $2, $4 486; O1-NEXT: sc $3, 0($1) 487; O1-NEXT: beqz $3, $BB1_1 488; O1-NEXT: nop 489; O1-NEXT: # %bb.2: # %entry 490; O1-NEXT: jr $ra 491; O1-NEXT: nop 492; 493; O2-LABEL: AtomicLoadSub32: 494; O2: # %bb.0: # %entry 495; O2-NEXT: lui $2, %hi(_gp_disp) 496; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 497; O2-NEXT: addu $1, $2, $25 498; O2-NEXT: lw $1, %got(x)($1) 499; O2-NEXT: $BB1_1: # %entry 500; O2-NEXT: # =>This Inner Loop Header: Depth=1 501; O2-NEXT: ll $2, 0($1) 502; O2-NEXT: subu $3, $2, $4 503; O2-NEXT: sc $3, 0($1) 504; O2-NEXT: beqz $3, $BB1_1 505; O2-NEXT: nop 506; O2-NEXT: # %bb.2: # %entry 507; O2-NEXT: jr $ra 508; O2-NEXT: nop 509; 510; O3-LABEL: AtomicLoadSub32: 511; O3: # %bb.0: # %entry 512; O3-NEXT: lui $2, %hi(_gp_disp) 513; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 514; O3-NEXT: addu $1, $2, $25 515; O3-NEXT: lw $1, %got(x)($1) 516; O3-NEXT: $BB1_1: # %entry 517; O3-NEXT: # =>This Inner Loop Header: Depth=1 518; O3-NEXT: ll $2, 0($1) 519; O3-NEXT: subu $3, $2, $4 520; O3-NEXT: sc $3, 0($1) 521; O3-NEXT: beqz $3, $BB1_1 522; O3-NEXT: nop 523; O3-NEXT: # %bb.2: # %entry 524; O3-NEXT: jr $ra 525; O3-NEXT: nop 526; 527; MIPS32EB-LABEL: AtomicLoadSub32: 528; MIPS32EB: # %bb.0: # %entry 529; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 530; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 531; MIPS32EB-NEXT: addu $1, $2, $25 532; MIPS32EB-NEXT: lw $1, %got(x)($1) 533; MIPS32EB-NEXT: $BB1_1: # %entry 534; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 535; MIPS32EB-NEXT: ll $2, 0($1) 536; MIPS32EB-NEXT: subu $3, $2, $4 537; MIPS32EB-NEXT: sc $3, 0($1) 538; MIPS32EB-NEXT: beqz $3, $BB1_1 539; MIPS32EB-NEXT: nop 540; MIPS32EB-NEXT: # %bb.2: # %entry 541; MIPS32EB-NEXT: jr $ra 542; MIPS32EB-NEXT: nop 543entry: 544 %0 = atomicrmw sub i32* @x, i32 %incr monotonic 545 ret i32 %0 546 547} 548 549define i32 @AtomicLoadXor32(i32 signext %incr) nounwind { 550; MIPS32-LABEL: AtomicLoadXor32: 551; MIPS32: # %bb.0: # %entry 552; MIPS32-NEXT: lui $2, %hi(_gp_disp) 553; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 554; MIPS32-NEXT: addu $1, $2, $25 555; MIPS32-NEXT: lw $1, %got(x)($1) 556; MIPS32-NEXT: $BB2_1: # %entry 557; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 558; MIPS32-NEXT: ll $2, 0($1) 559; MIPS32-NEXT: xor $3, $2, $4 560; MIPS32-NEXT: sc $3, 0($1) 561; MIPS32-NEXT: beqz $3, $BB2_1 562; MIPS32-NEXT: nop 563; MIPS32-NEXT: # %bb.2: # %entry 564; MIPS32-NEXT: jr $ra 565; MIPS32-NEXT: nop 566; 567; MIPS32O0-LABEL: AtomicLoadXor32: 568; MIPS32O0: # %bb.0: # %entry 569; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 570; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 571; MIPS32O0-NEXT: addu $1, $2, $25 572; MIPS32O0-NEXT: lw $1, %got(x)($1) 573; MIPS32O0-NEXT: $BB2_1: # %entry 574; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 575; MIPS32O0-NEXT: ll $2, 0($1) 576; MIPS32O0-NEXT: xor $3, $2, $4 577; MIPS32O0-NEXT: sc $3, 0($1) 578; MIPS32O0-NEXT: beqz $3, $BB2_1 579; MIPS32O0-NEXT: nop 580; MIPS32O0-NEXT: # %bb.2: # %entry 581; MIPS32O0-NEXT: jr $ra 582; MIPS32O0-NEXT: nop 583; 584; MIPS32R2-LABEL: AtomicLoadXor32: 585; MIPS32R2: # %bb.0: # %entry 586; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 587; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 588; MIPS32R2-NEXT: addu $1, $2, $25 589; MIPS32R2-NEXT: lw $1, %got(x)($1) 590; MIPS32R2-NEXT: $BB2_1: # %entry 591; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 592; MIPS32R2-NEXT: ll $2, 0($1) 593; MIPS32R2-NEXT: xor $3, $2, $4 594; MIPS32R2-NEXT: sc $3, 0($1) 595; MIPS32R2-NEXT: beqz $3, $BB2_1 596; MIPS32R2-NEXT: nop 597; MIPS32R2-NEXT: # %bb.2: # %entry 598; MIPS32R2-NEXT: jr $ra 599; MIPS32R2-NEXT: nop 600; 601; MIPS32R6-LABEL: AtomicLoadXor32: 602; MIPS32R6: # %bb.0: # %entry 603; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 604; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 605; MIPS32R6-NEXT: addu $1, $2, $25 606; MIPS32R6-NEXT: lw $1, %got(x)($1) 607; MIPS32R6-NEXT: $BB2_1: # %entry 608; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 609; MIPS32R6-NEXT: ll $2, 0($1) 610; MIPS32R6-NEXT: xor $3, $2, $4 611; MIPS32R6-NEXT: sc $3, 0($1) 612; MIPS32R6-NEXT: beqzc $3, $BB2_1 613; MIPS32R6-NEXT: nop 614; MIPS32R6-NEXT: # %bb.2: # %entry 615; MIPS32R6-NEXT: jrc $ra 616; 617; MIPS32R6O0-LABEL: AtomicLoadXor32: 618; MIPS32R6O0: # %bb.0: # %entry 619; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 620; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 621; MIPS32R6O0-NEXT: addu $1, $2, $25 622; MIPS32R6O0-NEXT: lw $1, %got(x)($1) 623; MIPS32R6O0-NEXT: $BB2_1: # %entry 624; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 625; MIPS32R6O0-NEXT: ll $2, 0($1) 626; MIPS32R6O0-NEXT: xor $3, $2, $4 627; MIPS32R6O0-NEXT: sc $3, 0($1) 628; MIPS32R6O0-NEXT: beqzc $3, $BB2_1 629; MIPS32R6O0-NEXT: nop 630; MIPS32R6O0-NEXT: # %bb.2: # %entry 631; MIPS32R6O0-NEXT: jrc $ra 632; 633; MIPS4-LABEL: AtomicLoadXor32: 634; MIPS4: # %bb.0: # %entry 635; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor32))) 636; MIPS4-NEXT: daddu $1, $1, $25 637; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor32))) 638; MIPS4-NEXT: ld $1, %got_disp(x)($1) 639; MIPS4-NEXT: .LBB2_1: # %entry 640; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 641; MIPS4-NEXT: ll $2, 0($1) 642; MIPS4-NEXT: xor $3, $2, $4 643; MIPS4-NEXT: sc $3, 0($1) 644; MIPS4-NEXT: beqz $3, .LBB2_1 645; MIPS4-NEXT: nop 646; MIPS4-NEXT: # %bb.2: # %entry 647; MIPS4-NEXT: jr $ra 648; MIPS4-NEXT: nop 649; 650; MIPS64-LABEL: AtomicLoadXor32: 651; MIPS64: # %bb.0: # %entry 652; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor32))) 653; MIPS64-NEXT: daddu $1, $1, $25 654; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor32))) 655; MIPS64-NEXT: ld $1, %got_disp(x)($1) 656; MIPS64-NEXT: .LBB2_1: # %entry 657; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 658; MIPS64-NEXT: ll $2, 0($1) 659; MIPS64-NEXT: xor $3, $2, $4 660; MIPS64-NEXT: sc $3, 0($1) 661; MIPS64-NEXT: beqz $3, .LBB2_1 662; MIPS64-NEXT: nop 663; MIPS64-NEXT: # %bb.2: # %entry 664; MIPS64-NEXT: jr $ra 665; MIPS64-NEXT: nop 666; 667; MIPS64R2-LABEL: AtomicLoadXor32: 668; MIPS64R2: # %bb.0: # %entry 669; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor32))) 670; MIPS64R2-NEXT: daddu $1, $1, $25 671; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor32))) 672; MIPS64R2-NEXT: ld $1, %got_disp(x)($1) 673; MIPS64R2-NEXT: .LBB2_1: # %entry 674; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 675; MIPS64R2-NEXT: ll $2, 0($1) 676; MIPS64R2-NEXT: xor $3, $2, $4 677; MIPS64R2-NEXT: sc $3, 0($1) 678; MIPS64R2-NEXT: beqz $3, .LBB2_1 679; MIPS64R2-NEXT: nop 680; MIPS64R2-NEXT: # %bb.2: # %entry 681; MIPS64R2-NEXT: jr $ra 682; MIPS64R2-NEXT: nop 683; 684; MIPS64R6-LABEL: AtomicLoadXor32: 685; MIPS64R6: # %bb.0: # %entry 686; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor32))) 687; MIPS64R6-NEXT: daddu $1, $1, $25 688; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor32))) 689; MIPS64R6-NEXT: ld $1, %got_disp(x)($1) 690; MIPS64R6-NEXT: .LBB2_1: # %entry 691; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 692; MIPS64R6-NEXT: ll $2, 0($1) 693; MIPS64R6-NEXT: xor $3, $2, $4 694; MIPS64R6-NEXT: sc $3, 0($1) 695; MIPS64R6-NEXT: beqzc $3, .LBB2_1 696; MIPS64R6-NEXT: nop 697; MIPS64R6-NEXT: # %bb.2: # %entry 698; MIPS64R6-NEXT: jrc $ra 699; 700; MIPS64R6O0-LABEL: AtomicLoadXor32: 701; MIPS64R6O0: # %bb.0: # %entry 702; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor32))) 703; MIPS64R6O0-NEXT: daddu $1, $1, $25 704; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor32))) 705; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 706; MIPS64R6O0-NEXT: ld $1, %got_disp(x)($1) 707; MIPS64R6O0-NEXT: .LBB2_1: # %entry 708; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 709; MIPS64R6O0-NEXT: ll $2, 0($1) 710; MIPS64R6O0-NEXT: xor $3, $2, $4 711; MIPS64R6O0-NEXT: sc $3, 0($1) 712; MIPS64R6O0-NEXT: beqzc $3, .LBB2_1 713; MIPS64R6O0-NEXT: nop 714; MIPS64R6O0-NEXT: # %bb.2: # %entry 715; MIPS64R6O0-NEXT: jrc $ra 716; 717; MM32-LABEL: AtomicLoadXor32: 718; MM32: # %bb.0: # %entry 719; MM32-NEXT: lui $2, %hi(_gp_disp) 720; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 721; MM32-NEXT: addu $2, $2, $25 722; MM32-NEXT: lw $1, %got(x)($2) 723; MM32-NEXT: $BB2_1: # %entry 724; MM32-NEXT: # =>This Inner Loop Header: Depth=1 725; MM32-NEXT: ll $2, 0($1) 726; MM32-NEXT: xor $3, $2, $4 727; MM32-NEXT: sc $3, 0($1) 728; MM32-NEXT: beqzc $3, $BB2_1 729; MM32-NEXT: # %bb.2: # %entry 730; MM32-NEXT: jrc $ra 731; 732; O1-LABEL: AtomicLoadXor32: 733; O1: # %bb.0: # %entry 734; O1-NEXT: lui $2, %hi(_gp_disp) 735; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 736; O1-NEXT: addu $1, $2, $25 737; O1-NEXT: lw $1, %got(x)($1) 738; O1-NEXT: $BB2_1: # %entry 739; O1-NEXT: # =>This Inner Loop Header: Depth=1 740; O1-NEXT: ll $2, 0($1) 741; O1-NEXT: xor $3, $2, $4 742; O1-NEXT: sc $3, 0($1) 743; O1-NEXT: beqz $3, $BB2_1 744; O1-NEXT: nop 745; O1-NEXT: # %bb.2: # %entry 746; O1-NEXT: jr $ra 747; O1-NEXT: nop 748; 749; O2-LABEL: AtomicLoadXor32: 750; O2: # %bb.0: # %entry 751; O2-NEXT: lui $2, %hi(_gp_disp) 752; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 753; O2-NEXT: addu $1, $2, $25 754; O2-NEXT: lw $1, %got(x)($1) 755; O2-NEXT: $BB2_1: # %entry 756; O2-NEXT: # =>This Inner Loop Header: Depth=1 757; O2-NEXT: ll $2, 0($1) 758; O2-NEXT: xor $3, $2, $4 759; O2-NEXT: sc $3, 0($1) 760; O2-NEXT: beqz $3, $BB2_1 761; O2-NEXT: nop 762; O2-NEXT: # %bb.2: # %entry 763; O2-NEXT: jr $ra 764; O2-NEXT: nop 765; 766; O3-LABEL: AtomicLoadXor32: 767; O3: # %bb.0: # %entry 768; O3-NEXT: lui $2, %hi(_gp_disp) 769; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 770; O3-NEXT: addu $1, $2, $25 771; O3-NEXT: lw $1, %got(x)($1) 772; O3-NEXT: $BB2_1: # %entry 773; O3-NEXT: # =>This Inner Loop Header: Depth=1 774; O3-NEXT: ll $2, 0($1) 775; O3-NEXT: xor $3, $2, $4 776; O3-NEXT: sc $3, 0($1) 777; O3-NEXT: beqz $3, $BB2_1 778; O3-NEXT: nop 779; O3-NEXT: # %bb.2: # %entry 780; O3-NEXT: jr $ra 781; O3-NEXT: nop 782; 783; MIPS32EB-LABEL: AtomicLoadXor32: 784; MIPS32EB: # %bb.0: # %entry 785; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 786; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 787; MIPS32EB-NEXT: addu $1, $2, $25 788; MIPS32EB-NEXT: lw $1, %got(x)($1) 789; MIPS32EB-NEXT: $BB2_1: # %entry 790; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 791; MIPS32EB-NEXT: ll $2, 0($1) 792; MIPS32EB-NEXT: xor $3, $2, $4 793; MIPS32EB-NEXT: sc $3, 0($1) 794; MIPS32EB-NEXT: beqz $3, $BB2_1 795; MIPS32EB-NEXT: nop 796; MIPS32EB-NEXT: # %bb.2: # %entry 797; MIPS32EB-NEXT: jr $ra 798; MIPS32EB-NEXT: nop 799entry: 800 %0 = atomicrmw xor i32* @x, i32 %incr monotonic 801 ret i32 %0 802} 803 804define i32 @AtomicLoadOr32(i32 signext %incr) nounwind { 805; MIPS32-LABEL: AtomicLoadOr32: 806; MIPS32: # %bb.0: # %entry 807; MIPS32-NEXT: lui $2, %hi(_gp_disp) 808; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 809; MIPS32-NEXT: addu $1, $2, $25 810; MIPS32-NEXT: lw $1, %got(x)($1) 811; MIPS32-NEXT: $BB3_1: # %entry 812; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 813; MIPS32-NEXT: ll $2, 0($1) 814; MIPS32-NEXT: or $3, $2, $4 815; MIPS32-NEXT: sc $3, 0($1) 816; MIPS32-NEXT: beqz $3, $BB3_1 817; MIPS32-NEXT: nop 818; MIPS32-NEXT: # %bb.2: # %entry 819; MIPS32-NEXT: jr $ra 820; MIPS32-NEXT: nop 821; 822; MIPS32O0-LABEL: AtomicLoadOr32: 823; MIPS32O0: # %bb.0: # %entry 824; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 825; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 826; MIPS32O0-NEXT: addu $1, $2, $25 827; MIPS32O0-NEXT: lw $1, %got(x)($1) 828; MIPS32O0-NEXT: $BB3_1: # %entry 829; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 830; MIPS32O0-NEXT: ll $2, 0($1) 831; MIPS32O0-NEXT: or $3, $2, $4 832; MIPS32O0-NEXT: sc $3, 0($1) 833; MIPS32O0-NEXT: beqz $3, $BB3_1 834; MIPS32O0-NEXT: nop 835; MIPS32O0-NEXT: # %bb.2: # %entry 836; MIPS32O0-NEXT: jr $ra 837; MIPS32O0-NEXT: nop 838; 839; MIPS32R2-LABEL: AtomicLoadOr32: 840; MIPS32R2: # %bb.0: # %entry 841; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 842; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 843; MIPS32R2-NEXT: addu $1, $2, $25 844; MIPS32R2-NEXT: lw $1, %got(x)($1) 845; MIPS32R2-NEXT: $BB3_1: # %entry 846; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 847; MIPS32R2-NEXT: ll $2, 0($1) 848; MIPS32R2-NEXT: or $3, $2, $4 849; MIPS32R2-NEXT: sc $3, 0($1) 850; MIPS32R2-NEXT: beqz $3, $BB3_1 851; MIPS32R2-NEXT: nop 852; MIPS32R2-NEXT: # %bb.2: # %entry 853; MIPS32R2-NEXT: jr $ra 854; MIPS32R2-NEXT: nop 855; 856; MIPS32R6-LABEL: AtomicLoadOr32: 857; MIPS32R6: # %bb.0: # %entry 858; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 859; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 860; MIPS32R6-NEXT: addu $1, $2, $25 861; MIPS32R6-NEXT: lw $1, %got(x)($1) 862; MIPS32R6-NEXT: $BB3_1: # %entry 863; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 864; MIPS32R6-NEXT: ll $2, 0($1) 865; MIPS32R6-NEXT: or $3, $2, $4 866; MIPS32R6-NEXT: sc $3, 0($1) 867; MIPS32R6-NEXT: beqzc $3, $BB3_1 868; MIPS32R6-NEXT: nop 869; MIPS32R6-NEXT: # %bb.2: # %entry 870; MIPS32R6-NEXT: jrc $ra 871; 872; MIPS32R6O0-LABEL: AtomicLoadOr32: 873; MIPS32R6O0: # %bb.0: # %entry 874; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 875; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 876; MIPS32R6O0-NEXT: addu $1, $2, $25 877; MIPS32R6O0-NEXT: lw $1, %got(x)($1) 878; MIPS32R6O0-NEXT: $BB3_1: # %entry 879; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 880; MIPS32R6O0-NEXT: ll $2, 0($1) 881; MIPS32R6O0-NEXT: or $3, $2, $4 882; MIPS32R6O0-NEXT: sc $3, 0($1) 883; MIPS32R6O0-NEXT: beqzc $3, $BB3_1 884; MIPS32R6O0-NEXT: nop 885; MIPS32R6O0-NEXT: # %bb.2: # %entry 886; MIPS32R6O0-NEXT: jrc $ra 887; 888; MIPS4-LABEL: AtomicLoadOr32: 889; MIPS4: # %bb.0: # %entry 890; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr32))) 891; MIPS4-NEXT: daddu $1, $1, $25 892; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr32))) 893; MIPS4-NEXT: ld $1, %got_disp(x)($1) 894; MIPS4-NEXT: .LBB3_1: # %entry 895; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 896; MIPS4-NEXT: ll $2, 0($1) 897; MIPS4-NEXT: or $3, $2, $4 898; MIPS4-NEXT: sc $3, 0($1) 899; MIPS4-NEXT: beqz $3, .LBB3_1 900; MIPS4-NEXT: nop 901; MIPS4-NEXT: # %bb.2: # %entry 902; MIPS4-NEXT: jr $ra 903; MIPS4-NEXT: nop 904; 905; MIPS64-LABEL: AtomicLoadOr32: 906; MIPS64: # %bb.0: # %entry 907; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr32))) 908; MIPS64-NEXT: daddu $1, $1, $25 909; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr32))) 910; MIPS64-NEXT: ld $1, %got_disp(x)($1) 911; MIPS64-NEXT: .LBB3_1: # %entry 912; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 913; MIPS64-NEXT: ll $2, 0($1) 914; MIPS64-NEXT: or $3, $2, $4 915; MIPS64-NEXT: sc $3, 0($1) 916; MIPS64-NEXT: beqz $3, .LBB3_1 917; MIPS64-NEXT: nop 918; MIPS64-NEXT: # %bb.2: # %entry 919; MIPS64-NEXT: jr $ra 920; MIPS64-NEXT: nop 921; 922; MIPS64R2-LABEL: AtomicLoadOr32: 923; MIPS64R2: # %bb.0: # %entry 924; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr32))) 925; MIPS64R2-NEXT: daddu $1, $1, $25 926; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr32))) 927; MIPS64R2-NEXT: ld $1, %got_disp(x)($1) 928; MIPS64R2-NEXT: .LBB3_1: # %entry 929; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 930; MIPS64R2-NEXT: ll $2, 0($1) 931; MIPS64R2-NEXT: or $3, $2, $4 932; MIPS64R2-NEXT: sc $3, 0($1) 933; MIPS64R2-NEXT: beqz $3, .LBB3_1 934; MIPS64R2-NEXT: nop 935; MIPS64R2-NEXT: # %bb.2: # %entry 936; MIPS64R2-NEXT: jr $ra 937; MIPS64R2-NEXT: nop 938; 939; MIPS64R6-LABEL: AtomicLoadOr32: 940; MIPS64R6: # %bb.0: # %entry 941; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr32))) 942; MIPS64R6-NEXT: daddu $1, $1, $25 943; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr32))) 944; MIPS64R6-NEXT: ld $1, %got_disp(x)($1) 945; MIPS64R6-NEXT: .LBB3_1: # %entry 946; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 947; MIPS64R6-NEXT: ll $2, 0($1) 948; MIPS64R6-NEXT: or $3, $2, $4 949; MIPS64R6-NEXT: sc $3, 0($1) 950; MIPS64R6-NEXT: beqzc $3, .LBB3_1 951; MIPS64R6-NEXT: nop 952; MIPS64R6-NEXT: # %bb.2: # %entry 953; MIPS64R6-NEXT: jrc $ra 954; 955; MIPS64R6O0-LABEL: AtomicLoadOr32: 956; MIPS64R6O0: # %bb.0: # %entry 957; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr32))) 958; MIPS64R6O0-NEXT: daddu $1, $1, $25 959; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr32))) 960; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 961; MIPS64R6O0-NEXT: ld $1, %got_disp(x)($1) 962; MIPS64R6O0-NEXT: .LBB3_1: # %entry 963; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 964; MIPS64R6O0-NEXT: ll $2, 0($1) 965; MIPS64R6O0-NEXT: or $3, $2, $4 966; MIPS64R6O0-NEXT: sc $3, 0($1) 967; MIPS64R6O0-NEXT: beqzc $3, .LBB3_1 968; MIPS64R6O0-NEXT: nop 969; MIPS64R6O0-NEXT: # %bb.2: # %entry 970; MIPS64R6O0-NEXT: jrc $ra 971; 972; MM32-LABEL: AtomicLoadOr32: 973; MM32: # %bb.0: # %entry 974; MM32-NEXT: lui $2, %hi(_gp_disp) 975; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 976; MM32-NEXT: addu $2, $2, $25 977; MM32-NEXT: lw $1, %got(x)($2) 978; MM32-NEXT: $BB3_1: # %entry 979; MM32-NEXT: # =>This Inner Loop Header: Depth=1 980; MM32-NEXT: ll $2, 0($1) 981; MM32-NEXT: or $3, $2, $4 982; MM32-NEXT: sc $3, 0($1) 983; MM32-NEXT: beqzc $3, $BB3_1 984; MM32-NEXT: # %bb.2: # %entry 985; MM32-NEXT: jrc $ra 986; 987; O1-LABEL: AtomicLoadOr32: 988; O1: # %bb.0: # %entry 989; O1-NEXT: lui $2, %hi(_gp_disp) 990; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 991; O1-NEXT: addu $1, $2, $25 992; O1-NEXT: lw $1, %got(x)($1) 993; O1-NEXT: $BB3_1: # %entry 994; O1-NEXT: # =>This Inner Loop Header: Depth=1 995; O1-NEXT: ll $2, 0($1) 996; O1-NEXT: or $3, $2, $4 997; O1-NEXT: sc $3, 0($1) 998; O1-NEXT: beqz $3, $BB3_1 999; O1-NEXT: nop 1000; O1-NEXT: # %bb.2: # %entry 1001; O1-NEXT: jr $ra 1002; O1-NEXT: nop 1003; 1004; O2-LABEL: AtomicLoadOr32: 1005; O2: # %bb.0: # %entry 1006; O2-NEXT: lui $2, %hi(_gp_disp) 1007; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 1008; O2-NEXT: addu $1, $2, $25 1009; O2-NEXT: lw $1, %got(x)($1) 1010; O2-NEXT: $BB3_1: # %entry 1011; O2-NEXT: # =>This Inner Loop Header: Depth=1 1012; O2-NEXT: ll $2, 0($1) 1013; O2-NEXT: or $3, $2, $4 1014; O2-NEXT: sc $3, 0($1) 1015; O2-NEXT: beqz $3, $BB3_1 1016; O2-NEXT: nop 1017; O2-NEXT: # %bb.2: # %entry 1018; O2-NEXT: jr $ra 1019; O2-NEXT: nop 1020; 1021; O3-LABEL: AtomicLoadOr32: 1022; O3: # %bb.0: # %entry 1023; O3-NEXT: lui $2, %hi(_gp_disp) 1024; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 1025; O3-NEXT: addu $1, $2, $25 1026; O3-NEXT: lw $1, %got(x)($1) 1027; O3-NEXT: $BB3_1: # %entry 1028; O3-NEXT: # =>This Inner Loop Header: Depth=1 1029; O3-NEXT: ll $2, 0($1) 1030; O3-NEXT: or $3, $2, $4 1031; O3-NEXT: sc $3, 0($1) 1032; O3-NEXT: beqz $3, $BB3_1 1033; O3-NEXT: nop 1034; O3-NEXT: # %bb.2: # %entry 1035; O3-NEXT: jr $ra 1036; O3-NEXT: nop 1037; 1038; MIPS32EB-LABEL: AtomicLoadOr32: 1039; MIPS32EB: # %bb.0: # %entry 1040; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 1041; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 1042; MIPS32EB-NEXT: addu $1, $2, $25 1043; MIPS32EB-NEXT: lw $1, %got(x)($1) 1044; MIPS32EB-NEXT: $BB3_1: # %entry 1045; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 1046; MIPS32EB-NEXT: ll $2, 0($1) 1047; MIPS32EB-NEXT: or $3, $2, $4 1048; MIPS32EB-NEXT: sc $3, 0($1) 1049; MIPS32EB-NEXT: beqz $3, $BB3_1 1050; MIPS32EB-NEXT: nop 1051; MIPS32EB-NEXT: # %bb.2: # %entry 1052; MIPS32EB-NEXT: jr $ra 1053; MIPS32EB-NEXT: nop 1054entry: 1055 %0 = atomicrmw or i32* @x, i32 %incr monotonic 1056 ret i32 %0 1057} 1058 1059define i32 @AtomicLoadAnd32(i32 signext %incr) nounwind { 1060; MIPS32-LABEL: AtomicLoadAnd32: 1061; MIPS32: # %bb.0: # %entry 1062; MIPS32-NEXT: lui $2, %hi(_gp_disp) 1063; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 1064; MIPS32-NEXT: addu $1, $2, $25 1065; MIPS32-NEXT: lw $1, %got(x)($1) 1066; MIPS32-NEXT: $BB4_1: # %entry 1067; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 1068; MIPS32-NEXT: ll $2, 0($1) 1069; MIPS32-NEXT: and $3, $2, $4 1070; MIPS32-NEXT: sc $3, 0($1) 1071; MIPS32-NEXT: beqz $3, $BB4_1 1072; MIPS32-NEXT: nop 1073; MIPS32-NEXT: # %bb.2: # %entry 1074; MIPS32-NEXT: jr $ra 1075; MIPS32-NEXT: nop 1076; 1077; MIPS32O0-LABEL: AtomicLoadAnd32: 1078; MIPS32O0: # %bb.0: # %entry 1079; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 1080; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 1081; MIPS32O0-NEXT: addu $1, $2, $25 1082; MIPS32O0-NEXT: lw $1, %got(x)($1) 1083; MIPS32O0-NEXT: $BB4_1: # %entry 1084; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 1085; MIPS32O0-NEXT: ll $2, 0($1) 1086; MIPS32O0-NEXT: and $3, $2, $4 1087; MIPS32O0-NEXT: sc $3, 0($1) 1088; MIPS32O0-NEXT: beqz $3, $BB4_1 1089; MIPS32O0-NEXT: nop 1090; MIPS32O0-NEXT: # %bb.2: # %entry 1091; MIPS32O0-NEXT: jr $ra 1092; MIPS32O0-NEXT: nop 1093; 1094; MIPS32R2-LABEL: AtomicLoadAnd32: 1095; MIPS32R2: # %bb.0: # %entry 1096; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 1097; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 1098; MIPS32R2-NEXT: addu $1, $2, $25 1099; MIPS32R2-NEXT: lw $1, %got(x)($1) 1100; MIPS32R2-NEXT: $BB4_1: # %entry 1101; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 1102; MIPS32R2-NEXT: ll $2, 0($1) 1103; MIPS32R2-NEXT: and $3, $2, $4 1104; MIPS32R2-NEXT: sc $3, 0($1) 1105; MIPS32R2-NEXT: beqz $3, $BB4_1 1106; MIPS32R2-NEXT: nop 1107; MIPS32R2-NEXT: # %bb.2: # %entry 1108; MIPS32R2-NEXT: jr $ra 1109; MIPS32R2-NEXT: nop 1110; 1111; MIPS32R6-LABEL: AtomicLoadAnd32: 1112; MIPS32R6: # %bb.0: # %entry 1113; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 1114; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 1115; MIPS32R6-NEXT: addu $1, $2, $25 1116; MIPS32R6-NEXT: lw $1, %got(x)($1) 1117; MIPS32R6-NEXT: $BB4_1: # %entry 1118; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 1119; MIPS32R6-NEXT: ll $2, 0($1) 1120; MIPS32R6-NEXT: and $3, $2, $4 1121; MIPS32R6-NEXT: sc $3, 0($1) 1122; MIPS32R6-NEXT: beqzc $3, $BB4_1 1123; MIPS32R6-NEXT: nop 1124; MIPS32R6-NEXT: # %bb.2: # %entry 1125; MIPS32R6-NEXT: jrc $ra 1126; 1127; MIPS32R6O0-LABEL: AtomicLoadAnd32: 1128; MIPS32R6O0: # %bb.0: # %entry 1129; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 1130; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 1131; MIPS32R6O0-NEXT: addu $1, $2, $25 1132; MIPS32R6O0-NEXT: lw $1, %got(x)($1) 1133; MIPS32R6O0-NEXT: $BB4_1: # %entry 1134; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 1135; MIPS32R6O0-NEXT: ll $2, 0($1) 1136; MIPS32R6O0-NEXT: and $3, $2, $4 1137; MIPS32R6O0-NEXT: sc $3, 0($1) 1138; MIPS32R6O0-NEXT: beqzc $3, $BB4_1 1139; MIPS32R6O0-NEXT: nop 1140; MIPS32R6O0-NEXT: # %bb.2: # %entry 1141; MIPS32R6O0-NEXT: jrc $ra 1142; 1143; MIPS4-LABEL: AtomicLoadAnd32: 1144; MIPS4: # %bb.0: # %entry 1145; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd32))) 1146; MIPS4-NEXT: daddu $1, $1, $25 1147; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd32))) 1148; MIPS4-NEXT: ld $1, %got_disp(x)($1) 1149; MIPS4-NEXT: .LBB4_1: # %entry 1150; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 1151; MIPS4-NEXT: ll $2, 0($1) 1152; MIPS4-NEXT: and $3, $2, $4 1153; MIPS4-NEXT: sc $3, 0($1) 1154; MIPS4-NEXT: beqz $3, .LBB4_1 1155; MIPS4-NEXT: nop 1156; MIPS4-NEXT: # %bb.2: # %entry 1157; MIPS4-NEXT: jr $ra 1158; MIPS4-NEXT: nop 1159; 1160; MIPS64-LABEL: AtomicLoadAnd32: 1161; MIPS64: # %bb.0: # %entry 1162; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd32))) 1163; MIPS64-NEXT: daddu $1, $1, $25 1164; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd32))) 1165; MIPS64-NEXT: ld $1, %got_disp(x)($1) 1166; MIPS64-NEXT: .LBB4_1: # %entry 1167; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 1168; MIPS64-NEXT: ll $2, 0($1) 1169; MIPS64-NEXT: and $3, $2, $4 1170; MIPS64-NEXT: sc $3, 0($1) 1171; MIPS64-NEXT: beqz $3, .LBB4_1 1172; MIPS64-NEXT: nop 1173; MIPS64-NEXT: # %bb.2: # %entry 1174; MIPS64-NEXT: jr $ra 1175; MIPS64-NEXT: nop 1176; 1177; MIPS64R2-LABEL: AtomicLoadAnd32: 1178; MIPS64R2: # %bb.0: # %entry 1179; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd32))) 1180; MIPS64R2-NEXT: daddu $1, $1, $25 1181; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd32))) 1182; MIPS64R2-NEXT: ld $1, %got_disp(x)($1) 1183; MIPS64R2-NEXT: .LBB4_1: # %entry 1184; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 1185; MIPS64R2-NEXT: ll $2, 0($1) 1186; MIPS64R2-NEXT: and $3, $2, $4 1187; MIPS64R2-NEXT: sc $3, 0($1) 1188; MIPS64R2-NEXT: beqz $3, .LBB4_1 1189; MIPS64R2-NEXT: nop 1190; MIPS64R2-NEXT: # %bb.2: # %entry 1191; MIPS64R2-NEXT: jr $ra 1192; MIPS64R2-NEXT: nop 1193; 1194; MIPS64R6-LABEL: AtomicLoadAnd32: 1195; MIPS64R6: # %bb.0: # %entry 1196; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd32))) 1197; MIPS64R6-NEXT: daddu $1, $1, $25 1198; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd32))) 1199; MIPS64R6-NEXT: ld $1, %got_disp(x)($1) 1200; MIPS64R6-NEXT: .LBB4_1: # %entry 1201; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 1202; MIPS64R6-NEXT: ll $2, 0($1) 1203; MIPS64R6-NEXT: and $3, $2, $4 1204; MIPS64R6-NEXT: sc $3, 0($1) 1205; MIPS64R6-NEXT: beqzc $3, .LBB4_1 1206; MIPS64R6-NEXT: nop 1207; MIPS64R6-NEXT: # %bb.2: # %entry 1208; MIPS64R6-NEXT: jrc $ra 1209; 1210; MIPS64R6O0-LABEL: AtomicLoadAnd32: 1211; MIPS64R6O0: # %bb.0: # %entry 1212; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd32))) 1213; MIPS64R6O0-NEXT: daddu $1, $1, $25 1214; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd32))) 1215; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 1216; MIPS64R6O0-NEXT: ld $1, %got_disp(x)($1) 1217; MIPS64R6O0-NEXT: .LBB4_1: # %entry 1218; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 1219; MIPS64R6O0-NEXT: ll $2, 0($1) 1220; MIPS64R6O0-NEXT: and $3, $2, $4 1221; MIPS64R6O0-NEXT: sc $3, 0($1) 1222; MIPS64R6O0-NEXT: beqzc $3, .LBB4_1 1223; MIPS64R6O0-NEXT: nop 1224; MIPS64R6O0-NEXT: # %bb.2: # %entry 1225; MIPS64R6O0-NEXT: jrc $ra 1226; 1227; MM32-LABEL: AtomicLoadAnd32: 1228; MM32: # %bb.0: # %entry 1229; MM32-NEXT: lui $2, %hi(_gp_disp) 1230; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 1231; MM32-NEXT: addu $2, $2, $25 1232; MM32-NEXT: lw $1, %got(x)($2) 1233; MM32-NEXT: $BB4_1: # %entry 1234; MM32-NEXT: # =>This Inner Loop Header: Depth=1 1235; MM32-NEXT: ll $2, 0($1) 1236; MM32-NEXT: and $3, $2, $4 1237; MM32-NEXT: sc $3, 0($1) 1238; MM32-NEXT: beqzc $3, $BB4_1 1239; MM32-NEXT: # %bb.2: # %entry 1240; MM32-NEXT: jrc $ra 1241; 1242; O1-LABEL: AtomicLoadAnd32: 1243; O1: # %bb.0: # %entry 1244; O1-NEXT: lui $2, %hi(_gp_disp) 1245; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 1246; O1-NEXT: addu $1, $2, $25 1247; O1-NEXT: lw $1, %got(x)($1) 1248; O1-NEXT: $BB4_1: # %entry 1249; O1-NEXT: # =>This Inner Loop Header: Depth=1 1250; O1-NEXT: ll $2, 0($1) 1251; O1-NEXT: and $3, $2, $4 1252; O1-NEXT: sc $3, 0($1) 1253; O1-NEXT: beqz $3, $BB4_1 1254; O1-NEXT: nop 1255; O1-NEXT: # %bb.2: # %entry 1256; O1-NEXT: jr $ra 1257; O1-NEXT: nop 1258; 1259; O2-LABEL: AtomicLoadAnd32: 1260; O2: # %bb.0: # %entry 1261; O2-NEXT: lui $2, %hi(_gp_disp) 1262; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 1263; O2-NEXT: addu $1, $2, $25 1264; O2-NEXT: lw $1, %got(x)($1) 1265; O2-NEXT: $BB4_1: # %entry 1266; O2-NEXT: # =>This Inner Loop Header: Depth=1 1267; O2-NEXT: ll $2, 0($1) 1268; O2-NEXT: and $3, $2, $4 1269; O2-NEXT: sc $3, 0($1) 1270; O2-NEXT: beqz $3, $BB4_1 1271; O2-NEXT: nop 1272; O2-NEXT: # %bb.2: # %entry 1273; O2-NEXT: jr $ra 1274; O2-NEXT: nop 1275; 1276; O3-LABEL: AtomicLoadAnd32: 1277; O3: # %bb.0: # %entry 1278; O3-NEXT: lui $2, %hi(_gp_disp) 1279; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 1280; O3-NEXT: addu $1, $2, $25 1281; O3-NEXT: lw $1, %got(x)($1) 1282; O3-NEXT: $BB4_1: # %entry 1283; O3-NEXT: # =>This Inner Loop Header: Depth=1 1284; O3-NEXT: ll $2, 0($1) 1285; O3-NEXT: and $3, $2, $4 1286; O3-NEXT: sc $3, 0($1) 1287; O3-NEXT: beqz $3, $BB4_1 1288; O3-NEXT: nop 1289; O3-NEXT: # %bb.2: # %entry 1290; O3-NEXT: jr $ra 1291; O3-NEXT: nop 1292; 1293; MIPS32EB-LABEL: AtomicLoadAnd32: 1294; MIPS32EB: # %bb.0: # %entry 1295; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 1296; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 1297; MIPS32EB-NEXT: addu $1, $2, $25 1298; MIPS32EB-NEXT: lw $1, %got(x)($1) 1299; MIPS32EB-NEXT: $BB4_1: # %entry 1300; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 1301; MIPS32EB-NEXT: ll $2, 0($1) 1302; MIPS32EB-NEXT: and $3, $2, $4 1303; MIPS32EB-NEXT: sc $3, 0($1) 1304; MIPS32EB-NEXT: beqz $3, $BB4_1 1305; MIPS32EB-NEXT: nop 1306; MIPS32EB-NEXT: # %bb.2: # %entry 1307; MIPS32EB-NEXT: jr $ra 1308; MIPS32EB-NEXT: nop 1309entry: 1310 %0 = atomicrmw and i32* @x, i32 %incr monotonic 1311 ret i32 %0 1312} 1313 1314define i32 @AtomicLoadNand32(i32 signext %incr) nounwind { 1315; MIPS32-LABEL: AtomicLoadNand32: 1316; MIPS32: # %bb.0: # %entry 1317; MIPS32-NEXT: lui $2, %hi(_gp_disp) 1318; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 1319; MIPS32-NEXT: addu $1, $2, $25 1320; MIPS32-NEXT: lw $1, %got(x)($1) 1321; MIPS32-NEXT: $BB5_1: # %entry 1322; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 1323; MIPS32-NEXT: ll $2, 0($1) 1324; MIPS32-NEXT: and $3, $2, $4 1325; MIPS32-NEXT: nor $3, $zero, $3 1326; MIPS32-NEXT: sc $3, 0($1) 1327; MIPS32-NEXT: beqz $3, $BB5_1 1328; MIPS32-NEXT: nop 1329; MIPS32-NEXT: # %bb.2: # %entry 1330; MIPS32-NEXT: jr $ra 1331; MIPS32-NEXT: nop 1332; 1333; MIPS32O0-LABEL: AtomicLoadNand32: 1334; MIPS32O0: # %bb.0: # %entry 1335; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 1336; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 1337; MIPS32O0-NEXT: addu $1, $2, $25 1338; MIPS32O0-NEXT: lw $1, %got(x)($1) 1339; MIPS32O0-NEXT: $BB5_1: # %entry 1340; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 1341; MIPS32O0-NEXT: ll $2, 0($1) 1342; MIPS32O0-NEXT: and $3, $2, $4 1343; MIPS32O0-NEXT: nor $3, $zero, $3 1344; MIPS32O0-NEXT: sc $3, 0($1) 1345; MIPS32O0-NEXT: beqz $3, $BB5_1 1346; MIPS32O0-NEXT: nop 1347; MIPS32O0-NEXT: # %bb.2: # %entry 1348; MIPS32O0-NEXT: jr $ra 1349; MIPS32O0-NEXT: nop 1350; 1351; MIPS32R2-LABEL: AtomicLoadNand32: 1352; MIPS32R2: # %bb.0: # %entry 1353; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 1354; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 1355; MIPS32R2-NEXT: addu $1, $2, $25 1356; MIPS32R2-NEXT: lw $1, %got(x)($1) 1357; MIPS32R2-NEXT: $BB5_1: # %entry 1358; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 1359; MIPS32R2-NEXT: ll $2, 0($1) 1360; MIPS32R2-NEXT: and $3, $2, $4 1361; MIPS32R2-NEXT: nor $3, $zero, $3 1362; MIPS32R2-NEXT: sc $3, 0($1) 1363; MIPS32R2-NEXT: beqz $3, $BB5_1 1364; MIPS32R2-NEXT: nop 1365; MIPS32R2-NEXT: # %bb.2: # %entry 1366; MIPS32R2-NEXT: jr $ra 1367; MIPS32R2-NEXT: nop 1368; 1369; MIPS32R6-LABEL: AtomicLoadNand32: 1370; MIPS32R6: # %bb.0: # %entry 1371; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 1372; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 1373; MIPS32R6-NEXT: addu $1, $2, $25 1374; MIPS32R6-NEXT: lw $1, %got(x)($1) 1375; MIPS32R6-NEXT: $BB5_1: # %entry 1376; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 1377; MIPS32R6-NEXT: ll $2, 0($1) 1378; MIPS32R6-NEXT: and $3, $2, $4 1379; MIPS32R6-NEXT: nor $3, $zero, $3 1380; MIPS32R6-NEXT: sc $3, 0($1) 1381; MIPS32R6-NEXT: beqzc $3, $BB5_1 1382; MIPS32R6-NEXT: nop 1383; MIPS32R6-NEXT: # %bb.2: # %entry 1384; MIPS32R6-NEXT: jrc $ra 1385; 1386; MIPS32R6O0-LABEL: AtomicLoadNand32: 1387; MIPS32R6O0: # %bb.0: # %entry 1388; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 1389; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 1390; MIPS32R6O0-NEXT: addu $1, $2, $25 1391; MIPS32R6O0-NEXT: lw $1, %got(x)($1) 1392; MIPS32R6O0-NEXT: $BB5_1: # %entry 1393; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 1394; MIPS32R6O0-NEXT: ll $2, 0($1) 1395; MIPS32R6O0-NEXT: and $3, $2, $4 1396; MIPS32R6O0-NEXT: nor $3, $zero, $3 1397; MIPS32R6O0-NEXT: sc $3, 0($1) 1398; MIPS32R6O0-NEXT: beqzc $3, $BB5_1 1399; MIPS32R6O0-NEXT: nop 1400; MIPS32R6O0-NEXT: # %bb.2: # %entry 1401; MIPS32R6O0-NEXT: jrc $ra 1402; 1403; MIPS4-LABEL: AtomicLoadNand32: 1404; MIPS4: # %bb.0: # %entry 1405; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand32))) 1406; MIPS4-NEXT: daddu $1, $1, $25 1407; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand32))) 1408; MIPS4-NEXT: ld $1, %got_disp(x)($1) 1409; MIPS4-NEXT: .LBB5_1: # %entry 1410; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 1411; MIPS4-NEXT: ll $2, 0($1) 1412; MIPS4-NEXT: and $3, $2, $4 1413; MIPS4-NEXT: nor $3, $zero, $3 1414; MIPS4-NEXT: sc $3, 0($1) 1415; MIPS4-NEXT: beqz $3, .LBB5_1 1416; MIPS4-NEXT: nop 1417; MIPS4-NEXT: # %bb.2: # %entry 1418; MIPS4-NEXT: jr $ra 1419; MIPS4-NEXT: nop 1420; 1421; MIPS64-LABEL: AtomicLoadNand32: 1422; MIPS64: # %bb.0: # %entry 1423; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand32))) 1424; MIPS64-NEXT: daddu $1, $1, $25 1425; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand32))) 1426; MIPS64-NEXT: ld $1, %got_disp(x)($1) 1427; MIPS64-NEXT: .LBB5_1: # %entry 1428; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 1429; MIPS64-NEXT: ll $2, 0($1) 1430; MIPS64-NEXT: and $3, $2, $4 1431; MIPS64-NEXT: nor $3, $zero, $3 1432; MIPS64-NEXT: sc $3, 0($1) 1433; MIPS64-NEXT: beqz $3, .LBB5_1 1434; MIPS64-NEXT: nop 1435; MIPS64-NEXT: # %bb.2: # %entry 1436; MIPS64-NEXT: jr $ra 1437; MIPS64-NEXT: nop 1438; 1439; MIPS64R2-LABEL: AtomicLoadNand32: 1440; MIPS64R2: # %bb.0: # %entry 1441; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand32))) 1442; MIPS64R2-NEXT: daddu $1, $1, $25 1443; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand32))) 1444; MIPS64R2-NEXT: ld $1, %got_disp(x)($1) 1445; MIPS64R2-NEXT: .LBB5_1: # %entry 1446; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 1447; MIPS64R2-NEXT: ll $2, 0($1) 1448; MIPS64R2-NEXT: and $3, $2, $4 1449; MIPS64R2-NEXT: nor $3, $zero, $3 1450; MIPS64R2-NEXT: sc $3, 0($1) 1451; MIPS64R2-NEXT: beqz $3, .LBB5_1 1452; MIPS64R2-NEXT: nop 1453; MIPS64R2-NEXT: # %bb.2: # %entry 1454; MIPS64R2-NEXT: jr $ra 1455; MIPS64R2-NEXT: nop 1456; 1457; MIPS64R6-LABEL: AtomicLoadNand32: 1458; MIPS64R6: # %bb.0: # %entry 1459; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand32))) 1460; MIPS64R6-NEXT: daddu $1, $1, $25 1461; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand32))) 1462; MIPS64R6-NEXT: ld $1, %got_disp(x)($1) 1463; MIPS64R6-NEXT: .LBB5_1: # %entry 1464; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 1465; MIPS64R6-NEXT: ll $2, 0($1) 1466; MIPS64R6-NEXT: and $3, $2, $4 1467; MIPS64R6-NEXT: nor $3, $zero, $3 1468; MIPS64R6-NEXT: sc $3, 0($1) 1469; MIPS64R6-NEXT: beqzc $3, .LBB5_1 1470; MIPS64R6-NEXT: nop 1471; MIPS64R6-NEXT: # %bb.2: # %entry 1472; MIPS64R6-NEXT: jrc $ra 1473; 1474; MIPS64R6O0-LABEL: AtomicLoadNand32: 1475; MIPS64R6O0: # %bb.0: # %entry 1476; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand32))) 1477; MIPS64R6O0-NEXT: daddu $1, $1, $25 1478; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand32))) 1479; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 1480; MIPS64R6O0-NEXT: ld $1, %got_disp(x)($1) 1481; MIPS64R6O0-NEXT: .LBB5_1: # %entry 1482; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 1483; MIPS64R6O0-NEXT: ll $2, 0($1) 1484; MIPS64R6O0-NEXT: and $3, $2, $4 1485; MIPS64R6O0-NEXT: nor $3, $zero, $3 1486; MIPS64R6O0-NEXT: sc $3, 0($1) 1487; MIPS64R6O0-NEXT: beqzc $3, .LBB5_1 1488; MIPS64R6O0-NEXT: nop 1489; MIPS64R6O0-NEXT: # %bb.2: # %entry 1490; MIPS64R6O0-NEXT: jrc $ra 1491; 1492; MM32-LABEL: AtomicLoadNand32: 1493; MM32: # %bb.0: # %entry 1494; MM32-NEXT: lui $2, %hi(_gp_disp) 1495; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 1496; MM32-NEXT: addu $2, $2, $25 1497; MM32-NEXT: lw $1, %got(x)($2) 1498; MM32-NEXT: $BB5_1: # %entry 1499; MM32-NEXT: # =>This Inner Loop Header: Depth=1 1500; MM32-NEXT: ll $2, 0($1) 1501; MM32-NEXT: and $3, $2, $4 1502; MM32-NEXT: nor $3, $zero, $3 1503; MM32-NEXT: sc $3, 0($1) 1504; MM32-NEXT: beqzc $3, $BB5_1 1505; MM32-NEXT: # %bb.2: # %entry 1506; MM32-NEXT: jrc $ra 1507; 1508; O1-LABEL: AtomicLoadNand32: 1509; O1: # %bb.0: # %entry 1510; O1-NEXT: lui $2, %hi(_gp_disp) 1511; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 1512; O1-NEXT: addu $1, $2, $25 1513; O1-NEXT: lw $1, %got(x)($1) 1514; O1-NEXT: $BB5_1: # %entry 1515; O1-NEXT: # =>This Inner Loop Header: Depth=1 1516; O1-NEXT: ll $2, 0($1) 1517; O1-NEXT: and $3, $2, $4 1518; O1-NEXT: nor $3, $zero, $3 1519; O1-NEXT: sc $3, 0($1) 1520; O1-NEXT: beqz $3, $BB5_1 1521; O1-NEXT: nop 1522; O1-NEXT: # %bb.2: # %entry 1523; O1-NEXT: jr $ra 1524; O1-NEXT: nop 1525; 1526; O2-LABEL: AtomicLoadNand32: 1527; O2: # %bb.0: # %entry 1528; O2-NEXT: lui $2, %hi(_gp_disp) 1529; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 1530; O2-NEXT: addu $1, $2, $25 1531; O2-NEXT: lw $1, %got(x)($1) 1532; O2-NEXT: $BB5_1: # %entry 1533; O2-NEXT: # =>This Inner Loop Header: Depth=1 1534; O2-NEXT: ll $2, 0($1) 1535; O2-NEXT: and $3, $2, $4 1536; O2-NEXT: nor $3, $zero, $3 1537; O2-NEXT: sc $3, 0($1) 1538; O2-NEXT: beqz $3, $BB5_1 1539; O2-NEXT: nop 1540; O2-NEXT: # %bb.2: # %entry 1541; O2-NEXT: jr $ra 1542; O2-NEXT: nop 1543; 1544; O3-LABEL: AtomicLoadNand32: 1545; O3: # %bb.0: # %entry 1546; O3-NEXT: lui $2, %hi(_gp_disp) 1547; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 1548; O3-NEXT: addu $1, $2, $25 1549; O3-NEXT: lw $1, %got(x)($1) 1550; O3-NEXT: $BB5_1: # %entry 1551; O3-NEXT: # =>This Inner Loop Header: Depth=1 1552; O3-NEXT: ll $2, 0($1) 1553; O3-NEXT: and $3, $2, $4 1554; O3-NEXT: nor $3, $zero, $3 1555; O3-NEXT: sc $3, 0($1) 1556; O3-NEXT: beqz $3, $BB5_1 1557; O3-NEXT: nop 1558; O3-NEXT: # %bb.2: # %entry 1559; O3-NEXT: jr $ra 1560; O3-NEXT: nop 1561; 1562; MIPS32EB-LABEL: AtomicLoadNand32: 1563; MIPS32EB: # %bb.0: # %entry 1564; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 1565; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 1566; MIPS32EB-NEXT: addu $1, $2, $25 1567; MIPS32EB-NEXT: lw $1, %got(x)($1) 1568; MIPS32EB-NEXT: $BB5_1: # %entry 1569; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 1570; MIPS32EB-NEXT: ll $2, 0($1) 1571; MIPS32EB-NEXT: and $3, $2, $4 1572; MIPS32EB-NEXT: nor $3, $zero, $3 1573; MIPS32EB-NEXT: sc $3, 0($1) 1574; MIPS32EB-NEXT: beqz $3, $BB5_1 1575; MIPS32EB-NEXT: nop 1576; MIPS32EB-NEXT: # %bb.2: # %entry 1577; MIPS32EB-NEXT: jr $ra 1578; MIPS32EB-NEXT: nop 1579entry: 1580 %0 = atomicrmw nand i32* @x, i32 %incr monotonic 1581 ret i32 %0 1582 1583} 1584 1585define i32 @AtomicSwap32(i32 signext %newval) nounwind { 1586; MIPS32-LABEL: AtomicSwap32: 1587; MIPS32: # %bb.0: # %entry 1588; MIPS32-NEXT: lui $2, %hi(_gp_disp) 1589; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 1590; MIPS32-NEXT: addiu $sp, $sp, -8 1591; MIPS32-NEXT: addu $1, $2, $25 1592; MIPS32-NEXT: sw $4, 4($sp) 1593; MIPS32-NEXT: lw $1, %got(x)($1) 1594; MIPS32-NEXT: $BB6_1: # %entry 1595; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 1596; MIPS32-NEXT: ll $2, 0($1) 1597; MIPS32-NEXT: move $3, $4 1598; MIPS32-NEXT: sc $3, 0($1) 1599; MIPS32-NEXT: beqz $3, $BB6_1 1600; MIPS32-NEXT: nop 1601; MIPS32-NEXT: # %bb.2: # %entry 1602; MIPS32-NEXT: jr $ra 1603; MIPS32-NEXT: addiu $sp, $sp, 8 1604; 1605; MIPS32O0-LABEL: AtomicSwap32: 1606; MIPS32O0: # %bb.0: # %entry 1607; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 1608; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 1609; MIPS32O0-NEXT: addiu $sp, $sp, -8 1610; MIPS32O0-NEXT: addu $1, $2, $25 1611; MIPS32O0-NEXT: sw $4, 4($sp) 1612; MIPS32O0-NEXT: lw $2, 4($sp) 1613; MIPS32O0-NEXT: lw $1, %got(x)($1) 1614; MIPS32O0-NEXT: $BB6_1: # %entry 1615; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 1616; MIPS32O0-NEXT: ll $3, 0($1) 1617; MIPS32O0-NEXT: move $4, $2 1618; MIPS32O0-NEXT: sc $4, 0($1) 1619; MIPS32O0-NEXT: beqz $4, $BB6_1 1620; MIPS32O0-NEXT: nop 1621; MIPS32O0-NEXT: # %bb.2: # %entry 1622; MIPS32O0-NEXT: move $2, $3 1623; MIPS32O0-NEXT: addiu $sp, $sp, 8 1624; MIPS32O0-NEXT: jr $ra 1625; MIPS32O0-NEXT: nop 1626; 1627; MIPS32R2-LABEL: AtomicSwap32: 1628; MIPS32R2: # %bb.0: # %entry 1629; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 1630; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 1631; MIPS32R2-NEXT: addiu $sp, $sp, -8 1632; MIPS32R2-NEXT: addu $1, $2, $25 1633; MIPS32R2-NEXT: sw $4, 4($sp) 1634; MIPS32R2-NEXT: lw $1, %got(x)($1) 1635; MIPS32R2-NEXT: $BB6_1: # %entry 1636; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 1637; MIPS32R2-NEXT: ll $2, 0($1) 1638; MIPS32R2-NEXT: move $3, $4 1639; MIPS32R2-NEXT: sc $3, 0($1) 1640; MIPS32R2-NEXT: beqz $3, $BB6_1 1641; MIPS32R2-NEXT: nop 1642; MIPS32R2-NEXT: # %bb.2: # %entry 1643; MIPS32R2-NEXT: jr $ra 1644; MIPS32R2-NEXT: addiu $sp, $sp, 8 1645; 1646; MIPS32R6-LABEL: AtomicSwap32: 1647; MIPS32R6: # %bb.0: # %entry 1648; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 1649; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 1650; MIPS32R6-NEXT: addiu $sp, $sp, -8 1651; MIPS32R6-NEXT: addu $1, $2, $25 1652; MIPS32R6-NEXT: sw $4, 4($sp) 1653; MIPS32R6-NEXT: lw $1, %got(x)($1) 1654; MIPS32R6-NEXT: $BB6_1: # %entry 1655; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 1656; MIPS32R6-NEXT: ll $2, 0($1) 1657; MIPS32R6-NEXT: move $3, $4 1658; MIPS32R6-NEXT: sc $3, 0($1) 1659; MIPS32R6-NEXT: beqzc $3, $BB6_1 1660; MIPS32R6-NEXT: nop 1661; MIPS32R6-NEXT: # %bb.2: # %entry 1662; MIPS32R6-NEXT: jr $ra 1663; MIPS32R6-NEXT: addiu $sp, $sp, 8 1664; 1665; MIPS32R6O0-LABEL: AtomicSwap32: 1666; MIPS32R6O0: # %bb.0: # %entry 1667; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 1668; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 1669; MIPS32R6O0-NEXT: addiu $sp, $sp, -8 1670; MIPS32R6O0-NEXT: addu $1, $2, $25 1671; MIPS32R6O0-NEXT: sw $4, 4($sp) 1672; MIPS32R6O0-NEXT: lw $2, 4($sp) 1673; MIPS32R6O0-NEXT: lw $1, %got(x)($1) 1674; MIPS32R6O0-NEXT: $BB6_1: # %entry 1675; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 1676; MIPS32R6O0-NEXT: ll $3, 0($1) 1677; MIPS32R6O0-NEXT: move $4, $2 1678; MIPS32R6O0-NEXT: sc $4, 0($1) 1679; MIPS32R6O0-NEXT: beqzc $4, $BB6_1 1680; MIPS32R6O0-NEXT: # %bb.2: # %entry 1681; MIPS32R6O0-NEXT: move $2, $3 1682; MIPS32R6O0-NEXT: addiu $sp, $sp, 8 1683; MIPS32R6O0-NEXT: jrc $ra 1684; 1685; MIPS4-LABEL: AtomicSwap32: 1686; MIPS4: # %bb.0: # %entry 1687; MIPS4-NEXT: daddiu $sp, $sp, -16 1688; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap32))) 1689; MIPS4-NEXT: daddu $1, $1, $25 1690; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap32))) 1691; MIPS4-NEXT: sw $4, 12($sp) 1692; MIPS4-NEXT: ld $1, %got_disp(x)($1) 1693; MIPS4-NEXT: .LBB6_1: # %entry 1694; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 1695; MIPS4-NEXT: ll $2, 0($1) 1696; MIPS4-NEXT: move $3, $4 1697; MIPS4-NEXT: sc $3, 0($1) 1698; MIPS4-NEXT: beqz $3, .LBB6_1 1699; MIPS4-NEXT: nop 1700; MIPS4-NEXT: # %bb.2: # %entry 1701; MIPS4-NEXT: jr $ra 1702; MIPS4-NEXT: daddiu $sp, $sp, 16 1703; 1704; MIPS64-LABEL: AtomicSwap32: 1705; MIPS64: # %bb.0: # %entry 1706; MIPS64-NEXT: daddiu $sp, $sp, -16 1707; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap32))) 1708; MIPS64-NEXT: daddu $1, $1, $25 1709; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap32))) 1710; MIPS64-NEXT: sw $4, 12($sp) 1711; MIPS64-NEXT: ld $1, %got_disp(x)($1) 1712; MIPS64-NEXT: .LBB6_1: # %entry 1713; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 1714; MIPS64-NEXT: ll $2, 0($1) 1715; MIPS64-NEXT: move $3, $4 1716; MIPS64-NEXT: sc $3, 0($1) 1717; MIPS64-NEXT: beqz $3, .LBB6_1 1718; MIPS64-NEXT: nop 1719; MIPS64-NEXT: # %bb.2: # %entry 1720; MIPS64-NEXT: jr $ra 1721; MIPS64-NEXT: daddiu $sp, $sp, 16 1722; 1723; MIPS64R2-LABEL: AtomicSwap32: 1724; MIPS64R2: # %bb.0: # %entry 1725; MIPS64R2-NEXT: daddiu $sp, $sp, -16 1726; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap32))) 1727; MIPS64R2-NEXT: daddu $1, $1, $25 1728; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap32))) 1729; MIPS64R2-NEXT: sw $4, 12($sp) 1730; MIPS64R2-NEXT: ld $1, %got_disp(x)($1) 1731; MIPS64R2-NEXT: .LBB6_1: # %entry 1732; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 1733; MIPS64R2-NEXT: ll $2, 0($1) 1734; MIPS64R2-NEXT: move $3, $4 1735; MIPS64R2-NEXT: sc $3, 0($1) 1736; MIPS64R2-NEXT: beqz $3, .LBB6_1 1737; MIPS64R2-NEXT: nop 1738; MIPS64R2-NEXT: # %bb.2: # %entry 1739; MIPS64R2-NEXT: jr $ra 1740; MIPS64R2-NEXT: daddiu $sp, $sp, 16 1741; 1742; MIPS64R6-LABEL: AtomicSwap32: 1743; MIPS64R6: # %bb.0: # %entry 1744; MIPS64R6-NEXT: daddiu $sp, $sp, -16 1745; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap32))) 1746; MIPS64R6-NEXT: daddu $1, $1, $25 1747; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap32))) 1748; MIPS64R6-NEXT: sw $4, 12($sp) 1749; MIPS64R6-NEXT: ld $1, %got_disp(x)($1) 1750; MIPS64R6-NEXT: .LBB6_1: # %entry 1751; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 1752; MIPS64R6-NEXT: ll $2, 0($1) 1753; MIPS64R6-NEXT: move $3, $4 1754; MIPS64R6-NEXT: sc $3, 0($1) 1755; MIPS64R6-NEXT: beqzc $3, .LBB6_1 1756; MIPS64R6-NEXT: nop 1757; MIPS64R6-NEXT: # %bb.2: # %entry 1758; MIPS64R6-NEXT: jr $ra 1759; MIPS64R6-NEXT: daddiu $sp, $sp, 16 1760; 1761; MIPS64R6O0-LABEL: AtomicSwap32: 1762; MIPS64R6O0: # %bb.0: # %entry 1763; MIPS64R6O0-NEXT: daddiu $sp, $sp, -16 1764; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap32))) 1765; MIPS64R6O0-NEXT: daddu $1, $1, $25 1766; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap32))) 1767; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 1768; MIPS64R6O0-NEXT: sw $4, 12($sp) 1769; MIPS64R6O0-NEXT: lw $2, 12($sp) 1770; MIPS64R6O0-NEXT: ld $1, %got_disp(x)($1) 1771; MIPS64R6O0-NEXT: .LBB6_1: # %entry 1772; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 1773; MIPS64R6O0-NEXT: ll $3, 0($1) 1774; MIPS64R6O0-NEXT: move $4, $2 1775; MIPS64R6O0-NEXT: sc $4, 0($1) 1776; MIPS64R6O0-NEXT: beqzc $4, .LBB6_1 1777; MIPS64R6O0-NEXT: # %bb.2: # %entry 1778; MIPS64R6O0-NEXT: move $2, $3 1779; MIPS64R6O0-NEXT: daddiu $sp, $sp, 16 1780; MIPS64R6O0-NEXT: jrc $ra 1781; 1782; MM32-LABEL: AtomicSwap32: 1783; MM32: # %bb.0: # %entry 1784; MM32-NEXT: lui $2, %hi(_gp_disp) 1785; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 1786; MM32-NEXT: addiu $sp, $sp, -8 1787; MM32-NEXT: addu $2, $2, $25 1788; MM32-NEXT: sw $4, 4($sp) 1789; MM32-NEXT: lw $1, %got(x)($2) 1790; MM32-NEXT: $BB6_1: # %entry 1791; MM32-NEXT: # =>This Inner Loop Header: Depth=1 1792; MM32-NEXT: ll $2, 0($1) 1793; MM32-NEXT: or $3, $4, $zero 1794; MM32-NEXT: sc $3, 0($1) 1795; MM32-NEXT: beqzc $3, $BB6_1 1796; MM32-NEXT: # %bb.2: # %entry 1797; MM32-NEXT: addiusp 8 1798; MM32-NEXT: jrc $ra 1799; 1800; O1-LABEL: AtomicSwap32: 1801; O1: # %bb.0: # %entry 1802; O1-NEXT: lui $2, %hi(_gp_disp) 1803; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 1804; O1-NEXT: addiu $sp, $sp, -8 1805; O1-NEXT: addu $1, $2, $25 1806; O1-NEXT: sw $4, 4($sp) 1807; O1-NEXT: lw $1, %got(x)($1) 1808; O1-NEXT: $BB6_1: # %entry 1809; O1-NEXT: # =>This Inner Loop Header: Depth=1 1810; O1-NEXT: ll $2, 0($1) 1811; O1-NEXT: move $3, $4 1812; O1-NEXT: sc $3, 0($1) 1813; O1-NEXT: beqz $3, $BB6_1 1814; O1-NEXT: nop 1815; O1-NEXT: # %bb.2: # %entry 1816; O1-NEXT: jr $ra 1817; O1-NEXT: addiu $sp, $sp, 8 1818; 1819; O2-LABEL: AtomicSwap32: 1820; O2: # %bb.0: # %entry 1821; O2-NEXT: lui $2, %hi(_gp_disp) 1822; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 1823; O2-NEXT: addiu $sp, $sp, -8 1824; O2-NEXT: addu $1, $2, $25 1825; O2-NEXT: sw $4, 4($sp) 1826; O2-NEXT: lw $1, %got(x)($1) 1827; O2-NEXT: $BB6_1: # %entry 1828; O2-NEXT: # =>This Inner Loop Header: Depth=1 1829; O2-NEXT: ll $2, 0($1) 1830; O2-NEXT: move $3, $4 1831; O2-NEXT: sc $3, 0($1) 1832; O2-NEXT: beqz $3, $BB6_1 1833; O2-NEXT: nop 1834; O2-NEXT: # %bb.2: # %entry 1835; O2-NEXT: jr $ra 1836; O2-NEXT: addiu $sp, $sp, 8 1837; 1838; O3-LABEL: AtomicSwap32: 1839; O3: # %bb.0: # %entry 1840; O3-NEXT: lui $2, %hi(_gp_disp) 1841; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 1842; O3-NEXT: addiu $sp, $sp, -8 1843; O3-NEXT: addu $1, $2, $25 1844; O3-NEXT: sw $4, 4($sp) 1845; O3-NEXT: lw $1, %got(x)($1) 1846; O3-NEXT: $BB6_1: # %entry 1847; O3-NEXT: # =>This Inner Loop Header: Depth=1 1848; O3-NEXT: ll $2, 0($1) 1849; O3-NEXT: move $3, $4 1850; O3-NEXT: sc $3, 0($1) 1851; O3-NEXT: beqz $3, $BB6_1 1852; O3-NEXT: nop 1853; O3-NEXT: # %bb.2: # %entry 1854; O3-NEXT: jr $ra 1855; O3-NEXT: addiu $sp, $sp, 8 1856; 1857; MIPS32EB-LABEL: AtomicSwap32: 1858; MIPS32EB: # %bb.0: # %entry 1859; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 1860; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 1861; MIPS32EB-NEXT: addiu $sp, $sp, -8 1862; MIPS32EB-NEXT: addu $1, $2, $25 1863; MIPS32EB-NEXT: sw $4, 4($sp) 1864; MIPS32EB-NEXT: lw $1, %got(x)($1) 1865; MIPS32EB-NEXT: $BB6_1: # %entry 1866; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 1867; MIPS32EB-NEXT: ll $2, 0($1) 1868; MIPS32EB-NEXT: move $3, $4 1869; MIPS32EB-NEXT: sc $3, 0($1) 1870; MIPS32EB-NEXT: beqz $3, $BB6_1 1871; MIPS32EB-NEXT: nop 1872; MIPS32EB-NEXT: # %bb.2: # %entry 1873; MIPS32EB-NEXT: jr $ra 1874; MIPS32EB-NEXT: addiu $sp, $sp, 8 1875entry: 1876 %newval.addr = alloca i32, align 4 1877 store i32 %newval, i32* %newval.addr, align 4 1878 %tmp = load i32, i32* %newval.addr, align 4 1879 %0 = atomicrmw xchg i32* @x, i32 %tmp monotonic 1880 ret i32 %0 1881 1882} 1883 1884define i32 @AtomicCmpSwap32(i32 signext %oldval, i32 signext %newval) nounwind { 1885; MIPS32-LABEL: AtomicCmpSwap32: 1886; MIPS32: # %bb.0: # %entry 1887; MIPS32-NEXT: lui $2, %hi(_gp_disp) 1888; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 1889; MIPS32-NEXT: addiu $sp, $sp, -8 1890; MIPS32-NEXT: addu $1, $2, $25 1891; MIPS32-NEXT: sw $5, 4($sp) 1892; MIPS32-NEXT: lw $1, %got(x)($1) 1893; MIPS32-NEXT: $BB7_1: # %entry 1894; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 1895; MIPS32-NEXT: ll $2, 0($1) 1896; MIPS32-NEXT: bne $2, $4, $BB7_3 1897; MIPS32-NEXT: nop 1898; MIPS32-NEXT: # %bb.2: # %entry 1899; MIPS32-NEXT: # in Loop: Header=BB7_1 Depth=1 1900; MIPS32-NEXT: move $3, $5 1901; MIPS32-NEXT: sc $3, 0($1) 1902; MIPS32-NEXT: beqz $3, $BB7_1 1903; MIPS32-NEXT: nop 1904; MIPS32-NEXT: $BB7_3: # %entry 1905; MIPS32-NEXT: jr $ra 1906; MIPS32-NEXT: addiu $sp, $sp, 8 1907; 1908; MIPS32O0-LABEL: AtomicCmpSwap32: 1909; MIPS32O0: # %bb.0: # %entry 1910; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 1911; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 1912; MIPS32O0-NEXT: addiu $sp, $sp, -8 1913; MIPS32O0-NEXT: addu $1, $2, $25 1914; MIPS32O0-NEXT: sw $5, 4($sp) 1915; MIPS32O0-NEXT: lw $2, 4($sp) 1916; MIPS32O0-NEXT: lw $1, %got(x)($1) 1917; MIPS32O0-NEXT: move $3, $4 1918; MIPS32O0-NEXT: $BB7_1: # %entry 1919; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 1920; MIPS32O0-NEXT: ll $5, 0($1) 1921; MIPS32O0-NEXT: bne $5, $3, $BB7_3 1922; MIPS32O0-NEXT: nop 1923; MIPS32O0-NEXT: # %bb.2: # %entry 1924; MIPS32O0-NEXT: # in Loop: Header=BB7_1 Depth=1 1925; MIPS32O0-NEXT: move $6, $2 1926; MIPS32O0-NEXT: sc $6, 0($1) 1927; MIPS32O0-NEXT: beqz $6, $BB7_1 1928; MIPS32O0-NEXT: nop 1929; MIPS32O0-NEXT: $BB7_3: # %entry 1930; MIPS32O0-NEXT: xor $1, $5, $4 1931; MIPS32O0-NEXT: sltiu $1, $1, 1 1932; MIPS32O0-NEXT: move $2, $5 1933; MIPS32O0-NEXT: addiu $sp, $sp, 8 1934; MIPS32O0-NEXT: jr $ra 1935; MIPS32O0-NEXT: nop 1936; 1937; MIPS32R2-LABEL: AtomicCmpSwap32: 1938; MIPS32R2: # %bb.0: # %entry 1939; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 1940; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 1941; MIPS32R2-NEXT: addiu $sp, $sp, -8 1942; MIPS32R2-NEXT: addu $1, $2, $25 1943; MIPS32R2-NEXT: sw $5, 4($sp) 1944; MIPS32R2-NEXT: lw $1, %got(x)($1) 1945; MIPS32R2-NEXT: $BB7_1: # %entry 1946; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 1947; MIPS32R2-NEXT: ll $2, 0($1) 1948; MIPS32R2-NEXT: bne $2, $4, $BB7_3 1949; MIPS32R2-NEXT: nop 1950; MIPS32R2-NEXT: # %bb.2: # %entry 1951; MIPS32R2-NEXT: # in Loop: Header=BB7_1 Depth=1 1952; MIPS32R2-NEXT: move $3, $5 1953; MIPS32R2-NEXT: sc $3, 0($1) 1954; MIPS32R2-NEXT: beqz $3, $BB7_1 1955; MIPS32R2-NEXT: nop 1956; MIPS32R2-NEXT: $BB7_3: # %entry 1957; MIPS32R2-NEXT: jr $ra 1958; MIPS32R2-NEXT: addiu $sp, $sp, 8 1959; 1960; MIPS32R6-LABEL: AtomicCmpSwap32: 1961; MIPS32R6: # %bb.0: # %entry 1962; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 1963; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 1964; MIPS32R6-NEXT: addiu $sp, $sp, -8 1965; MIPS32R6-NEXT: addu $1, $2, $25 1966; MIPS32R6-NEXT: sw $5, 4($sp) 1967; MIPS32R6-NEXT: lw $1, %got(x)($1) 1968; MIPS32R6-NEXT: $BB7_1: # %entry 1969; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 1970; MIPS32R6-NEXT: ll $2, 0($1) 1971; MIPS32R6-NEXT: bnec $2, $4, $BB7_3 1972; MIPS32R6-NEXT: # %bb.2: # %entry 1973; MIPS32R6-NEXT: # in Loop: Header=BB7_1 Depth=1 1974; MIPS32R6-NEXT: move $3, $5 1975; MIPS32R6-NEXT: sc $3, 0($1) 1976; MIPS32R6-NEXT: beqzc $3, $BB7_1 1977; MIPS32R6-NEXT: nop 1978; MIPS32R6-NEXT: $BB7_3: # %entry 1979; MIPS32R6-NEXT: jr $ra 1980; MIPS32R6-NEXT: addiu $sp, $sp, 8 1981; 1982; MIPS32R6O0-LABEL: AtomicCmpSwap32: 1983; MIPS32R6O0: # %bb.0: # %entry 1984; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 1985; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 1986; MIPS32R6O0-NEXT: addiu $sp, $sp, -8 1987; MIPS32R6O0-NEXT: addu $1, $2, $25 1988; MIPS32R6O0-NEXT: sw $5, 4($sp) 1989; MIPS32R6O0-NEXT: lw $2, 4($sp) 1990; MIPS32R6O0-NEXT: lw $1, %got(x)($1) 1991; MIPS32R6O0-NEXT: $BB7_1: # %entry 1992; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 1993; MIPS32R6O0-NEXT: ll $3, 0($1) 1994; MIPS32R6O0-NEXT: bnec $3, $4, $BB7_3 1995; MIPS32R6O0-NEXT: # %bb.2: # %entry 1996; MIPS32R6O0-NEXT: # in Loop: Header=BB7_1 Depth=1 1997; MIPS32R6O0-NEXT: move $5, $2 1998; MIPS32R6O0-NEXT: sc $5, 0($1) 1999; MIPS32R6O0-NEXT: beqzc $5, $BB7_1 2000; MIPS32R6O0-NEXT: $BB7_3: # %entry 2001; MIPS32R6O0-NEXT: move $2, $3 2002; MIPS32R6O0-NEXT: addiu $sp, $sp, 8 2003; MIPS32R6O0-NEXT: jrc $ra 2004; 2005; MIPS4-LABEL: AtomicCmpSwap32: 2006; MIPS4: # %bb.0: # %entry 2007; MIPS4-NEXT: daddiu $sp, $sp, -16 2008; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap32))) 2009; MIPS4-NEXT: daddu $1, $1, $25 2010; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap32))) 2011; MIPS4-NEXT: sw $5, 12($sp) 2012; MIPS4-NEXT: ld $1, %got_disp(x)($1) 2013; MIPS4-NEXT: .LBB7_1: # %entry 2014; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 2015; MIPS4-NEXT: ll $2, 0($1) 2016; MIPS4-NEXT: bne $2, $4, .LBB7_3 2017; MIPS4-NEXT: nop 2018; MIPS4-NEXT: # %bb.2: # %entry 2019; MIPS4-NEXT: # in Loop: Header=BB7_1 Depth=1 2020; MIPS4-NEXT: move $3, $5 2021; MIPS4-NEXT: sc $3, 0($1) 2022; MIPS4-NEXT: beqz $3, .LBB7_1 2023; MIPS4-NEXT: nop 2024; MIPS4-NEXT: .LBB7_3: # %entry 2025; MIPS4-NEXT: jr $ra 2026; MIPS4-NEXT: daddiu $sp, $sp, 16 2027; 2028; MIPS64-LABEL: AtomicCmpSwap32: 2029; MIPS64: # %bb.0: # %entry 2030; MIPS64-NEXT: daddiu $sp, $sp, -16 2031; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap32))) 2032; MIPS64-NEXT: daddu $1, $1, $25 2033; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap32))) 2034; MIPS64-NEXT: sw $5, 12($sp) 2035; MIPS64-NEXT: ld $1, %got_disp(x)($1) 2036; MIPS64-NEXT: .LBB7_1: # %entry 2037; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 2038; MIPS64-NEXT: ll $2, 0($1) 2039; MIPS64-NEXT: bne $2, $4, .LBB7_3 2040; MIPS64-NEXT: nop 2041; MIPS64-NEXT: # %bb.2: # %entry 2042; MIPS64-NEXT: # in Loop: Header=BB7_1 Depth=1 2043; MIPS64-NEXT: move $3, $5 2044; MIPS64-NEXT: sc $3, 0($1) 2045; MIPS64-NEXT: beqz $3, .LBB7_1 2046; MIPS64-NEXT: nop 2047; MIPS64-NEXT: .LBB7_3: # %entry 2048; MIPS64-NEXT: jr $ra 2049; MIPS64-NEXT: daddiu $sp, $sp, 16 2050; 2051; MIPS64R2-LABEL: AtomicCmpSwap32: 2052; MIPS64R2: # %bb.0: # %entry 2053; MIPS64R2-NEXT: daddiu $sp, $sp, -16 2054; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap32))) 2055; MIPS64R2-NEXT: daddu $1, $1, $25 2056; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap32))) 2057; MIPS64R2-NEXT: sw $5, 12($sp) 2058; MIPS64R2-NEXT: ld $1, %got_disp(x)($1) 2059; MIPS64R2-NEXT: .LBB7_1: # %entry 2060; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 2061; MIPS64R2-NEXT: ll $2, 0($1) 2062; MIPS64R2-NEXT: bne $2, $4, .LBB7_3 2063; MIPS64R2-NEXT: nop 2064; MIPS64R2-NEXT: # %bb.2: # %entry 2065; MIPS64R2-NEXT: # in Loop: Header=BB7_1 Depth=1 2066; MIPS64R2-NEXT: move $3, $5 2067; MIPS64R2-NEXT: sc $3, 0($1) 2068; MIPS64R2-NEXT: beqz $3, .LBB7_1 2069; MIPS64R2-NEXT: nop 2070; MIPS64R2-NEXT: .LBB7_3: # %entry 2071; MIPS64R2-NEXT: jr $ra 2072; MIPS64R2-NEXT: daddiu $sp, $sp, 16 2073; 2074; MIPS64R6-LABEL: AtomicCmpSwap32: 2075; MIPS64R6: # %bb.0: # %entry 2076; MIPS64R6-NEXT: daddiu $sp, $sp, -16 2077; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap32))) 2078; MIPS64R6-NEXT: daddu $1, $1, $25 2079; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap32))) 2080; MIPS64R6-NEXT: sw $5, 12($sp) 2081; MIPS64R6-NEXT: ld $1, %got_disp(x)($1) 2082; MIPS64R6-NEXT: .LBB7_1: # %entry 2083; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 2084; MIPS64R6-NEXT: ll $2, 0($1) 2085; MIPS64R6-NEXT: bnec $2, $4, .LBB7_3 2086; MIPS64R6-NEXT: # %bb.2: # %entry 2087; MIPS64R6-NEXT: # in Loop: Header=BB7_1 Depth=1 2088; MIPS64R6-NEXT: move $3, $5 2089; MIPS64R6-NEXT: sc $3, 0($1) 2090; MIPS64R6-NEXT: beqzc $3, .LBB7_1 2091; MIPS64R6-NEXT: nop 2092; MIPS64R6-NEXT: .LBB7_3: # %entry 2093; MIPS64R6-NEXT: jr $ra 2094; MIPS64R6-NEXT: daddiu $sp, $sp, 16 2095; 2096; MIPS64R6O0-LABEL: AtomicCmpSwap32: 2097; MIPS64R6O0: # %bb.0: # %entry 2098; MIPS64R6O0-NEXT: daddiu $sp, $sp, -16 2099; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap32))) 2100; MIPS64R6O0-NEXT: daddu $1, $1, $25 2101; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap32))) 2102; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 2103; MIPS64R6O0-NEXT: # kill: def $a1 killed $a1 killed $a1_64 2104; MIPS64R6O0-NEXT: sw $5, 12($sp) 2105; MIPS64R6O0-NEXT: lw $2, 12($sp) 2106; MIPS64R6O0-NEXT: ld $1, %got_disp(x)($1) 2107; MIPS64R6O0-NEXT: .LBB7_1: # %entry 2108; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 2109; MIPS64R6O0-NEXT: ll $3, 0($1) 2110; MIPS64R6O0-NEXT: bnec $3, $4, .LBB7_3 2111; MIPS64R6O0-NEXT: # %bb.2: # %entry 2112; MIPS64R6O0-NEXT: # in Loop: Header=BB7_1 Depth=1 2113; MIPS64R6O0-NEXT: move $5, $2 2114; MIPS64R6O0-NEXT: sc $5, 0($1) 2115; MIPS64R6O0-NEXT: beqzc $5, .LBB7_1 2116; MIPS64R6O0-NEXT: .LBB7_3: # %entry 2117; MIPS64R6O0-NEXT: move $2, $3 2118; MIPS64R6O0-NEXT: daddiu $sp, $sp, 16 2119; MIPS64R6O0-NEXT: jrc $ra 2120; 2121; MM32-LABEL: AtomicCmpSwap32: 2122; MM32: # %bb.0: # %entry 2123; MM32-NEXT: lui $2, %hi(_gp_disp) 2124; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 2125; MM32-NEXT: addiu $sp, $sp, -8 2126; MM32-NEXT: addu $2, $2, $25 2127; MM32-NEXT: sw $5, 4($sp) 2128; MM32-NEXT: lw $1, %got(x)($2) 2129; MM32-NEXT: $BB7_1: # %entry 2130; MM32-NEXT: # =>This Inner Loop Header: Depth=1 2131; MM32-NEXT: ll $2, 0($1) 2132; MM32-NEXT: bne $2, $4, $BB7_3 2133; MM32-NEXT: nop 2134; MM32-NEXT: # %bb.2: # %entry 2135; MM32-NEXT: # in Loop: Header=BB7_1 Depth=1 2136; MM32-NEXT: move $3, $5 2137; MM32-NEXT: sc $3, 0($1) 2138; MM32-NEXT: beqzc $3, $BB7_1 2139; MM32-NEXT: $BB7_3: # %entry 2140; MM32-NEXT: addiusp 8 2141; MM32-NEXT: jrc $ra 2142; 2143; O1-LABEL: AtomicCmpSwap32: 2144; O1: # %bb.0: # %entry 2145; O1-NEXT: lui $2, %hi(_gp_disp) 2146; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 2147; O1-NEXT: addiu $sp, $sp, -8 2148; O1-NEXT: addu $1, $2, $25 2149; O1-NEXT: sw $5, 4($sp) 2150; O1-NEXT: lw $1, %got(x)($1) 2151; O1-NEXT: $BB7_1: # %entry 2152; O1-NEXT: # =>This Inner Loop Header: Depth=1 2153; O1-NEXT: ll $2, 0($1) 2154; O1-NEXT: bne $2, $4, $BB7_3 2155; O1-NEXT: nop 2156; O1-NEXT: # %bb.2: # %entry 2157; O1-NEXT: # in Loop: Header=BB7_1 Depth=1 2158; O1-NEXT: move $3, $5 2159; O1-NEXT: sc $3, 0($1) 2160; O1-NEXT: beqz $3, $BB7_1 2161; O1-NEXT: nop 2162; O1-NEXT: $BB7_3: # %entry 2163; O1-NEXT: jr $ra 2164; O1-NEXT: addiu $sp, $sp, 8 2165; 2166; O2-LABEL: AtomicCmpSwap32: 2167; O2: # %bb.0: # %entry 2168; O2-NEXT: lui $2, %hi(_gp_disp) 2169; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 2170; O2-NEXT: addiu $sp, $sp, -8 2171; O2-NEXT: addu $1, $2, $25 2172; O2-NEXT: sw $5, 4($sp) 2173; O2-NEXT: lw $1, %got(x)($1) 2174; O2-NEXT: $BB7_1: # %entry 2175; O2-NEXT: # =>This Inner Loop Header: Depth=1 2176; O2-NEXT: ll $2, 0($1) 2177; O2-NEXT: bne $2, $4, $BB7_3 2178; O2-NEXT: nop 2179; O2-NEXT: # %bb.2: # %entry 2180; O2-NEXT: # in Loop: Header=BB7_1 Depth=1 2181; O2-NEXT: move $3, $5 2182; O2-NEXT: sc $3, 0($1) 2183; O2-NEXT: beqz $3, $BB7_1 2184; O2-NEXT: nop 2185; O2-NEXT: $BB7_3: # %entry 2186; O2-NEXT: jr $ra 2187; O2-NEXT: addiu $sp, $sp, 8 2188; 2189; O3-LABEL: AtomicCmpSwap32: 2190; O3: # %bb.0: # %entry 2191; O3-NEXT: lui $2, %hi(_gp_disp) 2192; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 2193; O3-NEXT: addiu $sp, $sp, -8 2194; O3-NEXT: addu $1, $2, $25 2195; O3-NEXT: sw $5, 4($sp) 2196; O3-NEXT: lw $1, %got(x)($1) 2197; O3-NEXT: $BB7_1: # %entry 2198; O3-NEXT: # =>This Inner Loop Header: Depth=1 2199; O3-NEXT: ll $2, 0($1) 2200; O3-NEXT: bne $2, $4, $BB7_3 2201; O3-NEXT: nop 2202; O3-NEXT: # %bb.2: # %entry 2203; O3-NEXT: # in Loop: Header=BB7_1 Depth=1 2204; O3-NEXT: move $3, $5 2205; O3-NEXT: sc $3, 0($1) 2206; O3-NEXT: beqz $3, $BB7_1 2207; O3-NEXT: nop 2208; O3-NEXT: $BB7_3: # %entry 2209; O3-NEXT: jr $ra 2210; O3-NEXT: addiu $sp, $sp, 8 2211; 2212; MIPS32EB-LABEL: AtomicCmpSwap32: 2213; MIPS32EB: # %bb.0: # %entry 2214; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 2215; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 2216; MIPS32EB-NEXT: addiu $sp, $sp, -8 2217; MIPS32EB-NEXT: addu $1, $2, $25 2218; MIPS32EB-NEXT: sw $5, 4($sp) 2219; MIPS32EB-NEXT: lw $1, %got(x)($1) 2220; MIPS32EB-NEXT: $BB7_1: # %entry 2221; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 2222; MIPS32EB-NEXT: ll $2, 0($1) 2223; MIPS32EB-NEXT: bne $2, $4, $BB7_3 2224; MIPS32EB-NEXT: nop 2225; MIPS32EB-NEXT: # %bb.2: # %entry 2226; MIPS32EB-NEXT: # in Loop: Header=BB7_1 Depth=1 2227; MIPS32EB-NEXT: move $3, $5 2228; MIPS32EB-NEXT: sc $3, 0($1) 2229; MIPS32EB-NEXT: beqz $3, $BB7_1 2230; MIPS32EB-NEXT: nop 2231; MIPS32EB-NEXT: $BB7_3: # %entry 2232; MIPS32EB-NEXT: jr $ra 2233; MIPS32EB-NEXT: addiu $sp, $sp, 8 2234entry: 2235 %newval.addr = alloca i32, align 4 2236 store i32 %newval, i32* %newval.addr, align 4 2237 %tmp = load i32, i32* %newval.addr, align 4 2238 %0 = cmpxchg i32* @x, i32 %oldval, i32 %tmp monotonic monotonic 2239 %1 = extractvalue { i32, i1 } %0, 0 2240 ret i32 %1 2241 2242} 2243 2244@y = common global i8 0, align 1 2245 2246define signext i8 @AtomicLoadAdd8(i8 signext %incr) nounwind { 2247; MIPS32-LABEL: AtomicLoadAdd8: 2248; MIPS32: # %bb.0: # %entry 2249; MIPS32-NEXT: lui $2, %hi(_gp_disp) 2250; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 2251; MIPS32-NEXT: addu $1, $2, $25 2252; MIPS32-NEXT: lw $1, %got(y)($1) 2253; MIPS32-NEXT: addiu $2, $zero, -4 2254; MIPS32-NEXT: and $2, $1, $2 2255; MIPS32-NEXT: andi $1, $1, 3 2256; MIPS32-NEXT: sll $3, $1, 3 2257; MIPS32-NEXT: ori $1, $zero, 255 2258; MIPS32-NEXT: sllv $5, $1, $3 2259; MIPS32-NEXT: nor $6, $zero, $5 2260; MIPS32-NEXT: sllv $4, $4, $3 2261; MIPS32-NEXT: $BB8_1: # %entry 2262; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 2263; MIPS32-NEXT: ll $7, 0($2) 2264; MIPS32-NEXT: addu $8, $7, $4 2265; MIPS32-NEXT: and $8, $8, $5 2266; MIPS32-NEXT: and $9, $7, $6 2267; MIPS32-NEXT: or $9, $9, $8 2268; MIPS32-NEXT: sc $9, 0($2) 2269; MIPS32-NEXT: beqz $9, $BB8_1 2270; MIPS32-NEXT: nop 2271; MIPS32-NEXT: # %bb.2: # %entry 2272; MIPS32-NEXT: and $1, $7, $5 2273; MIPS32-NEXT: srlv $1, $1, $3 2274; MIPS32-NEXT: sll $1, $1, 24 2275; MIPS32-NEXT: sra $1, $1, 24 2276; MIPS32-NEXT: # %bb.3: # %entry 2277; MIPS32-NEXT: sll $1, $1, 24 2278; MIPS32-NEXT: jr $ra 2279; MIPS32-NEXT: sra $2, $1, 24 2280; 2281; MIPS32O0-LABEL: AtomicLoadAdd8: 2282; MIPS32O0: # %bb.0: # %entry 2283; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 2284; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 2285; MIPS32O0-NEXT: addiu $sp, $sp, -8 2286; MIPS32O0-NEXT: addu $1, $2, $25 2287; MIPS32O0-NEXT: lw $1, %got(y)($1) 2288; MIPS32O0-NEXT: addiu $2, $zero, -4 2289; MIPS32O0-NEXT: and $2, $1, $2 2290; MIPS32O0-NEXT: andi $1, $1, 3 2291; MIPS32O0-NEXT: sll $1, $1, 3 2292; MIPS32O0-NEXT: ori $3, $zero, 255 2293; MIPS32O0-NEXT: sllv $3, $3, $1 2294; MIPS32O0-NEXT: nor $5, $zero, $3 2295; MIPS32O0-NEXT: sllv $4, $4, $1 2296; MIPS32O0-NEXT: $BB8_1: # %entry 2297; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 2298; MIPS32O0-NEXT: ll $7, 0($2) 2299; MIPS32O0-NEXT: addu $8, $7, $4 2300; MIPS32O0-NEXT: and $8, $8, $3 2301; MIPS32O0-NEXT: and $9, $7, $5 2302; MIPS32O0-NEXT: or $9, $9, $8 2303; MIPS32O0-NEXT: sc $9, 0($2) 2304; MIPS32O0-NEXT: beqz $9, $BB8_1 2305; MIPS32O0-NEXT: nop 2306; MIPS32O0-NEXT: # %bb.2: # %entry 2307; MIPS32O0-NEXT: and $6, $7, $3 2308; MIPS32O0-NEXT: srlv $6, $6, $1 2309; MIPS32O0-NEXT: sll $6, $6, 24 2310; MIPS32O0-NEXT: sra $6, $6, 24 2311; MIPS32O0-NEXT: # %bb.3: # %entry 2312; MIPS32O0-NEXT: sw $6, 4($sp) # 4-byte Folded Spill 2313; MIPS32O0-NEXT: # %bb.4: # %entry 2314; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload 2315; MIPS32O0-NEXT: sll $2, $1, 24 2316; MIPS32O0-NEXT: sra $2, $2, 24 2317; MIPS32O0-NEXT: addiu $sp, $sp, 8 2318; MIPS32O0-NEXT: jr $ra 2319; MIPS32O0-NEXT: nop 2320; 2321; MIPS32R2-LABEL: AtomicLoadAdd8: 2322; MIPS32R2: # %bb.0: # %entry 2323; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 2324; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 2325; MIPS32R2-NEXT: addu $1, $2, $25 2326; MIPS32R2-NEXT: lw $1, %got(y)($1) 2327; MIPS32R2-NEXT: addiu $2, $zero, -4 2328; MIPS32R2-NEXT: and $2, $1, $2 2329; MIPS32R2-NEXT: andi $1, $1, 3 2330; MIPS32R2-NEXT: sll $3, $1, 3 2331; MIPS32R2-NEXT: ori $1, $zero, 255 2332; MIPS32R2-NEXT: sllv $5, $1, $3 2333; MIPS32R2-NEXT: nor $6, $zero, $5 2334; MIPS32R2-NEXT: sllv $4, $4, $3 2335; MIPS32R2-NEXT: $BB8_1: # %entry 2336; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 2337; MIPS32R2-NEXT: ll $7, 0($2) 2338; MIPS32R2-NEXT: addu $8, $7, $4 2339; MIPS32R2-NEXT: and $8, $8, $5 2340; MIPS32R2-NEXT: and $9, $7, $6 2341; MIPS32R2-NEXT: or $9, $9, $8 2342; MIPS32R2-NEXT: sc $9, 0($2) 2343; MIPS32R2-NEXT: beqz $9, $BB8_1 2344; MIPS32R2-NEXT: nop 2345; MIPS32R2-NEXT: # %bb.2: # %entry 2346; MIPS32R2-NEXT: and $1, $7, $5 2347; MIPS32R2-NEXT: srlv $1, $1, $3 2348; MIPS32R2-NEXT: seb $1, $1 2349; MIPS32R2-NEXT: # %bb.3: # %entry 2350; MIPS32R2-NEXT: jr $ra 2351; MIPS32R2-NEXT: seb $2, $1 2352; 2353; MIPS32R6-LABEL: AtomicLoadAdd8: 2354; MIPS32R6: # %bb.0: # %entry 2355; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 2356; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 2357; MIPS32R6-NEXT: addu $1, $2, $25 2358; MIPS32R6-NEXT: lw $1, %got(y)($1) 2359; MIPS32R6-NEXT: addiu $2, $zero, -4 2360; MIPS32R6-NEXT: and $2, $1, $2 2361; MIPS32R6-NEXT: andi $1, $1, 3 2362; MIPS32R6-NEXT: sll $3, $1, 3 2363; MIPS32R6-NEXT: ori $1, $zero, 255 2364; MIPS32R6-NEXT: sllv $5, $1, $3 2365; MIPS32R6-NEXT: nor $6, $zero, $5 2366; MIPS32R6-NEXT: sllv $4, $4, $3 2367; MIPS32R6-NEXT: $BB8_1: # %entry 2368; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 2369; MIPS32R6-NEXT: ll $7, 0($2) 2370; MIPS32R6-NEXT: addu $8, $7, $4 2371; MIPS32R6-NEXT: and $8, $8, $5 2372; MIPS32R6-NEXT: and $9, $7, $6 2373; MIPS32R6-NEXT: or $9, $9, $8 2374; MIPS32R6-NEXT: sc $9, 0($2) 2375; MIPS32R6-NEXT: beqzc $9, $BB8_1 2376; MIPS32R6-NEXT: # %bb.2: # %entry 2377; MIPS32R6-NEXT: and $1, $7, $5 2378; MIPS32R6-NEXT: srlv $1, $1, $3 2379; MIPS32R6-NEXT: seb $1, $1 2380; MIPS32R6-NEXT: # %bb.3: # %entry 2381; MIPS32R6-NEXT: jr $ra 2382; MIPS32R6-NEXT: seb $2, $1 2383; 2384; MIPS32R6O0-LABEL: AtomicLoadAdd8: 2385; MIPS32R6O0: # %bb.0: # %entry 2386; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 2387; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 2388; MIPS32R6O0-NEXT: addiu $sp, $sp, -8 2389; MIPS32R6O0-NEXT: addu $1, $2, $25 2390; MIPS32R6O0-NEXT: move $2, $4 2391; MIPS32R6O0-NEXT: lw $1, %got(y)($1) 2392; MIPS32R6O0-NEXT: addiu $3, $zero, -4 2393; MIPS32R6O0-NEXT: and $3, $1, $3 2394; MIPS32R6O0-NEXT: andi $1, $1, 3 2395; MIPS32R6O0-NEXT: sll $1, $1, 3 2396; MIPS32R6O0-NEXT: ori $5, $zero, 255 2397; MIPS32R6O0-NEXT: sllv $5, $5, $1 2398; MIPS32R6O0-NEXT: nor $6, $zero, $5 2399; MIPS32R6O0-NEXT: sllv $4, $4, $1 2400; MIPS32R6O0-NEXT: $BB8_1: # %entry 2401; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 2402; MIPS32R6O0-NEXT: ll $8, 0($3) 2403; MIPS32R6O0-NEXT: addu $9, $8, $4 2404; MIPS32R6O0-NEXT: and $9, $9, $5 2405; MIPS32R6O0-NEXT: and $10, $8, $6 2406; MIPS32R6O0-NEXT: or $10, $10, $9 2407; MIPS32R6O0-NEXT: sc $10, 0($3) 2408; MIPS32R6O0-NEXT: beqzc $10, $BB8_1 2409; MIPS32R6O0-NEXT: # %bb.2: # %entry 2410; MIPS32R6O0-NEXT: and $7, $8, $5 2411; MIPS32R6O0-NEXT: srlv $7, $7, $1 2412; MIPS32R6O0-NEXT: seb $7, $7 2413; MIPS32R6O0-NEXT: # %bb.3: # %entry 2414; MIPS32R6O0-NEXT: sw $7, 4($sp) # 4-byte Folded Spill 2415; MIPS32R6O0-NEXT: # %bb.4: # %entry 2416; MIPS32R6O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload 2417; MIPS32R6O0-NEXT: seb $2, $1 2418; MIPS32R6O0-NEXT: addiu $sp, $sp, 8 2419; MIPS32R6O0-NEXT: jrc $ra 2420; 2421; MIPS4-LABEL: AtomicLoadAdd8: 2422; MIPS4: # %bb.0: # %entry 2423; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd8))) 2424; MIPS4-NEXT: daddu $1, $1, $25 2425; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd8))) 2426; MIPS4-NEXT: ld $1, %got_disp(y)($1) 2427; MIPS4-NEXT: daddiu $2, $zero, -4 2428; MIPS4-NEXT: and $2, $1, $2 2429; MIPS4-NEXT: andi $1, $1, 3 2430; MIPS4-NEXT: sll $3, $1, 3 2431; MIPS4-NEXT: ori $1, $zero, 255 2432; MIPS4-NEXT: sllv $5, $1, $3 2433; MIPS4-NEXT: nor $6, $zero, $5 2434; MIPS4-NEXT: sllv $4, $4, $3 2435; MIPS4-NEXT: .LBB8_1: # %entry 2436; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 2437; MIPS4-NEXT: ll $7, 0($2) 2438; MIPS4-NEXT: addu $8, $7, $4 2439; MIPS4-NEXT: and $8, $8, $5 2440; MIPS4-NEXT: and $9, $7, $6 2441; MIPS4-NEXT: or $9, $9, $8 2442; MIPS4-NEXT: sc $9, 0($2) 2443; MIPS4-NEXT: beqz $9, .LBB8_1 2444; MIPS4-NEXT: nop 2445; MIPS4-NEXT: # %bb.2: # %entry 2446; MIPS4-NEXT: and $1, $7, $5 2447; MIPS4-NEXT: srlv $1, $1, $3 2448; MIPS4-NEXT: sll $1, $1, 24 2449; MIPS4-NEXT: sra $1, $1, 24 2450; MIPS4-NEXT: # %bb.3: # %entry 2451; MIPS4-NEXT: sll $1, $1, 24 2452; MIPS4-NEXT: jr $ra 2453; MIPS4-NEXT: sra $2, $1, 24 2454; 2455; MIPS64-LABEL: AtomicLoadAdd8: 2456; MIPS64: # %bb.0: # %entry 2457; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd8))) 2458; MIPS64-NEXT: daddu $1, $1, $25 2459; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd8))) 2460; MIPS64-NEXT: ld $1, %got_disp(y)($1) 2461; MIPS64-NEXT: daddiu $2, $zero, -4 2462; MIPS64-NEXT: and $2, $1, $2 2463; MIPS64-NEXT: andi $1, $1, 3 2464; MIPS64-NEXT: sll $3, $1, 3 2465; MIPS64-NEXT: ori $1, $zero, 255 2466; MIPS64-NEXT: sllv $5, $1, $3 2467; MIPS64-NEXT: nor $6, $zero, $5 2468; MIPS64-NEXT: sllv $4, $4, $3 2469; MIPS64-NEXT: .LBB8_1: # %entry 2470; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 2471; MIPS64-NEXT: ll $7, 0($2) 2472; MIPS64-NEXT: addu $8, $7, $4 2473; MIPS64-NEXT: and $8, $8, $5 2474; MIPS64-NEXT: and $9, $7, $6 2475; MIPS64-NEXT: or $9, $9, $8 2476; MIPS64-NEXT: sc $9, 0($2) 2477; MIPS64-NEXT: beqz $9, .LBB8_1 2478; MIPS64-NEXT: nop 2479; MIPS64-NEXT: # %bb.2: # %entry 2480; MIPS64-NEXT: and $1, $7, $5 2481; MIPS64-NEXT: srlv $1, $1, $3 2482; MIPS64-NEXT: sll $1, $1, 24 2483; MIPS64-NEXT: sra $1, $1, 24 2484; MIPS64-NEXT: # %bb.3: # %entry 2485; MIPS64-NEXT: sll $1, $1, 24 2486; MIPS64-NEXT: jr $ra 2487; MIPS64-NEXT: sra $2, $1, 24 2488; 2489; MIPS64R2-LABEL: AtomicLoadAdd8: 2490; MIPS64R2: # %bb.0: # %entry 2491; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd8))) 2492; MIPS64R2-NEXT: daddu $1, $1, $25 2493; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd8))) 2494; MIPS64R2-NEXT: ld $1, %got_disp(y)($1) 2495; MIPS64R2-NEXT: daddiu $2, $zero, -4 2496; MIPS64R2-NEXT: and $2, $1, $2 2497; MIPS64R2-NEXT: andi $1, $1, 3 2498; MIPS64R2-NEXT: sll $3, $1, 3 2499; MIPS64R2-NEXT: ori $1, $zero, 255 2500; MIPS64R2-NEXT: sllv $5, $1, $3 2501; MIPS64R2-NEXT: nor $6, $zero, $5 2502; MIPS64R2-NEXT: sllv $4, $4, $3 2503; MIPS64R2-NEXT: .LBB8_1: # %entry 2504; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 2505; MIPS64R2-NEXT: ll $7, 0($2) 2506; MIPS64R2-NEXT: addu $8, $7, $4 2507; MIPS64R2-NEXT: and $8, $8, $5 2508; MIPS64R2-NEXT: and $9, $7, $6 2509; MIPS64R2-NEXT: or $9, $9, $8 2510; MIPS64R2-NEXT: sc $9, 0($2) 2511; MIPS64R2-NEXT: beqz $9, .LBB8_1 2512; MIPS64R2-NEXT: nop 2513; MIPS64R2-NEXT: # %bb.2: # %entry 2514; MIPS64R2-NEXT: and $1, $7, $5 2515; MIPS64R2-NEXT: srlv $1, $1, $3 2516; MIPS64R2-NEXT: seb $1, $1 2517; MIPS64R2-NEXT: # %bb.3: # %entry 2518; MIPS64R2-NEXT: jr $ra 2519; MIPS64R2-NEXT: seb $2, $1 2520; 2521; MIPS64R6-LABEL: AtomicLoadAdd8: 2522; MIPS64R6: # %bb.0: # %entry 2523; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd8))) 2524; MIPS64R6-NEXT: daddu $1, $1, $25 2525; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd8))) 2526; MIPS64R6-NEXT: ld $1, %got_disp(y)($1) 2527; MIPS64R6-NEXT: daddiu $2, $zero, -4 2528; MIPS64R6-NEXT: and $2, $1, $2 2529; MIPS64R6-NEXT: andi $1, $1, 3 2530; MIPS64R6-NEXT: sll $3, $1, 3 2531; MIPS64R6-NEXT: ori $1, $zero, 255 2532; MIPS64R6-NEXT: sllv $5, $1, $3 2533; MIPS64R6-NEXT: nor $6, $zero, $5 2534; MIPS64R6-NEXT: sllv $4, $4, $3 2535; MIPS64R6-NEXT: .LBB8_1: # %entry 2536; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 2537; MIPS64R6-NEXT: ll $7, 0($2) 2538; MIPS64R6-NEXT: addu $8, $7, $4 2539; MIPS64R6-NEXT: and $8, $8, $5 2540; MIPS64R6-NEXT: and $9, $7, $6 2541; MIPS64R6-NEXT: or $9, $9, $8 2542; MIPS64R6-NEXT: sc $9, 0($2) 2543; MIPS64R6-NEXT: beqzc $9, .LBB8_1 2544; MIPS64R6-NEXT: # %bb.2: # %entry 2545; MIPS64R6-NEXT: and $1, $7, $5 2546; MIPS64R6-NEXT: srlv $1, $1, $3 2547; MIPS64R6-NEXT: seb $1, $1 2548; MIPS64R6-NEXT: # %bb.3: # %entry 2549; MIPS64R6-NEXT: jr $ra 2550; MIPS64R6-NEXT: seb $2, $1 2551; 2552; MIPS64R6O0-LABEL: AtomicLoadAdd8: 2553; MIPS64R6O0: # %bb.0: # %entry 2554; MIPS64R6O0-NEXT: daddiu $sp, $sp, -16 2555; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd8))) 2556; MIPS64R6O0-NEXT: daddu $1, $1, $25 2557; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd8))) 2558; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 2559; MIPS64R6O0-NEXT: ld $1, %got_disp(y)($1) 2560; MIPS64R6O0-NEXT: daddiu $2, $zero, -4 2561; MIPS64R6O0-NEXT: and $2, $1, $2 2562; MIPS64R6O0-NEXT: andi $1, $1, 3 2563; MIPS64R6O0-NEXT: xori $1, $1, 3 2564; MIPS64R6O0-NEXT: sll $1, $1, 3 2565; MIPS64R6O0-NEXT: ori $3, $zero, 255 2566; MIPS64R6O0-NEXT: sllv $3, $3, $1 2567; MIPS64R6O0-NEXT: nor $5, $zero, $3 2568; MIPS64R6O0-NEXT: sllv $4, $4, $1 2569; MIPS64R6O0-NEXT: .LBB8_1: # %entry 2570; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 2571; MIPS64R6O0-NEXT: ll $7, 0($2) 2572; MIPS64R6O0-NEXT: addu $8, $7, $4 2573; MIPS64R6O0-NEXT: and $8, $8, $3 2574; MIPS64R6O0-NEXT: and $9, $7, $5 2575; MIPS64R6O0-NEXT: or $9, $9, $8 2576; MIPS64R6O0-NEXT: sc $9, 0($2) 2577; MIPS64R6O0-NEXT: beqzc $9, .LBB8_1 2578; MIPS64R6O0-NEXT: # %bb.2: # %entry 2579; MIPS64R6O0-NEXT: and $6, $7, $3 2580; MIPS64R6O0-NEXT: srlv $6, $6, $1 2581; MIPS64R6O0-NEXT: seb $6, $6 2582; MIPS64R6O0-NEXT: # %bb.3: # %entry 2583; MIPS64R6O0-NEXT: sw $6, 12($sp) # 4-byte Folded Spill 2584; MIPS64R6O0-NEXT: # %bb.4: # %entry 2585; MIPS64R6O0-NEXT: lw $1, 12($sp) # 4-byte Folded Reload 2586; MIPS64R6O0-NEXT: seb $2, $1 2587; MIPS64R6O0-NEXT: daddiu $sp, $sp, 16 2588; MIPS64R6O0-NEXT: jrc $ra 2589; 2590; MM32-LABEL: AtomicLoadAdd8: 2591; MM32: # %bb.0: # %entry 2592; MM32-NEXT: lui $2, %hi(_gp_disp) 2593; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 2594; MM32-NEXT: addu $2, $2, $25 2595; MM32-NEXT: lw $1, %got(y)($2) 2596; MM32-NEXT: addiu $2, $zero, -4 2597; MM32-NEXT: and $2, $1, $2 2598; MM32-NEXT: andi $1, $1, 3 2599; MM32-NEXT: sll $3, $1, 3 2600; MM32-NEXT: ori $1, $zero, 255 2601; MM32-NEXT: sllv $5, $1, $3 2602; MM32-NEXT: nor $6, $zero, $5 2603; MM32-NEXT: sllv $4, $4, $3 2604; MM32-NEXT: $BB8_1: # %entry 2605; MM32-NEXT: # =>This Inner Loop Header: Depth=1 2606; MM32-NEXT: ll $7, 0($2) 2607; MM32-NEXT: addu $8, $7, $4 2608; MM32-NEXT: and $8, $8, $5 2609; MM32-NEXT: and $9, $7, $6 2610; MM32-NEXT: or $9, $9, $8 2611; MM32-NEXT: sc $9, 0($2) 2612; MM32-NEXT: beqzc $9, $BB8_1 2613; MM32-NEXT: # %bb.2: # %entry 2614; MM32-NEXT: and $1, $7, $5 2615; MM32-NEXT: srlv $1, $1, $3 2616; MM32-NEXT: seb $1, $1 2617; MM32-NEXT: # %bb.3: # %entry 2618; MM32-NEXT: jr $ra 2619; MM32-NEXT: seb $2, $1 2620; 2621; O1-LABEL: AtomicLoadAdd8: 2622; O1: # %bb.0: # %entry 2623; O1-NEXT: lui $2, %hi(_gp_disp) 2624; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 2625; O1-NEXT: addu $1, $2, $25 2626; O1-NEXT: lw $1, %got(y)($1) 2627; O1-NEXT: addiu $2, $zero, -4 2628; O1-NEXT: and $2, $1, $2 2629; O1-NEXT: andi $1, $1, 3 2630; O1-NEXT: sll $3, $1, 3 2631; O1-NEXT: ori $1, $zero, 255 2632; O1-NEXT: sllv $5, $1, $3 2633; O1-NEXT: nor $6, $zero, $5 2634; O1-NEXT: sllv $4, $4, $3 2635; O1-NEXT: $BB8_1: # %entry 2636; O1-NEXT: # =>This Inner Loop Header: Depth=1 2637; O1-NEXT: ll $7, 0($2) 2638; O1-NEXT: addu $8, $7, $4 2639; O1-NEXT: and $8, $8, $5 2640; O1-NEXT: and $9, $7, $6 2641; O1-NEXT: or $9, $9, $8 2642; O1-NEXT: sc $9, 0($2) 2643; O1-NEXT: beqz $9, $BB8_1 2644; O1-NEXT: nop 2645; O1-NEXT: # %bb.2: # %entry 2646; O1-NEXT: and $1, $7, $5 2647; O1-NEXT: srlv $1, $1, $3 2648; O1-NEXT: sll $1, $1, 24 2649; O1-NEXT: sra $1, $1, 24 2650; O1-NEXT: # %bb.3: # %entry 2651; O1-NEXT: sll $1, $1, 24 2652; O1-NEXT: jr $ra 2653; O1-NEXT: sra $2, $1, 24 2654; 2655; O2-LABEL: AtomicLoadAdd8: 2656; O2: # %bb.0: # %entry 2657; O2-NEXT: lui $2, %hi(_gp_disp) 2658; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 2659; O2-NEXT: addu $1, $2, $25 2660; O2-NEXT: lw $1, %got(y)($1) 2661; O2-NEXT: addiu $2, $zero, -4 2662; O2-NEXT: and $2, $1, $2 2663; O2-NEXT: andi $1, $1, 3 2664; O2-NEXT: sll $3, $1, 3 2665; O2-NEXT: ori $1, $zero, 255 2666; O2-NEXT: sllv $5, $1, $3 2667; O2-NEXT: nor $6, $zero, $5 2668; O2-NEXT: sllv $4, $4, $3 2669; O2-NEXT: $BB8_1: # %entry 2670; O2-NEXT: # =>This Inner Loop Header: Depth=1 2671; O2-NEXT: ll $7, 0($2) 2672; O2-NEXT: addu $8, $7, $4 2673; O2-NEXT: and $8, $8, $5 2674; O2-NEXT: and $9, $7, $6 2675; O2-NEXT: or $9, $9, $8 2676; O2-NEXT: sc $9, 0($2) 2677; O2-NEXT: beqz $9, $BB8_1 2678; O2-NEXT: nop 2679; O2-NEXT: # %bb.2: # %entry 2680; O2-NEXT: and $1, $7, $5 2681; O2-NEXT: srlv $1, $1, $3 2682; O2-NEXT: sll $1, $1, 24 2683; O2-NEXT: sra $1, $1, 24 2684; O2-NEXT: # %bb.3: # %entry 2685; O2-NEXT: sll $1, $1, 24 2686; O2-NEXT: jr $ra 2687; O2-NEXT: sra $2, $1, 24 2688; 2689; O3-LABEL: AtomicLoadAdd8: 2690; O3: # %bb.0: # %entry 2691; O3-NEXT: lui $2, %hi(_gp_disp) 2692; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 2693; O3-NEXT: addu $1, $2, $25 2694; O3-NEXT: addiu $2, $zero, -4 2695; O3-NEXT: lw $1, %got(y)($1) 2696; O3-NEXT: and $2, $1, $2 2697; O3-NEXT: andi $1, $1, 3 2698; O3-NEXT: sll $3, $1, 3 2699; O3-NEXT: ori $1, $zero, 255 2700; O3-NEXT: sllv $5, $1, $3 2701; O3-NEXT: sllv $4, $4, $3 2702; O3-NEXT: nor $6, $zero, $5 2703; O3-NEXT: $BB8_1: # %entry 2704; O3-NEXT: # =>This Inner Loop Header: Depth=1 2705; O3-NEXT: ll $7, 0($2) 2706; O3-NEXT: addu $8, $7, $4 2707; O3-NEXT: and $8, $8, $5 2708; O3-NEXT: and $9, $7, $6 2709; O3-NEXT: or $9, $9, $8 2710; O3-NEXT: sc $9, 0($2) 2711; O3-NEXT: beqz $9, $BB8_1 2712; O3-NEXT: nop 2713; O3-NEXT: # %bb.2: # %entry 2714; O3-NEXT: and $1, $7, $5 2715; O3-NEXT: srlv $1, $1, $3 2716; O3-NEXT: sll $1, $1, 24 2717; O3-NEXT: sra $1, $1, 24 2718; O3-NEXT: # %bb.3: # %entry 2719; O3-NEXT: sll $1, $1, 24 2720; O3-NEXT: jr $ra 2721; O3-NEXT: sra $2, $1, 24 2722; 2723; MIPS32EB-LABEL: AtomicLoadAdd8: 2724; MIPS32EB: # %bb.0: # %entry 2725; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 2726; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 2727; MIPS32EB-NEXT: addu $1, $2, $25 2728; MIPS32EB-NEXT: lw $1, %got(y)($1) 2729; MIPS32EB-NEXT: addiu $2, $zero, -4 2730; MIPS32EB-NEXT: and $2, $1, $2 2731; MIPS32EB-NEXT: andi $1, $1, 3 2732; MIPS32EB-NEXT: xori $1, $1, 3 2733; MIPS32EB-NEXT: sll $3, $1, 3 2734; MIPS32EB-NEXT: ori $1, $zero, 255 2735; MIPS32EB-NEXT: sllv $5, $1, $3 2736; MIPS32EB-NEXT: nor $6, $zero, $5 2737; MIPS32EB-NEXT: sllv $4, $4, $3 2738; MIPS32EB-NEXT: $BB8_1: # %entry 2739; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 2740; MIPS32EB-NEXT: ll $7, 0($2) 2741; MIPS32EB-NEXT: addu $8, $7, $4 2742; MIPS32EB-NEXT: and $8, $8, $5 2743; MIPS32EB-NEXT: and $9, $7, $6 2744; MIPS32EB-NEXT: or $9, $9, $8 2745; MIPS32EB-NEXT: sc $9, 0($2) 2746; MIPS32EB-NEXT: beqz $9, $BB8_1 2747; MIPS32EB-NEXT: nop 2748; MIPS32EB-NEXT: # %bb.2: # %entry 2749; MIPS32EB-NEXT: and $1, $7, $5 2750; MIPS32EB-NEXT: srlv $1, $1, $3 2751; MIPS32EB-NEXT: sll $1, $1, 24 2752; MIPS32EB-NEXT: sra $1, $1, 24 2753; MIPS32EB-NEXT: # %bb.3: # %entry 2754; MIPS32EB-NEXT: sll $1, $1, 24 2755; MIPS32EB-NEXT: jr $ra 2756; MIPS32EB-NEXT: sra $2, $1, 24 2757entry: 2758 %0 = atomicrmw add i8* @y, i8 %incr monotonic 2759 ret i8 %0 2760} 2761 2762define signext i8 @AtomicLoadSub8(i8 signext %incr) nounwind { 2763; MIPS32-LABEL: AtomicLoadSub8: 2764; MIPS32: # %bb.0: # %entry 2765; MIPS32-NEXT: lui $2, %hi(_gp_disp) 2766; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 2767; MIPS32-NEXT: addu $1, $2, $25 2768; MIPS32-NEXT: lw $1, %got(y)($1) 2769; MIPS32-NEXT: addiu $2, $zero, -4 2770; MIPS32-NEXT: and $2, $1, $2 2771; MIPS32-NEXT: andi $1, $1, 3 2772; MIPS32-NEXT: sll $3, $1, 3 2773; MIPS32-NEXT: ori $1, $zero, 255 2774; MIPS32-NEXT: sllv $5, $1, $3 2775; MIPS32-NEXT: nor $6, $zero, $5 2776; MIPS32-NEXT: sllv $4, $4, $3 2777; MIPS32-NEXT: $BB9_1: # %entry 2778; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 2779; MIPS32-NEXT: ll $7, 0($2) 2780; MIPS32-NEXT: subu $8, $7, $4 2781; MIPS32-NEXT: and $8, $8, $5 2782; MIPS32-NEXT: and $9, $7, $6 2783; MIPS32-NEXT: or $9, $9, $8 2784; MIPS32-NEXT: sc $9, 0($2) 2785; MIPS32-NEXT: beqz $9, $BB9_1 2786; MIPS32-NEXT: nop 2787; MIPS32-NEXT: # %bb.2: # %entry 2788; MIPS32-NEXT: and $1, $7, $5 2789; MIPS32-NEXT: srlv $1, $1, $3 2790; MIPS32-NEXT: sll $1, $1, 24 2791; MIPS32-NEXT: sra $1, $1, 24 2792; MIPS32-NEXT: # %bb.3: # %entry 2793; MIPS32-NEXT: sll $1, $1, 24 2794; MIPS32-NEXT: jr $ra 2795; MIPS32-NEXT: sra $2, $1, 24 2796; 2797; MIPS32O0-LABEL: AtomicLoadSub8: 2798; MIPS32O0: # %bb.0: # %entry 2799; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 2800; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 2801; MIPS32O0-NEXT: addiu $sp, $sp, -8 2802; MIPS32O0-NEXT: addu $1, $2, $25 2803; MIPS32O0-NEXT: lw $1, %got(y)($1) 2804; MIPS32O0-NEXT: addiu $2, $zero, -4 2805; MIPS32O0-NEXT: and $2, $1, $2 2806; MIPS32O0-NEXT: andi $1, $1, 3 2807; MIPS32O0-NEXT: sll $1, $1, 3 2808; MIPS32O0-NEXT: ori $3, $zero, 255 2809; MIPS32O0-NEXT: sllv $3, $3, $1 2810; MIPS32O0-NEXT: nor $5, $zero, $3 2811; MIPS32O0-NEXT: sllv $4, $4, $1 2812; MIPS32O0-NEXT: $BB9_1: # %entry 2813; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 2814; MIPS32O0-NEXT: ll $7, 0($2) 2815; MIPS32O0-NEXT: subu $8, $7, $4 2816; MIPS32O0-NEXT: and $8, $8, $3 2817; MIPS32O0-NEXT: and $9, $7, $5 2818; MIPS32O0-NEXT: or $9, $9, $8 2819; MIPS32O0-NEXT: sc $9, 0($2) 2820; MIPS32O0-NEXT: beqz $9, $BB9_1 2821; MIPS32O0-NEXT: nop 2822; MIPS32O0-NEXT: # %bb.2: # %entry 2823; MIPS32O0-NEXT: and $6, $7, $3 2824; MIPS32O0-NEXT: srlv $6, $6, $1 2825; MIPS32O0-NEXT: sll $6, $6, 24 2826; MIPS32O0-NEXT: sra $6, $6, 24 2827; MIPS32O0-NEXT: # %bb.3: # %entry 2828; MIPS32O0-NEXT: sw $6, 4($sp) # 4-byte Folded Spill 2829; MIPS32O0-NEXT: # %bb.4: # %entry 2830; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload 2831; MIPS32O0-NEXT: sll $2, $1, 24 2832; MIPS32O0-NEXT: sra $2, $2, 24 2833; MIPS32O0-NEXT: addiu $sp, $sp, 8 2834; MIPS32O0-NEXT: jr $ra 2835; MIPS32O0-NEXT: nop 2836; 2837; MIPS32R2-LABEL: AtomicLoadSub8: 2838; MIPS32R2: # %bb.0: # %entry 2839; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 2840; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 2841; MIPS32R2-NEXT: addu $1, $2, $25 2842; MIPS32R2-NEXT: lw $1, %got(y)($1) 2843; MIPS32R2-NEXT: addiu $2, $zero, -4 2844; MIPS32R2-NEXT: and $2, $1, $2 2845; MIPS32R2-NEXT: andi $1, $1, 3 2846; MIPS32R2-NEXT: sll $3, $1, 3 2847; MIPS32R2-NEXT: ori $1, $zero, 255 2848; MIPS32R2-NEXT: sllv $5, $1, $3 2849; MIPS32R2-NEXT: nor $6, $zero, $5 2850; MIPS32R2-NEXT: sllv $4, $4, $3 2851; MIPS32R2-NEXT: $BB9_1: # %entry 2852; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 2853; MIPS32R2-NEXT: ll $7, 0($2) 2854; MIPS32R2-NEXT: subu $8, $7, $4 2855; MIPS32R2-NEXT: and $8, $8, $5 2856; MIPS32R2-NEXT: and $9, $7, $6 2857; MIPS32R2-NEXT: or $9, $9, $8 2858; MIPS32R2-NEXT: sc $9, 0($2) 2859; MIPS32R2-NEXT: beqz $9, $BB9_1 2860; MIPS32R2-NEXT: nop 2861; MIPS32R2-NEXT: # %bb.2: # %entry 2862; MIPS32R2-NEXT: and $1, $7, $5 2863; MIPS32R2-NEXT: srlv $1, $1, $3 2864; MIPS32R2-NEXT: seb $1, $1 2865; MIPS32R2-NEXT: # %bb.3: # %entry 2866; MIPS32R2-NEXT: jr $ra 2867; MIPS32R2-NEXT: seb $2, $1 2868; 2869; MIPS32R6-LABEL: AtomicLoadSub8: 2870; MIPS32R6: # %bb.0: # %entry 2871; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 2872; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 2873; MIPS32R6-NEXT: addu $1, $2, $25 2874; MIPS32R6-NEXT: lw $1, %got(y)($1) 2875; MIPS32R6-NEXT: addiu $2, $zero, -4 2876; MIPS32R6-NEXT: and $2, $1, $2 2877; MIPS32R6-NEXT: andi $1, $1, 3 2878; MIPS32R6-NEXT: sll $3, $1, 3 2879; MIPS32R6-NEXT: ori $1, $zero, 255 2880; MIPS32R6-NEXT: sllv $5, $1, $3 2881; MIPS32R6-NEXT: nor $6, $zero, $5 2882; MIPS32R6-NEXT: sllv $4, $4, $3 2883; MIPS32R6-NEXT: $BB9_1: # %entry 2884; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 2885; MIPS32R6-NEXT: ll $7, 0($2) 2886; MIPS32R6-NEXT: subu $8, $7, $4 2887; MIPS32R6-NEXT: and $8, $8, $5 2888; MIPS32R6-NEXT: and $9, $7, $6 2889; MIPS32R6-NEXT: or $9, $9, $8 2890; MIPS32R6-NEXT: sc $9, 0($2) 2891; MIPS32R6-NEXT: beqzc $9, $BB9_1 2892; MIPS32R6-NEXT: # %bb.2: # %entry 2893; MIPS32R6-NEXT: and $1, $7, $5 2894; MIPS32R6-NEXT: srlv $1, $1, $3 2895; MIPS32R6-NEXT: seb $1, $1 2896; MIPS32R6-NEXT: # %bb.3: # %entry 2897; MIPS32R6-NEXT: jr $ra 2898; MIPS32R6-NEXT: seb $2, $1 2899; 2900; MIPS32R6O0-LABEL: AtomicLoadSub8: 2901; MIPS32R6O0: # %bb.0: # %entry 2902; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 2903; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 2904; MIPS32R6O0-NEXT: addiu $sp, $sp, -8 2905; MIPS32R6O0-NEXT: addu $1, $2, $25 2906; MIPS32R6O0-NEXT: move $2, $4 2907; MIPS32R6O0-NEXT: lw $1, %got(y)($1) 2908; MIPS32R6O0-NEXT: addiu $3, $zero, -4 2909; MIPS32R6O0-NEXT: and $3, $1, $3 2910; MIPS32R6O0-NEXT: andi $1, $1, 3 2911; MIPS32R6O0-NEXT: sll $1, $1, 3 2912; MIPS32R6O0-NEXT: ori $5, $zero, 255 2913; MIPS32R6O0-NEXT: sllv $5, $5, $1 2914; MIPS32R6O0-NEXT: nor $6, $zero, $5 2915; MIPS32R6O0-NEXT: sllv $4, $4, $1 2916; MIPS32R6O0-NEXT: $BB9_1: # %entry 2917; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 2918; MIPS32R6O0-NEXT: ll $8, 0($3) 2919; MIPS32R6O0-NEXT: subu $9, $8, $4 2920; MIPS32R6O0-NEXT: and $9, $9, $5 2921; MIPS32R6O0-NEXT: and $10, $8, $6 2922; MIPS32R6O0-NEXT: or $10, $10, $9 2923; MIPS32R6O0-NEXT: sc $10, 0($3) 2924; MIPS32R6O0-NEXT: beqzc $10, $BB9_1 2925; MIPS32R6O0-NEXT: # %bb.2: # %entry 2926; MIPS32R6O0-NEXT: and $7, $8, $5 2927; MIPS32R6O0-NEXT: srlv $7, $7, $1 2928; MIPS32R6O0-NEXT: seb $7, $7 2929; MIPS32R6O0-NEXT: # %bb.3: # %entry 2930; MIPS32R6O0-NEXT: sw $7, 4($sp) # 4-byte Folded Spill 2931; MIPS32R6O0-NEXT: # %bb.4: # %entry 2932; MIPS32R6O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload 2933; MIPS32R6O0-NEXT: seb $2, $1 2934; MIPS32R6O0-NEXT: addiu $sp, $sp, 8 2935; MIPS32R6O0-NEXT: jrc $ra 2936; 2937; MIPS4-LABEL: AtomicLoadSub8: 2938; MIPS4: # %bb.0: # %entry 2939; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub8))) 2940; MIPS4-NEXT: daddu $1, $1, $25 2941; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub8))) 2942; MIPS4-NEXT: ld $1, %got_disp(y)($1) 2943; MIPS4-NEXT: daddiu $2, $zero, -4 2944; MIPS4-NEXT: and $2, $1, $2 2945; MIPS4-NEXT: andi $1, $1, 3 2946; MIPS4-NEXT: sll $3, $1, 3 2947; MIPS4-NEXT: ori $1, $zero, 255 2948; MIPS4-NEXT: sllv $5, $1, $3 2949; MIPS4-NEXT: nor $6, $zero, $5 2950; MIPS4-NEXT: sllv $4, $4, $3 2951; MIPS4-NEXT: .LBB9_1: # %entry 2952; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 2953; MIPS4-NEXT: ll $7, 0($2) 2954; MIPS4-NEXT: subu $8, $7, $4 2955; MIPS4-NEXT: and $8, $8, $5 2956; MIPS4-NEXT: and $9, $7, $6 2957; MIPS4-NEXT: or $9, $9, $8 2958; MIPS4-NEXT: sc $9, 0($2) 2959; MIPS4-NEXT: beqz $9, .LBB9_1 2960; MIPS4-NEXT: nop 2961; MIPS4-NEXT: # %bb.2: # %entry 2962; MIPS4-NEXT: and $1, $7, $5 2963; MIPS4-NEXT: srlv $1, $1, $3 2964; MIPS4-NEXT: sll $1, $1, 24 2965; MIPS4-NEXT: sra $1, $1, 24 2966; MIPS4-NEXT: # %bb.3: # %entry 2967; MIPS4-NEXT: sll $1, $1, 24 2968; MIPS4-NEXT: jr $ra 2969; MIPS4-NEXT: sra $2, $1, 24 2970; 2971; MIPS64-LABEL: AtomicLoadSub8: 2972; MIPS64: # %bb.0: # %entry 2973; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub8))) 2974; MIPS64-NEXT: daddu $1, $1, $25 2975; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub8))) 2976; MIPS64-NEXT: ld $1, %got_disp(y)($1) 2977; MIPS64-NEXT: daddiu $2, $zero, -4 2978; MIPS64-NEXT: and $2, $1, $2 2979; MIPS64-NEXT: andi $1, $1, 3 2980; MIPS64-NEXT: sll $3, $1, 3 2981; MIPS64-NEXT: ori $1, $zero, 255 2982; MIPS64-NEXT: sllv $5, $1, $3 2983; MIPS64-NEXT: nor $6, $zero, $5 2984; MIPS64-NEXT: sllv $4, $4, $3 2985; MIPS64-NEXT: .LBB9_1: # %entry 2986; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 2987; MIPS64-NEXT: ll $7, 0($2) 2988; MIPS64-NEXT: subu $8, $7, $4 2989; MIPS64-NEXT: and $8, $8, $5 2990; MIPS64-NEXT: and $9, $7, $6 2991; MIPS64-NEXT: or $9, $9, $8 2992; MIPS64-NEXT: sc $9, 0($2) 2993; MIPS64-NEXT: beqz $9, .LBB9_1 2994; MIPS64-NEXT: nop 2995; MIPS64-NEXT: # %bb.2: # %entry 2996; MIPS64-NEXT: and $1, $7, $5 2997; MIPS64-NEXT: srlv $1, $1, $3 2998; MIPS64-NEXT: sll $1, $1, 24 2999; MIPS64-NEXT: sra $1, $1, 24 3000; MIPS64-NEXT: # %bb.3: # %entry 3001; MIPS64-NEXT: sll $1, $1, 24 3002; MIPS64-NEXT: jr $ra 3003; MIPS64-NEXT: sra $2, $1, 24 3004; 3005; MIPS64R2-LABEL: AtomicLoadSub8: 3006; MIPS64R2: # %bb.0: # %entry 3007; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub8))) 3008; MIPS64R2-NEXT: daddu $1, $1, $25 3009; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub8))) 3010; MIPS64R2-NEXT: ld $1, %got_disp(y)($1) 3011; MIPS64R2-NEXT: daddiu $2, $zero, -4 3012; MIPS64R2-NEXT: and $2, $1, $2 3013; MIPS64R2-NEXT: andi $1, $1, 3 3014; MIPS64R2-NEXT: sll $3, $1, 3 3015; MIPS64R2-NEXT: ori $1, $zero, 255 3016; MIPS64R2-NEXT: sllv $5, $1, $3 3017; MIPS64R2-NEXT: nor $6, $zero, $5 3018; MIPS64R2-NEXT: sllv $4, $4, $3 3019; MIPS64R2-NEXT: .LBB9_1: # %entry 3020; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 3021; MIPS64R2-NEXT: ll $7, 0($2) 3022; MIPS64R2-NEXT: subu $8, $7, $4 3023; MIPS64R2-NEXT: and $8, $8, $5 3024; MIPS64R2-NEXT: and $9, $7, $6 3025; MIPS64R2-NEXT: or $9, $9, $8 3026; MIPS64R2-NEXT: sc $9, 0($2) 3027; MIPS64R2-NEXT: beqz $9, .LBB9_1 3028; MIPS64R2-NEXT: nop 3029; MIPS64R2-NEXT: # %bb.2: # %entry 3030; MIPS64R2-NEXT: and $1, $7, $5 3031; MIPS64R2-NEXT: srlv $1, $1, $3 3032; MIPS64R2-NEXT: seb $1, $1 3033; MIPS64R2-NEXT: # %bb.3: # %entry 3034; MIPS64R2-NEXT: jr $ra 3035; MIPS64R2-NEXT: seb $2, $1 3036; 3037; MIPS64R6-LABEL: AtomicLoadSub8: 3038; MIPS64R6: # %bb.0: # %entry 3039; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub8))) 3040; MIPS64R6-NEXT: daddu $1, $1, $25 3041; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub8))) 3042; MIPS64R6-NEXT: ld $1, %got_disp(y)($1) 3043; MIPS64R6-NEXT: daddiu $2, $zero, -4 3044; MIPS64R6-NEXT: and $2, $1, $2 3045; MIPS64R6-NEXT: andi $1, $1, 3 3046; MIPS64R6-NEXT: sll $3, $1, 3 3047; MIPS64R6-NEXT: ori $1, $zero, 255 3048; MIPS64R6-NEXT: sllv $5, $1, $3 3049; MIPS64R6-NEXT: nor $6, $zero, $5 3050; MIPS64R6-NEXT: sllv $4, $4, $3 3051; MIPS64R6-NEXT: .LBB9_1: # %entry 3052; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 3053; MIPS64R6-NEXT: ll $7, 0($2) 3054; MIPS64R6-NEXT: subu $8, $7, $4 3055; MIPS64R6-NEXT: and $8, $8, $5 3056; MIPS64R6-NEXT: and $9, $7, $6 3057; MIPS64R6-NEXT: or $9, $9, $8 3058; MIPS64R6-NEXT: sc $9, 0($2) 3059; MIPS64R6-NEXT: beqzc $9, .LBB9_1 3060; MIPS64R6-NEXT: # %bb.2: # %entry 3061; MIPS64R6-NEXT: and $1, $7, $5 3062; MIPS64R6-NEXT: srlv $1, $1, $3 3063; MIPS64R6-NEXT: seb $1, $1 3064; MIPS64R6-NEXT: # %bb.3: # %entry 3065; MIPS64R6-NEXT: jr $ra 3066; MIPS64R6-NEXT: seb $2, $1 3067; 3068; MIPS64R6O0-LABEL: AtomicLoadSub8: 3069; MIPS64R6O0: # %bb.0: # %entry 3070; MIPS64R6O0-NEXT: daddiu $sp, $sp, -16 3071; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub8))) 3072; MIPS64R6O0-NEXT: daddu $1, $1, $25 3073; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub8))) 3074; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 3075; MIPS64R6O0-NEXT: ld $1, %got_disp(y)($1) 3076; MIPS64R6O0-NEXT: daddiu $2, $zero, -4 3077; MIPS64R6O0-NEXT: and $2, $1, $2 3078; MIPS64R6O0-NEXT: andi $1, $1, 3 3079; MIPS64R6O0-NEXT: xori $1, $1, 3 3080; MIPS64R6O0-NEXT: sll $1, $1, 3 3081; MIPS64R6O0-NEXT: ori $3, $zero, 255 3082; MIPS64R6O0-NEXT: sllv $3, $3, $1 3083; MIPS64R6O0-NEXT: nor $5, $zero, $3 3084; MIPS64R6O0-NEXT: sllv $4, $4, $1 3085; MIPS64R6O0-NEXT: .LBB9_1: # %entry 3086; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 3087; MIPS64R6O0-NEXT: ll $7, 0($2) 3088; MIPS64R6O0-NEXT: subu $8, $7, $4 3089; MIPS64R6O0-NEXT: and $8, $8, $3 3090; MIPS64R6O0-NEXT: and $9, $7, $5 3091; MIPS64R6O0-NEXT: or $9, $9, $8 3092; MIPS64R6O0-NEXT: sc $9, 0($2) 3093; MIPS64R6O0-NEXT: beqzc $9, .LBB9_1 3094; MIPS64R6O0-NEXT: # %bb.2: # %entry 3095; MIPS64R6O0-NEXT: and $6, $7, $3 3096; MIPS64R6O0-NEXT: srlv $6, $6, $1 3097; MIPS64R6O0-NEXT: seb $6, $6 3098; MIPS64R6O0-NEXT: # %bb.3: # %entry 3099; MIPS64R6O0-NEXT: sw $6, 12($sp) # 4-byte Folded Spill 3100; MIPS64R6O0-NEXT: # %bb.4: # %entry 3101; MIPS64R6O0-NEXT: lw $1, 12($sp) # 4-byte Folded Reload 3102; MIPS64R6O0-NEXT: seb $2, $1 3103; MIPS64R6O0-NEXT: daddiu $sp, $sp, 16 3104; MIPS64R6O0-NEXT: jrc $ra 3105; 3106; MM32-LABEL: AtomicLoadSub8: 3107; MM32: # %bb.0: # %entry 3108; MM32-NEXT: lui $2, %hi(_gp_disp) 3109; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 3110; MM32-NEXT: addu $2, $2, $25 3111; MM32-NEXT: lw $1, %got(y)($2) 3112; MM32-NEXT: addiu $2, $zero, -4 3113; MM32-NEXT: and $2, $1, $2 3114; MM32-NEXT: andi $1, $1, 3 3115; MM32-NEXT: sll $3, $1, 3 3116; MM32-NEXT: ori $1, $zero, 255 3117; MM32-NEXT: sllv $5, $1, $3 3118; MM32-NEXT: nor $6, $zero, $5 3119; MM32-NEXT: sllv $4, $4, $3 3120; MM32-NEXT: $BB9_1: # %entry 3121; MM32-NEXT: # =>This Inner Loop Header: Depth=1 3122; MM32-NEXT: ll $7, 0($2) 3123; MM32-NEXT: subu $8, $7, $4 3124; MM32-NEXT: and $8, $8, $5 3125; MM32-NEXT: and $9, $7, $6 3126; MM32-NEXT: or $9, $9, $8 3127; MM32-NEXT: sc $9, 0($2) 3128; MM32-NEXT: beqzc $9, $BB9_1 3129; MM32-NEXT: # %bb.2: # %entry 3130; MM32-NEXT: and $1, $7, $5 3131; MM32-NEXT: srlv $1, $1, $3 3132; MM32-NEXT: seb $1, $1 3133; MM32-NEXT: # %bb.3: # %entry 3134; MM32-NEXT: jr $ra 3135; MM32-NEXT: seb $2, $1 3136; 3137; O1-LABEL: AtomicLoadSub8: 3138; O1: # %bb.0: # %entry 3139; O1-NEXT: lui $2, %hi(_gp_disp) 3140; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 3141; O1-NEXT: addu $1, $2, $25 3142; O1-NEXT: lw $1, %got(y)($1) 3143; O1-NEXT: addiu $2, $zero, -4 3144; O1-NEXT: and $2, $1, $2 3145; O1-NEXT: andi $1, $1, 3 3146; O1-NEXT: sll $3, $1, 3 3147; O1-NEXT: ori $1, $zero, 255 3148; O1-NEXT: sllv $5, $1, $3 3149; O1-NEXT: nor $6, $zero, $5 3150; O1-NEXT: sllv $4, $4, $3 3151; O1-NEXT: $BB9_1: # %entry 3152; O1-NEXT: # =>This Inner Loop Header: Depth=1 3153; O1-NEXT: ll $7, 0($2) 3154; O1-NEXT: subu $8, $7, $4 3155; O1-NEXT: and $8, $8, $5 3156; O1-NEXT: and $9, $7, $6 3157; O1-NEXT: or $9, $9, $8 3158; O1-NEXT: sc $9, 0($2) 3159; O1-NEXT: beqz $9, $BB9_1 3160; O1-NEXT: nop 3161; O1-NEXT: # %bb.2: # %entry 3162; O1-NEXT: and $1, $7, $5 3163; O1-NEXT: srlv $1, $1, $3 3164; O1-NEXT: sll $1, $1, 24 3165; O1-NEXT: sra $1, $1, 24 3166; O1-NEXT: # %bb.3: # %entry 3167; O1-NEXT: sll $1, $1, 24 3168; O1-NEXT: jr $ra 3169; O1-NEXT: sra $2, $1, 24 3170; 3171; O2-LABEL: AtomicLoadSub8: 3172; O2: # %bb.0: # %entry 3173; O2-NEXT: lui $2, %hi(_gp_disp) 3174; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 3175; O2-NEXT: addu $1, $2, $25 3176; O2-NEXT: lw $1, %got(y)($1) 3177; O2-NEXT: addiu $2, $zero, -4 3178; O2-NEXT: and $2, $1, $2 3179; O2-NEXT: andi $1, $1, 3 3180; O2-NEXT: sll $3, $1, 3 3181; O2-NEXT: ori $1, $zero, 255 3182; O2-NEXT: sllv $5, $1, $3 3183; O2-NEXT: nor $6, $zero, $5 3184; O2-NEXT: sllv $4, $4, $3 3185; O2-NEXT: $BB9_1: # %entry 3186; O2-NEXT: # =>This Inner Loop Header: Depth=1 3187; O2-NEXT: ll $7, 0($2) 3188; O2-NEXT: subu $8, $7, $4 3189; O2-NEXT: and $8, $8, $5 3190; O2-NEXT: and $9, $7, $6 3191; O2-NEXT: or $9, $9, $8 3192; O2-NEXT: sc $9, 0($2) 3193; O2-NEXT: beqz $9, $BB9_1 3194; O2-NEXT: nop 3195; O2-NEXT: # %bb.2: # %entry 3196; O2-NEXT: and $1, $7, $5 3197; O2-NEXT: srlv $1, $1, $3 3198; O2-NEXT: sll $1, $1, 24 3199; O2-NEXT: sra $1, $1, 24 3200; O2-NEXT: # %bb.3: # %entry 3201; O2-NEXT: sll $1, $1, 24 3202; O2-NEXT: jr $ra 3203; O2-NEXT: sra $2, $1, 24 3204; 3205; O3-LABEL: AtomicLoadSub8: 3206; O3: # %bb.0: # %entry 3207; O3-NEXT: lui $2, %hi(_gp_disp) 3208; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 3209; O3-NEXT: addu $1, $2, $25 3210; O3-NEXT: addiu $2, $zero, -4 3211; O3-NEXT: lw $1, %got(y)($1) 3212; O3-NEXT: and $2, $1, $2 3213; O3-NEXT: andi $1, $1, 3 3214; O3-NEXT: sll $3, $1, 3 3215; O3-NEXT: ori $1, $zero, 255 3216; O3-NEXT: sllv $5, $1, $3 3217; O3-NEXT: sllv $4, $4, $3 3218; O3-NEXT: nor $6, $zero, $5 3219; O3-NEXT: $BB9_1: # %entry 3220; O3-NEXT: # =>This Inner Loop Header: Depth=1 3221; O3-NEXT: ll $7, 0($2) 3222; O3-NEXT: subu $8, $7, $4 3223; O3-NEXT: and $8, $8, $5 3224; O3-NEXT: and $9, $7, $6 3225; O3-NEXT: or $9, $9, $8 3226; O3-NEXT: sc $9, 0($2) 3227; O3-NEXT: beqz $9, $BB9_1 3228; O3-NEXT: nop 3229; O3-NEXT: # %bb.2: # %entry 3230; O3-NEXT: and $1, $7, $5 3231; O3-NEXT: srlv $1, $1, $3 3232; O3-NEXT: sll $1, $1, 24 3233; O3-NEXT: sra $1, $1, 24 3234; O3-NEXT: # %bb.3: # %entry 3235; O3-NEXT: sll $1, $1, 24 3236; O3-NEXT: jr $ra 3237; O3-NEXT: sra $2, $1, 24 3238; 3239; MIPS32EB-LABEL: AtomicLoadSub8: 3240; MIPS32EB: # %bb.0: # %entry 3241; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 3242; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 3243; MIPS32EB-NEXT: addu $1, $2, $25 3244; MIPS32EB-NEXT: lw $1, %got(y)($1) 3245; MIPS32EB-NEXT: addiu $2, $zero, -4 3246; MIPS32EB-NEXT: and $2, $1, $2 3247; MIPS32EB-NEXT: andi $1, $1, 3 3248; MIPS32EB-NEXT: xori $1, $1, 3 3249; MIPS32EB-NEXT: sll $3, $1, 3 3250; MIPS32EB-NEXT: ori $1, $zero, 255 3251; MIPS32EB-NEXT: sllv $5, $1, $3 3252; MIPS32EB-NEXT: nor $6, $zero, $5 3253; MIPS32EB-NEXT: sllv $4, $4, $3 3254; MIPS32EB-NEXT: $BB9_1: # %entry 3255; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 3256; MIPS32EB-NEXT: ll $7, 0($2) 3257; MIPS32EB-NEXT: subu $8, $7, $4 3258; MIPS32EB-NEXT: and $8, $8, $5 3259; MIPS32EB-NEXT: and $9, $7, $6 3260; MIPS32EB-NEXT: or $9, $9, $8 3261; MIPS32EB-NEXT: sc $9, 0($2) 3262; MIPS32EB-NEXT: beqz $9, $BB9_1 3263; MIPS32EB-NEXT: nop 3264; MIPS32EB-NEXT: # %bb.2: # %entry 3265; MIPS32EB-NEXT: and $1, $7, $5 3266; MIPS32EB-NEXT: srlv $1, $1, $3 3267; MIPS32EB-NEXT: sll $1, $1, 24 3268; MIPS32EB-NEXT: sra $1, $1, 24 3269; MIPS32EB-NEXT: # %bb.3: # %entry 3270; MIPS32EB-NEXT: sll $1, $1, 24 3271; MIPS32EB-NEXT: jr $ra 3272; MIPS32EB-NEXT: sra $2, $1, 24 3273entry: 3274 %0 = atomicrmw sub i8* @y, i8 %incr monotonic 3275 ret i8 %0 3276 3277} 3278 3279define signext i8 @AtomicLoadNand8(i8 signext %incr) nounwind { 3280; MIPS32-LABEL: AtomicLoadNand8: 3281; MIPS32: # %bb.0: # %entry 3282; MIPS32-NEXT: lui $2, %hi(_gp_disp) 3283; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 3284; MIPS32-NEXT: addu $1, $2, $25 3285; MIPS32-NEXT: lw $1, %got(y)($1) 3286; MIPS32-NEXT: addiu $2, $zero, -4 3287; MIPS32-NEXT: and $2, $1, $2 3288; MIPS32-NEXT: andi $1, $1, 3 3289; MIPS32-NEXT: sll $3, $1, 3 3290; MIPS32-NEXT: ori $1, $zero, 255 3291; MIPS32-NEXT: sllv $5, $1, $3 3292; MIPS32-NEXT: nor $6, $zero, $5 3293; MIPS32-NEXT: sllv $4, $4, $3 3294; MIPS32-NEXT: $BB10_1: # %entry 3295; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 3296; MIPS32-NEXT: ll $7, 0($2) 3297; MIPS32-NEXT: and $8, $7, $4 3298; MIPS32-NEXT: nor $8, $zero, $8 3299; MIPS32-NEXT: and $8, $8, $5 3300; MIPS32-NEXT: and $9, $7, $6 3301; MIPS32-NEXT: or $9, $9, $8 3302; MIPS32-NEXT: sc $9, 0($2) 3303; MIPS32-NEXT: beqz $9, $BB10_1 3304; MIPS32-NEXT: nop 3305; MIPS32-NEXT: # %bb.2: # %entry 3306; MIPS32-NEXT: and $1, $7, $5 3307; MIPS32-NEXT: srlv $1, $1, $3 3308; MIPS32-NEXT: sll $1, $1, 24 3309; MIPS32-NEXT: sra $1, $1, 24 3310; MIPS32-NEXT: # %bb.3: # %entry 3311; MIPS32-NEXT: sll $1, $1, 24 3312; MIPS32-NEXT: jr $ra 3313; MIPS32-NEXT: sra $2, $1, 24 3314; 3315; MIPS32O0-LABEL: AtomicLoadNand8: 3316; MIPS32O0: # %bb.0: # %entry 3317; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 3318; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 3319; MIPS32O0-NEXT: addiu $sp, $sp, -8 3320; MIPS32O0-NEXT: addu $1, $2, $25 3321; MIPS32O0-NEXT: lw $1, %got(y)($1) 3322; MIPS32O0-NEXT: addiu $2, $zero, -4 3323; MIPS32O0-NEXT: and $2, $1, $2 3324; MIPS32O0-NEXT: andi $1, $1, 3 3325; MIPS32O0-NEXT: sll $1, $1, 3 3326; MIPS32O0-NEXT: ori $3, $zero, 255 3327; MIPS32O0-NEXT: sllv $3, $3, $1 3328; MIPS32O0-NEXT: nor $5, $zero, $3 3329; MIPS32O0-NEXT: sllv $4, $4, $1 3330; MIPS32O0-NEXT: $BB10_1: # %entry 3331; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 3332; MIPS32O0-NEXT: ll $7, 0($2) 3333; MIPS32O0-NEXT: and $8, $7, $4 3334; MIPS32O0-NEXT: nor $8, $zero, $8 3335; MIPS32O0-NEXT: and $8, $8, $3 3336; MIPS32O0-NEXT: and $9, $7, $5 3337; MIPS32O0-NEXT: or $9, $9, $8 3338; MIPS32O0-NEXT: sc $9, 0($2) 3339; MIPS32O0-NEXT: beqz $9, $BB10_1 3340; MIPS32O0-NEXT: nop 3341; MIPS32O0-NEXT: # %bb.2: # %entry 3342; MIPS32O0-NEXT: and $6, $7, $3 3343; MIPS32O0-NEXT: srlv $6, $6, $1 3344; MIPS32O0-NEXT: sll $6, $6, 24 3345; MIPS32O0-NEXT: sra $6, $6, 24 3346; MIPS32O0-NEXT: # %bb.3: # %entry 3347; MIPS32O0-NEXT: sw $6, 4($sp) # 4-byte Folded Spill 3348; MIPS32O0-NEXT: # %bb.4: # %entry 3349; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload 3350; MIPS32O0-NEXT: sll $2, $1, 24 3351; MIPS32O0-NEXT: sra $2, $2, 24 3352; MIPS32O0-NEXT: addiu $sp, $sp, 8 3353; MIPS32O0-NEXT: jr $ra 3354; MIPS32O0-NEXT: nop 3355; 3356; MIPS32R2-LABEL: AtomicLoadNand8: 3357; MIPS32R2: # %bb.0: # %entry 3358; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 3359; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 3360; MIPS32R2-NEXT: addu $1, $2, $25 3361; MIPS32R2-NEXT: lw $1, %got(y)($1) 3362; MIPS32R2-NEXT: addiu $2, $zero, -4 3363; MIPS32R2-NEXT: and $2, $1, $2 3364; MIPS32R2-NEXT: andi $1, $1, 3 3365; MIPS32R2-NEXT: sll $3, $1, 3 3366; MIPS32R2-NEXT: ori $1, $zero, 255 3367; MIPS32R2-NEXT: sllv $5, $1, $3 3368; MIPS32R2-NEXT: nor $6, $zero, $5 3369; MIPS32R2-NEXT: sllv $4, $4, $3 3370; MIPS32R2-NEXT: $BB10_1: # %entry 3371; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 3372; MIPS32R2-NEXT: ll $7, 0($2) 3373; MIPS32R2-NEXT: and $8, $7, $4 3374; MIPS32R2-NEXT: nor $8, $zero, $8 3375; MIPS32R2-NEXT: and $8, $8, $5 3376; MIPS32R2-NEXT: and $9, $7, $6 3377; MIPS32R2-NEXT: or $9, $9, $8 3378; MIPS32R2-NEXT: sc $9, 0($2) 3379; MIPS32R2-NEXT: beqz $9, $BB10_1 3380; MIPS32R2-NEXT: nop 3381; MIPS32R2-NEXT: # %bb.2: # %entry 3382; MIPS32R2-NEXT: and $1, $7, $5 3383; MIPS32R2-NEXT: srlv $1, $1, $3 3384; MIPS32R2-NEXT: seb $1, $1 3385; MIPS32R2-NEXT: # %bb.3: # %entry 3386; MIPS32R2-NEXT: jr $ra 3387; MIPS32R2-NEXT: seb $2, $1 3388; 3389; MIPS32R6-LABEL: AtomicLoadNand8: 3390; MIPS32R6: # %bb.0: # %entry 3391; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 3392; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 3393; MIPS32R6-NEXT: addu $1, $2, $25 3394; MIPS32R6-NEXT: lw $1, %got(y)($1) 3395; MIPS32R6-NEXT: addiu $2, $zero, -4 3396; MIPS32R6-NEXT: and $2, $1, $2 3397; MIPS32R6-NEXT: andi $1, $1, 3 3398; MIPS32R6-NEXT: sll $3, $1, 3 3399; MIPS32R6-NEXT: ori $1, $zero, 255 3400; MIPS32R6-NEXT: sllv $5, $1, $3 3401; MIPS32R6-NEXT: nor $6, $zero, $5 3402; MIPS32R6-NEXT: sllv $4, $4, $3 3403; MIPS32R6-NEXT: $BB10_1: # %entry 3404; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 3405; MIPS32R6-NEXT: ll $7, 0($2) 3406; MIPS32R6-NEXT: and $8, $7, $4 3407; MIPS32R6-NEXT: nor $8, $zero, $8 3408; MIPS32R6-NEXT: and $8, $8, $5 3409; MIPS32R6-NEXT: and $9, $7, $6 3410; MIPS32R6-NEXT: or $9, $9, $8 3411; MIPS32R6-NEXT: sc $9, 0($2) 3412; MIPS32R6-NEXT: beqzc $9, $BB10_1 3413; MIPS32R6-NEXT: # %bb.2: # %entry 3414; MIPS32R6-NEXT: and $1, $7, $5 3415; MIPS32R6-NEXT: srlv $1, $1, $3 3416; MIPS32R6-NEXT: seb $1, $1 3417; MIPS32R6-NEXT: # %bb.3: # %entry 3418; MIPS32R6-NEXT: jr $ra 3419; MIPS32R6-NEXT: seb $2, $1 3420; 3421; MIPS32R6O0-LABEL: AtomicLoadNand8: 3422; MIPS32R6O0: # %bb.0: # %entry 3423; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 3424; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 3425; MIPS32R6O0-NEXT: addiu $sp, $sp, -8 3426; MIPS32R6O0-NEXT: addu $1, $2, $25 3427; MIPS32R6O0-NEXT: move $2, $4 3428; MIPS32R6O0-NEXT: lw $1, %got(y)($1) 3429; MIPS32R6O0-NEXT: addiu $3, $zero, -4 3430; MIPS32R6O0-NEXT: and $3, $1, $3 3431; MIPS32R6O0-NEXT: andi $1, $1, 3 3432; MIPS32R6O0-NEXT: sll $1, $1, 3 3433; MIPS32R6O0-NEXT: ori $5, $zero, 255 3434; MIPS32R6O0-NEXT: sllv $5, $5, $1 3435; MIPS32R6O0-NEXT: nor $6, $zero, $5 3436; MIPS32R6O0-NEXT: sllv $4, $4, $1 3437; MIPS32R6O0-NEXT: $BB10_1: # %entry 3438; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 3439; MIPS32R6O0-NEXT: ll $8, 0($3) 3440; MIPS32R6O0-NEXT: and $9, $8, $4 3441; MIPS32R6O0-NEXT: nor $9, $zero, $9 3442; MIPS32R6O0-NEXT: and $9, $9, $5 3443; MIPS32R6O0-NEXT: and $10, $8, $6 3444; MIPS32R6O0-NEXT: or $10, $10, $9 3445; MIPS32R6O0-NEXT: sc $10, 0($3) 3446; MIPS32R6O0-NEXT: beqzc $10, $BB10_1 3447; MIPS32R6O0-NEXT: # %bb.2: # %entry 3448; MIPS32R6O0-NEXT: and $7, $8, $5 3449; MIPS32R6O0-NEXT: srlv $7, $7, $1 3450; MIPS32R6O0-NEXT: seb $7, $7 3451; MIPS32R6O0-NEXT: # %bb.3: # %entry 3452; MIPS32R6O0-NEXT: sw $7, 4($sp) # 4-byte Folded Spill 3453; MIPS32R6O0-NEXT: # %bb.4: # %entry 3454; MIPS32R6O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload 3455; MIPS32R6O0-NEXT: seb $2, $1 3456; MIPS32R6O0-NEXT: addiu $sp, $sp, 8 3457; MIPS32R6O0-NEXT: jrc $ra 3458; 3459; MIPS4-LABEL: AtomicLoadNand8: 3460; MIPS4: # %bb.0: # %entry 3461; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand8))) 3462; MIPS4-NEXT: daddu $1, $1, $25 3463; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand8))) 3464; MIPS4-NEXT: ld $1, %got_disp(y)($1) 3465; MIPS4-NEXT: daddiu $2, $zero, -4 3466; MIPS4-NEXT: and $2, $1, $2 3467; MIPS4-NEXT: andi $1, $1, 3 3468; MIPS4-NEXT: sll $3, $1, 3 3469; MIPS4-NEXT: ori $1, $zero, 255 3470; MIPS4-NEXT: sllv $5, $1, $3 3471; MIPS4-NEXT: nor $6, $zero, $5 3472; MIPS4-NEXT: sllv $4, $4, $3 3473; MIPS4-NEXT: .LBB10_1: # %entry 3474; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 3475; MIPS4-NEXT: ll $7, 0($2) 3476; MIPS4-NEXT: and $8, $7, $4 3477; MIPS4-NEXT: nor $8, $zero, $8 3478; MIPS4-NEXT: and $8, $8, $5 3479; MIPS4-NEXT: and $9, $7, $6 3480; MIPS4-NEXT: or $9, $9, $8 3481; MIPS4-NEXT: sc $9, 0($2) 3482; MIPS4-NEXT: beqz $9, .LBB10_1 3483; MIPS4-NEXT: nop 3484; MIPS4-NEXT: # %bb.2: # %entry 3485; MIPS4-NEXT: and $1, $7, $5 3486; MIPS4-NEXT: srlv $1, $1, $3 3487; MIPS4-NEXT: sll $1, $1, 24 3488; MIPS4-NEXT: sra $1, $1, 24 3489; MIPS4-NEXT: # %bb.3: # %entry 3490; MIPS4-NEXT: sll $1, $1, 24 3491; MIPS4-NEXT: jr $ra 3492; MIPS4-NEXT: sra $2, $1, 24 3493; 3494; MIPS64-LABEL: AtomicLoadNand8: 3495; MIPS64: # %bb.0: # %entry 3496; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand8))) 3497; MIPS64-NEXT: daddu $1, $1, $25 3498; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand8))) 3499; MIPS64-NEXT: ld $1, %got_disp(y)($1) 3500; MIPS64-NEXT: daddiu $2, $zero, -4 3501; MIPS64-NEXT: and $2, $1, $2 3502; MIPS64-NEXT: andi $1, $1, 3 3503; MIPS64-NEXT: sll $3, $1, 3 3504; MIPS64-NEXT: ori $1, $zero, 255 3505; MIPS64-NEXT: sllv $5, $1, $3 3506; MIPS64-NEXT: nor $6, $zero, $5 3507; MIPS64-NEXT: sllv $4, $4, $3 3508; MIPS64-NEXT: .LBB10_1: # %entry 3509; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 3510; MIPS64-NEXT: ll $7, 0($2) 3511; MIPS64-NEXT: and $8, $7, $4 3512; MIPS64-NEXT: nor $8, $zero, $8 3513; MIPS64-NEXT: and $8, $8, $5 3514; MIPS64-NEXT: and $9, $7, $6 3515; MIPS64-NEXT: or $9, $9, $8 3516; MIPS64-NEXT: sc $9, 0($2) 3517; MIPS64-NEXT: beqz $9, .LBB10_1 3518; MIPS64-NEXT: nop 3519; MIPS64-NEXT: # %bb.2: # %entry 3520; MIPS64-NEXT: and $1, $7, $5 3521; MIPS64-NEXT: srlv $1, $1, $3 3522; MIPS64-NEXT: sll $1, $1, 24 3523; MIPS64-NEXT: sra $1, $1, 24 3524; MIPS64-NEXT: # %bb.3: # %entry 3525; MIPS64-NEXT: sll $1, $1, 24 3526; MIPS64-NEXT: jr $ra 3527; MIPS64-NEXT: sra $2, $1, 24 3528; 3529; MIPS64R2-LABEL: AtomicLoadNand8: 3530; MIPS64R2: # %bb.0: # %entry 3531; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand8))) 3532; MIPS64R2-NEXT: daddu $1, $1, $25 3533; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand8))) 3534; MIPS64R2-NEXT: ld $1, %got_disp(y)($1) 3535; MIPS64R2-NEXT: daddiu $2, $zero, -4 3536; MIPS64R2-NEXT: and $2, $1, $2 3537; MIPS64R2-NEXT: andi $1, $1, 3 3538; MIPS64R2-NEXT: sll $3, $1, 3 3539; MIPS64R2-NEXT: ori $1, $zero, 255 3540; MIPS64R2-NEXT: sllv $5, $1, $3 3541; MIPS64R2-NEXT: nor $6, $zero, $5 3542; MIPS64R2-NEXT: sllv $4, $4, $3 3543; MIPS64R2-NEXT: .LBB10_1: # %entry 3544; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 3545; MIPS64R2-NEXT: ll $7, 0($2) 3546; MIPS64R2-NEXT: and $8, $7, $4 3547; MIPS64R2-NEXT: nor $8, $zero, $8 3548; MIPS64R2-NEXT: and $8, $8, $5 3549; MIPS64R2-NEXT: and $9, $7, $6 3550; MIPS64R2-NEXT: or $9, $9, $8 3551; MIPS64R2-NEXT: sc $9, 0($2) 3552; MIPS64R2-NEXT: beqz $9, .LBB10_1 3553; MIPS64R2-NEXT: nop 3554; MIPS64R2-NEXT: # %bb.2: # %entry 3555; MIPS64R2-NEXT: and $1, $7, $5 3556; MIPS64R2-NEXT: srlv $1, $1, $3 3557; MIPS64R2-NEXT: seb $1, $1 3558; MIPS64R2-NEXT: # %bb.3: # %entry 3559; MIPS64R2-NEXT: jr $ra 3560; MIPS64R2-NEXT: seb $2, $1 3561; 3562; MIPS64R6-LABEL: AtomicLoadNand8: 3563; MIPS64R6: # %bb.0: # %entry 3564; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand8))) 3565; MIPS64R6-NEXT: daddu $1, $1, $25 3566; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand8))) 3567; MIPS64R6-NEXT: ld $1, %got_disp(y)($1) 3568; MIPS64R6-NEXT: daddiu $2, $zero, -4 3569; MIPS64R6-NEXT: and $2, $1, $2 3570; MIPS64R6-NEXT: andi $1, $1, 3 3571; MIPS64R6-NEXT: sll $3, $1, 3 3572; MIPS64R6-NEXT: ori $1, $zero, 255 3573; MIPS64R6-NEXT: sllv $5, $1, $3 3574; MIPS64R6-NEXT: nor $6, $zero, $5 3575; MIPS64R6-NEXT: sllv $4, $4, $3 3576; MIPS64R6-NEXT: .LBB10_1: # %entry 3577; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 3578; MIPS64R6-NEXT: ll $7, 0($2) 3579; MIPS64R6-NEXT: and $8, $7, $4 3580; MIPS64R6-NEXT: nor $8, $zero, $8 3581; MIPS64R6-NEXT: and $8, $8, $5 3582; MIPS64R6-NEXT: and $9, $7, $6 3583; MIPS64R6-NEXT: or $9, $9, $8 3584; MIPS64R6-NEXT: sc $9, 0($2) 3585; MIPS64R6-NEXT: beqzc $9, .LBB10_1 3586; MIPS64R6-NEXT: # %bb.2: # %entry 3587; MIPS64R6-NEXT: and $1, $7, $5 3588; MIPS64R6-NEXT: srlv $1, $1, $3 3589; MIPS64R6-NEXT: seb $1, $1 3590; MIPS64R6-NEXT: # %bb.3: # %entry 3591; MIPS64R6-NEXT: jr $ra 3592; MIPS64R6-NEXT: seb $2, $1 3593; 3594; MIPS64R6O0-LABEL: AtomicLoadNand8: 3595; MIPS64R6O0: # %bb.0: # %entry 3596; MIPS64R6O0-NEXT: daddiu $sp, $sp, -16 3597; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand8))) 3598; MIPS64R6O0-NEXT: daddu $1, $1, $25 3599; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand8))) 3600; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 3601; MIPS64R6O0-NEXT: ld $1, %got_disp(y)($1) 3602; MIPS64R6O0-NEXT: daddiu $2, $zero, -4 3603; MIPS64R6O0-NEXT: and $2, $1, $2 3604; MIPS64R6O0-NEXT: andi $1, $1, 3 3605; MIPS64R6O0-NEXT: xori $1, $1, 3 3606; MIPS64R6O0-NEXT: sll $1, $1, 3 3607; MIPS64R6O0-NEXT: ori $3, $zero, 255 3608; MIPS64R6O0-NEXT: sllv $3, $3, $1 3609; MIPS64R6O0-NEXT: nor $5, $zero, $3 3610; MIPS64R6O0-NEXT: sllv $4, $4, $1 3611; MIPS64R6O0-NEXT: .LBB10_1: # %entry 3612; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 3613; MIPS64R6O0-NEXT: ll $7, 0($2) 3614; MIPS64R6O0-NEXT: and $8, $7, $4 3615; MIPS64R6O0-NEXT: nor $8, $zero, $8 3616; MIPS64R6O0-NEXT: and $8, $8, $3 3617; MIPS64R6O0-NEXT: and $9, $7, $5 3618; MIPS64R6O0-NEXT: or $9, $9, $8 3619; MIPS64R6O0-NEXT: sc $9, 0($2) 3620; MIPS64R6O0-NEXT: beqzc $9, .LBB10_1 3621; MIPS64R6O0-NEXT: # %bb.2: # %entry 3622; MIPS64R6O0-NEXT: and $6, $7, $3 3623; MIPS64R6O0-NEXT: srlv $6, $6, $1 3624; MIPS64R6O0-NEXT: seb $6, $6 3625; MIPS64R6O0-NEXT: # %bb.3: # %entry 3626; MIPS64R6O0-NEXT: sw $6, 12($sp) # 4-byte Folded Spill 3627; MIPS64R6O0-NEXT: # %bb.4: # %entry 3628; MIPS64R6O0-NEXT: lw $1, 12($sp) # 4-byte Folded Reload 3629; MIPS64R6O0-NEXT: seb $2, $1 3630; MIPS64R6O0-NEXT: daddiu $sp, $sp, 16 3631; MIPS64R6O0-NEXT: jrc $ra 3632; 3633; MM32-LABEL: AtomicLoadNand8: 3634; MM32: # %bb.0: # %entry 3635; MM32-NEXT: lui $2, %hi(_gp_disp) 3636; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 3637; MM32-NEXT: addu $2, $2, $25 3638; MM32-NEXT: lw $1, %got(y)($2) 3639; MM32-NEXT: addiu $2, $zero, -4 3640; MM32-NEXT: and $2, $1, $2 3641; MM32-NEXT: andi $1, $1, 3 3642; MM32-NEXT: sll $3, $1, 3 3643; MM32-NEXT: ori $1, $zero, 255 3644; MM32-NEXT: sllv $5, $1, $3 3645; MM32-NEXT: nor $6, $zero, $5 3646; MM32-NEXT: sllv $4, $4, $3 3647; MM32-NEXT: $BB10_1: # %entry 3648; MM32-NEXT: # =>This Inner Loop Header: Depth=1 3649; MM32-NEXT: ll $7, 0($2) 3650; MM32-NEXT: and $8, $7, $4 3651; MM32-NEXT: nor $8, $zero, $8 3652; MM32-NEXT: and $8, $8, $5 3653; MM32-NEXT: and $9, $7, $6 3654; MM32-NEXT: or $9, $9, $8 3655; MM32-NEXT: sc $9, 0($2) 3656; MM32-NEXT: beqzc $9, $BB10_1 3657; MM32-NEXT: # %bb.2: # %entry 3658; MM32-NEXT: and $1, $7, $5 3659; MM32-NEXT: srlv $1, $1, $3 3660; MM32-NEXT: seb $1, $1 3661; MM32-NEXT: # %bb.3: # %entry 3662; MM32-NEXT: jr $ra 3663; MM32-NEXT: seb $2, $1 3664; 3665; O1-LABEL: AtomicLoadNand8: 3666; O1: # %bb.0: # %entry 3667; O1-NEXT: lui $2, %hi(_gp_disp) 3668; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 3669; O1-NEXT: addu $1, $2, $25 3670; O1-NEXT: lw $1, %got(y)($1) 3671; O1-NEXT: addiu $2, $zero, -4 3672; O1-NEXT: and $2, $1, $2 3673; O1-NEXT: andi $1, $1, 3 3674; O1-NEXT: sll $3, $1, 3 3675; O1-NEXT: ori $1, $zero, 255 3676; O1-NEXT: sllv $5, $1, $3 3677; O1-NEXT: nor $6, $zero, $5 3678; O1-NEXT: sllv $4, $4, $3 3679; O1-NEXT: $BB10_1: # %entry 3680; O1-NEXT: # =>This Inner Loop Header: Depth=1 3681; O1-NEXT: ll $7, 0($2) 3682; O1-NEXT: and $8, $7, $4 3683; O1-NEXT: nor $8, $zero, $8 3684; O1-NEXT: and $8, $8, $5 3685; O1-NEXT: and $9, $7, $6 3686; O1-NEXT: or $9, $9, $8 3687; O1-NEXT: sc $9, 0($2) 3688; O1-NEXT: beqz $9, $BB10_1 3689; O1-NEXT: nop 3690; O1-NEXT: # %bb.2: # %entry 3691; O1-NEXT: and $1, $7, $5 3692; O1-NEXT: srlv $1, $1, $3 3693; O1-NEXT: sll $1, $1, 24 3694; O1-NEXT: sra $1, $1, 24 3695; O1-NEXT: # %bb.3: # %entry 3696; O1-NEXT: sll $1, $1, 24 3697; O1-NEXT: jr $ra 3698; O1-NEXT: sra $2, $1, 24 3699; 3700; O2-LABEL: AtomicLoadNand8: 3701; O2: # %bb.0: # %entry 3702; O2-NEXT: lui $2, %hi(_gp_disp) 3703; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 3704; O2-NEXT: addu $1, $2, $25 3705; O2-NEXT: lw $1, %got(y)($1) 3706; O2-NEXT: addiu $2, $zero, -4 3707; O2-NEXT: and $2, $1, $2 3708; O2-NEXT: andi $1, $1, 3 3709; O2-NEXT: sll $3, $1, 3 3710; O2-NEXT: ori $1, $zero, 255 3711; O2-NEXT: sllv $5, $1, $3 3712; O2-NEXT: nor $6, $zero, $5 3713; O2-NEXT: sllv $4, $4, $3 3714; O2-NEXT: $BB10_1: # %entry 3715; O2-NEXT: # =>This Inner Loop Header: Depth=1 3716; O2-NEXT: ll $7, 0($2) 3717; O2-NEXT: and $8, $7, $4 3718; O2-NEXT: nor $8, $zero, $8 3719; O2-NEXT: and $8, $8, $5 3720; O2-NEXT: and $9, $7, $6 3721; O2-NEXT: or $9, $9, $8 3722; O2-NEXT: sc $9, 0($2) 3723; O2-NEXT: beqz $9, $BB10_1 3724; O2-NEXT: nop 3725; O2-NEXT: # %bb.2: # %entry 3726; O2-NEXT: and $1, $7, $5 3727; O2-NEXT: srlv $1, $1, $3 3728; O2-NEXT: sll $1, $1, 24 3729; O2-NEXT: sra $1, $1, 24 3730; O2-NEXT: # %bb.3: # %entry 3731; O2-NEXT: sll $1, $1, 24 3732; O2-NEXT: jr $ra 3733; O2-NEXT: sra $2, $1, 24 3734; 3735; O3-LABEL: AtomicLoadNand8: 3736; O3: # %bb.0: # %entry 3737; O3-NEXT: lui $2, %hi(_gp_disp) 3738; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 3739; O3-NEXT: addu $1, $2, $25 3740; O3-NEXT: addiu $2, $zero, -4 3741; O3-NEXT: lw $1, %got(y)($1) 3742; O3-NEXT: and $2, $1, $2 3743; O3-NEXT: andi $1, $1, 3 3744; O3-NEXT: sll $3, $1, 3 3745; O3-NEXT: ori $1, $zero, 255 3746; O3-NEXT: sllv $5, $1, $3 3747; O3-NEXT: sllv $4, $4, $3 3748; O3-NEXT: nor $6, $zero, $5 3749; O3-NEXT: $BB10_1: # %entry 3750; O3-NEXT: # =>This Inner Loop Header: Depth=1 3751; O3-NEXT: ll $7, 0($2) 3752; O3-NEXT: and $8, $7, $4 3753; O3-NEXT: nor $8, $zero, $8 3754; O3-NEXT: and $8, $8, $5 3755; O3-NEXT: and $9, $7, $6 3756; O3-NEXT: or $9, $9, $8 3757; O3-NEXT: sc $9, 0($2) 3758; O3-NEXT: beqz $9, $BB10_1 3759; O3-NEXT: nop 3760; O3-NEXT: # %bb.2: # %entry 3761; O3-NEXT: and $1, $7, $5 3762; O3-NEXT: srlv $1, $1, $3 3763; O3-NEXT: sll $1, $1, 24 3764; O3-NEXT: sra $1, $1, 24 3765; O3-NEXT: # %bb.3: # %entry 3766; O3-NEXT: sll $1, $1, 24 3767; O3-NEXT: jr $ra 3768; O3-NEXT: sra $2, $1, 24 3769; 3770; MIPS32EB-LABEL: AtomicLoadNand8: 3771; MIPS32EB: # %bb.0: # %entry 3772; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 3773; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 3774; MIPS32EB-NEXT: addu $1, $2, $25 3775; MIPS32EB-NEXT: lw $1, %got(y)($1) 3776; MIPS32EB-NEXT: addiu $2, $zero, -4 3777; MIPS32EB-NEXT: and $2, $1, $2 3778; MIPS32EB-NEXT: andi $1, $1, 3 3779; MIPS32EB-NEXT: xori $1, $1, 3 3780; MIPS32EB-NEXT: sll $3, $1, 3 3781; MIPS32EB-NEXT: ori $1, $zero, 255 3782; MIPS32EB-NEXT: sllv $5, $1, $3 3783; MIPS32EB-NEXT: nor $6, $zero, $5 3784; MIPS32EB-NEXT: sllv $4, $4, $3 3785; MIPS32EB-NEXT: $BB10_1: # %entry 3786; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 3787; MIPS32EB-NEXT: ll $7, 0($2) 3788; MIPS32EB-NEXT: and $8, $7, $4 3789; MIPS32EB-NEXT: nor $8, $zero, $8 3790; MIPS32EB-NEXT: and $8, $8, $5 3791; MIPS32EB-NEXT: and $9, $7, $6 3792; MIPS32EB-NEXT: or $9, $9, $8 3793; MIPS32EB-NEXT: sc $9, 0($2) 3794; MIPS32EB-NEXT: beqz $9, $BB10_1 3795; MIPS32EB-NEXT: nop 3796; MIPS32EB-NEXT: # %bb.2: # %entry 3797; MIPS32EB-NEXT: and $1, $7, $5 3798; MIPS32EB-NEXT: srlv $1, $1, $3 3799; MIPS32EB-NEXT: sll $1, $1, 24 3800; MIPS32EB-NEXT: sra $1, $1, 24 3801; MIPS32EB-NEXT: # %bb.3: # %entry 3802; MIPS32EB-NEXT: sll $1, $1, 24 3803; MIPS32EB-NEXT: jr $ra 3804; MIPS32EB-NEXT: sra $2, $1, 24 3805entry: 3806 %0 = atomicrmw nand i8* @y, i8 %incr monotonic 3807 ret i8 %0 3808 3809} 3810 3811define signext i8 @AtomicSwap8(i8 signext %newval) nounwind { 3812; MIPS32-LABEL: AtomicSwap8: 3813; MIPS32: # %bb.0: # %entry 3814; MIPS32-NEXT: lui $2, %hi(_gp_disp) 3815; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 3816; MIPS32-NEXT: addu $1, $2, $25 3817; MIPS32-NEXT: lw $1, %got(y)($1) 3818; MIPS32-NEXT: addiu $2, $zero, -4 3819; MIPS32-NEXT: and $2, $1, $2 3820; MIPS32-NEXT: andi $1, $1, 3 3821; MIPS32-NEXT: sll $3, $1, 3 3822; MIPS32-NEXT: ori $1, $zero, 255 3823; MIPS32-NEXT: sllv $5, $1, $3 3824; MIPS32-NEXT: nor $6, $zero, $5 3825; MIPS32-NEXT: sllv $4, $4, $3 3826; MIPS32-NEXT: $BB11_1: # %entry 3827; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 3828; MIPS32-NEXT: ll $7, 0($2) 3829; MIPS32-NEXT: and $8, $4, $5 3830; MIPS32-NEXT: and $9, $7, $6 3831; MIPS32-NEXT: or $9, $9, $8 3832; MIPS32-NEXT: sc $9, 0($2) 3833; MIPS32-NEXT: beqz $9, $BB11_1 3834; MIPS32-NEXT: nop 3835; MIPS32-NEXT: # %bb.2: # %entry 3836; MIPS32-NEXT: and $1, $7, $5 3837; MIPS32-NEXT: srlv $1, $1, $3 3838; MIPS32-NEXT: sll $1, $1, 24 3839; MIPS32-NEXT: sra $1, $1, 24 3840; MIPS32-NEXT: # %bb.3: # %entry 3841; MIPS32-NEXT: sll $1, $1, 24 3842; MIPS32-NEXT: jr $ra 3843; MIPS32-NEXT: sra $2, $1, 24 3844; 3845; MIPS32O0-LABEL: AtomicSwap8: 3846; MIPS32O0: # %bb.0: # %entry 3847; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 3848; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 3849; MIPS32O0-NEXT: addiu $sp, $sp, -8 3850; MIPS32O0-NEXT: addu $1, $2, $25 3851; MIPS32O0-NEXT: lw $1, %got(y)($1) 3852; MIPS32O0-NEXT: addiu $2, $zero, -4 3853; MIPS32O0-NEXT: and $2, $1, $2 3854; MIPS32O0-NEXT: andi $1, $1, 3 3855; MIPS32O0-NEXT: sll $1, $1, 3 3856; MIPS32O0-NEXT: ori $3, $zero, 255 3857; MIPS32O0-NEXT: sllv $3, $3, $1 3858; MIPS32O0-NEXT: nor $5, $zero, $3 3859; MIPS32O0-NEXT: sllv $4, $4, $1 3860; MIPS32O0-NEXT: $BB11_1: # %entry 3861; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 3862; MIPS32O0-NEXT: ll $7, 0($2) 3863; MIPS32O0-NEXT: and $8, $4, $3 3864; MIPS32O0-NEXT: and $9, $7, $5 3865; MIPS32O0-NEXT: or $9, $9, $8 3866; MIPS32O0-NEXT: sc $9, 0($2) 3867; MIPS32O0-NEXT: beqz $9, $BB11_1 3868; MIPS32O0-NEXT: nop 3869; MIPS32O0-NEXT: # %bb.2: # %entry 3870; MIPS32O0-NEXT: and $6, $7, $3 3871; MIPS32O0-NEXT: srlv $6, $6, $1 3872; MIPS32O0-NEXT: sll $6, $6, 24 3873; MIPS32O0-NEXT: sra $6, $6, 24 3874; MIPS32O0-NEXT: # %bb.3: # %entry 3875; MIPS32O0-NEXT: sw $6, 4($sp) # 4-byte Folded Spill 3876; MIPS32O0-NEXT: # %bb.4: # %entry 3877; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload 3878; MIPS32O0-NEXT: sll $2, $1, 24 3879; MIPS32O0-NEXT: sra $2, $2, 24 3880; MIPS32O0-NEXT: addiu $sp, $sp, 8 3881; MIPS32O0-NEXT: jr $ra 3882; MIPS32O0-NEXT: nop 3883; 3884; MIPS32R2-LABEL: AtomicSwap8: 3885; MIPS32R2: # %bb.0: # %entry 3886; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 3887; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 3888; MIPS32R2-NEXT: addu $1, $2, $25 3889; MIPS32R2-NEXT: lw $1, %got(y)($1) 3890; MIPS32R2-NEXT: addiu $2, $zero, -4 3891; MIPS32R2-NEXT: and $2, $1, $2 3892; MIPS32R2-NEXT: andi $1, $1, 3 3893; MIPS32R2-NEXT: sll $3, $1, 3 3894; MIPS32R2-NEXT: ori $1, $zero, 255 3895; MIPS32R2-NEXT: sllv $5, $1, $3 3896; MIPS32R2-NEXT: nor $6, $zero, $5 3897; MIPS32R2-NEXT: sllv $4, $4, $3 3898; MIPS32R2-NEXT: $BB11_1: # %entry 3899; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 3900; MIPS32R2-NEXT: ll $7, 0($2) 3901; MIPS32R2-NEXT: and $8, $4, $5 3902; MIPS32R2-NEXT: and $9, $7, $6 3903; MIPS32R2-NEXT: or $9, $9, $8 3904; MIPS32R2-NEXT: sc $9, 0($2) 3905; MIPS32R2-NEXT: beqz $9, $BB11_1 3906; MIPS32R2-NEXT: nop 3907; MIPS32R2-NEXT: # %bb.2: # %entry 3908; MIPS32R2-NEXT: and $1, $7, $5 3909; MIPS32R2-NEXT: srlv $1, $1, $3 3910; MIPS32R2-NEXT: seb $1, $1 3911; MIPS32R2-NEXT: # %bb.3: # %entry 3912; MIPS32R2-NEXT: jr $ra 3913; MIPS32R2-NEXT: seb $2, $1 3914; 3915; MIPS32R6-LABEL: AtomicSwap8: 3916; MIPS32R6: # %bb.0: # %entry 3917; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 3918; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 3919; MIPS32R6-NEXT: addu $1, $2, $25 3920; MIPS32R6-NEXT: lw $1, %got(y)($1) 3921; MIPS32R6-NEXT: addiu $2, $zero, -4 3922; MIPS32R6-NEXT: and $2, $1, $2 3923; MIPS32R6-NEXT: andi $1, $1, 3 3924; MIPS32R6-NEXT: sll $3, $1, 3 3925; MIPS32R6-NEXT: ori $1, $zero, 255 3926; MIPS32R6-NEXT: sllv $5, $1, $3 3927; MIPS32R6-NEXT: nor $6, $zero, $5 3928; MIPS32R6-NEXT: sllv $4, $4, $3 3929; MIPS32R6-NEXT: $BB11_1: # %entry 3930; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 3931; MIPS32R6-NEXT: ll $7, 0($2) 3932; MIPS32R6-NEXT: and $8, $4, $5 3933; MIPS32R6-NEXT: and $9, $7, $6 3934; MIPS32R6-NEXT: or $9, $9, $8 3935; MIPS32R6-NEXT: sc $9, 0($2) 3936; MIPS32R6-NEXT: beqzc $9, $BB11_1 3937; MIPS32R6-NEXT: # %bb.2: # %entry 3938; MIPS32R6-NEXT: and $1, $7, $5 3939; MIPS32R6-NEXT: srlv $1, $1, $3 3940; MIPS32R6-NEXT: seb $1, $1 3941; MIPS32R6-NEXT: # %bb.3: # %entry 3942; MIPS32R6-NEXT: jr $ra 3943; MIPS32R6-NEXT: seb $2, $1 3944; 3945; MIPS32R6O0-LABEL: AtomicSwap8: 3946; MIPS32R6O0: # %bb.0: # %entry 3947; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 3948; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 3949; MIPS32R6O0-NEXT: addiu $sp, $sp, -8 3950; MIPS32R6O0-NEXT: addu $1, $2, $25 3951; MIPS32R6O0-NEXT: move $2, $4 3952; MIPS32R6O0-NEXT: lw $1, %got(y)($1) 3953; MIPS32R6O0-NEXT: addiu $3, $zero, -4 3954; MIPS32R6O0-NEXT: and $3, $1, $3 3955; MIPS32R6O0-NEXT: andi $1, $1, 3 3956; MIPS32R6O0-NEXT: sll $1, $1, 3 3957; MIPS32R6O0-NEXT: ori $5, $zero, 255 3958; MIPS32R6O0-NEXT: sllv $5, $5, $1 3959; MIPS32R6O0-NEXT: nor $6, $zero, $5 3960; MIPS32R6O0-NEXT: sllv $4, $4, $1 3961; MIPS32R6O0-NEXT: $BB11_1: # %entry 3962; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 3963; MIPS32R6O0-NEXT: ll $8, 0($3) 3964; MIPS32R6O0-NEXT: and $9, $4, $5 3965; MIPS32R6O0-NEXT: and $10, $8, $6 3966; MIPS32R6O0-NEXT: or $10, $10, $9 3967; MIPS32R6O0-NEXT: sc $10, 0($3) 3968; MIPS32R6O0-NEXT: beqzc $10, $BB11_1 3969; MIPS32R6O0-NEXT: # %bb.2: # %entry 3970; MIPS32R6O0-NEXT: and $7, $8, $5 3971; MIPS32R6O0-NEXT: srlv $7, $7, $1 3972; MIPS32R6O0-NEXT: seb $7, $7 3973; MIPS32R6O0-NEXT: # %bb.3: # %entry 3974; MIPS32R6O0-NEXT: sw $7, 4($sp) # 4-byte Folded Spill 3975; MIPS32R6O0-NEXT: # %bb.4: # %entry 3976; MIPS32R6O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload 3977; MIPS32R6O0-NEXT: seb $2, $1 3978; MIPS32R6O0-NEXT: addiu $sp, $sp, 8 3979; MIPS32R6O0-NEXT: jrc $ra 3980; 3981; MIPS4-LABEL: AtomicSwap8: 3982; MIPS4: # %bb.0: # %entry 3983; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap8))) 3984; MIPS4-NEXT: daddu $1, $1, $25 3985; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap8))) 3986; MIPS4-NEXT: ld $1, %got_disp(y)($1) 3987; MIPS4-NEXT: daddiu $2, $zero, -4 3988; MIPS4-NEXT: and $2, $1, $2 3989; MIPS4-NEXT: andi $1, $1, 3 3990; MIPS4-NEXT: sll $3, $1, 3 3991; MIPS4-NEXT: ori $1, $zero, 255 3992; MIPS4-NEXT: sllv $5, $1, $3 3993; MIPS4-NEXT: nor $6, $zero, $5 3994; MIPS4-NEXT: sllv $4, $4, $3 3995; MIPS4-NEXT: .LBB11_1: # %entry 3996; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 3997; MIPS4-NEXT: ll $7, 0($2) 3998; MIPS4-NEXT: and $8, $4, $5 3999; MIPS4-NEXT: and $9, $7, $6 4000; MIPS4-NEXT: or $9, $9, $8 4001; MIPS4-NEXT: sc $9, 0($2) 4002; MIPS4-NEXT: beqz $9, .LBB11_1 4003; MIPS4-NEXT: nop 4004; MIPS4-NEXT: # %bb.2: # %entry 4005; MIPS4-NEXT: and $1, $7, $5 4006; MIPS4-NEXT: srlv $1, $1, $3 4007; MIPS4-NEXT: sll $1, $1, 24 4008; MIPS4-NEXT: sra $1, $1, 24 4009; MIPS4-NEXT: # %bb.3: # %entry 4010; MIPS4-NEXT: sll $1, $1, 24 4011; MIPS4-NEXT: jr $ra 4012; MIPS4-NEXT: sra $2, $1, 24 4013; 4014; MIPS64-LABEL: AtomicSwap8: 4015; MIPS64: # %bb.0: # %entry 4016; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap8))) 4017; MIPS64-NEXT: daddu $1, $1, $25 4018; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap8))) 4019; MIPS64-NEXT: ld $1, %got_disp(y)($1) 4020; MIPS64-NEXT: daddiu $2, $zero, -4 4021; MIPS64-NEXT: and $2, $1, $2 4022; MIPS64-NEXT: andi $1, $1, 3 4023; MIPS64-NEXT: sll $3, $1, 3 4024; MIPS64-NEXT: ori $1, $zero, 255 4025; MIPS64-NEXT: sllv $5, $1, $3 4026; MIPS64-NEXT: nor $6, $zero, $5 4027; MIPS64-NEXT: sllv $4, $4, $3 4028; MIPS64-NEXT: .LBB11_1: # %entry 4029; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 4030; MIPS64-NEXT: ll $7, 0($2) 4031; MIPS64-NEXT: and $8, $4, $5 4032; MIPS64-NEXT: and $9, $7, $6 4033; MIPS64-NEXT: or $9, $9, $8 4034; MIPS64-NEXT: sc $9, 0($2) 4035; MIPS64-NEXT: beqz $9, .LBB11_1 4036; MIPS64-NEXT: nop 4037; MIPS64-NEXT: # %bb.2: # %entry 4038; MIPS64-NEXT: and $1, $7, $5 4039; MIPS64-NEXT: srlv $1, $1, $3 4040; MIPS64-NEXT: sll $1, $1, 24 4041; MIPS64-NEXT: sra $1, $1, 24 4042; MIPS64-NEXT: # %bb.3: # %entry 4043; MIPS64-NEXT: sll $1, $1, 24 4044; MIPS64-NEXT: jr $ra 4045; MIPS64-NEXT: sra $2, $1, 24 4046; 4047; MIPS64R2-LABEL: AtomicSwap8: 4048; MIPS64R2: # %bb.0: # %entry 4049; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap8))) 4050; MIPS64R2-NEXT: daddu $1, $1, $25 4051; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap8))) 4052; MIPS64R2-NEXT: ld $1, %got_disp(y)($1) 4053; MIPS64R2-NEXT: daddiu $2, $zero, -4 4054; MIPS64R2-NEXT: and $2, $1, $2 4055; MIPS64R2-NEXT: andi $1, $1, 3 4056; MIPS64R2-NEXT: sll $3, $1, 3 4057; MIPS64R2-NEXT: ori $1, $zero, 255 4058; MIPS64R2-NEXT: sllv $5, $1, $3 4059; MIPS64R2-NEXT: nor $6, $zero, $5 4060; MIPS64R2-NEXT: sllv $4, $4, $3 4061; MIPS64R2-NEXT: .LBB11_1: # %entry 4062; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 4063; MIPS64R2-NEXT: ll $7, 0($2) 4064; MIPS64R2-NEXT: and $8, $4, $5 4065; MIPS64R2-NEXT: and $9, $7, $6 4066; MIPS64R2-NEXT: or $9, $9, $8 4067; MIPS64R2-NEXT: sc $9, 0($2) 4068; MIPS64R2-NEXT: beqz $9, .LBB11_1 4069; MIPS64R2-NEXT: nop 4070; MIPS64R2-NEXT: # %bb.2: # %entry 4071; MIPS64R2-NEXT: and $1, $7, $5 4072; MIPS64R2-NEXT: srlv $1, $1, $3 4073; MIPS64R2-NEXT: seb $1, $1 4074; MIPS64R2-NEXT: # %bb.3: # %entry 4075; MIPS64R2-NEXT: jr $ra 4076; MIPS64R2-NEXT: seb $2, $1 4077; 4078; MIPS64R6-LABEL: AtomicSwap8: 4079; MIPS64R6: # %bb.0: # %entry 4080; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap8))) 4081; MIPS64R6-NEXT: daddu $1, $1, $25 4082; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap8))) 4083; MIPS64R6-NEXT: ld $1, %got_disp(y)($1) 4084; MIPS64R6-NEXT: daddiu $2, $zero, -4 4085; MIPS64R6-NEXT: and $2, $1, $2 4086; MIPS64R6-NEXT: andi $1, $1, 3 4087; MIPS64R6-NEXT: sll $3, $1, 3 4088; MIPS64R6-NEXT: ori $1, $zero, 255 4089; MIPS64R6-NEXT: sllv $5, $1, $3 4090; MIPS64R6-NEXT: nor $6, $zero, $5 4091; MIPS64R6-NEXT: sllv $4, $4, $3 4092; MIPS64R6-NEXT: .LBB11_1: # %entry 4093; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 4094; MIPS64R6-NEXT: ll $7, 0($2) 4095; MIPS64R6-NEXT: and $8, $4, $5 4096; MIPS64R6-NEXT: and $9, $7, $6 4097; MIPS64R6-NEXT: or $9, $9, $8 4098; MIPS64R6-NEXT: sc $9, 0($2) 4099; MIPS64R6-NEXT: beqzc $9, .LBB11_1 4100; MIPS64R6-NEXT: # %bb.2: # %entry 4101; MIPS64R6-NEXT: and $1, $7, $5 4102; MIPS64R6-NEXT: srlv $1, $1, $3 4103; MIPS64R6-NEXT: seb $1, $1 4104; MIPS64R6-NEXT: # %bb.3: # %entry 4105; MIPS64R6-NEXT: jr $ra 4106; MIPS64R6-NEXT: seb $2, $1 4107; 4108; MIPS64R6O0-LABEL: AtomicSwap8: 4109; MIPS64R6O0: # %bb.0: # %entry 4110; MIPS64R6O0-NEXT: daddiu $sp, $sp, -16 4111; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap8))) 4112; MIPS64R6O0-NEXT: daddu $1, $1, $25 4113; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap8))) 4114; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 4115; MIPS64R6O0-NEXT: ld $1, %got_disp(y)($1) 4116; MIPS64R6O0-NEXT: daddiu $2, $zero, -4 4117; MIPS64R6O0-NEXT: and $2, $1, $2 4118; MIPS64R6O0-NEXT: andi $1, $1, 3 4119; MIPS64R6O0-NEXT: xori $1, $1, 3 4120; MIPS64R6O0-NEXT: sll $1, $1, 3 4121; MIPS64R6O0-NEXT: ori $3, $zero, 255 4122; MIPS64R6O0-NEXT: sllv $3, $3, $1 4123; MIPS64R6O0-NEXT: nor $5, $zero, $3 4124; MIPS64R6O0-NEXT: sllv $4, $4, $1 4125; MIPS64R6O0-NEXT: .LBB11_1: # %entry 4126; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 4127; MIPS64R6O0-NEXT: ll $7, 0($2) 4128; MIPS64R6O0-NEXT: and $8, $4, $3 4129; MIPS64R6O0-NEXT: and $9, $7, $5 4130; MIPS64R6O0-NEXT: or $9, $9, $8 4131; MIPS64R6O0-NEXT: sc $9, 0($2) 4132; MIPS64R6O0-NEXT: beqzc $9, .LBB11_1 4133; MIPS64R6O0-NEXT: # %bb.2: # %entry 4134; MIPS64R6O0-NEXT: and $6, $7, $3 4135; MIPS64R6O0-NEXT: srlv $6, $6, $1 4136; MIPS64R6O0-NEXT: seb $6, $6 4137; MIPS64R6O0-NEXT: # %bb.3: # %entry 4138; MIPS64R6O0-NEXT: sw $6, 12($sp) # 4-byte Folded Spill 4139; MIPS64R6O0-NEXT: # %bb.4: # %entry 4140; MIPS64R6O0-NEXT: lw $1, 12($sp) # 4-byte Folded Reload 4141; MIPS64R6O0-NEXT: seb $2, $1 4142; MIPS64R6O0-NEXT: daddiu $sp, $sp, 16 4143; MIPS64R6O0-NEXT: jrc $ra 4144; 4145; MM32-LABEL: AtomicSwap8: 4146; MM32: # %bb.0: # %entry 4147; MM32-NEXT: lui $2, %hi(_gp_disp) 4148; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 4149; MM32-NEXT: addu $2, $2, $25 4150; MM32-NEXT: lw $1, %got(y)($2) 4151; MM32-NEXT: addiu $2, $zero, -4 4152; MM32-NEXT: and $2, $1, $2 4153; MM32-NEXT: andi $1, $1, 3 4154; MM32-NEXT: sll $3, $1, 3 4155; MM32-NEXT: ori $1, $zero, 255 4156; MM32-NEXT: sllv $5, $1, $3 4157; MM32-NEXT: nor $6, $zero, $5 4158; MM32-NEXT: sllv $4, $4, $3 4159; MM32-NEXT: $BB11_1: # %entry 4160; MM32-NEXT: # =>This Inner Loop Header: Depth=1 4161; MM32-NEXT: ll $7, 0($2) 4162; MM32-NEXT: and $8, $4, $5 4163; MM32-NEXT: and $9, $7, $6 4164; MM32-NEXT: or $9, $9, $8 4165; MM32-NEXT: sc $9, 0($2) 4166; MM32-NEXT: beqzc $9, $BB11_1 4167; MM32-NEXT: # %bb.2: # %entry 4168; MM32-NEXT: and $1, $7, $5 4169; MM32-NEXT: srlv $1, $1, $3 4170; MM32-NEXT: seb $1, $1 4171; MM32-NEXT: # %bb.3: # %entry 4172; MM32-NEXT: jr $ra 4173; MM32-NEXT: seb $2, $1 4174; 4175; O1-LABEL: AtomicSwap8: 4176; O1: # %bb.0: # %entry 4177; O1-NEXT: lui $2, %hi(_gp_disp) 4178; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 4179; O1-NEXT: addu $1, $2, $25 4180; O1-NEXT: lw $1, %got(y)($1) 4181; O1-NEXT: addiu $2, $zero, -4 4182; O1-NEXT: and $2, $1, $2 4183; O1-NEXT: andi $1, $1, 3 4184; O1-NEXT: sll $3, $1, 3 4185; O1-NEXT: ori $1, $zero, 255 4186; O1-NEXT: sllv $5, $1, $3 4187; O1-NEXT: nor $6, $zero, $5 4188; O1-NEXT: sllv $4, $4, $3 4189; O1-NEXT: $BB11_1: # %entry 4190; O1-NEXT: # =>This Inner Loop Header: Depth=1 4191; O1-NEXT: ll $7, 0($2) 4192; O1-NEXT: and $8, $4, $5 4193; O1-NEXT: and $9, $7, $6 4194; O1-NEXT: or $9, $9, $8 4195; O1-NEXT: sc $9, 0($2) 4196; O1-NEXT: beqz $9, $BB11_1 4197; O1-NEXT: nop 4198; O1-NEXT: # %bb.2: # %entry 4199; O1-NEXT: and $1, $7, $5 4200; O1-NEXT: srlv $1, $1, $3 4201; O1-NEXT: sll $1, $1, 24 4202; O1-NEXT: sra $1, $1, 24 4203; O1-NEXT: # %bb.3: # %entry 4204; O1-NEXT: sll $1, $1, 24 4205; O1-NEXT: jr $ra 4206; O1-NEXT: sra $2, $1, 24 4207; 4208; O2-LABEL: AtomicSwap8: 4209; O2: # %bb.0: # %entry 4210; O2-NEXT: lui $2, %hi(_gp_disp) 4211; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 4212; O2-NEXT: addu $1, $2, $25 4213; O2-NEXT: lw $1, %got(y)($1) 4214; O2-NEXT: addiu $2, $zero, -4 4215; O2-NEXT: and $2, $1, $2 4216; O2-NEXT: andi $1, $1, 3 4217; O2-NEXT: sll $3, $1, 3 4218; O2-NEXT: ori $1, $zero, 255 4219; O2-NEXT: sllv $5, $1, $3 4220; O2-NEXT: nor $6, $zero, $5 4221; O2-NEXT: sllv $4, $4, $3 4222; O2-NEXT: $BB11_1: # %entry 4223; O2-NEXT: # =>This Inner Loop Header: Depth=1 4224; O2-NEXT: ll $7, 0($2) 4225; O2-NEXT: and $8, $4, $5 4226; O2-NEXT: and $9, $7, $6 4227; O2-NEXT: or $9, $9, $8 4228; O2-NEXT: sc $9, 0($2) 4229; O2-NEXT: beqz $9, $BB11_1 4230; O2-NEXT: nop 4231; O2-NEXT: # %bb.2: # %entry 4232; O2-NEXT: and $1, $7, $5 4233; O2-NEXT: srlv $1, $1, $3 4234; O2-NEXT: sll $1, $1, 24 4235; O2-NEXT: sra $1, $1, 24 4236; O2-NEXT: # %bb.3: # %entry 4237; O2-NEXT: sll $1, $1, 24 4238; O2-NEXT: jr $ra 4239; O2-NEXT: sra $2, $1, 24 4240; 4241; O3-LABEL: AtomicSwap8: 4242; O3: # %bb.0: # %entry 4243; O3-NEXT: lui $2, %hi(_gp_disp) 4244; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 4245; O3-NEXT: addu $1, $2, $25 4246; O3-NEXT: addiu $2, $zero, -4 4247; O3-NEXT: lw $1, %got(y)($1) 4248; O3-NEXT: and $2, $1, $2 4249; O3-NEXT: andi $1, $1, 3 4250; O3-NEXT: sll $3, $1, 3 4251; O3-NEXT: ori $1, $zero, 255 4252; O3-NEXT: sllv $5, $1, $3 4253; O3-NEXT: sllv $4, $4, $3 4254; O3-NEXT: nor $6, $zero, $5 4255; O3-NEXT: $BB11_1: # %entry 4256; O3-NEXT: # =>This Inner Loop Header: Depth=1 4257; O3-NEXT: ll $7, 0($2) 4258; O3-NEXT: and $8, $4, $5 4259; O3-NEXT: and $9, $7, $6 4260; O3-NEXT: or $9, $9, $8 4261; O3-NEXT: sc $9, 0($2) 4262; O3-NEXT: beqz $9, $BB11_1 4263; O3-NEXT: nop 4264; O3-NEXT: # %bb.2: # %entry 4265; O3-NEXT: and $1, $7, $5 4266; O3-NEXT: srlv $1, $1, $3 4267; O3-NEXT: sll $1, $1, 24 4268; O3-NEXT: sra $1, $1, 24 4269; O3-NEXT: # %bb.3: # %entry 4270; O3-NEXT: sll $1, $1, 24 4271; O3-NEXT: jr $ra 4272; O3-NEXT: sra $2, $1, 24 4273; 4274; MIPS32EB-LABEL: AtomicSwap8: 4275; MIPS32EB: # %bb.0: # %entry 4276; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 4277; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 4278; MIPS32EB-NEXT: addu $1, $2, $25 4279; MIPS32EB-NEXT: lw $1, %got(y)($1) 4280; MIPS32EB-NEXT: addiu $2, $zero, -4 4281; MIPS32EB-NEXT: and $2, $1, $2 4282; MIPS32EB-NEXT: andi $1, $1, 3 4283; MIPS32EB-NEXT: xori $1, $1, 3 4284; MIPS32EB-NEXT: sll $3, $1, 3 4285; MIPS32EB-NEXT: ori $1, $zero, 255 4286; MIPS32EB-NEXT: sllv $5, $1, $3 4287; MIPS32EB-NEXT: nor $6, $zero, $5 4288; MIPS32EB-NEXT: sllv $4, $4, $3 4289; MIPS32EB-NEXT: $BB11_1: # %entry 4290; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 4291; MIPS32EB-NEXT: ll $7, 0($2) 4292; MIPS32EB-NEXT: and $8, $4, $5 4293; MIPS32EB-NEXT: and $9, $7, $6 4294; MIPS32EB-NEXT: or $9, $9, $8 4295; MIPS32EB-NEXT: sc $9, 0($2) 4296; MIPS32EB-NEXT: beqz $9, $BB11_1 4297; MIPS32EB-NEXT: nop 4298; MIPS32EB-NEXT: # %bb.2: # %entry 4299; MIPS32EB-NEXT: and $1, $7, $5 4300; MIPS32EB-NEXT: srlv $1, $1, $3 4301; MIPS32EB-NEXT: sll $1, $1, 24 4302; MIPS32EB-NEXT: sra $1, $1, 24 4303; MIPS32EB-NEXT: # %bb.3: # %entry 4304; MIPS32EB-NEXT: sll $1, $1, 24 4305; MIPS32EB-NEXT: jr $ra 4306; MIPS32EB-NEXT: sra $2, $1, 24 4307entry: 4308 %0 = atomicrmw xchg i8* @y, i8 %newval monotonic 4309 ret i8 %0 4310} 4311 4312define signext i8 @AtomicCmpSwap8(i8 signext %oldval, i8 signext %newval) nounwind { 4313; MIPS32-LABEL: AtomicCmpSwap8: 4314; MIPS32: # %bb.0: # %entry 4315; MIPS32-NEXT: lui $2, %hi(_gp_disp) 4316; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 4317; MIPS32-NEXT: addu $1, $2, $25 4318; MIPS32-NEXT: lw $1, %got(y)($1) 4319; MIPS32-NEXT: addiu $2, $zero, -4 4320; MIPS32-NEXT: and $2, $1, $2 4321; MIPS32-NEXT: andi $1, $1, 3 4322; MIPS32-NEXT: sll $3, $1, 3 4323; MIPS32-NEXT: ori $1, $zero, 255 4324; MIPS32-NEXT: sllv $6, $1, $3 4325; MIPS32-NEXT: nor $7, $zero, $6 4326; MIPS32-NEXT: andi $1, $4, 255 4327; MIPS32-NEXT: sllv $4, $1, $3 4328; MIPS32-NEXT: andi $1, $5, 255 4329; MIPS32-NEXT: sllv $5, $1, $3 4330; MIPS32-NEXT: $BB12_1: # %entry 4331; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 4332; MIPS32-NEXT: ll $8, 0($2) 4333; MIPS32-NEXT: and $9, $8, $6 4334; MIPS32-NEXT: bne $9, $4, $BB12_3 4335; MIPS32-NEXT: nop 4336; MIPS32-NEXT: # %bb.2: # %entry 4337; MIPS32-NEXT: # in Loop: Header=BB12_1 Depth=1 4338; MIPS32-NEXT: and $8, $8, $7 4339; MIPS32-NEXT: or $8, $8, $5 4340; MIPS32-NEXT: sc $8, 0($2) 4341; MIPS32-NEXT: beqz $8, $BB12_1 4342; MIPS32-NEXT: nop 4343; MIPS32-NEXT: $BB12_3: # %entry 4344; MIPS32-NEXT: srlv $1, $9, $3 4345; MIPS32-NEXT: sll $1, $1, 24 4346; MIPS32-NEXT: sra $1, $1, 24 4347; MIPS32-NEXT: # %bb.4: # %entry 4348; MIPS32-NEXT: sll $1, $1, 24 4349; MIPS32-NEXT: jr $ra 4350; MIPS32-NEXT: sra $2, $1, 24 4351; 4352; MIPS32O0-LABEL: AtomicCmpSwap8: 4353; MIPS32O0: # %bb.0: # %entry 4354; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 4355; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 4356; MIPS32O0-NEXT: addiu $sp, $sp, -8 4357; MIPS32O0-NEXT: addu $1, $2, $25 4358; MIPS32O0-NEXT: lw $1, %got(y)($1) 4359; MIPS32O0-NEXT: addiu $2, $zero, -4 4360; MIPS32O0-NEXT: and $2, $1, $2 4361; MIPS32O0-NEXT: andi $1, $1, 3 4362; MIPS32O0-NEXT: sll $1, $1, 3 4363; MIPS32O0-NEXT: ori $3, $zero, 255 4364; MIPS32O0-NEXT: sllv $3, $3, $1 4365; MIPS32O0-NEXT: nor $6, $zero, $3 4366; MIPS32O0-NEXT: andi $4, $4, 255 4367; MIPS32O0-NEXT: sllv $4, $4, $1 4368; MIPS32O0-NEXT: andi $5, $5, 255 4369; MIPS32O0-NEXT: sllv $5, $5, $1 4370; MIPS32O0-NEXT: $BB12_1: # %entry 4371; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 4372; MIPS32O0-NEXT: ll $8, 0($2) 4373; MIPS32O0-NEXT: and $9, $8, $3 4374; MIPS32O0-NEXT: bne $9, $4, $BB12_3 4375; MIPS32O0-NEXT: nop 4376; MIPS32O0-NEXT: # %bb.2: # %entry 4377; MIPS32O0-NEXT: # in Loop: Header=BB12_1 Depth=1 4378; MIPS32O0-NEXT: and $8, $8, $6 4379; MIPS32O0-NEXT: or $8, $8, $5 4380; MIPS32O0-NEXT: sc $8, 0($2) 4381; MIPS32O0-NEXT: beqz $8, $BB12_1 4382; MIPS32O0-NEXT: nop 4383; MIPS32O0-NEXT: $BB12_3: # %entry 4384; MIPS32O0-NEXT: srlv $7, $9, $1 4385; MIPS32O0-NEXT: sll $7, $7, 24 4386; MIPS32O0-NEXT: sra $7, $7, 24 4387; MIPS32O0-NEXT: # %bb.4: # %entry 4388; MIPS32O0-NEXT: sw $7, 4($sp) # 4-byte Folded Spill 4389; MIPS32O0-NEXT: # %bb.5: # %entry 4390; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload 4391; MIPS32O0-NEXT: sll $2, $1, 24 4392; MIPS32O0-NEXT: sra $2, $2, 24 4393; MIPS32O0-NEXT: addiu $sp, $sp, 8 4394; MIPS32O0-NEXT: jr $ra 4395; MIPS32O0-NEXT: nop 4396; 4397; MIPS32R2-LABEL: AtomicCmpSwap8: 4398; MIPS32R2: # %bb.0: # %entry 4399; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 4400; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 4401; MIPS32R2-NEXT: addu $1, $2, $25 4402; MIPS32R2-NEXT: lw $1, %got(y)($1) 4403; MIPS32R2-NEXT: addiu $2, $zero, -4 4404; MIPS32R2-NEXT: and $3, $1, $2 4405; MIPS32R2-NEXT: andi $1, $1, 3 4406; MIPS32R2-NEXT: sll $1, $1, 3 4407; MIPS32R2-NEXT: ori $2, $zero, 255 4408; MIPS32R2-NEXT: sllv $6, $2, $1 4409; MIPS32R2-NEXT: nor $7, $zero, $6 4410; MIPS32R2-NEXT: andi $2, $4, 255 4411; MIPS32R2-NEXT: sllv $4, $2, $1 4412; MIPS32R2-NEXT: andi $2, $5, 255 4413; MIPS32R2-NEXT: sllv $5, $2, $1 4414; MIPS32R2-NEXT: $BB12_1: # %entry 4415; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 4416; MIPS32R2-NEXT: ll $8, 0($3) 4417; MIPS32R2-NEXT: and $9, $8, $6 4418; MIPS32R2-NEXT: bne $9, $4, $BB12_3 4419; MIPS32R2-NEXT: nop 4420; MIPS32R2-NEXT: # %bb.2: # %entry 4421; MIPS32R2-NEXT: # in Loop: Header=BB12_1 Depth=1 4422; MIPS32R2-NEXT: and $8, $8, $7 4423; MIPS32R2-NEXT: or $8, $8, $5 4424; MIPS32R2-NEXT: sc $8, 0($3) 4425; MIPS32R2-NEXT: beqz $8, $BB12_1 4426; MIPS32R2-NEXT: nop 4427; MIPS32R2-NEXT: $BB12_3: # %entry 4428; MIPS32R2-NEXT: srlv $2, $9, $1 4429; MIPS32R2-NEXT: seb $2, $2 4430; MIPS32R2-NEXT: # %bb.4: # %entry 4431; MIPS32R2-NEXT: jr $ra 4432; MIPS32R2-NEXT: nop 4433; 4434; MIPS32R6-LABEL: AtomicCmpSwap8: 4435; MIPS32R6: # %bb.0: # %entry 4436; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 4437; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 4438; MIPS32R6-NEXT: addu $1, $2, $25 4439; MIPS32R6-NEXT: lw $1, %got(y)($1) 4440; MIPS32R6-NEXT: addiu $2, $zero, -4 4441; MIPS32R6-NEXT: and $3, $1, $2 4442; MIPS32R6-NEXT: andi $1, $1, 3 4443; MIPS32R6-NEXT: sll $1, $1, 3 4444; MIPS32R6-NEXT: ori $2, $zero, 255 4445; MIPS32R6-NEXT: sllv $6, $2, $1 4446; MIPS32R6-NEXT: nor $7, $zero, $6 4447; MIPS32R6-NEXT: andi $2, $4, 255 4448; MIPS32R6-NEXT: sllv $4, $2, $1 4449; MIPS32R6-NEXT: andi $2, $5, 255 4450; MIPS32R6-NEXT: sllv $5, $2, $1 4451; MIPS32R6-NEXT: $BB12_1: # %entry 4452; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 4453; MIPS32R6-NEXT: ll $8, 0($3) 4454; MIPS32R6-NEXT: and $9, $8, $6 4455; MIPS32R6-NEXT: bnec $9, $4, $BB12_3 4456; MIPS32R6-NEXT: # %bb.2: # %entry 4457; MIPS32R6-NEXT: # in Loop: Header=BB12_1 Depth=1 4458; MIPS32R6-NEXT: and $8, $8, $7 4459; MIPS32R6-NEXT: or $8, $8, $5 4460; MIPS32R6-NEXT: sc $8, 0($3) 4461; MIPS32R6-NEXT: beqzc $8, $BB12_1 4462; MIPS32R6-NEXT: $BB12_3: # %entry 4463; MIPS32R6-NEXT: srlv $2, $9, $1 4464; MIPS32R6-NEXT: seb $2, $2 4465; MIPS32R6-NEXT: # %bb.4: # %entry 4466; MIPS32R6-NEXT: jrc $ra 4467; 4468; MIPS32R6O0-LABEL: AtomicCmpSwap8: 4469; MIPS32R6O0: # %bb.0: # %entry 4470; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 4471; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 4472; MIPS32R6O0-NEXT: addiu $sp, $sp, -8 4473; MIPS32R6O0-NEXT: addu $1, $2, $25 4474; MIPS32R6O0-NEXT: move $2, $5 4475; MIPS32R6O0-NEXT: move $3, $4 4476; MIPS32R6O0-NEXT: lw $1, %got(y)($1) 4477; MIPS32R6O0-NEXT: addiu $6, $zero, -4 4478; MIPS32R6O0-NEXT: and $6, $1, $6 4479; MIPS32R6O0-NEXT: andi $1, $1, 3 4480; MIPS32R6O0-NEXT: sll $1, $1, 3 4481; MIPS32R6O0-NEXT: ori $7, $zero, 255 4482; MIPS32R6O0-NEXT: sllv $7, $7, $1 4483; MIPS32R6O0-NEXT: nor $8, $zero, $7 4484; MIPS32R6O0-NEXT: andi $4, $4, 255 4485; MIPS32R6O0-NEXT: sllv $4, $4, $1 4486; MIPS32R6O0-NEXT: andi $5, $5, 255 4487; MIPS32R6O0-NEXT: sllv $5, $5, $1 4488; MIPS32R6O0-NEXT: $BB12_1: # %entry 4489; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 4490; MIPS32R6O0-NEXT: ll $10, 0($6) 4491; MIPS32R6O0-NEXT: and $11, $10, $7 4492; MIPS32R6O0-NEXT: bnec $11, $4, $BB12_3 4493; MIPS32R6O0-NEXT: # %bb.2: # %entry 4494; MIPS32R6O0-NEXT: # in Loop: Header=BB12_1 Depth=1 4495; MIPS32R6O0-NEXT: and $10, $10, $8 4496; MIPS32R6O0-NEXT: or $10, $10, $5 4497; MIPS32R6O0-NEXT: sc $10, 0($6) 4498; MIPS32R6O0-NEXT: beqzc $10, $BB12_1 4499; MIPS32R6O0-NEXT: $BB12_3: # %entry 4500; MIPS32R6O0-NEXT: srlv $9, $11, $1 4501; MIPS32R6O0-NEXT: seb $9, $9 4502; MIPS32R6O0-NEXT: # %bb.4: # %entry 4503; MIPS32R6O0-NEXT: sw $9, 4($sp) # 4-byte Folded Spill 4504; MIPS32R6O0-NEXT: # %bb.5: # %entry 4505; MIPS32R6O0-NEXT: lw $2, 4($sp) # 4-byte Folded Reload 4506; MIPS32R6O0-NEXT: addiu $sp, $sp, 8 4507; MIPS32R6O0-NEXT: jrc $ra 4508; 4509; MIPS4-LABEL: AtomicCmpSwap8: 4510; MIPS4: # %bb.0: # %entry 4511; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap8))) 4512; MIPS4-NEXT: daddu $1, $1, $25 4513; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap8))) 4514; MIPS4-NEXT: ld $1, %got_disp(y)($1) 4515; MIPS4-NEXT: daddiu $2, $zero, -4 4516; MIPS4-NEXT: and $2, $1, $2 4517; MIPS4-NEXT: andi $1, $1, 3 4518; MIPS4-NEXT: sll $3, $1, 3 4519; MIPS4-NEXT: ori $1, $zero, 255 4520; MIPS4-NEXT: sllv $6, $1, $3 4521; MIPS4-NEXT: nor $7, $zero, $6 4522; MIPS4-NEXT: andi $1, $4, 255 4523; MIPS4-NEXT: sllv $4, $1, $3 4524; MIPS4-NEXT: andi $1, $5, 255 4525; MIPS4-NEXT: sllv $5, $1, $3 4526; MIPS4-NEXT: .LBB12_1: # %entry 4527; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 4528; MIPS4-NEXT: ll $8, 0($2) 4529; MIPS4-NEXT: and $9, $8, $6 4530; MIPS4-NEXT: bne $9, $4, .LBB12_3 4531; MIPS4-NEXT: nop 4532; MIPS4-NEXT: # %bb.2: # %entry 4533; MIPS4-NEXT: # in Loop: Header=BB12_1 Depth=1 4534; MIPS4-NEXT: and $8, $8, $7 4535; MIPS4-NEXT: or $8, $8, $5 4536; MIPS4-NEXT: sc $8, 0($2) 4537; MIPS4-NEXT: beqz $8, .LBB12_1 4538; MIPS4-NEXT: nop 4539; MIPS4-NEXT: .LBB12_3: # %entry 4540; MIPS4-NEXT: srlv $1, $9, $3 4541; MIPS4-NEXT: sll $1, $1, 24 4542; MIPS4-NEXT: sra $1, $1, 24 4543; MIPS4-NEXT: # %bb.4: # %entry 4544; MIPS4-NEXT: sll $1, $1, 24 4545; MIPS4-NEXT: jr $ra 4546; MIPS4-NEXT: sra $2, $1, 24 4547; 4548; MIPS64-LABEL: AtomicCmpSwap8: 4549; MIPS64: # %bb.0: # %entry 4550; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap8))) 4551; MIPS64-NEXT: daddu $1, $1, $25 4552; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap8))) 4553; MIPS64-NEXT: ld $1, %got_disp(y)($1) 4554; MIPS64-NEXT: daddiu $2, $zero, -4 4555; MIPS64-NEXT: and $2, $1, $2 4556; MIPS64-NEXT: andi $1, $1, 3 4557; MIPS64-NEXT: sll $3, $1, 3 4558; MIPS64-NEXT: ori $1, $zero, 255 4559; MIPS64-NEXT: sllv $6, $1, $3 4560; MIPS64-NEXT: nor $7, $zero, $6 4561; MIPS64-NEXT: andi $1, $4, 255 4562; MIPS64-NEXT: sllv $4, $1, $3 4563; MIPS64-NEXT: andi $1, $5, 255 4564; MIPS64-NEXT: sllv $5, $1, $3 4565; MIPS64-NEXT: .LBB12_1: # %entry 4566; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 4567; MIPS64-NEXT: ll $8, 0($2) 4568; MIPS64-NEXT: and $9, $8, $6 4569; MIPS64-NEXT: bne $9, $4, .LBB12_3 4570; MIPS64-NEXT: nop 4571; MIPS64-NEXT: # %bb.2: # %entry 4572; MIPS64-NEXT: # in Loop: Header=BB12_1 Depth=1 4573; MIPS64-NEXT: and $8, $8, $7 4574; MIPS64-NEXT: or $8, $8, $5 4575; MIPS64-NEXT: sc $8, 0($2) 4576; MIPS64-NEXT: beqz $8, .LBB12_1 4577; MIPS64-NEXT: nop 4578; MIPS64-NEXT: .LBB12_3: # %entry 4579; MIPS64-NEXT: srlv $1, $9, $3 4580; MIPS64-NEXT: sll $1, $1, 24 4581; MIPS64-NEXT: sra $1, $1, 24 4582; MIPS64-NEXT: # %bb.4: # %entry 4583; MIPS64-NEXT: sll $1, $1, 24 4584; MIPS64-NEXT: jr $ra 4585; MIPS64-NEXT: sra $2, $1, 24 4586; 4587; MIPS64R2-LABEL: AtomicCmpSwap8: 4588; MIPS64R2: # %bb.0: # %entry 4589; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap8))) 4590; MIPS64R2-NEXT: daddu $1, $1, $25 4591; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap8))) 4592; MIPS64R2-NEXT: ld $1, %got_disp(y)($1) 4593; MIPS64R2-NEXT: daddiu $2, $zero, -4 4594; MIPS64R2-NEXT: and $3, $1, $2 4595; MIPS64R2-NEXT: andi $1, $1, 3 4596; MIPS64R2-NEXT: sll $1, $1, 3 4597; MIPS64R2-NEXT: ori $2, $zero, 255 4598; MIPS64R2-NEXT: sllv $6, $2, $1 4599; MIPS64R2-NEXT: nor $7, $zero, $6 4600; MIPS64R2-NEXT: andi $2, $4, 255 4601; MIPS64R2-NEXT: sllv $4, $2, $1 4602; MIPS64R2-NEXT: andi $2, $5, 255 4603; MIPS64R2-NEXT: sllv $5, $2, $1 4604; MIPS64R2-NEXT: .LBB12_1: # %entry 4605; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 4606; MIPS64R2-NEXT: ll $8, 0($3) 4607; MIPS64R2-NEXT: and $9, $8, $6 4608; MIPS64R2-NEXT: bne $9, $4, .LBB12_3 4609; MIPS64R2-NEXT: nop 4610; MIPS64R2-NEXT: # %bb.2: # %entry 4611; MIPS64R2-NEXT: # in Loop: Header=BB12_1 Depth=1 4612; MIPS64R2-NEXT: and $8, $8, $7 4613; MIPS64R2-NEXT: or $8, $8, $5 4614; MIPS64R2-NEXT: sc $8, 0($3) 4615; MIPS64R2-NEXT: beqz $8, .LBB12_1 4616; MIPS64R2-NEXT: nop 4617; MIPS64R2-NEXT: .LBB12_3: # %entry 4618; MIPS64R2-NEXT: srlv $2, $9, $1 4619; MIPS64R2-NEXT: seb $2, $2 4620; MIPS64R2-NEXT: # %bb.4: # %entry 4621; MIPS64R2-NEXT: jr $ra 4622; MIPS64R2-NEXT: nop 4623; 4624; MIPS64R6-LABEL: AtomicCmpSwap8: 4625; MIPS64R6: # %bb.0: # %entry 4626; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap8))) 4627; MIPS64R6-NEXT: daddu $1, $1, $25 4628; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap8))) 4629; MIPS64R6-NEXT: ld $1, %got_disp(y)($1) 4630; MIPS64R6-NEXT: daddiu $2, $zero, -4 4631; MIPS64R6-NEXT: and $3, $1, $2 4632; MIPS64R6-NEXT: andi $1, $1, 3 4633; MIPS64R6-NEXT: sll $1, $1, 3 4634; MIPS64R6-NEXT: ori $2, $zero, 255 4635; MIPS64R6-NEXT: sllv $6, $2, $1 4636; MIPS64R6-NEXT: nor $7, $zero, $6 4637; MIPS64R6-NEXT: andi $2, $4, 255 4638; MIPS64R6-NEXT: sllv $4, $2, $1 4639; MIPS64R6-NEXT: andi $2, $5, 255 4640; MIPS64R6-NEXT: sllv $5, $2, $1 4641; MIPS64R6-NEXT: .LBB12_1: # %entry 4642; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 4643; MIPS64R6-NEXT: ll $8, 0($3) 4644; MIPS64R6-NEXT: and $9, $8, $6 4645; MIPS64R6-NEXT: bnec $9, $4, .LBB12_3 4646; MIPS64R6-NEXT: # %bb.2: # %entry 4647; MIPS64R6-NEXT: # in Loop: Header=BB12_1 Depth=1 4648; MIPS64R6-NEXT: and $8, $8, $7 4649; MIPS64R6-NEXT: or $8, $8, $5 4650; MIPS64R6-NEXT: sc $8, 0($3) 4651; MIPS64R6-NEXT: beqzc $8, .LBB12_1 4652; MIPS64R6-NEXT: .LBB12_3: # %entry 4653; MIPS64R6-NEXT: srlv $2, $9, $1 4654; MIPS64R6-NEXT: seb $2, $2 4655; MIPS64R6-NEXT: # %bb.4: # %entry 4656; MIPS64R6-NEXT: jrc $ra 4657; 4658; MIPS64R6O0-LABEL: AtomicCmpSwap8: 4659; MIPS64R6O0: # %bb.0: # %entry 4660; MIPS64R6O0-NEXT: daddiu $sp, $sp, -16 4661; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap8))) 4662; MIPS64R6O0-NEXT: daddu $1, $1, $25 4663; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap8))) 4664; MIPS64R6O0-NEXT: # kill: def $a1 killed $a1 killed $a1_64 4665; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 4666; MIPS64R6O0-NEXT: ld $1, %got_disp(y)($1) 4667; MIPS64R6O0-NEXT: daddiu $2, $zero, -4 4668; MIPS64R6O0-NEXT: and $2, $1, $2 4669; MIPS64R6O0-NEXT: andi $1, $1, 3 4670; MIPS64R6O0-NEXT: xori $1, $1, 3 4671; MIPS64R6O0-NEXT: sll $1, $1, 3 4672; MIPS64R6O0-NEXT: ori $3, $zero, 255 4673; MIPS64R6O0-NEXT: sllv $3, $3, $1 4674; MIPS64R6O0-NEXT: nor $6, $zero, $3 4675; MIPS64R6O0-NEXT: andi $4, $4, 255 4676; MIPS64R6O0-NEXT: sllv $4, $4, $1 4677; MIPS64R6O0-NEXT: andi $5, $5, 255 4678; MIPS64R6O0-NEXT: sllv $5, $5, $1 4679; MIPS64R6O0-NEXT: .LBB12_1: # %entry 4680; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 4681; MIPS64R6O0-NEXT: ll $8, 0($2) 4682; MIPS64R6O0-NEXT: and $9, $8, $3 4683; MIPS64R6O0-NEXT: bnec $9, $4, .LBB12_3 4684; MIPS64R6O0-NEXT: # %bb.2: # %entry 4685; MIPS64R6O0-NEXT: # in Loop: Header=BB12_1 Depth=1 4686; MIPS64R6O0-NEXT: and $8, $8, $6 4687; MIPS64R6O0-NEXT: or $8, $8, $5 4688; MIPS64R6O0-NEXT: sc $8, 0($2) 4689; MIPS64R6O0-NEXT: beqzc $8, .LBB12_1 4690; MIPS64R6O0-NEXT: .LBB12_3: # %entry 4691; MIPS64R6O0-NEXT: srlv $7, $9, $1 4692; MIPS64R6O0-NEXT: seb $7, $7 4693; MIPS64R6O0-NEXT: # %bb.4: # %entry 4694; MIPS64R6O0-NEXT: sw $7, 12($sp) # 4-byte Folded Spill 4695; MIPS64R6O0-NEXT: # %bb.5: # %entry 4696; MIPS64R6O0-NEXT: lw $2, 12($sp) # 4-byte Folded Reload 4697; MIPS64R6O0-NEXT: daddiu $sp, $sp, 16 4698; MIPS64R6O0-NEXT: jrc $ra 4699; 4700; MM32-LABEL: AtomicCmpSwap8: 4701; MM32: # %bb.0: # %entry 4702; MM32-NEXT: lui $2, %hi(_gp_disp) 4703; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 4704; MM32-NEXT: addu $2, $2, $25 4705; MM32-NEXT: lw $1, %got(y)($2) 4706; MM32-NEXT: addiu $2, $zero, -4 4707; MM32-NEXT: and $3, $1, $2 4708; MM32-NEXT: andi $1, $1, 3 4709; MM32-NEXT: sll $1, $1, 3 4710; MM32-NEXT: ori $2, $zero, 255 4711; MM32-NEXT: sllv $6, $2, $1 4712; MM32-NEXT: nor $7, $zero, $6 4713; MM32-NEXT: andi $2, $4, 255 4714; MM32-NEXT: sllv $4, $2, $1 4715; MM32-NEXT: andi $2, $5, 255 4716; MM32-NEXT: sllv $5, $2, $1 4717; MM32-NEXT: $BB12_1: # %entry 4718; MM32-NEXT: # =>This Inner Loop Header: Depth=1 4719; MM32-NEXT: ll $8, 0($3) 4720; MM32-NEXT: and $9, $8, $6 4721; MM32-NEXT: bne $9, $4, $BB12_3 4722; MM32-NEXT: nop 4723; MM32-NEXT: # %bb.2: # %entry 4724; MM32-NEXT: # in Loop: Header=BB12_1 Depth=1 4725; MM32-NEXT: and $8, $8, $7 4726; MM32-NEXT: or $8, $8, $5 4727; MM32-NEXT: sc $8, 0($3) 4728; MM32-NEXT: beqzc $8, $BB12_1 4729; MM32-NEXT: $BB12_3: # %entry 4730; MM32-NEXT: srlv $2, $9, $1 4731; MM32-NEXT: seb $2, $2 4732; MM32-NEXT: # %bb.4: # %entry 4733; MM32-NEXT: jrc $ra 4734; 4735; O1-LABEL: AtomicCmpSwap8: 4736; O1: # %bb.0: # %entry 4737; O1-NEXT: lui $2, %hi(_gp_disp) 4738; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 4739; O1-NEXT: addu $1, $2, $25 4740; O1-NEXT: lw $1, %got(y)($1) 4741; O1-NEXT: addiu $2, $zero, -4 4742; O1-NEXT: and $2, $1, $2 4743; O1-NEXT: andi $1, $1, 3 4744; O1-NEXT: sll $3, $1, 3 4745; O1-NEXT: ori $1, $zero, 255 4746; O1-NEXT: sllv $6, $1, $3 4747; O1-NEXT: nor $7, $zero, $6 4748; O1-NEXT: andi $1, $4, 255 4749; O1-NEXT: sllv $4, $1, $3 4750; O1-NEXT: andi $1, $5, 255 4751; O1-NEXT: sllv $5, $1, $3 4752; O1-NEXT: $BB12_1: # %entry 4753; O1-NEXT: # =>This Inner Loop Header: Depth=1 4754; O1-NEXT: ll $8, 0($2) 4755; O1-NEXT: and $9, $8, $6 4756; O1-NEXT: bne $9, $4, $BB12_3 4757; O1-NEXT: nop 4758; O1-NEXT: # %bb.2: # %entry 4759; O1-NEXT: # in Loop: Header=BB12_1 Depth=1 4760; O1-NEXT: and $8, $8, $7 4761; O1-NEXT: or $8, $8, $5 4762; O1-NEXT: sc $8, 0($2) 4763; O1-NEXT: beqz $8, $BB12_1 4764; O1-NEXT: nop 4765; O1-NEXT: $BB12_3: # %entry 4766; O1-NEXT: srlv $1, $9, $3 4767; O1-NEXT: sll $1, $1, 24 4768; O1-NEXT: sra $1, $1, 24 4769; O1-NEXT: # %bb.4: # %entry 4770; O1-NEXT: sll $1, $1, 24 4771; O1-NEXT: jr $ra 4772; O1-NEXT: sra $2, $1, 24 4773; 4774; O2-LABEL: AtomicCmpSwap8: 4775; O2: # %bb.0: # %entry 4776; O2-NEXT: lui $2, %hi(_gp_disp) 4777; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 4778; O2-NEXT: addu $1, $2, $25 4779; O2-NEXT: lw $1, %got(y)($1) 4780; O2-NEXT: addiu $2, $zero, -4 4781; O2-NEXT: and $2, $1, $2 4782; O2-NEXT: andi $1, $1, 3 4783; O2-NEXT: sll $3, $1, 3 4784; O2-NEXT: ori $1, $zero, 255 4785; O2-NEXT: sllv $6, $1, $3 4786; O2-NEXT: nor $7, $zero, $6 4787; O2-NEXT: andi $1, $4, 255 4788; O2-NEXT: sllv $4, $1, $3 4789; O2-NEXT: andi $1, $5, 255 4790; O2-NEXT: sllv $5, $1, $3 4791; O2-NEXT: $BB12_1: # %entry 4792; O2-NEXT: # =>This Inner Loop Header: Depth=1 4793; O2-NEXT: ll $8, 0($2) 4794; O2-NEXT: and $9, $8, $6 4795; O2-NEXT: bne $9, $4, $BB12_3 4796; O2-NEXT: nop 4797; O2-NEXT: # %bb.2: # %entry 4798; O2-NEXT: # in Loop: Header=BB12_1 Depth=1 4799; O2-NEXT: and $8, $8, $7 4800; O2-NEXT: or $8, $8, $5 4801; O2-NEXT: sc $8, 0($2) 4802; O2-NEXT: beqz $8, $BB12_1 4803; O2-NEXT: nop 4804; O2-NEXT: $BB12_3: # %entry 4805; O2-NEXT: srlv $1, $9, $3 4806; O2-NEXT: sll $1, $1, 24 4807; O2-NEXT: sra $1, $1, 24 4808; O2-NEXT: # %bb.4: # %entry 4809; O2-NEXT: sll $1, $1, 24 4810; O2-NEXT: jr $ra 4811; O2-NEXT: sra $2, $1, 24 4812; 4813; O3-LABEL: AtomicCmpSwap8: 4814; O3: # %bb.0: # %entry 4815; O3-NEXT: lui $2, %hi(_gp_disp) 4816; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 4817; O3-NEXT: addu $1, $2, $25 4818; O3-NEXT: addiu $2, $zero, -4 4819; O3-NEXT: lw $1, %got(y)($1) 4820; O3-NEXT: and $2, $1, $2 4821; O3-NEXT: andi $1, $1, 3 4822; O3-NEXT: sll $3, $1, 3 4823; O3-NEXT: ori $1, $zero, 255 4824; O3-NEXT: sllv $6, $1, $3 4825; O3-NEXT: andi $1, $4, 255 4826; O3-NEXT: sllv $4, $1, $3 4827; O3-NEXT: andi $1, $5, 255 4828; O3-NEXT: nor $7, $zero, $6 4829; O3-NEXT: sllv $5, $1, $3 4830; O3-NEXT: $BB12_1: # %entry 4831; O3-NEXT: # =>This Inner Loop Header: Depth=1 4832; O3-NEXT: ll $8, 0($2) 4833; O3-NEXT: and $9, $8, $6 4834; O3-NEXT: bne $9, $4, $BB12_3 4835; O3-NEXT: nop 4836; O3-NEXT: # %bb.2: # %entry 4837; O3-NEXT: # in Loop: Header=BB12_1 Depth=1 4838; O3-NEXT: and $8, $8, $7 4839; O3-NEXT: or $8, $8, $5 4840; O3-NEXT: sc $8, 0($2) 4841; O3-NEXT: beqz $8, $BB12_1 4842; O3-NEXT: nop 4843; O3-NEXT: $BB12_3: # %entry 4844; O3-NEXT: srlv $1, $9, $3 4845; O3-NEXT: sll $1, $1, 24 4846; O3-NEXT: sra $1, $1, 24 4847; O3-NEXT: # %bb.4: # %entry 4848; O3-NEXT: sll $1, $1, 24 4849; O3-NEXT: jr $ra 4850; O3-NEXT: sra $2, $1, 24 4851; 4852; MIPS32EB-LABEL: AtomicCmpSwap8: 4853; MIPS32EB: # %bb.0: # %entry 4854; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 4855; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 4856; MIPS32EB-NEXT: addu $1, $2, $25 4857; MIPS32EB-NEXT: lw $1, %got(y)($1) 4858; MIPS32EB-NEXT: addiu $2, $zero, -4 4859; MIPS32EB-NEXT: and $2, $1, $2 4860; MIPS32EB-NEXT: andi $1, $1, 3 4861; MIPS32EB-NEXT: xori $1, $1, 3 4862; MIPS32EB-NEXT: sll $3, $1, 3 4863; MIPS32EB-NEXT: ori $1, $zero, 255 4864; MIPS32EB-NEXT: sllv $6, $1, $3 4865; MIPS32EB-NEXT: nor $7, $zero, $6 4866; MIPS32EB-NEXT: andi $1, $4, 255 4867; MIPS32EB-NEXT: sllv $4, $1, $3 4868; MIPS32EB-NEXT: andi $1, $5, 255 4869; MIPS32EB-NEXT: sllv $5, $1, $3 4870; MIPS32EB-NEXT: $BB12_1: # %entry 4871; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 4872; MIPS32EB-NEXT: ll $8, 0($2) 4873; MIPS32EB-NEXT: and $9, $8, $6 4874; MIPS32EB-NEXT: bne $9, $4, $BB12_3 4875; MIPS32EB-NEXT: nop 4876; MIPS32EB-NEXT: # %bb.2: # %entry 4877; MIPS32EB-NEXT: # in Loop: Header=BB12_1 Depth=1 4878; MIPS32EB-NEXT: and $8, $8, $7 4879; MIPS32EB-NEXT: or $8, $8, $5 4880; MIPS32EB-NEXT: sc $8, 0($2) 4881; MIPS32EB-NEXT: beqz $8, $BB12_1 4882; MIPS32EB-NEXT: nop 4883; MIPS32EB-NEXT: $BB12_3: # %entry 4884; MIPS32EB-NEXT: srlv $1, $9, $3 4885; MIPS32EB-NEXT: sll $1, $1, 24 4886; MIPS32EB-NEXT: sra $1, $1, 24 4887; MIPS32EB-NEXT: # %bb.4: # %entry 4888; MIPS32EB-NEXT: sll $1, $1, 24 4889; MIPS32EB-NEXT: jr $ra 4890; MIPS32EB-NEXT: sra $2, $1, 24 4891entry: 4892 %pair0 = cmpxchg i8* @y, i8 %oldval, i8 %newval monotonic monotonic 4893 %0 = extractvalue { i8, i1 } %pair0, 0 4894 ret i8 %0 4895} 4896 4897define i1 @AtomicCmpSwapRes8(i8* %ptr, i8 signext %oldval, i8 signext %newval) nounwind { 4898; MIPS32-LABEL: AtomicCmpSwapRes8: 4899; MIPS32: # %bb.0: # %entry 4900; MIPS32-NEXT: addiu $1, $zero, -4 4901; MIPS32-NEXT: and $2, $4, $1 4902; MIPS32-NEXT: andi $1, $4, 3 4903; MIPS32-NEXT: sll $3, $1, 3 4904; MIPS32-NEXT: ori $1, $zero, 255 4905; MIPS32-NEXT: sllv $4, $1, $3 4906; MIPS32-NEXT: nor $7, $zero, $4 4907; MIPS32-NEXT: andi $1, $5, 255 4908; MIPS32-NEXT: sllv $8, $1, $3 4909; MIPS32-NEXT: andi $1, $6, 255 4910; MIPS32-NEXT: sllv $6, $1, $3 4911; MIPS32-NEXT: $BB13_1: # %entry 4912; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 4913; MIPS32-NEXT: ll $9, 0($2) 4914; MIPS32-NEXT: and $10, $9, $4 4915; MIPS32-NEXT: bne $10, $8, $BB13_3 4916; MIPS32-NEXT: nop 4917; MIPS32-NEXT: # %bb.2: # %entry 4918; MIPS32-NEXT: # in Loop: Header=BB13_1 Depth=1 4919; MIPS32-NEXT: and $9, $9, $7 4920; MIPS32-NEXT: or $9, $9, $6 4921; MIPS32-NEXT: sc $9, 0($2) 4922; MIPS32-NEXT: beqz $9, $BB13_1 4923; MIPS32-NEXT: nop 4924; MIPS32-NEXT: $BB13_3: # %entry 4925; MIPS32-NEXT: srlv $1, $10, $3 4926; MIPS32-NEXT: sll $1, $1, 24 4927; MIPS32-NEXT: sra $1, $1, 24 4928; MIPS32-NEXT: # %bb.4: # %entry 4929; MIPS32-NEXT: sll $2, $5, 24 4930; MIPS32-NEXT: sra $2, $2, 24 4931; MIPS32-NEXT: xor $1, $1, $2 4932; MIPS32-NEXT: jr $ra 4933; MIPS32-NEXT: sltiu $2, $1, 1 4934; 4935; MIPS32O0-LABEL: AtomicCmpSwapRes8: 4936; MIPS32O0: # %bb.0: # %entry 4937; MIPS32O0-NEXT: addiu $sp, $sp, -8 4938; MIPS32O0-NEXT: addiu $1, $zero, -4 4939; MIPS32O0-NEXT: and $1, $4, $1 4940; MIPS32O0-NEXT: andi $2, $4, 3 4941; MIPS32O0-NEXT: sll $2, $2, 3 4942; MIPS32O0-NEXT: ori $3, $zero, 255 4943; MIPS32O0-NEXT: sllv $3, $3, $2 4944; MIPS32O0-NEXT: nor $4, $zero, $3 4945; MIPS32O0-NEXT: andi $7, $5, 255 4946; MIPS32O0-NEXT: sllv $7, $7, $2 4947; MIPS32O0-NEXT: andi $6, $6, 255 4948; MIPS32O0-NEXT: sllv $6, $6, $2 4949; MIPS32O0-NEXT: $BB13_1: # %entry 4950; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 4951; MIPS32O0-NEXT: ll $9, 0($1) 4952; MIPS32O0-NEXT: and $10, $9, $3 4953; MIPS32O0-NEXT: bne $10, $7, $BB13_3 4954; MIPS32O0-NEXT: nop 4955; MIPS32O0-NEXT: # %bb.2: # %entry 4956; MIPS32O0-NEXT: # in Loop: Header=BB13_1 Depth=1 4957; MIPS32O0-NEXT: and $9, $9, $4 4958; MIPS32O0-NEXT: or $9, $9, $6 4959; MIPS32O0-NEXT: sc $9, 0($1) 4960; MIPS32O0-NEXT: beqz $9, $BB13_1 4961; MIPS32O0-NEXT: nop 4962; MIPS32O0-NEXT: $BB13_3: # %entry 4963; MIPS32O0-NEXT: srlv $8, $10, $2 4964; MIPS32O0-NEXT: sll $8, $8, 24 4965; MIPS32O0-NEXT: sra $8, $8, 24 4966; MIPS32O0-NEXT: # %bb.4: # %entry 4967; MIPS32O0-NEXT: sw $5, 4($sp) # 4-byte Folded Spill 4968; MIPS32O0-NEXT: sw $8, 0($sp) # 4-byte Folded Spill 4969; MIPS32O0-NEXT: # %bb.5: # %entry 4970; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload 4971; MIPS32O0-NEXT: sll $2, $1, 24 4972; MIPS32O0-NEXT: sra $2, $2, 24 4973; MIPS32O0-NEXT: lw $3, 0($sp) # 4-byte Folded Reload 4974; MIPS32O0-NEXT: xor $2, $3, $2 4975; MIPS32O0-NEXT: sltiu $2, $2, 1 4976; MIPS32O0-NEXT: addiu $sp, $sp, 8 4977; MIPS32O0-NEXT: jr $ra 4978; MIPS32O0-NEXT: nop 4979; 4980; MIPS32R2-LABEL: AtomicCmpSwapRes8: 4981; MIPS32R2: # %bb.0: # %entry 4982; MIPS32R2-NEXT: addiu $1, $zero, -4 4983; MIPS32R2-NEXT: and $2, $4, $1 4984; MIPS32R2-NEXT: andi $1, $4, 3 4985; MIPS32R2-NEXT: sll $3, $1, 3 4986; MIPS32R2-NEXT: ori $1, $zero, 255 4987; MIPS32R2-NEXT: sllv $4, $1, $3 4988; MIPS32R2-NEXT: nor $7, $zero, $4 4989; MIPS32R2-NEXT: andi $1, $5, 255 4990; MIPS32R2-NEXT: sllv $8, $1, $3 4991; MIPS32R2-NEXT: andi $1, $6, 255 4992; MIPS32R2-NEXT: sllv $6, $1, $3 4993; MIPS32R2-NEXT: $BB13_1: # %entry 4994; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 4995; MIPS32R2-NEXT: ll $9, 0($2) 4996; MIPS32R2-NEXT: and $10, $9, $4 4997; MIPS32R2-NEXT: bne $10, $8, $BB13_3 4998; MIPS32R2-NEXT: nop 4999; MIPS32R2-NEXT: # %bb.2: # %entry 5000; MIPS32R2-NEXT: # in Loop: Header=BB13_1 Depth=1 5001; MIPS32R2-NEXT: and $9, $9, $7 5002; MIPS32R2-NEXT: or $9, $9, $6 5003; MIPS32R2-NEXT: sc $9, 0($2) 5004; MIPS32R2-NEXT: beqz $9, $BB13_1 5005; MIPS32R2-NEXT: nop 5006; MIPS32R2-NEXT: $BB13_3: # %entry 5007; MIPS32R2-NEXT: srlv $1, $10, $3 5008; MIPS32R2-NEXT: seb $1, $1 5009; MIPS32R2-NEXT: # %bb.4: # %entry 5010; MIPS32R2-NEXT: xor $1, $1, $5 5011; MIPS32R2-NEXT: jr $ra 5012; MIPS32R2-NEXT: sltiu $2, $1, 1 5013; 5014; MIPS32R6-LABEL: AtomicCmpSwapRes8: 5015; MIPS32R6: # %bb.0: # %entry 5016; MIPS32R6-NEXT: addiu $1, $zero, -4 5017; MIPS32R6-NEXT: and $2, $4, $1 5018; MIPS32R6-NEXT: andi $1, $4, 3 5019; MIPS32R6-NEXT: sll $3, $1, 3 5020; MIPS32R6-NEXT: ori $1, $zero, 255 5021; MIPS32R6-NEXT: sllv $4, $1, $3 5022; MIPS32R6-NEXT: nor $7, $zero, $4 5023; MIPS32R6-NEXT: andi $1, $5, 255 5024; MIPS32R6-NEXT: sllv $8, $1, $3 5025; MIPS32R6-NEXT: andi $1, $6, 255 5026; MIPS32R6-NEXT: sllv $6, $1, $3 5027; MIPS32R6-NEXT: $BB13_1: # %entry 5028; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 5029; MIPS32R6-NEXT: ll $9, 0($2) 5030; MIPS32R6-NEXT: and $10, $9, $4 5031; MIPS32R6-NEXT: bnec $10, $8, $BB13_3 5032; MIPS32R6-NEXT: # %bb.2: # %entry 5033; MIPS32R6-NEXT: # in Loop: Header=BB13_1 Depth=1 5034; MIPS32R6-NEXT: and $9, $9, $7 5035; MIPS32R6-NEXT: or $9, $9, $6 5036; MIPS32R6-NEXT: sc $9, 0($2) 5037; MIPS32R6-NEXT: beqzc $9, $BB13_1 5038; MIPS32R6-NEXT: $BB13_3: # %entry 5039; MIPS32R6-NEXT: srlv $1, $10, $3 5040; MIPS32R6-NEXT: seb $1, $1 5041; MIPS32R6-NEXT: # %bb.4: # %entry 5042; MIPS32R6-NEXT: xor $1, $1, $5 5043; MIPS32R6-NEXT: jr $ra 5044; MIPS32R6-NEXT: sltiu $2, $1, 1 5045; 5046; MIPS32R6O0-LABEL: AtomicCmpSwapRes8: 5047; MIPS32R6O0: # %bb.0: # %entry 5048; MIPS32R6O0-NEXT: addiu $sp, $sp, -8 5049; MIPS32R6O0-NEXT: move $1, $6 5050; MIPS32R6O0-NEXT: move $2, $5 5051; MIPS32R6O0-NEXT: addiu $3, $zero, -4 5052; MIPS32R6O0-NEXT: and $3, $4, $3 5053; MIPS32R6O0-NEXT: andi $4, $4, 3 5054; MIPS32R6O0-NEXT: sll $4, $4, 3 5055; MIPS32R6O0-NEXT: ori $7, $zero, 255 5056; MIPS32R6O0-NEXT: sllv $7, $7, $4 5057; MIPS32R6O0-NEXT: nor $8, $zero, $7 5058; MIPS32R6O0-NEXT: andi $9, $5, 255 5059; MIPS32R6O0-NEXT: sllv $9, $9, $4 5060; MIPS32R6O0-NEXT: andi $6, $6, 255 5061; MIPS32R6O0-NEXT: sllv $6, $6, $4 5062; MIPS32R6O0-NEXT: $BB13_1: # %entry 5063; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 5064; MIPS32R6O0-NEXT: ll $11, 0($3) 5065; MIPS32R6O0-NEXT: and $12, $11, $7 5066; MIPS32R6O0-NEXT: bnec $12, $9, $BB13_3 5067; MIPS32R6O0-NEXT: # %bb.2: # %entry 5068; MIPS32R6O0-NEXT: # in Loop: Header=BB13_1 Depth=1 5069; MIPS32R6O0-NEXT: and $11, $11, $8 5070; MIPS32R6O0-NEXT: or $11, $11, $6 5071; MIPS32R6O0-NEXT: sc $11, 0($3) 5072; MIPS32R6O0-NEXT: beqzc $11, $BB13_1 5073; MIPS32R6O0-NEXT: $BB13_3: # %entry 5074; MIPS32R6O0-NEXT: srlv $10, $12, $4 5075; MIPS32R6O0-NEXT: seb $10, $10 5076; MIPS32R6O0-NEXT: # %bb.4: # %entry 5077; MIPS32R6O0-NEXT: sw $5, 4($sp) # 4-byte Folded Spill 5078; MIPS32R6O0-NEXT: sw $10, 0($sp) # 4-byte Folded Spill 5079; MIPS32R6O0-NEXT: # %bb.5: # %entry 5080; MIPS32R6O0-NEXT: lw $1, 0($sp) # 4-byte Folded Reload 5081; MIPS32R6O0-NEXT: lw $2, 4($sp) # 4-byte Folded Reload 5082; MIPS32R6O0-NEXT: xor $1, $1, $2 5083; MIPS32R6O0-NEXT: sltiu $2, $1, 1 5084; MIPS32R6O0-NEXT: addiu $sp, $sp, 8 5085; MIPS32R6O0-NEXT: jrc $ra 5086; 5087; MIPS4-LABEL: AtomicCmpSwapRes8: 5088; MIPS4: # %bb.0: # %entry 5089; MIPS4-NEXT: daddiu $1, $zero, -4 5090; MIPS4-NEXT: and $2, $4, $1 5091; MIPS4-NEXT: andi $1, $4, 3 5092; MIPS4-NEXT: sll $3, $1, 3 5093; MIPS4-NEXT: ori $1, $zero, 255 5094; MIPS4-NEXT: sllv $4, $1, $3 5095; MIPS4-NEXT: nor $7, $zero, $4 5096; MIPS4-NEXT: andi $1, $5, 255 5097; MIPS4-NEXT: sllv $8, $1, $3 5098; MIPS4-NEXT: andi $1, $6, 255 5099; MIPS4-NEXT: sllv $6, $1, $3 5100; MIPS4-NEXT: .LBB13_1: # %entry 5101; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 5102; MIPS4-NEXT: ll $9, 0($2) 5103; MIPS4-NEXT: and $10, $9, $4 5104; MIPS4-NEXT: bne $10, $8, .LBB13_3 5105; MIPS4-NEXT: nop 5106; MIPS4-NEXT: # %bb.2: # %entry 5107; MIPS4-NEXT: # in Loop: Header=BB13_1 Depth=1 5108; MIPS4-NEXT: and $9, $9, $7 5109; MIPS4-NEXT: or $9, $9, $6 5110; MIPS4-NEXT: sc $9, 0($2) 5111; MIPS4-NEXT: beqz $9, .LBB13_1 5112; MIPS4-NEXT: nop 5113; MIPS4-NEXT: .LBB13_3: # %entry 5114; MIPS4-NEXT: srlv $1, $10, $3 5115; MIPS4-NEXT: sll $1, $1, 24 5116; MIPS4-NEXT: sra $1, $1, 24 5117; MIPS4-NEXT: # %bb.4: # %entry 5118; MIPS4-NEXT: sll $2, $5, 24 5119; MIPS4-NEXT: sra $2, $2, 24 5120; MIPS4-NEXT: xor $1, $1, $2 5121; MIPS4-NEXT: jr $ra 5122; MIPS4-NEXT: sltiu $2, $1, 1 5123; 5124; MIPS64-LABEL: AtomicCmpSwapRes8: 5125; MIPS64: # %bb.0: # %entry 5126; MIPS64-NEXT: daddiu $1, $zero, -4 5127; MIPS64-NEXT: and $2, $4, $1 5128; MIPS64-NEXT: andi $1, $4, 3 5129; MIPS64-NEXT: sll $3, $1, 3 5130; MIPS64-NEXT: ori $1, $zero, 255 5131; MIPS64-NEXT: sllv $4, $1, $3 5132; MIPS64-NEXT: nor $7, $zero, $4 5133; MIPS64-NEXT: andi $1, $5, 255 5134; MIPS64-NEXT: sllv $8, $1, $3 5135; MIPS64-NEXT: andi $1, $6, 255 5136; MIPS64-NEXT: sllv $6, $1, $3 5137; MIPS64-NEXT: .LBB13_1: # %entry 5138; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 5139; MIPS64-NEXT: ll $9, 0($2) 5140; MIPS64-NEXT: and $10, $9, $4 5141; MIPS64-NEXT: bne $10, $8, .LBB13_3 5142; MIPS64-NEXT: nop 5143; MIPS64-NEXT: # %bb.2: # %entry 5144; MIPS64-NEXT: # in Loop: Header=BB13_1 Depth=1 5145; MIPS64-NEXT: and $9, $9, $7 5146; MIPS64-NEXT: or $9, $9, $6 5147; MIPS64-NEXT: sc $9, 0($2) 5148; MIPS64-NEXT: beqz $9, .LBB13_1 5149; MIPS64-NEXT: nop 5150; MIPS64-NEXT: .LBB13_3: # %entry 5151; MIPS64-NEXT: srlv $1, $10, $3 5152; MIPS64-NEXT: sll $1, $1, 24 5153; MIPS64-NEXT: sra $1, $1, 24 5154; MIPS64-NEXT: # %bb.4: # %entry 5155; MIPS64-NEXT: sll $2, $5, 24 5156; MIPS64-NEXT: sra $2, $2, 24 5157; MIPS64-NEXT: xor $1, $1, $2 5158; MIPS64-NEXT: jr $ra 5159; MIPS64-NEXT: sltiu $2, $1, 1 5160; 5161; MIPS64R2-LABEL: AtomicCmpSwapRes8: 5162; MIPS64R2: # %bb.0: # %entry 5163; MIPS64R2-NEXT: daddiu $1, $zero, -4 5164; MIPS64R2-NEXT: and $2, $4, $1 5165; MIPS64R2-NEXT: andi $1, $4, 3 5166; MIPS64R2-NEXT: sll $3, $1, 3 5167; MIPS64R2-NEXT: ori $1, $zero, 255 5168; MIPS64R2-NEXT: sllv $4, $1, $3 5169; MIPS64R2-NEXT: nor $7, $zero, $4 5170; MIPS64R2-NEXT: andi $1, $5, 255 5171; MIPS64R2-NEXT: sllv $8, $1, $3 5172; MIPS64R2-NEXT: andi $1, $6, 255 5173; MIPS64R2-NEXT: sllv $6, $1, $3 5174; MIPS64R2-NEXT: .LBB13_1: # %entry 5175; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 5176; MIPS64R2-NEXT: ll $9, 0($2) 5177; MIPS64R2-NEXT: and $10, $9, $4 5178; MIPS64R2-NEXT: bne $10, $8, .LBB13_3 5179; MIPS64R2-NEXT: nop 5180; MIPS64R2-NEXT: # %bb.2: # %entry 5181; MIPS64R2-NEXT: # in Loop: Header=BB13_1 Depth=1 5182; MIPS64R2-NEXT: and $9, $9, $7 5183; MIPS64R2-NEXT: or $9, $9, $6 5184; MIPS64R2-NEXT: sc $9, 0($2) 5185; MIPS64R2-NEXT: beqz $9, .LBB13_1 5186; MIPS64R2-NEXT: nop 5187; MIPS64R2-NEXT: .LBB13_3: # %entry 5188; MIPS64R2-NEXT: srlv $1, $10, $3 5189; MIPS64R2-NEXT: seb $1, $1 5190; MIPS64R2-NEXT: # %bb.4: # %entry 5191; MIPS64R2-NEXT: xor $1, $1, $5 5192; MIPS64R2-NEXT: jr $ra 5193; MIPS64R2-NEXT: sltiu $2, $1, 1 5194; 5195; MIPS64R6-LABEL: AtomicCmpSwapRes8: 5196; MIPS64R6: # %bb.0: # %entry 5197; MIPS64R6-NEXT: daddiu $1, $zero, -4 5198; MIPS64R6-NEXT: and $2, $4, $1 5199; MIPS64R6-NEXT: andi $1, $4, 3 5200; MIPS64R6-NEXT: sll $3, $1, 3 5201; MIPS64R6-NEXT: ori $1, $zero, 255 5202; MIPS64R6-NEXT: sllv $4, $1, $3 5203; MIPS64R6-NEXT: nor $7, $zero, $4 5204; MIPS64R6-NEXT: andi $1, $5, 255 5205; MIPS64R6-NEXT: sllv $8, $1, $3 5206; MIPS64R6-NEXT: andi $1, $6, 255 5207; MIPS64R6-NEXT: sllv $6, $1, $3 5208; MIPS64R6-NEXT: .LBB13_1: # %entry 5209; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 5210; MIPS64R6-NEXT: ll $9, 0($2) 5211; MIPS64R6-NEXT: and $10, $9, $4 5212; MIPS64R6-NEXT: bnec $10, $8, .LBB13_3 5213; MIPS64R6-NEXT: # %bb.2: # %entry 5214; MIPS64R6-NEXT: # in Loop: Header=BB13_1 Depth=1 5215; MIPS64R6-NEXT: and $9, $9, $7 5216; MIPS64R6-NEXT: or $9, $9, $6 5217; MIPS64R6-NEXT: sc $9, 0($2) 5218; MIPS64R6-NEXT: beqzc $9, .LBB13_1 5219; MIPS64R6-NEXT: .LBB13_3: # %entry 5220; MIPS64R6-NEXT: srlv $1, $10, $3 5221; MIPS64R6-NEXT: seb $1, $1 5222; MIPS64R6-NEXT: # %bb.4: # %entry 5223; MIPS64R6-NEXT: xor $1, $1, $5 5224; MIPS64R6-NEXT: jr $ra 5225; MIPS64R6-NEXT: sltiu $2, $1, 1 5226; 5227; MIPS64R6O0-LABEL: AtomicCmpSwapRes8: 5228; MIPS64R6O0: # %bb.0: # %entry 5229; MIPS64R6O0-NEXT: daddiu $sp, $sp, -16 5230; MIPS64R6O0-NEXT: # kill: def $a2 killed $a2 killed $a2_64 5231; MIPS64R6O0-NEXT: # kill: def $a1 killed $a1 killed $a1_64 5232; MIPS64R6O0-NEXT: daddiu $1, $zero, -4 5233; MIPS64R6O0-NEXT: and $1, $4, $1 5234; MIPS64R6O0-NEXT: andi $2, $4, 3 5235; MIPS64R6O0-NEXT: xori $2, $2, 3 5236; MIPS64R6O0-NEXT: sll $2, $2, 3 5237; MIPS64R6O0-NEXT: ori $3, $zero, 255 5238; MIPS64R6O0-NEXT: sllv $3, $3, $2 5239; MIPS64R6O0-NEXT: nor $4, $zero, $3 5240; MIPS64R6O0-NEXT: andi $7, $5, 255 5241; MIPS64R6O0-NEXT: sllv $7, $7, $2 5242; MIPS64R6O0-NEXT: andi $6, $6, 255 5243; MIPS64R6O0-NEXT: sllv $6, $6, $2 5244; MIPS64R6O0-NEXT: .LBB13_1: # %entry 5245; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 5246; MIPS64R6O0-NEXT: ll $9, 0($1) 5247; MIPS64R6O0-NEXT: and $10, $9, $3 5248; MIPS64R6O0-NEXT: bnec $10, $7, .LBB13_3 5249; MIPS64R6O0-NEXT: # %bb.2: # %entry 5250; MIPS64R6O0-NEXT: # in Loop: Header=BB13_1 Depth=1 5251; MIPS64R6O0-NEXT: and $9, $9, $4 5252; MIPS64R6O0-NEXT: or $9, $9, $6 5253; MIPS64R6O0-NEXT: sc $9, 0($1) 5254; MIPS64R6O0-NEXT: beqzc $9, .LBB13_1 5255; MIPS64R6O0-NEXT: .LBB13_3: # %entry 5256; MIPS64R6O0-NEXT: srlv $8, $10, $2 5257; MIPS64R6O0-NEXT: seb $8, $8 5258; MIPS64R6O0-NEXT: # %bb.4: # %entry 5259; MIPS64R6O0-NEXT: sw $5, 12($sp) # 4-byte Folded Spill 5260; MIPS64R6O0-NEXT: sw $8, 8($sp) # 4-byte Folded Spill 5261; MIPS64R6O0-NEXT: # %bb.5: # %entry 5262; MIPS64R6O0-NEXT: lw $1, 8($sp) # 4-byte Folded Reload 5263; MIPS64R6O0-NEXT: lw $2, 12($sp) # 4-byte Folded Reload 5264; MIPS64R6O0-NEXT: xor $1, $1, $2 5265; MIPS64R6O0-NEXT: sltiu $2, $1, 1 5266; MIPS64R6O0-NEXT: daddiu $sp, $sp, 16 5267; MIPS64R6O0-NEXT: jrc $ra 5268; 5269; MM32-LABEL: AtomicCmpSwapRes8: 5270; MM32: # %bb.0: # %entry 5271; MM32-NEXT: addiu $1, $zero, -4 5272; MM32-NEXT: and $2, $4, $1 5273; MM32-NEXT: andi $1, $4, 3 5274; MM32-NEXT: sll $3, $1, 3 5275; MM32-NEXT: ori $1, $zero, 255 5276; MM32-NEXT: sllv $4, $1, $3 5277; MM32-NEXT: nor $7, $zero, $4 5278; MM32-NEXT: andi $1, $5, 255 5279; MM32-NEXT: sllv $8, $1, $3 5280; MM32-NEXT: andi $1, $6, 255 5281; MM32-NEXT: sllv $6, $1, $3 5282; MM32-NEXT: $BB13_1: # %entry 5283; MM32-NEXT: # =>This Inner Loop Header: Depth=1 5284; MM32-NEXT: ll $9, 0($2) 5285; MM32-NEXT: and $10, $9, $4 5286; MM32-NEXT: bne $10, $8, $BB13_3 5287; MM32-NEXT: nop 5288; MM32-NEXT: # %bb.2: # %entry 5289; MM32-NEXT: # in Loop: Header=BB13_1 Depth=1 5290; MM32-NEXT: and $9, $9, $7 5291; MM32-NEXT: or $9, $9, $6 5292; MM32-NEXT: sc $9, 0($2) 5293; MM32-NEXT: beqzc $9, $BB13_1 5294; MM32-NEXT: $BB13_3: # %entry 5295; MM32-NEXT: srlv $1, $10, $3 5296; MM32-NEXT: seb $1, $1 5297; MM32-NEXT: # %bb.4: # %entry 5298; MM32-NEXT: xor $1, $1, $5 5299; MM32-NEXT: jr $ra 5300; MM32-NEXT: sltiu $2, $1, 1 5301; 5302; O1-LABEL: AtomicCmpSwapRes8: 5303; O1: # %bb.0: # %entry 5304; O1-NEXT: addiu $1, $zero, -4 5305; O1-NEXT: and $2, $4, $1 5306; O1-NEXT: andi $1, $4, 3 5307; O1-NEXT: sll $3, $1, 3 5308; O1-NEXT: ori $1, $zero, 255 5309; O1-NEXT: sllv $4, $1, $3 5310; O1-NEXT: nor $7, $zero, $4 5311; O1-NEXT: andi $1, $5, 255 5312; O1-NEXT: sllv $8, $1, $3 5313; O1-NEXT: andi $1, $6, 255 5314; O1-NEXT: sllv $6, $1, $3 5315; O1-NEXT: $BB13_1: # %entry 5316; O1-NEXT: # =>This Inner Loop Header: Depth=1 5317; O1-NEXT: ll $9, 0($2) 5318; O1-NEXT: and $10, $9, $4 5319; O1-NEXT: bne $10, $8, $BB13_3 5320; O1-NEXT: nop 5321; O1-NEXT: # %bb.2: # %entry 5322; O1-NEXT: # in Loop: Header=BB13_1 Depth=1 5323; O1-NEXT: and $9, $9, $7 5324; O1-NEXT: or $9, $9, $6 5325; O1-NEXT: sc $9, 0($2) 5326; O1-NEXT: beqz $9, $BB13_1 5327; O1-NEXT: nop 5328; O1-NEXT: $BB13_3: # %entry 5329; O1-NEXT: srlv $1, $10, $3 5330; O1-NEXT: sll $1, $1, 24 5331; O1-NEXT: sra $1, $1, 24 5332; O1-NEXT: # %bb.4: # %entry 5333; O1-NEXT: sll $2, $5, 24 5334; O1-NEXT: sra $2, $2, 24 5335; O1-NEXT: xor $1, $1, $2 5336; O1-NEXT: jr $ra 5337; O1-NEXT: sltiu $2, $1, 1 5338; 5339; O2-LABEL: AtomicCmpSwapRes8: 5340; O2: # %bb.0: # %entry 5341; O2-NEXT: addiu $1, $zero, -4 5342; O2-NEXT: and $2, $4, $1 5343; O2-NEXT: andi $1, $4, 3 5344; O2-NEXT: sll $3, $1, 3 5345; O2-NEXT: ori $1, $zero, 255 5346; O2-NEXT: sllv $4, $1, $3 5347; O2-NEXT: nor $7, $zero, $4 5348; O2-NEXT: andi $1, $5, 255 5349; O2-NEXT: sllv $8, $1, $3 5350; O2-NEXT: andi $1, $6, 255 5351; O2-NEXT: sllv $6, $1, $3 5352; O2-NEXT: $BB13_1: # %entry 5353; O2-NEXT: # =>This Inner Loop Header: Depth=1 5354; O2-NEXT: ll $9, 0($2) 5355; O2-NEXT: and $10, $9, $4 5356; O2-NEXT: bne $10, $8, $BB13_3 5357; O2-NEXT: nop 5358; O2-NEXT: # %bb.2: # %entry 5359; O2-NEXT: # in Loop: Header=BB13_1 Depth=1 5360; O2-NEXT: and $9, $9, $7 5361; O2-NEXT: or $9, $9, $6 5362; O2-NEXT: sc $9, 0($2) 5363; O2-NEXT: beqz $9, $BB13_1 5364; O2-NEXT: nop 5365; O2-NEXT: $BB13_3: # %entry 5366; O2-NEXT: srlv $1, $10, $3 5367; O2-NEXT: sll $1, $1, 24 5368; O2-NEXT: sra $1, $1, 24 5369; O2-NEXT: # %bb.4: # %entry 5370; O2-NEXT: sll $2, $5, 24 5371; O2-NEXT: sra $2, $2, 24 5372; O2-NEXT: xor $1, $1, $2 5373; O2-NEXT: jr $ra 5374; O2-NEXT: sltiu $2, $1, 1 5375; 5376; O3-LABEL: AtomicCmpSwapRes8: 5377; O3: # %bb.0: # %entry 5378; O3-NEXT: addiu $1, $zero, -4 5379; O3-NEXT: and $2, $4, $1 5380; O3-NEXT: andi $1, $4, 3 5381; O3-NEXT: sll $3, $1, 3 5382; O3-NEXT: ori $1, $zero, 255 5383; O3-NEXT: sllv $4, $1, $3 5384; O3-NEXT: andi $1, $5, 255 5385; O3-NEXT: sllv $8, $1, $3 5386; O3-NEXT: andi $1, $6, 255 5387; O3-NEXT: nor $7, $zero, $4 5388; O3-NEXT: sllv $6, $1, $3 5389; O3-NEXT: $BB13_1: # %entry 5390; O3-NEXT: # =>This Inner Loop Header: Depth=1 5391; O3-NEXT: ll $9, 0($2) 5392; O3-NEXT: and $10, $9, $4 5393; O3-NEXT: bne $10, $8, $BB13_3 5394; O3-NEXT: nop 5395; O3-NEXT: # %bb.2: # %entry 5396; O3-NEXT: # in Loop: Header=BB13_1 Depth=1 5397; O3-NEXT: and $9, $9, $7 5398; O3-NEXT: or $9, $9, $6 5399; O3-NEXT: sc $9, 0($2) 5400; O3-NEXT: beqz $9, $BB13_1 5401; O3-NEXT: nop 5402; O3-NEXT: $BB13_3: # %entry 5403; O3-NEXT: srlv $1, $10, $3 5404; O3-NEXT: sll $1, $1, 24 5405; O3-NEXT: sra $1, $1, 24 5406; O3-NEXT: # %bb.4: # %entry 5407; O3-NEXT: sll $2, $5, 24 5408; O3-NEXT: sra $2, $2, 24 5409; O3-NEXT: xor $1, $1, $2 5410; O3-NEXT: jr $ra 5411; O3-NEXT: sltiu $2, $1, 1 5412; 5413; MIPS32EB-LABEL: AtomicCmpSwapRes8: 5414; MIPS32EB: # %bb.0: # %entry 5415; MIPS32EB-NEXT: addiu $1, $zero, -4 5416; MIPS32EB-NEXT: and $2, $4, $1 5417; MIPS32EB-NEXT: andi $1, $4, 3 5418; MIPS32EB-NEXT: xori $1, $1, 3 5419; MIPS32EB-NEXT: sll $3, $1, 3 5420; MIPS32EB-NEXT: ori $1, $zero, 255 5421; MIPS32EB-NEXT: sllv $4, $1, $3 5422; MIPS32EB-NEXT: nor $7, $zero, $4 5423; MIPS32EB-NEXT: andi $1, $5, 255 5424; MIPS32EB-NEXT: sllv $8, $1, $3 5425; MIPS32EB-NEXT: andi $1, $6, 255 5426; MIPS32EB-NEXT: sllv $6, $1, $3 5427; MIPS32EB-NEXT: $BB13_1: # %entry 5428; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 5429; MIPS32EB-NEXT: ll $9, 0($2) 5430; MIPS32EB-NEXT: and $10, $9, $4 5431; MIPS32EB-NEXT: bne $10, $8, $BB13_3 5432; MIPS32EB-NEXT: nop 5433; MIPS32EB-NEXT: # %bb.2: # %entry 5434; MIPS32EB-NEXT: # in Loop: Header=BB13_1 Depth=1 5435; MIPS32EB-NEXT: and $9, $9, $7 5436; MIPS32EB-NEXT: or $9, $9, $6 5437; MIPS32EB-NEXT: sc $9, 0($2) 5438; MIPS32EB-NEXT: beqz $9, $BB13_1 5439; MIPS32EB-NEXT: nop 5440; MIPS32EB-NEXT: $BB13_3: # %entry 5441; MIPS32EB-NEXT: srlv $1, $10, $3 5442; MIPS32EB-NEXT: sll $1, $1, 24 5443; MIPS32EB-NEXT: sra $1, $1, 24 5444; MIPS32EB-NEXT: # %bb.4: # %entry 5445; MIPS32EB-NEXT: sll $2, $5, 24 5446; MIPS32EB-NEXT: sra $2, $2, 24 5447; MIPS32EB-NEXT: xor $1, $1, $2 5448; MIPS32EB-NEXT: jr $ra 5449; MIPS32EB-NEXT: sltiu $2, $1, 1 5450entry: 5451 %0 = cmpxchg i8* %ptr, i8 %oldval, i8 %newval monotonic monotonic 5452 %1 = extractvalue { i8, i1 } %0, 1 5453 ret i1 %1 5454; FIXME: -march=mips produces a redundant sign extension here... 5455; FIXME: ...Leading to this split check. 5456 5457} 5458 5459; Check one i16 so that we cover the seh sign extend 5460@z = common global i16 0, align 1 5461 5462define signext i16 @AtomicLoadAdd16(i16 signext %incr) nounwind { 5463; MIPS32-LABEL: AtomicLoadAdd16: 5464; MIPS32: # %bb.0: # %entry 5465; MIPS32-NEXT: lui $2, %hi(_gp_disp) 5466; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 5467; MIPS32-NEXT: addu $1, $2, $25 5468; MIPS32-NEXT: lw $1, %got(z)($1) 5469; MIPS32-NEXT: addiu $2, $zero, -4 5470; MIPS32-NEXT: and $2, $1, $2 5471; MIPS32-NEXT: andi $1, $1, 3 5472; MIPS32-NEXT: sll $3, $1, 3 5473; MIPS32-NEXT: ori $1, $zero, 65535 5474; MIPS32-NEXT: sllv $5, $1, $3 5475; MIPS32-NEXT: nor $6, $zero, $5 5476; MIPS32-NEXT: sllv $4, $4, $3 5477; MIPS32-NEXT: $BB14_1: # %entry 5478; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 5479; MIPS32-NEXT: ll $7, 0($2) 5480; MIPS32-NEXT: addu $8, $7, $4 5481; MIPS32-NEXT: and $8, $8, $5 5482; MIPS32-NEXT: and $9, $7, $6 5483; MIPS32-NEXT: or $9, $9, $8 5484; MIPS32-NEXT: sc $9, 0($2) 5485; MIPS32-NEXT: beqz $9, $BB14_1 5486; MIPS32-NEXT: nop 5487; MIPS32-NEXT: # %bb.2: # %entry 5488; MIPS32-NEXT: and $1, $7, $5 5489; MIPS32-NEXT: srlv $1, $1, $3 5490; MIPS32-NEXT: sll $1, $1, 16 5491; MIPS32-NEXT: sra $1, $1, 16 5492; MIPS32-NEXT: # %bb.3: # %entry 5493; MIPS32-NEXT: sll $1, $1, 16 5494; MIPS32-NEXT: jr $ra 5495; MIPS32-NEXT: sra $2, $1, 16 5496; 5497; MIPS32O0-LABEL: AtomicLoadAdd16: 5498; MIPS32O0: # %bb.0: # %entry 5499; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 5500; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 5501; MIPS32O0-NEXT: addiu $sp, $sp, -8 5502; MIPS32O0-NEXT: addu $1, $2, $25 5503; MIPS32O0-NEXT: lw $1, %got(z)($1) 5504; MIPS32O0-NEXT: addiu $2, $zero, -4 5505; MIPS32O0-NEXT: and $2, $1, $2 5506; MIPS32O0-NEXT: andi $1, $1, 3 5507; MIPS32O0-NEXT: sll $1, $1, 3 5508; MIPS32O0-NEXT: ori $3, $zero, 65535 5509; MIPS32O0-NEXT: sllv $3, $3, $1 5510; MIPS32O0-NEXT: nor $5, $zero, $3 5511; MIPS32O0-NEXT: sllv $4, $4, $1 5512; MIPS32O0-NEXT: $BB14_1: # %entry 5513; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 5514; MIPS32O0-NEXT: ll $7, 0($2) 5515; MIPS32O0-NEXT: addu $8, $7, $4 5516; MIPS32O0-NEXT: and $8, $8, $3 5517; MIPS32O0-NEXT: and $9, $7, $5 5518; MIPS32O0-NEXT: or $9, $9, $8 5519; MIPS32O0-NEXT: sc $9, 0($2) 5520; MIPS32O0-NEXT: beqz $9, $BB14_1 5521; MIPS32O0-NEXT: nop 5522; MIPS32O0-NEXT: # %bb.2: # %entry 5523; MIPS32O0-NEXT: and $6, $7, $3 5524; MIPS32O0-NEXT: srlv $6, $6, $1 5525; MIPS32O0-NEXT: sll $6, $6, 16 5526; MIPS32O0-NEXT: sra $6, $6, 16 5527; MIPS32O0-NEXT: # %bb.3: # %entry 5528; MIPS32O0-NEXT: sw $6, 4($sp) # 4-byte Folded Spill 5529; MIPS32O0-NEXT: # %bb.4: # %entry 5530; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload 5531; MIPS32O0-NEXT: sll $2, $1, 16 5532; MIPS32O0-NEXT: sra $2, $2, 16 5533; MIPS32O0-NEXT: addiu $sp, $sp, 8 5534; MIPS32O0-NEXT: jr $ra 5535; MIPS32O0-NEXT: nop 5536; 5537; MIPS32R2-LABEL: AtomicLoadAdd16: 5538; MIPS32R2: # %bb.0: # %entry 5539; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 5540; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 5541; MIPS32R2-NEXT: addu $1, $2, $25 5542; MIPS32R2-NEXT: lw $1, %got(z)($1) 5543; MIPS32R2-NEXT: addiu $2, $zero, -4 5544; MIPS32R2-NEXT: and $2, $1, $2 5545; MIPS32R2-NEXT: andi $1, $1, 3 5546; MIPS32R2-NEXT: sll $3, $1, 3 5547; MIPS32R2-NEXT: ori $1, $zero, 65535 5548; MIPS32R2-NEXT: sllv $5, $1, $3 5549; MIPS32R2-NEXT: nor $6, $zero, $5 5550; MIPS32R2-NEXT: sllv $4, $4, $3 5551; MIPS32R2-NEXT: $BB14_1: # %entry 5552; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 5553; MIPS32R2-NEXT: ll $7, 0($2) 5554; MIPS32R2-NEXT: addu $8, $7, $4 5555; MIPS32R2-NEXT: and $8, $8, $5 5556; MIPS32R2-NEXT: and $9, $7, $6 5557; MIPS32R2-NEXT: or $9, $9, $8 5558; MIPS32R2-NEXT: sc $9, 0($2) 5559; MIPS32R2-NEXT: beqz $9, $BB14_1 5560; MIPS32R2-NEXT: nop 5561; MIPS32R2-NEXT: # %bb.2: # %entry 5562; MIPS32R2-NEXT: and $1, $7, $5 5563; MIPS32R2-NEXT: srlv $1, $1, $3 5564; MIPS32R2-NEXT: seh $1, $1 5565; MIPS32R2-NEXT: # %bb.3: # %entry 5566; MIPS32R2-NEXT: jr $ra 5567; MIPS32R2-NEXT: seh $2, $1 5568; 5569; MIPS32R6-LABEL: AtomicLoadAdd16: 5570; MIPS32R6: # %bb.0: # %entry 5571; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 5572; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 5573; MIPS32R6-NEXT: addu $1, $2, $25 5574; MIPS32R6-NEXT: lw $1, %got(z)($1) 5575; MIPS32R6-NEXT: addiu $2, $zero, -4 5576; MIPS32R6-NEXT: and $2, $1, $2 5577; MIPS32R6-NEXT: andi $1, $1, 3 5578; MIPS32R6-NEXT: sll $3, $1, 3 5579; MIPS32R6-NEXT: ori $1, $zero, 65535 5580; MIPS32R6-NEXT: sllv $5, $1, $3 5581; MIPS32R6-NEXT: nor $6, $zero, $5 5582; MIPS32R6-NEXT: sllv $4, $4, $3 5583; MIPS32R6-NEXT: $BB14_1: # %entry 5584; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 5585; MIPS32R6-NEXT: ll $7, 0($2) 5586; MIPS32R6-NEXT: addu $8, $7, $4 5587; MIPS32R6-NEXT: and $8, $8, $5 5588; MIPS32R6-NEXT: and $9, $7, $6 5589; MIPS32R6-NEXT: or $9, $9, $8 5590; MIPS32R6-NEXT: sc $9, 0($2) 5591; MIPS32R6-NEXT: beqzc $9, $BB14_1 5592; MIPS32R6-NEXT: # %bb.2: # %entry 5593; MIPS32R6-NEXT: and $1, $7, $5 5594; MIPS32R6-NEXT: srlv $1, $1, $3 5595; MIPS32R6-NEXT: seh $1, $1 5596; MIPS32R6-NEXT: # %bb.3: # %entry 5597; MIPS32R6-NEXT: jr $ra 5598; MIPS32R6-NEXT: seh $2, $1 5599; 5600; MIPS32R6O0-LABEL: AtomicLoadAdd16: 5601; MIPS32R6O0: # %bb.0: # %entry 5602; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 5603; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 5604; MIPS32R6O0-NEXT: addiu $sp, $sp, -8 5605; MIPS32R6O0-NEXT: addu $1, $2, $25 5606; MIPS32R6O0-NEXT: move $2, $4 5607; MIPS32R6O0-NEXT: lw $1, %got(z)($1) 5608; MIPS32R6O0-NEXT: addiu $3, $zero, -4 5609; MIPS32R6O0-NEXT: and $3, $1, $3 5610; MIPS32R6O0-NEXT: andi $1, $1, 3 5611; MIPS32R6O0-NEXT: sll $1, $1, 3 5612; MIPS32R6O0-NEXT: ori $5, $zero, 65535 5613; MIPS32R6O0-NEXT: sllv $5, $5, $1 5614; MIPS32R6O0-NEXT: nor $6, $zero, $5 5615; MIPS32R6O0-NEXT: sllv $4, $4, $1 5616; MIPS32R6O0-NEXT: $BB14_1: # %entry 5617; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 5618; MIPS32R6O0-NEXT: ll $8, 0($3) 5619; MIPS32R6O0-NEXT: addu $9, $8, $4 5620; MIPS32R6O0-NEXT: and $9, $9, $5 5621; MIPS32R6O0-NEXT: and $10, $8, $6 5622; MIPS32R6O0-NEXT: or $10, $10, $9 5623; MIPS32R6O0-NEXT: sc $10, 0($3) 5624; MIPS32R6O0-NEXT: beqzc $10, $BB14_1 5625; MIPS32R6O0-NEXT: # %bb.2: # %entry 5626; MIPS32R6O0-NEXT: and $7, $8, $5 5627; MIPS32R6O0-NEXT: srlv $7, $7, $1 5628; MIPS32R6O0-NEXT: seh $7, $7 5629; MIPS32R6O0-NEXT: # %bb.3: # %entry 5630; MIPS32R6O0-NEXT: sw $7, 4($sp) # 4-byte Folded Spill 5631; MIPS32R6O0-NEXT: # %bb.4: # %entry 5632; MIPS32R6O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload 5633; MIPS32R6O0-NEXT: seh $2, $1 5634; MIPS32R6O0-NEXT: addiu $sp, $sp, 8 5635; MIPS32R6O0-NEXT: jrc $ra 5636; 5637; MIPS4-LABEL: AtomicLoadAdd16: 5638; MIPS4: # %bb.0: # %entry 5639; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd16))) 5640; MIPS4-NEXT: daddu $1, $1, $25 5641; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd16))) 5642; MIPS4-NEXT: ld $1, %got_disp(z)($1) 5643; MIPS4-NEXT: daddiu $2, $zero, -4 5644; MIPS4-NEXT: and $2, $1, $2 5645; MIPS4-NEXT: andi $1, $1, 3 5646; MIPS4-NEXT: sll $3, $1, 3 5647; MIPS4-NEXT: ori $1, $zero, 65535 5648; MIPS4-NEXT: sllv $5, $1, $3 5649; MIPS4-NEXT: nor $6, $zero, $5 5650; MIPS4-NEXT: sllv $4, $4, $3 5651; MIPS4-NEXT: .LBB14_1: # %entry 5652; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 5653; MIPS4-NEXT: ll $7, 0($2) 5654; MIPS4-NEXT: addu $8, $7, $4 5655; MIPS4-NEXT: and $8, $8, $5 5656; MIPS4-NEXT: and $9, $7, $6 5657; MIPS4-NEXT: or $9, $9, $8 5658; MIPS4-NEXT: sc $9, 0($2) 5659; MIPS4-NEXT: beqz $9, .LBB14_1 5660; MIPS4-NEXT: nop 5661; MIPS4-NEXT: # %bb.2: # %entry 5662; MIPS4-NEXT: and $1, $7, $5 5663; MIPS4-NEXT: srlv $1, $1, $3 5664; MIPS4-NEXT: sll $1, $1, 16 5665; MIPS4-NEXT: sra $1, $1, 16 5666; MIPS4-NEXT: # %bb.3: # %entry 5667; MIPS4-NEXT: sll $1, $1, 16 5668; MIPS4-NEXT: jr $ra 5669; MIPS4-NEXT: sra $2, $1, 16 5670; 5671; MIPS64-LABEL: AtomicLoadAdd16: 5672; MIPS64: # %bb.0: # %entry 5673; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd16))) 5674; MIPS64-NEXT: daddu $1, $1, $25 5675; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd16))) 5676; MIPS64-NEXT: ld $1, %got_disp(z)($1) 5677; MIPS64-NEXT: daddiu $2, $zero, -4 5678; MIPS64-NEXT: and $2, $1, $2 5679; MIPS64-NEXT: andi $1, $1, 3 5680; MIPS64-NEXT: sll $3, $1, 3 5681; MIPS64-NEXT: ori $1, $zero, 65535 5682; MIPS64-NEXT: sllv $5, $1, $3 5683; MIPS64-NEXT: nor $6, $zero, $5 5684; MIPS64-NEXT: sllv $4, $4, $3 5685; MIPS64-NEXT: .LBB14_1: # %entry 5686; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 5687; MIPS64-NEXT: ll $7, 0($2) 5688; MIPS64-NEXT: addu $8, $7, $4 5689; MIPS64-NEXT: and $8, $8, $5 5690; MIPS64-NEXT: and $9, $7, $6 5691; MIPS64-NEXT: or $9, $9, $8 5692; MIPS64-NEXT: sc $9, 0($2) 5693; MIPS64-NEXT: beqz $9, .LBB14_1 5694; MIPS64-NEXT: nop 5695; MIPS64-NEXT: # %bb.2: # %entry 5696; MIPS64-NEXT: and $1, $7, $5 5697; MIPS64-NEXT: srlv $1, $1, $3 5698; MIPS64-NEXT: sll $1, $1, 16 5699; MIPS64-NEXT: sra $1, $1, 16 5700; MIPS64-NEXT: # %bb.3: # %entry 5701; MIPS64-NEXT: sll $1, $1, 16 5702; MIPS64-NEXT: jr $ra 5703; MIPS64-NEXT: sra $2, $1, 16 5704; 5705; MIPS64R2-LABEL: AtomicLoadAdd16: 5706; MIPS64R2: # %bb.0: # %entry 5707; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd16))) 5708; MIPS64R2-NEXT: daddu $1, $1, $25 5709; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd16))) 5710; MIPS64R2-NEXT: ld $1, %got_disp(z)($1) 5711; MIPS64R2-NEXT: daddiu $2, $zero, -4 5712; MIPS64R2-NEXT: and $2, $1, $2 5713; MIPS64R2-NEXT: andi $1, $1, 3 5714; MIPS64R2-NEXT: sll $3, $1, 3 5715; MIPS64R2-NEXT: ori $1, $zero, 65535 5716; MIPS64R2-NEXT: sllv $5, $1, $3 5717; MIPS64R2-NEXT: nor $6, $zero, $5 5718; MIPS64R2-NEXT: sllv $4, $4, $3 5719; MIPS64R2-NEXT: .LBB14_1: # %entry 5720; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 5721; MIPS64R2-NEXT: ll $7, 0($2) 5722; MIPS64R2-NEXT: addu $8, $7, $4 5723; MIPS64R2-NEXT: and $8, $8, $5 5724; MIPS64R2-NEXT: and $9, $7, $6 5725; MIPS64R2-NEXT: or $9, $9, $8 5726; MIPS64R2-NEXT: sc $9, 0($2) 5727; MIPS64R2-NEXT: beqz $9, .LBB14_1 5728; MIPS64R2-NEXT: nop 5729; MIPS64R2-NEXT: # %bb.2: # %entry 5730; MIPS64R2-NEXT: and $1, $7, $5 5731; MIPS64R2-NEXT: srlv $1, $1, $3 5732; MIPS64R2-NEXT: seh $1, $1 5733; MIPS64R2-NEXT: # %bb.3: # %entry 5734; MIPS64R2-NEXT: jr $ra 5735; MIPS64R2-NEXT: seh $2, $1 5736; 5737; MIPS64R6-LABEL: AtomicLoadAdd16: 5738; MIPS64R6: # %bb.0: # %entry 5739; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd16))) 5740; MIPS64R6-NEXT: daddu $1, $1, $25 5741; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd16))) 5742; MIPS64R6-NEXT: ld $1, %got_disp(z)($1) 5743; MIPS64R6-NEXT: daddiu $2, $zero, -4 5744; MIPS64R6-NEXT: and $2, $1, $2 5745; MIPS64R6-NEXT: andi $1, $1, 3 5746; MIPS64R6-NEXT: sll $3, $1, 3 5747; MIPS64R6-NEXT: ori $1, $zero, 65535 5748; MIPS64R6-NEXT: sllv $5, $1, $3 5749; MIPS64R6-NEXT: nor $6, $zero, $5 5750; MIPS64R6-NEXT: sllv $4, $4, $3 5751; MIPS64R6-NEXT: .LBB14_1: # %entry 5752; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 5753; MIPS64R6-NEXT: ll $7, 0($2) 5754; MIPS64R6-NEXT: addu $8, $7, $4 5755; MIPS64R6-NEXT: and $8, $8, $5 5756; MIPS64R6-NEXT: and $9, $7, $6 5757; MIPS64R6-NEXT: or $9, $9, $8 5758; MIPS64R6-NEXT: sc $9, 0($2) 5759; MIPS64R6-NEXT: beqzc $9, .LBB14_1 5760; MIPS64R6-NEXT: # %bb.2: # %entry 5761; MIPS64R6-NEXT: and $1, $7, $5 5762; MIPS64R6-NEXT: srlv $1, $1, $3 5763; MIPS64R6-NEXT: seh $1, $1 5764; MIPS64R6-NEXT: # %bb.3: # %entry 5765; MIPS64R6-NEXT: jr $ra 5766; MIPS64R6-NEXT: seh $2, $1 5767; 5768; MIPS64R6O0-LABEL: AtomicLoadAdd16: 5769; MIPS64R6O0: # %bb.0: # %entry 5770; MIPS64R6O0-NEXT: daddiu $sp, $sp, -16 5771; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd16))) 5772; MIPS64R6O0-NEXT: daddu $1, $1, $25 5773; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd16))) 5774; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 5775; MIPS64R6O0-NEXT: ld $1, %got_disp(z)($1) 5776; MIPS64R6O0-NEXT: daddiu $2, $zero, -4 5777; MIPS64R6O0-NEXT: and $2, $1, $2 5778; MIPS64R6O0-NEXT: andi $1, $1, 3 5779; MIPS64R6O0-NEXT: xori $1, $1, 2 5780; MIPS64R6O0-NEXT: sll $1, $1, 3 5781; MIPS64R6O0-NEXT: ori $3, $zero, 65535 5782; MIPS64R6O0-NEXT: sllv $3, $3, $1 5783; MIPS64R6O0-NEXT: nor $5, $zero, $3 5784; MIPS64R6O0-NEXT: sllv $4, $4, $1 5785; MIPS64R6O0-NEXT: .LBB14_1: # %entry 5786; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 5787; MIPS64R6O0-NEXT: ll $7, 0($2) 5788; MIPS64R6O0-NEXT: addu $8, $7, $4 5789; MIPS64R6O0-NEXT: and $8, $8, $3 5790; MIPS64R6O0-NEXT: and $9, $7, $5 5791; MIPS64R6O0-NEXT: or $9, $9, $8 5792; MIPS64R6O0-NEXT: sc $9, 0($2) 5793; MIPS64R6O0-NEXT: beqzc $9, .LBB14_1 5794; MIPS64R6O0-NEXT: # %bb.2: # %entry 5795; MIPS64R6O0-NEXT: and $6, $7, $3 5796; MIPS64R6O0-NEXT: srlv $6, $6, $1 5797; MIPS64R6O0-NEXT: seh $6, $6 5798; MIPS64R6O0-NEXT: # %bb.3: # %entry 5799; MIPS64R6O0-NEXT: sw $6, 12($sp) # 4-byte Folded Spill 5800; MIPS64R6O0-NEXT: # %bb.4: # %entry 5801; MIPS64R6O0-NEXT: lw $1, 12($sp) # 4-byte Folded Reload 5802; MIPS64R6O0-NEXT: seh $2, $1 5803; MIPS64R6O0-NEXT: daddiu $sp, $sp, 16 5804; MIPS64R6O0-NEXT: jrc $ra 5805; 5806; MM32-LABEL: AtomicLoadAdd16: 5807; MM32: # %bb.0: # %entry 5808; MM32-NEXT: lui $2, %hi(_gp_disp) 5809; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 5810; MM32-NEXT: addu $2, $2, $25 5811; MM32-NEXT: lw $1, %got(z)($2) 5812; MM32-NEXT: addiu $2, $zero, -4 5813; MM32-NEXT: and $2, $1, $2 5814; MM32-NEXT: andi $1, $1, 3 5815; MM32-NEXT: sll $3, $1, 3 5816; MM32-NEXT: ori $1, $zero, 65535 5817; MM32-NEXT: sllv $5, $1, $3 5818; MM32-NEXT: nor $6, $zero, $5 5819; MM32-NEXT: sllv $4, $4, $3 5820; MM32-NEXT: $BB14_1: # %entry 5821; MM32-NEXT: # =>This Inner Loop Header: Depth=1 5822; MM32-NEXT: ll $7, 0($2) 5823; MM32-NEXT: addu $8, $7, $4 5824; MM32-NEXT: and $8, $8, $5 5825; MM32-NEXT: and $9, $7, $6 5826; MM32-NEXT: or $9, $9, $8 5827; MM32-NEXT: sc $9, 0($2) 5828; MM32-NEXT: beqzc $9, $BB14_1 5829; MM32-NEXT: # %bb.2: # %entry 5830; MM32-NEXT: and $1, $7, $5 5831; MM32-NEXT: srlv $1, $1, $3 5832; MM32-NEXT: seh $1, $1 5833; MM32-NEXT: # %bb.3: # %entry 5834; MM32-NEXT: jr $ra 5835; MM32-NEXT: seh $2, $1 5836; 5837; O1-LABEL: AtomicLoadAdd16: 5838; O1: # %bb.0: # %entry 5839; O1-NEXT: lui $2, %hi(_gp_disp) 5840; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 5841; O1-NEXT: addu $1, $2, $25 5842; O1-NEXT: lw $1, %got(z)($1) 5843; O1-NEXT: addiu $2, $zero, -4 5844; O1-NEXT: and $2, $1, $2 5845; O1-NEXT: andi $1, $1, 3 5846; O1-NEXT: sll $3, $1, 3 5847; O1-NEXT: ori $1, $zero, 65535 5848; O1-NEXT: sllv $5, $1, $3 5849; O1-NEXT: nor $6, $zero, $5 5850; O1-NEXT: sllv $4, $4, $3 5851; O1-NEXT: $BB14_1: # %entry 5852; O1-NEXT: # =>This Inner Loop Header: Depth=1 5853; O1-NEXT: ll $7, 0($2) 5854; O1-NEXT: addu $8, $7, $4 5855; O1-NEXT: and $8, $8, $5 5856; O1-NEXT: and $9, $7, $6 5857; O1-NEXT: or $9, $9, $8 5858; O1-NEXT: sc $9, 0($2) 5859; O1-NEXT: beqz $9, $BB14_1 5860; O1-NEXT: nop 5861; O1-NEXT: # %bb.2: # %entry 5862; O1-NEXT: and $1, $7, $5 5863; O1-NEXT: srlv $1, $1, $3 5864; O1-NEXT: sll $1, $1, 16 5865; O1-NEXT: sra $1, $1, 16 5866; O1-NEXT: # %bb.3: # %entry 5867; O1-NEXT: sll $1, $1, 16 5868; O1-NEXT: jr $ra 5869; O1-NEXT: sra $2, $1, 16 5870; 5871; O2-LABEL: AtomicLoadAdd16: 5872; O2: # %bb.0: # %entry 5873; O2-NEXT: lui $2, %hi(_gp_disp) 5874; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 5875; O2-NEXT: addu $1, $2, $25 5876; O2-NEXT: lw $1, %got(z)($1) 5877; O2-NEXT: addiu $2, $zero, -4 5878; O2-NEXT: and $2, $1, $2 5879; O2-NEXT: andi $1, $1, 3 5880; O2-NEXT: sll $3, $1, 3 5881; O2-NEXT: ori $1, $zero, 65535 5882; O2-NEXT: sllv $5, $1, $3 5883; O2-NEXT: nor $6, $zero, $5 5884; O2-NEXT: sllv $4, $4, $3 5885; O2-NEXT: $BB14_1: # %entry 5886; O2-NEXT: # =>This Inner Loop Header: Depth=1 5887; O2-NEXT: ll $7, 0($2) 5888; O2-NEXT: addu $8, $7, $4 5889; O2-NEXT: and $8, $8, $5 5890; O2-NEXT: and $9, $7, $6 5891; O2-NEXT: or $9, $9, $8 5892; O2-NEXT: sc $9, 0($2) 5893; O2-NEXT: beqz $9, $BB14_1 5894; O2-NEXT: nop 5895; O2-NEXT: # %bb.2: # %entry 5896; O2-NEXT: and $1, $7, $5 5897; O2-NEXT: srlv $1, $1, $3 5898; O2-NEXT: sll $1, $1, 16 5899; O2-NEXT: sra $1, $1, 16 5900; O2-NEXT: # %bb.3: # %entry 5901; O2-NEXT: sll $1, $1, 16 5902; O2-NEXT: jr $ra 5903; O2-NEXT: sra $2, $1, 16 5904; 5905; O3-LABEL: AtomicLoadAdd16: 5906; O3: # %bb.0: # %entry 5907; O3-NEXT: lui $2, %hi(_gp_disp) 5908; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 5909; O3-NEXT: addu $1, $2, $25 5910; O3-NEXT: addiu $2, $zero, -4 5911; O3-NEXT: lw $1, %got(z)($1) 5912; O3-NEXT: and $2, $1, $2 5913; O3-NEXT: andi $1, $1, 3 5914; O3-NEXT: sll $3, $1, 3 5915; O3-NEXT: ori $1, $zero, 65535 5916; O3-NEXT: sllv $5, $1, $3 5917; O3-NEXT: sllv $4, $4, $3 5918; O3-NEXT: nor $6, $zero, $5 5919; O3-NEXT: $BB14_1: # %entry 5920; O3-NEXT: # =>This Inner Loop Header: Depth=1 5921; O3-NEXT: ll $7, 0($2) 5922; O3-NEXT: addu $8, $7, $4 5923; O3-NEXT: and $8, $8, $5 5924; O3-NEXT: and $9, $7, $6 5925; O3-NEXT: or $9, $9, $8 5926; O3-NEXT: sc $9, 0($2) 5927; O3-NEXT: beqz $9, $BB14_1 5928; O3-NEXT: nop 5929; O3-NEXT: # %bb.2: # %entry 5930; O3-NEXT: and $1, $7, $5 5931; O3-NEXT: srlv $1, $1, $3 5932; O3-NEXT: sll $1, $1, 16 5933; O3-NEXT: sra $1, $1, 16 5934; O3-NEXT: # %bb.3: # %entry 5935; O3-NEXT: sll $1, $1, 16 5936; O3-NEXT: jr $ra 5937; O3-NEXT: sra $2, $1, 16 5938; 5939; MIPS32EB-LABEL: AtomicLoadAdd16: 5940; MIPS32EB: # %bb.0: # %entry 5941; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 5942; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 5943; MIPS32EB-NEXT: addu $1, $2, $25 5944; MIPS32EB-NEXT: lw $1, %got(z)($1) 5945; MIPS32EB-NEXT: addiu $2, $zero, -4 5946; MIPS32EB-NEXT: and $2, $1, $2 5947; MIPS32EB-NEXT: andi $1, $1, 3 5948; MIPS32EB-NEXT: xori $1, $1, 2 5949; MIPS32EB-NEXT: sll $3, $1, 3 5950; MIPS32EB-NEXT: ori $1, $zero, 65535 5951; MIPS32EB-NEXT: sllv $5, $1, $3 5952; MIPS32EB-NEXT: nor $6, $zero, $5 5953; MIPS32EB-NEXT: sllv $4, $4, $3 5954; MIPS32EB-NEXT: $BB14_1: # %entry 5955; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 5956; MIPS32EB-NEXT: ll $7, 0($2) 5957; MIPS32EB-NEXT: addu $8, $7, $4 5958; MIPS32EB-NEXT: and $8, $8, $5 5959; MIPS32EB-NEXT: and $9, $7, $6 5960; MIPS32EB-NEXT: or $9, $9, $8 5961; MIPS32EB-NEXT: sc $9, 0($2) 5962; MIPS32EB-NEXT: beqz $9, $BB14_1 5963; MIPS32EB-NEXT: nop 5964; MIPS32EB-NEXT: # %bb.2: # %entry 5965; MIPS32EB-NEXT: and $1, $7, $5 5966; MIPS32EB-NEXT: srlv $1, $1, $3 5967; MIPS32EB-NEXT: sll $1, $1, 16 5968; MIPS32EB-NEXT: sra $1, $1, 16 5969; MIPS32EB-NEXT: # %bb.3: # %entry 5970; MIPS32EB-NEXT: sll $1, $1, 16 5971; MIPS32EB-NEXT: jr $ra 5972; MIPS32EB-NEXT: sra $2, $1, 16 5973entry: 5974 %0 = atomicrmw add i16* @z, i16 %incr monotonic 5975 ret i16 %0 5976 5977} 5978 5979; Test that the i16 return value from cmpxchg is recognised as signed, 5980; so that setCC doesn't end up comparing an unsigned value to a signed 5981; value. 5982; The rest of the functions here are testing the atomic expansion, so 5983; we just match the end of the function. 5984define {i16, i1} @foo(i16* %addr, i16 %l, i16 %r, i16 %new) { 5985; MIPS32-LABEL: foo: 5986; MIPS32: # %bb.0: 5987; MIPS32-NEXT: addu $1, $5, $6 5988; MIPS32-NEXT: sync 5989; MIPS32-NEXT: addiu $2, $zero, -4 5990; MIPS32-NEXT: and $3, $4, $2 5991; MIPS32-NEXT: andi $2, $4, 3 5992; MIPS32-NEXT: sll $4, $2, 3 5993; MIPS32-NEXT: ori $2, $zero, 65535 5994; MIPS32-NEXT: sllv $5, $2, $4 5995; MIPS32-NEXT: nor $6, $zero, $5 5996; MIPS32-NEXT: andi $2, $1, 65535 5997; MIPS32-NEXT: sllv $8, $2, $4 5998; MIPS32-NEXT: andi $2, $7, 65535 5999; MIPS32-NEXT: sllv $7, $2, $4 6000; MIPS32-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=1 6001; MIPS32-NEXT: ll $9, 0($3) 6002; MIPS32-NEXT: and $10, $9, $5 6003; MIPS32-NEXT: bne $10, $8, $BB15_3 6004; MIPS32-NEXT: nop 6005; MIPS32-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6006; MIPS32-NEXT: and $9, $9, $6 6007; MIPS32-NEXT: or $9, $9, $7 6008; MIPS32-NEXT: sc $9, 0($3) 6009; MIPS32-NEXT: beqz $9, $BB15_1 6010; MIPS32-NEXT: nop 6011; MIPS32-NEXT: $BB15_3: 6012; MIPS32-NEXT: srlv $2, $10, $4 6013; MIPS32-NEXT: sll $2, $2, 16 6014; MIPS32-NEXT: sra $2, $2, 16 6015; MIPS32-NEXT: # %bb.4: 6016; MIPS32-NEXT: sll $1, $1, 16 6017; MIPS32-NEXT: sra $1, $1, 16 6018; MIPS32-NEXT: xor $1, $2, $1 6019; MIPS32-NEXT: sltiu $3, $1, 1 6020; MIPS32-NEXT: sync 6021; MIPS32-NEXT: jr $ra 6022; MIPS32-NEXT: nop 6023; 6024; MIPS32O0-LABEL: foo: 6025; MIPS32O0: # %bb.0: 6026; MIPS32O0-NEXT: addiu $sp, $sp, -8 6027; MIPS32O0-NEXT: .cfi_def_cfa_offset 8 6028; MIPS32O0-NEXT: addu $1, $5, $6 6029; MIPS32O0-NEXT: sync 6030; MIPS32O0-NEXT: addiu $2, $zero, -4 6031; MIPS32O0-NEXT: and $2, $4, $2 6032; MIPS32O0-NEXT: andi $3, $4, 3 6033; MIPS32O0-NEXT: sll $3, $3, 3 6034; MIPS32O0-NEXT: ori $4, $zero, 65535 6035; MIPS32O0-NEXT: sllv $4, $4, $3 6036; MIPS32O0-NEXT: nor $5, $zero, $4 6037; MIPS32O0-NEXT: andi $6, $1, 65535 6038; MIPS32O0-NEXT: sllv $6, $6, $3 6039; MIPS32O0-NEXT: andi $7, $7, 65535 6040; MIPS32O0-NEXT: sllv $7, $7, $3 6041; MIPS32O0-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=1 6042; MIPS32O0-NEXT: ll $9, 0($2) 6043; MIPS32O0-NEXT: and $10, $9, $4 6044; MIPS32O0-NEXT: bne $10, $6, $BB15_3 6045; MIPS32O0-NEXT: nop 6046; MIPS32O0-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6047; MIPS32O0-NEXT: and $9, $9, $5 6048; MIPS32O0-NEXT: or $9, $9, $7 6049; MIPS32O0-NEXT: sc $9, 0($2) 6050; MIPS32O0-NEXT: beqz $9, $BB15_1 6051; MIPS32O0-NEXT: nop 6052; MIPS32O0-NEXT: $BB15_3: 6053; MIPS32O0-NEXT: srlv $8, $10, $3 6054; MIPS32O0-NEXT: sll $8, $8, 16 6055; MIPS32O0-NEXT: sra $8, $8, 16 6056; MIPS32O0-NEXT: # %bb.4: 6057; MIPS32O0-NEXT: sw $1, 4($sp) # 4-byte Folded Spill 6058; MIPS32O0-NEXT: sw $8, 0($sp) # 4-byte Folded Spill 6059; MIPS32O0-NEXT: # %bb.5: 6060; MIPS32O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload 6061; MIPS32O0-NEXT: sll $2, $1, 16 6062; MIPS32O0-NEXT: sra $2, $2, 16 6063; MIPS32O0-NEXT: lw $3, 0($sp) # 4-byte Folded Reload 6064; MIPS32O0-NEXT: xor $2, $3, $2 6065; MIPS32O0-NEXT: sltiu $3, $2, 1 6066; MIPS32O0-NEXT: sync 6067; MIPS32O0-NEXT: lw $2, 0($sp) # 4-byte Folded Reload 6068; MIPS32O0-NEXT: addiu $sp, $sp, 8 6069; MIPS32O0-NEXT: jr $ra 6070; MIPS32O0-NEXT: nop 6071; 6072; MIPS32R2-LABEL: foo: 6073; MIPS32R2: # %bb.0: 6074; MIPS32R2-NEXT: addu $1, $5, $6 6075; MIPS32R2-NEXT: sync 6076; MIPS32R2-NEXT: addiu $2, $zero, -4 6077; MIPS32R2-NEXT: and $3, $4, $2 6078; MIPS32R2-NEXT: andi $2, $4, 3 6079; MIPS32R2-NEXT: sll $4, $2, 3 6080; MIPS32R2-NEXT: ori $2, $zero, 65535 6081; MIPS32R2-NEXT: sllv $5, $2, $4 6082; MIPS32R2-NEXT: nor $6, $zero, $5 6083; MIPS32R2-NEXT: andi $2, $1, 65535 6084; MIPS32R2-NEXT: sllv $8, $2, $4 6085; MIPS32R2-NEXT: andi $2, $7, 65535 6086; MIPS32R2-NEXT: sllv $7, $2, $4 6087; MIPS32R2-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=1 6088; MIPS32R2-NEXT: ll $9, 0($3) 6089; MIPS32R2-NEXT: and $10, $9, $5 6090; MIPS32R2-NEXT: bne $10, $8, $BB15_3 6091; MIPS32R2-NEXT: nop 6092; MIPS32R2-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6093; MIPS32R2-NEXT: and $9, $9, $6 6094; MIPS32R2-NEXT: or $9, $9, $7 6095; MIPS32R2-NEXT: sc $9, 0($3) 6096; MIPS32R2-NEXT: beqz $9, $BB15_1 6097; MIPS32R2-NEXT: nop 6098; MIPS32R2-NEXT: $BB15_3: 6099; MIPS32R2-NEXT: srlv $2, $10, $4 6100; MIPS32R2-NEXT: seh $2, $2 6101; MIPS32R2-NEXT: # %bb.4: 6102; MIPS32R2-NEXT: seh $1, $1 6103; MIPS32R2-NEXT: xor $1, $2, $1 6104; MIPS32R2-NEXT: sltiu $3, $1, 1 6105; MIPS32R2-NEXT: sync 6106; MIPS32R2-NEXT: jr $ra 6107; MIPS32R2-NEXT: nop 6108; 6109; MIPS32R6-LABEL: foo: 6110; MIPS32R6: # %bb.0: 6111; MIPS32R6-NEXT: addu $1, $5, $6 6112; MIPS32R6-NEXT: sync 6113; MIPS32R6-NEXT: addiu $2, $zero, -4 6114; MIPS32R6-NEXT: and $3, $4, $2 6115; MIPS32R6-NEXT: andi $2, $4, 3 6116; MIPS32R6-NEXT: sll $4, $2, 3 6117; MIPS32R6-NEXT: ori $2, $zero, 65535 6118; MIPS32R6-NEXT: sllv $5, $2, $4 6119; MIPS32R6-NEXT: nor $6, $zero, $5 6120; MIPS32R6-NEXT: andi $2, $1, 65535 6121; MIPS32R6-NEXT: sllv $8, $2, $4 6122; MIPS32R6-NEXT: andi $2, $7, 65535 6123; MIPS32R6-NEXT: sllv $7, $2, $4 6124; MIPS32R6-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=1 6125; MIPS32R6-NEXT: ll $9, 0($3) 6126; MIPS32R6-NEXT: and $10, $9, $5 6127; MIPS32R6-NEXT: bnec $10, $8, $BB15_3 6128; MIPS32R6-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6129; MIPS32R6-NEXT: and $9, $9, $6 6130; MIPS32R6-NEXT: or $9, $9, $7 6131; MIPS32R6-NEXT: sc $9, 0($3) 6132; MIPS32R6-NEXT: beqzc $9, $BB15_1 6133; MIPS32R6-NEXT: $BB15_3: 6134; MIPS32R6-NEXT: srlv $2, $10, $4 6135; MIPS32R6-NEXT: seh $2, $2 6136; MIPS32R6-NEXT: # %bb.4: 6137; MIPS32R6-NEXT: seh $1, $1 6138; MIPS32R6-NEXT: xor $1, $2, $1 6139; MIPS32R6-NEXT: sltiu $3, $1, 1 6140; MIPS32R6-NEXT: sync 6141; MIPS32R6-NEXT: jrc $ra 6142; 6143; MIPS32R6O0-LABEL: foo: 6144; MIPS32R6O0: # %bb.0: 6145; MIPS32R6O0-NEXT: addiu $sp, $sp, -8 6146; MIPS32R6O0-NEXT: .cfi_def_cfa_offset 8 6147; MIPS32R6O0-NEXT: move $1, $7 6148; MIPS32R6O0-NEXT: move $2, $6 6149; MIPS32R6O0-NEXT: move $3, $5 6150; MIPS32R6O0-NEXT: addu $5, $5, $6 6151; MIPS32R6O0-NEXT: sync 6152; MIPS32R6O0-NEXT: addiu $6, $zero, -4 6153; MIPS32R6O0-NEXT: and $6, $4, $6 6154; MIPS32R6O0-NEXT: andi $4, $4, 3 6155; MIPS32R6O0-NEXT: sll $4, $4, 3 6156; MIPS32R6O0-NEXT: ori $8, $zero, 65535 6157; MIPS32R6O0-NEXT: sllv $8, $8, $4 6158; MIPS32R6O0-NEXT: nor $9, $zero, $8 6159; MIPS32R6O0-NEXT: andi $10, $5, 65535 6160; MIPS32R6O0-NEXT: sllv $10, $10, $4 6161; MIPS32R6O0-NEXT: andi $7, $7, 65535 6162; MIPS32R6O0-NEXT: sllv $7, $7, $4 6163; MIPS32R6O0-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=1 6164; MIPS32R6O0-NEXT: ll $12, 0($6) 6165; MIPS32R6O0-NEXT: and $13, $12, $8 6166; MIPS32R6O0-NEXT: bnec $13, $10, $BB15_3 6167; MIPS32R6O0-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6168; MIPS32R6O0-NEXT: and $12, $12, $9 6169; MIPS32R6O0-NEXT: or $12, $12, $7 6170; MIPS32R6O0-NEXT: sc $12, 0($6) 6171; MIPS32R6O0-NEXT: beqzc $12, $BB15_1 6172; MIPS32R6O0-NEXT: $BB15_3: 6173; MIPS32R6O0-NEXT: srlv $11, $13, $4 6174; MIPS32R6O0-NEXT: seh $11, $11 6175; MIPS32R6O0-NEXT: # %bb.4: 6176; MIPS32R6O0-NEXT: sw $5, 4($sp) # 4-byte Folded Spill 6177; MIPS32R6O0-NEXT: sw $11, 0($sp) # 4-byte Folded Spill 6178; MIPS32R6O0-NEXT: # %bb.5: 6179; MIPS32R6O0-NEXT: lw $1, 4($sp) # 4-byte Folded Reload 6180; MIPS32R6O0-NEXT: seh $2, $1 6181; MIPS32R6O0-NEXT: lw $3, 0($sp) # 4-byte Folded Reload 6182; MIPS32R6O0-NEXT: xor $2, $3, $2 6183; MIPS32R6O0-NEXT: sltiu $3, $2, 1 6184; MIPS32R6O0-NEXT: sync 6185; MIPS32R6O0-NEXT: lw $2, 0($sp) # 4-byte Folded Reload 6186; MIPS32R6O0-NEXT: addiu $sp, $sp, 8 6187; MIPS32R6O0-NEXT: jrc $ra 6188; 6189; MIPS4-LABEL: foo: 6190; MIPS4: # %bb.0: 6191; MIPS4-NEXT: sll $1, $6, 0 6192; MIPS4-NEXT: sll $2, $5, 0 6193; MIPS4-NEXT: addu $1, $2, $1 6194; MIPS4-NEXT: sync 6195; MIPS4-NEXT: sll $2, $7, 0 6196; MIPS4-NEXT: daddiu $3, $zero, -4 6197; MIPS4-NEXT: and $3, $4, $3 6198; MIPS4-NEXT: andi $4, $4, 3 6199; MIPS4-NEXT: sll $4, $4, 3 6200; MIPS4-NEXT: ori $5, $zero, 65535 6201; MIPS4-NEXT: sllv $5, $5, $4 6202; MIPS4-NEXT: nor $6, $zero, $5 6203; MIPS4-NEXT: andi $7, $1, 65535 6204; MIPS4-NEXT: sllv $7, $7, $4 6205; MIPS4-NEXT: andi $2, $2, 65535 6206; MIPS4-NEXT: sllv $8, $2, $4 6207; MIPS4-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=1 6208; MIPS4-NEXT: ll $9, 0($3) 6209; MIPS4-NEXT: and $10, $9, $5 6210; MIPS4-NEXT: bne $10, $7, .LBB15_3 6211; MIPS4-NEXT: nop 6212; MIPS4-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6213; MIPS4-NEXT: and $9, $9, $6 6214; MIPS4-NEXT: or $9, $9, $8 6215; MIPS4-NEXT: sc $9, 0($3) 6216; MIPS4-NEXT: beqz $9, .LBB15_1 6217; MIPS4-NEXT: nop 6218; MIPS4-NEXT: .LBB15_3: 6219; MIPS4-NEXT: srlv $2, $10, $4 6220; MIPS4-NEXT: sll $2, $2, 16 6221; MIPS4-NEXT: sra $2, $2, 16 6222; MIPS4-NEXT: # %bb.4: 6223; MIPS4-NEXT: sll $1, $1, 16 6224; MIPS4-NEXT: sra $1, $1, 16 6225; MIPS4-NEXT: xor $1, $2, $1 6226; MIPS4-NEXT: sltiu $3, $1, 1 6227; MIPS4-NEXT: sync 6228; MIPS4-NEXT: jr $ra 6229; MIPS4-NEXT: nop 6230; 6231; MIPS64-LABEL: foo: 6232; MIPS64: # %bb.0: 6233; MIPS64-NEXT: sll $1, $6, 0 6234; MIPS64-NEXT: sll $2, $5, 0 6235; MIPS64-NEXT: addu $1, $2, $1 6236; MIPS64-NEXT: sync 6237; MIPS64-NEXT: sll $2, $7, 0 6238; MIPS64-NEXT: daddiu $3, $zero, -4 6239; MIPS64-NEXT: and $3, $4, $3 6240; MIPS64-NEXT: andi $4, $4, 3 6241; MIPS64-NEXT: sll $4, $4, 3 6242; MIPS64-NEXT: ori $5, $zero, 65535 6243; MIPS64-NEXT: sllv $5, $5, $4 6244; MIPS64-NEXT: nor $6, $zero, $5 6245; MIPS64-NEXT: andi $7, $1, 65535 6246; MIPS64-NEXT: sllv $7, $7, $4 6247; MIPS64-NEXT: andi $2, $2, 65535 6248; MIPS64-NEXT: sllv $8, $2, $4 6249; MIPS64-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=1 6250; MIPS64-NEXT: ll $9, 0($3) 6251; MIPS64-NEXT: and $10, $9, $5 6252; MIPS64-NEXT: bne $10, $7, .LBB15_3 6253; MIPS64-NEXT: nop 6254; MIPS64-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6255; MIPS64-NEXT: and $9, $9, $6 6256; MIPS64-NEXT: or $9, $9, $8 6257; MIPS64-NEXT: sc $9, 0($3) 6258; MIPS64-NEXT: beqz $9, .LBB15_1 6259; MIPS64-NEXT: nop 6260; MIPS64-NEXT: .LBB15_3: 6261; MIPS64-NEXT: srlv $2, $10, $4 6262; MIPS64-NEXT: sll $2, $2, 16 6263; MIPS64-NEXT: sra $2, $2, 16 6264; MIPS64-NEXT: # %bb.4: 6265; MIPS64-NEXT: sll $1, $1, 16 6266; MIPS64-NEXT: sra $1, $1, 16 6267; MIPS64-NEXT: xor $1, $2, $1 6268; MIPS64-NEXT: sltiu $3, $1, 1 6269; MIPS64-NEXT: sync 6270; MIPS64-NEXT: jr $ra 6271; MIPS64-NEXT: nop 6272; 6273; MIPS64R2-LABEL: foo: 6274; MIPS64R2: # %bb.0: 6275; MIPS64R2-NEXT: sll $1, $6, 0 6276; MIPS64R2-NEXT: sll $2, $5, 0 6277; MIPS64R2-NEXT: addu $1, $2, $1 6278; MIPS64R2-NEXT: sync 6279; MIPS64R2-NEXT: sll $2, $7, 0 6280; MIPS64R2-NEXT: daddiu $3, $zero, -4 6281; MIPS64R2-NEXT: and $3, $4, $3 6282; MIPS64R2-NEXT: andi $4, $4, 3 6283; MIPS64R2-NEXT: sll $4, $4, 3 6284; MIPS64R2-NEXT: ori $5, $zero, 65535 6285; MIPS64R2-NEXT: sllv $5, $5, $4 6286; MIPS64R2-NEXT: nor $6, $zero, $5 6287; MIPS64R2-NEXT: andi $7, $1, 65535 6288; MIPS64R2-NEXT: sllv $7, $7, $4 6289; MIPS64R2-NEXT: andi $2, $2, 65535 6290; MIPS64R2-NEXT: sllv $8, $2, $4 6291; MIPS64R2-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=1 6292; MIPS64R2-NEXT: ll $9, 0($3) 6293; MIPS64R2-NEXT: and $10, $9, $5 6294; MIPS64R2-NEXT: bne $10, $7, .LBB15_3 6295; MIPS64R2-NEXT: nop 6296; MIPS64R2-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6297; MIPS64R2-NEXT: and $9, $9, $6 6298; MIPS64R2-NEXT: or $9, $9, $8 6299; MIPS64R2-NEXT: sc $9, 0($3) 6300; MIPS64R2-NEXT: beqz $9, .LBB15_1 6301; MIPS64R2-NEXT: nop 6302; MIPS64R2-NEXT: .LBB15_3: 6303; MIPS64R2-NEXT: srlv $2, $10, $4 6304; MIPS64R2-NEXT: seh $2, $2 6305; MIPS64R2-NEXT: # %bb.4: 6306; MIPS64R2-NEXT: seh $1, $1 6307; MIPS64R2-NEXT: xor $1, $2, $1 6308; MIPS64R2-NEXT: sltiu $3, $1, 1 6309; MIPS64R2-NEXT: sync 6310; MIPS64R2-NEXT: jr $ra 6311; MIPS64R2-NEXT: nop 6312; 6313; MIPS64R6-LABEL: foo: 6314; MIPS64R6: # %bb.0: 6315; MIPS64R6-NEXT: sll $1, $6, 0 6316; MIPS64R6-NEXT: sll $2, $5, 0 6317; MIPS64R6-NEXT: addu $1, $2, $1 6318; MIPS64R6-NEXT: sync 6319; MIPS64R6-NEXT: sll $2, $7, 0 6320; MIPS64R6-NEXT: daddiu $3, $zero, -4 6321; MIPS64R6-NEXT: and $3, $4, $3 6322; MIPS64R6-NEXT: andi $4, $4, 3 6323; MIPS64R6-NEXT: sll $4, $4, 3 6324; MIPS64R6-NEXT: ori $5, $zero, 65535 6325; MIPS64R6-NEXT: sllv $5, $5, $4 6326; MIPS64R6-NEXT: nor $6, $zero, $5 6327; MIPS64R6-NEXT: andi $7, $1, 65535 6328; MIPS64R6-NEXT: sllv $7, $7, $4 6329; MIPS64R6-NEXT: andi $2, $2, 65535 6330; MIPS64R6-NEXT: sllv $8, $2, $4 6331; MIPS64R6-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=1 6332; MIPS64R6-NEXT: ll $9, 0($3) 6333; MIPS64R6-NEXT: and $10, $9, $5 6334; MIPS64R6-NEXT: bnec $10, $7, .LBB15_3 6335; MIPS64R6-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6336; MIPS64R6-NEXT: and $9, $9, $6 6337; MIPS64R6-NEXT: or $9, $9, $8 6338; MIPS64R6-NEXT: sc $9, 0($3) 6339; MIPS64R6-NEXT: beqzc $9, .LBB15_1 6340; MIPS64R6-NEXT: .LBB15_3: 6341; MIPS64R6-NEXT: srlv $2, $10, $4 6342; MIPS64R6-NEXT: seh $2, $2 6343; MIPS64R6-NEXT: # %bb.4: 6344; MIPS64R6-NEXT: seh $1, $1 6345; MIPS64R6-NEXT: xor $1, $2, $1 6346; MIPS64R6-NEXT: sltiu $3, $1, 1 6347; MIPS64R6-NEXT: sync 6348; MIPS64R6-NEXT: jrc $ra 6349; 6350; MIPS64R6O0-LABEL: foo: 6351; MIPS64R6O0: # %bb.0: 6352; MIPS64R6O0-NEXT: daddiu $sp, $sp, -16 6353; MIPS64R6O0-NEXT: .cfi_def_cfa_offset 16 6354; MIPS64R6O0-NEXT: # kill: def $a3 killed $a3 killed $a3_64 6355; MIPS64R6O0-NEXT: sll $1, $7, 0 6356; MIPS64R6O0-NEXT: # kill: def $a2 killed $a2 killed $a2_64 6357; MIPS64R6O0-NEXT: sll $2, $6, 0 6358; MIPS64R6O0-NEXT: # kill: def $a1 killed $a1 killed $a1_64 6359; MIPS64R6O0-NEXT: sll $3, $5, 0 6360; MIPS64R6O0-NEXT: addu $2, $3, $2 6361; MIPS64R6O0-NEXT: sync 6362; MIPS64R6O0-NEXT: daddiu $3, $zero, -4 6363; MIPS64R6O0-NEXT: and $3, $4, $3 6364; MIPS64R6O0-NEXT: andi $4, $4, 3 6365; MIPS64R6O0-NEXT: xori $4, $4, 2 6366; MIPS64R6O0-NEXT: sll $4, $4, 3 6367; MIPS64R6O0-NEXT: ori $5, $zero, 65535 6368; MIPS64R6O0-NEXT: sllv $5, $5, $4 6369; MIPS64R6O0-NEXT: nor $6, $zero, $5 6370; MIPS64R6O0-NEXT: andi $7, $2, 65535 6371; MIPS64R6O0-NEXT: sllv $7, $7, $4 6372; MIPS64R6O0-NEXT: andi $1, $1, 65535 6373; MIPS64R6O0-NEXT: sllv $1, $1, $4 6374; MIPS64R6O0-NEXT: .LBB15_1: # =>This Inner Loop Header: Depth=1 6375; MIPS64R6O0-NEXT: ll $9, 0($3) 6376; MIPS64R6O0-NEXT: and $10, $9, $5 6377; MIPS64R6O0-NEXT: bnec $10, $7, .LBB15_3 6378; MIPS64R6O0-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6379; MIPS64R6O0-NEXT: and $9, $9, $6 6380; MIPS64R6O0-NEXT: or $9, $9, $1 6381; MIPS64R6O0-NEXT: sc $9, 0($3) 6382; MIPS64R6O0-NEXT: beqzc $9, .LBB15_1 6383; MIPS64R6O0-NEXT: .LBB15_3: 6384; MIPS64R6O0-NEXT: srlv $8, $10, $4 6385; MIPS64R6O0-NEXT: seh $8, $8 6386; MIPS64R6O0-NEXT: # %bb.4: 6387; MIPS64R6O0-NEXT: sw $2, 12($sp) # 4-byte Folded Spill 6388; MIPS64R6O0-NEXT: sw $8, 8($sp) # 4-byte Folded Spill 6389; MIPS64R6O0-NEXT: # %bb.5: 6390; MIPS64R6O0-NEXT: lw $1, 12($sp) # 4-byte Folded Reload 6391; MIPS64R6O0-NEXT: seh $2, $1 6392; MIPS64R6O0-NEXT: lw $3, 8($sp) # 4-byte Folded Reload 6393; MIPS64R6O0-NEXT: xor $2, $3, $2 6394; MIPS64R6O0-NEXT: sltiu $3, $2, 1 6395; MIPS64R6O0-NEXT: sync 6396; MIPS64R6O0-NEXT: lw $2, 8($sp) # 4-byte Folded Reload 6397; MIPS64R6O0-NEXT: daddiu $sp, $sp, 16 6398; MIPS64R6O0-NEXT: jrc $ra 6399; 6400; MM32-LABEL: foo: 6401; MM32: # %bb.0: 6402; MM32-NEXT: addu16 $3, $5, $6 6403; MM32-NEXT: sync 6404; MM32-NEXT: addiu $1, $zero, -4 6405; MM32-NEXT: and $1, $4, $1 6406; MM32-NEXT: andi $2, $4, 3 6407; MM32-NEXT: sll $4, $2, 3 6408; MM32-NEXT: ori $2, $zero, 65535 6409; MM32-NEXT: sllv $5, $2, $4 6410; MM32-NEXT: nor $6, $zero, $5 6411; MM32-NEXT: andi $2, $3, 65535 6412; MM32-NEXT: sllv $8, $2, $4 6413; MM32-NEXT: andi $2, $7, 65535 6414; MM32-NEXT: sllv $7, $2, $4 6415; MM32-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=1 6416; MM32-NEXT: ll $9, 0($1) 6417; MM32-NEXT: and $10, $9, $5 6418; MM32-NEXT: bne $10, $8, $BB15_3 6419; MM32-NEXT: nop 6420; MM32-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6421; MM32-NEXT: and $9, $9, $6 6422; MM32-NEXT: or $9, $9, $7 6423; MM32-NEXT: sc $9, 0($1) 6424; MM32-NEXT: beqzc $9, $BB15_1 6425; MM32-NEXT: $BB15_3: 6426; MM32-NEXT: srlv $2, $10, $4 6427; MM32-NEXT: seh $2, $2 6428; MM32-NEXT: # %bb.4: 6429; MM32-NEXT: seh $1, $3 6430; MM32-NEXT: xor $1, $2, $1 6431; MM32-NEXT: sltiu $3, $1, 1 6432; MM32-NEXT: sync 6433; MM32-NEXT: jrc $ra 6434; 6435; O1-LABEL: foo: 6436; O1: # %bb.0: 6437; O1-NEXT: addu $1, $5, $6 6438; O1-NEXT: sync 6439; O1-NEXT: addiu $2, $zero, -4 6440; O1-NEXT: and $3, $4, $2 6441; O1-NEXT: andi $2, $4, 3 6442; O1-NEXT: sll $4, $2, 3 6443; O1-NEXT: ori $2, $zero, 65535 6444; O1-NEXT: sllv $5, $2, $4 6445; O1-NEXT: nor $6, $zero, $5 6446; O1-NEXT: andi $2, $1, 65535 6447; O1-NEXT: sllv $8, $2, $4 6448; O1-NEXT: andi $2, $7, 65535 6449; O1-NEXT: sllv $7, $2, $4 6450; O1-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=1 6451; O1-NEXT: ll $9, 0($3) 6452; O1-NEXT: and $10, $9, $5 6453; O1-NEXT: bne $10, $8, $BB15_3 6454; O1-NEXT: nop 6455; O1-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6456; O1-NEXT: and $9, $9, $6 6457; O1-NEXT: or $9, $9, $7 6458; O1-NEXT: sc $9, 0($3) 6459; O1-NEXT: beqz $9, $BB15_1 6460; O1-NEXT: nop 6461; O1-NEXT: $BB15_3: 6462; O1-NEXT: srlv $2, $10, $4 6463; O1-NEXT: sll $2, $2, 16 6464; O1-NEXT: sra $2, $2, 16 6465; O1-NEXT: # %bb.4: 6466; O1-NEXT: sll $1, $1, 16 6467; O1-NEXT: sra $1, $1, 16 6468; O1-NEXT: xor $1, $2, $1 6469; O1-NEXT: sltiu $3, $1, 1 6470; O1-NEXT: sync 6471; O1-NEXT: jr $ra 6472; O1-NEXT: nop 6473; 6474; O2-LABEL: foo: 6475; O2: # %bb.0: 6476; O2-NEXT: addu $1, $5, $6 6477; O2-NEXT: sync 6478; O2-NEXT: addiu $2, $zero, -4 6479; O2-NEXT: and $3, $4, $2 6480; O2-NEXT: andi $2, $4, 3 6481; O2-NEXT: sll $4, $2, 3 6482; O2-NEXT: ori $2, $zero, 65535 6483; O2-NEXT: sllv $5, $2, $4 6484; O2-NEXT: nor $6, $zero, $5 6485; O2-NEXT: andi $2, $1, 65535 6486; O2-NEXT: sllv $8, $2, $4 6487; O2-NEXT: andi $2, $7, 65535 6488; O2-NEXT: sllv $7, $2, $4 6489; O2-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=1 6490; O2-NEXT: ll $9, 0($3) 6491; O2-NEXT: and $10, $9, $5 6492; O2-NEXT: bne $10, $8, $BB15_3 6493; O2-NEXT: nop 6494; O2-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6495; O2-NEXT: and $9, $9, $6 6496; O2-NEXT: or $9, $9, $7 6497; O2-NEXT: sc $9, 0($3) 6498; O2-NEXT: beqz $9, $BB15_1 6499; O2-NEXT: nop 6500; O2-NEXT: $BB15_3: 6501; O2-NEXT: srlv $2, $10, $4 6502; O2-NEXT: sll $2, $2, 16 6503; O2-NEXT: sra $2, $2, 16 6504; O2-NEXT: # %bb.4: 6505; O2-NEXT: sll $1, $1, 16 6506; O2-NEXT: sra $1, $1, 16 6507; O2-NEXT: xor $1, $2, $1 6508; O2-NEXT: sltiu $3, $1, 1 6509; O2-NEXT: sync 6510; O2-NEXT: jr $ra 6511; O2-NEXT: nop 6512; 6513; O3-LABEL: foo: 6514; O3: # %bb.0: 6515; O3-NEXT: addiu $2, $zero, -4 6516; O3-NEXT: addu $1, $5, $6 6517; O3-NEXT: sync 6518; O3-NEXT: and $3, $4, $2 6519; O3-NEXT: andi $2, $4, 3 6520; O3-NEXT: sll $4, $2, 3 6521; O3-NEXT: ori $2, $zero, 65535 6522; O3-NEXT: sllv $5, $2, $4 6523; O3-NEXT: andi $2, $1, 65535 6524; O3-NEXT: sll $1, $1, 16 6525; O3-NEXT: sllv $8, $2, $4 6526; O3-NEXT: andi $2, $7, 65535 6527; O3-NEXT: nor $6, $zero, $5 6528; O3-NEXT: sra $1, $1, 16 6529; O3-NEXT: sllv $7, $2, $4 6530; O3-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=1 6531; O3-NEXT: ll $9, 0($3) 6532; O3-NEXT: and $10, $9, $5 6533; O3-NEXT: bne $10, $8, $BB15_3 6534; O3-NEXT: nop 6535; O3-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6536; O3-NEXT: and $9, $9, $6 6537; O3-NEXT: or $9, $9, $7 6538; O3-NEXT: sc $9, 0($3) 6539; O3-NEXT: beqz $9, $BB15_1 6540; O3-NEXT: nop 6541; O3-NEXT: $BB15_3: 6542; O3-NEXT: srlv $2, $10, $4 6543; O3-NEXT: sll $2, $2, 16 6544; O3-NEXT: sra $2, $2, 16 6545; O3-NEXT: # %bb.4: 6546; O3-NEXT: sync 6547; O3-NEXT: xor $1, $2, $1 6548; O3-NEXT: jr $ra 6549; O3-NEXT: sltiu $3, $1, 1 6550; 6551; MIPS32EB-LABEL: foo: 6552; MIPS32EB: # %bb.0: 6553; MIPS32EB-NEXT: addu $1, $5, $6 6554; MIPS32EB-NEXT: sync 6555; MIPS32EB-NEXT: addiu $2, $zero, -4 6556; MIPS32EB-NEXT: and $3, $4, $2 6557; MIPS32EB-NEXT: andi $2, $4, 3 6558; MIPS32EB-NEXT: xori $2, $2, 2 6559; MIPS32EB-NEXT: sll $4, $2, 3 6560; MIPS32EB-NEXT: ori $2, $zero, 65535 6561; MIPS32EB-NEXT: sllv $5, $2, $4 6562; MIPS32EB-NEXT: nor $6, $zero, $5 6563; MIPS32EB-NEXT: andi $2, $1, 65535 6564; MIPS32EB-NEXT: sllv $8, $2, $4 6565; MIPS32EB-NEXT: andi $2, $7, 65535 6566; MIPS32EB-NEXT: sllv $7, $2, $4 6567; MIPS32EB-NEXT: $BB15_1: # =>This Inner Loop Header: Depth=1 6568; MIPS32EB-NEXT: ll $9, 0($3) 6569; MIPS32EB-NEXT: and $10, $9, $5 6570; MIPS32EB-NEXT: bne $10, $8, $BB15_3 6571; MIPS32EB-NEXT: nop 6572; MIPS32EB-NEXT: # %bb.2: # in Loop: Header=BB15_1 Depth=1 6573; MIPS32EB-NEXT: and $9, $9, $6 6574; MIPS32EB-NEXT: or $9, $9, $7 6575; MIPS32EB-NEXT: sc $9, 0($3) 6576; MIPS32EB-NEXT: beqz $9, $BB15_1 6577; MIPS32EB-NEXT: nop 6578; MIPS32EB-NEXT: $BB15_3: 6579; MIPS32EB-NEXT: srlv $2, $10, $4 6580; MIPS32EB-NEXT: sll $2, $2, 16 6581; MIPS32EB-NEXT: sra $2, $2, 16 6582; MIPS32EB-NEXT: # %bb.4: 6583; MIPS32EB-NEXT: sll $1, $1, 16 6584; MIPS32EB-NEXT: sra $1, $1, 16 6585; MIPS32EB-NEXT: xor $1, $2, $1 6586; MIPS32EB-NEXT: sltiu $3, $1, 1 6587; MIPS32EB-NEXT: sync 6588; MIPS32EB-NEXT: jr $ra 6589; MIPS32EB-NEXT: nop 6590 %desired = add i16 %l, %r 6591 %res = cmpxchg i16* %addr, i16 %desired, i16 %new seq_cst seq_cst 6592 ret {i16, i1} %res 6593} 6594 6595@countsint = common global i32 0, align 4 6596 6597define i32 @CheckSync(i32 signext %v) nounwind noinline { 6598; MIPS32-LABEL: CheckSync: 6599; MIPS32: # %bb.0: # %entry 6600; MIPS32-NEXT: lui $2, %hi(_gp_disp) 6601; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 6602; MIPS32-NEXT: addu $1, $2, $25 6603; MIPS32-NEXT: sync 6604; MIPS32-NEXT: lw $1, %got(countsint)($1) 6605; MIPS32-NEXT: $BB16_1: # %entry 6606; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 6607; MIPS32-NEXT: ll $2, 0($1) 6608; MIPS32-NEXT: addu $3, $2, $4 6609; MIPS32-NEXT: sc $3, 0($1) 6610; MIPS32-NEXT: beqz $3, $BB16_1 6611; MIPS32-NEXT: nop 6612; MIPS32-NEXT: # %bb.2: # %entry 6613; MIPS32-NEXT: sync 6614; MIPS32-NEXT: jr $ra 6615; MIPS32-NEXT: nop 6616; 6617; MIPS32O0-LABEL: CheckSync: 6618; MIPS32O0: # %bb.0: # %entry 6619; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 6620; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 6621; MIPS32O0-NEXT: addu $1, $2, $25 6622; MIPS32O0-NEXT: sync 6623; MIPS32O0-NEXT: lw $1, %got(countsint)($1) 6624; MIPS32O0-NEXT: $BB16_1: # %entry 6625; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 6626; MIPS32O0-NEXT: ll $2, 0($1) 6627; MIPS32O0-NEXT: addu $3, $2, $4 6628; MIPS32O0-NEXT: sc $3, 0($1) 6629; MIPS32O0-NEXT: beqz $3, $BB16_1 6630; MIPS32O0-NEXT: nop 6631; MIPS32O0-NEXT: # %bb.2: # %entry 6632; MIPS32O0-NEXT: sync 6633; MIPS32O0-NEXT: jr $ra 6634; MIPS32O0-NEXT: nop 6635; 6636; MIPS32R2-LABEL: CheckSync: 6637; MIPS32R2: # %bb.0: # %entry 6638; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 6639; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 6640; MIPS32R2-NEXT: addu $1, $2, $25 6641; MIPS32R2-NEXT: sync 6642; MIPS32R2-NEXT: lw $1, %got(countsint)($1) 6643; MIPS32R2-NEXT: $BB16_1: # %entry 6644; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 6645; MIPS32R2-NEXT: ll $2, 0($1) 6646; MIPS32R2-NEXT: addu $3, $2, $4 6647; MIPS32R2-NEXT: sc $3, 0($1) 6648; MIPS32R2-NEXT: beqz $3, $BB16_1 6649; MIPS32R2-NEXT: nop 6650; MIPS32R2-NEXT: # %bb.2: # %entry 6651; MIPS32R2-NEXT: sync 6652; MIPS32R2-NEXT: jr $ra 6653; MIPS32R2-NEXT: nop 6654; 6655; MIPS32R6-LABEL: CheckSync: 6656; MIPS32R6: # %bb.0: # %entry 6657; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 6658; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 6659; MIPS32R6-NEXT: addu $1, $2, $25 6660; MIPS32R6-NEXT: sync 6661; MIPS32R6-NEXT: lw $1, %got(countsint)($1) 6662; MIPS32R6-NEXT: $BB16_1: # %entry 6663; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 6664; MIPS32R6-NEXT: ll $2, 0($1) 6665; MIPS32R6-NEXT: addu $3, $2, $4 6666; MIPS32R6-NEXT: sc $3, 0($1) 6667; MIPS32R6-NEXT: beqzc $3, $BB16_1 6668; MIPS32R6-NEXT: # %bb.2: # %entry 6669; MIPS32R6-NEXT: sync 6670; MIPS32R6-NEXT: jrc $ra 6671; 6672; MIPS32R6O0-LABEL: CheckSync: 6673; MIPS32R6O0: # %bb.0: # %entry 6674; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 6675; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 6676; MIPS32R6O0-NEXT: addu $1, $2, $25 6677; MIPS32R6O0-NEXT: sync 6678; MIPS32R6O0-NEXT: lw $1, %got(countsint)($1) 6679; MIPS32R6O0-NEXT: $BB16_1: # %entry 6680; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 6681; MIPS32R6O0-NEXT: ll $2, 0($1) 6682; MIPS32R6O0-NEXT: addu $3, $2, $4 6683; MIPS32R6O0-NEXT: sc $3, 0($1) 6684; MIPS32R6O0-NEXT: beqzc $3, $BB16_1 6685; MIPS32R6O0-NEXT: # %bb.2: # %entry 6686; MIPS32R6O0-NEXT: sync 6687; MIPS32R6O0-NEXT: jrc $ra 6688; 6689; MIPS4-LABEL: CheckSync: 6690; MIPS4: # %bb.0: # %entry 6691; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(CheckSync))) 6692; MIPS4-NEXT: daddu $1, $1, $25 6693; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(CheckSync))) 6694; MIPS4-NEXT: sync 6695; MIPS4-NEXT: ld $1, %got_disp(countsint)($1) 6696; MIPS4-NEXT: .LBB16_1: # %entry 6697; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 6698; MIPS4-NEXT: ll $2, 0($1) 6699; MIPS4-NEXT: addu $3, $2, $4 6700; MIPS4-NEXT: sc $3, 0($1) 6701; MIPS4-NEXT: beqz $3, .LBB16_1 6702; MIPS4-NEXT: nop 6703; MIPS4-NEXT: # %bb.2: # %entry 6704; MIPS4-NEXT: sync 6705; MIPS4-NEXT: jr $ra 6706; MIPS4-NEXT: nop 6707; 6708; MIPS64-LABEL: CheckSync: 6709; MIPS64: # %bb.0: # %entry 6710; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(CheckSync))) 6711; MIPS64-NEXT: daddu $1, $1, $25 6712; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(CheckSync))) 6713; MIPS64-NEXT: sync 6714; MIPS64-NEXT: ld $1, %got_disp(countsint)($1) 6715; MIPS64-NEXT: .LBB16_1: # %entry 6716; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 6717; MIPS64-NEXT: ll $2, 0($1) 6718; MIPS64-NEXT: addu $3, $2, $4 6719; MIPS64-NEXT: sc $3, 0($1) 6720; MIPS64-NEXT: beqz $3, .LBB16_1 6721; MIPS64-NEXT: nop 6722; MIPS64-NEXT: # %bb.2: # %entry 6723; MIPS64-NEXT: sync 6724; MIPS64-NEXT: jr $ra 6725; MIPS64-NEXT: nop 6726; 6727; MIPS64R2-LABEL: CheckSync: 6728; MIPS64R2: # %bb.0: # %entry 6729; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(CheckSync))) 6730; MIPS64R2-NEXT: daddu $1, $1, $25 6731; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(CheckSync))) 6732; MIPS64R2-NEXT: sync 6733; MIPS64R2-NEXT: ld $1, %got_disp(countsint)($1) 6734; MIPS64R2-NEXT: .LBB16_1: # %entry 6735; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 6736; MIPS64R2-NEXT: ll $2, 0($1) 6737; MIPS64R2-NEXT: addu $3, $2, $4 6738; MIPS64R2-NEXT: sc $3, 0($1) 6739; MIPS64R2-NEXT: beqz $3, .LBB16_1 6740; MIPS64R2-NEXT: nop 6741; MIPS64R2-NEXT: # %bb.2: # %entry 6742; MIPS64R2-NEXT: sync 6743; MIPS64R2-NEXT: jr $ra 6744; MIPS64R2-NEXT: nop 6745; 6746; MIPS64R6-LABEL: CheckSync: 6747; MIPS64R6: # %bb.0: # %entry 6748; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(CheckSync))) 6749; MIPS64R6-NEXT: daddu $1, $1, $25 6750; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(CheckSync))) 6751; MIPS64R6-NEXT: sync 6752; MIPS64R6-NEXT: ld $1, %got_disp(countsint)($1) 6753; MIPS64R6-NEXT: .LBB16_1: # %entry 6754; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 6755; MIPS64R6-NEXT: ll $2, 0($1) 6756; MIPS64R6-NEXT: addu $3, $2, $4 6757; MIPS64R6-NEXT: sc $3, 0($1) 6758; MIPS64R6-NEXT: beqzc $3, .LBB16_1 6759; MIPS64R6-NEXT: # %bb.2: # %entry 6760; MIPS64R6-NEXT: sync 6761; MIPS64R6-NEXT: jrc $ra 6762; 6763; MIPS64R6O0-LABEL: CheckSync: 6764; MIPS64R6O0: # %bb.0: # %entry 6765; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(CheckSync))) 6766; MIPS64R6O0-NEXT: daddu $1, $1, $25 6767; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(CheckSync))) 6768; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 6769; MIPS64R6O0-NEXT: sync 6770; MIPS64R6O0-NEXT: ld $1, %got_disp(countsint)($1) 6771; MIPS64R6O0-NEXT: .LBB16_1: # %entry 6772; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 6773; MIPS64R6O0-NEXT: ll $2, 0($1) 6774; MIPS64R6O0-NEXT: addu $3, $2, $4 6775; MIPS64R6O0-NEXT: sc $3, 0($1) 6776; MIPS64R6O0-NEXT: beqzc $3, .LBB16_1 6777; MIPS64R6O0-NEXT: # %bb.2: # %entry 6778; MIPS64R6O0-NEXT: sync 6779; MIPS64R6O0-NEXT: jrc $ra 6780; 6781; MM32-LABEL: CheckSync: 6782; MM32: # %bb.0: # %entry 6783; MM32-NEXT: lui $2, %hi(_gp_disp) 6784; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 6785; MM32-NEXT: addu $2, $2, $25 6786; MM32-NEXT: sync 6787; MM32-NEXT: lw $1, %got(countsint)($2) 6788; MM32-NEXT: $BB16_1: # %entry 6789; MM32-NEXT: # =>This Inner Loop Header: Depth=1 6790; MM32-NEXT: ll $2, 0($1) 6791; MM32-NEXT: addu16 $3, $2, $4 6792; MM32-NEXT: sc $3, 0($1) 6793; MM32-NEXT: beqzc $3, $BB16_1 6794; MM32-NEXT: # %bb.2: # %entry 6795; MM32-NEXT: sync 6796; MM32-NEXT: jrc $ra 6797; 6798; O1-LABEL: CheckSync: 6799; O1: # %bb.0: # %entry 6800; O1-NEXT: lui $2, %hi(_gp_disp) 6801; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 6802; O1-NEXT: addu $1, $2, $25 6803; O1-NEXT: sync 6804; O1-NEXT: lw $1, %got(countsint)($1) 6805; O1-NEXT: $BB16_1: # %entry 6806; O1-NEXT: # =>This Inner Loop Header: Depth=1 6807; O1-NEXT: ll $2, 0($1) 6808; O1-NEXT: addu $3, $2, $4 6809; O1-NEXT: sc $3, 0($1) 6810; O1-NEXT: beqz $3, $BB16_1 6811; O1-NEXT: nop 6812; O1-NEXT: # %bb.2: # %entry 6813; O1-NEXT: sync 6814; O1-NEXT: jr $ra 6815; O1-NEXT: nop 6816; 6817; O2-LABEL: CheckSync: 6818; O2: # %bb.0: # %entry 6819; O2-NEXT: lui $2, %hi(_gp_disp) 6820; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 6821; O2-NEXT: addu $1, $2, $25 6822; O2-NEXT: sync 6823; O2-NEXT: lw $1, %got(countsint)($1) 6824; O2-NEXT: $BB16_1: # %entry 6825; O2-NEXT: # =>This Inner Loop Header: Depth=1 6826; O2-NEXT: ll $2, 0($1) 6827; O2-NEXT: addu $3, $2, $4 6828; O2-NEXT: sc $3, 0($1) 6829; O2-NEXT: beqz $3, $BB16_1 6830; O2-NEXT: nop 6831; O2-NEXT: # %bb.2: # %entry 6832; O2-NEXT: sync 6833; O2-NEXT: jr $ra 6834; O2-NEXT: nop 6835; 6836; O3-LABEL: CheckSync: 6837; O3: # %bb.0: # %entry 6838; O3-NEXT: lui $2, %hi(_gp_disp) 6839; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 6840; O3-NEXT: addu $1, $2, $25 6841; O3-NEXT: sync 6842; O3-NEXT: lw $1, %got(countsint)($1) 6843; O3-NEXT: $BB16_1: # %entry 6844; O3-NEXT: # =>This Inner Loop Header: Depth=1 6845; O3-NEXT: ll $2, 0($1) 6846; O3-NEXT: addu $3, $2, $4 6847; O3-NEXT: sc $3, 0($1) 6848; O3-NEXT: beqz $3, $BB16_1 6849; O3-NEXT: nop 6850; O3-NEXT: # %bb.2: # %entry 6851; O3-NEXT: sync 6852; O3-NEXT: jr $ra 6853; O3-NEXT: nop 6854; 6855; MIPS32EB-LABEL: CheckSync: 6856; MIPS32EB: # %bb.0: # %entry 6857; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 6858; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 6859; MIPS32EB-NEXT: addu $1, $2, $25 6860; MIPS32EB-NEXT: sync 6861; MIPS32EB-NEXT: lw $1, %got(countsint)($1) 6862; MIPS32EB-NEXT: $BB16_1: # %entry 6863; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 6864; MIPS32EB-NEXT: ll $2, 0($1) 6865; MIPS32EB-NEXT: addu $3, $2, $4 6866; MIPS32EB-NEXT: sc $3, 0($1) 6867; MIPS32EB-NEXT: beqz $3, $BB16_1 6868; MIPS32EB-NEXT: nop 6869; MIPS32EB-NEXT: # %bb.2: # %entry 6870; MIPS32EB-NEXT: sync 6871; MIPS32EB-NEXT: jr $ra 6872; MIPS32EB-NEXT: nop 6873entry: 6874 %0 = atomicrmw add i32* @countsint, i32 %v seq_cst 6875 ret i32 %0 6876} 6877 6878; make sure that this assertion in 6879; TwoAddressInstructionPass::TryInstructionTransform does not fail: 6880; 6881; line 1203: assert(TargetRegisterInfo::isVirtualRegister(regB) && 6882; 6883; it failed when MipsDAGToDAGISel::ReplaceUsesWithZeroReg replaced an 6884; operand of an atomic instruction with register $zero. 6885@a = external global i32 6886 6887define i32 @zeroreg() nounwind { 6888; MIPS32-LABEL: zeroreg: 6889; MIPS32: # %bb.0: # %entry 6890; MIPS32-NEXT: lui $2, %hi(_gp_disp) 6891; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 6892; MIPS32-NEXT: addu $1, $2, $25 6893; MIPS32-NEXT: sync 6894; MIPS32-NEXT: addiu $2, $zero, 0 6895; MIPS32-NEXT: addiu $3, $zero, 1 6896; MIPS32-NEXT: lw $1, %got(a)($1) 6897; MIPS32-NEXT: $BB17_1: # %entry 6898; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 6899; MIPS32-NEXT: ll $4, 0($1) 6900; MIPS32-NEXT: bne $4, $3, $BB17_3 6901; MIPS32-NEXT: nop 6902; MIPS32-NEXT: # %bb.2: # %entry 6903; MIPS32-NEXT: # in Loop: Header=BB17_1 Depth=1 6904; MIPS32-NEXT: move $5, $2 6905; MIPS32-NEXT: sc $5, 0($1) 6906; MIPS32-NEXT: beqz $5, $BB17_1 6907; MIPS32-NEXT: nop 6908; MIPS32-NEXT: $BB17_3: # %entry 6909; MIPS32-NEXT: xor $1, $4, $3 6910; MIPS32-NEXT: sltiu $2, $1, 1 6911; MIPS32-NEXT: sync 6912; MIPS32-NEXT: jr $ra 6913; MIPS32-NEXT: nop 6914; 6915; MIPS32O0-LABEL: zeroreg: 6916; MIPS32O0: # %bb.0: # %entry 6917; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 6918; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 6919; MIPS32O0-NEXT: addu $1, $2, $25 6920; MIPS32O0-NEXT: sync 6921; MIPS32O0-NEXT: lw $1, %got(a)($1) 6922; MIPS32O0-NEXT: addiu $2, $zero, 0 6923; MIPS32O0-NEXT: addiu $3, $zero, 1 6924; MIPS32O0-NEXT: move $4, $3 6925; MIPS32O0-NEXT: $BB17_1: # %entry 6926; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 6927; MIPS32O0-NEXT: ll $5, 0($1) 6928; MIPS32O0-NEXT: bne $5, $4, $BB17_3 6929; MIPS32O0-NEXT: nop 6930; MIPS32O0-NEXT: # %bb.2: # %entry 6931; MIPS32O0-NEXT: # in Loop: Header=BB17_1 Depth=1 6932; MIPS32O0-NEXT: move $6, $2 6933; MIPS32O0-NEXT: sc $6, 0($1) 6934; MIPS32O0-NEXT: beqz $6, $BB17_1 6935; MIPS32O0-NEXT: nop 6936; MIPS32O0-NEXT: $BB17_3: # %entry 6937; MIPS32O0-NEXT: xor $1, $5, $3 6938; MIPS32O0-NEXT: sltiu $1, $1, 1 6939; MIPS32O0-NEXT: sync 6940; MIPS32O0-NEXT: addiu $2, $zero, 1 6941; MIPS32O0-NEXT: xor $2, $5, $2 6942; MIPS32O0-NEXT: sltiu $2, $2, 1 6943; MIPS32O0-NEXT: andi $2, $2, 1 6944; MIPS32O0-NEXT: jr $ra 6945; MIPS32O0-NEXT: nop 6946; 6947; MIPS32R2-LABEL: zeroreg: 6948; MIPS32R2: # %bb.0: # %entry 6949; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 6950; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 6951; MIPS32R2-NEXT: addu $1, $2, $25 6952; MIPS32R2-NEXT: sync 6953; MIPS32R2-NEXT: addiu $2, $zero, 0 6954; MIPS32R2-NEXT: addiu $3, $zero, 1 6955; MIPS32R2-NEXT: lw $1, %got(a)($1) 6956; MIPS32R2-NEXT: $BB17_1: # %entry 6957; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 6958; MIPS32R2-NEXT: ll $4, 0($1) 6959; MIPS32R2-NEXT: bne $4, $3, $BB17_3 6960; MIPS32R2-NEXT: nop 6961; MIPS32R2-NEXT: # %bb.2: # %entry 6962; MIPS32R2-NEXT: # in Loop: Header=BB17_1 Depth=1 6963; MIPS32R2-NEXT: move $5, $2 6964; MIPS32R2-NEXT: sc $5, 0($1) 6965; MIPS32R2-NEXT: beqz $5, $BB17_1 6966; MIPS32R2-NEXT: nop 6967; MIPS32R2-NEXT: $BB17_3: # %entry 6968; MIPS32R2-NEXT: xor $1, $4, $3 6969; MIPS32R2-NEXT: sltiu $2, $1, 1 6970; MIPS32R2-NEXT: sync 6971; MIPS32R2-NEXT: jr $ra 6972; MIPS32R2-NEXT: nop 6973; 6974; MIPS32R6-LABEL: zeroreg: 6975; MIPS32R6: # %bb.0: # %entry 6976; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 6977; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 6978; MIPS32R6-NEXT: addu $1, $2, $25 6979; MIPS32R6-NEXT: sync 6980; MIPS32R6-NEXT: addiu $2, $zero, 0 6981; MIPS32R6-NEXT: addiu $3, $zero, 1 6982; MIPS32R6-NEXT: lw $1, %got(a)($1) 6983; MIPS32R6-NEXT: $BB17_1: # %entry 6984; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 6985; MIPS32R6-NEXT: ll $4, 0($1) 6986; MIPS32R6-NEXT: bnec $4, $3, $BB17_3 6987; MIPS32R6-NEXT: # %bb.2: # %entry 6988; MIPS32R6-NEXT: # in Loop: Header=BB17_1 Depth=1 6989; MIPS32R6-NEXT: move $5, $2 6990; MIPS32R6-NEXT: sc $5, 0($1) 6991; MIPS32R6-NEXT: beqzc $5, $BB17_1 6992; MIPS32R6-NEXT: $BB17_3: # %entry 6993; MIPS32R6-NEXT: xor $1, $4, $3 6994; MIPS32R6-NEXT: sltiu $2, $1, 1 6995; MIPS32R6-NEXT: sync 6996; MIPS32R6-NEXT: jrc $ra 6997; 6998; MIPS32R6O0-LABEL: zeroreg: 6999; MIPS32R6O0: # %bb.0: # %entry 7000; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 7001; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 7002; MIPS32R6O0-NEXT: addu $1, $2, $25 7003; MIPS32R6O0-NEXT: sync 7004; MIPS32R6O0-NEXT: lw $1, %got(a)($1) 7005; MIPS32R6O0-NEXT: addiu $2, $zero, 0 7006; MIPS32R6O0-NEXT: addiu $3, $zero, 1 7007; MIPS32R6O0-NEXT: move $4, $3 7008; MIPS32R6O0-NEXT: $BB17_1: # %entry 7009; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 7010; MIPS32R6O0-NEXT: ll $5, 0($1) 7011; MIPS32R6O0-NEXT: bnec $5, $4, $BB17_3 7012; MIPS32R6O0-NEXT: # %bb.2: # %entry 7013; MIPS32R6O0-NEXT: # in Loop: Header=BB17_1 Depth=1 7014; MIPS32R6O0-NEXT: move $6, $2 7015; MIPS32R6O0-NEXT: sc $6, 0($1) 7016; MIPS32R6O0-NEXT: beqzc $6, $BB17_1 7017; MIPS32R6O0-NEXT: $BB17_3: # %entry 7018; MIPS32R6O0-NEXT: xor $1, $5, $3 7019; MIPS32R6O0-NEXT: sltiu $2, $1, 1 7020; MIPS32R6O0-NEXT: sync 7021; MIPS32R6O0-NEXT: jrc $ra 7022; 7023; MIPS4-LABEL: zeroreg: 7024; MIPS4: # %bb.0: # %entry 7025; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(zeroreg))) 7026; MIPS4-NEXT: daddu $1, $1, $25 7027; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(zeroreg))) 7028; MIPS4-NEXT: sync 7029; MIPS4-NEXT: addiu $2, $zero, 0 7030; MIPS4-NEXT: addiu $3, $zero, 1 7031; MIPS4-NEXT: ld $1, %got_disp(a)($1) 7032; MIPS4-NEXT: .LBB17_1: # %entry 7033; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 7034; MIPS4-NEXT: ll $4, 0($1) 7035; MIPS4-NEXT: bne $4, $3, .LBB17_3 7036; MIPS4-NEXT: nop 7037; MIPS4-NEXT: # %bb.2: # %entry 7038; MIPS4-NEXT: # in Loop: Header=BB17_1 Depth=1 7039; MIPS4-NEXT: move $5, $2 7040; MIPS4-NEXT: sc $5, 0($1) 7041; MIPS4-NEXT: beqz $5, .LBB17_1 7042; MIPS4-NEXT: nop 7043; MIPS4-NEXT: .LBB17_3: # %entry 7044; MIPS4-NEXT: xor $1, $4, $3 7045; MIPS4-NEXT: sltiu $2, $1, 1 7046; MIPS4-NEXT: sync 7047; MIPS4-NEXT: jr $ra 7048; MIPS4-NEXT: nop 7049; 7050; MIPS64-LABEL: zeroreg: 7051; MIPS64: # %bb.0: # %entry 7052; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(zeroreg))) 7053; MIPS64-NEXT: daddu $1, $1, $25 7054; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(zeroreg))) 7055; MIPS64-NEXT: sync 7056; MIPS64-NEXT: addiu $2, $zero, 0 7057; MIPS64-NEXT: addiu $3, $zero, 1 7058; MIPS64-NEXT: ld $1, %got_disp(a)($1) 7059; MIPS64-NEXT: .LBB17_1: # %entry 7060; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 7061; MIPS64-NEXT: ll $4, 0($1) 7062; MIPS64-NEXT: bne $4, $3, .LBB17_3 7063; MIPS64-NEXT: nop 7064; MIPS64-NEXT: # %bb.2: # %entry 7065; MIPS64-NEXT: # in Loop: Header=BB17_1 Depth=1 7066; MIPS64-NEXT: move $5, $2 7067; MIPS64-NEXT: sc $5, 0($1) 7068; MIPS64-NEXT: beqz $5, .LBB17_1 7069; MIPS64-NEXT: nop 7070; MIPS64-NEXT: .LBB17_3: # %entry 7071; MIPS64-NEXT: xor $1, $4, $3 7072; MIPS64-NEXT: sltiu $2, $1, 1 7073; MIPS64-NEXT: sync 7074; MIPS64-NEXT: jr $ra 7075; MIPS64-NEXT: nop 7076; 7077; MIPS64R2-LABEL: zeroreg: 7078; MIPS64R2: # %bb.0: # %entry 7079; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(zeroreg))) 7080; MIPS64R2-NEXT: daddu $1, $1, $25 7081; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(zeroreg))) 7082; MIPS64R2-NEXT: sync 7083; MIPS64R2-NEXT: addiu $2, $zero, 0 7084; MIPS64R2-NEXT: addiu $3, $zero, 1 7085; MIPS64R2-NEXT: ld $1, %got_disp(a)($1) 7086; MIPS64R2-NEXT: .LBB17_1: # %entry 7087; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 7088; MIPS64R2-NEXT: ll $4, 0($1) 7089; MIPS64R2-NEXT: bne $4, $3, .LBB17_3 7090; MIPS64R2-NEXT: nop 7091; MIPS64R2-NEXT: # %bb.2: # %entry 7092; MIPS64R2-NEXT: # in Loop: Header=BB17_1 Depth=1 7093; MIPS64R2-NEXT: move $5, $2 7094; MIPS64R2-NEXT: sc $5, 0($1) 7095; MIPS64R2-NEXT: beqz $5, .LBB17_1 7096; MIPS64R2-NEXT: nop 7097; MIPS64R2-NEXT: .LBB17_3: # %entry 7098; MIPS64R2-NEXT: xor $1, $4, $3 7099; MIPS64R2-NEXT: sltiu $2, $1, 1 7100; MIPS64R2-NEXT: sync 7101; MIPS64R2-NEXT: jr $ra 7102; MIPS64R2-NEXT: nop 7103; 7104; MIPS64R6-LABEL: zeroreg: 7105; MIPS64R6: # %bb.0: # %entry 7106; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(zeroreg))) 7107; MIPS64R6-NEXT: daddu $1, $1, $25 7108; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(zeroreg))) 7109; MIPS64R6-NEXT: sync 7110; MIPS64R6-NEXT: addiu $2, $zero, 0 7111; MIPS64R6-NEXT: addiu $3, $zero, 1 7112; MIPS64R6-NEXT: ld $1, %got_disp(a)($1) 7113; MIPS64R6-NEXT: .LBB17_1: # %entry 7114; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 7115; MIPS64R6-NEXT: ll $4, 0($1) 7116; MIPS64R6-NEXT: bnec $4, $3, .LBB17_3 7117; MIPS64R6-NEXT: # %bb.2: # %entry 7118; MIPS64R6-NEXT: # in Loop: Header=BB17_1 Depth=1 7119; MIPS64R6-NEXT: move $5, $2 7120; MIPS64R6-NEXT: sc $5, 0($1) 7121; MIPS64R6-NEXT: beqzc $5, .LBB17_1 7122; MIPS64R6-NEXT: .LBB17_3: # %entry 7123; MIPS64R6-NEXT: xor $1, $4, $3 7124; MIPS64R6-NEXT: sltiu $2, $1, 1 7125; MIPS64R6-NEXT: sync 7126; MIPS64R6-NEXT: jrc $ra 7127; 7128; MIPS64R6O0-LABEL: zeroreg: 7129; MIPS64R6O0: # %bb.0: # %entry 7130; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(zeroreg))) 7131; MIPS64R6O0-NEXT: daddu $1, $1, $25 7132; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(zeroreg))) 7133; MIPS64R6O0-NEXT: sync 7134; MIPS64R6O0-NEXT: ld $1, %got_disp(a)($1) 7135; MIPS64R6O0-NEXT: addiu $2, $zero, 0 7136; MIPS64R6O0-NEXT: addiu $3, $zero, 1 7137; MIPS64R6O0-NEXT: move $4, $3 7138; MIPS64R6O0-NEXT: .LBB17_1: # %entry 7139; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 7140; MIPS64R6O0-NEXT: ll $5, 0($1) 7141; MIPS64R6O0-NEXT: bnec $5, $4, .LBB17_3 7142; MIPS64R6O0-NEXT: # %bb.2: # %entry 7143; MIPS64R6O0-NEXT: # in Loop: Header=BB17_1 Depth=1 7144; MIPS64R6O0-NEXT: move $6, $2 7145; MIPS64R6O0-NEXT: sc $6, 0($1) 7146; MIPS64R6O0-NEXT: beqzc $6, .LBB17_1 7147; MIPS64R6O0-NEXT: .LBB17_3: # %entry 7148; MIPS64R6O0-NEXT: xor $1, $5, $3 7149; MIPS64R6O0-NEXT: sltiu $2, $1, 1 7150; MIPS64R6O0-NEXT: sync 7151; MIPS64R6O0-NEXT: jrc $ra 7152; 7153; MM32-LABEL: zeroreg: 7154; MM32: # %bb.0: # %entry 7155; MM32-NEXT: lui $2, %hi(_gp_disp) 7156; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 7157; MM32-NEXT: addu $2, $2, $25 7158; MM32-NEXT: sync 7159; MM32-NEXT: li16 $3, 0 7160; MM32-NEXT: li16 $4, 1 7161; MM32-NEXT: lw $1, %got(a)($2) 7162; MM32-NEXT: $BB17_1: # %entry 7163; MM32-NEXT: # =>This Inner Loop Header: Depth=1 7164; MM32-NEXT: ll $2, 0($1) 7165; MM32-NEXT: bne $2, $4, $BB17_3 7166; MM32-NEXT: nop 7167; MM32-NEXT: # %bb.2: # %entry 7168; MM32-NEXT: # in Loop: Header=BB17_1 Depth=1 7169; MM32-NEXT: move $5, $3 7170; MM32-NEXT: sc $5, 0($1) 7171; MM32-NEXT: beqzc $5, $BB17_1 7172; MM32-NEXT: $BB17_3: # %entry 7173; MM32-NEXT: xor $1, $2, $4 7174; MM32-NEXT: sltiu $2, $1, 1 7175; MM32-NEXT: sync 7176; MM32-NEXT: jrc $ra 7177; 7178; O1-LABEL: zeroreg: 7179; O1: # %bb.0: # %entry 7180; O1-NEXT: lui $2, %hi(_gp_disp) 7181; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 7182; O1-NEXT: addu $1, $2, $25 7183; O1-NEXT: sync 7184; O1-NEXT: addiu $2, $zero, 0 7185; O1-NEXT: addiu $3, $zero, 1 7186; O1-NEXT: lw $1, %got(a)($1) 7187; O1-NEXT: $BB17_1: # %entry 7188; O1-NEXT: # =>This Inner Loop Header: Depth=1 7189; O1-NEXT: ll $4, 0($1) 7190; O1-NEXT: bne $4, $3, $BB17_3 7191; O1-NEXT: nop 7192; O1-NEXT: # %bb.2: # %entry 7193; O1-NEXT: # in Loop: Header=BB17_1 Depth=1 7194; O1-NEXT: move $5, $2 7195; O1-NEXT: sc $5, 0($1) 7196; O1-NEXT: beqz $5, $BB17_1 7197; O1-NEXT: nop 7198; O1-NEXT: $BB17_3: # %entry 7199; O1-NEXT: xor $1, $4, $3 7200; O1-NEXT: sltiu $2, $1, 1 7201; O1-NEXT: sync 7202; O1-NEXT: jr $ra 7203; O1-NEXT: nop 7204; 7205; O2-LABEL: zeroreg: 7206; O2: # %bb.0: # %entry 7207; O2-NEXT: lui $2, %hi(_gp_disp) 7208; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 7209; O2-NEXT: addu $1, $2, $25 7210; O2-NEXT: sync 7211; O2-NEXT: addiu $2, $zero, 0 7212; O2-NEXT: addiu $3, $zero, 1 7213; O2-NEXT: lw $1, %got(a)($1) 7214; O2-NEXT: $BB17_1: # %entry 7215; O2-NEXT: # =>This Inner Loop Header: Depth=1 7216; O2-NEXT: ll $4, 0($1) 7217; O2-NEXT: bne $4, $3, $BB17_3 7218; O2-NEXT: nop 7219; O2-NEXT: # %bb.2: # %entry 7220; O2-NEXT: # in Loop: Header=BB17_1 Depth=1 7221; O2-NEXT: move $5, $2 7222; O2-NEXT: sc $5, 0($1) 7223; O2-NEXT: beqz $5, $BB17_1 7224; O2-NEXT: nop 7225; O2-NEXT: $BB17_3: # %entry 7226; O2-NEXT: xor $1, $4, $3 7227; O2-NEXT: sltiu $2, $1, 1 7228; O2-NEXT: sync 7229; O2-NEXT: jr $ra 7230; O2-NEXT: nop 7231; 7232; O3-LABEL: zeroreg: 7233; O3: # %bb.0: # %entry 7234; O3-NEXT: lui $2, %hi(_gp_disp) 7235; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 7236; O3-NEXT: addu $1, $2, $25 7237; O3-NEXT: addiu $2, $zero, 0 7238; O3-NEXT: addiu $3, $zero, 1 7239; O3-NEXT: sync 7240; O3-NEXT: lw $1, %got(a)($1) 7241; O3-NEXT: $BB17_1: # %entry 7242; O3-NEXT: # =>This Inner Loop Header: Depth=1 7243; O3-NEXT: ll $4, 0($1) 7244; O3-NEXT: bne $4, $3, $BB17_3 7245; O3-NEXT: nop 7246; O3-NEXT: # %bb.2: # %entry 7247; O3-NEXT: # in Loop: Header=BB17_1 Depth=1 7248; O3-NEXT: move $5, $2 7249; O3-NEXT: sc $5, 0($1) 7250; O3-NEXT: beqz $5, $BB17_1 7251; O3-NEXT: nop 7252; O3-NEXT: $BB17_3: # %entry 7253; O3-NEXT: sync 7254; O3-NEXT: xor $1, $4, $3 7255; O3-NEXT: jr $ra 7256; O3-NEXT: sltiu $2, $1, 1 7257; 7258; MIPS32EB-LABEL: zeroreg: 7259; MIPS32EB: # %bb.0: # %entry 7260; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 7261; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 7262; MIPS32EB-NEXT: addu $1, $2, $25 7263; MIPS32EB-NEXT: sync 7264; MIPS32EB-NEXT: addiu $2, $zero, 0 7265; MIPS32EB-NEXT: addiu $3, $zero, 1 7266; MIPS32EB-NEXT: lw $1, %got(a)($1) 7267; MIPS32EB-NEXT: $BB17_1: # %entry 7268; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 7269; MIPS32EB-NEXT: ll $4, 0($1) 7270; MIPS32EB-NEXT: bne $4, $3, $BB17_3 7271; MIPS32EB-NEXT: nop 7272; MIPS32EB-NEXT: # %bb.2: # %entry 7273; MIPS32EB-NEXT: # in Loop: Header=BB17_1 Depth=1 7274; MIPS32EB-NEXT: move $5, $2 7275; MIPS32EB-NEXT: sc $5, 0($1) 7276; MIPS32EB-NEXT: beqz $5, $BB17_1 7277; MIPS32EB-NEXT: nop 7278; MIPS32EB-NEXT: $BB17_3: # %entry 7279; MIPS32EB-NEXT: xor $1, $4, $3 7280; MIPS32EB-NEXT: sltiu $2, $1, 1 7281; MIPS32EB-NEXT: sync 7282; MIPS32EB-NEXT: jr $ra 7283; MIPS32EB-NEXT: nop 7284entry: 7285 %pair0 = cmpxchg i32* @a, i32 1, i32 0 seq_cst seq_cst 7286 %0 = extractvalue { i32, i1 } %pair0, 0 7287 %1 = icmp eq i32 %0, 1 7288 %conv = zext i1 %1 to i32 7289 ret i32 %conv 7290} 7291 7292; Check that MIPS32R6 has the correct offset range. 7293; FIXME: At the moment, we don't seem to do addr+offset for any atomic load/store. 7294define i32 @AtomicLoadAdd32_OffGt9Bit(i32 signext %incr) nounwind { 7295; MIPS32-LABEL: AtomicLoadAdd32_OffGt9Bit: 7296; MIPS32: # %bb.0: # %entry 7297; MIPS32-NEXT: lui $2, %hi(_gp_disp) 7298; MIPS32-NEXT: addiu $2, $2, %lo(_gp_disp) 7299; MIPS32-NEXT: addu $1, $2, $25 7300; MIPS32-NEXT: lw $1, %got(x)($1) 7301; MIPS32-NEXT: addiu $1, $1, 1024 7302; MIPS32-NEXT: $BB18_1: # %entry 7303; MIPS32-NEXT: # =>This Inner Loop Header: Depth=1 7304; MIPS32-NEXT: ll $2, 0($1) 7305; MIPS32-NEXT: addu $3, $2, $4 7306; MIPS32-NEXT: sc $3, 0($1) 7307; MIPS32-NEXT: beqz $3, $BB18_1 7308; MIPS32-NEXT: nop 7309; MIPS32-NEXT: # %bb.2: # %entry 7310; MIPS32-NEXT: jr $ra 7311; MIPS32-NEXT: nop 7312; 7313; MIPS32O0-LABEL: AtomicLoadAdd32_OffGt9Bit: 7314; MIPS32O0: # %bb.0: # %entry 7315; MIPS32O0-NEXT: lui $2, %hi(_gp_disp) 7316; MIPS32O0-NEXT: addiu $2, $2, %lo(_gp_disp) 7317; MIPS32O0-NEXT: addu $1, $2, $25 7318; MIPS32O0-NEXT: lw $1, %got(x)($1) 7319; MIPS32O0-NEXT: addiu $1, $1, 1024 7320; MIPS32O0-NEXT: $BB18_1: # %entry 7321; MIPS32O0-NEXT: # =>This Inner Loop Header: Depth=1 7322; MIPS32O0-NEXT: ll $2, 0($1) 7323; MIPS32O0-NEXT: addu $3, $2, $4 7324; MIPS32O0-NEXT: sc $3, 0($1) 7325; MIPS32O0-NEXT: beqz $3, $BB18_1 7326; MIPS32O0-NEXT: nop 7327; MIPS32O0-NEXT: # %bb.2: # %entry 7328; MIPS32O0-NEXT: jr $ra 7329; MIPS32O0-NEXT: nop 7330; 7331; MIPS32R2-LABEL: AtomicLoadAdd32_OffGt9Bit: 7332; MIPS32R2: # %bb.0: # %entry 7333; MIPS32R2-NEXT: lui $2, %hi(_gp_disp) 7334; MIPS32R2-NEXT: addiu $2, $2, %lo(_gp_disp) 7335; MIPS32R2-NEXT: addu $1, $2, $25 7336; MIPS32R2-NEXT: lw $1, %got(x)($1) 7337; MIPS32R2-NEXT: addiu $1, $1, 1024 7338; MIPS32R2-NEXT: $BB18_1: # %entry 7339; MIPS32R2-NEXT: # =>This Inner Loop Header: Depth=1 7340; MIPS32R2-NEXT: ll $2, 0($1) 7341; MIPS32R2-NEXT: addu $3, $2, $4 7342; MIPS32R2-NEXT: sc $3, 0($1) 7343; MIPS32R2-NEXT: beqz $3, $BB18_1 7344; MIPS32R2-NEXT: nop 7345; MIPS32R2-NEXT: # %bb.2: # %entry 7346; MIPS32R2-NEXT: jr $ra 7347; MIPS32R2-NEXT: nop 7348; 7349; MIPS32R6-LABEL: AtomicLoadAdd32_OffGt9Bit: 7350; MIPS32R6: # %bb.0: # %entry 7351; MIPS32R6-NEXT: lui $2, %hi(_gp_disp) 7352; MIPS32R6-NEXT: addiu $2, $2, %lo(_gp_disp) 7353; MIPS32R6-NEXT: addu $1, $2, $25 7354; MIPS32R6-NEXT: lw $1, %got(x)($1) 7355; MIPS32R6-NEXT: addiu $1, $1, 1024 7356; MIPS32R6-NEXT: $BB18_1: # %entry 7357; MIPS32R6-NEXT: # =>This Inner Loop Header: Depth=1 7358; MIPS32R6-NEXT: ll $2, 0($1) 7359; MIPS32R6-NEXT: addu $3, $2, $4 7360; MIPS32R6-NEXT: sc $3, 0($1) 7361; MIPS32R6-NEXT: beqzc $3, $BB18_1 7362; MIPS32R6-NEXT: nop 7363; MIPS32R6-NEXT: # %bb.2: # %entry 7364; MIPS32R6-NEXT: jrc $ra 7365; 7366; MIPS32R6O0-LABEL: AtomicLoadAdd32_OffGt9Bit: 7367; MIPS32R6O0: # %bb.0: # %entry 7368; MIPS32R6O0-NEXT: lui $2, %hi(_gp_disp) 7369; MIPS32R6O0-NEXT: addiu $2, $2, %lo(_gp_disp) 7370; MIPS32R6O0-NEXT: addu $1, $2, $25 7371; MIPS32R6O0-NEXT: lw $1, %got(x)($1) 7372; MIPS32R6O0-NEXT: addiu $1, $1, 1024 7373; MIPS32R6O0-NEXT: $BB18_1: # %entry 7374; MIPS32R6O0-NEXT: # =>This Inner Loop Header: Depth=1 7375; MIPS32R6O0-NEXT: ll $2, 0($1) 7376; MIPS32R6O0-NEXT: addu $3, $2, $4 7377; MIPS32R6O0-NEXT: sc $3, 0($1) 7378; MIPS32R6O0-NEXT: beqzc $3, $BB18_1 7379; MIPS32R6O0-NEXT: nop 7380; MIPS32R6O0-NEXT: # %bb.2: # %entry 7381; MIPS32R6O0-NEXT: jrc $ra 7382; 7383; MIPS4-LABEL: AtomicLoadAdd32_OffGt9Bit: 7384; MIPS4: # %bb.0: # %entry 7385; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit))) 7386; MIPS4-NEXT: daddu $1, $1, $25 7387; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit))) 7388; MIPS4-NEXT: ld $1, %got_disp(x)($1) 7389; MIPS4-NEXT: daddiu $1, $1, 1024 7390; MIPS4-NEXT: .LBB18_1: # %entry 7391; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1 7392; MIPS4-NEXT: ll $2, 0($1) 7393; MIPS4-NEXT: addu $3, $2, $4 7394; MIPS4-NEXT: sc $3, 0($1) 7395; MIPS4-NEXT: beqz $3, .LBB18_1 7396; MIPS4-NEXT: nop 7397; MIPS4-NEXT: # %bb.2: # %entry 7398; MIPS4-NEXT: jr $ra 7399; MIPS4-NEXT: nop 7400; 7401; MIPS64-LABEL: AtomicLoadAdd32_OffGt9Bit: 7402; MIPS64: # %bb.0: # %entry 7403; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit))) 7404; MIPS64-NEXT: daddu $1, $1, $25 7405; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit))) 7406; MIPS64-NEXT: ld $1, %got_disp(x)($1) 7407; MIPS64-NEXT: daddiu $1, $1, 1024 7408; MIPS64-NEXT: .LBB18_1: # %entry 7409; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1 7410; MIPS64-NEXT: ll $2, 0($1) 7411; MIPS64-NEXT: addu $3, $2, $4 7412; MIPS64-NEXT: sc $3, 0($1) 7413; MIPS64-NEXT: beqz $3, .LBB18_1 7414; MIPS64-NEXT: nop 7415; MIPS64-NEXT: # %bb.2: # %entry 7416; MIPS64-NEXT: jr $ra 7417; MIPS64-NEXT: nop 7418; 7419; MIPS64R2-LABEL: AtomicLoadAdd32_OffGt9Bit: 7420; MIPS64R2: # %bb.0: # %entry 7421; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit))) 7422; MIPS64R2-NEXT: daddu $1, $1, $25 7423; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit))) 7424; MIPS64R2-NEXT: ld $1, %got_disp(x)($1) 7425; MIPS64R2-NEXT: daddiu $1, $1, 1024 7426; MIPS64R2-NEXT: .LBB18_1: # %entry 7427; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1 7428; MIPS64R2-NEXT: ll $2, 0($1) 7429; MIPS64R2-NEXT: addu $3, $2, $4 7430; MIPS64R2-NEXT: sc $3, 0($1) 7431; MIPS64R2-NEXT: beqz $3, .LBB18_1 7432; MIPS64R2-NEXT: nop 7433; MIPS64R2-NEXT: # %bb.2: # %entry 7434; MIPS64R2-NEXT: jr $ra 7435; MIPS64R2-NEXT: nop 7436; 7437; MIPS64R6-LABEL: AtomicLoadAdd32_OffGt9Bit: 7438; MIPS64R6: # %bb.0: # %entry 7439; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit))) 7440; MIPS64R6-NEXT: daddu $1, $1, $25 7441; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit))) 7442; MIPS64R6-NEXT: ld $1, %got_disp(x)($1) 7443; MIPS64R6-NEXT: daddiu $1, $1, 1024 7444; MIPS64R6-NEXT: .LBB18_1: # %entry 7445; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1 7446; MIPS64R6-NEXT: ll $2, 0($1) 7447; MIPS64R6-NEXT: addu $3, $2, $4 7448; MIPS64R6-NEXT: sc $3, 0($1) 7449; MIPS64R6-NEXT: beqzc $3, .LBB18_1 7450; MIPS64R6-NEXT: nop 7451; MIPS64R6-NEXT: # %bb.2: # %entry 7452; MIPS64R6-NEXT: jrc $ra 7453; 7454; MIPS64R6O0-LABEL: AtomicLoadAdd32_OffGt9Bit: 7455; MIPS64R6O0: # %bb.0: # %entry 7456; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit))) 7457; MIPS64R6O0-NEXT: daddu $1, $1, $25 7458; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd32_OffGt9Bit))) 7459; MIPS64R6O0-NEXT: # kill: def $a0 killed $a0 killed $a0_64 7460; MIPS64R6O0-NEXT: ld $1, %got_disp(x)($1) 7461; MIPS64R6O0-NEXT: daddiu $1, $1, 1024 7462; MIPS64R6O0-NEXT: .LBB18_1: # %entry 7463; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1 7464; MIPS64R6O0-NEXT: ll $2, 0($1) 7465; MIPS64R6O0-NEXT: addu $3, $2, $4 7466; MIPS64R6O0-NEXT: sc $3, 0($1) 7467; MIPS64R6O0-NEXT: beqzc $3, .LBB18_1 7468; MIPS64R6O0-NEXT: nop 7469; MIPS64R6O0-NEXT: # %bb.2: # %entry 7470; MIPS64R6O0-NEXT: jrc $ra 7471; 7472; MM32-LABEL: AtomicLoadAdd32_OffGt9Bit: 7473; MM32: # %bb.0: # %entry 7474; MM32-NEXT: lui $2, %hi(_gp_disp) 7475; MM32-NEXT: addiu $2, $2, %lo(_gp_disp) 7476; MM32-NEXT: addu $2, $2, $25 7477; MM32-NEXT: lw $1, %got(x)($2) 7478; MM32-NEXT: addiu $1, $1, 1024 7479; MM32-NEXT: $BB18_1: # %entry 7480; MM32-NEXT: # =>This Inner Loop Header: Depth=1 7481; MM32-NEXT: ll $2, 0($1) 7482; MM32-NEXT: addu16 $3, $2, $4 7483; MM32-NEXT: sc $3, 0($1) 7484; MM32-NEXT: beqzc $3, $BB18_1 7485; MM32-NEXT: # %bb.2: # %entry 7486; MM32-NEXT: jrc $ra 7487; 7488; O1-LABEL: AtomicLoadAdd32_OffGt9Bit: 7489; O1: # %bb.0: # %entry 7490; O1-NEXT: lui $2, %hi(_gp_disp) 7491; O1-NEXT: addiu $2, $2, %lo(_gp_disp) 7492; O1-NEXT: addu $1, $2, $25 7493; O1-NEXT: lw $1, %got(x)($1) 7494; O1-NEXT: addiu $1, $1, 1024 7495; O1-NEXT: $BB18_1: # %entry 7496; O1-NEXT: # =>This Inner Loop Header: Depth=1 7497; O1-NEXT: ll $2, 0($1) 7498; O1-NEXT: addu $3, $2, $4 7499; O1-NEXT: sc $3, 0($1) 7500; O1-NEXT: beqz $3, $BB18_1 7501; O1-NEXT: nop 7502; O1-NEXT: # %bb.2: # %entry 7503; O1-NEXT: jr $ra 7504; O1-NEXT: nop 7505; 7506; O2-LABEL: AtomicLoadAdd32_OffGt9Bit: 7507; O2: # %bb.0: # %entry 7508; O2-NEXT: lui $2, %hi(_gp_disp) 7509; O2-NEXT: addiu $2, $2, %lo(_gp_disp) 7510; O2-NEXT: addu $1, $2, $25 7511; O2-NEXT: lw $1, %got(x)($1) 7512; O2-NEXT: addiu $1, $1, 1024 7513; O2-NEXT: $BB18_1: # %entry 7514; O2-NEXT: # =>This Inner Loop Header: Depth=1 7515; O2-NEXT: ll $2, 0($1) 7516; O2-NEXT: addu $3, $2, $4 7517; O2-NEXT: sc $3, 0($1) 7518; O2-NEXT: beqz $3, $BB18_1 7519; O2-NEXT: nop 7520; O2-NEXT: # %bb.2: # %entry 7521; O2-NEXT: jr $ra 7522; O2-NEXT: nop 7523; 7524; O3-LABEL: AtomicLoadAdd32_OffGt9Bit: 7525; O3: # %bb.0: # %entry 7526; O3-NEXT: lui $2, %hi(_gp_disp) 7527; O3-NEXT: addiu $2, $2, %lo(_gp_disp) 7528; O3-NEXT: addu $1, $2, $25 7529; O3-NEXT: lw $1, %got(x)($1) 7530; O3-NEXT: addiu $1, $1, 1024 7531; O3-NEXT: $BB18_1: # %entry 7532; O3-NEXT: # =>This Inner Loop Header: Depth=1 7533; O3-NEXT: ll $2, 0($1) 7534; O3-NEXT: addu $3, $2, $4 7535; O3-NEXT: sc $3, 0($1) 7536; O3-NEXT: beqz $3, $BB18_1 7537; O3-NEXT: nop 7538; O3-NEXT: # %bb.2: # %entry 7539; O3-NEXT: jr $ra 7540; O3-NEXT: nop 7541; 7542; MIPS32EB-LABEL: AtomicLoadAdd32_OffGt9Bit: 7543; MIPS32EB: # %bb.0: # %entry 7544; MIPS32EB-NEXT: lui $2, %hi(_gp_disp) 7545; MIPS32EB-NEXT: addiu $2, $2, %lo(_gp_disp) 7546; MIPS32EB-NEXT: addu $1, $2, $25 7547; MIPS32EB-NEXT: lw $1, %got(x)($1) 7548; MIPS32EB-NEXT: addiu $1, $1, 1024 7549; MIPS32EB-NEXT: $BB18_1: # %entry 7550; MIPS32EB-NEXT: # =>This Inner Loop Header: Depth=1 7551; MIPS32EB-NEXT: ll $2, 0($1) 7552; MIPS32EB-NEXT: addu $3, $2, $4 7553; MIPS32EB-NEXT: sc $3, 0($1) 7554; MIPS32EB-NEXT: beqz $3, $BB18_1 7555; MIPS32EB-NEXT: nop 7556; MIPS32EB-NEXT: # %bb.2: # %entry 7557; MIPS32EB-NEXT: jr $ra 7558; MIPS32EB-NEXT: nop 7559entry: 7560 %0 = atomicrmw add i32* getelementptr(i32, i32* @x, i32 256), i32 %incr monotonic 7561 ret i32 %0 7562 7563} 7564