brintos

brintos / llvm-project-archived public Read only

0
0
Text · 271.0 KiB · cfc3a99 Raw
9807 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=powerpc64le-linux-gnu < %s | FileCheck %s -check-prefix=PPC64LE3 4define i8 @test0(ptr %ptr) {5; PPC64LE-LABEL: test0:6; PPC64LE:       # %bb.0:7; PPC64LE-NEXT:    lbz 3, 0(3)8; PPC64LE-NEXT:    blr9  %val = load atomic i8, ptr %ptr unordered, align 110  ret i8 %val11}12 13define i8 @test1(ptr %ptr) {14; PPC64LE-LABEL: test1:15; PPC64LE:       # %bb.0:16; PPC64LE-NEXT:    lbz 3, 0(3)17; PPC64LE-NEXT:    blr18  %val = load atomic i8, ptr %ptr monotonic, align 119  ret i8 %val20}21 22define i8 @test2(ptr %ptr) {23; PPC64LE-LABEL: test2:24; PPC64LE:       # %bb.0:25; PPC64LE-NEXT:    lbz 3, 0(3)26; PPC64LE-NEXT:    cmpd 7, 3, 327; PPC64LE-NEXT:    bne- 7, .+428; PPC64LE-NEXT:    isync29; PPC64LE-NEXT:    blr30  %val = load atomic i8, ptr %ptr acquire, align 131  ret i8 %val32}33 34define i8 @test3(ptr %ptr) {35; PPC64LE-LABEL: test3:36; PPC64LE:       # %bb.0:37; PPC64LE-NEXT:    sync38; PPC64LE-NEXT:    lbz 3, 0(3)39; PPC64LE-NEXT:    cmpd 7, 3, 340; PPC64LE-NEXT:    bne- 7, .+441; PPC64LE-NEXT:    isync42; PPC64LE-NEXT:    blr43  %val = load atomic i8, ptr %ptr seq_cst, align 144  ret i8 %val45}46 47define i16 @test4(ptr %ptr) {48; PPC64LE-LABEL: test4:49; PPC64LE:       # %bb.0:50; PPC64LE-NEXT:    lhz 3, 0(3)51; PPC64LE-NEXT:    blr52  %val = load atomic i16, ptr %ptr unordered, align 253  ret i16 %val54}55 56define i16 @test5(ptr %ptr) {57; PPC64LE-LABEL: test5:58; PPC64LE:       # %bb.0:59; PPC64LE-NEXT:    lhz 3, 0(3)60; PPC64LE-NEXT:    blr61  %val = load atomic i16, ptr %ptr monotonic, align 262  ret i16 %val63}64 65define i16 @test6(ptr %ptr) {66; PPC64LE-LABEL: test6:67; PPC64LE:       # %bb.0:68; PPC64LE-NEXT:    lhz 3, 0(3)69; PPC64LE-NEXT:    cmpd 7, 3, 370; PPC64LE-NEXT:    bne- 7, .+471; PPC64LE-NEXT:    isync72; PPC64LE-NEXT:    blr73  %val = load atomic i16, ptr %ptr acquire, align 274  ret i16 %val75}76 77define i16 @test7(ptr %ptr) {78; PPC64LE-LABEL: test7:79; PPC64LE:       # %bb.0:80; PPC64LE-NEXT:    sync81; PPC64LE-NEXT:    lhz 3, 0(3)82; PPC64LE-NEXT:    cmpd 7, 3, 383; PPC64LE-NEXT:    bne- 7, .+484; PPC64LE-NEXT:    isync85; PPC64LE-NEXT:    blr86  %val = load atomic i16, ptr %ptr seq_cst, align 287  ret i16 %val88}89 90define i32 @test8(ptr %ptr) {91; PPC64LE-LABEL: test8:92; PPC64LE:       # %bb.0:93; PPC64LE-NEXT:    lwz 3, 0(3)94; PPC64LE-NEXT:    blr95  %val = load atomic i32, ptr %ptr unordered, align 496  ret i32 %val97}98 99define i32 @test9(ptr %ptr) {100; PPC64LE-LABEL: test9:101; PPC64LE:       # %bb.0:102; PPC64LE-NEXT:    lwz 3, 0(3)103; PPC64LE-NEXT:    blr104  %val = load atomic i32, ptr %ptr monotonic, align 4105  ret i32 %val106}107 108define i32 @test10(ptr %ptr) {109; PPC64LE-LABEL: test10:110; PPC64LE:       # %bb.0:111; PPC64LE-NEXT:    lwz 3, 0(3)112; PPC64LE-NEXT:    cmpd 7, 3, 3113; PPC64LE-NEXT:    bne- 7, .+4114; PPC64LE-NEXT:    isync115; PPC64LE-NEXT:    blr116  %val = load atomic i32, ptr %ptr acquire, align 4117  ret i32 %val118}119 120define i32 @test11(ptr %ptr) {121; PPC64LE-LABEL: test11:122; PPC64LE:       # %bb.0:123; PPC64LE-NEXT:    sync124; PPC64LE-NEXT:    lwz 3, 0(3)125; PPC64LE-NEXT:    cmpd 7, 3, 3126; PPC64LE-NEXT:    bne- 7, .+4127; PPC64LE-NEXT:    isync128; PPC64LE-NEXT:    blr129  %val = load atomic i32, ptr %ptr seq_cst, align 4130  ret i32 %val131}132 133define i64 @test12(ptr %ptr) {134; PPC64LE-LABEL: test12:135; PPC64LE:       # %bb.0:136; PPC64LE-NEXT:    ld 3, 0(3)137; PPC64LE-NEXT:    blr138  %val = load atomic i64, ptr %ptr unordered, align 8139  ret i64 %val140}141 142define i64 @test13(ptr %ptr) {143; PPC64LE-LABEL: test13:144; PPC64LE:       # %bb.0:145; PPC64LE-NEXT:    ld 3, 0(3)146; PPC64LE-NEXT:    blr147  %val = load atomic i64, ptr %ptr monotonic, align 8148  ret i64 %val149}150 151define i64 @test14(ptr %ptr) {152; PPC64LE-LABEL: test14:153; PPC64LE:       # %bb.0:154; PPC64LE-NEXT:    ld 3, 0(3)155; PPC64LE-NEXT:    cmpd 7, 3, 3156; PPC64LE-NEXT:    bne- 7, .+4157; PPC64LE-NEXT:    isync158; PPC64LE-NEXT:    blr159  %val = load atomic i64, ptr %ptr acquire, align 8160  ret i64 %val161}162 163define i64 @test15(ptr %ptr) {164; PPC64LE-LABEL: test15:165; PPC64LE:       # %bb.0:166; PPC64LE-NEXT:    sync167; PPC64LE-NEXT:    ld 3, 0(3)168; PPC64LE-NEXT:    cmpd 7, 3, 3169; PPC64LE-NEXT:    bne- 7, .+4170; PPC64LE-NEXT:    isync171; PPC64LE-NEXT:    blr172  %val = load atomic i64, ptr %ptr seq_cst, align 8173  ret i64 %val174}175 176define void @test16(ptr %ptr, i8 %val) {177; PPC64LE-LABEL: test16:178; PPC64LE:       # %bb.0:179; PPC64LE-NEXT:    stb 4, 0(3)180; PPC64LE-NEXT:    blr181  store atomic i8 %val, ptr %ptr unordered, align 1182  ret void183}184 185define void @test17(ptr %ptr, i8 %val) {186; PPC64LE-LABEL: test17:187; PPC64LE:       # %bb.0:188; PPC64LE-NEXT:    stb 4, 0(3)189; PPC64LE-NEXT:    blr190  store atomic i8 %val, ptr %ptr monotonic, align 1191  ret void192}193 194define void @test18(ptr %ptr, i8 %val) {195; PPC64LE-LABEL: test18:196; PPC64LE:       # %bb.0:197; PPC64LE-NEXT:    lwsync198; PPC64LE-NEXT:    stb 4, 0(3)199; PPC64LE-NEXT:    blr200  store atomic i8 %val, ptr %ptr release, align 1201  ret void202}203 204define void @test19(ptr %ptr, i8 %val) {205; PPC64LE-LABEL: test19:206; PPC64LE:       # %bb.0:207; PPC64LE-NEXT:    sync208; PPC64LE-NEXT:    stb 4, 0(3)209; PPC64LE-NEXT:    blr210  store atomic i8 %val, ptr %ptr seq_cst, align 1211  ret void212}213 214define void @test20(ptr %ptr, i16 %val) {215; PPC64LE-LABEL: test20:216; PPC64LE:       # %bb.0:217; PPC64LE-NEXT:    sth 4, 0(3)218; PPC64LE-NEXT:    blr219  store atomic i16 %val, ptr %ptr unordered, align 2220  ret void221}222 223define void @test21(ptr %ptr, i16 %val) {224; PPC64LE-LABEL: test21:225; PPC64LE:       # %bb.0:226; PPC64LE-NEXT:    sth 4, 0(3)227; PPC64LE-NEXT:    blr228  store atomic i16 %val, ptr %ptr monotonic, align 2229  ret void230}231 232define void @test22(ptr %ptr, i16 %val) {233; PPC64LE-LABEL: test22:234; PPC64LE:       # %bb.0:235; PPC64LE-NEXT:    lwsync236; PPC64LE-NEXT:    sth 4, 0(3)237; PPC64LE-NEXT:    blr238  store atomic i16 %val, ptr %ptr release, align 2239  ret void240}241 242define void @test23(ptr %ptr, i16 %val) {243; PPC64LE-LABEL: test23:244; PPC64LE:       # %bb.0:245; PPC64LE-NEXT:    sync246; PPC64LE-NEXT:    sth 4, 0(3)247; PPC64LE-NEXT:    blr248  store atomic i16 %val, ptr %ptr seq_cst, align 2249  ret void250}251 252define void @test24(ptr %ptr, i32 %val) {253; PPC64LE-LABEL: test24:254; PPC64LE:       # %bb.0:255; PPC64LE-NEXT:    stw 4, 0(3)256; PPC64LE-NEXT:    blr257  store atomic i32 %val, ptr %ptr unordered, align 4258  ret void259}260 261define void @test25(ptr %ptr, i32 %val) {262; PPC64LE-LABEL: test25:263; PPC64LE:       # %bb.0:264; PPC64LE-NEXT:    stw 4, 0(3)265; PPC64LE-NEXT:    blr266  store atomic i32 %val, ptr %ptr monotonic, align 4267  ret void268}269 270define void @test26(ptr %ptr, i32 %val) {271; PPC64LE-LABEL: test26:272; PPC64LE:       # %bb.0:273; PPC64LE-NEXT:    lwsync274; PPC64LE-NEXT:    stw 4, 0(3)275; PPC64LE-NEXT:    blr276  store atomic i32 %val, ptr %ptr release, align 4277  ret void278}279 280define void @test27(ptr %ptr, i32 %val) {281; PPC64LE-LABEL: test27:282; PPC64LE:       # %bb.0:283; PPC64LE-NEXT:    sync284; PPC64LE-NEXT:    stw 4, 0(3)285; PPC64LE-NEXT:    blr286  store atomic i32 %val, ptr %ptr seq_cst, align 4287  ret void288}289 290define void @test28(ptr %ptr, i64 %val) {291; PPC64LE-LABEL: test28:292; PPC64LE:       # %bb.0:293; PPC64LE-NEXT:    std 4, 0(3)294; PPC64LE-NEXT:    blr295  store atomic i64 %val, ptr %ptr unordered, align 8296  ret void297}298 299define void @test29(ptr %ptr, i64 %val) {300; PPC64LE-LABEL: test29:301; PPC64LE:       # %bb.0:302; PPC64LE-NEXT:    std 4, 0(3)303; PPC64LE-NEXT:    blr304  store atomic i64 %val, ptr %ptr monotonic, align 8305  ret void306}307 308define void @test30(ptr %ptr, i64 %val) {309; PPC64LE-LABEL: test30:310; PPC64LE:       # %bb.0:311; PPC64LE-NEXT:    lwsync312; PPC64LE-NEXT:    std 4, 0(3)313; PPC64LE-NEXT:    blr314  store atomic i64 %val, ptr %ptr release, align 8315  ret void316}317 318define void @test31(ptr %ptr, i64 %val) {319; PPC64LE-LABEL: test31:320; PPC64LE:       # %bb.0:321; PPC64LE-NEXT:    sync322; PPC64LE-NEXT:    std 4, 0(3)323; PPC64LE-NEXT:    blr324  store atomic i64 %val, ptr %ptr seq_cst, align 8325  ret void326}327 328define void @test32() {329; PPC64LE-LABEL: test32:330; PPC64LE:       # %bb.0:331; PPC64LE-NEXT:    lwsync332; PPC64LE-NEXT:    blr333  fence acquire334  ret void335}336 337define void @test33() {338; PPC64LE-LABEL: test33:339; PPC64LE:       # %bb.0:340; PPC64LE-NEXT:    lwsync341; PPC64LE-NEXT:    blr342  fence release343  ret void344}345 346define void @test34() {347; PPC64LE-LABEL: test34:348; PPC64LE:       # %bb.0:349; PPC64LE-NEXT:    lwsync350; PPC64LE-NEXT:    blr351  fence acq_rel352  ret void353}354 355define void @test35() {356; PPC64LE-LABEL: test35:357; PPC64LE:       # %bb.0:358; PPC64LE-NEXT:    sync359; PPC64LE-NEXT:    blr360  fence seq_cst361  ret void362}363 364define void @test36() {365; PPC64LE-LABEL: test36:366; PPC64LE:       # %bb.0:367; PPC64LE-NEXT:    lwsync368; PPC64LE-NEXT:    blr369  fence syncscope("singlethread") acquire370  ret void371}372 373define void @test37() {374; PPC64LE-LABEL: test37:375; PPC64LE:       # %bb.0:376; PPC64LE-NEXT:    lwsync377; PPC64LE-NEXT:    blr378  fence syncscope("singlethread") release379  ret void380}381 382define void @test38() {383; PPC64LE-LABEL: test38:384; PPC64LE:       # %bb.0:385; PPC64LE-NEXT:    lwsync386; PPC64LE-NEXT:    blr387  fence syncscope("singlethread") acq_rel388  ret void389}390 391define void @test39() {392; PPC64LE-LABEL: test39:393; PPC64LE:       # %bb.0:394; PPC64LE-NEXT:    sync395; PPC64LE-NEXT:    blr396  fence syncscope("singlethread") seq_cst397  ret void398}399 400define void @test40(ptr %ptr, i8 %cmp, i8 %val) {401; PPC64LE-LABEL: test40:402; PPC64LE:       # %bb.0:403; PPC64LE-NEXT:    clrlwi 5, 5, 24404; PPC64LE-NEXT:    clrlwi 4, 4, 24405; PPC64LE-NEXT:  .LBB40_1: # %cmpxchg.start406; PPC64LE-NEXT:    #407; PPC64LE-NEXT:    lbarx 6, 0, 3408; PPC64LE-NEXT:    cmplw 6, 4409; PPC64LE-NEXT:    bnelr- 0410; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore411; PPC64LE-NEXT:    #412; PPC64LE-NEXT:    stbcx. 5, 0, 3413; PPC64LE-NEXT:    bne- 0, .LBB40_1414; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.end415; PPC64LE-NEXT:    blr416  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val monotonic monotonic417  ret void418}419 420define void @test41(ptr %ptr, i8 %cmp, i8 %val) {421; PPC64LE-LABEL: test41:422; PPC64LE:       # %bb.0:423; PPC64LE-NEXT:    clrlwi 5, 5, 24424; PPC64LE-NEXT:    clrlwi 4, 4, 24425; PPC64LE-NEXT:  .LBB41_1: # %cmpxchg.start426; PPC64LE-NEXT:    #427; PPC64LE-NEXT:    lbarx 6, 0, 3428; PPC64LE-NEXT:    cmplw 6, 4429; PPC64LE-NEXT:    bnelr- 0430; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore431; PPC64LE-NEXT:    #432; PPC64LE-NEXT:    stbcx. 5, 0, 3433; PPC64LE-NEXT:    bne- 0, .LBB41_1434; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.success435; PPC64LE-NEXT:    lwsync436; PPC64LE-NEXT:    blr437  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acquire monotonic438  ret void439}440 441define void @test42(ptr %ptr, i8 %cmp, i8 %val) {442; PPC64LE-LABEL: test42:443; PPC64LE:       # %bb.0:444; PPC64LE-NEXT:    clrlwi 5, 5, 24445; PPC64LE-NEXT:    clrlwi 4, 4, 24446; PPC64LE-NEXT:  .LBB42_1: # %cmpxchg.start447; PPC64LE-NEXT:    #448; PPC64LE-NEXT:    lbarx 6, 0, 3449; PPC64LE-NEXT:    cmplw 6, 4450; PPC64LE-NEXT:    bne- 0, .LBB42_3451; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore452; PPC64LE-NEXT:    #453; PPC64LE-NEXT:    stbcx. 5, 0, 3454; PPC64LE-NEXT:    bne- 0, .LBB42_1455; PPC64LE-NEXT:  .LBB42_3: # %cmpxchg.nostore456; PPC64LE-NEXT:    lwsync457; PPC64LE-NEXT:    blr458  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acquire acquire459  ret void460}461 462define void @test43(ptr %ptr, i8 %cmp, i8 %val) {463; PPC64LE-LABEL: test43:464; PPC64LE:       # %bb.0: # %cmpxchg.start465; PPC64LE-NEXT:    lbarx 6, 0, 3466; PPC64LE-NEXT:    clrlwi 4, 4, 24467; PPC64LE-NEXT:    cmplw 6, 4468; PPC64LE-NEXT:    bnelr- 0469; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore470; PPC64LE-NEXT:    lwsync471; PPC64LE-NEXT:    clrlwi 5, 5, 24472; PPC64LE-NEXT:    .p2align 5473; PPC64LE-NEXT:  .LBB43_2: # %cmpxchg.trystore474; PPC64LE-NEXT:    #475; PPC64LE-NEXT:    stbcx. 5, 0, 3476; PPC64LE-NEXT:    beqlr+ 0477; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload478; PPC64LE-NEXT:    #479; PPC64LE-NEXT:    lbarx 6, 0, 3480; PPC64LE-NEXT:    cmplw 6, 4481; PPC64LE-NEXT:    beq+ 0, .LBB43_2482; PPC64LE-NEXT:    blr483  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val release monotonic484  ret void485}486 487define void @test44(ptr %ptr, i8 %cmp, i8 %val) {488; PPC64LE-LABEL: test44:489; PPC64LE:       # %bb.0: # %cmpxchg.start490; PPC64LE-NEXT:    lbarx 6, 0, 3491; PPC64LE-NEXT:    clrlwi 4, 4, 24492; PPC64LE-NEXT:    cmplw 6, 4493; PPC64LE-NEXT:    bne- 0, .LBB44_4494; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore495; PPC64LE-NEXT:    lwsync496; PPC64LE-NEXT:    clrlwi 5, 5, 24497; PPC64LE-NEXT:    .p2align 5498; PPC64LE-NEXT:  .LBB44_2: # %cmpxchg.trystore499; PPC64LE-NEXT:    #500; PPC64LE-NEXT:    stbcx. 5, 0, 3501; PPC64LE-NEXT:    beqlr+ 0502; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload503; PPC64LE-NEXT:    #504; PPC64LE-NEXT:    lbarx 6, 0, 3505; PPC64LE-NEXT:    cmplw 6, 4506; PPC64LE-NEXT:    beq+ 0, .LBB44_2507; PPC64LE-NEXT:  .LBB44_4: # %cmpxchg.nostore508; PPC64LE-NEXT:    lwsync509; PPC64LE-NEXT:    blr510  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val release acquire511  ret void512}513 514define void @test45(ptr %ptr, i8 %cmp, i8 %val) {515; PPC64LE-LABEL: test45:516; PPC64LE:       # %bb.0: # %cmpxchg.start517; PPC64LE-NEXT:    lbarx 6, 0, 3518; PPC64LE-NEXT:    clrlwi 4, 4, 24519; PPC64LE-NEXT:    cmplw 6, 4520; PPC64LE-NEXT:    bnelr- 0521; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore522; PPC64LE-NEXT:    lwsync523; PPC64LE-NEXT:    clrlwi 5, 5, 24524; PPC64LE-NEXT:  .LBB45_2: # %cmpxchg.trystore525; PPC64LE-NEXT:    #526; PPC64LE-NEXT:    stbcx. 5, 0, 3527; PPC64LE-NEXT:    beq+ 0, .LBB45_4528; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload529; PPC64LE-NEXT:    #530; PPC64LE-NEXT:    lbarx 6, 0, 3531; PPC64LE-NEXT:    cmplw 6, 4532; PPC64LE-NEXT:    beq+ 0, .LBB45_2533; PPC64LE-NEXT:    blr534; PPC64LE-NEXT:  .LBB45_4: # %cmpxchg.success535; PPC64LE-NEXT:    lwsync536; PPC64LE-NEXT:    blr537  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acq_rel monotonic538  ret void539}540 541define void @test46(ptr %ptr, i8 %cmp, i8 %val) {542; PPC64LE-LABEL: test46:543; PPC64LE:       # %bb.0: # %cmpxchg.start544; PPC64LE-NEXT:    lbarx 6, 0, 3545; PPC64LE-NEXT:    clrlwi 4, 4, 24546; PPC64LE-NEXT:    cmplw 6, 4547; PPC64LE-NEXT:    bne- 0, .LBB46_4548; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore549; PPC64LE-NEXT:    lwsync550; PPC64LE-NEXT:    clrlwi 5, 5, 24551; PPC64LE-NEXT:  .LBB46_2: # %cmpxchg.trystore552; PPC64LE-NEXT:    #553; PPC64LE-NEXT:    stbcx. 5, 0, 3554; PPC64LE-NEXT:    beq+ 0, .LBB46_4555; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload556; PPC64LE-NEXT:    #557; PPC64LE-NEXT:    lbarx 6, 0, 3558; PPC64LE-NEXT:    cmplw 6, 4559; PPC64LE-NEXT:    beq+ 0, .LBB46_2560; PPC64LE-NEXT:  .LBB46_4: # %cmpxchg.nostore561; PPC64LE-NEXT:    lwsync562; PPC64LE-NEXT:    blr563  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val acq_rel acquire564  ret void565}566 567define void @test47(ptr %ptr, i8 %cmp, i8 %val) {568; PPC64LE-LABEL: test47:569; PPC64LE:       # %bb.0: # %cmpxchg.start570; PPC64LE-NEXT:    lbarx 6, 0, 3571; PPC64LE-NEXT:    clrlwi 4, 4, 24572; PPC64LE-NEXT:    cmplw 6, 4573; PPC64LE-NEXT:    bnelr- 0574; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore575; PPC64LE-NEXT:    sync576; PPC64LE-NEXT:    clrlwi 5, 5, 24577; PPC64LE-NEXT:  .LBB47_2: # %cmpxchg.trystore578; PPC64LE-NEXT:    #579; PPC64LE-NEXT:    stbcx. 5, 0, 3580; PPC64LE-NEXT:    beq+ 0, .LBB47_4581; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload582; PPC64LE-NEXT:    #583; PPC64LE-NEXT:    lbarx 6, 0, 3584; PPC64LE-NEXT:    cmplw 6, 4585; PPC64LE-NEXT:    beq+ 0, .LBB47_2586; PPC64LE-NEXT:    blr587; PPC64LE-NEXT:  .LBB47_4: # %cmpxchg.success588; PPC64LE-NEXT:    lwsync589; PPC64LE-NEXT:    blr590  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val seq_cst monotonic591  ret void592}593 594define void @test48(ptr %ptr, i8 %cmp, i8 %val) {595; PPC64LE-LABEL: test48:596; PPC64LE:       # %bb.0: # %cmpxchg.start597; PPC64LE-NEXT:    lbarx 6, 0, 3598; PPC64LE-NEXT:    clrlwi 4, 4, 24599; PPC64LE-NEXT:    cmplw 6, 4600; PPC64LE-NEXT:    bne- 0, .LBB48_4601; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore602; PPC64LE-NEXT:    sync603; PPC64LE-NEXT:    clrlwi 5, 5, 24604; PPC64LE-NEXT:  .LBB48_2: # %cmpxchg.trystore605; PPC64LE-NEXT:    #606; PPC64LE-NEXT:    stbcx. 5, 0, 3607; PPC64LE-NEXT:    beq+ 0, .LBB48_4608; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload609; PPC64LE-NEXT:    #610; PPC64LE-NEXT:    lbarx 6, 0, 3611; PPC64LE-NEXT:    cmplw 6, 4612; PPC64LE-NEXT:    beq+ 0, .LBB48_2613; PPC64LE-NEXT:  .LBB48_4: # %cmpxchg.nostore614; PPC64LE-NEXT:    lwsync615; PPC64LE-NEXT:    blr616  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val seq_cst acquire617  ret void618}619 620define void @test49(ptr %ptr, i8 %cmp, i8 %val) {621; PPC64LE-LABEL: test49:622; PPC64LE:       # %bb.0: # %cmpxchg.start623; PPC64LE-NEXT:    lbarx 6, 0, 3624; PPC64LE-NEXT:    clrlwi 4, 4, 24625; PPC64LE-NEXT:    cmplw 6, 4626; PPC64LE-NEXT:    bne- 0, .LBB49_4627; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore628; PPC64LE-NEXT:    sync629; PPC64LE-NEXT:    clrlwi 5, 5, 24630; PPC64LE-NEXT:  .LBB49_2: # %cmpxchg.trystore631; PPC64LE-NEXT:    #632; PPC64LE-NEXT:    stbcx. 5, 0, 3633; PPC64LE-NEXT:    beq+ 0, .LBB49_4634; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload635; PPC64LE-NEXT:    #636; PPC64LE-NEXT:    lbarx 6, 0, 3637; PPC64LE-NEXT:    cmplw 6, 4638; PPC64LE-NEXT:    beq+ 0, .LBB49_2639; PPC64LE-NEXT:  .LBB49_4: # %cmpxchg.nostore640; PPC64LE-NEXT:    lwsync641; PPC64LE-NEXT:    blr642  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val seq_cst seq_cst643  ret void644}645 646define void @test50(ptr %ptr, i16 %cmp, i16 %val) {647; PPC64LE-LABEL: test50:648; PPC64LE:       # %bb.0:649; PPC64LE-NEXT:    clrlwi 5, 5, 16650; PPC64LE-NEXT:    clrlwi 4, 4, 16651; PPC64LE-NEXT:  .LBB50_1: # %cmpxchg.start652; PPC64LE-NEXT:    #653; PPC64LE-NEXT:    lharx 6, 0, 3654; PPC64LE-NEXT:    cmplw 6, 4655; PPC64LE-NEXT:    bnelr- 0656; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore657; PPC64LE-NEXT:    #658; PPC64LE-NEXT:    sthcx. 5, 0, 3659; PPC64LE-NEXT:    bne- 0, .LBB50_1660; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.end661; PPC64LE-NEXT:    blr662  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val monotonic monotonic663  ret void664}665 666define void @test51(ptr %ptr, i16 %cmp, i16 %val) {667; PPC64LE-LABEL: test51:668; PPC64LE:       # %bb.0:669; PPC64LE-NEXT:    clrlwi 5, 5, 16670; PPC64LE-NEXT:    clrlwi 4, 4, 16671; PPC64LE-NEXT:  .LBB51_1: # %cmpxchg.start672; PPC64LE-NEXT:    #673; PPC64LE-NEXT:    lharx 6, 0, 3674; PPC64LE-NEXT:    cmplw 6, 4675; PPC64LE-NEXT:    bnelr- 0676; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore677; PPC64LE-NEXT:    #678; PPC64LE-NEXT:    sthcx. 5, 0, 3679; PPC64LE-NEXT:    bne- 0, .LBB51_1680; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.success681; PPC64LE-NEXT:    lwsync682; PPC64LE-NEXT:    blr683  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acquire monotonic684  ret void685}686 687define void @test52(ptr %ptr, i16 %cmp, i16 %val) {688; PPC64LE-LABEL: test52:689; PPC64LE:       # %bb.0:690; PPC64LE-NEXT:    clrlwi 5, 5, 16691; PPC64LE-NEXT:    clrlwi 4, 4, 16692; PPC64LE-NEXT:  .LBB52_1: # %cmpxchg.start693; PPC64LE-NEXT:    #694; PPC64LE-NEXT:    lharx 6, 0, 3695; PPC64LE-NEXT:    cmplw 6, 4696; PPC64LE-NEXT:    bne- 0, .LBB52_3697; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore698; PPC64LE-NEXT:    #699; PPC64LE-NEXT:    sthcx. 5, 0, 3700; PPC64LE-NEXT:    bne- 0, .LBB52_1701; PPC64LE-NEXT:  .LBB52_3: # %cmpxchg.nostore702; PPC64LE-NEXT:    lwsync703; PPC64LE-NEXT:    blr704  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acquire acquire705  ret void706}707 708define void @test53(ptr %ptr, i16 %cmp, i16 %val) {709; PPC64LE-LABEL: test53:710; PPC64LE:       # %bb.0: # %cmpxchg.start711; PPC64LE-NEXT:    lharx 6, 0, 3712; PPC64LE-NEXT:    clrlwi 4, 4, 16713; PPC64LE-NEXT:    cmplw 6, 4714; PPC64LE-NEXT:    bnelr- 0715; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore716; PPC64LE-NEXT:    lwsync717; PPC64LE-NEXT:    clrlwi 5, 5, 16718; PPC64LE-NEXT:    .p2align 5719; PPC64LE-NEXT:  .LBB53_2: # %cmpxchg.trystore720; PPC64LE-NEXT:    #721; PPC64LE-NEXT:    sthcx. 5, 0, 3722; PPC64LE-NEXT:    beqlr+ 0723; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload724; PPC64LE-NEXT:    #725; PPC64LE-NEXT:    lharx 6, 0, 3726; PPC64LE-NEXT:    cmplw 6, 4727; PPC64LE-NEXT:    beq+ 0, .LBB53_2728; PPC64LE-NEXT:    blr729  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val release monotonic730  ret void731}732 733define void @test54(ptr %ptr, i16 %cmp, i16 %val) {734; PPC64LE-LABEL: test54:735; PPC64LE:       # %bb.0: # %cmpxchg.start736; PPC64LE-NEXT:    lharx 6, 0, 3737; PPC64LE-NEXT:    clrlwi 4, 4, 16738; PPC64LE-NEXT:    cmplw 6, 4739; PPC64LE-NEXT:    bne- 0, .LBB54_4740; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore741; PPC64LE-NEXT:    lwsync742; PPC64LE-NEXT:    clrlwi 5, 5, 16743; PPC64LE-NEXT:    .p2align 5744; PPC64LE-NEXT:  .LBB54_2: # %cmpxchg.trystore745; PPC64LE-NEXT:    #746; PPC64LE-NEXT:    sthcx. 5, 0, 3747; PPC64LE-NEXT:    beqlr+ 0748; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload749; PPC64LE-NEXT:    #750; PPC64LE-NEXT:    lharx 6, 0, 3751; PPC64LE-NEXT:    cmplw 6, 4752; PPC64LE-NEXT:    beq+ 0, .LBB54_2753; PPC64LE-NEXT:  .LBB54_4: # %cmpxchg.nostore754; PPC64LE-NEXT:    lwsync755; PPC64LE-NEXT:    blr756  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val release acquire757  ret void758}759 760define void @test55(ptr %ptr, i16 %cmp, i16 %val) {761; PPC64LE-LABEL: test55:762; PPC64LE:       # %bb.0: # %cmpxchg.start763; PPC64LE-NEXT:    lharx 6, 0, 3764; PPC64LE-NEXT:    clrlwi 4, 4, 16765; PPC64LE-NEXT:    cmplw 6, 4766; PPC64LE-NEXT:    bnelr- 0767; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore768; PPC64LE-NEXT:    lwsync769; PPC64LE-NEXT:    clrlwi 5, 5, 16770; PPC64LE-NEXT:  .LBB55_2: # %cmpxchg.trystore771; PPC64LE-NEXT:    #772; PPC64LE-NEXT:    sthcx. 5, 0, 3773; PPC64LE-NEXT:    beq+ 0, .LBB55_4774; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload775; PPC64LE-NEXT:    #776; PPC64LE-NEXT:    lharx 6, 0, 3777; PPC64LE-NEXT:    cmplw 6, 4778; PPC64LE-NEXT:    beq+ 0, .LBB55_2779; PPC64LE-NEXT:    blr780; PPC64LE-NEXT:  .LBB55_4: # %cmpxchg.success781; PPC64LE-NEXT:    lwsync782; PPC64LE-NEXT:    blr783  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acq_rel monotonic784  ret void785}786 787define void @test56(ptr %ptr, i16 %cmp, i16 %val) {788; PPC64LE-LABEL: test56:789; PPC64LE:       # %bb.0: # %cmpxchg.start790; PPC64LE-NEXT:    lharx 6, 0, 3791; PPC64LE-NEXT:    clrlwi 4, 4, 16792; PPC64LE-NEXT:    cmplw 6, 4793; PPC64LE-NEXT:    bne- 0, .LBB56_4794; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore795; PPC64LE-NEXT:    lwsync796; PPC64LE-NEXT:    clrlwi 5, 5, 16797; PPC64LE-NEXT:  .LBB56_2: # %cmpxchg.trystore798; PPC64LE-NEXT:    #799; PPC64LE-NEXT:    sthcx. 5, 0, 3800; PPC64LE-NEXT:    beq+ 0, .LBB56_4801; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload802; PPC64LE-NEXT:    #803; PPC64LE-NEXT:    lharx 6, 0, 3804; PPC64LE-NEXT:    cmplw 6, 4805; PPC64LE-NEXT:    beq+ 0, .LBB56_2806; PPC64LE-NEXT:  .LBB56_4: # %cmpxchg.nostore807; PPC64LE-NEXT:    lwsync808; PPC64LE-NEXT:    blr809  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val acq_rel acquire810  ret void811}812 813define void @test57(ptr %ptr, i16 %cmp, i16 %val) {814; PPC64LE-LABEL: test57:815; PPC64LE:       # %bb.0: # %cmpxchg.start816; PPC64LE-NEXT:    lharx 6, 0, 3817; PPC64LE-NEXT:    clrlwi 4, 4, 16818; PPC64LE-NEXT:    cmplw 6, 4819; PPC64LE-NEXT:    bnelr- 0820; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore821; PPC64LE-NEXT:    sync822; PPC64LE-NEXT:    clrlwi 5, 5, 16823; PPC64LE-NEXT:  .LBB57_2: # %cmpxchg.trystore824; PPC64LE-NEXT:    #825; PPC64LE-NEXT:    sthcx. 5, 0, 3826; PPC64LE-NEXT:    beq+ 0, .LBB57_4827; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload828; PPC64LE-NEXT:    #829; PPC64LE-NEXT:    lharx 6, 0, 3830; PPC64LE-NEXT:    cmplw 6, 4831; PPC64LE-NEXT:    beq+ 0, .LBB57_2832; PPC64LE-NEXT:    blr833; PPC64LE-NEXT:  .LBB57_4: # %cmpxchg.success834; PPC64LE-NEXT:    lwsync835; PPC64LE-NEXT:    blr836  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val seq_cst monotonic837  ret void838}839 840define void @test58(ptr %ptr, i16 %cmp, i16 %val) {841; PPC64LE-LABEL: test58:842; PPC64LE:       # %bb.0: # %cmpxchg.start843; PPC64LE-NEXT:    lharx 6, 0, 3844; PPC64LE-NEXT:    clrlwi 4, 4, 16845; PPC64LE-NEXT:    cmplw 6, 4846; PPC64LE-NEXT:    bne- 0, .LBB58_4847; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore848; PPC64LE-NEXT:    sync849; PPC64LE-NEXT:    clrlwi 5, 5, 16850; PPC64LE-NEXT:  .LBB58_2: # %cmpxchg.trystore851; PPC64LE-NEXT:    #852; PPC64LE-NEXT:    sthcx. 5, 0, 3853; PPC64LE-NEXT:    beq+ 0, .LBB58_4854; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload855; PPC64LE-NEXT:    #856; PPC64LE-NEXT:    lharx 6, 0, 3857; PPC64LE-NEXT:    cmplw 6, 4858; PPC64LE-NEXT:    beq+ 0, .LBB58_2859; PPC64LE-NEXT:  .LBB58_4: # %cmpxchg.nostore860; PPC64LE-NEXT:    lwsync861; PPC64LE-NEXT:    blr862  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val seq_cst acquire863  ret void864}865 866define void @test59(ptr %ptr, i16 %cmp, i16 %val) {867; PPC64LE-LABEL: test59:868; PPC64LE:       # %bb.0: # %cmpxchg.start869; PPC64LE-NEXT:    lharx 6, 0, 3870; PPC64LE-NEXT:    clrlwi 4, 4, 16871; PPC64LE-NEXT:    cmplw 6, 4872; PPC64LE-NEXT:    bne- 0, .LBB59_4873; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore874; PPC64LE-NEXT:    sync875; PPC64LE-NEXT:    clrlwi 5, 5, 16876; PPC64LE-NEXT:  .LBB59_2: # %cmpxchg.trystore877; PPC64LE-NEXT:    #878; PPC64LE-NEXT:    sthcx. 5, 0, 3879; PPC64LE-NEXT:    beq+ 0, .LBB59_4880; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload881; PPC64LE-NEXT:    #882; PPC64LE-NEXT:    lharx 6, 0, 3883; PPC64LE-NEXT:    cmplw 6, 4884; PPC64LE-NEXT:    beq+ 0, .LBB59_2885; PPC64LE-NEXT:  .LBB59_4: # %cmpxchg.nostore886; PPC64LE-NEXT:    lwsync887; PPC64LE-NEXT:    blr888  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val seq_cst seq_cst889  ret void890}891 892define void @test60(ptr %ptr, i32 %cmp, i32 %val) {893; PPC64LE-LABEL: test60:894; PPC64LE:       # %bb.0:895; PPC64LE-NEXT:  .LBB60_1: # %cmpxchg.start896; PPC64LE-NEXT:    #897; PPC64LE-NEXT:    lwarx 6, 0, 3898; PPC64LE-NEXT:    cmplw 6, 4899; PPC64LE-NEXT:    bnelr- 0900; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore901; PPC64LE-NEXT:    #902; PPC64LE-NEXT:    stwcx. 5, 0, 3903; PPC64LE-NEXT:    bne- 0, .LBB60_1904; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.end905; PPC64LE-NEXT:    blr906  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val monotonic monotonic907  ret void908}909 910define void @test61(ptr %ptr, i32 %cmp, i32 %val) {911; PPC64LE-LABEL: test61:912; PPC64LE:       # %bb.0:913; PPC64LE-NEXT:  .LBB61_1: # %cmpxchg.start914; PPC64LE-NEXT:    #915; PPC64LE-NEXT:    lwarx 6, 0, 3916; PPC64LE-NEXT:    cmplw 6, 4917; PPC64LE-NEXT:    bnelr- 0918; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore919; PPC64LE-NEXT:    #920; PPC64LE-NEXT:    stwcx. 5, 0, 3921; PPC64LE-NEXT:    bne- 0, .LBB61_1922; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.success923; PPC64LE-NEXT:    lwsync924; PPC64LE-NEXT:    blr925  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acquire monotonic926  ret void927}928 929define void @test62(ptr %ptr, i32 %cmp, i32 %val) {930; PPC64LE-LABEL: test62:931; PPC64LE:       # %bb.0:932; PPC64LE-NEXT:  .LBB62_1: # %cmpxchg.start933; PPC64LE-NEXT:    #934; PPC64LE-NEXT:    lwarx 6, 0, 3935; PPC64LE-NEXT:    cmplw 6, 4936; PPC64LE-NEXT:    bne- 0, .LBB62_3937; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore938; PPC64LE-NEXT:    #939; PPC64LE-NEXT:    stwcx. 5, 0, 3940; PPC64LE-NEXT:    bne- 0, .LBB62_1941; PPC64LE-NEXT:  .LBB62_3: # %cmpxchg.nostore942; PPC64LE-NEXT:    lwsync943; PPC64LE-NEXT:    blr944  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acquire acquire945  ret void946}947 948define void @test63(ptr %ptr, i32 %cmp, i32 %val) {949; PPC64LE-LABEL: test63:950; PPC64LE:       # %bb.0: # %cmpxchg.start951; PPC64LE-NEXT:    lwarx 6, 0, 3952; PPC64LE-NEXT:    cmplw 6, 4953; PPC64LE-NEXT:    bnelr- 0954; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore955; PPC64LE-NEXT:    lwsync956; PPC64LE-NEXT:    .p2align 5957; PPC64LE-NEXT:  .LBB63_2: # %cmpxchg.trystore958; PPC64LE-NEXT:    #959; PPC64LE-NEXT:    stwcx. 5, 0, 3960; PPC64LE-NEXT:    beqlr+ 0961; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload962; PPC64LE-NEXT:    #963; PPC64LE-NEXT:    lwarx 6, 0, 3964; PPC64LE-NEXT:    cmplw 6, 4965; PPC64LE-NEXT:    beq+ 0, .LBB63_2966; PPC64LE-NEXT:    blr967  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val release monotonic968  ret void969}970 971define void @test64(ptr %ptr, i32 %cmp, i32 %val) {972; PPC64LE-LABEL: test64:973; PPC64LE:       # %bb.0: # %cmpxchg.start974; PPC64LE-NEXT:    lwarx 6, 0, 3975; PPC64LE-NEXT:    cmplw 6, 4976; PPC64LE-NEXT:    bne- 0, .LBB64_4977; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore978; PPC64LE-NEXT:    lwsync979; PPC64LE-NEXT:    .p2align 5980; PPC64LE-NEXT:  .LBB64_2: # %cmpxchg.trystore981; PPC64LE-NEXT:    #982; PPC64LE-NEXT:    stwcx. 5, 0, 3983; PPC64LE-NEXT:    beqlr+ 0984; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload985; PPC64LE-NEXT:    #986; PPC64LE-NEXT:    lwarx 6, 0, 3987; PPC64LE-NEXT:    cmplw 6, 4988; PPC64LE-NEXT:    beq+ 0, .LBB64_2989; PPC64LE-NEXT:  .LBB64_4: # %cmpxchg.nostore990; PPC64LE-NEXT:    lwsync991; PPC64LE-NEXT:    blr992  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val release acquire993  ret void994}995 996define void @test65(ptr %ptr, i32 %cmp, i32 %val) {997; PPC64LE-LABEL: test65:998; PPC64LE:       # %bb.0: # %cmpxchg.start999; PPC64LE-NEXT:    lwarx 6, 0, 31000; PPC64LE-NEXT:    cmplw 6, 41001; PPC64LE-NEXT:    bnelr- 01002; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1003; PPC64LE-NEXT:    lwsync1004; PPC64LE-NEXT:  .LBB65_2: # %cmpxchg.trystore1005; PPC64LE-NEXT:    #1006; PPC64LE-NEXT:    stwcx. 5, 0, 31007; PPC64LE-NEXT:    beq+ 0, .LBB65_41008; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1009; PPC64LE-NEXT:    #1010; PPC64LE-NEXT:    lwarx 6, 0, 31011; PPC64LE-NEXT:    cmplw 6, 41012; PPC64LE-NEXT:    beq+ 0, .LBB65_21013; PPC64LE-NEXT:    blr1014; PPC64LE-NEXT:  .LBB65_4: # %cmpxchg.success1015; PPC64LE-NEXT:    lwsync1016; PPC64LE-NEXT:    blr1017  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acq_rel monotonic1018  ret void1019}1020 1021define void @test66(ptr %ptr, i32 %cmp, i32 %val) {1022; PPC64LE-LABEL: test66:1023; PPC64LE:       # %bb.0: # %cmpxchg.start1024; PPC64LE-NEXT:    lwarx 6, 0, 31025; PPC64LE-NEXT:    cmplw 6, 41026; PPC64LE-NEXT:    bne- 0, .LBB66_41027; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1028; PPC64LE-NEXT:    lwsync1029; PPC64LE-NEXT:  .LBB66_2: # %cmpxchg.trystore1030; PPC64LE-NEXT:    #1031; PPC64LE-NEXT:    stwcx. 5, 0, 31032; PPC64LE-NEXT:    beq+ 0, .LBB66_41033; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1034; PPC64LE-NEXT:    #1035; PPC64LE-NEXT:    lwarx 6, 0, 31036; PPC64LE-NEXT:    cmplw 6, 41037; PPC64LE-NEXT:    beq+ 0, .LBB66_21038; PPC64LE-NEXT:  .LBB66_4: # %cmpxchg.nostore1039; PPC64LE-NEXT:    lwsync1040; PPC64LE-NEXT:    blr1041  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val acq_rel acquire1042  ret void1043}1044 1045define void @test67(ptr %ptr, i32 %cmp, i32 %val) {1046; PPC64LE-LABEL: test67:1047; PPC64LE:       # %bb.0: # %cmpxchg.start1048; PPC64LE-NEXT:    lwarx 6, 0, 31049; PPC64LE-NEXT:    cmplw 6, 41050; PPC64LE-NEXT:    bnelr- 01051; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1052; PPC64LE-NEXT:    sync1053; PPC64LE-NEXT:  .LBB67_2: # %cmpxchg.trystore1054; PPC64LE-NEXT:    #1055; PPC64LE-NEXT:    stwcx. 5, 0, 31056; PPC64LE-NEXT:    beq+ 0, .LBB67_41057; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1058; PPC64LE-NEXT:    #1059; PPC64LE-NEXT:    lwarx 6, 0, 31060; PPC64LE-NEXT:    cmplw 6, 41061; PPC64LE-NEXT:    beq+ 0, .LBB67_21062; PPC64LE-NEXT:    blr1063; PPC64LE-NEXT:  .LBB67_4: # %cmpxchg.success1064; PPC64LE-NEXT:    lwsync1065; PPC64LE-NEXT:    blr1066  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val seq_cst monotonic1067  ret void1068}1069 1070define void @test68(ptr %ptr, i32 %cmp, i32 %val) {1071; PPC64LE-LABEL: test68:1072; PPC64LE:       # %bb.0: # %cmpxchg.start1073; PPC64LE-NEXT:    lwarx 6, 0, 31074; PPC64LE-NEXT:    cmplw 6, 41075; PPC64LE-NEXT:    bne- 0, .LBB68_41076; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1077; PPC64LE-NEXT:    sync1078; PPC64LE-NEXT:  .LBB68_2: # %cmpxchg.trystore1079; PPC64LE-NEXT:    #1080; PPC64LE-NEXT:    stwcx. 5, 0, 31081; PPC64LE-NEXT:    beq+ 0, .LBB68_41082; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1083; PPC64LE-NEXT:    #1084; PPC64LE-NEXT:    lwarx 6, 0, 31085; PPC64LE-NEXT:    cmplw 6, 41086; PPC64LE-NEXT:    beq+ 0, .LBB68_21087; PPC64LE-NEXT:  .LBB68_4: # %cmpxchg.nostore1088; PPC64LE-NEXT:    lwsync1089; PPC64LE-NEXT:    blr1090  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val seq_cst acquire1091  ret void1092}1093 1094define void @test69(ptr %ptr, i32 %cmp, i32 %val) {1095; PPC64LE-LABEL: test69:1096; PPC64LE:       # %bb.0: # %cmpxchg.start1097; PPC64LE-NEXT:    lwarx 6, 0, 31098; PPC64LE-NEXT:    cmplw 6, 41099; PPC64LE-NEXT:    bne- 0, .LBB69_41100; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1101; PPC64LE-NEXT:    sync1102; PPC64LE-NEXT:  .LBB69_2: # %cmpxchg.trystore1103; PPC64LE-NEXT:    #1104; PPC64LE-NEXT:    stwcx. 5, 0, 31105; PPC64LE-NEXT:    beq+ 0, .LBB69_41106; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1107; PPC64LE-NEXT:    #1108; PPC64LE-NEXT:    lwarx 6, 0, 31109; PPC64LE-NEXT:    cmplw 6, 41110; PPC64LE-NEXT:    beq+ 0, .LBB69_21111; PPC64LE-NEXT:  .LBB69_4: # %cmpxchg.nostore1112; PPC64LE-NEXT:    lwsync1113; PPC64LE-NEXT:    blr1114  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val seq_cst seq_cst1115  ret void1116}1117 1118define void @test70(ptr %ptr, i64 %cmp, i64 %val) {1119; PPC64LE-LABEL: test70:1120; PPC64LE:       # %bb.0:1121; PPC64LE-NEXT:  .LBB70_1: # %cmpxchg.start1122; PPC64LE-NEXT:    #1123; PPC64LE-NEXT:    ldarx 6, 0, 31124; PPC64LE-NEXT:    cmpld 6, 41125; PPC64LE-NEXT:    bnelr- 01126; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore1127; PPC64LE-NEXT:    #1128; PPC64LE-NEXT:    stdcx. 5, 0, 31129; PPC64LE-NEXT:    bne- 0, .LBB70_11130; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.end1131; PPC64LE-NEXT:    blr1132  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val monotonic monotonic1133  ret void1134}1135 1136define void @test71(ptr %ptr, i64 %cmp, i64 %val) {1137; PPC64LE-LABEL: test71:1138; PPC64LE:       # %bb.0:1139; PPC64LE-NEXT:  .LBB71_1: # %cmpxchg.start1140; PPC64LE-NEXT:    #1141; PPC64LE-NEXT:    ldarx 6, 0, 31142; PPC64LE-NEXT:    cmpld 6, 41143; PPC64LE-NEXT:    bnelr- 01144; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore1145; PPC64LE-NEXT:    #1146; PPC64LE-NEXT:    stdcx. 5, 0, 31147; PPC64LE-NEXT:    bne- 0, .LBB71_11148; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.success1149; PPC64LE-NEXT:    lwsync1150; PPC64LE-NEXT:    blr1151  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acquire monotonic1152  ret void1153}1154 1155define void @test72(ptr %ptr, i64 %cmp, i64 %val) {1156; PPC64LE-LABEL: test72:1157; PPC64LE:       # %bb.0:1158; PPC64LE-NEXT:  .LBB72_1: # %cmpxchg.start1159; PPC64LE-NEXT:    #1160; PPC64LE-NEXT:    ldarx 6, 0, 31161; PPC64LE-NEXT:    cmpld 6, 41162; PPC64LE-NEXT:    bne- 0, .LBB72_31163; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore1164; PPC64LE-NEXT:    #1165; PPC64LE-NEXT:    stdcx. 5, 0, 31166; PPC64LE-NEXT:    bne- 0, .LBB72_11167; PPC64LE-NEXT:  .LBB72_3: # %cmpxchg.nostore1168; PPC64LE-NEXT:    lwsync1169; PPC64LE-NEXT:    blr1170  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acquire acquire1171  ret void1172}1173 1174define void @test73(ptr %ptr, i64 %cmp, i64 %val) {1175; PPC64LE-LABEL: test73:1176; PPC64LE:       # %bb.0: # %cmpxchg.start1177; PPC64LE-NEXT:    ldarx 6, 0, 31178; PPC64LE-NEXT:    cmpld 6, 41179; PPC64LE-NEXT:    bnelr- 01180; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1181; PPC64LE-NEXT:    lwsync1182; PPC64LE-NEXT:    .p2align 51183; PPC64LE-NEXT:  .LBB73_2: # %cmpxchg.trystore1184; PPC64LE-NEXT:    #1185; PPC64LE-NEXT:    stdcx. 5, 0, 31186; PPC64LE-NEXT:    beqlr+ 01187; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1188; PPC64LE-NEXT:    #1189; PPC64LE-NEXT:    ldarx 6, 0, 31190; PPC64LE-NEXT:    cmpld 6, 41191; PPC64LE-NEXT:    beq+ 0, .LBB73_21192; PPC64LE-NEXT:    blr1193  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val release monotonic1194  ret void1195}1196 1197define void @test74(ptr %ptr, i64 %cmp, i64 %val) {1198; PPC64LE-LABEL: test74:1199; PPC64LE:       # %bb.0: # %cmpxchg.start1200; PPC64LE-NEXT:    ldarx 6, 0, 31201; PPC64LE-NEXT:    cmpld 6, 41202; PPC64LE-NEXT:    bne- 0, .LBB74_41203; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1204; PPC64LE-NEXT:    lwsync1205; PPC64LE-NEXT:    .p2align 51206; PPC64LE-NEXT:  .LBB74_2: # %cmpxchg.trystore1207; PPC64LE-NEXT:    #1208; PPC64LE-NEXT:    stdcx. 5, 0, 31209; PPC64LE-NEXT:    beqlr+ 01210; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1211; PPC64LE-NEXT:    #1212; PPC64LE-NEXT:    ldarx 6, 0, 31213; PPC64LE-NEXT:    cmpld 6, 41214; PPC64LE-NEXT:    beq+ 0, .LBB74_21215; PPC64LE-NEXT:  .LBB74_4: # %cmpxchg.nostore1216; PPC64LE-NEXT:    lwsync1217; PPC64LE-NEXT:    blr1218  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val release acquire1219  ret void1220}1221 1222define void @test75(ptr %ptr, i64 %cmp, i64 %val) {1223; PPC64LE-LABEL: test75:1224; PPC64LE:       # %bb.0: # %cmpxchg.start1225; PPC64LE-NEXT:    ldarx 6, 0, 31226; PPC64LE-NEXT:    cmpld 6, 41227; PPC64LE-NEXT:    bnelr- 01228; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1229; PPC64LE-NEXT:    lwsync1230; PPC64LE-NEXT:  .LBB75_2: # %cmpxchg.trystore1231; PPC64LE-NEXT:    #1232; PPC64LE-NEXT:    stdcx. 5, 0, 31233; PPC64LE-NEXT:    beq+ 0, .LBB75_41234; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1235; PPC64LE-NEXT:    #1236; PPC64LE-NEXT:    ldarx 6, 0, 31237; PPC64LE-NEXT:    cmpld 6, 41238; PPC64LE-NEXT:    beq+ 0, .LBB75_21239; PPC64LE-NEXT:    blr1240; PPC64LE-NEXT:  .LBB75_4: # %cmpxchg.success1241; PPC64LE-NEXT:    lwsync1242; PPC64LE-NEXT:    blr1243  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acq_rel monotonic1244  ret void1245}1246 1247define void @test76(ptr %ptr, i64 %cmp, i64 %val) {1248; PPC64LE-LABEL: test76:1249; PPC64LE:       # %bb.0: # %cmpxchg.start1250; PPC64LE-NEXT:    ldarx 6, 0, 31251; PPC64LE-NEXT:    cmpld 6, 41252; PPC64LE-NEXT:    bne- 0, .LBB76_41253; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1254; PPC64LE-NEXT:    lwsync1255; PPC64LE-NEXT:  .LBB76_2: # %cmpxchg.trystore1256; PPC64LE-NEXT:    #1257; PPC64LE-NEXT:    stdcx. 5, 0, 31258; PPC64LE-NEXT:    beq+ 0, .LBB76_41259; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1260; PPC64LE-NEXT:    #1261; PPC64LE-NEXT:    ldarx 6, 0, 31262; PPC64LE-NEXT:    cmpld 6, 41263; PPC64LE-NEXT:    beq+ 0, .LBB76_21264; PPC64LE-NEXT:  .LBB76_4: # %cmpxchg.nostore1265; PPC64LE-NEXT:    lwsync1266; PPC64LE-NEXT:    blr1267  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val acq_rel acquire1268  ret void1269}1270 1271define void @test77(ptr %ptr, i64 %cmp, i64 %val) {1272; PPC64LE-LABEL: test77:1273; PPC64LE:       # %bb.0: # %cmpxchg.start1274; PPC64LE-NEXT:    ldarx 6, 0, 31275; PPC64LE-NEXT:    cmpld 6, 41276; PPC64LE-NEXT:    bnelr- 01277; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1278; PPC64LE-NEXT:    sync1279; PPC64LE-NEXT:  .LBB77_2: # %cmpxchg.trystore1280; PPC64LE-NEXT:    #1281; PPC64LE-NEXT:    stdcx. 5, 0, 31282; PPC64LE-NEXT:    beq+ 0, .LBB77_41283; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1284; PPC64LE-NEXT:    #1285; PPC64LE-NEXT:    ldarx 6, 0, 31286; PPC64LE-NEXT:    cmpld 6, 41287; PPC64LE-NEXT:    beq+ 0, .LBB77_21288; PPC64LE-NEXT:    blr1289; PPC64LE-NEXT:  .LBB77_4: # %cmpxchg.success1290; PPC64LE-NEXT:    lwsync1291; PPC64LE-NEXT:    blr1292  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val seq_cst monotonic1293  ret void1294}1295 1296define void @test78(ptr %ptr, i64 %cmp, i64 %val) {1297; PPC64LE-LABEL: test78:1298; PPC64LE:       # %bb.0: # %cmpxchg.start1299; PPC64LE-NEXT:    ldarx 6, 0, 31300; PPC64LE-NEXT:    cmpld 6, 41301; PPC64LE-NEXT:    bne- 0, .LBB78_41302; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1303; PPC64LE-NEXT:    sync1304; PPC64LE-NEXT:  .LBB78_2: # %cmpxchg.trystore1305; PPC64LE-NEXT:    #1306; PPC64LE-NEXT:    stdcx. 5, 0, 31307; PPC64LE-NEXT:    beq+ 0, .LBB78_41308; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1309; PPC64LE-NEXT:    #1310; PPC64LE-NEXT:    ldarx 6, 0, 31311; PPC64LE-NEXT:    cmpld 6, 41312; PPC64LE-NEXT:    beq+ 0, .LBB78_21313; PPC64LE-NEXT:  .LBB78_4: # %cmpxchg.nostore1314; PPC64LE-NEXT:    lwsync1315; PPC64LE-NEXT:    blr1316  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val seq_cst acquire1317  ret void1318}1319 1320define void @test79(ptr %ptr, i64 %cmp, i64 %val) {1321; PPC64LE-LABEL: test79:1322; PPC64LE:       # %bb.0: # %cmpxchg.start1323; PPC64LE-NEXT:    ldarx 6, 0, 31324; PPC64LE-NEXT:    cmpld 6, 41325; PPC64LE-NEXT:    bne- 0, .LBB79_41326; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1327; PPC64LE-NEXT:    sync1328; PPC64LE-NEXT:  .LBB79_2: # %cmpxchg.trystore1329; PPC64LE-NEXT:    #1330; PPC64LE-NEXT:    stdcx. 5, 0, 31331; PPC64LE-NEXT:    beq+ 0, .LBB79_41332; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1333; PPC64LE-NEXT:    #1334; PPC64LE-NEXT:    ldarx 6, 0, 31335; PPC64LE-NEXT:    cmpld 6, 41336; PPC64LE-NEXT:    beq+ 0, .LBB79_21337; PPC64LE-NEXT:  .LBB79_4: # %cmpxchg.nostore1338; PPC64LE-NEXT:    lwsync1339; PPC64LE-NEXT:    blr1340  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val seq_cst seq_cst1341  ret void1342}1343 1344define void @test80(ptr %ptr, i8 %cmp, i8 %val) {1345; PPC64LE-LABEL: test80:1346; PPC64LE:       # %bb.0:1347; PPC64LE-NEXT:    clrlwi 5, 5, 241348; PPC64LE-NEXT:    clrlwi 4, 4, 241349; PPC64LE-NEXT:  .LBB80_1: # %cmpxchg.start1350; PPC64LE-NEXT:    #1351; PPC64LE-NEXT:    lbarx 6, 0, 31352; PPC64LE-NEXT:    cmplw 6, 41353; PPC64LE-NEXT:    bnelr- 01354; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore1355; PPC64LE-NEXT:    #1356; PPC64LE-NEXT:    stbcx. 5, 0, 31357; PPC64LE-NEXT:    bne- 0, .LBB80_11358; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.end1359; PPC64LE-NEXT:    blr1360  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val syncscope("singlethread") monotonic monotonic1361  ret void1362}1363 1364define void @test81(ptr %ptr, i8 %cmp, i8 %val) {1365; PPC64LE-LABEL: test81:1366; PPC64LE:       # %bb.0:1367; PPC64LE-NEXT:    clrlwi 5, 5, 241368; PPC64LE-NEXT:    clrlwi 4, 4, 241369; PPC64LE-NEXT:  .LBB81_1: # %cmpxchg.start1370; PPC64LE-NEXT:    #1371; PPC64LE-NEXT:    lbarx 6, 0, 31372; PPC64LE-NEXT:    cmplw 6, 41373; PPC64LE-NEXT:    bnelr- 01374; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore1375; PPC64LE-NEXT:    #1376; PPC64LE-NEXT:    stbcx. 5, 0, 31377; PPC64LE-NEXT:    bne- 0, .LBB81_11378; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.success1379; PPC64LE-NEXT:    lwsync1380; PPC64LE-NEXT:    blr1381  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val syncscope("singlethread") acquire monotonic1382  ret void1383}1384 1385define void @test82(ptr %ptr, i8 %cmp, i8 %val) {1386; PPC64LE-LABEL: test82:1387; PPC64LE:       # %bb.0:1388; PPC64LE-NEXT:    clrlwi 5, 5, 241389; PPC64LE-NEXT:    clrlwi 4, 4, 241390; PPC64LE-NEXT:  .LBB82_1: # %cmpxchg.start1391; PPC64LE-NEXT:    #1392; PPC64LE-NEXT:    lbarx 6, 0, 31393; PPC64LE-NEXT:    cmplw 6, 41394; PPC64LE-NEXT:    bne- 0, .LBB82_31395; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore1396; PPC64LE-NEXT:    #1397; PPC64LE-NEXT:    stbcx. 5, 0, 31398; PPC64LE-NEXT:    bne- 0, .LBB82_11399; PPC64LE-NEXT:  .LBB82_3: # %cmpxchg.nostore1400; PPC64LE-NEXT:    lwsync1401; PPC64LE-NEXT:    blr1402  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val syncscope("singlethread") acquire acquire1403  ret void1404}1405 1406define void @test83(ptr %ptr, i8 %cmp, i8 %val) {1407; PPC64LE-LABEL: test83:1408; PPC64LE:       # %bb.0: # %cmpxchg.start1409; PPC64LE-NEXT:    lbarx 6, 0, 31410; PPC64LE-NEXT:    clrlwi 4, 4, 241411; PPC64LE-NEXT:    cmplw 6, 41412; PPC64LE-NEXT:    bnelr- 01413; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1414; PPC64LE-NEXT:    lwsync1415; PPC64LE-NEXT:    clrlwi 5, 5, 241416; PPC64LE-NEXT:    .p2align 51417; PPC64LE-NEXT:  .LBB83_2: # %cmpxchg.trystore1418; PPC64LE-NEXT:    #1419; PPC64LE-NEXT:    stbcx. 5, 0, 31420; PPC64LE-NEXT:    beqlr+ 01421; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1422; PPC64LE-NEXT:    #1423; PPC64LE-NEXT:    lbarx 6, 0, 31424; PPC64LE-NEXT:    cmplw 6, 41425; PPC64LE-NEXT:    beq+ 0, .LBB83_21426; PPC64LE-NEXT:    blr1427  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val syncscope("singlethread") release monotonic1428  ret void1429}1430 1431define void @test84(ptr %ptr, i8 %cmp, i8 %val) {1432; PPC64LE-LABEL: test84:1433; PPC64LE:       # %bb.0: # %cmpxchg.start1434; PPC64LE-NEXT:    lbarx 6, 0, 31435; PPC64LE-NEXT:    clrlwi 4, 4, 241436; PPC64LE-NEXT:    cmplw 6, 41437; PPC64LE-NEXT:    bne- 0, .LBB84_41438; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1439; PPC64LE-NEXT:    lwsync1440; PPC64LE-NEXT:    clrlwi 5, 5, 241441; PPC64LE-NEXT:    .p2align 51442; PPC64LE-NEXT:  .LBB84_2: # %cmpxchg.trystore1443; PPC64LE-NEXT:    #1444; PPC64LE-NEXT:    stbcx. 5, 0, 31445; PPC64LE-NEXT:    beqlr+ 01446; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1447; PPC64LE-NEXT:    #1448; PPC64LE-NEXT:    lbarx 6, 0, 31449; PPC64LE-NEXT:    cmplw 6, 41450; PPC64LE-NEXT:    beq+ 0, .LBB84_21451; PPC64LE-NEXT:  .LBB84_4: # %cmpxchg.nostore1452; PPC64LE-NEXT:    lwsync1453; PPC64LE-NEXT:    blr1454  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val syncscope("singlethread") release acquire1455  ret void1456}1457 1458define void @test85(ptr %ptr, i8 %cmp, i8 %val) {1459; PPC64LE-LABEL: test85:1460; PPC64LE:       # %bb.0: # %cmpxchg.start1461; PPC64LE-NEXT:    lbarx 6, 0, 31462; PPC64LE-NEXT:    clrlwi 4, 4, 241463; PPC64LE-NEXT:    cmplw 6, 41464; PPC64LE-NEXT:    bnelr- 01465; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1466; PPC64LE-NEXT:    lwsync1467; PPC64LE-NEXT:    clrlwi 5, 5, 241468; PPC64LE-NEXT:  .LBB85_2: # %cmpxchg.trystore1469; PPC64LE-NEXT:    #1470; PPC64LE-NEXT:    stbcx. 5, 0, 31471; PPC64LE-NEXT:    beq+ 0, .LBB85_41472; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1473; PPC64LE-NEXT:    #1474; PPC64LE-NEXT:    lbarx 6, 0, 31475; PPC64LE-NEXT:    cmplw 6, 41476; PPC64LE-NEXT:    beq+ 0, .LBB85_21477; PPC64LE-NEXT:    blr1478; PPC64LE-NEXT:  .LBB85_4: # %cmpxchg.success1479; PPC64LE-NEXT:    lwsync1480; PPC64LE-NEXT:    blr1481  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val syncscope("singlethread") acq_rel monotonic1482  ret void1483}1484 1485define void @test86(ptr %ptr, i8 %cmp, i8 %val) {1486; PPC64LE-LABEL: test86:1487; PPC64LE:       # %bb.0: # %cmpxchg.start1488; PPC64LE-NEXT:    lbarx 6, 0, 31489; PPC64LE-NEXT:    clrlwi 4, 4, 241490; PPC64LE-NEXT:    cmplw 6, 41491; PPC64LE-NEXT:    bne- 0, .LBB86_41492; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1493; PPC64LE-NEXT:    lwsync1494; PPC64LE-NEXT:    clrlwi 5, 5, 241495; PPC64LE-NEXT:  .LBB86_2: # %cmpxchg.trystore1496; PPC64LE-NEXT:    #1497; PPC64LE-NEXT:    stbcx. 5, 0, 31498; PPC64LE-NEXT:    beq+ 0, .LBB86_41499; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1500; PPC64LE-NEXT:    #1501; PPC64LE-NEXT:    lbarx 6, 0, 31502; PPC64LE-NEXT:    cmplw 6, 41503; PPC64LE-NEXT:    beq+ 0, .LBB86_21504; PPC64LE-NEXT:  .LBB86_4: # %cmpxchg.nostore1505; PPC64LE-NEXT:    lwsync1506; PPC64LE-NEXT:    blr1507  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val syncscope("singlethread") acq_rel acquire1508  ret void1509}1510 1511define void @test87(ptr %ptr, i8 %cmp, i8 %val) {1512; PPC64LE-LABEL: test87:1513; PPC64LE:       # %bb.0: # %cmpxchg.start1514; PPC64LE-NEXT:    lbarx 6, 0, 31515; PPC64LE-NEXT:    clrlwi 4, 4, 241516; PPC64LE-NEXT:    cmplw 6, 41517; PPC64LE-NEXT:    bnelr- 01518; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1519; PPC64LE-NEXT:    sync1520; PPC64LE-NEXT:    clrlwi 5, 5, 241521; PPC64LE-NEXT:  .LBB87_2: # %cmpxchg.trystore1522; PPC64LE-NEXT:    #1523; PPC64LE-NEXT:    stbcx. 5, 0, 31524; PPC64LE-NEXT:    beq+ 0, .LBB87_41525; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1526; PPC64LE-NEXT:    #1527; PPC64LE-NEXT:    lbarx 6, 0, 31528; PPC64LE-NEXT:    cmplw 6, 41529; PPC64LE-NEXT:    beq+ 0, .LBB87_21530; PPC64LE-NEXT:    blr1531; PPC64LE-NEXT:  .LBB87_4: # %cmpxchg.success1532; PPC64LE-NEXT:    lwsync1533; PPC64LE-NEXT:    blr1534  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val syncscope("singlethread") seq_cst monotonic1535  ret void1536}1537 1538define void @test88(ptr %ptr, i8 %cmp, i8 %val) {1539; PPC64LE-LABEL: test88:1540; PPC64LE:       # %bb.0: # %cmpxchg.start1541; PPC64LE-NEXT:    lbarx 6, 0, 31542; PPC64LE-NEXT:    clrlwi 4, 4, 241543; PPC64LE-NEXT:    cmplw 6, 41544; PPC64LE-NEXT:    bne- 0, .LBB88_41545; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1546; PPC64LE-NEXT:    sync1547; PPC64LE-NEXT:    clrlwi 5, 5, 241548; PPC64LE-NEXT:  .LBB88_2: # %cmpxchg.trystore1549; PPC64LE-NEXT:    #1550; PPC64LE-NEXT:    stbcx. 5, 0, 31551; PPC64LE-NEXT:    beq+ 0, .LBB88_41552; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1553; PPC64LE-NEXT:    #1554; PPC64LE-NEXT:    lbarx 6, 0, 31555; PPC64LE-NEXT:    cmplw 6, 41556; PPC64LE-NEXT:    beq+ 0, .LBB88_21557; PPC64LE-NEXT:  .LBB88_4: # %cmpxchg.nostore1558; PPC64LE-NEXT:    lwsync1559; PPC64LE-NEXT:    blr1560  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val syncscope("singlethread") seq_cst acquire1561  ret void1562}1563 1564define void @test89(ptr %ptr, i8 %cmp, i8 %val) {1565; PPC64LE-LABEL: test89:1566; PPC64LE:       # %bb.0: # %cmpxchg.start1567; PPC64LE-NEXT:    lbarx 6, 0, 31568; PPC64LE-NEXT:    clrlwi 4, 4, 241569; PPC64LE-NEXT:    cmplw 6, 41570; PPC64LE-NEXT:    bne- 0, .LBB89_41571; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1572; PPC64LE-NEXT:    sync1573; PPC64LE-NEXT:    clrlwi 5, 5, 241574; PPC64LE-NEXT:  .LBB89_2: # %cmpxchg.trystore1575; PPC64LE-NEXT:    #1576; PPC64LE-NEXT:    stbcx. 5, 0, 31577; PPC64LE-NEXT:    beq+ 0, .LBB89_41578; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1579; PPC64LE-NEXT:    #1580; PPC64LE-NEXT:    lbarx 6, 0, 31581; PPC64LE-NEXT:    cmplw 6, 41582; PPC64LE-NEXT:    beq+ 0, .LBB89_21583; PPC64LE-NEXT:  .LBB89_4: # %cmpxchg.nostore1584; PPC64LE-NEXT:    lwsync1585; PPC64LE-NEXT:    blr1586  %res = cmpxchg ptr %ptr, i8 %cmp, i8 %val syncscope("singlethread") seq_cst seq_cst1587  ret void1588}1589 1590define void @test90(ptr %ptr, i16 %cmp, i16 %val) {1591; PPC64LE-LABEL: test90:1592; PPC64LE:       # %bb.0:1593; PPC64LE-NEXT:    clrlwi 5, 5, 161594; PPC64LE-NEXT:    clrlwi 4, 4, 161595; PPC64LE-NEXT:  .LBB90_1: # %cmpxchg.start1596; PPC64LE-NEXT:    #1597; PPC64LE-NEXT:    lharx 6, 0, 31598; PPC64LE-NEXT:    cmplw 6, 41599; PPC64LE-NEXT:    bnelr- 01600; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore1601; PPC64LE-NEXT:    #1602; PPC64LE-NEXT:    sthcx. 5, 0, 31603; PPC64LE-NEXT:    bne- 0, .LBB90_11604; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.end1605; PPC64LE-NEXT:    blr1606  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val syncscope("singlethread") monotonic monotonic1607  ret void1608}1609 1610define void @test91(ptr %ptr, i16 %cmp, i16 %val) {1611; PPC64LE-LABEL: test91:1612; PPC64LE:       # %bb.0:1613; PPC64LE-NEXT:    clrlwi 5, 5, 161614; PPC64LE-NEXT:    clrlwi 4, 4, 161615; PPC64LE-NEXT:  .LBB91_1: # %cmpxchg.start1616; PPC64LE-NEXT:    #1617; PPC64LE-NEXT:    lharx 6, 0, 31618; PPC64LE-NEXT:    cmplw 6, 41619; PPC64LE-NEXT:    bnelr- 01620; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore1621; PPC64LE-NEXT:    #1622; PPC64LE-NEXT:    sthcx. 5, 0, 31623; PPC64LE-NEXT:    bne- 0, .LBB91_11624; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.success1625; PPC64LE-NEXT:    lwsync1626; PPC64LE-NEXT:    blr1627  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val syncscope("singlethread") acquire monotonic1628  ret void1629}1630 1631define void @test92(ptr %ptr, i16 %cmp, i16 %val) {1632; PPC64LE-LABEL: test92:1633; PPC64LE:       # %bb.0:1634; PPC64LE-NEXT:    clrlwi 5, 5, 161635; PPC64LE-NEXT:    clrlwi 4, 4, 161636; PPC64LE-NEXT:  .LBB92_1: # %cmpxchg.start1637; PPC64LE-NEXT:    #1638; PPC64LE-NEXT:    lharx 6, 0, 31639; PPC64LE-NEXT:    cmplw 6, 41640; PPC64LE-NEXT:    bne- 0, .LBB92_31641; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore1642; PPC64LE-NEXT:    #1643; PPC64LE-NEXT:    sthcx. 5, 0, 31644; PPC64LE-NEXT:    bne- 0, .LBB92_11645; PPC64LE-NEXT:  .LBB92_3: # %cmpxchg.nostore1646; PPC64LE-NEXT:    lwsync1647; PPC64LE-NEXT:    blr1648  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val syncscope("singlethread") acquire acquire1649  ret void1650}1651 1652define void @test93(ptr %ptr, i16 %cmp, i16 %val) {1653; PPC64LE-LABEL: test93:1654; PPC64LE:       # %bb.0: # %cmpxchg.start1655; PPC64LE-NEXT:    lharx 6, 0, 31656; PPC64LE-NEXT:    clrlwi 4, 4, 161657; PPC64LE-NEXT:    cmplw 6, 41658; PPC64LE-NEXT:    bnelr- 01659; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1660; PPC64LE-NEXT:    lwsync1661; PPC64LE-NEXT:    clrlwi 5, 5, 161662; PPC64LE-NEXT:    .p2align 51663; PPC64LE-NEXT:  .LBB93_2: # %cmpxchg.trystore1664; PPC64LE-NEXT:    #1665; PPC64LE-NEXT:    sthcx. 5, 0, 31666; PPC64LE-NEXT:    beqlr+ 01667; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1668; PPC64LE-NEXT:    #1669; PPC64LE-NEXT:    lharx 6, 0, 31670; PPC64LE-NEXT:    cmplw 6, 41671; PPC64LE-NEXT:    beq+ 0, .LBB93_21672; PPC64LE-NEXT:    blr1673  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val syncscope("singlethread") release monotonic1674  ret void1675}1676 1677define void @test94(ptr %ptr, i16 %cmp, i16 %val) {1678; PPC64LE-LABEL: test94:1679; PPC64LE:       # %bb.0: # %cmpxchg.start1680; PPC64LE-NEXT:    lharx 6, 0, 31681; PPC64LE-NEXT:    clrlwi 4, 4, 161682; PPC64LE-NEXT:    cmplw 6, 41683; PPC64LE-NEXT:    bne- 0, .LBB94_41684; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1685; PPC64LE-NEXT:    lwsync1686; PPC64LE-NEXT:    clrlwi 5, 5, 161687; PPC64LE-NEXT:    .p2align 51688; PPC64LE-NEXT:  .LBB94_2: # %cmpxchg.trystore1689; PPC64LE-NEXT:    #1690; PPC64LE-NEXT:    sthcx. 5, 0, 31691; PPC64LE-NEXT:    beqlr+ 01692; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1693; PPC64LE-NEXT:    #1694; PPC64LE-NEXT:    lharx 6, 0, 31695; PPC64LE-NEXT:    cmplw 6, 41696; PPC64LE-NEXT:    beq+ 0, .LBB94_21697; PPC64LE-NEXT:  .LBB94_4: # %cmpxchg.nostore1698; PPC64LE-NEXT:    lwsync1699; PPC64LE-NEXT:    blr1700  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val syncscope("singlethread") release acquire1701  ret void1702}1703 1704define void @test95(ptr %ptr, i16 %cmp, i16 %val) {1705; PPC64LE-LABEL: test95:1706; PPC64LE:       # %bb.0: # %cmpxchg.start1707; PPC64LE-NEXT:    lharx 6, 0, 31708; PPC64LE-NEXT:    clrlwi 4, 4, 161709; PPC64LE-NEXT:    cmplw 6, 41710; PPC64LE-NEXT:    bnelr- 01711; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1712; PPC64LE-NEXT:    lwsync1713; PPC64LE-NEXT:    clrlwi 5, 5, 161714; PPC64LE-NEXT:  .LBB95_2: # %cmpxchg.trystore1715; PPC64LE-NEXT:    #1716; PPC64LE-NEXT:    sthcx. 5, 0, 31717; PPC64LE-NEXT:    beq+ 0, .LBB95_41718; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1719; PPC64LE-NEXT:    #1720; PPC64LE-NEXT:    lharx 6, 0, 31721; PPC64LE-NEXT:    cmplw 6, 41722; PPC64LE-NEXT:    beq+ 0, .LBB95_21723; PPC64LE-NEXT:    blr1724; PPC64LE-NEXT:  .LBB95_4: # %cmpxchg.success1725; PPC64LE-NEXT:    lwsync1726; PPC64LE-NEXT:    blr1727  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val syncscope("singlethread") acq_rel monotonic1728  ret void1729}1730 1731define void @test96(ptr %ptr, i16 %cmp, i16 %val) {1732; PPC64LE-LABEL: test96:1733; PPC64LE:       # %bb.0: # %cmpxchg.start1734; PPC64LE-NEXT:    lharx 6, 0, 31735; PPC64LE-NEXT:    clrlwi 4, 4, 161736; PPC64LE-NEXT:    cmplw 6, 41737; PPC64LE-NEXT:    bne- 0, .LBB96_41738; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1739; PPC64LE-NEXT:    lwsync1740; PPC64LE-NEXT:    clrlwi 5, 5, 161741; PPC64LE-NEXT:  .LBB96_2: # %cmpxchg.trystore1742; PPC64LE-NEXT:    #1743; PPC64LE-NEXT:    sthcx. 5, 0, 31744; PPC64LE-NEXT:    beq+ 0, .LBB96_41745; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1746; PPC64LE-NEXT:    #1747; PPC64LE-NEXT:    lharx 6, 0, 31748; PPC64LE-NEXT:    cmplw 6, 41749; PPC64LE-NEXT:    beq+ 0, .LBB96_21750; PPC64LE-NEXT:  .LBB96_4: # %cmpxchg.nostore1751; PPC64LE-NEXT:    lwsync1752; PPC64LE-NEXT:    blr1753  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val syncscope("singlethread") acq_rel acquire1754  ret void1755}1756 1757define void @test97(ptr %ptr, i16 %cmp, i16 %val) {1758; PPC64LE-LABEL: test97:1759; PPC64LE:       # %bb.0: # %cmpxchg.start1760; PPC64LE-NEXT:    lharx 6, 0, 31761; PPC64LE-NEXT:    clrlwi 4, 4, 161762; PPC64LE-NEXT:    cmplw 6, 41763; PPC64LE-NEXT:    bnelr- 01764; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1765; PPC64LE-NEXT:    sync1766; PPC64LE-NEXT:    clrlwi 5, 5, 161767; PPC64LE-NEXT:  .LBB97_2: # %cmpxchg.trystore1768; PPC64LE-NEXT:    #1769; PPC64LE-NEXT:    sthcx. 5, 0, 31770; PPC64LE-NEXT:    beq+ 0, .LBB97_41771; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1772; PPC64LE-NEXT:    #1773; PPC64LE-NEXT:    lharx 6, 0, 31774; PPC64LE-NEXT:    cmplw 6, 41775; PPC64LE-NEXT:    beq+ 0, .LBB97_21776; PPC64LE-NEXT:    blr1777; PPC64LE-NEXT:  .LBB97_4: # %cmpxchg.success1778; PPC64LE-NEXT:    lwsync1779; PPC64LE-NEXT:    blr1780  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val syncscope("singlethread") seq_cst monotonic1781  ret void1782}1783 1784define void @test98(ptr %ptr, i16 %cmp, i16 %val) {1785; PPC64LE-LABEL: test98:1786; PPC64LE:       # %bb.0: # %cmpxchg.start1787; PPC64LE-NEXT:    lharx 6, 0, 31788; PPC64LE-NEXT:    clrlwi 4, 4, 161789; PPC64LE-NEXT:    cmplw 6, 41790; PPC64LE-NEXT:    bne- 0, .LBB98_41791; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1792; PPC64LE-NEXT:    sync1793; PPC64LE-NEXT:    clrlwi 5, 5, 161794; PPC64LE-NEXT:  .LBB98_2: # %cmpxchg.trystore1795; PPC64LE-NEXT:    #1796; PPC64LE-NEXT:    sthcx. 5, 0, 31797; PPC64LE-NEXT:    beq+ 0, .LBB98_41798; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1799; PPC64LE-NEXT:    #1800; PPC64LE-NEXT:    lharx 6, 0, 31801; PPC64LE-NEXT:    cmplw 6, 41802; PPC64LE-NEXT:    beq+ 0, .LBB98_21803; PPC64LE-NEXT:  .LBB98_4: # %cmpxchg.nostore1804; PPC64LE-NEXT:    lwsync1805; PPC64LE-NEXT:    blr1806  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val syncscope("singlethread") seq_cst acquire1807  ret void1808}1809 1810define void @test99(ptr %ptr, i16 %cmp, i16 %val) {1811; PPC64LE-LABEL: test99:1812; PPC64LE:       # %bb.0: # %cmpxchg.start1813; PPC64LE-NEXT:    lharx 6, 0, 31814; PPC64LE-NEXT:    clrlwi 4, 4, 161815; PPC64LE-NEXT:    cmplw 6, 41816; PPC64LE-NEXT:    bne- 0, .LBB99_41817; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1818; PPC64LE-NEXT:    sync1819; PPC64LE-NEXT:    clrlwi 5, 5, 161820; PPC64LE-NEXT:  .LBB99_2: # %cmpxchg.trystore1821; PPC64LE-NEXT:    #1822; PPC64LE-NEXT:    sthcx. 5, 0, 31823; PPC64LE-NEXT:    beq+ 0, .LBB99_41824; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1825; PPC64LE-NEXT:    #1826; PPC64LE-NEXT:    lharx 6, 0, 31827; PPC64LE-NEXT:    cmplw 6, 41828; PPC64LE-NEXT:    beq+ 0, .LBB99_21829; PPC64LE-NEXT:  .LBB99_4: # %cmpxchg.nostore1830; PPC64LE-NEXT:    lwsync1831; PPC64LE-NEXT:    blr1832  %res = cmpxchg ptr %ptr, i16 %cmp, i16 %val syncscope("singlethread") seq_cst seq_cst1833  ret void1834}1835 1836define void @test100(ptr %ptr, i32 %cmp, i32 %val) {1837; PPC64LE-LABEL: test100:1838; PPC64LE:       # %bb.0:1839; PPC64LE-NEXT:  .LBB100_1: # %cmpxchg.start1840; PPC64LE-NEXT:    #1841; PPC64LE-NEXT:    lwarx 6, 0, 31842; PPC64LE-NEXT:    cmplw 6, 41843; PPC64LE-NEXT:    bnelr- 01844; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore1845; PPC64LE-NEXT:    #1846; PPC64LE-NEXT:    stwcx. 5, 0, 31847; PPC64LE-NEXT:    bne- 0, .LBB100_11848; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.end1849; PPC64LE-NEXT:    blr1850  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val syncscope("singlethread") monotonic monotonic1851  ret void1852}1853 1854define void @test101(ptr %ptr, i32 %cmp, i32 %val) {1855; PPC64LE-LABEL: test101:1856; PPC64LE:       # %bb.0:1857; PPC64LE-NEXT:  .LBB101_1: # %cmpxchg.start1858; PPC64LE-NEXT:    #1859; PPC64LE-NEXT:    lwarx 6, 0, 31860; PPC64LE-NEXT:    cmplw 6, 41861; PPC64LE-NEXT:    bnelr- 01862; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore1863; PPC64LE-NEXT:    #1864; PPC64LE-NEXT:    stwcx. 5, 0, 31865; PPC64LE-NEXT:    bne- 0, .LBB101_11866; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.success1867; PPC64LE-NEXT:    lwsync1868; PPC64LE-NEXT:    blr1869  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val syncscope("singlethread") acquire monotonic1870  ret void1871}1872 1873define void @test102(ptr %ptr, i32 %cmp, i32 %val) {1874; PPC64LE-LABEL: test102:1875; PPC64LE:       # %bb.0:1876; PPC64LE-NEXT:  .LBB102_1: # %cmpxchg.start1877; PPC64LE-NEXT:    #1878; PPC64LE-NEXT:    lwarx 6, 0, 31879; PPC64LE-NEXT:    cmplw 6, 41880; PPC64LE-NEXT:    bne- 0, .LBB102_31881; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore1882; PPC64LE-NEXT:    #1883; PPC64LE-NEXT:    stwcx. 5, 0, 31884; PPC64LE-NEXT:    bne- 0, .LBB102_11885; PPC64LE-NEXT:  .LBB102_3: # %cmpxchg.nostore1886; PPC64LE-NEXT:    lwsync1887; PPC64LE-NEXT:    blr1888  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val syncscope("singlethread") acquire acquire1889  ret void1890}1891 1892define void @test103(ptr %ptr, i32 %cmp, i32 %val) {1893; PPC64LE-LABEL: test103:1894; PPC64LE:       # %bb.0: # %cmpxchg.start1895; PPC64LE-NEXT:    lwarx 6, 0, 31896; PPC64LE-NEXT:    cmplw 6, 41897; PPC64LE-NEXT:    bnelr- 01898; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1899; PPC64LE-NEXT:    lwsync1900; PPC64LE-NEXT:    .p2align 51901; PPC64LE-NEXT:  .LBB103_2: # %cmpxchg.trystore1902; PPC64LE-NEXT:    #1903; PPC64LE-NEXT:    stwcx. 5, 0, 31904; PPC64LE-NEXT:    beqlr+ 01905; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1906; PPC64LE-NEXT:    #1907; PPC64LE-NEXT:    lwarx 6, 0, 31908; PPC64LE-NEXT:    cmplw 6, 41909; PPC64LE-NEXT:    beq+ 0, .LBB103_21910; PPC64LE-NEXT:    blr1911  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val syncscope("singlethread") release monotonic1912  ret void1913}1914 1915define void @test104(ptr %ptr, i32 %cmp, i32 %val) {1916; PPC64LE-LABEL: test104:1917; PPC64LE:       # %bb.0: # %cmpxchg.start1918; PPC64LE-NEXT:    lwarx 6, 0, 31919; PPC64LE-NEXT:    cmplw 6, 41920; PPC64LE-NEXT:    bne- 0, .LBB104_41921; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1922; PPC64LE-NEXT:    lwsync1923; PPC64LE-NEXT:    .p2align 51924; PPC64LE-NEXT:  .LBB104_2: # %cmpxchg.trystore1925; PPC64LE-NEXT:    #1926; PPC64LE-NEXT:    stwcx. 5, 0, 31927; PPC64LE-NEXT:    beqlr+ 01928; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1929; PPC64LE-NEXT:    #1930; PPC64LE-NEXT:    lwarx 6, 0, 31931; PPC64LE-NEXT:    cmplw 6, 41932; PPC64LE-NEXT:    beq+ 0, .LBB104_21933; PPC64LE-NEXT:  .LBB104_4: # %cmpxchg.nostore1934; PPC64LE-NEXT:    lwsync1935; PPC64LE-NEXT:    blr1936  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val syncscope("singlethread") release acquire1937  ret void1938}1939 1940define void @test105(ptr %ptr, i32 %cmp, i32 %val) {1941; PPC64LE-LABEL: test105:1942; PPC64LE:       # %bb.0: # %cmpxchg.start1943; PPC64LE-NEXT:    lwarx 6, 0, 31944; PPC64LE-NEXT:    cmplw 6, 41945; PPC64LE-NEXT:    bnelr- 01946; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1947; PPC64LE-NEXT:    lwsync1948; PPC64LE-NEXT:  .LBB105_2: # %cmpxchg.trystore1949; PPC64LE-NEXT:    #1950; PPC64LE-NEXT:    stwcx. 5, 0, 31951; PPC64LE-NEXT:    beq+ 0, .LBB105_41952; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1953; PPC64LE-NEXT:    #1954; PPC64LE-NEXT:    lwarx 6, 0, 31955; PPC64LE-NEXT:    cmplw 6, 41956; PPC64LE-NEXT:    beq+ 0, .LBB105_21957; PPC64LE-NEXT:    blr1958; PPC64LE-NEXT:  .LBB105_4: # %cmpxchg.success1959; PPC64LE-NEXT:    lwsync1960; PPC64LE-NEXT:    blr1961  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val syncscope("singlethread") acq_rel monotonic1962  ret void1963}1964 1965define void @test106(ptr %ptr, i32 %cmp, i32 %val) {1966; PPC64LE-LABEL: test106:1967; PPC64LE:       # %bb.0: # %cmpxchg.start1968; PPC64LE-NEXT:    lwarx 6, 0, 31969; PPC64LE-NEXT:    cmplw 6, 41970; PPC64LE-NEXT:    bne- 0, .LBB106_41971; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1972; PPC64LE-NEXT:    lwsync1973; PPC64LE-NEXT:  .LBB106_2: # %cmpxchg.trystore1974; PPC64LE-NEXT:    #1975; PPC64LE-NEXT:    stwcx. 5, 0, 31976; PPC64LE-NEXT:    beq+ 0, .LBB106_41977; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload1978; PPC64LE-NEXT:    #1979; PPC64LE-NEXT:    lwarx 6, 0, 31980; PPC64LE-NEXT:    cmplw 6, 41981; PPC64LE-NEXT:    beq+ 0, .LBB106_21982; PPC64LE-NEXT:  .LBB106_4: # %cmpxchg.nostore1983; PPC64LE-NEXT:    lwsync1984; PPC64LE-NEXT:    blr1985  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val syncscope("singlethread") acq_rel acquire1986  ret void1987}1988 1989define void @test107(ptr %ptr, i32 %cmp, i32 %val) {1990; PPC64LE-LABEL: test107:1991; PPC64LE:       # %bb.0: # %cmpxchg.start1992; PPC64LE-NEXT:    lwarx 6, 0, 31993; PPC64LE-NEXT:    cmplw 6, 41994; PPC64LE-NEXT:    bnelr- 01995; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore1996; PPC64LE-NEXT:    sync1997; PPC64LE-NEXT:  .LBB107_2: # %cmpxchg.trystore1998; PPC64LE-NEXT:    #1999; PPC64LE-NEXT:    stwcx. 5, 0, 32000; PPC64LE-NEXT:    beq+ 0, .LBB107_42001; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload2002; PPC64LE-NEXT:    #2003; PPC64LE-NEXT:    lwarx 6, 0, 32004; PPC64LE-NEXT:    cmplw 6, 42005; PPC64LE-NEXT:    beq+ 0, .LBB107_22006; PPC64LE-NEXT:    blr2007; PPC64LE-NEXT:  .LBB107_4: # %cmpxchg.success2008; PPC64LE-NEXT:    lwsync2009; PPC64LE-NEXT:    blr2010  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val syncscope("singlethread") seq_cst monotonic2011  ret void2012}2013 2014define void @test108(ptr %ptr, i32 %cmp, i32 %val) {2015; PPC64LE-LABEL: test108:2016; PPC64LE:       # %bb.0: # %cmpxchg.start2017; PPC64LE-NEXT:    lwarx 6, 0, 32018; PPC64LE-NEXT:    cmplw 6, 42019; PPC64LE-NEXT:    bne- 0, .LBB108_42020; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore2021; PPC64LE-NEXT:    sync2022; PPC64LE-NEXT:  .LBB108_2: # %cmpxchg.trystore2023; PPC64LE-NEXT:    #2024; PPC64LE-NEXT:    stwcx. 5, 0, 32025; PPC64LE-NEXT:    beq+ 0, .LBB108_42026; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload2027; PPC64LE-NEXT:    #2028; PPC64LE-NEXT:    lwarx 6, 0, 32029; PPC64LE-NEXT:    cmplw 6, 42030; PPC64LE-NEXT:    beq+ 0, .LBB108_22031; PPC64LE-NEXT:  .LBB108_4: # %cmpxchg.nostore2032; PPC64LE-NEXT:    lwsync2033; PPC64LE-NEXT:    blr2034  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val syncscope("singlethread") seq_cst acquire2035  ret void2036}2037 2038define void @test109(ptr %ptr, i32 %cmp, i32 %val) {2039; PPC64LE-LABEL: test109:2040; PPC64LE:       # %bb.0: # %cmpxchg.start2041; PPC64LE-NEXT:    lwarx 6, 0, 32042; PPC64LE-NEXT:    cmplw 6, 42043; PPC64LE-NEXT:    bne- 0, .LBB109_42044; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore2045; PPC64LE-NEXT:    sync2046; PPC64LE-NEXT:  .LBB109_2: # %cmpxchg.trystore2047; PPC64LE-NEXT:    #2048; PPC64LE-NEXT:    stwcx. 5, 0, 32049; PPC64LE-NEXT:    beq+ 0, .LBB109_42050; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload2051; PPC64LE-NEXT:    #2052; PPC64LE-NEXT:    lwarx 6, 0, 32053; PPC64LE-NEXT:    cmplw 6, 42054; PPC64LE-NEXT:    beq+ 0, .LBB109_22055; PPC64LE-NEXT:  .LBB109_4: # %cmpxchg.nostore2056; PPC64LE-NEXT:    lwsync2057; PPC64LE-NEXT:    blr2058  %res = cmpxchg ptr %ptr, i32 %cmp, i32 %val syncscope("singlethread") seq_cst seq_cst2059  ret void2060}2061 2062define void @test110(ptr %ptr, i64 %cmp, i64 %val) {2063; PPC64LE-LABEL: test110:2064; PPC64LE:       # %bb.0:2065; PPC64LE-NEXT:  .LBB110_1: # %cmpxchg.start2066; PPC64LE-NEXT:    #2067; PPC64LE-NEXT:    ldarx 6, 0, 32068; PPC64LE-NEXT:    cmpld 6, 42069; PPC64LE-NEXT:    bnelr- 02070; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore2071; PPC64LE-NEXT:    #2072; PPC64LE-NEXT:    stdcx. 5, 0, 32073; PPC64LE-NEXT:    bne- 0, .LBB110_12074; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.end2075; PPC64LE-NEXT:    blr2076  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val syncscope("singlethread") monotonic monotonic2077  ret void2078}2079 2080define void @test111(ptr %ptr, i64 %cmp, i64 %val) {2081; PPC64LE-LABEL: test111:2082; PPC64LE:       # %bb.0:2083; PPC64LE-NEXT:  .LBB111_1: # %cmpxchg.start2084; PPC64LE-NEXT:    #2085; PPC64LE-NEXT:    ldarx 6, 0, 32086; PPC64LE-NEXT:    cmpld 6, 42087; PPC64LE-NEXT:    bnelr- 02088; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore2089; PPC64LE-NEXT:    #2090; PPC64LE-NEXT:    stdcx. 5, 0, 32091; PPC64LE-NEXT:    bne- 0, .LBB111_12092; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.success2093; PPC64LE-NEXT:    lwsync2094; PPC64LE-NEXT:    blr2095  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val syncscope("singlethread") acquire monotonic2096  ret void2097}2098 2099define void @test112(ptr %ptr, i64 %cmp, i64 %val) {2100; PPC64LE-LABEL: test112:2101; PPC64LE:       # %bb.0:2102; PPC64LE-NEXT:  .LBB112_1: # %cmpxchg.start2103; PPC64LE-NEXT:    #2104; PPC64LE-NEXT:    ldarx 6, 0, 32105; PPC64LE-NEXT:    cmpld 6, 42106; PPC64LE-NEXT:    bne- 0, .LBB112_32107; PPC64LE-NEXT:  # %bb.2: # %cmpxchg.fencedstore2108; PPC64LE-NEXT:    #2109; PPC64LE-NEXT:    stdcx. 5, 0, 32110; PPC64LE-NEXT:    bne- 0, .LBB112_12111; PPC64LE-NEXT:  .LBB112_3: # %cmpxchg.nostore2112; PPC64LE-NEXT:    lwsync2113; PPC64LE-NEXT:    blr2114  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val syncscope("singlethread") acquire acquire2115  ret void2116}2117 2118define void @test113(ptr %ptr, i64 %cmp, i64 %val) {2119; PPC64LE-LABEL: test113:2120; PPC64LE:       # %bb.0: # %cmpxchg.start2121; PPC64LE-NEXT:    ldarx 6, 0, 32122; PPC64LE-NEXT:    cmpld 6, 42123; PPC64LE-NEXT:    bnelr- 02124; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore2125; PPC64LE-NEXT:    lwsync2126; PPC64LE-NEXT:    .p2align 52127; PPC64LE-NEXT:  .LBB113_2: # %cmpxchg.trystore2128; PPC64LE-NEXT:    #2129; PPC64LE-NEXT:    stdcx. 5, 0, 32130; PPC64LE-NEXT:    beqlr+ 02131; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload2132; PPC64LE-NEXT:    #2133; PPC64LE-NEXT:    ldarx 6, 0, 32134; PPC64LE-NEXT:    cmpld 6, 42135; PPC64LE-NEXT:    beq+ 0, .LBB113_22136; PPC64LE-NEXT:    blr2137  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val syncscope("singlethread") release monotonic2138  ret void2139}2140 2141define void @test114(ptr %ptr, i64 %cmp, i64 %val) {2142; PPC64LE-LABEL: test114:2143; PPC64LE:       # %bb.0: # %cmpxchg.start2144; PPC64LE-NEXT:    ldarx 6, 0, 32145; PPC64LE-NEXT:    cmpld 6, 42146; PPC64LE-NEXT:    bne- 0, .LBB114_42147; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore2148; PPC64LE-NEXT:    lwsync2149; PPC64LE-NEXT:    .p2align 52150; PPC64LE-NEXT:  .LBB114_2: # %cmpxchg.trystore2151; PPC64LE-NEXT:    #2152; PPC64LE-NEXT:    stdcx. 5, 0, 32153; PPC64LE-NEXT:    beqlr+ 02154; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload2155; PPC64LE-NEXT:    #2156; PPC64LE-NEXT:    ldarx 6, 0, 32157; PPC64LE-NEXT:    cmpld 6, 42158; PPC64LE-NEXT:    beq+ 0, .LBB114_22159; PPC64LE-NEXT:  .LBB114_4: # %cmpxchg.nostore2160; PPC64LE-NEXT:    lwsync2161; PPC64LE-NEXT:    blr2162  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val syncscope("singlethread") release acquire2163  ret void2164}2165 2166define void @test115(ptr %ptr, i64 %cmp, i64 %val) {2167; PPC64LE-LABEL: test115:2168; PPC64LE:       # %bb.0: # %cmpxchg.start2169; PPC64LE-NEXT:    ldarx 6, 0, 32170; PPC64LE-NEXT:    cmpld 6, 42171; PPC64LE-NEXT:    bnelr- 02172; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore2173; PPC64LE-NEXT:    lwsync2174; PPC64LE-NEXT:  .LBB115_2: # %cmpxchg.trystore2175; PPC64LE-NEXT:    #2176; PPC64LE-NEXT:    stdcx. 5, 0, 32177; PPC64LE-NEXT:    beq+ 0, .LBB115_42178; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload2179; PPC64LE-NEXT:    #2180; PPC64LE-NEXT:    ldarx 6, 0, 32181; PPC64LE-NEXT:    cmpld 6, 42182; PPC64LE-NEXT:    beq+ 0, .LBB115_22183; PPC64LE-NEXT:    blr2184; PPC64LE-NEXT:  .LBB115_4: # %cmpxchg.success2185; PPC64LE-NEXT:    lwsync2186; PPC64LE-NEXT:    blr2187  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val syncscope("singlethread") acq_rel monotonic2188  ret void2189}2190 2191define void @test116(ptr %ptr, i64 %cmp, i64 %val) {2192; PPC64LE-LABEL: test116:2193; PPC64LE:       # %bb.0: # %cmpxchg.start2194; PPC64LE-NEXT:    ldarx 6, 0, 32195; PPC64LE-NEXT:    cmpld 6, 42196; PPC64LE-NEXT:    bne- 0, .LBB116_42197; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore2198; PPC64LE-NEXT:    lwsync2199; PPC64LE-NEXT:  .LBB116_2: # %cmpxchg.trystore2200; PPC64LE-NEXT:    #2201; PPC64LE-NEXT:    stdcx. 5, 0, 32202; PPC64LE-NEXT:    beq+ 0, .LBB116_42203; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload2204; PPC64LE-NEXT:    #2205; PPC64LE-NEXT:    ldarx 6, 0, 32206; PPC64LE-NEXT:    cmpld 6, 42207; PPC64LE-NEXT:    beq+ 0, .LBB116_22208; PPC64LE-NEXT:  .LBB116_4: # %cmpxchg.nostore2209; PPC64LE-NEXT:    lwsync2210; PPC64LE-NEXT:    blr2211  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val syncscope("singlethread") acq_rel acquire2212  ret void2213}2214 2215define void @test117(ptr %ptr, i64 %cmp, i64 %val) {2216; PPC64LE-LABEL: test117:2217; PPC64LE:       # %bb.0: # %cmpxchg.start2218; PPC64LE-NEXT:    ldarx 6, 0, 32219; PPC64LE-NEXT:    cmpld 6, 42220; PPC64LE-NEXT:    bnelr- 02221; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore2222; PPC64LE-NEXT:    sync2223; PPC64LE-NEXT:  .LBB117_2: # %cmpxchg.trystore2224; PPC64LE-NEXT:    #2225; PPC64LE-NEXT:    stdcx. 5, 0, 32226; PPC64LE-NEXT:    beq+ 0, .LBB117_42227; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload2228; PPC64LE-NEXT:    #2229; PPC64LE-NEXT:    ldarx 6, 0, 32230; PPC64LE-NEXT:    cmpld 6, 42231; PPC64LE-NEXT:    beq+ 0, .LBB117_22232; PPC64LE-NEXT:    blr2233; PPC64LE-NEXT:  .LBB117_4: # %cmpxchg.success2234; PPC64LE-NEXT:    lwsync2235; PPC64LE-NEXT:    blr2236  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val syncscope("singlethread") seq_cst monotonic2237  ret void2238}2239 2240define void @test118(ptr %ptr, i64 %cmp, i64 %val) {2241; PPC64LE-LABEL: test118:2242; PPC64LE:       # %bb.0: # %cmpxchg.start2243; PPC64LE-NEXT:    ldarx 6, 0, 32244; PPC64LE-NEXT:    cmpld 6, 42245; PPC64LE-NEXT:    bne- 0, .LBB118_42246; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore2247; PPC64LE-NEXT:    sync2248; PPC64LE-NEXT:  .LBB118_2: # %cmpxchg.trystore2249; PPC64LE-NEXT:    #2250; PPC64LE-NEXT:    stdcx. 5, 0, 32251; PPC64LE-NEXT:    beq+ 0, .LBB118_42252; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload2253; PPC64LE-NEXT:    #2254; PPC64LE-NEXT:    ldarx 6, 0, 32255; PPC64LE-NEXT:    cmpld 6, 42256; PPC64LE-NEXT:    beq+ 0, .LBB118_22257; PPC64LE-NEXT:  .LBB118_4: # %cmpxchg.nostore2258; PPC64LE-NEXT:    lwsync2259; PPC64LE-NEXT:    blr2260  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val syncscope("singlethread") seq_cst acquire2261  ret void2262}2263 2264define void @test119(ptr %ptr, i64 %cmp, i64 %val) {2265; PPC64LE-LABEL: test119:2266; PPC64LE:       # %bb.0: # %cmpxchg.start2267; PPC64LE-NEXT:    ldarx 6, 0, 32268; PPC64LE-NEXT:    cmpld 6, 42269; PPC64LE-NEXT:    bne- 0, .LBB119_42270; PPC64LE-NEXT:  # %bb.1: # %cmpxchg.fencedstore2271; PPC64LE-NEXT:    sync2272; PPC64LE-NEXT:  .LBB119_2: # %cmpxchg.trystore2273; PPC64LE-NEXT:    #2274; PPC64LE-NEXT:    stdcx. 5, 0, 32275; PPC64LE-NEXT:    beq+ 0, .LBB119_42276; PPC64LE-NEXT:  # %bb.3: # %cmpxchg.releasedload2277; PPC64LE-NEXT:    #2278; PPC64LE-NEXT:    ldarx 6, 0, 32279; PPC64LE-NEXT:    cmpld 6, 42280; PPC64LE-NEXT:    beq+ 0, .LBB119_22281; PPC64LE-NEXT:  .LBB119_4: # %cmpxchg.nostore2282; PPC64LE-NEXT:    lwsync2283; PPC64LE-NEXT:    blr2284  %res = cmpxchg ptr %ptr, i64 %cmp, i64 %val syncscope("singlethread") seq_cst seq_cst2285  ret void2286}2287 2288define i8 @test120(ptr %ptr, i8 %val) {2289; PPC64LE-LABEL: test120:2290; PPC64LE:       # %bb.0:2291; PPC64LE-NEXT:  .LBB120_1:2292; PPC64LE-NEXT:    lbarx 5, 0, 32293; PPC64LE-NEXT:    stbcx. 4, 0, 32294; PPC64LE-NEXT:    bne- 0, .LBB120_12295; PPC64LE-NEXT:  # %bb.2:2296; PPC64LE-NEXT:    mr 3, 52297; PPC64LE-NEXT:    blr2298  %ret = atomicrmw xchg ptr %ptr, i8 %val monotonic2299  ret i8 %ret2300}2301 2302define i8 @test121(ptr %ptr, i8 %val) {2303; PPC64LE-LABEL: test121:2304; PPC64LE:       # %bb.0:2305; PPC64LE-NEXT:    mr 5, 32306; PPC64LE-NEXT:  .LBB121_1:2307; PPC64LE-NEXT:    lbarx 3, 0, 52308; PPC64LE-NEXT:    stbcx. 4, 0, 52309; PPC64LE-NEXT:    bne- 0, .LBB121_12310; PPC64LE-NEXT:  # %bb.2:2311; PPC64LE-NEXT:    lwsync2312; PPC64LE-NEXT:    blr2313  %ret = atomicrmw xchg ptr %ptr, i8 %val acquire2314  ret i8 %ret2315}2316 2317define i8 @test122(ptr %ptr, i8 %val) {2318; PPC64LE-LABEL: test122:2319; PPC64LE:       # %bb.0:2320; PPC64LE-NEXT:    lwsync2321; PPC64LE-NEXT:  .LBB122_1:2322; PPC64LE-NEXT:    lbarx 5, 0, 32323; PPC64LE-NEXT:    stbcx. 4, 0, 32324; PPC64LE-NEXT:    bne- 0, .LBB122_12325; PPC64LE-NEXT:  # %bb.2:2326; PPC64LE-NEXT:    mr 3, 52327; PPC64LE-NEXT:    blr2328  %ret = atomicrmw xchg ptr %ptr, i8 %val release2329  ret i8 %ret2330}2331 2332define i8 @test123(ptr %ptr, i8 %val) {2333; PPC64LE-LABEL: test123:2334; PPC64LE:       # %bb.0:2335; PPC64LE-NEXT:    lwsync2336; PPC64LE-NEXT:  .LBB123_1:2337; PPC64LE-NEXT:    lbarx 5, 0, 32338; PPC64LE-NEXT:    stbcx. 4, 0, 32339; PPC64LE-NEXT:    bne- 0, .LBB123_12340; PPC64LE-NEXT:  # %bb.2:2341; PPC64LE-NEXT:    lwsync2342; PPC64LE-NEXT:    mr 3, 52343; PPC64LE-NEXT:    blr2344  %ret = atomicrmw xchg ptr %ptr, i8 %val acq_rel2345  ret i8 %ret2346}2347 2348define i8 @test124(ptr %ptr, i8 %val) {2349; PPC64LE-LABEL: test124:2350; PPC64LE:       # %bb.0:2351; PPC64LE-NEXT:    sync2352; PPC64LE-NEXT:  .LBB124_1:2353; PPC64LE-NEXT:    lbarx 5, 0, 32354; PPC64LE-NEXT:    stbcx. 4, 0, 32355; PPC64LE-NEXT:    bne- 0, .LBB124_12356; PPC64LE-NEXT:  # %bb.2:2357; PPC64LE-NEXT:    lwsync2358; PPC64LE-NEXT:    mr 3, 52359; PPC64LE-NEXT:    blr2360  %ret = atomicrmw xchg ptr %ptr, i8 %val seq_cst2361  ret i8 %ret2362}2363 2364define i16 @test125(ptr %ptr, i16 %val) {2365; PPC64LE-LABEL: test125:2366; PPC64LE:       # %bb.0:2367; PPC64LE-NEXT:  .LBB125_1:2368; PPC64LE-NEXT:    lharx 5, 0, 32369; PPC64LE-NEXT:    sthcx. 4, 0, 32370; PPC64LE-NEXT:    bne- 0, .LBB125_12371; PPC64LE-NEXT:  # %bb.2:2372; PPC64LE-NEXT:    mr 3, 52373; PPC64LE-NEXT:    blr2374  %ret = atomicrmw xchg ptr %ptr, i16 %val monotonic2375  ret i16 %ret2376}2377 2378define i16 @test126(ptr %ptr, i16 %val) {2379; PPC64LE-LABEL: test126:2380; PPC64LE:       # %bb.0:2381; PPC64LE-NEXT:    mr 5, 32382; PPC64LE-NEXT:  .LBB126_1:2383; PPC64LE-NEXT:    lharx 3, 0, 52384; PPC64LE-NEXT:    sthcx. 4, 0, 52385; PPC64LE-NEXT:    bne- 0, .LBB126_12386; PPC64LE-NEXT:  # %bb.2:2387; PPC64LE-NEXT:    lwsync2388; PPC64LE-NEXT:    blr2389  %ret = atomicrmw xchg ptr %ptr, i16 %val acquire2390  ret i16 %ret2391}2392 2393define i16 @test127(ptr %ptr, i16 %val) {2394; PPC64LE-LABEL: test127:2395; PPC64LE:       # %bb.0:2396; PPC64LE-NEXT:    lwsync2397; PPC64LE-NEXT:  .LBB127_1:2398; PPC64LE-NEXT:    lharx 5, 0, 32399; PPC64LE-NEXT:    sthcx. 4, 0, 32400; PPC64LE-NEXT:    bne- 0, .LBB127_12401; PPC64LE-NEXT:  # %bb.2:2402; PPC64LE-NEXT:    mr 3, 52403; PPC64LE-NEXT:    blr2404  %ret = atomicrmw xchg ptr %ptr, i16 %val release2405  ret i16 %ret2406}2407 2408define i16 @test128(ptr %ptr, i16 %val) {2409; PPC64LE-LABEL: test128:2410; PPC64LE:       # %bb.0:2411; PPC64LE-NEXT:    lwsync2412; PPC64LE-NEXT:  .LBB128_1:2413; PPC64LE-NEXT:    lharx 5, 0, 32414; PPC64LE-NEXT:    sthcx. 4, 0, 32415; PPC64LE-NEXT:    bne- 0, .LBB128_12416; PPC64LE-NEXT:  # %bb.2:2417; PPC64LE-NEXT:    lwsync2418; PPC64LE-NEXT:    mr 3, 52419; PPC64LE-NEXT:    blr2420  %ret = atomicrmw xchg ptr %ptr, i16 %val acq_rel2421  ret i16 %ret2422}2423 2424define i16 @test129(ptr %ptr, i16 %val) {2425; PPC64LE-LABEL: test129:2426; PPC64LE:       # %bb.0:2427; PPC64LE-NEXT:    sync2428; PPC64LE-NEXT:  .LBB129_1:2429; PPC64LE-NEXT:    lharx 5, 0, 32430; PPC64LE-NEXT:    sthcx. 4, 0, 32431; PPC64LE-NEXT:    bne- 0, .LBB129_12432; PPC64LE-NEXT:  # %bb.2:2433; PPC64LE-NEXT:    lwsync2434; PPC64LE-NEXT:    mr 3, 52435; PPC64LE-NEXT:    blr2436  %ret = atomicrmw xchg ptr %ptr, i16 %val seq_cst2437  ret i16 %ret2438}2439 2440define i32 @test130(ptr %ptr, i32 %val) {2441; PPC64LE-LABEL: test130:2442; PPC64LE:       # %bb.0:2443; PPC64LE-NEXT:  .LBB130_1:2444; PPC64LE-NEXT:    lwarx 5, 0, 32445; PPC64LE-NEXT:    stwcx. 4, 0, 32446; PPC64LE-NEXT:    bne- 0, .LBB130_12447; PPC64LE-NEXT:  # %bb.2:2448; PPC64LE-NEXT:    mr 3, 52449; PPC64LE-NEXT:    blr2450  %ret = atomicrmw xchg ptr %ptr, i32 %val monotonic2451  ret i32 %ret2452}2453 2454define i32 @test131(ptr %ptr, i32 %val) {2455; PPC64LE-LABEL: test131:2456; PPC64LE:       # %bb.0:2457; PPC64LE-NEXT:    mr 5, 32458; PPC64LE-NEXT:  .LBB131_1:2459; PPC64LE-NEXT:    lwarx 3, 0, 52460; PPC64LE-NEXT:    stwcx. 4, 0, 52461; PPC64LE-NEXT:    bne- 0, .LBB131_12462; PPC64LE-NEXT:  # %bb.2:2463; PPC64LE-NEXT:    lwsync2464; PPC64LE-NEXT:    blr2465  %ret = atomicrmw xchg ptr %ptr, i32 %val acquire2466  ret i32 %ret2467}2468 2469define i32 @test132(ptr %ptr, i32 %val) {2470; PPC64LE-LABEL: test132:2471; PPC64LE:       # %bb.0:2472; PPC64LE-NEXT:    lwsync2473; PPC64LE-NEXT:  .LBB132_1:2474; PPC64LE-NEXT:    lwarx 5, 0, 32475; PPC64LE-NEXT:    stwcx. 4, 0, 32476; PPC64LE-NEXT:    bne- 0, .LBB132_12477; PPC64LE-NEXT:  # %bb.2:2478; PPC64LE-NEXT:    mr 3, 52479; PPC64LE-NEXT:    blr2480  %ret = atomicrmw xchg ptr %ptr, i32 %val release2481  ret i32 %ret2482}2483 2484define i32 @test133(ptr %ptr, i32 %val) {2485; PPC64LE-LABEL: test133:2486; PPC64LE:       # %bb.0:2487; PPC64LE-NEXT:    lwsync2488; PPC64LE-NEXT:  .LBB133_1:2489; PPC64LE-NEXT:    lwarx 5, 0, 32490; PPC64LE-NEXT:    stwcx. 4, 0, 32491; PPC64LE-NEXT:    bne- 0, .LBB133_12492; PPC64LE-NEXT:  # %bb.2:2493; PPC64LE-NEXT:    lwsync2494; PPC64LE-NEXT:    mr 3, 52495; PPC64LE-NEXT:    blr2496  %ret = atomicrmw xchg ptr %ptr, i32 %val acq_rel2497  ret i32 %ret2498}2499 2500define i32 @test134(ptr %ptr, i32 %val) {2501; PPC64LE-LABEL: test134:2502; PPC64LE:       # %bb.0:2503; PPC64LE-NEXT:    sync2504; PPC64LE-NEXT:  .LBB134_1:2505; PPC64LE-NEXT:    lwarx 5, 0, 32506; PPC64LE-NEXT:    stwcx. 4, 0, 32507; PPC64LE-NEXT:    bne- 0, .LBB134_12508; PPC64LE-NEXT:  # %bb.2:2509; PPC64LE-NEXT:    lwsync2510; PPC64LE-NEXT:    mr 3, 52511; PPC64LE-NEXT:    blr2512  %ret = atomicrmw xchg ptr %ptr, i32 %val seq_cst2513  ret i32 %ret2514}2515 2516define i64 @test135(ptr %ptr, i64 %val) {2517; PPC64LE-LABEL: test135:2518; PPC64LE:       # %bb.0:2519; PPC64LE-NEXT:  .LBB135_1:2520; PPC64LE-NEXT:    ldarx 5, 0, 32521; PPC64LE-NEXT:    stdcx. 4, 0, 32522; PPC64LE-NEXT:    bne- 0, .LBB135_12523; PPC64LE-NEXT:  # %bb.2:2524; PPC64LE-NEXT:    mr 3, 52525; PPC64LE-NEXT:    blr2526  %ret = atomicrmw xchg ptr %ptr, i64 %val monotonic2527  ret i64 %ret2528}2529 2530define i64 @test136(ptr %ptr, i64 %val) {2531; PPC64LE-LABEL: test136:2532; PPC64LE:       # %bb.0:2533; PPC64LE-NEXT:    mr 5, 32534; PPC64LE-NEXT:  .LBB136_1:2535; PPC64LE-NEXT:    ldarx 3, 0, 52536; PPC64LE-NEXT:    stdcx. 4, 0, 52537; PPC64LE-NEXT:    bne- 0, .LBB136_12538; PPC64LE-NEXT:  # %bb.2:2539; PPC64LE-NEXT:    lwsync2540; PPC64LE-NEXT:    blr2541  %ret = atomicrmw xchg ptr %ptr, i64 %val acquire2542  ret i64 %ret2543}2544 2545define i64 @test137(ptr %ptr, i64 %val) {2546; PPC64LE-LABEL: test137:2547; PPC64LE:       # %bb.0:2548; PPC64LE-NEXT:    lwsync2549; PPC64LE-NEXT:  .LBB137_1:2550; PPC64LE-NEXT:    ldarx 5, 0, 32551; PPC64LE-NEXT:    stdcx. 4, 0, 32552; PPC64LE-NEXT:    bne- 0, .LBB137_12553; PPC64LE-NEXT:  # %bb.2:2554; PPC64LE-NEXT:    mr 3, 52555; PPC64LE-NEXT:    blr2556  %ret = atomicrmw xchg ptr %ptr, i64 %val release2557  ret i64 %ret2558}2559 2560define i64 @test138(ptr %ptr, i64 %val) {2561; PPC64LE-LABEL: test138:2562; PPC64LE:       # %bb.0:2563; PPC64LE-NEXT:    lwsync2564; PPC64LE-NEXT:  .LBB138_1:2565; PPC64LE-NEXT:    ldarx 5, 0, 32566; PPC64LE-NEXT:    stdcx. 4, 0, 32567; PPC64LE-NEXT:    bne- 0, .LBB138_12568; PPC64LE-NEXT:  # %bb.2:2569; PPC64LE-NEXT:    lwsync2570; PPC64LE-NEXT:    mr 3, 52571; PPC64LE-NEXT:    blr2572  %ret = atomicrmw xchg ptr %ptr, i64 %val acq_rel2573  ret i64 %ret2574}2575 2576define i64 @test139(ptr %ptr, i64 %val) {2577; PPC64LE-LABEL: test139:2578; PPC64LE:       # %bb.0:2579; PPC64LE-NEXT:    sync2580; PPC64LE-NEXT:  .LBB139_1:2581; PPC64LE-NEXT:    ldarx 5, 0, 32582; PPC64LE-NEXT:    stdcx. 4, 0, 32583; PPC64LE-NEXT:    bne- 0, .LBB139_12584; PPC64LE-NEXT:  # %bb.2:2585; PPC64LE-NEXT:    lwsync2586; PPC64LE-NEXT:    mr 3, 52587; PPC64LE-NEXT:    blr2588  %ret = atomicrmw xchg ptr %ptr, i64 %val seq_cst2589  ret i64 %ret2590}2591 2592define i8 @test140(ptr %ptr, i8 %val) {2593; PPC64LE-LABEL: test140:2594; PPC64LE:       # %bb.0:2595; PPC64LE-NEXT:  .LBB140_1:2596; PPC64LE-NEXT:    lbarx 5, 0, 32597; PPC64LE-NEXT:    add 6, 4, 52598; PPC64LE-NEXT:    stbcx. 6, 0, 32599; PPC64LE-NEXT:    bne- 0, .LBB140_12600; PPC64LE-NEXT:  # %bb.2:2601; PPC64LE-NEXT:    mr 3, 52602; PPC64LE-NEXT:    blr2603  %ret = atomicrmw add ptr %ptr, i8 %val monotonic2604  ret i8 %ret2605}2606 2607define i8 @test141(ptr %ptr, i8 %val) {2608; PPC64LE-LABEL: test141:2609; PPC64LE:       # %bb.0:2610; PPC64LE-NEXT:    mr 5, 32611; PPC64LE-NEXT:  .LBB141_1:2612; PPC64LE-NEXT:    lbarx 3, 0, 52613; PPC64LE-NEXT:    add 6, 4, 32614; PPC64LE-NEXT:    stbcx. 6, 0, 52615; PPC64LE-NEXT:    bne- 0, .LBB141_12616; PPC64LE-NEXT:  # %bb.2:2617; PPC64LE-NEXT:    lwsync2618; PPC64LE-NEXT:    blr2619  %ret = atomicrmw add ptr %ptr, i8 %val acquire2620  ret i8 %ret2621}2622 2623define i8 @test142(ptr %ptr, i8 %val) {2624; PPC64LE-LABEL: test142:2625; PPC64LE:       # %bb.0:2626; PPC64LE-NEXT:    lwsync2627; PPC64LE-NEXT:  .LBB142_1:2628; PPC64LE-NEXT:    lbarx 5, 0, 32629; PPC64LE-NEXT:    add 6, 4, 52630; PPC64LE-NEXT:    stbcx. 6, 0, 32631; PPC64LE-NEXT:    bne- 0, .LBB142_12632; PPC64LE-NEXT:  # %bb.2:2633; PPC64LE-NEXT:    mr 3, 52634; PPC64LE-NEXT:    blr2635  %ret = atomicrmw add ptr %ptr, i8 %val release2636  ret i8 %ret2637}2638 2639define i8 @test143(ptr %ptr, i8 %val) {2640; PPC64LE-LABEL: test143:2641; PPC64LE:       # %bb.0:2642; PPC64LE-NEXT:    lwsync2643; PPC64LE-NEXT:  .LBB143_1:2644; PPC64LE-NEXT:    lbarx 5, 0, 32645; PPC64LE-NEXT:    add 6, 4, 52646; PPC64LE-NEXT:    stbcx. 6, 0, 32647; PPC64LE-NEXT:    bne- 0, .LBB143_12648; PPC64LE-NEXT:  # %bb.2:2649; PPC64LE-NEXT:    lwsync2650; PPC64LE-NEXT:    mr 3, 52651; PPC64LE-NEXT:    blr2652  %ret = atomicrmw add ptr %ptr, i8 %val acq_rel2653  ret i8 %ret2654}2655 2656define i8 @test144(ptr %ptr, i8 %val) {2657; PPC64LE-LABEL: test144:2658; PPC64LE:       # %bb.0:2659; PPC64LE-NEXT:    sync2660; PPC64LE-NEXT:  .LBB144_1:2661; PPC64LE-NEXT:    lbarx 5, 0, 32662; PPC64LE-NEXT:    add 6, 4, 52663; PPC64LE-NEXT:    stbcx. 6, 0, 32664; PPC64LE-NEXT:    bne- 0, .LBB144_12665; PPC64LE-NEXT:  # %bb.2:2666; PPC64LE-NEXT:    lwsync2667; PPC64LE-NEXT:    mr 3, 52668; PPC64LE-NEXT:    blr2669  %ret = atomicrmw add ptr %ptr, i8 %val seq_cst2670  ret i8 %ret2671}2672 2673define i16 @test145(ptr %ptr, i16 %val) {2674; PPC64LE-LABEL: test145:2675; PPC64LE:       # %bb.0:2676; PPC64LE-NEXT:  .LBB145_1:2677; PPC64LE-NEXT:    lharx 5, 0, 32678; PPC64LE-NEXT:    add 6, 4, 52679; PPC64LE-NEXT:    sthcx. 6, 0, 32680; PPC64LE-NEXT:    bne- 0, .LBB145_12681; PPC64LE-NEXT:  # %bb.2:2682; PPC64LE-NEXT:    mr 3, 52683; PPC64LE-NEXT:    blr2684  %ret = atomicrmw add ptr %ptr, i16 %val monotonic2685  ret i16 %ret2686}2687 2688define i16 @test146(ptr %ptr, i16 %val) {2689; PPC64LE-LABEL: test146:2690; PPC64LE:       # %bb.0:2691; PPC64LE-NEXT:    mr 5, 32692; PPC64LE-NEXT:  .LBB146_1:2693; PPC64LE-NEXT:    lharx 3, 0, 52694; PPC64LE-NEXT:    add 6, 4, 32695; PPC64LE-NEXT:    sthcx. 6, 0, 52696; PPC64LE-NEXT:    bne- 0, .LBB146_12697; PPC64LE-NEXT:  # %bb.2:2698; PPC64LE-NEXT:    lwsync2699; PPC64LE-NEXT:    blr2700  %ret = atomicrmw add ptr %ptr, i16 %val acquire2701  ret i16 %ret2702}2703 2704define i16 @test147(ptr %ptr, i16 %val) {2705; PPC64LE-LABEL: test147:2706; PPC64LE:       # %bb.0:2707; PPC64LE-NEXT:    lwsync2708; PPC64LE-NEXT:  .LBB147_1:2709; PPC64LE-NEXT:    lharx 5, 0, 32710; PPC64LE-NEXT:    add 6, 4, 52711; PPC64LE-NEXT:    sthcx. 6, 0, 32712; PPC64LE-NEXT:    bne- 0, .LBB147_12713; PPC64LE-NEXT:  # %bb.2:2714; PPC64LE-NEXT:    mr 3, 52715; PPC64LE-NEXT:    blr2716  %ret = atomicrmw add ptr %ptr, i16 %val release2717  ret i16 %ret2718}2719 2720define i16 @test148(ptr %ptr, i16 %val) {2721; PPC64LE-LABEL: test148:2722; PPC64LE:       # %bb.0:2723; PPC64LE-NEXT:    lwsync2724; PPC64LE-NEXT:  .LBB148_1:2725; PPC64LE-NEXT:    lharx 5, 0, 32726; PPC64LE-NEXT:    add 6, 4, 52727; PPC64LE-NEXT:    sthcx. 6, 0, 32728; PPC64LE-NEXT:    bne- 0, .LBB148_12729; PPC64LE-NEXT:  # %bb.2:2730; PPC64LE-NEXT:    lwsync2731; PPC64LE-NEXT:    mr 3, 52732; PPC64LE-NEXT:    blr2733  %ret = atomicrmw add ptr %ptr, i16 %val acq_rel2734  ret i16 %ret2735}2736 2737define i16 @test149(ptr %ptr, i16 %val) {2738; PPC64LE-LABEL: test149:2739; PPC64LE:       # %bb.0:2740; PPC64LE-NEXT:    sync2741; PPC64LE-NEXT:  .LBB149_1:2742; PPC64LE-NEXT:    lharx 5, 0, 32743; PPC64LE-NEXT:    add 6, 4, 52744; PPC64LE-NEXT:    sthcx. 6, 0, 32745; PPC64LE-NEXT:    bne- 0, .LBB149_12746; PPC64LE-NEXT:  # %bb.2:2747; PPC64LE-NEXT:    lwsync2748; PPC64LE-NEXT:    mr 3, 52749; PPC64LE-NEXT:    blr2750  %ret = atomicrmw add ptr %ptr, i16 %val seq_cst2751  ret i16 %ret2752}2753 2754define i32 @test150(ptr %ptr, i32 %val) {2755; PPC64LE-LABEL: test150:2756; PPC64LE:       # %bb.0:2757; PPC64LE-NEXT:  .LBB150_1:2758; PPC64LE-NEXT:    lwarx 5, 0, 32759; PPC64LE-NEXT:    add 6, 4, 52760; PPC64LE-NEXT:    stwcx. 6, 0, 32761; PPC64LE-NEXT:    bne- 0, .LBB150_12762; PPC64LE-NEXT:  # %bb.2:2763; PPC64LE-NEXT:    mr 3, 52764; PPC64LE-NEXT:    blr2765  %ret = atomicrmw add ptr %ptr, i32 %val monotonic2766  ret i32 %ret2767}2768 2769define i32 @test151(ptr %ptr, i32 %val) {2770; PPC64LE-LABEL: test151:2771; PPC64LE:       # %bb.0:2772; PPC64LE-NEXT:    mr 5, 32773; PPC64LE-NEXT:  .LBB151_1:2774; PPC64LE-NEXT:    lwarx 3, 0, 52775; PPC64LE-NEXT:    add 6, 4, 32776; PPC64LE-NEXT:    stwcx. 6, 0, 52777; PPC64LE-NEXT:    bne- 0, .LBB151_12778; PPC64LE-NEXT:  # %bb.2:2779; PPC64LE-NEXT:    lwsync2780; PPC64LE-NEXT:    blr2781  %ret = atomicrmw add ptr %ptr, i32 %val acquire2782  ret i32 %ret2783}2784 2785define i32 @test152(ptr %ptr, i32 %val) {2786; PPC64LE-LABEL: test152:2787; PPC64LE:       # %bb.0:2788; PPC64LE-NEXT:    lwsync2789; PPC64LE-NEXT:  .LBB152_1:2790; PPC64LE-NEXT:    lwarx 5, 0, 32791; PPC64LE-NEXT:    add 6, 4, 52792; PPC64LE-NEXT:    stwcx. 6, 0, 32793; PPC64LE-NEXT:    bne- 0, .LBB152_12794; PPC64LE-NEXT:  # %bb.2:2795; PPC64LE-NEXT:    mr 3, 52796; PPC64LE-NEXT:    blr2797  %ret = atomicrmw add ptr %ptr, i32 %val release2798  ret i32 %ret2799}2800 2801define i32 @test153(ptr %ptr, i32 %val) {2802; PPC64LE-LABEL: test153:2803; PPC64LE:       # %bb.0:2804; PPC64LE-NEXT:    lwsync2805; PPC64LE-NEXT:  .LBB153_1:2806; PPC64LE-NEXT:    lwarx 5, 0, 32807; PPC64LE-NEXT:    add 6, 4, 52808; PPC64LE-NEXT:    stwcx. 6, 0, 32809; PPC64LE-NEXT:    bne- 0, .LBB153_12810; PPC64LE-NEXT:  # %bb.2:2811; PPC64LE-NEXT:    lwsync2812; PPC64LE-NEXT:    mr 3, 52813; PPC64LE-NEXT:    blr2814  %ret = atomicrmw add ptr %ptr, i32 %val acq_rel2815  ret i32 %ret2816}2817 2818define i32 @test154(ptr %ptr, i32 %val) {2819; PPC64LE-LABEL: test154:2820; PPC64LE:       # %bb.0:2821; PPC64LE-NEXT:    sync2822; PPC64LE-NEXT:  .LBB154_1:2823; PPC64LE-NEXT:    lwarx 5, 0, 32824; PPC64LE-NEXT:    add 6, 4, 52825; PPC64LE-NEXT:    stwcx. 6, 0, 32826; PPC64LE-NEXT:    bne- 0, .LBB154_12827; PPC64LE-NEXT:  # %bb.2:2828; PPC64LE-NEXT:    lwsync2829; PPC64LE-NEXT:    mr 3, 52830; PPC64LE-NEXT:    blr2831  %ret = atomicrmw add ptr %ptr, i32 %val seq_cst2832  ret i32 %ret2833}2834 2835define i64 @test155(ptr %ptr, i64 %val) {2836; PPC64LE-LABEL: test155:2837; PPC64LE:       # %bb.0:2838; PPC64LE-NEXT:  .LBB155_1:2839; PPC64LE-NEXT:    ldarx 5, 0, 32840; PPC64LE-NEXT:    add 6, 4, 52841; PPC64LE-NEXT:    stdcx. 6, 0, 32842; PPC64LE-NEXT:    bne- 0, .LBB155_12843; PPC64LE-NEXT:  # %bb.2:2844; PPC64LE-NEXT:    mr 3, 52845; PPC64LE-NEXT:    blr2846  %ret = atomicrmw add ptr %ptr, i64 %val monotonic2847  ret i64 %ret2848}2849 2850define i64 @test156(ptr %ptr, i64 %val) {2851; PPC64LE-LABEL: test156:2852; PPC64LE:       # %bb.0:2853; PPC64LE-NEXT:    mr 5, 32854; PPC64LE-NEXT:  .LBB156_1:2855; PPC64LE-NEXT:    ldarx 3, 0, 52856; PPC64LE-NEXT:    add 6, 4, 32857; PPC64LE-NEXT:    stdcx. 6, 0, 52858; PPC64LE-NEXT:    bne- 0, .LBB156_12859; PPC64LE-NEXT:  # %bb.2:2860; PPC64LE-NEXT:    lwsync2861; PPC64LE-NEXT:    blr2862  %ret = atomicrmw add ptr %ptr, i64 %val acquire2863  ret i64 %ret2864}2865 2866define i64 @test157(ptr %ptr, i64 %val) {2867; PPC64LE-LABEL: test157:2868; PPC64LE:       # %bb.0:2869; PPC64LE-NEXT:    lwsync2870; PPC64LE-NEXT:  .LBB157_1:2871; PPC64LE-NEXT:    ldarx 5, 0, 32872; PPC64LE-NEXT:    add 6, 4, 52873; PPC64LE-NEXT:    stdcx. 6, 0, 32874; PPC64LE-NEXT:    bne- 0, .LBB157_12875; PPC64LE-NEXT:  # %bb.2:2876; PPC64LE-NEXT:    mr 3, 52877; PPC64LE-NEXT:    blr2878  %ret = atomicrmw add ptr %ptr, i64 %val release2879  ret i64 %ret2880}2881 2882define i64 @test158(ptr %ptr, i64 %val) {2883; PPC64LE-LABEL: test158:2884; PPC64LE:       # %bb.0:2885; PPC64LE-NEXT:    lwsync2886; PPC64LE-NEXT:  .LBB158_1:2887; PPC64LE-NEXT:    ldarx 5, 0, 32888; PPC64LE-NEXT:    add 6, 4, 52889; PPC64LE-NEXT:    stdcx. 6, 0, 32890; PPC64LE-NEXT:    bne- 0, .LBB158_12891; PPC64LE-NEXT:  # %bb.2:2892; PPC64LE-NEXT:    lwsync2893; PPC64LE-NEXT:    mr 3, 52894; PPC64LE-NEXT:    blr2895  %ret = atomicrmw add ptr %ptr, i64 %val acq_rel2896  ret i64 %ret2897}2898 2899define i64 @test159(ptr %ptr, i64 %val) {2900; PPC64LE-LABEL: test159:2901; PPC64LE:       # %bb.0:2902; PPC64LE-NEXT:    sync2903; PPC64LE-NEXT:  .LBB159_1:2904; PPC64LE-NEXT:    ldarx 5, 0, 32905; PPC64LE-NEXT:    add 6, 4, 52906; PPC64LE-NEXT:    stdcx. 6, 0, 32907; PPC64LE-NEXT:    bne- 0, .LBB159_12908; PPC64LE-NEXT:  # %bb.2:2909; PPC64LE-NEXT:    lwsync2910; PPC64LE-NEXT:    mr 3, 52911; PPC64LE-NEXT:    blr2912  %ret = atomicrmw add ptr %ptr, i64 %val seq_cst2913  ret i64 %ret2914}2915 2916define i8 @test160(ptr %ptr, i8 %val) {2917; PPC64LE-LABEL: test160:2918; PPC64LE:       # %bb.0:2919; PPC64LE-NEXT:  .LBB160_1:2920; PPC64LE-NEXT:    lbarx 5, 0, 32921; PPC64LE-NEXT:    sub 6, 5, 42922; PPC64LE-NEXT:    stbcx. 6, 0, 32923; PPC64LE-NEXT:    bne- 0, .LBB160_12924; PPC64LE-NEXT:  # %bb.2:2925; PPC64LE-NEXT:    mr 3, 52926; PPC64LE-NEXT:    blr2927  %ret = atomicrmw sub ptr %ptr, i8 %val monotonic2928  ret i8 %ret2929}2930 2931define i8 @test161(ptr %ptr, i8 %val) {2932; PPC64LE-LABEL: test161:2933; PPC64LE:       # %bb.0:2934; PPC64LE-NEXT:    mr 5, 32935; PPC64LE-NEXT:  .LBB161_1:2936; PPC64LE-NEXT:    lbarx 3, 0, 52937; PPC64LE-NEXT:    sub 6, 3, 42938; PPC64LE-NEXT:    stbcx. 6, 0, 52939; PPC64LE-NEXT:    bne- 0, .LBB161_12940; PPC64LE-NEXT:  # %bb.2:2941; PPC64LE-NEXT:    lwsync2942; PPC64LE-NEXT:    blr2943  %ret = atomicrmw sub ptr %ptr, i8 %val acquire2944  ret i8 %ret2945}2946 2947define i8 @test162(ptr %ptr, i8 %val) {2948; PPC64LE-LABEL: test162:2949; PPC64LE:       # %bb.0:2950; PPC64LE-NEXT:    lwsync2951; PPC64LE-NEXT:  .LBB162_1:2952; PPC64LE-NEXT:    lbarx 5, 0, 32953; PPC64LE-NEXT:    sub 6, 5, 42954; PPC64LE-NEXT:    stbcx. 6, 0, 32955; PPC64LE-NEXT:    bne- 0, .LBB162_12956; PPC64LE-NEXT:  # %bb.2:2957; PPC64LE-NEXT:    mr 3, 52958; PPC64LE-NEXT:    blr2959  %ret = atomicrmw sub ptr %ptr, i8 %val release2960  ret i8 %ret2961}2962 2963define i8 @test163(ptr %ptr, i8 %val) {2964; PPC64LE-LABEL: test163:2965; PPC64LE:       # %bb.0:2966; PPC64LE-NEXT:    lwsync2967; PPC64LE-NEXT:  .LBB163_1:2968; PPC64LE-NEXT:    lbarx 5, 0, 32969; PPC64LE-NEXT:    sub 6, 5, 42970; PPC64LE-NEXT:    stbcx. 6, 0, 32971; PPC64LE-NEXT:    bne- 0, .LBB163_12972; PPC64LE-NEXT:  # %bb.2:2973; PPC64LE-NEXT:    lwsync2974; PPC64LE-NEXT:    mr 3, 52975; PPC64LE-NEXT:    blr2976  %ret = atomicrmw sub ptr %ptr, i8 %val acq_rel2977  ret i8 %ret2978}2979 2980define i8 @test164(ptr %ptr, i8 %val) {2981; PPC64LE-LABEL: test164:2982; PPC64LE:       # %bb.0:2983; PPC64LE-NEXT:    sync2984; PPC64LE-NEXT:  .LBB164_1:2985; PPC64LE-NEXT:    lbarx 5, 0, 32986; PPC64LE-NEXT:    sub 6, 5, 42987; PPC64LE-NEXT:    stbcx. 6, 0, 32988; PPC64LE-NEXT:    bne- 0, .LBB164_12989; PPC64LE-NEXT:  # %bb.2:2990; PPC64LE-NEXT:    lwsync2991; PPC64LE-NEXT:    mr 3, 52992; PPC64LE-NEXT:    blr2993  %ret = atomicrmw sub ptr %ptr, i8 %val seq_cst2994  ret i8 %ret2995}2996 2997define i16 @test165(ptr %ptr, i16 %val) {2998; PPC64LE-LABEL: test165:2999; PPC64LE:       # %bb.0:3000; PPC64LE-NEXT:  .LBB165_1:3001; PPC64LE-NEXT:    lharx 5, 0, 33002; PPC64LE-NEXT:    sub 6, 5, 43003; PPC64LE-NEXT:    sthcx. 6, 0, 33004; PPC64LE-NEXT:    bne- 0, .LBB165_13005; PPC64LE-NEXT:  # %bb.2:3006; PPC64LE-NEXT:    mr 3, 53007; PPC64LE-NEXT:    blr3008  %ret = atomicrmw sub ptr %ptr, i16 %val monotonic3009  ret i16 %ret3010}3011 3012define i16 @test166(ptr %ptr, i16 %val) {3013; PPC64LE-LABEL: test166:3014; PPC64LE:       # %bb.0:3015; PPC64LE-NEXT:    mr 5, 33016; PPC64LE-NEXT:  .LBB166_1:3017; PPC64LE-NEXT:    lharx 3, 0, 53018; PPC64LE-NEXT:    sub 6, 3, 43019; PPC64LE-NEXT:    sthcx. 6, 0, 53020; PPC64LE-NEXT:    bne- 0, .LBB166_13021; PPC64LE-NEXT:  # %bb.2:3022; PPC64LE-NEXT:    lwsync3023; PPC64LE-NEXT:    blr3024  %ret = atomicrmw sub ptr %ptr, i16 %val acquire3025  ret i16 %ret3026}3027 3028define i16 @test167(ptr %ptr, i16 %val) {3029; PPC64LE-LABEL: test167:3030; PPC64LE:       # %bb.0:3031; PPC64LE-NEXT:    lwsync3032; PPC64LE-NEXT:  .LBB167_1:3033; PPC64LE-NEXT:    lharx 5, 0, 33034; PPC64LE-NEXT:    sub 6, 5, 43035; PPC64LE-NEXT:    sthcx. 6, 0, 33036; PPC64LE-NEXT:    bne- 0, .LBB167_13037; PPC64LE-NEXT:  # %bb.2:3038; PPC64LE-NEXT:    mr 3, 53039; PPC64LE-NEXT:    blr3040  %ret = atomicrmw sub ptr %ptr, i16 %val release3041  ret i16 %ret3042}3043 3044define i16 @test168(ptr %ptr, i16 %val) {3045; PPC64LE-LABEL: test168:3046; PPC64LE:       # %bb.0:3047; PPC64LE-NEXT:    lwsync3048; PPC64LE-NEXT:  .LBB168_1:3049; PPC64LE-NEXT:    lharx 5, 0, 33050; PPC64LE-NEXT:    sub 6, 5, 43051; PPC64LE-NEXT:    sthcx. 6, 0, 33052; PPC64LE-NEXT:    bne- 0, .LBB168_13053; PPC64LE-NEXT:  # %bb.2:3054; PPC64LE-NEXT:    lwsync3055; PPC64LE-NEXT:    mr 3, 53056; PPC64LE-NEXT:    blr3057  %ret = atomicrmw sub ptr %ptr, i16 %val acq_rel3058  ret i16 %ret3059}3060 3061define i16 @test169(ptr %ptr, i16 %val) {3062; PPC64LE-LABEL: test169:3063; PPC64LE:       # %bb.0:3064; PPC64LE-NEXT:    sync3065; PPC64LE-NEXT:  .LBB169_1:3066; PPC64LE-NEXT:    lharx 5, 0, 33067; PPC64LE-NEXT:    sub 6, 5, 43068; PPC64LE-NEXT:    sthcx. 6, 0, 33069; PPC64LE-NEXT:    bne- 0, .LBB169_13070; PPC64LE-NEXT:  # %bb.2:3071; PPC64LE-NEXT:    lwsync3072; PPC64LE-NEXT:    mr 3, 53073; PPC64LE-NEXT:    blr3074  %ret = atomicrmw sub ptr %ptr, i16 %val seq_cst3075  ret i16 %ret3076}3077 3078define i32 @test170(ptr %ptr, i32 %val) {3079; PPC64LE-LABEL: test170:3080; PPC64LE:       # %bb.0:3081; PPC64LE-NEXT:  .LBB170_1:3082; PPC64LE-NEXT:    lwarx 5, 0, 33083; PPC64LE-NEXT:    sub 6, 5, 43084; PPC64LE-NEXT:    stwcx. 6, 0, 33085; PPC64LE-NEXT:    bne- 0, .LBB170_13086; PPC64LE-NEXT:  # %bb.2:3087; PPC64LE-NEXT:    mr 3, 53088; PPC64LE-NEXT:    blr3089  %ret = atomicrmw sub ptr %ptr, i32 %val monotonic3090  ret i32 %ret3091}3092 3093define i32 @test171(ptr %ptr, i32 %val) {3094; PPC64LE-LABEL: test171:3095; PPC64LE:       # %bb.0:3096; PPC64LE-NEXT:    mr 5, 33097; PPC64LE-NEXT:  .LBB171_1:3098; PPC64LE-NEXT:    lwarx 3, 0, 53099; PPC64LE-NEXT:    sub 6, 3, 43100; PPC64LE-NEXT:    stwcx. 6, 0, 53101; PPC64LE-NEXT:    bne- 0, .LBB171_13102; PPC64LE-NEXT:  # %bb.2:3103; PPC64LE-NEXT:    lwsync3104; PPC64LE-NEXT:    blr3105  %ret = atomicrmw sub ptr %ptr, i32 %val acquire3106  ret i32 %ret3107}3108 3109define i32 @test172(ptr %ptr, i32 %val) {3110; PPC64LE-LABEL: test172:3111; PPC64LE:       # %bb.0:3112; PPC64LE-NEXT:    lwsync3113; PPC64LE-NEXT:  .LBB172_1:3114; PPC64LE-NEXT:    lwarx 5, 0, 33115; PPC64LE-NEXT:    sub 6, 5, 43116; PPC64LE-NEXT:    stwcx. 6, 0, 33117; PPC64LE-NEXT:    bne- 0, .LBB172_13118; PPC64LE-NEXT:  # %bb.2:3119; PPC64LE-NEXT:    mr 3, 53120; PPC64LE-NEXT:    blr3121  %ret = atomicrmw sub ptr %ptr, i32 %val release3122  ret i32 %ret3123}3124 3125define i32 @test173(ptr %ptr, i32 %val) {3126; PPC64LE-LABEL: test173:3127; PPC64LE:       # %bb.0:3128; PPC64LE-NEXT:    lwsync3129; PPC64LE-NEXT:  .LBB173_1:3130; PPC64LE-NEXT:    lwarx 5, 0, 33131; PPC64LE-NEXT:    sub 6, 5, 43132; PPC64LE-NEXT:    stwcx. 6, 0, 33133; PPC64LE-NEXT:    bne- 0, .LBB173_13134; PPC64LE-NEXT:  # %bb.2:3135; PPC64LE-NEXT:    lwsync3136; PPC64LE-NEXT:    mr 3, 53137; PPC64LE-NEXT:    blr3138  %ret = atomicrmw sub ptr %ptr, i32 %val acq_rel3139  ret i32 %ret3140}3141 3142define i32 @test174(ptr %ptr, i32 %val) {3143; PPC64LE-LABEL: test174:3144; PPC64LE:       # %bb.0:3145; PPC64LE-NEXT:    sync3146; PPC64LE-NEXT:  .LBB174_1:3147; PPC64LE-NEXT:    lwarx 5, 0, 33148; PPC64LE-NEXT:    sub 6, 5, 43149; PPC64LE-NEXT:    stwcx. 6, 0, 33150; PPC64LE-NEXT:    bne- 0, .LBB174_13151; PPC64LE-NEXT:  # %bb.2:3152; PPC64LE-NEXT:    lwsync3153; PPC64LE-NEXT:    mr 3, 53154; PPC64LE-NEXT:    blr3155  %ret = atomicrmw sub ptr %ptr, i32 %val seq_cst3156  ret i32 %ret3157}3158 3159define i64 @test175(ptr %ptr, i64 %val) {3160; PPC64LE-LABEL: test175:3161; PPC64LE:       # %bb.0:3162; PPC64LE-NEXT:  .LBB175_1:3163; PPC64LE-NEXT:    ldarx 5, 0, 33164; PPC64LE-NEXT:    sub 6, 5, 43165; PPC64LE-NEXT:    stdcx. 6, 0, 33166; PPC64LE-NEXT:    bne- 0, .LBB175_13167; PPC64LE-NEXT:  # %bb.2:3168; PPC64LE-NEXT:    mr 3, 53169; PPC64LE-NEXT:    blr3170  %ret = atomicrmw sub ptr %ptr, i64 %val monotonic3171  ret i64 %ret3172}3173 3174define i64 @test176(ptr %ptr, i64 %val) {3175; PPC64LE-LABEL: test176:3176; PPC64LE:       # %bb.0:3177; PPC64LE-NEXT:    mr 5, 33178; PPC64LE-NEXT:  .LBB176_1:3179; PPC64LE-NEXT:    ldarx 3, 0, 53180; PPC64LE-NEXT:    sub 6, 3, 43181; PPC64LE-NEXT:    stdcx. 6, 0, 53182; PPC64LE-NEXT:    bne- 0, .LBB176_13183; PPC64LE-NEXT:  # %bb.2:3184; PPC64LE-NEXT:    lwsync3185; PPC64LE-NEXT:    blr3186  %ret = atomicrmw sub ptr %ptr, i64 %val acquire3187  ret i64 %ret3188}3189 3190define i64 @test177(ptr %ptr, i64 %val) {3191; PPC64LE-LABEL: test177:3192; PPC64LE:       # %bb.0:3193; PPC64LE-NEXT:    lwsync3194; PPC64LE-NEXT:  .LBB177_1:3195; PPC64LE-NEXT:    ldarx 5, 0, 33196; PPC64LE-NEXT:    sub 6, 5, 43197; PPC64LE-NEXT:    stdcx. 6, 0, 33198; PPC64LE-NEXT:    bne- 0, .LBB177_13199; PPC64LE-NEXT:  # %bb.2:3200; PPC64LE-NEXT:    mr 3, 53201; PPC64LE-NEXT:    blr3202  %ret = atomicrmw sub ptr %ptr, i64 %val release3203  ret i64 %ret3204}3205 3206define i64 @test178(ptr %ptr, i64 %val) {3207; PPC64LE-LABEL: test178:3208; PPC64LE:       # %bb.0:3209; PPC64LE-NEXT:    lwsync3210; PPC64LE-NEXT:  .LBB178_1:3211; PPC64LE-NEXT:    ldarx 5, 0, 33212; PPC64LE-NEXT:    sub 6, 5, 43213; PPC64LE-NEXT:    stdcx. 6, 0, 33214; PPC64LE-NEXT:    bne- 0, .LBB178_13215; PPC64LE-NEXT:  # %bb.2:3216; PPC64LE-NEXT:    lwsync3217; PPC64LE-NEXT:    mr 3, 53218; PPC64LE-NEXT:    blr3219  %ret = atomicrmw sub ptr %ptr, i64 %val acq_rel3220  ret i64 %ret3221}3222 3223define i64 @test179(ptr %ptr, i64 %val) {3224; PPC64LE-LABEL: test179:3225; PPC64LE:       # %bb.0:3226; PPC64LE-NEXT:    sync3227; PPC64LE-NEXT:  .LBB179_1:3228; PPC64LE-NEXT:    ldarx 5, 0, 33229; PPC64LE-NEXT:    sub 6, 5, 43230; PPC64LE-NEXT:    stdcx. 6, 0, 33231; PPC64LE-NEXT:    bne- 0, .LBB179_13232; PPC64LE-NEXT:  # %bb.2:3233; PPC64LE-NEXT:    lwsync3234; PPC64LE-NEXT:    mr 3, 53235; PPC64LE-NEXT:    blr3236  %ret = atomicrmw sub ptr %ptr, i64 %val seq_cst3237  ret i64 %ret3238}3239 3240define i8 @test180(ptr %ptr, i8 %val) {3241; PPC64LE-LABEL: test180:3242; PPC64LE:       # %bb.0:3243; PPC64LE-NEXT:  .LBB180_1:3244; PPC64LE-NEXT:    lbarx 5, 0, 33245; PPC64LE-NEXT:    and 6, 4, 53246; PPC64LE-NEXT:    stbcx. 6, 0, 33247; PPC64LE-NEXT:    bne- 0, .LBB180_13248; PPC64LE-NEXT:  # %bb.2:3249; PPC64LE-NEXT:    mr 3, 53250; PPC64LE-NEXT:    blr3251  %ret = atomicrmw and ptr %ptr, i8 %val monotonic3252  ret i8 %ret3253}3254 3255define i8 @test181(ptr %ptr, i8 %val) {3256; PPC64LE-LABEL: test181:3257; PPC64LE:       # %bb.0:3258; PPC64LE-NEXT:    mr 5, 33259; PPC64LE-NEXT:  .LBB181_1:3260; PPC64LE-NEXT:    lbarx 3, 0, 53261; PPC64LE-NEXT:    and 6, 4, 33262; PPC64LE-NEXT:    stbcx. 6, 0, 53263; PPC64LE-NEXT:    bne- 0, .LBB181_13264; PPC64LE-NEXT:  # %bb.2:3265; PPC64LE-NEXT:    lwsync3266; PPC64LE-NEXT:    blr3267  %ret = atomicrmw and ptr %ptr, i8 %val acquire3268  ret i8 %ret3269}3270 3271define i8 @test182(ptr %ptr, i8 %val) {3272; PPC64LE-LABEL: test182:3273; PPC64LE:       # %bb.0:3274; PPC64LE-NEXT:    lwsync3275; PPC64LE-NEXT:  .LBB182_1:3276; PPC64LE-NEXT:    lbarx 5, 0, 33277; PPC64LE-NEXT:    and 6, 4, 53278; PPC64LE-NEXT:    stbcx. 6, 0, 33279; PPC64LE-NEXT:    bne- 0, .LBB182_13280; PPC64LE-NEXT:  # %bb.2:3281; PPC64LE-NEXT:    mr 3, 53282; PPC64LE-NEXT:    blr3283  %ret = atomicrmw and ptr %ptr, i8 %val release3284  ret i8 %ret3285}3286 3287define i8 @test183(ptr %ptr, i8 %val) {3288; PPC64LE-LABEL: test183:3289; PPC64LE:       # %bb.0:3290; PPC64LE-NEXT:    lwsync3291; PPC64LE-NEXT:  .LBB183_1:3292; PPC64LE-NEXT:    lbarx 5, 0, 33293; PPC64LE-NEXT:    and 6, 4, 53294; PPC64LE-NEXT:    stbcx. 6, 0, 33295; PPC64LE-NEXT:    bne- 0, .LBB183_13296; PPC64LE-NEXT:  # %bb.2:3297; PPC64LE-NEXT:    lwsync3298; PPC64LE-NEXT:    mr 3, 53299; PPC64LE-NEXT:    blr3300  %ret = atomicrmw and ptr %ptr, i8 %val acq_rel3301  ret i8 %ret3302}3303 3304define i8 @test184(ptr %ptr, i8 %val) {3305; PPC64LE-LABEL: test184:3306; PPC64LE:       # %bb.0:3307; PPC64LE-NEXT:    sync3308; PPC64LE-NEXT:  .LBB184_1:3309; PPC64LE-NEXT:    lbarx 5, 0, 33310; PPC64LE-NEXT:    and 6, 4, 53311; PPC64LE-NEXT:    stbcx. 6, 0, 33312; PPC64LE-NEXT:    bne- 0, .LBB184_13313; PPC64LE-NEXT:  # %bb.2:3314; PPC64LE-NEXT:    lwsync3315; PPC64LE-NEXT:    mr 3, 53316; PPC64LE-NEXT:    blr3317  %ret = atomicrmw and ptr %ptr, i8 %val seq_cst3318  ret i8 %ret3319}3320 3321define i16 @test185(ptr %ptr, i16 %val) {3322; PPC64LE-LABEL: test185:3323; PPC64LE:       # %bb.0:3324; PPC64LE-NEXT:  .LBB185_1:3325; PPC64LE-NEXT:    lharx 5, 0, 33326; PPC64LE-NEXT:    and 6, 4, 53327; PPC64LE-NEXT:    sthcx. 6, 0, 33328; PPC64LE-NEXT:    bne- 0, .LBB185_13329; PPC64LE-NEXT:  # %bb.2:3330; PPC64LE-NEXT:    mr 3, 53331; PPC64LE-NEXT:    blr3332  %ret = atomicrmw and ptr %ptr, i16 %val monotonic3333  ret i16 %ret3334}3335 3336define i16 @test186(ptr %ptr, i16 %val) {3337; PPC64LE-LABEL: test186:3338; PPC64LE:       # %bb.0:3339; PPC64LE-NEXT:    mr 5, 33340; PPC64LE-NEXT:  .LBB186_1:3341; PPC64LE-NEXT:    lharx 3, 0, 53342; PPC64LE-NEXT:    and 6, 4, 33343; PPC64LE-NEXT:    sthcx. 6, 0, 53344; PPC64LE-NEXT:    bne- 0, .LBB186_13345; PPC64LE-NEXT:  # %bb.2:3346; PPC64LE-NEXT:    lwsync3347; PPC64LE-NEXT:    blr3348  %ret = atomicrmw and ptr %ptr, i16 %val acquire3349  ret i16 %ret3350}3351 3352define i16 @test187(ptr %ptr, i16 %val) {3353; PPC64LE-LABEL: test187:3354; PPC64LE:       # %bb.0:3355; PPC64LE-NEXT:    lwsync3356; PPC64LE-NEXT:  .LBB187_1:3357; PPC64LE-NEXT:    lharx 5, 0, 33358; PPC64LE-NEXT:    and 6, 4, 53359; PPC64LE-NEXT:    sthcx. 6, 0, 33360; PPC64LE-NEXT:    bne- 0, .LBB187_13361; PPC64LE-NEXT:  # %bb.2:3362; PPC64LE-NEXT:    mr 3, 53363; PPC64LE-NEXT:    blr3364  %ret = atomicrmw and ptr %ptr, i16 %val release3365  ret i16 %ret3366}3367 3368define i16 @test188(ptr %ptr, i16 %val) {3369; PPC64LE-LABEL: test188:3370; PPC64LE:       # %bb.0:3371; PPC64LE-NEXT:    lwsync3372; PPC64LE-NEXT:  .LBB188_1:3373; PPC64LE-NEXT:    lharx 5, 0, 33374; PPC64LE-NEXT:    and 6, 4, 53375; PPC64LE-NEXT:    sthcx. 6, 0, 33376; PPC64LE-NEXT:    bne- 0, .LBB188_13377; PPC64LE-NEXT:  # %bb.2:3378; PPC64LE-NEXT:    lwsync3379; PPC64LE-NEXT:    mr 3, 53380; PPC64LE-NEXT:    blr3381  %ret = atomicrmw and ptr %ptr, i16 %val acq_rel3382  ret i16 %ret3383}3384 3385define i16 @test189(ptr %ptr, i16 %val) {3386; PPC64LE-LABEL: test189:3387; PPC64LE:       # %bb.0:3388; PPC64LE-NEXT:    sync3389; PPC64LE-NEXT:  .LBB189_1:3390; PPC64LE-NEXT:    lharx 5, 0, 33391; PPC64LE-NEXT:    and 6, 4, 53392; PPC64LE-NEXT:    sthcx. 6, 0, 33393; PPC64LE-NEXT:    bne- 0, .LBB189_13394; PPC64LE-NEXT:  # %bb.2:3395; PPC64LE-NEXT:    lwsync3396; PPC64LE-NEXT:    mr 3, 53397; PPC64LE-NEXT:    blr3398  %ret = atomicrmw and ptr %ptr, i16 %val seq_cst3399  ret i16 %ret3400}3401 3402define i32 @test190(ptr %ptr, i32 %val) {3403; PPC64LE-LABEL: test190:3404; PPC64LE:       # %bb.0:3405; PPC64LE-NEXT:  .LBB190_1:3406; PPC64LE-NEXT:    lwarx 5, 0, 33407; PPC64LE-NEXT:    and 6, 4, 53408; PPC64LE-NEXT:    stwcx. 6, 0, 33409; PPC64LE-NEXT:    bne- 0, .LBB190_13410; PPC64LE-NEXT:  # %bb.2:3411; PPC64LE-NEXT:    mr 3, 53412; PPC64LE-NEXT:    blr3413  %ret = atomicrmw and ptr %ptr, i32 %val monotonic3414  ret i32 %ret3415}3416 3417define i32 @test191(ptr %ptr, i32 %val) {3418; PPC64LE-LABEL: test191:3419; PPC64LE:       # %bb.0:3420; PPC64LE-NEXT:    mr 5, 33421; PPC64LE-NEXT:  .LBB191_1:3422; PPC64LE-NEXT:    lwarx 3, 0, 53423; PPC64LE-NEXT:    and 6, 4, 33424; PPC64LE-NEXT:    stwcx. 6, 0, 53425; PPC64LE-NEXT:    bne- 0, .LBB191_13426; PPC64LE-NEXT:  # %bb.2:3427; PPC64LE-NEXT:    lwsync3428; PPC64LE-NEXT:    blr3429  %ret = atomicrmw and ptr %ptr, i32 %val acquire3430  ret i32 %ret3431}3432 3433define i32 @test192(ptr %ptr, i32 %val) {3434; PPC64LE-LABEL: test192:3435; PPC64LE:       # %bb.0:3436; PPC64LE-NEXT:    lwsync3437; PPC64LE-NEXT:  .LBB192_1:3438; PPC64LE-NEXT:    lwarx 5, 0, 33439; PPC64LE-NEXT:    and 6, 4, 53440; PPC64LE-NEXT:    stwcx. 6, 0, 33441; PPC64LE-NEXT:    bne- 0, .LBB192_13442; PPC64LE-NEXT:  # %bb.2:3443; PPC64LE-NEXT:    mr 3, 53444; PPC64LE-NEXT:    blr3445  %ret = atomicrmw and ptr %ptr, i32 %val release3446  ret i32 %ret3447}3448 3449define i32 @test193(ptr %ptr, i32 %val) {3450; PPC64LE-LABEL: test193:3451; PPC64LE:       # %bb.0:3452; PPC64LE-NEXT:    lwsync3453; PPC64LE-NEXT:  .LBB193_1:3454; PPC64LE-NEXT:    lwarx 5, 0, 33455; PPC64LE-NEXT:    and 6, 4, 53456; PPC64LE-NEXT:    stwcx. 6, 0, 33457; PPC64LE-NEXT:    bne- 0, .LBB193_13458; PPC64LE-NEXT:  # %bb.2:3459; PPC64LE-NEXT:    lwsync3460; PPC64LE-NEXT:    mr 3, 53461; PPC64LE-NEXT:    blr3462  %ret = atomicrmw and ptr %ptr, i32 %val acq_rel3463  ret i32 %ret3464}3465 3466define i32 @test194(ptr %ptr, i32 %val) {3467; PPC64LE-LABEL: test194:3468; PPC64LE:       # %bb.0:3469; PPC64LE-NEXT:    sync3470; PPC64LE-NEXT:  .LBB194_1:3471; PPC64LE-NEXT:    lwarx 5, 0, 33472; PPC64LE-NEXT:    and 6, 4, 53473; PPC64LE-NEXT:    stwcx. 6, 0, 33474; PPC64LE-NEXT:    bne- 0, .LBB194_13475; PPC64LE-NEXT:  # %bb.2:3476; PPC64LE-NEXT:    lwsync3477; PPC64LE-NEXT:    mr 3, 53478; PPC64LE-NEXT:    blr3479  %ret = atomicrmw and ptr %ptr, i32 %val seq_cst3480  ret i32 %ret3481}3482 3483define i64 @test195(ptr %ptr, i64 %val) {3484; PPC64LE-LABEL: test195:3485; PPC64LE:       # %bb.0:3486; PPC64LE-NEXT:  .LBB195_1:3487; PPC64LE-NEXT:    ldarx 5, 0, 33488; PPC64LE-NEXT:    and 6, 4, 53489; PPC64LE-NEXT:    stdcx. 6, 0, 33490; PPC64LE-NEXT:    bne- 0, .LBB195_13491; PPC64LE-NEXT:  # %bb.2:3492; PPC64LE-NEXT:    mr 3, 53493; PPC64LE-NEXT:    blr3494  %ret = atomicrmw and ptr %ptr, i64 %val monotonic3495  ret i64 %ret3496}3497 3498define i64 @test196(ptr %ptr, i64 %val) {3499; PPC64LE-LABEL: test196:3500; PPC64LE:       # %bb.0:3501; PPC64LE-NEXT:    mr 5, 33502; PPC64LE-NEXT:  .LBB196_1:3503; PPC64LE-NEXT:    ldarx 3, 0, 53504; PPC64LE-NEXT:    and 6, 4, 33505; PPC64LE-NEXT:    stdcx. 6, 0, 53506; PPC64LE-NEXT:    bne- 0, .LBB196_13507; PPC64LE-NEXT:  # %bb.2:3508; PPC64LE-NEXT:    lwsync3509; PPC64LE-NEXT:    blr3510  %ret = atomicrmw and ptr %ptr, i64 %val acquire3511  ret i64 %ret3512}3513 3514define i64 @test197(ptr %ptr, i64 %val) {3515; PPC64LE-LABEL: test197:3516; PPC64LE:       # %bb.0:3517; PPC64LE-NEXT:    lwsync3518; PPC64LE-NEXT:  .LBB197_1:3519; PPC64LE-NEXT:    ldarx 5, 0, 33520; PPC64LE-NEXT:    and 6, 4, 53521; PPC64LE-NEXT:    stdcx. 6, 0, 33522; PPC64LE-NEXT:    bne- 0, .LBB197_13523; PPC64LE-NEXT:  # %bb.2:3524; PPC64LE-NEXT:    mr 3, 53525; PPC64LE-NEXT:    blr3526  %ret = atomicrmw and ptr %ptr, i64 %val release3527  ret i64 %ret3528}3529 3530define i64 @test198(ptr %ptr, i64 %val) {3531; PPC64LE-LABEL: test198:3532; PPC64LE:       # %bb.0:3533; PPC64LE-NEXT:    lwsync3534; PPC64LE-NEXT:  .LBB198_1:3535; PPC64LE-NEXT:    ldarx 5, 0, 33536; PPC64LE-NEXT:    and 6, 4, 53537; PPC64LE-NEXT:    stdcx. 6, 0, 33538; PPC64LE-NEXT:    bne- 0, .LBB198_13539; PPC64LE-NEXT:  # %bb.2:3540; PPC64LE-NEXT:    lwsync3541; PPC64LE-NEXT:    mr 3, 53542; PPC64LE-NEXT:    blr3543  %ret = atomicrmw and ptr %ptr, i64 %val acq_rel3544  ret i64 %ret3545}3546 3547define i64 @test199(ptr %ptr, i64 %val) {3548; PPC64LE-LABEL: test199:3549; PPC64LE:       # %bb.0:3550; PPC64LE-NEXT:    sync3551; PPC64LE-NEXT:  .LBB199_1:3552; PPC64LE-NEXT:    ldarx 5, 0, 33553; PPC64LE-NEXT:    and 6, 4, 53554; PPC64LE-NEXT:    stdcx. 6, 0, 33555; PPC64LE-NEXT:    bne- 0, .LBB199_13556; PPC64LE-NEXT:  # %bb.2:3557; PPC64LE-NEXT:    lwsync3558; PPC64LE-NEXT:    mr 3, 53559; PPC64LE-NEXT:    blr3560  %ret = atomicrmw and ptr %ptr, i64 %val seq_cst3561  ret i64 %ret3562}3563 3564define i8 @test200(ptr %ptr, i8 %val) {3565; PPC64LE-LABEL: test200:3566; PPC64LE:       # %bb.0:3567; PPC64LE-NEXT:  .LBB200_1:3568; PPC64LE-NEXT:    lbarx 5, 0, 33569; PPC64LE-NEXT:    nand 6, 4, 53570; PPC64LE-NEXT:    stbcx. 6, 0, 33571; PPC64LE-NEXT:    bne- 0, .LBB200_13572; PPC64LE-NEXT:  # %bb.2:3573; PPC64LE-NEXT:    mr 3, 53574; PPC64LE-NEXT:    blr3575  %ret = atomicrmw nand ptr %ptr, i8 %val monotonic3576  ret i8 %ret3577}3578 3579define i8 @test201(ptr %ptr, i8 %val) {3580; PPC64LE-LABEL: test201:3581; PPC64LE:       # %bb.0:3582; PPC64LE-NEXT:    mr 5, 33583; PPC64LE-NEXT:  .LBB201_1:3584; PPC64LE-NEXT:    lbarx 3, 0, 53585; PPC64LE-NEXT:    nand 6, 4, 33586; PPC64LE-NEXT:    stbcx. 6, 0, 53587; PPC64LE-NEXT:    bne- 0, .LBB201_13588; PPC64LE-NEXT:  # %bb.2:3589; PPC64LE-NEXT:    lwsync3590; PPC64LE-NEXT:    blr3591  %ret = atomicrmw nand ptr %ptr, i8 %val acquire3592  ret i8 %ret3593}3594 3595define i8 @test202(ptr %ptr, i8 %val) {3596; PPC64LE-LABEL: test202:3597; PPC64LE:       # %bb.0:3598; PPC64LE-NEXT:    lwsync3599; PPC64LE-NEXT:  .LBB202_1:3600; PPC64LE-NEXT:    lbarx 5, 0, 33601; PPC64LE-NEXT:    nand 6, 4, 53602; PPC64LE-NEXT:    stbcx. 6, 0, 33603; PPC64LE-NEXT:    bne- 0, .LBB202_13604; PPC64LE-NEXT:  # %bb.2:3605; PPC64LE-NEXT:    mr 3, 53606; PPC64LE-NEXT:    blr3607  %ret = atomicrmw nand ptr %ptr, i8 %val release3608  ret i8 %ret3609}3610 3611define i8 @test203(ptr %ptr, i8 %val) {3612; PPC64LE-LABEL: test203:3613; PPC64LE:       # %bb.0:3614; PPC64LE-NEXT:    lwsync3615; PPC64LE-NEXT:  .LBB203_1:3616; PPC64LE-NEXT:    lbarx 5, 0, 33617; PPC64LE-NEXT:    nand 6, 4, 53618; PPC64LE-NEXT:    stbcx. 6, 0, 33619; PPC64LE-NEXT:    bne- 0, .LBB203_13620; PPC64LE-NEXT:  # %bb.2:3621; PPC64LE-NEXT:    lwsync3622; PPC64LE-NEXT:    mr 3, 53623; PPC64LE-NEXT:    blr3624  %ret = atomicrmw nand ptr %ptr, i8 %val acq_rel3625  ret i8 %ret3626}3627 3628define i8 @test204(ptr %ptr, i8 %val) {3629; PPC64LE-LABEL: test204:3630; PPC64LE:       # %bb.0:3631; PPC64LE-NEXT:    sync3632; PPC64LE-NEXT:  .LBB204_1:3633; PPC64LE-NEXT:    lbarx 5, 0, 33634; PPC64LE-NEXT:    nand 6, 4, 53635; PPC64LE-NEXT:    stbcx. 6, 0, 33636; PPC64LE-NEXT:    bne- 0, .LBB204_13637; PPC64LE-NEXT:  # %bb.2:3638; PPC64LE-NEXT:    lwsync3639; PPC64LE-NEXT:    mr 3, 53640; PPC64LE-NEXT:    blr3641  %ret = atomicrmw nand ptr %ptr, i8 %val seq_cst3642  ret i8 %ret3643}3644 3645define i16 @test205(ptr %ptr, i16 %val) {3646; PPC64LE-LABEL: test205:3647; PPC64LE:       # %bb.0:3648; PPC64LE-NEXT:  .LBB205_1:3649; PPC64LE-NEXT:    lharx 5, 0, 33650; PPC64LE-NEXT:    nand 6, 4, 53651; PPC64LE-NEXT:    sthcx. 6, 0, 33652; PPC64LE-NEXT:    bne- 0, .LBB205_13653; PPC64LE-NEXT:  # %bb.2:3654; PPC64LE-NEXT:    mr 3, 53655; PPC64LE-NEXT:    blr3656  %ret = atomicrmw nand ptr %ptr, i16 %val monotonic3657  ret i16 %ret3658}3659 3660define i16 @test206(ptr %ptr, i16 %val) {3661; PPC64LE-LABEL: test206:3662; PPC64LE:       # %bb.0:3663; PPC64LE-NEXT:    mr 5, 33664; PPC64LE-NEXT:  .LBB206_1:3665; PPC64LE-NEXT:    lharx 3, 0, 53666; PPC64LE-NEXT:    nand 6, 4, 33667; PPC64LE-NEXT:    sthcx. 6, 0, 53668; PPC64LE-NEXT:    bne- 0, .LBB206_13669; PPC64LE-NEXT:  # %bb.2:3670; PPC64LE-NEXT:    lwsync3671; PPC64LE-NEXT:    blr3672  %ret = atomicrmw nand ptr %ptr, i16 %val acquire3673  ret i16 %ret3674}3675 3676define i16 @test207(ptr %ptr, i16 %val) {3677; PPC64LE-LABEL: test207:3678; PPC64LE:       # %bb.0:3679; PPC64LE-NEXT:    lwsync3680; PPC64LE-NEXT:  .LBB207_1:3681; PPC64LE-NEXT:    lharx 5, 0, 33682; PPC64LE-NEXT:    nand 6, 4, 53683; PPC64LE-NEXT:    sthcx. 6, 0, 33684; PPC64LE-NEXT:    bne- 0, .LBB207_13685; PPC64LE-NEXT:  # %bb.2:3686; PPC64LE-NEXT:    mr 3, 53687; PPC64LE-NEXT:    blr3688  %ret = atomicrmw nand ptr %ptr, i16 %val release3689  ret i16 %ret3690}3691 3692define i16 @test208(ptr %ptr, i16 %val) {3693; PPC64LE-LABEL: test208:3694; PPC64LE:       # %bb.0:3695; PPC64LE-NEXT:    lwsync3696; PPC64LE-NEXT:  .LBB208_1:3697; PPC64LE-NEXT:    lharx 5, 0, 33698; PPC64LE-NEXT:    nand 6, 4, 53699; PPC64LE-NEXT:    sthcx. 6, 0, 33700; PPC64LE-NEXT:    bne- 0, .LBB208_13701; PPC64LE-NEXT:  # %bb.2:3702; PPC64LE-NEXT:    lwsync3703; PPC64LE-NEXT:    mr 3, 53704; PPC64LE-NEXT:    blr3705  %ret = atomicrmw nand ptr %ptr, i16 %val acq_rel3706  ret i16 %ret3707}3708 3709define i16 @test209(ptr %ptr, i16 %val) {3710; PPC64LE-LABEL: test209:3711; PPC64LE:       # %bb.0:3712; PPC64LE-NEXT:    sync3713; PPC64LE-NEXT:  .LBB209_1:3714; PPC64LE-NEXT:    lharx 5, 0, 33715; PPC64LE-NEXT:    nand 6, 4, 53716; PPC64LE-NEXT:    sthcx. 6, 0, 33717; PPC64LE-NEXT:    bne- 0, .LBB209_13718; PPC64LE-NEXT:  # %bb.2:3719; PPC64LE-NEXT:    lwsync3720; PPC64LE-NEXT:    mr 3, 53721; PPC64LE-NEXT:    blr3722  %ret = atomicrmw nand ptr %ptr, i16 %val seq_cst3723  ret i16 %ret3724}3725 3726define i32 @test210(ptr %ptr, i32 %val) {3727; PPC64LE-LABEL: test210:3728; PPC64LE:       # %bb.0:3729; PPC64LE-NEXT:  .LBB210_1:3730; PPC64LE-NEXT:    lwarx 5, 0, 33731; PPC64LE-NEXT:    nand 6, 4, 53732; PPC64LE-NEXT:    stwcx. 6, 0, 33733; PPC64LE-NEXT:    bne- 0, .LBB210_13734; PPC64LE-NEXT:  # %bb.2:3735; PPC64LE-NEXT:    mr 3, 53736; PPC64LE-NEXT:    blr3737  %ret = atomicrmw nand ptr %ptr, i32 %val monotonic3738  ret i32 %ret3739}3740 3741define i32 @test211(ptr %ptr, i32 %val) {3742; PPC64LE-LABEL: test211:3743; PPC64LE:       # %bb.0:3744; PPC64LE-NEXT:    mr 5, 33745; PPC64LE-NEXT:  .LBB211_1:3746; PPC64LE-NEXT:    lwarx 3, 0, 53747; PPC64LE-NEXT:    nand 6, 4, 33748; PPC64LE-NEXT:    stwcx. 6, 0, 53749; PPC64LE-NEXT:    bne- 0, .LBB211_13750; PPC64LE-NEXT:  # %bb.2:3751; PPC64LE-NEXT:    lwsync3752; PPC64LE-NEXT:    blr3753  %ret = atomicrmw nand ptr %ptr, i32 %val acquire3754  ret i32 %ret3755}3756 3757define i32 @test212(ptr %ptr, i32 %val) {3758; PPC64LE-LABEL: test212:3759; PPC64LE:       # %bb.0:3760; PPC64LE-NEXT:    lwsync3761; PPC64LE-NEXT:  .LBB212_1:3762; PPC64LE-NEXT:    lwarx 5, 0, 33763; PPC64LE-NEXT:    nand 6, 4, 53764; PPC64LE-NEXT:    stwcx. 6, 0, 33765; PPC64LE-NEXT:    bne- 0, .LBB212_13766; PPC64LE-NEXT:  # %bb.2:3767; PPC64LE-NEXT:    mr 3, 53768; PPC64LE-NEXT:    blr3769  %ret = atomicrmw nand ptr %ptr, i32 %val release3770  ret i32 %ret3771}3772 3773define i32 @test213(ptr %ptr, i32 %val) {3774; PPC64LE-LABEL: test213:3775; PPC64LE:       # %bb.0:3776; PPC64LE-NEXT:    lwsync3777; PPC64LE-NEXT:  .LBB213_1:3778; PPC64LE-NEXT:    lwarx 5, 0, 33779; PPC64LE-NEXT:    nand 6, 4, 53780; PPC64LE-NEXT:    stwcx. 6, 0, 33781; PPC64LE-NEXT:    bne- 0, .LBB213_13782; PPC64LE-NEXT:  # %bb.2:3783; PPC64LE-NEXT:    lwsync3784; PPC64LE-NEXT:    mr 3, 53785; PPC64LE-NEXT:    blr3786  %ret = atomicrmw nand ptr %ptr, i32 %val acq_rel3787  ret i32 %ret3788}3789 3790define i32 @test214(ptr %ptr, i32 %val) {3791; PPC64LE-LABEL: test214:3792; PPC64LE:       # %bb.0:3793; PPC64LE-NEXT:    sync3794; PPC64LE-NEXT:  .LBB214_1:3795; PPC64LE-NEXT:    lwarx 5, 0, 33796; PPC64LE-NEXT:    nand 6, 4, 53797; PPC64LE-NEXT:    stwcx. 6, 0, 33798; PPC64LE-NEXT:    bne- 0, .LBB214_13799; PPC64LE-NEXT:  # %bb.2:3800; PPC64LE-NEXT:    lwsync3801; PPC64LE-NEXT:    mr 3, 53802; PPC64LE-NEXT:    blr3803  %ret = atomicrmw nand ptr %ptr, i32 %val seq_cst3804  ret i32 %ret3805}3806 3807define i64 @test215(ptr %ptr, i64 %val) {3808; PPC64LE-LABEL: test215:3809; PPC64LE:       # %bb.0:3810; PPC64LE-NEXT:  .LBB215_1:3811; PPC64LE-NEXT:    ldarx 5, 0, 33812; PPC64LE-NEXT:    nand 6, 4, 53813; PPC64LE-NEXT:    stdcx. 6, 0, 33814; PPC64LE-NEXT:    bne- 0, .LBB215_13815; PPC64LE-NEXT:  # %bb.2:3816; PPC64LE-NEXT:    mr 3, 53817; PPC64LE-NEXT:    blr3818  %ret = atomicrmw nand ptr %ptr, i64 %val monotonic3819  ret i64 %ret3820}3821 3822define i64 @test216(ptr %ptr, i64 %val) {3823; PPC64LE-LABEL: test216:3824; PPC64LE:       # %bb.0:3825; PPC64LE-NEXT:    mr 5, 33826; PPC64LE-NEXT:  .LBB216_1:3827; PPC64LE-NEXT:    ldarx 3, 0, 53828; PPC64LE-NEXT:    nand 6, 4, 33829; PPC64LE-NEXT:    stdcx. 6, 0, 53830; PPC64LE-NEXT:    bne- 0, .LBB216_13831; PPC64LE-NEXT:  # %bb.2:3832; PPC64LE-NEXT:    lwsync3833; PPC64LE-NEXT:    blr3834  %ret = atomicrmw nand ptr %ptr, i64 %val acquire3835  ret i64 %ret3836}3837 3838define i64 @test217(ptr %ptr, i64 %val) {3839; PPC64LE-LABEL: test217:3840; PPC64LE:       # %bb.0:3841; PPC64LE-NEXT:    lwsync3842; PPC64LE-NEXT:  .LBB217_1:3843; PPC64LE-NEXT:    ldarx 5, 0, 33844; PPC64LE-NEXT:    nand 6, 4, 53845; PPC64LE-NEXT:    stdcx. 6, 0, 33846; PPC64LE-NEXT:    bne- 0, .LBB217_13847; PPC64LE-NEXT:  # %bb.2:3848; PPC64LE-NEXT:    mr 3, 53849; PPC64LE-NEXT:    blr3850  %ret = atomicrmw nand ptr %ptr, i64 %val release3851  ret i64 %ret3852}3853 3854define i64 @test218(ptr %ptr, i64 %val) {3855; PPC64LE-LABEL: test218:3856; PPC64LE:       # %bb.0:3857; PPC64LE-NEXT:    lwsync3858; PPC64LE-NEXT:  .LBB218_1:3859; PPC64LE-NEXT:    ldarx 5, 0, 33860; PPC64LE-NEXT:    nand 6, 4, 53861; PPC64LE-NEXT:    stdcx. 6, 0, 33862; PPC64LE-NEXT:    bne- 0, .LBB218_13863; PPC64LE-NEXT:  # %bb.2:3864; PPC64LE-NEXT:    lwsync3865; PPC64LE-NEXT:    mr 3, 53866; PPC64LE-NEXT:    blr3867  %ret = atomicrmw nand ptr %ptr, i64 %val acq_rel3868  ret i64 %ret3869}3870 3871define i64 @test219(ptr %ptr, i64 %val) {3872; PPC64LE-LABEL: test219:3873; PPC64LE:       # %bb.0:3874; PPC64LE-NEXT:    sync3875; PPC64LE-NEXT:  .LBB219_1:3876; PPC64LE-NEXT:    ldarx 5, 0, 33877; PPC64LE-NEXT:    nand 6, 4, 53878; PPC64LE-NEXT:    stdcx. 6, 0, 33879; PPC64LE-NEXT:    bne- 0, .LBB219_13880; PPC64LE-NEXT:  # %bb.2:3881; PPC64LE-NEXT:    lwsync3882; PPC64LE-NEXT:    mr 3, 53883; PPC64LE-NEXT:    blr3884  %ret = atomicrmw nand ptr %ptr, i64 %val seq_cst3885  ret i64 %ret3886}3887 3888define i8 @test220(ptr %ptr, i8 %val) {3889; PPC64LE-LABEL: test220:3890; PPC64LE:       # %bb.0:3891; PPC64LE-NEXT:  .LBB220_1:3892; PPC64LE-NEXT:    lbarx 5, 0, 33893; PPC64LE-NEXT:    or 6, 4, 53894; PPC64LE-NEXT:    stbcx. 6, 0, 33895; PPC64LE-NEXT:    bne- 0, .LBB220_13896; PPC64LE-NEXT:  # %bb.2:3897; PPC64LE-NEXT:    mr 3, 53898; PPC64LE-NEXT:    blr3899  %ret = atomicrmw or ptr %ptr, i8 %val monotonic3900  ret i8 %ret3901}3902 3903define i8 @test221(ptr %ptr, i8 %val) {3904; PPC64LE-LABEL: test221:3905; PPC64LE:       # %bb.0:3906; PPC64LE-NEXT:    mr 5, 33907; PPC64LE-NEXT:  .LBB221_1:3908; PPC64LE-NEXT:    lbarx 3, 0, 53909; PPC64LE-NEXT:    or 6, 4, 33910; PPC64LE-NEXT:    stbcx. 6, 0, 53911; PPC64LE-NEXT:    bne- 0, .LBB221_13912; PPC64LE-NEXT:  # %bb.2:3913; PPC64LE-NEXT:    lwsync3914; PPC64LE-NEXT:    blr3915  %ret = atomicrmw or ptr %ptr, i8 %val acquire3916  ret i8 %ret3917}3918 3919define i8 @test222(ptr %ptr, i8 %val) {3920; PPC64LE-LABEL: test222:3921; PPC64LE:       # %bb.0:3922; PPC64LE-NEXT:    lwsync3923; PPC64LE-NEXT:  .LBB222_1:3924; PPC64LE-NEXT:    lbarx 5, 0, 33925; PPC64LE-NEXT:    or 6, 4, 53926; PPC64LE-NEXT:    stbcx. 6, 0, 33927; PPC64LE-NEXT:    bne- 0, .LBB222_13928; PPC64LE-NEXT:  # %bb.2:3929; PPC64LE-NEXT:    mr 3, 53930; PPC64LE-NEXT:    blr3931  %ret = atomicrmw or ptr %ptr, i8 %val release3932  ret i8 %ret3933}3934 3935define i8 @test223(ptr %ptr, i8 %val) {3936; PPC64LE-LABEL: test223:3937; PPC64LE:       # %bb.0:3938; PPC64LE-NEXT:    lwsync3939; PPC64LE-NEXT:  .LBB223_1:3940; PPC64LE-NEXT:    lbarx 5, 0, 33941; PPC64LE-NEXT:    or 6, 4, 53942; PPC64LE-NEXT:    stbcx. 6, 0, 33943; PPC64LE-NEXT:    bne- 0, .LBB223_13944; PPC64LE-NEXT:  # %bb.2:3945; PPC64LE-NEXT:    lwsync3946; PPC64LE-NEXT:    mr 3, 53947; PPC64LE-NEXT:    blr3948  %ret = atomicrmw or ptr %ptr, i8 %val acq_rel3949  ret i8 %ret3950}3951 3952define i8 @test224(ptr %ptr, i8 %val) {3953; PPC64LE-LABEL: test224:3954; PPC64LE:       # %bb.0:3955; PPC64LE-NEXT:    sync3956; PPC64LE-NEXT:  .LBB224_1:3957; PPC64LE-NEXT:    lbarx 5, 0, 33958; PPC64LE-NEXT:    or 6, 4, 53959; PPC64LE-NEXT:    stbcx. 6, 0, 33960; PPC64LE-NEXT:    bne- 0, .LBB224_13961; PPC64LE-NEXT:  # %bb.2:3962; PPC64LE-NEXT:    lwsync3963; PPC64LE-NEXT:    mr 3, 53964; PPC64LE-NEXT:    blr3965  %ret = atomicrmw or ptr %ptr, i8 %val seq_cst3966  ret i8 %ret3967}3968 3969define i16 @test225(ptr %ptr, i16 %val) {3970; PPC64LE-LABEL: test225:3971; PPC64LE:       # %bb.0:3972; PPC64LE-NEXT:  .LBB225_1:3973; PPC64LE-NEXT:    lharx 5, 0, 33974; PPC64LE-NEXT:    or 6, 4, 53975; PPC64LE-NEXT:    sthcx. 6, 0, 33976; PPC64LE-NEXT:    bne- 0, .LBB225_13977; PPC64LE-NEXT:  # %bb.2:3978; PPC64LE-NEXT:    mr 3, 53979; PPC64LE-NEXT:    blr3980  %ret = atomicrmw or ptr %ptr, i16 %val monotonic3981  ret i16 %ret3982}3983 3984define i16 @test226(ptr %ptr, i16 %val) {3985; PPC64LE-LABEL: test226:3986; PPC64LE:       # %bb.0:3987; PPC64LE-NEXT:    mr 5, 33988; PPC64LE-NEXT:  .LBB226_1:3989; PPC64LE-NEXT:    lharx 3, 0, 53990; PPC64LE-NEXT:    or 6, 4, 33991; PPC64LE-NEXT:    sthcx. 6, 0, 53992; PPC64LE-NEXT:    bne- 0, .LBB226_13993; PPC64LE-NEXT:  # %bb.2:3994; PPC64LE-NEXT:    lwsync3995; PPC64LE-NEXT:    blr3996  %ret = atomicrmw or ptr %ptr, i16 %val acquire3997  ret i16 %ret3998}3999 4000define i16 @test227(ptr %ptr, i16 %val) {4001; PPC64LE-LABEL: test227:4002; PPC64LE:       # %bb.0:4003; PPC64LE-NEXT:    lwsync4004; PPC64LE-NEXT:  .LBB227_1:4005; PPC64LE-NEXT:    lharx 5, 0, 34006; PPC64LE-NEXT:    or 6, 4, 54007; PPC64LE-NEXT:    sthcx. 6, 0, 34008; PPC64LE-NEXT:    bne- 0, .LBB227_14009; PPC64LE-NEXT:  # %bb.2:4010; PPC64LE-NEXT:    mr 3, 54011; PPC64LE-NEXT:    blr4012  %ret = atomicrmw or ptr %ptr, i16 %val release4013  ret i16 %ret4014}4015 4016define i16 @test228(ptr %ptr, i16 %val) {4017; PPC64LE-LABEL: test228:4018; PPC64LE:       # %bb.0:4019; PPC64LE-NEXT:    lwsync4020; PPC64LE-NEXT:  .LBB228_1:4021; PPC64LE-NEXT:    lharx 5, 0, 34022; PPC64LE-NEXT:    or 6, 4, 54023; PPC64LE-NEXT:    sthcx. 6, 0, 34024; PPC64LE-NEXT:    bne- 0, .LBB228_14025; PPC64LE-NEXT:  # %bb.2:4026; PPC64LE-NEXT:    lwsync4027; PPC64LE-NEXT:    mr 3, 54028; PPC64LE-NEXT:    blr4029  %ret = atomicrmw or ptr %ptr, i16 %val acq_rel4030  ret i16 %ret4031}4032 4033define i16 @test229(ptr %ptr, i16 %val) {4034; PPC64LE-LABEL: test229:4035; PPC64LE:       # %bb.0:4036; PPC64LE-NEXT:    sync4037; PPC64LE-NEXT:  .LBB229_1:4038; PPC64LE-NEXT:    lharx 5, 0, 34039; PPC64LE-NEXT:    or 6, 4, 54040; PPC64LE-NEXT:    sthcx. 6, 0, 34041; PPC64LE-NEXT:    bne- 0, .LBB229_14042; PPC64LE-NEXT:  # %bb.2:4043; PPC64LE-NEXT:    lwsync4044; PPC64LE-NEXT:    mr 3, 54045; PPC64LE-NEXT:    blr4046  %ret = atomicrmw or ptr %ptr, i16 %val seq_cst4047  ret i16 %ret4048}4049 4050define i32 @test230(ptr %ptr, i32 %val) {4051; PPC64LE-LABEL: test230:4052; PPC64LE:       # %bb.0:4053; PPC64LE-NEXT:  .LBB230_1:4054; PPC64LE-NEXT:    lwarx 5, 0, 34055; PPC64LE-NEXT:    or 6, 4, 54056; PPC64LE-NEXT:    stwcx. 6, 0, 34057; PPC64LE-NEXT:    bne- 0, .LBB230_14058; PPC64LE-NEXT:  # %bb.2:4059; PPC64LE-NEXT:    mr 3, 54060; PPC64LE-NEXT:    blr4061  %ret = atomicrmw or ptr %ptr, i32 %val monotonic4062  ret i32 %ret4063}4064 4065define i32 @test231(ptr %ptr, i32 %val) {4066; PPC64LE-LABEL: test231:4067; PPC64LE:       # %bb.0:4068; PPC64LE-NEXT:    mr 5, 34069; PPC64LE-NEXT:  .LBB231_1:4070; PPC64LE-NEXT:    lwarx 3, 0, 54071; PPC64LE-NEXT:    or 6, 4, 34072; PPC64LE-NEXT:    stwcx. 6, 0, 54073; PPC64LE-NEXT:    bne- 0, .LBB231_14074; PPC64LE-NEXT:  # %bb.2:4075; PPC64LE-NEXT:    lwsync4076; PPC64LE-NEXT:    blr4077  %ret = atomicrmw or ptr %ptr, i32 %val acquire4078  ret i32 %ret4079}4080 4081define i32 @test232(ptr %ptr, i32 %val) {4082; PPC64LE-LABEL: test232:4083; PPC64LE:       # %bb.0:4084; PPC64LE-NEXT:    lwsync4085; PPC64LE-NEXT:  .LBB232_1:4086; PPC64LE-NEXT:    lwarx 5, 0, 34087; PPC64LE-NEXT:    or 6, 4, 54088; PPC64LE-NEXT:    stwcx. 6, 0, 34089; PPC64LE-NEXT:    bne- 0, .LBB232_14090; PPC64LE-NEXT:  # %bb.2:4091; PPC64LE-NEXT:    mr 3, 54092; PPC64LE-NEXT:    blr4093  %ret = atomicrmw or ptr %ptr, i32 %val release4094  ret i32 %ret4095}4096 4097define i32 @test233(ptr %ptr, i32 %val) {4098; PPC64LE-LABEL: test233:4099; PPC64LE:       # %bb.0:4100; PPC64LE-NEXT:    lwsync4101; PPC64LE-NEXT:  .LBB233_1:4102; PPC64LE-NEXT:    lwarx 5, 0, 34103; PPC64LE-NEXT:    or 6, 4, 54104; PPC64LE-NEXT:    stwcx. 6, 0, 34105; PPC64LE-NEXT:    bne- 0, .LBB233_14106; PPC64LE-NEXT:  # %bb.2:4107; PPC64LE-NEXT:    lwsync4108; PPC64LE-NEXT:    mr 3, 54109; PPC64LE-NEXT:    blr4110  %ret = atomicrmw or ptr %ptr, i32 %val acq_rel4111  ret i32 %ret4112}4113 4114define i32 @test234(ptr %ptr, i32 %val) {4115; PPC64LE-LABEL: test234:4116; PPC64LE:       # %bb.0:4117; PPC64LE-NEXT:    sync4118; PPC64LE-NEXT:  .LBB234_1:4119; PPC64LE-NEXT:    lwarx 5, 0, 34120; PPC64LE-NEXT:    or 6, 4, 54121; PPC64LE-NEXT:    stwcx. 6, 0, 34122; PPC64LE-NEXT:    bne- 0, .LBB234_14123; PPC64LE-NEXT:  # %bb.2:4124; PPC64LE-NEXT:    lwsync4125; PPC64LE-NEXT:    mr 3, 54126; PPC64LE-NEXT:    blr4127  %ret = atomicrmw or ptr %ptr, i32 %val seq_cst4128  ret i32 %ret4129}4130 4131define i64 @test235(ptr %ptr, i64 %val) {4132; PPC64LE-LABEL: test235:4133; PPC64LE:       # %bb.0:4134; PPC64LE-NEXT:  .LBB235_1:4135; PPC64LE-NEXT:    ldarx 5, 0, 34136; PPC64LE-NEXT:    or 6, 4, 54137; PPC64LE-NEXT:    stdcx. 6, 0, 34138; PPC64LE-NEXT:    bne- 0, .LBB235_14139; PPC64LE-NEXT:  # %bb.2:4140; PPC64LE-NEXT:    mr 3, 54141; PPC64LE-NEXT:    blr4142  %ret = atomicrmw or ptr %ptr, i64 %val monotonic4143  ret i64 %ret4144}4145 4146define i64 @test236(ptr %ptr, i64 %val) {4147; PPC64LE-LABEL: test236:4148; PPC64LE:       # %bb.0:4149; PPC64LE-NEXT:    mr 5, 34150; PPC64LE-NEXT:  .LBB236_1:4151; PPC64LE-NEXT:    ldarx 3, 0, 54152; PPC64LE-NEXT:    or 6, 4, 34153; PPC64LE-NEXT:    stdcx. 6, 0, 54154; PPC64LE-NEXT:    bne- 0, .LBB236_14155; PPC64LE-NEXT:  # %bb.2:4156; PPC64LE-NEXT:    lwsync4157; PPC64LE-NEXT:    blr4158  %ret = atomicrmw or ptr %ptr, i64 %val acquire4159  ret i64 %ret4160}4161 4162define i64 @test237(ptr %ptr, i64 %val) {4163; PPC64LE-LABEL: test237:4164; PPC64LE:       # %bb.0:4165; PPC64LE-NEXT:    lwsync4166; PPC64LE-NEXT:  .LBB237_1:4167; PPC64LE-NEXT:    ldarx 5, 0, 34168; PPC64LE-NEXT:    or 6, 4, 54169; PPC64LE-NEXT:    stdcx. 6, 0, 34170; PPC64LE-NEXT:    bne- 0, .LBB237_14171; PPC64LE-NEXT:  # %bb.2:4172; PPC64LE-NEXT:    mr 3, 54173; PPC64LE-NEXT:    blr4174  %ret = atomicrmw or ptr %ptr, i64 %val release4175  ret i64 %ret4176}4177 4178define i64 @test238(ptr %ptr, i64 %val) {4179; PPC64LE-LABEL: test238:4180; PPC64LE:       # %bb.0:4181; PPC64LE-NEXT:    lwsync4182; PPC64LE-NEXT:  .LBB238_1:4183; PPC64LE-NEXT:    ldarx 5, 0, 34184; PPC64LE-NEXT:    or 6, 4, 54185; PPC64LE-NEXT:    stdcx. 6, 0, 34186; PPC64LE-NEXT:    bne- 0, .LBB238_14187; PPC64LE-NEXT:  # %bb.2:4188; PPC64LE-NEXT:    lwsync4189; PPC64LE-NEXT:    mr 3, 54190; PPC64LE-NEXT:    blr4191  %ret = atomicrmw or ptr %ptr, i64 %val acq_rel4192  ret i64 %ret4193}4194 4195define i64 @test239(ptr %ptr, i64 %val) {4196; PPC64LE-LABEL: test239:4197; PPC64LE:       # %bb.0:4198; PPC64LE-NEXT:    sync4199; PPC64LE-NEXT:  .LBB239_1:4200; PPC64LE-NEXT:    ldarx 5, 0, 34201; PPC64LE-NEXT:    or 6, 4, 54202; PPC64LE-NEXT:    stdcx. 6, 0, 34203; PPC64LE-NEXT:    bne- 0, .LBB239_14204; PPC64LE-NEXT:  # %bb.2:4205; PPC64LE-NEXT:    lwsync4206; PPC64LE-NEXT:    mr 3, 54207; PPC64LE-NEXT:    blr4208  %ret = atomicrmw or ptr %ptr, i64 %val seq_cst4209  ret i64 %ret4210}4211 4212define i8 @test240(ptr %ptr, i8 %val) {4213; PPC64LE-LABEL: test240:4214; PPC64LE:       # %bb.0:4215; PPC64LE-NEXT:  .LBB240_1:4216; PPC64LE-NEXT:    lbarx 5, 0, 34217; PPC64LE-NEXT:    xor 6, 4, 54218; PPC64LE-NEXT:    stbcx. 6, 0, 34219; PPC64LE-NEXT:    bne- 0, .LBB240_14220; PPC64LE-NEXT:  # %bb.2:4221; PPC64LE-NEXT:    mr 3, 54222; PPC64LE-NEXT:    blr4223  %ret = atomicrmw xor ptr %ptr, i8 %val monotonic4224  ret i8 %ret4225}4226 4227define i8 @test241(ptr %ptr, i8 %val) {4228; PPC64LE-LABEL: test241:4229; PPC64LE:       # %bb.0:4230; PPC64LE-NEXT:    mr 5, 34231; PPC64LE-NEXT:  .LBB241_1:4232; PPC64LE-NEXT:    lbarx 3, 0, 54233; PPC64LE-NEXT:    xor 6, 4, 34234; PPC64LE-NEXT:    stbcx. 6, 0, 54235; PPC64LE-NEXT:    bne- 0, .LBB241_14236; PPC64LE-NEXT:  # %bb.2:4237; PPC64LE-NEXT:    lwsync4238; PPC64LE-NEXT:    blr4239  %ret = atomicrmw xor ptr %ptr, i8 %val acquire4240  ret i8 %ret4241}4242 4243define i8 @test242(ptr %ptr, i8 %val) {4244; PPC64LE-LABEL: test242:4245; PPC64LE:       # %bb.0:4246; PPC64LE-NEXT:    lwsync4247; PPC64LE-NEXT:  .LBB242_1:4248; PPC64LE-NEXT:    lbarx 5, 0, 34249; PPC64LE-NEXT:    xor 6, 4, 54250; PPC64LE-NEXT:    stbcx. 6, 0, 34251; PPC64LE-NEXT:    bne- 0, .LBB242_14252; PPC64LE-NEXT:  # %bb.2:4253; PPC64LE-NEXT:    mr 3, 54254; PPC64LE-NEXT:    blr4255  %ret = atomicrmw xor ptr %ptr, i8 %val release4256  ret i8 %ret4257}4258 4259define i8 @test243(ptr %ptr, i8 %val) {4260; PPC64LE-LABEL: test243:4261; PPC64LE:       # %bb.0:4262; PPC64LE-NEXT:    lwsync4263; PPC64LE-NEXT:  .LBB243_1:4264; PPC64LE-NEXT:    lbarx 5, 0, 34265; PPC64LE-NEXT:    xor 6, 4, 54266; PPC64LE-NEXT:    stbcx. 6, 0, 34267; PPC64LE-NEXT:    bne- 0, .LBB243_14268; PPC64LE-NEXT:  # %bb.2:4269; PPC64LE-NEXT:    lwsync4270; PPC64LE-NEXT:    mr 3, 54271; PPC64LE-NEXT:    blr4272  %ret = atomicrmw xor ptr %ptr, i8 %val acq_rel4273  ret i8 %ret4274}4275 4276define i8 @test244(ptr %ptr, i8 %val) {4277; PPC64LE-LABEL: test244:4278; PPC64LE:       # %bb.0:4279; PPC64LE-NEXT:    sync4280; PPC64LE-NEXT:  .LBB244_1:4281; PPC64LE-NEXT:    lbarx 5, 0, 34282; PPC64LE-NEXT:    xor 6, 4, 54283; PPC64LE-NEXT:    stbcx. 6, 0, 34284; PPC64LE-NEXT:    bne- 0, .LBB244_14285; PPC64LE-NEXT:  # %bb.2:4286; PPC64LE-NEXT:    lwsync4287; PPC64LE-NEXT:    mr 3, 54288; PPC64LE-NEXT:    blr4289  %ret = atomicrmw xor ptr %ptr, i8 %val seq_cst4290  ret i8 %ret4291}4292 4293define i16 @test245(ptr %ptr, i16 %val) {4294; PPC64LE-LABEL: test245:4295; PPC64LE:       # %bb.0:4296; PPC64LE-NEXT:  .LBB245_1:4297; PPC64LE-NEXT:    lharx 5, 0, 34298; PPC64LE-NEXT:    xor 6, 4, 54299; PPC64LE-NEXT:    sthcx. 6, 0, 34300; PPC64LE-NEXT:    bne- 0, .LBB245_14301; PPC64LE-NEXT:  # %bb.2:4302; PPC64LE-NEXT:    mr 3, 54303; PPC64LE-NEXT:    blr4304  %ret = atomicrmw xor ptr %ptr, i16 %val monotonic4305  ret i16 %ret4306}4307 4308define i16 @test246(ptr %ptr, i16 %val) {4309; PPC64LE-LABEL: test246:4310; PPC64LE:       # %bb.0:4311; PPC64LE-NEXT:    mr 5, 34312; PPC64LE-NEXT:  .LBB246_1:4313; PPC64LE-NEXT:    lharx 3, 0, 54314; PPC64LE-NEXT:    xor 6, 4, 34315; PPC64LE-NEXT:    sthcx. 6, 0, 54316; PPC64LE-NEXT:    bne- 0, .LBB246_14317; PPC64LE-NEXT:  # %bb.2:4318; PPC64LE-NEXT:    lwsync4319; PPC64LE-NEXT:    blr4320  %ret = atomicrmw xor ptr %ptr, i16 %val acquire4321  ret i16 %ret4322}4323 4324define i16 @test247(ptr %ptr, i16 %val) {4325; PPC64LE-LABEL: test247:4326; PPC64LE:       # %bb.0:4327; PPC64LE-NEXT:    lwsync4328; PPC64LE-NEXT:  .LBB247_1:4329; PPC64LE-NEXT:    lharx 5, 0, 34330; PPC64LE-NEXT:    xor 6, 4, 54331; PPC64LE-NEXT:    sthcx. 6, 0, 34332; PPC64LE-NEXT:    bne- 0, .LBB247_14333; PPC64LE-NEXT:  # %bb.2:4334; PPC64LE-NEXT:    mr 3, 54335; PPC64LE-NEXT:    blr4336  %ret = atomicrmw xor ptr %ptr, i16 %val release4337  ret i16 %ret4338}4339 4340define i16 @test248(ptr %ptr, i16 %val) {4341; PPC64LE-LABEL: test248:4342; PPC64LE:       # %bb.0:4343; PPC64LE-NEXT:    lwsync4344; PPC64LE-NEXT:  .LBB248_1:4345; PPC64LE-NEXT:    lharx 5, 0, 34346; PPC64LE-NEXT:    xor 6, 4, 54347; PPC64LE-NEXT:    sthcx. 6, 0, 34348; PPC64LE-NEXT:    bne- 0, .LBB248_14349; PPC64LE-NEXT:  # %bb.2:4350; PPC64LE-NEXT:    lwsync4351; PPC64LE-NEXT:    mr 3, 54352; PPC64LE-NEXT:    blr4353  %ret = atomicrmw xor ptr %ptr, i16 %val acq_rel4354  ret i16 %ret4355}4356 4357define i16 @test249(ptr %ptr, i16 %val) {4358; PPC64LE-LABEL: test249:4359; PPC64LE:       # %bb.0:4360; PPC64LE-NEXT:    sync4361; PPC64LE-NEXT:  .LBB249_1:4362; PPC64LE-NEXT:    lharx 5, 0, 34363; PPC64LE-NEXT:    xor 6, 4, 54364; PPC64LE-NEXT:    sthcx. 6, 0, 34365; PPC64LE-NEXT:    bne- 0, .LBB249_14366; PPC64LE-NEXT:  # %bb.2:4367; PPC64LE-NEXT:    lwsync4368; PPC64LE-NEXT:    mr 3, 54369; PPC64LE-NEXT:    blr4370  %ret = atomicrmw xor ptr %ptr, i16 %val seq_cst4371  ret i16 %ret4372}4373 4374define i32 @test250(ptr %ptr, i32 %val) {4375; PPC64LE-LABEL: test250:4376; PPC64LE:       # %bb.0:4377; PPC64LE-NEXT:  .LBB250_1:4378; PPC64LE-NEXT:    lwarx 5, 0, 34379; PPC64LE-NEXT:    xor 6, 4, 54380; PPC64LE-NEXT:    stwcx. 6, 0, 34381; PPC64LE-NEXT:    bne- 0, .LBB250_14382; PPC64LE-NEXT:  # %bb.2:4383; PPC64LE-NEXT:    mr 3, 54384; PPC64LE-NEXT:    blr4385  %ret = atomicrmw xor ptr %ptr, i32 %val monotonic4386  ret i32 %ret4387}4388 4389define i32 @test251(ptr %ptr, i32 %val) {4390; PPC64LE-LABEL: test251:4391; PPC64LE:       # %bb.0:4392; PPC64LE-NEXT:    mr 5, 34393; PPC64LE-NEXT:  .LBB251_1:4394; PPC64LE-NEXT:    lwarx 3, 0, 54395; PPC64LE-NEXT:    xor 6, 4, 34396; PPC64LE-NEXT:    stwcx. 6, 0, 54397; PPC64LE-NEXT:    bne- 0, .LBB251_14398; PPC64LE-NEXT:  # %bb.2:4399; PPC64LE-NEXT:    lwsync4400; PPC64LE-NEXT:    blr4401  %ret = atomicrmw xor ptr %ptr, i32 %val acquire4402  ret i32 %ret4403}4404 4405define i32 @test252(ptr %ptr, i32 %val) {4406; PPC64LE-LABEL: test252:4407; PPC64LE:       # %bb.0:4408; PPC64LE-NEXT:    lwsync4409; PPC64LE-NEXT:  .LBB252_1:4410; PPC64LE-NEXT:    lwarx 5, 0, 34411; PPC64LE-NEXT:    xor 6, 4, 54412; PPC64LE-NEXT:    stwcx. 6, 0, 34413; PPC64LE-NEXT:    bne- 0, .LBB252_14414; PPC64LE-NEXT:  # %bb.2:4415; PPC64LE-NEXT:    mr 3, 54416; PPC64LE-NEXT:    blr4417  %ret = atomicrmw xor ptr %ptr, i32 %val release4418  ret i32 %ret4419}4420 4421define i32 @test253(ptr %ptr, i32 %val) {4422; PPC64LE-LABEL: test253:4423; PPC64LE:       # %bb.0:4424; PPC64LE-NEXT:    lwsync4425; PPC64LE-NEXT:  .LBB253_1:4426; PPC64LE-NEXT:    lwarx 5, 0, 34427; PPC64LE-NEXT:    xor 6, 4, 54428; PPC64LE-NEXT:    stwcx. 6, 0, 34429; PPC64LE-NEXT:    bne- 0, .LBB253_14430; PPC64LE-NEXT:  # %bb.2:4431; PPC64LE-NEXT:    lwsync4432; PPC64LE-NEXT:    mr 3, 54433; PPC64LE-NEXT:    blr4434  %ret = atomicrmw xor ptr %ptr, i32 %val acq_rel4435  ret i32 %ret4436}4437 4438define i32 @test254(ptr %ptr, i32 %val) {4439; PPC64LE-LABEL: test254:4440; PPC64LE:       # %bb.0:4441; PPC64LE-NEXT:    sync4442; PPC64LE-NEXT:  .LBB254_1:4443; PPC64LE-NEXT:    lwarx 5, 0, 34444; PPC64LE-NEXT:    xor 6, 4, 54445; PPC64LE-NEXT:    stwcx. 6, 0, 34446; PPC64LE-NEXT:    bne- 0, .LBB254_14447; PPC64LE-NEXT:  # %bb.2:4448; PPC64LE-NEXT:    lwsync4449; PPC64LE-NEXT:    mr 3, 54450; PPC64LE-NEXT:    blr4451  %ret = atomicrmw xor ptr %ptr, i32 %val seq_cst4452  ret i32 %ret4453}4454 4455define i64 @test255(ptr %ptr, i64 %val) {4456; PPC64LE-LABEL: test255:4457; PPC64LE:       # %bb.0:4458; PPC64LE-NEXT:  .LBB255_1:4459; PPC64LE-NEXT:    ldarx 5, 0, 34460; PPC64LE-NEXT:    xor 6, 4, 54461; PPC64LE-NEXT:    stdcx. 6, 0, 34462; PPC64LE-NEXT:    bne- 0, .LBB255_14463; PPC64LE-NEXT:  # %bb.2:4464; PPC64LE-NEXT:    mr 3, 54465; PPC64LE-NEXT:    blr4466  %ret = atomicrmw xor ptr %ptr, i64 %val monotonic4467  ret i64 %ret4468}4469 4470define i64 @test256(ptr %ptr, i64 %val) {4471; PPC64LE-LABEL: test256:4472; PPC64LE:       # %bb.0:4473; PPC64LE-NEXT:    mr 5, 34474; PPC64LE-NEXT:  .LBB256_1:4475; PPC64LE-NEXT:    ldarx 3, 0, 54476; PPC64LE-NEXT:    xor 6, 4, 34477; PPC64LE-NEXT:    stdcx. 6, 0, 54478; PPC64LE-NEXT:    bne- 0, .LBB256_14479; PPC64LE-NEXT:  # %bb.2:4480; PPC64LE-NEXT:    lwsync4481; PPC64LE-NEXT:    blr4482  %ret = atomicrmw xor ptr %ptr, i64 %val acquire4483  ret i64 %ret4484}4485 4486define i64 @test257(ptr %ptr, i64 %val) {4487; PPC64LE-LABEL: test257:4488; PPC64LE:       # %bb.0:4489; PPC64LE-NEXT:    lwsync4490; PPC64LE-NEXT:  .LBB257_1:4491; PPC64LE-NEXT:    ldarx 5, 0, 34492; PPC64LE-NEXT:    xor 6, 4, 54493; PPC64LE-NEXT:    stdcx. 6, 0, 34494; PPC64LE-NEXT:    bne- 0, .LBB257_14495; PPC64LE-NEXT:  # %bb.2:4496; PPC64LE-NEXT:    mr 3, 54497; PPC64LE-NEXT:    blr4498  %ret = atomicrmw xor ptr %ptr, i64 %val release4499  ret i64 %ret4500}4501 4502define i64 @test258(ptr %ptr, i64 %val) {4503; PPC64LE-LABEL: test258:4504; PPC64LE:       # %bb.0:4505; PPC64LE-NEXT:    lwsync4506; PPC64LE-NEXT:  .LBB258_1:4507; PPC64LE-NEXT:    ldarx 5, 0, 34508; PPC64LE-NEXT:    xor 6, 4, 54509; PPC64LE-NEXT:    stdcx. 6, 0, 34510; PPC64LE-NEXT:    bne- 0, .LBB258_14511; PPC64LE-NEXT:  # %bb.2:4512; PPC64LE-NEXT:    lwsync4513; PPC64LE-NEXT:    mr 3, 54514; PPC64LE-NEXT:    blr4515  %ret = atomicrmw xor ptr %ptr, i64 %val acq_rel4516  ret i64 %ret4517}4518 4519define i64 @test259(ptr %ptr, i64 %val) {4520; PPC64LE-LABEL: test259:4521; PPC64LE:       # %bb.0:4522; PPC64LE-NEXT:    sync4523; PPC64LE-NEXT:  .LBB259_1:4524; PPC64LE-NEXT:    ldarx 5, 0, 34525; PPC64LE-NEXT:    xor 6, 4, 54526; PPC64LE-NEXT:    stdcx. 6, 0, 34527; PPC64LE-NEXT:    bne- 0, .LBB259_14528; PPC64LE-NEXT:  # %bb.2:4529; PPC64LE-NEXT:    lwsync4530; PPC64LE-NEXT:    mr 3, 54531; PPC64LE-NEXT:    blr4532  %ret = atomicrmw xor ptr %ptr, i64 %val seq_cst4533  ret i64 %ret4534}4535 4536define i8 @test260(ptr %ptr, i8 %val) {4537; PPC64LE-LABEL: test260:4538; PPC64LE:       # %bb.0:4539; PPC64LE-NEXT:    extsb 5, 44540; PPC64LE-NEXT:  .LBB260_1:4541; PPC64LE-NEXT:    lbarx 4, 0, 34542; PPC64LE-NEXT:    extsb 6, 44543; PPC64LE-NEXT:    cmpw 6, 54544; PPC64LE-NEXT:    bgt 0, .LBB260_34545; PPC64LE-NEXT:  # %bb.2:4546; PPC64LE-NEXT:    stbcx. 5, 0, 34547; PPC64LE-NEXT:    bne- 0, .LBB260_14548; PPC64LE-NEXT:  .LBB260_3:4549; PPC64LE-NEXT:    mr 3, 44550; PPC64LE-NEXT:    blr4551  %ret = atomicrmw max ptr %ptr, i8 %val monotonic4552  ret i8 %ret4553}4554 4555define i8 @test261(ptr %ptr, i8 %val) {4556; PPC64LE-LABEL: test261:4557; PPC64LE:       # %bb.0:4558; PPC64LE-NEXT:    extsb 5, 44559; PPC64LE-NEXT:  .LBB261_1:4560; PPC64LE-NEXT:    lbarx 4, 0, 34561; PPC64LE-NEXT:    extsb 6, 44562; PPC64LE-NEXT:    cmpw 6, 54563; PPC64LE-NEXT:    bgt 0, .LBB261_34564; PPC64LE-NEXT:  # %bb.2:4565; PPC64LE-NEXT:    stbcx. 5, 0, 34566; PPC64LE-NEXT:    bne- 0, .LBB261_14567; PPC64LE-NEXT:  .LBB261_3:4568; PPC64LE-NEXT:    lwsync4569; PPC64LE-NEXT:    mr 3, 44570; PPC64LE-NEXT:    blr4571  %ret = atomicrmw max ptr %ptr, i8 %val acquire4572  ret i8 %ret4573}4574 4575define i8 @test262(ptr %ptr, i8 %val) {4576; PPC64LE-LABEL: test262:4577; PPC64LE:       # %bb.0:4578; PPC64LE-NEXT:    lwsync4579; PPC64LE-NEXT:    extsb 5, 44580; PPC64LE-NEXT:  .LBB262_1:4581; PPC64LE-NEXT:    lbarx 4, 0, 34582; PPC64LE-NEXT:    extsb 6, 44583; PPC64LE-NEXT:    cmpw 6, 54584; PPC64LE-NEXT:    bgt 0, .LBB262_34585; PPC64LE-NEXT:  # %bb.2:4586; PPC64LE-NEXT:    stbcx. 5, 0, 34587; PPC64LE-NEXT:    bne- 0, .LBB262_14588; PPC64LE-NEXT:  .LBB262_3:4589; PPC64LE-NEXT:    mr 3, 44590; PPC64LE-NEXT:    blr4591  %ret = atomicrmw max ptr %ptr, i8 %val release4592  ret i8 %ret4593}4594 4595define i8 @test263(ptr %ptr, i8 %val) {4596; PPC64LE-LABEL: test263:4597; PPC64LE:       # %bb.0:4598; PPC64LE-NEXT:    lwsync4599; PPC64LE-NEXT:    extsb 5, 44600; PPC64LE-NEXT:  .LBB263_1:4601; PPC64LE-NEXT:    lbarx 4, 0, 34602; PPC64LE-NEXT:    extsb 6, 44603; PPC64LE-NEXT:    cmpw 6, 54604; PPC64LE-NEXT:    bgt 0, .LBB263_34605; PPC64LE-NEXT:  # %bb.2:4606; PPC64LE-NEXT:    stbcx. 5, 0, 34607; PPC64LE-NEXT:    bne- 0, .LBB263_14608; PPC64LE-NEXT:  .LBB263_3:4609; PPC64LE-NEXT:    lwsync4610; PPC64LE-NEXT:    mr 3, 44611; PPC64LE-NEXT:    blr4612  %ret = atomicrmw max ptr %ptr, i8 %val acq_rel4613  ret i8 %ret4614}4615 4616define i8 @test264(ptr %ptr, i8 %val) {4617; PPC64LE-LABEL: test264:4618; PPC64LE:       # %bb.0:4619; PPC64LE-NEXT:    sync4620; PPC64LE-NEXT:    extsb 5, 44621; PPC64LE-NEXT:  .LBB264_1:4622; PPC64LE-NEXT:    lbarx 4, 0, 34623; PPC64LE-NEXT:    extsb 6, 44624; PPC64LE-NEXT:    cmpw 6, 54625; PPC64LE-NEXT:    bgt 0, .LBB264_34626; PPC64LE-NEXT:  # %bb.2:4627; PPC64LE-NEXT:    stbcx. 5, 0, 34628; PPC64LE-NEXT:    bne- 0, .LBB264_14629; PPC64LE-NEXT:  .LBB264_3:4630; PPC64LE-NEXT:    lwsync4631; PPC64LE-NEXT:    mr 3, 44632; PPC64LE-NEXT:    blr4633  %ret = atomicrmw max ptr %ptr, i8 %val seq_cst4634  ret i8 %ret4635}4636 4637define i16 @test265(ptr %ptr, i16 %val) {4638; PPC64LE-LABEL: test265:4639; PPC64LE:       # %bb.0:4640; PPC64LE-NEXT:    extsh 5, 44641; PPC64LE-NEXT:  .LBB265_1:4642; PPC64LE-NEXT:    lharx 4, 0, 34643; PPC64LE-NEXT:    extsh 6, 44644; PPC64LE-NEXT:    cmpw 6, 54645; PPC64LE-NEXT:    bgt 0, .LBB265_34646; PPC64LE-NEXT:  # %bb.2:4647; PPC64LE-NEXT:    sthcx. 5, 0, 34648; PPC64LE-NEXT:    bne- 0, .LBB265_14649; PPC64LE-NEXT:  .LBB265_3:4650; PPC64LE-NEXT:    mr 3, 44651; PPC64LE-NEXT:    blr4652  %ret = atomicrmw max ptr %ptr, i16 %val monotonic4653  ret i16 %ret4654}4655 4656define i16 @test266(ptr %ptr, i16 %val) {4657; PPC64LE-LABEL: test266:4658; PPC64LE:       # %bb.0:4659; PPC64LE-NEXT:    extsh 5, 44660; PPC64LE-NEXT:  .LBB266_1:4661; PPC64LE-NEXT:    lharx 4, 0, 34662; PPC64LE-NEXT:    extsh 6, 44663; PPC64LE-NEXT:    cmpw 6, 54664; PPC64LE-NEXT:    bgt 0, .LBB266_34665; PPC64LE-NEXT:  # %bb.2:4666; PPC64LE-NEXT:    sthcx. 5, 0, 34667; PPC64LE-NEXT:    bne- 0, .LBB266_14668; PPC64LE-NEXT:  .LBB266_3:4669; PPC64LE-NEXT:    lwsync4670; PPC64LE-NEXT:    mr 3, 44671; PPC64LE-NEXT:    blr4672  %ret = atomicrmw max ptr %ptr, i16 %val acquire4673  ret i16 %ret4674}4675 4676define i16 @test267(ptr %ptr, i16 %val) {4677; PPC64LE-LABEL: test267:4678; PPC64LE:       # %bb.0:4679; PPC64LE-NEXT:    lwsync4680; PPC64LE-NEXT:    extsh 5, 44681; PPC64LE-NEXT:  .LBB267_1:4682; PPC64LE-NEXT:    lharx 4, 0, 34683; PPC64LE-NEXT:    extsh 6, 44684; PPC64LE-NEXT:    cmpw 6, 54685; PPC64LE-NEXT:    bgt 0, .LBB267_34686; PPC64LE-NEXT:  # %bb.2:4687; PPC64LE-NEXT:    sthcx. 5, 0, 34688; PPC64LE-NEXT:    bne- 0, .LBB267_14689; PPC64LE-NEXT:  .LBB267_3:4690; PPC64LE-NEXT:    mr 3, 44691; PPC64LE-NEXT:    blr4692  %ret = atomicrmw max ptr %ptr, i16 %val release4693  ret i16 %ret4694}4695 4696define i16 @test268(ptr %ptr, i16 %val) {4697; PPC64LE-LABEL: test268:4698; PPC64LE:       # %bb.0:4699; PPC64LE-NEXT:    lwsync4700; PPC64LE-NEXT:    extsh 5, 44701; PPC64LE-NEXT:  .LBB268_1:4702; PPC64LE-NEXT:    lharx 4, 0, 34703; PPC64LE-NEXT:    extsh 6, 44704; PPC64LE-NEXT:    cmpw 6, 54705; PPC64LE-NEXT:    bgt 0, .LBB268_34706; PPC64LE-NEXT:  # %bb.2:4707; PPC64LE-NEXT:    sthcx. 5, 0, 34708; PPC64LE-NEXT:    bne- 0, .LBB268_14709; PPC64LE-NEXT:  .LBB268_3:4710; PPC64LE-NEXT:    lwsync4711; PPC64LE-NEXT:    mr 3, 44712; PPC64LE-NEXT:    blr4713  %ret = atomicrmw max ptr %ptr, i16 %val acq_rel4714  ret i16 %ret4715}4716 4717define i16 @test269(ptr %ptr, i16 %val) {4718; PPC64LE-LABEL: test269:4719; PPC64LE:       # %bb.0:4720; PPC64LE-NEXT:    sync4721; PPC64LE-NEXT:    extsh 5, 44722; PPC64LE-NEXT:  .LBB269_1:4723; PPC64LE-NEXT:    lharx 4, 0, 34724; PPC64LE-NEXT:    extsh 6, 44725; PPC64LE-NEXT:    cmpw 6, 54726; PPC64LE-NEXT:    bgt 0, .LBB269_34727; PPC64LE-NEXT:  # %bb.2:4728; PPC64LE-NEXT:    sthcx. 5, 0, 34729; PPC64LE-NEXT:    bne- 0, .LBB269_14730; PPC64LE-NEXT:  .LBB269_3:4731; PPC64LE-NEXT:    lwsync4732; PPC64LE-NEXT:    mr 3, 44733; PPC64LE-NEXT:    blr4734  %ret = atomicrmw max ptr %ptr, i16 %val seq_cst4735  ret i16 %ret4736}4737 4738define i32 @test270(ptr %ptr, i32 %val) {4739; PPC64LE-LABEL: test270:4740; PPC64LE:       # %bb.0:4741; PPC64LE-NEXT:  .LBB270_1:4742; PPC64LE-NEXT:    lwarx 5, 0, 34743; PPC64LE-NEXT:    cmpw 5, 44744; PPC64LE-NEXT:    bgt 0, .LBB270_34745; PPC64LE-NEXT:  # %bb.2:4746; PPC64LE-NEXT:    stwcx. 4, 0, 34747; PPC64LE-NEXT:    bne- 0, .LBB270_14748; PPC64LE-NEXT:  .LBB270_3:4749; PPC64LE-NEXT:    mr 3, 54750; PPC64LE-NEXT:    blr4751  %ret = atomicrmw max ptr %ptr, i32 %val monotonic4752  ret i32 %ret4753}4754 4755define i32 @test271(ptr %ptr, i32 %val) {4756; PPC64LE-LABEL: test271:4757; PPC64LE:       # %bb.0:4758; PPC64LE-NEXT:    mr 5, 34759; PPC64LE-NEXT:  .LBB271_1:4760; PPC64LE-NEXT:    lwarx 3, 0, 54761; PPC64LE-NEXT:    cmpw 3, 44762; PPC64LE-NEXT:    bgt 0, .LBB271_34763; PPC64LE-NEXT:  # %bb.2:4764; PPC64LE-NEXT:    stwcx. 4, 0, 54765; PPC64LE-NEXT:    bne- 0, .LBB271_14766; PPC64LE-NEXT:  .LBB271_3:4767; PPC64LE-NEXT:    lwsync4768; PPC64LE-NEXT:    blr4769  %ret = atomicrmw max ptr %ptr, i32 %val acquire4770  ret i32 %ret4771}4772 4773define i32 @test272(ptr %ptr, i32 %val) {4774; PPC64LE-LABEL: test272:4775; PPC64LE:       # %bb.0:4776; PPC64LE-NEXT:    lwsync4777; PPC64LE-NEXT:  .LBB272_1:4778; PPC64LE-NEXT:    lwarx 5, 0, 34779; PPC64LE-NEXT:    cmpw 5, 44780; PPC64LE-NEXT:    bgt 0, .LBB272_34781; PPC64LE-NEXT:  # %bb.2:4782; PPC64LE-NEXT:    stwcx. 4, 0, 34783; PPC64LE-NEXT:    bne- 0, .LBB272_14784; PPC64LE-NEXT:  .LBB272_3:4785; PPC64LE-NEXT:    mr 3, 54786; PPC64LE-NEXT:    blr4787  %ret = atomicrmw max ptr %ptr, i32 %val release4788  ret i32 %ret4789}4790 4791define i32 @test273(ptr %ptr, i32 %val) {4792; PPC64LE-LABEL: test273:4793; PPC64LE:       # %bb.0:4794; PPC64LE-NEXT:    lwsync4795; PPC64LE-NEXT:  .LBB273_1:4796; PPC64LE-NEXT:    lwarx 5, 0, 34797; PPC64LE-NEXT:    cmpw 5, 44798; PPC64LE-NEXT:    bgt 0, .LBB273_34799; PPC64LE-NEXT:  # %bb.2:4800; PPC64LE-NEXT:    stwcx. 4, 0, 34801; PPC64LE-NEXT:    bne- 0, .LBB273_14802; PPC64LE-NEXT:  .LBB273_3:4803; PPC64LE-NEXT:    lwsync4804; PPC64LE-NEXT:    mr 3, 54805; PPC64LE-NEXT:    blr4806  %ret = atomicrmw max ptr %ptr, i32 %val acq_rel4807  ret i32 %ret4808}4809 4810define i32 @test274(ptr %ptr, i32 %val) {4811; PPC64LE-LABEL: test274:4812; PPC64LE:       # %bb.0:4813; PPC64LE-NEXT:    sync4814; PPC64LE-NEXT:  .LBB274_1:4815; PPC64LE-NEXT:    lwarx 5, 0, 34816; PPC64LE-NEXT:    cmpw 5, 44817; PPC64LE-NEXT:    bgt 0, .LBB274_34818; PPC64LE-NEXT:  # %bb.2:4819; PPC64LE-NEXT:    stwcx. 4, 0, 34820; PPC64LE-NEXT:    bne- 0, .LBB274_14821; PPC64LE-NEXT:  .LBB274_3:4822; PPC64LE-NEXT:    lwsync4823; PPC64LE-NEXT:    mr 3, 54824; PPC64LE-NEXT:    blr4825  %ret = atomicrmw max ptr %ptr, i32 %val seq_cst4826  ret i32 %ret4827}4828 4829define i64 @test275(ptr %ptr, i64 %val) {4830; PPC64LE-LABEL: test275:4831; PPC64LE:       # %bb.0:4832; PPC64LE-NEXT:  .LBB275_1:4833; PPC64LE-NEXT:    ldarx 5, 0, 34834; PPC64LE-NEXT:    cmpd 5, 44835; PPC64LE-NEXT:    bgt 0, .LBB275_34836; PPC64LE-NEXT:  # %bb.2:4837; PPC64LE-NEXT:    stdcx. 4, 0, 34838; PPC64LE-NEXT:    bne- 0, .LBB275_14839; PPC64LE-NEXT:  .LBB275_3:4840; PPC64LE-NEXT:    mr 3, 54841; PPC64LE-NEXT:    blr4842  %ret = atomicrmw max ptr %ptr, i64 %val monotonic4843  ret i64 %ret4844}4845 4846define i64 @test276(ptr %ptr, i64 %val) {4847; PPC64LE-LABEL: test276:4848; PPC64LE:       # %bb.0:4849; PPC64LE-NEXT:    mr 5, 34850; PPC64LE-NEXT:  .LBB276_1:4851; PPC64LE-NEXT:    ldarx 3, 0, 54852; PPC64LE-NEXT:    cmpd 3, 44853; PPC64LE-NEXT:    bgt 0, .LBB276_34854; PPC64LE-NEXT:  # %bb.2:4855; PPC64LE-NEXT:    stdcx. 4, 0, 54856; PPC64LE-NEXT:    bne- 0, .LBB276_14857; PPC64LE-NEXT:  .LBB276_3:4858; PPC64LE-NEXT:    lwsync4859; PPC64LE-NEXT:    blr4860  %ret = atomicrmw max ptr %ptr, i64 %val acquire4861  ret i64 %ret4862}4863 4864define i64 @test277(ptr %ptr, i64 %val) {4865; PPC64LE-LABEL: test277:4866; PPC64LE:       # %bb.0:4867; PPC64LE-NEXT:    lwsync4868; PPC64LE-NEXT:  .LBB277_1:4869; PPC64LE-NEXT:    ldarx 5, 0, 34870; PPC64LE-NEXT:    cmpd 5, 44871; PPC64LE-NEXT:    bgt 0, .LBB277_34872; PPC64LE-NEXT:  # %bb.2:4873; PPC64LE-NEXT:    stdcx. 4, 0, 34874; PPC64LE-NEXT:    bne- 0, .LBB277_14875; PPC64LE-NEXT:  .LBB277_3:4876; PPC64LE-NEXT:    mr 3, 54877; PPC64LE-NEXT:    blr4878  %ret = atomicrmw max ptr %ptr, i64 %val release4879  ret i64 %ret4880}4881 4882define i64 @test278(ptr %ptr, i64 %val) {4883; PPC64LE-LABEL: test278:4884; PPC64LE:       # %bb.0:4885; PPC64LE-NEXT:    lwsync4886; PPC64LE-NEXT:  .LBB278_1:4887; PPC64LE-NEXT:    ldarx 5, 0, 34888; PPC64LE-NEXT:    cmpd 5, 44889; PPC64LE-NEXT:    bgt 0, .LBB278_34890; PPC64LE-NEXT:  # %bb.2:4891; PPC64LE-NEXT:    stdcx. 4, 0, 34892; PPC64LE-NEXT:    bne- 0, .LBB278_14893; PPC64LE-NEXT:  .LBB278_3:4894; PPC64LE-NEXT:    lwsync4895; PPC64LE-NEXT:    mr 3, 54896; PPC64LE-NEXT:    blr4897  %ret = atomicrmw max ptr %ptr, i64 %val acq_rel4898  ret i64 %ret4899}4900 4901define i64 @test279(ptr %ptr, i64 %val) {4902; PPC64LE-LABEL: test279:4903; PPC64LE:       # %bb.0:4904; PPC64LE-NEXT:    sync4905; PPC64LE-NEXT:  .LBB279_1:4906; PPC64LE-NEXT:    ldarx 5, 0, 34907; PPC64LE-NEXT:    cmpd 5, 44908; PPC64LE-NEXT:    bgt 0, .LBB279_34909; PPC64LE-NEXT:  # %bb.2:4910; PPC64LE-NEXT:    stdcx. 4, 0, 34911; PPC64LE-NEXT:    bne- 0, .LBB279_14912; PPC64LE-NEXT:  .LBB279_3:4913; PPC64LE-NEXT:    lwsync4914; PPC64LE-NEXT:    mr 3, 54915; PPC64LE-NEXT:    blr4916  %ret = atomicrmw max ptr %ptr, i64 %val seq_cst4917  ret i64 %ret4918}4919 4920define i8 @test280(ptr %ptr, i8 %val) {4921; PPC64LE-LABEL: test280:4922; PPC64LE:       # %bb.0:4923; PPC64LE-NEXT:    extsb 5, 44924; PPC64LE-NEXT:  .LBB280_1:4925; PPC64LE-NEXT:    lbarx 4, 0, 34926; PPC64LE-NEXT:    extsb 6, 44927; PPC64LE-NEXT:    cmpw 6, 54928; PPC64LE-NEXT:    blt 0, .LBB280_34929; PPC64LE-NEXT:  # %bb.2:4930; PPC64LE-NEXT:    stbcx. 5, 0, 34931; PPC64LE-NEXT:    bne- 0, .LBB280_14932; PPC64LE-NEXT:  .LBB280_3:4933; PPC64LE-NEXT:    mr 3, 44934; PPC64LE-NEXT:    blr4935  %ret = atomicrmw min ptr %ptr, i8 %val monotonic4936  ret i8 %ret4937}4938 4939define i8 @test281(ptr %ptr, i8 %val) {4940; PPC64LE-LABEL: test281:4941; PPC64LE:       # %bb.0:4942; PPC64LE-NEXT:    extsb 5, 44943; PPC64LE-NEXT:  .LBB281_1:4944; PPC64LE-NEXT:    lbarx 4, 0, 34945; PPC64LE-NEXT:    extsb 6, 44946; PPC64LE-NEXT:    cmpw 6, 54947; PPC64LE-NEXT:    blt 0, .LBB281_34948; PPC64LE-NEXT:  # %bb.2:4949; PPC64LE-NEXT:    stbcx. 5, 0, 34950; PPC64LE-NEXT:    bne- 0, .LBB281_14951; PPC64LE-NEXT:  .LBB281_3:4952; PPC64LE-NEXT:    lwsync4953; PPC64LE-NEXT:    mr 3, 44954; PPC64LE-NEXT:    blr4955  %ret = atomicrmw min ptr %ptr, i8 %val acquire4956  ret i8 %ret4957}4958 4959define i8 @test282(ptr %ptr, i8 %val) {4960; PPC64LE-LABEL: test282:4961; PPC64LE:       # %bb.0:4962; PPC64LE-NEXT:    lwsync4963; PPC64LE-NEXT:    extsb 5, 44964; PPC64LE-NEXT:  .LBB282_1:4965; PPC64LE-NEXT:    lbarx 4, 0, 34966; PPC64LE-NEXT:    extsb 6, 44967; PPC64LE-NEXT:    cmpw 6, 54968; PPC64LE-NEXT:    blt 0, .LBB282_34969; PPC64LE-NEXT:  # %bb.2:4970; PPC64LE-NEXT:    stbcx. 5, 0, 34971; PPC64LE-NEXT:    bne- 0, .LBB282_14972; PPC64LE-NEXT:  .LBB282_3:4973; PPC64LE-NEXT:    mr 3, 44974; PPC64LE-NEXT:    blr4975  %ret = atomicrmw min ptr %ptr, i8 %val release4976  ret i8 %ret4977}4978 4979define i8 @test283(ptr %ptr, i8 %val) {4980; PPC64LE-LABEL: test283:4981; PPC64LE:       # %bb.0:4982; PPC64LE-NEXT:    lwsync4983; PPC64LE-NEXT:    extsb 5, 44984; PPC64LE-NEXT:  .LBB283_1:4985; PPC64LE-NEXT:    lbarx 4, 0, 34986; PPC64LE-NEXT:    extsb 6, 44987; PPC64LE-NEXT:    cmpw 6, 54988; PPC64LE-NEXT:    blt 0, .LBB283_34989; PPC64LE-NEXT:  # %bb.2:4990; PPC64LE-NEXT:    stbcx. 5, 0, 34991; PPC64LE-NEXT:    bne- 0, .LBB283_14992; PPC64LE-NEXT:  .LBB283_3:4993; PPC64LE-NEXT:    lwsync4994; PPC64LE-NEXT:    mr 3, 44995; PPC64LE-NEXT:    blr4996  %ret = atomicrmw min ptr %ptr, i8 %val acq_rel4997  ret i8 %ret4998}4999 5000define i8 @test284(ptr %ptr, i8 %val) {5001; PPC64LE-LABEL: test284:5002; PPC64LE:       # %bb.0:5003; PPC64LE-NEXT:    sync5004; PPC64LE-NEXT:    extsb 5, 45005; PPC64LE-NEXT:  .LBB284_1:5006; PPC64LE-NEXT:    lbarx 4, 0, 35007; PPC64LE-NEXT:    extsb 6, 45008; PPC64LE-NEXT:    cmpw 6, 55009; PPC64LE-NEXT:    blt 0, .LBB284_35010; PPC64LE-NEXT:  # %bb.2:5011; PPC64LE-NEXT:    stbcx. 5, 0, 35012; PPC64LE-NEXT:    bne- 0, .LBB284_15013; PPC64LE-NEXT:  .LBB284_3:5014; PPC64LE-NEXT:    lwsync5015; PPC64LE-NEXT:    mr 3, 45016; PPC64LE-NEXT:    blr5017  %ret = atomicrmw min ptr %ptr, i8 %val seq_cst5018  ret i8 %ret5019}5020 5021define i16 @test285(ptr %ptr, i16 %val) {5022; PPC64LE-LABEL: test285:5023; PPC64LE:       # %bb.0:5024; PPC64LE-NEXT:    extsh 5, 45025; PPC64LE-NEXT:  .LBB285_1:5026; PPC64LE-NEXT:    lharx 4, 0, 35027; PPC64LE-NEXT:    extsh 6, 45028; PPC64LE-NEXT:    cmpw 6, 55029; PPC64LE-NEXT:    blt 0, .LBB285_35030; PPC64LE-NEXT:  # %bb.2:5031; PPC64LE-NEXT:    sthcx. 5, 0, 35032; PPC64LE-NEXT:    bne- 0, .LBB285_15033; PPC64LE-NEXT:  .LBB285_3:5034; PPC64LE-NEXT:    mr 3, 45035; PPC64LE-NEXT:    blr5036  %ret = atomicrmw min ptr %ptr, i16 %val monotonic5037  ret i16 %ret5038}5039 5040define i16 @test286(ptr %ptr, i16 %val) {5041; PPC64LE-LABEL: test286:5042; PPC64LE:       # %bb.0:5043; PPC64LE-NEXT:    extsh 5, 45044; PPC64LE-NEXT:  .LBB286_1:5045; PPC64LE-NEXT:    lharx 4, 0, 35046; PPC64LE-NEXT:    extsh 6, 45047; PPC64LE-NEXT:    cmpw 6, 55048; PPC64LE-NEXT:    blt 0, .LBB286_35049; PPC64LE-NEXT:  # %bb.2:5050; PPC64LE-NEXT:    sthcx. 5, 0, 35051; PPC64LE-NEXT:    bne- 0, .LBB286_15052; PPC64LE-NEXT:  .LBB286_3:5053; PPC64LE-NEXT:    lwsync5054; PPC64LE-NEXT:    mr 3, 45055; PPC64LE-NEXT:    blr5056  %ret = atomicrmw min ptr %ptr, i16 %val acquire5057  ret i16 %ret5058}5059 5060define i16 @test287(ptr %ptr, i16 %val) {5061; PPC64LE-LABEL: test287:5062; PPC64LE:       # %bb.0:5063; PPC64LE-NEXT:    lwsync5064; PPC64LE-NEXT:    extsh 5, 45065; PPC64LE-NEXT:  .LBB287_1:5066; PPC64LE-NEXT:    lharx 4, 0, 35067; PPC64LE-NEXT:    extsh 6, 45068; PPC64LE-NEXT:    cmpw 6, 55069; PPC64LE-NEXT:    blt 0, .LBB287_35070; PPC64LE-NEXT:  # %bb.2:5071; PPC64LE-NEXT:    sthcx. 5, 0, 35072; PPC64LE-NEXT:    bne- 0, .LBB287_15073; PPC64LE-NEXT:  .LBB287_3:5074; PPC64LE-NEXT:    mr 3, 45075; PPC64LE-NEXT:    blr5076  %ret = atomicrmw min ptr %ptr, i16 %val release5077  ret i16 %ret5078}5079 5080define i16 @test288(ptr %ptr, i16 %val) {5081; PPC64LE-LABEL: test288:5082; PPC64LE:       # %bb.0:5083; PPC64LE-NEXT:    lwsync5084; PPC64LE-NEXT:    extsh 5, 45085; PPC64LE-NEXT:  .LBB288_1:5086; PPC64LE-NEXT:    lharx 4, 0, 35087; PPC64LE-NEXT:    extsh 6, 45088; PPC64LE-NEXT:    cmpw 6, 55089; PPC64LE-NEXT:    blt 0, .LBB288_35090; PPC64LE-NEXT:  # %bb.2:5091; PPC64LE-NEXT:    sthcx. 5, 0, 35092; PPC64LE-NEXT:    bne- 0, .LBB288_15093; PPC64LE-NEXT:  .LBB288_3:5094; PPC64LE-NEXT:    lwsync5095; PPC64LE-NEXT:    mr 3, 45096; PPC64LE-NEXT:    blr5097  %ret = atomicrmw min ptr %ptr, i16 %val acq_rel5098  ret i16 %ret5099}5100 5101define i16 @test289(ptr %ptr, i16 %val) {5102; PPC64LE-LABEL: test289:5103; PPC64LE:       # %bb.0:5104; PPC64LE-NEXT:    sync5105; PPC64LE-NEXT:    extsh 5, 45106; PPC64LE-NEXT:  .LBB289_1:5107; PPC64LE-NEXT:    lharx 4, 0, 35108; PPC64LE-NEXT:    extsh 6, 45109; PPC64LE-NEXT:    cmpw 6, 55110; PPC64LE-NEXT:    blt 0, .LBB289_35111; PPC64LE-NEXT:  # %bb.2:5112; PPC64LE-NEXT:    sthcx. 5, 0, 35113; PPC64LE-NEXT:    bne- 0, .LBB289_15114; PPC64LE-NEXT:  .LBB289_3:5115; PPC64LE-NEXT:    lwsync5116; PPC64LE-NEXT:    mr 3, 45117; PPC64LE-NEXT:    blr5118  %ret = atomicrmw min ptr %ptr, i16 %val seq_cst5119  ret i16 %ret5120}5121 5122define i32 @test290(ptr %ptr, i32 %val) {5123; PPC64LE-LABEL: test290:5124; PPC64LE:       # %bb.0:5125; PPC64LE-NEXT:  .LBB290_1:5126; PPC64LE-NEXT:    lwarx 5, 0, 35127; PPC64LE-NEXT:    cmpw 5, 45128; PPC64LE-NEXT:    blt 0, .LBB290_35129; PPC64LE-NEXT:  # %bb.2:5130; PPC64LE-NEXT:    stwcx. 4, 0, 35131; PPC64LE-NEXT:    bne- 0, .LBB290_15132; PPC64LE-NEXT:  .LBB290_3:5133; PPC64LE-NEXT:    mr 3, 55134; PPC64LE-NEXT:    blr5135  %ret = atomicrmw min ptr %ptr, i32 %val monotonic5136  ret i32 %ret5137}5138 5139define i32 @test291(ptr %ptr, i32 %val) {5140; PPC64LE-LABEL: test291:5141; PPC64LE:       # %bb.0:5142; PPC64LE-NEXT:    mr 5, 35143; PPC64LE-NEXT:  .LBB291_1:5144; PPC64LE-NEXT:    lwarx 3, 0, 55145; PPC64LE-NEXT:    cmpw 3, 45146; PPC64LE-NEXT:    blt 0, .LBB291_35147; PPC64LE-NEXT:  # %bb.2:5148; PPC64LE-NEXT:    stwcx. 4, 0, 55149; PPC64LE-NEXT:    bne- 0, .LBB291_15150; PPC64LE-NEXT:  .LBB291_3:5151; PPC64LE-NEXT:    lwsync5152; PPC64LE-NEXT:    blr5153  %ret = atomicrmw min ptr %ptr, i32 %val acquire5154  ret i32 %ret5155}5156 5157define i32 @test292(ptr %ptr, i32 %val) {5158; PPC64LE-LABEL: test292:5159; PPC64LE:       # %bb.0:5160; PPC64LE-NEXT:    lwsync5161; PPC64LE-NEXT:  .LBB292_1:5162; PPC64LE-NEXT:    lwarx 5, 0, 35163; PPC64LE-NEXT:    cmpw 5, 45164; PPC64LE-NEXT:    blt 0, .LBB292_35165; PPC64LE-NEXT:  # %bb.2:5166; PPC64LE-NEXT:    stwcx. 4, 0, 35167; PPC64LE-NEXT:    bne- 0, .LBB292_15168; PPC64LE-NEXT:  .LBB292_3:5169; PPC64LE-NEXT:    mr 3, 55170; PPC64LE-NEXT:    blr5171  %ret = atomicrmw min ptr %ptr, i32 %val release5172  ret i32 %ret5173}5174 5175define i32 @test293(ptr %ptr, i32 %val) {5176; PPC64LE-LABEL: test293:5177; PPC64LE:       # %bb.0:5178; PPC64LE-NEXT:    lwsync5179; PPC64LE-NEXT:  .LBB293_1:5180; PPC64LE-NEXT:    lwarx 5, 0, 35181; PPC64LE-NEXT:    cmpw 5, 45182; PPC64LE-NEXT:    blt 0, .LBB293_35183; PPC64LE-NEXT:  # %bb.2:5184; PPC64LE-NEXT:    stwcx. 4, 0, 35185; PPC64LE-NEXT:    bne- 0, .LBB293_15186; PPC64LE-NEXT:  .LBB293_3:5187; PPC64LE-NEXT:    lwsync5188; PPC64LE-NEXT:    mr 3, 55189; PPC64LE-NEXT:    blr5190  %ret = atomicrmw min ptr %ptr, i32 %val acq_rel5191  ret i32 %ret5192}5193 5194define i32 @test294(ptr %ptr, i32 %val) {5195; PPC64LE-LABEL: test294:5196; PPC64LE:       # %bb.0:5197; PPC64LE-NEXT:    sync5198; PPC64LE-NEXT:  .LBB294_1:5199; PPC64LE-NEXT:    lwarx 5, 0, 35200; PPC64LE-NEXT:    cmpw 5, 45201; PPC64LE-NEXT:    blt 0, .LBB294_35202; PPC64LE-NEXT:  # %bb.2:5203; PPC64LE-NEXT:    stwcx. 4, 0, 35204; PPC64LE-NEXT:    bne- 0, .LBB294_15205; PPC64LE-NEXT:  .LBB294_3:5206; PPC64LE-NEXT:    lwsync5207; PPC64LE-NEXT:    mr 3, 55208; PPC64LE-NEXT:    blr5209  %ret = atomicrmw min ptr %ptr, i32 %val seq_cst5210  ret i32 %ret5211}5212 5213define i64 @test295(ptr %ptr, i64 %val) {5214; PPC64LE-LABEL: test295:5215; PPC64LE:       # %bb.0:5216; PPC64LE-NEXT:  .LBB295_1:5217; PPC64LE-NEXT:    ldarx 5, 0, 35218; PPC64LE-NEXT:    cmpd 5, 45219; PPC64LE-NEXT:    blt 0, .LBB295_35220; PPC64LE-NEXT:  # %bb.2:5221; PPC64LE-NEXT:    stdcx. 4, 0, 35222; PPC64LE-NEXT:    bne- 0, .LBB295_15223; PPC64LE-NEXT:  .LBB295_3:5224; PPC64LE-NEXT:    mr 3, 55225; PPC64LE-NEXT:    blr5226  %ret = atomicrmw min ptr %ptr, i64 %val monotonic5227  ret i64 %ret5228}5229 5230define i64 @test296(ptr %ptr, i64 %val) {5231; PPC64LE-LABEL: test296:5232; PPC64LE:       # %bb.0:5233; PPC64LE-NEXT:    mr 5, 35234; PPC64LE-NEXT:  .LBB296_1:5235; PPC64LE-NEXT:    ldarx 3, 0, 55236; PPC64LE-NEXT:    cmpd 3, 45237; PPC64LE-NEXT:    blt 0, .LBB296_35238; PPC64LE-NEXT:  # %bb.2:5239; PPC64LE-NEXT:    stdcx. 4, 0, 55240; PPC64LE-NEXT:    bne- 0, .LBB296_15241; PPC64LE-NEXT:  .LBB296_3:5242; PPC64LE-NEXT:    lwsync5243; PPC64LE-NEXT:    blr5244  %ret = atomicrmw min ptr %ptr, i64 %val acquire5245  ret i64 %ret5246}5247 5248define i64 @test297(ptr %ptr, i64 %val) {5249; PPC64LE-LABEL: test297:5250; PPC64LE:       # %bb.0:5251; PPC64LE-NEXT:    lwsync5252; PPC64LE-NEXT:  .LBB297_1:5253; PPC64LE-NEXT:    ldarx 5, 0, 35254; PPC64LE-NEXT:    cmpd 5, 45255; PPC64LE-NEXT:    blt 0, .LBB297_35256; PPC64LE-NEXT:  # %bb.2:5257; PPC64LE-NEXT:    stdcx. 4, 0, 35258; PPC64LE-NEXT:    bne- 0, .LBB297_15259; PPC64LE-NEXT:  .LBB297_3:5260; PPC64LE-NEXT:    mr 3, 55261; PPC64LE-NEXT:    blr5262  %ret = atomicrmw min ptr %ptr, i64 %val release5263  ret i64 %ret5264}5265 5266define i64 @test298(ptr %ptr, i64 %val) {5267; PPC64LE-LABEL: test298:5268; PPC64LE:       # %bb.0:5269; PPC64LE-NEXT:    lwsync5270; PPC64LE-NEXT:  .LBB298_1:5271; PPC64LE-NEXT:    ldarx 5, 0, 35272; PPC64LE-NEXT:    cmpd 5, 45273; PPC64LE-NEXT:    blt 0, .LBB298_35274; PPC64LE-NEXT:  # %bb.2:5275; PPC64LE-NEXT:    stdcx. 4, 0, 35276; PPC64LE-NEXT:    bne- 0, .LBB298_15277; PPC64LE-NEXT:  .LBB298_3:5278; PPC64LE-NEXT:    lwsync5279; PPC64LE-NEXT:    mr 3, 55280; PPC64LE-NEXT:    blr5281  %ret = atomicrmw min ptr %ptr, i64 %val acq_rel5282  ret i64 %ret5283}5284 5285define i64 @test299(ptr %ptr, i64 %val) {5286; PPC64LE-LABEL: test299:5287; PPC64LE:       # %bb.0:5288; PPC64LE-NEXT:    sync5289; PPC64LE-NEXT:  .LBB299_1:5290; PPC64LE-NEXT:    ldarx 5, 0, 35291; PPC64LE-NEXT:    cmpd 5, 45292; PPC64LE-NEXT:    blt 0, .LBB299_35293; PPC64LE-NEXT:  # %bb.2:5294; PPC64LE-NEXT:    stdcx. 4, 0, 35295; PPC64LE-NEXT:    bne- 0, .LBB299_15296; PPC64LE-NEXT:  .LBB299_3:5297; PPC64LE-NEXT:    lwsync5298; PPC64LE-NEXT:    mr 3, 55299; PPC64LE-NEXT:    blr5300  %ret = atomicrmw min ptr %ptr, i64 %val seq_cst5301  ret i64 %ret5302}5303 5304define i8 @test300(ptr %ptr, i8 %val) {5305; PPC64LE-LABEL: test300:5306; PPC64LE:       # %bb.0:5307; PPC64LE-NEXT:  .LBB300_1:5308; PPC64LE-NEXT:    lbarx 5, 0, 35309; PPC64LE-NEXT:    cmplw 5, 45310; PPC64LE-NEXT:    bgt 0, .LBB300_35311; PPC64LE-NEXT:  # %bb.2:5312; PPC64LE-NEXT:    stbcx. 4, 0, 35313; PPC64LE-NEXT:    bne- 0, .LBB300_15314; PPC64LE-NEXT:  .LBB300_3:5315; PPC64LE-NEXT:    mr 3, 55316; PPC64LE-NEXT:    blr5317  %ret = atomicrmw umax ptr %ptr, i8 %val monotonic5318  ret i8 %ret5319}5320 5321define i8 @test301(ptr %ptr, i8 %val) {5322; PPC64LE-LABEL: test301:5323; PPC64LE:       # %bb.0:5324; PPC64LE-NEXT:    mr 5, 35325; PPC64LE-NEXT:  .LBB301_1:5326; PPC64LE-NEXT:    lbarx 3, 0, 55327; PPC64LE-NEXT:    cmplw 3, 45328; PPC64LE-NEXT:    bgt 0, .LBB301_35329; PPC64LE-NEXT:  # %bb.2:5330; PPC64LE-NEXT:    stbcx. 4, 0, 55331; PPC64LE-NEXT:    bne- 0, .LBB301_15332; PPC64LE-NEXT:  .LBB301_3:5333; PPC64LE-NEXT:    lwsync5334; PPC64LE-NEXT:    blr5335  %ret = atomicrmw umax ptr %ptr, i8 %val acquire5336  ret i8 %ret5337}5338 5339define i8 @test302(ptr %ptr, i8 %val) {5340; PPC64LE-LABEL: test302:5341; PPC64LE:       # %bb.0:5342; PPC64LE-NEXT:    lwsync5343; PPC64LE-NEXT:  .LBB302_1:5344; PPC64LE-NEXT:    lbarx 5, 0, 35345; PPC64LE-NEXT:    cmplw 5, 45346; PPC64LE-NEXT:    bgt 0, .LBB302_35347; PPC64LE-NEXT:  # %bb.2:5348; PPC64LE-NEXT:    stbcx. 4, 0, 35349; PPC64LE-NEXT:    bne- 0, .LBB302_15350; PPC64LE-NEXT:  .LBB302_3:5351; PPC64LE-NEXT:    mr 3, 55352; PPC64LE-NEXT:    blr5353  %ret = atomicrmw umax ptr %ptr, i8 %val release5354  ret i8 %ret5355}5356 5357define i8 @test303(ptr %ptr, i8 %val) {5358; PPC64LE-LABEL: test303:5359; PPC64LE:       # %bb.0:5360; PPC64LE-NEXT:    lwsync5361; PPC64LE-NEXT:  .LBB303_1:5362; PPC64LE-NEXT:    lbarx 5, 0, 35363; PPC64LE-NEXT:    cmplw 5, 45364; PPC64LE-NEXT:    bgt 0, .LBB303_35365; PPC64LE-NEXT:  # %bb.2:5366; PPC64LE-NEXT:    stbcx. 4, 0, 35367; PPC64LE-NEXT:    bne- 0, .LBB303_15368; PPC64LE-NEXT:  .LBB303_3:5369; PPC64LE-NEXT:    lwsync5370; PPC64LE-NEXT:    mr 3, 55371; PPC64LE-NEXT:    blr5372  %ret = atomicrmw umax ptr %ptr, i8 %val acq_rel5373  ret i8 %ret5374}5375 5376define i8 @test304(ptr %ptr, i8 %val) {5377; PPC64LE-LABEL: test304:5378; PPC64LE:       # %bb.0:5379; PPC64LE-NEXT:    sync5380; PPC64LE-NEXT:  .LBB304_1:5381; PPC64LE-NEXT:    lbarx 5, 0, 35382; PPC64LE-NEXT:    cmplw 5, 45383; PPC64LE-NEXT:    bgt 0, .LBB304_35384; PPC64LE-NEXT:  # %bb.2:5385; PPC64LE-NEXT:    stbcx. 4, 0, 35386; PPC64LE-NEXT:    bne- 0, .LBB304_15387; PPC64LE-NEXT:  .LBB304_3:5388; PPC64LE-NEXT:    lwsync5389; PPC64LE-NEXT:    mr 3, 55390; PPC64LE-NEXT:    blr5391  %ret = atomicrmw umax ptr %ptr, i8 %val seq_cst5392  ret i8 %ret5393}5394 5395define i16 @test305(ptr %ptr, i16 %val) {5396; PPC64LE-LABEL: test305:5397; PPC64LE:       # %bb.0:5398; PPC64LE-NEXT:  .LBB305_1:5399; PPC64LE-NEXT:    lharx 5, 0, 35400; PPC64LE-NEXT:    cmplw 5, 45401; PPC64LE-NEXT:    bgt 0, .LBB305_35402; PPC64LE-NEXT:  # %bb.2:5403; PPC64LE-NEXT:    sthcx. 4, 0, 35404; PPC64LE-NEXT:    bne- 0, .LBB305_15405; PPC64LE-NEXT:  .LBB305_3:5406; PPC64LE-NEXT:    mr 3, 55407; PPC64LE-NEXT:    blr5408  %ret = atomicrmw umax ptr %ptr, i16 %val monotonic5409  ret i16 %ret5410}5411 5412define i16 @test306(ptr %ptr, i16 %val) {5413; PPC64LE-LABEL: test306:5414; PPC64LE:       # %bb.0:5415; PPC64LE-NEXT:    mr 5, 35416; PPC64LE-NEXT:  .LBB306_1:5417; PPC64LE-NEXT:    lharx 3, 0, 55418; PPC64LE-NEXT:    cmplw 3, 45419; PPC64LE-NEXT:    bgt 0, .LBB306_35420; PPC64LE-NEXT:  # %bb.2:5421; PPC64LE-NEXT:    sthcx. 4, 0, 55422; PPC64LE-NEXT:    bne- 0, .LBB306_15423; PPC64LE-NEXT:  .LBB306_3:5424; PPC64LE-NEXT:    lwsync5425; PPC64LE-NEXT:    blr5426  %ret = atomicrmw umax ptr %ptr, i16 %val acquire5427  ret i16 %ret5428}5429 5430define i16 @test307(ptr %ptr, i16 %val) {5431; PPC64LE-LABEL: test307:5432; PPC64LE:       # %bb.0:5433; PPC64LE-NEXT:    lwsync5434; PPC64LE-NEXT:  .LBB307_1:5435; PPC64LE-NEXT:    lharx 5, 0, 35436; PPC64LE-NEXT:    cmplw 5, 45437; PPC64LE-NEXT:    bgt 0, .LBB307_35438; PPC64LE-NEXT:  # %bb.2:5439; PPC64LE-NEXT:    sthcx. 4, 0, 35440; PPC64LE-NEXT:    bne- 0, .LBB307_15441; PPC64LE-NEXT:  .LBB307_3:5442; PPC64LE-NEXT:    mr 3, 55443; PPC64LE-NEXT:    blr5444  %ret = atomicrmw umax ptr %ptr, i16 %val release5445  ret i16 %ret5446}5447 5448define i16 @test308(ptr %ptr, i16 %val) {5449; PPC64LE-LABEL: test308:5450; PPC64LE:       # %bb.0:5451; PPC64LE-NEXT:    lwsync5452; PPC64LE-NEXT:  .LBB308_1:5453; PPC64LE-NEXT:    lharx 5, 0, 35454; PPC64LE-NEXT:    cmplw 5, 45455; PPC64LE-NEXT:    bgt 0, .LBB308_35456; PPC64LE-NEXT:  # %bb.2:5457; PPC64LE-NEXT:    sthcx. 4, 0, 35458; PPC64LE-NEXT:    bne- 0, .LBB308_15459; PPC64LE-NEXT:  .LBB308_3:5460; PPC64LE-NEXT:    lwsync5461; PPC64LE-NEXT:    mr 3, 55462; PPC64LE-NEXT:    blr5463  %ret = atomicrmw umax ptr %ptr, i16 %val acq_rel5464  ret i16 %ret5465}5466 5467define i16 @test309(ptr %ptr, i16 %val) {5468; PPC64LE-LABEL: test309:5469; PPC64LE:       # %bb.0:5470; PPC64LE-NEXT:    sync5471; PPC64LE-NEXT:  .LBB309_1:5472; PPC64LE-NEXT:    lharx 5, 0, 35473; PPC64LE-NEXT:    cmplw 5, 45474; PPC64LE-NEXT:    bgt 0, .LBB309_35475; PPC64LE-NEXT:  # %bb.2:5476; PPC64LE-NEXT:    sthcx. 4, 0, 35477; PPC64LE-NEXT:    bne- 0, .LBB309_15478; PPC64LE-NEXT:  .LBB309_3:5479; PPC64LE-NEXT:    lwsync5480; PPC64LE-NEXT:    mr 3, 55481; PPC64LE-NEXT:    blr5482  %ret = atomicrmw umax ptr %ptr, i16 %val seq_cst5483  ret i16 %ret5484}5485 5486define i32 @test310(ptr %ptr, i32 %val) {5487; PPC64LE-LABEL: test310:5488; PPC64LE:       # %bb.0:5489; PPC64LE-NEXT:  .LBB310_1:5490; PPC64LE-NEXT:    lwarx 5, 0, 35491; PPC64LE-NEXT:    cmplw 5, 45492; PPC64LE-NEXT:    bgt 0, .LBB310_35493; PPC64LE-NEXT:  # %bb.2:5494; PPC64LE-NEXT:    stwcx. 4, 0, 35495; PPC64LE-NEXT:    bne- 0, .LBB310_15496; PPC64LE-NEXT:  .LBB310_3:5497; PPC64LE-NEXT:    mr 3, 55498; PPC64LE-NEXT:    blr5499  %ret = atomicrmw umax ptr %ptr, i32 %val monotonic5500  ret i32 %ret5501}5502 5503define i32 @test311(ptr %ptr, i32 %val) {5504; PPC64LE-LABEL: test311:5505; PPC64LE:       # %bb.0:5506; PPC64LE-NEXT:    mr 5, 35507; PPC64LE-NEXT:  .LBB311_1:5508; PPC64LE-NEXT:    lwarx 3, 0, 55509; PPC64LE-NEXT:    cmplw 3, 45510; PPC64LE-NEXT:    bgt 0, .LBB311_35511; PPC64LE-NEXT:  # %bb.2:5512; PPC64LE-NEXT:    stwcx. 4, 0, 55513; PPC64LE-NEXT:    bne- 0, .LBB311_15514; PPC64LE-NEXT:  .LBB311_3:5515; PPC64LE-NEXT:    lwsync5516; PPC64LE-NEXT:    blr5517  %ret = atomicrmw umax ptr %ptr, i32 %val acquire5518  ret i32 %ret5519}5520 5521define i32 @test312(ptr %ptr, i32 %val) {5522; PPC64LE-LABEL: test312:5523; PPC64LE:       # %bb.0:5524; PPC64LE-NEXT:    lwsync5525; PPC64LE-NEXT:  .LBB312_1:5526; PPC64LE-NEXT:    lwarx 5, 0, 35527; PPC64LE-NEXT:    cmplw 5, 45528; PPC64LE-NEXT:    bgt 0, .LBB312_35529; PPC64LE-NEXT:  # %bb.2:5530; PPC64LE-NEXT:    stwcx. 4, 0, 35531; PPC64LE-NEXT:    bne- 0, .LBB312_15532; PPC64LE-NEXT:  .LBB312_3:5533; PPC64LE-NEXT:    mr 3, 55534; PPC64LE-NEXT:    blr5535  %ret = atomicrmw umax ptr %ptr, i32 %val release5536  ret i32 %ret5537}5538 5539define i32 @test313(ptr %ptr, i32 %val) {5540; PPC64LE-LABEL: test313:5541; PPC64LE:       # %bb.0:5542; PPC64LE-NEXT:    lwsync5543; PPC64LE-NEXT:  .LBB313_1:5544; PPC64LE-NEXT:    lwarx 5, 0, 35545; PPC64LE-NEXT:    cmplw 5, 45546; PPC64LE-NEXT:    bgt 0, .LBB313_35547; PPC64LE-NEXT:  # %bb.2:5548; PPC64LE-NEXT:    stwcx. 4, 0, 35549; PPC64LE-NEXT:    bne- 0, .LBB313_15550; PPC64LE-NEXT:  .LBB313_3:5551; PPC64LE-NEXT:    lwsync5552; PPC64LE-NEXT:    mr 3, 55553; PPC64LE-NEXT:    blr5554  %ret = atomicrmw umax ptr %ptr, i32 %val acq_rel5555  ret i32 %ret5556}5557 5558define i32 @test314(ptr %ptr, i32 %val) {5559; PPC64LE-LABEL: test314:5560; PPC64LE:       # %bb.0:5561; PPC64LE-NEXT:    sync5562; PPC64LE-NEXT:  .LBB314_1:5563; PPC64LE-NEXT:    lwarx 5, 0, 35564; PPC64LE-NEXT:    cmplw 5, 45565; PPC64LE-NEXT:    bgt 0, .LBB314_35566; PPC64LE-NEXT:  # %bb.2:5567; PPC64LE-NEXT:    stwcx. 4, 0, 35568; PPC64LE-NEXT:    bne- 0, .LBB314_15569; PPC64LE-NEXT:  .LBB314_3:5570; PPC64LE-NEXT:    lwsync5571; PPC64LE-NEXT:    mr 3, 55572; PPC64LE-NEXT:    blr5573  %ret = atomicrmw umax ptr %ptr, i32 %val seq_cst5574  ret i32 %ret5575}5576 5577define i64 @test315(ptr %ptr, i64 %val) {5578; PPC64LE-LABEL: test315:5579; PPC64LE:       # %bb.0:5580; PPC64LE-NEXT:  .LBB315_1:5581; PPC64LE-NEXT:    ldarx 5, 0, 35582; PPC64LE-NEXT:    cmpld 5, 45583; PPC64LE-NEXT:    bgt 0, .LBB315_35584; PPC64LE-NEXT:  # %bb.2:5585; PPC64LE-NEXT:    stdcx. 4, 0, 35586; PPC64LE-NEXT:    bne- 0, .LBB315_15587; PPC64LE-NEXT:  .LBB315_3:5588; PPC64LE-NEXT:    mr 3, 55589; PPC64LE-NEXT:    blr5590  %ret = atomicrmw umax ptr %ptr, i64 %val monotonic5591  ret i64 %ret5592}5593 5594define i64 @test316(ptr %ptr, i64 %val) {5595; PPC64LE-LABEL: test316:5596; PPC64LE:       # %bb.0:5597; PPC64LE-NEXT:    mr 5, 35598; PPC64LE-NEXT:  .LBB316_1:5599; PPC64LE-NEXT:    ldarx 3, 0, 55600; PPC64LE-NEXT:    cmpld 3, 45601; PPC64LE-NEXT:    bgt 0, .LBB316_35602; PPC64LE-NEXT:  # %bb.2:5603; PPC64LE-NEXT:    stdcx. 4, 0, 55604; PPC64LE-NEXT:    bne- 0, .LBB316_15605; PPC64LE-NEXT:  .LBB316_3:5606; PPC64LE-NEXT:    lwsync5607; PPC64LE-NEXT:    blr5608  %ret = atomicrmw umax ptr %ptr, i64 %val acquire5609  ret i64 %ret5610}5611 5612define i64 @test317(ptr %ptr, i64 %val) {5613; PPC64LE-LABEL: test317:5614; PPC64LE:       # %bb.0:5615; PPC64LE-NEXT:    lwsync5616; PPC64LE-NEXT:  .LBB317_1:5617; PPC64LE-NEXT:    ldarx 5, 0, 35618; PPC64LE-NEXT:    cmpld 5, 45619; PPC64LE-NEXT:    bgt 0, .LBB317_35620; PPC64LE-NEXT:  # %bb.2:5621; PPC64LE-NEXT:    stdcx. 4, 0, 35622; PPC64LE-NEXT:    bne- 0, .LBB317_15623; PPC64LE-NEXT:  .LBB317_3:5624; PPC64LE-NEXT:    mr 3, 55625; PPC64LE-NEXT:    blr5626  %ret = atomicrmw umax ptr %ptr, i64 %val release5627  ret i64 %ret5628}5629 5630define i64 @test318(ptr %ptr, i64 %val) {5631; PPC64LE-LABEL: test318:5632; PPC64LE:       # %bb.0:5633; PPC64LE-NEXT:    lwsync5634; PPC64LE-NEXT:  .LBB318_1:5635; PPC64LE-NEXT:    ldarx 5, 0, 35636; PPC64LE-NEXT:    cmpld 5, 45637; PPC64LE-NEXT:    bgt 0, .LBB318_35638; PPC64LE-NEXT:  # %bb.2:5639; PPC64LE-NEXT:    stdcx. 4, 0, 35640; PPC64LE-NEXT:    bne- 0, .LBB318_15641; PPC64LE-NEXT:  .LBB318_3:5642; PPC64LE-NEXT:    lwsync5643; PPC64LE-NEXT:    mr 3, 55644; PPC64LE-NEXT:    blr5645  %ret = atomicrmw umax ptr %ptr, i64 %val acq_rel5646  ret i64 %ret5647}5648 5649define i64 @test319(ptr %ptr, i64 %val) {5650; PPC64LE-LABEL: test319:5651; PPC64LE:       # %bb.0:5652; PPC64LE-NEXT:    sync5653; PPC64LE-NEXT:  .LBB319_1:5654; PPC64LE-NEXT:    ldarx 5, 0, 35655; PPC64LE-NEXT:    cmpld 5, 45656; PPC64LE-NEXT:    bgt 0, .LBB319_35657; PPC64LE-NEXT:  # %bb.2:5658; PPC64LE-NEXT:    stdcx. 4, 0, 35659; PPC64LE-NEXT:    bne- 0, .LBB319_15660; PPC64LE-NEXT:  .LBB319_3:5661; PPC64LE-NEXT:    lwsync5662; PPC64LE-NEXT:    mr 3, 55663; PPC64LE-NEXT:    blr5664  %ret = atomicrmw umax ptr %ptr, i64 %val seq_cst5665  ret i64 %ret5666}5667 5668define i8 @test320(ptr %ptr, i8 %val) {5669; PPC64LE-LABEL: test320:5670; PPC64LE:       # %bb.0:5671; PPC64LE-NEXT:  .LBB320_1:5672; PPC64LE-NEXT:    lbarx 5, 0, 35673; PPC64LE-NEXT:    cmplw 5, 45674; PPC64LE-NEXT:    blt 0, .LBB320_35675; PPC64LE-NEXT:  # %bb.2:5676; PPC64LE-NEXT:    stbcx. 4, 0, 35677; PPC64LE-NEXT:    bne- 0, .LBB320_15678; PPC64LE-NEXT:  .LBB320_3:5679; PPC64LE-NEXT:    mr 3, 55680; PPC64LE-NEXT:    blr5681  %ret = atomicrmw umin ptr %ptr, i8 %val monotonic5682  ret i8 %ret5683}5684 5685define i8 @test321(ptr %ptr, i8 %val) {5686; PPC64LE-LABEL: test321:5687; PPC64LE:       # %bb.0:5688; PPC64LE-NEXT:    mr 5, 35689; PPC64LE-NEXT:  .LBB321_1:5690; PPC64LE-NEXT:    lbarx 3, 0, 55691; PPC64LE-NEXT:    cmplw 3, 45692; PPC64LE-NEXT:    blt 0, .LBB321_35693; PPC64LE-NEXT:  # %bb.2:5694; PPC64LE-NEXT:    stbcx. 4, 0, 55695; PPC64LE-NEXT:    bne- 0, .LBB321_15696; PPC64LE-NEXT:  .LBB321_3:5697; PPC64LE-NEXT:    lwsync5698; PPC64LE-NEXT:    blr5699  %ret = atomicrmw umin ptr %ptr, i8 %val acquire5700  ret i8 %ret5701}5702 5703define i8 @test322(ptr %ptr, i8 %val) {5704; PPC64LE-LABEL: test322:5705; PPC64LE:       # %bb.0:5706; PPC64LE-NEXT:    lwsync5707; PPC64LE-NEXT:  .LBB322_1:5708; PPC64LE-NEXT:    lbarx 5, 0, 35709; PPC64LE-NEXT:    cmplw 5, 45710; PPC64LE-NEXT:    blt 0, .LBB322_35711; PPC64LE-NEXT:  # %bb.2:5712; PPC64LE-NEXT:    stbcx. 4, 0, 35713; PPC64LE-NEXT:    bne- 0, .LBB322_15714; PPC64LE-NEXT:  .LBB322_3:5715; PPC64LE-NEXT:    mr 3, 55716; PPC64LE-NEXT:    blr5717  %ret = atomicrmw umin ptr %ptr, i8 %val release5718  ret i8 %ret5719}5720 5721define i8 @test323(ptr %ptr, i8 %val) {5722; PPC64LE-LABEL: test323:5723; PPC64LE:       # %bb.0:5724; PPC64LE-NEXT:    lwsync5725; PPC64LE-NEXT:  .LBB323_1:5726; PPC64LE-NEXT:    lbarx 5, 0, 35727; PPC64LE-NEXT:    cmplw 5, 45728; PPC64LE-NEXT:    blt 0, .LBB323_35729; PPC64LE-NEXT:  # %bb.2:5730; PPC64LE-NEXT:    stbcx. 4, 0, 35731; PPC64LE-NEXT:    bne- 0, .LBB323_15732; PPC64LE-NEXT:  .LBB323_3:5733; PPC64LE-NEXT:    lwsync5734; PPC64LE-NEXT:    mr 3, 55735; PPC64LE-NEXT:    blr5736  %ret = atomicrmw umin ptr %ptr, i8 %val acq_rel5737  ret i8 %ret5738}5739 5740define i8 @test324(ptr %ptr, i8 %val) {5741; PPC64LE-LABEL: test324:5742; PPC64LE:       # %bb.0:5743; PPC64LE-NEXT:    sync5744; PPC64LE-NEXT:  .LBB324_1:5745; PPC64LE-NEXT:    lbarx 5, 0, 35746; PPC64LE-NEXT:    cmplw 5, 45747; PPC64LE-NEXT:    blt 0, .LBB324_35748; PPC64LE-NEXT:  # %bb.2:5749; PPC64LE-NEXT:    stbcx. 4, 0, 35750; PPC64LE-NEXT:    bne- 0, .LBB324_15751; PPC64LE-NEXT:  .LBB324_3:5752; PPC64LE-NEXT:    lwsync5753; PPC64LE-NEXT:    mr 3, 55754; PPC64LE-NEXT:    blr5755  %ret = atomicrmw umin ptr %ptr, i8 %val seq_cst5756  ret i8 %ret5757}5758 5759define i16 @test325(ptr %ptr, i16 %val) {5760; PPC64LE-LABEL: test325:5761; PPC64LE:       # %bb.0:5762; PPC64LE-NEXT:  .LBB325_1:5763; PPC64LE-NEXT:    lharx 5, 0, 35764; PPC64LE-NEXT:    cmplw 5, 45765; PPC64LE-NEXT:    blt 0, .LBB325_35766; PPC64LE-NEXT:  # %bb.2:5767; PPC64LE-NEXT:    sthcx. 4, 0, 35768; PPC64LE-NEXT:    bne- 0, .LBB325_15769; PPC64LE-NEXT:  .LBB325_3:5770; PPC64LE-NEXT:    mr 3, 55771; PPC64LE-NEXT:    blr5772  %ret = atomicrmw umin ptr %ptr, i16 %val monotonic5773  ret i16 %ret5774}5775 5776define i16 @test326(ptr %ptr, i16 %val) {5777; PPC64LE-LABEL: test326:5778; PPC64LE:       # %bb.0:5779; PPC64LE-NEXT:    mr 5, 35780; PPC64LE-NEXT:  .LBB326_1:5781; PPC64LE-NEXT:    lharx 3, 0, 55782; PPC64LE-NEXT:    cmplw 3, 45783; PPC64LE-NEXT:    blt 0, .LBB326_35784; PPC64LE-NEXT:  # %bb.2:5785; PPC64LE-NEXT:    sthcx. 4, 0, 55786; PPC64LE-NEXT:    bne- 0, .LBB326_15787; PPC64LE-NEXT:  .LBB326_3:5788; PPC64LE-NEXT:    lwsync5789; PPC64LE-NEXT:    blr5790  %ret = atomicrmw umin ptr %ptr, i16 %val acquire5791  ret i16 %ret5792}5793 5794define i16 @test327(ptr %ptr, i16 %val) {5795; PPC64LE-LABEL: test327:5796; PPC64LE:       # %bb.0:5797; PPC64LE-NEXT:    lwsync5798; PPC64LE-NEXT:  .LBB327_1:5799; PPC64LE-NEXT:    lharx 5, 0, 35800; PPC64LE-NEXT:    cmplw 5, 45801; PPC64LE-NEXT:    blt 0, .LBB327_35802; PPC64LE-NEXT:  # %bb.2:5803; PPC64LE-NEXT:    sthcx. 4, 0, 35804; PPC64LE-NEXT:    bne- 0, .LBB327_15805; PPC64LE-NEXT:  .LBB327_3:5806; PPC64LE-NEXT:    mr 3, 55807; PPC64LE-NEXT:    blr5808  %ret = atomicrmw umin ptr %ptr, i16 %val release5809  ret i16 %ret5810}5811 5812define i16 @test328(ptr %ptr, i16 %val) {5813; PPC64LE-LABEL: test328:5814; PPC64LE:       # %bb.0:5815; PPC64LE-NEXT:    lwsync5816; PPC64LE-NEXT:  .LBB328_1:5817; PPC64LE-NEXT:    lharx 5, 0, 35818; PPC64LE-NEXT:    cmplw 5, 45819; PPC64LE-NEXT:    blt 0, .LBB328_35820; PPC64LE-NEXT:  # %bb.2:5821; PPC64LE-NEXT:    sthcx. 4, 0, 35822; PPC64LE-NEXT:    bne- 0, .LBB328_15823; PPC64LE-NEXT:  .LBB328_3:5824; PPC64LE-NEXT:    lwsync5825; PPC64LE-NEXT:    mr 3, 55826; PPC64LE-NEXT:    blr5827  %ret = atomicrmw umin ptr %ptr, i16 %val acq_rel5828  ret i16 %ret5829}5830 5831define i16 @test329(ptr %ptr, i16 %val) {5832; PPC64LE-LABEL: test329:5833; PPC64LE:       # %bb.0:5834; PPC64LE-NEXT:    sync5835; PPC64LE-NEXT:  .LBB329_1:5836; PPC64LE-NEXT:    lharx 5, 0, 35837; PPC64LE-NEXT:    cmplw 5, 45838; PPC64LE-NEXT:    blt 0, .LBB329_35839; PPC64LE-NEXT:  # %bb.2:5840; PPC64LE-NEXT:    sthcx. 4, 0, 35841; PPC64LE-NEXT:    bne- 0, .LBB329_15842; PPC64LE-NEXT:  .LBB329_3:5843; PPC64LE-NEXT:    lwsync5844; PPC64LE-NEXT:    mr 3, 55845; PPC64LE-NEXT:    blr5846  %ret = atomicrmw umin ptr %ptr, i16 %val seq_cst5847  ret i16 %ret5848}5849 5850define i32 @test330(ptr %ptr, i32 %val) {5851; PPC64LE-LABEL: test330:5852; PPC64LE:       # %bb.0:5853; PPC64LE-NEXT:  .LBB330_1:5854; PPC64LE-NEXT:    lwarx 5, 0, 35855; PPC64LE-NEXT:    cmplw 5, 45856; PPC64LE-NEXT:    blt 0, .LBB330_35857; PPC64LE-NEXT:  # %bb.2:5858; PPC64LE-NEXT:    stwcx. 4, 0, 35859; PPC64LE-NEXT:    bne- 0, .LBB330_15860; PPC64LE-NEXT:  .LBB330_3:5861; PPC64LE-NEXT:    mr 3, 55862; PPC64LE-NEXT:    blr5863  %ret = atomicrmw umin ptr %ptr, i32 %val monotonic5864  ret i32 %ret5865}5866 5867define i32 @test331(ptr %ptr, i32 %val) {5868; PPC64LE-LABEL: test331:5869; PPC64LE:       # %bb.0:5870; PPC64LE-NEXT:    mr 5, 35871; PPC64LE-NEXT:  .LBB331_1:5872; PPC64LE-NEXT:    lwarx 3, 0, 55873; PPC64LE-NEXT:    cmplw 3, 45874; PPC64LE-NEXT:    blt 0, .LBB331_35875; PPC64LE-NEXT:  # %bb.2:5876; PPC64LE-NEXT:    stwcx. 4, 0, 55877; PPC64LE-NEXT:    bne- 0, .LBB331_15878; PPC64LE-NEXT:  .LBB331_3:5879; PPC64LE-NEXT:    lwsync5880; PPC64LE-NEXT:    blr5881  %ret = atomicrmw umin ptr %ptr, i32 %val acquire5882  ret i32 %ret5883}5884 5885define i32 @test332(ptr %ptr, i32 %val) {5886; PPC64LE-LABEL: test332:5887; PPC64LE:       # %bb.0:5888; PPC64LE-NEXT:    lwsync5889; PPC64LE-NEXT:  .LBB332_1:5890; PPC64LE-NEXT:    lwarx 5, 0, 35891; PPC64LE-NEXT:    cmplw 5, 45892; PPC64LE-NEXT:    blt 0, .LBB332_35893; PPC64LE-NEXT:  # %bb.2:5894; PPC64LE-NEXT:    stwcx. 4, 0, 35895; PPC64LE-NEXT:    bne- 0, .LBB332_15896; PPC64LE-NEXT:  .LBB332_3:5897; PPC64LE-NEXT:    mr 3, 55898; PPC64LE-NEXT:    blr5899  %ret = atomicrmw umin ptr %ptr, i32 %val release5900  ret i32 %ret5901}5902 5903define i32 @test333(ptr %ptr, i32 %val) {5904; PPC64LE-LABEL: test333:5905; PPC64LE:       # %bb.0:5906; PPC64LE-NEXT:    lwsync5907; PPC64LE-NEXT:  .LBB333_1:5908; PPC64LE-NEXT:    lwarx 5, 0, 35909; PPC64LE-NEXT:    cmplw 5, 45910; PPC64LE-NEXT:    blt 0, .LBB333_35911; PPC64LE-NEXT:  # %bb.2:5912; PPC64LE-NEXT:    stwcx. 4, 0, 35913; PPC64LE-NEXT:    bne- 0, .LBB333_15914; PPC64LE-NEXT:  .LBB333_3:5915; PPC64LE-NEXT:    lwsync5916; PPC64LE-NEXT:    mr 3, 55917; PPC64LE-NEXT:    blr5918  %ret = atomicrmw umin ptr %ptr, i32 %val acq_rel5919  ret i32 %ret5920}5921 5922define i32 @test334(ptr %ptr, i32 %val) {5923; PPC64LE-LABEL: test334:5924; PPC64LE:       # %bb.0:5925; PPC64LE-NEXT:    sync5926; PPC64LE-NEXT:  .LBB334_1:5927; PPC64LE-NEXT:    lwarx 5, 0, 35928; PPC64LE-NEXT:    cmplw 5, 45929; PPC64LE-NEXT:    blt 0, .LBB334_35930; PPC64LE-NEXT:  # %bb.2:5931; PPC64LE-NEXT:    stwcx. 4, 0, 35932; PPC64LE-NEXT:    bne- 0, .LBB334_15933; PPC64LE-NEXT:  .LBB334_3:5934; PPC64LE-NEXT:    lwsync5935; PPC64LE-NEXT:    mr 3, 55936; PPC64LE-NEXT:    blr5937  %ret = atomicrmw umin ptr %ptr, i32 %val seq_cst5938  ret i32 %ret5939}5940 5941define i64 @test335(ptr %ptr, i64 %val) {5942; PPC64LE-LABEL: test335:5943; PPC64LE:       # %bb.0:5944; PPC64LE-NEXT:  .LBB335_1:5945; PPC64LE-NEXT:    ldarx 5, 0, 35946; PPC64LE-NEXT:    cmpld 5, 45947; PPC64LE-NEXT:    blt 0, .LBB335_35948; PPC64LE-NEXT:  # %bb.2:5949; PPC64LE-NEXT:    stdcx. 4, 0, 35950; PPC64LE-NEXT:    bne- 0, .LBB335_15951; PPC64LE-NEXT:  .LBB335_3:5952; PPC64LE-NEXT:    mr 3, 55953; PPC64LE-NEXT:    blr5954  %ret = atomicrmw umin ptr %ptr, i64 %val monotonic5955  ret i64 %ret5956}5957 5958define i64 @test336(ptr %ptr, i64 %val) {5959; PPC64LE-LABEL: test336:5960; PPC64LE:       # %bb.0:5961; PPC64LE-NEXT:    mr 5, 35962; PPC64LE-NEXT:  .LBB336_1:5963; PPC64LE-NEXT:    ldarx 3, 0, 55964; PPC64LE-NEXT:    cmpld 3, 45965; PPC64LE-NEXT:    blt 0, .LBB336_35966; PPC64LE-NEXT:  # %bb.2:5967; PPC64LE-NEXT:    stdcx. 4, 0, 55968; PPC64LE-NEXT:    bne- 0, .LBB336_15969; PPC64LE-NEXT:  .LBB336_3:5970; PPC64LE-NEXT:    lwsync5971; PPC64LE-NEXT:    blr5972  %ret = atomicrmw umin ptr %ptr, i64 %val acquire5973  ret i64 %ret5974}5975 5976define i64 @test337(ptr %ptr, i64 %val) {5977; PPC64LE-LABEL: test337:5978; PPC64LE:       # %bb.0:5979; PPC64LE-NEXT:    lwsync5980; PPC64LE-NEXT:  .LBB337_1:5981; PPC64LE-NEXT:    ldarx 5, 0, 35982; PPC64LE-NEXT:    cmpld 5, 45983; PPC64LE-NEXT:    blt 0, .LBB337_35984; PPC64LE-NEXT:  # %bb.2:5985; PPC64LE-NEXT:    stdcx. 4, 0, 35986; PPC64LE-NEXT:    bne- 0, .LBB337_15987; PPC64LE-NEXT:  .LBB337_3:5988; PPC64LE-NEXT:    mr 3, 55989; PPC64LE-NEXT:    blr5990  %ret = atomicrmw umin ptr %ptr, i64 %val release5991  ret i64 %ret5992}5993 5994define i64 @test338(ptr %ptr, i64 %val) {5995; PPC64LE-LABEL: test338:5996; PPC64LE:       # %bb.0:5997; PPC64LE-NEXT:    lwsync5998; PPC64LE-NEXT:  .LBB338_1:5999; PPC64LE-NEXT:    ldarx 5, 0, 36000; PPC64LE-NEXT:    cmpld 5, 46001; PPC64LE-NEXT:    blt 0, .LBB338_36002; PPC64LE-NEXT:  # %bb.2:6003; PPC64LE-NEXT:    stdcx. 4, 0, 36004; PPC64LE-NEXT:    bne- 0, .LBB338_16005; PPC64LE-NEXT:  .LBB338_3:6006; PPC64LE-NEXT:    lwsync6007; PPC64LE-NEXT:    mr 3, 56008; PPC64LE-NEXT:    blr6009  %ret = atomicrmw umin ptr %ptr, i64 %val acq_rel6010  ret i64 %ret6011}6012 6013define i64 @test339(ptr %ptr, i64 %val) {6014; PPC64LE-LABEL: test339:6015; PPC64LE:       # %bb.0:6016; PPC64LE-NEXT:    sync6017; PPC64LE-NEXT:  .LBB339_1:6018; PPC64LE-NEXT:    ldarx 5, 0, 36019; PPC64LE-NEXT:    cmpld 5, 46020; PPC64LE-NEXT:    blt 0, .LBB339_36021; PPC64LE-NEXT:  # %bb.2:6022; PPC64LE-NEXT:    stdcx. 4, 0, 36023; PPC64LE-NEXT:    bne- 0, .LBB339_16024; PPC64LE-NEXT:  .LBB339_3:6025; PPC64LE-NEXT:    lwsync6026; PPC64LE-NEXT:    mr 3, 56027; PPC64LE-NEXT:    blr6028  %ret = atomicrmw umin ptr %ptr, i64 %val seq_cst6029  ret i64 %ret6030}6031 6032define i8 @test340(ptr %ptr, i8 %val) {6033; PPC64LE-LABEL: test340:6034; PPC64LE:       # %bb.0:6035; PPC64LE-NEXT:  .LBB340_1:6036; PPC64LE-NEXT:    lbarx 5, 0, 36037; PPC64LE-NEXT:    stbcx. 4, 0, 36038; PPC64LE-NEXT:    bne- 0, .LBB340_16039; PPC64LE-NEXT:  # %bb.2:6040; PPC64LE-NEXT:    mr 3, 56041; PPC64LE-NEXT:    blr6042  %ret = atomicrmw xchg ptr %ptr, i8 %val syncscope("singlethread") monotonic6043  ret i8 %ret6044}6045 6046define i8 @test341(ptr %ptr, i8 %val) {6047; PPC64LE-LABEL: test341:6048; PPC64LE:       # %bb.0:6049; PPC64LE-NEXT:    mr 5, 36050; PPC64LE-NEXT:  .LBB341_1:6051; PPC64LE-NEXT:    lbarx 3, 0, 56052; PPC64LE-NEXT:    stbcx. 4, 0, 56053; PPC64LE-NEXT:    bne- 0, .LBB341_16054; PPC64LE-NEXT:  # %bb.2:6055; PPC64LE-NEXT:    lwsync6056; PPC64LE-NEXT:    blr6057  %ret = atomicrmw xchg ptr %ptr, i8 %val syncscope("singlethread") acquire6058  ret i8 %ret6059}6060 6061define i8 @test342(ptr %ptr, i8 %val) {6062; PPC64LE-LABEL: test342:6063; PPC64LE:       # %bb.0:6064; PPC64LE-NEXT:    lwsync6065; PPC64LE-NEXT:  .LBB342_1:6066; PPC64LE-NEXT:    lbarx 5, 0, 36067; PPC64LE-NEXT:    stbcx. 4, 0, 36068; PPC64LE-NEXT:    bne- 0, .LBB342_16069; PPC64LE-NEXT:  # %bb.2:6070; PPC64LE-NEXT:    mr 3, 56071; PPC64LE-NEXT:    blr6072  %ret = atomicrmw xchg ptr %ptr, i8 %val syncscope("singlethread") release6073  ret i8 %ret6074}6075 6076define i8 @test343(ptr %ptr, i8 %val) {6077; PPC64LE-LABEL: test343:6078; PPC64LE:       # %bb.0:6079; PPC64LE-NEXT:    lwsync6080; PPC64LE-NEXT:  .LBB343_1:6081; PPC64LE-NEXT:    lbarx 5, 0, 36082; PPC64LE-NEXT:    stbcx. 4, 0, 36083; PPC64LE-NEXT:    bne- 0, .LBB343_16084; PPC64LE-NEXT:  # %bb.2:6085; PPC64LE-NEXT:    lwsync6086; PPC64LE-NEXT:    mr 3, 56087; PPC64LE-NEXT:    blr6088  %ret = atomicrmw xchg ptr %ptr, i8 %val syncscope("singlethread") acq_rel6089  ret i8 %ret6090}6091 6092define i8 @test344(ptr %ptr, i8 %val) {6093; PPC64LE-LABEL: test344:6094; PPC64LE:       # %bb.0:6095; PPC64LE-NEXT:    sync6096; PPC64LE-NEXT:  .LBB344_1:6097; PPC64LE-NEXT:    lbarx 5, 0, 36098; PPC64LE-NEXT:    stbcx. 4, 0, 36099; PPC64LE-NEXT:    bne- 0, .LBB344_16100; PPC64LE-NEXT:  # %bb.2:6101; PPC64LE-NEXT:    lwsync6102; PPC64LE-NEXT:    mr 3, 56103; PPC64LE-NEXT:    blr6104  %ret = atomicrmw xchg ptr %ptr, i8 %val syncscope("singlethread") seq_cst6105  ret i8 %ret6106}6107 6108define i16 @test345(ptr %ptr, i16 %val) {6109; PPC64LE-LABEL: test345:6110; PPC64LE:       # %bb.0:6111; PPC64LE-NEXT:  .LBB345_1:6112; PPC64LE-NEXT:    lharx 5, 0, 36113; PPC64LE-NEXT:    sthcx. 4, 0, 36114; PPC64LE-NEXT:    bne- 0, .LBB345_16115; PPC64LE-NEXT:  # %bb.2:6116; PPC64LE-NEXT:    mr 3, 56117; PPC64LE-NEXT:    blr6118  %ret = atomicrmw xchg ptr %ptr, i16 %val syncscope("singlethread") monotonic6119  ret i16 %ret6120}6121 6122define i16 @test346(ptr %ptr, i16 %val) {6123; PPC64LE-LABEL: test346:6124; PPC64LE:       # %bb.0:6125; PPC64LE-NEXT:    mr 5, 36126; PPC64LE-NEXT:  .LBB346_1:6127; PPC64LE-NEXT:    lharx 3, 0, 56128; PPC64LE-NEXT:    sthcx. 4, 0, 56129; PPC64LE-NEXT:    bne- 0, .LBB346_16130; PPC64LE-NEXT:  # %bb.2:6131; PPC64LE-NEXT:    lwsync6132; PPC64LE-NEXT:    blr6133  %ret = atomicrmw xchg ptr %ptr, i16 %val syncscope("singlethread") acquire6134  ret i16 %ret6135}6136 6137define i16 @test347(ptr %ptr, i16 %val) {6138; PPC64LE-LABEL: test347:6139; PPC64LE:       # %bb.0:6140; PPC64LE-NEXT:    lwsync6141; PPC64LE-NEXT:  .LBB347_1:6142; PPC64LE-NEXT:    lharx 5, 0, 36143; PPC64LE-NEXT:    sthcx. 4, 0, 36144; PPC64LE-NEXT:    bne- 0, .LBB347_16145; PPC64LE-NEXT:  # %bb.2:6146; PPC64LE-NEXT:    mr 3, 56147; PPC64LE-NEXT:    blr6148  %ret = atomicrmw xchg ptr %ptr, i16 %val syncscope("singlethread") release6149  ret i16 %ret6150}6151 6152define i16 @test348(ptr %ptr, i16 %val) {6153; PPC64LE-LABEL: test348:6154; PPC64LE:       # %bb.0:6155; PPC64LE-NEXT:    lwsync6156; PPC64LE-NEXT:  .LBB348_1:6157; PPC64LE-NEXT:    lharx 5, 0, 36158; PPC64LE-NEXT:    sthcx. 4, 0, 36159; PPC64LE-NEXT:    bne- 0, .LBB348_16160; PPC64LE-NEXT:  # %bb.2:6161; PPC64LE-NEXT:    lwsync6162; PPC64LE-NEXT:    mr 3, 56163; PPC64LE-NEXT:    blr6164  %ret = atomicrmw xchg ptr %ptr, i16 %val syncscope("singlethread") acq_rel6165  ret i16 %ret6166}6167 6168define i16 @test349(ptr %ptr, i16 %val) {6169; PPC64LE-LABEL: test349:6170; PPC64LE:       # %bb.0:6171; PPC64LE-NEXT:    sync6172; PPC64LE-NEXT:  .LBB349_1:6173; PPC64LE-NEXT:    lharx 5, 0, 36174; PPC64LE-NEXT:    sthcx. 4, 0, 36175; PPC64LE-NEXT:    bne- 0, .LBB349_16176; PPC64LE-NEXT:  # %bb.2:6177; PPC64LE-NEXT:    lwsync6178; PPC64LE-NEXT:    mr 3, 56179; PPC64LE-NEXT:    blr6180  %ret = atomicrmw xchg ptr %ptr, i16 %val syncscope("singlethread") seq_cst6181  ret i16 %ret6182}6183 6184define i32 @test350(ptr %ptr, i32 %val) {6185; PPC64LE-LABEL: test350:6186; PPC64LE:       # %bb.0:6187; PPC64LE-NEXT:  .LBB350_1:6188; PPC64LE-NEXT:    lwarx 5, 0, 36189; PPC64LE-NEXT:    stwcx. 4, 0, 36190; PPC64LE-NEXT:    bne- 0, .LBB350_16191; PPC64LE-NEXT:  # %bb.2:6192; PPC64LE-NEXT:    mr 3, 56193; PPC64LE-NEXT:    blr6194  %ret = atomicrmw xchg ptr %ptr, i32 %val syncscope("singlethread") monotonic6195  ret i32 %ret6196}6197 6198define i32 @test351(ptr %ptr, i32 %val) {6199; PPC64LE-LABEL: test351:6200; PPC64LE:       # %bb.0:6201; PPC64LE-NEXT:    mr 5, 36202; PPC64LE-NEXT:  .LBB351_1:6203; PPC64LE-NEXT:    lwarx 3, 0, 56204; PPC64LE-NEXT:    stwcx. 4, 0, 56205; PPC64LE-NEXT:    bne- 0, .LBB351_16206; PPC64LE-NEXT:  # %bb.2:6207; PPC64LE-NEXT:    lwsync6208; PPC64LE-NEXT:    blr6209  %ret = atomicrmw xchg ptr %ptr, i32 %val syncscope("singlethread") acquire6210  ret i32 %ret6211}6212 6213define i32 @test352(ptr %ptr, i32 %val) {6214; PPC64LE-LABEL: test352:6215; PPC64LE:       # %bb.0:6216; PPC64LE-NEXT:    lwsync6217; PPC64LE-NEXT:  .LBB352_1:6218; PPC64LE-NEXT:    lwarx 5, 0, 36219; PPC64LE-NEXT:    stwcx. 4, 0, 36220; PPC64LE-NEXT:    bne- 0, .LBB352_16221; PPC64LE-NEXT:  # %bb.2:6222; PPC64LE-NEXT:    mr 3, 56223; PPC64LE-NEXT:    blr6224  %ret = atomicrmw xchg ptr %ptr, i32 %val syncscope("singlethread") release6225  ret i32 %ret6226}6227 6228define i32 @test353(ptr %ptr, i32 %val) {6229; PPC64LE-LABEL: test353:6230; PPC64LE:       # %bb.0:6231; PPC64LE-NEXT:    lwsync6232; PPC64LE-NEXT:  .LBB353_1:6233; PPC64LE-NEXT:    lwarx 5, 0, 36234; PPC64LE-NEXT:    stwcx. 4, 0, 36235; PPC64LE-NEXT:    bne- 0, .LBB353_16236; PPC64LE-NEXT:  # %bb.2:6237; PPC64LE-NEXT:    lwsync6238; PPC64LE-NEXT:    mr 3, 56239; PPC64LE-NEXT:    blr6240  %ret = atomicrmw xchg ptr %ptr, i32 %val syncscope("singlethread") acq_rel6241  ret i32 %ret6242}6243 6244define i32 @test354(ptr %ptr, i32 %val) {6245; PPC64LE-LABEL: test354:6246; PPC64LE:       # %bb.0:6247; PPC64LE-NEXT:    sync6248; PPC64LE-NEXT:  .LBB354_1:6249; PPC64LE-NEXT:    lwarx 5, 0, 36250; PPC64LE-NEXT:    stwcx. 4, 0, 36251; PPC64LE-NEXT:    bne- 0, .LBB354_16252; PPC64LE-NEXT:  # %bb.2:6253; PPC64LE-NEXT:    lwsync6254; PPC64LE-NEXT:    mr 3, 56255; PPC64LE-NEXT:    blr6256  %ret = atomicrmw xchg ptr %ptr, i32 %val syncscope("singlethread") seq_cst6257  ret i32 %ret6258}6259 6260define i64 @test355(ptr %ptr, i64 %val) {6261; PPC64LE-LABEL: test355:6262; PPC64LE:       # %bb.0:6263; PPC64LE-NEXT:  .LBB355_1:6264; PPC64LE-NEXT:    ldarx 5, 0, 36265; PPC64LE-NEXT:    stdcx. 4, 0, 36266; PPC64LE-NEXT:    bne- 0, .LBB355_16267; PPC64LE-NEXT:  # %bb.2:6268; PPC64LE-NEXT:    mr 3, 56269; PPC64LE-NEXT:    blr6270  %ret = atomicrmw xchg ptr %ptr, i64 %val syncscope("singlethread") monotonic6271  ret i64 %ret6272}6273 6274define i64 @test356(ptr %ptr, i64 %val) {6275; PPC64LE-LABEL: test356:6276; PPC64LE:       # %bb.0:6277; PPC64LE-NEXT:    mr 5, 36278; PPC64LE-NEXT:  .LBB356_1:6279; PPC64LE-NEXT:    ldarx 3, 0, 56280; PPC64LE-NEXT:    stdcx. 4, 0, 56281; PPC64LE-NEXT:    bne- 0, .LBB356_16282; PPC64LE-NEXT:  # %bb.2:6283; PPC64LE-NEXT:    lwsync6284; PPC64LE-NEXT:    blr6285  %ret = atomicrmw xchg ptr %ptr, i64 %val syncscope("singlethread") acquire6286  ret i64 %ret6287}6288 6289define i64 @test357(ptr %ptr, i64 %val) {6290; PPC64LE-LABEL: test357:6291; PPC64LE:       # %bb.0:6292; PPC64LE-NEXT:    lwsync6293; PPC64LE-NEXT:  .LBB357_1:6294; PPC64LE-NEXT:    ldarx 5, 0, 36295; PPC64LE-NEXT:    stdcx. 4, 0, 36296; PPC64LE-NEXT:    bne- 0, .LBB357_16297; PPC64LE-NEXT:  # %bb.2:6298; PPC64LE-NEXT:    mr 3, 56299; PPC64LE-NEXT:    blr6300  %ret = atomicrmw xchg ptr %ptr, i64 %val syncscope("singlethread") release6301  ret i64 %ret6302}6303 6304define i64 @test358(ptr %ptr, i64 %val) {6305; PPC64LE-LABEL: test358:6306; PPC64LE:       # %bb.0:6307; PPC64LE-NEXT:    lwsync6308; PPC64LE-NEXT:  .LBB358_1:6309; PPC64LE-NEXT:    ldarx 5, 0, 36310; PPC64LE-NEXT:    stdcx. 4, 0, 36311; PPC64LE-NEXT:    bne- 0, .LBB358_16312; PPC64LE-NEXT:  # %bb.2:6313; PPC64LE-NEXT:    lwsync6314; PPC64LE-NEXT:    mr 3, 56315; PPC64LE-NEXT:    blr6316  %ret = atomicrmw xchg ptr %ptr, i64 %val syncscope("singlethread") acq_rel6317  ret i64 %ret6318}6319 6320define i64 @test359(ptr %ptr, i64 %val) {6321; PPC64LE-LABEL: test359:6322; PPC64LE:       # %bb.0:6323; PPC64LE-NEXT:    sync6324; PPC64LE-NEXT:  .LBB359_1:6325; PPC64LE-NEXT:    ldarx 5, 0, 36326; PPC64LE-NEXT:    stdcx. 4, 0, 36327; PPC64LE-NEXT:    bne- 0, .LBB359_16328; PPC64LE-NEXT:  # %bb.2:6329; PPC64LE-NEXT:    lwsync6330; PPC64LE-NEXT:    mr 3, 56331; PPC64LE-NEXT:    blr6332  %ret = atomicrmw xchg ptr %ptr, i64 %val syncscope("singlethread") seq_cst6333  ret i64 %ret6334}6335 6336define i8 @test360(ptr %ptr, i8 %val) {6337; PPC64LE-LABEL: test360:6338; PPC64LE:       # %bb.0:6339; PPC64LE-NEXT:  .LBB360_1:6340; PPC64LE-NEXT:    lbarx 5, 0, 36341; PPC64LE-NEXT:    add 6, 4, 56342; PPC64LE-NEXT:    stbcx. 6, 0, 36343; PPC64LE-NEXT:    bne- 0, .LBB360_16344; PPC64LE-NEXT:  # %bb.2:6345; PPC64LE-NEXT:    mr 3, 56346; PPC64LE-NEXT:    blr6347  %ret = atomicrmw add ptr %ptr, i8 %val syncscope("singlethread") monotonic6348  ret i8 %ret6349}6350 6351define i8 @test361(ptr %ptr, i8 %val) {6352; PPC64LE-LABEL: test361:6353; PPC64LE:       # %bb.0:6354; PPC64LE-NEXT:    mr 5, 36355; PPC64LE-NEXT:  .LBB361_1:6356; PPC64LE-NEXT:    lbarx 3, 0, 56357; PPC64LE-NEXT:    add 6, 4, 36358; PPC64LE-NEXT:    stbcx. 6, 0, 56359; PPC64LE-NEXT:    bne- 0, .LBB361_16360; PPC64LE-NEXT:  # %bb.2:6361; PPC64LE-NEXT:    lwsync6362; PPC64LE-NEXT:    blr6363  %ret = atomicrmw add ptr %ptr, i8 %val syncscope("singlethread") acquire6364  ret i8 %ret6365}6366 6367define i8 @test362(ptr %ptr, i8 %val) {6368; PPC64LE-LABEL: test362:6369; PPC64LE:       # %bb.0:6370; PPC64LE-NEXT:    lwsync6371; PPC64LE-NEXT:  .LBB362_1:6372; PPC64LE-NEXT:    lbarx 5, 0, 36373; PPC64LE-NEXT:    add 6, 4, 56374; PPC64LE-NEXT:    stbcx. 6, 0, 36375; PPC64LE-NEXT:    bne- 0, .LBB362_16376; PPC64LE-NEXT:  # %bb.2:6377; PPC64LE-NEXT:    mr 3, 56378; PPC64LE-NEXT:    blr6379  %ret = atomicrmw add ptr %ptr, i8 %val syncscope("singlethread") release6380  ret i8 %ret6381}6382 6383define i8 @test363(ptr %ptr, i8 %val) {6384; PPC64LE-LABEL: test363:6385; PPC64LE:       # %bb.0:6386; PPC64LE-NEXT:    lwsync6387; PPC64LE-NEXT:  .LBB363_1:6388; PPC64LE-NEXT:    lbarx 5, 0, 36389; PPC64LE-NEXT:    add 6, 4, 56390; PPC64LE-NEXT:    stbcx. 6, 0, 36391; PPC64LE-NEXT:    bne- 0, .LBB363_16392; PPC64LE-NEXT:  # %bb.2:6393; PPC64LE-NEXT:    lwsync6394; PPC64LE-NEXT:    mr 3, 56395; PPC64LE-NEXT:    blr6396  %ret = atomicrmw add ptr %ptr, i8 %val syncscope("singlethread") acq_rel6397  ret i8 %ret6398}6399 6400define i8 @test364(ptr %ptr, i8 %val) {6401; PPC64LE-LABEL: test364:6402; PPC64LE:       # %bb.0:6403; PPC64LE-NEXT:    sync6404; PPC64LE-NEXT:  .LBB364_1:6405; PPC64LE-NEXT:    lbarx 5, 0, 36406; PPC64LE-NEXT:    add 6, 4, 56407; PPC64LE-NEXT:    stbcx. 6, 0, 36408; PPC64LE-NEXT:    bne- 0, .LBB364_16409; PPC64LE-NEXT:  # %bb.2:6410; PPC64LE-NEXT:    lwsync6411; PPC64LE-NEXT:    mr 3, 56412; PPC64LE-NEXT:    blr6413  %ret = atomicrmw add ptr %ptr, i8 %val syncscope("singlethread") seq_cst6414  ret i8 %ret6415}6416 6417define i16 @test365(ptr %ptr, i16 %val) {6418; PPC64LE-LABEL: test365:6419; PPC64LE:       # %bb.0:6420; PPC64LE-NEXT:  .LBB365_1:6421; PPC64LE-NEXT:    lharx 5, 0, 36422; PPC64LE-NEXT:    add 6, 4, 56423; PPC64LE-NEXT:    sthcx. 6, 0, 36424; PPC64LE-NEXT:    bne- 0, .LBB365_16425; PPC64LE-NEXT:  # %bb.2:6426; PPC64LE-NEXT:    mr 3, 56427; PPC64LE-NEXT:    blr6428  %ret = atomicrmw add ptr %ptr, i16 %val syncscope("singlethread") monotonic6429  ret i16 %ret6430}6431 6432define i16 @test366(ptr %ptr, i16 %val) {6433; PPC64LE-LABEL: test366:6434; PPC64LE:       # %bb.0:6435; PPC64LE-NEXT:    mr 5, 36436; PPC64LE-NEXT:  .LBB366_1:6437; PPC64LE-NEXT:    lharx 3, 0, 56438; PPC64LE-NEXT:    add 6, 4, 36439; PPC64LE-NEXT:    sthcx. 6, 0, 56440; PPC64LE-NEXT:    bne- 0, .LBB366_16441; PPC64LE-NEXT:  # %bb.2:6442; PPC64LE-NEXT:    lwsync6443; PPC64LE-NEXT:    blr6444  %ret = atomicrmw add ptr %ptr, i16 %val syncscope("singlethread") acquire6445  ret i16 %ret6446}6447 6448define i16 @test367(ptr %ptr, i16 %val) {6449; PPC64LE-LABEL: test367:6450; PPC64LE:       # %bb.0:6451; PPC64LE-NEXT:    lwsync6452; PPC64LE-NEXT:  .LBB367_1:6453; PPC64LE-NEXT:    lharx 5, 0, 36454; PPC64LE-NEXT:    add 6, 4, 56455; PPC64LE-NEXT:    sthcx. 6, 0, 36456; PPC64LE-NEXT:    bne- 0, .LBB367_16457; PPC64LE-NEXT:  # %bb.2:6458; PPC64LE-NEXT:    mr 3, 56459; PPC64LE-NEXT:    blr6460  %ret = atomicrmw add ptr %ptr, i16 %val syncscope("singlethread") release6461  ret i16 %ret6462}6463 6464define i16 @test368(ptr %ptr, i16 %val) {6465; PPC64LE-LABEL: test368:6466; PPC64LE:       # %bb.0:6467; PPC64LE-NEXT:    lwsync6468; PPC64LE-NEXT:  .LBB368_1:6469; PPC64LE-NEXT:    lharx 5, 0, 36470; PPC64LE-NEXT:    add 6, 4, 56471; PPC64LE-NEXT:    sthcx. 6, 0, 36472; PPC64LE-NEXT:    bne- 0, .LBB368_16473; PPC64LE-NEXT:  # %bb.2:6474; PPC64LE-NEXT:    lwsync6475; PPC64LE-NEXT:    mr 3, 56476; PPC64LE-NEXT:    blr6477  %ret = atomicrmw add ptr %ptr, i16 %val syncscope("singlethread") acq_rel6478  ret i16 %ret6479}6480 6481define i16 @test369(ptr %ptr, i16 %val) {6482; PPC64LE-LABEL: test369:6483; PPC64LE:       # %bb.0:6484; PPC64LE-NEXT:    sync6485; PPC64LE-NEXT:  .LBB369_1:6486; PPC64LE-NEXT:    lharx 5, 0, 36487; PPC64LE-NEXT:    add 6, 4, 56488; PPC64LE-NEXT:    sthcx. 6, 0, 36489; PPC64LE-NEXT:    bne- 0, .LBB369_16490; PPC64LE-NEXT:  # %bb.2:6491; PPC64LE-NEXT:    lwsync6492; PPC64LE-NEXT:    mr 3, 56493; PPC64LE-NEXT:    blr6494  %ret = atomicrmw add ptr %ptr, i16 %val syncscope("singlethread") seq_cst6495  ret i16 %ret6496}6497 6498define i32 @test370(ptr %ptr, i32 %val) {6499; PPC64LE-LABEL: test370:6500; PPC64LE:       # %bb.0:6501; PPC64LE-NEXT:  .LBB370_1:6502; PPC64LE-NEXT:    lwarx 5, 0, 36503; PPC64LE-NEXT:    add 6, 4, 56504; PPC64LE-NEXT:    stwcx. 6, 0, 36505; PPC64LE-NEXT:    bne- 0, .LBB370_16506; PPC64LE-NEXT:  # %bb.2:6507; PPC64LE-NEXT:    mr 3, 56508; PPC64LE-NEXT:    blr6509  %ret = atomicrmw add ptr %ptr, i32 %val syncscope("singlethread") monotonic6510  ret i32 %ret6511}6512 6513define i32 @test371(ptr %ptr, i32 %val) {6514; PPC64LE-LABEL: test371:6515; PPC64LE:       # %bb.0:6516; PPC64LE-NEXT:    mr 5, 36517; PPC64LE-NEXT:  .LBB371_1:6518; PPC64LE-NEXT:    lwarx 3, 0, 56519; PPC64LE-NEXT:    add 6, 4, 36520; PPC64LE-NEXT:    stwcx. 6, 0, 56521; PPC64LE-NEXT:    bne- 0, .LBB371_16522; PPC64LE-NEXT:  # %bb.2:6523; PPC64LE-NEXT:    lwsync6524; PPC64LE-NEXT:    blr6525  %ret = atomicrmw add ptr %ptr, i32 %val syncscope("singlethread") acquire6526  ret i32 %ret6527}6528 6529define i32 @test372(ptr %ptr, i32 %val) {6530; PPC64LE-LABEL: test372:6531; PPC64LE:       # %bb.0:6532; PPC64LE-NEXT:    lwsync6533; PPC64LE-NEXT:  .LBB372_1:6534; PPC64LE-NEXT:    lwarx 5, 0, 36535; PPC64LE-NEXT:    add 6, 4, 56536; PPC64LE-NEXT:    stwcx. 6, 0, 36537; PPC64LE-NEXT:    bne- 0, .LBB372_16538; PPC64LE-NEXT:  # %bb.2:6539; PPC64LE-NEXT:    mr 3, 56540; PPC64LE-NEXT:    blr6541  %ret = atomicrmw add ptr %ptr, i32 %val syncscope("singlethread") release6542  ret i32 %ret6543}6544 6545define i32 @test373(ptr %ptr, i32 %val) {6546; PPC64LE-LABEL: test373:6547; PPC64LE:       # %bb.0:6548; PPC64LE-NEXT:    lwsync6549; PPC64LE-NEXT:  .LBB373_1:6550; PPC64LE-NEXT:    lwarx 5, 0, 36551; PPC64LE-NEXT:    add 6, 4, 56552; PPC64LE-NEXT:    stwcx. 6, 0, 36553; PPC64LE-NEXT:    bne- 0, .LBB373_16554; PPC64LE-NEXT:  # %bb.2:6555; PPC64LE-NEXT:    lwsync6556; PPC64LE-NEXT:    mr 3, 56557; PPC64LE-NEXT:    blr6558  %ret = atomicrmw add ptr %ptr, i32 %val syncscope("singlethread") acq_rel6559  ret i32 %ret6560}6561 6562define i32 @test374(ptr %ptr, i32 %val) {6563; PPC64LE-LABEL: test374:6564; PPC64LE:       # %bb.0:6565; PPC64LE-NEXT:    sync6566; PPC64LE-NEXT:  .LBB374_1:6567; PPC64LE-NEXT:    lwarx 5, 0, 36568; PPC64LE-NEXT:    add 6, 4, 56569; PPC64LE-NEXT:    stwcx. 6, 0, 36570; PPC64LE-NEXT:    bne- 0, .LBB374_16571; PPC64LE-NEXT:  # %bb.2:6572; PPC64LE-NEXT:    lwsync6573; PPC64LE-NEXT:    mr 3, 56574; PPC64LE-NEXT:    blr6575  %ret = atomicrmw add ptr %ptr, i32 %val syncscope("singlethread") seq_cst6576  ret i32 %ret6577}6578 6579define i64 @test375(ptr %ptr, i64 %val) {6580; PPC64LE-LABEL: test375:6581; PPC64LE:       # %bb.0:6582; PPC64LE-NEXT:  .LBB375_1:6583; PPC64LE-NEXT:    ldarx 5, 0, 36584; PPC64LE-NEXT:    add 6, 4, 56585; PPC64LE-NEXT:    stdcx. 6, 0, 36586; PPC64LE-NEXT:    bne- 0, .LBB375_16587; PPC64LE-NEXT:  # %bb.2:6588; PPC64LE-NEXT:    mr 3, 56589; PPC64LE-NEXT:    blr6590  %ret = atomicrmw add ptr %ptr, i64 %val syncscope("singlethread") monotonic6591  ret i64 %ret6592}6593 6594define i64 @test376(ptr %ptr, i64 %val) {6595; PPC64LE-LABEL: test376:6596; PPC64LE:       # %bb.0:6597; PPC64LE-NEXT:    mr 5, 36598; PPC64LE-NEXT:  .LBB376_1:6599; PPC64LE-NEXT:    ldarx 3, 0, 56600; PPC64LE-NEXT:    add 6, 4, 36601; PPC64LE-NEXT:    stdcx. 6, 0, 56602; PPC64LE-NEXT:    bne- 0, .LBB376_16603; PPC64LE-NEXT:  # %bb.2:6604; PPC64LE-NEXT:    lwsync6605; PPC64LE-NEXT:    blr6606  %ret = atomicrmw add ptr %ptr, i64 %val syncscope("singlethread") acquire6607  ret i64 %ret6608}6609 6610define i64 @test377(ptr %ptr, i64 %val) {6611; PPC64LE-LABEL: test377:6612; PPC64LE:       # %bb.0:6613; PPC64LE-NEXT:    lwsync6614; PPC64LE-NEXT:  .LBB377_1:6615; PPC64LE-NEXT:    ldarx 5, 0, 36616; PPC64LE-NEXT:    add 6, 4, 56617; PPC64LE-NEXT:    stdcx. 6, 0, 36618; PPC64LE-NEXT:    bne- 0, .LBB377_16619; PPC64LE-NEXT:  # %bb.2:6620; PPC64LE-NEXT:    mr 3, 56621; PPC64LE-NEXT:    blr6622  %ret = atomicrmw add ptr %ptr, i64 %val syncscope("singlethread") release6623  ret i64 %ret6624}6625 6626define i64 @test378(ptr %ptr, i64 %val) {6627; PPC64LE-LABEL: test378:6628; PPC64LE:       # %bb.0:6629; PPC64LE-NEXT:    lwsync6630; PPC64LE-NEXT:  .LBB378_1:6631; PPC64LE-NEXT:    ldarx 5, 0, 36632; PPC64LE-NEXT:    add 6, 4, 56633; PPC64LE-NEXT:    stdcx. 6, 0, 36634; PPC64LE-NEXT:    bne- 0, .LBB378_16635; PPC64LE-NEXT:  # %bb.2:6636; PPC64LE-NEXT:    lwsync6637; PPC64LE-NEXT:    mr 3, 56638; PPC64LE-NEXT:    blr6639  %ret = atomicrmw add ptr %ptr, i64 %val syncscope("singlethread") acq_rel6640  ret i64 %ret6641}6642 6643define i64 @test379(ptr %ptr, i64 %val) {6644; PPC64LE-LABEL: test379:6645; PPC64LE:       # %bb.0:6646; PPC64LE-NEXT:    sync6647; PPC64LE-NEXT:  .LBB379_1:6648; PPC64LE-NEXT:    ldarx 5, 0, 36649; PPC64LE-NEXT:    add 6, 4, 56650; PPC64LE-NEXT:    stdcx. 6, 0, 36651; PPC64LE-NEXT:    bne- 0, .LBB379_16652; PPC64LE-NEXT:  # %bb.2:6653; PPC64LE-NEXT:    lwsync6654; PPC64LE-NEXT:    mr 3, 56655; PPC64LE-NEXT:    blr6656  %ret = atomicrmw add ptr %ptr, i64 %val syncscope("singlethread") seq_cst6657  ret i64 %ret6658}6659 6660define i8 @test380(ptr %ptr, i8 %val) {6661; PPC64LE-LABEL: test380:6662; PPC64LE:       # %bb.0:6663; PPC64LE-NEXT:  .LBB380_1:6664; PPC64LE-NEXT:    lbarx 5, 0, 36665; PPC64LE-NEXT:    sub 6, 5, 46666; PPC64LE-NEXT:    stbcx. 6, 0, 36667; PPC64LE-NEXT:    bne- 0, .LBB380_16668; PPC64LE-NEXT:  # %bb.2:6669; PPC64LE-NEXT:    mr 3, 56670; PPC64LE-NEXT:    blr6671  %ret = atomicrmw sub ptr %ptr, i8 %val syncscope("singlethread") monotonic6672  ret i8 %ret6673}6674 6675define i8 @test381(ptr %ptr, i8 %val) {6676; PPC64LE-LABEL: test381:6677; PPC64LE:       # %bb.0:6678; PPC64LE-NEXT:    mr 5, 36679; PPC64LE-NEXT:  .LBB381_1:6680; PPC64LE-NEXT:    lbarx 3, 0, 56681; PPC64LE-NEXT:    sub 6, 3, 46682; PPC64LE-NEXT:    stbcx. 6, 0, 56683; PPC64LE-NEXT:    bne- 0, .LBB381_16684; PPC64LE-NEXT:  # %bb.2:6685; PPC64LE-NEXT:    lwsync6686; PPC64LE-NEXT:    blr6687  %ret = atomicrmw sub ptr %ptr, i8 %val syncscope("singlethread") acquire6688  ret i8 %ret6689}6690 6691define i8 @test382(ptr %ptr, i8 %val) {6692; PPC64LE-LABEL: test382:6693; PPC64LE:       # %bb.0:6694; PPC64LE-NEXT:    lwsync6695; PPC64LE-NEXT:  .LBB382_1:6696; PPC64LE-NEXT:    lbarx 5, 0, 36697; PPC64LE-NEXT:    sub 6, 5, 46698; PPC64LE-NEXT:    stbcx. 6, 0, 36699; PPC64LE-NEXT:    bne- 0, .LBB382_16700; PPC64LE-NEXT:  # %bb.2:6701; PPC64LE-NEXT:    mr 3, 56702; PPC64LE-NEXT:    blr6703  %ret = atomicrmw sub ptr %ptr, i8 %val syncscope("singlethread") release6704  ret i8 %ret6705}6706 6707define i8 @test383(ptr %ptr, i8 %val) {6708; PPC64LE-LABEL: test383:6709; PPC64LE:       # %bb.0:6710; PPC64LE-NEXT:    lwsync6711; PPC64LE-NEXT:  .LBB383_1:6712; PPC64LE-NEXT:    lbarx 5, 0, 36713; PPC64LE-NEXT:    sub 6, 5, 46714; PPC64LE-NEXT:    stbcx. 6, 0, 36715; PPC64LE-NEXT:    bne- 0, .LBB383_16716; PPC64LE-NEXT:  # %bb.2:6717; PPC64LE-NEXT:    lwsync6718; PPC64LE-NEXT:    mr 3, 56719; PPC64LE-NEXT:    blr6720  %ret = atomicrmw sub ptr %ptr, i8 %val syncscope("singlethread") acq_rel6721  ret i8 %ret6722}6723 6724define i8 @test384(ptr %ptr, i8 %val) {6725; PPC64LE-LABEL: test384:6726; PPC64LE:       # %bb.0:6727; PPC64LE-NEXT:    sync6728; PPC64LE-NEXT:  .LBB384_1:6729; PPC64LE-NEXT:    lbarx 5, 0, 36730; PPC64LE-NEXT:    sub 6, 5, 46731; PPC64LE-NEXT:    stbcx. 6, 0, 36732; PPC64LE-NEXT:    bne- 0, .LBB384_16733; PPC64LE-NEXT:  # %bb.2:6734; PPC64LE-NEXT:    lwsync6735; PPC64LE-NEXT:    mr 3, 56736; PPC64LE-NEXT:    blr6737  %ret = atomicrmw sub ptr %ptr, i8 %val syncscope("singlethread") seq_cst6738  ret i8 %ret6739}6740 6741define i16 @test385(ptr %ptr, i16 %val) {6742; PPC64LE-LABEL: test385:6743; PPC64LE:       # %bb.0:6744; PPC64LE-NEXT:  .LBB385_1:6745; PPC64LE-NEXT:    lharx 5, 0, 36746; PPC64LE-NEXT:    sub 6, 5, 46747; PPC64LE-NEXT:    sthcx. 6, 0, 36748; PPC64LE-NEXT:    bne- 0, .LBB385_16749; PPC64LE-NEXT:  # %bb.2:6750; PPC64LE-NEXT:    mr 3, 56751; PPC64LE-NEXT:    blr6752  %ret = atomicrmw sub ptr %ptr, i16 %val syncscope("singlethread") monotonic6753  ret i16 %ret6754}6755 6756define i16 @test386(ptr %ptr, i16 %val) {6757; PPC64LE-LABEL: test386:6758; PPC64LE:       # %bb.0:6759; PPC64LE-NEXT:    mr 5, 36760; PPC64LE-NEXT:  .LBB386_1:6761; PPC64LE-NEXT:    lharx 3, 0, 56762; PPC64LE-NEXT:    sub 6, 3, 46763; PPC64LE-NEXT:    sthcx. 6, 0, 56764; PPC64LE-NEXT:    bne- 0, .LBB386_16765; PPC64LE-NEXT:  # %bb.2:6766; PPC64LE-NEXT:    lwsync6767; PPC64LE-NEXT:    blr6768  %ret = atomicrmw sub ptr %ptr, i16 %val syncscope("singlethread") acquire6769  ret i16 %ret6770}6771 6772define i16 @test387(ptr %ptr, i16 %val) {6773; PPC64LE-LABEL: test387:6774; PPC64LE:       # %bb.0:6775; PPC64LE-NEXT:    lwsync6776; PPC64LE-NEXT:  .LBB387_1:6777; PPC64LE-NEXT:    lharx 5, 0, 36778; PPC64LE-NEXT:    sub 6, 5, 46779; PPC64LE-NEXT:    sthcx. 6, 0, 36780; PPC64LE-NEXT:    bne- 0, .LBB387_16781; PPC64LE-NEXT:  # %bb.2:6782; PPC64LE-NEXT:    mr 3, 56783; PPC64LE-NEXT:    blr6784  %ret = atomicrmw sub ptr %ptr, i16 %val syncscope("singlethread") release6785  ret i16 %ret6786}6787 6788define i16 @test388(ptr %ptr, i16 %val) {6789; PPC64LE-LABEL: test388:6790; PPC64LE:       # %bb.0:6791; PPC64LE-NEXT:    lwsync6792; PPC64LE-NEXT:  .LBB388_1:6793; PPC64LE-NEXT:    lharx 5, 0, 36794; PPC64LE-NEXT:    sub 6, 5, 46795; PPC64LE-NEXT:    sthcx. 6, 0, 36796; PPC64LE-NEXT:    bne- 0, .LBB388_16797; PPC64LE-NEXT:  # %bb.2:6798; PPC64LE-NEXT:    lwsync6799; PPC64LE-NEXT:    mr 3, 56800; PPC64LE-NEXT:    blr6801  %ret = atomicrmw sub ptr %ptr, i16 %val syncscope("singlethread") acq_rel6802  ret i16 %ret6803}6804 6805define i16 @test389(ptr %ptr, i16 %val) {6806; PPC64LE-LABEL: test389:6807; PPC64LE:       # %bb.0:6808; PPC64LE-NEXT:    sync6809; PPC64LE-NEXT:  .LBB389_1:6810; PPC64LE-NEXT:    lharx 5, 0, 36811; PPC64LE-NEXT:    sub 6, 5, 46812; PPC64LE-NEXT:    sthcx. 6, 0, 36813; PPC64LE-NEXT:    bne- 0, .LBB389_16814; PPC64LE-NEXT:  # %bb.2:6815; PPC64LE-NEXT:    lwsync6816; PPC64LE-NEXT:    mr 3, 56817; PPC64LE-NEXT:    blr6818  %ret = atomicrmw sub ptr %ptr, i16 %val syncscope("singlethread") seq_cst6819  ret i16 %ret6820}6821 6822define i32 @test390(ptr %ptr, i32 %val) {6823; PPC64LE-LABEL: test390:6824; PPC64LE:       # %bb.0:6825; PPC64LE-NEXT:  .LBB390_1:6826; PPC64LE-NEXT:    lwarx 5, 0, 36827; PPC64LE-NEXT:    sub 6, 5, 46828; PPC64LE-NEXT:    stwcx. 6, 0, 36829; PPC64LE-NEXT:    bne- 0, .LBB390_16830; PPC64LE-NEXT:  # %bb.2:6831; PPC64LE-NEXT:    mr 3, 56832; PPC64LE-NEXT:    blr6833  %ret = atomicrmw sub ptr %ptr, i32 %val syncscope("singlethread") monotonic6834  ret i32 %ret6835}6836 6837define i32 @test391(ptr %ptr, i32 %val) {6838; PPC64LE-LABEL: test391:6839; PPC64LE:       # %bb.0:6840; PPC64LE-NEXT:    mr 5, 36841; PPC64LE-NEXT:  .LBB391_1:6842; PPC64LE-NEXT:    lwarx 3, 0, 56843; PPC64LE-NEXT:    sub 6, 3, 46844; PPC64LE-NEXT:    stwcx. 6, 0, 56845; PPC64LE-NEXT:    bne- 0, .LBB391_16846; PPC64LE-NEXT:  # %bb.2:6847; PPC64LE-NEXT:    lwsync6848; PPC64LE-NEXT:    blr6849  %ret = atomicrmw sub ptr %ptr, i32 %val syncscope("singlethread") acquire6850  ret i32 %ret6851}6852 6853define i32 @test392(ptr %ptr, i32 %val) {6854; PPC64LE-LABEL: test392:6855; PPC64LE:       # %bb.0:6856; PPC64LE-NEXT:    lwsync6857; PPC64LE-NEXT:  .LBB392_1:6858; PPC64LE-NEXT:    lwarx 5, 0, 36859; PPC64LE-NEXT:    sub 6, 5, 46860; PPC64LE-NEXT:    stwcx. 6, 0, 36861; PPC64LE-NEXT:    bne- 0, .LBB392_16862; PPC64LE-NEXT:  # %bb.2:6863; PPC64LE-NEXT:    mr 3, 56864; PPC64LE-NEXT:    blr6865  %ret = atomicrmw sub ptr %ptr, i32 %val syncscope("singlethread") release6866  ret i32 %ret6867}6868 6869define i32 @test393(ptr %ptr, i32 %val) {6870; PPC64LE-LABEL: test393:6871; PPC64LE:       # %bb.0:6872; PPC64LE-NEXT:    lwsync6873; PPC64LE-NEXT:  .LBB393_1:6874; PPC64LE-NEXT:    lwarx 5, 0, 36875; PPC64LE-NEXT:    sub 6, 5, 46876; PPC64LE-NEXT:    stwcx. 6, 0, 36877; PPC64LE-NEXT:    bne- 0, .LBB393_16878; PPC64LE-NEXT:  # %bb.2:6879; PPC64LE-NEXT:    lwsync6880; PPC64LE-NEXT:    mr 3, 56881; PPC64LE-NEXT:    blr6882  %ret = atomicrmw sub ptr %ptr, i32 %val syncscope("singlethread") acq_rel6883  ret i32 %ret6884}6885 6886define i32 @test394(ptr %ptr, i32 %val) {6887; PPC64LE-LABEL: test394:6888; PPC64LE:       # %bb.0:6889; PPC64LE-NEXT:    sync6890; PPC64LE-NEXT:  .LBB394_1:6891; PPC64LE-NEXT:    lwarx 5, 0, 36892; PPC64LE-NEXT:    sub 6, 5, 46893; PPC64LE-NEXT:    stwcx. 6, 0, 36894; PPC64LE-NEXT:    bne- 0, .LBB394_16895; PPC64LE-NEXT:  # %bb.2:6896; PPC64LE-NEXT:    lwsync6897; PPC64LE-NEXT:    mr 3, 56898; PPC64LE-NEXT:    blr6899  %ret = atomicrmw sub ptr %ptr, i32 %val syncscope("singlethread") seq_cst6900  ret i32 %ret6901}6902 6903define i64 @test395(ptr %ptr, i64 %val) {6904; PPC64LE-LABEL: test395:6905; PPC64LE:       # %bb.0:6906; PPC64LE-NEXT:  .LBB395_1:6907; PPC64LE-NEXT:    ldarx 5, 0, 36908; PPC64LE-NEXT:    sub 6, 5, 46909; PPC64LE-NEXT:    stdcx. 6, 0, 36910; PPC64LE-NEXT:    bne- 0, .LBB395_16911; PPC64LE-NEXT:  # %bb.2:6912; PPC64LE-NEXT:    mr 3, 56913; PPC64LE-NEXT:    blr6914  %ret = atomicrmw sub ptr %ptr, i64 %val syncscope("singlethread") monotonic6915  ret i64 %ret6916}6917 6918define i64 @test396(ptr %ptr, i64 %val) {6919; PPC64LE-LABEL: test396:6920; PPC64LE:       # %bb.0:6921; PPC64LE-NEXT:    mr 5, 36922; PPC64LE-NEXT:  .LBB396_1:6923; PPC64LE-NEXT:    ldarx 3, 0, 56924; PPC64LE-NEXT:    sub 6, 3, 46925; PPC64LE-NEXT:    stdcx. 6, 0, 56926; PPC64LE-NEXT:    bne- 0, .LBB396_16927; PPC64LE-NEXT:  # %bb.2:6928; PPC64LE-NEXT:    lwsync6929; PPC64LE-NEXT:    blr6930  %ret = atomicrmw sub ptr %ptr, i64 %val syncscope("singlethread") acquire6931  ret i64 %ret6932}6933 6934define i64 @test397(ptr %ptr, i64 %val) {6935; PPC64LE-LABEL: test397:6936; PPC64LE:       # %bb.0:6937; PPC64LE-NEXT:    lwsync6938; PPC64LE-NEXT:  .LBB397_1:6939; PPC64LE-NEXT:    ldarx 5, 0, 36940; PPC64LE-NEXT:    sub 6, 5, 46941; PPC64LE-NEXT:    stdcx. 6, 0, 36942; PPC64LE-NEXT:    bne- 0, .LBB397_16943; PPC64LE-NEXT:  # %bb.2:6944; PPC64LE-NEXT:    mr 3, 56945; PPC64LE-NEXT:    blr6946  %ret = atomicrmw sub ptr %ptr, i64 %val syncscope("singlethread") release6947  ret i64 %ret6948}6949 6950define i64 @test398(ptr %ptr, i64 %val) {6951; PPC64LE-LABEL: test398:6952; PPC64LE:       # %bb.0:6953; PPC64LE-NEXT:    lwsync6954; PPC64LE-NEXT:  .LBB398_1:6955; PPC64LE-NEXT:    ldarx 5, 0, 36956; PPC64LE-NEXT:    sub 6, 5, 46957; PPC64LE-NEXT:    stdcx. 6, 0, 36958; PPC64LE-NEXT:    bne- 0, .LBB398_16959; PPC64LE-NEXT:  # %bb.2:6960; PPC64LE-NEXT:    lwsync6961; PPC64LE-NEXT:    mr 3, 56962; PPC64LE-NEXT:    blr6963  %ret = atomicrmw sub ptr %ptr, i64 %val syncscope("singlethread") acq_rel6964  ret i64 %ret6965}6966 6967define i64 @test399(ptr %ptr, i64 %val) {6968; PPC64LE-LABEL: test399:6969; PPC64LE:       # %bb.0:6970; PPC64LE-NEXT:    sync6971; PPC64LE-NEXT:  .LBB399_1:6972; PPC64LE-NEXT:    ldarx 5, 0, 36973; PPC64LE-NEXT:    sub 6, 5, 46974; PPC64LE-NEXT:    stdcx. 6, 0, 36975; PPC64LE-NEXT:    bne- 0, .LBB399_16976; PPC64LE-NEXT:  # %bb.2:6977; PPC64LE-NEXT:    lwsync6978; PPC64LE-NEXT:    mr 3, 56979; PPC64LE-NEXT:    blr6980  %ret = atomicrmw sub ptr %ptr, i64 %val syncscope("singlethread") seq_cst6981  ret i64 %ret6982}6983 6984define i8 @test400(ptr %ptr, i8 %val) {6985; PPC64LE-LABEL: test400:6986; PPC64LE:       # %bb.0:6987; PPC64LE-NEXT:  .LBB400_1:6988; PPC64LE-NEXT:    lbarx 5, 0, 36989; PPC64LE-NEXT:    and 6, 4, 56990; PPC64LE-NEXT:    stbcx. 6, 0, 36991; PPC64LE-NEXT:    bne- 0, .LBB400_16992; PPC64LE-NEXT:  # %bb.2:6993; PPC64LE-NEXT:    mr 3, 56994; PPC64LE-NEXT:    blr6995  %ret = atomicrmw and ptr %ptr, i8 %val syncscope("singlethread") monotonic6996  ret i8 %ret6997}6998 6999define i8 @test401(ptr %ptr, i8 %val) {7000; PPC64LE-LABEL: test401:7001; PPC64LE:       # %bb.0:7002; PPC64LE-NEXT:    mr 5, 37003; PPC64LE-NEXT:  .LBB401_1:7004; PPC64LE-NEXT:    lbarx 3, 0, 57005; PPC64LE-NEXT:    and 6, 4, 37006; PPC64LE-NEXT:    stbcx. 6, 0, 57007; PPC64LE-NEXT:    bne- 0, .LBB401_17008; PPC64LE-NEXT:  # %bb.2:7009; PPC64LE-NEXT:    lwsync7010; PPC64LE-NEXT:    blr7011  %ret = atomicrmw and ptr %ptr, i8 %val syncscope("singlethread") acquire7012  ret i8 %ret7013}7014 7015define i8 @test402(ptr %ptr, i8 %val) {7016; PPC64LE-LABEL: test402:7017; PPC64LE:       # %bb.0:7018; PPC64LE-NEXT:    lwsync7019; PPC64LE-NEXT:  .LBB402_1:7020; PPC64LE-NEXT:    lbarx 5, 0, 37021; PPC64LE-NEXT:    and 6, 4, 57022; PPC64LE-NEXT:    stbcx. 6, 0, 37023; PPC64LE-NEXT:    bne- 0, .LBB402_17024; PPC64LE-NEXT:  # %bb.2:7025; PPC64LE-NEXT:    mr 3, 57026; PPC64LE-NEXT:    blr7027  %ret = atomicrmw and ptr %ptr, i8 %val syncscope("singlethread") release7028  ret i8 %ret7029}7030 7031define i8 @test403(ptr %ptr, i8 %val) {7032; PPC64LE-LABEL: test403:7033; PPC64LE:       # %bb.0:7034; PPC64LE-NEXT:    lwsync7035; PPC64LE-NEXT:  .LBB403_1:7036; PPC64LE-NEXT:    lbarx 5, 0, 37037; PPC64LE-NEXT:    and 6, 4, 57038; PPC64LE-NEXT:    stbcx. 6, 0, 37039; PPC64LE-NEXT:    bne- 0, .LBB403_17040; PPC64LE-NEXT:  # %bb.2:7041; PPC64LE-NEXT:    lwsync7042; PPC64LE-NEXT:    mr 3, 57043; PPC64LE-NEXT:    blr7044  %ret = atomicrmw and ptr %ptr, i8 %val syncscope("singlethread") acq_rel7045  ret i8 %ret7046}7047 7048define i8 @test404(ptr %ptr, i8 %val) {7049; PPC64LE-LABEL: test404:7050; PPC64LE:       # %bb.0:7051; PPC64LE-NEXT:    sync7052; PPC64LE-NEXT:  .LBB404_1:7053; PPC64LE-NEXT:    lbarx 5, 0, 37054; PPC64LE-NEXT:    and 6, 4, 57055; PPC64LE-NEXT:    stbcx. 6, 0, 37056; PPC64LE-NEXT:    bne- 0, .LBB404_17057; PPC64LE-NEXT:  # %bb.2:7058; PPC64LE-NEXT:    lwsync7059; PPC64LE-NEXT:    mr 3, 57060; PPC64LE-NEXT:    blr7061  %ret = atomicrmw and ptr %ptr, i8 %val syncscope("singlethread") seq_cst7062  ret i8 %ret7063}7064 7065define i16 @test405(ptr %ptr, i16 %val) {7066; PPC64LE-LABEL: test405:7067; PPC64LE:       # %bb.0:7068; PPC64LE-NEXT:  .LBB405_1:7069; PPC64LE-NEXT:    lharx 5, 0, 37070; PPC64LE-NEXT:    and 6, 4, 57071; PPC64LE-NEXT:    sthcx. 6, 0, 37072; PPC64LE-NEXT:    bne- 0, .LBB405_17073; PPC64LE-NEXT:  # %bb.2:7074; PPC64LE-NEXT:    mr 3, 57075; PPC64LE-NEXT:    blr7076  %ret = atomicrmw and ptr %ptr, i16 %val syncscope("singlethread") monotonic7077  ret i16 %ret7078}7079 7080define i16 @test406(ptr %ptr, i16 %val) {7081; PPC64LE-LABEL: test406:7082; PPC64LE:       # %bb.0:7083; PPC64LE-NEXT:    mr 5, 37084; PPC64LE-NEXT:  .LBB406_1:7085; PPC64LE-NEXT:    lharx 3, 0, 57086; PPC64LE-NEXT:    and 6, 4, 37087; PPC64LE-NEXT:    sthcx. 6, 0, 57088; PPC64LE-NEXT:    bne- 0, .LBB406_17089; PPC64LE-NEXT:  # %bb.2:7090; PPC64LE-NEXT:    lwsync7091; PPC64LE-NEXT:    blr7092  %ret = atomicrmw and ptr %ptr, i16 %val syncscope("singlethread") acquire7093  ret i16 %ret7094}7095 7096define i16 @test407(ptr %ptr, i16 %val) {7097; PPC64LE-LABEL: test407:7098; PPC64LE:       # %bb.0:7099; PPC64LE-NEXT:    lwsync7100; PPC64LE-NEXT:  .LBB407_1:7101; PPC64LE-NEXT:    lharx 5, 0, 37102; PPC64LE-NEXT:    and 6, 4, 57103; PPC64LE-NEXT:    sthcx. 6, 0, 37104; PPC64LE-NEXT:    bne- 0, .LBB407_17105; PPC64LE-NEXT:  # %bb.2:7106; PPC64LE-NEXT:    mr 3, 57107; PPC64LE-NEXT:    blr7108  %ret = atomicrmw and ptr %ptr, i16 %val syncscope("singlethread") release7109  ret i16 %ret7110}7111 7112define i16 @test408(ptr %ptr, i16 %val) {7113; PPC64LE-LABEL: test408:7114; PPC64LE:       # %bb.0:7115; PPC64LE-NEXT:    lwsync7116; PPC64LE-NEXT:  .LBB408_1:7117; PPC64LE-NEXT:    lharx 5, 0, 37118; PPC64LE-NEXT:    and 6, 4, 57119; PPC64LE-NEXT:    sthcx. 6, 0, 37120; PPC64LE-NEXT:    bne- 0, .LBB408_17121; PPC64LE-NEXT:  # %bb.2:7122; PPC64LE-NEXT:    lwsync7123; PPC64LE-NEXT:    mr 3, 57124; PPC64LE-NEXT:    blr7125  %ret = atomicrmw and ptr %ptr, i16 %val syncscope("singlethread") acq_rel7126  ret i16 %ret7127}7128 7129define i16 @test409(ptr %ptr, i16 %val) {7130; PPC64LE-LABEL: test409:7131; PPC64LE:       # %bb.0:7132; PPC64LE-NEXT:    sync7133; PPC64LE-NEXT:  .LBB409_1:7134; PPC64LE-NEXT:    lharx 5, 0, 37135; PPC64LE-NEXT:    and 6, 4, 57136; PPC64LE-NEXT:    sthcx. 6, 0, 37137; PPC64LE-NEXT:    bne- 0, .LBB409_17138; PPC64LE-NEXT:  # %bb.2:7139; PPC64LE-NEXT:    lwsync7140; PPC64LE-NEXT:    mr 3, 57141; PPC64LE-NEXT:    blr7142  %ret = atomicrmw and ptr %ptr, i16 %val syncscope("singlethread") seq_cst7143  ret i16 %ret7144}7145 7146define i32 @test410(ptr %ptr, i32 %val) {7147; PPC64LE-LABEL: test410:7148; PPC64LE:       # %bb.0:7149; PPC64LE-NEXT:  .LBB410_1:7150; PPC64LE-NEXT:    lwarx 5, 0, 37151; PPC64LE-NEXT:    and 6, 4, 57152; PPC64LE-NEXT:    stwcx. 6, 0, 37153; PPC64LE-NEXT:    bne- 0, .LBB410_17154; PPC64LE-NEXT:  # %bb.2:7155; PPC64LE-NEXT:    mr 3, 57156; PPC64LE-NEXT:    blr7157  %ret = atomicrmw and ptr %ptr, i32 %val syncscope("singlethread") monotonic7158  ret i32 %ret7159}7160 7161define i32 @test411(ptr %ptr, i32 %val) {7162; PPC64LE-LABEL: test411:7163; PPC64LE:       # %bb.0:7164; PPC64LE-NEXT:    mr 5, 37165; PPC64LE-NEXT:  .LBB411_1:7166; PPC64LE-NEXT:    lwarx 3, 0, 57167; PPC64LE-NEXT:    and 6, 4, 37168; PPC64LE-NEXT:    stwcx. 6, 0, 57169; PPC64LE-NEXT:    bne- 0, .LBB411_17170; PPC64LE-NEXT:  # %bb.2:7171; PPC64LE-NEXT:    lwsync7172; PPC64LE-NEXT:    blr7173  %ret = atomicrmw and ptr %ptr, i32 %val syncscope("singlethread") acquire7174  ret i32 %ret7175}7176 7177define i32 @test412(ptr %ptr, i32 %val) {7178; PPC64LE-LABEL: test412:7179; PPC64LE:       # %bb.0:7180; PPC64LE-NEXT:    lwsync7181; PPC64LE-NEXT:  .LBB412_1:7182; PPC64LE-NEXT:    lwarx 5, 0, 37183; PPC64LE-NEXT:    and 6, 4, 57184; PPC64LE-NEXT:    stwcx. 6, 0, 37185; PPC64LE-NEXT:    bne- 0, .LBB412_17186; PPC64LE-NEXT:  # %bb.2:7187; PPC64LE-NEXT:    mr 3, 57188; PPC64LE-NEXT:    blr7189  %ret = atomicrmw and ptr %ptr, i32 %val syncscope("singlethread") release7190  ret i32 %ret7191}7192 7193define i32 @test413(ptr %ptr, i32 %val) {7194; PPC64LE-LABEL: test413:7195; PPC64LE:       # %bb.0:7196; PPC64LE-NEXT:    lwsync7197; PPC64LE-NEXT:  .LBB413_1:7198; PPC64LE-NEXT:    lwarx 5, 0, 37199; PPC64LE-NEXT:    and 6, 4, 57200; PPC64LE-NEXT:    stwcx. 6, 0, 37201; PPC64LE-NEXT:    bne- 0, .LBB413_17202; PPC64LE-NEXT:  # %bb.2:7203; PPC64LE-NEXT:    lwsync7204; PPC64LE-NEXT:    mr 3, 57205; PPC64LE-NEXT:    blr7206  %ret = atomicrmw and ptr %ptr, i32 %val syncscope("singlethread") acq_rel7207  ret i32 %ret7208}7209 7210define i32 @test414(ptr %ptr, i32 %val) {7211; PPC64LE-LABEL: test414:7212; PPC64LE:       # %bb.0:7213; PPC64LE-NEXT:    sync7214; PPC64LE-NEXT:  .LBB414_1:7215; PPC64LE-NEXT:    lwarx 5, 0, 37216; PPC64LE-NEXT:    and 6, 4, 57217; PPC64LE-NEXT:    stwcx. 6, 0, 37218; PPC64LE-NEXT:    bne- 0, .LBB414_17219; PPC64LE-NEXT:  # %bb.2:7220; PPC64LE-NEXT:    lwsync7221; PPC64LE-NEXT:    mr 3, 57222; PPC64LE-NEXT:    blr7223  %ret = atomicrmw and ptr %ptr, i32 %val syncscope("singlethread") seq_cst7224  ret i32 %ret7225}7226 7227define i64 @test415(ptr %ptr, i64 %val) {7228; PPC64LE-LABEL: test415:7229; PPC64LE:       # %bb.0:7230; PPC64LE-NEXT:  .LBB415_1:7231; PPC64LE-NEXT:    ldarx 5, 0, 37232; PPC64LE-NEXT:    and 6, 4, 57233; PPC64LE-NEXT:    stdcx. 6, 0, 37234; PPC64LE-NEXT:    bne- 0, .LBB415_17235; PPC64LE-NEXT:  # %bb.2:7236; PPC64LE-NEXT:    mr 3, 57237; PPC64LE-NEXT:    blr7238  %ret = atomicrmw and ptr %ptr, i64 %val syncscope("singlethread") monotonic7239  ret i64 %ret7240}7241 7242define i64 @test416(ptr %ptr, i64 %val) {7243; PPC64LE-LABEL: test416:7244; PPC64LE:       # %bb.0:7245; PPC64LE-NEXT:    mr 5, 37246; PPC64LE-NEXT:  .LBB416_1:7247; PPC64LE-NEXT:    ldarx 3, 0, 57248; PPC64LE-NEXT:    and 6, 4, 37249; PPC64LE-NEXT:    stdcx. 6, 0, 57250; PPC64LE-NEXT:    bne- 0, .LBB416_17251; PPC64LE-NEXT:  # %bb.2:7252; PPC64LE-NEXT:    lwsync7253; PPC64LE-NEXT:    blr7254  %ret = atomicrmw and ptr %ptr, i64 %val syncscope("singlethread") acquire7255  ret i64 %ret7256}7257 7258define i64 @test417(ptr %ptr, i64 %val) {7259; PPC64LE-LABEL: test417:7260; PPC64LE:       # %bb.0:7261; PPC64LE-NEXT:    lwsync7262; PPC64LE-NEXT:  .LBB417_1:7263; PPC64LE-NEXT:    ldarx 5, 0, 37264; PPC64LE-NEXT:    and 6, 4, 57265; PPC64LE-NEXT:    stdcx. 6, 0, 37266; PPC64LE-NEXT:    bne- 0, .LBB417_17267; PPC64LE-NEXT:  # %bb.2:7268; PPC64LE-NEXT:    mr 3, 57269; PPC64LE-NEXT:    blr7270  %ret = atomicrmw and ptr %ptr, i64 %val syncscope("singlethread") release7271  ret i64 %ret7272}7273 7274define i64 @test418(ptr %ptr, i64 %val) {7275; PPC64LE-LABEL: test418:7276; PPC64LE:       # %bb.0:7277; PPC64LE-NEXT:    lwsync7278; PPC64LE-NEXT:  .LBB418_1:7279; PPC64LE-NEXT:    ldarx 5, 0, 37280; PPC64LE-NEXT:    and 6, 4, 57281; PPC64LE-NEXT:    stdcx. 6, 0, 37282; PPC64LE-NEXT:    bne- 0, .LBB418_17283; PPC64LE-NEXT:  # %bb.2:7284; PPC64LE-NEXT:    lwsync7285; PPC64LE-NEXT:    mr 3, 57286; PPC64LE-NEXT:    blr7287  %ret = atomicrmw and ptr %ptr, i64 %val syncscope("singlethread") acq_rel7288  ret i64 %ret7289}7290 7291define i64 @test419(ptr %ptr, i64 %val) {7292; PPC64LE-LABEL: test419:7293; PPC64LE:       # %bb.0:7294; PPC64LE-NEXT:    sync7295; PPC64LE-NEXT:  .LBB419_1:7296; PPC64LE-NEXT:    ldarx 5, 0, 37297; PPC64LE-NEXT:    and 6, 4, 57298; PPC64LE-NEXT:    stdcx. 6, 0, 37299; PPC64LE-NEXT:    bne- 0, .LBB419_17300; PPC64LE-NEXT:  # %bb.2:7301; PPC64LE-NEXT:    lwsync7302; PPC64LE-NEXT:    mr 3, 57303; PPC64LE-NEXT:    blr7304  %ret = atomicrmw and ptr %ptr, i64 %val syncscope("singlethread") seq_cst7305  ret i64 %ret7306}7307 7308define i8 @test420(ptr %ptr, i8 %val) {7309; PPC64LE-LABEL: test420:7310; PPC64LE:       # %bb.0:7311; PPC64LE-NEXT:  .LBB420_1:7312; PPC64LE-NEXT:    lbarx 5, 0, 37313; PPC64LE-NEXT:    nand 6, 4, 57314; PPC64LE-NEXT:    stbcx. 6, 0, 37315; PPC64LE-NEXT:    bne- 0, .LBB420_17316; PPC64LE-NEXT:  # %bb.2:7317; PPC64LE-NEXT:    mr 3, 57318; PPC64LE-NEXT:    blr7319  %ret = atomicrmw nand ptr %ptr, i8 %val syncscope("singlethread") monotonic7320  ret i8 %ret7321}7322 7323define i8 @test421(ptr %ptr, i8 %val) {7324; PPC64LE-LABEL: test421:7325; PPC64LE:       # %bb.0:7326; PPC64LE-NEXT:    mr 5, 37327; PPC64LE-NEXT:  .LBB421_1:7328; PPC64LE-NEXT:    lbarx 3, 0, 57329; PPC64LE-NEXT:    nand 6, 4, 37330; PPC64LE-NEXT:    stbcx. 6, 0, 57331; PPC64LE-NEXT:    bne- 0, .LBB421_17332; PPC64LE-NEXT:  # %bb.2:7333; PPC64LE-NEXT:    lwsync7334; PPC64LE-NEXT:    blr7335  %ret = atomicrmw nand ptr %ptr, i8 %val syncscope("singlethread") acquire7336  ret i8 %ret7337}7338 7339define i8 @test422(ptr %ptr, i8 %val) {7340; PPC64LE-LABEL: test422:7341; PPC64LE:       # %bb.0:7342; PPC64LE-NEXT:    lwsync7343; PPC64LE-NEXT:  .LBB422_1:7344; PPC64LE-NEXT:    lbarx 5, 0, 37345; PPC64LE-NEXT:    nand 6, 4, 57346; PPC64LE-NEXT:    stbcx. 6, 0, 37347; PPC64LE-NEXT:    bne- 0, .LBB422_17348; PPC64LE-NEXT:  # %bb.2:7349; PPC64LE-NEXT:    mr 3, 57350; PPC64LE-NEXT:    blr7351  %ret = atomicrmw nand ptr %ptr, i8 %val syncscope("singlethread") release7352  ret i8 %ret7353}7354 7355define i8 @test423(ptr %ptr, i8 %val) {7356; PPC64LE-LABEL: test423:7357; PPC64LE:       # %bb.0:7358; PPC64LE-NEXT:    lwsync7359; PPC64LE-NEXT:  .LBB423_1:7360; PPC64LE-NEXT:    lbarx 5, 0, 37361; PPC64LE-NEXT:    nand 6, 4, 57362; PPC64LE-NEXT:    stbcx. 6, 0, 37363; PPC64LE-NEXT:    bne- 0, .LBB423_17364; PPC64LE-NEXT:  # %bb.2:7365; PPC64LE-NEXT:    lwsync7366; PPC64LE-NEXT:    mr 3, 57367; PPC64LE-NEXT:    blr7368  %ret = atomicrmw nand ptr %ptr, i8 %val syncscope("singlethread") acq_rel7369  ret i8 %ret7370}7371 7372define i8 @test424(ptr %ptr, i8 %val) {7373; PPC64LE-LABEL: test424:7374; PPC64LE:       # %bb.0:7375; PPC64LE-NEXT:    sync7376; PPC64LE-NEXT:  .LBB424_1:7377; PPC64LE-NEXT:    lbarx 5, 0, 37378; PPC64LE-NEXT:    nand 6, 4, 57379; PPC64LE-NEXT:    stbcx. 6, 0, 37380; PPC64LE-NEXT:    bne- 0, .LBB424_17381; PPC64LE-NEXT:  # %bb.2:7382; PPC64LE-NEXT:    lwsync7383; PPC64LE-NEXT:    mr 3, 57384; PPC64LE-NEXT:    blr7385  %ret = atomicrmw nand ptr %ptr, i8 %val syncscope("singlethread") seq_cst7386  ret i8 %ret7387}7388 7389define i16 @test425(ptr %ptr, i16 %val) {7390; PPC64LE-LABEL: test425:7391; PPC64LE:       # %bb.0:7392; PPC64LE-NEXT:  .LBB425_1:7393; PPC64LE-NEXT:    lharx 5, 0, 37394; PPC64LE-NEXT:    nand 6, 4, 57395; PPC64LE-NEXT:    sthcx. 6, 0, 37396; PPC64LE-NEXT:    bne- 0, .LBB425_17397; PPC64LE-NEXT:  # %bb.2:7398; PPC64LE-NEXT:    mr 3, 57399; PPC64LE-NEXT:    blr7400  %ret = atomicrmw nand ptr %ptr, i16 %val syncscope("singlethread") monotonic7401  ret i16 %ret7402}7403 7404define i16 @test426(ptr %ptr, i16 %val) {7405; PPC64LE-LABEL: test426:7406; PPC64LE:       # %bb.0:7407; PPC64LE-NEXT:    mr 5, 37408; PPC64LE-NEXT:  .LBB426_1:7409; PPC64LE-NEXT:    lharx 3, 0, 57410; PPC64LE-NEXT:    nand 6, 4, 37411; PPC64LE-NEXT:    sthcx. 6, 0, 57412; PPC64LE-NEXT:    bne- 0, .LBB426_17413; PPC64LE-NEXT:  # %bb.2:7414; PPC64LE-NEXT:    lwsync7415; PPC64LE-NEXT:    blr7416  %ret = atomicrmw nand ptr %ptr, i16 %val syncscope("singlethread") acquire7417  ret i16 %ret7418}7419 7420define i16 @test427(ptr %ptr, i16 %val) {7421; PPC64LE-LABEL: test427:7422; PPC64LE:       # %bb.0:7423; PPC64LE-NEXT:    lwsync7424; PPC64LE-NEXT:  .LBB427_1:7425; PPC64LE-NEXT:    lharx 5, 0, 37426; PPC64LE-NEXT:    nand 6, 4, 57427; PPC64LE-NEXT:    sthcx. 6, 0, 37428; PPC64LE-NEXT:    bne- 0, .LBB427_17429; PPC64LE-NEXT:  # %bb.2:7430; PPC64LE-NEXT:    mr 3, 57431; PPC64LE-NEXT:    blr7432  %ret = atomicrmw nand ptr %ptr, i16 %val syncscope("singlethread") release7433  ret i16 %ret7434}7435 7436define i16 @test428(ptr %ptr, i16 %val) {7437; PPC64LE-LABEL: test428:7438; PPC64LE:       # %bb.0:7439; PPC64LE-NEXT:    lwsync7440; PPC64LE-NEXT:  .LBB428_1:7441; PPC64LE-NEXT:    lharx 5, 0, 37442; PPC64LE-NEXT:    nand 6, 4, 57443; PPC64LE-NEXT:    sthcx. 6, 0, 37444; PPC64LE-NEXT:    bne- 0, .LBB428_17445; PPC64LE-NEXT:  # %bb.2:7446; PPC64LE-NEXT:    lwsync7447; PPC64LE-NEXT:    mr 3, 57448; PPC64LE-NEXT:    blr7449  %ret = atomicrmw nand ptr %ptr, i16 %val syncscope("singlethread") acq_rel7450  ret i16 %ret7451}7452 7453define i16 @test429(ptr %ptr, i16 %val) {7454; PPC64LE-LABEL: test429:7455; PPC64LE:       # %bb.0:7456; PPC64LE-NEXT:    sync7457; PPC64LE-NEXT:  .LBB429_1:7458; PPC64LE-NEXT:    lharx 5, 0, 37459; PPC64LE-NEXT:    nand 6, 4, 57460; PPC64LE-NEXT:    sthcx. 6, 0, 37461; PPC64LE-NEXT:    bne- 0, .LBB429_17462; PPC64LE-NEXT:  # %bb.2:7463; PPC64LE-NEXT:    lwsync7464; PPC64LE-NEXT:    mr 3, 57465; PPC64LE-NEXT:    blr7466  %ret = atomicrmw nand ptr %ptr, i16 %val syncscope("singlethread") seq_cst7467  ret i16 %ret7468}7469 7470define i32 @test430(ptr %ptr, i32 %val) {7471; PPC64LE-LABEL: test430:7472; PPC64LE:       # %bb.0:7473; PPC64LE-NEXT:  .LBB430_1:7474; PPC64LE-NEXT:    lwarx 5, 0, 37475; PPC64LE-NEXT:    nand 6, 4, 57476; PPC64LE-NEXT:    stwcx. 6, 0, 37477; PPC64LE-NEXT:    bne- 0, .LBB430_17478; PPC64LE-NEXT:  # %bb.2:7479; PPC64LE-NEXT:    mr 3, 57480; PPC64LE-NEXT:    blr7481  %ret = atomicrmw nand ptr %ptr, i32 %val syncscope("singlethread") monotonic7482  ret i32 %ret7483}7484 7485define i32 @test431(ptr %ptr, i32 %val) {7486; PPC64LE-LABEL: test431:7487; PPC64LE:       # %bb.0:7488; PPC64LE-NEXT:    mr 5, 37489; PPC64LE-NEXT:  .LBB431_1:7490; PPC64LE-NEXT:    lwarx 3, 0, 57491; PPC64LE-NEXT:    nand 6, 4, 37492; PPC64LE-NEXT:    stwcx. 6, 0, 57493; PPC64LE-NEXT:    bne- 0, .LBB431_17494; PPC64LE-NEXT:  # %bb.2:7495; PPC64LE-NEXT:    lwsync7496; PPC64LE-NEXT:    blr7497  %ret = atomicrmw nand ptr %ptr, i32 %val syncscope("singlethread") acquire7498  ret i32 %ret7499}7500 7501define i32 @test432(ptr %ptr, i32 %val) {7502; PPC64LE-LABEL: test432:7503; PPC64LE:       # %bb.0:7504; PPC64LE-NEXT:    lwsync7505; PPC64LE-NEXT:  .LBB432_1:7506; PPC64LE-NEXT:    lwarx 5, 0, 37507; PPC64LE-NEXT:    nand 6, 4, 57508; PPC64LE-NEXT:    stwcx. 6, 0, 37509; PPC64LE-NEXT:    bne- 0, .LBB432_17510; PPC64LE-NEXT:  # %bb.2:7511; PPC64LE-NEXT:    mr 3, 57512; PPC64LE-NEXT:    blr7513  %ret = atomicrmw nand ptr %ptr, i32 %val syncscope("singlethread") release7514  ret i32 %ret7515}7516 7517define i32 @test433(ptr %ptr, i32 %val) {7518; PPC64LE-LABEL: test433:7519; PPC64LE:       # %bb.0:7520; PPC64LE-NEXT:    lwsync7521; PPC64LE-NEXT:  .LBB433_1:7522; PPC64LE-NEXT:    lwarx 5, 0, 37523; PPC64LE-NEXT:    nand 6, 4, 57524; PPC64LE-NEXT:    stwcx. 6, 0, 37525; PPC64LE-NEXT:    bne- 0, .LBB433_17526; PPC64LE-NEXT:  # %bb.2:7527; PPC64LE-NEXT:    lwsync7528; PPC64LE-NEXT:    mr 3, 57529; PPC64LE-NEXT:    blr7530  %ret = atomicrmw nand ptr %ptr, i32 %val syncscope("singlethread") acq_rel7531  ret i32 %ret7532}7533 7534define i32 @test434(ptr %ptr, i32 %val) {7535; PPC64LE-LABEL: test434:7536; PPC64LE:       # %bb.0:7537; PPC64LE-NEXT:    sync7538; PPC64LE-NEXT:  .LBB434_1:7539; PPC64LE-NEXT:    lwarx 5, 0, 37540; PPC64LE-NEXT:    nand 6, 4, 57541; PPC64LE-NEXT:    stwcx. 6, 0, 37542; PPC64LE-NEXT:    bne- 0, .LBB434_17543; PPC64LE-NEXT:  # %bb.2:7544; PPC64LE-NEXT:    lwsync7545; PPC64LE-NEXT:    mr 3, 57546; PPC64LE-NEXT:    blr7547  %ret = atomicrmw nand ptr %ptr, i32 %val syncscope("singlethread") seq_cst7548  ret i32 %ret7549}7550 7551define i64 @test435(ptr %ptr, i64 %val) {7552; PPC64LE-LABEL: test435:7553; PPC64LE:       # %bb.0:7554; PPC64LE-NEXT:  .LBB435_1:7555; PPC64LE-NEXT:    ldarx 5, 0, 37556; PPC64LE-NEXT:    nand 6, 4, 57557; PPC64LE-NEXT:    stdcx. 6, 0, 37558; PPC64LE-NEXT:    bne- 0, .LBB435_17559; PPC64LE-NEXT:  # %bb.2:7560; PPC64LE-NEXT:    mr 3, 57561; PPC64LE-NEXT:    blr7562  %ret = atomicrmw nand ptr %ptr, i64 %val syncscope("singlethread") monotonic7563  ret i64 %ret7564}7565 7566define i64 @test436(ptr %ptr, i64 %val) {7567; PPC64LE-LABEL: test436:7568; PPC64LE:       # %bb.0:7569; PPC64LE-NEXT:    mr 5, 37570; PPC64LE-NEXT:  .LBB436_1:7571; PPC64LE-NEXT:    ldarx 3, 0, 57572; PPC64LE-NEXT:    nand 6, 4, 37573; PPC64LE-NEXT:    stdcx. 6, 0, 57574; PPC64LE-NEXT:    bne- 0, .LBB436_17575; PPC64LE-NEXT:  # %bb.2:7576; PPC64LE-NEXT:    lwsync7577; PPC64LE-NEXT:    blr7578  %ret = atomicrmw nand ptr %ptr, i64 %val syncscope("singlethread") acquire7579  ret i64 %ret7580}7581 7582define i64 @test437(ptr %ptr, i64 %val) {7583; PPC64LE-LABEL: test437:7584; PPC64LE:       # %bb.0:7585; PPC64LE-NEXT:    lwsync7586; PPC64LE-NEXT:  .LBB437_1:7587; PPC64LE-NEXT:    ldarx 5, 0, 37588; PPC64LE-NEXT:    nand 6, 4, 57589; PPC64LE-NEXT:    stdcx. 6, 0, 37590; PPC64LE-NEXT:    bne- 0, .LBB437_17591; PPC64LE-NEXT:  # %bb.2:7592; PPC64LE-NEXT:    mr 3, 57593; PPC64LE-NEXT:    blr7594  %ret = atomicrmw nand ptr %ptr, i64 %val syncscope("singlethread") release7595  ret i64 %ret7596}7597 7598define i64 @test438(ptr %ptr, i64 %val) {7599; PPC64LE-LABEL: test438:7600; PPC64LE:       # %bb.0:7601; PPC64LE-NEXT:    lwsync7602; PPC64LE-NEXT:  .LBB438_1:7603; PPC64LE-NEXT:    ldarx 5, 0, 37604; PPC64LE-NEXT:    nand 6, 4, 57605; PPC64LE-NEXT:    stdcx. 6, 0, 37606; PPC64LE-NEXT:    bne- 0, .LBB438_17607; PPC64LE-NEXT:  # %bb.2:7608; PPC64LE-NEXT:    lwsync7609; PPC64LE-NEXT:    mr 3, 57610; PPC64LE-NEXT:    blr7611  %ret = atomicrmw nand ptr %ptr, i64 %val syncscope("singlethread") acq_rel7612  ret i64 %ret7613}7614 7615define i64 @test439(ptr %ptr, i64 %val) {7616; PPC64LE-LABEL: test439:7617; PPC64LE:       # %bb.0:7618; PPC64LE-NEXT:    sync7619; PPC64LE-NEXT:  .LBB439_1:7620; PPC64LE-NEXT:    ldarx 5, 0, 37621; PPC64LE-NEXT:    nand 6, 4, 57622; PPC64LE-NEXT:    stdcx. 6, 0, 37623; PPC64LE-NEXT:    bne- 0, .LBB439_17624; PPC64LE-NEXT:  # %bb.2:7625; PPC64LE-NEXT:    lwsync7626; PPC64LE-NEXT:    mr 3, 57627; PPC64LE-NEXT:    blr7628  %ret = atomicrmw nand ptr %ptr, i64 %val syncscope("singlethread") seq_cst7629  ret i64 %ret7630}7631 7632define i8 @test440(ptr %ptr, i8 %val) {7633; PPC64LE-LABEL: test440:7634; PPC64LE:       # %bb.0:7635; PPC64LE-NEXT:  .LBB440_1:7636; PPC64LE-NEXT:    lbarx 5, 0, 37637; PPC64LE-NEXT:    or 6, 4, 57638; PPC64LE-NEXT:    stbcx. 6, 0, 37639; PPC64LE-NEXT:    bne- 0, .LBB440_17640; PPC64LE-NEXT:  # %bb.2:7641; PPC64LE-NEXT:    mr 3, 57642; PPC64LE-NEXT:    blr7643  %ret = atomicrmw or ptr %ptr, i8 %val syncscope("singlethread") monotonic7644  ret i8 %ret7645}7646 7647define i8 @test441(ptr %ptr, i8 %val) {7648; PPC64LE-LABEL: test441:7649; PPC64LE:       # %bb.0:7650; PPC64LE-NEXT:    mr 5, 37651; PPC64LE-NEXT:  .LBB441_1:7652; PPC64LE-NEXT:    lbarx 3, 0, 57653; PPC64LE-NEXT:    or 6, 4, 37654; PPC64LE-NEXT:    stbcx. 6, 0, 57655; PPC64LE-NEXT:    bne- 0, .LBB441_17656; PPC64LE-NEXT:  # %bb.2:7657; PPC64LE-NEXT:    lwsync7658; PPC64LE-NEXT:    blr7659  %ret = atomicrmw or ptr %ptr, i8 %val syncscope("singlethread") acquire7660  ret i8 %ret7661}7662 7663define i8 @test442(ptr %ptr, i8 %val) {7664; PPC64LE-LABEL: test442:7665; PPC64LE:       # %bb.0:7666; PPC64LE-NEXT:    lwsync7667; PPC64LE-NEXT:  .LBB442_1:7668; PPC64LE-NEXT:    lbarx 5, 0, 37669; PPC64LE-NEXT:    or 6, 4, 57670; PPC64LE-NEXT:    stbcx. 6, 0, 37671; PPC64LE-NEXT:    bne- 0, .LBB442_17672; PPC64LE-NEXT:  # %bb.2:7673; PPC64LE-NEXT:    mr 3, 57674; PPC64LE-NEXT:    blr7675  %ret = atomicrmw or ptr %ptr, i8 %val syncscope("singlethread") release7676  ret i8 %ret7677}7678 7679define i8 @test443(ptr %ptr, i8 %val) {7680; PPC64LE-LABEL: test443:7681; PPC64LE:       # %bb.0:7682; PPC64LE-NEXT:    lwsync7683; PPC64LE-NEXT:  .LBB443_1:7684; PPC64LE-NEXT:    lbarx 5, 0, 37685; PPC64LE-NEXT:    or 6, 4, 57686; PPC64LE-NEXT:    stbcx. 6, 0, 37687; PPC64LE-NEXT:    bne- 0, .LBB443_17688; PPC64LE-NEXT:  # %bb.2:7689; PPC64LE-NEXT:    lwsync7690; PPC64LE-NEXT:    mr 3, 57691; PPC64LE-NEXT:    blr7692  %ret = atomicrmw or ptr %ptr, i8 %val syncscope("singlethread") acq_rel7693  ret i8 %ret7694}7695 7696define i8 @test444(ptr %ptr, i8 %val) {7697; PPC64LE-LABEL: test444:7698; PPC64LE:       # %bb.0:7699; PPC64LE-NEXT:    sync7700; PPC64LE-NEXT:  .LBB444_1:7701; PPC64LE-NEXT:    lbarx 5, 0, 37702; PPC64LE-NEXT:    or 6, 4, 57703; PPC64LE-NEXT:    stbcx. 6, 0, 37704; PPC64LE-NEXT:    bne- 0, .LBB444_17705; PPC64LE-NEXT:  # %bb.2:7706; PPC64LE-NEXT:    lwsync7707; PPC64LE-NEXT:    mr 3, 57708; PPC64LE-NEXT:    blr7709  %ret = atomicrmw or ptr %ptr, i8 %val syncscope("singlethread") seq_cst7710  ret i8 %ret7711}7712 7713define i16 @test445(ptr %ptr, i16 %val) {7714; PPC64LE-LABEL: test445:7715; PPC64LE:       # %bb.0:7716; PPC64LE-NEXT:  .LBB445_1:7717; PPC64LE-NEXT:    lharx 5, 0, 37718; PPC64LE-NEXT:    or 6, 4, 57719; PPC64LE-NEXT:    sthcx. 6, 0, 37720; PPC64LE-NEXT:    bne- 0, .LBB445_17721; PPC64LE-NEXT:  # %bb.2:7722; PPC64LE-NEXT:    mr 3, 57723; PPC64LE-NEXT:    blr7724  %ret = atomicrmw or ptr %ptr, i16 %val syncscope("singlethread") monotonic7725  ret i16 %ret7726}7727 7728define i16 @test446(ptr %ptr, i16 %val) {7729; PPC64LE-LABEL: test446:7730; PPC64LE:       # %bb.0:7731; PPC64LE-NEXT:    mr 5, 37732; PPC64LE-NEXT:  .LBB446_1:7733; PPC64LE-NEXT:    lharx 3, 0, 57734; PPC64LE-NEXT:    or 6, 4, 37735; PPC64LE-NEXT:    sthcx. 6, 0, 57736; PPC64LE-NEXT:    bne- 0, .LBB446_17737; PPC64LE-NEXT:  # %bb.2:7738; PPC64LE-NEXT:    lwsync7739; PPC64LE-NEXT:    blr7740  %ret = atomicrmw or ptr %ptr, i16 %val syncscope("singlethread") acquire7741  ret i16 %ret7742}7743 7744define i16 @test447(ptr %ptr, i16 %val) {7745; PPC64LE-LABEL: test447:7746; PPC64LE:       # %bb.0:7747; PPC64LE-NEXT:    lwsync7748; PPC64LE-NEXT:  .LBB447_1:7749; PPC64LE-NEXT:    lharx 5, 0, 37750; PPC64LE-NEXT:    or 6, 4, 57751; PPC64LE-NEXT:    sthcx. 6, 0, 37752; PPC64LE-NEXT:    bne- 0, .LBB447_17753; PPC64LE-NEXT:  # %bb.2:7754; PPC64LE-NEXT:    mr 3, 57755; PPC64LE-NEXT:    blr7756  %ret = atomicrmw or ptr %ptr, i16 %val syncscope("singlethread") release7757  ret i16 %ret7758}7759 7760define i16 @test448(ptr %ptr, i16 %val) {7761; PPC64LE-LABEL: test448:7762; PPC64LE:       # %bb.0:7763; PPC64LE-NEXT:    lwsync7764; PPC64LE-NEXT:  .LBB448_1:7765; PPC64LE-NEXT:    lharx 5, 0, 37766; PPC64LE-NEXT:    or 6, 4, 57767; PPC64LE-NEXT:    sthcx. 6, 0, 37768; PPC64LE-NEXT:    bne- 0, .LBB448_17769; PPC64LE-NEXT:  # %bb.2:7770; PPC64LE-NEXT:    lwsync7771; PPC64LE-NEXT:    mr 3, 57772; PPC64LE-NEXT:    blr7773  %ret = atomicrmw or ptr %ptr, i16 %val syncscope("singlethread") acq_rel7774  ret i16 %ret7775}7776 7777define i16 @test449(ptr %ptr, i16 %val) {7778; PPC64LE-LABEL: test449:7779; PPC64LE:       # %bb.0:7780; PPC64LE-NEXT:    sync7781; PPC64LE-NEXT:  .LBB449_1:7782; PPC64LE-NEXT:    lharx 5, 0, 37783; PPC64LE-NEXT:    or 6, 4, 57784; PPC64LE-NEXT:    sthcx. 6, 0, 37785; PPC64LE-NEXT:    bne- 0, .LBB449_17786; PPC64LE-NEXT:  # %bb.2:7787; PPC64LE-NEXT:    lwsync7788; PPC64LE-NEXT:    mr 3, 57789; PPC64LE-NEXT:    blr7790  %ret = atomicrmw or ptr %ptr, i16 %val syncscope("singlethread") seq_cst7791  ret i16 %ret7792}7793 7794define i32 @test450(ptr %ptr, i32 %val) {7795; PPC64LE-LABEL: test450:7796; PPC64LE:       # %bb.0:7797; PPC64LE-NEXT:  .LBB450_1:7798; PPC64LE-NEXT:    lwarx 5, 0, 37799; PPC64LE-NEXT:    or 6, 4, 57800; PPC64LE-NEXT:    stwcx. 6, 0, 37801; PPC64LE-NEXT:    bne- 0, .LBB450_17802; PPC64LE-NEXT:  # %bb.2:7803; PPC64LE-NEXT:    mr 3, 57804; PPC64LE-NEXT:    blr7805  %ret = atomicrmw or ptr %ptr, i32 %val syncscope("singlethread") monotonic7806  ret i32 %ret7807}7808 7809define i32 @test451(ptr %ptr, i32 %val) {7810; PPC64LE-LABEL: test451:7811; PPC64LE:       # %bb.0:7812; PPC64LE-NEXT:    mr 5, 37813; PPC64LE-NEXT:  .LBB451_1:7814; PPC64LE-NEXT:    lwarx 3, 0, 57815; PPC64LE-NEXT:    or 6, 4, 37816; PPC64LE-NEXT:    stwcx. 6, 0, 57817; PPC64LE-NEXT:    bne- 0, .LBB451_17818; PPC64LE-NEXT:  # %bb.2:7819; PPC64LE-NEXT:    lwsync7820; PPC64LE-NEXT:    blr7821  %ret = atomicrmw or ptr %ptr, i32 %val syncscope("singlethread") acquire7822  ret i32 %ret7823}7824 7825define i32 @test452(ptr %ptr, i32 %val) {7826; PPC64LE-LABEL: test452:7827; PPC64LE:       # %bb.0:7828; PPC64LE-NEXT:    lwsync7829; PPC64LE-NEXT:  .LBB452_1:7830; PPC64LE-NEXT:    lwarx 5, 0, 37831; PPC64LE-NEXT:    or 6, 4, 57832; PPC64LE-NEXT:    stwcx. 6, 0, 37833; PPC64LE-NEXT:    bne- 0, .LBB452_17834; PPC64LE-NEXT:  # %bb.2:7835; PPC64LE-NEXT:    mr 3, 57836; PPC64LE-NEXT:    blr7837  %ret = atomicrmw or ptr %ptr, i32 %val syncscope("singlethread") release7838  ret i32 %ret7839}7840 7841define i32 @test453(ptr %ptr, i32 %val) {7842; PPC64LE-LABEL: test453:7843; PPC64LE:       # %bb.0:7844; PPC64LE-NEXT:    lwsync7845; PPC64LE-NEXT:  .LBB453_1:7846; PPC64LE-NEXT:    lwarx 5, 0, 37847; PPC64LE-NEXT:    or 6, 4, 57848; PPC64LE-NEXT:    stwcx. 6, 0, 37849; PPC64LE-NEXT:    bne- 0, .LBB453_17850; PPC64LE-NEXT:  # %bb.2:7851; PPC64LE-NEXT:    lwsync7852; PPC64LE-NEXT:    mr 3, 57853; PPC64LE-NEXT:    blr7854  %ret = atomicrmw or ptr %ptr, i32 %val syncscope("singlethread") acq_rel7855  ret i32 %ret7856}7857 7858define i32 @test454(ptr %ptr, i32 %val) {7859; PPC64LE-LABEL: test454:7860; PPC64LE:       # %bb.0:7861; PPC64LE-NEXT:    sync7862; PPC64LE-NEXT:  .LBB454_1:7863; PPC64LE-NEXT:    lwarx 5, 0, 37864; PPC64LE-NEXT:    or 6, 4, 57865; PPC64LE-NEXT:    stwcx. 6, 0, 37866; PPC64LE-NEXT:    bne- 0, .LBB454_17867; PPC64LE-NEXT:  # %bb.2:7868; PPC64LE-NEXT:    lwsync7869; PPC64LE-NEXT:    mr 3, 57870; PPC64LE-NEXT:    blr7871  %ret = atomicrmw or ptr %ptr, i32 %val syncscope("singlethread") seq_cst7872  ret i32 %ret7873}7874 7875define i64 @test455(ptr %ptr, i64 %val) {7876; PPC64LE-LABEL: test455:7877; PPC64LE:       # %bb.0:7878; PPC64LE-NEXT:  .LBB455_1:7879; PPC64LE-NEXT:    ldarx 5, 0, 37880; PPC64LE-NEXT:    or 6, 4, 57881; PPC64LE-NEXT:    stdcx. 6, 0, 37882; PPC64LE-NEXT:    bne- 0, .LBB455_17883; PPC64LE-NEXT:  # %bb.2:7884; PPC64LE-NEXT:    mr 3, 57885; PPC64LE-NEXT:    blr7886  %ret = atomicrmw or ptr %ptr, i64 %val syncscope("singlethread") monotonic7887  ret i64 %ret7888}7889 7890define i64 @test456(ptr %ptr, i64 %val) {7891; PPC64LE-LABEL: test456:7892; PPC64LE:       # %bb.0:7893; PPC64LE-NEXT:    mr 5, 37894; PPC64LE-NEXT:  .LBB456_1:7895; PPC64LE-NEXT:    ldarx 3, 0, 57896; PPC64LE-NEXT:    or 6, 4, 37897; PPC64LE-NEXT:    stdcx. 6, 0, 57898; PPC64LE-NEXT:    bne- 0, .LBB456_17899; PPC64LE-NEXT:  # %bb.2:7900; PPC64LE-NEXT:    lwsync7901; PPC64LE-NEXT:    blr7902  %ret = atomicrmw or ptr %ptr, i64 %val syncscope("singlethread") acquire7903  ret i64 %ret7904}7905 7906define i64 @test457(ptr %ptr, i64 %val) {7907; PPC64LE-LABEL: test457:7908; PPC64LE:       # %bb.0:7909; PPC64LE-NEXT:    lwsync7910; PPC64LE-NEXT:  .LBB457_1:7911; PPC64LE-NEXT:    ldarx 5, 0, 37912; PPC64LE-NEXT:    or 6, 4, 57913; PPC64LE-NEXT:    stdcx. 6, 0, 37914; PPC64LE-NEXT:    bne- 0, .LBB457_17915; PPC64LE-NEXT:  # %bb.2:7916; PPC64LE-NEXT:    mr 3, 57917; PPC64LE-NEXT:    blr7918  %ret = atomicrmw or ptr %ptr, i64 %val syncscope("singlethread") release7919  ret i64 %ret7920}7921 7922define i64 @test458(ptr %ptr, i64 %val) {7923; PPC64LE-LABEL: test458:7924; PPC64LE:       # %bb.0:7925; PPC64LE-NEXT:    lwsync7926; PPC64LE-NEXT:  .LBB458_1:7927; PPC64LE-NEXT:    ldarx 5, 0, 37928; PPC64LE-NEXT:    or 6, 4, 57929; PPC64LE-NEXT:    stdcx. 6, 0, 37930; PPC64LE-NEXT:    bne- 0, .LBB458_17931; PPC64LE-NEXT:  # %bb.2:7932; PPC64LE-NEXT:    lwsync7933; PPC64LE-NEXT:    mr 3, 57934; PPC64LE-NEXT:    blr7935  %ret = atomicrmw or ptr %ptr, i64 %val syncscope("singlethread") acq_rel7936  ret i64 %ret7937}7938 7939define i64 @test459(ptr %ptr, i64 %val) {7940; PPC64LE-LABEL: test459:7941; PPC64LE:       # %bb.0:7942; PPC64LE-NEXT:    sync7943; PPC64LE-NEXT:  .LBB459_1:7944; PPC64LE-NEXT:    ldarx 5, 0, 37945; PPC64LE-NEXT:    or 6, 4, 57946; PPC64LE-NEXT:    stdcx. 6, 0, 37947; PPC64LE-NEXT:    bne- 0, .LBB459_17948; PPC64LE-NEXT:  # %bb.2:7949; PPC64LE-NEXT:    lwsync7950; PPC64LE-NEXT:    mr 3, 57951; PPC64LE-NEXT:    blr7952  %ret = atomicrmw or ptr %ptr, i64 %val syncscope("singlethread") seq_cst7953  ret i64 %ret7954}7955 7956define i8 @test460(ptr %ptr, i8 %val) {7957; PPC64LE-LABEL: test460:7958; PPC64LE:       # %bb.0:7959; PPC64LE-NEXT:  .LBB460_1:7960; PPC64LE-NEXT:    lbarx 5, 0, 37961; PPC64LE-NEXT:    xor 6, 4, 57962; PPC64LE-NEXT:    stbcx. 6, 0, 37963; PPC64LE-NEXT:    bne- 0, .LBB460_17964; PPC64LE-NEXT:  # %bb.2:7965; PPC64LE-NEXT:    mr 3, 57966; PPC64LE-NEXT:    blr7967  %ret = atomicrmw xor ptr %ptr, i8 %val syncscope("singlethread") monotonic7968  ret i8 %ret7969}7970 7971define i8 @test461(ptr %ptr, i8 %val) {7972; PPC64LE-LABEL: test461:7973; PPC64LE:       # %bb.0:7974; PPC64LE-NEXT:    mr 5, 37975; PPC64LE-NEXT:  .LBB461_1:7976; PPC64LE-NEXT:    lbarx 3, 0, 57977; PPC64LE-NEXT:    xor 6, 4, 37978; PPC64LE-NEXT:    stbcx. 6, 0, 57979; PPC64LE-NEXT:    bne- 0, .LBB461_17980; PPC64LE-NEXT:  # %bb.2:7981; PPC64LE-NEXT:    lwsync7982; PPC64LE-NEXT:    blr7983  %ret = atomicrmw xor ptr %ptr, i8 %val syncscope("singlethread") acquire7984  ret i8 %ret7985}7986 7987define i8 @test462(ptr %ptr, i8 %val) {7988; PPC64LE-LABEL: test462:7989; PPC64LE:       # %bb.0:7990; PPC64LE-NEXT:    lwsync7991; PPC64LE-NEXT:  .LBB462_1:7992; PPC64LE-NEXT:    lbarx 5, 0, 37993; PPC64LE-NEXT:    xor 6, 4, 57994; PPC64LE-NEXT:    stbcx. 6, 0, 37995; PPC64LE-NEXT:    bne- 0, .LBB462_17996; PPC64LE-NEXT:  # %bb.2:7997; PPC64LE-NEXT:    mr 3, 57998; PPC64LE-NEXT:    blr7999  %ret = atomicrmw xor ptr %ptr, i8 %val syncscope("singlethread") release8000  ret i8 %ret8001}8002 8003define i8 @test463(ptr %ptr, i8 %val) {8004; PPC64LE-LABEL: test463:8005; PPC64LE:       # %bb.0:8006; PPC64LE-NEXT:    lwsync8007; PPC64LE-NEXT:  .LBB463_1:8008; PPC64LE-NEXT:    lbarx 5, 0, 38009; PPC64LE-NEXT:    xor 6, 4, 58010; PPC64LE-NEXT:    stbcx. 6, 0, 38011; PPC64LE-NEXT:    bne- 0, .LBB463_18012; PPC64LE-NEXT:  # %bb.2:8013; PPC64LE-NEXT:    lwsync8014; PPC64LE-NEXT:    mr 3, 58015; PPC64LE-NEXT:    blr8016  %ret = atomicrmw xor ptr %ptr, i8 %val syncscope("singlethread") acq_rel8017  ret i8 %ret8018}8019 8020define i8 @test464(ptr %ptr, i8 %val) {8021; PPC64LE-LABEL: test464:8022; PPC64LE:       # %bb.0:8023; PPC64LE-NEXT:    sync8024; PPC64LE-NEXT:  .LBB464_1:8025; PPC64LE-NEXT:    lbarx 5, 0, 38026; PPC64LE-NEXT:    xor 6, 4, 58027; PPC64LE-NEXT:    stbcx. 6, 0, 38028; PPC64LE-NEXT:    bne- 0, .LBB464_18029; PPC64LE-NEXT:  # %bb.2:8030; PPC64LE-NEXT:    lwsync8031; PPC64LE-NEXT:    mr 3, 58032; PPC64LE-NEXT:    blr8033  %ret = atomicrmw xor ptr %ptr, i8 %val syncscope("singlethread") seq_cst8034  ret i8 %ret8035}8036 8037define i16 @test465(ptr %ptr, i16 %val) {8038; PPC64LE-LABEL: test465:8039; PPC64LE:       # %bb.0:8040; PPC64LE-NEXT:  .LBB465_1:8041; PPC64LE-NEXT:    lharx 5, 0, 38042; PPC64LE-NEXT:    xor 6, 4, 58043; PPC64LE-NEXT:    sthcx. 6, 0, 38044; PPC64LE-NEXT:    bne- 0, .LBB465_18045; PPC64LE-NEXT:  # %bb.2:8046; PPC64LE-NEXT:    mr 3, 58047; PPC64LE-NEXT:    blr8048  %ret = atomicrmw xor ptr %ptr, i16 %val syncscope("singlethread") monotonic8049  ret i16 %ret8050}8051 8052define i16 @test466(ptr %ptr, i16 %val) {8053; PPC64LE-LABEL: test466:8054; PPC64LE:       # %bb.0:8055; PPC64LE-NEXT:    mr 5, 38056; PPC64LE-NEXT:  .LBB466_1:8057; PPC64LE-NEXT:    lharx 3, 0, 58058; PPC64LE-NEXT:    xor 6, 4, 38059; PPC64LE-NEXT:    sthcx. 6, 0, 58060; PPC64LE-NEXT:    bne- 0, .LBB466_18061; PPC64LE-NEXT:  # %bb.2:8062; PPC64LE-NEXT:    lwsync8063; PPC64LE-NEXT:    blr8064  %ret = atomicrmw xor ptr %ptr, i16 %val syncscope("singlethread") acquire8065  ret i16 %ret8066}8067 8068define i16 @test467(ptr %ptr, i16 %val) {8069; PPC64LE-LABEL: test467:8070; PPC64LE:       # %bb.0:8071; PPC64LE-NEXT:    lwsync8072; PPC64LE-NEXT:  .LBB467_1:8073; PPC64LE-NEXT:    lharx 5, 0, 38074; PPC64LE-NEXT:    xor 6, 4, 58075; PPC64LE-NEXT:    sthcx. 6, 0, 38076; PPC64LE-NEXT:    bne- 0, .LBB467_18077; PPC64LE-NEXT:  # %bb.2:8078; PPC64LE-NEXT:    mr 3, 58079; PPC64LE-NEXT:    blr8080  %ret = atomicrmw xor ptr %ptr, i16 %val syncscope("singlethread") release8081  ret i16 %ret8082}8083 8084define i16 @test468(ptr %ptr, i16 %val) {8085; PPC64LE-LABEL: test468:8086; PPC64LE:       # %bb.0:8087; PPC64LE-NEXT:    lwsync8088; PPC64LE-NEXT:  .LBB468_1:8089; PPC64LE-NEXT:    lharx 5, 0, 38090; PPC64LE-NEXT:    xor 6, 4, 58091; PPC64LE-NEXT:    sthcx. 6, 0, 38092; PPC64LE-NEXT:    bne- 0, .LBB468_18093; PPC64LE-NEXT:  # %bb.2:8094; PPC64LE-NEXT:    lwsync8095; PPC64LE-NEXT:    mr 3, 58096; PPC64LE-NEXT:    blr8097  %ret = atomicrmw xor ptr %ptr, i16 %val syncscope("singlethread") acq_rel8098  ret i16 %ret8099}8100 8101define i16 @test469(ptr %ptr, i16 %val) {8102; PPC64LE-LABEL: test469:8103; PPC64LE:       # %bb.0:8104; PPC64LE-NEXT:    sync8105; PPC64LE-NEXT:  .LBB469_1:8106; PPC64LE-NEXT:    lharx 5, 0, 38107; PPC64LE-NEXT:    xor 6, 4, 58108; PPC64LE-NEXT:    sthcx. 6, 0, 38109; PPC64LE-NEXT:    bne- 0, .LBB469_18110; PPC64LE-NEXT:  # %bb.2:8111; PPC64LE-NEXT:    lwsync8112; PPC64LE-NEXT:    mr 3, 58113; PPC64LE-NEXT:    blr8114  %ret = atomicrmw xor ptr %ptr, i16 %val syncscope("singlethread") seq_cst8115  ret i16 %ret8116}8117 8118define i32 @test470(ptr %ptr, i32 %val) {8119; PPC64LE-LABEL: test470:8120; PPC64LE:       # %bb.0:8121; PPC64LE-NEXT:  .LBB470_1:8122; PPC64LE-NEXT:    lwarx 5, 0, 38123; PPC64LE-NEXT:    xor 6, 4, 58124; PPC64LE-NEXT:    stwcx. 6, 0, 38125; PPC64LE-NEXT:    bne- 0, .LBB470_18126; PPC64LE-NEXT:  # %bb.2:8127; PPC64LE-NEXT:    mr 3, 58128; PPC64LE-NEXT:    blr8129  %ret = atomicrmw xor ptr %ptr, i32 %val syncscope("singlethread") monotonic8130  ret i32 %ret8131}8132 8133define i32 @test471(ptr %ptr, i32 %val) {8134; PPC64LE-LABEL: test471:8135; PPC64LE:       # %bb.0:8136; PPC64LE-NEXT:    mr 5, 38137; PPC64LE-NEXT:  .LBB471_1:8138; PPC64LE-NEXT:    lwarx 3, 0, 58139; PPC64LE-NEXT:    xor 6, 4, 38140; PPC64LE-NEXT:    stwcx. 6, 0, 58141; PPC64LE-NEXT:    bne- 0, .LBB471_18142; PPC64LE-NEXT:  # %bb.2:8143; PPC64LE-NEXT:    lwsync8144; PPC64LE-NEXT:    blr8145  %ret = atomicrmw xor ptr %ptr, i32 %val syncscope("singlethread") acquire8146  ret i32 %ret8147}8148 8149define i32 @test472(ptr %ptr, i32 %val) {8150; PPC64LE-LABEL: test472:8151; PPC64LE:       # %bb.0:8152; PPC64LE-NEXT:    lwsync8153; PPC64LE-NEXT:  .LBB472_1:8154; PPC64LE-NEXT:    lwarx 5, 0, 38155; PPC64LE-NEXT:    xor 6, 4, 58156; PPC64LE-NEXT:    stwcx. 6, 0, 38157; PPC64LE-NEXT:    bne- 0, .LBB472_18158; PPC64LE-NEXT:  # %bb.2:8159; PPC64LE-NEXT:    mr 3, 58160; PPC64LE-NEXT:    blr8161  %ret = atomicrmw xor ptr %ptr, i32 %val syncscope("singlethread") release8162  ret i32 %ret8163}8164 8165define i32 @test473(ptr %ptr, i32 %val) {8166; PPC64LE-LABEL: test473:8167; PPC64LE:       # %bb.0:8168; PPC64LE-NEXT:    lwsync8169; PPC64LE-NEXT:  .LBB473_1:8170; PPC64LE-NEXT:    lwarx 5, 0, 38171; PPC64LE-NEXT:    xor 6, 4, 58172; PPC64LE-NEXT:    stwcx. 6, 0, 38173; PPC64LE-NEXT:    bne- 0, .LBB473_18174; PPC64LE-NEXT:  # %bb.2:8175; PPC64LE-NEXT:    lwsync8176; PPC64LE-NEXT:    mr 3, 58177; PPC64LE-NEXT:    blr8178  %ret = atomicrmw xor ptr %ptr, i32 %val syncscope("singlethread") acq_rel8179  ret i32 %ret8180}8181 8182define i32 @test474(ptr %ptr, i32 %val) {8183; PPC64LE-LABEL: test474:8184; PPC64LE:       # %bb.0:8185; PPC64LE-NEXT:    sync8186; PPC64LE-NEXT:  .LBB474_1:8187; PPC64LE-NEXT:    lwarx 5, 0, 38188; PPC64LE-NEXT:    xor 6, 4, 58189; PPC64LE-NEXT:    stwcx. 6, 0, 38190; PPC64LE-NEXT:    bne- 0, .LBB474_18191; PPC64LE-NEXT:  # %bb.2:8192; PPC64LE-NEXT:    lwsync8193; PPC64LE-NEXT:    mr 3, 58194; PPC64LE-NEXT:    blr8195  %ret = atomicrmw xor ptr %ptr, i32 %val syncscope("singlethread") seq_cst8196  ret i32 %ret8197}8198 8199define i64 @test475(ptr %ptr, i64 %val) {8200; PPC64LE-LABEL: test475:8201; PPC64LE:       # %bb.0:8202; PPC64LE-NEXT:  .LBB475_1:8203; PPC64LE-NEXT:    ldarx 5, 0, 38204; PPC64LE-NEXT:    xor 6, 4, 58205; PPC64LE-NEXT:    stdcx. 6, 0, 38206; PPC64LE-NEXT:    bne- 0, .LBB475_18207; PPC64LE-NEXT:  # %bb.2:8208; PPC64LE-NEXT:    mr 3, 58209; PPC64LE-NEXT:    blr8210  %ret = atomicrmw xor ptr %ptr, i64 %val syncscope("singlethread") monotonic8211  ret i64 %ret8212}8213 8214define i64 @test476(ptr %ptr, i64 %val) {8215; PPC64LE-LABEL: test476:8216; PPC64LE:       # %bb.0:8217; PPC64LE-NEXT:    mr 5, 38218; PPC64LE-NEXT:  .LBB476_1:8219; PPC64LE-NEXT:    ldarx 3, 0, 58220; PPC64LE-NEXT:    xor 6, 4, 38221; PPC64LE-NEXT:    stdcx. 6, 0, 58222; PPC64LE-NEXT:    bne- 0, .LBB476_18223; PPC64LE-NEXT:  # %bb.2:8224; PPC64LE-NEXT:    lwsync8225; PPC64LE-NEXT:    blr8226  %ret = atomicrmw xor ptr %ptr, i64 %val syncscope("singlethread") acquire8227  ret i64 %ret8228}8229 8230define i64 @test477(ptr %ptr, i64 %val) {8231; PPC64LE-LABEL: test477:8232; PPC64LE:       # %bb.0:8233; PPC64LE-NEXT:    lwsync8234; PPC64LE-NEXT:  .LBB477_1:8235; PPC64LE-NEXT:    ldarx 5, 0, 38236; PPC64LE-NEXT:    xor 6, 4, 58237; PPC64LE-NEXT:    stdcx. 6, 0, 38238; PPC64LE-NEXT:    bne- 0, .LBB477_18239; PPC64LE-NEXT:  # %bb.2:8240; PPC64LE-NEXT:    mr 3, 58241; PPC64LE-NEXT:    blr8242  %ret = atomicrmw xor ptr %ptr, i64 %val syncscope("singlethread") release8243  ret i64 %ret8244}8245 8246define i64 @test478(ptr %ptr, i64 %val) {8247; PPC64LE-LABEL: test478:8248; PPC64LE:       # %bb.0:8249; PPC64LE-NEXT:    lwsync8250; PPC64LE-NEXT:  .LBB478_1:8251; PPC64LE-NEXT:    ldarx 5, 0, 38252; PPC64LE-NEXT:    xor 6, 4, 58253; PPC64LE-NEXT:    stdcx. 6, 0, 38254; PPC64LE-NEXT:    bne- 0, .LBB478_18255; PPC64LE-NEXT:  # %bb.2:8256; PPC64LE-NEXT:    lwsync8257; PPC64LE-NEXT:    mr 3, 58258; PPC64LE-NEXT:    blr8259  %ret = atomicrmw xor ptr %ptr, i64 %val syncscope("singlethread") acq_rel8260  ret i64 %ret8261}8262 8263define i64 @test479(ptr %ptr, i64 %val) {8264; PPC64LE-LABEL: test479:8265; PPC64LE:       # %bb.0:8266; PPC64LE-NEXT:    sync8267; PPC64LE-NEXT:  .LBB479_1:8268; PPC64LE-NEXT:    ldarx 5, 0, 38269; PPC64LE-NEXT:    xor 6, 4, 58270; PPC64LE-NEXT:    stdcx. 6, 0, 38271; PPC64LE-NEXT:    bne- 0, .LBB479_18272; PPC64LE-NEXT:  # %bb.2:8273; PPC64LE-NEXT:    lwsync8274; PPC64LE-NEXT:    mr 3, 58275; PPC64LE-NEXT:    blr8276  %ret = atomicrmw xor ptr %ptr, i64 %val syncscope("singlethread") seq_cst8277  ret i64 %ret8278}8279 8280define i8 @test480(ptr %ptr, i8 %val) {8281; PPC64LE-LABEL: test480:8282; PPC64LE:       # %bb.0:8283; PPC64LE-NEXT:    extsb 5, 48284; PPC64LE-NEXT:  .LBB480_1:8285; PPC64LE-NEXT:    lbarx 4, 0, 38286; PPC64LE-NEXT:    extsb 6, 48287; PPC64LE-NEXT:    cmpw 6, 58288; PPC64LE-NEXT:    bgt 0, .LBB480_38289; PPC64LE-NEXT:  # %bb.2:8290; PPC64LE-NEXT:    stbcx. 5, 0, 38291; PPC64LE-NEXT:    bne- 0, .LBB480_18292; PPC64LE-NEXT:  .LBB480_3:8293; PPC64LE-NEXT:    mr 3, 48294; PPC64LE-NEXT:    blr8295  %ret = atomicrmw max ptr %ptr, i8 %val syncscope("singlethread") monotonic8296  ret i8 %ret8297}8298 8299define i8 @test481(ptr %ptr, i8 %val) {8300; PPC64LE-LABEL: test481:8301; PPC64LE:       # %bb.0:8302; PPC64LE-NEXT:    extsb 5, 48303; PPC64LE-NEXT:  .LBB481_1:8304; PPC64LE-NEXT:    lbarx 4, 0, 38305; PPC64LE-NEXT:    extsb 6, 48306; PPC64LE-NEXT:    cmpw 6, 58307; PPC64LE-NEXT:    bgt 0, .LBB481_38308; PPC64LE-NEXT:  # %bb.2:8309; PPC64LE-NEXT:    stbcx. 5, 0, 38310; PPC64LE-NEXT:    bne- 0, .LBB481_18311; PPC64LE-NEXT:  .LBB481_3:8312; PPC64LE-NEXT:    lwsync8313; PPC64LE-NEXT:    mr 3, 48314; PPC64LE-NEXT:    blr8315  %ret = atomicrmw max ptr %ptr, i8 %val syncscope("singlethread") acquire8316  ret i8 %ret8317}8318 8319define i8 @test482(ptr %ptr, i8 %val) {8320; PPC64LE-LABEL: test482:8321; PPC64LE:       # %bb.0:8322; PPC64LE-NEXT:    lwsync8323; PPC64LE-NEXT:    extsb 5, 48324; PPC64LE-NEXT:  .LBB482_1:8325; PPC64LE-NEXT:    lbarx 4, 0, 38326; PPC64LE-NEXT:    extsb 6, 48327; PPC64LE-NEXT:    cmpw 6, 58328; PPC64LE-NEXT:    bgt 0, .LBB482_38329; PPC64LE-NEXT:  # %bb.2:8330; PPC64LE-NEXT:    stbcx. 5, 0, 38331; PPC64LE-NEXT:    bne- 0, .LBB482_18332; PPC64LE-NEXT:  .LBB482_3:8333; PPC64LE-NEXT:    mr 3, 48334; PPC64LE-NEXT:    blr8335  %ret = atomicrmw max ptr %ptr, i8 %val syncscope("singlethread") release8336  ret i8 %ret8337}8338 8339define i8 @test483(ptr %ptr, i8 %val) {8340; PPC64LE-LABEL: test483:8341; PPC64LE:       # %bb.0:8342; PPC64LE-NEXT:    lwsync8343; PPC64LE-NEXT:    extsb 5, 48344; PPC64LE-NEXT:  .LBB483_1:8345; PPC64LE-NEXT:    lbarx 4, 0, 38346; PPC64LE-NEXT:    extsb 6, 48347; PPC64LE-NEXT:    cmpw 6, 58348; PPC64LE-NEXT:    bgt 0, .LBB483_38349; PPC64LE-NEXT:  # %bb.2:8350; PPC64LE-NEXT:    stbcx. 5, 0, 38351; PPC64LE-NEXT:    bne- 0, .LBB483_18352; PPC64LE-NEXT:  .LBB483_3:8353; PPC64LE-NEXT:    lwsync8354; PPC64LE-NEXT:    mr 3, 48355; PPC64LE-NEXT:    blr8356  %ret = atomicrmw max ptr %ptr, i8 %val syncscope("singlethread") acq_rel8357  ret i8 %ret8358}8359 8360define i8 @test484(ptr %ptr, i8 %val) {8361; PPC64LE-LABEL: test484:8362; PPC64LE:       # %bb.0:8363; PPC64LE-NEXT:    sync8364; PPC64LE-NEXT:    extsb 5, 48365; PPC64LE-NEXT:  .LBB484_1:8366; PPC64LE-NEXT:    lbarx 4, 0, 38367; PPC64LE-NEXT:    extsb 6, 48368; PPC64LE-NEXT:    cmpw 6, 58369; PPC64LE-NEXT:    bgt 0, .LBB484_38370; PPC64LE-NEXT:  # %bb.2:8371; PPC64LE-NEXT:    stbcx. 5, 0, 38372; PPC64LE-NEXT:    bne- 0, .LBB484_18373; PPC64LE-NEXT:  .LBB484_3:8374; PPC64LE-NEXT:    lwsync8375; PPC64LE-NEXT:    mr 3, 48376; PPC64LE-NEXT:    blr8377  %ret = atomicrmw max ptr %ptr, i8 %val syncscope("singlethread") seq_cst8378  ret i8 %ret8379}8380 8381define i16 @test485(ptr %ptr, i16 %val) {8382; PPC64LE-LABEL: test485:8383; PPC64LE:       # %bb.0:8384; PPC64LE-NEXT:    extsh 5, 48385; PPC64LE-NEXT:  .LBB485_1:8386; PPC64LE-NEXT:    lharx 4, 0, 38387; PPC64LE-NEXT:    extsh 6, 48388; PPC64LE-NEXT:    cmpw 6, 58389; PPC64LE-NEXT:    bgt 0, .LBB485_38390; PPC64LE-NEXT:  # %bb.2:8391; PPC64LE-NEXT:    sthcx. 5, 0, 38392; PPC64LE-NEXT:    bne- 0, .LBB485_18393; PPC64LE-NEXT:  .LBB485_3:8394; PPC64LE-NEXT:    mr 3, 48395; PPC64LE-NEXT:    blr8396  %ret = atomicrmw max ptr %ptr, i16 %val syncscope("singlethread") monotonic8397  ret i16 %ret8398}8399 8400define i16 @test486(ptr %ptr, i16 %val) {8401; PPC64LE-LABEL: test486:8402; PPC64LE:       # %bb.0:8403; PPC64LE-NEXT:    extsh 5, 48404; PPC64LE-NEXT:  .LBB486_1:8405; PPC64LE-NEXT:    lharx 4, 0, 38406; PPC64LE-NEXT:    extsh 6, 48407; PPC64LE-NEXT:    cmpw 6, 58408; PPC64LE-NEXT:    bgt 0, .LBB486_38409; PPC64LE-NEXT:  # %bb.2:8410; PPC64LE-NEXT:    sthcx. 5, 0, 38411; PPC64LE-NEXT:    bne- 0, .LBB486_18412; PPC64LE-NEXT:  .LBB486_3:8413; PPC64LE-NEXT:    lwsync8414; PPC64LE-NEXT:    mr 3, 48415; PPC64LE-NEXT:    blr8416  %ret = atomicrmw max ptr %ptr, i16 %val syncscope("singlethread") acquire8417  ret i16 %ret8418}8419 8420define i16 @test487(ptr %ptr, i16 %val) {8421; PPC64LE-LABEL: test487:8422; PPC64LE:       # %bb.0:8423; PPC64LE-NEXT:    lwsync8424; PPC64LE-NEXT:    extsh 5, 48425; PPC64LE-NEXT:  .LBB487_1:8426; PPC64LE-NEXT:    lharx 4, 0, 38427; PPC64LE-NEXT:    extsh 6, 48428; PPC64LE-NEXT:    cmpw 6, 58429; PPC64LE-NEXT:    bgt 0, .LBB487_38430; PPC64LE-NEXT:  # %bb.2:8431; PPC64LE-NEXT:    sthcx. 5, 0, 38432; PPC64LE-NEXT:    bne- 0, .LBB487_18433; PPC64LE-NEXT:  .LBB487_3:8434; PPC64LE-NEXT:    mr 3, 48435; PPC64LE-NEXT:    blr8436  %ret = atomicrmw max ptr %ptr, i16 %val syncscope("singlethread") release8437  ret i16 %ret8438}8439 8440define i16 @test488(ptr %ptr, i16 %val) {8441; PPC64LE-LABEL: test488:8442; PPC64LE:       # %bb.0:8443; PPC64LE-NEXT:    lwsync8444; PPC64LE-NEXT:    extsh 5, 48445; PPC64LE-NEXT:  .LBB488_1:8446; PPC64LE-NEXT:    lharx 4, 0, 38447; PPC64LE-NEXT:    extsh 6, 48448; PPC64LE-NEXT:    cmpw 6, 58449; PPC64LE-NEXT:    bgt 0, .LBB488_38450; PPC64LE-NEXT:  # %bb.2:8451; PPC64LE-NEXT:    sthcx. 5, 0, 38452; PPC64LE-NEXT:    bne- 0, .LBB488_18453; PPC64LE-NEXT:  .LBB488_3:8454; PPC64LE-NEXT:    lwsync8455; PPC64LE-NEXT:    mr 3, 48456; PPC64LE-NEXT:    blr8457  %ret = atomicrmw max ptr %ptr, i16 %val syncscope("singlethread") acq_rel8458  ret i16 %ret8459}8460 8461define i16 @test489(ptr %ptr, i16 %val) {8462; PPC64LE-LABEL: test489:8463; PPC64LE:       # %bb.0:8464; PPC64LE-NEXT:    sync8465; PPC64LE-NEXT:    extsh 5, 48466; PPC64LE-NEXT:  .LBB489_1:8467; PPC64LE-NEXT:    lharx 4, 0, 38468; PPC64LE-NEXT:    extsh 6, 48469; PPC64LE-NEXT:    cmpw 6, 58470; PPC64LE-NEXT:    bgt 0, .LBB489_38471; PPC64LE-NEXT:  # %bb.2:8472; PPC64LE-NEXT:    sthcx. 5, 0, 38473; PPC64LE-NEXT:    bne- 0, .LBB489_18474; PPC64LE-NEXT:  .LBB489_3:8475; PPC64LE-NEXT:    lwsync8476; PPC64LE-NEXT:    mr 3, 48477; PPC64LE-NEXT:    blr8478  %ret = atomicrmw max ptr %ptr, i16 %val syncscope("singlethread") seq_cst8479  ret i16 %ret8480}8481 8482define i32 @test490(ptr %ptr, i32 %val) {8483; PPC64LE-LABEL: test490:8484; PPC64LE:       # %bb.0:8485; PPC64LE-NEXT:  .LBB490_1:8486; PPC64LE-NEXT:    lwarx 5, 0, 38487; PPC64LE-NEXT:    cmpw 5, 48488; PPC64LE-NEXT:    bgt 0, .LBB490_38489; PPC64LE-NEXT:  # %bb.2:8490; PPC64LE-NEXT:    stwcx. 4, 0, 38491; PPC64LE-NEXT:    bne- 0, .LBB490_18492; PPC64LE-NEXT:  .LBB490_3:8493; PPC64LE-NEXT:    mr 3, 58494; PPC64LE-NEXT:    blr8495  %ret = atomicrmw max ptr %ptr, i32 %val syncscope("singlethread") monotonic8496  ret i32 %ret8497}8498 8499define i32 @test491(ptr %ptr, i32 %val) {8500; PPC64LE-LABEL: test491:8501; PPC64LE:       # %bb.0:8502; PPC64LE-NEXT:    mr 5, 38503; PPC64LE-NEXT:  .LBB491_1:8504; PPC64LE-NEXT:    lwarx 3, 0, 58505; PPC64LE-NEXT:    cmpw 3, 48506; PPC64LE-NEXT:    bgt 0, .LBB491_38507; PPC64LE-NEXT:  # %bb.2:8508; PPC64LE-NEXT:    stwcx. 4, 0, 58509; PPC64LE-NEXT:    bne- 0, .LBB491_18510; PPC64LE-NEXT:  .LBB491_3:8511; PPC64LE-NEXT:    lwsync8512; PPC64LE-NEXT:    blr8513  %ret = atomicrmw max ptr %ptr, i32 %val syncscope("singlethread") acquire8514  ret i32 %ret8515}8516 8517define i32 @test492(ptr %ptr, i32 %val) {8518; PPC64LE-LABEL: test492:8519; PPC64LE:       # %bb.0:8520; PPC64LE-NEXT:    lwsync8521; PPC64LE-NEXT:  .LBB492_1:8522; PPC64LE-NEXT:    lwarx 5, 0, 38523; PPC64LE-NEXT:    cmpw 5, 48524; PPC64LE-NEXT:    bgt 0, .LBB492_38525; PPC64LE-NEXT:  # %bb.2:8526; PPC64LE-NEXT:    stwcx. 4, 0, 38527; PPC64LE-NEXT:    bne- 0, .LBB492_18528; PPC64LE-NEXT:  .LBB492_3:8529; PPC64LE-NEXT:    mr 3, 58530; PPC64LE-NEXT:    blr8531  %ret = atomicrmw max ptr %ptr, i32 %val syncscope("singlethread") release8532  ret i32 %ret8533}8534 8535define i32 @test493(ptr %ptr, i32 %val) {8536; PPC64LE-LABEL: test493:8537; PPC64LE:       # %bb.0:8538; PPC64LE-NEXT:    lwsync8539; PPC64LE-NEXT:  .LBB493_1:8540; PPC64LE-NEXT:    lwarx 5, 0, 38541; PPC64LE-NEXT:    cmpw 5, 48542; PPC64LE-NEXT:    bgt 0, .LBB493_38543; PPC64LE-NEXT:  # %bb.2:8544; PPC64LE-NEXT:    stwcx. 4, 0, 38545; PPC64LE-NEXT:    bne- 0, .LBB493_18546; PPC64LE-NEXT:  .LBB493_3:8547; PPC64LE-NEXT:    lwsync8548; PPC64LE-NEXT:    mr 3, 58549; PPC64LE-NEXT:    blr8550  %ret = atomicrmw max ptr %ptr, i32 %val syncscope("singlethread") acq_rel8551  ret i32 %ret8552}8553 8554define i32 @test494(ptr %ptr, i32 %val) {8555; PPC64LE-LABEL: test494:8556; PPC64LE:       # %bb.0:8557; PPC64LE-NEXT:    sync8558; PPC64LE-NEXT:  .LBB494_1:8559; PPC64LE-NEXT:    lwarx 5, 0, 38560; PPC64LE-NEXT:    cmpw 5, 48561; PPC64LE-NEXT:    bgt 0, .LBB494_38562; PPC64LE-NEXT:  # %bb.2:8563; PPC64LE-NEXT:    stwcx. 4, 0, 38564; PPC64LE-NEXT:    bne- 0, .LBB494_18565; PPC64LE-NEXT:  .LBB494_3:8566; PPC64LE-NEXT:    lwsync8567; PPC64LE-NEXT:    mr 3, 58568; PPC64LE-NEXT:    blr8569  %ret = atomicrmw max ptr %ptr, i32 %val syncscope("singlethread") seq_cst8570  ret i32 %ret8571}8572 8573define i64 @test495(ptr %ptr, i64 %val) {8574; PPC64LE-LABEL: test495:8575; PPC64LE:       # %bb.0:8576; PPC64LE-NEXT:  .LBB495_1:8577; PPC64LE-NEXT:    ldarx 5, 0, 38578; PPC64LE-NEXT:    cmpd 5, 48579; PPC64LE-NEXT:    bgt 0, .LBB495_38580; PPC64LE-NEXT:  # %bb.2:8581; PPC64LE-NEXT:    stdcx. 4, 0, 38582; PPC64LE-NEXT:    bne- 0, .LBB495_18583; PPC64LE-NEXT:  .LBB495_3:8584; PPC64LE-NEXT:    mr 3, 58585; PPC64LE-NEXT:    blr8586  %ret = atomicrmw max ptr %ptr, i64 %val syncscope("singlethread") monotonic8587  ret i64 %ret8588}8589 8590define i64 @test496(ptr %ptr, i64 %val) {8591; PPC64LE-LABEL: test496:8592; PPC64LE:       # %bb.0:8593; PPC64LE-NEXT:    mr 5, 38594; PPC64LE-NEXT:  .LBB496_1:8595; PPC64LE-NEXT:    ldarx 3, 0, 58596; PPC64LE-NEXT:    cmpd 3, 48597; PPC64LE-NEXT:    bgt 0, .LBB496_38598; PPC64LE-NEXT:  # %bb.2:8599; PPC64LE-NEXT:    stdcx. 4, 0, 58600; PPC64LE-NEXT:    bne- 0, .LBB496_18601; PPC64LE-NEXT:  .LBB496_3:8602; PPC64LE-NEXT:    lwsync8603; PPC64LE-NEXT:    blr8604  %ret = atomicrmw max ptr %ptr, i64 %val syncscope("singlethread") acquire8605  ret i64 %ret8606}8607 8608define i64 @test497(ptr %ptr, i64 %val) {8609; PPC64LE-LABEL: test497:8610; PPC64LE:       # %bb.0:8611; PPC64LE-NEXT:    lwsync8612; PPC64LE-NEXT:  .LBB497_1:8613; PPC64LE-NEXT:    ldarx 5, 0, 38614; PPC64LE-NEXT:    cmpd 5, 48615; PPC64LE-NEXT:    bgt 0, .LBB497_38616; PPC64LE-NEXT:  # %bb.2:8617; PPC64LE-NEXT:    stdcx. 4, 0, 38618; PPC64LE-NEXT:    bne- 0, .LBB497_18619; PPC64LE-NEXT:  .LBB497_3:8620; PPC64LE-NEXT:    mr 3, 58621; PPC64LE-NEXT:    blr8622  %ret = atomicrmw max ptr %ptr, i64 %val syncscope("singlethread") release8623  ret i64 %ret8624}8625 8626define i64 @test498(ptr %ptr, i64 %val) {8627; PPC64LE-LABEL: test498:8628; PPC64LE:       # %bb.0:8629; PPC64LE-NEXT:    lwsync8630; PPC64LE-NEXT:  .LBB498_1:8631; PPC64LE-NEXT:    ldarx 5, 0, 38632; PPC64LE-NEXT:    cmpd 5, 48633; PPC64LE-NEXT:    bgt 0, .LBB498_38634; PPC64LE-NEXT:  # %bb.2:8635; PPC64LE-NEXT:    stdcx. 4, 0, 38636; PPC64LE-NEXT:    bne- 0, .LBB498_18637; PPC64LE-NEXT:  .LBB498_3:8638; PPC64LE-NEXT:    lwsync8639; PPC64LE-NEXT:    mr 3, 58640; PPC64LE-NEXT:    blr8641  %ret = atomicrmw max ptr %ptr, i64 %val syncscope("singlethread") acq_rel8642  ret i64 %ret8643}8644 8645define i64 @test499(ptr %ptr, i64 %val) {8646; PPC64LE-LABEL: test499:8647; PPC64LE:       # %bb.0:8648; PPC64LE-NEXT:    sync8649; PPC64LE-NEXT:  .LBB499_1:8650; PPC64LE-NEXT:    ldarx 5, 0, 38651; PPC64LE-NEXT:    cmpd 5, 48652; PPC64LE-NEXT:    bgt 0, .LBB499_38653; PPC64LE-NEXT:  # %bb.2:8654; PPC64LE-NEXT:    stdcx. 4, 0, 38655; PPC64LE-NEXT:    bne- 0, .LBB499_18656; PPC64LE-NEXT:  .LBB499_3:8657; PPC64LE-NEXT:    lwsync8658; PPC64LE-NEXT:    mr 3, 58659; PPC64LE-NEXT:    blr8660  %ret = atomicrmw max ptr %ptr, i64 %val syncscope("singlethread") seq_cst8661  ret i64 %ret8662}8663 8664define i8 @test500(ptr %ptr, i8 %val) {8665; PPC64LE-LABEL: test500:8666; PPC64LE:       # %bb.0:8667; PPC64LE-NEXT:    extsb 5, 48668; PPC64LE-NEXT:  .LBB500_1:8669; PPC64LE-NEXT:    lbarx 4, 0, 38670; PPC64LE-NEXT:    extsb 6, 48671; PPC64LE-NEXT:    cmpw 6, 58672; PPC64LE-NEXT:    blt 0, .LBB500_38673; PPC64LE-NEXT:  # %bb.2:8674; PPC64LE-NEXT:    stbcx. 5, 0, 38675; PPC64LE-NEXT:    bne- 0, .LBB500_18676; PPC64LE-NEXT:  .LBB500_3:8677; PPC64LE-NEXT:    mr 3, 48678; PPC64LE-NEXT:    blr8679  %ret = atomicrmw min ptr %ptr, i8 %val syncscope("singlethread") monotonic8680  ret i8 %ret8681}8682 8683define i8 @test501(ptr %ptr, i8 %val) {8684; PPC64LE-LABEL: test501:8685; PPC64LE:       # %bb.0:8686; PPC64LE-NEXT:    extsb 5, 48687; PPC64LE-NEXT:  .LBB501_1:8688; PPC64LE-NEXT:    lbarx 4, 0, 38689; PPC64LE-NEXT:    extsb 6, 48690; PPC64LE-NEXT:    cmpw 6, 58691; PPC64LE-NEXT:    blt 0, .LBB501_38692; PPC64LE-NEXT:  # %bb.2:8693; PPC64LE-NEXT:    stbcx. 5, 0, 38694; PPC64LE-NEXT:    bne- 0, .LBB501_18695; PPC64LE-NEXT:  .LBB501_3:8696; PPC64LE-NEXT:    lwsync8697; PPC64LE-NEXT:    mr 3, 48698; PPC64LE-NEXT:    blr8699  %ret = atomicrmw min ptr %ptr, i8 %val syncscope("singlethread") acquire8700  ret i8 %ret8701}8702 8703define i8 @test502(ptr %ptr, i8 %val) {8704; PPC64LE-LABEL: test502:8705; PPC64LE:       # %bb.0:8706; PPC64LE-NEXT:    lwsync8707; PPC64LE-NEXT:    extsb 5, 48708; PPC64LE-NEXT:  .LBB502_1:8709; PPC64LE-NEXT:    lbarx 4, 0, 38710; PPC64LE-NEXT:    extsb 6, 48711; PPC64LE-NEXT:    cmpw 6, 58712; PPC64LE-NEXT:    blt 0, .LBB502_38713; PPC64LE-NEXT:  # %bb.2:8714; PPC64LE-NEXT:    stbcx. 5, 0, 38715; PPC64LE-NEXT:    bne- 0, .LBB502_18716; PPC64LE-NEXT:  .LBB502_3:8717; PPC64LE-NEXT:    mr 3, 48718; PPC64LE-NEXT:    blr8719  %ret = atomicrmw min ptr %ptr, i8 %val syncscope("singlethread") release8720  ret i8 %ret8721}8722 8723define i8 @test503(ptr %ptr, i8 %val) {8724; PPC64LE-LABEL: test503:8725; PPC64LE:       # %bb.0:8726; PPC64LE-NEXT:    lwsync8727; PPC64LE-NEXT:    extsb 5, 48728; PPC64LE-NEXT:  .LBB503_1:8729; PPC64LE-NEXT:    lbarx 4, 0, 38730; PPC64LE-NEXT:    extsb 6, 48731; PPC64LE-NEXT:    cmpw 6, 58732; PPC64LE-NEXT:    blt 0, .LBB503_38733; PPC64LE-NEXT:  # %bb.2:8734; PPC64LE-NEXT:    stbcx. 5, 0, 38735; PPC64LE-NEXT:    bne- 0, .LBB503_18736; PPC64LE-NEXT:  .LBB503_3:8737; PPC64LE-NEXT:    lwsync8738; PPC64LE-NEXT:    mr 3, 48739; PPC64LE-NEXT:    blr8740  %ret = atomicrmw min ptr %ptr, i8 %val syncscope("singlethread") acq_rel8741  ret i8 %ret8742}8743 8744define i8 @test504(ptr %ptr, i8 %val) {8745; PPC64LE-LABEL: test504:8746; PPC64LE:       # %bb.0:8747; PPC64LE-NEXT:    sync8748; PPC64LE-NEXT:    extsb 5, 48749; PPC64LE-NEXT:  .LBB504_1:8750; PPC64LE-NEXT:    lbarx 4, 0, 38751; PPC64LE-NEXT:    extsb 6, 48752; PPC64LE-NEXT:    cmpw 6, 58753; PPC64LE-NEXT:    blt 0, .LBB504_38754; PPC64LE-NEXT:  # %bb.2:8755; PPC64LE-NEXT:    stbcx. 5, 0, 38756; PPC64LE-NEXT:    bne- 0, .LBB504_18757; PPC64LE-NEXT:  .LBB504_3:8758; PPC64LE-NEXT:    lwsync8759; PPC64LE-NEXT:    mr 3, 48760; PPC64LE-NEXT:    blr8761  %ret = atomicrmw min ptr %ptr, i8 %val syncscope("singlethread") seq_cst8762  ret i8 %ret8763}8764 8765define i16 @test505(ptr %ptr, i16 %val) {8766; PPC64LE-LABEL: test505:8767; PPC64LE:       # %bb.0:8768; PPC64LE-NEXT:    extsh 5, 48769; PPC64LE-NEXT:  .LBB505_1:8770; PPC64LE-NEXT:    lharx 4, 0, 38771; PPC64LE-NEXT:    extsh 6, 48772; PPC64LE-NEXT:    cmpw 6, 58773; PPC64LE-NEXT:    blt 0, .LBB505_38774; PPC64LE-NEXT:  # %bb.2:8775; PPC64LE-NEXT:    sthcx. 5, 0, 38776; PPC64LE-NEXT:    bne- 0, .LBB505_18777; PPC64LE-NEXT:  .LBB505_3:8778; PPC64LE-NEXT:    mr 3, 48779; PPC64LE-NEXT:    blr8780  %ret = atomicrmw min ptr %ptr, i16 %val syncscope("singlethread") monotonic8781  ret i16 %ret8782}8783 8784define i16 @test506(ptr %ptr, i16 %val) {8785; PPC64LE-LABEL: test506:8786; PPC64LE:       # %bb.0:8787; PPC64LE-NEXT:    extsh 5, 48788; PPC64LE-NEXT:  .LBB506_1:8789; PPC64LE-NEXT:    lharx 4, 0, 38790; PPC64LE-NEXT:    extsh 6, 48791; PPC64LE-NEXT:    cmpw 6, 58792; PPC64LE-NEXT:    blt 0, .LBB506_38793; PPC64LE-NEXT:  # %bb.2:8794; PPC64LE-NEXT:    sthcx. 5, 0, 38795; PPC64LE-NEXT:    bne- 0, .LBB506_18796; PPC64LE-NEXT:  .LBB506_3:8797; PPC64LE-NEXT:    lwsync8798; PPC64LE-NEXT:    mr 3, 48799; PPC64LE-NEXT:    blr8800  %ret = atomicrmw min ptr %ptr, i16 %val syncscope("singlethread") acquire8801  ret i16 %ret8802}8803 8804define i16 @test507(ptr %ptr, i16 %val) {8805; PPC64LE-LABEL: test507:8806; PPC64LE:       # %bb.0:8807; PPC64LE-NEXT:    lwsync8808; PPC64LE-NEXT:    extsh 5, 48809; PPC64LE-NEXT:  .LBB507_1:8810; PPC64LE-NEXT:    lharx 4, 0, 38811; PPC64LE-NEXT:    extsh 6, 48812; PPC64LE-NEXT:    cmpw 6, 58813; PPC64LE-NEXT:    blt 0, .LBB507_38814; PPC64LE-NEXT:  # %bb.2:8815; PPC64LE-NEXT:    sthcx. 5, 0, 38816; PPC64LE-NEXT:    bne- 0, .LBB507_18817; PPC64LE-NEXT:  .LBB507_3:8818; PPC64LE-NEXT:    mr 3, 48819; PPC64LE-NEXT:    blr8820  %ret = atomicrmw min ptr %ptr, i16 %val syncscope("singlethread") release8821  ret i16 %ret8822}8823 8824define i16 @test508(ptr %ptr, i16 %val) {8825; PPC64LE-LABEL: test508:8826; PPC64LE:       # %bb.0:8827; PPC64LE-NEXT:    lwsync8828; PPC64LE-NEXT:    extsh 5, 48829; PPC64LE-NEXT:  .LBB508_1:8830; PPC64LE-NEXT:    lharx 4, 0, 38831; PPC64LE-NEXT:    extsh 6, 48832; PPC64LE-NEXT:    cmpw 6, 58833; PPC64LE-NEXT:    blt 0, .LBB508_38834; PPC64LE-NEXT:  # %bb.2:8835; PPC64LE-NEXT:    sthcx. 5, 0, 38836; PPC64LE-NEXT:    bne- 0, .LBB508_18837; PPC64LE-NEXT:  .LBB508_3:8838; PPC64LE-NEXT:    lwsync8839; PPC64LE-NEXT:    mr 3, 48840; PPC64LE-NEXT:    blr8841  %ret = atomicrmw min ptr %ptr, i16 %val syncscope("singlethread") acq_rel8842  ret i16 %ret8843}8844 8845define i16 @test509(ptr %ptr, i16 %val) {8846; PPC64LE-LABEL: test509:8847; PPC64LE:       # %bb.0:8848; PPC64LE-NEXT:    sync8849; PPC64LE-NEXT:    extsh 5, 48850; PPC64LE-NEXT:  .LBB509_1:8851; PPC64LE-NEXT:    lharx 4, 0, 38852; PPC64LE-NEXT:    extsh 6, 48853; PPC64LE-NEXT:    cmpw 6, 58854; PPC64LE-NEXT:    blt 0, .LBB509_38855; PPC64LE-NEXT:  # %bb.2:8856; PPC64LE-NEXT:    sthcx. 5, 0, 38857; PPC64LE-NEXT:    bne- 0, .LBB509_18858; PPC64LE-NEXT:  .LBB509_3:8859; PPC64LE-NEXT:    lwsync8860; PPC64LE-NEXT:    mr 3, 48861; PPC64LE-NEXT:    blr8862  %ret = atomicrmw min ptr %ptr, i16 %val syncscope("singlethread") seq_cst8863  ret i16 %ret8864}8865 8866define i32 @test510(ptr %ptr, i32 %val) {8867; PPC64LE-LABEL: test510:8868; PPC64LE:       # %bb.0:8869; PPC64LE-NEXT:  .LBB510_1:8870; PPC64LE-NEXT:    lwarx 5, 0, 38871; PPC64LE-NEXT:    cmpw 5, 48872; PPC64LE-NEXT:    blt 0, .LBB510_38873; PPC64LE-NEXT:  # %bb.2:8874; PPC64LE-NEXT:    stwcx. 4, 0, 38875; PPC64LE-NEXT:    bne- 0, .LBB510_18876; PPC64LE-NEXT:  .LBB510_3:8877; PPC64LE-NEXT:    mr 3, 58878; PPC64LE-NEXT:    blr8879  %ret = atomicrmw min ptr %ptr, i32 %val syncscope("singlethread") monotonic8880  ret i32 %ret8881}8882 8883define i32 @test511(ptr %ptr, i32 %val) {8884; PPC64LE-LABEL: test511:8885; PPC64LE:       # %bb.0:8886; PPC64LE-NEXT:    mr 5, 38887; PPC64LE-NEXT:  .LBB511_1:8888; PPC64LE-NEXT:    lwarx 3, 0, 58889; PPC64LE-NEXT:    cmpw 3, 48890; PPC64LE-NEXT:    blt 0, .LBB511_38891; PPC64LE-NEXT:  # %bb.2:8892; PPC64LE-NEXT:    stwcx. 4, 0, 58893; PPC64LE-NEXT:    bne- 0, .LBB511_18894; PPC64LE-NEXT:  .LBB511_3:8895; PPC64LE-NEXT:    lwsync8896; PPC64LE-NEXT:    blr8897  %ret = atomicrmw min ptr %ptr, i32 %val syncscope("singlethread") acquire8898  ret i32 %ret8899}8900 8901define i32 @test512(ptr %ptr, i32 %val) {8902; PPC64LE-LABEL: test512:8903; PPC64LE:       # %bb.0:8904; PPC64LE-NEXT:    lwsync8905; PPC64LE-NEXT:  .LBB512_1:8906; PPC64LE-NEXT:    lwarx 5, 0, 38907; PPC64LE-NEXT:    cmpw 5, 48908; PPC64LE-NEXT:    blt 0, .LBB512_38909; PPC64LE-NEXT:  # %bb.2:8910; PPC64LE-NEXT:    stwcx. 4, 0, 38911; PPC64LE-NEXT:    bne- 0, .LBB512_18912; PPC64LE-NEXT:  .LBB512_3:8913; PPC64LE-NEXT:    mr 3, 58914; PPC64LE-NEXT:    blr8915  %ret = atomicrmw min ptr %ptr, i32 %val syncscope("singlethread") release8916  ret i32 %ret8917}8918 8919define i32 @test513(ptr %ptr, i32 %val) {8920; PPC64LE-LABEL: test513:8921; PPC64LE:       # %bb.0:8922; PPC64LE-NEXT:    lwsync8923; PPC64LE-NEXT:  .LBB513_1:8924; PPC64LE-NEXT:    lwarx 5, 0, 38925; PPC64LE-NEXT:    cmpw 5, 48926; PPC64LE-NEXT:    blt 0, .LBB513_38927; PPC64LE-NEXT:  # %bb.2:8928; PPC64LE-NEXT:    stwcx. 4, 0, 38929; PPC64LE-NEXT:    bne- 0, .LBB513_18930; PPC64LE-NEXT:  .LBB513_3:8931; PPC64LE-NEXT:    lwsync8932; PPC64LE-NEXT:    mr 3, 58933; PPC64LE-NEXT:    blr8934  %ret = atomicrmw min ptr %ptr, i32 %val syncscope("singlethread") acq_rel8935  ret i32 %ret8936}8937 8938define i32 @test514(ptr %ptr, i32 %val) {8939; PPC64LE-LABEL: test514:8940; PPC64LE:       # %bb.0:8941; PPC64LE-NEXT:    sync8942; PPC64LE-NEXT:  .LBB514_1:8943; PPC64LE-NEXT:    lwarx 5, 0, 38944; PPC64LE-NEXT:    cmpw 5, 48945; PPC64LE-NEXT:    blt 0, .LBB514_38946; PPC64LE-NEXT:  # %bb.2:8947; PPC64LE-NEXT:    stwcx. 4, 0, 38948; PPC64LE-NEXT:    bne- 0, .LBB514_18949; PPC64LE-NEXT:  .LBB514_3:8950; PPC64LE-NEXT:    lwsync8951; PPC64LE-NEXT:    mr 3, 58952; PPC64LE-NEXT:    blr8953  %ret = atomicrmw min ptr %ptr, i32 %val syncscope("singlethread") seq_cst8954  ret i32 %ret8955}8956 8957define i64 @test515(ptr %ptr, i64 %val) {8958; PPC64LE-LABEL: test515:8959; PPC64LE:       # %bb.0:8960; PPC64LE-NEXT:  .LBB515_1:8961; PPC64LE-NEXT:    ldarx 5, 0, 38962; PPC64LE-NEXT:    cmpd 5, 48963; PPC64LE-NEXT:    blt 0, .LBB515_38964; PPC64LE-NEXT:  # %bb.2:8965; PPC64LE-NEXT:    stdcx. 4, 0, 38966; PPC64LE-NEXT:    bne- 0, .LBB515_18967; PPC64LE-NEXT:  .LBB515_3:8968; PPC64LE-NEXT:    mr 3, 58969; PPC64LE-NEXT:    blr8970  %ret = atomicrmw min ptr %ptr, i64 %val syncscope("singlethread") monotonic8971  ret i64 %ret8972}8973 8974define i64 @test516(ptr %ptr, i64 %val) {8975; PPC64LE-LABEL: test516:8976; PPC64LE:       # %bb.0:8977; PPC64LE-NEXT:    mr 5, 38978; PPC64LE-NEXT:  .LBB516_1:8979; PPC64LE-NEXT:    ldarx 3, 0, 58980; PPC64LE-NEXT:    cmpd 3, 48981; PPC64LE-NEXT:    blt 0, .LBB516_38982; PPC64LE-NEXT:  # %bb.2:8983; PPC64LE-NEXT:    stdcx. 4, 0, 58984; PPC64LE-NEXT:    bne- 0, .LBB516_18985; PPC64LE-NEXT:  .LBB516_3:8986; PPC64LE-NEXT:    lwsync8987; PPC64LE-NEXT:    blr8988  %ret = atomicrmw min ptr %ptr, i64 %val syncscope("singlethread") acquire8989  ret i64 %ret8990}8991 8992define i64 @test517(ptr %ptr, i64 %val) {8993; PPC64LE-LABEL: test517:8994; PPC64LE:       # %bb.0:8995; PPC64LE-NEXT:    lwsync8996; PPC64LE-NEXT:  .LBB517_1:8997; PPC64LE-NEXT:    ldarx 5, 0, 38998; PPC64LE-NEXT:    cmpd 5, 48999; PPC64LE-NEXT:    blt 0, .LBB517_39000; PPC64LE-NEXT:  # %bb.2:9001; PPC64LE-NEXT:    stdcx. 4, 0, 39002; PPC64LE-NEXT:    bne- 0, .LBB517_19003; PPC64LE-NEXT:  .LBB517_3:9004; PPC64LE-NEXT:    mr 3, 59005; PPC64LE-NEXT:    blr9006  %ret = atomicrmw min ptr %ptr, i64 %val syncscope("singlethread") release9007  ret i64 %ret9008}9009 9010define i64 @test518(ptr %ptr, i64 %val) {9011; PPC64LE-LABEL: test518:9012; PPC64LE:       # %bb.0:9013; PPC64LE-NEXT:    lwsync9014; PPC64LE-NEXT:  .LBB518_1:9015; PPC64LE-NEXT:    ldarx 5, 0, 39016; PPC64LE-NEXT:    cmpd 5, 49017; PPC64LE-NEXT:    blt 0, .LBB518_39018; PPC64LE-NEXT:  # %bb.2:9019; PPC64LE-NEXT:    stdcx. 4, 0, 39020; PPC64LE-NEXT:    bne- 0, .LBB518_19021; PPC64LE-NEXT:  .LBB518_3:9022; PPC64LE-NEXT:    lwsync9023; PPC64LE-NEXT:    mr 3, 59024; PPC64LE-NEXT:    blr9025  %ret = atomicrmw min ptr %ptr, i64 %val syncscope("singlethread") acq_rel9026  ret i64 %ret9027}9028 9029define i64 @test519(ptr %ptr, i64 %val) {9030; PPC64LE-LABEL: test519:9031; PPC64LE:       # %bb.0:9032; PPC64LE-NEXT:    sync9033; PPC64LE-NEXT:  .LBB519_1:9034; PPC64LE-NEXT:    ldarx 5, 0, 39035; PPC64LE-NEXT:    cmpd 5, 49036; PPC64LE-NEXT:    blt 0, .LBB519_39037; PPC64LE-NEXT:  # %bb.2:9038; PPC64LE-NEXT:    stdcx. 4, 0, 39039; PPC64LE-NEXT:    bne- 0, .LBB519_19040; PPC64LE-NEXT:  .LBB519_3:9041; PPC64LE-NEXT:    lwsync9042; PPC64LE-NEXT:    mr 3, 59043; PPC64LE-NEXT:    blr9044  %ret = atomicrmw min ptr %ptr, i64 %val syncscope("singlethread") seq_cst9045  ret i64 %ret9046}9047 9048define i8 @test520(ptr %ptr, i8 %val) {9049; PPC64LE-LABEL: test520:9050; PPC64LE:       # %bb.0:9051; PPC64LE-NEXT:  .LBB520_1:9052; PPC64LE-NEXT:    lbarx 5, 0, 39053; PPC64LE-NEXT:    cmplw 5, 49054; PPC64LE-NEXT:    bgt 0, .LBB520_39055; PPC64LE-NEXT:  # %bb.2:9056; PPC64LE-NEXT:    stbcx. 4, 0, 39057; PPC64LE-NEXT:    bne- 0, .LBB520_19058; PPC64LE-NEXT:  .LBB520_3:9059; PPC64LE-NEXT:    mr 3, 59060; PPC64LE-NEXT:    blr9061  %ret = atomicrmw umax ptr %ptr, i8 %val syncscope("singlethread") monotonic9062  ret i8 %ret9063}9064 9065define i8 @test521(ptr %ptr, i8 %val) {9066; PPC64LE-LABEL: test521:9067; PPC64LE:       # %bb.0:9068; PPC64LE-NEXT:    mr 5, 39069; PPC64LE-NEXT:  .LBB521_1:9070; PPC64LE-NEXT:    lbarx 3, 0, 59071; PPC64LE-NEXT:    cmplw 3, 49072; PPC64LE-NEXT:    bgt 0, .LBB521_39073; PPC64LE-NEXT:  # %bb.2:9074; PPC64LE-NEXT:    stbcx. 4, 0, 59075; PPC64LE-NEXT:    bne- 0, .LBB521_19076; PPC64LE-NEXT:  .LBB521_3:9077; PPC64LE-NEXT:    lwsync9078; PPC64LE-NEXT:    blr9079  %ret = atomicrmw umax ptr %ptr, i8 %val syncscope("singlethread") acquire9080  ret i8 %ret9081}9082 9083define i8 @test522(ptr %ptr, i8 %val) {9084; PPC64LE-LABEL: test522:9085; PPC64LE:       # %bb.0:9086; PPC64LE-NEXT:    lwsync9087; PPC64LE-NEXT:  .LBB522_1:9088; PPC64LE-NEXT:    lbarx 5, 0, 39089; PPC64LE-NEXT:    cmplw 5, 49090; PPC64LE-NEXT:    bgt 0, .LBB522_39091; PPC64LE-NEXT:  # %bb.2:9092; PPC64LE-NEXT:    stbcx. 4, 0, 39093; PPC64LE-NEXT:    bne- 0, .LBB522_19094; PPC64LE-NEXT:  .LBB522_3:9095; PPC64LE-NEXT:    mr 3, 59096; PPC64LE-NEXT:    blr9097  %ret = atomicrmw umax ptr %ptr, i8 %val syncscope("singlethread") release9098  ret i8 %ret9099}9100 9101define i8 @test523(ptr %ptr, i8 %val) {9102; PPC64LE-LABEL: test523:9103; PPC64LE:       # %bb.0:9104; PPC64LE-NEXT:    lwsync9105; PPC64LE-NEXT:  .LBB523_1:9106; PPC64LE-NEXT:    lbarx 5, 0, 39107; PPC64LE-NEXT:    cmplw 5, 49108; PPC64LE-NEXT:    bgt 0, .LBB523_39109; PPC64LE-NEXT:  # %bb.2:9110; PPC64LE-NEXT:    stbcx. 4, 0, 39111; PPC64LE-NEXT:    bne- 0, .LBB523_19112; PPC64LE-NEXT:  .LBB523_3:9113; PPC64LE-NEXT:    lwsync9114; PPC64LE-NEXT:    mr 3, 59115; PPC64LE-NEXT:    blr9116  %ret = atomicrmw umax ptr %ptr, i8 %val syncscope("singlethread") acq_rel9117  ret i8 %ret9118}9119 9120define i8 @test524(ptr %ptr, i8 %val) {9121; PPC64LE-LABEL: test524:9122; PPC64LE:       # %bb.0:9123; PPC64LE-NEXT:    sync9124; PPC64LE-NEXT:  .LBB524_1:9125; PPC64LE-NEXT:    lbarx 5, 0, 39126; PPC64LE-NEXT:    cmplw 5, 49127; PPC64LE-NEXT:    bgt 0, .LBB524_39128; PPC64LE-NEXT:  # %bb.2:9129; PPC64LE-NEXT:    stbcx. 4, 0, 39130; PPC64LE-NEXT:    bne- 0, .LBB524_19131; PPC64LE-NEXT:  .LBB524_3:9132; PPC64LE-NEXT:    lwsync9133; PPC64LE-NEXT:    mr 3, 59134; PPC64LE-NEXT:    blr9135  %ret = atomicrmw umax ptr %ptr, i8 %val syncscope("singlethread") seq_cst9136  ret i8 %ret9137}9138 9139define i16 @test525(ptr %ptr, i16 %val) {9140; PPC64LE-LABEL: test525:9141; PPC64LE:       # %bb.0:9142; PPC64LE-NEXT:  .LBB525_1:9143; PPC64LE-NEXT:    lharx 5, 0, 39144; PPC64LE-NEXT:    cmplw 5, 49145; PPC64LE-NEXT:    bgt 0, .LBB525_39146; PPC64LE-NEXT:  # %bb.2:9147; PPC64LE-NEXT:    sthcx. 4, 0, 39148; PPC64LE-NEXT:    bne- 0, .LBB525_19149; PPC64LE-NEXT:  .LBB525_3:9150; PPC64LE-NEXT:    mr 3, 59151; PPC64LE-NEXT:    blr9152  %ret = atomicrmw umax ptr %ptr, i16 %val syncscope("singlethread") monotonic9153  ret i16 %ret9154}9155 9156define i16 @test526(ptr %ptr, i16 %val) {9157; PPC64LE-LABEL: test526:9158; PPC64LE:       # %bb.0:9159; PPC64LE-NEXT:    mr 5, 39160; PPC64LE-NEXT:  .LBB526_1:9161; PPC64LE-NEXT:    lharx 3, 0, 59162; PPC64LE-NEXT:    cmplw 3, 49163; PPC64LE-NEXT:    bgt 0, .LBB526_39164; PPC64LE-NEXT:  # %bb.2:9165; PPC64LE-NEXT:    sthcx. 4, 0, 59166; PPC64LE-NEXT:    bne- 0, .LBB526_19167; PPC64LE-NEXT:  .LBB526_3:9168; PPC64LE-NEXT:    lwsync9169; PPC64LE-NEXT:    blr9170  %ret = atomicrmw umax ptr %ptr, i16 %val syncscope("singlethread") acquire9171  ret i16 %ret9172}9173 9174define i16 @test527(ptr %ptr, i16 %val) {9175; PPC64LE-LABEL: test527:9176; PPC64LE:       # %bb.0:9177; PPC64LE-NEXT:    lwsync9178; PPC64LE-NEXT:  .LBB527_1:9179; PPC64LE-NEXT:    lharx 5, 0, 39180; PPC64LE-NEXT:    cmplw 5, 49181; PPC64LE-NEXT:    bgt 0, .LBB527_39182; PPC64LE-NEXT:  # %bb.2:9183; PPC64LE-NEXT:    sthcx. 4, 0, 39184; PPC64LE-NEXT:    bne- 0, .LBB527_19185; PPC64LE-NEXT:  .LBB527_3:9186; PPC64LE-NEXT:    mr 3, 59187; PPC64LE-NEXT:    blr9188  %ret = atomicrmw umax ptr %ptr, i16 %val syncscope("singlethread") release9189  ret i16 %ret9190}9191 9192define i16 @test528(ptr %ptr, i16 %val) {9193; PPC64LE-LABEL: test528:9194; PPC64LE:       # %bb.0:9195; PPC64LE-NEXT:    lwsync9196; PPC64LE-NEXT:  .LBB528_1:9197; PPC64LE-NEXT:    lharx 5, 0, 39198; PPC64LE-NEXT:    cmplw 5, 49199; PPC64LE-NEXT:    bgt 0, .LBB528_39200; PPC64LE-NEXT:  # %bb.2:9201; PPC64LE-NEXT:    sthcx. 4, 0, 39202; PPC64LE-NEXT:    bne- 0, .LBB528_19203; PPC64LE-NEXT:  .LBB528_3:9204; PPC64LE-NEXT:    lwsync9205; PPC64LE-NEXT:    mr 3, 59206; PPC64LE-NEXT:    blr9207  %ret = atomicrmw umax ptr %ptr, i16 %val syncscope("singlethread") acq_rel9208  ret i16 %ret9209}9210 9211define i16 @test529(ptr %ptr, i16 %val) {9212; PPC64LE-LABEL: test529:9213; PPC64LE:       # %bb.0:9214; PPC64LE-NEXT:    sync9215; PPC64LE-NEXT:  .LBB529_1:9216; PPC64LE-NEXT:    lharx 5, 0, 39217; PPC64LE-NEXT:    cmplw 5, 49218; PPC64LE-NEXT:    bgt 0, .LBB529_39219; PPC64LE-NEXT:  # %bb.2:9220; PPC64LE-NEXT:    sthcx. 4, 0, 39221; PPC64LE-NEXT:    bne- 0, .LBB529_19222; PPC64LE-NEXT:  .LBB529_3:9223; PPC64LE-NEXT:    lwsync9224; PPC64LE-NEXT:    mr 3, 59225; PPC64LE-NEXT:    blr9226  %ret = atomicrmw umax ptr %ptr, i16 %val syncscope("singlethread") seq_cst9227  ret i16 %ret9228}9229 9230define i32 @test530(ptr %ptr, i32 %val) {9231; PPC64LE-LABEL: test530:9232; PPC64LE:       # %bb.0:9233; PPC64LE-NEXT:  .LBB530_1:9234; PPC64LE-NEXT:    lwarx 5, 0, 39235; PPC64LE-NEXT:    cmplw 5, 49236; PPC64LE-NEXT:    bgt 0, .LBB530_39237; PPC64LE-NEXT:  # %bb.2:9238; PPC64LE-NEXT:    stwcx. 4, 0, 39239; PPC64LE-NEXT:    bne- 0, .LBB530_19240; PPC64LE-NEXT:  .LBB530_3:9241; PPC64LE-NEXT:    mr 3, 59242; PPC64LE-NEXT:    blr9243  %ret = atomicrmw umax ptr %ptr, i32 %val syncscope("singlethread") monotonic9244  ret i32 %ret9245}9246 9247define i32 @test531(ptr %ptr, i32 %val) {9248; PPC64LE-LABEL: test531:9249; PPC64LE:       # %bb.0:9250; PPC64LE-NEXT:    mr 5, 39251; PPC64LE-NEXT:  .LBB531_1:9252; PPC64LE-NEXT:    lwarx 3, 0, 59253; PPC64LE-NEXT:    cmplw 3, 49254; PPC64LE-NEXT:    bgt 0, .LBB531_39255; PPC64LE-NEXT:  # %bb.2:9256; PPC64LE-NEXT:    stwcx. 4, 0, 59257; PPC64LE-NEXT:    bne- 0, .LBB531_19258; PPC64LE-NEXT:  .LBB531_3:9259; PPC64LE-NEXT:    lwsync9260; PPC64LE-NEXT:    blr9261  %ret = atomicrmw umax ptr %ptr, i32 %val syncscope("singlethread") acquire9262  ret i32 %ret9263}9264 9265define i32 @test532(ptr %ptr, i32 %val) {9266; PPC64LE-LABEL: test532:9267; PPC64LE:       # %bb.0:9268; PPC64LE-NEXT:    lwsync9269; PPC64LE-NEXT:  .LBB532_1:9270; PPC64LE-NEXT:    lwarx 5, 0, 39271; PPC64LE-NEXT:    cmplw 5, 49272; PPC64LE-NEXT:    bgt 0, .LBB532_39273; PPC64LE-NEXT:  # %bb.2:9274; PPC64LE-NEXT:    stwcx. 4, 0, 39275; PPC64LE-NEXT:    bne- 0, .LBB532_19276; PPC64LE-NEXT:  .LBB532_3:9277; PPC64LE-NEXT:    mr 3, 59278; PPC64LE-NEXT:    blr9279  %ret = atomicrmw umax ptr %ptr, i32 %val syncscope("singlethread") release9280  ret i32 %ret9281}9282 9283define i32 @test533(ptr %ptr, i32 %val) {9284; PPC64LE-LABEL: test533:9285; PPC64LE:       # %bb.0:9286; PPC64LE-NEXT:    lwsync9287; PPC64LE-NEXT:  .LBB533_1:9288; PPC64LE-NEXT:    lwarx 5, 0, 39289; PPC64LE-NEXT:    cmplw 5, 49290; PPC64LE-NEXT:    bgt 0, .LBB533_39291; PPC64LE-NEXT:  # %bb.2:9292; PPC64LE-NEXT:    stwcx. 4, 0, 39293; PPC64LE-NEXT:    bne- 0, .LBB533_19294; PPC64LE-NEXT:  .LBB533_3:9295; PPC64LE-NEXT:    lwsync9296; PPC64LE-NEXT:    mr 3, 59297; PPC64LE-NEXT:    blr9298  %ret = atomicrmw umax ptr %ptr, i32 %val syncscope("singlethread") acq_rel9299  ret i32 %ret9300}9301 9302define i32 @test534(ptr %ptr, i32 %val) {9303; PPC64LE-LABEL: test534:9304; PPC64LE:       # %bb.0:9305; PPC64LE-NEXT:    sync9306; PPC64LE-NEXT:  .LBB534_1:9307; PPC64LE-NEXT:    lwarx 5, 0, 39308; PPC64LE-NEXT:    cmplw 5, 49309; PPC64LE-NEXT:    bgt 0, .LBB534_39310; PPC64LE-NEXT:  # %bb.2:9311; PPC64LE-NEXT:    stwcx. 4, 0, 39312; PPC64LE-NEXT:    bne- 0, .LBB534_19313; PPC64LE-NEXT:  .LBB534_3:9314; PPC64LE-NEXT:    lwsync9315; PPC64LE-NEXT:    mr 3, 59316; PPC64LE-NEXT:    blr9317  %ret = atomicrmw umax ptr %ptr, i32 %val syncscope("singlethread") seq_cst9318  ret i32 %ret9319}9320 9321define i64 @test535(ptr %ptr, i64 %val) {9322; PPC64LE-LABEL: test535:9323; PPC64LE:       # %bb.0:9324; PPC64LE-NEXT:  .LBB535_1:9325; PPC64LE-NEXT:    ldarx 5, 0, 39326; PPC64LE-NEXT:    cmpld 5, 49327; PPC64LE-NEXT:    bgt 0, .LBB535_39328; PPC64LE-NEXT:  # %bb.2:9329; PPC64LE-NEXT:    stdcx. 4, 0, 39330; PPC64LE-NEXT:    bne- 0, .LBB535_19331; PPC64LE-NEXT:  .LBB535_3:9332; PPC64LE-NEXT:    mr 3, 59333; PPC64LE-NEXT:    blr9334  %ret = atomicrmw umax ptr %ptr, i64 %val syncscope("singlethread") monotonic9335  ret i64 %ret9336}9337 9338define i64 @test536(ptr %ptr, i64 %val) {9339; PPC64LE-LABEL: test536:9340; PPC64LE:       # %bb.0:9341; PPC64LE-NEXT:    mr 5, 39342; PPC64LE-NEXT:  .LBB536_1:9343; PPC64LE-NEXT:    ldarx 3, 0, 59344; PPC64LE-NEXT:    cmpld 3, 49345; PPC64LE-NEXT:    bgt 0, .LBB536_39346; PPC64LE-NEXT:  # %bb.2:9347; PPC64LE-NEXT:    stdcx. 4, 0, 59348; PPC64LE-NEXT:    bne- 0, .LBB536_19349; PPC64LE-NEXT:  .LBB536_3:9350; PPC64LE-NEXT:    lwsync9351; PPC64LE-NEXT:    blr9352  %ret = atomicrmw umax ptr %ptr, i64 %val syncscope("singlethread") acquire9353  ret i64 %ret9354}9355 9356define i64 @test537(ptr %ptr, i64 %val) {9357; PPC64LE-LABEL: test537:9358; PPC64LE:       # %bb.0:9359; PPC64LE-NEXT:    lwsync9360; PPC64LE-NEXT:  .LBB537_1:9361; PPC64LE-NEXT:    ldarx 5, 0, 39362; PPC64LE-NEXT:    cmpld 5, 49363; PPC64LE-NEXT:    bgt 0, .LBB537_39364; PPC64LE-NEXT:  # %bb.2:9365; PPC64LE-NEXT:    stdcx. 4, 0, 39366; PPC64LE-NEXT:    bne- 0, .LBB537_19367; PPC64LE-NEXT:  .LBB537_3:9368; PPC64LE-NEXT:    mr 3, 59369; PPC64LE-NEXT:    blr9370  %ret = atomicrmw umax ptr %ptr, i64 %val syncscope("singlethread") release9371  ret i64 %ret9372}9373 9374define i64 @test538(ptr %ptr, i64 %val) {9375; PPC64LE-LABEL: test538:9376; PPC64LE:       # %bb.0:9377; PPC64LE-NEXT:    lwsync9378; PPC64LE-NEXT:  .LBB538_1:9379; PPC64LE-NEXT:    ldarx 5, 0, 39380; PPC64LE-NEXT:    cmpld 5, 49381; PPC64LE-NEXT:    bgt 0, .LBB538_39382; PPC64LE-NEXT:  # %bb.2:9383; PPC64LE-NEXT:    stdcx. 4, 0, 39384; PPC64LE-NEXT:    bne- 0, .LBB538_19385; PPC64LE-NEXT:  .LBB538_3:9386; PPC64LE-NEXT:    lwsync9387; PPC64LE-NEXT:    mr 3, 59388; PPC64LE-NEXT:    blr9389  %ret = atomicrmw umax ptr %ptr, i64 %val syncscope("singlethread") acq_rel9390  ret i64 %ret9391}9392 9393define i64 @test539(ptr %ptr, i64 %val) {9394; PPC64LE-LABEL: test539:9395; PPC64LE:       # %bb.0:9396; PPC64LE-NEXT:    sync9397; PPC64LE-NEXT:  .LBB539_1:9398; PPC64LE-NEXT:    ldarx 5, 0, 39399; PPC64LE-NEXT:    cmpld 5, 49400; PPC64LE-NEXT:    bgt 0, .LBB539_39401; PPC64LE-NEXT:  # %bb.2:9402; PPC64LE-NEXT:    stdcx. 4, 0, 39403; PPC64LE-NEXT:    bne- 0, .LBB539_19404; PPC64LE-NEXT:  .LBB539_3:9405; PPC64LE-NEXT:    lwsync9406; PPC64LE-NEXT:    mr 3, 59407; PPC64LE-NEXT:    blr9408  %ret = atomicrmw umax ptr %ptr, i64 %val syncscope("singlethread") seq_cst9409  ret i64 %ret9410}9411 9412define i8 @test540(ptr %ptr, i8 %val) {9413; PPC64LE-LABEL: test540:9414; PPC64LE:       # %bb.0:9415; PPC64LE-NEXT:  .LBB540_1:9416; PPC64LE-NEXT:    lbarx 5, 0, 39417; PPC64LE-NEXT:    cmplw 5, 49418; PPC64LE-NEXT:    blt 0, .LBB540_39419; PPC64LE-NEXT:  # %bb.2:9420; PPC64LE-NEXT:    stbcx. 4, 0, 39421; PPC64LE-NEXT:    bne- 0, .LBB540_19422; PPC64LE-NEXT:  .LBB540_3:9423; PPC64LE-NEXT:    mr 3, 59424; PPC64LE-NEXT:    blr9425  %ret = atomicrmw umin ptr %ptr, i8 %val syncscope("singlethread") monotonic9426  ret i8 %ret9427}9428 9429define i8 @test541(ptr %ptr, i8 %val) {9430; PPC64LE-LABEL: test541:9431; PPC64LE:       # %bb.0:9432; PPC64LE-NEXT:    mr 5, 39433; PPC64LE-NEXT:  .LBB541_1:9434; PPC64LE-NEXT:    lbarx 3, 0, 59435; PPC64LE-NEXT:    cmplw 3, 49436; PPC64LE-NEXT:    blt 0, .LBB541_39437; PPC64LE-NEXT:  # %bb.2:9438; PPC64LE-NEXT:    stbcx. 4, 0, 59439; PPC64LE-NEXT:    bne- 0, .LBB541_19440; PPC64LE-NEXT:  .LBB541_3:9441; PPC64LE-NEXT:    lwsync9442; PPC64LE-NEXT:    blr9443  %ret = atomicrmw umin ptr %ptr, i8 %val syncscope("singlethread") acquire9444  ret i8 %ret9445}9446 9447define i8 @test542(ptr %ptr, i8 %val) {9448; PPC64LE-LABEL: test542:9449; PPC64LE:       # %bb.0:9450; PPC64LE-NEXT:    lwsync9451; PPC64LE-NEXT:  .LBB542_1:9452; PPC64LE-NEXT:    lbarx 5, 0, 39453; PPC64LE-NEXT:    cmplw 5, 49454; PPC64LE-NEXT:    blt 0, .LBB542_39455; PPC64LE-NEXT:  # %bb.2:9456; PPC64LE-NEXT:    stbcx. 4, 0, 39457; PPC64LE-NEXT:    bne- 0, .LBB542_19458; PPC64LE-NEXT:  .LBB542_3:9459; PPC64LE-NEXT:    mr 3, 59460; PPC64LE-NEXT:    blr9461  %ret = atomicrmw umin ptr %ptr, i8 %val syncscope("singlethread") release9462  ret i8 %ret9463}9464 9465define i8 @test543(ptr %ptr, i8 %val) {9466; PPC64LE-LABEL: test543:9467; PPC64LE:       # %bb.0:9468; PPC64LE-NEXT:    lwsync9469; PPC64LE-NEXT:  .LBB543_1:9470; PPC64LE-NEXT:    lbarx 5, 0, 39471; PPC64LE-NEXT:    cmplw 5, 49472; PPC64LE-NEXT:    blt 0, .LBB543_39473; PPC64LE-NEXT:  # %bb.2:9474; PPC64LE-NEXT:    stbcx. 4, 0, 39475; PPC64LE-NEXT:    bne- 0, .LBB543_19476; PPC64LE-NEXT:  .LBB543_3:9477; PPC64LE-NEXT:    lwsync9478; PPC64LE-NEXT:    mr 3, 59479; PPC64LE-NEXT:    blr9480  %ret = atomicrmw umin ptr %ptr, i8 %val syncscope("singlethread") acq_rel9481  ret i8 %ret9482}9483 9484define i8 @test544(ptr %ptr, i8 %val) {9485; PPC64LE-LABEL: test544:9486; PPC64LE:       # %bb.0:9487; PPC64LE-NEXT:    sync9488; PPC64LE-NEXT:  .LBB544_1:9489; PPC64LE-NEXT:    lbarx 5, 0, 39490; PPC64LE-NEXT:    cmplw 5, 49491; PPC64LE-NEXT:    blt 0, .LBB544_39492; PPC64LE-NEXT:  # %bb.2:9493; PPC64LE-NEXT:    stbcx. 4, 0, 39494; PPC64LE-NEXT:    bne- 0, .LBB544_19495; PPC64LE-NEXT:  .LBB544_3:9496; PPC64LE-NEXT:    lwsync9497; PPC64LE-NEXT:    mr 3, 59498; PPC64LE-NEXT:    blr9499  %ret = atomicrmw umin ptr %ptr, i8 %val syncscope("singlethread") seq_cst9500  ret i8 %ret9501}9502 9503define i16 @test545(ptr %ptr, i16 %val) {9504; PPC64LE-LABEL: test545:9505; PPC64LE:       # %bb.0:9506; PPC64LE-NEXT:  .LBB545_1:9507; PPC64LE-NEXT:    lharx 5, 0, 39508; PPC64LE-NEXT:    cmplw 5, 49509; PPC64LE-NEXT:    blt 0, .LBB545_39510; PPC64LE-NEXT:  # %bb.2:9511; PPC64LE-NEXT:    sthcx. 4, 0, 39512; PPC64LE-NEXT:    bne- 0, .LBB545_19513; PPC64LE-NEXT:  .LBB545_3:9514; PPC64LE-NEXT:    mr 3, 59515; PPC64LE-NEXT:    blr9516  %ret = atomicrmw umin ptr %ptr, i16 %val syncscope("singlethread") monotonic9517  ret i16 %ret9518}9519 9520define i16 @test546(ptr %ptr, i16 %val) {9521; PPC64LE-LABEL: test546:9522; PPC64LE:       # %bb.0:9523; PPC64LE-NEXT:    mr 5, 39524; PPC64LE-NEXT:  .LBB546_1:9525; PPC64LE-NEXT:    lharx 3, 0, 59526; PPC64LE-NEXT:    cmplw 3, 49527; PPC64LE-NEXT:    blt 0, .LBB546_39528; PPC64LE-NEXT:  # %bb.2:9529; PPC64LE-NEXT:    sthcx. 4, 0, 59530; PPC64LE-NEXT:    bne- 0, .LBB546_19531; PPC64LE-NEXT:  .LBB546_3:9532; PPC64LE-NEXT:    lwsync9533; PPC64LE-NEXT:    blr9534  %ret = atomicrmw umin ptr %ptr, i16 %val syncscope("singlethread") acquire9535  ret i16 %ret9536}9537 9538define i16 @test547(ptr %ptr, i16 %val) {9539; PPC64LE-LABEL: test547:9540; PPC64LE:       # %bb.0:9541; PPC64LE-NEXT:    lwsync9542; PPC64LE-NEXT:  .LBB547_1:9543; PPC64LE-NEXT:    lharx 5, 0, 39544; PPC64LE-NEXT:    cmplw 5, 49545; PPC64LE-NEXT:    blt 0, .LBB547_39546; PPC64LE-NEXT:  # %bb.2:9547; PPC64LE-NEXT:    sthcx. 4, 0, 39548; PPC64LE-NEXT:    bne- 0, .LBB547_19549; PPC64LE-NEXT:  .LBB547_3:9550; PPC64LE-NEXT:    mr 3, 59551; PPC64LE-NEXT:    blr9552  %ret = atomicrmw umin ptr %ptr, i16 %val syncscope("singlethread") release9553  ret i16 %ret9554}9555 9556define i16 @test548(ptr %ptr, i16 %val) {9557; PPC64LE-LABEL: test548:9558; PPC64LE:       # %bb.0:9559; PPC64LE-NEXT:    lwsync9560; PPC64LE-NEXT:  .LBB548_1:9561; PPC64LE-NEXT:    lharx 5, 0, 39562; PPC64LE-NEXT:    cmplw 5, 49563; PPC64LE-NEXT:    blt 0, .LBB548_39564; PPC64LE-NEXT:  # %bb.2:9565; PPC64LE-NEXT:    sthcx. 4, 0, 39566; PPC64LE-NEXT:    bne- 0, .LBB548_19567; PPC64LE-NEXT:  .LBB548_3:9568; PPC64LE-NEXT:    lwsync9569; PPC64LE-NEXT:    mr 3, 59570; PPC64LE-NEXT:    blr9571  %ret = atomicrmw umin ptr %ptr, i16 %val syncscope("singlethread") acq_rel9572  ret i16 %ret9573}9574 9575define i16 @test549(ptr %ptr, i16 %val) {9576; PPC64LE-LABEL: test549:9577; PPC64LE:       # %bb.0:9578; PPC64LE-NEXT:    sync9579; PPC64LE-NEXT:  .LBB549_1:9580; PPC64LE-NEXT:    lharx 5, 0, 39581; PPC64LE-NEXT:    cmplw 5, 49582; PPC64LE-NEXT:    blt 0, .LBB549_39583; PPC64LE-NEXT:  # %bb.2:9584; PPC64LE-NEXT:    sthcx. 4, 0, 39585; PPC64LE-NEXT:    bne- 0, .LBB549_19586; PPC64LE-NEXT:  .LBB549_3:9587; PPC64LE-NEXT:    lwsync9588; PPC64LE-NEXT:    mr 3, 59589; PPC64LE-NEXT:    blr9590  %ret = atomicrmw umin ptr %ptr, i16 %val syncscope("singlethread") seq_cst9591  ret i16 %ret9592}9593 9594define i32 @test550(ptr %ptr, i32 %val) {9595; PPC64LE-LABEL: test550:9596; PPC64LE:       # %bb.0:9597; PPC64LE-NEXT:  .LBB550_1:9598; PPC64LE-NEXT:    lwarx 5, 0, 39599; PPC64LE-NEXT:    cmplw 5, 49600; PPC64LE-NEXT:    blt 0, .LBB550_39601; PPC64LE-NEXT:  # %bb.2:9602; PPC64LE-NEXT:    stwcx. 4, 0, 39603; PPC64LE-NEXT:    bne- 0, .LBB550_19604; PPC64LE-NEXT:  .LBB550_3:9605; PPC64LE-NEXT:    mr 3, 59606; PPC64LE-NEXT:    blr9607  %ret = atomicrmw umin ptr %ptr, i32 %val syncscope("singlethread") monotonic9608  ret i32 %ret9609}9610 9611define i32 @test551(ptr %ptr, i32 %val) {9612; PPC64LE-LABEL: test551:9613; PPC64LE:       # %bb.0:9614; PPC64LE-NEXT:    mr 5, 39615; PPC64LE-NEXT:  .LBB551_1:9616; PPC64LE-NEXT:    lwarx 3, 0, 59617; PPC64LE-NEXT:    cmplw 3, 49618; PPC64LE-NEXT:    blt 0, .LBB551_39619; PPC64LE-NEXT:  # %bb.2:9620; PPC64LE-NEXT:    stwcx. 4, 0, 59621; PPC64LE-NEXT:    bne- 0, .LBB551_19622; PPC64LE-NEXT:  .LBB551_3:9623; PPC64LE-NEXT:    lwsync9624; PPC64LE-NEXT:    blr9625  %ret = atomicrmw umin ptr %ptr, i32 %val syncscope("singlethread") acquire9626  ret i32 %ret9627}9628 9629define i32 @test552(ptr %ptr, i32 %val) {9630; PPC64LE-LABEL: test552:9631; PPC64LE:       # %bb.0:9632; PPC64LE-NEXT:    lwsync9633; PPC64LE-NEXT:  .LBB552_1:9634; PPC64LE-NEXT:    lwarx 5, 0, 39635; PPC64LE-NEXT:    cmplw 5, 49636; PPC64LE-NEXT:    blt 0, .LBB552_39637; PPC64LE-NEXT:  # %bb.2:9638; PPC64LE-NEXT:    stwcx. 4, 0, 39639; PPC64LE-NEXT:    bne- 0, .LBB552_19640; PPC64LE-NEXT:  .LBB552_3:9641; PPC64LE-NEXT:    mr 3, 59642; PPC64LE-NEXT:    blr9643  %ret = atomicrmw umin ptr %ptr, i32 %val syncscope("singlethread") release9644  ret i32 %ret9645}9646 9647define i32 @test553(ptr %ptr, i32 %val) {9648; PPC64LE-LABEL: test553:9649; PPC64LE:       # %bb.0:9650; PPC64LE-NEXT:    lwsync9651; PPC64LE-NEXT:  .LBB553_1:9652; PPC64LE-NEXT:    lwarx 5, 0, 39653; PPC64LE-NEXT:    cmplw 5, 49654; PPC64LE-NEXT:    blt 0, .LBB553_39655; PPC64LE-NEXT:  # %bb.2:9656; PPC64LE-NEXT:    stwcx. 4, 0, 39657; PPC64LE-NEXT:    bne- 0, .LBB553_19658; PPC64LE-NEXT:  .LBB553_3:9659; PPC64LE-NEXT:    lwsync9660; PPC64LE-NEXT:    mr 3, 59661; PPC64LE-NEXT:    blr9662  %ret = atomicrmw umin ptr %ptr, i32 %val syncscope("singlethread") acq_rel9663  ret i32 %ret9664}9665 9666define i32 @test554(ptr %ptr, i32 %val) {9667; PPC64LE-LABEL: test554:9668; PPC64LE:       # %bb.0:9669; PPC64LE-NEXT:    sync9670; PPC64LE-NEXT:  .LBB554_1:9671; PPC64LE-NEXT:    lwarx 5, 0, 39672; PPC64LE-NEXT:    cmplw 5, 49673; PPC64LE-NEXT:    blt 0, .LBB554_39674; PPC64LE-NEXT:  # %bb.2:9675; PPC64LE-NEXT:    stwcx. 4, 0, 39676; PPC64LE-NEXT:    bne- 0, .LBB554_19677; PPC64LE-NEXT:  .LBB554_3:9678; PPC64LE-NEXT:    lwsync9679; PPC64LE-NEXT:    mr 3, 59680; PPC64LE-NEXT:    blr9681  %ret = atomicrmw umin ptr %ptr, i32 %val syncscope("singlethread") seq_cst9682  ret i32 %ret9683}9684 9685define i64 @test555(ptr %ptr, i64 %val) {9686; PPC64LE-LABEL: test555:9687; PPC64LE:       # %bb.0:9688; PPC64LE-NEXT:  .LBB555_1:9689; PPC64LE-NEXT:    ldarx 5, 0, 39690; PPC64LE-NEXT:    cmpld 5, 49691; PPC64LE-NEXT:    blt 0, .LBB555_39692; PPC64LE-NEXT:  # %bb.2:9693; PPC64LE-NEXT:    stdcx. 4, 0, 39694; PPC64LE-NEXT:    bne- 0, .LBB555_19695; PPC64LE-NEXT:  .LBB555_3:9696; PPC64LE-NEXT:    mr 3, 59697; PPC64LE-NEXT:    blr9698  %ret = atomicrmw umin ptr %ptr, i64 %val syncscope("singlethread") monotonic9699  ret i64 %ret9700}9701 9702define i64 @test556(ptr %ptr, i64 %val) {9703; PPC64LE-LABEL: test556:9704; PPC64LE:       # %bb.0:9705; PPC64LE-NEXT:    mr 5, 39706; PPC64LE-NEXT:  .LBB556_1:9707; PPC64LE-NEXT:    ldarx 3, 0, 59708; PPC64LE-NEXT:    cmpld 3, 49709; PPC64LE-NEXT:    blt 0, .LBB556_39710; PPC64LE-NEXT:  # %bb.2:9711; PPC64LE-NEXT:    stdcx. 4, 0, 59712; PPC64LE-NEXT:    bne- 0, .LBB556_19713; PPC64LE-NEXT:  .LBB556_3:9714; PPC64LE-NEXT:    lwsync9715; PPC64LE-NEXT:    blr9716  %ret = atomicrmw umin ptr %ptr, i64 %val syncscope("singlethread") acquire9717  ret i64 %ret9718}9719 9720define i64 @test557(ptr %ptr, i64 %val) {9721; PPC64LE-LABEL: test557:9722; PPC64LE:       # %bb.0:9723; PPC64LE-NEXT:    lwsync9724; PPC64LE-NEXT:  .LBB557_1:9725; PPC64LE-NEXT:    ldarx 5, 0, 39726; PPC64LE-NEXT:    cmpld 5, 49727; PPC64LE-NEXT:    blt 0, .LBB557_39728; PPC64LE-NEXT:  # %bb.2:9729; PPC64LE-NEXT:    stdcx. 4, 0, 39730; PPC64LE-NEXT:    bne- 0, .LBB557_19731; PPC64LE-NEXT:  .LBB557_3:9732; PPC64LE-NEXT:    mr 3, 59733; PPC64LE-NEXT:    blr9734  %ret = atomicrmw umin ptr %ptr, i64 %val syncscope("singlethread") release9735  ret i64 %ret9736}9737 9738define i64 @test558(ptr %ptr, i64 %val) {9739; PPC64LE-LABEL: test558:9740; PPC64LE:       # %bb.0:9741; PPC64LE-NEXT:    lwsync9742; PPC64LE-NEXT:  .LBB558_1:9743; PPC64LE-NEXT:    ldarx 5, 0, 39744; PPC64LE-NEXT:    cmpld 5, 49745; PPC64LE-NEXT:    blt 0, .LBB558_39746; PPC64LE-NEXT:  # %bb.2:9747; PPC64LE-NEXT:    stdcx. 4, 0, 39748; PPC64LE-NEXT:    bne- 0, .LBB558_19749; PPC64LE-NEXT:  .LBB558_3:9750; PPC64LE-NEXT:    lwsync9751; PPC64LE-NEXT:    mr 3, 59752; PPC64LE-NEXT:    blr9753  %ret = atomicrmw umin ptr %ptr, i64 %val syncscope("singlethread") acq_rel9754  ret i64 %ret9755}9756 9757define i64 @test559(ptr %ptr, i64 %val) {9758; PPC64LE-LABEL: test559:9759; PPC64LE:       # %bb.0:9760; PPC64LE-NEXT:    sync9761; PPC64LE-NEXT:  .LBB559_1:9762; PPC64LE-NEXT:    ldarx 5, 0, 39763; PPC64LE-NEXT:    cmpld 5, 49764; PPC64LE-NEXT:    blt 0, .LBB559_39765; PPC64LE-NEXT:  # %bb.2:9766; PPC64LE-NEXT:    stdcx. 4, 0, 39767; PPC64LE-NEXT:    bne- 0, .LBB559_19768; PPC64LE-NEXT:  .LBB559_3:9769; PPC64LE-NEXT:    lwsync9770; PPC64LE-NEXT:    mr 3, 59771; PPC64LE-NEXT:    blr9772  %ret = atomicrmw umin ptr %ptr, i64 %val syncscope("singlethread") seq_cst9773  ret i64 %ret9774}9775 9776; The second load should never be scheduled before isync.9777define i32 @test_ordering0(ptr %ptr1, ptr %ptr2) {9778; PPC64LE-LABEL: test_ordering0:9779; PPC64LE:       # %bb.0:9780; PPC64LE-NEXT:    lwz 4, 0(3)9781; PPC64LE-NEXT:    cmpd 7, 4, 49782; PPC64LE-NEXT:    bne- 7, .+49783; PPC64LE-NEXT:    isync9784; PPC64LE-NEXT:    lwz 3, 0(3)9785; PPC64LE-NEXT:    add 3, 4, 39786; PPC64LE-NEXT:    blr9787  %val1 = load atomic i32, ptr %ptr1 acquire, align 49788  %val2 = load i32, ptr %ptr19789  %add = add i32 %val1, %val29790  ret i32 %add9791}9792 9793; The second store should never be scheduled before isync.9794define i32 @test_ordering1(ptr %ptr1, i32 %val1, ptr %ptr2) {9795; PPC64LE-LABEL: test_ordering1:9796; PPC64LE:       # %bb.0:9797; PPC64LE-NEXT:    lwz 3, 0(3)9798; PPC64LE-NEXT:    cmpd 7, 3, 39799; PPC64LE-NEXT:    bne- 7, .+49800; PPC64LE-NEXT:    isync9801; PPC64LE-NEXT:    stw 4, 0(5)9802; PPC64LE-NEXT:    blr9803  %val2 = load atomic i32, ptr %ptr1 acquire, align 49804  store i32 %val1, ptr %ptr29805  ret i32 %val29806}9807