1370 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=mips64el-unknown-linux-gnu --disable-machine-licm -mcpu=mips4 -relocation-model=pic -verify-machineinstrs < %s | \3; RUN: FileCheck %s -check-prefix=MIPS44; RUN: llc -mtriple=mips64el-unknown-linux-gnu --disable-machine-licm -mcpu=mips64 -relocation-model=pic -verify-machineinstrs < %s | \5; RUN: FileCheck %s -check-prefix=MIPS646; RUN: llc -mtriple=mips64el-unknown-linux-gnu --disable-machine-licm -mcpu=mips64r2 -relocation-model=pic -verify-machineinstrs < %s | \7; RUN: FileCheck %s -check-prefix=MIPS64R28; RUN: llc -mtriple=mips64el-unknown-linux-gnu --disable-machine-licm -mcpu=mips64r6 -relocation-model=pic -verify-machineinstrs < %s | \9; RUN: FileCheck %s -check-prefix=MIPS64R610; RUN: llc -mtriple=mips64-unknown-linux-gnu -O0 -mcpu=mips64r6 -relocation-model=pic -verify-machineinstrs -verify-machineinstrs < %s | \11; RUN: FileCheck %s -check-prefix=MIPS64R6O012 13; We want to verify the produced code is well formed all optimization levels, the rest of the test which ensure correctness.14; RUN: llc -mtriple=mips64el-unknown-linux-gnu -O1 --disable-machine-licm -mcpu=mips64 -relocation-model=pic -verify-machineinstrs < %s | FileCheck %s --check-prefix=O115; RUN: llc -mtriple=mips64el-unknown-linux-gnu -O2 --disable-machine-licm -mcpu=mips64 -relocation-model=pic -verify-machineinstrs < %s | FileCheck %s --check-prefix=O216; RUN: llc -mtriple=mips64el-unknown-linux-gnu -O3 --disable-machine-licm -mcpu=mips64 -relocation-model=pic -verify-machineinstrs < %s | FileCheck %s --check-prefix=O317 18; Keep one big-endian check so that we don't reduce testing, but don't add more19; since endianness doesn't affect the body of the atomic operations.20; RUN: llc -mtriple=mips64-unknown-linux-gnu --disable-machine-licm -mcpu=mips64 -relocation-model=pic -verify-machineinstrs < %s | \21; RUN: FileCheck %s -check-prefix=MIPS64EB22 23@x = common global i64 0, align 424 25define i64 @AtomicLoadAdd(i64 signext %incr) nounwind {26; MIPS4-LABEL: AtomicLoadAdd:27; MIPS4: # %bb.0: # %entry28; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd)))29; MIPS4-NEXT: daddu $1, $1, $2530; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd)))31; MIPS4-NEXT: ld $1, %got_disp(x)($1)32; MIPS4-NEXT: .LBB0_1: # %entry33; MIPS4-NEXT: # =>This Inner Loop Header: Depth=134; MIPS4-NEXT: lld $2, 0($1)35; MIPS4-NEXT: daddu $3, $2, $436; MIPS4-NEXT: scd $3, 0($1)37; MIPS4-NEXT: beqz $3, .LBB0_138; MIPS4-NEXT: nop39; MIPS4-NEXT: # %bb.2: # %entry40; MIPS4-NEXT: jr $ra41; MIPS4-NEXT: nop42;43; MIPS64-LABEL: AtomicLoadAdd:44; MIPS64: # %bb.0: # %entry45; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd)))46; MIPS64-NEXT: daddu $1, $1, $2547; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd)))48; MIPS64-NEXT: ld $1, %got_disp(x)($1)49; MIPS64-NEXT: .LBB0_1: # %entry50; MIPS64-NEXT: # =>This Inner Loop Header: Depth=151; MIPS64-NEXT: lld $2, 0($1)52; MIPS64-NEXT: daddu $3, $2, $453; MIPS64-NEXT: scd $3, 0($1)54; MIPS64-NEXT: beqz $3, .LBB0_155; MIPS64-NEXT: nop56; MIPS64-NEXT: # %bb.2: # %entry57; MIPS64-NEXT: jr $ra58; MIPS64-NEXT: nop59;60; MIPS64R2-LABEL: AtomicLoadAdd:61; MIPS64R2: # %bb.0: # %entry62; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd)))63; MIPS64R2-NEXT: daddu $1, $1, $2564; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd)))65; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)66; MIPS64R2-NEXT: .LBB0_1: # %entry67; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=168; MIPS64R2-NEXT: lld $2, 0($1)69; MIPS64R2-NEXT: daddu $3, $2, $470; MIPS64R2-NEXT: scd $3, 0($1)71; MIPS64R2-NEXT: beqz $3, .LBB0_172; MIPS64R2-NEXT: nop73; MIPS64R2-NEXT: # %bb.2: # %entry74; MIPS64R2-NEXT: jr $ra75; MIPS64R2-NEXT: nop76;77; MIPS64R6-LABEL: AtomicLoadAdd:78; MIPS64R6: # %bb.0: # %entry79; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd)))80; MIPS64R6-NEXT: daddu $1, $1, $2581; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd)))82; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)83; MIPS64R6-NEXT: .LBB0_1: # %entry84; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=185; MIPS64R6-NEXT: lld $2, 0($1)86; MIPS64R6-NEXT: daddu $3, $2, $487; MIPS64R6-NEXT: scd $3, 0($1)88; MIPS64R6-NEXT: beqzc $3, .LBB0_189; MIPS64R6-NEXT: nop90; MIPS64R6-NEXT: # %bb.2: # %entry91; MIPS64R6-NEXT: jrc $ra92;93; MIPS64R6O0-LABEL: AtomicLoadAdd:94; MIPS64R6O0: # %bb.0: # %entry95; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd)))96; MIPS64R6O0-NEXT: daddu $1, $1, $2597; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd)))98; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)99; MIPS64R6O0-NEXT: .LBB0_1: # %entry100; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1101; MIPS64R6O0-NEXT: lld $2, 0($3)102; MIPS64R6O0-NEXT: daddu $1, $2, $4103; MIPS64R6O0-NEXT: scd $1, 0($3)104; MIPS64R6O0-NEXT: beqzc $1, .LBB0_1105; MIPS64R6O0-NEXT: nop106; MIPS64R6O0-NEXT: # %bb.2: # %entry107; MIPS64R6O0-NEXT: jrc $ra108;109; O1-LABEL: AtomicLoadAdd:110; O1: # %bb.0: # %entry111; O1-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd)))112; O1-NEXT: daddu $1, $1, $25113; O1-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd)))114; O1-NEXT: ld $1, %got_disp(x)($1)115; O1-NEXT: .LBB0_1: # %entry116; O1-NEXT: # =>This Inner Loop Header: Depth=1117; O1-NEXT: lld $2, 0($1)118; O1-NEXT: daddu $3, $2, $4119; O1-NEXT: scd $3, 0($1)120; O1-NEXT: beqz $3, .LBB0_1121; O1-NEXT: nop122; O1-NEXT: # %bb.2: # %entry123; O1-NEXT: jr $ra124; O1-NEXT: nop125;126; O2-LABEL: AtomicLoadAdd:127; O2: # %bb.0: # %entry128; O2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd)))129; O2-NEXT: daddu $1, $1, $25130; O2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd)))131; O2-NEXT: ld $1, %got_disp(x)($1)132; O2-NEXT: .LBB0_1: # %entry133; O2-NEXT: # =>This Inner Loop Header: Depth=1134; O2-NEXT: lld $2, 0($1)135; O2-NEXT: daddu $3, $2, $4136; O2-NEXT: scd $3, 0($1)137; O2-NEXT: beqz $3, .LBB0_1138; O2-NEXT: nop139; O2-NEXT: # %bb.2: # %entry140; O2-NEXT: jr $ra141; O2-NEXT: nop142;143; O3-LABEL: AtomicLoadAdd:144; O3: # %bb.0: # %entry145; O3-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd)))146; O3-NEXT: daddu $1, $1, $25147; O3-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd)))148; O3-NEXT: ld $1, %got_disp(x)($1)149; O3-NEXT: .LBB0_1: # %entry150; O3-NEXT: # =>This Inner Loop Header: Depth=1151; O3-NEXT: lld $2, 0($1)152; O3-NEXT: daddu $3, $2, $4153; O3-NEXT: scd $3, 0($1)154; O3-NEXT: beqz $3, .LBB0_1155; O3-NEXT: nop156; O3-NEXT: # %bb.2: # %entry157; O3-NEXT: jr $ra158; O3-NEXT: nop159;160; MIPS64EB-LABEL: AtomicLoadAdd:161; MIPS64EB: # %bb.0: # %entry162; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAdd)))163; MIPS64EB-NEXT: daddu $1, $1, $25164; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAdd)))165; MIPS64EB-NEXT: ld $1, %got_disp(x)($1)166; MIPS64EB-NEXT: .LBB0_1: # %entry167; MIPS64EB-NEXT: # =>This Inner Loop Header: Depth=1168; MIPS64EB-NEXT: lld $2, 0($1)169; MIPS64EB-NEXT: daddu $3, $2, $4170; MIPS64EB-NEXT: scd $3, 0($1)171; MIPS64EB-NEXT: beqz $3, .LBB0_1172; MIPS64EB-NEXT: nop173; MIPS64EB-NEXT: # %bb.2: # %entry174; MIPS64EB-NEXT: jr $ra175; MIPS64EB-NEXT: nop176entry:177 %0 = atomicrmw add ptr @x, i64 %incr monotonic178 ret i64 %0179 180}181 182define i64 @AtomicLoadSub(i64 signext %incr) nounwind {183; MIPS4-LABEL: AtomicLoadSub:184; MIPS4: # %bb.0: # %entry185; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub)))186; MIPS4-NEXT: daddu $1, $1, $25187; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub)))188; MIPS4-NEXT: ld $1, %got_disp(x)($1)189; MIPS4-NEXT: .LBB1_1: # %entry190; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1191; MIPS4-NEXT: lld $2, 0($1)192; MIPS4-NEXT: dsubu $3, $2, $4193; MIPS4-NEXT: scd $3, 0($1)194; MIPS4-NEXT: beqz $3, .LBB1_1195; MIPS4-NEXT: nop196; MIPS4-NEXT: # %bb.2: # %entry197; MIPS4-NEXT: jr $ra198; MIPS4-NEXT: nop199;200; MIPS64-LABEL: AtomicLoadSub:201; MIPS64: # %bb.0: # %entry202; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub)))203; MIPS64-NEXT: daddu $1, $1, $25204; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub)))205; MIPS64-NEXT: ld $1, %got_disp(x)($1)206; MIPS64-NEXT: .LBB1_1: # %entry207; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1208; MIPS64-NEXT: lld $2, 0($1)209; MIPS64-NEXT: dsubu $3, $2, $4210; MIPS64-NEXT: scd $3, 0($1)211; MIPS64-NEXT: beqz $3, .LBB1_1212; MIPS64-NEXT: nop213; MIPS64-NEXT: # %bb.2: # %entry214; MIPS64-NEXT: jr $ra215; MIPS64-NEXT: nop216;217; MIPS64R2-LABEL: AtomicLoadSub:218; MIPS64R2: # %bb.0: # %entry219; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub)))220; MIPS64R2-NEXT: daddu $1, $1, $25221; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub)))222; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)223; MIPS64R2-NEXT: .LBB1_1: # %entry224; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1225; MIPS64R2-NEXT: lld $2, 0($1)226; MIPS64R2-NEXT: dsubu $3, $2, $4227; MIPS64R2-NEXT: scd $3, 0($1)228; MIPS64R2-NEXT: beqz $3, .LBB1_1229; MIPS64R2-NEXT: nop230; MIPS64R2-NEXT: # %bb.2: # %entry231; MIPS64R2-NEXT: jr $ra232; MIPS64R2-NEXT: nop233;234; MIPS64R6-LABEL: AtomicLoadSub:235; MIPS64R6: # %bb.0: # %entry236; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub)))237; MIPS64R6-NEXT: daddu $1, $1, $25238; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub)))239; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)240; MIPS64R6-NEXT: .LBB1_1: # %entry241; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1242; MIPS64R6-NEXT: lld $2, 0($1)243; MIPS64R6-NEXT: dsubu $3, $2, $4244; MIPS64R6-NEXT: scd $3, 0($1)245; MIPS64R6-NEXT: beqzc $3, .LBB1_1246; MIPS64R6-NEXT: nop247; MIPS64R6-NEXT: # %bb.2: # %entry248; MIPS64R6-NEXT: jrc $ra249;250; MIPS64R6O0-LABEL: AtomicLoadSub:251; MIPS64R6O0: # %bb.0: # %entry252; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub)))253; MIPS64R6O0-NEXT: daddu $1, $1, $25254; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub)))255; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)256; MIPS64R6O0-NEXT: .LBB1_1: # %entry257; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1258; MIPS64R6O0-NEXT: lld $2, 0($3)259; MIPS64R6O0-NEXT: dsubu $1, $2, $4260; MIPS64R6O0-NEXT: scd $1, 0($3)261; MIPS64R6O0-NEXT: beqzc $1, .LBB1_1262; MIPS64R6O0-NEXT: nop263; MIPS64R6O0-NEXT: # %bb.2: # %entry264; MIPS64R6O0-NEXT: jrc $ra265;266; O1-LABEL: AtomicLoadSub:267; O1: # %bb.0: # %entry268; O1-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub)))269; O1-NEXT: daddu $1, $1, $25270; O1-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub)))271; O1-NEXT: ld $1, %got_disp(x)($1)272; O1-NEXT: .LBB1_1: # %entry273; O1-NEXT: # =>This Inner Loop Header: Depth=1274; O1-NEXT: lld $2, 0($1)275; O1-NEXT: dsubu $3, $2, $4276; O1-NEXT: scd $3, 0($1)277; O1-NEXT: beqz $3, .LBB1_1278; O1-NEXT: nop279; O1-NEXT: # %bb.2: # %entry280; O1-NEXT: jr $ra281; O1-NEXT: nop282;283; O2-LABEL: AtomicLoadSub:284; O2: # %bb.0: # %entry285; O2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub)))286; O2-NEXT: daddu $1, $1, $25287; O2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub)))288; O2-NEXT: ld $1, %got_disp(x)($1)289; O2-NEXT: .LBB1_1: # %entry290; O2-NEXT: # =>This Inner Loop Header: Depth=1291; O2-NEXT: lld $2, 0($1)292; O2-NEXT: dsubu $3, $2, $4293; O2-NEXT: scd $3, 0($1)294; O2-NEXT: beqz $3, .LBB1_1295; O2-NEXT: nop296; O2-NEXT: # %bb.2: # %entry297; O2-NEXT: jr $ra298; O2-NEXT: nop299;300; O3-LABEL: AtomicLoadSub:301; O3: # %bb.0: # %entry302; O3-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub)))303; O3-NEXT: daddu $1, $1, $25304; O3-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub)))305; O3-NEXT: ld $1, %got_disp(x)($1)306; O3-NEXT: .LBB1_1: # %entry307; O3-NEXT: # =>This Inner Loop Header: Depth=1308; O3-NEXT: lld $2, 0($1)309; O3-NEXT: dsubu $3, $2, $4310; O3-NEXT: scd $3, 0($1)311; O3-NEXT: beqz $3, .LBB1_1312; O3-NEXT: nop313; O3-NEXT: # %bb.2: # %entry314; O3-NEXT: jr $ra315; O3-NEXT: nop316;317; MIPS64EB-LABEL: AtomicLoadSub:318; MIPS64EB: # %bb.0: # %entry319; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadSub)))320; MIPS64EB-NEXT: daddu $1, $1, $25321; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadSub)))322; MIPS64EB-NEXT: ld $1, %got_disp(x)($1)323; MIPS64EB-NEXT: .LBB1_1: # %entry324; MIPS64EB-NEXT: # =>This Inner Loop Header: Depth=1325; MIPS64EB-NEXT: lld $2, 0($1)326; MIPS64EB-NEXT: dsubu $3, $2, $4327; MIPS64EB-NEXT: scd $3, 0($1)328; MIPS64EB-NEXT: beqz $3, .LBB1_1329; MIPS64EB-NEXT: nop330; MIPS64EB-NEXT: # %bb.2: # %entry331; MIPS64EB-NEXT: jr $ra332; MIPS64EB-NEXT: nop333entry:334 %0 = atomicrmw sub ptr @x, i64 %incr monotonic335 ret i64 %0336 337}338 339define i64 @AtomicLoadAnd(i64 signext %incr) nounwind {340; MIPS4-LABEL: AtomicLoadAnd:341; MIPS4: # %bb.0: # %entry342; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd)))343; MIPS4-NEXT: daddu $1, $1, $25344; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd)))345; MIPS4-NEXT: ld $1, %got_disp(x)($1)346; MIPS4-NEXT: .LBB2_1: # %entry347; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1348; MIPS4-NEXT: lld $2, 0($1)349; MIPS4-NEXT: and $3, $2, $4350; MIPS4-NEXT: scd $3, 0($1)351; MIPS4-NEXT: beqz $3, .LBB2_1352; MIPS4-NEXT: nop353; MIPS4-NEXT: # %bb.2: # %entry354; MIPS4-NEXT: jr $ra355; MIPS4-NEXT: nop356;357; MIPS64-LABEL: AtomicLoadAnd:358; MIPS64: # %bb.0: # %entry359; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd)))360; MIPS64-NEXT: daddu $1, $1, $25361; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd)))362; MIPS64-NEXT: ld $1, %got_disp(x)($1)363; MIPS64-NEXT: .LBB2_1: # %entry364; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1365; MIPS64-NEXT: lld $2, 0($1)366; MIPS64-NEXT: and $3, $2, $4367; MIPS64-NEXT: scd $3, 0($1)368; MIPS64-NEXT: beqz $3, .LBB2_1369; MIPS64-NEXT: nop370; MIPS64-NEXT: # %bb.2: # %entry371; MIPS64-NEXT: jr $ra372; MIPS64-NEXT: nop373;374; MIPS64R2-LABEL: AtomicLoadAnd:375; MIPS64R2: # %bb.0: # %entry376; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd)))377; MIPS64R2-NEXT: daddu $1, $1, $25378; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd)))379; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)380; MIPS64R2-NEXT: .LBB2_1: # %entry381; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1382; MIPS64R2-NEXT: lld $2, 0($1)383; MIPS64R2-NEXT: and $3, $2, $4384; MIPS64R2-NEXT: scd $3, 0($1)385; MIPS64R2-NEXT: beqz $3, .LBB2_1386; MIPS64R2-NEXT: nop387; MIPS64R2-NEXT: # %bb.2: # %entry388; MIPS64R2-NEXT: jr $ra389; MIPS64R2-NEXT: nop390;391; MIPS64R6-LABEL: AtomicLoadAnd:392; MIPS64R6: # %bb.0: # %entry393; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd)))394; MIPS64R6-NEXT: daddu $1, $1, $25395; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd)))396; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)397; MIPS64R6-NEXT: .LBB2_1: # %entry398; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1399; MIPS64R6-NEXT: lld $2, 0($1)400; MIPS64R6-NEXT: and $3, $2, $4401; MIPS64R6-NEXT: scd $3, 0($1)402; MIPS64R6-NEXT: beqzc $3, .LBB2_1403; MIPS64R6-NEXT: nop404; MIPS64R6-NEXT: # %bb.2: # %entry405; MIPS64R6-NEXT: jrc $ra406;407; MIPS64R6O0-LABEL: AtomicLoadAnd:408; MIPS64R6O0: # %bb.0: # %entry409; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd)))410; MIPS64R6O0-NEXT: daddu $1, $1, $25411; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd)))412; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)413; MIPS64R6O0-NEXT: .LBB2_1: # %entry414; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1415; MIPS64R6O0-NEXT: lld $2, 0($3)416; MIPS64R6O0-NEXT: and $1, $2, $4417; MIPS64R6O0-NEXT: scd $1, 0($3)418; MIPS64R6O0-NEXT: beqzc $1, .LBB2_1419; MIPS64R6O0-NEXT: nop420; MIPS64R6O0-NEXT: # %bb.2: # %entry421; MIPS64R6O0-NEXT: jrc $ra422;423; O1-LABEL: AtomicLoadAnd:424; O1: # %bb.0: # %entry425; O1-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd)))426; O1-NEXT: daddu $1, $1, $25427; O1-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd)))428; O1-NEXT: ld $1, %got_disp(x)($1)429; O1-NEXT: .LBB2_1: # %entry430; O1-NEXT: # =>This Inner Loop Header: Depth=1431; O1-NEXT: lld $2, 0($1)432; O1-NEXT: and $3, $2, $4433; O1-NEXT: scd $3, 0($1)434; O1-NEXT: beqz $3, .LBB2_1435; O1-NEXT: nop436; O1-NEXT: # %bb.2: # %entry437; O1-NEXT: jr $ra438; O1-NEXT: nop439;440; O2-LABEL: AtomicLoadAnd:441; O2: # %bb.0: # %entry442; O2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd)))443; O2-NEXT: daddu $1, $1, $25444; O2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd)))445; O2-NEXT: ld $1, %got_disp(x)($1)446; O2-NEXT: .LBB2_1: # %entry447; O2-NEXT: # =>This Inner Loop Header: Depth=1448; O2-NEXT: lld $2, 0($1)449; O2-NEXT: and $3, $2, $4450; O2-NEXT: scd $3, 0($1)451; O2-NEXT: beqz $3, .LBB2_1452; O2-NEXT: nop453; O2-NEXT: # %bb.2: # %entry454; O2-NEXT: jr $ra455; O2-NEXT: nop456;457; O3-LABEL: AtomicLoadAnd:458; O3: # %bb.0: # %entry459; O3-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd)))460; O3-NEXT: daddu $1, $1, $25461; O3-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd)))462; O3-NEXT: ld $1, %got_disp(x)($1)463; O3-NEXT: .LBB2_1: # %entry464; O3-NEXT: # =>This Inner Loop Header: Depth=1465; O3-NEXT: lld $2, 0($1)466; O3-NEXT: and $3, $2, $4467; O3-NEXT: scd $3, 0($1)468; O3-NEXT: beqz $3, .LBB2_1469; O3-NEXT: nop470; O3-NEXT: # %bb.2: # %entry471; O3-NEXT: jr $ra472; O3-NEXT: nop473;474; MIPS64EB-LABEL: AtomicLoadAnd:475; MIPS64EB: # %bb.0: # %entry476; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadAnd)))477; MIPS64EB-NEXT: daddu $1, $1, $25478; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadAnd)))479; MIPS64EB-NEXT: ld $1, %got_disp(x)($1)480; MIPS64EB-NEXT: .LBB2_1: # %entry481; MIPS64EB-NEXT: # =>This Inner Loop Header: Depth=1482; MIPS64EB-NEXT: lld $2, 0($1)483; MIPS64EB-NEXT: and $3, $2, $4484; MIPS64EB-NEXT: scd $3, 0($1)485; MIPS64EB-NEXT: beqz $3, .LBB2_1486; MIPS64EB-NEXT: nop487; MIPS64EB-NEXT: # %bb.2: # %entry488; MIPS64EB-NEXT: jr $ra489; MIPS64EB-NEXT: nop490entry:491 %0 = atomicrmw and ptr @x, i64 %incr monotonic492 ret i64 %0493 494}495 496define i64 @AtomicLoadOr(i64 signext %incr) nounwind {497; MIPS4-LABEL: AtomicLoadOr:498; MIPS4: # %bb.0: # %entry499; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr)))500; MIPS4-NEXT: daddu $1, $1, $25501; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr)))502; MIPS4-NEXT: ld $1, %got_disp(x)($1)503; MIPS4-NEXT: .LBB3_1: # %entry504; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1505; MIPS4-NEXT: lld $2, 0($1)506; MIPS4-NEXT: or $3, $2, $4507; MIPS4-NEXT: scd $3, 0($1)508; MIPS4-NEXT: beqz $3, .LBB3_1509; MIPS4-NEXT: nop510; MIPS4-NEXT: # %bb.2: # %entry511; MIPS4-NEXT: jr $ra512; MIPS4-NEXT: nop513;514; MIPS64-LABEL: AtomicLoadOr:515; MIPS64: # %bb.0: # %entry516; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr)))517; MIPS64-NEXT: daddu $1, $1, $25518; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr)))519; MIPS64-NEXT: ld $1, %got_disp(x)($1)520; MIPS64-NEXT: .LBB3_1: # %entry521; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1522; MIPS64-NEXT: lld $2, 0($1)523; MIPS64-NEXT: or $3, $2, $4524; MIPS64-NEXT: scd $3, 0($1)525; MIPS64-NEXT: beqz $3, .LBB3_1526; MIPS64-NEXT: nop527; MIPS64-NEXT: # %bb.2: # %entry528; MIPS64-NEXT: jr $ra529; MIPS64-NEXT: nop530;531; MIPS64R2-LABEL: AtomicLoadOr:532; MIPS64R2: # %bb.0: # %entry533; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr)))534; MIPS64R2-NEXT: daddu $1, $1, $25535; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr)))536; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)537; MIPS64R2-NEXT: .LBB3_1: # %entry538; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1539; MIPS64R2-NEXT: lld $2, 0($1)540; MIPS64R2-NEXT: or $3, $2, $4541; MIPS64R2-NEXT: scd $3, 0($1)542; MIPS64R2-NEXT: beqz $3, .LBB3_1543; MIPS64R2-NEXT: nop544; MIPS64R2-NEXT: # %bb.2: # %entry545; MIPS64R2-NEXT: jr $ra546; MIPS64R2-NEXT: nop547;548; MIPS64R6-LABEL: AtomicLoadOr:549; MIPS64R6: # %bb.0: # %entry550; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr)))551; MIPS64R6-NEXT: daddu $1, $1, $25552; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr)))553; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)554; MIPS64R6-NEXT: .LBB3_1: # %entry555; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1556; MIPS64R6-NEXT: lld $2, 0($1)557; MIPS64R6-NEXT: or $3, $2, $4558; MIPS64R6-NEXT: scd $3, 0($1)559; MIPS64R6-NEXT: beqzc $3, .LBB3_1560; MIPS64R6-NEXT: nop561; MIPS64R6-NEXT: # %bb.2: # %entry562; MIPS64R6-NEXT: jrc $ra563;564; MIPS64R6O0-LABEL: AtomicLoadOr:565; MIPS64R6O0: # %bb.0: # %entry566; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr)))567; MIPS64R6O0-NEXT: daddu $1, $1, $25568; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr)))569; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)570; MIPS64R6O0-NEXT: .LBB3_1: # %entry571; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1572; MIPS64R6O0-NEXT: lld $2, 0($3)573; MIPS64R6O0-NEXT: or $1, $2, $4574; MIPS64R6O0-NEXT: scd $1, 0($3)575; MIPS64R6O0-NEXT: beqzc $1, .LBB3_1576; MIPS64R6O0-NEXT: nop577; MIPS64R6O0-NEXT: # %bb.2: # %entry578; MIPS64R6O0-NEXT: jrc $ra579;580; O1-LABEL: AtomicLoadOr:581; O1: # %bb.0: # %entry582; O1-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr)))583; O1-NEXT: daddu $1, $1, $25584; O1-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr)))585; O1-NEXT: ld $1, %got_disp(x)($1)586; O1-NEXT: .LBB3_1: # %entry587; O1-NEXT: # =>This Inner Loop Header: Depth=1588; O1-NEXT: lld $2, 0($1)589; O1-NEXT: or $3, $2, $4590; O1-NEXT: scd $3, 0($1)591; O1-NEXT: beqz $3, .LBB3_1592; O1-NEXT: nop593; O1-NEXT: # %bb.2: # %entry594; O1-NEXT: jr $ra595; O1-NEXT: nop596;597; O2-LABEL: AtomicLoadOr:598; O2: # %bb.0: # %entry599; O2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr)))600; O2-NEXT: daddu $1, $1, $25601; O2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr)))602; O2-NEXT: ld $1, %got_disp(x)($1)603; O2-NEXT: .LBB3_1: # %entry604; O2-NEXT: # =>This Inner Loop Header: Depth=1605; O2-NEXT: lld $2, 0($1)606; O2-NEXT: or $3, $2, $4607; O2-NEXT: scd $3, 0($1)608; O2-NEXT: beqz $3, .LBB3_1609; O2-NEXT: nop610; O2-NEXT: # %bb.2: # %entry611; O2-NEXT: jr $ra612; O2-NEXT: nop613;614; O3-LABEL: AtomicLoadOr:615; O3: # %bb.0: # %entry616; O3-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr)))617; O3-NEXT: daddu $1, $1, $25618; O3-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr)))619; O3-NEXT: ld $1, %got_disp(x)($1)620; O3-NEXT: .LBB3_1: # %entry621; O3-NEXT: # =>This Inner Loop Header: Depth=1622; O3-NEXT: lld $2, 0($1)623; O3-NEXT: or $3, $2, $4624; O3-NEXT: scd $3, 0($1)625; O3-NEXT: beqz $3, .LBB3_1626; O3-NEXT: nop627; O3-NEXT: # %bb.2: # %entry628; O3-NEXT: jr $ra629; O3-NEXT: nop630;631; MIPS64EB-LABEL: AtomicLoadOr:632; MIPS64EB: # %bb.0: # %entry633; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadOr)))634; MIPS64EB-NEXT: daddu $1, $1, $25635; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadOr)))636; MIPS64EB-NEXT: ld $1, %got_disp(x)($1)637; MIPS64EB-NEXT: .LBB3_1: # %entry638; MIPS64EB-NEXT: # =>This Inner Loop Header: Depth=1639; MIPS64EB-NEXT: lld $2, 0($1)640; MIPS64EB-NEXT: or $3, $2, $4641; MIPS64EB-NEXT: scd $3, 0($1)642; MIPS64EB-NEXT: beqz $3, .LBB3_1643; MIPS64EB-NEXT: nop644; MIPS64EB-NEXT: # %bb.2: # %entry645; MIPS64EB-NEXT: jr $ra646; MIPS64EB-NEXT: nop647entry:648 %0 = atomicrmw or ptr @x, i64 %incr monotonic649 ret i64 %0650 651}652 653define i64 @AtomicLoadXor(i64 signext %incr) nounwind {654; MIPS4-LABEL: AtomicLoadXor:655; MIPS4: # %bb.0: # %entry656; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor)))657; MIPS4-NEXT: daddu $1, $1, $25658; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor)))659; MIPS4-NEXT: ld $1, %got_disp(x)($1)660; MIPS4-NEXT: .LBB4_1: # %entry661; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1662; MIPS4-NEXT: lld $2, 0($1)663; MIPS4-NEXT: xor $3, $2, $4664; MIPS4-NEXT: scd $3, 0($1)665; MIPS4-NEXT: beqz $3, .LBB4_1666; MIPS4-NEXT: nop667; MIPS4-NEXT: # %bb.2: # %entry668; MIPS4-NEXT: jr $ra669; MIPS4-NEXT: nop670;671; MIPS64-LABEL: AtomicLoadXor:672; MIPS64: # %bb.0: # %entry673; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor)))674; MIPS64-NEXT: daddu $1, $1, $25675; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor)))676; MIPS64-NEXT: ld $1, %got_disp(x)($1)677; MIPS64-NEXT: .LBB4_1: # %entry678; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1679; MIPS64-NEXT: lld $2, 0($1)680; MIPS64-NEXT: xor $3, $2, $4681; MIPS64-NEXT: scd $3, 0($1)682; MIPS64-NEXT: beqz $3, .LBB4_1683; MIPS64-NEXT: nop684; MIPS64-NEXT: # %bb.2: # %entry685; MIPS64-NEXT: jr $ra686; MIPS64-NEXT: nop687;688; MIPS64R2-LABEL: AtomicLoadXor:689; MIPS64R2: # %bb.0: # %entry690; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor)))691; MIPS64R2-NEXT: daddu $1, $1, $25692; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor)))693; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)694; MIPS64R2-NEXT: .LBB4_1: # %entry695; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1696; MIPS64R2-NEXT: lld $2, 0($1)697; MIPS64R2-NEXT: xor $3, $2, $4698; MIPS64R2-NEXT: scd $3, 0($1)699; MIPS64R2-NEXT: beqz $3, .LBB4_1700; MIPS64R2-NEXT: nop701; MIPS64R2-NEXT: # %bb.2: # %entry702; MIPS64R2-NEXT: jr $ra703; MIPS64R2-NEXT: nop704;705; MIPS64R6-LABEL: AtomicLoadXor:706; MIPS64R6: # %bb.0: # %entry707; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor)))708; MIPS64R6-NEXT: daddu $1, $1, $25709; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor)))710; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)711; MIPS64R6-NEXT: .LBB4_1: # %entry712; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1713; MIPS64R6-NEXT: lld $2, 0($1)714; MIPS64R6-NEXT: xor $3, $2, $4715; MIPS64R6-NEXT: scd $3, 0($1)716; MIPS64R6-NEXT: beqzc $3, .LBB4_1717; MIPS64R6-NEXT: nop718; MIPS64R6-NEXT: # %bb.2: # %entry719; MIPS64R6-NEXT: jrc $ra720;721; MIPS64R6O0-LABEL: AtomicLoadXor:722; MIPS64R6O0: # %bb.0: # %entry723; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor)))724; MIPS64R6O0-NEXT: daddu $1, $1, $25725; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor)))726; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)727; MIPS64R6O0-NEXT: .LBB4_1: # %entry728; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1729; MIPS64R6O0-NEXT: lld $2, 0($3)730; MIPS64R6O0-NEXT: xor $1, $2, $4731; MIPS64R6O0-NEXT: scd $1, 0($3)732; MIPS64R6O0-NEXT: beqzc $1, .LBB4_1733; MIPS64R6O0-NEXT: nop734; MIPS64R6O0-NEXT: # %bb.2: # %entry735; MIPS64R6O0-NEXT: jrc $ra736;737; O1-LABEL: AtomicLoadXor:738; O1: # %bb.0: # %entry739; O1-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor)))740; O1-NEXT: daddu $1, $1, $25741; O1-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor)))742; O1-NEXT: ld $1, %got_disp(x)($1)743; O1-NEXT: .LBB4_1: # %entry744; O1-NEXT: # =>This Inner Loop Header: Depth=1745; O1-NEXT: lld $2, 0($1)746; O1-NEXT: xor $3, $2, $4747; O1-NEXT: scd $3, 0($1)748; O1-NEXT: beqz $3, .LBB4_1749; O1-NEXT: nop750; O1-NEXT: # %bb.2: # %entry751; O1-NEXT: jr $ra752; O1-NEXT: nop753;754; O2-LABEL: AtomicLoadXor:755; O2: # %bb.0: # %entry756; O2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor)))757; O2-NEXT: daddu $1, $1, $25758; O2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor)))759; O2-NEXT: ld $1, %got_disp(x)($1)760; O2-NEXT: .LBB4_1: # %entry761; O2-NEXT: # =>This Inner Loop Header: Depth=1762; O2-NEXT: lld $2, 0($1)763; O2-NEXT: xor $3, $2, $4764; O2-NEXT: scd $3, 0($1)765; O2-NEXT: beqz $3, .LBB4_1766; O2-NEXT: nop767; O2-NEXT: # %bb.2: # %entry768; O2-NEXT: jr $ra769; O2-NEXT: nop770;771; O3-LABEL: AtomicLoadXor:772; O3: # %bb.0: # %entry773; O3-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor)))774; O3-NEXT: daddu $1, $1, $25775; O3-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor)))776; O3-NEXT: ld $1, %got_disp(x)($1)777; O3-NEXT: .LBB4_1: # %entry778; O3-NEXT: # =>This Inner Loop Header: Depth=1779; O3-NEXT: lld $2, 0($1)780; O3-NEXT: xor $3, $2, $4781; O3-NEXT: scd $3, 0($1)782; O3-NEXT: beqz $3, .LBB4_1783; O3-NEXT: nop784; O3-NEXT: # %bb.2: # %entry785; O3-NEXT: jr $ra786; O3-NEXT: nop787;788; MIPS64EB-LABEL: AtomicLoadXor:789; MIPS64EB: # %bb.0: # %entry790; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadXor)))791; MIPS64EB-NEXT: daddu $1, $1, $25792; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadXor)))793; MIPS64EB-NEXT: ld $1, %got_disp(x)($1)794; MIPS64EB-NEXT: .LBB4_1: # %entry795; MIPS64EB-NEXT: # =>This Inner Loop Header: Depth=1796; MIPS64EB-NEXT: lld $2, 0($1)797; MIPS64EB-NEXT: xor $3, $2, $4798; MIPS64EB-NEXT: scd $3, 0($1)799; MIPS64EB-NEXT: beqz $3, .LBB4_1800; MIPS64EB-NEXT: nop801; MIPS64EB-NEXT: # %bb.2: # %entry802; MIPS64EB-NEXT: jr $ra803; MIPS64EB-NEXT: nop804entry:805 %0 = atomicrmw xor ptr @x, i64 %incr monotonic806 ret i64 %0807 808}809 810define i64 @AtomicLoadNand(i64 signext %incr) nounwind {811; MIPS4-LABEL: AtomicLoadNand:812; MIPS4: # %bb.0: # %entry813; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand)))814; MIPS4-NEXT: daddu $1, $1, $25815; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand)))816; MIPS4-NEXT: ld $1, %got_disp(x)($1)817; MIPS4-NEXT: .LBB5_1: # %entry818; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1819; MIPS4-NEXT: lld $2, 0($1)820; MIPS4-NEXT: and $3, $2, $4821; MIPS4-NEXT: nor $3, $zero, $3822; MIPS4-NEXT: scd $3, 0($1)823; MIPS4-NEXT: beqz $3, .LBB5_1824; MIPS4-NEXT: nop825; MIPS4-NEXT: # %bb.2: # %entry826; MIPS4-NEXT: jr $ra827; MIPS4-NEXT: nop828;829; MIPS64-LABEL: AtomicLoadNand:830; MIPS64: # %bb.0: # %entry831; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand)))832; MIPS64-NEXT: daddu $1, $1, $25833; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand)))834; MIPS64-NEXT: ld $1, %got_disp(x)($1)835; MIPS64-NEXT: .LBB5_1: # %entry836; MIPS64-NEXT: # =>This Inner Loop Header: Depth=1837; MIPS64-NEXT: lld $2, 0($1)838; MIPS64-NEXT: and $3, $2, $4839; MIPS64-NEXT: nor $3, $zero, $3840; MIPS64-NEXT: scd $3, 0($1)841; MIPS64-NEXT: beqz $3, .LBB5_1842; MIPS64-NEXT: nop843; MIPS64-NEXT: # %bb.2: # %entry844; MIPS64-NEXT: jr $ra845; MIPS64-NEXT: nop846;847; MIPS64R2-LABEL: AtomicLoadNand:848; MIPS64R2: # %bb.0: # %entry849; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand)))850; MIPS64R2-NEXT: daddu $1, $1, $25851; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand)))852; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)853; MIPS64R2-NEXT: .LBB5_1: # %entry854; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=1855; MIPS64R2-NEXT: lld $2, 0($1)856; MIPS64R2-NEXT: and $3, $2, $4857; MIPS64R2-NEXT: nor $3, $zero, $3858; MIPS64R2-NEXT: scd $3, 0($1)859; MIPS64R2-NEXT: beqz $3, .LBB5_1860; MIPS64R2-NEXT: nop861; MIPS64R2-NEXT: # %bb.2: # %entry862; MIPS64R2-NEXT: jr $ra863; MIPS64R2-NEXT: nop864;865; MIPS64R6-LABEL: AtomicLoadNand:866; MIPS64R6: # %bb.0: # %entry867; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand)))868; MIPS64R6-NEXT: daddu $1, $1, $25869; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand)))870; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)871; MIPS64R6-NEXT: .LBB5_1: # %entry872; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=1873; MIPS64R6-NEXT: lld $2, 0($1)874; MIPS64R6-NEXT: and $3, $2, $4875; MIPS64R6-NEXT: nor $3, $zero, $3876; MIPS64R6-NEXT: scd $3, 0($1)877; MIPS64R6-NEXT: beqzc $3, .LBB5_1878; MIPS64R6-NEXT: nop879; MIPS64R6-NEXT: # %bb.2: # %entry880; MIPS64R6-NEXT: jrc $ra881;882; MIPS64R6O0-LABEL: AtomicLoadNand:883; MIPS64R6O0: # %bb.0: # %entry884; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand)))885; MIPS64R6O0-NEXT: daddu $1, $1, $25886; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand)))887; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)888; MIPS64R6O0-NEXT: .LBB5_1: # %entry889; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=1890; MIPS64R6O0-NEXT: lld $2, 0($3)891; MIPS64R6O0-NEXT: and $1, $2, $4892; MIPS64R6O0-NEXT: nor $1, $zero, $1893; MIPS64R6O0-NEXT: scd $1, 0($3)894; MIPS64R6O0-NEXT: beqzc $1, .LBB5_1895; MIPS64R6O0-NEXT: nop896; MIPS64R6O0-NEXT: # %bb.2: # %entry897; MIPS64R6O0-NEXT: jrc $ra898;899; O1-LABEL: AtomicLoadNand:900; O1: # %bb.0: # %entry901; O1-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand)))902; O1-NEXT: daddu $1, $1, $25903; O1-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand)))904; O1-NEXT: ld $1, %got_disp(x)($1)905; O1-NEXT: .LBB5_1: # %entry906; O1-NEXT: # =>This Inner Loop Header: Depth=1907; O1-NEXT: lld $2, 0($1)908; O1-NEXT: and $3, $2, $4909; O1-NEXT: nor $3, $zero, $3910; O1-NEXT: scd $3, 0($1)911; O1-NEXT: beqz $3, .LBB5_1912; O1-NEXT: nop913; O1-NEXT: # %bb.2: # %entry914; O1-NEXT: jr $ra915; O1-NEXT: nop916;917; O2-LABEL: AtomicLoadNand:918; O2: # %bb.0: # %entry919; O2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand)))920; O2-NEXT: daddu $1, $1, $25921; O2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand)))922; O2-NEXT: ld $1, %got_disp(x)($1)923; O2-NEXT: .LBB5_1: # %entry924; O2-NEXT: # =>This Inner Loop Header: Depth=1925; O2-NEXT: lld $2, 0($1)926; O2-NEXT: and $3, $2, $4927; O2-NEXT: nor $3, $zero, $3928; O2-NEXT: scd $3, 0($1)929; O2-NEXT: beqz $3, .LBB5_1930; O2-NEXT: nop931; O2-NEXT: # %bb.2: # %entry932; O2-NEXT: jr $ra933; O2-NEXT: nop934;935; O3-LABEL: AtomicLoadNand:936; O3: # %bb.0: # %entry937; O3-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand)))938; O3-NEXT: daddu $1, $1, $25939; O3-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand)))940; O3-NEXT: ld $1, %got_disp(x)($1)941; O3-NEXT: .LBB5_1: # %entry942; O3-NEXT: # =>This Inner Loop Header: Depth=1943; O3-NEXT: lld $2, 0($1)944; O3-NEXT: and $3, $2, $4945; O3-NEXT: nor $3, $zero, $3946; O3-NEXT: scd $3, 0($1)947; O3-NEXT: beqz $3, .LBB5_1948; O3-NEXT: nop949; O3-NEXT: # %bb.2: # %entry950; O3-NEXT: jr $ra951; O3-NEXT: nop952;953; MIPS64EB-LABEL: AtomicLoadNand:954; MIPS64EB: # %bb.0: # %entry955; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicLoadNand)))956; MIPS64EB-NEXT: daddu $1, $1, $25957; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicLoadNand)))958; MIPS64EB-NEXT: ld $1, %got_disp(x)($1)959; MIPS64EB-NEXT: .LBB5_1: # %entry960; MIPS64EB-NEXT: # =>This Inner Loop Header: Depth=1961; MIPS64EB-NEXT: lld $2, 0($1)962; MIPS64EB-NEXT: and $3, $2, $4963; MIPS64EB-NEXT: nor $3, $zero, $3964; MIPS64EB-NEXT: scd $3, 0($1)965; MIPS64EB-NEXT: beqz $3, .LBB5_1966; MIPS64EB-NEXT: nop967; MIPS64EB-NEXT: # %bb.2: # %entry968; MIPS64EB-NEXT: jr $ra969; MIPS64EB-NEXT: nop970entry:971 %0 = atomicrmw nand ptr @x, i64 %incr monotonic972 ret i64 %0973 974}975 976define i64 @AtomicSwap64(i64 signext %newval) nounwind {977; MIPS4-LABEL: AtomicSwap64:978; MIPS4: # %bb.0: # %entry979; MIPS4-NEXT: daddiu $sp, $sp, -16980; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap64)))981; MIPS4-NEXT: daddu $1, $1, $25982; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap64)))983; MIPS4-NEXT: sd $4, 8($sp)984; MIPS4-NEXT: ld $1, %got_disp(x)($1)985; MIPS4-NEXT: .LBB6_1: # %entry986; MIPS4-NEXT: # =>This Inner Loop Header: Depth=1987; MIPS4-NEXT: lld $2, 0($1)988; MIPS4-NEXT: move $3, $4989; MIPS4-NEXT: scd $3, 0($1)990; MIPS4-NEXT: beqz $3, .LBB6_1991; MIPS4-NEXT: nop992; MIPS4-NEXT: # %bb.2: # %entry993; MIPS4-NEXT: jr $ra994; MIPS4-NEXT: daddiu $sp, $sp, 16995;996; MIPS64-LABEL: AtomicSwap64:997; MIPS64: # %bb.0: # %entry998; MIPS64-NEXT: daddiu $sp, $sp, -16999; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap64)))1000; MIPS64-NEXT: daddu $1, $1, $251001; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap64)))1002; MIPS64-NEXT: sd $4, 8($sp)1003; MIPS64-NEXT: ld $1, %got_disp(x)($1)1004; MIPS64-NEXT: .LBB6_1: # %entry1005; MIPS64-NEXT: # =>This Inner Loop Header: Depth=11006; MIPS64-NEXT: lld $2, 0($1)1007; MIPS64-NEXT: move $3, $41008; MIPS64-NEXT: scd $3, 0($1)1009; MIPS64-NEXT: beqz $3, .LBB6_11010; MIPS64-NEXT: nop1011; MIPS64-NEXT: # %bb.2: # %entry1012; MIPS64-NEXT: jr $ra1013; MIPS64-NEXT: daddiu $sp, $sp, 161014;1015; MIPS64R2-LABEL: AtomicSwap64:1016; MIPS64R2: # %bb.0: # %entry1017; MIPS64R2-NEXT: daddiu $sp, $sp, -161018; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap64)))1019; MIPS64R2-NEXT: daddu $1, $1, $251020; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap64)))1021; MIPS64R2-NEXT: sd $4, 8($sp)1022; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)1023; MIPS64R2-NEXT: .LBB6_1: # %entry1024; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=11025; MIPS64R2-NEXT: lld $2, 0($1)1026; MIPS64R2-NEXT: move $3, $41027; MIPS64R2-NEXT: scd $3, 0($1)1028; MIPS64R2-NEXT: beqz $3, .LBB6_11029; MIPS64R2-NEXT: nop1030; MIPS64R2-NEXT: # %bb.2: # %entry1031; MIPS64R2-NEXT: jr $ra1032; MIPS64R2-NEXT: daddiu $sp, $sp, 161033;1034; MIPS64R6-LABEL: AtomicSwap64:1035; MIPS64R6: # %bb.0: # %entry1036; MIPS64R6-NEXT: daddiu $sp, $sp, -161037; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap64)))1038; MIPS64R6-NEXT: daddu $1, $1, $251039; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap64)))1040; MIPS64R6-NEXT: sd $4, 8($sp)1041; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)1042; MIPS64R6-NEXT: .LBB6_1: # %entry1043; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=11044; MIPS64R6-NEXT: lld $2, 0($1)1045; MIPS64R6-NEXT: move $3, $41046; MIPS64R6-NEXT: scd $3, 0($1)1047; MIPS64R6-NEXT: beqzc $3, .LBB6_11048; MIPS64R6-NEXT: nop1049; MIPS64R6-NEXT: # %bb.2: # %entry1050; MIPS64R6-NEXT: jr $ra1051; MIPS64R6-NEXT: daddiu $sp, $sp, 161052;1053; MIPS64R6O0-LABEL: AtomicSwap64:1054; MIPS64R6O0: # %bb.0: # %entry1055; MIPS64R6O0-NEXT: daddiu $sp, $sp, -161056; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap64)))1057; MIPS64R6O0-NEXT: daddu $1, $1, $251058; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap64)))1059; MIPS64R6O0-NEXT: sd $4, 8($sp)1060; MIPS64R6O0-NEXT: ld $4, 8($sp)1061; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)1062; MIPS64R6O0-NEXT: .LBB6_1: # %entry1063; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=11064; MIPS64R6O0-NEXT: lld $2, 0($3)1065; MIPS64R6O0-NEXT: move $1, $41066; MIPS64R6O0-NEXT: scd $1, 0($3)1067; MIPS64R6O0-NEXT: beqzc $1, .LBB6_11068; MIPS64R6O0-NEXT: # %bb.2: # %entry1069; MIPS64R6O0-NEXT: daddiu $sp, $sp, 161070; MIPS64R6O0-NEXT: jrc $ra1071;1072; O1-LABEL: AtomicSwap64:1073; O1: # %bb.0: # %entry1074; O1-NEXT: daddiu $sp, $sp, -161075; O1-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap64)))1076; O1-NEXT: daddu $1, $1, $251077; O1-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap64)))1078; O1-NEXT: sd $4, 8($sp)1079; O1-NEXT: ld $1, %got_disp(x)($1)1080; O1-NEXT: .LBB6_1: # %entry1081; O1-NEXT: # =>This Inner Loop Header: Depth=11082; O1-NEXT: lld $2, 0($1)1083; O1-NEXT: move $3, $41084; O1-NEXT: scd $3, 0($1)1085; O1-NEXT: beqz $3, .LBB6_11086; O1-NEXT: nop1087; O1-NEXT: # %bb.2: # %entry1088; O1-NEXT: jr $ra1089; O1-NEXT: daddiu $sp, $sp, 161090;1091; O2-LABEL: AtomicSwap64:1092; O2: # %bb.0: # %entry1093; O2-NEXT: daddiu $sp, $sp, -161094; O2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap64)))1095; O2-NEXT: daddu $1, $1, $251096; O2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap64)))1097; O2-NEXT: sd $4, 8($sp)1098; O2-NEXT: ld $1, %got_disp(x)($1)1099; O2-NEXT: .LBB6_1: # %entry1100; O2-NEXT: # =>This Inner Loop Header: Depth=11101; O2-NEXT: lld $2, 0($1)1102; O2-NEXT: move $3, $41103; O2-NEXT: scd $3, 0($1)1104; O2-NEXT: beqz $3, .LBB6_11105; O2-NEXT: nop1106; O2-NEXT: # %bb.2: # %entry1107; O2-NEXT: jr $ra1108; O2-NEXT: daddiu $sp, $sp, 161109;1110; O3-LABEL: AtomicSwap64:1111; O3: # %bb.0: # %entry1112; O3-NEXT: daddiu $sp, $sp, -161113; O3-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap64)))1114; O3-NEXT: sd $4, 8($sp)1115; O3-NEXT: daddu $1, $1, $251116; O3-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap64)))1117; O3-NEXT: ld $1, %got_disp(x)($1)1118; O3-NEXT: .LBB6_1: # %entry1119; O3-NEXT: # =>This Inner Loop Header: Depth=11120; O3-NEXT: lld $2, 0($1)1121; O3-NEXT: move $3, $41122; O3-NEXT: scd $3, 0($1)1123; O3-NEXT: beqz $3, .LBB6_11124; O3-NEXT: nop1125; O3-NEXT: # %bb.2: # %entry1126; O3-NEXT: jr $ra1127; O3-NEXT: daddiu $sp, $sp, 161128;1129; MIPS64EB-LABEL: AtomicSwap64:1130; MIPS64EB: # %bb.0: # %entry1131; MIPS64EB-NEXT: daddiu $sp, $sp, -161132; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicSwap64)))1133; MIPS64EB-NEXT: daddu $1, $1, $251134; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicSwap64)))1135; MIPS64EB-NEXT: sd $4, 8($sp)1136; MIPS64EB-NEXT: ld $1, %got_disp(x)($1)1137; MIPS64EB-NEXT: .LBB6_1: # %entry1138; MIPS64EB-NEXT: # =>This Inner Loop Header: Depth=11139; MIPS64EB-NEXT: lld $2, 0($1)1140; MIPS64EB-NEXT: move $3, $41141; MIPS64EB-NEXT: scd $3, 0($1)1142; MIPS64EB-NEXT: beqz $3, .LBB6_11143; MIPS64EB-NEXT: nop1144; MIPS64EB-NEXT: # %bb.2: # %entry1145; MIPS64EB-NEXT: jr $ra1146; MIPS64EB-NEXT: daddiu $sp, $sp, 161147entry:1148 %newval.addr = alloca i64, align 81149 store i64 %newval, ptr %newval.addr, align 41150 %tmp = load i64, ptr %newval.addr, align 41151 %0 = atomicrmw xchg ptr @x, i64 %tmp monotonic1152 ret i64 %01153 1154}1155 1156define i64 @AtomicCmpSwap64(i64 signext %oldval, i64 signext %newval) nounwind {1157; MIPS4-LABEL: AtomicCmpSwap64:1158; MIPS4: # %bb.0: # %entry1159; MIPS4-NEXT: daddiu $sp, $sp, -161160; MIPS4-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap64)))1161; MIPS4-NEXT: daddu $1, $1, $251162; MIPS4-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap64)))1163; MIPS4-NEXT: sd $5, 8($sp)1164; MIPS4-NEXT: ld $1, %got_disp(x)($1)1165; MIPS4-NEXT: .LBB7_1: # %entry1166; MIPS4-NEXT: # =>This Inner Loop Header: Depth=11167; MIPS4-NEXT: lld $2, 0($1)1168; MIPS4-NEXT: bne $2, $4, .LBB7_31169; MIPS4-NEXT: nop1170; MIPS4-NEXT: # %bb.2: # %entry1171; MIPS4-NEXT: # in Loop: Header=BB7_1 Depth=11172; MIPS4-NEXT: move $3, $51173; MIPS4-NEXT: scd $3, 0($1)1174; MIPS4-NEXT: beqz $3, .LBB7_11175; MIPS4-NEXT: nop1176; MIPS4-NEXT: .LBB7_3: # %entry1177; MIPS4-NEXT: jr $ra1178; MIPS4-NEXT: daddiu $sp, $sp, 161179;1180; MIPS64-LABEL: AtomicCmpSwap64:1181; MIPS64: # %bb.0: # %entry1182; MIPS64-NEXT: daddiu $sp, $sp, -161183; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap64)))1184; MIPS64-NEXT: daddu $1, $1, $251185; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap64)))1186; MIPS64-NEXT: sd $5, 8($sp)1187; MIPS64-NEXT: ld $1, %got_disp(x)($1)1188; MIPS64-NEXT: .LBB7_1: # %entry1189; MIPS64-NEXT: # =>This Inner Loop Header: Depth=11190; MIPS64-NEXT: lld $2, 0($1)1191; MIPS64-NEXT: bne $2, $4, .LBB7_31192; MIPS64-NEXT: nop1193; MIPS64-NEXT: # %bb.2: # %entry1194; MIPS64-NEXT: # in Loop: Header=BB7_1 Depth=11195; MIPS64-NEXT: move $3, $51196; MIPS64-NEXT: scd $3, 0($1)1197; MIPS64-NEXT: beqz $3, .LBB7_11198; MIPS64-NEXT: nop1199; MIPS64-NEXT: .LBB7_3: # %entry1200; MIPS64-NEXT: jr $ra1201; MIPS64-NEXT: daddiu $sp, $sp, 161202;1203; MIPS64R2-LABEL: AtomicCmpSwap64:1204; MIPS64R2: # %bb.0: # %entry1205; MIPS64R2-NEXT: daddiu $sp, $sp, -161206; MIPS64R2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap64)))1207; MIPS64R2-NEXT: daddu $1, $1, $251208; MIPS64R2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap64)))1209; MIPS64R2-NEXT: sd $5, 8($sp)1210; MIPS64R2-NEXT: ld $1, %got_disp(x)($1)1211; MIPS64R2-NEXT: .LBB7_1: # %entry1212; MIPS64R2-NEXT: # =>This Inner Loop Header: Depth=11213; MIPS64R2-NEXT: lld $2, 0($1)1214; MIPS64R2-NEXT: bne $2, $4, .LBB7_31215; MIPS64R2-NEXT: nop1216; MIPS64R2-NEXT: # %bb.2: # %entry1217; MIPS64R2-NEXT: # in Loop: Header=BB7_1 Depth=11218; MIPS64R2-NEXT: move $3, $51219; MIPS64R2-NEXT: scd $3, 0($1)1220; MIPS64R2-NEXT: beqz $3, .LBB7_11221; MIPS64R2-NEXT: nop1222; MIPS64R2-NEXT: .LBB7_3: # %entry1223; MIPS64R2-NEXT: jr $ra1224; MIPS64R2-NEXT: daddiu $sp, $sp, 161225;1226; MIPS64R6-LABEL: AtomicCmpSwap64:1227; MIPS64R6: # %bb.0: # %entry1228; MIPS64R6-NEXT: daddiu $sp, $sp, -161229; MIPS64R6-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap64)))1230; MIPS64R6-NEXT: daddu $1, $1, $251231; MIPS64R6-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap64)))1232; MIPS64R6-NEXT: sd $5, 8($sp)1233; MIPS64R6-NEXT: ld $1, %got_disp(x)($1)1234; MIPS64R6-NEXT: .LBB7_1: # %entry1235; MIPS64R6-NEXT: # =>This Inner Loop Header: Depth=11236; MIPS64R6-NEXT: lld $2, 0($1)1237; MIPS64R6-NEXT: bnec $2, $4, .LBB7_31238; MIPS64R6-NEXT: # %bb.2: # %entry1239; MIPS64R6-NEXT: # in Loop: Header=BB7_1 Depth=11240; MIPS64R6-NEXT: move $3, $51241; MIPS64R6-NEXT: scd $3, 0($1)1242; MIPS64R6-NEXT: beqzc $3, .LBB7_11243; MIPS64R6-NEXT: nop1244; MIPS64R6-NEXT: .LBB7_3: # %entry1245; MIPS64R6-NEXT: jr $ra1246; MIPS64R6-NEXT: daddiu $sp, $sp, 161247;1248; MIPS64R6O0-LABEL: AtomicCmpSwap64:1249; MIPS64R6O0: # %bb.0: # %entry1250; MIPS64R6O0-NEXT: daddiu $sp, $sp, -161251; MIPS64R6O0-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap64)))1252; MIPS64R6O0-NEXT: daddu $1, $1, $251253; MIPS64R6O0-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap64)))1254; MIPS64R6O0-NEXT: sd $5, 8($sp)1255; MIPS64R6O0-NEXT: ld $5, 8($sp)1256; MIPS64R6O0-NEXT: ld $3, %got_disp(x)($1)1257; MIPS64R6O0-NEXT: .LBB7_1: # %entry1258; MIPS64R6O0-NEXT: # =>This Inner Loop Header: Depth=11259; MIPS64R6O0-NEXT: lld $2, 0($3)1260; MIPS64R6O0-NEXT: bnec $2, $4, .LBB7_31261; MIPS64R6O0-NEXT: # %bb.2: # %entry1262; MIPS64R6O0-NEXT: # in Loop: Header=BB7_1 Depth=11263; MIPS64R6O0-NEXT: move $1, $51264; MIPS64R6O0-NEXT: scd $1, 0($3)1265; MIPS64R6O0-NEXT: beqzc $1, .LBB7_11266; MIPS64R6O0-NEXT: .LBB7_3: # %entry1267; MIPS64R6O0-NEXT: daddiu $sp, $sp, 161268; MIPS64R6O0-NEXT: jrc $ra1269;1270; O1-LABEL: AtomicCmpSwap64:1271; O1: # %bb.0: # %entry1272; O1-NEXT: daddiu $sp, $sp, -161273; O1-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap64)))1274; O1-NEXT: daddu $1, $1, $251275; O1-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap64)))1276; O1-NEXT: sd $5, 8($sp)1277; O1-NEXT: ld $1, %got_disp(x)($1)1278; O1-NEXT: .LBB7_1: # %entry1279; O1-NEXT: # =>This Inner Loop Header: Depth=11280; O1-NEXT: lld $2, 0($1)1281; O1-NEXT: bne $2, $4, .LBB7_31282; O1-NEXT: nop1283; O1-NEXT: # %bb.2: # %entry1284; O1-NEXT: # in Loop: Header=BB7_1 Depth=11285; O1-NEXT: move $3, $51286; O1-NEXT: scd $3, 0($1)1287; O1-NEXT: beqz $3, .LBB7_11288; O1-NEXT: nop1289; O1-NEXT: .LBB7_3: # %entry1290; O1-NEXT: jr $ra1291; O1-NEXT: daddiu $sp, $sp, 161292;1293; O2-LABEL: AtomicCmpSwap64:1294; O2: # %bb.0: # %entry1295; O2-NEXT: daddiu $sp, $sp, -161296; O2-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap64)))1297; O2-NEXT: daddu $1, $1, $251298; O2-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap64)))1299; O2-NEXT: sd $5, 8($sp)1300; O2-NEXT: ld $1, %got_disp(x)($1)1301; O2-NEXT: .LBB7_1: # %entry1302; O2-NEXT: # =>This Inner Loop Header: Depth=11303; O2-NEXT: lld $2, 0($1)1304; O2-NEXT: bne $2, $4, .LBB7_31305; O2-NEXT: nop1306; O2-NEXT: # %bb.2: # %entry1307; O2-NEXT: # in Loop: Header=BB7_1 Depth=11308; O2-NEXT: move $3, $51309; O2-NEXT: scd $3, 0($1)1310; O2-NEXT: beqz $3, .LBB7_11311; O2-NEXT: nop1312; O2-NEXT: .LBB7_3: # %entry1313; O2-NEXT: jr $ra1314; O2-NEXT: daddiu $sp, $sp, 161315;1316; O3-LABEL: AtomicCmpSwap64:1317; O3: # %bb.0: # %entry1318; O3-NEXT: daddiu $sp, $sp, -161319; O3-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap64)))1320; O3-NEXT: sd $5, 8($sp)1321; O3-NEXT: daddu $1, $1, $251322; O3-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap64)))1323; O3-NEXT: ld $1, %got_disp(x)($1)1324; O3-NEXT: .LBB7_1: # %entry1325; O3-NEXT: # =>This Inner Loop Header: Depth=11326; O3-NEXT: lld $2, 0($1)1327; O3-NEXT: bne $2, $4, .LBB7_31328; O3-NEXT: nop1329; O3-NEXT: # %bb.2: # %entry1330; O3-NEXT: # in Loop: Header=BB7_1 Depth=11331; O3-NEXT: move $3, $51332; O3-NEXT: scd $3, 0($1)1333; O3-NEXT: beqz $3, .LBB7_11334; O3-NEXT: nop1335; O3-NEXT: .LBB7_3: # %entry1336; O3-NEXT: jr $ra1337; O3-NEXT: daddiu $sp, $sp, 161338;1339; MIPS64EB-LABEL: AtomicCmpSwap64:1340; MIPS64EB: # %bb.0: # %entry1341; MIPS64EB-NEXT: daddiu $sp, $sp, -161342; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(AtomicCmpSwap64)))1343; MIPS64EB-NEXT: daddu $1, $1, $251344; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(AtomicCmpSwap64)))1345; MIPS64EB-NEXT: sd $5, 8($sp)1346; MIPS64EB-NEXT: ld $1, %got_disp(x)($1)1347; MIPS64EB-NEXT: .LBB7_1: # %entry1348; MIPS64EB-NEXT: # =>This Inner Loop Header: Depth=11349; MIPS64EB-NEXT: lld $2, 0($1)1350; MIPS64EB-NEXT: bne $2, $4, .LBB7_31351; MIPS64EB-NEXT: nop1352; MIPS64EB-NEXT: # %bb.2: # %entry1353; MIPS64EB-NEXT: # in Loop: Header=BB7_1 Depth=11354; MIPS64EB-NEXT: move $3, $51355; MIPS64EB-NEXT: scd $3, 0($1)1356; MIPS64EB-NEXT: beqz $3, .LBB7_11357; MIPS64EB-NEXT: nop1358; MIPS64EB-NEXT: .LBB7_3: # %entry1359; MIPS64EB-NEXT: jr $ra1360; MIPS64EB-NEXT: daddiu $sp, $sp, 161361entry:1362 %newval.addr = alloca i64, align 81363 store i64 %newval, ptr %newval.addr, align 41364 %tmp = load i64, ptr %newval.addr, align 41365 %0 = cmpxchg ptr @x, i64 %oldval, i64 %tmp monotonic monotonic1366 %1 = extractvalue { i64, i1 } %0, 01367 ret i64 %11368 1369}1370