1485 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN:llc -mtriple=amdgcn -mcpu=gfx1250 < %s | FileCheck --check-prefix=GFX1250 %s3 4define float @global_system_atomic_fadd_f32(ptr addrspace(1) %ptr, float %val) {5; GFX1250-LABEL: global_system_atomic_fadd_f32:6; GFX1250: ; %bb.0:7; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x08; GFX1250-NEXT: s_wait_kmcnt 0x09; GFX1250-NEXT: global_atomic_add_f32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_SYS10; GFX1250-NEXT: s_wait_loadcnt 0x011; GFX1250-NEXT: s_set_pc_i64 s[30:31]12 %result = atomicrmw fadd ptr addrspace(1) %ptr, float %val monotonic13 ret float %result14}15 16define float @global_one_as_atomic_fadd_f32(ptr addrspace(1) %ptr, float %val) {17; GFX1250-LABEL: global_one_as_atomic_fadd_f32:18; GFX1250: ; %bb.0:19; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x020; GFX1250-NEXT: s_wait_kmcnt 0x021; GFX1250-NEXT: global_atomic_add_f32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_SYS22; GFX1250-NEXT: s_wait_loadcnt 0x023; GFX1250-NEXT: s_set_pc_i64 s[30:31]24 %result = atomicrmw fadd ptr addrspace(1) %ptr, float %val syncscope("one-as") monotonic25 ret float %result26}27 28define double @global_system_atomic_fadd_f64(ptr addrspace(1) %ptr, double %val) {29; GFX1250-LABEL: global_system_atomic_fadd_f64:30; GFX1250: ; %bb.0:31; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x032; GFX1250-NEXT: s_wait_kmcnt 0x033; GFX1250-NEXT: global_atomic_add_f64 v[0:1], v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS34; GFX1250-NEXT: s_wait_loadcnt 0x035; GFX1250-NEXT: s_set_pc_i64 s[30:31]36 %result = atomicrmw fadd ptr addrspace(1) %ptr, double %val monotonic37 ret double %result38}39 40define double @global_one_as_atomic_fadd_f64(ptr addrspace(1) %ptr, double %val) {41; GFX1250-LABEL: global_one_as_atomic_fadd_f64:42; GFX1250: ; %bb.0:43; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x044; GFX1250-NEXT: s_wait_kmcnt 0x045; GFX1250-NEXT: global_atomic_add_f64 v[0:1], v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS46; GFX1250-NEXT: s_wait_loadcnt 0x047; GFX1250-NEXT: s_set_pc_i64 s[30:31]48 %result = atomicrmw fadd ptr addrspace(1) %ptr, double %val syncscope("one-as") monotonic49 ret double %result50}51 52define float @global_system_atomic_fmin_f32(ptr addrspace(1) %ptr, float %val) {53; GFX1250-LABEL: global_system_atomic_fmin_f32:54; GFX1250: ; %bb.0:55; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x056; GFX1250-NEXT: s_wait_kmcnt 0x057; GFX1250-NEXT: global_atomic_min_num_f32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_SYS58; GFX1250-NEXT: s_wait_loadcnt 0x059; GFX1250-NEXT: s_set_pc_i64 s[30:31]60 %result = atomicrmw fmin ptr addrspace(1) %ptr, float %val monotonic61 ret float %result62}63 64define float @global_one_as_atomic_fmin_f32(ptr addrspace(1) %ptr, float %val) {65; GFX1250-LABEL: global_one_as_atomic_fmin_f32:66; GFX1250: ; %bb.0:67; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x068; GFX1250-NEXT: s_wait_kmcnt 0x069; GFX1250-NEXT: global_atomic_min_num_f32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_SYS70; GFX1250-NEXT: s_wait_loadcnt 0x071; GFX1250-NEXT: s_set_pc_i64 s[30:31]72 %result = atomicrmw fmin ptr addrspace(1) %ptr, float %val syncscope("one-as") monotonic73 ret float %result74}75 76define double @global_system_atomic_fmin_f64(ptr addrspace(1) %ptr, double %val) {77; GFX1250-LABEL: global_system_atomic_fmin_f64:78; GFX1250: ; %bb.0:79; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x080; GFX1250-NEXT: s_wait_kmcnt 0x081; GFX1250-NEXT: global_atomic_min_num_f64 v[0:1], v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS82; GFX1250-NEXT: s_wait_loadcnt 0x083; GFX1250-NEXT: s_set_pc_i64 s[30:31]84 %result = atomicrmw fmin ptr addrspace(1) %ptr, double %val monotonic85 ret double %result86}87 88define double @global_one_as_atomic_fmin_f64(ptr addrspace(1) %ptr, double %val) {89; GFX1250-LABEL: global_one_as_atomic_fmin_f64:90; GFX1250: ; %bb.0:91; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x092; GFX1250-NEXT: s_wait_kmcnt 0x093; GFX1250-NEXT: global_atomic_min_num_f64 v[0:1], v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS94; GFX1250-NEXT: s_wait_loadcnt 0x095; GFX1250-NEXT: s_set_pc_i64 s[30:31]96 %result = atomicrmw fmin ptr addrspace(1) %ptr, double %val syncscope("one-as") monotonic97 ret double %result98}99 100define float @global_system_atomic_fmax_f32(ptr addrspace(1) %ptr, float %val) {101; GFX1250-LABEL: global_system_atomic_fmax_f32:102; GFX1250: ; %bb.0:103; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0104; GFX1250-NEXT: s_wait_kmcnt 0x0105; GFX1250-NEXT: global_atomic_max_num_f32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_SYS106; GFX1250-NEXT: s_wait_loadcnt 0x0107; GFX1250-NEXT: s_set_pc_i64 s[30:31]108 %result = atomicrmw fmax ptr addrspace(1) %ptr, float %val monotonic109 ret float %result110}111 112define float @global_one_as_atomic_fmax_f32(ptr addrspace(1) %ptr, float %val) {113; GFX1250-LABEL: global_one_as_atomic_fmax_f32:114; GFX1250: ; %bb.0:115; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0116; GFX1250-NEXT: s_wait_kmcnt 0x0117; GFX1250-NEXT: global_atomic_max_num_f32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_SYS118; GFX1250-NEXT: s_wait_loadcnt 0x0119; GFX1250-NEXT: s_set_pc_i64 s[30:31]120 %result = atomicrmw fmax ptr addrspace(1) %ptr, float %val syncscope("one-as") monotonic121 ret float %result122}123 124define double @global_system_atomic_fmax_f64(ptr addrspace(1) %ptr, double %val) {125; GFX1250-LABEL: global_system_atomic_fmax_f64:126; GFX1250: ; %bb.0:127; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0128; GFX1250-NEXT: s_wait_kmcnt 0x0129; GFX1250-NEXT: global_atomic_max_num_f64 v[0:1], v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS130; GFX1250-NEXT: s_wait_loadcnt 0x0131; GFX1250-NEXT: s_set_pc_i64 s[30:31]132 %result = atomicrmw fmax ptr addrspace(1) %ptr, double %val monotonic133 ret double %result134}135 136define double @global_one_as_atomic_fmax_f64(ptr addrspace(1) %ptr, double %val) {137; GFX1250-LABEL: global_one_as_atomic_fmax_f64:138; GFX1250: ; %bb.0:139; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0140; GFX1250-NEXT: s_wait_kmcnt 0x0141; GFX1250-NEXT: global_atomic_max_num_f64 v[0:1], v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS142; GFX1250-NEXT: s_wait_loadcnt 0x0143; GFX1250-NEXT: s_set_pc_i64 s[30:31]144 %result = atomicrmw fmax ptr addrspace(1) %ptr, double %val syncscope("one-as") monotonic145 ret double %result146}147 148define i32 @global_one_as_atomic_min_i32(ptr addrspace(1) %ptr, i32 %val) {149; GFX1250-LABEL: global_one_as_atomic_min_i32:150; GFX1250: ; %bb.0:151; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0152; GFX1250-NEXT: s_wait_kmcnt 0x0153; GFX1250-NEXT: global_atomic_min_i32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_SYS154; GFX1250-NEXT: s_wait_loadcnt 0x0155; GFX1250-NEXT: s_set_pc_i64 s[30:31]156 %result = atomicrmw min ptr addrspace(1) %ptr, i32 %val syncscope("one-as") monotonic157 ret i32 %result158}159 160define i32 @global_system_atomic_min_i32(ptr addrspace(1) %ptr, i32 %val) {161; GFX1250-LABEL: global_system_atomic_min_i32:162; GFX1250: ; %bb.0:163; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0164; GFX1250-NEXT: s_wait_kmcnt 0x0165; GFX1250-NEXT: global_atomic_min_i32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_SYS166; GFX1250-NEXT: s_wait_loadcnt 0x0167; GFX1250-NEXT: s_set_pc_i64 s[30:31]168 %result = atomicrmw min ptr addrspace(1) %ptr, i32 %val monotonic169 ret i32 %result170}171 172define i32 @global_one_as_atomic_max_i32(ptr addrspace(1) %ptr, i32 %val) {173; GFX1250-LABEL: global_one_as_atomic_max_i32:174; GFX1250: ; %bb.0:175; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0176; GFX1250-NEXT: s_wait_kmcnt 0x0177; GFX1250-NEXT: global_atomic_max_i32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_SYS178; GFX1250-NEXT: s_wait_loadcnt 0x0179; GFX1250-NEXT: s_set_pc_i64 s[30:31]180 %result = atomicrmw max ptr addrspace(1) %ptr, i32 %val syncscope("one-as") monotonic181 ret i32 %result182}183 184define i32 @global_system_atomic_max_i32(ptr addrspace(1) %ptr, i32 %val) {185; GFX1250-LABEL: global_system_atomic_max_i32:186; GFX1250: ; %bb.0:187; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0188; GFX1250-NEXT: s_wait_kmcnt 0x0189; GFX1250-NEXT: global_atomic_max_i32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_SYS190; GFX1250-NEXT: s_wait_loadcnt 0x0191; GFX1250-NEXT: s_set_pc_i64 s[30:31]192 %result = atomicrmw max ptr addrspace(1) %ptr, i32 %val monotonic193 ret i32 %result194}195 196define i32 @global_one_as_atomic_umin_i32(ptr addrspace(1) %ptr, i32 %val) {197; GFX1250-LABEL: global_one_as_atomic_umin_i32:198; GFX1250: ; %bb.0:199; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0200; GFX1250-NEXT: s_wait_kmcnt 0x0201; GFX1250-NEXT: global_atomic_min_u32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_SYS202; GFX1250-NEXT: s_wait_loadcnt 0x0203; GFX1250-NEXT: s_set_pc_i64 s[30:31]204 %result = atomicrmw umin ptr addrspace(1) %ptr, i32 %val syncscope("one-as") monotonic205 ret i32 %result206}207 208define i32 @global_system_atomic_umin_i32(ptr addrspace(1) %ptr, i32 %val) {209; GFX1250-LABEL: global_system_atomic_umin_i32:210; GFX1250: ; %bb.0:211; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0212; GFX1250-NEXT: s_wait_kmcnt 0x0213; GFX1250-NEXT: global_atomic_min_u32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_SYS214; GFX1250-NEXT: s_wait_loadcnt 0x0215; GFX1250-NEXT: s_set_pc_i64 s[30:31]216 %result = atomicrmw umin ptr addrspace(1) %ptr, i32 %val monotonic217 ret i32 %result218}219 220define i32 @global_one_as_atomic_umax_i32(ptr addrspace(1) %ptr, i32 %val) {221; GFX1250-LABEL: global_one_as_atomic_umax_i32:222; GFX1250: ; %bb.0:223; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0224; GFX1250-NEXT: s_wait_kmcnt 0x0225; GFX1250-NEXT: global_atomic_max_u32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_SYS226; GFX1250-NEXT: s_wait_loadcnt 0x0227; GFX1250-NEXT: s_set_pc_i64 s[30:31]228 %result = atomicrmw umax ptr addrspace(1) %ptr, i32 %val syncscope("one-as") monotonic229 ret i32 %result230}231 232define i32 @global_system_atomic_umax_i32(ptr addrspace(1) %ptr, i32 %val) {233; GFX1250-LABEL: global_system_atomic_umax_i32:234; GFX1250: ; %bb.0:235; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0236; GFX1250-NEXT: s_wait_kmcnt 0x0237; GFX1250-NEXT: global_atomic_max_u32 v0, v[0:1], v2, off th:TH_ATOMIC_RETURN scope:SCOPE_SYS238; GFX1250-NEXT: s_wait_loadcnt 0x0239; GFX1250-NEXT: s_set_pc_i64 s[30:31]240 %result = atomicrmw umax ptr addrspace(1) %ptr, i32 %val monotonic241 ret i32 %result242}243 244define i64 @global_one_as_atomic_min_i64(ptr addrspace(1) %ptr, i64 %val) {245; GFX1250-LABEL: global_one_as_atomic_min_i64:246; GFX1250: ; %bb.0:247; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0248; GFX1250-NEXT: s_wait_kmcnt 0x0249; GFX1250-NEXT: global_atomic_min_i64 v[0:1], v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS250; GFX1250-NEXT: s_wait_loadcnt 0x0251; GFX1250-NEXT: s_set_pc_i64 s[30:31]252 %result = atomicrmw min ptr addrspace(1) %ptr, i64 %val syncscope("one-as") monotonic253 ret i64 %result254}255 256define i64 @global_system_atomic_min_i64(ptr addrspace(1) %ptr, i64 %val) {257; GFX1250-LABEL: global_system_atomic_min_i64:258; GFX1250: ; %bb.0:259; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0260; GFX1250-NEXT: s_wait_kmcnt 0x0261; GFX1250-NEXT: global_atomic_min_i64 v[0:1], v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS262; GFX1250-NEXT: s_wait_loadcnt 0x0263; GFX1250-NEXT: s_set_pc_i64 s[30:31]264 %result = atomicrmw min ptr addrspace(1) %ptr, i64 %val monotonic265 ret i64 %result266}267 268define i64 @global_one_as_atomic_max_i64(ptr addrspace(1) %ptr, i64 %val) {269; GFX1250-LABEL: global_one_as_atomic_max_i64:270; GFX1250: ; %bb.0:271; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0272; GFX1250-NEXT: s_wait_kmcnt 0x0273; GFX1250-NEXT: global_atomic_max_i64 v[0:1], v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS274; GFX1250-NEXT: s_wait_loadcnt 0x0275; GFX1250-NEXT: s_set_pc_i64 s[30:31]276 %result = atomicrmw max ptr addrspace(1) %ptr, i64 %val syncscope("one-as") monotonic277 ret i64 %result278}279 280define i64 @global_system_atomic_max_i64(ptr addrspace(1) %ptr, i64 %val) {281; GFX1250-LABEL: global_system_atomic_max_i64:282; GFX1250: ; %bb.0:283; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0284; GFX1250-NEXT: s_wait_kmcnt 0x0285; GFX1250-NEXT: global_atomic_max_i64 v[0:1], v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS286; GFX1250-NEXT: s_wait_loadcnt 0x0287; GFX1250-NEXT: s_set_pc_i64 s[30:31]288 %result = atomicrmw max ptr addrspace(1) %ptr, i64 %val monotonic289 ret i64 %result290}291 292define i64 @global_one_as_atomic_umin_i64(ptr addrspace(1) %ptr, i64 %val) {293; GFX1250-LABEL: global_one_as_atomic_umin_i64:294; GFX1250: ; %bb.0:295; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0296; GFX1250-NEXT: s_wait_kmcnt 0x0297; GFX1250-NEXT: global_atomic_min_u64 v[0:1], v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS298; GFX1250-NEXT: s_wait_loadcnt 0x0299; GFX1250-NEXT: s_set_pc_i64 s[30:31]300 %result = atomicrmw umin ptr addrspace(1) %ptr, i64 %val syncscope("one-as") monotonic301 ret i64 %result302}303 304define i64 @global_system_atomic_umin_i64(ptr addrspace(1) %ptr, i64 %val) {305; GFX1250-LABEL: global_system_atomic_umin_i64:306; GFX1250: ; %bb.0:307; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0308; GFX1250-NEXT: s_wait_kmcnt 0x0309; GFX1250-NEXT: global_atomic_min_u64 v[0:1], v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS310; GFX1250-NEXT: s_wait_loadcnt 0x0311; GFX1250-NEXT: s_set_pc_i64 s[30:31]312 %result = atomicrmw umin ptr addrspace(1) %ptr, i64 %val monotonic313 ret i64 %result314}315 316define i64 @global_one_as_atomic_umax_i64(ptr addrspace(1) %ptr, i64 %val) {317; GFX1250-LABEL: global_one_as_atomic_umax_i64:318; GFX1250: ; %bb.0:319; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0320; GFX1250-NEXT: s_wait_kmcnt 0x0321; GFX1250-NEXT: global_atomic_max_u64 v[0:1], v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS322; GFX1250-NEXT: s_wait_loadcnt 0x0323; GFX1250-NEXT: s_set_pc_i64 s[30:31]324 %result = atomicrmw umax ptr addrspace(1) %ptr, i64 %val syncscope("one-as") monotonic325 ret i64 %result326}327 328define i64 @global_system_atomic_umax_i64(ptr addrspace(1) %ptr, i64 %val) {329; GFX1250-LABEL: global_system_atomic_umax_i64:330; GFX1250: ; %bb.0:331; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0332; GFX1250-NEXT: s_wait_kmcnt 0x0333; GFX1250-NEXT: global_atomic_max_u64 v[0:1], v[0:1], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS334; GFX1250-NEXT: s_wait_loadcnt 0x0335; GFX1250-NEXT: s_set_pc_i64 s[30:31]336 %result = atomicrmw umax ptr addrspace(1) %ptr, i64 %val monotonic337 ret i64 %result338}339 340define i16 @global_one_as_atomic_min_i16(ptr addrspace(1) %ptr, i16 %val) {341; GFX1250-LABEL: global_one_as_atomic_min_i16:342; GFX1250: ; %bb.0:343; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0344; GFX1250-NEXT: s_wait_kmcnt 0x0345; GFX1250-NEXT: v_mov_b32_e32 v3, v0346; GFX1250-NEXT: s_mov_b32 s0, 0347; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)348; GFX1250-NEXT: v_and_b32_e32 v0, -4, v3349; GFX1250-NEXT: v_and_b32_e32 v3, 3, v3350; GFX1250-NEXT: v_lshlrev_b32_e32 v3, 3, v3351; GFX1250-NEXT: global_load_b32 v5, v[0:1], off352; GFX1250-NEXT: v_lshlrev_b32_e64 v4, v3, 0xffff353; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)354; GFX1250-NEXT: v_not_b32_e32 v4, v4355; GFX1250-NEXT: .LBB28_1: ; %atomicrmw.start356; GFX1250-NEXT: ; =>This Inner Loop Header: Depth=1357; GFX1250-NEXT: s_wait_loadcnt 0x0358; GFX1250-NEXT: v_mov_b32_e32 v7, v5359; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)360; GFX1250-NEXT: v_lshrrev_b32_e32 v5, v3, v7361; GFX1250-NEXT: v_min_i16 v5, v5, v2362; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)363; GFX1250-NEXT: v_and_b32_e32 v5, 0xffff, v5364; GFX1250-NEXT: v_lshlrev_b32_e32 v5, v3, v5365; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)366; GFX1250-NEXT: v_and_or_b32 v6, v7, v4, v5367; GFX1250-NEXT: s_wait_xcnt 0x0368; GFX1250-NEXT: global_atomic_cmpswap_b32 v5, v[0:1], v[6:7], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS369; GFX1250-NEXT: s_wait_loadcnt 0x0370; GFX1250-NEXT: v_cmp_eq_u32_e32 vcc_lo, v5, v7371; GFX1250-NEXT: s_or_b32 s0, vcc_lo, s0372; GFX1250-NEXT: s_wait_xcnt 0x0373; GFX1250-NEXT: s_and_not1_b32 exec_lo, exec_lo, s0374; GFX1250-NEXT: s_cbranch_execnz .LBB28_1375; GFX1250-NEXT: ; %bb.2: ; %atomicrmw.end376; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0377; GFX1250-NEXT: v_lshrrev_b32_e32 v0, v3, v5378; GFX1250-NEXT: s_set_pc_i64 s[30:31]379 %result = atomicrmw min ptr addrspace(1) %ptr, i16 %val syncscope("one-as") monotonic380 ret i16 %result381}382 383define i16 @global_one_as_atomic_umin_i16(ptr addrspace(1) %ptr, i16 %val) {384; GFX1250-LABEL: global_one_as_atomic_umin_i16:385; GFX1250: ; %bb.0:386; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0387; GFX1250-NEXT: s_wait_kmcnt 0x0388; GFX1250-NEXT: v_mov_b32_e32 v3, v0389; GFX1250-NEXT: s_mov_b32 s0, 0390; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)391; GFX1250-NEXT: v_and_b32_e32 v0, -4, v3392; GFX1250-NEXT: v_and_b32_e32 v3, 3, v3393; GFX1250-NEXT: v_lshlrev_b32_e32 v3, 3, v3394; GFX1250-NEXT: global_load_b32 v5, v[0:1], off395; GFX1250-NEXT: v_lshlrev_b32_e64 v4, v3, 0xffff396; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)397; GFX1250-NEXT: v_not_b32_e32 v4, v4398; GFX1250-NEXT: .LBB29_1: ; %atomicrmw.start399; GFX1250-NEXT: ; =>This Inner Loop Header: Depth=1400; GFX1250-NEXT: s_wait_loadcnt 0x0401; GFX1250-NEXT: v_mov_b32_e32 v7, v5402; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)403; GFX1250-NEXT: v_lshrrev_b32_e32 v5, v3, v7404; GFX1250-NEXT: v_min_u16 v5, v5, v2405; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)406; GFX1250-NEXT: v_and_b32_e32 v5, 0xffff, v5407; GFX1250-NEXT: v_lshlrev_b32_e32 v5, v3, v5408; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)409; GFX1250-NEXT: v_and_or_b32 v6, v7, v4, v5410; GFX1250-NEXT: s_wait_xcnt 0x0411; GFX1250-NEXT: global_atomic_cmpswap_b32 v5, v[0:1], v[6:7], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS412; GFX1250-NEXT: s_wait_loadcnt 0x0413; GFX1250-NEXT: v_cmp_eq_u32_e32 vcc_lo, v5, v7414; GFX1250-NEXT: s_or_b32 s0, vcc_lo, s0415; GFX1250-NEXT: s_wait_xcnt 0x0416; GFX1250-NEXT: s_and_not1_b32 exec_lo, exec_lo, s0417; GFX1250-NEXT: s_cbranch_execnz .LBB29_1418; GFX1250-NEXT: ; %bb.2: ; %atomicrmw.end419; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0420; GFX1250-NEXT: v_lshrrev_b32_e32 v0, v3, v5421; GFX1250-NEXT: s_set_pc_i64 s[30:31]422 %result = atomicrmw umin ptr addrspace(1) %ptr, i16 %val syncscope("one-as") monotonic423 ret i16 %result424}425 426define i16 @global_one_as_atomic_max_i16(ptr addrspace(1) %ptr, i16 %val) {427; GFX1250-LABEL: global_one_as_atomic_max_i16:428; GFX1250: ; %bb.0:429; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0430; GFX1250-NEXT: s_wait_kmcnt 0x0431; GFX1250-NEXT: v_mov_b32_e32 v3, v0432; GFX1250-NEXT: s_mov_b32 s0, 0433; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)434; GFX1250-NEXT: v_and_b32_e32 v0, -4, v3435; GFX1250-NEXT: v_and_b32_e32 v3, 3, v3436; GFX1250-NEXT: v_lshlrev_b32_e32 v3, 3, v3437; GFX1250-NEXT: global_load_b32 v5, v[0:1], off438; GFX1250-NEXT: v_lshlrev_b32_e64 v4, v3, 0xffff439; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)440; GFX1250-NEXT: v_not_b32_e32 v4, v4441; GFX1250-NEXT: .LBB30_1: ; %atomicrmw.start442; GFX1250-NEXT: ; =>This Inner Loop Header: Depth=1443; GFX1250-NEXT: s_wait_loadcnt 0x0444; GFX1250-NEXT: v_mov_b32_e32 v7, v5445; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)446; GFX1250-NEXT: v_lshrrev_b32_e32 v5, v3, v7447; GFX1250-NEXT: v_max_i16 v5, v5, v2448; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)449; GFX1250-NEXT: v_and_b32_e32 v5, 0xffff, v5450; GFX1250-NEXT: v_lshlrev_b32_e32 v5, v3, v5451; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)452; GFX1250-NEXT: v_and_or_b32 v6, v7, v4, v5453; GFX1250-NEXT: s_wait_xcnt 0x0454; GFX1250-NEXT: global_atomic_cmpswap_b32 v5, v[0:1], v[6:7], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS455; GFX1250-NEXT: s_wait_loadcnt 0x0456; GFX1250-NEXT: v_cmp_eq_u32_e32 vcc_lo, v5, v7457; GFX1250-NEXT: s_or_b32 s0, vcc_lo, s0458; GFX1250-NEXT: s_wait_xcnt 0x0459; GFX1250-NEXT: s_and_not1_b32 exec_lo, exec_lo, s0460; GFX1250-NEXT: s_cbranch_execnz .LBB30_1461; GFX1250-NEXT: ; %bb.2: ; %atomicrmw.end462; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0463; GFX1250-NEXT: v_lshrrev_b32_e32 v0, v3, v5464; GFX1250-NEXT: s_set_pc_i64 s[30:31]465 %result = atomicrmw max ptr addrspace(1) %ptr, i16 %val syncscope("one-as") monotonic466 ret i16 %result467}468 469define i16 @global_one_as_atomic_umax_i16(ptr addrspace(1) %ptr, i16 %val) {470; GFX1250-LABEL: global_one_as_atomic_umax_i16:471; GFX1250: ; %bb.0:472; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0473; GFX1250-NEXT: s_wait_kmcnt 0x0474; GFX1250-NEXT: v_mov_b32_e32 v3, v0475; GFX1250-NEXT: s_mov_b32 s0, 0476; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)477; GFX1250-NEXT: v_and_b32_e32 v0, -4, v3478; GFX1250-NEXT: v_and_b32_e32 v3, 3, v3479; GFX1250-NEXT: v_lshlrev_b32_e32 v3, 3, v3480; GFX1250-NEXT: global_load_b32 v5, v[0:1], off481; GFX1250-NEXT: v_lshlrev_b32_e64 v4, v3, 0xffff482; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)483; GFX1250-NEXT: v_not_b32_e32 v4, v4484; GFX1250-NEXT: .LBB31_1: ; %atomicrmw.start485; GFX1250-NEXT: ; =>This Inner Loop Header: Depth=1486; GFX1250-NEXT: s_wait_loadcnt 0x0487; GFX1250-NEXT: v_mov_b32_e32 v7, v5488; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)489; GFX1250-NEXT: v_lshrrev_b32_e32 v5, v3, v7490; GFX1250-NEXT: v_max_u16 v5, v5, v2491; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)492; GFX1250-NEXT: v_and_b32_e32 v5, 0xffff, v5493; GFX1250-NEXT: v_lshlrev_b32_e32 v5, v3, v5494; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)495; GFX1250-NEXT: v_and_or_b32 v6, v7, v4, v5496; GFX1250-NEXT: s_wait_xcnt 0x0497; GFX1250-NEXT: global_atomic_cmpswap_b32 v5, v[0:1], v[6:7], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS498; GFX1250-NEXT: s_wait_loadcnt 0x0499; GFX1250-NEXT: v_cmp_eq_u32_e32 vcc_lo, v5, v7500; GFX1250-NEXT: s_or_b32 s0, vcc_lo, s0501; GFX1250-NEXT: s_wait_xcnt 0x0502; GFX1250-NEXT: s_and_not1_b32 exec_lo, exec_lo, s0503; GFX1250-NEXT: s_cbranch_execnz .LBB31_1504; GFX1250-NEXT: ; %bb.2: ; %atomicrmw.end505; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0506; GFX1250-NEXT: v_lshrrev_b32_e32 v0, v3, v5507; GFX1250-NEXT: s_set_pc_i64 s[30:31]508 %result = atomicrmw umax ptr addrspace(1) %ptr, i16 %val syncscope("one-as") monotonic509 ret i16 %result510}511 512define float @flat_system_atomic_fadd_f32(ptr %ptr, float %val) {513; GFX1250-LABEL: flat_system_atomic_fadd_f32:514; GFX1250: ; %bb.0:515; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0516; GFX1250-NEXT: s_wait_kmcnt 0x0517; GFX1250-NEXT: flat_atomic_add_f32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_SYS518; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0519; GFX1250-NEXT: s_set_pc_i64 s[30:31]520 %result = atomicrmw fadd ptr %ptr, float %val monotonic521 ret float %result522}523 524define float @flat_one_as_atomic_fadd_f32(ptr %ptr, float %val) {525; GFX1250-LABEL: flat_one_as_atomic_fadd_f32:526; GFX1250: ; %bb.0:527; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0528; GFX1250-NEXT: s_wait_kmcnt 0x0529; GFX1250-NEXT: flat_atomic_add_f32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_SYS530; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0531; GFX1250-NEXT: s_set_pc_i64 s[30:31]532 %result = atomicrmw fadd ptr %ptr, float %val syncscope("one-as") monotonic533 ret float %result534}535 536define double @flat_system_atomic_fadd_f64(ptr %ptr, double %val) {537; GFX1250-LABEL: flat_system_atomic_fadd_f64:538; GFX1250: ; %bb.0:539; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0540; GFX1250-NEXT: s_wait_kmcnt 0x0541; GFX1250-NEXT: v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0542; GFX1250-NEXT: s_mov_b64 s[0:1], src_shared_base543; GFX1250-NEXT: s_mov_b32 s0, exec_lo544; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr1545; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)546; GFX1250-NEXT: v_cmpx_ne_u32_e64 s1, v5547; GFX1250-NEXT: s_xor_b32 s0, exec_lo, s0548; GFX1250-NEXT: s_cbranch_execnz .LBB34_3549; GFX1250-NEXT: ; %bb.1: ; %Flow2550; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s0551; GFX1250-NEXT: s_cbranch_execnz .LBB34_8552; GFX1250-NEXT: .LBB34_2: ; %atomicrmw.phi553; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0554; GFX1250-NEXT: s_wait_loadcnt 0x0555; GFX1250-NEXT: s_set_pc_i64 s[30:31]556; GFX1250-NEXT: .LBB34_3: ; %atomicrmw.check.private557; GFX1250-NEXT: v_xor_b32_e32 v0, src_flat_scratch_base_hi, v5558; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)559; GFX1250-NEXT: v_cmp_lt_u32_e32 vcc_lo, 0x3ffffff, v0560; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr1561; GFX1250-NEXT: s_and_saveexec_b32 s1, vcc_lo562; GFX1250-NEXT: s_xor_b32 s1, exec_lo, s1563; GFX1250-NEXT: s_cbranch_execz .LBB34_5564; GFX1250-NEXT: ; %bb.4: ; %atomicrmw.global565; GFX1250-NEXT: global_atomic_add_f64 v[0:1], v[4:5], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS566; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr5567; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr3568; GFX1250-NEXT: .LBB34_5: ; %Flow569; GFX1250-NEXT: s_wait_xcnt 0x0570; GFX1250-NEXT: s_and_not1_saveexec_b32 s1, s1571; GFX1250-NEXT: s_cbranch_execz .LBB34_7572; GFX1250-NEXT: ; %bb.6: ; %atomicrmw.private573; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[4:5]574; GFX1250-NEXT: s_wait_loadcnt 0x0575; GFX1250-NEXT: v_subrev_nc_u32_e32 v0, src_flat_scratch_base_lo, v4576; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)577; GFX1250-NEXT: v_cndmask_b32_e32 v4, -1, v0, vcc_lo578; GFX1250-NEXT: scratch_load_b64 v[0:1], v4, off579; GFX1250-NEXT: s_wait_loadcnt 0x0580; GFX1250-NEXT: v_add_f64_e32 v[2:3], v[0:1], v[2:3]581; GFX1250-NEXT: scratch_store_b64 v4, v[2:3], off582; GFX1250-NEXT: .LBB34_7: ; %Flow1583; GFX1250-NEXT: s_wait_xcnt 0x0584; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s1585; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr5586; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr3587; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s0588; GFX1250-NEXT: s_cbranch_execz .LBB34_2589; GFX1250-NEXT: .LBB34_8: ; %atomicrmw.shared590; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[4:5]591; GFX1250-NEXT: s_wait_loadcnt 0x0592; GFX1250-NEXT: v_cndmask_b32_e32 v0, -1, v4, vcc_lo593; GFX1250-NEXT: ds_add_rtn_f64 v[0:1], v0, v[2:3]594; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0595; GFX1250-NEXT: s_wait_dscnt 0x0596; GFX1250-NEXT: s_set_pc_i64 s[30:31]597 %result = atomicrmw fadd ptr %ptr, double %val monotonic598 ret double %result599}600 601define double @flat_one_as_atomic_fadd_f64(ptr %ptr, double %val) {602; GFX1250-LABEL: flat_one_as_atomic_fadd_f64:603; GFX1250: ; %bb.0:604; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0605; GFX1250-NEXT: s_wait_kmcnt 0x0606; GFX1250-NEXT: v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0607; GFX1250-NEXT: s_mov_b64 s[0:1], src_shared_base608; GFX1250-NEXT: s_mov_b32 s0, exec_lo609; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr1610; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)611; GFX1250-NEXT: v_cmpx_ne_u32_e64 s1, v5612; GFX1250-NEXT: s_xor_b32 s0, exec_lo, s0613; GFX1250-NEXT: s_cbranch_execnz .LBB35_3614; GFX1250-NEXT: ; %bb.1: ; %Flow2615; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s0616; GFX1250-NEXT: s_cbranch_execnz .LBB35_8617; GFX1250-NEXT: .LBB35_2: ; %atomicrmw.phi618; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0619; GFX1250-NEXT: s_wait_loadcnt 0x0620; GFX1250-NEXT: s_set_pc_i64 s[30:31]621; GFX1250-NEXT: .LBB35_3: ; %atomicrmw.check.private622; GFX1250-NEXT: v_xor_b32_e32 v0, src_flat_scratch_base_hi, v5623; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)624; GFX1250-NEXT: v_cmp_lt_u32_e32 vcc_lo, 0x3ffffff, v0625; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr1626; GFX1250-NEXT: s_and_saveexec_b32 s1, vcc_lo627; GFX1250-NEXT: s_xor_b32 s1, exec_lo, s1628; GFX1250-NEXT: s_cbranch_execz .LBB35_5629; GFX1250-NEXT: ; %bb.4: ; %atomicrmw.global630; GFX1250-NEXT: global_atomic_add_f64 v[0:1], v[4:5], v[2:3], off th:TH_ATOMIC_RETURN scope:SCOPE_SYS631; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr5632; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr3633; GFX1250-NEXT: .LBB35_5: ; %Flow634; GFX1250-NEXT: s_wait_xcnt 0x0635; GFX1250-NEXT: s_and_not1_saveexec_b32 s1, s1636; GFX1250-NEXT: s_cbranch_execz .LBB35_7637; GFX1250-NEXT: ; %bb.6: ; %atomicrmw.private638; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[4:5]639; GFX1250-NEXT: s_wait_loadcnt 0x0640; GFX1250-NEXT: v_subrev_nc_u32_e32 v0, src_flat_scratch_base_lo, v4641; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)642; GFX1250-NEXT: v_cndmask_b32_e32 v4, -1, v0, vcc_lo643; GFX1250-NEXT: scratch_load_b64 v[0:1], v4, off644; GFX1250-NEXT: s_wait_loadcnt 0x0645; GFX1250-NEXT: v_add_f64_e32 v[2:3], v[0:1], v[2:3]646; GFX1250-NEXT: scratch_store_b64 v4, v[2:3], off647; GFX1250-NEXT: .LBB35_7: ; %Flow1648; GFX1250-NEXT: s_wait_xcnt 0x0649; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s1650; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr5651; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr3652; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s0653; GFX1250-NEXT: s_cbranch_execz .LBB35_2654; GFX1250-NEXT: .LBB35_8: ; %atomicrmw.shared655; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[4:5]656; GFX1250-NEXT: s_wait_loadcnt 0x0657; GFX1250-NEXT: v_cndmask_b32_e32 v0, -1, v4, vcc_lo658; GFX1250-NEXT: ds_add_rtn_f64 v[0:1], v0, v[2:3]659; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0660; GFX1250-NEXT: s_wait_dscnt 0x0661; GFX1250-NEXT: s_set_pc_i64 s[30:31]662 %result = atomicrmw fadd ptr %ptr, double %val syncscope("one-as") monotonic663 ret double %result664}665 666define float @flat_system_atomic_fmin_f32(ptr %ptr, float %val) {667; GFX1250-LABEL: flat_system_atomic_fmin_f32:668; GFX1250: ; %bb.0:669; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0670; GFX1250-NEXT: s_wait_kmcnt 0x0671; GFX1250-NEXT: flat_atomic_min_num_f32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_SYS672; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0673; GFX1250-NEXT: s_set_pc_i64 s[30:31]674 %result = atomicrmw fmin ptr %ptr, float %val monotonic675 ret float %result676}677 678define float @flat_one_as_atomic_fmin_f32(ptr %ptr, float %val) {679; GFX1250-LABEL: flat_one_as_atomic_fmin_f32:680; GFX1250: ; %bb.0:681; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0682; GFX1250-NEXT: s_wait_kmcnt 0x0683; GFX1250-NEXT: flat_atomic_min_num_f32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_SYS684; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0685; GFX1250-NEXT: s_set_pc_i64 s[30:31]686 %result = atomicrmw fmin ptr %ptr, float %val syncscope("one-as") monotonic687 ret float %result688}689 690define double @flat_system_atomic_fmin_f64(ptr %ptr, double %val) {691; GFX1250-LABEL: flat_system_atomic_fmin_f64:692; GFX1250: ; %bb.0:693; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0694; GFX1250-NEXT: s_wait_kmcnt 0x0695; GFX1250-NEXT: v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0696; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)697; GFX1250-NEXT: v_xor_b32_e32 v0, src_flat_scratch_base_hi, v5698; GFX1250-NEXT: v_cmp_lt_u32_e32 vcc_lo, 0x3ffffff, v0699; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr1700; GFX1250-NEXT: s_and_saveexec_b32 s0, vcc_lo701; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1)702; GFX1250-NEXT: s_xor_b32 s0, exec_lo, s0703; GFX1250-NEXT: s_cbranch_execnz .LBB38_3704; GFX1250-NEXT: ; %bb.1: ; %Flow705; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s0706; GFX1250-NEXT: s_cbranch_execnz .LBB38_4707; GFX1250-NEXT: .LBB38_2: ; %atomicrmw.phi708; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0709; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0710; GFX1250-NEXT: s_set_pc_i64 s[30:31]711; GFX1250-NEXT: .LBB38_3: ; %atomicrmw.global712; GFX1250-NEXT: flat_atomic_min_num_f64 v[0:1], v[4:5], v[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SYS713; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr5714; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr3715; GFX1250-NEXT: s_wait_xcnt 0x0716; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s0717; GFX1250-NEXT: s_cbranch_execz .LBB38_2718; GFX1250-NEXT: .LBB38_4: ; %atomicrmw.private719; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[4:5]720; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0721; GFX1250-NEXT: v_subrev_nc_u32_e32 v0, src_flat_scratch_base_lo, v4722; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)723; GFX1250-NEXT: v_dual_max_num_f64 v[2:3], v[2:3], v[2:3] :: v_dual_cndmask_b32 v6, -1, v0, vcc_lo724; GFX1250-NEXT: scratch_load_b64 v[0:1], v6, off725; GFX1250-NEXT: s_wait_loadcnt 0x0726; GFX1250-NEXT: v_max_num_f64_e32 v[4:5], v[0:1], v[0:1]727; GFX1250-NEXT: v_min_num_f64_e32 v[2:3], v[4:5], v[2:3]728; GFX1250-NEXT: scratch_store_b64 v6, v[2:3], off729; GFX1250-NEXT: s_wait_xcnt 0x0730; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0731; GFX1250-NEXT: s_set_pc_i64 s[30:31]732 %result = atomicrmw fmin ptr %ptr, double %val monotonic733 ret double %result734}735 736define double @flat_one_as_atomic_fmin_f64(ptr %ptr, double %val) {737; GFX1250-LABEL: flat_one_as_atomic_fmin_f64:738; GFX1250: ; %bb.0:739; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0740; GFX1250-NEXT: s_wait_kmcnt 0x0741; GFX1250-NEXT: v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0742; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)743; GFX1250-NEXT: v_xor_b32_e32 v0, src_flat_scratch_base_hi, v5744; GFX1250-NEXT: v_cmp_lt_u32_e32 vcc_lo, 0x3ffffff, v0745; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr1746; GFX1250-NEXT: s_and_saveexec_b32 s0, vcc_lo747; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1)748; GFX1250-NEXT: s_xor_b32 s0, exec_lo, s0749; GFX1250-NEXT: s_cbranch_execnz .LBB39_3750; GFX1250-NEXT: ; %bb.1: ; %Flow751; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s0752; GFX1250-NEXT: s_cbranch_execnz .LBB39_4753; GFX1250-NEXT: .LBB39_2: ; %atomicrmw.phi754; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0755; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0756; GFX1250-NEXT: s_set_pc_i64 s[30:31]757; GFX1250-NEXT: .LBB39_3: ; %atomicrmw.global758; GFX1250-NEXT: flat_atomic_min_num_f64 v[0:1], v[4:5], v[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SYS759; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr5760; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr3761; GFX1250-NEXT: s_wait_xcnt 0x0762; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s0763; GFX1250-NEXT: s_cbranch_execz .LBB39_2764; GFX1250-NEXT: .LBB39_4: ; %atomicrmw.private765; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[4:5]766; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0767; GFX1250-NEXT: v_subrev_nc_u32_e32 v0, src_flat_scratch_base_lo, v4768; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)769; GFX1250-NEXT: v_dual_max_num_f64 v[2:3], v[2:3], v[2:3] :: v_dual_cndmask_b32 v6, -1, v0, vcc_lo770; GFX1250-NEXT: scratch_load_b64 v[0:1], v6, off771; GFX1250-NEXT: s_wait_loadcnt 0x0772; GFX1250-NEXT: v_max_num_f64_e32 v[4:5], v[0:1], v[0:1]773; GFX1250-NEXT: v_min_num_f64_e32 v[2:3], v[4:5], v[2:3]774; GFX1250-NEXT: scratch_store_b64 v6, v[2:3], off775; GFX1250-NEXT: s_wait_xcnt 0x0776; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0777; GFX1250-NEXT: s_set_pc_i64 s[30:31]778 %result = atomicrmw fmin ptr %ptr, double %val syncscope("one-as") monotonic779 ret double %result780}781 782define float @flat_system_atomic_fmax_f32(ptr %ptr, float %val) {783; GFX1250-LABEL: flat_system_atomic_fmax_f32:784; GFX1250: ; %bb.0:785; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0786; GFX1250-NEXT: s_wait_kmcnt 0x0787; GFX1250-NEXT: flat_atomic_max_num_f32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_SYS788; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0789; GFX1250-NEXT: s_set_pc_i64 s[30:31]790 %result = atomicrmw fmax ptr %ptr, float %val monotonic791 ret float %result792}793 794define float @flat_one_as_atomic_fmax_f32(ptr %ptr, float %val) {795; GFX1250-LABEL: flat_one_as_atomic_fmax_f32:796; GFX1250: ; %bb.0:797; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0798; GFX1250-NEXT: s_wait_kmcnt 0x0799; GFX1250-NEXT: flat_atomic_max_num_f32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_SYS800; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0801; GFX1250-NEXT: s_set_pc_i64 s[30:31]802 %result = atomicrmw fmax ptr %ptr, float %val syncscope("one-as") monotonic803 ret float %result804}805 806define double @flat_system_atomic_fmax_f64(ptr %ptr, double %val) {807; GFX1250-LABEL: flat_system_atomic_fmax_f64:808; GFX1250: ; %bb.0:809; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0810; GFX1250-NEXT: s_wait_kmcnt 0x0811; GFX1250-NEXT: v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0812; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)813; GFX1250-NEXT: v_xor_b32_e32 v0, src_flat_scratch_base_hi, v5814; GFX1250-NEXT: v_cmp_lt_u32_e32 vcc_lo, 0x3ffffff, v0815; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr1816; GFX1250-NEXT: s_and_saveexec_b32 s0, vcc_lo817; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1)818; GFX1250-NEXT: s_xor_b32 s0, exec_lo, s0819; GFX1250-NEXT: s_cbranch_execnz .LBB42_3820; GFX1250-NEXT: ; %bb.1: ; %Flow821; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s0822; GFX1250-NEXT: s_cbranch_execnz .LBB42_4823; GFX1250-NEXT: .LBB42_2: ; %atomicrmw.phi824; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0825; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0826; GFX1250-NEXT: s_set_pc_i64 s[30:31]827; GFX1250-NEXT: .LBB42_3: ; %atomicrmw.global828; GFX1250-NEXT: flat_atomic_max_num_f64 v[0:1], v[4:5], v[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SYS829; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr5830; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr3831; GFX1250-NEXT: s_wait_xcnt 0x0832; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s0833; GFX1250-NEXT: s_cbranch_execz .LBB42_2834; GFX1250-NEXT: .LBB42_4: ; %atomicrmw.private835; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[4:5]836; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0837; GFX1250-NEXT: v_subrev_nc_u32_e32 v0, src_flat_scratch_base_lo, v4838; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)839; GFX1250-NEXT: v_dual_max_num_f64 v[2:3], v[2:3], v[2:3] :: v_dual_cndmask_b32 v6, -1, v0, vcc_lo840; GFX1250-NEXT: scratch_load_b64 v[0:1], v6, off841; GFX1250-NEXT: s_wait_loadcnt 0x0842; GFX1250-NEXT: v_max_num_f64_e32 v[4:5], v[0:1], v[0:1]843; GFX1250-NEXT: v_max_num_f64_e32 v[2:3], v[4:5], v[2:3]844; GFX1250-NEXT: scratch_store_b64 v6, v[2:3], off845; GFX1250-NEXT: s_wait_xcnt 0x0846; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0847; GFX1250-NEXT: s_set_pc_i64 s[30:31]848 %result = atomicrmw fmax ptr %ptr, double %val monotonic849 ret double %result850}851 852define double @flat_one_as_atomic_fmax_f64(ptr %ptr, double %val) {853; GFX1250-LABEL: flat_one_as_atomic_fmax_f64:854; GFX1250: ; %bb.0:855; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0856; GFX1250-NEXT: s_wait_kmcnt 0x0857; GFX1250-NEXT: v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0858; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)859; GFX1250-NEXT: v_xor_b32_e32 v0, src_flat_scratch_base_hi, v5860; GFX1250-NEXT: v_cmp_lt_u32_e32 vcc_lo, 0x3ffffff, v0861; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr1862; GFX1250-NEXT: s_and_saveexec_b32 s0, vcc_lo863; GFX1250-NEXT: s_delay_alu instid0(SALU_CYCLE_1)864; GFX1250-NEXT: s_xor_b32 s0, exec_lo, s0865; GFX1250-NEXT: s_cbranch_execnz .LBB43_3866; GFX1250-NEXT: ; %bb.1: ; %Flow867; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s0868; GFX1250-NEXT: s_cbranch_execnz .LBB43_4869; GFX1250-NEXT: .LBB43_2: ; %atomicrmw.phi870; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0871; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0872; GFX1250-NEXT: s_set_pc_i64 s[30:31]873; GFX1250-NEXT: .LBB43_3: ; %atomicrmw.global874; GFX1250-NEXT: flat_atomic_max_num_f64 v[0:1], v[4:5], v[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SYS875; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr5876; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr3877; GFX1250-NEXT: s_wait_xcnt 0x0878; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s0879; GFX1250-NEXT: s_cbranch_execz .LBB43_2880; GFX1250-NEXT: .LBB43_4: ; %atomicrmw.private881; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[4:5]882; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0883; GFX1250-NEXT: v_subrev_nc_u32_e32 v0, src_flat_scratch_base_lo, v4884; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)885; GFX1250-NEXT: v_dual_max_num_f64 v[2:3], v[2:3], v[2:3] :: v_dual_cndmask_b32 v6, -1, v0, vcc_lo886; GFX1250-NEXT: scratch_load_b64 v[0:1], v6, off887; GFX1250-NEXT: s_wait_loadcnt 0x0888; GFX1250-NEXT: v_max_num_f64_e32 v[4:5], v[0:1], v[0:1]889; GFX1250-NEXT: v_max_num_f64_e32 v[2:3], v[4:5], v[2:3]890; GFX1250-NEXT: scratch_store_b64 v6, v[2:3], off891; GFX1250-NEXT: s_wait_xcnt 0x0892; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s0893; GFX1250-NEXT: s_set_pc_i64 s[30:31]894 %result = atomicrmw fmax ptr %ptr, double %val syncscope("one-as") monotonic895 ret double %result896}897 898define i32 @flat_one_as_atomic_min_i32(ptr %ptr, i32 %val) {899; GFX1250-LABEL: flat_one_as_atomic_min_i32:900; GFX1250: ; %bb.0:901; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0902; GFX1250-NEXT: s_wait_kmcnt 0x0903; GFX1250-NEXT: flat_atomic_min_i32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_SYS904; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0905; GFX1250-NEXT: s_set_pc_i64 s[30:31]906 %result = atomicrmw min ptr %ptr, i32 %val syncscope("one-as") monotonic907 ret i32 %result908}909 910define i32 @flat_system_atomic_min_i32(ptr %ptr, i32 %val) {911; GFX1250-LABEL: flat_system_atomic_min_i32:912; GFX1250: ; %bb.0:913; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0914; GFX1250-NEXT: s_wait_kmcnt 0x0915; GFX1250-NEXT: flat_atomic_min_i32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_SYS916; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0917; GFX1250-NEXT: s_set_pc_i64 s[30:31]918 %result = atomicrmw min ptr %ptr, i32 %val monotonic919 ret i32 %result920}921 922define i32 @flat_one_as_atomic_max_i32(ptr %ptr, i32 %val) {923; GFX1250-LABEL: flat_one_as_atomic_max_i32:924; GFX1250: ; %bb.0:925; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0926; GFX1250-NEXT: s_wait_kmcnt 0x0927; GFX1250-NEXT: flat_atomic_max_i32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_SYS928; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0929; GFX1250-NEXT: s_set_pc_i64 s[30:31]930 %result = atomicrmw max ptr %ptr, i32 %val syncscope("one-as") monotonic931 ret i32 %result932}933 934define i32 @flat_system_atomic_max_i32(ptr %ptr, i32 %val) {935; GFX1250-LABEL: flat_system_atomic_max_i32:936; GFX1250: ; %bb.0:937; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0938; GFX1250-NEXT: s_wait_kmcnt 0x0939; GFX1250-NEXT: flat_atomic_max_i32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_SYS940; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0941; GFX1250-NEXT: s_set_pc_i64 s[30:31]942 %result = atomicrmw max ptr %ptr, i32 %val monotonic943 ret i32 %result944}945 946define i32 @flat_one_as_atomic_umin_i32(ptr %ptr, i32 %val) {947; GFX1250-LABEL: flat_one_as_atomic_umin_i32:948; GFX1250: ; %bb.0:949; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0950; GFX1250-NEXT: s_wait_kmcnt 0x0951; GFX1250-NEXT: flat_atomic_min_u32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_SYS952; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0953; GFX1250-NEXT: s_set_pc_i64 s[30:31]954 %result = atomicrmw umin ptr %ptr, i32 %val syncscope("one-as") monotonic955 ret i32 %result956}957 958define i32 @flat_system_atomic_umin_i32(ptr %ptr, i32 %val) {959; GFX1250-LABEL: flat_system_atomic_umin_i32:960; GFX1250: ; %bb.0:961; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0962; GFX1250-NEXT: s_wait_kmcnt 0x0963; GFX1250-NEXT: flat_atomic_min_u32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_SYS964; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0965; GFX1250-NEXT: s_set_pc_i64 s[30:31]966 %result = atomicrmw umin ptr %ptr, i32 %val monotonic967 ret i32 %result968}969 970define i32 @flat_one_as_atomic_umax_i32(ptr %ptr, i32 %val) {971; GFX1250-LABEL: flat_one_as_atomic_umax_i32:972; GFX1250: ; %bb.0:973; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0974; GFX1250-NEXT: s_wait_kmcnt 0x0975; GFX1250-NEXT: flat_atomic_max_u32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_SYS976; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0977; GFX1250-NEXT: s_set_pc_i64 s[30:31]978 %result = atomicrmw umax ptr %ptr, i32 %val syncscope("one-as") monotonic979 ret i32 %result980}981 982define i32 @flat_system_atomic_umax_i32(ptr %ptr, i32 %val) {983; GFX1250-LABEL: flat_system_atomic_umax_i32:984; GFX1250: ; %bb.0:985; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0986; GFX1250-NEXT: s_wait_kmcnt 0x0987; GFX1250-NEXT: flat_atomic_max_u32 v0, v[0:1], v2 th:TH_ATOMIC_RETURN scope:SCOPE_SYS988; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0989; GFX1250-NEXT: s_set_pc_i64 s[30:31]990 %result = atomicrmw umax ptr %ptr, i32 %val monotonic991 ret i32 %result992}993 994define i64 @flat_one_as_atomic_min_i64(ptr %ptr, i64 %val) {995; GFX1250-LABEL: flat_one_as_atomic_min_i64:996; GFX1250: ; %bb.0:997; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0998; GFX1250-NEXT: s_wait_kmcnt 0x0999; GFX1250-NEXT: v_xor_b32_e32 v4, src_flat_scratch_base_hi, v11000; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1001; GFX1250-NEXT: v_cmp_lt_u32_e32 vcc_lo, 0x3ffffff, v41002; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr51003; GFX1250-NEXT: s_and_saveexec_b32 s0, vcc_lo1004; GFX1250-NEXT: s_xor_b32 s0, exec_lo, s01005; GFX1250-NEXT: s_cbranch_execz .LBB52_21006; GFX1250-NEXT: ; %bb.1: ; %atomicrmw.global1007; GFX1250-NEXT: flat_atomic_min_i64 v[4:5], v[0:1], v[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SYS1008; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr11009; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr31010; GFX1250-NEXT: .LBB52_2: ; %Flow1011; GFX1250-NEXT: s_wait_xcnt 0x01012; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s01013; GFX1250-NEXT: s_cbranch_execz .LBB52_41014; GFX1250-NEXT: ; %bb.3: ; %atomicrmw.private1015; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[0:1]1016; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01017; GFX1250-NEXT: v_subrev_nc_u32_e32 v4, src_flat_scratch_base_lo, v01018; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1019; GFX1250-NEXT: v_cndmask_b32_e32 v6, -1, v4, vcc_lo1020; GFX1250-NEXT: scratch_load_b64 v[4:5], v6, off1021; GFX1250-NEXT: s_wait_loadcnt 0x01022; GFX1250-NEXT: v_min_i64 v[0:1], v[4:5], v[2:3]1023; GFX1250-NEXT: scratch_store_b64 v6, v[0:1], off1024; GFX1250-NEXT: .LBB52_4: ; %atomicrmw.phi1025; GFX1250-NEXT: s_wait_xcnt 0x01026; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s01027; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01028; GFX1250-NEXT: v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v51029; GFX1250-NEXT: s_set_pc_i64 s[30:31]1030 %result = atomicrmw min ptr %ptr, i64 %val syncscope("one-as") monotonic1031 ret i64 %result1032}1033 1034define i64 @flat_system_atomic_min_i64(ptr %ptr, i64 %val) {1035; GFX1250-LABEL: flat_system_atomic_min_i64:1036; GFX1250: ; %bb.0:1037; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01038; GFX1250-NEXT: s_wait_kmcnt 0x01039; GFX1250-NEXT: v_xor_b32_e32 v4, src_flat_scratch_base_hi, v11040; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1041; GFX1250-NEXT: v_cmp_lt_u32_e32 vcc_lo, 0x3ffffff, v41042; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr51043; GFX1250-NEXT: s_and_saveexec_b32 s0, vcc_lo1044; GFX1250-NEXT: s_xor_b32 s0, exec_lo, s01045; GFX1250-NEXT: s_cbranch_execz .LBB53_21046; GFX1250-NEXT: ; %bb.1: ; %atomicrmw.global1047; GFX1250-NEXT: flat_atomic_min_i64 v[4:5], v[0:1], v[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SYS1048; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr11049; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr31050; GFX1250-NEXT: .LBB53_2: ; %Flow1051; GFX1250-NEXT: s_wait_xcnt 0x01052; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s01053; GFX1250-NEXT: s_cbranch_execz .LBB53_41054; GFX1250-NEXT: ; %bb.3: ; %atomicrmw.private1055; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[0:1]1056; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01057; GFX1250-NEXT: v_subrev_nc_u32_e32 v4, src_flat_scratch_base_lo, v01058; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1059; GFX1250-NEXT: v_cndmask_b32_e32 v6, -1, v4, vcc_lo1060; GFX1250-NEXT: scratch_load_b64 v[4:5], v6, off1061; GFX1250-NEXT: s_wait_loadcnt 0x01062; GFX1250-NEXT: v_min_i64 v[0:1], v[4:5], v[2:3]1063; GFX1250-NEXT: scratch_store_b64 v6, v[0:1], off1064; GFX1250-NEXT: .LBB53_4: ; %atomicrmw.phi1065; GFX1250-NEXT: s_wait_xcnt 0x01066; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s01067; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01068; GFX1250-NEXT: v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v51069; GFX1250-NEXT: s_set_pc_i64 s[30:31]1070 %result = atomicrmw min ptr %ptr, i64 %val monotonic1071 ret i64 %result1072}1073 1074define i64 @flat_one_as_atomic_max_i64(ptr %ptr, i64 %val) {1075; GFX1250-LABEL: flat_one_as_atomic_max_i64:1076; GFX1250: ; %bb.0:1077; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01078; GFX1250-NEXT: s_wait_kmcnt 0x01079; GFX1250-NEXT: v_xor_b32_e32 v4, src_flat_scratch_base_hi, v11080; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1081; GFX1250-NEXT: v_cmp_lt_u32_e32 vcc_lo, 0x3ffffff, v41082; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr51083; GFX1250-NEXT: s_and_saveexec_b32 s0, vcc_lo1084; GFX1250-NEXT: s_xor_b32 s0, exec_lo, s01085; GFX1250-NEXT: s_cbranch_execz .LBB54_21086; GFX1250-NEXT: ; %bb.1: ; %atomicrmw.global1087; GFX1250-NEXT: flat_atomic_max_i64 v[4:5], v[0:1], v[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SYS1088; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr11089; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr31090; GFX1250-NEXT: .LBB54_2: ; %Flow1091; GFX1250-NEXT: s_wait_xcnt 0x01092; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s01093; GFX1250-NEXT: s_cbranch_execz .LBB54_41094; GFX1250-NEXT: ; %bb.3: ; %atomicrmw.private1095; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[0:1]1096; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01097; GFX1250-NEXT: v_subrev_nc_u32_e32 v4, src_flat_scratch_base_lo, v01098; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1099; GFX1250-NEXT: v_cndmask_b32_e32 v6, -1, v4, vcc_lo1100; GFX1250-NEXT: scratch_load_b64 v[4:5], v6, off1101; GFX1250-NEXT: s_wait_loadcnt 0x01102; GFX1250-NEXT: v_max_i64 v[0:1], v[4:5], v[2:3]1103; GFX1250-NEXT: scratch_store_b64 v6, v[0:1], off1104; GFX1250-NEXT: .LBB54_4: ; %atomicrmw.phi1105; GFX1250-NEXT: s_wait_xcnt 0x01106; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s01107; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01108; GFX1250-NEXT: v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v51109; GFX1250-NEXT: s_set_pc_i64 s[30:31]1110 %result = atomicrmw max ptr %ptr, i64 %val syncscope("one-as") monotonic1111 ret i64 %result1112}1113 1114define i64 @flat_system_atomic_max_i64(ptr %ptr, i64 %val) {1115; GFX1250-LABEL: flat_system_atomic_max_i64:1116; GFX1250: ; %bb.0:1117; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01118; GFX1250-NEXT: s_wait_kmcnt 0x01119; GFX1250-NEXT: v_xor_b32_e32 v4, src_flat_scratch_base_hi, v11120; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1121; GFX1250-NEXT: v_cmp_lt_u32_e32 vcc_lo, 0x3ffffff, v41122; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr51123; GFX1250-NEXT: s_and_saveexec_b32 s0, vcc_lo1124; GFX1250-NEXT: s_xor_b32 s0, exec_lo, s01125; GFX1250-NEXT: s_cbranch_execz .LBB55_21126; GFX1250-NEXT: ; %bb.1: ; %atomicrmw.global1127; GFX1250-NEXT: flat_atomic_max_i64 v[4:5], v[0:1], v[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SYS1128; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr11129; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr31130; GFX1250-NEXT: .LBB55_2: ; %Flow1131; GFX1250-NEXT: s_wait_xcnt 0x01132; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s01133; GFX1250-NEXT: s_cbranch_execz .LBB55_41134; GFX1250-NEXT: ; %bb.3: ; %atomicrmw.private1135; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[0:1]1136; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01137; GFX1250-NEXT: v_subrev_nc_u32_e32 v4, src_flat_scratch_base_lo, v01138; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1139; GFX1250-NEXT: v_cndmask_b32_e32 v6, -1, v4, vcc_lo1140; GFX1250-NEXT: scratch_load_b64 v[4:5], v6, off1141; GFX1250-NEXT: s_wait_loadcnt 0x01142; GFX1250-NEXT: v_max_i64 v[0:1], v[4:5], v[2:3]1143; GFX1250-NEXT: scratch_store_b64 v6, v[0:1], off1144; GFX1250-NEXT: .LBB55_4: ; %atomicrmw.phi1145; GFX1250-NEXT: s_wait_xcnt 0x01146; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s01147; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01148; GFX1250-NEXT: v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v51149; GFX1250-NEXT: s_set_pc_i64 s[30:31]1150 %result = atomicrmw max ptr %ptr, i64 %val monotonic1151 ret i64 %result1152}1153 1154define i64 @flat_one_as_atomic_umin_i64(ptr %ptr, i64 %val) {1155; GFX1250-LABEL: flat_one_as_atomic_umin_i64:1156; GFX1250: ; %bb.0:1157; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01158; GFX1250-NEXT: s_wait_kmcnt 0x01159; GFX1250-NEXT: v_xor_b32_e32 v4, src_flat_scratch_base_hi, v11160; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1161; GFX1250-NEXT: v_cmp_lt_u32_e32 vcc_lo, 0x3ffffff, v41162; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr51163; GFX1250-NEXT: s_and_saveexec_b32 s0, vcc_lo1164; GFX1250-NEXT: s_xor_b32 s0, exec_lo, s01165; GFX1250-NEXT: s_cbranch_execz .LBB56_21166; GFX1250-NEXT: ; %bb.1: ; %atomicrmw.global1167; GFX1250-NEXT: flat_atomic_min_u64 v[4:5], v[0:1], v[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SYS1168; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr11169; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr31170; GFX1250-NEXT: .LBB56_2: ; %Flow1171; GFX1250-NEXT: s_wait_xcnt 0x01172; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s01173; GFX1250-NEXT: s_cbranch_execz .LBB56_41174; GFX1250-NEXT: ; %bb.3: ; %atomicrmw.private1175; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[0:1]1176; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01177; GFX1250-NEXT: v_subrev_nc_u32_e32 v4, src_flat_scratch_base_lo, v01178; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1179; GFX1250-NEXT: v_cndmask_b32_e32 v6, -1, v4, vcc_lo1180; GFX1250-NEXT: scratch_load_b64 v[4:5], v6, off1181; GFX1250-NEXT: s_wait_loadcnt 0x01182; GFX1250-NEXT: v_min_u64 v[0:1], v[4:5], v[2:3]1183; GFX1250-NEXT: scratch_store_b64 v6, v[0:1], off1184; GFX1250-NEXT: .LBB56_4: ; %atomicrmw.phi1185; GFX1250-NEXT: s_wait_xcnt 0x01186; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s01187; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01188; GFX1250-NEXT: v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v51189; GFX1250-NEXT: s_set_pc_i64 s[30:31]1190 %result = atomicrmw umin ptr %ptr, i64 %val syncscope("one-as") monotonic1191 ret i64 %result1192}1193 1194define i64 @flat_system_atomic_umin_i64(ptr %ptr, i64 %val) {1195; GFX1250-LABEL: flat_system_atomic_umin_i64:1196; GFX1250: ; %bb.0:1197; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01198; GFX1250-NEXT: s_wait_kmcnt 0x01199; GFX1250-NEXT: v_xor_b32_e32 v4, src_flat_scratch_base_hi, v11200; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1201; GFX1250-NEXT: v_cmp_lt_u32_e32 vcc_lo, 0x3ffffff, v41202; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr51203; GFX1250-NEXT: s_and_saveexec_b32 s0, vcc_lo1204; GFX1250-NEXT: s_xor_b32 s0, exec_lo, s01205; GFX1250-NEXT: s_cbranch_execz .LBB57_21206; GFX1250-NEXT: ; %bb.1: ; %atomicrmw.global1207; GFX1250-NEXT: flat_atomic_min_u64 v[4:5], v[0:1], v[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SYS1208; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr11209; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr31210; GFX1250-NEXT: .LBB57_2: ; %Flow1211; GFX1250-NEXT: s_wait_xcnt 0x01212; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s01213; GFX1250-NEXT: s_cbranch_execz .LBB57_41214; GFX1250-NEXT: ; %bb.3: ; %atomicrmw.private1215; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[0:1]1216; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01217; GFX1250-NEXT: v_subrev_nc_u32_e32 v4, src_flat_scratch_base_lo, v01218; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1219; GFX1250-NEXT: v_cndmask_b32_e32 v6, -1, v4, vcc_lo1220; GFX1250-NEXT: scratch_load_b64 v[4:5], v6, off1221; GFX1250-NEXT: s_wait_loadcnt 0x01222; GFX1250-NEXT: v_min_u64 v[0:1], v[4:5], v[2:3]1223; GFX1250-NEXT: scratch_store_b64 v6, v[0:1], off1224; GFX1250-NEXT: .LBB57_4: ; %atomicrmw.phi1225; GFX1250-NEXT: s_wait_xcnt 0x01226; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s01227; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01228; GFX1250-NEXT: v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v51229; GFX1250-NEXT: s_set_pc_i64 s[30:31]1230 %result = atomicrmw umin ptr %ptr, i64 %val monotonic1231 ret i64 %result1232}1233 1234define i64 @flat_one_as_atomic_umax_i64(ptr %ptr, i64 %val) {1235; GFX1250-LABEL: flat_one_as_atomic_umax_i64:1236; GFX1250: ; %bb.0:1237; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01238; GFX1250-NEXT: s_wait_kmcnt 0x01239; GFX1250-NEXT: v_xor_b32_e32 v4, src_flat_scratch_base_hi, v11240; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1241; GFX1250-NEXT: v_cmp_lt_u32_e32 vcc_lo, 0x3ffffff, v41242; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr51243; GFX1250-NEXT: s_and_saveexec_b32 s0, vcc_lo1244; GFX1250-NEXT: s_xor_b32 s0, exec_lo, s01245; GFX1250-NEXT: s_cbranch_execz .LBB58_21246; GFX1250-NEXT: ; %bb.1: ; %atomicrmw.global1247; GFX1250-NEXT: flat_atomic_max_u64 v[4:5], v[0:1], v[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SYS1248; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr11249; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr31250; GFX1250-NEXT: .LBB58_2: ; %Flow1251; GFX1250-NEXT: s_wait_xcnt 0x01252; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s01253; GFX1250-NEXT: s_cbranch_execz .LBB58_41254; GFX1250-NEXT: ; %bb.3: ; %atomicrmw.private1255; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[0:1]1256; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01257; GFX1250-NEXT: v_subrev_nc_u32_e32 v4, src_flat_scratch_base_lo, v01258; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1259; GFX1250-NEXT: v_cndmask_b32_e32 v6, -1, v4, vcc_lo1260; GFX1250-NEXT: scratch_load_b64 v[4:5], v6, off1261; GFX1250-NEXT: s_wait_loadcnt 0x01262; GFX1250-NEXT: v_max_u64 v[0:1], v[4:5], v[2:3]1263; GFX1250-NEXT: scratch_store_b64 v6, v[0:1], off1264; GFX1250-NEXT: .LBB58_4: ; %atomicrmw.phi1265; GFX1250-NEXT: s_wait_xcnt 0x01266; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s01267; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01268; GFX1250-NEXT: v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v51269; GFX1250-NEXT: s_set_pc_i64 s[30:31]1270 %result = atomicrmw umax ptr %ptr, i64 %val syncscope("one-as") monotonic1271 ret i64 %result1272}1273 1274define i64 @flat_system_atomic_umax_i64(ptr %ptr, i64 %val) {1275; GFX1250-LABEL: flat_system_atomic_umax_i64:1276; GFX1250: ; %bb.0:1277; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01278; GFX1250-NEXT: s_wait_kmcnt 0x01279; GFX1250-NEXT: v_xor_b32_e32 v4, src_flat_scratch_base_hi, v11280; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)1281; GFX1250-NEXT: v_cmp_lt_u32_e32 vcc_lo, 0x3ffffff, v41282; GFX1250-NEXT: ; implicit-def: $vgpr4_vgpr51283; GFX1250-NEXT: s_and_saveexec_b32 s0, vcc_lo1284; GFX1250-NEXT: s_xor_b32 s0, exec_lo, s01285; GFX1250-NEXT: s_cbranch_execz .LBB59_21286; GFX1250-NEXT: ; %bb.1: ; %atomicrmw.global1287; GFX1250-NEXT: flat_atomic_max_u64 v[4:5], v[0:1], v[2:3] th:TH_ATOMIC_RETURN scope:SCOPE_SYS1288; GFX1250-NEXT: ; implicit-def: $vgpr0_vgpr11289; GFX1250-NEXT: ; implicit-def: $vgpr2_vgpr31290; GFX1250-NEXT: .LBB59_2: ; %Flow1291; GFX1250-NEXT: s_wait_xcnt 0x01292; GFX1250-NEXT: s_and_not1_saveexec_b32 s0, s01293; GFX1250-NEXT: s_cbranch_execz .LBB59_41294; GFX1250-NEXT: ; %bb.3: ; %atomicrmw.private1295; GFX1250-NEXT: v_cmp_ne_u64_e32 vcc_lo, 0, v[0:1]1296; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01297; GFX1250-NEXT: v_subrev_nc_u32_e32 v4, src_flat_scratch_base_lo, v01298; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1299; GFX1250-NEXT: v_cndmask_b32_e32 v6, -1, v4, vcc_lo1300; GFX1250-NEXT: scratch_load_b64 v[4:5], v6, off1301; GFX1250-NEXT: s_wait_loadcnt 0x01302; GFX1250-NEXT: v_max_u64 v[0:1], v[4:5], v[2:3]1303; GFX1250-NEXT: scratch_store_b64 v6, v[0:1], off1304; GFX1250-NEXT: .LBB59_4: ; %atomicrmw.phi1305; GFX1250-NEXT: s_wait_xcnt 0x01306; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s01307; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01308; GFX1250-NEXT: v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v51309; GFX1250-NEXT: s_set_pc_i64 s[30:31]1310 %result = atomicrmw umax ptr %ptr, i64 %val monotonic1311 ret i64 %result1312}1313 1314define i16 @flat_one_as_atomic_min_i16(ptr %ptr, i16 %val) {1315; GFX1250-LABEL: flat_one_as_atomic_min_i16:1316; GFX1250: ; %bb.0:1317; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01318; GFX1250-NEXT: s_wait_kmcnt 0x01319; GFX1250-NEXT: v_mov_b32_e32 v3, v01320; GFX1250-NEXT: s_mov_b32 s0, 01321; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)1322; GFX1250-NEXT: v_and_b32_e32 v0, -4, v31323; GFX1250-NEXT: v_and_b32_e32 v3, 3, v31324; GFX1250-NEXT: v_lshlrev_b32_e32 v3, 3, v31325; GFX1250-NEXT: flat_load_b32 v5, v[0:1]1326; GFX1250-NEXT: v_lshlrev_b32_e64 v4, v3, 0xffff1327; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1328; GFX1250-NEXT: v_not_b32_e32 v4, v41329; GFX1250-NEXT: .LBB60_1: ; %atomicrmw.start1330; GFX1250-NEXT: ; =>This Inner Loop Header: Depth=11331; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01332; GFX1250-NEXT: v_mov_b32_e32 v7, v51333; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1334; GFX1250-NEXT: v_lshrrev_b32_e32 v5, v3, v71335; GFX1250-NEXT: v_min_i16 v5, v5, v21336; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1337; GFX1250-NEXT: v_and_b32_e32 v5, 0xffff, v51338; GFX1250-NEXT: v_lshlrev_b32_e32 v5, v3, v51339; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1340; GFX1250-NEXT: v_and_or_b32 v6, v7, v4, v51341; GFX1250-NEXT: s_wait_xcnt 0x01342; GFX1250-NEXT: flat_atomic_cmpswap_b32 v5, v[0:1], v[6:7] th:TH_ATOMIC_RETURN scope:SCOPE_SYS1343; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01344; GFX1250-NEXT: v_cmp_eq_u32_e32 vcc_lo, v5, v71345; GFX1250-NEXT: s_or_b32 s0, vcc_lo, s01346; GFX1250-NEXT: s_wait_xcnt 0x01347; GFX1250-NEXT: s_and_not1_b32 exec_lo, exec_lo, s01348; GFX1250-NEXT: s_cbranch_execnz .LBB60_11349; GFX1250-NEXT: ; %bb.2: ; %atomicrmw.end1350; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s01351; GFX1250-NEXT: v_lshrrev_b32_e32 v0, v3, v51352; GFX1250-NEXT: s_set_pc_i64 s[30:31]1353 %result = atomicrmw min ptr %ptr, i16 %val syncscope("one-as") monotonic1354 ret i16 %result1355}1356 1357define i16 @flat_one_as_atomic_umin_i16(ptr %ptr, i16 %val) {1358; GFX1250-LABEL: flat_one_as_atomic_umin_i16:1359; GFX1250: ; %bb.0:1360; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01361; GFX1250-NEXT: s_wait_kmcnt 0x01362; GFX1250-NEXT: v_mov_b32_e32 v3, v01363; GFX1250-NEXT: s_mov_b32 s0, 01364; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)1365; GFX1250-NEXT: v_and_b32_e32 v0, -4, v31366; GFX1250-NEXT: v_and_b32_e32 v3, 3, v31367; GFX1250-NEXT: v_lshlrev_b32_e32 v3, 3, v31368; GFX1250-NEXT: flat_load_b32 v5, v[0:1]1369; GFX1250-NEXT: v_lshlrev_b32_e64 v4, v3, 0xffff1370; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1371; GFX1250-NEXT: v_not_b32_e32 v4, v41372; GFX1250-NEXT: .LBB61_1: ; %atomicrmw.start1373; GFX1250-NEXT: ; =>This Inner Loop Header: Depth=11374; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01375; GFX1250-NEXT: v_mov_b32_e32 v7, v51376; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1377; GFX1250-NEXT: v_lshrrev_b32_e32 v5, v3, v71378; GFX1250-NEXT: v_min_u16 v5, v5, v21379; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1380; GFX1250-NEXT: v_and_b32_e32 v5, 0xffff, v51381; GFX1250-NEXT: v_lshlrev_b32_e32 v5, v3, v51382; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1383; GFX1250-NEXT: v_and_or_b32 v6, v7, v4, v51384; GFX1250-NEXT: s_wait_xcnt 0x01385; GFX1250-NEXT: flat_atomic_cmpswap_b32 v5, v[0:1], v[6:7] th:TH_ATOMIC_RETURN scope:SCOPE_SYS1386; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01387; GFX1250-NEXT: v_cmp_eq_u32_e32 vcc_lo, v5, v71388; GFX1250-NEXT: s_or_b32 s0, vcc_lo, s01389; GFX1250-NEXT: s_wait_xcnt 0x01390; GFX1250-NEXT: s_and_not1_b32 exec_lo, exec_lo, s01391; GFX1250-NEXT: s_cbranch_execnz .LBB61_11392; GFX1250-NEXT: ; %bb.2: ; %atomicrmw.end1393; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s01394; GFX1250-NEXT: v_lshrrev_b32_e32 v0, v3, v51395; GFX1250-NEXT: s_set_pc_i64 s[30:31]1396 %result = atomicrmw umin ptr %ptr, i16 %val syncscope("one-as") monotonic1397 ret i16 %result1398}1399 1400define i16 @flat_one_as_atomic_max_i16(ptr %ptr, i16 %val) {1401; GFX1250-LABEL: flat_one_as_atomic_max_i16:1402; GFX1250: ; %bb.0:1403; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01404; GFX1250-NEXT: s_wait_kmcnt 0x01405; GFX1250-NEXT: v_mov_b32_e32 v3, v01406; GFX1250-NEXT: s_mov_b32 s0, 01407; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)1408; GFX1250-NEXT: v_and_b32_e32 v0, -4, v31409; GFX1250-NEXT: v_and_b32_e32 v3, 3, v31410; GFX1250-NEXT: v_lshlrev_b32_e32 v3, 3, v31411; GFX1250-NEXT: flat_load_b32 v5, v[0:1]1412; GFX1250-NEXT: v_lshlrev_b32_e64 v4, v3, 0xffff1413; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1414; GFX1250-NEXT: v_not_b32_e32 v4, v41415; GFX1250-NEXT: .LBB62_1: ; %atomicrmw.start1416; GFX1250-NEXT: ; =>This Inner Loop Header: Depth=11417; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01418; GFX1250-NEXT: v_mov_b32_e32 v7, v51419; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1420; GFX1250-NEXT: v_lshrrev_b32_e32 v5, v3, v71421; GFX1250-NEXT: v_max_i16 v5, v5, v21422; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1423; GFX1250-NEXT: v_and_b32_e32 v5, 0xffff, v51424; GFX1250-NEXT: v_lshlrev_b32_e32 v5, v3, v51425; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1426; GFX1250-NEXT: v_and_or_b32 v6, v7, v4, v51427; GFX1250-NEXT: s_wait_xcnt 0x01428; GFX1250-NEXT: flat_atomic_cmpswap_b32 v5, v[0:1], v[6:7] th:TH_ATOMIC_RETURN scope:SCOPE_SYS1429; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01430; GFX1250-NEXT: v_cmp_eq_u32_e32 vcc_lo, v5, v71431; GFX1250-NEXT: s_or_b32 s0, vcc_lo, s01432; GFX1250-NEXT: s_wait_xcnt 0x01433; GFX1250-NEXT: s_and_not1_b32 exec_lo, exec_lo, s01434; GFX1250-NEXT: s_cbranch_execnz .LBB62_11435; GFX1250-NEXT: ; %bb.2: ; %atomicrmw.end1436; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s01437; GFX1250-NEXT: v_lshrrev_b32_e32 v0, v3, v51438; GFX1250-NEXT: s_set_pc_i64 s[30:31]1439 %result = atomicrmw max ptr %ptr, i16 %val syncscope("one-as") monotonic1440 ret i16 %result1441}1442 1443define i16 @flat_one_as_atomic_umax_i16(ptr %ptr, i16 %val) {1444; GFX1250-LABEL: flat_one_as_atomic_umax_i16:1445; GFX1250: ; %bb.0:1446; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01447; GFX1250-NEXT: s_wait_kmcnt 0x01448; GFX1250-NEXT: v_mov_b32_e32 v3, v01449; GFX1250-NEXT: s_mov_b32 s0, 01450; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)1451; GFX1250-NEXT: v_and_b32_e32 v0, -4, v31452; GFX1250-NEXT: v_and_b32_e32 v3, 3, v31453; GFX1250-NEXT: v_lshlrev_b32_e32 v3, 3, v31454; GFX1250-NEXT: flat_load_b32 v5, v[0:1]1455; GFX1250-NEXT: v_lshlrev_b32_e64 v4, v3, 0xffff1456; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1457; GFX1250-NEXT: v_not_b32_e32 v4, v41458; GFX1250-NEXT: .LBB63_1: ; %atomicrmw.start1459; GFX1250-NEXT: ; =>This Inner Loop Header: Depth=11460; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01461; GFX1250-NEXT: v_mov_b32_e32 v7, v51462; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1463; GFX1250-NEXT: v_lshrrev_b32_e32 v5, v3, v71464; GFX1250-NEXT: v_max_u16 v5, v5, v21465; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1466; GFX1250-NEXT: v_and_b32_e32 v5, 0xffff, v51467; GFX1250-NEXT: v_lshlrev_b32_e32 v5, v3, v51468; GFX1250-NEXT: s_delay_alu instid0(VALU_DEP_1)1469; GFX1250-NEXT: v_and_or_b32 v6, v7, v4, v51470; GFX1250-NEXT: s_wait_xcnt 0x01471; GFX1250-NEXT: flat_atomic_cmpswap_b32 v5, v[0:1], v[6:7] th:TH_ATOMIC_RETURN scope:SCOPE_SYS1472; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x01473; GFX1250-NEXT: v_cmp_eq_u32_e32 vcc_lo, v5, v71474; GFX1250-NEXT: s_or_b32 s0, vcc_lo, s01475; GFX1250-NEXT: s_wait_xcnt 0x01476; GFX1250-NEXT: s_and_not1_b32 exec_lo, exec_lo, s01477; GFX1250-NEXT: s_cbranch_execnz .LBB63_11478; GFX1250-NEXT: ; %bb.2: ; %atomicrmw.end1479; GFX1250-NEXT: s_or_b32 exec_lo, exec_lo, s01480; GFX1250-NEXT: v_lshrrev_b32_e32 v0, v3, v51481; GFX1250-NEXT: s_set_pc_i64 s[30:31]1482 %result = atomicrmw umax ptr %ptr, i16 %val syncscope("one-as") monotonic1483 ret i16 %result1484}1485