; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -verify-machineinstrs < %s | FileCheck %s target datalayout = "E-m:e-i64:64-n32:64" target triple = "powerpc64-unknown-linux-gnu" define void @a32min(ptr nocapture dereferenceable(4) %minimum, i32 %val) #0 { ; CHECK-LABEL: a32min: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: .LBB0_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lwarx 5, 0, 3 ; CHECK-NEXT: cmpw 5, 4 ; CHECK-NEXT: bltlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: stwcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB0_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw min ptr %minimum, i32 %val monotonic ret void } define void @a32max(ptr nocapture dereferenceable(4) %minimum, i32 %val) #0 { ; CHECK-LABEL: a32max: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: .LBB1_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lwarx 5, 0, 3 ; CHECK-NEXT: cmpw 5, 4 ; CHECK-NEXT: bgtlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: stwcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB1_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw max ptr %minimum, i32 %val monotonic ret void } define void @a32umin(ptr nocapture dereferenceable(4) %minimum, i32 %val) #0 { ; CHECK-LABEL: a32umin: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: .LBB2_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lwarx 5, 0, 3 ; CHECK-NEXT: cmplw 5, 4 ; CHECK-NEXT: bltlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: stwcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB2_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw umin ptr %minimum, i32 %val monotonic ret void } define void @a32umax(ptr nocapture dereferenceable(4) %minimum, i32 %val) #0 { ; CHECK-LABEL: a32umax: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: .LBB3_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lwarx 5, 0, 3 ; CHECK-NEXT: cmplw 5, 4 ; CHECK-NEXT: bgtlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: stwcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB3_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw umax ptr %minimum, i32 %val monotonic ret void } define void @a16min(ptr nocapture dereferenceable(4) %minimum, i16 %val) #1 { ; CHECK-LABEL: a16min: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: extsh 4, 4 ; CHECK-NEXT: .LBB4_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lharx 5, 0, 3 ; CHECK-NEXT: extsh 5, 5 ; CHECK-NEXT: cmpw 5, 4 ; CHECK-NEXT: bltlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: sthcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB4_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw min ptr %minimum, i16 %val monotonic ret void } define void @a16max(ptr nocapture dereferenceable(4) %minimum, i16 %val) #1 { ; CHECK-LABEL: a16max: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: extsh 4, 4 ; CHECK-NEXT: .LBB5_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lharx 5, 0, 3 ; CHECK-NEXT: extsh 5, 5 ; CHECK-NEXT: cmpw 5, 4 ; CHECK-NEXT: bgtlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: sthcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB5_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw max ptr %minimum, i16 %val monotonic ret void } define void @a16umin(ptr nocapture dereferenceable(4) %minimum, i16 %val) #1 { ; CHECK-LABEL: a16umin: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: .LBB6_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lharx 5, 0, 3 ; CHECK-NEXT: cmplw 5, 4 ; CHECK-NEXT: bltlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: sthcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB6_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw umin ptr %minimum, i16 %val monotonic ret void } define void @a16umax(ptr nocapture dereferenceable(4) %minimum, i16 %val) #1 { ; CHECK-LABEL: a16umax: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: .LBB7_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lharx 5, 0, 3 ; CHECK-NEXT: cmplw 5, 4 ; CHECK-NEXT: bgtlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: sthcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB7_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw umax ptr %minimum, i16 %val monotonic ret void } define void @a8min(ptr nocapture dereferenceable(4) %minimum, i8 %val) #1 { ; CHECK-LABEL: a8min: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: extsb 4, 4 ; CHECK-NEXT: .LBB8_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lbarx 5, 0, 3 ; CHECK-NEXT: extsb 5, 5 ; CHECK-NEXT: cmpw 5, 4 ; CHECK-NEXT: bltlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: stbcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB8_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw min ptr %minimum, i8 %val monotonic ret void } define void @a8max(ptr nocapture dereferenceable(4) %minimum, i8 %val) #1 { ; CHECK-LABEL: a8max: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: extsb 4, 4 ; CHECK-NEXT: .LBB9_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lbarx 5, 0, 3 ; CHECK-NEXT: extsb 5, 5 ; CHECK-NEXT: cmpw 5, 4 ; CHECK-NEXT: bgtlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: stbcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB9_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw max ptr %minimum, i8 %val monotonic ret void } define void @a8umin(ptr nocapture dereferenceable(4) %minimum, i8 %val) #1 { ; CHECK-LABEL: a8umin: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: .LBB10_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lbarx 5, 0, 3 ; CHECK-NEXT: cmplw 5, 4 ; CHECK-NEXT: bltlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: stbcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB10_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw umin ptr %minimum, i8 %val monotonic ret void } define void @a8umax(ptr nocapture dereferenceable(4) %minimum, i8 %val) #1 { ; CHECK-LABEL: a8umax: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: .LBB11_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lbarx 5, 0, 3 ; CHECK-NEXT: cmplw 5, 4 ; CHECK-NEXT: bgtlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: stbcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB11_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw umax ptr %minimum, i8 %val monotonic ret void } define void @a64min(ptr nocapture dereferenceable(4) %minimum, i64 %val) #0 { ; CHECK-LABEL: a64min: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: .LBB12_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: ldarx 5, 0, 3 ; CHECK-NEXT: cmpd 5, 4 ; CHECK-NEXT: bltlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: stdcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB12_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw min ptr %minimum, i64 %val monotonic ret void } define void @a64max(ptr nocapture dereferenceable(4) %minimum, i64 %val) #0 { ; CHECK-LABEL: a64max: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: .LBB13_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: ldarx 5, 0, 3 ; CHECK-NEXT: cmpd 5, 4 ; CHECK-NEXT: bgtlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: stdcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB13_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw max ptr %minimum, i64 %val monotonic ret void } define void @a64umin(ptr nocapture dereferenceable(4) %minimum, i64 %val) #0 { ; CHECK-LABEL: a64umin: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: .LBB14_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: ldarx 5, 0, 3 ; CHECK-NEXT: cmpld 5, 4 ; CHECK-NEXT: bltlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: stdcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB14_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw umin ptr %minimum, i64 %val monotonic ret void } define void @a64umax(ptr nocapture dereferenceable(4) %minimum, i64 %val) #0 { ; CHECK-LABEL: a64umax: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: .LBB15_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: ldarx 5, 0, 3 ; CHECK-NEXT: cmpld 5, 4 ; CHECK-NEXT: bgtlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: stdcx. 4, 0, 3 ; CHECK-NEXT: bne 0, .LBB15_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw umax ptr %minimum, i64 %val monotonic ret void } define void @ae16min(ptr nocapture dereferenceable(4) %minimum, i16 %val) #0 { ; CHECK-LABEL: ae16min: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: li 5, 0 ; CHECK-NEXT: rlwinm 6, 3, 3, 27, 27 ; CHECK-NEXT: extsh 4, 4 ; CHECK-NEXT: ori 7, 5, 65535 ; CHECK-NEXT: xori 5, 6, 16 ; CHECK-NEXT: rldicr 3, 3, 0, 61 ; CHECK-NEXT: slw 8, 4, 5 ; CHECK-NEXT: slw 6, 7, 5 ; CHECK-NEXT: and 7, 8, 6 ; CHECK-NEXT: .LBB16_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lwarx 8, 0, 3 ; CHECK-NEXT: and 9, 8, 6 ; CHECK-NEXT: srw 9, 9, 5 ; CHECK-NEXT: extsh 9, 9 ; CHECK-NEXT: cmpw 9, 4 ; CHECK-NEXT: bltlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: andc 8, 8, 6 ; CHECK-NEXT: or 8, 7, 8 ; CHECK-NEXT: stwcx. 8, 0, 3 ; CHECK-NEXT: bne 0, .LBB16_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw min ptr %minimum, i16 %val monotonic ret void } define void @ae16max(ptr nocapture dereferenceable(4) %minimum, i16 %val) #0 { ; CHECK-LABEL: ae16max: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: li 5, 0 ; CHECK-NEXT: rlwinm 6, 3, 3, 27, 27 ; CHECK-NEXT: extsh 4, 4 ; CHECK-NEXT: ori 7, 5, 65535 ; CHECK-NEXT: xori 5, 6, 16 ; CHECK-NEXT: rldicr 3, 3, 0, 61 ; CHECK-NEXT: slw 8, 4, 5 ; CHECK-NEXT: slw 6, 7, 5 ; CHECK-NEXT: and 7, 8, 6 ; CHECK-NEXT: .LBB17_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lwarx 8, 0, 3 ; CHECK-NEXT: and 9, 8, 6 ; CHECK-NEXT: srw 9, 9, 5 ; CHECK-NEXT: extsh 9, 9 ; CHECK-NEXT: cmpw 9, 4 ; CHECK-NEXT: bgtlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: andc 8, 8, 6 ; CHECK-NEXT: or 8, 7, 8 ; CHECK-NEXT: stwcx. 8, 0, 3 ; CHECK-NEXT: bne 0, .LBB17_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw max ptr %minimum, i16 %val monotonic ret void } define void @ae16umin(ptr nocapture dereferenceable(4) %minimum, i16 %val) #0 { ; CHECK-LABEL: ae16umin: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: li 5, 0 ; CHECK-NEXT: rlwinm 6, 3, 3, 27, 27 ; CHECK-NEXT: ori 5, 5, 65535 ; CHECK-NEXT: xori 6, 6, 16 ; CHECK-NEXT: slw 4, 4, 6 ; CHECK-NEXT: slw 5, 5, 6 ; CHECK-NEXT: rldicr 3, 3, 0, 61 ; CHECK-NEXT: and 6, 4, 5 ; CHECK-NEXT: .LBB18_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lwarx 7, 0, 3 ; CHECK-NEXT: and 8, 7, 5 ; CHECK-NEXT: cmplw 8, 4 ; CHECK-NEXT: bltlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: andc 7, 7, 5 ; CHECK-NEXT: or 7, 6, 7 ; CHECK-NEXT: stwcx. 7, 0, 3 ; CHECK-NEXT: bne 0, .LBB18_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw umin ptr %minimum, i16 %val monotonic ret void } define void @ae16umax(ptr nocapture dereferenceable(4) %minimum, i16 %val) #0 { ; CHECK-LABEL: ae16umax: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: li 5, 0 ; CHECK-NEXT: rlwinm 6, 3, 3, 27, 27 ; CHECK-NEXT: ori 5, 5, 65535 ; CHECK-NEXT: xori 6, 6, 16 ; CHECK-NEXT: slw 4, 4, 6 ; CHECK-NEXT: slw 5, 5, 6 ; CHECK-NEXT: rldicr 3, 3, 0, 61 ; CHECK-NEXT: and 6, 4, 5 ; CHECK-NEXT: .LBB19_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lwarx 7, 0, 3 ; CHECK-NEXT: and 8, 7, 5 ; CHECK-NEXT: cmplw 8, 4 ; CHECK-NEXT: bgtlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: andc 7, 7, 5 ; CHECK-NEXT: or 7, 6, 7 ; CHECK-NEXT: stwcx. 7, 0, 3 ; CHECK-NEXT: bne 0, .LBB19_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw umax ptr %minimum, i16 %val monotonic ret void } define void @ae8min(ptr nocapture dereferenceable(4) %minimum, i8 %val) #0 { ; CHECK-LABEL: ae8min: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: rlwinm 5, 3, 3, 27, 28 ; CHECK-NEXT: li 6, 255 ; CHECK-NEXT: extsb 4, 4 ; CHECK-NEXT: xori 5, 5, 24 ; CHECK-NEXT: slw 7, 4, 5 ; CHECK-NEXT: slw 6, 6, 5 ; CHECK-NEXT: rldicr 3, 3, 0, 61 ; CHECK-NEXT: and 7, 7, 6 ; CHECK-NEXT: .LBB20_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lwarx 8, 0, 3 ; CHECK-NEXT: and 9, 8, 6 ; CHECK-NEXT: srw 9, 9, 5 ; CHECK-NEXT: extsb 9, 9 ; CHECK-NEXT: cmpw 9, 4 ; CHECK-NEXT: bltlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: andc 8, 8, 6 ; CHECK-NEXT: or 8, 7, 8 ; CHECK-NEXT: stwcx. 8, 0, 3 ; CHECK-NEXT: bne 0, .LBB20_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw min ptr %minimum, i8 %val monotonic ret void } define void @ae8max(ptr nocapture dereferenceable(4) %minimum, i8 %val) #0 { ; CHECK-LABEL: ae8max: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: rlwinm 5, 3, 3, 27, 28 ; CHECK-NEXT: li 6, 255 ; CHECK-NEXT: extsb 4, 4 ; CHECK-NEXT: xori 5, 5, 24 ; CHECK-NEXT: slw 7, 4, 5 ; CHECK-NEXT: slw 6, 6, 5 ; CHECK-NEXT: rldicr 3, 3, 0, 61 ; CHECK-NEXT: and 7, 7, 6 ; CHECK-NEXT: .LBB21_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lwarx 8, 0, 3 ; CHECK-NEXT: and 9, 8, 6 ; CHECK-NEXT: srw 9, 9, 5 ; CHECK-NEXT: extsb 9, 9 ; CHECK-NEXT: cmpw 9, 4 ; CHECK-NEXT: bgtlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: andc 8, 8, 6 ; CHECK-NEXT: or 8, 7, 8 ; CHECK-NEXT: stwcx. 8, 0, 3 ; CHECK-NEXT: bne 0, .LBB21_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw max ptr %minimum, i8 %val monotonic ret void } define void @ae8umin(ptr nocapture dereferenceable(4) %minimum, i8 %val) #0 { ; CHECK-LABEL: ae8umin: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: rlwinm 6, 3, 3, 27, 28 ; CHECK-NEXT: li 5, 255 ; CHECK-NEXT: xori 6, 6, 24 ; CHECK-NEXT: rldicr 3, 3, 0, 61 ; CHECK-NEXT: slw 4, 4, 6 ; CHECK-NEXT: slw 5, 5, 6 ; CHECK-NEXT: and 6, 4, 5 ; CHECK-NEXT: .LBB22_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lwarx 7, 0, 3 ; CHECK-NEXT: and 8, 7, 5 ; CHECK-NEXT: cmplw 8, 4 ; CHECK-NEXT: bltlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: andc 7, 7, 5 ; CHECK-NEXT: or 7, 6, 7 ; CHECK-NEXT: stwcx. 7, 0, 3 ; CHECK-NEXT: bne 0, .LBB22_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw umin ptr %minimum, i8 %val monotonic ret void } define void @ae8umax(ptr nocapture dereferenceable(4) %minimum, i8 %val) #0 { ; CHECK-LABEL: ae8umax: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: rlwinm 6, 3, 3, 27, 28 ; CHECK-NEXT: li 5, 255 ; CHECK-NEXT: xori 6, 6, 24 ; CHECK-NEXT: rldicr 3, 3, 0, 61 ; CHECK-NEXT: slw 4, 4, 6 ; CHECK-NEXT: slw 5, 5, 6 ; CHECK-NEXT: and 6, 4, 5 ; CHECK-NEXT: .LBB23_1: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: lwarx 7, 0, 3 ; CHECK-NEXT: and 8, 7, 5 ; CHECK-NEXT: cmplw 8, 4 ; CHECK-NEXT: bgtlr 0 ; CHECK-NEXT: # %bb.2: # %entry ; CHECK-NEXT: # ; CHECK-NEXT: andc 7, 7, 5 ; CHECK-NEXT: or 7, 6, 7 ; CHECK-NEXT: stwcx. 7, 0, 3 ; CHECK-NEXT: bne 0, .LBB23_1 ; CHECK-NEXT: # %bb.3: # %entry ; CHECK-NEXT: blr entry: %0 = atomicrmw umax ptr %minimum, i8 %val monotonic ret void } attributes #0 = { nounwind "target-cpu"="ppc64" } attributes #1 = { nounwind "target-cpu"="pwr8" }