brintos

brintos / llvm-project-archived public Read only

0
0
Text · 388.3 KiB · 2789643 Raw
9691 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=bonaire < %s | FileCheck -check-prefixes=GCN1 %s3; RUN: llc -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GCN2 %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN3 %s5 6; ---------------------------------------------------------------------7; atomicrmw xchg8; ---------------------------------------------------------------------9 10define void @flat_atomic_xchg_i32_noret(ptr %ptr, i32 %in) {11; GCN1-LABEL: flat_atomic_xchg_i32_noret:12; GCN1:       ; %bb.0:13; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14; GCN1-NEXT:    flat_atomic_swap v[0:1], v215; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)16; GCN1-NEXT:    buffer_wbinvl1_vol17; GCN1-NEXT:    s_setpc_b64 s[30:31]18;19; GCN2-LABEL: flat_atomic_xchg_i32_noret:20; GCN2:       ; %bb.0:21; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)22; GCN2-NEXT:    flat_atomic_swap v[0:1], v223; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)24; GCN2-NEXT:    buffer_wbinvl1_vol25; GCN2-NEXT:    s_setpc_b64 s[30:31]26;27; GCN3-LABEL: flat_atomic_xchg_i32_noret:28; GCN3:       ; %bb.0:29; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)30; GCN3-NEXT:    flat_atomic_swap v[0:1], v231; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)32; GCN3-NEXT:    buffer_wbinvl1_vol33; GCN3-NEXT:    s_setpc_b64 s[30:31]34  %tmp0 = atomicrmw xchg ptr %ptr, i32 %in seq_cst35  ret void36}37 38define void @flat_atomic_xchg_i32_noret_offset(ptr %out, i32 %in) {39; GCN1-LABEL: flat_atomic_xchg_i32_noret_offset:40; GCN1:       ; %bb.0:41; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)42; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v043; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc44; GCN1-NEXT:    flat_atomic_swap v[0:1], v245; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)46; GCN1-NEXT:    buffer_wbinvl1_vol47; GCN1-NEXT:    s_setpc_b64 s[30:31]48;49; GCN2-LABEL: flat_atomic_xchg_i32_noret_offset:50; GCN2:       ; %bb.0:51; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)52; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v053; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc54; GCN2-NEXT:    flat_atomic_swap v[0:1], v255; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)56; GCN2-NEXT:    buffer_wbinvl1_vol57; GCN2-NEXT:    s_setpc_b64 s[30:31]58;59; GCN3-LABEL: flat_atomic_xchg_i32_noret_offset:60; GCN3:       ; %bb.0:61; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)62; GCN3-NEXT:    flat_atomic_swap v[0:1], v2 offset:1663; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)64; GCN3-NEXT:    buffer_wbinvl1_vol65; GCN3-NEXT:    s_setpc_b64 s[30:31]66  %gep = getelementptr inbounds i32, ptr %out, i32 467  %tmp0 = atomicrmw xchg ptr %gep, i32 %in seq_cst68  ret void69}70 71define i32 @flat_atomic_xchg_i32_ret(ptr %ptr, i32 %in) {72; GCN1-LABEL: flat_atomic_xchg_i32_ret:73; GCN1:       ; %bb.0:74; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)75; GCN1-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc76; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)77; GCN1-NEXT:    buffer_wbinvl1_vol78; GCN1-NEXT:    s_setpc_b64 s[30:31]79;80; GCN2-LABEL: flat_atomic_xchg_i32_ret:81; GCN2:       ; %bb.0:82; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)83; GCN2-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc84; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)85; GCN2-NEXT:    buffer_wbinvl1_vol86; GCN2-NEXT:    s_setpc_b64 s[30:31]87;88; GCN3-LABEL: flat_atomic_xchg_i32_ret:89; GCN3:       ; %bb.0:90; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)91; GCN3-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc92; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)93; GCN3-NEXT:    buffer_wbinvl1_vol94; GCN3-NEXT:    s_setpc_b64 s[30:31]95  %result = atomicrmw xchg ptr %ptr, i32 %in seq_cst96  ret i32 %result97}98 99define i32 @flat_atomic_xchg_i32_ret_offset(ptr %out, i32 %in) {100; GCN1-LABEL: flat_atomic_xchg_i32_ret_offset:101; GCN1:       ; %bb.0:102; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)103; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v0104; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc105; GCN1-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc106; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)107; GCN1-NEXT:    buffer_wbinvl1_vol108; GCN1-NEXT:    s_setpc_b64 s[30:31]109;110; GCN2-LABEL: flat_atomic_xchg_i32_ret_offset:111; GCN2:       ; %bb.0:112; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)113; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v0114; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc115; GCN2-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc116; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)117; GCN2-NEXT:    buffer_wbinvl1_vol118; GCN2-NEXT:    s_setpc_b64 s[30:31]119;120; GCN3-LABEL: flat_atomic_xchg_i32_ret_offset:121; GCN3:       ; %bb.0:122; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)123; GCN3-NEXT:    flat_atomic_swap v0, v[0:1], v2 offset:16 glc124; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)125; GCN3-NEXT:    buffer_wbinvl1_vol126; GCN3-NEXT:    s_setpc_b64 s[30:31]127  %gep = getelementptr inbounds i32, ptr %out, i32 4128  %result = atomicrmw xchg ptr %gep, i32 %in seq_cst129  ret i32 %result130}131 132define amdgpu_gfx void @flat_atomic_xchg_i32_noret_scalar(ptr inreg %ptr, i32 inreg %in) {133; GCN1-LABEL: flat_atomic_xchg_i32_noret_scalar:134; GCN1:       ; %bb.0:135; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)136; GCN1-NEXT:    v_mov_b32_e32 v0, s4137; GCN1-NEXT:    v_mov_b32_e32 v1, s5138; GCN1-NEXT:    v_mov_b32_e32 v2, s6139; GCN1-NEXT:    flat_atomic_swap v[0:1], v2140; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)141; GCN1-NEXT:    buffer_wbinvl1_vol142; GCN1-NEXT:    s_setpc_b64 s[30:31]143;144; GCN2-LABEL: flat_atomic_xchg_i32_noret_scalar:145; GCN2:       ; %bb.0:146; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)147; GCN2-NEXT:    v_mov_b32_e32 v0, s4148; GCN2-NEXT:    v_mov_b32_e32 v1, s5149; GCN2-NEXT:    v_mov_b32_e32 v2, s6150; GCN2-NEXT:    flat_atomic_swap v[0:1], v2151; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)152; GCN2-NEXT:    buffer_wbinvl1_vol153; GCN2-NEXT:    s_setpc_b64 s[30:31]154;155; GCN3-LABEL: flat_atomic_xchg_i32_noret_scalar:156; GCN3:       ; %bb.0:157; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)158; GCN3-NEXT:    v_mov_b32_e32 v0, s4159; GCN3-NEXT:    v_mov_b32_e32 v1, s5160; GCN3-NEXT:    v_mov_b32_e32 v2, s6161; GCN3-NEXT:    flat_atomic_swap v[0:1], v2162; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)163; GCN3-NEXT:    buffer_wbinvl1_vol164; GCN3-NEXT:    s_setpc_b64 s[30:31]165  %tmp0 = atomicrmw xchg ptr %ptr, i32 %in seq_cst166  ret void167}168 169define amdgpu_gfx void @flat_atomic_xchg_i32_noret_offset_scalar(ptr inreg %out, i32 inreg %in) {170; GCN1-LABEL: flat_atomic_xchg_i32_noret_offset_scalar:171; GCN1:       ; %bb.0:172; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)173; GCN1-NEXT:    s_add_u32 s34, s4, 16174; GCN1-NEXT:    s_addc_u32 s35, s5, 0175; GCN1-NEXT:    v_mov_b32_e32 v0, s34176; GCN1-NEXT:    v_mov_b32_e32 v1, s35177; GCN1-NEXT:    v_mov_b32_e32 v2, s6178; GCN1-NEXT:    flat_atomic_swap v[0:1], v2179; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)180; GCN1-NEXT:    buffer_wbinvl1_vol181; GCN1-NEXT:    s_setpc_b64 s[30:31]182;183; GCN2-LABEL: flat_atomic_xchg_i32_noret_offset_scalar:184; GCN2:       ; %bb.0:185; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)186; GCN2-NEXT:    s_add_u32 s34, s4, 16187; GCN2-NEXT:    s_addc_u32 s35, s5, 0188; GCN2-NEXT:    v_mov_b32_e32 v0, s34189; GCN2-NEXT:    v_mov_b32_e32 v1, s35190; GCN2-NEXT:    v_mov_b32_e32 v2, s6191; GCN2-NEXT:    flat_atomic_swap v[0:1], v2192; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)193; GCN2-NEXT:    buffer_wbinvl1_vol194; GCN2-NEXT:    s_setpc_b64 s[30:31]195;196; GCN3-LABEL: flat_atomic_xchg_i32_noret_offset_scalar:197; GCN3:       ; %bb.0:198; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)199; GCN3-NEXT:    v_mov_b32_e32 v0, s4200; GCN3-NEXT:    v_mov_b32_e32 v1, s5201; GCN3-NEXT:    v_mov_b32_e32 v2, s6202; GCN3-NEXT:    flat_atomic_swap v[0:1], v2 offset:16203; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)204; GCN3-NEXT:    buffer_wbinvl1_vol205; GCN3-NEXT:    s_setpc_b64 s[30:31]206  %gep = getelementptr inbounds i32, ptr %out, i32 4207  %tmp0 = atomicrmw xchg ptr %gep, i32 %in seq_cst208  ret void209}210 211define amdgpu_gfx i32 @flat_atomic_xchg_i32_ret_scalar(ptr inreg %ptr, i32 inreg %in) {212; GCN1-LABEL: flat_atomic_xchg_i32_ret_scalar:213; GCN1:       ; %bb.0:214; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)215; GCN1-NEXT:    v_mov_b32_e32 v0, s4216; GCN1-NEXT:    v_mov_b32_e32 v1, s5217; GCN1-NEXT:    v_mov_b32_e32 v2, s6218; GCN1-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc219; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)220; GCN1-NEXT:    buffer_wbinvl1_vol221; GCN1-NEXT:    s_setpc_b64 s[30:31]222;223; GCN2-LABEL: flat_atomic_xchg_i32_ret_scalar:224; GCN2:       ; %bb.0:225; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)226; GCN2-NEXT:    v_mov_b32_e32 v0, s4227; GCN2-NEXT:    v_mov_b32_e32 v1, s5228; GCN2-NEXT:    v_mov_b32_e32 v2, s6229; GCN2-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc230; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)231; GCN2-NEXT:    buffer_wbinvl1_vol232; GCN2-NEXT:    s_setpc_b64 s[30:31]233;234; GCN3-LABEL: flat_atomic_xchg_i32_ret_scalar:235; GCN3:       ; %bb.0:236; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)237; GCN3-NEXT:    v_mov_b32_e32 v0, s4238; GCN3-NEXT:    v_mov_b32_e32 v1, s5239; GCN3-NEXT:    v_mov_b32_e32 v2, s6240; GCN3-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc241; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)242; GCN3-NEXT:    buffer_wbinvl1_vol243; GCN3-NEXT:    s_setpc_b64 s[30:31]244  %result = atomicrmw xchg ptr %ptr, i32 %in seq_cst245  ret i32 %result246}247 248define amdgpu_gfx i32 @flat_atomic_xchg_i32_ret_offset_scalar(ptr inreg %out, i32 inreg %in) {249; GCN1-LABEL: flat_atomic_xchg_i32_ret_offset_scalar:250; GCN1:       ; %bb.0:251; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)252; GCN1-NEXT:    s_add_u32 s34, s4, 16253; GCN1-NEXT:    s_addc_u32 s35, s5, 0254; GCN1-NEXT:    v_mov_b32_e32 v0, s34255; GCN1-NEXT:    v_mov_b32_e32 v1, s35256; GCN1-NEXT:    v_mov_b32_e32 v2, s6257; GCN1-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc258; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)259; GCN1-NEXT:    buffer_wbinvl1_vol260; GCN1-NEXT:    s_setpc_b64 s[30:31]261;262; GCN2-LABEL: flat_atomic_xchg_i32_ret_offset_scalar:263; GCN2:       ; %bb.0:264; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)265; GCN2-NEXT:    s_add_u32 s34, s4, 16266; GCN2-NEXT:    s_addc_u32 s35, s5, 0267; GCN2-NEXT:    v_mov_b32_e32 v0, s34268; GCN2-NEXT:    v_mov_b32_e32 v1, s35269; GCN2-NEXT:    v_mov_b32_e32 v2, s6270; GCN2-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc271; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)272; GCN2-NEXT:    buffer_wbinvl1_vol273; GCN2-NEXT:    s_setpc_b64 s[30:31]274;275; GCN3-LABEL: flat_atomic_xchg_i32_ret_offset_scalar:276; GCN3:       ; %bb.0:277; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)278; GCN3-NEXT:    v_mov_b32_e32 v0, s4279; GCN3-NEXT:    v_mov_b32_e32 v1, s5280; GCN3-NEXT:    v_mov_b32_e32 v2, s6281; GCN3-NEXT:    flat_atomic_swap v0, v[0:1], v2 offset:16 glc282; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)283; GCN3-NEXT:    buffer_wbinvl1_vol284; GCN3-NEXT:    s_setpc_b64 s[30:31]285  %gep = getelementptr inbounds i32, ptr %out, i32 4286  %result = atomicrmw xchg ptr %gep, i32 %in seq_cst287  ret i32 %result288}289 290define void @flat_atomic_xchg_i32_noret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {291; GCN1-LABEL: flat_atomic_xchg_i32_noret_offset__amdgpu_no_remote_memory:292; GCN1:       ; %bb.0:293; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)294; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v0295; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc296; GCN1-NEXT:    flat_atomic_swap v[0:1], v2297; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)298; GCN1-NEXT:    buffer_wbinvl1_vol299; GCN1-NEXT:    s_setpc_b64 s[30:31]300;301; GCN2-LABEL: flat_atomic_xchg_i32_noret_offset__amdgpu_no_remote_memory:302; GCN2:       ; %bb.0:303; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)304; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v0305; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc306; GCN2-NEXT:    flat_atomic_swap v[0:1], v2307; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)308; GCN2-NEXT:    buffer_wbinvl1_vol309; GCN2-NEXT:    s_setpc_b64 s[30:31]310;311; GCN3-LABEL: flat_atomic_xchg_i32_noret_offset__amdgpu_no_remote_memory:312; GCN3:       ; %bb.0:313; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)314; GCN3-NEXT:    flat_atomic_swap v[0:1], v2 offset:16315; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)316; GCN3-NEXT:    buffer_wbinvl1_vol317; GCN3-NEXT:    s_setpc_b64 s[30:31]318  %gep = getelementptr inbounds i32, ptr %out, i64 4319  %tmp0 = atomicrmw xchg ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !0320  ret void321}322 323define i32 @flat_atomic_xchg_i32_ret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {324; GCN1-LABEL: flat_atomic_xchg_i32_ret_offset__amdgpu_no_remote_memory:325; GCN1:       ; %bb.0:326; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)327; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v0328; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc329; GCN1-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc330; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)331; GCN1-NEXT:    buffer_wbinvl1_vol332; GCN1-NEXT:    s_setpc_b64 s[30:31]333;334; GCN2-LABEL: flat_atomic_xchg_i32_ret_offset__amdgpu_no_remote_memory:335; GCN2:       ; %bb.0:336; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)337; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v0338; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc339; GCN2-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc340; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)341; GCN2-NEXT:    buffer_wbinvl1_vol342; GCN2-NEXT:    s_setpc_b64 s[30:31]343;344; GCN3-LABEL: flat_atomic_xchg_i32_ret_offset__amdgpu_no_remote_memory:345; GCN3:       ; %bb.0:346; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)347; GCN3-NEXT:    flat_atomic_swap v0, v[0:1], v2 offset:16 glc348; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)349; GCN3-NEXT:    buffer_wbinvl1_vol350; GCN3-NEXT:    s_setpc_b64 s[30:31]351  %gep = getelementptr inbounds i32, ptr %out, i64 4352  %result = atomicrmw xchg ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !0353  ret i32 %result354}355 356; ---------------------------------------------------------------------357; atomicrmw xchg f32358; ---------------------------------------------------------------------359 360define void @flat_atomic_xchg_f32_noret(ptr %ptr, float %in) {361; GCN1-LABEL: flat_atomic_xchg_f32_noret:362; GCN1:       ; %bb.0:363; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)364; GCN1-NEXT:    flat_atomic_swap v[0:1], v2365; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)366; GCN1-NEXT:    buffer_wbinvl1_vol367; GCN1-NEXT:    s_setpc_b64 s[30:31]368;369; GCN2-LABEL: flat_atomic_xchg_f32_noret:370; GCN2:       ; %bb.0:371; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)372; GCN2-NEXT:    flat_atomic_swap v[0:1], v2373; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)374; GCN2-NEXT:    buffer_wbinvl1_vol375; GCN2-NEXT:    s_setpc_b64 s[30:31]376;377; GCN3-LABEL: flat_atomic_xchg_f32_noret:378; GCN3:       ; %bb.0:379; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)380; GCN3-NEXT:    flat_atomic_swap v[0:1], v2381; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)382; GCN3-NEXT:    buffer_wbinvl1_vol383; GCN3-NEXT:    s_setpc_b64 s[30:31]384  %tmp0 = atomicrmw xchg ptr %ptr, float %in seq_cst385  ret void386}387 388define void @flat_atomic_xchg_f32_noret_offset(ptr %out, float %in) {389; GCN1-LABEL: flat_atomic_xchg_f32_noret_offset:390; GCN1:       ; %bb.0:391; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)392; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v0393; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc394; GCN1-NEXT:    flat_atomic_swap v[0:1], v2395; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)396; GCN1-NEXT:    buffer_wbinvl1_vol397; GCN1-NEXT:    s_setpc_b64 s[30:31]398;399; GCN2-LABEL: flat_atomic_xchg_f32_noret_offset:400; GCN2:       ; %bb.0:401; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)402; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v0403; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc404; GCN2-NEXT:    flat_atomic_swap v[0:1], v2405; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)406; GCN2-NEXT:    buffer_wbinvl1_vol407; GCN2-NEXT:    s_setpc_b64 s[30:31]408;409; GCN3-LABEL: flat_atomic_xchg_f32_noret_offset:410; GCN3:       ; %bb.0:411; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)412; GCN3-NEXT:    flat_atomic_swap v[0:1], v2 offset:16413; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)414; GCN3-NEXT:    buffer_wbinvl1_vol415; GCN3-NEXT:    s_setpc_b64 s[30:31]416  %gep = getelementptr inbounds float, ptr %out, i32 4417  %tmp0 = atomicrmw xchg ptr %gep, float %in seq_cst418  ret void419}420 421define float @flat_atomic_xchg_f32_ret(ptr %ptr, float %in) {422; GCN1-LABEL: flat_atomic_xchg_f32_ret:423; GCN1:       ; %bb.0:424; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)425; GCN1-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc426; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)427; GCN1-NEXT:    buffer_wbinvl1_vol428; GCN1-NEXT:    s_setpc_b64 s[30:31]429;430; GCN2-LABEL: flat_atomic_xchg_f32_ret:431; GCN2:       ; %bb.0:432; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)433; GCN2-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc434; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)435; GCN2-NEXT:    buffer_wbinvl1_vol436; GCN2-NEXT:    s_setpc_b64 s[30:31]437;438; GCN3-LABEL: flat_atomic_xchg_f32_ret:439; GCN3:       ; %bb.0:440; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)441; GCN3-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc442; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)443; GCN3-NEXT:    buffer_wbinvl1_vol444; GCN3-NEXT:    s_setpc_b64 s[30:31]445  %result = atomicrmw xchg ptr %ptr, float %in seq_cst446  ret float %result447}448 449define float @flat_atomic_xchg_f32_ret_offset(ptr %out, float %in) {450; GCN1-LABEL: flat_atomic_xchg_f32_ret_offset:451; GCN1:       ; %bb.0:452; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)453; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v0454; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc455; GCN1-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc456; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)457; GCN1-NEXT:    buffer_wbinvl1_vol458; GCN1-NEXT:    s_setpc_b64 s[30:31]459;460; GCN2-LABEL: flat_atomic_xchg_f32_ret_offset:461; GCN2:       ; %bb.0:462; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)463; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v0464; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc465; GCN2-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc466; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)467; GCN2-NEXT:    buffer_wbinvl1_vol468; GCN2-NEXT:    s_setpc_b64 s[30:31]469;470; GCN3-LABEL: flat_atomic_xchg_f32_ret_offset:471; GCN3:       ; %bb.0:472; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)473; GCN3-NEXT:    flat_atomic_swap v0, v[0:1], v2 offset:16 glc474; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)475; GCN3-NEXT:    buffer_wbinvl1_vol476; GCN3-NEXT:    s_setpc_b64 s[30:31]477  %gep = getelementptr inbounds float, ptr %out, i32 4478  %result = atomicrmw xchg ptr %gep, float %in seq_cst479  ret float %result480}481 482define amdgpu_gfx void @flat_atomic_xchg_f32_noret_scalar(ptr inreg %ptr, float inreg %in) {483; GCN1-LABEL: flat_atomic_xchg_f32_noret_scalar:484; GCN1:       ; %bb.0:485; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)486; GCN1-NEXT:    v_mov_b32_e32 v0, s4487; GCN1-NEXT:    v_mov_b32_e32 v1, s5488; GCN1-NEXT:    v_mov_b32_e32 v2, s6489; GCN1-NEXT:    flat_atomic_swap v[0:1], v2490; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)491; GCN1-NEXT:    buffer_wbinvl1_vol492; GCN1-NEXT:    s_setpc_b64 s[30:31]493;494; GCN2-LABEL: flat_atomic_xchg_f32_noret_scalar:495; GCN2:       ; %bb.0:496; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)497; GCN2-NEXT:    v_mov_b32_e32 v0, s4498; GCN2-NEXT:    v_mov_b32_e32 v1, s5499; GCN2-NEXT:    v_mov_b32_e32 v2, s6500; GCN2-NEXT:    flat_atomic_swap v[0:1], v2501; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)502; GCN2-NEXT:    buffer_wbinvl1_vol503; GCN2-NEXT:    s_setpc_b64 s[30:31]504;505; GCN3-LABEL: flat_atomic_xchg_f32_noret_scalar:506; GCN3:       ; %bb.0:507; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)508; GCN3-NEXT:    v_mov_b32_e32 v0, s4509; GCN3-NEXT:    v_mov_b32_e32 v1, s5510; GCN3-NEXT:    v_mov_b32_e32 v2, s6511; GCN3-NEXT:    flat_atomic_swap v[0:1], v2512; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)513; GCN3-NEXT:    buffer_wbinvl1_vol514; GCN3-NEXT:    s_setpc_b64 s[30:31]515  %tmp0 = atomicrmw xchg ptr %ptr, float %in seq_cst516  ret void517}518 519define amdgpu_gfx void @flat_atomic_xchg_f32_noret_offset_scalar(ptr inreg %out, float inreg %in) {520; GCN1-LABEL: flat_atomic_xchg_f32_noret_offset_scalar:521; GCN1:       ; %bb.0:522; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)523; GCN1-NEXT:    s_add_u32 s34, s4, 16524; GCN1-NEXT:    s_addc_u32 s35, s5, 0525; GCN1-NEXT:    v_mov_b32_e32 v0, s34526; GCN1-NEXT:    v_mov_b32_e32 v1, s35527; GCN1-NEXT:    v_mov_b32_e32 v2, s6528; GCN1-NEXT:    flat_atomic_swap v[0:1], v2529; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)530; GCN1-NEXT:    buffer_wbinvl1_vol531; GCN1-NEXT:    s_setpc_b64 s[30:31]532;533; GCN2-LABEL: flat_atomic_xchg_f32_noret_offset_scalar:534; GCN2:       ; %bb.0:535; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)536; GCN2-NEXT:    s_add_u32 s34, s4, 16537; GCN2-NEXT:    s_addc_u32 s35, s5, 0538; GCN2-NEXT:    v_mov_b32_e32 v0, s34539; GCN2-NEXT:    v_mov_b32_e32 v1, s35540; GCN2-NEXT:    v_mov_b32_e32 v2, s6541; GCN2-NEXT:    flat_atomic_swap v[0:1], v2542; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)543; GCN2-NEXT:    buffer_wbinvl1_vol544; GCN2-NEXT:    s_setpc_b64 s[30:31]545;546; GCN3-LABEL: flat_atomic_xchg_f32_noret_offset_scalar:547; GCN3:       ; %bb.0:548; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)549; GCN3-NEXT:    v_mov_b32_e32 v0, s4550; GCN3-NEXT:    v_mov_b32_e32 v1, s5551; GCN3-NEXT:    v_mov_b32_e32 v2, s6552; GCN3-NEXT:    flat_atomic_swap v[0:1], v2 offset:16553; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)554; GCN3-NEXT:    buffer_wbinvl1_vol555; GCN3-NEXT:    s_setpc_b64 s[30:31]556  %gep = getelementptr inbounds float, ptr %out, i32 4557  %tmp0 = atomicrmw xchg ptr %gep, float %in seq_cst558  ret void559}560 561define amdgpu_gfx float @flat_atomic_xchg_f32_ret_scalar(ptr inreg %ptr, float inreg %in) {562; GCN1-LABEL: flat_atomic_xchg_f32_ret_scalar:563; GCN1:       ; %bb.0:564; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)565; GCN1-NEXT:    v_mov_b32_e32 v0, s4566; GCN1-NEXT:    v_mov_b32_e32 v1, s5567; GCN1-NEXT:    v_mov_b32_e32 v2, s6568; GCN1-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc569; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)570; GCN1-NEXT:    buffer_wbinvl1_vol571; GCN1-NEXT:    s_setpc_b64 s[30:31]572;573; GCN2-LABEL: flat_atomic_xchg_f32_ret_scalar:574; GCN2:       ; %bb.0:575; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)576; GCN2-NEXT:    v_mov_b32_e32 v0, s4577; GCN2-NEXT:    v_mov_b32_e32 v1, s5578; GCN2-NEXT:    v_mov_b32_e32 v2, s6579; GCN2-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc580; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)581; GCN2-NEXT:    buffer_wbinvl1_vol582; GCN2-NEXT:    s_setpc_b64 s[30:31]583;584; GCN3-LABEL: flat_atomic_xchg_f32_ret_scalar:585; GCN3:       ; %bb.0:586; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)587; GCN3-NEXT:    v_mov_b32_e32 v0, s4588; GCN3-NEXT:    v_mov_b32_e32 v1, s5589; GCN3-NEXT:    v_mov_b32_e32 v2, s6590; GCN3-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc591; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)592; GCN3-NEXT:    buffer_wbinvl1_vol593; GCN3-NEXT:    s_setpc_b64 s[30:31]594  %result = atomicrmw xchg ptr %ptr, float %in seq_cst595  ret float %result596}597 598define amdgpu_gfx float @flat_atomic_xchg_f32_ret_offset_scalar(ptr inreg %out, float inreg %in) {599; GCN1-LABEL: flat_atomic_xchg_f32_ret_offset_scalar:600; GCN1:       ; %bb.0:601; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)602; GCN1-NEXT:    s_add_u32 s34, s4, 16603; GCN1-NEXT:    s_addc_u32 s35, s5, 0604; GCN1-NEXT:    v_mov_b32_e32 v0, s34605; GCN1-NEXT:    v_mov_b32_e32 v1, s35606; GCN1-NEXT:    v_mov_b32_e32 v2, s6607; GCN1-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc608; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)609; GCN1-NEXT:    buffer_wbinvl1_vol610; GCN1-NEXT:    s_setpc_b64 s[30:31]611;612; GCN2-LABEL: flat_atomic_xchg_f32_ret_offset_scalar:613; GCN2:       ; %bb.0:614; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)615; GCN2-NEXT:    s_add_u32 s34, s4, 16616; GCN2-NEXT:    s_addc_u32 s35, s5, 0617; GCN2-NEXT:    v_mov_b32_e32 v0, s34618; GCN2-NEXT:    v_mov_b32_e32 v1, s35619; GCN2-NEXT:    v_mov_b32_e32 v2, s6620; GCN2-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc621; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)622; GCN2-NEXT:    buffer_wbinvl1_vol623; GCN2-NEXT:    s_setpc_b64 s[30:31]624;625; GCN3-LABEL: flat_atomic_xchg_f32_ret_offset_scalar:626; GCN3:       ; %bb.0:627; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)628; GCN3-NEXT:    v_mov_b32_e32 v0, s4629; GCN3-NEXT:    v_mov_b32_e32 v1, s5630; GCN3-NEXT:    v_mov_b32_e32 v2, s6631; GCN3-NEXT:    flat_atomic_swap v0, v[0:1], v2 offset:16 glc632; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)633; GCN3-NEXT:    buffer_wbinvl1_vol634; GCN3-NEXT:    s_setpc_b64 s[30:31]635  %gep = getelementptr inbounds float, ptr %out, i32 4636  %result = atomicrmw xchg ptr %gep, float %in seq_cst637  ret float %result638}639 640define void @flat_atomic_xchg_f32_noret_offset__amdgpu_no_remote_memory(ptr %out, float %in) {641; GCN1-LABEL: flat_atomic_xchg_f32_noret_offset__amdgpu_no_remote_memory:642; GCN1:       ; %bb.0:643; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)644; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v0645; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc646; GCN1-NEXT:    flat_atomic_swap v[0:1], v2647; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)648; GCN1-NEXT:    buffer_wbinvl1_vol649; GCN1-NEXT:    s_setpc_b64 s[30:31]650;651; GCN2-LABEL: flat_atomic_xchg_f32_noret_offset__amdgpu_no_remote_memory:652; GCN2:       ; %bb.0:653; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)654; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v0655; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc656; GCN2-NEXT:    flat_atomic_swap v[0:1], v2657; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)658; GCN2-NEXT:    buffer_wbinvl1_vol659; GCN2-NEXT:    s_setpc_b64 s[30:31]660;661; GCN3-LABEL: flat_atomic_xchg_f32_noret_offset__amdgpu_no_remote_memory:662; GCN3:       ; %bb.0:663; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)664; GCN3-NEXT:    flat_atomic_swap v[0:1], v2 offset:16665; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)666; GCN3-NEXT:    buffer_wbinvl1_vol667; GCN3-NEXT:    s_setpc_b64 s[30:31]668  %gep = getelementptr inbounds float, ptr %out, i64 4669  %tmp0 = atomicrmw xchg ptr %gep, float %in seq_cst, !amdgpu.no.remote.memory !0670  ret void671}672 673define float @flat_atomic_xchg_f32_ret_offset__amdgpu_no_remote_memory(ptr %out, float %in) {674; GCN1-LABEL: flat_atomic_xchg_f32_ret_offset__amdgpu_no_remote_memory:675; GCN1:       ; %bb.0:676; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)677; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v0678; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc679; GCN1-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc680; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)681; GCN1-NEXT:    buffer_wbinvl1_vol682; GCN1-NEXT:    s_setpc_b64 s[30:31]683;684; GCN2-LABEL: flat_atomic_xchg_f32_ret_offset__amdgpu_no_remote_memory:685; GCN2:       ; %bb.0:686; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)687; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v0688; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc689; GCN2-NEXT:    flat_atomic_swap v0, v[0:1], v2 glc690; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)691; GCN2-NEXT:    buffer_wbinvl1_vol692; GCN2-NEXT:    s_setpc_b64 s[30:31]693;694; GCN3-LABEL: flat_atomic_xchg_f32_ret_offset__amdgpu_no_remote_memory:695; GCN3:       ; %bb.0:696; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)697; GCN3-NEXT:    flat_atomic_swap v0, v[0:1], v2 offset:16 glc698; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)699; GCN3-NEXT:    buffer_wbinvl1_vol700; GCN3-NEXT:    s_setpc_b64 s[30:31]701  %gep = getelementptr inbounds float, ptr %out, i64 4702  %result = atomicrmw xchg ptr %gep, float %in seq_cst, !amdgpu.no.remote.memory !0703  ret float %result704}705 706; ---------------------------------------------------------------------707; atomicrmw add708; ---------------------------------------------------------------------709 710define void @flat_atomic_add_i32_noret(ptr %ptr, i32 %in) {711; GCN1-LABEL: flat_atomic_add_i32_noret:712; GCN1:       ; %bb.0:713; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)714; GCN1-NEXT:    flat_atomic_add v[0:1], v2715; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)716; GCN1-NEXT:    buffer_wbinvl1_vol717; GCN1-NEXT:    s_setpc_b64 s[30:31]718;719; GCN2-LABEL: flat_atomic_add_i32_noret:720; GCN2:       ; %bb.0:721; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)722; GCN2-NEXT:    flat_atomic_add v[0:1], v2723; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)724; GCN2-NEXT:    buffer_wbinvl1_vol725; GCN2-NEXT:    s_setpc_b64 s[30:31]726;727; GCN3-LABEL: flat_atomic_add_i32_noret:728; GCN3:       ; %bb.0:729; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)730; GCN3-NEXT:    flat_atomic_add v[0:1], v2731; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)732; GCN3-NEXT:    buffer_wbinvl1_vol733; GCN3-NEXT:    s_setpc_b64 s[30:31]734  %tmp0 = atomicrmw add ptr %ptr, i32 %in seq_cst735  ret void736}737 738define void @flat_atomic_add_i32_noret_offset(ptr %out, i32 %in) {739; GCN1-LABEL: flat_atomic_add_i32_noret_offset:740; GCN1:       ; %bb.0:741; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)742; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v0743; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc744; GCN1-NEXT:    flat_atomic_add v[0:1], v2745; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)746; GCN1-NEXT:    buffer_wbinvl1_vol747; GCN1-NEXT:    s_setpc_b64 s[30:31]748;749; GCN2-LABEL: flat_atomic_add_i32_noret_offset:750; GCN2:       ; %bb.0:751; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)752; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v0753; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc754; GCN2-NEXT:    flat_atomic_add v[0:1], v2755; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)756; GCN2-NEXT:    buffer_wbinvl1_vol757; GCN2-NEXT:    s_setpc_b64 s[30:31]758;759; GCN3-LABEL: flat_atomic_add_i32_noret_offset:760; GCN3:       ; %bb.0:761; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)762; GCN3-NEXT:    flat_atomic_add v[0:1], v2 offset:16763; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)764; GCN3-NEXT:    buffer_wbinvl1_vol765; GCN3-NEXT:    s_setpc_b64 s[30:31]766  %gep = getelementptr inbounds i32, ptr %out, i32 4767  %tmp0 = atomicrmw add ptr %gep, i32 %in seq_cst768  ret void769}770 771define i32 @flat_atomic_add_i32_ret(ptr %ptr, i32 %in) {772; GCN1-LABEL: flat_atomic_add_i32_ret:773; GCN1:       ; %bb.0:774; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)775; GCN1-NEXT:    flat_atomic_add v0, v[0:1], v2 glc776; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)777; GCN1-NEXT:    buffer_wbinvl1_vol778; GCN1-NEXT:    s_setpc_b64 s[30:31]779;780; GCN2-LABEL: flat_atomic_add_i32_ret:781; GCN2:       ; %bb.0:782; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)783; GCN2-NEXT:    flat_atomic_add v0, v[0:1], v2 glc784; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)785; GCN2-NEXT:    buffer_wbinvl1_vol786; GCN2-NEXT:    s_setpc_b64 s[30:31]787;788; GCN3-LABEL: flat_atomic_add_i32_ret:789; GCN3:       ; %bb.0:790; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)791; GCN3-NEXT:    flat_atomic_add v0, v[0:1], v2 glc792; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)793; GCN3-NEXT:    buffer_wbinvl1_vol794; GCN3-NEXT:    s_setpc_b64 s[30:31]795  %result = atomicrmw add ptr %ptr, i32 %in seq_cst796  ret i32 %result797}798 799define i32 @flat_atomic_add_i32_ret_offset(ptr %out, i32 %in) {800; GCN1-LABEL: flat_atomic_add_i32_ret_offset:801; GCN1:       ; %bb.0:802; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)803; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v0804; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc805; GCN1-NEXT:    flat_atomic_add v0, v[0:1], v2 glc806; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)807; GCN1-NEXT:    buffer_wbinvl1_vol808; GCN1-NEXT:    s_setpc_b64 s[30:31]809;810; GCN2-LABEL: flat_atomic_add_i32_ret_offset:811; GCN2:       ; %bb.0:812; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)813; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v0814; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc815; GCN2-NEXT:    flat_atomic_add v0, v[0:1], v2 glc816; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)817; GCN2-NEXT:    buffer_wbinvl1_vol818; GCN2-NEXT:    s_setpc_b64 s[30:31]819;820; GCN3-LABEL: flat_atomic_add_i32_ret_offset:821; GCN3:       ; %bb.0:822; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)823; GCN3-NEXT:    flat_atomic_add v0, v[0:1], v2 offset:16 glc824; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)825; GCN3-NEXT:    buffer_wbinvl1_vol826; GCN3-NEXT:    s_setpc_b64 s[30:31]827  %gep = getelementptr inbounds i32, ptr %out, i32 4828  %result = atomicrmw add ptr %gep, i32 %in seq_cst829  ret i32 %result830}831 832define amdgpu_gfx void @flat_atomic_add_i32_noret_scalar(ptr inreg %ptr, i32 inreg %in) {833; GCN1-LABEL: flat_atomic_add_i32_noret_scalar:834; GCN1:       ; %bb.0:835; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)836; GCN1-NEXT:    v_mov_b32_e32 v0, s4837; GCN1-NEXT:    v_mov_b32_e32 v1, s5838; GCN1-NEXT:    v_mov_b32_e32 v2, s6839; GCN1-NEXT:    flat_atomic_add v[0:1], v2840; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)841; GCN1-NEXT:    buffer_wbinvl1_vol842; GCN1-NEXT:    s_setpc_b64 s[30:31]843;844; GCN2-LABEL: flat_atomic_add_i32_noret_scalar:845; GCN2:       ; %bb.0:846; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)847; GCN2-NEXT:    v_mov_b32_e32 v0, s4848; GCN2-NEXT:    v_mov_b32_e32 v1, s5849; GCN2-NEXT:    v_mov_b32_e32 v2, s6850; GCN2-NEXT:    flat_atomic_add v[0:1], v2851; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)852; GCN2-NEXT:    buffer_wbinvl1_vol853; GCN2-NEXT:    s_setpc_b64 s[30:31]854;855; GCN3-LABEL: flat_atomic_add_i32_noret_scalar:856; GCN3:       ; %bb.0:857; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)858; GCN3-NEXT:    v_mov_b32_e32 v0, s4859; GCN3-NEXT:    v_mov_b32_e32 v1, s5860; GCN3-NEXT:    v_mov_b32_e32 v2, s6861; GCN3-NEXT:    flat_atomic_add v[0:1], v2862; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)863; GCN3-NEXT:    buffer_wbinvl1_vol864; GCN3-NEXT:    s_setpc_b64 s[30:31]865  %tmp0 = atomicrmw add ptr %ptr, i32 %in seq_cst866  ret void867}868 869define amdgpu_gfx void @flat_atomic_add_i32_noret_offset_scalar(ptr inreg %out, i32 inreg %in) {870; GCN1-LABEL: flat_atomic_add_i32_noret_offset_scalar:871; GCN1:       ; %bb.0:872; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)873; GCN1-NEXT:    s_add_u32 s34, s4, 16874; GCN1-NEXT:    s_addc_u32 s35, s5, 0875; GCN1-NEXT:    v_mov_b32_e32 v0, s34876; GCN1-NEXT:    v_mov_b32_e32 v1, s35877; GCN1-NEXT:    v_mov_b32_e32 v2, s6878; GCN1-NEXT:    flat_atomic_add v[0:1], v2879; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)880; GCN1-NEXT:    buffer_wbinvl1_vol881; GCN1-NEXT:    s_setpc_b64 s[30:31]882;883; GCN2-LABEL: flat_atomic_add_i32_noret_offset_scalar:884; GCN2:       ; %bb.0:885; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)886; GCN2-NEXT:    s_add_u32 s34, s4, 16887; GCN2-NEXT:    s_addc_u32 s35, s5, 0888; GCN2-NEXT:    v_mov_b32_e32 v0, s34889; GCN2-NEXT:    v_mov_b32_e32 v1, s35890; GCN2-NEXT:    v_mov_b32_e32 v2, s6891; GCN2-NEXT:    flat_atomic_add v[0:1], v2892; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)893; GCN2-NEXT:    buffer_wbinvl1_vol894; GCN2-NEXT:    s_setpc_b64 s[30:31]895;896; GCN3-LABEL: flat_atomic_add_i32_noret_offset_scalar:897; GCN3:       ; %bb.0:898; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)899; GCN3-NEXT:    v_mov_b32_e32 v0, s4900; GCN3-NEXT:    v_mov_b32_e32 v1, s5901; GCN3-NEXT:    v_mov_b32_e32 v2, s6902; GCN3-NEXT:    flat_atomic_add v[0:1], v2 offset:16903; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)904; GCN3-NEXT:    buffer_wbinvl1_vol905; GCN3-NEXT:    s_setpc_b64 s[30:31]906  %gep = getelementptr inbounds i32, ptr %out, i32 4907  %tmp0 = atomicrmw add ptr %gep, i32 %in seq_cst908  ret void909}910 911define amdgpu_gfx i32 @flat_atomic_add_i32_ret_scalar(ptr inreg %ptr, i32 inreg %in) {912; GCN1-LABEL: flat_atomic_add_i32_ret_scalar:913; GCN1:       ; %bb.0:914; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)915; GCN1-NEXT:    v_mov_b32_e32 v0, s4916; GCN1-NEXT:    v_mov_b32_e32 v1, s5917; GCN1-NEXT:    v_mov_b32_e32 v2, s6918; GCN1-NEXT:    flat_atomic_add v0, v[0:1], v2 glc919; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)920; GCN1-NEXT:    buffer_wbinvl1_vol921; GCN1-NEXT:    s_setpc_b64 s[30:31]922;923; GCN2-LABEL: flat_atomic_add_i32_ret_scalar:924; GCN2:       ; %bb.0:925; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)926; GCN2-NEXT:    v_mov_b32_e32 v0, s4927; GCN2-NEXT:    v_mov_b32_e32 v1, s5928; GCN2-NEXT:    v_mov_b32_e32 v2, s6929; GCN2-NEXT:    flat_atomic_add v0, v[0:1], v2 glc930; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)931; GCN2-NEXT:    buffer_wbinvl1_vol932; GCN2-NEXT:    s_setpc_b64 s[30:31]933;934; GCN3-LABEL: flat_atomic_add_i32_ret_scalar:935; GCN3:       ; %bb.0:936; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)937; GCN3-NEXT:    v_mov_b32_e32 v0, s4938; GCN3-NEXT:    v_mov_b32_e32 v1, s5939; GCN3-NEXT:    v_mov_b32_e32 v2, s6940; GCN3-NEXT:    flat_atomic_add v0, v[0:1], v2 glc941; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)942; GCN3-NEXT:    buffer_wbinvl1_vol943; GCN3-NEXT:    s_setpc_b64 s[30:31]944  %result = atomicrmw add ptr %ptr, i32 %in seq_cst945  ret i32 %result946}947 948define amdgpu_gfx i32 @flat_atomic_add_i32_ret_offset_scalar(ptr inreg %out, i32 inreg %in) {949; GCN1-LABEL: flat_atomic_add_i32_ret_offset_scalar:950; GCN1:       ; %bb.0:951; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)952; GCN1-NEXT:    s_add_u32 s34, s4, 16953; GCN1-NEXT:    s_addc_u32 s35, s5, 0954; GCN1-NEXT:    v_mov_b32_e32 v0, s34955; GCN1-NEXT:    v_mov_b32_e32 v1, s35956; GCN1-NEXT:    v_mov_b32_e32 v2, s6957; GCN1-NEXT:    flat_atomic_add v0, v[0:1], v2 glc958; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)959; GCN1-NEXT:    buffer_wbinvl1_vol960; GCN1-NEXT:    s_setpc_b64 s[30:31]961;962; GCN2-LABEL: flat_atomic_add_i32_ret_offset_scalar:963; GCN2:       ; %bb.0:964; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)965; GCN2-NEXT:    s_add_u32 s34, s4, 16966; GCN2-NEXT:    s_addc_u32 s35, s5, 0967; GCN2-NEXT:    v_mov_b32_e32 v0, s34968; GCN2-NEXT:    v_mov_b32_e32 v1, s35969; GCN2-NEXT:    v_mov_b32_e32 v2, s6970; GCN2-NEXT:    flat_atomic_add v0, v[0:1], v2 glc971; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)972; GCN2-NEXT:    buffer_wbinvl1_vol973; GCN2-NEXT:    s_setpc_b64 s[30:31]974;975; GCN3-LABEL: flat_atomic_add_i32_ret_offset_scalar:976; GCN3:       ; %bb.0:977; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)978; GCN3-NEXT:    v_mov_b32_e32 v0, s4979; GCN3-NEXT:    v_mov_b32_e32 v1, s5980; GCN3-NEXT:    v_mov_b32_e32 v2, s6981; GCN3-NEXT:    flat_atomic_add v0, v[0:1], v2 offset:16 glc982; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)983; GCN3-NEXT:    buffer_wbinvl1_vol984; GCN3-NEXT:    s_setpc_b64 s[30:31]985  %gep = getelementptr inbounds i32, ptr %out, i32 4986  %result = atomicrmw add ptr %gep, i32 %in seq_cst987  ret i32 %result988}989 990define void @flat_atomic_add_i32_noret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {991; GCN1-LABEL: flat_atomic_add_i32_noret_offset__amdgpu_no_remote_memory:992; GCN1:       ; %bb.0:993; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)994; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v0995; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc996; GCN1-NEXT:    flat_atomic_add v[0:1], v2997; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)998; GCN1-NEXT:    buffer_wbinvl1_vol999; GCN1-NEXT:    s_setpc_b64 s[30:31]1000;1001; GCN2-LABEL: flat_atomic_add_i32_noret_offset__amdgpu_no_remote_memory:1002; GCN2:       ; %bb.0:1003; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1004; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v01005; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1006; GCN2-NEXT:    flat_atomic_add v[0:1], v21007; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1008; GCN2-NEXT:    buffer_wbinvl1_vol1009; GCN2-NEXT:    s_setpc_b64 s[30:31]1010;1011; GCN3-LABEL: flat_atomic_add_i32_noret_offset__amdgpu_no_remote_memory:1012; GCN3:       ; %bb.0:1013; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1014; GCN3-NEXT:    flat_atomic_add v[0:1], v2 offset:161015; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1016; GCN3-NEXT:    buffer_wbinvl1_vol1017; GCN3-NEXT:    s_setpc_b64 s[30:31]1018  %gep = getelementptr inbounds i32, ptr %out, i64 41019  %tmp0 = atomicrmw add ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !01020  ret void1021}1022 1023define i32 @flat_atomic_add_i32_ret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {1024; GCN1-LABEL: flat_atomic_add_i32_ret_offset__amdgpu_no_remote_memory:1025; GCN1:       ; %bb.0:1026; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1027; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v01028; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1029; GCN1-NEXT:    flat_atomic_add v0, v[0:1], v2 glc1030; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1031; GCN1-NEXT:    buffer_wbinvl1_vol1032; GCN1-NEXT:    s_setpc_b64 s[30:31]1033;1034; GCN2-LABEL: flat_atomic_add_i32_ret_offset__amdgpu_no_remote_memory:1035; GCN2:       ; %bb.0:1036; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1037; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v01038; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1039; GCN2-NEXT:    flat_atomic_add v0, v[0:1], v2 glc1040; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1041; GCN2-NEXT:    buffer_wbinvl1_vol1042; GCN2-NEXT:    s_setpc_b64 s[30:31]1043;1044; GCN3-LABEL: flat_atomic_add_i32_ret_offset__amdgpu_no_remote_memory:1045; GCN3:       ; %bb.0:1046; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1047; GCN3-NEXT:    flat_atomic_add v0, v[0:1], v2 offset:16 glc1048; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1049; GCN3-NEXT:    buffer_wbinvl1_vol1050; GCN3-NEXT:    s_setpc_b64 s[30:31]1051  %gep = getelementptr inbounds i32, ptr %out, i64 41052  %result = atomicrmw add ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !01053  ret i32 %result1054}1055 1056; ---------------------------------------------------------------------1057; atomicrmw sub1058; ---------------------------------------------------------------------1059 1060define void @flat_atomic_sub_i32_noret(ptr %ptr, i32 %in) {1061; GCN1-LABEL: flat_atomic_sub_i32_noret:1062; GCN1:       ; %bb.0:1063; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1064; GCN1-NEXT:    flat_load_dword v4, v[0:1]1065; GCN1-NEXT:    s_mov_b64 s[4:5], 01066; GCN1-NEXT:  .LBB30_1: ; %atomicrmw.start1067; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=11068; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1069; GCN1-NEXT:    v_sub_i32_e32 v3, vcc, v4, v21070; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1071; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1072; GCN1-NEXT:    buffer_wbinvl1_vol1073; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41074; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1075; GCN1-NEXT:    v_mov_b32_e32 v4, v31076; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]1077; GCN1-NEXT:    s_cbranch_execnz .LBB30_11078; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end1079; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]1080; GCN1-NEXT:    s_setpc_b64 s[30:31]1081;1082; GCN2-LABEL: flat_atomic_sub_i32_noret:1083; GCN2:       ; %bb.0:1084; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1085; GCN2-NEXT:    flat_load_dword v4, v[0:1]1086; GCN2-NEXT:    s_mov_b64 s[4:5], 01087; GCN2-NEXT:  .LBB30_1: ; %atomicrmw.start1088; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=11089; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1090; GCN2-NEXT:    v_sub_u32_e32 v3, vcc, v4, v21091; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1092; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1093; GCN2-NEXT:    buffer_wbinvl1_vol1094; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41095; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1096; GCN2-NEXT:    v_mov_b32_e32 v4, v31097; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]1098; GCN2-NEXT:    s_cbranch_execnz .LBB30_11099; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end1100; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]1101; GCN2-NEXT:    s_setpc_b64 s[30:31]1102;1103; GCN3-LABEL: flat_atomic_sub_i32_noret:1104; GCN3:       ; %bb.0:1105; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1106; GCN3-NEXT:    flat_load_dword v4, v[0:1]1107; GCN3-NEXT:    s_mov_b64 s[4:5], 01108; GCN3-NEXT:  .LBB30_1: ; %atomicrmw.start1109; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=11110; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1111; GCN3-NEXT:    v_sub_u32_e32 v3, v4, v21112; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1113; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1114; GCN3-NEXT:    buffer_wbinvl1_vol1115; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41116; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1117; GCN3-NEXT:    v_mov_b32_e32 v4, v31118; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]1119; GCN3-NEXT:    s_cbranch_execnz .LBB30_11120; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end1121; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]1122; GCN3-NEXT:    s_setpc_b64 s[30:31]1123  %tmp0 = atomicrmw sub ptr %ptr, i32 %in seq_cst1124  ret void1125}1126 1127define void @flat_atomic_sub_i32_noret_offset(ptr %out, i32 %in) {1128; GCN1-LABEL: flat_atomic_sub_i32_noret_offset:1129; GCN1:       ; %bb.0:1130; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1131; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v01132; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1133; GCN1-NEXT:    flat_load_dword v4, v[0:1]1134; GCN1-NEXT:    s_mov_b64 s[4:5], 01135; GCN1-NEXT:  .LBB31_1: ; %atomicrmw.start1136; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=11137; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1138; GCN1-NEXT:    v_sub_i32_e32 v3, vcc, v4, v21139; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1140; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1141; GCN1-NEXT:    buffer_wbinvl1_vol1142; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41143; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1144; GCN1-NEXT:    v_mov_b32_e32 v4, v31145; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]1146; GCN1-NEXT:    s_cbranch_execnz .LBB31_11147; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end1148; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]1149; GCN1-NEXT:    s_setpc_b64 s[30:31]1150;1151; GCN2-LABEL: flat_atomic_sub_i32_noret_offset:1152; GCN2:       ; %bb.0:1153; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1154; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v01155; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1156; GCN2-NEXT:    flat_load_dword v4, v[0:1]1157; GCN2-NEXT:    s_mov_b64 s[4:5], 01158; GCN2-NEXT:  .LBB31_1: ; %atomicrmw.start1159; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=11160; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1161; GCN2-NEXT:    v_sub_u32_e32 v3, vcc, v4, v21162; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1163; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1164; GCN2-NEXT:    buffer_wbinvl1_vol1165; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41166; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1167; GCN2-NEXT:    v_mov_b32_e32 v4, v31168; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]1169; GCN2-NEXT:    s_cbranch_execnz .LBB31_11170; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end1171; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]1172; GCN2-NEXT:    s_setpc_b64 s[30:31]1173;1174; GCN3-LABEL: flat_atomic_sub_i32_noret_offset:1175; GCN3:       ; %bb.0:1176; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1177; GCN3-NEXT:    flat_load_dword v4, v[0:1] offset:161178; GCN3-NEXT:    s_mov_b64 s[4:5], 01179; GCN3-NEXT:  .LBB31_1: ; %atomicrmw.start1180; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=11181; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1182; GCN3-NEXT:    v_sub_u32_e32 v3, v4, v21183; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc1184; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1185; GCN3-NEXT:    buffer_wbinvl1_vol1186; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41187; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1188; GCN3-NEXT:    v_mov_b32_e32 v4, v31189; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]1190; GCN3-NEXT:    s_cbranch_execnz .LBB31_11191; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end1192; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]1193; GCN3-NEXT:    s_setpc_b64 s[30:31]1194  %gep = getelementptr inbounds i32, ptr %out, i32 41195  %tmp0 = atomicrmw sub ptr %gep, i32 %in seq_cst1196  ret void1197}1198 1199define i32 @flat_atomic_sub_i32_ret(ptr %ptr, i32 %in) {1200; GCN1-LABEL: flat_atomic_sub_i32_ret:1201; GCN1:       ; %bb.0:1202; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1203; GCN1-NEXT:    flat_load_dword v3, v[0:1]1204; GCN1-NEXT:    s_mov_b64 s[4:5], 01205; GCN1-NEXT:  .LBB32_1: ; %atomicrmw.start1206; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=11207; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1208; GCN1-NEXT:    v_mov_b32_e32 v4, v31209; GCN1-NEXT:    v_sub_i32_e32 v3, vcc, v4, v21210; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1211; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1212; GCN1-NEXT:    buffer_wbinvl1_vol1213; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41214; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1215; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]1216; GCN1-NEXT:    s_cbranch_execnz .LBB32_11217; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end1218; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]1219; GCN1-NEXT:    v_mov_b32_e32 v0, v31220; GCN1-NEXT:    s_setpc_b64 s[30:31]1221;1222; GCN2-LABEL: flat_atomic_sub_i32_ret:1223; GCN2:       ; %bb.0:1224; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1225; GCN2-NEXT:    flat_load_dword v3, v[0:1]1226; GCN2-NEXT:    s_mov_b64 s[4:5], 01227; GCN2-NEXT:  .LBB32_1: ; %atomicrmw.start1228; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=11229; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1230; GCN2-NEXT:    v_mov_b32_e32 v4, v31231; GCN2-NEXT:    v_sub_u32_e32 v3, vcc, v4, v21232; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1233; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1234; GCN2-NEXT:    buffer_wbinvl1_vol1235; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41236; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1237; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]1238; GCN2-NEXT:    s_cbranch_execnz .LBB32_11239; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end1240; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]1241; GCN2-NEXT:    v_mov_b32_e32 v0, v31242; GCN2-NEXT:    s_setpc_b64 s[30:31]1243;1244; GCN3-LABEL: flat_atomic_sub_i32_ret:1245; GCN3:       ; %bb.0:1246; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1247; GCN3-NEXT:    flat_load_dword v3, v[0:1]1248; GCN3-NEXT:    s_mov_b64 s[4:5], 01249; GCN3-NEXT:  .LBB32_1: ; %atomicrmw.start1250; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=11251; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1252; GCN3-NEXT:    v_mov_b32_e32 v4, v31253; GCN3-NEXT:    v_sub_u32_e32 v3, v4, v21254; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1255; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1256; GCN3-NEXT:    buffer_wbinvl1_vol1257; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41258; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1259; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]1260; GCN3-NEXT:    s_cbranch_execnz .LBB32_11261; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end1262; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]1263; GCN3-NEXT:    v_mov_b32_e32 v0, v31264; GCN3-NEXT:    s_setpc_b64 s[30:31]1265  %result = atomicrmw sub ptr %ptr, i32 %in seq_cst1266  ret i32 %result1267}1268 1269define i32 @flat_atomic_sub_i32_ret_offset(ptr %out, i32 %in) {1270; GCN1-LABEL: flat_atomic_sub_i32_ret_offset:1271; GCN1:       ; %bb.0:1272; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1273; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 16, v01274; GCN1-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc1275; GCN1-NEXT:    flat_load_dword v0, v[3:4]1276; GCN1-NEXT:    s_mov_b64 s[4:5], 01277; GCN1-NEXT:  .LBB33_1: ; %atomicrmw.start1278; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=11279; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1280; GCN1-NEXT:    v_mov_b32_e32 v1, v01281; GCN1-NEXT:    v_sub_i32_e32 v0, vcc, v1, v21282; GCN1-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc1283; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1284; GCN1-NEXT:    buffer_wbinvl1_vol1285; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v11286; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1287; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]1288; GCN1-NEXT:    s_cbranch_execnz .LBB33_11289; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end1290; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]1291; GCN1-NEXT:    s_setpc_b64 s[30:31]1292;1293; GCN2-LABEL: flat_atomic_sub_i32_ret_offset:1294; GCN2:       ; %bb.0:1295; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1296; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 16, v01297; GCN2-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc1298; GCN2-NEXT:    flat_load_dword v0, v[3:4]1299; GCN2-NEXT:    s_mov_b64 s[4:5], 01300; GCN2-NEXT:  .LBB33_1: ; %atomicrmw.start1301; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=11302; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1303; GCN2-NEXT:    v_mov_b32_e32 v1, v01304; GCN2-NEXT:    v_sub_u32_e32 v0, vcc, v1, v21305; GCN2-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc1306; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1307; GCN2-NEXT:    buffer_wbinvl1_vol1308; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v11309; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1310; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]1311; GCN2-NEXT:    s_cbranch_execnz .LBB33_11312; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end1313; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]1314; GCN2-NEXT:    s_setpc_b64 s[30:31]1315;1316; GCN3-LABEL: flat_atomic_sub_i32_ret_offset:1317; GCN3:       ; %bb.0:1318; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1319; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:161320; GCN3-NEXT:    s_mov_b64 s[4:5], 01321; GCN3-NEXT:  .LBB33_1: ; %atomicrmw.start1322; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=11323; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1324; GCN3-NEXT:    v_mov_b32_e32 v4, v31325; GCN3-NEXT:    v_sub_u32_e32 v3, v4, v21326; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc1327; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1328; GCN3-NEXT:    buffer_wbinvl1_vol1329; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41330; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1331; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]1332; GCN3-NEXT:    s_cbranch_execnz .LBB33_11333; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end1334; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]1335; GCN3-NEXT:    v_mov_b32_e32 v0, v31336; GCN3-NEXT:    s_setpc_b64 s[30:31]1337  %gep = getelementptr inbounds i32, ptr %out, i32 41338  %result = atomicrmw sub ptr %gep, i32 %in seq_cst1339  ret i32 %result1340}1341 1342define amdgpu_gfx void @flat_atomic_sub_i32_noret_scalar(ptr inreg %ptr, i32 inreg %in) {1343; GCN1-LABEL: flat_atomic_sub_i32_noret_scalar:1344; GCN1:       ; %bb.0:1345; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1346; GCN1-NEXT:    v_mov_b32_e32 v0, s41347; GCN1-NEXT:    v_mov_b32_e32 v1, s51348; GCN1-NEXT:    flat_load_dword v3, v[0:1]1349; GCN1-NEXT:    s_mov_b64 s[34:35], 01350; GCN1-NEXT:  .LBB34_1: ; %atomicrmw.start1351; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=11352; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1353; GCN1-NEXT:    v_subrev_i32_e32 v2, vcc, s6, v31354; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc1355; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1356; GCN1-NEXT:    buffer_wbinvl1_vol1357; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31358; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]1359; GCN1-NEXT:    v_mov_b32_e32 v3, v21360; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]1361; GCN1-NEXT:    s_cbranch_execnz .LBB34_11362; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end1363; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]1364; GCN1-NEXT:    s_setpc_b64 s[30:31]1365;1366; GCN2-LABEL: flat_atomic_sub_i32_noret_scalar:1367; GCN2:       ; %bb.0:1368; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1369; GCN2-NEXT:    v_mov_b32_e32 v0, s41370; GCN2-NEXT:    v_mov_b32_e32 v1, s51371; GCN2-NEXT:    flat_load_dword v3, v[0:1]1372; GCN2-NEXT:    s_mov_b64 s[34:35], 01373; GCN2-NEXT:  .LBB34_1: ; %atomicrmw.start1374; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=11375; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1376; GCN2-NEXT:    v_subrev_u32_e32 v2, vcc, s6, v31377; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc1378; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1379; GCN2-NEXT:    buffer_wbinvl1_vol1380; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31381; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]1382; GCN2-NEXT:    v_mov_b32_e32 v3, v21383; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]1384; GCN2-NEXT:    s_cbranch_execnz .LBB34_11385; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end1386; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]1387; GCN2-NEXT:    s_setpc_b64 s[30:31]1388;1389; GCN3-LABEL: flat_atomic_sub_i32_noret_scalar:1390; GCN3:       ; %bb.0:1391; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1392; GCN3-NEXT:    v_mov_b32_e32 v0, s41393; GCN3-NEXT:    v_mov_b32_e32 v1, s51394; GCN3-NEXT:    flat_load_dword v3, v[0:1]1395; GCN3-NEXT:    s_mov_b64 s[34:35], 01396; GCN3-NEXT:  .LBB34_1: ; %atomicrmw.start1397; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=11398; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1399; GCN3-NEXT:    v_subrev_u32_e32 v2, s6, v31400; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc1401; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1402; GCN3-NEXT:    buffer_wbinvl1_vol1403; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31404; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]1405; GCN3-NEXT:    v_mov_b32_e32 v3, v21406; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]1407; GCN3-NEXT:    s_cbranch_execnz .LBB34_11408; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end1409; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]1410; GCN3-NEXT:    s_setpc_b64 s[30:31]1411  %tmp0 = atomicrmw sub ptr %ptr, i32 %in seq_cst1412  ret void1413}1414 1415define amdgpu_gfx void @flat_atomic_sub_i32_noret_offset_scalar(ptr inreg %out, i32 inreg %in) {1416; GCN1-LABEL: flat_atomic_sub_i32_noret_offset_scalar:1417; GCN1:       ; %bb.0:1418; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1419; GCN1-NEXT:    s_add_u32 s34, s4, 161420; GCN1-NEXT:    s_addc_u32 s35, s5, 01421; GCN1-NEXT:    v_mov_b32_e32 v0, s341422; GCN1-NEXT:    v_mov_b32_e32 v1, s351423; GCN1-NEXT:    flat_load_dword v3, v[0:1]1424; GCN1-NEXT:    s_mov_b64 s[34:35], 01425; GCN1-NEXT:  .LBB35_1: ; %atomicrmw.start1426; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=11427; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1428; GCN1-NEXT:    v_subrev_i32_e32 v2, vcc, s6, v31429; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc1430; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1431; GCN1-NEXT:    buffer_wbinvl1_vol1432; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31433; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]1434; GCN1-NEXT:    v_mov_b32_e32 v3, v21435; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]1436; GCN1-NEXT:    s_cbranch_execnz .LBB35_11437; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end1438; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]1439; GCN1-NEXT:    s_setpc_b64 s[30:31]1440;1441; GCN2-LABEL: flat_atomic_sub_i32_noret_offset_scalar:1442; GCN2:       ; %bb.0:1443; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1444; GCN2-NEXT:    s_add_u32 s34, s4, 161445; GCN2-NEXT:    s_addc_u32 s35, s5, 01446; GCN2-NEXT:    v_mov_b32_e32 v0, s341447; GCN2-NEXT:    v_mov_b32_e32 v1, s351448; GCN2-NEXT:    flat_load_dword v3, v[0:1]1449; GCN2-NEXT:    s_mov_b64 s[34:35], 01450; GCN2-NEXT:  .LBB35_1: ; %atomicrmw.start1451; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=11452; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1453; GCN2-NEXT:    v_subrev_u32_e32 v2, vcc, s6, v31454; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc1455; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1456; GCN2-NEXT:    buffer_wbinvl1_vol1457; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31458; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]1459; GCN2-NEXT:    v_mov_b32_e32 v3, v21460; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]1461; GCN2-NEXT:    s_cbranch_execnz .LBB35_11462; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end1463; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]1464; GCN2-NEXT:    s_setpc_b64 s[30:31]1465;1466; GCN3-LABEL: flat_atomic_sub_i32_noret_offset_scalar:1467; GCN3:       ; %bb.0:1468; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1469; GCN3-NEXT:    v_mov_b32_e32 v0, s41470; GCN3-NEXT:    v_mov_b32_e32 v1, s51471; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:161472; GCN3-NEXT:    s_mov_b64 s[34:35], 01473; GCN3-NEXT:  .LBB35_1: ; %atomicrmw.start1474; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=11475; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1476; GCN3-NEXT:    v_subrev_u32_e32 v2, s6, v31477; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc1478; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1479; GCN3-NEXT:    buffer_wbinvl1_vol1480; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v31481; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]1482; GCN3-NEXT:    v_mov_b32_e32 v3, v21483; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]1484; GCN3-NEXT:    s_cbranch_execnz .LBB35_11485; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end1486; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]1487; GCN3-NEXT:    s_setpc_b64 s[30:31]1488  %gep = getelementptr inbounds i32, ptr %out, i32 41489  %tmp0 = atomicrmw sub ptr %gep, i32 %in seq_cst1490  ret void1491}1492 1493define amdgpu_gfx i32 @flat_atomic_sub_i32_ret_scalar(ptr inreg %ptr, i32 inreg %in) {1494; GCN1-LABEL: flat_atomic_sub_i32_ret_scalar:1495; GCN1:       ; %bb.0:1496; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1497; GCN1-NEXT:    v_mov_b32_e32 v0, s41498; GCN1-NEXT:    v_mov_b32_e32 v1, s51499; GCN1-NEXT:    flat_load_dword v0, v[0:1]1500; GCN1-NEXT:    v_mov_b32_e32 v1, s41501; GCN1-NEXT:    s_mov_b64 s[34:35], 01502; GCN1-NEXT:    v_mov_b32_e32 v2, s51503; GCN1-NEXT:  .LBB36_1: ; %atomicrmw.start1504; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=11505; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1506; GCN1-NEXT:    v_mov_b32_e32 v4, v01507; GCN1-NEXT:    v_subrev_i32_e32 v3, vcc, s6, v41508; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc1509; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1510; GCN1-NEXT:    buffer_wbinvl1_vol1511; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v41512; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]1513; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]1514; GCN1-NEXT:    s_cbranch_execnz .LBB36_11515; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end1516; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]1517; GCN1-NEXT:    s_setpc_b64 s[30:31]1518;1519; GCN2-LABEL: flat_atomic_sub_i32_ret_scalar:1520; GCN2:       ; %bb.0:1521; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1522; GCN2-NEXT:    v_mov_b32_e32 v0, s41523; GCN2-NEXT:    v_mov_b32_e32 v1, s51524; GCN2-NEXT:    flat_load_dword v0, v[0:1]1525; GCN2-NEXT:    v_mov_b32_e32 v1, s41526; GCN2-NEXT:    s_mov_b64 s[34:35], 01527; GCN2-NEXT:    v_mov_b32_e32 v2, s51528; GCN2-NEXT:  .LBB36_1: ; %atomicrmw.start1529; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=11530; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1531; GCN2-NEXT:    v_mov_b32_e32 v4, v01532; GCN2-NEXT:    v_subrev_u32_e32 v3, vcc, s6, v41533; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc1534; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1535; GCN2-NEXT:    buffer_wbinvl1_vol1536; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v41537; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]1538; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]1539; GCN2-NEXT:    s_cbranch_execnz .LBB36_11540; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end1541; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]1542; GCN2-NEXT:    s_setpc_b64 s[30:31]1543;1544; GCN3-LABEL: flat_atomic_sub_i32_ret_scalar:1545; GCN3:       ; %bb.0:1546; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1547; GCN3-NEXT:    v_mov_b32_e32 v0, s41548; GCN3-NEXT:    v_mov_b32_e32 v1, s51549; GCN3-NEXT:    flat_load_dword v0, v[0:1]1550; GCN3-NEXT:    v_mov_b32_e32 v1, s41551; GCN3-NEXT:    s_mov_b64 s[34:35], 01552; GCN3-NEXT:    v_mov_b32_e32 v2, s51553; GCN3-NEXT:  .LBB36_1: ; %atomicrmw.start1554; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=11555; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1556; GCN3-NEXT:    v_mov_b32_e32 v4, v01557; GCN3-NEXT:    v_subrev_u32_e32 v3, s6, v41558; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc1559; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1560; GCN3-NEXT:    buffer_wbinvl1_vol1561; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v41562; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]1563; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]1564; GCN3-NEXT:    s_cbranch_execnz .LBB36_11565; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end1566; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]1567; GCN3-NEXT:    s_setpc_b64 s[30:31]1568  %result = atomicrmw sub ptr %ptr, i32 %in seq_cst1569  ret i32 %result1570}1571 1572define amdgpu_gfx i32 @flat_atomic_sub_i32_ret_offset_scalar(ptr inreg %out, i32 inreg %in) {1573; GCN1-LABEL: flat_atomic_sub_i32_ret_offset_scalar:1574; GCN1:       ; %bb.0:1575; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1576; GCN1-NEXT:    s_add_u32 s34, s4, 161577; GCN1-NEXT:    s_addc_u32 s35, s5, 01578; GCN1-NEXT:    v_mov_b32_e32 v1, s341579; GCN1-NEXT:    v_mov_b32_e32 v2, s351580; GCN1-NEXT:    flat_load_dword v0, v[1:2]1581; GCN1-NEXT:    s_mov_b64 s[34:35], 01582; GCN1-NEXT:  .LBB37_1: ; %atomicrmw.start1583; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=11584; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1585; GCN1-NEXT:    v_mov_b32_e32 v4, v01586; GCN1-NEXT:    v_subrev_i32_e32 v3, vcc, s6, v41587; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc1588; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1589; GCN1-NEXT:    buffer_wbinvl1_vol1590; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v41591; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]1592; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]1593; GCN1-NEXT:    s_cbranch_execnz .LBB37_11594; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end1595; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]1596; GCN1-NEXT:    s_setpc_b64 s[30:31]1597;1598; GCN2-LABEL: flat_atomic_sub_i32_ret_offset_scalar:1599; GCN2:       ; %bb.0:1600; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1601; GCN2-NEXT:    s_add_u32 s34, s4, 161602; GCN2-NEXT:    s_addc_u32 s35, s5, 01603; GCN2-NEXT:    v_mov_b32_e32 v1, s341604; GCN2-NEXT:    v_mov_b32_e32 v2, s351605; GCN2-NEXT:    flat_load_dword v0, v[1:2]1606; GCN2-NEXT:    s_mov_b64 s[34:35], 01607; GCN2-NEXT:  .LBB37_1: ; %atomicrmw.start1608; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=11609; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1610; GCN2-NEXT:    v_mov_b32_e32 v4, v01611; GCN2-NEXT:    v_subrev_u32_e32 v3, vcc, s6, v41612; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc1613; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1614; GCN2-NEXT:    buffer_wbinvl1_vol1615; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v41616; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]1617; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]1618; GCN2-NEXT:    s_cbranch_execnz .LBB37_11619; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end1620; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]1621; GCN2-NEXT:    s_setpc_b64 s[30:31]1622;1623; GCN3-LABEL: flat_atomic_sub_i32_ret_offset_scalar:1624; GCN3:       ; %bb.0:1625; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1626; GCN3-NEXT:    v_mov_b32_e32 v0, s41627; GCN3-NEXT:    v_mov_b32_e32 v1, s51628; GCN3-NEXT:    flat_load_dword v0, v[0:1] offset:161629; GCN3-NEXT:    v_mov_b32_e32 v1, s41630; GCN3-NEXT:    s_mov_b64 s[34:35], 01631; GCN3-NEXT:    v_mov_b32_e32 v2, s51632; GCN3-NEXT:  .LBB37_1: ; %atomicrmw.start1633; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=11634; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1635; GCN3-NEXT:    v_mov_b32_e32 v4, v01636; GCN3-NEXT:    v_subrev_u32_e32 v3, s6, v41637; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] offset:16 glc1638; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1639; GCN3-NEXT:    buffer_wbinvl1_vol1640; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v41641; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]1642; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]1643; GCN3-NEXT:    s_cbranch_execnz .LBB37_11644; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end1645; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]1646; GCN3-NEXT:    s_setpc_b64 s[30:31]1647  %gep = getelementptr inbounds i32, ptr %out, i32 41648  %result = atomicrmw sub ptr %gep, i32 %in seq_cst1649  ret i32 %result1650}1651 1652define void @flat_atomic_sub_i32_noret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {1653; GCN1-LABEL: flat_atomic_sub_i32_noret_offset__amdgpu_no_remote_memory:1654; GCN1:       ; %bb.0:1655; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1656; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v01657; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1658; GCN1-NEXT:    flat_atomic_sub v[0:1], v21659; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1660; GCN1-NEXT:    buffer_wbinvl1_vol1661; GCN1-NEXT:    s_setpc_b64 s[30:31]1662;1663; GCN2-LABEL: flat_atomic_sub_i32_noret_offset__amdgpu_no_remote_memory:1664; GCN2:       ; %bb.0:1665; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1666; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v01667; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1668; GCN2-NEXT:    flat_atomic_sub v[0:1], v21669; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1670; GCN2-NEXT:    buffer_wbinvl1_vol1671; GCN2-NEXT:    s_setpc_b64 s[30:31]1672;1673; GCN3-LABEL: flat_atomic_sub_i32_noret_offset__amdgpu_no_remote_memory:1674; GCN3:       ; %bb.0:1675; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1676; GCN3-NEXT:    flat_atomic_sub v[0:1], v2 offset:161677; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1678; GCN3-NEXT:    buffer_wbinvl1_vol1679; GCN3-NEXT:    s_setpc_b64 s[30:31]1680  %gep = getelementptr inbounds i32, ptr %out, i64 41681  %tmp0 = atomicrmw sub ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !01682  ret void1683}1684 1685define i32 @flat_atomic_sub_i32_ret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {1686; GCN1-LABEL: flat_atomic_sub_i32_ret_offset__amdgpu_no_remote_memory:1687; GCN1:       ; %bb.0:1688; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1689; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v01690; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1691; GCN1-NEXT:    flat_atomic_sub v0, v[0:1], v2 glc1692; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1693; GCN1-NEXT:    buffer_wbinvl1_vol1694; GCN1-NEXT:    s_setpc_b64 s[30:31]1695;1696; GCN2-LABEL: flat_atomic_sub_i32_ret_offset__amdgpu_no_remote_memory:1697; GCN2:       ; %bb.0:1698; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1699; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v01700; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1701; GCN2-NEXT:    flat_atomic_sub v0, v[0:1], v2 glc1702; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1703; GCN2-NEXT:    buffer_wbinvl1_vol1704; GCN2-NEXT:    s_setpc_b64 s[30:31]1705;1706; GCN3-LABEL: flat_atomic_sub_i32_ret_offset__amdgpu_no_remote_memory:1707; GCN3:       ; %bb.0:1708; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1709; GCN3-NEXT:    flat_atomic_sub v0, v[0:1], v2 offset:16 glc1710; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1711; GCN3-NEXT:    buffer_wbinvl1_vol1712; GCN3-NEXT:    s_setpc_b64 s[30:31]1713  %gep = getelementptr inbounds i32, ptr %out, i64 41714  %result = atomicrmw sub ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !01715  ret i32 %result1716}1717 1718; ---------------------------------------------------------------------1719; atomicrmw and1720; ---------------------------------------------------------------------1721 1722define void @flat_atomic_and_i32_noret(ptr %ptr, i32 %in) {1723; GCN1-LABEL: flat_atomic_and_i32_noret:1724; GCN1:       ; %bb.0:1725; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1726; GCN1-NEXT:    flat_load_dword v4, v[0:1]1727; GCN1-NEXT:    s_mov_b64 s[4:5], 01728; GCN1-NEXT:  .LBB40_1: ; %atomicrmw.start1729; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=11730; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1731; GCN1-NEXT:    v_and_b32_e32 v3, v4, v21732; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1733; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1734; GCN1-NEXT:    buffer_wbinvl1_vol1735; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41736; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1737; GCN1-NEXT:    v_mov_b32_e32 v4, v31738; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]1739; GCN1-NEXT:    s_cbranch_execnz .LBB40_11740; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end1741; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]1742; GCN1-NEXT:    s_setpc_b64 s[30:31]1743;1744; GCN2-LABEL: flat_atomic_and_i32_noret:1745; GCN2:       ; %bb.0:1746; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1747; GCN2-NEXT:    flat_load_dword v4, v[0:1]1748; GCN2-NEXT:    s_mov_b64 s[4:5], 01749; GCN2-NEXT:  .LBB40_1: ; %atomicrmw.start1750; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=11751; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1752; GCN2-NEXT:    v_and_b32_e32 v3, v4, v21753; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1754; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1755; GCN2-NEXT:    buffer_wbinvl1_vol1756; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41757; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1758; GCN2-NEXT:    v_mov_b32_e32 v4, v31759; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]1760; GCN2-NEXT:    s_cbranch_execnz .LBB40_11761; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end1762; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]1763; GCN2-NEXT:    s_setpc_b64 s[30:31]1764;1765; GCN3-LABEL: flat_atomic_and_i32_noret:1766; GCN3:       ; %bb.0:1767; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1768; GCN3-NEXT:    flat_load_dword v4, v[0:1]1769; GCN3-NEXT:    s_mov_b64 s[4:5], 01770; GCN3-NEXT:  .LBB40_1: ; %atomicrmw.start1771; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=11772; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1773; GCN3-NEXT:    v_and_b32_e32 v3, v4, v21774; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1775; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1776; GCN3-NEXT:    buffer_wbinvl1_vol1777; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41778; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1779; GCN3-NEXT:    v_mov_b32_e32 v4, v31780; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]1781; GCN3-NEXT:    s_cbranch_execnz .LBB40_11782; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end1783; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]1784; GCN3-NEXT:    s_setpc_b64 s[30:31]1785  %tmp0 = atomicrmw and ptr %ptr, i32 %in seq_cst1786  ret void1787}1788 1789define void @flat_atomic_and_i32_noret_offset(ptr %out, i32 %in) {1790; GCN1-LABEL: flat_atomic_and_i32_noret_offset:1791; GCN1:       ; %bb.0:1792; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1793; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v01794; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1795; GCN1-NEXT:    flat_load_dword v4, v[0:1]1796; GCN1-NEXT:    s_mov_b64 s[4:5], 01797; GCN1-NEXT:  .LBB41_1: ; %atomicrmw.start1798; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=11799; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1800; GCN1-NEXT:    v_and_b32_e32 v3, v4, v21801; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1802; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1803; GCN1-NEXT:    buffer_wbinvl1_vol1804; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41805; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1806; GCN1-NEXT:    v_mov_b32_e32 v4, v31807; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]1808; GCN1-NEXT:    s_cbranch_execnz .LBB41_11809; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end1810; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]1811; GCN1-NEXT:    s_setpc_b64 s[30:31]1812;1813; GCN2-LABEL: flat_atomic_and_i32_noret_offset:1814; GCN2:       ; %bb.0:1815; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1816; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v01817; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc1818; GCN2-NEXT:    flat_load_dword v4, v[0:1]1819; GCN2-NEXT:    s_mov_b64 s[4:5], 01820; GCN2-NEXT:  .LBB41_1: ; %atomicrmw.start1821; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=11822; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1823; GCN2-NEXT:    v_and_b32_e32 v3, v4, v21824; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1825; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1826; GCN2-NEXT:    buffer_wbinvl1_vol1827; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41828; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1829; GCN2-NEXT:    v_mov_b32_e32 v4, v31830; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]1831; GCN2-NEXT:    s_cbranch_execnz .LBB41_11832; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end1833; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]1834; GCN2-NEXT:    s_setpc_b64 s[30:31]1835;1836; GCN3-LABEL: flat_atomic_and_i32_noret_offset:1837; GCN3:       ; %bb.0:1838; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1839; GCN3-NEXT:    flat_load_dword v4, v[0:1] offset:161840; GCN3-NEXT:    s_mov_b64 s[4:5], 01841; GCN3-NEXT:  .LBB41_1: ; %atomicrmw.start1842; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=11843; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1844; GCN3-NEXT:    v_and_b32_e32 v3, v4, v21845; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc1846; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1847; GCN3-NEXT:    buffer_wbinvl1_vol1848; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41849; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1850; GCN3-NEXT:    v_mov_b32_e32 v4, v31851; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]1852; GCN3-NEXT:    s_cbranch_execnz .LBB41_11853; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end1854; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]1855; GCN3-NEXT:    s_setpc_b64 s[30:31]1856  %gep = getelementptr inbounds i32, ptr %out, i32 41857  %tmp0 = atomicrmw and ptr %gep, i32 %in seq_cst1858  ret void1859}1860 1861define i32 @flat_atomic_and_i32_ret(ptr %ptr, i32 %in) {1862; GCN1-LABEL: flat_atomic_and_i32_ret:1863; GCN1:       ; %bb.0:1864; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1865; GCN1-NEXT:    flat_load_dword v3, v[0:1]1866; GCN1-NEXT:    s_mov_b64 s[4:5], 01867; GCN1-NEXT:  .LBB42_1: ; %atomicrmw.start1868; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=11869; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1870; GCN1-NEXT:    v_mov_b32_e32 v4, v31871; GCN1-NEXT:    v_and_b32_e32 v3, v4, v21872; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1873; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1874; GCN1-NEXT:    buffer_wbinvl1_vol1875; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41876; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1877; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]1878; GCN1-NEXT:    s_cbranch_execnz .LBB42_11879; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end1880; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]1881; GCN1-NEXT:    v_mov_b32_e32 v0, v31882; GCN1-NEXT:    s_setpc_b64 s[30:31]1883;1884; GCN2-LABEL: flat_atomic_and_i32_ret:1885; GCN2:       ; %bb.0:1886; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1887; GCN2-NEXT:    flat_load_dword v3, v[0:1]1888; GCN2-NEXT:    s_mov_b64 s[4:5], 01889; GCN2-NEXT:  .LBB42_1: ; %atomicrmw.start1890; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=11891; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1892; GCN2-NEXT:    v_mov_b32_e32 v4, v31893; GCN2-NEXT:    v_and_b32_e32 v3, v4, v21894; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1895; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1896; GCN2-NEXT:    buffer_wbinvl1_vol1897; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41898; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1899; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]1900; GCN2-NEXT:    s_cbranch_execnz .LBB42_11901; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end1902; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]1903; GCN2-NEXT:    v_mov_b32_e32 v0, v31904; GCN2-NEXT:    s_setpc_b64 s[30:31]1905;1906; GCN3-LABEL: flat_atomic_and_i32_ret:1907; GCN3:       ; %bb.0:1908; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1909; GCN3-NEXT:    flat_load_dword v3, v[0:1]1910; GCN3-NEXT:    s_mov_b64 s[4:5], 01911; GCN3-NEXT:  .LBB42_1: ; %atomicrmw.start1912; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=11913; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1914; GCN3-NEXT:    v_mov_b32_e32 v4, v31915; GCN3-NEXT:    v_and_b32_e32 v3, v4, v21916; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc1917; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1918; GCN3-NEXT:    buffer_wbinvl1_vol1919; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41920; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1921; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]1922; GCN3-NEXT:    s_cbranch_execnz .LBB42_11923; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end1924; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]1925; GCN3-NEXT:    v_mov_b32_e32 v0, v31926; GCN3-NEXT:    s_setpc_b64 s[30:31]1927  %result = atomicrmw and ptr %ptr, i32 %in seq_cst1928  ret i32 %result1929}1930 1931define i32 @flat_atomic_and_i32_ret_offset(ptr %out, i32 %in) {1932; GCN1-LABEL: flat_atomic_and_i32_ret_offset:1933; GCN1:       ; %bb.0:1934; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1935; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 16, v01936; GCN1-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc1937; GCN1-NEXT:    flat_load_dword v0, v[3:4]1938; GCN1-NEXT:    s_mov_b64 s[4:5], 01939; GCN1-NEXT:  .LBB43_1: ; %atomicrmw.start1940; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=11941; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1942; GCN1-NEXT:    v_mov_b32_e32 v1, v01943; GCN1-NEXT:    v_and_b32_e32 v0, v1, v21944; GCN1-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc1945; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1946; GCN1-NEXT:    buffer_wbinvl1_vol1947; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v11948; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1949; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]1950; GCN1-NEXT:    s_cbranch_execnz .LBB43_11951; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end1952; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]1953; GCN1-NEXT:    s_setpc_b64 s[30:31]1954;1955; GCN2-LABEL: flat_atomic_and_i32_ret_offset:1956; GCN2:       ; %bb.0:1957; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1958; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 16, v01959; GCN2-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc1960; GCN2-NEXT:    flat_load_dword v0, v[3:4]1961; GCN2-NEXT:    s_mov_b64 s[4:5], 01962; GCN2-NEXT:  .LBB43_1: ; %atomicrmw.start1963; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=11964; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1965; GCN2-NEXT:    v_mov_b32_e32 v1, v01966; GCN2-NEXT:    v_and_b32_e32 v0, v1, v21967; GCN2-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc1968; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1969; GCN2-NEXT:    buffer_wbinvl1_vol1970; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v11971; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1972; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]1973; GCN2-NEXT:    s_cbranch_execnz .LBB43_11974; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end1975; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]1976; GCN2-NEXT:    s_setpc_b64 s[30:31]1977;1978; GCN3-LABEL: flat_atomic_and_i32_ret_offset:1979; GCN3:       ; %bb.0:1980; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1981; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:161982; GCN3-NEXT:    s_mov_b64 s[4:5], 01983; GCN3-NEXT:  .LBB43_1: ; %atomicrmw.start1984; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=11985; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1986; GCN3-NEXT:    v_mov_b32_e32 v4, v31987; GCN3-NEXT:    v_and_b32_e32 v3, v4, v21988; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc1989; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)1990; GCN3-NEXT:    buffer_wbinvl1_vol1991; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v41992; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]1993; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]1994; GCN3-NEXT:    s_cbranch_execnz .LBB43_11995; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end1996; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]1997; GCN3-NEXT:    v_mov_b32_e32 v0, v31998; GCN3-NEXT:    s_setpc_b64 s[30:31]1999  %gep = getelementptr inbounds i32, ptr %out, i32 42000  %result = atomicrmw and ptr %gep, i32 %in seq_cst2001  ret i32 %result2002}2003 2004define amdgpu_gfx void @flat_atomic_and_i32_noret_scalar(ptr inreg %ptr, i32 inreg %in) {2005; GCN1-LABEL: flat_atomic_and_i32_noret_scalar:2006; GCN1:       ; %bb.0:2007; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2008; GCN1-NEXT:    v_mov_b32_e32 v0, s42009; GCN1-NEXT:    v_mov_b32_e32 v1, s52010; GCN1-NEXT:    flat_load_dword v3, v[0:1]2011; GCN1-NEXT:    s_mov_b64 s[34:35], 02012; GCN1-NEXT:  .LBB44_1: ; %atomicrmw.start2013; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=12014; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2015; GCN1-NEXT:    v_and_b32_e32 v2, s6, v32016; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc2017; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2018; GCN1-NEXT:    buffer_wbinvl1_vol2019; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v32020; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2021; GCN1-NEXT:    v_mov_b32_e32 v3, v22022; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]2023; GCN1-NEXT:    s_cbranch_execnz .LBB44_12024; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end2025; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]2026; GCN1-NEXT:    s_setpc_b64 s[30:31]2027;2028; GCN2-LABEL: flat_atomic_and_i32_noret_scalar:2029; GCN2:       ; %bb.0:2030; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2031; GCN2-NEXT:    v_mov_b32_e32 v0, s42032; GCN2-NEXT:    v_mov_b32_e32 v1, s52033; GCN2-NEXT:    flat_load_dword v3, v[0:1]2034; GCN2-NEXT:    s_mov_b64 s[34:35], 02035; GCN2-NEXT:  .LBB44_1: ; %atomicrmw.start2036; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=12037; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2038; GCN2-NEXT:    v_and_b32_e32 v2, s6, v32039; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc2040; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2041; GCN2-NEXT:    buffer_wbinvl1_vol2042; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v32043; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2044; GCN2-NEXT:    v_mov_b32_e32 v3, v22045; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]2046; GCN2-NEXT:    s_cbranch_execnz .LBB44_12047; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end2048; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]2049; GCN2-NEXT:    s_setpc_b64 s[30:31]2050;2051; GCN3-LABEL: flat_atomic_and_i32_noret_scalar:2052; GCN3:       ; %bb.0:2053; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2054; GCN3-NEXT:    v_mov_b32_e32 v0, s42055; GCN3-NEXT:    v_mov_b32_e32 v1, s52056; GCN3-NEXT:    flat_load_dword v3, v[0:1]2057; GCN3-NEXT:    s_mov_b64 s[34:35], 02058; GCN3-NEXT:  .LBB44_1: ; %atomicrmw.start2059; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=12060; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2061; GCN3-NEXT:    v_and_b32_e32 v2, s6, v32062; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc2063; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2064; GCN3-NEXT:    buffer_wbinvl1_vol2065; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v32066; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2067; GCN3-NEXT:    v_mov_b32_e32 v3, v22068; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]2069; GCN3-NEXT:    s_cbranch_execnz .LBB44_12070; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end2071; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]2072; GCN3-NEXT:    s_setpc_b64 s[30:31]2073  %tmp0 = atomicrmw and ptr %ptr, i32 %in seq_cst2074  ret void2075}2076 2077define amdgpu_gfx void @flat_atomic_and_i32_noret_offset_scalar(ptr inreg %out, i32 inreg %in) {2078; GCN1-LABEL: flat_atomic_and_i32_noret_offset_scalar:2079; GCN1:       ; %bb.0:2080; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2081; GCN1-NEXT:    s_add_u32 s34, s4, 162082; GCN1-NEXT:    s_addc_u32 s35, s5, 02083; GCN1-NEXT:    v_mov_b32_e32 v0, s342084; GCN1-NEXT:    v_mov_b32_e32 v1, s352085; GCN1-NEXT:    flat_load_dword v3, v[0:1]2086; GCN1-NEXT:    s_mov_b64 s[34:35], 02087; GCN1-NEXT:  .LBB45_1: ; %atomicrmw.start2088; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=12089; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2090; GCN1-NEXT:    v_and_b32_e32 v2, s6, v32091; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc2092; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2093; GCN1-NEXT:    buffer_wbinvl1_vol2094; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v32095; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2096; GCN1-NEXT:    v_mov_b32_e32 v3, v22097; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]2098; GCN1-NEXT:    s_cbranch_execnz .LBB45_12099; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end2100; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]2101; GCN1-NEXT:    s_setpc_b64 s[30:31]2102;2103; GCN2-LABEL: flat_atomic_and_i32_noret_offset_scalar:2104; GCN2:       ; %bb.0:2105; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2106; GCN2-NEXT:    s_add_u32 s34, s4, 162107; GCN2-NEXT:    s_addc_u32 s35, s5, 02108; GCN2-NEXT:    v_mov_b32_e32 v0, s342109; GCN2-NEXT:    v_mov_b32_e32 v1, s352110; GCN2-NEXT:    flat_load_dword v3, v[0:1]2111; GCN2-NEXT:    s_mov_b64 s[34:35], 02112; GCN2-NEXT:  .LBB45_1: ; %atomicrmw.start2113; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=12114; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2115; GCN2-NEXT:    v_and_b32_e32 v2, s6, v32116; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc2117; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2118; GCN2-NEXT:    buffer_wbinvl1_vol2119; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v32120; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2121; GCN2-NEXT:    v_mov_b32_e32 v3, v22122; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]2123; GCN2-NEXT:    s_cbranch_execnz .LBB45_12124; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end2125; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]2126; GCN2-NEXT:    s_setpc_b64 s[30:31]2127;2128; GCN3-LABEL: flat_atomic_and_i32_noret_offset_scalar:2129; GCN3:       ; %bb.0:2130; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2131; GCN3-NEXT:    v_mov_b32_e32 v0, s42132; GCN3-NEXT:    v_mov_b32_e32 v1, s52133; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:162134; GCN3-NEXT:    s_mov_b64 s[34:35], 02135; GCN3-NEXT:  .LBB45_1: ; %atomicrmw.start2136; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=12137; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2138; GCN3-NEXT:    v_and_b32_e32 v2, s6, v32139; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc2140; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2141; GCN3-NEXT:    buffer_wbinvl1_vol2142; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v32143; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2144; GCN3-NEXT:    v_mov_b32_e32 v3, v22145; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]2146; GCN3-NEXT:    s_cbranch_execnz .LBB45_12147; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end2148; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]2149; GCN3-NEXT:    s_setpc_b64 s[30:31]2150  %gep = getelementptr inbounds i32, ptr %out, i32 42151  %tmp0 = atomicrmw and ptr %gep, i32 %in seq_cst2152  ret void2153}2154 2155define amdgpu_gfx i32 @flat_atomic_and_i32_ret_scalar(ptr inreg %ptr, i32 inreg %in) {2156; GCN1-LABEL: flat_atomic_and_i32_ret_scalar:2157; GCN1:       ; %bb.0:2158; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2159; GCN1-NEXT:    v_mov_b32_e32 v0, s42160; GCN1-NEXT:    v_mov_b32_e32 v1, s52161; GCN1-NEXT:    flat_load_dword v0, v[0:1]2162; GCN1-NEXT:    v_mov_b32_e32 v1, s42163; GCN1-NEXT:    s_mov_b64 s[34:35], 02164; GCN1-NEXT:    v_mov_b32_e32 v2, s52165; GCN1-NEXT:  .LBB46_1: ; %atomicrmw.start2166; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=12167; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2168; GCN1-NEXT:    v_mov_b32_e32 v4, v02169; GCN1-NEXT:    v_and_b32_e32 v3, s6, v42170; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc2171; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2172; GCN1-NEXT:    buffer_wbinvl1_vol2173; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v42174; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2175; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]2176; GCN1-NEXT:    s_cbranch_execnz .LBB46_12177; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end2178; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]2179; GCN1-NEXT:    s_setpc_b64 s[30:31]2180;2181; GCN2-LABEL: flat_atomic_and_i32_ret_scalar:2182; GCN2:       ; %bb.0:2183; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2184; GCN2-NEXT:    v_mov_b32_e32 v0, s42185; GCN2-NEXT:    v_mov_b32_e32 v1, s52186; GCN2-NEXT:    flat_load_dword v0, v[0:1]2187; GCN2-NEXT:    v_mov_b32_e32 v1, s42188; GCN2-NEXT:    s_mov_b64 s[34:35], 02189; GCN2-NEXT:    v_mov_b32_e32 v2, s52190; GCN2-NEXT:  .LBB46_1: ; %atomicrmw.start2191; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=12192; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2193; GCN2-NEXT:    v_mov_b32_e32 v4, v02194; GCN2-NEXT:    v_and_b32_e32 v3, s6, v42195; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc2196; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2197; GCN2-NEXT:    buffer_wbinvl1_vol2198; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v42199; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2200; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]2201; GCN2-NEXT:    s_cbranch_execnz .LBB46_12202; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end2203; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]2204; GCN2-NEXT:    s_setpc_b64 s[30:31]2205;2206; GCN3-LABEL: flat_atomic_and_i32_ret_scalar:2207; GCN3:       ; %bb.0:2208; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2209; GCN3-NEXT:    v_mov_b32_e32 v0, s42210; GCN3-NEXT:    v_mov_b32_e32 v1, s52211; GCN3-NEXT:    flat_load_dword v0, v[0:1]2212; GCN3-NEXT:    v_mov_b32_e32 v1, s42213; GCN3-NEXT:    s_mov_b64 s[34:35], 02214; GCN3-NEXT:    v_mov_b32_e32 v2, s52215; GCN3-NEXT:  .LBB46_1: ; %atomicrmw.start2216; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=12217; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2218; GCN3-NEXT:    v_mov_b32_e32 v4, v02219; GCN3-NEXT:    v_and_b32_e32 v3, s6, v42220; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc2221; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2222; GCN3-NEXT:    buffer_wbinvl1_vol2223; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v42224; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2225; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]2226; GCN3-NEXT:    s_cbranch_execnz .LBB46_12227; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end2228; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]2229; GCN3-NEXT:    s_setpc_b64 s[30:31]2230  %result = atomicrmw and ptr %ptr, i32 %in seq_cst2231  ret i32 %result2232}2233 2234define amdgpu_gfx i32 @flat_atomic_and_i32_ret_offset_scalar(ptr inreg %out, i32 inreg %in) {2235; GCN1-LABEL: flat_atomic_and_i32_ret_offset_scalar:2236; GCN1:       ; %bb.0:2237; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2238; GCN1-NEXT:    s_add_u32 s34, s4, 162239; GCN1-NEXT:    s_addc_u32 s35, s5, 02240; GCN1-NEXT:    v_mov_b32_e32 v1, s342241; GCN1-NEXT:    v_mov_b32_e32 v2, s352242; GCN1-NEXT:    flat_load_dword v0, v[1:2]2243; GCN1-NEXT:    s_mov_b64 s[34:35], 02244; GCN1-NEXT:  .LBB47_1: ; %atomicrmw.start2245; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=12246; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2247; GCN1-NEXT:    v_mov_b32_e32 v4, v02248; GCN1-NEXT:    v_and_b32_e32 v3, s6, v42249; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc2250; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2251; GCN1-NEXT:    buffer_wbinvl1_vol2252; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v42253; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2254; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]2255; GCN1-NEXT:    s_cbranch_execnz .LBB47_12256; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end2257; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]2258; GCN1-NEXT:    s_setpc_b64 s[30:31]2259;2260; GCN2-LABEL: flat_atomic_and_i32_ret_offset_scalar:2261; GCN2:       ; %bb.0:2262; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2263; GCN2-NEXT:    s_add_u32 s34, s4, 162264; GCN2-NEXT:    s_addc_u32 s35, s5, 02265; GCN2-NEXT:    v_mov_b32_e32 v1, s342266; GCN2-NEXT:    v_mov_b32_e32 v2, s352267; GCN2-NEXT:    flat_load_dword v0, v[1:2]2268; GCN2-NEXT:    s_mov_b64 s[34:35], 02269; GCN2-NEXT:  .LBB47_1: ; %atomicrmw.start2270; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=12271; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2272; GCN2-NEXT:    v_mov_b32_e32 v4, v02273; GCN2-NEXT:    v_and_b32_e32 v3, s6, v42274; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc2275; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2276; GCN2-NEXT:    buffer_wbinvl1_vol2277; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v42278; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2279; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]2280; GCN2-NEXT:    s_cbranch_execnz .LBB47_12281; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end2282; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]2283; GCN2-NEXT:    s_setpc_b64 s[30:31]2284;2285; GCN3-LABEL: flat_atomic_and_i32_ret_offset_scalar:2286; GCN3:       ; %bb.0:2287; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2288; GCN3-NEXT:    v_mov_b32_e32 v0, s42289; GCN3-NEXT:    v_mov_b32_e32 v1, s52290; GCN3-NEXT:    flat_load_dword v0, v[0:1] offset:162291; GCN3-NEXT:    v_mov_b32_e32 v1, s42292; GCN3-NEXT:    s_mov_b64 s[34:35], 02293; GCN3-NEXT:    v_mov_b32_e32 v2, s52294; GCN3-NEXT:  .LBB47_1: ; %atomicrmw.start2295; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=12296; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2297; GCN3-NEXT:    v_mov_b32_e32 v4, v02298; GCN3-NEXT:    v_and_b32_e32 v3, s6, v42299; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] offset:16 glc2300; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2301; GCN3-NEXT:    buffer_wbinvl1_vol2302; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v42303; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2304; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]2305; GCN3-NEXT:    s_cbranch_execnz .LBB47_12306; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end2307; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]2308; GCN3-NEXT:    s_setpc_b64 s[30:31]2309  %gep = getelementptr inbounds i32, ptr %out, i32 42310  %result = atomicrmw and ptr %gep, i32 %in seq_cst2311  ret i32 %result2312}2313 2314define void @flat_atomic_and_i32_noret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {2315; GCN1-LABEL: flat_atomic_and_i32_noret_offset__amdgpu_no_remote_memory:2316; GCN1:       ; %bb.0:2317; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2318; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v02319; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2320; GCN1-NEXT:    flat_atomic_and v[0:1], v22321; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2322; GCN1-NEXT:    buffer_wbinvl1_vol2323; GCN1-NEXT:    s_setpc_b64 s[30:31]2324;2325; GCN2-LABEL: flat_atomic_and_i32_noret_offset__amdgpu_no_remote_memory:2326; GCN2:       ; %bb.0:2327; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2328; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v02329; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2330; GCN2-NEXT:    flat_atomic_and v[0:1], v22331; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2332; GCN2-NEXT:    buffer_wbinvl1_vol2333; GCN2-NEXT:    s_setpc_b64 s[30:31]2334;2335; GCN3-LABEL: flat_atomic_and_i32_noret_offset__amdgpu_no_remote_memory:2336; GCN3:       ; %bb.0:2337; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2338; GCN3-NEXT:    flat_atomic_and v[0:1], v2 offset:162339; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2340; GCN3-NEXT:    buffer_wbinvl1_vol2341; GCN3-NEXT:    s_setpc_b64 s[30:31]2342  %gep = getelementptr inbounds i32, ptr %out, i64 42343  %tmp0 = atomicrmw and ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !02344  ret void2345}2346 2347define i32 @flat_atomic_and_i32_ret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {2348; GCN1-LABEL: flat_atomic_and_i32_ret_offset__amdgpu_no_remote_memory:2349; GCN1:       ; %bb.0:2350; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2351; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v02352; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2353; GCN1-NEXT:    flat_atomic_and v0, v[0:1], v2 glc2354; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2355; GCN1-NEXT:    buffer_wbinvl1_vol2356; GCN1-NEXT:    s_setpc_b64 s[30:31]2357;2358; GCN2-LABEL: flat_atomic_and_i32_ret_offset__amdgpu_no_remote_memory:2359; GCN2:       ; %bb.0:2360; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2361; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v02362; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2363; GCN2-NEXT:    flat_atomic_and v0, v[0:1], v2 glc2364; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2365; GCN2-NEXT:    buffer_wbinvl1_vol2366; GCN2-NEXT:    s_setpc_b64 s[30:31]2367;2368; GCN3-LABEL: flat_atomic_and_i32_ret_offset__amdgpu_no_remote_memory:2369; GCN3:       ; %bb.0:2370; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2371; GCN3-NEXT:    flat_atomic_and v0, v[0:1], v2 offset:16 glc2372; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2373; GCN3-NEXT:    buffer_wbinvl1_vol2374; GCN3-NEXT:    s_setpc_b64 s[30:31]2375  %gep = getelementptr inbounds i32, ptr %out, i64 42376  %result = atomicrmw and ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !02377  ret i32 %result2378}2379 2380; ---------------------------------------------------------------------2381; atomicrmw nand2382; ---------------------------------------------------------------------2383 2384define void @flat_atomic_nand_i32_noret(ptr %ptr, i32 %in) {2385; GCN1-LABEL: flat_atomic_nand_i32_noret:2386; GCN1:       ; %bb.0:2387; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2388; GCN1-NEXT:    flat_load_dword v4, v[0:1]2389; GCN1-NEXT:    s_mov_b64 s[4:5], 02390; GCN1-NEXT:  .LBB50_1: ; %atomicrmw.start2391; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=12392; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2393; GCN1-NEXT:    v_and_b32_e32 v3, v4, v22394; GCN1-NEXT:    v_not_b32_e32 v3, v32395; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc2396; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2397; GCN1-NEXT:    buffer_wbinvl1_vol2398; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v42399; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2400; GCN1-NEXT:    v_mov_b32_e32 v4, v32401; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]2402; GCN1-NEXT:    s_cbranch_execnz .LBB50_12403; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end2404; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]2405; GCN1-NEXT:    s_setpc_b64 s[30:31]2406;2407; GCN2-LABEL: flat_atomic_nand_i32_noret:2408; GCN2:       ; %bb.0:2409; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2410; GCN2-NEXT:    flat_load_dword v4, v[0:1]2411; GCN2-NEXT:    s_mov_b64 s[4:5], 02412; GCN2-NEXT:  .LBB50_1: ; %atomicrmw.start2413; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=12414; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2415; GCN2-NEXT:    v_and_b32_e32 v3, v4, v22416; GCN2-NEXT:    v_not_b32_e32 v3, v32417; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc2418; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2419; GCN2-NEXT:    buffer_wbinvl1_vol2420; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v42421; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2422; GCN2-NEXT:    v_mov_b32_e32 v4, v32423; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]2424; GCN2-NEXT:    s_cbranch_execnz .LBB50_12425; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end2426; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]2427; GCN2-NEXT:    s_setpc_b64 s[30:31]2428;2429; GCN3-LABEL: flat_atomic_nand_i32_noret:2430; GCN3:       ; %bb.0:2431; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2432; GCN3-NEXT:    flat_load_dword v4, v[0:1]2433; GCN3-NEXT:    s_mov_b64 s[4:5], 02434; GCN3-NEXT:  .LBB50_1: ; %atomicrmw.start2435; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=12436; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2437; GCN3-NEXT:    v_and_b32_e32 v3, v4, v22438; GCN3-NEXT:    v_not_b32_e32 v3, v32439; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc2440; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2441; GCN3-NEXT:    buffer_wbinvl1_vol2442; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v42443; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2444; GCN3-NEXT:    v_mov_b32_e32 v4, v32445; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]2446; GCN3-NEXT:    s_cbranch_execnz .LBB50_12447; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end2448; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]2449; GCN3-NEXT:    s_setpc_b64 s[30:31]2450  %tmp0 = atomicrmw nand ptr %ptr, i32 %in seq_cst2451  ret void2452}2453 2454define void @flat_atomic_nand_i32_noret_offset(ptr %out, i32 %in) {2455; GCN1-LABEL: flat_atomic_nand_i32_noret_offset:2456; GCN1:       ; %bb.0:2457; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2458; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v02459; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2460; GCN1-NEXT:    flat_load_dword v4, v[0:1]2461; GCN1-NEXT:    s_mov_b64 s[4:5], 02462; GCN1-NEXT:  .LBB51_1: ; %atomicrmw.start2463; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=12464; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2465; GCN1-NEXT:    v_and_b32_e32 v3, v4, v22466; GCN1-NEXT:    v_not_b32_e32 v3, v32467; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc2468; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2469; GCN1-NEXT:    buffer_wbinvl1_vol2470; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v42471; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2472; GCN1-NEXT:    v_mov_b32_e32 v4, v32473; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]2474; GCN1-NEXT:    s_cbranch_execnz .LBB51_12475; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end2476; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]2477; GCN1-NEXT:    s_setpc_b64 s[30:31]2478;2479; GCN2-LABEL: flat_atomic_nand_i32_noret_offset:2480; GCN2:       ; %bb.0:2481; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2482; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v02483; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc2484; GCN2-NEXT:    flat_load_dword v4, v[0:1]2485; GCN2-NEXT:    s_mov_b64 s[4:5], 02486; GCN2-NEXT:  .LBB51_1: ; %atomicrmw.start2487; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=12488; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2489; GCN2-NEXT:    v_and_b32_e32 v3, v4, v22490; GCN2-NEXT:    v_not_b32_e32 v3, v32491; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc2492; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2493; GCN2-NEXT:    buffer_wbinvl1_vol2494; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v42495; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2496; GCN2-NEXT:    v_mov_b32_e32 v4, v32497; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]2498; GCN2-NEXT:    s_cbranch_execnz .LBB51_12499; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end2500; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]2501; GCN2-NEXT:    s_setpc_b64 s[30:31]2502;2503; GCN3-LABEL: flat_atomic_nand_i32_noret_offset:2504; GCN3:       ; %bb.0:2505; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2506; GCN3-NEXT:    flat_load_dword v4, v[0:1] offset:162507; GCN3-NEXT:    s_mov_b64 s[4:5], 02508; GCN3-NEXT:  .LBB51_1: ; %atomicrmw.start2509; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=12510; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2511; GCN3-NEXT:    v_and_b32_e32 v3, v4, v22512; GCN3-NEXT:    v_not_b32_e32 v3, v32513; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc2514; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2515; GCN3-NEXT:    buffer_wbinvl1_vol2516; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v42517; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2518; GCN3-NEXT:    v_mov_b32_e32 v4, v32519; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]2520; GCN3-NEXT:    s_cbranch_execnz .LBB51_12521; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end2522; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]2523; GCN3-NEXT:    s_setpc_b64 s[30:31]2524  %gep = getelementptr inbounds i32, ptr %out, i32 42525  %tmp0 = atomicrmw nand ptr %gep, i32 %in seq_cst2526  ret void2527}2528 2529define i32 @flat_atomic_nand_i32_ret(ptr %ptr, i32 %in) {2530; GCN1-LABEL: flat_atomic_nand_i32_ret:2531; GCN1:       ; %bb.0:2532; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2533; GCN1-NEXT:    flat_load_dword v3, v[0:1]2534; GCN1-NEXT:    s_mov_b64 s[4:5], 02535; GCN1-NEXT:  .LBB52_1: ; %atomicrmw.start2536; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=12537; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2538; GCN1-NEXT:    v_mov_b32_e32 v4, v32539; GCN1-NEXT:    v_and_b32_e32 v3, v4, v22540; GCN1-NEXT:    v_not_b32_e32 v3, v32541; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc2542; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2543; GCN1-NEXT:    buffer_wbinvl1_vol2544; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v42545; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2546; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]2547; GCN1-NEXT:    s_cbranch_execnz .LBB52_12548; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end2549; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]2550; GCN1-NEXT:    v_mov_b32_e32 v0, v32551; GCN1-NEXT:    s_setpc_b64 s[30:31]2552;2553; GCN2-LABEL: flat_atomic_nand_i32_ret:2554; GCN2:       ; %bb.0:2555; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2556; GCN2-NEXT:    flat_load_dword v3, v[0:1]2557; GCN2-NEXT:    s_mov_b64 s[4:5], 02558; GCN2-NEXT:  .LBB52_1: ; %atomicrmw.start2559; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=12560; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2561; GCN2-NEXT:    v_mov_b32_e32 v4, v32562; GCN2-NEXT:    v_and_b32_e32 v3, v4, v22563; GCN2-NEXT:    v_not_b32_e32 v3, v32564; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc2565; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2566; GCN2-NEXT:    buffer_wbinvl1_vol2567; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v42568; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2569; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]2570; GCN2-NEXT:    s_cbranch_execnz .LBB52_12571; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end2572; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]2573; GCN2-NEXT:    v_mov_b32_e32 v0, v32574; GCN2-NEXT:    s_setpc_b64 s[30:31]2575;2576; GCN3-LABEL: flat_atomic_nand_i32_ret:2577; GCN3:       ; %bb.0:2578; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2579; GCN3-NEXT:    flat_load_dword v3, v[0:1]2580; GCN3-NEXT:    s_mov_b64 s[4:5], 02581; GCN3-NEXT:  .LBB52_1: ; %atomicrmw.start2582; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=12583; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2584; GCN3-NEXT:    v_mov_b32_e32 v4, v32585; GCN3-NEXT:    v_and_b32_e32 v3, v4, v22586; GCN3-NEXT:    v_not_b32_e32 v3, v32587; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc2588; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2589; GCN3-NEXT:    buffer_wbinvl1_vol2590; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v42591; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2592; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]2593; GCN3-NEXT:    s_cbranch_execnz .LBB52_12594; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end2595; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]2596; GCN3-NEXT:    v_mov_b32_e32 v0, v32597; GCN3-NEXT:    s_setpc_b64 s[30:31]2598  %result = atomicrmw nand ptr %ptr, i32 %in seq_cst2599  ret i32 %result2600}2601 2602define i32 @flat_atomic_nand_i32_ret_offset(ptr %out, i32 %in) {2603; GCN1-LABEL: flat_atomic_nand_i32_ret_offset:2604; GCN1:       ; %bb.0:2605; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2606; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 16, v02607; GCN1-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc2608; GCN1-NEXT:    flat_load_dword v0, v[3:4]2609; GCN1-NEXT:    s_mov_b64 s[4:5], 02610; GCN1-NEXT:  .LBB53_1: ; %atomicrmw.start2611; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=12612; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2613; GCN1-NEXT:    v_mov_b32_e32 v1, v02614; GCN1-NEXT:    v_and_b32_e32 v0, v1, v22615; GCN1-NEXT:    v_not_b32_e32 v0, v02616; GCN1-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc2617; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2618; GCN1-NEXT:    buffer_wbinvl1_vol2619; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v12620; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2621; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]2622; GCN1-NEXT:    s_cbranch_execnz .LBB53_12623; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end2624; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]2625; GCN1-NEXT:    s_setpc_b64 s[30:31]2626;2627; GCN2-LABEL: flat_atomic_nand_i32_ret_offset:2628; GCN2:       ; %bb.0:2629; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2630; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 16, v02631; GCN2-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc2632; GCN2-NEXT:    flat_load_dword v0, v[3:4]2633; GCN2-NEXT:    s_mov_b64 s[4:5], 02634; GCN2-NEXT:  .LBB53_1: ; %atomicrmw.start2635; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=12636; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2637; GCN2-NEXT:    v_mov_b32_e32 v1, v02638; GCN2-NEXT:    v_and_b32_e32 v0, v1, v22639; GCN2-NEXT:    v_not_b32_e32 v0, v02640; GCN2-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc2641; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2642; GCN2-NEXT:    buffer_wbinvl1_vol2643; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v12644; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2645; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]2646; GCN2-NEXT:    s_cbranch_execnz .LBB53_12647; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end2648; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]2649; GCN2-NEXT:    s_setpc_b64 s[30:31]2650;2651; GCN3-LABEL: flat_atomic_nand_i32_ret_offset:2652; GCN3:       ; %bb.0:2653; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2654; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:162655; GCN3-NEXT:    s_mov_b64 s[4:5], 02656; GCN3-NEXT:  .LBB53_1: ; %atomicrmw.start2657; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=12658; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2659; GCN3-NEXT:    v_mov_b32_e32 v4, v32660; GCN3-NEXT:    v_and_b32_e32 v3, v4, v22661; GCN3-NEXT:    v_not_b32_e32 v3, v32662; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc2663; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2664; GCN3-NEXT:    buffer_wbinvl1_vol2665; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v42666; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]2667; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]2668; GCN3-NEXT:    s_cbranch_execnz .LBB53_12669; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end2670; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]2671; GCN3-NEXT:    v_mov_b32_e32 v0, v32672; GCN3-NEXT:    s_setpc_b64 s[30:31]2673  %gep = getelementptr inbounds i32, ptr %out, i32 42674  %result = atomicrmw nand ptr %gep, i32 %in seq_cst2675  ret i32 %result2676}2677 2678define amdgpu_gfx void @flat_atomic_nand_i32_noret_scalar(ptr inreg %ptr, i32 inreg %in) {2679; GCN1-LABEL: flat_atomic_nand_i32_noret_scalar:2680; GCN1:       ; %bb.0:2681; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2682; GCN1-NEXT:    v_mov_b32_e32 v0, s42683; GCN1-NEXT:    v_mov_b32_e32 v1, s52684; GCN1-NEXT:    flat_load_dword v3, v[0:1]2685; GCN1-NEXT:    s_mov_b64 s[34:35], 02686; GCN1-NEXT:  .LBB54_1: ; %atomicrmw.start2687; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=12688; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2689; GCN1-NEXT:    v_and_b32_e32 v2, s6, v32690; GCN1-NEXT:    v_not_b32_e32 v2, v22691; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc2692; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2693; GCN1-NEXT:    buffer_wbinvl1_vol2694; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v32695; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2696; GCN1-NEXT:    v_mov_b32_e32 v3, v22697; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]2698; GCN1-NEXT:    s_cbranch_execnz .LBB54_12699; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end2700; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]2701; GCN1-NEXT:    s_setpc_b64 s[30:31]2702;2703; GCN2-LABEL: flat_atomic_nand_i32_noret_scalar:2704; GCN2:       ; %bb.0:2705; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2706; GCN2-NEXT:    v_mov_b32_e32 v0, s42707; GCN2-NEXT:    v_mov_b32_e32 v1, s52708; GCN2-NEXT:    flat_load_dword v3, v[0:1]2709; GCN2-NEXT:    s_mov_b64 s[34:35], 02710; GCN2-NEXT:  .LBB54_1: ; %atomicrmw.start2711; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=12712; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2713; GCN2-NEXT:    v_and_b32_e32 v2, s6, v32714; GCN2-NEXT:    v_not_b32_e32 v2, v22715; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc2716; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2717; GCN2-NEXT:    buffer_wbinvl1_vol2718; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v32719; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2720; GCN2-NEXT:    v_mov_b32_e32 v3, v22721; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]2722; GCN2-NEXT:    s_cbranch_execnz .LBB54_12723; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end2724; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]2725; GCN2-NEXT:    s_setpc_b64 s[30:31]2726;2727; GCN3-LABEL: flat_atomic_nand_i32_noret_scalar:2728; GCN3:       ; %bb.0:2729; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2730; GCN3-NEXT:    v_mov_b32_e32 v0, s42731; GCN3-NEXT:    v_mov_b32_e32 v1, s52732; GCN3-NEXT:    flat_load_dword v3, v[0:1]2733; GCN3-NEXT:    s_mov_b64 s[34:35], 02734; GCN3-NEXT:  .LBB54_1: ; %atomicrmw.start2735; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=12736; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2737; GCN3-NEXT:    v_and_b32_e32 v2, s6, v32738; GCN3-NEXT:    v_not_b32_e32 v2, v22739; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc2740; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2741; GCN3-NEXT:    buffer_wbinvl1_vol2742; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v32743; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2744; GCN3-NEXT:    v_mov_b32_e32 v3, v22745; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]2746; GCN3-NEXT:    s_cbranch_execnz .LBB54_12747; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end2748; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]2749; GCN3-NEXT:    s_setpc_b64 s[30:31]2750  %tmp0 = atomicrmw nand ptr %ptr, i32 %in seq_cst2751  ret void2752}2753 2754define amdgpu_gfx void @flat_atomic_nand_i32_noret_offset_scalar(ptr inreg %out, i32 inreg %in) {2755; GCN1-LABEL: flat_atomic_nand_i32_noret_offset_scalar:2756; GCN1:       ; %bb.0:2757; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2758; GCN1-NEXT:    s_add_u32 s34, s4, 162759; GCN1-NEXT:    s_addc_u32 s35, s5, 02760; GCN1-NEXT:    v_mov_b32_e32 v0, s342761; GCN1-NEXT:    v_mov_b32_e32 v1, s352762; GCN1-NEXT:    flat_load_dword v3, v[0:1]2763; GCN1-NEXT:    s_mov_b64 s[34:35], 02764; GCN1-NEXT:  .LBB55_1: ; %atomicrmw.start2765; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=12766; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2767; GCN1-NEXT:    v_and_b32_e32 v2, s6, v32768; GCN1-NEXT:    v_not_b32_e32 v2, v22769; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc2770; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2771; GCN1-NEXT:    buffer_wbinvl1_vol2772; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v32773; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2774; GCN1-NEXT:    v_mov_b32_e32 v3, v22775; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]2776; GCN1-NEXT:    s_cbranch_execnz .LBB55_12777; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end2778; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]2779; GCN1-NEXT:    s_setpc_b64 s[30:31]2780;2781; GCN2-LABEL: flat_atomic_nand_i32_noret_offset_scalar:2782; GCN2:       ; %bb.0:2783; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2784; GCN2-NEXT:    s_add_u32 s34, s4, 162785; GCN2-NEXT:    s_addc_u32 s35, s5, 02786; GCN2-NEXT:    v_mov_b32_e32 v0, s342787; GCN2-NEXT:    v_mov_b32_e32 v1, s352788; GCN2-NEXT:    flat_load_dword v3, v[0:1]2789; GCN2-NEXT:    s_mov_b64 s[34:35], 02790; GCN2-NEXT:  .LBB55_1: ; %atomicrmw.start2791; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=12792; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2793; GCN2-NEXT:    v_and_b32_e32 v2, s6, v32794; GCN2-NEXT:    v_not_b32_e32 v2, v22795; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc2796; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2797; GCN2-NEXT:    buffer_wbinvl1_vol2798; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v32799; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2800; GCN2-NEXT:    v_mov_b32_e32 v3, v22801; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]2802; GCN2-NEXT:    s_cbranch_execnz .LBB55_12803; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end2804; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]2805; GCN2-NEXT:    s_setpc_b64 s[30:31]2806;2807; GCN3-LABEL: flat_atomic_nand_i32_noret_offset_scalar:2808; GCN3:       ; %bb.0:2809; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2810; GCN3-NEXT:    v_mov_b32_e32 v0, s42811; GCN3-NEXT:    v_mov_b32_e32 v1, s52812; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:162813; GCN3-NEXT:    s_mov_b64 s[34:35], 02814; GCN3-NEXT:  .LBB55_1: ; %atomicrmw.start2815; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=12816; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2817; GCN3-NEXT:    v_and_b32_e32 v2, s6, v32818; GCN3-NEXT:    v_not_b32_e32 v2, v22819; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc2820; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2821; GCN3-NEXT:    buffer_wbinvl1_vol2822; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v32823; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2824; GCN3-NEXT:    v_mov_b32_e32 v3, v22825; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]2826; GCN3-NEXT:    s_cbranch_execnz .LBB55_12827; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end2828; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]2829; GCN3-NEXT:    s_setpc_b64 s[30:31]2830  %gep = getelementptr inbounds i32, ptr %out, i32 42831  %tmp0 = atomicrmw nand ptr %gep, i32 %in seq_cst2832  ret void2833}2834 2835define amdgpu_gfx i32 @flat_atomic_nand_i32_ret_scalar(ptr inreg %ptr, i32 inreg %in) {2836; GCN1-LABEL: flat_atomic_nand_i32_ret_scalar:2837; GCN1:       ; %bb.0:2838; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2839; GCN1-NEXT:    v_mov_b32_e32 v0, s42840; GCN1-NEXT:    v_mov_b32_e32 v1, s52841; GCN1-NEXT:    flat_load_dword v0, v[0:1]2842; GCN1-NEXT:    v_mov_b32_e32 v1, s42843; GCN1-NEXT:    s_mov_b64 s[34:35], 02844; GCN1-NEXT:    v_mov_b32_e32 v2, s52845; GCN1-NEXT:  .LBB56_1: ; %atomicrmw.start2846; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=12847; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2848; GCN1-NEXT:    v_mov_b32_e32 v4, v02849; GCN1-NEXT:    v_and_b32_e32 v0, s6, v42850; GCN1-NEXT:    v_not_b32_e32 v3, v02851; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc2852; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2853; GCN1-NEXT:    buffer_wbinvl1_vol2854; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v42855; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2856; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]2857; GCN1-NEXT:    s_cbranch_execnz .LBB56_12858; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end2859; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]2860; GCN1-NEXT:    s_setpc_b64 s[30:31]2861;2862; GCN2-LABEL: flat_atomic_nand_i32_ret_scalar:2863; GCN2:       ; %bb.0:2864; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2865; GCN2-NEXT:    v_mov_b32_e32 v0, s42866; GCN2-NEXT:    v_mov_b32_e32 v1, s52867; GCN2-NEXT:    flat_load_dword v0, v[0:1]2868; GCN2-NEXT:    v_mov_b32_e32 v1, s42869; GCN2-NEXT:    s_mov_b64 s[34:35], 02870; GCN2-NEXT:    v_mov_b32_e32 v2, s52871; GCN2-NEXT:  .LBB56_1: ; %atomicrmw.start2872; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=12873; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2874; GCN2-NEXT:    v_mov_b32_e32 v4, v02875; GCN2-NEXT:    v_and_b32_e32 v0, s6, v42876; GCN2-NEXT:    v_not_b32_e32 v3, v02877; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc2878; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2879; GCN2-NEXT:    buffer_wbinvl1_vol2880; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v42881; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2882; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]2883; GCN2-NEXT:    s_cbranch_execnz .LBB56_12884; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end2885; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]2886; GCN2-NEXT:    s_setpc_b64 s[30:31]2887;2888; GCN3-LABEL: flat_atomic_nand_i32_ret_scalar:2889; GCN3:       ; %bb.0:2890; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2891; GCN3-NEXT:    v_mov_b32_e32 v0, s42892; GCN3-NEXT:    v_mov_b32_e32 v1, s52893; GCN3-NEXT:    flat_load_dword v0, v[0:1]2894; GCN3-NEXT:    v_mov_b32_e32 v1, s42895; GCN3-NEXT:    s_mov_b64 s[34:35], 02896; GCN3-NEXT:    v_mov_b32_e32 v2, s52897; GCN3-NEXT:  .LBB56_1: ; %atomicrmw.start2898; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=12899; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2900; GCN3-NEXT:    v_mov_b32_e32 v4, v02901; GCN3-NEXT:    v_and_b32_e32 v0, s6, v42902; GCN3-NEXT:    v_not_b32_e32 v3, v02903; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc2904; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2905; GCN3-NEXT:    buffer_wbinvl1_vol2906; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v42907; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2908; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]2909; GCN3-NEXT:    s_cbranch_execnz .LBB56_12910; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end2911; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]2912; GCN3-NEXT:    s_setpc_b64 s[30:31]2913  %result = atomicrmw nand ptr %ptr, i32 %in seq_cst2914  ret i32 %result2915}2916 2917define amdgpu_gfx i32 @flat_atomic_nand_i32_ret_offset_scalar(ptr inreg %out, i32 inreg %in) {2918; GCN1-LABEL: flat_atomic_nand_i32_ret_offset_scalar:2919; GCN1:       ; %bb.0:2920; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2921; GCN1-NEXT:    s_add_u32 s34, s4, 162922; GCN1-NEXT:    s_addc_u32 s35, s5, 02923; GCN1-NEXT:    v_mov_b32_e32 v1, s342924; GCN1-NEXT:    v_mov_b32_e32 v2, s352925; GCN1-NEXT:    flat_load_dword v0, v[1:2]2926; GCN1-NEXT:    s_mov_b64 s[34:35], 02927; GCN1-NEXT:  .LBB57_1: ; %atomicrmw.start2928; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=12929; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2930; GCN1-NEXT:    v_mov_b32_e32 v4, v02931; GCN1-NEXT:    v_and_b32_e32 v0, s6, v42932; GCN1-NEXT:    v_not_b32_e32 v3, v02933; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc2934; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2935; GCN1-NEXT:    buffer_wbinvl1_vol2936; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v42937; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2938; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]2939; GCN1-NEXT:    s_cbranch_execnz .LBB57_12940; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end2941; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]2942; GCN1-NEXT:    s_setpc_b64 s[30:31]2943;2944; GCN2-LABEL: flat_atomic_nand_i32_ret_offset_scalar:2945; GCN2:       ; %bb.0:2946; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2947; GCN2-NEXT:    s_add_u32 s34, s4, 162948; GCN2-NEXT:    s_addc_u32 s35, s5, 02949; GCN2-NEXT:    v_mov_b32_e32 v1, s342950; GCN2-NEXT:    v_mov_b32_e32 v2, s352951; GCN2-NEXT:    flat_load_dword v0, v[1:2]2952; GCN2-NEXT:    s_mov_b64 s[34:35], 02953; GCN2-NEXT:  .LBB57_1: ; %atomicrmw.start2954; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=12955; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2956; GCN2-NEXT:    v_mov_b32_e32 v4, v02957; GCN2-NEXT:    v_and_b32_e32 v0, s6, v42958; GCN2-NEXT:    v_not_b32_e32 v3, v02959; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc2960; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2961; GCN2-NEXT:    buffer_wbinvl1_vol2962; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v42963; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2964; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]2965; GCN2-NEXT:    s_cbranch_execnz .LBB57_12966; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end2967; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]2968; GCN2-NEXT:    s_setpc_b64 s[30:31]2969;2970; GCN3-LABEL: flat_atomic_nand_i32_ret_offset_scalar:2971; GCN3:       ; %bb.0:2972; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2973; GCN3-NEXT:    v_mov_b32_e32 v0, s42974; GCN3-NEXT:    v_mov_b32_e32 v1, s52975; GCN3-NEXT:    flat_load_dword v0, v[0:1] offset:162976; GCN3-NEXT:    v_mov_b32_e32 v1, s42977; GCN3-NEXT:    s_mov_b64 s[34:35], 02978; GCN3-NEXT:    v_mov_b32_e32 v2, s52979; GCN3-NEXT:  .LBB57_1: ; %atomicrmw.start2980; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=12981; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2982; GCN3-NEXT:    v_mov_b32_e32 v4, v02983; GCN3-NEXT:    v_and_b32_e32 v0, s6, v42984; GCN3-NEXT:    v_not_b32_e32 v3, v02985; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] offset:16 glc2986; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)2987; GCN3-NEXT:    buffer_wbinvl1_vol2988; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v42989; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]2990; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]2991; GCN3-NEXT:    s_cbranch_execnz .LBB57_12992; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end2993; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]2994; GCN3-NEXT:    s_setpc_b64 s[30:31]2995  %gep = getelementptr inbounds i32, ptr %out, i32 42996  %result = atomicrmw nand ptr %gep, i32 %in seq_cst2997  ret i32 %result2998}2999 3000define void @flat_atomic_nand_i32_noret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {3001; GCN1-LABEL: flat_atomic_nand_i32_noret_offset__amdgpu_no_remote_memory:3002; GCN1:       ; %bb.0:3003; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3004; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v03005; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3006; GCN1-NEXT:    flat_load_dword v4, v[0:1]3007; GCN1-NEXT:    s_mov_b64 s[4:5], 03008; GCN1-NEXT:  .LBB58_1: ; %atomicrmw.start3009; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=13010; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3011; GCN1-NEXT:    v_and_b32_e32 v3, v4, v23012; GCN1-NEXT:    v_not_b32_e32 v3, v33013; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3014; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3015; GCN1-NEXT:    buffer_wbinvl1_vol3016; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43017; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3018; GCN1-NEXT:    v_mov_b32_e32 v4, v33019; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]3020; GCN1-NEXT:    s_cbranch_execnz .LBB58_13021; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end3022; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]3023; GCN1-NEXT:    s_setpc_b64 s[30:31]3024;3025; GCN2-LABEL: flat_atomic_nand_i32_noret_offset__amdgpu_no_remote_memory:3026; GCN2:       ; %bb.0:3027; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3028; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v03029; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3030; GCN2-NEXT:    flat_load_dword v4, v[0:1]3031; GCN2-NEXT:    s_mov_b64 s[4:5], 03032; GCN2-NEXT:  .LBB58_1: ; %atomicrmw.start3033; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=13034; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3035; GCN2-NEXT:    v_and_b32_e32 v3, v4, v23036; GCN2-NEXT:    v_not_b32_e32 v3, v33037; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3038; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3039; GCN2-NEXT:    buffer_wbinvl1_vol3040; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43041; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3042; GCN2-NEXT:    v_mov_b32_e32 v4, v33043; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]3044; GCN2-NEXT:    s_cbranch_execnz .LBB58_13045; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end3046; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]3047; GCN2-NEXT:    s_setpc_b64 s[30:31]3048;3049; GCN3-LABEL: flat_atomic_nand_i32_noret_offset__amdgpu_no_remote_memory:3050; GCN3:       ; %bb.0:3051; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3052; GCN3-NEXT:    flat_load_dword v4, v[0:1] offset:163053; GCN3-NEXT:    s_mov_b64 s[4:5], 03054; GCN3-NEXT:  .LBB58_1: ; %atomicrmw.start3055; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=13056; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3057; GCN3-NEXT:    v_and_b32_e32 v3, v4, v23058; GCN3-NEXT:    v_not_b32_e32 v3, v33059; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc3060; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3061; GCN3-NEXT:    buffer_wbinvl1_vol3062; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43063; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3064; GCN3-NEXT:    v_mov_b32_e32 v4, v33065; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]3066; GCN3-NEXT:    s_cbranch_execnz .LBB58_13067; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end3068; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]3069; GCN3-NEXT:    s_setpc_b64 s[30:31]3070  %gep = getelementptr inbounds i32, ptr %out, i64 43071  %tmp0 = atomicrmw nand ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !03072  ret void3073}3074 3075define i32 @flat_atomic_nand_i32_ret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {3076; GCN1-LABEL: flat_atomic_nand_i32_ret_offset__amdgpu_no_remote_memory:3077; GCN1:       ; %bb.0:3078; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3079; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 16, v03080; GCN1-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc3081; GCN1-NEXT:    flat_load_dword v0, v[3:4]3082; GCN1-NEXT:    s_mov_b64 s[4:5], 03083; GCN1-NEXT:  .LBB59_1: ; %atomicrmw.start3084; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=13085; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3086; GCN1-NEXT:    v_mov_b32_e32 v1, v03087; GCN1-NEXT:    v_and_b32_e32 v0, v1, v23088; GCN1-NEXT:    v_not_b32_e32 v0, v03089; GCN1-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc3090; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3091; GCN1-NEXT:    buffer_wbinvl1_vol3092; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v13093; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3094; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]3095; GCN1-NEXT:    s_cbranch_execnz .LBB59_13096; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end3097; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]3098; GCN1-NEXT:    s_setpc_b64 s[30:31]3099;3100; GCN2-LABEL: flat_atomic_nand_i32_ret_offset__amdgpu_no_remote_memory:3101; GCN2:       ; %bb.0:3102; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3103; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 16, v03104; GCN2-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc3105; GCN2-NEXT:    flat_load_dword v0, v[3:4]3106; GCN2-NEXT:    s_mov_b64 s[4:5], 03107; GCN2-NEXT:  .LBB59_1: ; %atomicrmw.start3108; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=13109; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3110; GCN2-NEXT:    v_mov_b32_e32 v1, v03111; GCN2-NEXT:    v_and_b32_e32 v0, v1, v23112; GCN2-NEXT:    v_not_b32_e32 v0, v03113; GCN2-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc3114; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3115; GCN2-NEXT:    buffer_wbinvl1_vol3116; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v13117; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3118; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]3119; GCN2-NEXT:    s_cbranch_execnz .LBB59_13120; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end3121; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]3122; GCN2-NEXT:    s_setpc_b64 s[30:31]3123;3124; GCN3-LABEL: flat_atomic_nand_i32_ret_offset__amdgpu_no_remote_memory:3125; GCN3:       ; %bb.0:3126; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3127; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:163128; GCN3-NEXT:    s_mov_b64 s[4:5], 03129; GCN3-NEXT:  .LBB59_1: ; %atomicrmw.start3130; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=13131; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3132; GCN3-NEXT:    v_mov_b32_e32 v4, v33133; GCN3-NEXT:    v_and_b32_e32 v3, v4, v23134; GCN3-NEXT:    v_not_b32_e32 v3, v33135; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc3136; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3137; GCN3-NEXT:    buffer_wbinvl1_vol3138; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43139; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3140; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]3141; GCN3-NEXT:    s_cbranch_execnz .LBB59_13142; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end3143; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]3144; GCN3-NEXT:    v_mov_b32_e32 v0, v33145; GCN3-NEXT:    s_setpc_b64 s[30:31]3146  %gep = getelementptr inbounds i32, ptr %out, i64 43147  %result = atomicrmw nand ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !03148  ret i32 %result3149}3150 3151; ---------------------------------------------------------------------3152; atomicrmw or3153; ---------------------------------------------------------------------3154 3155define void @flat_atomic_or_i32_noret(ptr %ptr, i32 %in) {3156; GCN1-LABEL: flat_atomic_or_i32_noret:3157; GCN1:       ; %bb.0:3158; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3159; GCN1-NEXT:    flat_load_dword v4, v[0:1]3160; GCN1-NEXT:    s_mov_b64 s[4:5], 03161; GCN1-NEXT:  .LBB60_1: ; %atomicrmw.start3162; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=13163; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3164; GCN1-NEXT:    v_or_b32_e32 v3, v4, v23165; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3166; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3167; GCN1-NEXT:    buffer_wbinvl1_vol3168; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43169; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3170; GCN1-NEXT:    v_mov_b32_e32 v4, v33171; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]3172; GCN1-NEXT:    s_cbranch_execnz .LBB60_13173; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end3174; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]3175; GCN1-NEXT:    s_setpc_b64 s[30:31]3176;3177; GCN2-LABEL: flat_atomic_or_i32_noret:3178; GCN2:       ; %bb.0:3179; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3180; GCN2-NEXT:    flat_load_dword v4, v[0:1]3181; GCN2-NEXT:    s_mov_b64 s[4:5], 03182; GCN2-NEXT:  .LBB60_1: ; %atomicrmw.start3183; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=13184; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3185; GCN2-NEXT:    v_or_b32_e32 v3, v4, v23186; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3187; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3188; GCN2-NEXT:    buffer_wbinvl1_vol3189; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43190; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3191; GCN2-NEXT:    v_mov_b32_e32 v4, v33192; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]3193; GCN2-NEXT:    s_cbranch_execnz .LBB60_13194; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end3195; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]3196; GCN2-NEXT:    s_setpc_b64 s[30:31]3197;3198; GCN3-LABEL: flat_atomic_or_i32_noret:3199; GCN3:       ; %bb.0:3200; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3201; GCN3-NEXT:    flat_load_dword v4, v[0:1]3202; GCN3-NEXT:    s_mov_b64 s[4:5], 03203; GCN3-NEXT:  .LBB60_1: ; %atomicrmw.start3204; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=13205; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3206; GCN3-NEXT:    v_or_b32_e32 v3, v4, v23207; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3208; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3209; GCN3-NEXT:    buffer_wbinvl1_vol3210; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43211; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3212; GCN3-NEXT:    v_mov_b32_e32 v4, v33213; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]3214; GCN3-NEXT:    s_cbranch_execnz .LBB60_13215; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end3216; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]3217; GCN3-NEXT:    s_setpc_b64 s[30:31]3218  %tmp0 = atomicrmw or ptr %ptr, i32 %in seq_cst3219  ret void3220}3221 3222define void @flat_atomic_or_i32_noret_offset(ptr %out, i32 %in) {3223; GCN1-LABEL: flat_atomic_or_i32_noret_offset:3224; GCN1:       ; %bb.0:3225; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3226; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v03227; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3228; GCN1-NEXT:    flat_load_dword v4, v[0:1]3229; GCN1-NEXT:    s_mov_b64 s[4:5], 03230; GCN1-NEXT:  .LBB61_1: ; %atomicrmw.start3231; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=13232; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3233; GCN1-NEXT:    v_or_b32_e32 v3, v4, v23234; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3235; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3236; GCN1-NEXT:    buffer_wbinvl1_vol3237; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43238; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3239; GCN1-NEXT:    v_mov_b32_e32 v4, v33240; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]3241; GCN1-NEXT:    s_cbranch_execnz .LBB61_13242; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end3243; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]3244; GCN1-NEXT:    s_setpc_b64 s[30:31]3245;3246; GCN2-LABEL: flat_atomic_or_i32_noret_offset:3247; GCN2:       ; %bb.0:3248; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3249; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v03250; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3251; GCN2-NEXT:    flat_load_dword v4, v[0:1]3252; GCN2-NEXT:    s_mov_b64 s[4:5], 03253; GCN2-NEXT:  .LBB61_1: ; %atomicrmw.start3254; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=13255; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3256; GCN2-NEXT:    v_or_b32_e32 v3, v4, v23257; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3258; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3259; GCN2-NEXT:    buffer_wbinvl1_vol3260; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43261; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3262; GCN2-NEXT:    v_mov_b32_e32 v4, v33263; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]3264; GCN2-NEXT:    s_cbranch_execnz .LBB61_13265; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end3266; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]3267; GCN2-NEXT:    s_setpc_b64 s[30:31]3268;3269; GCN3-LABEL: flat_atomic_or_i32_noret_offset:3270; GCN3:       ; %bb.0:3271; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3272; GCN3-NEXT:    flat_load_dword v4, v[0:1] offset:163273; GCN3-NEXT:    s_mov_b64 s[4:5], 03274; GCN3-NEXT:  .LBB61_1: ; %atomicrmw.start3275; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=13276; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3277; GCN3-NEXT:    v_or_b32_e32 v3, v4, v23278; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc3279; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3280; GCN3-NEXT:    buffer_wbinvl1_vol3281; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43282; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3283; GCN3-NEXT:    v_mov_b32_e32 v4, v33284; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]3285; GCN3-NEXT:    s_cbranch_execnz .LBB61_13286; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end3287; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]3288; GCN3-NEXT:    s_setpc_b64 s[30:31]3289  %gep = getelementptr inbounds i32, ptr %out, i32 43290  %tmp0 = atomicrmw or ptr %gep, i32 %in seq_cst3291  ret void3292}3293 3294define i32 @flat_atomic_or_i32_ret(ptr %ptr, i32 %in) {3295; GCN1-LABEL: flat_atomic_or_i32_ret:3296; GCN1:       ; %bb.0:3297; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3298; GCN1-NEXT:    flat_load_dword v3, v[0:1]3299; GCN1-NEXT:    s_mov_b64 s[4:5], 03300; GCN1-NEXT:  .LBB62_1: ; %atomicrmw.start3301; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=13302; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3303; GCN1-NEXT:    v_mov_b32_e32 v4, v33304; GCN1-NEXT:    v_or_b32_e32 v3, v4, v23305; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3306; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3307; GCN1-NEXT:    buffer_wbinvl1_vol3308; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43309; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3310; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]3311; GCN1-NEXT:    s_cbranch_execnz .LBB62_13312; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end3313; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]3314; GCN1-NEXT:    v_mov_b32_e32 v0, v33315; GCN1-NEXT:    s_setpc_b64 s[30:31]3316;3317; GCN2-LABEL: flat_atomic_or_i32_ret:3318; GCN2:       ; %bb.0:3319; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3320; GCN2-NEXT:    flat_load_dword v3, v[0:1]3321; GCN2-NEXT:    s_mov_b64 s[4:5], 03322; GCN2-NEXT:  .LBB62_1: ; %atomicrmw.start3323; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=13324; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3325; GCN2-NEXT:    v_mov_b32_e32 v4, v33326; GCN2-NEXT:    v_or_b32_e32 v3, v4, v23327; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3328; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3329; GCN2-NEXT:    buffer_wbinvl1_vol3330; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43331; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3332; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]3333; GCN2-NEXT:    s_cbranch_execnz .LBB62_13334; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end3335; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]3336; GCN2-NEXT:    v_mov_b32_e32 v0, v33337; GCN2-NEXT:    s_setpc_b64 s[30:31]3338;3339; GCN3-LABEL: flat_atomic_or_i32_ret:3340; GCN3:       ; %bb.0:3341; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3342; GCN3-NEXT:    flat_load_dword v3, v[0:1]3343; GCN3-NEXT:    s_mov_b64 s[4:5], 03344; GCN3-NEXT:  .LBB62_1: ; %atomicrmw.start3345; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=13346; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3347; GCN3-NEXT:    v_mov_b32_e32 v4, v33348; GCN3-NEXT:    v_or_b32_e32 v3, v4, v23349; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3350; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3351; GCN3-NEXT:    buffer_wbinvl1_vol3352; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43353; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3354; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]3355; GCN3-NEXT:    s_cbranch_execnz .LBB62_13356; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end3357; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]3358; GCN3-NEXT:    v_mov_b32_e32 v0, v33359; GCN3-NEXT:    s_setpc_b64 s[30:31]3360  %result = atomicrmw or ptr %ptr, i32 %in seq_cst3361  ret i32 %result3362}3363 3364define i32 @flat_atomic_or_i32_ret_offset(ptr %out, i32 %in) {3365; GCN1-LABEL: flat_atomic_or_i32_ret_offset:3366; GCN1:       ; %bb.0:3367; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3368; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 16, v03369; GCN1-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc3370; GCN1-NEXT:    flat_load_dword v0, v[3:4]3371; GCN1-NEXT:    s_mov_b64 s[4:5], 03372; GCN1-NEXT:  .LBB63_1: ; %atomicrmw.start3373; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=13374; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3375; GCN1-NEXT:    v_mov_b32_e32 v1, v03376; GCN1-NEXT:    v_or_b32_e32 v0, v1, v23377; GCN1-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc3378; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3379; GCN1-NEXT:    buffer_wbinvl1_vol3380; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v13381; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3382; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]3383; GCN1-NEXT:    s_cbranch_execnz .LBB63_13384; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end3385; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]3386; GCN1-NEXT:    s_setpc_b64 s[30:31]3387;3388; GCN2-LABEL: flat_atomic_or_i32_ret_offset:3389; GCN2:       ; %bb.0:3390; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3391; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 16, v03392; GCN2-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc3393; GCN2-NEXT:    flat_load_dword v0, v[3:4]3394; GCN2-NEXT:    s_mov_b64 s[4:5], 03395; GCN2-NEXT:  .LBB63_1: ; %atomicrmw.start3396; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=13397; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3398; GCN2-NEXT:    v_mov_b32_e32 v1, v03399; GCN2-NEXT:    v_or_b32_e32 v0, v1, v23400; GCN2-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc3401; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3402; GCN2-NEXT:    buffer_wbinvl1_vol3403; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v13404; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3405; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]3406; GCN2-NEXT:    s_cbranch_execnz .LBB63_13407; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end3408; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]3409; GCN2-NEXT:    s_setpc_b64 s[30:31]3410;3411; GCN3-LABEL: flat_atomic_or_i32_ret_offset:3412; GCN3:       ; %bb.0:3413; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3414; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:163415; GCN3-NEXT:    s_mov_b64 s[4:5], 03416; GCN3-NEXT:  .LBB63_1: ; %atomicrmw.start3417; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=13418; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3419; GCN3-NEXT:    v_mov_b32_e32 v4, v33420; GCN3-NEXT:    v_or_b32_e32 v3, v4, v23421; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc3422; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3423; GCN3-NEXT:    buffer_wbinvl1_vol3424; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43425; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3426; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]3427; GCN3-NEXT:    s_cbranch_execnz .LBB63_13428; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end3429; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]3430; GCN3-NEXT:    v_mov_b32_e32 v0, v33431; GCN3-NEXT:    s_setpc_b64 s[30:31]3432  %gep = getelementptr inbounds i32, ptr %out, i32 43433  %result = atomicrmw or ptr %gep, i32 %in seq_cst3434  ret i32 %result3435}3436 3437define amdgpu_gfx void @flat_atomic_or_i32_noret_scalar(ptr inreg %ptr, i32 inreg %in) {3438; GCN1-LABEL: flat_atomic_or_i32_noret_scalar:3439; GCN1:       ; %bb.0:3440; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3441; GCN1-NEXT:    v_mov_b32_e32 v0, s43442; GCN1-NEXT:    v_mov_b32_e32 v1, s53443; GCN1-NEXT:    flat_load_dword v3, v[0:1]3444; GCN1-NEXT:    s_mov_b64 s[34:35], 03445; GCN1-NEXT:  .LBB64_1: ; %atomicrmw.start3446; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=13447; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3448; GCN1-NEXT:    v_or_b32_e32 v2, s6, v33449; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc3450; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3451; GCN1-NEXT:    buffer_wbinvl1_vol3452; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v33453; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]3454; GCN1-NEXT:    v_mov_b32_e32 v3, v23455; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]3456; GCN1-NEXT:    s_cbranch_execnz .LBB64_13457; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end3458; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]3459; GCN1-NEXT:    s_setpc_b64 s[30:31]3460;3461; GCN2-LABEL: flat_atomic_or_i32_noret_scalar:3462; GCN2:       ; %bb.0:3463; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3464; GCN2-NEXT:    v_mov_b32_e32 v0, s43465; GCN2-NEXT:    v_mov_b32_e32 v1, s53466; GCN2-NEXT:    flat_load_dword v3, v[0:1]3467; GCN2-NEXT:    s_mov_b64 s[34:35], 03468; GCN2-NEXT:  .LBB64_1: ; %atomicrmw.start3469; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=13470; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3471; GCN2-NEXT:    v_or_b32_e32 v2, s6, v33472; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc3473; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3474; GCN2-NEXT:    buffer_wbinvl1_vol3475; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v33476; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]3477; GCN2-NEXT:    v_mov_b32_e32 v3, v23478; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]3479; GCN2-NEXT:    s_cbranch_execnz .LBB64_13480; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end3481; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]3482; GCN2-NEXT:    s_setpc_b64 s[30:31]3483;3484; GCN3-LABEL: flat_atomic_or_i32_noret_scalar:3485; GCN3:       ; %bb.0:3486; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3487; GCN3-NEXT:    v_mov_b32_e32 v0, s43488; GCN3-NEXT:    v_mov_b32_e32 v1, s53489; GCN3-NEXT:    flat_load_dword v3, v[0:1]3490; GCN3-NEXT:    s_mov_b64 s[34:35], 03491; GCN3-NEXT:  .LBB64_1: ; %atomicrmw.start3492; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=13493; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3494; GCN3-NEXT:    v_or_b32_e32 v2, s6, v33495; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc3496; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3497; GCN3-NEXT:    buffer_wbinvl1_vol3498; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v33499; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]3500; GCN3-NEXT:    v_mov_b32_e32 v3, v23501; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]3502; GCN3-NEXT:    s_cbranch_execnz .LBB64_13503; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end3504; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]3505; GCN3-NEXT:    s_setpc_b64 s[30:31]3506  %tmp0 = atomicrmw or ptr %ptr, i32 %in seq_cst3507  ret void3508}3509 3510define amdgpu_gfx void @flat_atomic_or_i32_noret_offset_scalar(ptr inreg %out, i32 inreg %in) {3511; GCN1-LABEL: flat_atomic_or_i32_noret_offset_scalar:3512; GCN1:       ; %bb.0:3513; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3514; GCN1-NEXT:    s_add_u32 s34, s4, 163515; GCN1-NEXT:    s_addc_u32 s35, s5, 03516; GCN1-NEXT:    v_mov_b32_e32 v0, s343517; GCN1-NEXT:    v_mov_b32_e32 v1, s353518; GCN1-NEXT:    flat_load_dword v3, v[0:1]3519; GCN1-NEXT:    s_mov_b64 s[34:35], 03520; GCN1-NEXT:  .LBB65_1: ; %atomicrmw.start3521; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=13522; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3523; GCN1-NEXT:    v_or_b32_e32 v2, s6, v33524; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc3525; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3526; GCN1-NEXT:    buffer_wbinvl1_vol3527; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v33528; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]3529; GCN1-NEXT:    v_mov_b32_e32 v3, v23530; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]3531; GCN1-NEXT:    s_cbranch_execnz .LBB65_13532; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end3533; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]3534; GCN1-NEXT:    s_setpc_b64 s[30:31]3535;3536; GCN2-LABEL: flat_atomic_or_i32_noret_offset_scalar:3537; GCN2:       ; %bb.0:3538; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3539; GCN2-NEXT:    s_add_u32 s34, s4, 163540; GCN2-NEXT:    s_addc_u32 s35, s5, 03541; GCN2-NEXT:    v_mov_b32_e32 v0, s343542; GCN2-NEXT:    v_mov_b32_e32 v1, s353543; GCN2-NEXT:    flat_load_dword v3, v[0:1]3544; GCN2-NEXT:    s_mov_b64 s[34:35], 03545; GCN2-NEXT:  .LBB65_1: ; %atomicrmw.start3546; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=13547; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3548; GCN2-NEXT:    v_or_b32_e32 v2, s6, v33549; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc3550; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3551; GCN2-NEXT:    buffer_wbinvl1_vol3552; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v33553; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]3554; GCN2-NEXT:    v_mov_b32_e32 v3, v23555; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]3556; GCN2-NEXT:    s_cbranch_execnz .LBB65_13557; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end3558; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]3559; GCN2-NEXT:    s_setpc_b64 s[30:31]3560;3561; GCN3-LABEL: flat_atomic_or_i32_noret_offset_scalar:3562; GCN3:       ; %bb.0:3563; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3564; GCN3-NEXT:    v_mov_b32_e32 v0, s43565; GCN3-NEXT:    v_mov_b32_e32 v1, s53566; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:163567; GCN3-NEXT:    s_mov_b64 s[34:35], 03568; GCN3-NEXT:  .LBB65_1: ; %atomicrmw.start3569; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=13570; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3571; GCN3-NEXT:    v_or_b32_e32 v2, s6, v33572; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc3573; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3574; GCN3-NEXT:    buffer_wbinvl1_vol3575; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v33576; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]3577; GCN3-NEXT:    v_mov_b32_e32 v3, v23578; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]3579; GCN3-NEXT:    s_cbranch_execnz .LBB65_13580; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end3581; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]3582; GCN3-NEXT:    s_setpc_b64 s[30:31]3583  %gep = getelementptr inbounds i32, ptr %out, i32 43584  %tmp0 = atomicrmw or ptr %gep, i32 %in seq_cst3585  ret void3586}3587 3588define amdgpu_gfx i32 @flat_atomic_or_i32_ret_scalar(ptr inreg %ptr, i32 inreg %in) {3589; GCN1-LABEL: flat_atomic_or_i32_ret_scalar:3590; GCN1:       ; %bb.0:3591; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3592; GCN1-NEXT:    v_mov_b32_e32 v0, s43593; GCN1-NEXT:    v_mov_b32_e32 v1, s53594; GCN1-NEXT:    flat_load_dword v0, v[0:1]3595; GCN1-NEXT:    v_mov_b32_e32 v1, s43596; GCN1-NEXT:    s_mov_b64 s[34:35], 03597; GCN1-NEXT:    v_mov_b32_e32 v2, s53598; GCN1-NEXT:  .LBB66_1: ; %atomicrmw.start3599; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=13600; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3601; GCN1-NEXT:    v_mov_b32_e32 v4, v03602; GCN1-NEXT:    v_or_b32_e32 v3, s6, v43603; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc3604; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3605; GCN1-NEXT:    buffer_wbinvl1_vol3606; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v43607; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]3608; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]3609; GCN1-NEXT:    s_cbranch_execnz .LBB66_13610; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end3611; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]3612; GCN1-NEXT:    s_setpc_b64 s[30:31]3613;3614; GCN2-LABEL: flat_atomic_or_i32_ret_scalar:3615; GCN2:       ; %bb.0:3616; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3617; GCN2-NEXT:    v_mov_b32_e32 v0, s43618; GCN2-NEXT:    v_mov_b32_e32 v1, s53619; GCN2-NEXT:    flat_load_dword v0, v[0:1]3620; GCN2-NEXT:    v_mov_b32_e32 v1, s43621; GCN2-NEXT:    s_mov_b64 s[34:35], 03622; GCN2-NEXT:    v_mov_b32_e32 v2, s53623; GCN2-NEXT:  .LBB66_1: ; %atomicrmw.start3624; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=13625; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3626; GCN2-NEXT:    v_mov_b32_e32 v4, v03627; GCN2-NEXT:    v_or_b32_e32 v3, s6, v43628; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc3629; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3630; GCN2-NEXT:    buffer_wbinvl1_vol3631; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v43632; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]3633; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]3634; GCN2-NEXT:    s_cbranch_execnz .LBB66_13635; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end3636; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]3637; GCN2-NEXT:    s_setpc_b64 s[30:31]3638;3639; GCN3-LABEL: flat_atomic_or_i32_ret_scalar:3640; GCN3:       ; %bb.0:3641; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3642; GCN3-NEXT:    v_mov_b32_e32 v0, s43643; GCN3-NEXT:    v_mov_b32_e32 v1, s53644; GCN3-NEXT:    flat_load_dword v0, v[0:1]3645; GCN3-NEXT:    v_mov_b32_e32 v1, s43646; GCN3-NEXT:    s_mov_b64 s[34:35], 03647; GCN3-NEXT:    v_mov_b32_e32 v2, s53648; GCN3-NEXT:  .LBB66_1: ; %atomicrmw.start3649; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=13650; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3651; GCN3-NEXT:    v_mov_b32_e32 v4, v03652; GCN3-NEXT:    v_or_b32_e32 v3, s6, v43653; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc3654; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3655; GCN3-NEXT:    buffer_wbinvl1_vol3656; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v43657; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]3658; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]3659; GCN3-NEXT:    s_cbranch_execnz .LBB66_13660; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end3661; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]3662; GCN3-NEXT:    s_setpc_b64 s[30:31]3663  %result = atomicrmw or ptr %ptr, i32 %in seq_cst3664  ret i32 %result3665}3666 3667define amdgpu_gfx i32 @flat_atomic_or_i32_ret_offset_scalar(ptr inreg %out, i32 inreg %in) {3668; GCN1-LABEL: flat_atomic_or_i32_ret_offset_scalar:3669; GCN1:       ; %bb.0:3670; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3671; GCN1-NEXT:    s_add_u32 s34, s4, 163672; GCN1-NEXT:    s_addc_u32 s35, s5, 03673; GCN1-NEXT:    v_mov_b32_e32 v1, s343674; GCN1-NEXT:    v_mov_b32_e32 v2, s353675; GCN1-NEXT:    flat_load_dword v0, v[1:2]3676; GCN1-NEXT:    s_mov_b64 s[34:35], 03677; GCN1-NEXT:  .LBB67_1: ; %atomicrmw.start3678; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=13679; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3680; GCN1-NEXT:    v_mov_b32_e32 v4, v03681; GCN1-NEXT:    v_or_b32_e32 v3, s6, v43682; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc3683; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3684; GCN1-NEXT:    buffer_wbinvl1_vol3685; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v43686; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]3687; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]3688; GCN1-NEXT:    s_cbranch_execnz .LBB67_13689; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end3690; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]3691; GCN1-NEXT:    s_setpc_b64 s[30:31]3692;3693; GCN2-LABEL: flat_atomic_or_i32_ret_offset_scalar:3694; GCN2:       ; %bb.0:3695; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3696; GCN2-NEXT:    s_add_u32 s34, s4, 163697; GCN2-NEXT:    s_addc_u32 s35, s5, 03698; GCN2-NEXT:    v_mov_b32_e32 v1, s343699; GCN2-NEXT:    v_mov_b32_e32 v2, s353700; GCN2-NEXT:    flat_load_dword v0, v[1:2]3701; GCN2-NEXT:    s_mov_b64 s[34:35], 03702; GCN2-NEXT:  .LBB67_1: ; %atomicrmw.start3703; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=13704; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3705; GCN2-NEXT:    v_mov_b32_e32 v4, v03706; GCN2-NEXT:    v_or_b32_e32 v3, s6, v43707; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc3708; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3709; GCN2-NEXT:    buffer_wbinvl1_vol3710; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v43711; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]3712; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]3713; GCN2-NEXT:    s_cbranch_execnz .LBB67_13714; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end3715; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]3716; GCN2-NEXT:    s_setpc_b64 s[30:31]3717;3718; GCN3-LABEL: flat_atomic_or_i32_ret_offset_scalar:3719; GCN3:       ; %bb.0:3720; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3721; GCN3-NEXT:    v_mov_b32_e32 v0, s43722; GCN3-NEXT:    v_mov_b32_e32 v1, s53723; GCN3-NEXT:    flat_load_dword v0, v[0:1] offset:163724; GCN3-NEXT:    v_mov_b32_e32 v1, s43725; GCN3-NEXT:    s_mov_b64 s[34:35], 03726; GCN3-NEXT:    v_mov_b32_e32 v2, s53727; GCN3-NEXT:  .LBB67_1: ; %atomicrmw.start3728; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=13729; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3730; GCN3-NEXT:    v_mov_b32_e32 v4, v03731; GCN3-NEXT:    v_or_b32_e32 v3, s6, v43732; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] offset:16 glc3733; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3734; GCN3-NEXT:    buffer_wbinvl1_vol3735; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v43736; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]3737; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]3738; GCN3-NEXT:    s_cbranch_execnz .LBB67_13739; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end3740; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]3741; GCN3-NEXT:    s_setpc_b64 s[30:31]3742  %gep = getelementptr inbounds i32, ptr %out, i32 43743  %result = atomicrmw or ptr %gep, i32 %in seq_cst3744  ret i32 %result3745}3746 3747define void @flat_atomic_or_i32_noret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {3748; GCN1-LABEL: flat_atomic_or_i32_noret_offset__amdgpu_no_remote_memory:3749; GCN1:       ; %bb.0:3750; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3751; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v03752; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3753; GCN1-NEXT:    flat_atomic_or v[0:1], v23754; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3755; GCN1-NEXT:    buffer_wbinvl1_vol3756; GCN1-NEXT:    s_setpc_b64 s[30:31]3757;3758; GCN2-LABEL: flat_atomic_or_i32_noret_offset__amdgpu_no_remote_memory:3759; GCN2:       ; %bb.0:3760; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3761; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v03762; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3763; GCN2-NEXT:    flat_atomic_or v[0:1], v23764; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3765; GCN2-NEXT:    buffer_wbinvl1_vol3766; GCN2-NEXT:    s_setpc_b64 s[30:31]3767;3768; GCN3-LABEL: flat_atomic_or_i32_noret_offset__amdgpu_no_remote_memory:3769; GCN3:       ; %bb.0:3770; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3771; GCN3-NEXT:    flat_atomic_or v[0:1], v2 offset:163772; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3773; GCN3-NEXT:    buffer_wbinvl1_vol3774; GCN3-NEXT:    s_setpc_b64 s[30:31]3775  %gep = getelementptr inbounds i32, ptr %out, i64 43776  %tmp0 = atomicrmw or ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !03777  ret void3778}3779 3780define i32 @flat_atomic_or_i32_ret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {3781; GCN1-LABEL: flat_atomic_or_i32_ret_offset__amdgpu_no_remote_memory:3782; GCN1:       ; %bb.0:3783; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3784; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v03785; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3786; GCN1-NEXT:    flat_atomic_or v0, v[0:1], v2 glc3787; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3788; GCN1-NEXT:    buffer_wbinvl1_vol3789; GCN1-NEXT:    s_setpc_b64 s[30:31]3790;3791; GCN2-LABEL: flat_atomic_or_i32_ret_offset__amdgpu_no_remote_memory:3792; GCN2:       ; %bb.0:3793; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3794; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v03795; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3796; GCN2-NEXT:    flat_atomic_or v0, v[0:1], v2 glc3797; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3798; GCN2-NEXT:    buffer_wbinvl1_vol3799; GCN2-NEXT:    s_setpc_b64 s[30:31]3800;3801; GCN3-LABEL: flat_atomic_or_i32_ret_offset__amdgpu_no_remote_memory:3802; GCN3:       ; %bb.0:3803; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3804; GCN3-NEXT:    flat_atomic_or v0, v[0:1], v2 offset:16 glc3805; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3806; GCN3-NEXT:    buffer_wbinvl1_vol3807; GCN3-NEXT:    s_setpc_b64 s[30:31]3808  %gep = getelementptr inbounds i32, ptr %out, i64 43809  %result = atomicrmw or ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !03810  ret i32 %result3811}3812 3813; ---------------------------------------------------------------------3814; atomicrmw xor3815; ---------------------------------------------------------------------3816 3817define void @flat_atomic_xor_i32_noret(ptr %ptr, i32 %in) {3818; GCN1-LABEL: flat_atomic_xor_i32_noret:3819; GCN1:       ; %bb.0:3820; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3821; GCN1-NEXT:    flat_load_dword v4, v[0:1]3822; GCN1-NEXT:    s_mov_b64 s[4:5], 03823; GCN1-NEXT:  .LBB70_1: ; %atomicrmw.start3824; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=13825; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3826; GCN1-NEXT:    v_xor_b32_e32 v3, v4, v23827; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3828; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3829; GCN1-NEXT:    buffer_wbinvl1_vol3830; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43831; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3832; GCN1-NEXT:    v_mov_b32_e32 v4, v33833; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]3834; GCN1-NEXT:    s_cbranch_execnz .LBB70_13835; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end3836; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]3837; GCN1-NEXT:    s_setpc_b64 s[30:31]3838;3839; GCN2-LABEL: flat_atomic_xor_i32_noret:3840; GCN2:       ; %bb.0:3841; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3842; GCN2-NEXT:    flat_load_dword v4, v[0:1]3843; GCN2-NEXT:    s_mov_b64 s[4:5], 03844; GCN2-NEXT:  .LBB70_1: ; %atomicrmw.start3845; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=13846; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3847; GCN2-NEXT:    v_xor_b32_e32 v3, v4, v23848; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3849; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3850; GCN2-NEXT:    buffer_wbinvl1_vol3851; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43852; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3853; GCN2-NEXT:    v_mov_b32_e32 v4, v33854; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]3855; GCN2-NEXT:    s_cbranch_execnz .LBB70_13856; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end3857; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]3858; GCN2-NEXT:    s_setpc_b64 s[30:31]3859;3860; GCN3-LABEL: flat_atomic_xor_i32_noret:3861; GCN3:       ; %bb.0:3862; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3863; GCN3-NEXT:    flat_load_dword v4, v[0:1]3864; GCN3-NEXT:    s_mov_b64 s[4:5], 03865; GCN3-NEXT:  .LBB70_1: ; %atomicrmw.start3866; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=13867; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3868; GCN3-NEXT:    v_xor_b32_e32 v3, v4, v23869; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3870; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3871; GCN3-NEXT:    buffer_wbinvl1_vol3872; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43873; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3874; GCN3-NEXT:    v_mov_b32_e32 v4, v33875; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]3876; GCN3-NEXT:    s_cbranch_execnz .LBB70_13877; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end3878; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]3879; GCN3-NEXT:    s_setpc_b64 s[30:31]3880  %tmp0 = atomicrmw xor ptr %ptr, i32 %in seq_cst3881  ret void3882}3883 3884define void @flat_atomic_xor_i32_noret_offset(ptr %out, i32 %in) {3885; GCN1-LABEL: flat_atomic_xor_i32_noret_offset:3886; GCN1:       ; %bb.0:3887; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3888; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v03889; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3890; GCN1-NEXT:    flat_load_dword v4, v[0:1]3891; GCN1-NEXT:    s_mov_b64 s[4:5], 03892; GCN1-NEXT:  .LBB71_1: ; %atomicrmw.start3893; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=13894; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3895; GCN1-NEXT:    v_xor_b32_e32 v3, v4, v23896; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3897; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3898; GCN1-NEXT:    buffer_wbinvl1_vol3899; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43900; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3901; GCN1-NEXT:    v_mov_b32_e32 v4, v33902; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]3903; GCN1-NEXT:    s_cbranch_execnz .LBB71_13904; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end3905; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]3906; GCN1-NEXT:    s_setpc_b64 s[30:31]3907;3908; GCN2-LABEL: flat_atomic_xor_i32_noret_offset:3909; GCN2:       ; %bb.0:3910; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3911; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v03912; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc3913; GCN2-NEXT:    flat_load_dword v4, v[0:1]3914; GCN2-NEXT:    s_mov_b64 s[4:5], 03915; GCN2-NEXT:  .LBB71_1: ; %atomicrmw.start3916; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=13917; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3918; GCN2-NEXT:    v_xor_b32_e32 v3, v4, v23919; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3920; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3921; GCN2-NEXT:    buffer_wbinvl1_vol3922; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43923; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3924; GCN2-NEXT:    v_mov_b32_e32 v4, v33925; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]3926; GCN2-NEXT:    s_cbranch_execnz .LBB71_13927; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end3928; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]3929; GCN2-NEXT:    s_setpc_b64 s[30:31]3930;3931; GCN3-LABEL: flat_atomic_xor_i32_noret_offset:3932; GCN3:       ; %bb.0:3933; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3934; GCN3-NEXT:    flat_load_dword v4, v[0:1] offset:163935; GCN3-NEXT:    s_mov_b64 s[4:5], 03936; GCN3-NEXT:  .LBB71_1: ; %atomicrmw.start3937; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=13938; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3939; GCN3-NEXT:    v_xor_b32_e32 v3, v4, v23940; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc3941; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3942; GCN3-NEXT:    buffer_wbinvl1_vol3943; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43944; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3945; GCN3-NEXT:    v_mov_b32_e32 v4, v33946; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]3947; GCN3-NEXT:    s_cbranch_execnz .LBB71_13948; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end3949; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]3950; GCN3-NEXT:    s_setpc_b64 s[30:31]3951  %gep = getelementptr inbounds i32, ptr %out, i32 43952  %tmp0 = atomicrmw xor ptr %gep, i32 %in seq_cst3953  ret void3954}3955 3956define i32 @flat_atomic_xor_i32_ret(ptr %ptr, i32 %in) {3957; GCN1-LABEL: flat_atomic_xor_i32_ret:3958; GCN1:       ; %bb.0:3959; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3960; GCN1-NEXT:    flat_load_dword v3, v[0:1]3961; GCN1-NEXT:    s_mov_b64 s[4:5], 03962; GCN1-NEXT:  .LBB72_1: ; %atomicrmw.start3963; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=13964; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3965; GCN1-NEXT:    v_mov_b32_e32 v4, v33966; GCN1-NEXT:    v_xor_b32_e32 v3, v4, v23967; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3968; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3969; GCN1-NEXT:    buffer_wbinvl1_vol3970; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43971; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3972; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]3973; GCN1-NEXT:    s_cbranch_execnz .LBB72_13974; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end3975; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]3976; GCN1-NEXT:    v_mov_b32_e32 v0, v33977; GCN1-NEXT:    s_setpc_b64 s[30:31]3978;3979; GCN2-LABEL: flat_atomic_xor_i32_ret:3980; GCN2:       ; %bb.0:3981; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3982; GCN2-NEXT:    flat_load_dword v3, v[0:1]3983; GCN2-NEXT:    s_mov_b64 s[4:5], 03984; GCN2-NEXT:  .LBB72_1: ; %atomicrmw.start3985; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=13986; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3987; GCN2-NEXT:    v_mov_b32_e32 v4, v33988; GCN2-NEXT:    v_xor_b32_e32 v3, v4, v23989; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc3990; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)3991; GCN2-NEXT:    buffer_wbinvl1_vol3992; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v43993; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]3994; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]3995; GCN2-NEXT:    s_cbranch_execnz .LBB72_13996; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end3997; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]3998; GCN2-NEXT:    v_mov_b32_e32 v0, v33999; GCN2-NEXT:    s_setpc_b64 s[30:31]4000;4001; GCN3-LABEL: flat_atomic_xor_i32_ret:4002; GCN3:       ; %bb.0:4003; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4004; GCN3-NEXT:    flat_load_dword v3, v[0:1]4005; GCN3-NEXT:    s_mov_b64 s[4:5], 04006; GCN3-NEXT:  .LBB72_1: ; %atomicrmw.start4007; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=14008; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4009; GCN3-NEXT:    v_mov_b32_e32 v4, v34010; GCN3-NEXT:    v_xor_b32_e32 v3, v4, v24011; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc4012; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4013; GCN3-NEXT:    buffer_wbinvl1_vol4014; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v44015; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4016; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]4017; GCN3-NEXT:    s_cbranch_execnz .LBB72_14018; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end4019; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]4020; GCN3-NEXT:    v_mov_b32_e32 v0, v34021; GCN3-NEXT:    s_setpc_b64 s[30:31]4022  %result = atomicrmw xor ptr %ptr, i32 %in seq_cst4023  ret i32 %result4024}4025 4026define i32 @flat_atomic_xor_i32_ret_offset(ptr %out, i32 %in) {4027; GCN1-LABEL: flat_atomic_xor_i32_ret_offset:4028; GCN1:       ; %bb.0:4029; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4030; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 16, v04031; GCN1-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc4032; GCN1-NEXT:    flat_load_dword v0, v[3:4]4033; GCN1-NEXT:    s_mov_b64 s[4:5], 04034; GCN1-NEXT:  .LBB73_1: ; %atomicrmw.start4035; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=14036; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4037; GCN1-NEXT:    v_mov_b32_e32 v1, v04038; GCN1-NEXT:    v_xor_b32_e32 v0, v1, v24039; GCN1-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc4040; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4041; GCN1-NEXT:    buffer_wbinvl1_vol4042; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v14043; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4044; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]4045; GCN1-NEXT:    s_cbranch_execnz .LBB73_14046; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end4047; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]4048; GCN1-NEXT:    s_setpc_b64 s[30:31]4049;4050; GCN2-LABEL: flat_atomic_xor_i32_ret_offset:4051; GCN2:       ; %bb.0:4052; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4053; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 16, v04054; GCN2-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc4055; GCN2-NEXT:    flat_load_dword v0, v[3:4]4056; GCN2-NEXT:    s_mov_b64 s[4:5], 04057; GCN2-NEXT:  .LBB73_1: ; %atomicrmw.start4058; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=14059; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4060; GCN2-NEXT:    v_mov_b32_e32 v1, v04061; GCN2-NEXT:    v_xor_b32_e32 v0, v1, v24062; GCN2-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc4063; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4064; GCN2-NEXT:    buffer_wbinvl1_vol4065; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v14066; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4067; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]4068; GCN2-NEXT:    s_cbranch_execnz .LBB73_14069; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end4070; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]4071; GCN2-NEXT:    s_setpc_b64 s[30:31]4072;4073; GCN3-LABEL: flat_atomic_xor_i32_ret_offset:4074; GCN3:       ; %bb.0:4075; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4076; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:164077; GCN3-NEXT:    s_mov_b64 s[4:5], 04078; GCN3-NEXT:  .LBB73_1: ; %atomicrmw.start4079; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=14080; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4081; GCN3-NEXT:    v_mov_b32_e32 v4, v34082; GCN3-NEXT:    v_xor_b32_e32 v3, v4, v24083; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc4084; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4085; GCN3-NEXT:    buffer_wbinvl1_vol4086; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v44087; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4088; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]4089; GCN3-NEXT:    s_cbranch_execnz .LBB73_14090; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end4091; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]4092; GCN3-NEXT:    v_mov_b32_e32 v0, v34093; GCN3-NEXT:    s_setpc_b64 s[30:31]4094  %gep = getelementptr inbounds i32, ptr %out, i32 44095  %result = atomicrmw xor ptr %gep, i32 %in seq_cst4096  ret i32 %result4097}4098 4099define amdgpu_gfx void @flat_atomic_xor_i32_noret_scalar(ptr inreg %ptr, i32 inreg %in) {4100; GCN1-LABEL: flat_atomic_xor_i32_noret_scalar:4101; GCN1:       ; %bb.0:4102; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4103; GCN1-NEXT:    v_mov_b32_e32 v0, s44104; GCN1-NEXT:    v_mov_b32_e32 v1, s54105; GCN1-NEXT:    flat_load_dword v3, v[0:1]4106; GCN1-NEXT:    s_mov_b64 s[34:35], 04107; GCN1-NEXT:  .LBB74_1: ; %atomicrmw.start4108; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=14109; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4110; GCN1-NEXT:    v_xor_b32_e32 v2, s6, v34111; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc4112; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4113; GCN1-NEXT:    buffer_wbinvl1_vol4114; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34115; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4116; GCN1-NEXT:    v_mov_b32_e32 v3, v24117; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]4118; GCN1-NEXT:    s_cbranch_execnz .LBB74_14119; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end4120; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]4121; GCN1-NEXT:    s_setpc_b64 s[30:31]4122;4123; GCN2-LABEL: flat_atomic_xor_i32_noret_scalar:4124; GCN2:       ; %bb.0:4125; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4126; GCN2-NEXT:    v_mov_b32_e32 v0, s44127; GCN2-NEXT:    v_mov_b32_e32 v1, s54128; GCN2-NEXT:    flat_load_dword v3, v[0:1]4129; GCN2-NEXT:    s_mov_b64 s[34:35], 04130; GCN2-NEXT:  .LBB74_1: ; %atomicrmw.start4131; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=14132; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4133; GCN2-NEXT:    v_xor_b32_e32 v2, s6, v34134; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc4135; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4136; GCN2-NEXT:    buffer_wbinvl1_vol4137; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34138; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4139; GCN2-NEXT:    v_mov_b32_e32 v3, v24140; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]4141; GCN2-NEXT:    s_cbranch_execnz .LBB74_14142; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end4143; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]4144; GCN2-NEXT:    s_setpc_b64 s[30:31]4145;4146; GCN3-LABEL: flat_atomic_xor_i32_noret_scalar:4147; GCN3:       ; %bb.0:4148; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4149; GCN3-NEXT:    v_mov_b32_e32 v0, s44150; GCN3-NEXT:    v_mov_b32_e32 v1, s54151; GCN3-NEXT:    flat_load_dword v3, v[0:1]4152; GCN3-NEXT:    s_mov_b64 s[34:35], 04153; GCN3-NEXT:  .LBB74_1: ; %atomicrmw.start4154; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=14155; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4156; GCN3-NEXT:    v_xor_b32_e32 v2, s6, v34157; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc4158; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4159; GCN3-NEXT:    buffer_wbinvl1_vol4160; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34161; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4162; GCN3-NEXT:    v_mov_b32_e32 v3, v24163; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]4164; GCN3-NEXT:    s_cbranch_execnz .LBB74_14165; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end4166; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]4167; GCN3-NEXT:    s_setpc_b64 s[30:31]4168  %tmp0 = atomicrmw xor ptr %ptr, i32 %in seq_cst4169  ret void4170}4171 4172define amdgpu_gfx void @flat_atomic_xor_i32_noret_offset_scalar(ptr inreg %out, i32 inreg %in) {4173; GCN1-LABEL: flat_atomic_xor_i32_noret_offset_scalar:4174; GCN1:       ; %bb.0:4175; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4176; GCN1-NEXT:    s_add_u32 s34, s4, 164177; GCN1-NEXT:    s_addc_u32 s35, s5, 04178; GCN1-NEXT:    v_mov_b32_e32 v0, s344179; GCN1-NEXT:    v_mov_b32_e32 v1, s354180; GCN1-NEXT:    flat_load_dword v3, v[0:1]4181; GCN1-NEXT:    s_mov_b64 s[34:35], 04182; GCN1-NEXT:  .LBB75_1: ; %atomicrmw.start4183; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=14184; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4185; GCN1-NEXT:    v_xor_b32_e32 v2, s6, v34186; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc4187; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4188; GCN1-NEXT:    buffer_wbinvl1_vol4189; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34190; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4191; GCN1-NEXT:    v_mov_b32_e32 v3, v24192; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]4193; GCN1-NEXT:    s_cbranch_execnz .LBB75_14194; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end4195; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]4196; GCN1-NEXT:    s_setpc_b64 s[30:31]4197;4198; GCN2-LABEL: flat_atomic_xor_i32_noret_offset_scalar:4199; GCN2:       ; %bb.0:4200; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4201; GCN2-NEXT:    s_add_u32 s34, s4, 164202; GCN2-NEXT:    s_addc_u32 s35, s5, 04203; GCN2-NEXT:    v_mov_b32_e32 v0, s344204; GCN2-NEXT:    v_mov_b32_e32 v1, s354205; GCN2-NEXT:    flat_load_dword v3, v[0:1]4206; GCN2-NEXT:    s_mov_b64 s[34:35], 04207; GCN2-NEXT:  .LBB75_1: ; %atomicrmw.start4208; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=14209; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4210; GCN2-NEXT:    v_xor_b32_e32 v2, s6, v34211; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc4212; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4213; GCN2-NEXT:    buffer_wbinvl1_vol4214; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34215; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4216; GCN2-NEXT:    v_mov_b32_e32 v3, v24217; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]4218; GCN2-NEXT:    s_cbranch_execnz .LBB75_14219; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end4220; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]4221; GCN2-NEXT:    s_setpc_b64 s[30:31]4222;4223; GCN3-LABEL: flat_atomic_xor_i32_noret_offset_scalar:4224; GCN3:       ; %bb.0:4225; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4226; GCN3-NEXT:    v_mov_b32_e32 v0, s44227; GCN3-NEXT:    v_mov_b32_e32 v1, s54228; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:164229; GCN3-NEXT:    s_mov_b64 s[34:35], 04230; GCN3-NEXT:  .LBB75_1: ; %atomicrmw.start4231; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=14232; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4233; GCN3-NEXT:    v_xor_b32_e32 v2, s6, v34234; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc4235; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4236; GCN3-NEXT:    buffer_wbinvl1_vol4237; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34238; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4239; GCN3-NEXT:    v_mov_b32_e32 v3, v24240; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]4241; GCN3-NEXT:    s_cbranch_execnz .LBB75_14242; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end4243; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]4244; GCN3-NEXT:    s_setpc_b64 s[30:31]4245  %gep = getelementptr inbounds i32, ptr %out, i32 44246  %tmp0 = atomicrmw xor ptr %gep, i32 %in seq_cst4247  ret void4248}4249 4250define amdgpu_gfx i32 @flat_atomic_xor_i32_ret_scalar(ptr inreg %ptr, i32 inreg %in) {4251; GCN1-LABEL: flat_atomic_xor_i32_ret_scalar:4252; GCN1:       ; %bb.0:4253; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4254; GCN1-NEXT:    v_mov_b32_e32 v0, s44255; GCN1-NEXT:    v_mov_b32_e32 v1, s54256; GCN1-NEXT:    flat_load_dword v0, v[0:1]4257; GCN1-NEXT:    v_mov_b32_e32 v1, s44258; GCN1-NEXT:    s_mov_b64 s[34:35], 04259; GCN1-NEXT:    v_mov_b32_e32 v2, s54260; GCN1-NEXT:  .LBB76_1: ; %atomicrmw.start4261; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=14262; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4263; GCN1-NEXT:    v_mov_b32_e32 v4, v04264; GCN1-NEXT:    v_xor_b32_e32 v3, s6, v44265; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc4266; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4267; GCN1-NEXT:    buffer_wbinvl1_vol4268; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v44269; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4270; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]4271; GCN1-NEXT:    s_cbranch_execnz .LBB76_14272; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end4273; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]4274; GCN1-NEXT:    s_setpc_b64 s[30:31]4275;4276; GCN2-LABEL: flat_atomic_xor_i32_ret_scalar:4277; GCN2:       ; %bb.0:4278; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4279; GCN2-NEXT:    v_mov_b32_e32 v0, s44280; GCN2-NEXT:    v_mov_b32_e32 v1, s54281; GCN2-NEXT:    flat_load_dword v0, v[0:1]4282; GCN2-NEXT:    v_mov_b32_e32 v1, s44283; GCN2-NEXT:    s_mov_b64 s[34:35], 04284; GCN2-NEXT:    v_mov_b32_e32 v2, s54285; GCN2-NEXT:  .LBB76_1: ; %atomicrmw.start4286; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=14287; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4288; GCN2-NEXT:    v_mov_b32_e32 v4, v04289; GCN2-NEXT:    v_xor_b32_e32 v3, s6, v44290; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc4291; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4292; GCN2-NEXT:    buffer_wbinvl1_vol4293; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v44294; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4295; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]4296; GCN2-NEXT:    s_cbranch_execnz .LBB76_14297; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end4298; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]4299; GCN2-NEXT:    s_setpc_b64 s[30:31]4300;4301; GCN3-LABEL: flat_atomic_xor_i32_ret_scalar:4302; GCN3:       ; %bb.0:4303; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4304; GCN3-NEXT:    v_mov_b32_e32 v0, s44305; GCN3-NEXT:    v_mov_b32_e32 v1, s54306; GCN3-NEXT:    flat_load_dword v0, v[0:1]4307; GCN3-NEXT:    v_mov_b32_e32 v1, s44308; GCN3-NEXT:    s_mov_b64 s[34:35], 04309; GCN3-NEXT:    v_mov_b32_e32 v2, s54310; GCN3-NEXT:  .LBB76_1: ; %atomicrmw.start4311; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=14312; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4313; GCN3-NEXT:    v_mov_b32_e32 v4, v04314; GCN3-NEXT:    v_xor_b32_e32 v3, s6, v44315; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc4316; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4317; GCN3-NEXT:    buffer_wbinvl1_vol4318; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v44319; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4320; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]4321; GCN3-NEXT:    s_cbranch_execnz .LBB76_14322; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end4323; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]4324; GCN3-NEXT:    s_setpc_b64 s[30:31]4325  %result = atomicrmw xor ptr %ptr, i32 %in seq_cst4326  ret i32 %result4327}4328 4329define amdgpu_gfx i32 @flat_atomic_xor_i32_ret_offset_scalar(ptr inreg %out, i32 inreg %in) {4330; GCN1-LABEL: flat_atomic_xor_i32_ret_offset_scalar:4331; GCN1:       ; %bb.0:4332; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4333; GCN1-NEXT:    s_add_u32 s34, s4, 164334; GCN1-NEXT:    s_addc_u32 s35, s5, 04335; GCN1-NEXT:    v_mov_b32_e32 v1, s344336; GCN1-NEXT:    v_mov_b32_e32 v2, s354337; GCN1-NEXT:    flat_load_dword v0, v[1:2]4338; GCN1-NEXT:    s_mov_b64 s[34:35], 04339; GCN1-NEXT:  .LBB77_1: ; %atomicrmw.start4340; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=14341; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4342; GCN1-NEXT:    v_mov_b32_e32 v4, v04343; GCN1-NEXT:    v_xor_b32_e32 v3, s6, v44344; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc4345; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4346; GCN1-NEXT:    buffer_wbinvl1_vol4347; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v44348; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4349; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]4350; GCN1-NEXT:    s_cbranch_execnz .LBB77_14351; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end4352; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]4353; GCN1-NEXT:    s_setpc_b64 s[30:31]4354;4355; GCN2-LABEL: flat_atomic_xor_i32_ret_offset_scalar:4356; GCN2:       ; %bb.0:4357; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4358; GCN2-NEXT:    s_add_u32 s34, s4, 164359; GCN2-NEXT:    s_addc_u32 s35, s5, 04360; GCN2-NEXT:    v_mov_b32_e32 v1, s344361; GCN2-NEXT:    v_mov_b32_e32 v2, s354362; GCN2-NEXT:    flat_load_dword v0, v[1:2]4363; GCN2-NEXT:    s_mov_b64 s[34:35], 04364; GCN2-NEXT:  .LBB77_1: ; %atomicrmw.start4365; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=14366; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4367; GCN2-NEXT:    v_mov_b32_e32 v4, v04368; GCN2-NEXT:    v_xor_b32_e32 v3, s6, v44369; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc4370; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4371; GCN2-NEXT:    buffer_wbinvl1_vol4372; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v44373; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4374; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]4375; GCN2-NEXT:    s_cbranch_execnz .LBB77_14376; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end4377; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]4378; GCN2-NEXT:    s_setpc_b64 s[30:31]4379;4380; GCN3-LABEL: flat_atomic_xor_i32_ret_offset_scalar:4381; GCN3:       ; %bb.0:4382; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4383; GCN3-NEXT:    v_mov_b32_e32 v0, s44384; GCN3-NEXT:    v_mov_b32_e32 v1, s54385; GCN3-NEXT:    flat_load_dword v0, v[0:1] offset:164386; GCN3-NEXT:    v_mov_b32_e32 v1, s44387; GCN3-NEXT:    s_mov_b64 s[34:35], 04388; GCN3-NEXT:    v_mov_b32_e32 v2, s54389; GCN3-NEXT:  .LBB77_1: ; %atomicrmw.start4390; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=14391; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4392; GCN3-NEXT:    v_mov_b32_e32 v4, v04393; GCN3-NEXT:    v_xor_b32_e32 v3, s6, v44394; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] offset:16 glc4395; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4396; GCN3-NEXT:    buffer_wbinvl1_vol4397; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v44398; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4399; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]4400; GCN3-NEXT:    s_cbranch_execnz .LBB77_14401; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end4402; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]4403; GCN3-NEXT:    s_setpc_b64 s[30:31]4404  %gep = getelementptr inbounds i32, ptr %out, i32 44405  %result = atomicrmw xor ptr %gep, i32 %in seq_cst4406  ret i32 %result4407}4408 4409define void @flat_xor_i32_noret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {4410; GCN1-LABEL: flat_xor_i32_noret_offset__amdgpu_no_remote_memory:4411; GCN1:       ; %bb.0:4412; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4413; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v04414; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4415; GCN1-NEXT:    flat_atomic_xor v[0:1], v24416; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4417; GCN1-NEXT:    buffer_wbinvl1_vol4418; GCN1-NEXT:    s_setpc_b64 s[30:31]4419;4420; GCN2-LABEL: flat_xor_i32_noret_offset__amdgpu_no_remote_memory:4421; GCN2:       ; %bb.0:4422; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4423; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v04424; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4425; GCN2-NEXT:    flat_atomic_xor v[0:1], v24426; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4427; GCN2-NEXT:    buffer_wbinvl1_vol4428; GCN2-NEXT:    s_setpc_b64 s[30:31]4429;4430; GCN3-LABEL: flat_xor_i32_noret_offset__amdgpu_no_remote_memory:4431; GCN3:       ; %bb.0:4432; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4433; GCN3-NEXT:    flat_atomic_xor v[0:1], v2 offset:164434; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4435; GCN3-NEXT:    buffer_wbinvl1_vol4436; GCN3-NEXT:    s_setpc_b64 s[30:31]4437  %gep = getelementptr inbounds i32, ptr %out, i64 44438  %tmp0 = atomicrmw xor ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !04439  ret void4440}4441 4442define i32 @flat_atomic_xor_i32_ret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {4443; GCN1-LABEL: flat_atomic_xor_i32_ret_offset__amdgpu_no_remote_memory:4444; GCN1:       ; %bb.0:4445; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4446; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v04447; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4448; GCN1-NEXT:    flat_atomic_xor v0, v[0:1], v2 glc4449; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4450; GCN1-NEXT:    buffer_wbinvl1_vol4451; GCN1-NEXT:    s_setpc_b64 s[30:31]4452;4453; GCN2-LABEL: flat_atomic_xor_i32_ret_offset__amdgpu_no_remote_memory:4454; GCN2:       ; %bb.0:4455; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4456; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v04457; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4458; GCN2-NEXT:    flat_atomic_xor v0, v[0:1], v2 glc4459; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4460; GCN2-NEXT:    buffer_wbinvl1_vol4461; GCN2-NEXT:    s_setpc_b64 s[30:31]4462;4463; GCN3-LABEL: flat_atomic_xor_i32_ret_offset__amdgpu_no_remote_memory:4464; GCN3:       ; %bb.0:4465; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4466; GCN3-NEXT:    flat_atomic_xor v0, v[0:1], v2 offset:16 glc4467; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4468; GCN3-NEXT:    buffer_wbinvl1_vol4469; GCN3-NEXT:    s_setpc_b64 s[30:31]4470  %gep = getelementptr inbounds i32, ptr %out, i64 44471  %result = atomicrmw xor ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !04472  ret i32 %result4473}4474 4475; ---------------------------------------------------------------------4476; atomicrmw max4477; ---------------------------------------------------------------------4478 4479define void @flat_atomic_max_i32_noret(ptr %ptr, i32 %in) {4480; GCN1-LABEL: flat_atomic_max_i32_noret:4481; GCN1:       ; %bb.0:4482; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4483; GCN1-NEXT:    flat_load_dword v4, v[0:1]4484; GCN1-NEXT:    s_mov_b64 s[4:5], 04485; GCN1-NEXT:  .LBB80_1: ; %atomicrmw.start4486; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=14487; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4488; GCN1-NEXT:    v_max_i32_e32 v3, v4, v24489; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc4490; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4491; GCN1-NEXT:    buffer_wbinvl1_vol4492; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v44493; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4494; GCN1-NEXT:    v_mov_b32_e32 v4, v34495; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]4496; GCN1-NEXT:    s_cbranch_execnz .LBB80_14497; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end4498; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]4499; GCN1-NEXT:    s_setpc_b64 s[30:31]4500;4501; GCN2-LABEL: flat_atomic_max_i32_noret:4502; GCN2:       ; %bb.0:4503; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4504; GCN2-NEXT:    flat_load_dword v4, v[0:1]4505; GCN2-NEXT:    s_mov_b64 s[4:5], 04506; GCN2-NEXT:  .LBB80_1: ; %atomicrmw.start4507; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=14508; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4509; GCN2-NEXT:    v_max_i32_e32 v3, v4, v24510; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc4511; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4512; GCN2-NEXT:    buffer_wbinvl1_vol4513; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v44514; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4515; GCN2-NEXT:    v_mov_b32_e32 v4, v34516; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]4517; GCN2-NEXT:    s_cbranch_execnz .LBB80_14518; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end4519; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]4520; GCN2-NEXT:    s_setpc_b64 s[30:31]4521;4522; GCN3-LABEL: flat_atomic_max_i32_noret:4523; GCN3:       ; %bb.0:4524; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4525; GCN3-NEXT:    flat_load_dword v4, v[0:1]4526; GCN3-NEXT:    s_mov_b64 s[4:5], 04527; GCN3-NEXT:  .LBB80_1: ; %atomicrmw.start4528; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=14529; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4530; GCN3-NEXT:    v_max_i32_e32 v3, v4, v24531; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc4532; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4533; GCN3-NEXT:    buffer_wbinvl1_vol4534; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v44535; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4536; GCN3-NEXT:    v_mov_b32_e32 v4, v34537; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]4538; GCN3-NEXT:    s_cbranch_execnz .LBB80_14539; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end4540; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]4541; GCN3-NEXT:    s_setpc_b64 s[30:31]4542  %tmp0 = atomicrmw max ptr %ptr, i32 %in seq_cst4543  ret void4544}4545 4546define void @flat_atomic_max_i32_noret_offset(ptr %out, i32 %in) {4547; GCN1-LABEL: flat_atomic_max_i32_noret_offset:4548; GCN1:       ; %bb.0:4549; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4550; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v04551; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4552; GCN1-NEXT:    flat_load_dword v4, v[0:1]4553; GCN1-NEXT:    s_mov_b64 s[4:5], 04554; GCN1-NEXT:  .LBB81_1: ; %atomicrmw.start4555; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=14556; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4557; GCN1-NEXT:    v_max_i32_e32 v3, v4, v24558; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc4559; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4560; GCN1-NEXT:    buffer_wbinvl1_vol4561; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v44562; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4563; GCN1-NEXT:    v_mov_b32_e32 v4, v34564; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]4565; GCN1-NEXT:    s_cbranch_execnz .LBB81_14566; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end4567; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]4568; GCN1-NEXT:    s_setpc_b64 s[30:31]4569;4570; GCN2-LABEL: flat_atomic_max_i32_noret_offset:4571; GCN2:       ; %bb.0:4572; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4573; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v04574; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc4575; GCN2-NEXT:    flat_load_dword v4, v[0:1]4576; GCN2-NEXT:    s_mov_b64 s[4:5], 04577; GCN2-NEXT:  .LBB81_1: ; %atomicrmw.start4578; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=14579; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4580; GCN2-NEXT:    v_max_i32_e32 v3, v4, v24581; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc4582; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4583; GCN2-NEXT:    buffer_wbinvl1_vol4584; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v44585; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4586; GCN2-NEXT:    v_mov_b32_e32 v4, v34587; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]4588; GCN2-NEXT:    s_cbranch_execnz .LBB81_14589; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end4590; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]4591; GCN2-NEXT:    s_setpc_b64 s[30:31]4592;4593; GCN3-LABEL: flat_atomic_max_i32_noret_offset:4594; GCN3:       ; %bb.0:4595; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4596; GCN3-NEXT:    flat_load_dword v4, v[0:1] offset:164597; GCN3-NEXT:    s_mov_b64 s[4:5], 04598; GCN3-NEXT:  .LBB81_1: ; %atomicrmw.start4599; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=14600; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4601; GCN3-NEXT:    v_max_i32_e32 v3, v4, v24602; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc4603; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4604; GCN3-NEXT:    buffer_wbinvl1_vol4605; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v44606; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4607; GCN3-NEXT:    v_mov_b32_e32 v4, v34608; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]4609; GCN3-NEXT:    s_cbranch_execnz .LBB81_14610; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end4611; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]4612; GCN3-NEXT:    s_setpc_b64 s[30:31]4613  %gep = getelementptr inbounds i32, ptr %out, i32 44614  %tmp0 = atomicrmw max ptr %gep, i32 %in seq_cst4615  ret void4616}4617 4618define i32 @flat_atomic_max_i32_ret(ptr %ptr, i32 %in) {4619; GCN1-LABEL: flat_atomic_max_i32_ret:4620; GCN1:       ; %bb.0:4621; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4622; GCN1-NEXT:    flat_load_dword v3, v[0:1]4623; GCN1-NEXT:    s_mov_b64 s[4:5], 04624; GCN1-NEXT:  .LBB82_1: ; %atomicrmw.start4625; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=14626; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4627; GCN1-NEXT:    v_mov_b32_e32 v4, v34628; GCN1-NEXT:    v_max_i32_e32 v3, v4, v24629; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc4630; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4631; GCN1-NEXT:    buffer_wbinvl1_vol4632; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v44633; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4634; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]4635; GCN1-NEXT:    s_cbranch_execnz .LBB82_14636; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end4637; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]4638; GCN1-NEXT:    v_mov_b32_e32 v0, v34639; GCN1-NEXT:    s_setpc_b64 s[30:31]4640;4641; GCN2-LABEL: flat_atomic_max_i32_ret:4642; GCN2:       ; %bb.0:4643; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4644; GCN2-NEXT:    flat_load_dword v3, v[0:1]4645; GCN2-NEXT:    s_mov_b64 s[4:5], 04646; GCN2-NEXT:  .LBB82_1: ; %atomicrmw.start4647; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=14648; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4649; GCN2-NEXT:    v_mov_b32_e32 v4, v34650; GCN2-NEXT:    v_max_i32_e32 v3, v4, v24651; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc4652; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4653; GCN2-NEXT:    buffer_wbinvl1_vol4654; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v44655; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4656; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]4657; GCN2-NEXT:    s_cbranch_execnz .LBB82_14658; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end4659; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]4660; GCN2-NEXT:    v_mov_b32_e32 v0, v34661; GCN2-NEXT:    s_setpc_b64 s[30:31]4662;4663; GCN3-LABEL: flat_atomic_max_i32_ret:4664; GCN3:       ; %bb.0:4665; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4666; GCN3-NEXT:    flat_load_dword v3, v[0:1]4667; GCN3-NEXT:    s_mov_b64 s[4:5], 04668; GCN3-NEXT:  .LBB82_1: ; %atomicrmw.start4669; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=14670; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4671; GCN3-NEXT:    v_mov_b32_e32 v4, v34672; GCN3-NEXT:    v_max_i32_e32 v3, v4, v24673; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc4674; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4675; GCN3-NEXT:    buffer_wbinvl1_vol4676; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v44677; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4678; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]4679; GCN3-NEXT:    s_cbranch_execnz .LBB82_14680; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end4681; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]4682; GCN3-NEXT:    v_mov_b32_e32 v0, v34683; GCN3-NEXT:    s_setpc_b64 s[30:31]4684  %result = atomicrmw max ptr %ptr, i32 %in seq_cst4685  ret i32 %result4686}4687 4688define i32 @flat_atomic_max_i32_ret_offset(ptr %out, i32 %in) {4689; GCN1-LABEL: flat_atomic_max_i32_ret_offset:4690; GCN1:       ; %bb.0:4691; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4692; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 16, v04693; GCN1-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc4694; GCN1-NEXT:    flat_load_dword v0, v[3:4]4695; GCN1-NEXT:    s_mov_b64 s[4:5], 04696; GCN1-NEXT:  .LBB83_1: ; %atomicrmw.start4697; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=14698; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4699; GCN1-NEXT:    v_mov_b32_e32 v1, v04700; GCN1-NEXT:    v_max_i32_e32 v0, v1, v24701; GCN1-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc4702; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4703; GCN1-NEXT:    buffer_wbinvl1_vol4704; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v14705; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4706; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]4707; GCN1-NEXT:    s_cbranch_execnz .LBB83_14708; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end4709; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]4710; GCN1-NEXT:    s_setpc_b64 s[30:31]4711;4712; GCN2-LABEL: flat_atomic_max_i32_ret_offset:4713; GCN2:       ; %bb.0:4714; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4715; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 16, v04716; GCN2-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc4717; GCN2-NEXT:    flat_load_dword v0, v[3:4]4718; GCN2-NEXT:    s_mov_b64 s[4:5], 04719; GCN2-NEXT:  .LBB83_1: ; %atomicrmw.start4720; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=14721; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4722; GCN2-NEXT:    v_mov_b32_e32 v1, v04723; GCN2-NEXT:    v_max_i32_e32 v0, v1, v24724; GCN2-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc4725; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4726; GCN2-NEXT:    buffer_wbinvl1_vol4727; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v14728; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4729; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]4730; GCN2-NEXT:    s_cbranch_execnz .LBB83_14731; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end4732; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]4733; GCN2-NEXT:    s_setpc_b64 s[30:31]4734;4735; GCN3-LABEL: flat_atomic_max_i32_ret_offset:4736; GCN3:       ; %bb.0:4737; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4738; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:164739; GCN3-NEXT:    s_mov_b64 s[4:5], 04740; GCN3-NEXT:  .LBB83_1: ; %atomicrmw.start4741; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=14742; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4743; GCN3-NEXT:    v_mov_b32_e32 v4, v34744; GCN3-NEXT:    v_max_i32_e32 v3, v4, v24745; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc4746; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4747; GCN3-NEXT:    buffer_wbinvl1_vol4748; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v44749; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]4750; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]4751; GCN3-NEXT:    s_cbranch_execnz .LBB83_14752; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end4753; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]4754; GCN3-NEXT:    v_mov_b32_e32 v0, v34755; GCN3-NEXT:    s_setpc_b64 s[30:31]4756  %gep = getelementptr inbounds i32, ptr %out, i32 44757  %result = atomicrmw max ptr %gep, i32 %in seq_cst4758  ret i32 %result4759}4760 4761define amdgpu_gfx void @flat_atomic_max_i32_noret_scalar(ptr inreg %ptr, i32 inreg %in) {4762; GCN1-LABEL: flat_atomic_max_i32_noret_scalar:4763; GCN1:       ; %bb.0:4764; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4765; GCN1-NEXT:    v_mov_b32_e32 v0, s44766; GCN1-NEXT:    v_mov_b32_e32 v1, s54767; GCN1-NEXT:    flat_load_dword v3, v[0:1]4768; GCN1-NEXT:    s_mov_b64 s[34:35], 04769; GCN1-NEXT:  .LBB84_1: ; %atomicrmw.start4770; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=14771; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4772; GCN1-NEXT:    v_max_i32_e32 v2, s6, v34773; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc4774; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4775; GCN1-NEXT:    buffer_wbinvl1_vol4776; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34777; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4778; GCN1-NEXT:    v_mov_b32_e32 v3, v24779; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]4780; GCN1-NEXT:    s_cbranch_execnz .LBB84_14781; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end4782; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]4783; GCN1-NEXT:    s_setpc_b64 s[30:31]4784;4785; GCN2-LABEL: flat_atomic_max_i32_noret_scalar:4786; GCN2:       ; %bb.0:4787; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4788; GCN2-NEXT:    v_mov_b32_e32 v0, s44789; GCN2-NEXT:    v_mov_b32_e32 v1, s54790; GCN2-NEXT:    flat_load_dword v3, v[0:1]4791; GCN2-NEXT:    s_mov_b64 s[34:35], 04792; GCN2-NEXT:  .LBB84_1: ; %atomicrmw.start4793; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=14794; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4795; GCN2-NEXT:    v_max_i32_e32 v2, s6, v34796; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc4797; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4798; GCN2-NEXT:    buffer_wbinvl1_vol4799; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34800; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4801; GCN2-NEXT:    v_mov_b32_e32 v3, v24802; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]4803; GCN2-NEXT:    s_cbranch_execnz .LBB84_14804; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end4805; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]4806; GCN2-NEXT:    s_setpc_b64 s[30:31]4807;4808; GCN3-LABEL: flat_atomic_max_i32_noret_scalar:4809; GCN3:       ; %bb.0:4810; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4811; GCN3-NEXT:    v_mov_b32_e32 v0, s44812; GCN3-NEXT:    v_mov_b32_e32 v1, s54813; GCN3-NEXT:    flat_load_dword v3, v[0:1]4814; GCN3-NEXT:    s_mov_b64 s[34:35], 04815; GCN3-NEXT:  .LBB84_1: ; %atomicrmw.start4816; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=14817; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4818; GCN3-NEXT:    v_max_i32_e32 v2, s6, v34819; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc4820; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4821; GCN3-NEXT:    buffer_wbinvl1_vol4822; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34823; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4824; GCN3-NEXT:    v_mov_b32_e32 v3, v24825; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]4826; GCN3-NEXT:    s_cbranch_execnz .LBB84_14827; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end4828; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]4829; GCN3-NEXT:    s_setpc_b64 s[30:31]4830  %tmp0 = atomicrmw max ptr %ptr, i32 %in seq_cst4831  ret void4832}4833 4834define amdgpu_gfx void @flat_atomic_max_i32_noret_offset_scalar(ptr inreg %out, i32 inreg %in) {4835; GCN1-LABEL: flat_atomic_max_i32_noret_offset_scalar:4836; GCN1:       ; %bb.0:4837; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4838; GCN1-NEXT:    s_add_u32 s34, s4, 164839; GCN1-NEXT:    s_addc_u32 s35, s5, 04840; GCN1-NEXT:    v_mov_b32_e32 v0, s344841; GCN1-NEXT:    v_mov_b32_e32 v1, s354842; GCN1-NEXT:    flat_load_dword v3, v[0:1]4843; GCN1-NEXT:    s_mov_b64 s[34:35], 04844; GCN1-NEXT:  .LBB85_1: ; %atomicrmw.start4845; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=14846; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4847; GCN1-NEXT:    v_max_i32_e32 v2, s6, v34848; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc4849; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4850; GCN1-NEXT:    buffer_wbinvl1_vol4851; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34852; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4853; GCN1-NEXT:    v_mov_b32_e32 v3, v24854; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]4855; GCN1-NEXT:    s_cbranch_execnz .LBB85_14856; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end4857; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]4858; GCN1-NEXT:    s_setpc_b64 s[30:31]4859;4860; GCN2-LABEL: flat_atomic_max_i32_noret_offset_scalar:4861; GCN2:       ; %bb.0:4862; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4863; GCN2-NEXT:    s_add_u32 s34, s4, 164864; GCN2-NEXT:    s_addc_u32 s35, s5, 04865; GCN2-NEXT:    v_mov_b32_e32 v0, s344866; GCN2-NEXT:    v_mov_b32_e32 v1, s354867; GCN2-NEXT:    flat_load_dword v3, v[0:1]4868; GCN2-NEXT:    s_mov_b64 s[34:35], 04869; GCN2-NEXT:  .LBB85_1: ; %atomicrmw.start4870; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=14871; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4872; GCN2-NEXT:    v_max_i32_e32 v2, s6, v34873; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc4874; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4875; GCN2-NEXT:    buffer_wbinvl1_vol4876; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34877; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4878; GCN2-NEXT:    v_mov_b32_e32 v3, v24879; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]4880; GCN2-NEXT:    s_cbranch_execnz .LBB85_14881; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end4882; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]4883; GCN2-NEXT:    s_setpc_b64 s[30:31]4884;4885; GCN3-LABEL: flat_atomic_max_i32_noret_offset_scalar:4886; GCN3:       ; %bb.0:4887; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4888; GCN3-NEXT:    v_mov_b32_e32 v0, s44889; GCN3-NEXT:    v_mov_b32_e32 v1, s54890; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:164891; GCN3-NEXT:    s_mov_b64 s[34:35], 04892; GCN3-NEXT:  .LBB85_1: ; %atomicrmw.start4893; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=14894; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4895; GCN3-NEXT:    v_max_i32_e32 v2, s6, v34896; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc4897; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4898; GCN3-NEXT:    buffer_wbinvl1_vol4899; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v34900; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4901; GCN3-NEXT:    v_mov_b32_e32 v3, v24902; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]4903; GCN3-NEXT:    s_cbranch_execnz .LBB85_14904; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end4905; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]4906; GCN3-NEXT:    s_setpc_b64 s[30:31]4907  %gep = getelementptr inbounds i32, ptr %out, i32 44908  %tmp0 = atomicrmw max ptr %gep, i32 %in seq_cst4909  ret void4910}4911 4912define amdgpu_gfx i32 @flat_atomic_max_i32_ret_scalar(ptr inreg %ptr, i32 inreg %in) {4913; GCN1-LABEL: flat_atomic_max_i32_ret_scalar:4914; GCN1:       ; %bb.0:4915; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4916; GCN1-NEXT:    v_mov_b32_e32 v0, s44917; GCN1-NEXT:    v_mov_b32_e32 v1, s54918; GCN1-NEXT:    flat_load_dword v0, v[0:1]4919; GCN1-NEXT:    v_mov_b32_e32 v1, s44920; GCN1-NEXT:    s_mov_b64 s[34:35], 04921; GCN1-NEXT:    v_mov_b32_e32 v2, s54922; GCN1-NEXT:  .LBB86_1: ; %atomicrmw.start4923; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=14924; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4925; GCN1-NEXT:    v_mov_b32_e32 v4, v04926; GCN1-NEXT:    v_max_i32_e32 v3, s6, v44927; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc4928; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4929; GCN1-NEXT:    buffer_wbinvl1_vol4930; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v44931; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4932; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]4933; GCN1-NEXT:    s_cbranch_execnz .LBB86_14934; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end4935; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]4936; GCN1-NEXT:    s_setpc_b64 s[30:31]4937;4938; GCN2-LABEL: flat_atomic_max_i32_ret_scalar:4939; GCN2:       ; %bb.0:4940; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4941; GCN2-NEXT:    v_mov_b32_e32 v0, s44942; GCN2-NEXT:    v_mov_b32_e32 v1, s54943; GCN2-NEXT:    flat_load_dword v0, v[0:1]4944; GCN2-NEXT:    v_mov_b32_e32 v1, s44945; GCN2-NEXT:    s_mov_b64 s[34:35], 04946; GCN2-NEXT:    v_mov_b32_e32 v2, s54947; GCN2-NEXT:  .LBB86_1: ; %atomicrmw.start4948; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=14949; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4950; GCN2-NEXT:    v_mov_b32_e32 v4, v04951; GCN2-NEXT:    v_max_i32_e32 v3, s6, v44952; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc4953; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4954; GCN2-NEXT:    buffer_wbinvl1_vol4955; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v44956; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4957; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]4958; GCN2-NEXT:    s_cbranch_execnz .LBB86_14959; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end4960; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]4961; GCN2-NEXT:    s_setpc_b64 s[30:31]4962;4963; GCN3-LABEL: flat_atomic_max_i32_ret_scalar:4964; GCN3:       ; %bb.0:4965; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4966; GCN3-NEXT:    v_mov_b32_e32 v0, s44967; GCN3-NEXT:    v_mov_b32_e32 v1, s54968; GCN3-NEXT:    flat_load_dword v0, v[0:1]4969; GCN3-NEXT:    v_mov_b32_e32 v1, s44970; GCN3-NEXT:    s_mov_b64 s[34:35], 04971; GCN3-NEXT:    v_mov_b32_e32 v2, s54972; GCN3-NEXT:  .LBB86_1: ; %atomicrmw.start4973; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=14974; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4975; GCN3-NEXT:    v_mov_b32_e32 v4, v04976; GCN3-NEXT:    v_max_i32_e32 v3, s6, v44977; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc4978; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)4979; GCN3-NEXT:    buffer_wbinvl1_vol4980; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v44981; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]4982; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]4983; GCN3-NEXT:    s_cbranch_execnz .LBB86_14984; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end4985; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]4986; GCN3-NEXT:    s_setpc_b64 s[30:31]4987  %result = atomicrmw max ptr %ptr, i32 %in seq_cst4988  ret i32 %result4989}4990 4991define amdgpu_gfx i32 @flat_atomic_max_i32_ret_offset_scalar(ptr inreg %out, i32 inreg %in) {4992; GCN1-LABEL: flat_atomic_max_i32_ret_offset_scalar:4993; GCN1:       ; %bb.0:4994; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4995; GCN1-NEXT:    s_add_u32 s34, s4, 164996; GCN1-NEXT:    s_addc_u32 s35, s5, 04997; GCN1-NEXT:    v_mov_b32_e32 v1, s344998; GCN1-NEXT:    v_mov_b32_e32 v2, s354999; GCN1-NEXT:    flat_load_dword v0, v[1:2]5000; GCN1-NEXT:    s_mov_b64 s[34:35], 05001; GCN1-NEXT:  .LBB87_1: ; %atomicrmw.start5002; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=15003; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5004; GCN1-NEXT:    v_mov_b32_e32 v4, v05005; GCN1-NEXT:    v_max_i32_e32 v3, s6, v45006; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc5007; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5008; GCN1-NEXT:    buffer_wbinvl1_vol5009; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v45010; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]5011; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]5012; GCN1-NEXT:    s_cbranch_execnz .LBB87_15013; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end5014; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]5015; GCN1-NEXT:    s_setpc_b64 s[30:31]5016;5017; GCN2-LABEL: flat_atomic_max_i32_ret_offset_scalar:5018; GCN2:       ; %bb.0:5019; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5020; GCN2-NEXT:    s_add_u32 s34, s4, 165021; GCN2-NEXT:    s_addc_u32 s35, s5, 05022; GCN2-NEXT:    v_mov_b32_e32 v1, s345023; GCN2-NEXT:    v_mov_b32_e32 v2, s355024; GCN2-NEXT:    flat_load_dword v0, v[1:2]5025; GCN2-NEXT:    s_mov_b64 s[34:35], 05026; GCN2-NEXT:  .LBB87_1: ; %atomicrmw.start5027; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=15028; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5029; GCN2-NEXT:    v_mov_b32_e32 v4, v05030; GCN2-NEXT:    v_max_i32_e32 v3, s6, v45031; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc5032; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5033; GCN2-NEXT:    buffer_wbinvl1_vol5034; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v45035; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]5036; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]5037; GCN2-NEXT:    s_cbranch_execnz .LBB87_15038; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end5039; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]5040; GCN2-NEXT:    s_setpc_b64 s[30:31]5041;5042; GCN3-LABEL: flat_atomic_max_i32_ret_offset_scalar:5043; GCN3:       ; %bb.0:5044; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5045; GCN3-NEXT:    v_mov_b32_e32 v0, s45046; GCN3-NEXT:    v_mov_b32_e32 v1, s55047; GCN3-NEXT:    flat_load_dword v0, v[0:1] offset:165048; GCN3-NEXT:    v_mov_b32_e32 v1, s45049; GCN3-NEXT:    s_mov_b64 s[34:35], 05050; GCN3-NEXT:    v_mov_b32_e32 v2, s55051; GCN3-NEXT:  .LBB87_1: ; %atomicrmw.start5052; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=15053; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5054; GCN3-NEXT:    v_mov_b32_e32 v4, v05055; GCN3-NEXT:    v_max_i32_e32 v3, s6, v45056; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] offset:16 glc5057; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5058; GCN3-NEXT:    buffer_wbinvl1_vol5059; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v45060; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]5061; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]5062; GCN3-NEXT:    s_cbranch_execnz .LBB87_15063; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end5064; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]5065; GCN3-NEXT:    s_setpc_b64 s[30:31]5066  %gep = getelementptr inbounds i32, ptr %out, i32 45067  %result = atomicrmw max ptr %gep, i32 %in seq_cst5068  ret i32 %result5069}5070 5071define amdgpu_kernel void @atomic_max_i32_addr64_offset(ptr %out, i32 %in, i32 %index) {5072; GCN1-LABEL: atomic_max_i32_addr64_offset:5073; GCN1:       ; %bb.0: ; %entry5074; GCN1-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x95075; GCN1-NEXT:    s_waitcnt lgkmcnt(0)5076; GCN1-NEXT:    s_ashr_i32 s5, s3, 315077; GCN1-NEXT:    s_mov_b32 s4, s35078; GCN1-NEXT:    s_lshl_b64 s[4:5], s[4:5], 25079; GCN1-NEXT:    s_add_u32 s0, s0, s45080; GCN1-NEXT:    s_addc_u32 s1, s1, s55081; GCN1-NEXT:    s_add_u32 s0, s0, 165082; GCN1-NEXT:    s_addc_u32 s1, s1, 05083; GCN1-NEXT:    v_mov_b32_e32 v0, s05084; GCN1-NEXT:    v_mov_b32_e32 v1, s15085; GCN1-NEXT:    flat_load_dword v3, v[0:1]5086; GCN1-NEXT:    s_mov_b64 s[0:1], 05087; GCN1-NEXT:  .LBB88_1: ; %atomicrmw.start5088; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=15089; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5090; GCN1-NEXT:    v_max_i32_e32 v2, s2, v35091; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5092; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5093; GCN1-NEXT:    buffer_wbinvl1_vol5094; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35095; GCN1-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5096; GCN1-NEXT:    v_mov_b32_e32 v3, v25097; GCN1-NEXT:    s_andn2_b64 exec, exec, s[0:1]5098; GCN1-NEXT:    s_cbranch_execnz .LBB88_15099; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end5100; GCN1-NEXT:    s_endpgm5101;5102; GCN2-LABEL: atomic_max_i32_addr64_offset:5103; GCN2:       ; %bb.0: ; %entry5104; GCN2-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x245105; GCN2-NEXT:    s_waitcnt lgkmcnt(0)5106; GCN2-NEXT:    s_ashr_i32 s5, s3, 315107; GCN2-NEXT:    s_mov_b32 s4, s35108; GCN2-NEXT:    s_lshl_b64 s[4:5], s[4:5], 25109; GCN2-NEXT:    s_add_u32 s0, s0, s45110; GCN2-NEXT:    s_addc_u32 s1, s1, s55111; GCN2-NEXT:    s_add_u32 s0, s0, 165112; GCN2-NEXT:    s_addc_u32 s1, s1, 05113; GCN2-NEXT:    v_mov_b32_e32 v0, s05114; GCN2-NEXT:    v_mov_b32_e32 v1, s15115; GCN2-NEXT:    flat_load_dword v3, v[0:1]5116; GCN2-NEXT:    s_mov_b64 s[0:1], 05117; GCN2-NEXT:  .LBB88_1: ; %atomicrmw.start5118; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=15119; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5120; GCN2-NEXT:    v_max_i32_e32 v2, s2, v35121; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5122; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5123; GCN2-NEXT:    buffer_wbinvl1_vol5124; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35125; GCN2-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5126; GCN2-NEXT:    v_mov_b32_e32 v3, v25127; GCN2-NEXT:    s_andn2_b64 exec, exec, s[0:1]5128; GCN2-NEXT:    s_cbranch_execnz .LBB88_15129; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end5130; GCN2-NEXT:    s_endpgm5131;5132; GCN3-LABEL: atomic_max_i32_addr64_offset:5133; GCN3:       ; %bb.0: ; %entry5134; GCN3-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x245135; GCN3-NEXT:    s_waitcnt lgkmcnt(0)5136; GCN3-NEXT:    s_ashr_i32 s5, s3, 315137; GCN3-NEXT:    s_mov_b32 s4, s35138; GCN3-NEXT:    s_lshl_b64 s[4:5], s[4:5], 25139; GCN3-NEXT:    s_add_u32 s0, s0, s45140; GCN3-NEXT:    s_addc_u32 s1, s1, s55141; GCN3-NEXT:    v_mov_b32_e32 v0, s05142; GCN3-NEXT:    v_mov_b32_e32 v1, s15143; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:165144; GCN3-NEXT:    s_mov_b64 s[0:1], 05145; GCN3-NEXT:  .LBB88_1: ; %atomicrmw.start5146; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=15147; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5148; GCN3-NEXT:    v_max_i32_e32 v2, s2, v35149; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc5150; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5151; GCN3-NEXT:    buffer_wbinvl1_vol5152; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35153; GCN3-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5154; GCN3-NEXT:    v_mov_b32_e32 v3, v25155; GCN3-NEXT:    s_andn2_b64 exec, exec, s[0:1]5156; GCN3-NEXT:    s_cbranch_execnz .LBB88_15157; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end5158; GCN3-NEXT:    s_endpgm5159entry:5160  %ptr = getelementptr inbounds i32, ptr %out, i32 %index5161  %gep = getelementptr inbounds i32, ptr %ptr, i32 45162  %tmp0 = atomicrmw max ptr %gep, i32 %in seq_cst5163  ret void5164}5165 5166define amdgpu_kernel void @atomic_max_i32_ret_addr64_offset(ptr %out, ptr %out2, i32 %in, i32 %index) {5167; GCN1-LABEL: atomic_max_i32_ret_addr64_offset:5168; GCN1:       ; %bb.0: ; %entry5169; GCN1-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0xd5170; GCN1-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x95171; GCN1-NEXT:    s_waitcnt lgkmcnt(0)5172; GCN1-NEXT:    s_ashr_i32 s5, s7, 315173; GCN1-NEXT:    s_mov_b32 s4, s75174; GCN1-NEXT:    s_lshl_b64 s[4:5], s[4:5], 25175; GCN1-NEXT:    s_add_u32 s0, s0, s45176; GCN1-NEXT:    s_addc_u32 s1, s1, s55177; GCN1-NEXT:    s_add_u32 s0, s0, 165178; GCN1-NEXT:    s_addc_u32 s1, s1, 05179; GCN1-NEXT:    v_mov_b32_e32 v0, s05180; GCN1-NEXT:    v_mov_b32_e32 v1, s15181; GCN1-NEXT:    flat_load_dword v2, v[0:1]5182; GCN1-NEXT:    s_mov_b64 s[0:1], 05183; GCN1-NEXT:  .LBB89_1: ; %atomicrmw.start5184; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=15185; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5186; GCN1-NEXT:    v_mov_b32_e32 v3, v25187; GCN1-NEXT:    v_max_i32_e32 v2, s6, v35188; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5189; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5190; GCN1-NEXT:    buffer_wbinvl1_vol5191; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35192; GCN1-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5193; GCN1-NEXT:    s_andn2_b64 exec, exec, s[0:1]5194; GCN1-NEXT:    s_cbranch_execnz .LBB89_15195; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end5196; GCN1-NEXT:    s_or_b64 exec, exec, s[0:1]5197; GCN1-NEXT:    v_mov_b32_e32 v0, s25198; GCN1-NEXT:    v_mov_b32_e32 v1, s35199; GCN1-NEXT:    flat_store_dword v[0:1], v25200; GCN1-NEXT:    s_endpgm5201;5202; GCN2-LABEL: atomic_max_i32_ret_addr64_offset:5203; GCN2:       ; %bb.0: ; %entry5204; GCN2-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x345205; GCN2-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x245206; GCN2-NEXT:    s_waitcnt lgkmcnt(0)5207; GCN2-NEXT:    s_ashr_i32 s5, s7, 315208; GCN2-NEXT:    s_mov_b32 s4, s75209; GCN2-NEXT:    s_lshl_b64 s[4:5], s[4:5], 25210; GCN2-NEXT:    s_add_u32 s0, s0, s45211; GCN2-NEXT:    s_addc_u32 s1, s1, s55212; GCN2-NEXT:    s_add_u32 s0, s0, 165213; GCN2-NEXT:    s_addc_u32 s1, s1, 05214; GCN2-NEXT:    v_mov_b32_e32 v0, s05215; GCN2-NEXT:    v_mov_b32_e32 v1, s15216; GCN2-NEXT:    flat_load_dword v2, v[0:1]5217; GCN2-NEXT:    s_mov_b64 s[0:1], 05218; GCN2-NEXT:  .LBB89_1: ; %atomicrmw.start5219; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=15220; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5221; GCN2-NEXT:    v_mov_b32_e32 v3, v25222; GCN2-NEXT:    v_max_i32_e32 v2, s6, v35223; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5224; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5225; GCN2-NEXT:    buffer_wbinvl1_vol5226; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35227; GCN2-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5228; GCN2-NEXT:    s_andn2_b64 exec, exec, s[0:1]5229; GCN2-NEXT:    s_cbranch_execnz .LBB89_15230; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end5231; GCN2-NEXT:    s_or_b64 exec, exec, s[0:1]5232; GCN2-NEXT:    v_mov_b32_e32 v0, s25233; GCN2-NEXT:    v_mov_b32_e32 v1, s35234; GCN2-NEXT:    flat_store_dword v[0:1], v25235; GCN2-NEXT:    s_endpgm5236;5237; GCN3-LABEL: atomic_max_i32_ret_addr64_offset:5238; GCN3:       ; %bb.0: ; %entry5239; GCN3-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x345240; GCN3-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x245241; GCN3-NEXT:    s_waitcnt lgkmcnt(0)5242; GCN3-NEXT:    s_ashr_i32 s5, s7, 315243; GCN3-NEXT:    s_mov_b32 s4, s75244; GCN3-NEXT:    s_lshl_b64 s[4:5], s[4:5], 25245; GCN3-NEXT:    s_add_u32 s0, s0, s45246; GCN3-NEXT:    s_addc_u32 s1, s1, s55247; GCN3-NEXT:    v_mov_b32_e32 v0, s05248; GCN3-NEXT:    v_mov_b32_e32 v1, s15249; GCN3-NEXT:    flat_load_dword v2, v[0:1] offset:165250; GCN3-NEXT:    s_mov_b64 s[0:1], 05251; GCN3-NEXT:  .LBB89_1: ; %atomicrmw.start5252; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=15253; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5254; GCN3-NEXT:    v_mov_b32_e32 v3, v25255; GCN3-NEXT:    v_max_i32_e32 v2, s6, v35256; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc5257; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5258; GCN3-NEXT:    buffer_wbinvl1_vol5259; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35260; GCN3-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5261; GCN3-NEXT:    s_andn2_b64 exec, exec, s[0:1]5262; GCN3-NEXT:    s_cbranch_execnz .LBB89_15263; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end5264; GCN3-NEXT:    s_or_b64 exec, exec, s[0:1]5265; GCN3-NEXT:    v_mov_b32_e32 v0, s25266; GCN3-NEXT:    v_mov_b32_e32 v1, s35267; GCN3-NEXT:    flat_store_dword v[0:1], v25268; GCN3-NEXT:    s_endpgm5269entry:5270  %ptr = getelementptr inbounds i32, ptr %out, i32 %index5271  %gep = getelementptr inbounds i32, ptr %ptr, i32 45272  %tmp0 = atomicrmw max ptr %gep, i32 %in seq_cst5273  store i32 %tmp0, ptr %out25274  ret void5275}5276 5277define amdgpu_kernel void @atomic_max_i32_addr64(ptr %out, i32 %in, i32 %index) {5278; GCN1-LABEL: atomic_max_i32_addr64:5279; GCN1:       ; %bb.0: ; %entry5280; GCN1-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x95281; GCN1-NEXT:    s_waitcnt lgkmcnt(0)5282; GCN1-NEXT:    s_ashr_i32 s5, s3, 315283; GCN1-NEXT:    s_mov_b32 s4, s35284; GCN1-NEXT:    s_lshl_b64 s[4:5], s[4:5], 25285; GCN1-NEXT:    s_add_u32 s0, s0, s45286; GCN1-NEXT:    s_addc_u32 s1, s1, s55287; GCN1-NEXT:    v_mov_b32_e32 v0, s05288; GCN1-NEXT:    v_mov_b32_e32 v1, s15289; GCN1-NEXT:    flat_load_dword v3, v[0:1]5290; GCN1-NEXT:    s_mov_b64 s[0:1], 05291; GCN1-NEXT:  .LBB90_1: ; %atomicrmw.start5292; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=15293; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5294; GCN1-NEXT:    v_max_i32_e32 v2, s2, v35295; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5296; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5297; GCN1-NEXT:    buffer_wbinvl1_vol5298; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35299; GCN1-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5300; GCN1-NEXT:    v_mov_b32_e32 v3, v25301; GCN1-NEXT:    s_andn2_b64 exec, exec, s[0:1]5302; GCN1-NEXT:    s_cbranch_execnz .LBB90_15303; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end5304; GCN1-NEXT:    s_endpgm5305;5306; GCN2-LABEL: atomic_max_i32_addr64:5307; GCN2:       ; %bb.0: ; %entry5308; GCN2-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x245309; GCN2-NEXT:    s_waitcnt lgkmcnt(0)5310; GCN2-NEXT:    s_ashr_i32 s5, s3, 315311; GCN2-NEXT:    s_mov_b32 s4, s35312; GCN2-NEXT:    s_lshl_b64 s[4:5], s[4:5], 25313; GCN2-NEXT:    s_add_u32 s0, s0, s45314; GCN2-NEXT:    s_addc_u32 s1, s1, s55315; GCN2-NEXT:    v_mov_b32_e32 v0, s05316; GCN2-NEXT:    v_mov_b32_e32 v1, s15317; GCN2-NEXT:    flat_load_dword v3, v[0:1]5318; GCN2-NEXT:    s_mov_b64 s[0:1], 05319; GCN2-NEXT:  .LBB90_1: ; %atomicrmw.start5320; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=15321; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5322; GCN2-NEXT:    v_max_i32_e32 v2, s2, v35323; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5324; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5325; GCN2-NEXT:    buffer_wbinvl1_vol5326; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35327; GCN2-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5328; GCN2-NEXT:    v_mov_b32_e32 v3, v25329; GCN2-NEXT:    s_andn2_b64 exec, exec, s[0:1]5330; GCN2-NEXT:    s_cbranch_execnz .LBB90_15331; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end5332; GCN2-NEXT:    s_endpgm5333;5334; GCN3-LABEL: atomic_max_i32_addr64:5335; GCN3:       ; %bb.0: ; %entry5336; GCN3-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x245337; GCN3-NEXT:    s_waitcnt lgkmcnt(0)5338; GCN3-NEXT:    s_ashr_i32 s5, s3, 315339; GCN3-NEXT:    s_mov_b32 s4, s35340; GCN3-NEXT:    s_lshl_b64 s[4:5], s[4:5], 25341; GCN3-NEXT:    s_add_u32 s0, s0, s45342; GCN3-NEXT:    s_addc_u32 s1, s1, s55343; GCN3-NEXT:    v_mov_b32_e32 v0, s05344; GCN3-NEXT:    v_mov_b32_e32 v1, s15345; GCN3-NEXT:    flat_load_dword v3, v[0:1]5346; GCN3-NEXT:    s_mov_b64 s[0:1], 05347; GCN3-NEXT:  .LBB90_1: ; %atomicrmw.start5348; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=15349; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5350; GCN3-NEXT:    v_max_i32_e32 v2, s2, v35351; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5352; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5353; GCN3-NEXT:    buffer_wbinvl1_vol5354; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35355; GCN3-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5356; GCN3-NEXT:    v_mov_b32_e32 v3, v25357; GCN3-NEXT:    s_andn2_b64 exec, exec, s[0:1]5358; GCN3-NEXT:    s_cbranch_execnz .LBB90_15359; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end5360; GCN3-NEXT:    s_endpgm5361entry:5362  %ptr = getelementptr inbounds i32, ptr %out, i32 %index5363  %tmp0 = atomicrmw max ptr %ptr, i32 %in seq_cst5364  ret void5365}5366 5367define amdgpu_kernel void @atomic_max_i32_ret_addr64(ptr %out, ptr %out2, i32 %in, i32 %index) {5368; GCN1-LABEL: atomic_max_i32_ret_addr64:5369; GCN1:       ; %bb.0: ; %entry5370; GCN1-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0xd5371; GCN1-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x95372; GCN1-NEXT:    s_waitcnt lgkmcnt(0)5373; GCN1-NEXT:    s_ashr_i32 s5, s7, 315374; GCN1-NEXT:    s_mov_b32 s4, s75375; GCN1-NEXT:    s_lshl_b64 s[4:5], s[4:5], 25376; GCN1-NEXT:    s_add_u32 s0, s0, s45377; GCN1-NEXT:    s_addc_u32 s1, s1, s55378; GCN1-NEXT:    v_mov_b32_e32 v0, s05379; GCN1-NEXT:    v_mov_b32_e32 v1, s15380; GCN1-NEXT:    flat_load_dword v2, v[0:1]5381; GCN1-NEXT:    s_mov_b64 s[0:1], 05382; GCN1-NEXT:  .LBB91_1: ; %atomicrmw.start5383; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=15384; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5385; GCN1-NEXT:    v_mov_b32_e32 v3, v25386; GCN1-NEXT:    v_max_i32_e32 v2, s6, v35387; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5388; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5389; GCN1-NEXT:    buffer_wbinvl1_vol5390; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35391; GCN1-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5392; GCN1-NEXT:    s_andn2_b64 exec, exec, s[0:1]5393; GCN1-NEXT:    s_cbranch_execnz .LBB91_15394; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end5395; GCN1-NEXT:    s_or_b64 exec, exec, s[0:1]5396; GCN1-NEXT:    v_mov_b32_e32 v0, s25397; GCN1-NEXT:    v_mov_b32_e32 v1, s35398; GCN1-NEXT:    flat_store_dword v[0:1], v25399; GCN1-NEXT:    s_endpgm5400;5401; GCN2-LABEL: atomic_max_i32_ret_addr64:5402; GCN2:       ; %bb.0: ; %entry5403; GCN2-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x345404; GCN2-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x245405; GCN2-NEXT:    s_waitcnt lgkmcnt(0)5406; GCN2-NEXT:    s_ashr_i32 s5, s7, 315407; GCN2-NEXT:    s_mov_b32 s4, s75408; GCN2-NEXT:    s_lshl_b64 s[4:5], s[4:5], 25409; GCN2-NEXT:    s_add_u32 s0, s0, s45410; GCN2-NEXT:    s_addc_u32 s1, s1, s55411; GCN2-NEXT:    v_mov_b32_e32 v0, s05412; GCN2-NEXT:    v_mov_b32_e32 v1, s15413; GCN2-NEXT:    flat_load_dword v2, v[0:1]5414; GCN2-NEXT:    s_mov_b64 s[0:1], 05415; GCN2-NEXT:  .LBB91_1: ; %atomicrmw.start5416; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=15417; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5418; GCN2-NEXT:    v_mov_b32_e32 v3, v25419; GCN2-NEXT:    v_max_i32_e32 v2, s6, v35420; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5421; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5422; GCN2-NEXT:    buffer_wbinvl1_vol5423; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35424; GCN2-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5425; GCN2-NEXT:    s_andn2_b64 exec, exec, s[0:1]5426; GCN2-NEXT:    s_cbranch_execnz .LBB91_15427; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end5428; GCN2-NEXT:    s_or_b64 exec, exec, s[0:1]5429; GCN2-NEXT:    v_mov_b32_e32 v0, s25430; GCN2-NEXT:    v_mov_b32_e32 v1, s35431; GCN2-NEXT:    flat_store_dword v[0:1], v25432; GCN2-NEXT:    s_endpgm5433;5434; GCN3-LABEL: atomic_max_i32_ret_addr64:5435; GCN3:       ; %bb.0: ; %entry5436; GCN3-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x345437; GCN3-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x245438; GCN3-NEXT:    s_waitcnt lgkmcnt(0)5439; GCN3-NEXT:    s_ashr_i32 s5, s7, 315440; GCN3-NEXT:    s_mov_b32 s4, s75441; GCN3-NEXT:    s_lshl_b64 s[4:5], s[4:5], 25442; GCN3-NEXT:    s_add_u32 s0, s0, s45443; GCN3-NEXT:    s_addc_u32 s1, s1, s55444; GCN3-NEXT:    v_mov_b32_e32 v0, s05445; GCN3-NEXT:    v_mov_b32_e32 v1, s15446; GCN3-NEXT:    flat_load_dword v2, v[0:1]5447; GCN3-NEXT:    s_mov_b64 s[0:1], 05448; GCN3-NEXT:  .LBB91_1: ; %atomicrmw.start5449; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=15450; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5451; GCN3-NEXT:    v_mov_b32_e32 v3, v25452; GCN3-NEXT:    v_max_i32_e32 v2, s6, v35453; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5454; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5455; GCN3-NEXT:    buffer_wbinvl1_vol5456; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35457; GCN3-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]5458; GCN3-NEXT:    s_andn2_b64 exec, exec, s[0:1]5459; GCN3-NEXT:    s_cbranch_execnz .LBB91_15460; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end5461; GCN3-NEXT:    s_or_b64 exec, exec, s[0:1]5462; GCN3-NEXT:    v_mov_b32_e32 v0, s25463; GCN3-NEXT:    v_mov_b32_e32 v1, s35464; GCN3-NEXT:    flat_store_dword v[0:1], v25465; GCN3-NEXT:    s_endpgm5466entry:5467  %ptr = getelementptr inbounds i32, ptr %out, i32 %index5468  %tmp0 = atomicrmw max ptr %ptr, i32 %in seq_cst5469  store i32 %tmp0, ptr %out25470  ret void5471}5472 5473define void @flat_max_i32_noret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {5474; GCN1-LABEL: flat_max_i32_noret_offset__amdgpu_no_remote_memory:5475; GCN1:       ; %bb.0:5476; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5477; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v05478; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc5479; GCN1-NEXT:    flat_atomic_smax v[0:1], v25480; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5481; GCN1-NEXT:    buffer_wbinvl1_vol5482; GCN1-NEXT:    s_setpc_b64 s[30:31]5483;5484; GCN2-LABEL: flat_max_i32_noret_offset__amdgpu_no_remote_memory:5485; GCN2:       ; %bb.0:5486; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5487; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v05488; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc5489; GCN2-NEXT:    flat_atomic_smax v[0:1], v25490; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5491; GCN2-NEXT:    buffer_wbinvl1_vol5492; GCN2-NEXT:    s_setpc_b64 s[30:31]5493;5494; GCN3-LABEL: flat_max_i32_noret_offset__amdgpu_no_remote_memory:5495; GCN3:       ; %bb.0:5496; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5497; GCN3-NEXT:    flat_atomic_smax v[0:1], v2 offset:165498; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5499; GCN3-NEXT:    buffer_wbinvl1_vol5500; GCN3-NEXT:    s_setpc_b64 s[30:31]5501  %gep = getelementptr inbounds i32, ptr %out, i64 45502  %tmp0 = atomicrmw max ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !05503  ret void5504}5505 5506define i32 @flat_atomic_max_i32_ret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {5507; GCN1-LABEL: flat_atomic_max_i32_ret_offset__amdgpu_no_remote_memory:5508; GCN1:       ; %bb.0:5509; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5510; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v05511; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc5512; GCN1-NEXT:    flat_atomic_smax v0, v[0:1], v2 glc5513; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5514; GCN1-NEXT:    buffer_wbinvl1_vol5515; GCN1-NEXT:    s_setpc_b64 s[30:31]5516;5517; GCN2-LABEL: flat_atomic_max_i32_ret_offset__amdgpu_no_remote_memory:5518; GCN2:       ; %bb.0:5519; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5520; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v05521; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc5522; GCN2-NEXT:    flat_atomic_smax v0, v[0:1], v2 glc5523; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5524; GCN2-NEXT:    buffer_wbinvl1_vol5525; GCN2-NEXT:    s_setpc_b64 s[30:31]5526;5527; GCN3-LABEL: flat_atomic_max_i32_ret_offset__amdgpu_no_remote_memory:5528; GCN3:       ; %bb.0:5529; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5530; GCN3-NEXT:    flat_atomic_smax v0, v[0:1], v2 offset:16 glc5531; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5532; GCN3-NEXT:    buffer_wbinvl1_vol5533; GCN3-NEXT:    s_setpc_b64 s[30:31]5534  %gep = getelementptr inbounds i32, ptr %out, i64 45535  %result = atomicrmw max ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !05536  ret i32 %result5537}5538 5539; ---------------------------------------------------------------------5540; atomicrmw umax5541; ---------------------------------------------------------------------5542 5543define void @flat_atomic_umax_i32_noret(ptr %ptr, i32 %in) {5544; GCN1-LABEL: flat_atomic_umax_i32_noret:5545; GCN1:       ; %bb.0:5546; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5547; GCN1-NEXT:    flat_load_dword v4, v[0:1]5548; GCN1-NEXT:    s_mov_b64 s[4:5], 05549; GCN1-NEXT:  .LBB94_1: ; %atomicrmw.start5550; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=15551; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5552; GCN1-NEXT:    v_max_u32_e32 v3, v4, v25553; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc5554; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5555; GCN1-NEXT:    buffer_wbinvl1_vol5556; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v45557; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5558; GCN1-NEXT:    v_mov_b32_e32 v4, v35559; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]5560; GCN1-NEXT:    s_cbranch_execnz .LBB94_15561; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end5562; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]5563; GCN1-NEXT:    s_setpc_b64 s[30:31]5564;5565; GCN2-LABEL: flat_atomic_umax_i32_noret:5566; GCN2:       ; %bb.0:5567; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5568; GCN2-NEXT:    flat_load_dword v4, v[0:1]5569; GCN2-NEXT:    s_mov_b64 s[4:5], 05570; GCN2-NEXT:  .LBB94_1: ; %atomicrmw.start5571; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=15572; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5573; GCN2-NEXT:    v_max_u32_e32 v3, v4, v25574; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc5575; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5576; GCN2-NEXT:    buffer_wbinvl1_vol5577; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v45578; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5579; GCN2-NEXT:    v_mov_b32_e32 v4, v35580; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]5581; GCN2-NEXT:    s_cbranch_execnz .LBB94_15582; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end5583; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]5584; GCN2-NEXT:    s_setpc_b64 s[30:31]5585;5586; GCN3-LABEL: flat_atomic_umax_i32_noret:5587; GCN3:       ; %bb.0:5588; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5589; GCN3-NEXT:    flat_load_dword v4, v[0:1]5590; GCN3-NEXT:    s_mov_b64 s[4:5], 05591; GCN3-NEXT:  .LBB94_1: ; %atomicrmw.start5592; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=15593; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5594; GCN3-NEXT:    v_max_u32_e32 v3, v4, v25595; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc5596; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5597; GCN3-NEXT:    buffer_wbinvl1_vol5598; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v45599; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5600; GCN3-NEXT:    v_mov_b32_e32 v4, v35601; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]5602; GCN3-NEXT:    s_cbranch_execnz .LBB94_15603; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end5604; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]5605; GCN3-NEXT:    s_setpc_b64 s[30:31]5606  %tmp0 = atomicrmw umax ptr %ptr, i32 %in seq_cst5607  ret void5608}5609 5610define void @flat_atomic_umax_i32_noret_offset(ptr %out, i32 %in) {5611; GCN1-LABEL: flat_atomic_umax_i32_noret_offset:5612; GCN1:       ; %bb.0:5613; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5614; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v05615; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc5616; GCN1-NEXT:    flat_load_dword v4, v[0:1]5617; GCN1-NEXT:    s_mov_b64 s[4:5], 05618; GCN1-NEXT:  .LBB95_1: ; %atomicrmw.start5619; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=15620; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5621; GCN1-NEXT:    v_max_u32_e32 v3, v4, v25622; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc5623; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5624; GCN1-NEXT:    buffer_wbinvl1_vol5625; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v45626; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5627; GCN1-NEXT:    v_mov_b32_e32 v4, v35628; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]5629; GCN1-NEXT:    s_cbranch_execnz .LBB95_15630; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end5631; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]5632; GCN1-NEXT:    s_setpc_b64 s[30:31]5633;5634; GCN2-LABEL: flat_atomic_umax_i32_noret_offset:5635; GCN2:       ; %bb.0:5636; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5637; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v05638; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc5639; GCN2-NEXT:    flat_load_dword v4, v[0:1]5640; GCN2-NEXT:    s_mov_b64 s[4:5], 05641; GCN2-NEXT:  .LBB95_1: ; %atomicrmw.start5642; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=15643; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5644; GCN2-NEXT:    v_max_u32_e32 v3, v4, v25645; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc5646; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5647; GCN2-NEXT:    buffer_wbinvl1_vol5648; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v45649; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5650; GCN2-NEXT:    v_mov_b32_e32 v4, v35651; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]5652; GCN2-NEXT:    s_cbranch_execnz .LBB95_15653; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end5654; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]5655; GCN2-NEXT:    s_setpc_b64 s[30:31]5656;5657; GCN3-LABEL: flat_atomic_umax_i32_noret_offset:5658; GCN3:       ; %bb.0:5659; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5660; GCN3-NEXT:    flat_load_dword v4, v[0:1] offset:165661; GCN3-NEXT:    s_mov_b64 s[4:5], 05662; GCN3-NEXT:  .LBB95_1: ; %atomicrmw.start5663; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=15664; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5665; GCN3-NEXT:    v_max_u32_e32 v3, v4, v25666; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc5667; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5668; GCN3-NEXT:    buffer_wbinvl1_vol5669; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v45670; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5671; GCN3-NEXT:    v_mov_b32_e32 v4, v35672; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]5673; GCN3-NEXT:    s_cbranch_execnz .LBB95_15674; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end5675; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]5676; GCN3-NEXT:    s_setpc_b64 s[30:31]5677  %gep = getelementptr inbounds i32, ptr %out, i32 45678  %tmp0 = atomicrmw umax ptr %gep, i32 %in seq_cst5679  ret void5680}5681 5682define i32 @flat_atomic_umax_i32_ret(ptr %ptr, i32 %in) {5683; GCN1-LABEL: flat_atomic_umax_i32_ret:5684; GCN1:       ; %bb.0:5685; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5686; GCN1-NEXT:    flat_load_dword v3, v[0:1]5687; GCN1-NEXT:    s_mov_b64 s[4:5], 05688; GCN1-NEXT:  .LBB96_1: ; %atomicrmw.start5689; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=15690; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5691; GCN1-NEXT:    v_mov_b32_e32 v4, v35692; GCN1-NEXT:    v_max_u32_e32 v3, v4, v25693; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc5694; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5695; GCN1-NEXT:    buffer_wbinvl1_vol5696; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v45697; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5698; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]5699; GCN1-NEXT:    s_cbranch_execnz .LBB96_15700; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end5701; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]5702; GCN1-NEXT:    v_mov_b32_e32 v0, v35703; GCN1-NEXT:    s_setpc_b64 s[30:31]5704;5705; GCN2-LABEL: flat_atomic_umax_i32_ret:5706; GCN2:       ; %bb.0:5707; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5708; GCN2-NEXT:    flat_load_dword v3, v[0:1]5709; GCN2-NEXT:    s_mov_b64 s[4:5], 05710; GCN2-NEXT:  .LBB96_1: ; %atomicrmw.start5711; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=15712; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5713; GCN2-NEXT:    v_mov_b32_e32 v4, v35714; GCN2-NEXT:    v_max_u32_e32 v3, v4, v25715; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc5716; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5717; GCN2-NEXT:    buffer_wbinvl1_vol5718; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v45719; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5720; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]5721; GCN2-NEXT:    s_cbranch_execnz .LBB96_15722; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end5723; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]5724; GCN2-NEXT:    v_mov_b32_e32 v0, v35725; GCN2-NEXT:    s_setpc_b64 s[30:31]5726;5727; GCN3-LABEL: flat_atomic_umax_i32_ret:5728; GCN3:       ; %bb.0:5729; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5730; GCN3-NEXT:    flat_load_dword v3, v[0:1]5731; GCN3-NEXT:    s_mov_b64 s[4:5], 05732; GCN3-NEXT:  .LBB96_1: ; %atomicrmw.start5733; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=15734; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5735; GCN3-NEXT:    v_mov_b32_e32 v4, v35736; GCN3-NEXT:    v_max_u32_e32 v3, v4, v25737; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc5738; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5739; GCN3-NEXT:    buffer_wbinvl1_vol5740; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v45741; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5742; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]5743; GCN3-NEXT:    s_cbranch_execnz .LBB96_15744; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end5745; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]5746; GCN3-NEXT:    v_mov_b32_e32 v0, v35747; GCN3-NEXT:    s_setpc_b64 s[30:31]5748  %result = atomicrmw umax ptr %ptr, i32 %in seq_cst5749  ret i32 %result5750}5751 5752define i32 @flat_atomic_umax_i32_ret_offset(ptr %out, i32 %in) {5753; GCN1-LABEL: flat_atomic_umax_i32_ret_offset:5754; GCN1:       ; %bb.0:5755; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5756; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 16, v05757; GCN1-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc5758; GCN1-NEXT:    flat_load_dword v0, v[3:4]5759; GCN1-NEXT:    s_mov_b64 s[4:5], 05760; GCN1-NEXT:  .LBB97_1: ; %atomicrmw.start5761; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=15762; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5763; GCN1-NEXT:    v_mov_b32_e32 v1, v05764; GCN1-NEXT:    v_max_u32_e32 v0, v1, v25765; GCN1-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc5766; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5767; GCN1-NEXT:    buffer_wbinvl1_vol5768; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v15769; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5770; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]5771; GCN1-NEXT:    s_cbranch_execnz .LBB97_15772; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end5773; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]5774; GCN1-NEXT:    s_setpc_b64 s[30:31]5775;5776; GCN2-LABEL: flat_atomic_umax_i32_ret_offset:5777; GCN2:       ; %bb.0:5778; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5779; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 16, v05780; GCN2-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc5781; GCN2-NEXT:    flat_load_dword v0, v[3:4]5782; GCN2-NEXT:    s_mov_b64 s[4:5], 05783; GCN2-NEXT:  .LBB97_1: ; %atomicrmw.start5784; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=15785; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5786; GCN2-NEXT:    v_mov_b32_e32 v1, v05787; GCN2-NEXT:    v_max_u32_e32 v0, v1, v25788; GCN2-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc5789; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5790; GCN2-NEXT:    buffer_wbinvl1_vol5791; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v15792; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5793; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]5794; GCN2-NEXT:    s_cbranch_execnz .LBB97_15795; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end5796; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]5797; GCN2-NEXT:    s_setpc_b64 s[30:31]5798;5799; GCN3-LABEL: flat_atomic_umax_i32_ret_offset:5800; GCN3:       ; %bb.0:5801; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5802; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:165803; GCN3-NEXT:    s_mov_b64 s[4:5], 05804; GCN3-NEXT:  .LBB97_1: ; %atomicrmw.start5805; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=15806; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5807; GCN3-NEXT:    v_mov_b32_e32 v4, v35808; GCN3-NEXT:    v_max_u32_e32 v3, v4, v25809; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc5810; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5811; GCN3-NEXT:    buffer_wbinvl1_vol5812; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v45813; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]5814; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]5815; GCN3-NEXT:    s_cbranch_execnz .LBB97_15816; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end5817; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]5818; GCN3-NEXT:    v_mov_b32_e32 v0, v35819; GCN3-NEXT:    s_setpc_b64 s[30:31]5820  %gep = getelementptr inbounds i32, ptr %out, i32 45821  %result = atomicrmw umax ptr %gep, i32 %in seq_cst5822  ret i32 %result5823}5824 5825define amdgpu_gfx void @flat_atomic_umax_i32_noret_scalar(ptr inreg %ptr, i32 inreg %in) {5826; GCN1-LABEL: flat_atomic_umax_i32_noret_scalar:5827; GCN1:       ; %bb.0:5828; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5829; GCN1-NEXT:    v_mov_b32_e32 v0, s45830; GCN1-NEXT:    v_mov_b32_e32 v1, s55831; GCN1-NEXT:    flat_load_dword v3, v[0:1]5832; GCN1-NEXT:    s_mov_b64 s[34:35], 05833; GCN1-NEXT:  .LBB98_1: ; %atomicrmw.start5834; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=15835; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5836; GCN1-NEXT:    v_max_u32_e32 v2, s6, v35837; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5838; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5839; GCN1-NEXT:    buffer_wbinvl1_vol5840; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35841; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]5842; GCN1-NEXT:    v_mov_b32_e32 v3, v25843; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]5844; GCN1-NEXT:    s_cbranch_execnz .LBB98_15845; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end5846; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]5847; GCN1-NEXT:    s_setpc_b64 s[30:31]5848;5849; GCN2-LABEL: flat_atomic_umax_i32_noret_scalar:5850; GCN2:       ; %bb.0:5851; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5852; GCN2-NEXT:    v_mov_b32_e32 v0, s45853; GCN2-NEXT:    v_mov_b32_e32 v1, s55854; GCN2-NEXT:    flat_load_dword v3, v[0:1]5855; GCN2-NEXT:    s_mov_b64 s[34:35], 05856; GCN2-NEXT:  .LBB98_1: ; %atomicrmw.start5857; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=15858; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5859; GCN2-NEXT:    v_max_u32_e32 v2, s6, v35860; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5861; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5862; GCN2-NEXT:    buffer_wbinvl1_vol5863; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35864; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]5865; GCN2-NEXT:    v_mov_b32_e32 v3, v25866; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]5867; GCN2-NEXT:    s_cbranch_execnz .LBB98_15868; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end5869; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]5870; GCN2-NEXT:    s_setpc_b64 s[30:31]5871;5872; GCN3-LABEL: flat_atomic_umax_i32_noret_scalar:5873; GCN3:       ; %bb.0:5874; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5875; GCN3-NEXT:    v_mov_b32_e32 v0, s45876; GCN3-NEXT:    v_mov_b32_e32 v1, s55877; GCN3-NEXT:    flat_load_dword v3, v[0:1]5878; GCN3-NEXT:    s_mov_b64 s[34:35], 05879; GCN3-NEXT:  .LBB98_1: ; %atomicrmw.start5880; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=15881; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5882; GCN3-NEXT:    v_max_u32_e32 v2, s6, v35883; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5884; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5885; GCN3-NEXT:    buffer_wbinvl1_vol5886; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35887; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]5888; GCN3-NEXT:    v_mov_b32_e32 v3, v25889; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]5890; GCN3-NEXT:    s_cbranch_execnz .LBB98_15891; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end5892; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]5893; GCN3-NEXT:    s_setpc_b64 s[30:31]5894  %tmp0 = atomicrmw umax ptr %ptr, i32 %in seq_cst5895  ret void5896}5897 5898define amdgpu_gfx void @flat_atomic_umax_i32_noret_offset_scalar(ptr inreg %out, i32 inreg %in) {5899; GCN1-LABEL: flat_atomic_umax_i32_noret_offset_scalar:5900; GCN1:       ; %bb.0:5901; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5902; GCN1-NEXT:    s_add_u32 s34, s4, 165903; GCN1-NEXT:    s_addc_u32 s35, s5, 05904; GCN1-NEXT:    v_mov_b32_e32 v0, s345905; GCN1-NEXT:    v_mov_b32_e32 v1, s355906; GCN1-NEXT:    flat_load_dword v3, v[0:1]5907; GCN1-NEXT:    s_mov_b64 s[34:35], 05908; GCN1-NEXT:  .LBB99_1: ; %atomicrmw.start5909; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=15910; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5911; GCN1-NEXT:    v_max_u32_e32 v2, s6, v35912; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5913; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5914; GCN1-NEXT:    buffer_wbinvl1_vol5915; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35916; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]5917; GCN1-NEXT:    v_mov_b32_e32 v3, v25918; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]5919; GCN1-NEXT:    s_cbranch_execnz .LBB99_15920; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end5921; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]5922; GCN1-NEXT:    s_setpc_b64 s[30:31]5923;5924; GCN2-LABEL: flat_atomic_umax_i32_noret_offset_scalar:5925; GCN2:       ; %bb.0:5926; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5927; GCN2-NEXT:    s_add_u32 s34, s4, 165928; GCN2-NEXT:    s_addc_u32 s35, s5, 05929; GCN2-NEXT:    v_mov_b32_e32 v0, s345930; GCN2-NEXT:    v_mov_b32_e32 v1, s355931; GCN2-NEXT:    flat_load_dword v3, v[0:1]5932; GCN2-NEXT:    s_mov_b64 s[34:35], 05933; GCN2-NEXT:  .LBB99_1: ; %atomicrmw.start5934; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=15935; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5936; GCN2-NEXT:    v_max_u32_e32 v2, s6, v35937; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc5938; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5939; GCN2-NEXT:    buffer_wbinvl1_vol5940; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35941; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]5942; GCN2-NEXT:    v_mov_b32_e32 v3, v25943; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]5944; GCN2-NEXT:    s_cbranch_execnz .LBB99_15945; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end5946; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]5947; GCN2-NEXT:    s_setpc_b64 s[30:31]5948;5949; GCN3-LABEL: flat_atomic_umax_i32_noret_offset_scalar:5950; GCN3:       ; %bb.0:5951; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5952; GCN3-NEXT:    v_mov_b32_e32 v0, s45953; GCN3-NEXT:    v_mov_b32_e32 v1, s55954; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:165955; GCN3-NEXT:    s_mov_b64 s[34:35], 05956; GCN3-NEXT:  .LBB99_1: ; %atomicrmw.start5957; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=15958; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5959; GCN3-NEXT:    v_max_u32_e32 v2, s6, v35960; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc5961; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5962; GCN3-NEXT:    buffer_wbinvl1_vol5963; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v35964; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]5965; GCN3-NEXT:    v_mov_b32_e32 v3, v25966; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]5967; GCN3-NEXT:    s_cbranch_execnz .LBB99_15968; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end5969; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]5970; GCN3-NEXT:    s_setpc_b64 s[30:31]5971  %gep = getelementptr inbounds i32, ptr %out, i32 45972  %tmp0 = atomicrmw umax ptr %gep, i32 %in seq_cst5973  ret void5974}5975 5976define amdgpu_gfx i32 @flat_atomic_umax_i32_ret_scalar(ptr inreg %ptr, i32 inreg %in) {5977; GCN1-LABEL: flat_atomic_umax_i32_ret_scalar:5978; GCN1:       ; %bb.0:5979; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5980; GCN1-NEXT:    v_mov_b32_e32 v0, s45981; GCN1-NEXT:    v_mov_b32_e32 v1, s55982; GCN1-NEXT:    flat_load_dword v0, v[0:1]5983; GCN1-NEXT:    v_mov_b32_e32 v1, s45984; GCN1-NEXT:    s_mov_b64 s[34:35], 05985; GCN1-NEXT:    v_mov_b32_e32 v2, s55986; GCN1-NEXT:  .LBB100_1: ; %atomicrmw.start5987; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=15988; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5989; GCN1-NEXT:    v_mov_b32_e32 v4, v05990; GCN1-NEXT:    v_max_u32_e32 v3, s6, v45991; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc5992; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)5993; GCN1-NEXT:    buffer_wbinvl1_vol5994; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v45995; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]5996; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]5997; GCN1-NEXT:    s_cbranch_execnz .LBB100_15998; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end5999; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]6000; GCN1-NEXT:    s_setpc_b64 s[30:31]6001;6002; GCN2-LABEL: flat_atomic_umax_i32_ret_scalar:6003; GCN2:       ; %bb.0:6004; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6005; GCN2-NEXT:    v_mov_b32_e32 v0, s46006; GCN2-NEXT:    v_mov_b32_e32 v1, s56007; GCN2-NEXT:    flat_load_dword v0, v[0:1]6008; GCN2-NEXT:    v_mov_b32_e32 v1, s46009; GCN2-NEXT:    s_mov_b64 s[34:35], 06010; GCN2-NEXT:    v_mov_b32_e32 v2, s56011; GCN2-NEXT:  .LBB100_1: ; %atomicrmw.start6012; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=16013; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6014; GCN2-NEXT:    v_mov_b32_e32 v4, v06015; GCN2-NEXT:    v_max_u32_e32 v3, s6, v46016; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc6017; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6018; GCN2-NEXT:    buffer_wbinvl1_vol6019; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v46020; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]6021; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]6022; GCN2-NEXT:    s_cbranch_execnz .LBB100_16023; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end6024; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]6025; GCN2-NEXT:    s_setpc_b64 s[30:31]6026;6027; GCN3-LABEL: flat_atomic_umax_i32_ret_scalar:6028; GCN3:       ; %bb.0:6029; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6030; GCN3-NEXT:    v_mov_b32_e32 v0, s46031; GCN3-NEXT:    v_mov_b32_e32 v1, s56032; GCN3-NEXT:    flat_load_dword v0, v[0:1]6033; GCN3-NEXT:    v_mov_b32_e32 v1, s46034; GCN3-NEXT:    s_mov_b64 s[34:35], 06035; GCN3-NEXT:    v_mov_b32_e32 v2, s56036; GCN3-NEXT:  .LBB100_1: ; %atomicrmw.start6037; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=16038; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6039; GCN3-NEXT:    v_mov_b32_e32 v4, v06040; GCN3-NEXT:    v_max_u32_e32 v3, s6, v46041; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc6042; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6043; GCN3-NEXT:    buffer_wbinvl1_vol6044; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v46045; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]6046; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]6047; GCN3-NEXT:    s_cbranch_execnz .LBB100_16048; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end6049; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]6050; GCN3-NEXT:    s_setpc_b64 s[30:31]6051  %result = atomicrmw umax ptr %ptr, i32 %in seq_cst6052  ret i32 %result6053}6054 6055define amdgpu_gfx i32 @flat_atomic_umax_i32_ret_offset_scalar(ptr inreg %out, i32 inreg %in) {6056; GCN1-LABEL: flat_atomic_umax_i32_ret_offset_scalar:6057; GCN1:       ; %bb.0:6058; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6059; GCN1-NEXT:    s_add_u32 s34, s4, 166060; GCN1-NEXT:    s_addc_u32 s35, s5, 06061; GCN1-NEXT:    v_mov_b32_e32 v1, s346062; GCN1-NEXT:    v_mov_b32_e32 v2, s356063; GCN1-NEXT:    flat_load_dword v0, v[1:2]6064; GCN1-NEXT:    s_mov_b64 s[34:35], 06065; GCN1-NEXT:  .LBB101_1: ; %atomicrmw.start6066; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=16067; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6068; GCN1-NEXT:    v_mov_b32_e32 v4, v06069; GCN1-NEXT:    v_max_u32_e32 v3, s6, v46070; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc6071; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6072; GCN1-NEXT:    buffer_wbinvl1_vol6073; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v46074; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]6075; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]6076; GCN1-NEXT:    s_cbranch_execnz .LBB101_16077; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end6078; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]6079; GCN1-NEXT:    s_setpc_b64 s[30:31]6080;6081; GCN2-LABEL: flat_atomic_umax_i32_ret_offset_scalar:6082; GCN2:       ; %bb.0:6083; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6084; GCN2-NEXT:    s_add_u32 s34, s4, 166085; GCN2-NEXT:    s_addc_u32 s35, s5, 06086; GCN2-NEXT:    v_mov_b32_e32 v1, s346087; GCN2-NEXT:    v_mov_b32_e32 v2, s356088; GCN2-NEXT:    flat_load_dword v0, v[1:2]6089; GCN2-NEXT:    s_mov_b64 s[34:35], 06090; GCN2-NEXT:  .LBB101_1: ; %atomicrmw.start6091; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=16092; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6093; GCN2-NEXT:    v_mov_b32_e32 v4, v06094; GCN2-NEXT:    v_max_u32_e32 v3, s6, v46095; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc6096; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6097; GCN2-NEXT:    buffer_wbinvl1_vol6098; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v46099; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]6100; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]6101; GCN2-NEXT:    s_cbranch_execnz .LBB101_16102; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end6103; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]6104; GCN2-NEXT:    s_setpc_b64 s[30:31]6105;6106; GCN3-LABEL: flat_atomic_umax_i32_ret_offset_scalar:6107; GCN3:       ; %bb.0:6108; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6109; GCN3-NEXT:    v_mov_b32_e32 v0, s46110; GCN3-NEXT:    v_mov_b32_e32 v1, s56111; GCN3-NEXT:    flat_load_dword v0, v[0:1] offset:166112; GCN3-NEXT:    v_mov_b32_e32 v1, s46113; GCN3-NEXT:    s_mov_b64 s[34:35], 06114; GCN3-NEXT:    v_mov_b32_e32 v2, s56115; GCN3-NEXT:  .LBB101_1: ; %atomicrmw.start6116; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=16117; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6118; GCN3-NEXT:    v_mov_b32_e32 v4, v06119; GCN3-NEXT:    v_max_u32_e32 v3, s6, v46120; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] offset:16 glc6121; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6122; GCN3-NEXT:    buffer_wbinvl1_vol6123; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v46124; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]6125; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]6126; GCN3-NEXT:    s_cbranch_execnz .LBB101_16127; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end6128; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]6129; GCN3-NEXT:    s_setpc_b64 s[30:31]6130  %gep = getelementptr inbounds i32, ptr %out, i32 46131  %result = atomicrmw umax ptr %gep, i32 %in seq_cst6132  ret i32 %result6133}6134 6135define amdgpu_kernel void @atomic_umax_i32_addr64_offset(ptr %out, i32 %in, i32 %index) {6136; GCN1-LABEL: atomic_umax_i32_addr64_offset:6137; GCN1:       ; %bb.0: ; %entry6138; GCN1-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x96139; GCN1-NEXT:    s_waitcnt lgkmcnt(0)6140; GCN1-NEXT:    s_ashr_i32 s5, s3, 316141; GCN1-NEXT:    s_mov_b32 s4, s36142; GCN1-NEXT:    s_lshl_b64 s[4:5], s[4:5], 26143; GCN1-NEXT:    s_add_u32 s0, s0, s46144; GCN1-NEXT:    s_addc_u32 s1, s1, s56145; GCN1-NEXT:    s_add_u32 s0, s0, 166146; GCN1-NEXT:    s_addc_u32 s1, s1, 06147; GCN1-NEXT:    v_mov_b32_e32 v0, s06148; GCN1-NEXT:    v_mov_b32_e32 v1, s16149; GCN1-NEXT:    flat_load_dword v3, v[0:1]6150; GCN1-NEXT:    s_mov_b64 s[0:1], 06151; GCN1-NEXT:  .LBB102_1: ; %atomicrmw.start6152; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=16153; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6154; GCN1-NEXT:    v_max_u32_e32 v2, s2, v36155; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc6156; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6157; GCN1-NEXT:    buffer_wbinvl1_vol6158; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36159; GCN1-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6160; GCN1-NEXT:    v_mov_b32_e32 v3, v26161; GCN1-NEXT:    s_andn2_b64 exec, exec, s[0:1]6162; GCN1-NEXT:    s_cbranch_execnz .LBB102_16163; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end6164; GCN1-NEXT:    s_endpgm6165;6166; GCN2-LABEL: atomic_umax_i32_addr64_offset:6167; GCN2:       ; %bb.0: ; %entry6168; GCN2-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x246169; GCN2-NEXT:    s_waitcnt lgkmcnt(0)6170; GCN2-NEXT:    s_ashr_i32 s5, s3, 316171; GCN2-NEXT:    s_mov_b32 s4, s36172; GCN2-NEXT:    s_lshl_b64 s[4:5], s[4:5], 26173; GCN2-NEXT:    s_add_u32 s0, s0, s46174; GCN2-NEXT:    s_addc_u32 s1, s1, s56175; GCN2-NEXT:    s_add_u32 s0, s0, 166176; GCN2-NEXT:    s_addc_u32 s1, s1, 06177; GCN2-NEXT:    v_mov_b32_e32 v0, s06178; GCN2-NEXT:    v_mov_b32_e32 v1, s16179; GCN2-NEXT:    flat_load_dword v3, v[0:1]6180; GCN2-NEXT:    s_mov_b64 s[0:1], 06181; GCN2-NEXT:  .LBB102_1: ; %atomicrmw.start6182; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=16183; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6184; GCN2-NEXT:    v_max_u32_e32 v2, s2, v36185; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc6186; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6187; GCN2-NEXT:    buffer_wbinvl1_vol6188; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36189; GCN2-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6190; GCN2-NEXT:    v_mov_b32_e32 v3, v26191; GCN2-NEXT:    s_andn2_b64 exec, exec, s[0:1]6192; GCN2-NEXT:    s_cbranch_execnz .LBB102_16193; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end6194; GCN2-NEXT:    s_endpgm6195;6196; GCN3-LABEL: atomic_umax_i32_addr64_offset:6197; GCN3:       ; %bb.0: ; %entry6198; GCN3-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x246199; GCN3-NEXT:    s_waitcnt lgkmcnt(0)6200; GCN3-NEXT:    s_ashr_i32 s5, s3, 316201; GCN3-NEXT:    s_mov_b32 s4, s36202; GCN3-NEXT:    s_lshl_b64 s[4:5], s[4:5], 26203; GCN3-NEXT:    s_add_u32 s0, s0, s46204; GCN3-NEXT:    s_addc_u32 s1, s1, s56205; GCN3-NEXT:    v_mov_b32_e32 v0, s06206; GCN3-NEXT:    v_mov_b32_e32 v1, s16207; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:166208; GCN3-NEXT:    s_mov_b64 s[0:1], 06209; GCN3-NEXT:  .LBB102_1: ; %atomicrmw.start6210; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=16211; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6212; GCN3-NEXT:    v_max_u32_e32 v2, s2, v36213; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc6214; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6215; GCN3-NEXT:    buffer_wbinvl1_vol6216; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36217; GCN3-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6218; GCN3-NEXT:    v_mov_b32_e32 v3, v26219; GCN3-NEXT:    s_andn2_b64 exec, exec, s[0:1]6220; GCN3-NEXT:    s_cbranch_execnz .LBB102_16221; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end6222; GCN3-NEXT:    s_endpgm6223entry:6224  %ptr = getelementptr inbounds i32, ptr %out, i32 %index6225  %gep = getelementptr inbounds i32, ptr %ptr, i32 46226  %tmp0 = atomicrmw umax ptr %gep, i32 %in seq_cst6227  ret void6228}6229 6230define amdgpu_kernel void @atomic_umax_i32_ret_addr64_offset(ptr %out, ptr %out2, i32 %in, i32 %index) {6231; GCN1-LABEL: atomic_umax_i32_ret_addr64_offset:6232; GCN1:       ; %bb.0: ; %entry6233; GCN1-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0xd6234; GCN1-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x96235; GCN1-NEXT:    s_waitcnt lgkmcnt(0)6236; GCN1-NEXT:    s_ashr_i32 s5, s7, 316237; GCN1-NEXT:    s_mov_b32 s4, s76238; GCN1-NEXT:    s_lshl_b64 s[4:5], s[4:5], 26239; GCN1-NEXT:    s_add_u32 s0, s0, s46240; GCN1-NEXT:    s_addc_u32 s1, s1, s56241; GCN1-NEXT:    s_add_u32 s0, s0, 166242; GCN1-NEXT:    s_addc_u32 s1, s1, 06243; GCN1-NEXT:    v_mov_b32_e32 v0, s06244; GCN1-NEXT:    v_mov_b32_e32 v1, s16245; GCN1-NEXT:    flat_load_dword v2, v[0:1]6246; GCN1-NEXT:    s_mov_b64 s[0:1], 06247; GCN1-NEXT:  .LBB103_1: ; %atomicrmw.start6248; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=16249; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6250; GCN1-NEXT:    v_mov_b32_e32 v3, v26251; GCN1-NEXT:    v_max_u32_e32 v2, s6, v36252; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc6253; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6254; GCN1-NEXT:    buffer_wbinvl1_vol6255; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36256; GCN1-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6257; GCN1-NEXT:    s_andn2_b64 exec, exec, s[0:1]6258; GCN1-NEXT:    s_cbranch_execnz .LBB103_16259; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end6260; GCN1-NEXT:    s_or_b64 exec, exec, s[0:1]6261; GCN1-NEXT:    v_mov_b32_e32 v0, s26262; GCN1-NEXT:    v_mov_b32_e32 v1, s36263; GCN1-NEXT:    flat_store_dword v[0:1], v26264; GCN1-NEXT:    s_endpgm6265;6266; GCN2-LABEL: atomic_umax_i32_ret_addr64_offset:6267; GCN2:       ; %bb.0: ; %entry6268; GCN2-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x346269; GCN2-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x246270; GCN2-NEXT:    s_waitcnt lgkmcnt(0)6271; GCN2-NEXT:    s_ashr_i32 s5, s7, 316272; GCN2-NEXT:    s_mov_b32 s4, s76273; GCN2-NEXT:    s_lshl_b64 s[4:5], s[4:5], 26274; GCN2-NEXT:    s_add_u32 s0, s0, s46275; GCN2-NEXT:    s_addc_u32 s1, s1, s56276; GCN2-NEXT:    s_add_u32 s0, s0, 166277; GCN2-NEXT:    s_addc_u32 s1, s1, 06278; GCN2-NEXT:    v_mov_b32_e32 v0, s06279; GCN2-NEXT:    v_mov_b32_e32 v1, s16280; GCN2-NEXT:    flat_load_dword v2, v[0:1]6281; GCN2-NEXT:    s_mov_b64 s[0:1], 06282; GCN2-NEXT:  .LBB103_1: ; %atomicrmw.start6283; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=16284; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6285; GCN2-NEXT:    v_mov_b32_e32 v3, v26286; GCN2-NEXT:    v_max_u32_e32 v2, s6, v36287; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc6288; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6289; GCN2-NEXT:    buffer_wbinvl1_vol6290; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36291; GCN2-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6292; GCN2-NEXT:    s_andn2_b64 exec, exec, s[0:1]6293; GCN2-NEXT:    s_cbranch_execnz .LBB103_16294; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end6295; GCN2-NEXT:    s_or_b64 exec, exec, s[0:1]6296; GCN2-NEXT:    v_mov_b32_e32 v0, s26297; GCN2-NEXT:    v_mov_b32_e32 v1, s36298; GCN2-NEXT:    flat_store_dword v[0:1], v26299; GCN2-NEXT:    s_endpgm6300;6301; GCN3-LABEL: atomic_umax_i32_ret_addr64_offset:6302; GCN3:       ; %bb.0: ; %entry6303; GCN3-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x346304; GCN3-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x246305; GCN3-NEXT:    s_waitcnt lgkmcnt(0)6306; GCN3-NEXT:    s_ashr_i32 s5, s7, 316307; GCN3-NEXT:    s_mov_b32 s4, s76308; GCN3-NEXT:    s_lshl_b64 s[4:5], s[4:5], 26309; GCN3-NEXT:    s_add_u32 s0, s0, s46310; GCN3-NEXT:    s_addc_u32 s1, s1, s56311; GCN3-NEXT:    v_mov_b32_e32 v0, s06312; GCN3-NEXT:    v_mov_b32_e32 v1, s16313; GCN3-NEXT:    flat_load_dword v2, v[0:1] offset:166314; GCN3-NEXT:    s_mov_b64 s[0:1], 06315; GCN3-NEXT:  .LBB103_1: ; %atomicrmw.start6316; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=16317; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6318; GCN3-NEXT:    v_mov_b32_e32 v3, v26319; GCN3-NEXT:    v_max_u32_e32 v2, s6, v36320; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc6321; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6322; GCN3-NEXT:    buffer_wbinvl1_vol6323; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36324; GCN3-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6325; GCN3-NEXT:    s_andn2_b64 exec, exec, s[0:1]6326; GCN3-NEXT:    s_cbranch_execnz .LBB103_16327; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end6328; GCN3-NEXT:    s_or_b64 exec, exec, s[0:1]6329; GCN3-NEXT:    v_mov_b32_e32 v0, s26330; GCN3-NEXT:    v_mov_b32_e32 v1, s36331; GCN3-NEXT:    flat_store_dword v[0:1], v26332; GCN3-NEXT:    s_endpgm6333entry:6334  %ptr = getelementptr inbounds i32, ptr %out, i32 %index6335  %gep = getelementptr inbounds i32, ptr %ptr, i32 46336  %tmp0 = atomicrmw umax ptr %gep, i32 %in seq_cst6337  store i32 %tmp0, ptr %out26338  ret void6339}6340 6341define amdgpu_kernel void @atomic_umax_i32_ret_addr64(ptr %out, ptr %out2, i32 %in, i32 %index) {6342; GCN1-LABEL: atomic_umax_i32_ret_addr64:6343; GCN1:       ; %bb.0: ; %entry6344; GCN1-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0xd6345; GCN1-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x96346; GCN1-NEXT:    s_waitcnt lgkmcnt(0)6347; GCN1-NEXT:    s_ashr_i32 s5, s7, 316348; GCN1-NEXT:    s_mov_b32 s4, s76349; GCN1-NEXT:    s_lshl_b64 s[4:5], s[4:5], 26350; GCN1-NEXT:    s_add_u32 s0, s0, s46351; GCN1-NEXT:    s_addc_u32 s1, s1, s56352; GCN1-NEXT:    v_mov_b32_e32 v0, s06353; GCN1-NEXT:    v_mov_b32_e32 v1, s16354; GCN1-NEXT:    flat_load_dword v2, v[0:1]6355; GCN1-NEXT:    s_mov_b64 s[0:1], 06356; GCN1-NEXT:  .LBB104_1: ; %atomicrmw.start6357; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=16358; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6359; GCN1-NEXT:    v_mov_b32_e32 v3, v26360; GCN1-NEXT:    v_max_u32_e32 v2, s6, v36361; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc6362; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6363; GCN1-NEXT:    buffer_wbinvl1_vol6364; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36365; GCN1-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6366; GCN1-NEXT:    s_andn2_b64 exec, exec, s[0:1]6367; GCN1-NEXT:    s_cbranch_execnz .LBB104_16368; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end6369; GCN1-NEXT:    s_or_b64 exec, exec, s[0:1]6370; GCN1-NEXT:    v_mov_b32_e32 v0, s26371; GCN1-NEXT:    v_mov_b32_e32 v1, s36372; GCN1-NEXT:    flat_store_dword v[0:1], v26373; GCN1-NEXT:    s_endpgm6374;6375; GCN2-LABEL: atomic_umax_i32_ret_addr64:6376; GCN2:       ; %bb.0: ; %entry6377; GCN2-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x346378; GCN2-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x246379; GCN2-NEXT:    s_waitcnt lgkmcnt(0)6380; GCN2-NEXT:    s_ashr_i32 s5, s7, 316381; GCN2-NEXT:    s_mov_b32 s4, s76382; GCN2-NEXT:    s_lshl_b64 s[4:5], s[4:5], 26383; GCN2-NEXT:    s_add_u32 s0, s0, s46384; GCN2-NEXT:    s_addc_u32 s1, s1, s56385; GCN2-NEXT:    v_mov_b32_e32 v0, s06386; GCN2-NEXT:    v_mov_b32_e32 v1, s16387; GCN2-NEXT:    flat_load_dword v2, v[0:1]6388; GCN2-NEXT:    s_mov_b64 s[0:1], 06389; GCN2-NEXT:  .LBB104_1: ; %atomicrmw.start6390; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=16391; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6392; GCN2-NEXT:    v_mov_b32_e32 v3, v26393; GCN2-NEXT:    v_max_u32_e32 v2, s6, v36394; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc6395; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6396; GCN2-NEXT:    buffer_wbinvl1_vol6397; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36398; GCN2-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6399; GCN2-NEXT:    s_andn2_b64 exec, exec, s[0:1]6400; GCN2-NEXT:    s_cbranch_execnz .LBB104_16401; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end6402; GCN2-NEXT:    s_or_b64 exec, exec, s[0:1]6403; GCN2-NEXT:    v_mov_b32_e32 v0, s26404; GCN2-NEXT:    v_mov_b32_e32 v1, s36405; GCN2-NEXT:    flat_store_dword v[0:1], v26406; GCN2-NEXT:    s_endpgm6407;6408; GCN3-LABEL: atomic_umax_i32_ret_addr64:6409; GCN3:       ; %bb.0: ; %entry6410; GCN3-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x346411; GCN3-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x246412; GCN3-NEXT:    s_waitcnt lgkmcnt(0)6413; GCN3-NEXT:    s_ashr_i32 s5, s7, 316414; GCN3-NEXT:    s_mov_b32 s4, s76415; GCN3-NEXT:    s_lshl_b64 s[4:5], s[4:5], 26416; GCN3-NEXT:    s_add_u32 s0, s0, s46417; GCN3-NEXT:    s_addc_u32 s1, s1, s56418; GCN3-NEXT:    v_mov_b32_e32 v0, s06419; GCN3-NEXT:    v_mov_b32_e32 v1, s16420; GCN3-NEXT:    flat_load_dword v2, v[0:1]6421; GCN3-NEXT:    s_mov_b64 s[0:1], 06422; GCN3-NEXT:  .LBB104_1: ; %atomicrmw.start6423; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=16424; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6425; GCN3-NEXT:    v_mov_b32_e32 v3, v26426; GCN3-NEXT:    v_max_u32_e32 v2, s6, v36427; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc6428; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6429; GCN3-NEXT:    buffer_wbinvl1_vol6430; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36431; GCN3-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]6432; GCN3-NEXT:    s_andn2_b64 exec, exec, s[0:1]6433; GCN3-NEXT:    s_cbranch_execnz .LBB104_16434; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end6435; GCN3-NEXT:    s_or_b64 exec, exec, s[0:1]6436; GCN3-NEXT:    v_mov_b32_e32 v0, s26437; GCN3-NEXT:    v_mov_b32_e32 v1, s36438; GCN3-NEXT:    flat_store_dword v[0:1], v26439; GCN3-NEXT:    s_endpgm6440entry:6441  %ptr = getelementptr inbounds i32, ptr %out, i32 %index6442  %tmp0 = atomicrmw umax ptr %ptr, i32 %in seq_cst6443  store i32 %tmp0, ptr %out26444  ret void6445}6446 6447define void @flat_umax_i32_noret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {6448; GCN1-LABEL: flat_umax_i32_noret_offset__amdgpu_no_remote_memory:6449; GCN1:       ; %bb.0:6450; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6451; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v06452; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc6453; GCN1-NEXT:    flat_atomic_umax v[0:1], v26454; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6455; GCN1-NEXT:    buffer_wbinvl1_vol6456; GCN1-NEXT:    s_setpc_b64 s[30:31]6457;6458; GCN2-LABEL: flat_umax_i32_noret_offset__amdgpu_no_remote_memory:6459; GCN2:       ; %bb.0:6460; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6461; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v06462; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc6463; GCN2-NEXT:    flat_atomic_umax v[0:1], v26464; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6465; GCN2-NEXT:    buffer_wbinvl1_vol6466; GCN2-NEXT:    s_setpc_b64 s[30:31]6467;6468; GCN3-LABEL: flat_umax_i32_noret_offset__amdgpu_no_remote_memory:6469; GCN3:       ; %bb.0:6470; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6471; GCN3-NEXT:    flat_atomic_umax v[0:1], v2 offset:166472; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6473; GCN3-NEXT:    buffer_wbinvl1_vol6474; GCN3-NEXT:    s_setpc_b64 s[30:31]6475  %gep = getelementptr inbounds i32, ptr %out, i64 46476  %tmp0 = atomicrmw umax ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !06477  ret void6478}6479 6480define i32 @flat_atomic_umax_i32_ret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {6481; GCN1-LABEL: flat_atomic_umax_i32_ret_offset__amdgpu_no_remote_memory:6482; GCN1:       ; %bb.0:6483; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6484; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v06485; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc6486; GCN1-NEXT:    flat_atomic_umax v0, v[0:1], v2 glc6487; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6488; GCN1-NEXT:    buffer_wbinvl1_vol6489; GCN1-NEXT:    s_setpc_b64 s[30:31]6490;6491; GCN2-LABEL: flat_atomic_umax_i32_ret_offset__amdgpu_no_remote_memory:6492; GCN2:       ; %bb.0:6493; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6494; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v06495; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc6496; GCN2-NEXT:    flat_atomic_umax v0, v[0:1], v2 glc6497; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6498; GCN2-NEXT:    buffer_wbinvl1_vol6499; GCN2-NEXT:    s_setpc_b64 s[30:31]6500;6501; GCN3-LABEL: flat_atomic_umax_i32_ret_offset__amdgpu_no_remote_memory:6502; GCN3:       ; %bb.0:6503; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6504; GCN3-NEXT:    flat_atomic_umax v0, v[0:1], v2 offset:16 glc6505; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6506; GCN3-NEXT:    buffer_wbinvl1_vol6507; GCN3-NEXT:    s_setpc_b64 s[30:31]6508  %gep = getelementptr inbounds i32, ptr %out, i64 46509  %result = atomicrmw umax ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !06510  ret i32 %result6511}6512 6513; ---------------------------------------------------------------------6514; atomicrmw umin6515; ---------------------------------------------------------------------6516 6517define void @flat_atomic_umin_i32_noret(ptr %ptr, i32 %in) {6518; GCN1-LABEL: flat_atomic_umin_i32_noret:6519; GCN1:       ; %bb.0:6520; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6521; GCN1-NEXT:    flat_load_dword v4, v[0:1]6522; GCN1-NEXT:    s_mov_b64 s[4:5], 06523; GCN1-NEXT:  .LBB107_1: ; %atomicrmw.start6524; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=16525; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6526; GCN1-NEXT:    v_min_u32_e32 v3, v4, v26527; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc6528; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6529; GCN1-NEXT:    buffer_wbinvl1_vol6530; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v46531; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6532; GCN1-NEXT:    v_mov_b32_e32 v4, v36533; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]6534; GCN1-NEXT:    s_cbranch_execnz .LBB107_16535; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end6536; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]6537; GCN1-NEXT:    s_setpc_b64 s[30:31]6538;6539; GCN2-LABEL: flat_atomic_umin_i32_noret:6540; GCN2:       ; %bb.0:6541; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6542; GCN2-NEXT:    flat_load_dword v4, v[0:1]6543; GCN2-NEXT:    s_mov_b64 s[4:5], 06544; GCN2-NEXT:  .LBB107_1: ; %atomicrmw.start6545; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=16546; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6547; GCN2-NEXT:    v_min_u32_e32 v3, v4, v26548; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc6549; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6550; GCN2-NEXT:    buffer_wbinvl1_vol6551; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v46552; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6553; GCN2-NEXT:    v_mov_b32_e32 v4, v36554; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]6555; GCN2-NEXT:    s_cbranch_execnz .LBB107_16556; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end6557; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]6558; GCN2-NEXT:    s_setpc_b64 s[30:31]6559;6560; GCN3-LABEL: flat_atomic_umin_i32_noret:6561; GCN3:       ; %bb.0:6562; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6563; GCN3-NEXT:    flat_load_dword v4, v[0:1]6564; GCN3-NEXT:    s_mov_b64 s[4:5], 06565; GCN3-NEXT:  .LBB107_1: ; %atomicrmw.start6566; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=16567; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6568; GCN3-NEXT:    v_min_u32_e32 v3, v4, v26569; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc6570; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6571; GCN3-NEXT:    buffer_wbinvl1_vol6572; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v46573; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6574; GCN3-NEXT:    v_mov_b32_e32 v4, v36575; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]6576; GCN3-NEXT:    s_cbranch_execnz .LBB107_16577; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end6578; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]6579; GCN3-NEXT:    s_setpc_b64 s[30:31]6580  %tmp0 = atomicrmw umin ptr %ptr, i32 %in seq_cst6581  ret void6582}6583 6584define void @flat_atomic_umin_i32_noret_offset(ptr %out, i32 %in) {6585; GCN1-LABEL: flat_atomic_umin_i32_noret_offset:6586; GCN1:       ; %bb.0:6587; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6588; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v06589; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc6590; GCN1-NEXT:    flat_load_dword v4, v[0:1]6591; GCN1-NEXT:    s_mov_b64 s[4:5], 06592; GCN1-NEXT:  .LBB108_1: ; %atomicrmw.start6593; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=16594; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6595; GCN1-NEXT:    v_min_u32_e32 v3, v4, v26596; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc6597; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6598; GCN1-NEXT:    buffer_wbinvl1_vol6599; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v46600; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6601; GCN1-NEXT:    v_mov_b32_e32 v4, v36602; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]6603; GCN1-NEXT:    s_cbranch_execnz .LBB108_16604; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end6605; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]6606; GCN1-NEXT:    s_setpc_b64 s[30:31]6607;6608; GCN2-LABEL: flat_atomic_umin_i32_noret_offset:6609; GCN2:       ; %bb.0:6610; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6611; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v06612; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc6613; GCN2-NEXT:    flat_load_dword v4, v[0:1]6614; GCN2-NEXT:    s_mov_b64 s[4:5], 06615; GCN2-NEXT:  .LBB108_1: ; %atomicrmw.start6616; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=16617; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6618; GCN2-NEXT:    v_min_u32_e32 v3, v4, v26619; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc6620; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6621; GCN2-NEXT:    buffer_wbinvl1_vol6622; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v46623; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6624; GCN2-NEXT:    v_mov_b32_e32 v4, v36625; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]6626; GCN2-NEXT:    s_cbranch_execnz .LBB108_16627; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end6628; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]6629; GCN2-NEXT:    s_setpc_b64 s[30:31]6630;6631; GCN3-LABEL: flat_atomic_umin_i32_noret_offset:6632; GCN3:       ; %bb.0:6633; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6634; GCN3-NEXT:    flat_load_dword v4, v[0:1] offset:166635; GCN3-NEXT:    s_mov_b64 s[4:5], 06636; GCN3-NEXT:  .LBB108_1: ; %atomicrmw.start6637; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=16638; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6639; GCN3-NEXT:    v_min_u32_e32 v3, v4, v26640; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc6641; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6642; GCN3-NEXT:    buffer_wbinvl1_vol6643; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v46644; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6645; GCN3-NEXT:    v_mov_b32_e32 v4, v36646; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]6647; GCN3-NEXT:    s_cbranch_execnz .LBB108_16648; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end6649; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]6650; GCN3-NEXT:    s_setpc_b64 s[30:31]6651  %gep = getelementptr inbounds i32, ptr %out, i32 46652  %tmp0 = atomicrmw umin ptr %gep, i32 %in seq_cst6653  ret void6654}6655 6656define i32 @flat_atomic_umin_i32_ret(ptr %ptr, i32 %in) {6657; GCN1-LABEL: flat_atomic_umin_i32_ret:6658; GCN1:       ; %bb.0:6659; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6660; GCN1-NEXT:    flat_load_dword v3, v[0:1]6661; GCN1-NEXT:    s_mov_b64 s[4:5], 06662; GCN1-NEXT:  .LBB109_1: ; %atomicrmw.start6663; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=16664; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6665; GCN1-NEXT:    v_mov_b32_e32 v4, v36666; GCN1-NEXT:    v_min_u32_e32 v3, v4, v26667; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc6668; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6669; GCN1-NEXT:    buffer_wbinvl1_vol6670; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v46671; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6672; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]6673; GCN1-NEXT:    s_cbranch_execnz .LBB109_16674; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end6675; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]6676; GCN1-NEXT:    v_mov_b32_e32 v0, v36677; GCN1-NEXT:    s_setpc_b64 s[30:31]6678;6679; GCN2-LABEL: flat_atomic_umin_i32_ret:6680; GCN2:       ; %bb.0:6681; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6682; GCN2-NEXT:    flat_load_dword v3, v[0:1]6683; GCN2-NEXT:    s_mov_b64 s[4:5], 06684; GCN2-NEXT:  .LBB109_1: ; %atomicrmw.start6685; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=16686; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6687; GCN2-NEXT:    v_mov_b32_e32 v4, v36688; GCN2-NEXT:    v_min_u32_e32 v3, v4, v26689; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc6690; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6691; GCN2-NEXT:    buffer_wbinvl1_vol6692; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v46693; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6694; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]6695; GCN2-NEXT:    s_cbranch_execnz .LBB109_16696; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end6697; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]6698; GCN2-NEXT:    v_mov_b32_e32 v0, v36699; GCN2-NEXT:    s_setpc_b64 s[30:31]6700;6701; GCN3-LABEL: flat_atomic_umin_i32_ret:6702; GCN3:       ; %bb.0:6703; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6704; GCN3-NEXT:    flat_load_dword v3, v[0:1]6705; GCN3-NEXT:    s_mov_b64 s[4:5], 06706; GCN3-NEXT:  .LBB109_1: ; %atomicrmw.start6707; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=16708; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6709; GCN3-NEXT:    v_mov_b32_e32 v4, v36710; GCN3-NEXT:    v_min_u32_e32 v3, v4, v26711; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc6712; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6713; GCN3-NEXT:    buffer_wbinvl1_vol6714; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v46715; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6716; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]6717; GCN3-NEXT:    s_cbranch_execnz .LBB109_16718; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end6719; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]6720; GCN3-NEXT:    v_mov_b32_e32 v0, v36721; GCN3-NEXT:    s_setpc_b64 s[30:31]6722  %result = atomicrmw umin ptr %ptr, i32 %in seq_cst6723  ret i32 %result6724}6725 6726define i32 @flat_atomic_umin_i32_ret_offset(ptr %out, i32 %in) {6727; GCN1-LABEL: flat_atomic_umin_i32_ret_offset:6728; GCN1:       ; %bb.0:6729; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6730; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 16, v06731; GCN1-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc6732; GCN1-NEXT:    flat_load_dword v0, v[3:4]6733; GCN1-NEXT:    s_mov_b64 s[4:5], 06734; GCN1-NEXT:  .LBB110_1: ; %atomicrmw.start6735; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=16736; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6737; GCN1-NEXT:    v_mov_b32_e32 v1, v06738; GCN1-NEXT:    v_min_u32_e32 v0, v1, v26739; GCN1-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc6740; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6741; GCN1-NEXT:    buffer_wbinvl1_vol6742; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v16743; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6744; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]6745; GCN1-NEXT:    s_cbranch_execnz .LBB110_16746; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end6747; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]6748; GCN1-NEXT:    s_setpc_b64 s[30:31]6749;6750; GCN2-LABEL: flat_atomic_umin_i32_ret_offset:6751; GCN2:       ; %bb.0:6752; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6753; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 16, v06754; GCN2-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc6755; GCN2-NEXT:    flat_load_dword v0, v[3:4]6756; GCN2-NEXT:    s_mov_b64 s[4:5], 06757; GCN2-NEXT:  .LBB110_1: ; %atomicrmw.start6758; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=16759; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6760; GCN2-NEXT:    v_mov_b32_e32 v1, v06761; GCN2-NEXT:    v_min_u32_e32 v0, v1, v26762; GCN2-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc6763; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6764; GCN2-NEXT:    buffer_wbinvl1_vol6765; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v16766; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6767; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]6768; GCN2-NEXT:    s_cbranch_execnz .LBB110_16769; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end6770; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]6771; GCN2-NEXT:    s_setpc_b64 s[30:31]6772;6773; GCN3-LABEL: flat_atomic_umin_i32_ret_offset:6774; GCN3:       ; %bb.0:6775; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6776; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:166777; GCN3-NEXT:    s_mov_b64 s[4:5], 06778; GCN3-NEXT:  .LBB110_1: ; %atomicrmw.start6779; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=16780; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6781; GCN3-NEXT:    v_mov_b32_e32 v4, v36782; GCN3-NEXT:    v_min_u32_e32 v3, v4, v26783; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc6784; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6785; GCN3-NEXT:    buffer_wbinvl1_vol6786; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v46787; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]6788; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]6789; GCN3-NEXT:    s_cbranch_execnz .LBB110_16790; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end6791; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]6792; GCN3-NEXT:    v_mov_b32_e32 v0, v36793; GCN3-NEXT:    s_setpc_b64 s[30:31]6794  %gep = getelementptr inbounds i32, ptr %out, i32 46795  %result = atomicrmw umin ptr %gep, i32 %in seq_cst6796  ret i32 %result6797}6798 6799define amdgpu_gfx void @flat_atomic_umin_i32_noret_scalar(ptr inreg %ptr, i32 inreg %in) {6800; GCN1-LABEL: flat_atomic_umin_i32_noret_scalar:6801; GCN1:       ; %bb.0:6802; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6803; GCN1-NEXT:    v_mov_b32_e32 v0, s46804; GCN1-NEXT:    v_mov_b32_e32 v1, s56805; GCN1-NEXT:    flat_load_dword v3, v[0:1]6806; GCN1-NEXT:    s_mov_b64 s[34:35], 06807; GCN1-NEXT:  .LBB111_1: ; %atomicrmw.start6808; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=16809; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6810; GCN1-NEXT:    v_min_u32_e32 v2, s6, v36811; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc6812; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6813; GCN1-NEXT:    buffer_wbinvl1_vol6814; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36815; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]6816; GCN1-NEXT:    v_mov_b32_e32 v3, v26817; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]6818; GCN1-NEXT:    s_cbranch_execnz .LBB111_16819; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end6820; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]6821; GCN1-NEXT:    s_setpc_b64 s[30:31]6822;6823; GCN2-LABEL: flat_atomic_umin_i32_noret_scalar:6824; GCN2:       ; %bb.0:6825; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6826; GCN2-NEXT:    v_mov_b32_e32 v0, s46827; GCN2-NEXT:    v_mov_b32_e32 v1, s56828; GCN2-NEXT:    flat_load_dword v3, v[0:1]6829; GCN2-NEXT:    s_mov_b64 s[34:35], 06830; GCN2-NEXT:  .LBB111_1: ; %atomicrmw.start6831; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=16832; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6833; GCN2-NEXT:    v_min_u32_e32 v2, s6, v36834; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc6835; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6836; GCN2-NEXT:    buffer_wbinvl1_vol6837; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36838; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]6839; GCN2-NEXT:    v_mov_b32_e32 v3, v26840; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]6841; GCN2-NEXT:    s_cbranch_execnz .LBB111_16842; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end6843; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]6844; GCN2-NEXT:    s_setpc_b64 s[30:31]6845;6846; GCN3-LABEL: flat_atomic_umin_i32_noret_scalar:6847; GCN3:       ; %bb.0:6848; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6849; GCN3-NEXT:    v_mov_b32_e32 v0, s46850; GCN3-NEXT:    v_mov_b32_e32 v1, s56851; GCN3-NEXT:    flat_load_dword v3, v[0:1]6852; GCN3-NEXT:    s_mov_b64 s[34:35], 06853; GCN3-NEXT:  .LBB111_1: ; %atomicrmw.start6854; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=16855; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6856; GCN3-NEXT:    v_min_u32_e32 v2, s6, v36857; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc6858; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6859; GCN3-NEXT:    buffer_wbinvl1_vol6860; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36861; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]6862; GCN3-NEXT:    v_mov_b32_e32 v3, v26863; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]6864; GCN3-NEXT:    s_cbranch_execnz .LBB111_16865; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end6866; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]6867; GCN3-NEXT:    s_setpc_b64 s[30:31]6868  %tmp0 = atomicrmw umin ptr %ptr, i32 %in seq_cst6869  ret void6870}6871 6872define amdgpu_gfx void @flat_atomic_umin_i32_noret_offset_scalar(ptr inreg %out, i32 inreg %in) {6873; GCN1-LABEL: flat_atomic_umin_i32_noret_offset_scalar:6874; GCN1:       ; %bb.0:6875; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6876; GCN1-NEXT:    s_add_u32 s34, s4, 166877; GCN1-NEXT:    s_addc_u32 s35, s5, 06878; GCN1-NEXT:    v_mov_b32_e32 v0, s346879; GCN1-NEXT:    v_mov_b32_e32 v1, s356880; GCN1-NEXT:    flat_load_dword v3, v[0:1]6881; GCN1-NEXT:    s_mov_b64 s[34:35], 06882; GCN1-NEXT:  .LBB112_1: ; %atomicrmw.start6883; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=16884; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6885; GCN1-NEXT:    v_min_u32_e32 v2, s6, v36886; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc6887; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6888; GCN1-NEXT:    buffer_wbinvl1_vol6889; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36890; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]6891; GCN1-NEXT:    v_mov_b32_e32 v3, v26892; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]6893; GCN1-NEXT:    s_cbranch_execnz .LBB112_16894; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end6895; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]6896; GCN1-NEXT:    s_setpc_b64 s[30:31]6897;6898; GCN2-LABEL: flat_atomic_umin_i32_noret_offset_scalar:6899; GCN2:       ; %bb.0:6900; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6901; GCN2-NEXT:    s_add_u32 s34, s4, 166902; GCN2-NEXT:    s_addc_u32 s35, s5, 06903; GCN2-NEXT:    v_mov_b32_e32 v0, s346904; GCN2-NEXT:    v_mov_b32_e32 v1, s356905; GCN2-NEXT:    flat_load_dword v3, v[0:1]6906; GCN2-NEXT:    s_mov_b64 s[34:35], 06907; GCN2-NEXT:  .LBB112_1: ; %atomicrmw.start6908; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=16909; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6910; GCN2-NEXT:    v_min_u32_e32 v2, s6, v36911; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc6912; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6913; GCN2-NEXT:    buffer_wbinvl1_vol6914; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36915; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]6916; GCN2-NEXT:    v_mov_b32_e32 v3, v26917; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]6918; GCN2-NEXT:    s_cbranch_execnz .LBB112_16919; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end6920; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]6921; GCN2-NEXT:    s_setpc_b64 s[30:31]6922;6923; GCN3-LABEL: flat_atomic_umin_i32_noret_offset_scalar:6924; GCN3:       ; %bb.0:6925; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6926; GCN3-NEXT:    v_mov_b32_e32 v0, s46927; GCN3-NEXT:    v_mov_b32_e32 v1, s56928; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:166929; GCN3-NEXT:    s_mov_b64 s[34:35], 06930; GCN3-NEXT:  .LBB112_1: ; %atomicrmw.start6931; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=16932; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6933; GCN3-NEXT:    v_min_u32_e32 v2, s6, v36934; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc6935; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6936; GCN3-NEXT:    buffer_wbinvl1_vol6937; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v36938; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]6939; GCN3-NEXT:    v_mov_b32_e32 v3, v26940; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]6941; GCN3-NEXT:    s_cbranch_execnz .LBB112_16942; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end6943; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]6944; GCN3-NEXT:    s_setpc_b64 s[30:31]6945  %gep = getelementptr inbounds i32, ptr %out, i32 46946  %tmp0 = atomicrmw umin ptr %gep, i32 %in seq_cst6947  ret void6948}6949 6950define amdgpu_gfx i32 @flat_atomic_umin_i32_ret_scalar(ptr inreg %ptr, i32 inreg %in) {6951; GCN1-LABEL: flat_atomic_umin_i32_ret_scalar:6952; GCN1:       ; %bb.0:6953; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6954; GCN1-NEXT:    v_mov_b32_e32 v0, s46955; GCN1-NEXT:    v_mov_b32_e32 v1, s56956; GCN1-NEXT:    flat_load_dword v0, v[0:1]6957; GCN1-NEXT:    v_mov_b32_e32 v1, s46958; GCN1-NEXT:    s_mov_b64 s[34:35], 06959; GCN1-NEXT:    v_mov_b32_e32 v2, s56960; GCN1-NEXT:  .LBB113_1: ; %atomicrmw.start6961; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=16962; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6963; GCN1-NEXT:    v_mov_b32_e32 v4, v06964; GCN1-NEXT:    v_min_u32_e32 v3, s6, v46965; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc6966; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6967; GCN1-NEXT:    buffer_wbinvl1_vol6968; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v46969; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]6970; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]6971; GCN1-NEXT:    s_cbranch_execnz .LBB113_16972; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end6973; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]6974; GCN1-NEXT:    s_setpc_b64 s[30:31]6975;6976; GCN2-LABEL: flat_atomic_umin_i32_ret_scalar:6977; GCN2:       ; %bb.0:6978; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6979; GCN2-NEXT:    v_mov_b32_e32 v0, s46980; GCN2-NEXT:    v_mov_b32_e32 v1, s56981; GCN2-NEXT:    flat_load_dword v0, v[0:1]6982; GCN2-NEXT:    v_mov_b32_e32 v1, s46983; GCN2-NEXT:    s_mov_b64 s[34:35], 06984; GCN2-NEXT:    v_mov_b32_e32 v2, s56985; GCN2-NEXT:  .LBB113_1: ; %atomicrmw.start6986; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=16987; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6988; GCN2-NEXT:    v_mov_b32_e32 v4, v06989; GCN2-NEXT:    v_min_u32_e32 v3, s6, v46990; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc6991; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)6992; GCN2-NEXT:    buffer_wbinvl1_vol6993; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v46994; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]6995; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]6996; GCN2-NEXT:    s_cbranch_execnz .LBB113_16997; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end6998; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]6999; GCN2-NEXT:    s_setpc_b64 s[30:31]7000;7001; GCN3-LABEL: flat_atomic_umin_i32_ret_scalar:7002; GCN3:       ; %bb.0:7003; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7004; GCN3-NEXT:    v_mov_b32_e32 v0, s47005; GCN3-NEXT:    v_mov_b32_e32 v1, s57006; GCN3-NEXT:    flat_load_dword v0, v[0:1]7007; GCN3-NEXT:    v_mov_b32_e32 v1, s47008; GCN3-NEXT:    s_mov_b64 s[34:35], 07009; GCN3-NEXT:    v_mov_b32_e32 v2, s57010; GCN3-NEXT:  .LBB113_1: ; %atomicrmw.start7011; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=17012; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7013; GCN3-NEXT:    v_mov_b32_e32 v4, v07014; GCN3-NEXT:    v_min_u32_e32 v3, s6, v47015; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc7016; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7017; GCN3-NEXT:    buffer_wbinvl1_vol7018; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v47019; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7020; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]7021; GCN3-NEXT:    s_cbranch_execnz .LBB113_17022; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end7023; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]7024; GCN3-NEXT:    s_setpc_b64 s[30:31]7025  %result = atomicrmw umin ptr %ptr, i32 %in seq_cst7026  ret i32 %result7027}7028 7029define amdgpu_gfx i32 @flat_atomic_umin_i32_ret_offset_scalar(ptr inreg %out, i32 inreg %in) {7030; GCN1-LABEL: flat_atomic_umin_i32_ret_offset_scalar:7031; GCN1:       ; %bb.0:7032; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7033; GCN1-NEXT:    s_add_u32 s34, s4, 167034; GCN1-NEXT:    s_addc_u32 s35, s5, 07035; GCN1-NEXT:    v_mov_b32_e32 v1, s347036; GCN1-NEXT:    v_mov_b32_e32 v2, s357037; GCN1-NEXT:    flat_load_dword v0, v[1:2]7038; GCN1-NEXT:    s_mov_b64 s[34:35], 07039; GCN1-NEXT:  .LBB114_1: ; %atomicrmw.start7040; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=17041; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7042; GCN1-NEXT:    v_mov_b32_e32 v4, v07043; GCN1-NEXT:    v_min_u32_e32 v3, s6, v47044; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc7045; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7046; GCN1-NEXT:    buffer_wbinvl1_vol7047; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v47048; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7049; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]7050; GCN1-NEXT:    s_cbranch_execnz .LBB114_17051; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end7052; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]7053; GCN1-NEXT:    s_setpc_b64 s[30:31]7054;7055; GCN2-LABEL: flat_atomic_umin_i32_ret_offset_scalar:7056; GCN2:       ; %bb.0:7057; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7058; GCN2-NEXT:    s_add_u32 s34, s4, 167059; GCN2-NEXT:    s_addc_u32 s35, s5, 07060; GCN2-NEXT:    v_mov_b32_e32 v1, s347061; GCN2-NEXT:    v_mov_b32_e32 v2, s357062; GCN2-NEXT:    flat_load_dword v0, v[1:2]7063; GCN2-NEXT:    s_mov_b64 s[34:35], 07064; GCN2-NEXT:  .LBB114_1: ; %atomicrmw.start7065; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=17066; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7067; GCN2-NEXT:    v_mov_b32_e32 v4, v07068; GCN2-NEXT:    v_min_u32_e32 v3, s6, v47069; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc7070; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7071; GCN2-NEXT:    buffer_wbinvl1_vol7072; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v47073; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7074; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]7075; GCN2-NEXT:    s_cbranch_execnz .LBB114_17076; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end7077; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]7078; GCN2-NEXT:    s_setpc_b64 s[30:31]7079;7080; GCN3-LABEL: flat_atomic_umin_i32_ret_offset_scalar:7081; GCN3:       ; %bb.0:7082; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7083; GCN3-NEXT:    v_mov_b32_e32 v0, s47084; GCN3-NEXT:    v_mov_b32_e32 v1, s57085; GCN3-NEXT:    flat_load_dword v0, v[0:1] offset:167086; GCN3-NEXT:    v_mov_b32_e32 v1, s47087; GCN3-NEXT:    s_mov_b64 s[34:35], 07088; GCN3-NEXT:    v_mov_b32_e32 v2, s57089; GCN3-NEXT:  .LBB114_1: ; %atomicrmw.start7090; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=17091; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7092; GCN3-NEXT:    v_mov_b32_e32 v4, v07093; GCN3-NEXT:    v_min_u32_e32 v3, s6, v47094; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] offset:16 glc7095; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7096; GCN3-NEXT:    buffer_wbinvl1_vol7097; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v47098; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7099; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]7100; GCN3-NEXT:    s_cbranch_execnz .LBB114_17101; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end7102; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]7103; GCN3-NEXT:    s_setpc_b64 s[30:31]7104  %gep = getelementptr inbounds i32, ptr %out, i32 47105  %result = atomicrmw umin ptr %gep, i32 %in seq_cst7106  ret i32 %result7107}7108 7109define void @flat_umin_i32_noret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {7110; GCN1-LABEL: flat_umin_i32_noret_offset__amdgpu_no_remote_memory:7111; GCN1:       ; %bb.0:7112; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7113; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v07114; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc7115; GCN1-NEXT:    flat_atomic_umin v[0:1], v27116; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7117; GCN1-NEXT:    buffer_wbinvl1_vol7118; GCN1-NEXT:    s_setpc_b64 s[30:31]7119;7120; GCN2-LABEL: flat_umin_i32_noret_offset__amdgpu_no_remote_memory:7121; GCN2:       ; %bb.0:7122; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7123; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v07124; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc7125; GCN2-NEXT:    flat_atomic_umin v[0:1], v27126; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7127; GCN2-NEXT:    buffer_wbinvl1_vol7128; GCN2-NEXT:    s_setpc_b64 s[30:31]7129;7130; GCN3-LABEL: flat_umin_i32_noret_offset__amdgpu_no_remote_memory:7131; GCN3:       ; %bb.0:7132; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7133; GCN3-NEXT:    flat_atomic_umin v[0:1], v2 offset:167134; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7135; GCN3-NEXT:    buffer_wbinvl1_vol7136; GCN3-NEXT:    s_setpc_b64 s[30:31]7137  %gep = getelementptr inbounds i32, ptr %out, i64 47138  %tmp0 = atomicrmw umin ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !07139  ret void7140}7141 7142define i32 @flat_atomic_umin_i32_ret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {7143; GCN1-LABEL: flat_atomic_umin_i32_ret_offset__amdgpu_no_remote_memory:7144; GCN1:       ; %bb.0:7145; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7146; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v07147; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc7148; GCN1-NEXT:    flat_atomic_umin v0, v[0:1], v2 glc7149; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7150; GCN1-NEXT:    buffer_wbinvl1_vol7151; GCN1-NEXT:    s_setpc_b64 s[30:31]7152;7153; GCN2-LABEL: flat_atomic_umin_i32_ret_offset__amdgpu_no_remote_memory:7154; GCN2:       ; %bb.0:7155; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7156; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v07157; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc7158; GCN2-NEXT:    flat_atomic_umin v0, v[0:1], v2 glc7159; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7160; GCN2-NEXT:    buffer_wbinvl1_vol7161; GCN2-NEXT:    s_setpc_b64 s[30:31]7162;7163; GCN3-LABEL: flat_atomic_umin_i32_ret_offset__amdgpu_no_remote_memory:7164; GCN3:       ; %bb.0:7165; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7166; GCN3-NEXT:    flat_atomic_umin v0, v[0:1], v2 offset:16 glc7167; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7168; GCN3-NEXT:    buffer_wbinvl1_vol7169; GCN3-NEXT:    s_setpc_b64 s[30:31]7170  %gep = getelementptr inbounds i32, ptr %out, i64 47171  %result = atomicrmw umin ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !07172  ret i32 %result7173}7174 7175; ---------------------------------------------------------------------7176; atomicrmw min7177; ---------------------------------------------------------------------7178 7179define void @flat_atomic_min_i32_noret(ptr %ptr, i32 %in) {7180; GCN1-LABEL: flat_atomic_min_i32_noret:7181; GCN1:       ; %bb.0:7182; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7183; GCN1-NEXT:    flat_load_dword v4, v[0:1]7184; GCN1-NEXT:    s_mov_b64 s[4:5], 07185; GCN1-NEXT:  .LBB117_1: ; %atomicrmw.start7186; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=17187; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7188; GCN1-NEXT:    v_min_i32_e32 v3, v4, v27189; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc7190; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7191; GCN1-NEXT:    buffer_wbinvl1_vol7192; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v47193; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7194; GCN1-NEXT:    v_mov_b32_e32 v4, v37195; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]7196; GCN1-NEXT:    s_cbranch_execnz .LBB117_17197; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end7198; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]7199; GCN1-NEXT:    s_setpc_b64 s[30:31]7200;7201; GCN2-LABEL: flat_atomic_min_i32_noret:7202; GCN2:       ; %bb.0:7203; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7204; GCN2-NEXT:    flat_load_dword v4, v[0:1]7205; GCN2-NEXT:    s_mov_b64 s[4:5], 07206; GCN2-NEXT:  .LBB117_1: ; %atomicrmw.start7207; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=17208; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7209; GCN2-NEXT:    v_min_i32_e32 v3, v4, v27210; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc7211; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7212; GCN2-NEXT:    buffer_wbinvl1_vol7213; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v47214; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7215; GCN2-NEXT:    v_mov_b32_e32 v4, v37216; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]7217; GCN2-NEXT:    s_cbranch_execnz .LBB117_17218; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end7219; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]7220; GCN2-NEXT:    s_setpc_b64 s[30:31]7221;7222; GCN3-LABEL: flat_atomic_min_i32_noret:7223; GCN3:       ; %bb.0:7224; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7225; GCN3-NEXT:    flat_load_dword v4, v[0:1]7226; GCN3-NEXT:    s_mov_b64 s[4:5], 07227; GCN3-NEXT:  .LBB117_1: ; %atomicrmw.start7228; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=17229; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7230; GCN3-NEXT:    v_min_i32_e32 v3, v4, v27231; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc7232; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7233; GCN3-NEXT:    buffer_wbinvl1_vol7234; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v47235; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7236; GCN3-NEXT:    v_mov_b32_e32 v4, v37237; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]7238; GCN3-NEXT:    s_cbranch_execnz .LBB117_17239; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end7240; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]7241; GCN3-NEXT:    s_setpc_b64 s[30:31]7242  %tmp0 = atomicrmw min ptr %ptr, i32 %in seq_cst7243  ret void7244}7245 7246define void @flat_atomic_min_i32_noret_offset(ptr %out, i32 %in) {7247; GCN1-LABEL: flat_atomic_min_i32_noret_offset:7248; GCN1:       ; %bb.0:7249; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7250; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v07251; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc7252; GCN1-NEXT:    flat_load_dword v4, v[0:1]7253; GCN1-NEXT:    s_mov_b64 s[4:5], 07254; GCN1-NEXT:  .LBB118_1: ; %atomicrmw.start7255; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=17256; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7257; GCN1-NEXT:    v_min_i32_e32 v3, v4, v27258; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc7259; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7260; GCN1-NEXT:    buffer_wbinvl1_vol7261; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v47262; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7263; GCN1-NEXT:    v_mov_b32_e32 v4, v37264; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]7265; GCN1-NEXT:    s_cbranch_execnz .LBB118_17266; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end7267; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]7268; GCN1-NEXT:    s_setpc_b64 s[30:31]7269;7270; GCN2-LABEL: flat_atomic_min_i32_noret_offset:7271; GCN2:       ; %bb.0:7272; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7273; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v07274; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc7275; GCN2-NEXT:    flat_load_dword v4, v[0:1]7276; GCN2-NEXT:    s_mov_b64 s[4:5], 07277; GCN2-NEXT:  .LBB118_1: ; %atomicrmw.start7278; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=17279; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7280; GCN2-NEXT:    v_min_i32_e32 v3, v4, v27281; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc7282; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7283; GCN2-NEXT:    buffer_wbinvl1_vol7284; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v47285; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7286; GCN2-NEXT:    v_mov_b32_e32 v4, v37287; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]7288; GCN2-NEXT:    s_cbranch_execnz .LBB118_17289; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end7290; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]7291; GCN2-NEXT:    s_setpc_b64 s[30:31]7292;7293; GCN3-LABEL: flat_atomic_min_i32_noret_offset:7294; GCN3:       ; %bb.0:7295; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7296; GCN3-NEXT:    flat_load_dword v4, v[0:1] offset:167297; GCN3-NEXT:    s_mov_b64 s[4:5], 07298; GCN3-NEXT:  .LBB118_1: ; %atomicrmw.start7299; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=17300; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7301; GCN3-NEXT:    v_min_i32_e32 v3, v4, v27302; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc7303; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7304; GCN3-NEXT:    buffer_wbinvl1_vol7305; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v47306; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7307; GCN3-NEXT:    v_mov_b32_e32 v4, v37308; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]7309; GCN3-NEXT:    s_cbranch_execnz .LBB118_17310; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end7311; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]7312; GCN3-NEXT:    s_setpc_b64 s[30:31]7313  %gep = getelementptr inbounds i32, ptr %out, i32 47314  %tmp0 = atomicrmw min ptr %gep, i32 %in seq_cst7315  ret void7316}7317 7318define i32 @flat_atomic_min_i32_ret(ptr %ptr, i32 %in) {7319; GCN1-LABEL: flat_atomic_min_i32_ret:7320; GCN1:       ; %bb.0:7321; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7322; GCN1-NEXT:    flat_load_dword v3, v[0:1]7323; GCN1-NEXT:    s_mov_b64 s[4:5], 07324; GCN1-NEXT:  .LBB119_1: ; %atomicrmw.start7325; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=17326; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7327; GCN1-NEXT:    v_mov_b32_e32 v4, v37328; GCN1-NEXT:    v_min_i32_e32 v3, v4, v27329; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc7330; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7331; GCN1-NEXT:    buffer_wbinvl1_vol7332; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v47333; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7334; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]7335; GCN1-NEXT:    s_cbranch_execnz .LBB119_17336; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end7337; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]7338; GCN1-NEXT:    v_mov_b32_e32 v0, v37339; GCN1-NEXT:    s_setpc_b64 s[30:31]7340;7341; GCN2-LABEL: flat_atomic_min_i32_ret:7342; GCN2:       ; %bb.0:7343; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7344; GCN2-NEXT:    flat_load_dword v3, v[0:1]7345; GCN2-NEXT:    s_mov_b64 s[4:5], 07346; GCN2-NEXT:  .LBB119_1: ; %atomicrmw.start7347; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=17348; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7349; GCN2-NEXT:    v_mov_b32_e32 v4, v37350; GCN2-NEXT:    v_min_i32_e32 v3, v4, v27351; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc7352; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7353; GCN2-NEXT:    buffer_wbinvl1_vol7354; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v47355; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7356; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]7357; GCN2-NEXT:    s_cbranch_execnz .LBB119_17358; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end7359; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]7360; GCN2-NEXT:    v_mov_b32_e32 v0, v37361; GCN2-NEXT:    s_setpc_b64 s[30:31]7362;7363; GCN3-LABEL: flat_atomic_min_i32_ret:7364; GCN3:       ; %bb.0:7365; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7366; GCN3-NEXT:    flat_load_dword v3, v[0:1]7367; GCN3-NEXT:    s_mov_b64 s[4:5], 07368; GCN3-NEXT:  .LBB119_1: ; %atomicrmw.start7369; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=17370; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7371; GCN3-NEXT:    v_mov_b32_e32 v4, v37372; GCN3-NEXT:    v_min_i32_e32 v3, v4, v27373; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc7374; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7375; GCN3-NEXT:    buffer_wbinvl1_vol7376; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v47377; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7378; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]7379; GCN3-NEXT:    s_cbranch_execnz .LBB119_17380; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end7381; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]7382; GCN3-NEXT:    v_mov_b32_e32 v0, v37383; GCN3-NEXT:    s_setpc_b64 s[30:31]7384  %result = atomicrmw min ptr %ptr, i32 %in seq_cst7385  ret i32 %result7386}7387 7388define i32 @flat_atomic_min_i32_ret_offset(ptr %out, i32 %in) {7389; GCN1-LABEL: flat_atomic_min_i32_ret_offset:7390; GCN1:       ; %bb.0:7391; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7392; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 16, v07393; GCN1-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc7394; GCN1-NEXT:    flat_load_dword v0, v[3:4]7395; GCN1-NEXT:    s_mov_b64 s[4:5], 07396; GCN1-NEXT:  .LBB120_1: ; %atomicrmw.start7397; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=17398; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7399; GCN1-NEXT:    v_mov_b32_e32 v1, v07400; GCN1-NEXT:    v_min_i32_e32 v0, v1, v27401; GCN1-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc7402; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7403; GCN1-NEXT:    buffer_wbinvl1_vol7404; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v17405; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7406; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]7407; GCN1-NEXT:    s_cbranch_execnz .LBB120_17408; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end7409; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]7410; GCN1-NEXT:    s_setpc_b64 s[30:31]7411;7412; GCN2-LABEL: flat_atomic_min_i32_ret_offset:7413; GCN2:       ; %bb.0:7414; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7415; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 16, v07416; GCN2-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc7417; GCN2-NEXT:    flat_load_dword v0, v[3:4]7418; GCN2-NEXT:    s_mov_b64 s[4:5], 07419; GCN2-NEXT:  .LBB120_1: ; %atomicrmw.start7420; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=17421; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7422; GCN2-NEXT:    v_mov_b32_e32 v1, v07423; GCN2-NEXT:    v_min_i32_e32 v0, v1, v27424; GCN2-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc7425; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7426; GCN2-NEXT:    buffer_wbinvl1_vol7427; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v17428; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7429; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]7430; GCN2-NEXT:    s_cbranch_execnz .LBB120_17431; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end7432; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]7433; GCN2-NEXT:    s_setpc_b64 s[30:31]7434;7435; GCN3-LABEL: flat_atomic_min_i32_ret_offset:7436; GCN3:       ; %bb.0:7437; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7438; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:167439; GCN3-NEXT:    s_mov_b64 s[4:5], 07440; GCN3-NEXT:  .LBB120_1: ; %atomicrmw.start7441; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=17442; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7443; GCN3-NEXT:    v_mov_b32_e32 v4, v37444; GCN3-NEXT:    v_min_i32_e32 v3, v4, v27445; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc7446; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7447; GCN3-NEXT:    buffer_wbinvl1_vol7448; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v47449; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]7450; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]7451; GCN3-NEXT:    s_cbranch_execnz .LBB120_17452; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end7453; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]7454; GCN3-NEXT:    v_mov_b32_e32 v0, v37455; GCN3-NEXT:    s_setpc_b64 s[30:31]7456  %gep = getelementptr inbounds i32, ptr %out, i32 47457  %result = atomicrmw min ptr %gep, i32 %in seq_cst7458  ret i32 %result7459}7460 7461define amdgpu_gfx void @flat_atomic_min_i32_noret_scalar(ptr inreg %ptr, i32 inreg %in) {7462; GCN1-LABEL: flat_atomic_min_i32_noret_scalar:7463; GCN1:       ; %bb.0:7464; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7465; GCN1-NEXT:    v_mov_b32_e32 v0, s47466; GCN1-NEXT:    v_mov_b32_e32 v1, s57467; GCN1-NEXT:    flat_load_dword v3, v[0:1]7468; GCN1-NEXT:    s_mov_b64 s[34:35], 07469; GCN1-NEXT:  .LBB121_1: ; %atomicrmw.start7470; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=17471; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7472; GCN1-NEXT:    v_min_i32_e32 v2, s6, v37473; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc7474; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7475; GCN1-NEXT:    buffer_wbinvl1_vol7476; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37477; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7478; GCN1-NEXT:    v_mov_b32_e32 v3, v27479; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]7480; GCN1-NEXT:    s_cbranch_execnz .LBB121_17481; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end7482; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]7483; GCN1-NEXT:    s_setpc_b64 s[30:31]7484;7485; GCN2-LABEL: flat_atomic_min_i32_noret_scalar:7486; GCN2:       ; %bb.0:7487; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7488; GCN2-NEXT:    v_mov_b32_e32 v0, s47489; GCN2-NEXT:    v_mov_b32_e32 v1, s57490; GCN2-NEXT:    flat_load_dword v3, v[0:1]7491; GCN2-NEXT:    s_mov_b64 s[34:35], 07492; GCN2-NEXT:  .LBB121_1: ; %atomicrmw.start7493; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=17494; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7495; GCN2-NEXT:    v_min_i32_e32 v2, s6, v37496; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc7497; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7498; GCN2-NEXT:    buffer_wbinvl1_vol7499; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37500; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7501; GCN2-NEXT:    v_mov_b32_e32 v3, v27502; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]7503; GCN2-NEXT:    s_cbranch_execnz .LBB121_17504; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end7505; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]7506; GCN2-NEXT:    s_setpc_b64 s[30:31]7507;7508; GCN3-LABEL: flat_atomic_min_i32_noret_scalar:7509; GCN3:       ; %bb.0:7510; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7511; GCN3-NEXT:    v_mov_b32_e32 v0, s47512; GCN3-NEXT:    v_mov_b32_e32 v1, s57513; GCN3-NEXT:    flat_load_dword v3, v[0:1]7514; GCN3-NEXT:    s_mov_b64 s[34:35], 07515; GCN3-NEXT:  .LBB121_1: ; %atomicrmw.start7516; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=17517; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7518; GCN3-NEXT:    v_min_i32_e32 v2, s6, v37519; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc7520; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7521; GCN3-NEXT:    buffer_wbinvl1_vol7522; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37523; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7524; GCN3-NEXT:    v_mov_b32_e32 v3, v27525; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]7526; GCN3-NEXT:    s_cbranch_execnz .LBB121_17527; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end7528; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]7529; GCN3-NEXT:    s_setpc_b64 s[30:31]7530  %tmp0 = atomicrmw min ptr %ptr, i32 %in seq_cst7531  ret void7532}7533 7534define amdgpu_gfx void @flat_atomic_min_i32_noret_offset_scalar(ptr inreg %out, i32 inreg %in) {7535; GCN1-LABEL: flat_atomic_min_i32_noret_offset_scalar:7536; GCN1:       ; %bb.0:7537; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7538; GCN1-NEXT:    s_add_u32 s34, s4, 167539; GCN1-NEXT:    s_addc_u32 s35, s5, 07540; GCN1-NEXT:    v_mov_b32_e32 v0, s347541; GCN1-NEXT:    v_mov_b32_e32 v1, s357542; GCN1-NEXT:    flat_load_dword v3, v[0:1]7543; GCN1-NEXT:    s_mov_b64 s[34:35], 07544; GCN1-NEXT:  .LBB122_1: ; %atomicrmw.start7545; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=17546; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7547; GCN1-NEXT:    v_min_i32_e32 v2, s6, v37548; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc7549; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7550; GCN1-NEXT:    buffer_wbinvl1_vol7551; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37552; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7553; GCN1-NEXT:    v_mov_b32_e32 v3, v27554; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]7555; GCN1-NEXT:    s_cbranch_execnz .LBB122_17556; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end7557; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]7558; GCN1-NEXT:    s_setpc_b64 s[30:31]7559;7560; GCN2-LABEL: flat_atomic_min_i32_noret_offset_scalar:7561; GCN2:       ; %bb.0:7562; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7563; GCN2-NEXT:    s_add_u32 s34, s4, 167564; GCN2-NEXT:    s_addc_u32 s35, s5, 07565; GCN2-NEXT:    v_mov_b32_e32 v0, s347566; GCN2-NEXT:    v_mov_b32_e32 v1, s357567; GCN2-NEXT:    flat_load_dword v3, v[0:1]7568; GCN2-NEXT:    s_mov_b64 s[34:35], 07569; GCN2-NEXT:  .LBB122_1: ; %atomicrmw.start7570; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=17571; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7572; GCN2-NEXT:    v_min_i32_e32 v2, s6, v37573; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc7574; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7575; GCN2-NEXT:    buffer_wbinvl1_vol7576; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37577; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7578; GCN2-NEXT:    v_mov_b32_e32 v3, v27579; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]7580; GCN2-NEXT:    s_cbranch_execnz .LBB122_17581; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end7582; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]7583; GCN2-NEXT:    s_setpc_b64 s[30:31]7584;7585; GCN3-LABEL: flat_atomic_min_i32_noret_offset_scalar:7586; GCN3:       ; %bb.0:7587; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7588; GCN3-NEXT:    v_mov_b32_e32 v0, s47589; GCN3-NEXT:    v_mov_b32_e32 v1, s57590; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:167591; GCN3-NEXT:    s_mov_b64 s[34:35], 07592; GCN3-NEXT:  .LBB122_1: ; %atomicrmw.start7593; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=17594; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7595; GCN3-NEXT:    v_min_i32_e32 v2, s6, v37596; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc7597; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7598; GCN3-NEXT:    buffer_wbinvl1_vol7599; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37600; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7601; GCN3-NEXT:    v_mov_b32_e32 v3, v27602; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]7603; GCN3-NEXT:    s_cbranch_execnz .LBB122_17604; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end7605; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]7606; GCN3-NEXT:    s_setpc_b64 s[30:31]7607  %gep = getelementptr inbounds i32, ptr %out, i32 47608  %tmp0 = atomicrmw min ptr %gep, i32 %in seq_cst7609  ret void7610}7611 7612define amdgpu_gfx i32 @flat_atomic_min_i32_ret_scalar(ptr inreg %ptr, i32 inreg %in) {7613; GCN1-LABEL: flat_atomic_min_i32_ret_scalar:7614; GCN1:       ; %bb.0:7615; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7616; GCN1-NEXT:    v_mov_b32_e32 v0, s47617; GCN1-NEXT:    v_mov_b32_e32 v1, s57618; GCN1-NEXT:    flat_load_dword v0, v[0:1]7619; GCN1-NEXT:    v_mov_b32_e32 v1, s47620; GCN1-NEXT:    s_mov_b64 s[34:35], 07621; GCN1-NEXT:    v_mov_b32_e32 v2, s57622; GCN1-NEXT:  .LBB123_1: ; %atomicrmw.start7623; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=17624; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7625; GCN1-NEXT:    v_mov_b32_e32 v4, v07626; GCN1-NEXT:    v_min_i32_e32 v3, s6, v47627; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc7628; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7629; GCN1-NEXT:    buffer_wbinvl1_vol7630; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v47631; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7632; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]7633; GCN1-NEXT:    s_cbranch_execnz .LBB123_17634; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end7635; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]7636; GCN1-NEXT:    s_setpc_b64 s[30:31]7637;7638; GCN2-LABEL: flat_atomic_min_i32_ret_scalar:7639; GCN2:       ; %bb.0:7640; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7641; GCN2-NEXT:    v_mov_b32_e32 v0, s47642; GCN2-NEXT:    v_mov_b32_e32 v1, s57643; GCN2-NEXT:    flat_load_dword v0, v[0:1]7644; GCN2-NEXT:    v_mov_b32_e32 v1, s47645; GCN2-NEXT:    s_mov_b64 s[34:35], 07646; GCN2-NEXT:    v_mov_b32_e32 v2, s57647; GCN2-NEXT:  .LBB123_1: ; %atomicrmw.start7648; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=17649; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7650; GCN2-NEXT:    v_mov_b32_e32 v4, v07651; GCN2-NEXT:    v_min_i32_e32 v3, s6, v47652; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc7653; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7654; GCN2-NEXT:    buffer_wbinvl1_vol7655; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v47656; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7657; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]7658; GCN2-NEXT:    s_cbranch_execnz .LBB123_17659; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end7660; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]7661; GCN2-NEXT:    s_setpc_b64 s[30:31]7662;7663; GCN3-LABEL: flat_atomic_min_i32_ret_scalar:7664; GCN3:       ; %bb.0:7665; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7666; GCN3-NEXT:    v_mov_b32_e32 v0, s47667; GCN3-NEXT:    v_mov_b32_e32 v1, s57668; GCN3-NEXT:    flat_load_dword v0, v[0:1]7669; GCN3-NEXT:    v_mov_b32_e32 v1, s47670; GCN3-NEXT:    s_mov_b64 s[34:35], 07671; GCN3-NEXT:    v_mov_b32_e32 v2, s57672; GCN3-NEXT:  .LBB123_1: ; %atomicrmw.start7673; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=17674; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7675; GCN3-NEXT:    v_mov_b32_e32 v4, v07676; GCN3-NEXT:    v_min_i32_e32 v3, s6, v47677; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc7678; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7679; GCN3-NEXT:    buffer_wbinvl1_vol7680; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v47681; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7682; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]7683; GCN3-NEXT:    s_cbranch_execnz .LBB123_17684; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end7685; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]7686; GCN3-NEXT:    s_setpc_b64 s[30:31]7687  %result = atomicrmw min ptr %ptr, i32 %in seq_cst7688  ret i32 %result7689}7690 7691define amdgpu_gfx i32 @flat_atomic_min_i32_ret_offset_scalar(ptr inreg %out, i32 inreg %in) {7692; GCN1-LABEL: flat_atomic_min_i32_ret_offset_scalar:7693; GCN1:       ; %bb.0:7694; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7695; GCN1-NEXT:    s_add_u32 s34, s4, 167696; GCN1-NEXT:    s_addc_u32 s35, s5, 07697; GCN1-NEXT:    v_mov_b32_e32 v1, s347698; GCN1-NEXT:    v_mov_b32_e32 v2, s357699; GCN1-NEXT:    flat_load_dword v0, v[1:2]7700; GCN1-NEXT:    s_mov_b64 s[34:35], 07701; GCN1-NEXT:  .LBB124_1: ; %atomicrmw.start7702; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=17703; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7704; GCN1-NEXT:    v_mov_b32_e32 v4, v07705; GCN1-NEXT:    v_min_i32_e32 v3, s6, v47706; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc7707; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7708; GCN1-NEXT:    buffer_wbinvl1_vol7709; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v47710; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7711; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]7712; GCN1-NEXT:    s_cbranch_execnz .LBB124_17713; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end7714; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]7715; GCN1-NEXT:    s_setpc_b64 s[30:31]7716;7717; GCN2-LABEL: flat_atomic_min_i32_ret_offset_scalar:7718; GCN2:       ; %bb.0:7719; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7720; GCN2-NEXT:    s_add_u32 s34, s4, 167721; GCN2-NEXT:    s_addc_u32 s35, s5, 07722; GCN2-NEXT:    v_mov_b32_e32 v1, s347723; GCN2-NEXT:    v_mov_b32_e32 v2, s357724; GCN2-NEXT:    flat_load_dword v0, v[1:2]7725; GCN2-NEXT:    s_mov_b64 s[34:35], 07726; GCN2-NEXT:  .LBB124_1: ; %atomicrmw.start7727; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=17728; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7729; GCN2-NEXT:    v_mov_b32_e32 v4, v07730; GCN2-NEXT:    v_min_i32_e32 v3, s6, v47731; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc7732; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7733; GCN2-NEXT:    buffer_wbinvl1_vol7734; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v47735; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7736; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]7737; GCN2-NEXT:    s_cbranch_execnz .LBB124_17738; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end7739; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]7740; GCN2-NEXT:    s_setpc_b64 s[30:31]7741;7742; GCN3-LABEL: flat_atomic_min_i32_ret_offset_scalar:7743; GCN3:       ; %bb.0:7744; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7745; GCN3-NEXT:    v_mov_b32_e32 v0, s47746; GCN3-NEXT:    v_mov_b32_e32 v1, s57747; GCN3-NEXT:    flat_load_dword v0, v[0:1] offset:167748; GCN3-NEXT:    v_mov_b32_e32 v1, s47749; GCN3-NEXT:    s_mov_b64 s[34:35], 07750; GCN3-NEXT:    v_mov_b32_e32 v2, s57751; GCN3-NEXT:  .LBB124_1: ; %atomicrmw.start7752; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=17753; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7754; GCN3-NEXT:    v_mov_b32_e32 v4, v07755; GCN3-NEXT:    v_min_i32_e32 v3, s6, v47756; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] offset:16 glc7757; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7758; GCN3-NEXT:    buffer_wbinvl1_vol7759; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v47760; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]7761; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]7762; GCN3-NEXT:    s_cbranch_execnz .LBB124_17763; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end7764; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]7765; GCN3-NEXT:    s_setpc_b64 s[30:31]7766  %gep = getelementptr inbounds i32, ptr %out, i32 47767  %result = atomicrmw min ptr %gep, i32 %in seq_cst7768  ret i32 %result7769}7770 7771define amdgpu_kernel void @atomic_min_i32_addr64_offset(ptr %out, i32 %in, i32 %index) {7772; GCN1-LABEL: atomic_min_i32_addr64_offset:7773; GCN1:       ; %bb.0: ; %entry7774; GCN1-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x97775; GCN1-NEXT:    s_waitcnt lgkmcnt(0)7776; GCN1-NEXT:    s_ashr_i32 s5, s3, 317777; GCN1-NEXT:    s_mov_b32 s4, s37778; GCN1-NEXT:    s_lshl_b64 s[4:5], s[4:5], 27779; GCN1-NEXT:    s_add_u32 s0, s0, s47780; GCN1-NEXT:    s_addc_u32 s1, s1, s57781; GCN1-NEXT:    s_add_u32 s0, s0, 167782; GCN1-NEXT:    s_addc_u32 s1, s1, 07783; GCN1-NEXT:    v_mov_b32_e32 v0, s07784; GCN1-NEXT:    v_mov_b32_e32 v1, s17785; GCN1-NEXT:    flat_load_dword v3, v[0:1]7786; GCN1-NEXT:    s_mov_b64 s[0:1], 07787; GCN1-NEXT:  .LBB125_1: ; %atomicrmw.start7788; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=17789; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7790; GCN1-NEXT:    v_min_i32_e32 v2, s2, v37791; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc7792; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7793; GCN1-NEXT:    buffer_wbinvl1_vol7794; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37795; GCN1-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7796; GCN1-NEXT:    v_mov_b32_e32 v3, v27797; GCN1-NEXT:    s_andn2_b64 exec, exec, s[0:1]7798; GCN1-NEXT:    s_cbranch_execnz .LBB125_17799; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end7800; GCN1-NEXT:    s_endpgm7801;7802; GCN2-LABEL: atomic_min_i32_addr64_offset:7803; GCN2:       ; %bb.0: ; %entry7804; GCN2-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x247805; GCN2-NEXT:    s_waitcnt lgkmcnt(0)7806; GCN2-NEXT:    s_ashr_i32 s5, s3, 317807; GCN2-NEXT:    s_mov_b32 s4, s37808; GCN2-NEXT:    s_lshl_b64 s[4:5], s[4:5], 27809; GCN2-NEXT:    s_add_u32 s0, s0, s47810; GCN2-NEXT:    s_addc_u32 s1, s1, s57811; GCN2-NEXT:    s_add_u32 s0, s0, 167812; GCN2-NEXT:    s_addc_u32 s1, s1, 07813; GCN2-NEXT:    v_mov_b32_e32 v0, s07814; GCN2-NEXT:    v_mov_b32_e32 v1, s17815; GCN2-NEXT:    flat_load_dword v3, v[0:1]7816; GCN2-NEXT:    s_mov_b64 s[0:1], 07817; GCN2-NEXT:  .LBB125_1: ; %atomicrmw.start7818; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=17819; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7820; GCN2-NEXT:    v_min_i32_e32 v2, s2, v37821; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc7822; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7823; GCN2-NEXT:    buffer_wbinvl1_vol7824; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37825; GCN2-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7826; GCN2-NEXT:    v_mov_b32_e32 v3, v27827; GCN2-NEXT:    s_andn2_b64 exec, exec, s[0:1]7828; GCN2-NEXT:    s_cbranch_execnz .LBB125_17829; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end7830; GCN2-NEXT:    s_endpgm7831;7832; GCN3-LABEL: atomic_min_i32_addr64_offset:7833; GCN3:       ; %bb.0: ; %entry7834; GCN3-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x247835; GCN3-NEXT:    s_waitcnt lgkmcnt(0)7836; GCN3-NEXT:    s_ashr_i32 s5, s3, 317837; GCN3-NEXT:    s_mov_b32 s4, s37838; GCN3-NEXT:    s_lshl_b64 s[4:5], s[4:5], 27839; GCN3-NEXT:    s_add_u32 s0, s0, s47840; GCN3-NEXT:    s_addc_u32 s1, s1, s57841; GCN3-NEXT:    v_mov_b32_e32 v0, s07842; GCN3-NEXT:    v_mov_b32_e32 v1, s17843; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:167844; GCN3-NEXT:    s_mov_b64 s[0:1], 07845; GCN3-NEXT:  .LBB125_1: ; %atomicrmw.start7846; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=17847; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7848; GCN3-NEXT:    v_min_i32_e32 v2, s2, v37849; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc7850; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7851; GCN3-NEXT:    buffer_wbinvl1_vol7852; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37853; GCN3-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7854; GCN3-NEXT:    v_mov_b32_e32 v3, v27855; GCN3-NEXT:    s_andn2_b64 exec, exec, s[0:1]7856; GCN3-NEXT:    s_cbranch_execnz .LBB125_17857; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end7858; GCN3-NEXT:    s_endpgm7859entry:7860  %ptr = getelementptr inbounds i32, ptr %out, i32 %index7861  %gep = getelementptr inbounds i32, ptr %ptr, i32 47862  %tmp0 = atomicrmw min ptr %gep, i32 %in seq_cst7863  ret void7864}7865 7866define amdgpu_kernel void @atomic_min_i32_ret_addr64_offset(ptr %out, ptr %out2, i32 %in, i32 %index) {7867; GCN1-LABEL: atomic_min_i32_ret_addr64_offset:7868; GCN1:       ; %bb.0: ; %entry7869; GCN1-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0xd7870; GCN1-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x97871; GCN1-NEXT:    s_waitcnt lgkmcnt(0)7872; GCN1-NEXT:    s_ashr_i32 s5, s7, 317873; GCN1-NEXT:    s_mov_b32 s4, s77874; GCN1-NEXT:    s_lshl_b64 s[4:5], s[4:5], 27875; GCN1-NEXT:    s_add_u32 s0, s0, s47876; GCN1-NEXT:    s_addc_u32 s1, s1, s57877; GCN1-NEXT:    s_add_u32 s0, s0, 167878; GCN1-NEXT:    s_addc_u32 s1, s1, 07879; GCN1-NEXT:    v_mov_b32_e32 v0, s07880; GCN1-NEXT:    v_mov_b32_e32 v1, s17881; GCN1-NEXT:    flat_load_dword v2, v[0:1]7882; GCN1-NEXT:    s_mov_b64 s[0:1], 07883; GCN1-NEXT:  .LBB126_1: ; %atomicrmw.start7884; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=17885; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7886; GCN1-NEXT:    v_mov_b32_e32 v3, v27887; GCN1-NEXT:    v_min_i32_e32 v2, s6, v37888; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc7889; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7890; GCN1-NEXT:    buffer_wbinvl1_vol7891; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37892; GCN1-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7893; GCN1-NEXT:    s_andn2_b64 exec, exec, s[0:1]7894; GCN1-NEXT:    s_cbranch_execnz .LBB126_17895; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end7896; GCN1-NEXT:    s_or_b64 exec, exec, s[0:1]7897; GCN1-NEXT:    v_mov_b32_e32 v0, s27898; GCN1-NEXT:    v_mov_b32_e32 v1, s37899; GCN1-NEXT:    flat_store_dword v[0:1], v27900; GCN1-NEXT:    s_endpgm7901;7902; GCN2-LABEL: atomic_min_i32_ret_addr64_offset:7903; GCN2:       ; %bb.0: ; %entry7904; GCN2-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x347905; GCN2-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x247906; GCN2-NEXT:    s_waitcnt lgkmcnt(0)7907; GCN2-NEXT:    s_ashr_i32 s5, s7, 317908; GCN2-NEXT:    s_mov_b32 s4, s77909; GCN2-NEXT:    s_lshl_b64 s[4:5], s[4:5], 27910; GCN2-NEXT:    s_add_u32 s0, s0, s47911; GCN2-NEXT:    s_addc_u32 s1, s1, s57912; GCN2-NEXT:    s_add_u32 s0, s0, 167913; GCN2-NEXT:    s_addc_u32 s1, s1, 07914; GCN2-NEXT:    v_mov_b32_e32 v0, s07915; GCN2-NEXT:    v_mov_b32_e32 v1, s17916; GCN2-NEXT:    flat_load_dword v2, v[0:1]7917; GCN2-NEXT:    s_mov_b64 s[0:1], 07918; GCN2-NEXT:  .LBB126_1: ; %atomicrmw.start7919; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=17920; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7921; GCN2-NEXT:    v_mov_b32_e32 v3, v27922; GCN2-NEXT:    v_min_i32_e32 v2, s6, v37923; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc7924; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7925; GCN2-NEXT:    buffer_wbinvl1_vol7926; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37927; GCN2-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7928; GCN2-NEXT:    s_andn2_b64 exec, exec, s[0:1]7929; GCN2-NEXT:    s_cbranch_execnz .LBB126_17930; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end7931; GCN2-NEXT:    s_or_b64 exec, exec, s[0:1]7932; GCN2-NEXT:    v_mov_b32_e32 v0, s27933; GCN2-NEXT:    v_mov_b32_e32 v1, s37934; GCN2-NEXT:    flat_store_dword v[0:1], v27935; GCN2-NEXT:    s_endpgm7936;7937; GCN3-LABEL: atomic_min_i32_ret_addr64_offset:7938; GCN3:       ; %bb.0: ; %entry7939; GCN3-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x347940; GCN3-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x247941; GCN3-NEXT:    s_waitcnt lgkmcnt(0)7942; GCN3-NEXT:    s_ashr_i32 s5, s7, 317943; GCN3-NEXT:    s_mov_b32 s4, s77944; GCN3-NEXT:    s_lshl_b64 s[4:5], s[4:5], 27945; GCN3-NEXT:    s_add_u32 s0, s0, s47946; GCN3-NEXT:    s_addc_u32 s1, s1, s57947; GCN3-NEXT:    v_mov_b32_e32 v0, s07948; GCN3-NEXT:    v_mov_b32_e32 v1, s17949; GCN3-NEXT:    flat_load_dword v2, v[0:1] offset:167950; GCN3-NEXT:    s_mov_b64 s[0:1], 07951; GCN3-NEXT:  .LBB126_1: ; %atomicrmw.start7952; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=17953; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7954; GCN3-NEXT:    v_mov_b32_e32 v3, v27955; GCN3-NEXT:    v_min_i32_e32 v2, s6, v37956; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc7957; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7958; GCN3-NEXT:    buffer_wbinvl1_vol7959; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37960; GCN3-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7961; GCN3-NEXT:    s_andn2_b64 exec, exec, s[0:1]7962; GCN3-NEXT:    s_cbranch_execnz .LBB126_17963; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end7964; GCN3-NEXT:    s_or_b64 exec, exec, s[0:1]7965; GCN3-NEXT:    v_mov_b32_e32 v0, s27966; GCN3-NEXT:    v_mov_b32_e32 v1, s37967; GCN3-NEXT:    flat_store_dword v[0:1], v27968; GCN3-NEXT:    s_endpgm7969entry:7970  %ptr = getelementptr inbounds i32, ptr %out, i32 %index7971  %gep = getelementptr inbounds i32, ptr %ptr, i32 47972  %tmp0 = atomicrmw min ptr %gep, i32 %in seq_cst7973  store i32 %tmp0, ptr %out27974  ret void7975}7976 7977define amdgpu_kernel void @atomic_min_i32(ptr %out, i32 %in) {7978; GCN1-LABEL: atomic_min_i32:7979; GCN1:       ; %bb.0: ; %entry7980; GCN1-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x97981; GCN1-NEXT:    s_load_dword s2, s[4:5], 0xb7982; GCN1-NEXT:    s_mov_b64 s[0:1], 07983; GCN1-NEXT:    s_waitcnt lgkmcnt(0)7984; GCN1-NEXT:    v_mov_b32_e32 v0, s67985; GCN1-NEXT:    v_mov_b32_e32 v1, s77986; GCN1-NEXT:    flat_load_dword v3, v[0:1]7987; GCN1-NEXT:  .LBB127_1: ; %atomicrmw.start7988; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=17989; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7990; GCN1-NEXT:    v_min_i32_e32 v2, s2, v37991; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc7992; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)7993; GCN1-NEXT:    buffer_wbinvl1_vol7994; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v37995; GCN1-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]7996; GCN1-NEXT:    v_mov_b32_e32 v3, v27997; GCN1-NEXT:    s_andn2_b64 exec, exec, s[0:1]7998; GCN1-NEXT:    s_cbranch_execnz .LBB127_17999; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end8000; GCN1-NEXT:    s_endpgm8001;8002; GCN2-LABEL: atomic_min_i32:8003; GCN2:       ; %bb.0: ; %entry8004; GCN2-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x248005; GCN2-NEXT:    s_load_dword s2, s[4:5], 0x2c8006; GCN2-NEXT:    s_mov_b64 s[0:1], 08007; GCN2-NEXT:    s_waitcnt lgkmcnt(0)8008; GCN2-NEXT:    v_mov_b32_e32 v0, s68009; GCN2-NEXT:    v_mov_b32_e32 v1, s78010; GCN2-NEXT:    flat_load_dword v3, v[0:1]8011; GCN2-NEXT:  .LBB127_1: ; %atomicrmw.start8012; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=18013; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8014; GCN2-NEXT:    v_min_i32_e32 v2, s2, v38015; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc8016; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8017; GCN2-NEXT:    buffer_wbinvl1_vol8018; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38019; GCN2-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8020; GCN2-NEXT:    v_mov_b32_e32 v3, v28021; GCN2-NEXT:    s_andn2_b64 exec, exec, s[0:1]8022; GCN2-NEXT:    s_cbranch_execnz .LBB127_18023; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end8024; GCN2-NEXT:    s_endpgm8025;8026; GCN3-LABEL: atomic_min_i32:8027; GCN3:       ; %bb.0: ; %entry8028; GCN3-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x248029; GCN3-NEXT:    s_load_dword s2, s[4:5], 0x2c8030; GCN3-NEXT:    s_mov_b64 s[0:1], 08031; GCN3-NEXT:    s_waitcnt lgkmcnt(0)8032; GCN3-NEXT:    v_mov_b32_e32 v0, s68033; GCN3-NEXT:    v_mov_b32_e32 v1, s78034; GCN3-NEXT:    flat_load_dword v3, v[0:1]8035; GCN3-NEXT:  .LBB127_1: ; %atomicrmw.start8036; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=18037; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8038; GCN3-NEXT:    v_min_i32_e32 v2, s2, v38039; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc8040; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8041; GCN3-NEXT:    buffer_wbinvl1_vol8042; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38043; GCN3-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8044; GCN3-NEXT:    v_mov_b32_e32 v3, v28045; GCN3-NEXT:    s_andn2_b64 exec, exec, s[0:1]8046; GCN3-NEXT:    s_cbranch_execnz .LBB127_18047; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end8048; GCN3-NEXT:    s_endpgm8049entry:8050  %tmp0 = atomicrmw min ptr %out, i32 %in seq_cst8051  ret void8052}8053 8054define amdgpu_kernel void @atomic_min_i32_ret_addr64(ptr %out, ptr %out2, i32 %in, i32 %index) {8055; GCN1-LABEL: atomic_min_i32_ret_addr64:8056; GCN1:       ; %bb.0: ; %entry8057; GCN1-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0xd8058; GCN1-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x98059; GCN1-NEXT:    s_waitcnt lgkmcnt(0)8060; GCN1-NEXT:    s_ashr_i32 s5, s7, 318061; GCN1-NEXT:    s_mov_b32 s4, s78062; GCN1-NEXT:    s_lshl_b64 s[4:5], s[4:5], 28063; GCN1-NEXT:    s_add_u32 s0, s0, s48064; GCN1-NEXT:    s_addc_u32 s1, s1, s58065; GCN1-NEXT:    v_mov_b32_e32 v0, s08066; GCN1-NEXT:    v_mov_b32_e32 v1, s18067; GCN1-NEXT:    flat_load_dword v2, v[0:1]8068; GCN1-NEXT:    s_mov_b64 s[0:1], 08069; GCN1-NEXT:  .LBB128_1: ; %atomicrmw.start8070; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=18071; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8072; GCN1-NEXT:    v_mov_b32_e32 v3, v28073; GCN1-NEXT:    v_min_i32_e32 v2, s6, v38074; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc8075; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8076; GCN1-NEXT:    buffer_wbinvl1_vol8077; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38078; GCN1-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8079; GCN1-NEXT:    s_andn2_b64 exec, exec, s[0:1]8080; GCN1-NEXT:    s_cbranch_execnz .LBB128_18081; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end8082; GCN1-NEXT:    s_or_b64 exec, exec, s[0:1]8083; GCN1-NEXT:    v_mov_b32_e32 v0, s28084; GCN1-NEXT:    v_mov_b32_e32 v1, s38085; GCN1-NEXT:    flat_store_dword v[0:1], v28086; GCN1-NEXT:    s_endpgm8087;8088; GCN2-LABEL: atomic_min_i32_ret_addr64:8089; GCN2:       ; %bb.0: ; %entry8090; GCN2-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x348091; GCN2-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x248092; GCN2-NEXT:    s_waitcnt lgkmcnt(0)8093; GCN2-NEXT:    s_ashr_i32 s5, s7, 318094; GCN2-NEXT:    s_mov_b32 s4, s78095; GCN2-NEXT:    s_lshl_b64 s[4:5], s[4:5], 28096; GCN2-NEXT:    s_add_u32 s0, s0, s48097; GCN2-NEXT:    s_addc_u32 s1, s1, s58098; GCN2-NEXT:    v_mov_b32_e32 v0, s08099; GCN2-NEXT:    v_mov_b32_e32 v1, s18100; GCN2-NEXT:    flat_load_dword v2, v[0:1]8101; GCN2-NEXT:    s_mov_b64 s[0:1], 08102; GCN2-NEXT:  .LBB128_1: ; %atomicrmw.start8103; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=18104; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8105; GCN2-NEXT:    v_mov_b32_e32 v3, v28106; GCN2-NEXT:    v_min_i32_e32 v2, s6, v38107; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc8108; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8109; GCN2-NEXT:    buffer_wbinvl1_vol8110; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38111; GCN2-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8112; GCN2-NEXT:    s_andn2_b64 exec, exec, s[0:1]8113; GCN2-NEXT:    s_cbranch_execnz .LBB128_18114; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end8115; GCN2-NEXT:    s_or_b64 exec, exec, s[0:1]8116; GCN2-NEXT:    v_mov_b32_e32 v0, s28117; GCN2-NEXT:    v_mov_b32_e32 v1, s38118; GCN2-NEXT:    flat_store_dword v[0:1], v28119; GCN2-NEXT:    s_endpgm8120;8121; GCN3-LABEL: atomic_min_i32_ret_addr64:8122; GCN3:       ; %bb.0: ; %entry8123; GCN3-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x348124; GCN3-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x248125; GCN3-NEXT:    s_waitcnt lgkmcnt(0)8126; GCN3-NEXT:    s_ashr_i32 s5, s7, 318127; GCN3-NEXT:    s_mov_b32 s4, s78128; GCN3-NEXT:    s_lshl_b64 s[4:5], s[4:5], 28129; GCN3-NEXT:    s_add_u32 s0, s0, s48130; GCN3-NEXT:    s_addc_u32 s1, s1, s58131; GCN3-NEXT:    v_mov_b32_e32 v0, s08132; GCN3-NEXT:    v_mov_b32_e32 v1, s18133; GCN3-NEXT:    flat_load_dword v2, v[0:1]8134; GCN3-NEXT:    s_mov_b64 s[0:1], 08135; GCN3-NEXT:  .LBB128_1: ; %atomicrmw.start8136; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=18137; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8138; GCN3-NEXT:    v_mov_b32_e32 v3, v28139; GCN3-NEXT:    v_min_i32_e32 v2, s6, v38140; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc8141; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8142; GCN3-NEXT:    buffer_wbinvl1_vol8143; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38144; GCN3-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]8145; GCN3-NEXT:    s_andn2_b64 exec, exec, s[0:1]8146; GCN3-NEXT:    s_cbranch_execnz .LBB128_18147; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end8148; GCN3-NEXT:    s_or_b64 exec, exec, s[0:1]8149; GCN3-NEXT:    v_mov_b32_e32 v0, s28150; GCN3-NEXT:    v_mov_b32_e32 v1, s38151; GCN3-NEXT:    flat_store_dword v[0:1], v28152; GCN3-NEXT:    s_endpgm8153entry:8154  %ptr = getelementptr inbounds i32, ptr %out, i32 %index8155  %tmp0 = atomicrmw min ptr %ptr, i32 %in seq_cst8156  store i32 %tmp0, ptr %out28157  ret void8158}8159 8160define void @flat_min_i32_noret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {8161; GCN1-LABEL: flat_min_i32_noret_offset__amdgpu_no_remote_memory:8162; GCN1:       ; %bb.0:8163; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8164; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v08165; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc8166; GCN1-NEXT:    flat_atomic_smin v[0:1], v28167; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8168; GCN1-NEXT:    buffer_wbinvl1_vol8169; GCN1-NEXT:    s_setpc_b64 s[30:31]8170;8171; GCN2-LABEL: flat_min_i32_noret_offset__amdgpu_no_remote_memory:8172; GCN2:       ; %bb.0:8173; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8174; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v08175; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc8176; GCN2-NEXT:    flat_atomic_smin v[0:1], v28177; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8178; GCN2-NEXT:    buffer_wbinvl1_vol8179; GCN2-NEXT:    s_setpc_b64 s[30:31]8180;8181; GCN3-LABEL: flat_min_i32_noret_offset__amdgpu_no_remote_memory:8182; GCN3:       ; %bb.0:8183; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8184; GCN3-NEXT:    flat_atomic_smin v[0:1], v2 offset:168185; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8186; GCN3-NEXT:    buffer_wbinvl1_vol8187; GCN3-NEXT:    s_setpc_b64 s[30:31]8188  %gep = getelementptr inbounds i32, ptr %out, i64 48189  %tmp0 = atomicrmw min ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !08190  ret void8191}8192 8193define i32 @flat_atomic_min_i32_ret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {8194; GCN1-LABEL: flat_atomic_min_i32_ret_offset__amdgpu_no_remote_memory:8195; GCN1:       ; %bb.0:8196; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8197; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v08198; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc8199; GCN1-NEXT:    flat_atomic_smin v0, v[0:1], v2 glc8200; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8201; GCN1-NEXT:    buffer_wbinvl1_vol8202; GCN1-NEXT:    s_setpc_b64 s[30:31]8203;8204; GCN2-LABEL: flat_atomic_min_i32_ret_offset__amdgpu_no_remote_memory:8205; GCN2:       ; %bb.0:8206; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8207; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v08208; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc8209; GCN2-NEXT:    flat_atomic_smin v0, v[0:1], v2 glc8210; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8211; GCN2-NEXT:    buffer_wbinvl1_vol8212; GCN2-NEXT:    s_setpc_b64 s[30:31]8213;8214; GCN3-LABEL: flat_atomic_min_i32_ret_offset__amdgpu_no_remote_memory:8215; GCN3:       ; %bb.0:8216; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8217; GCN3-NEXT:    flat_atomic_smin v0, v[0:1], v2 offset:16 glc8218; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8219; GCN3-NEXT:    buffer_wbinvl1_vol8220; GCN3-NEXT:    s_setpc_b64 s[30:31]8221  %gep = getelementptr inbounds i32, ptr %out, i64 48222  %result = atomicrmw min ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !08223  ret i32 %result8224}8225 8226; ---------------------------------------------------------------------8227; atomicrmw uinc_wrap8228; ---------------------------------------------------------------------8229 8230define void @flat_atomic_uinc_wrap_i32_noret(ptr %ptr, i32 %in) {8231; GCN1-LABEL: flat_atomic_uinc_wrap_i32_noret:8232; GCN1:       ; %bb.0:8233; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8234; GCN1-NEXT:    flat_load_dword v4, v[0:1]8235; GCN1-NEXT:    s_mov_b64 s[4:5], 08236; GCN1-NEXT:  .LBB131_1: ; %atomicrmw.start8237; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=18238; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8239; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 1, v48240; GCN1-NEXT:    v_cmp_lt_u32_e32 vcc, v4, v28241; GCN1-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc8242; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc8243; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8244; GCN1-NEXT:    buffer_wbinvl1_vol8245; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v48246; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]8247; GCN1-NEXT:    v_mov_b32_e32 v4, v38248; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]8249; GCN1-NEXT:    s_cbranch_execnz .LBB131_18250; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end8251; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]8252; GCN1-NEXT:    s_setpc_b64 s[30:31]8253;8254; GCN2-LABEL: flat_atomic_uinc_wrap_i32_noret:8255; GCN2:       ; %bb.0:8256; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8257; GCN2-NEXT:    flat_load_dword v4, v[0:1]8258; GCN2-NEXT:    s_mov_b64 s[4:5], 08259; GCN2-NEXT:  .LBB131_1: ; %atomicrmw.start8260; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=18261; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8262; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 1, v48263; GCN2-NEXT:    v_cmp_lt_u32_e32 vcc, v4, v28264; GCN2-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc8265; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc8266; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8267; GCN2-NEXT:    buffer_wbinvl1_vol8268; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v48269; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]8270; GCN2-NEXT:    v_mov_b32_e32 v4, v38271; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]8272; GCN2-NEXT:    s_cbranch_execnz .LBB131_18273; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end8274; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]8275; GCN2-NEXT:    s_setpc_b64 s[30:31]8276;8277; GCN3-LABEL: flat_atomic_uinc_wrap_i32_noret:8278; GCN3:       ; %bb.0:8279; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8280; GCN3-NEXT:    flat_load_dword v4, v[0:1]8281; GCN3-NEXT:    s_mov_b64 s[4:5], 08282; GCN3-NEXT:  .LBB131_1: ; %atomicrmw.start8283; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=18284; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8285; GCN3-NEXT:    v_add_u32_e32 v3, 1, v48286; GCN3-NEXT:    v_cmp_lt_u32_e32 vcc, v4, v28287; GCN3-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc8288; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc8289; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8290; GCN3-NEXT:    buffer_wbinvl1_vol8291; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v48292; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]8293; GCN3-NEXT:    v_mov_b32_e32 v4, v38294; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]8295; GCN3-NEXT:    s_cbranch_execnz .LBB131_18296; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end8297; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]8298; GCN3-NEXT:    s_setpc_b64 s[30:31]8299  %tmp0 = atomicrmw uinc_wrap ptr %ptr, i32 %in seq_cst8300  ret void8301}8302 8303define void @flat_atomic_uinc_wrap_i32_noret_offset(ptr %out, i32 %in) {8304; GCN1-LABEL: flat_atomic_uinc_wrap_i32_noret_offset:8305; GCN1:       ; %bb.0:8306; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8307; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v08308; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc8309; GCN1-NEXT:    flat_load_dword v4, v[0:1]8310; GCN1-NEXT:    s_mov_b64 s[4:5], 08311; GCN1-NEXT:  .LBB132_1: ; %atomicrmw.start8312; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=18313; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8314; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 1, v48315; GCN1-NEXT:    v_cmp_lt_u32_e32 vcc, v4, v28316; GCN1-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc8317; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc8318; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8319; GCN1-NEXT:    buffer_wbinvl1_vol8320; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v48321; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]8322; GCN1-NEXT:    v_mov_b32_e32 v4, v38323; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]8324; GCN1-NEXT:    s_cbranch_execnz .LBB132_18325; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end8326; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]8327; GCN1-NEXT:    s_setpc_b64 s[30:31]8328;8329; GCN2-LABEL: flat_atomic_uinc_wrap_i32_noret_offset:8330; GCN2:       ; %bb.0:8331; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8332; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v08333; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc8334; GCN2-NEXT:    flat_load_dword v4, v[0:1]8335; GCN2-NEXT:    s_mov_b64 s[4:5], 08336; GCN2-NEXT:  .LBB132_1: ; %atomicrmw.start8337; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=18338; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8339; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 1, v48340; GCN2-NEXT:    v_cmp_lt_u32_e32 vcc, v4, v28341; GCN2-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc8342; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc8343; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8344; GCN2-NEXT:    buffer_wbinvl1_vol8345; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v48346; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]8347; GCN2-NEXT:    v_mov_b32_e32 v4, v38348; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]8349; GCN2-NEXT:    s_cbranch_execnz .LBB132_18350; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end8351; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]8352; GCN2-NEXT:    s_setpc_b64 s[30:31]8353;8354; GCN3-LABEL: flat_atomic_uinc_wrap_i32_noret_offset:8355; GCN3:       ; %bb.0:8356; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8357; GCN3-NEXT:    flat_load_dword v4, v[0:1] offset:168358; GCN3-NEXT:    s_mov_b64 s[4:5], 08359; GCN3-NEXT:  .LBB132_1: ; %atomicrmw.start8360; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=18361; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8362; GCN3-NEXT:    v_add_u32_e32 v3, 1, v48363; GCN3-NEXT:    v_cmp_lt_u32_e32 vcc, v4, v28364; GCN3-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc8365; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc8366; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8367; GCN3-NEXT:    buffer_wbinvl1_vol8368; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v48369; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]8370; GCN3-NEXT:    v_mov_b32_e32 v4, v38371; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]8372; GCN3-NEXT:    s_cbranch_execnz .LBB132_18373; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end8374; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]8375; GCN3-NEXT:    s_setpc_b64 s[30:31]8376  %gep = getelementptr inbounds i32, ptr %out, i32 48377  %tmp0 = atomicrmw uinc_wrap ptr %gep, i32 %in seq_cst8378  ret void8379}8380 8381define i32 @flat_atomic_uinc_wrap_i32_ret(ptr %ptr, i32 %in) {8382; GCN1-LABEL: flat_atomic_uinc_wrap_i32_ret:8383; GCN1:       ; %bb.0:8384; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8385; GCN1-NEXT:    flat_load_dword v3, v[0:1]8386; GCN1-NEXT:    s_mov_b64 s[4:5], 08387; GCN1-NEXT:  .LBB133_1: ; %atomicrmw.start8388; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=18389; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8390; GCN1-NEXT:    v_mov_b32_e32 v4, v38391; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 1, v48392; GCN1-NEXT:    v_cmp_lt_u32_e32 vcc, v4, v28393; GCN1-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc8394; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc8395; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8396; GCN1-NEXT:    buffer_wbinvl1_vol8397; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v48398; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]8399; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]8400; GCN1-NEXT:    s_cbranch_execnz .LBB133_18401; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end8402; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]8403; GCN1-NEXT:    v_mov_b32_e32 v0, v38404; GCN1-NEXT:    s_setpc_b64 s[30:31]8405;8406; GCN2-LABEL: flat_atomic_uinc_wrap_i32_ret:8407; GCN2:       ; %bb.0:8408; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8409; GCN2-NEXT:    flat_load_dword v3, v[0:1]8410; GCN2-NEXT:    s_mov_b64 s[4:5], 08411; GCN2-NEXT:  .LBB133_1: ; %atomicrmw.start8412; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=18413; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8414; GCN2-NEXT:    v_mov_b32_e32 v4, v38415; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 1, v48416; GCN2-NEXT:    v_cmp_lt_u32_e32 vcc, v4, v28417; GCN2-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc8418; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc8419; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8420; GCN2-NEXT:    buffer_wbinvl1_vol8421; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v48422; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]8423; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]8424; GCN2-NEXT:    s_cbranch_execnz .LBB133_18425; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end8426; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]8427; GCN2-NEXT:    v_mov_b32_e32 v0, v38428; GCN2-NEXT:    s_setpc_b64 s[30:31]8429;8430; GCN3-LABEL: flat_atomic_uinc_wrap_i32_ret:8431; GCN3:       ; %bb.0:8432; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8433; GCN3-NEXT:    flat_load_dword v3, v[0:1]8434; GCN3-NEXT:    s_mov_b64 s[4:5], 08435; GCN3-NEXT:  .LBB133_1: ; %atomicrmw.start8436; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=18437; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8438; GCN3-NEXT:    v_mov_b32_e32 v4, v38439; GCN3-NEXT:    v_add_u32_e32 v3, 1, v48440; GCN3-NEXT:    v_cmp_lt_u32_e32 vcc, v4, v28441; GCN3-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc8442; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc8443; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8444; GCN3-NEXT:    buffer_wbinvl1_vol8445; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v48446; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]8447; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]8448; GCN3-NEXT:    s_cbranch_execnz .LBB133_18449; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end8450; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]8451; GCN3-NEXT:    v_mov_b32_e32 v0, v38452; GCN3-NEXT:    s_setpc_b64 s[30:31]8453  %result = atomicrmw uinc_wrap ptr %ptr, i32 %in seq_cst8454  ret i32 %result8455}8456 8457define i32 @flat_atomic_uinc_wrap_i32_ret_offset(ptr %out, i32 %in) {8458; GCN1-LABEL: flat_atomic_uinc_wrap_i32_ret_offset:8459; GCN1:       ; %bb.0:8460; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8461; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 16, v08462; GCN1-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc8463; GCN1-NEXT:    flat_load_dword v0, v[3:4]8464; GCN1-NEXT:    s_mov_b64 s[4:5], 08465; GCN1-NEXT:  .LBB134_1: ; %atomicrmw.start8466; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=18467; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8468; GCN1-NEXT:    v_mov_b32_e32 v1, v08469; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 1, v18470; GCN1-NEXT:    v_cmp_lt_u32_e32 vcc, v1, v28471; GCN1-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc8472; GCN1-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc8473; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8474; GCN1-NEXT:    buffer_wbinvl1_vol8475; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v18476; GCN1-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]8477; GCN1-NEXT:    s_andn2_b64 exec, exec, s[4:5]8478; GCN1-NEXT:    s_cbranch_execnz .LBB134_18479; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end8480; GCN1-NEXT:    s_or_b64 exec, exec, s[4:5]8481; GCN1-NEXT:    s_setpc_b64 s[30:31]8482;8483; GCN2-LABEL: flat_atomic_uinc_wrap_i32_ret_offset:8484; GCN2:       ; %bb.0:8485; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8486; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 16, v08487; GCN2-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc8488; GCN2-NEXT:    flat_load_dword v0, v[3:4]8489; GCN2-NEXT:    s_mov_b64 s[4:5], 08490; GCN2-NEXT:  .LBB134_1: ; %atomicrmw.start8491; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=18492; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8493; GCN2-NEXT:    v_mov_b32_e32 v1, v08494; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 1, v18495; GCN2-NEXT:    v_cmp_lt_u32_e32 vcc, v1, v28496; GCN2-NEXT:    v_cndmask_b32_e32 v0, 0, v0, vcc8497; GCN2-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc8498; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8499; GCN2-NEXT:    buffer_wbinvl1_vol8500; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v18501; GCN2-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]8502; GCN2-NEXT:    s_andn2_b64 exec, exec, s[4:5]8503; GCN2-NEXT:    s_cbranch_execnz .LBB134_18504; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end8505; GCN2-NEXT:    s_or_b64 exec, exec, s[4:5]8506; GCN2-NEXT:    s_setpc_b64 s[30:31]8507;8508; GCN3-LABEL: flat_atomic_uinc_wrap_i32_ret_offset:8509; GCN3:       ; %bb.0:8510; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8511; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:168512; GCN3-NEXT:    s_mov_b64 s[4:5], 08513; GCN3-NEXT:  .LBB134_1: ; %atomicrmw.start8514; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=18515; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8516; GCN3-NEXT:    v_mov_b32_e32 v4, v38517; GCN3-NEXT:    v_add_u32_e32 v3, 1, v48518; GCN3-NEXT:    v_cmp_lt_u32_e32 vcc, v4, v28519; GCN3-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc8520; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc8521; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8522; GCN3-NEXT:    buffer_wbinvl1_vol8523; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v48524; GCN3-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]8525; GCN3-NEXT:    s_andn2_b64 exec, exec, s[4:5]8526; GCN3-NEXT:    s_cbranch_execnz .LBB134_18527; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end8528; GCN3-NEXT:    s_or_b64 exec, exec, s[4:5]8529; GCN3-NEXT:    v_mov_b32_e32 v0, v38530; GCN3-NEXT:    s_setpc_b64 s[30:31]8531  %gep = getelementptr inbounds i32, ptr %out, i32 48532  %result = atomicrmw uinc_wrap ptr %gep, i32 %in seq_cst8533  ret i32 %result8534}8535 8536define amdgpu_gfx void @flat_atomic_uinc_wrap_i32_noret_scalar(ptr inreg %ptr, i32 inreg %in) {8537; GCN1-LABEL: flat_atomic_uinc_wrap_i32_noret_scalar:8538; GCN1:       ; %bb.0:8539; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8540; GCN1-NEXT:    v_mov_b32_e32 v0, s48541; GCN1-NEXT:    v_mov_b32_e32 v1, s58542; GCN1-NEXT:    flat_load_dword v3, v[0:1]8543; GCN1-NEXT:    s_mov_b64 s[34:35], 08544; GCN1-NEXT:  .LBB135_1: ; %atomicrmw.start8545; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=18546; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8547; GCN1-NEXT:    v_add_i32_e32 v2, vcc, 1, v38548; GCN1-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v38549; GCN1-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc8550; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc8551; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8552; GCN1-NEXT:    buffer_wbinvl1_vol8553; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38554; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]8555; GCN1-NEXT:    v_mov_b32_e32 v3, v28556; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]8557; GCN1-NEXT:    s_cbranch_execnz .LBB135_18558; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end8559; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]8560; GCN1-NEXT:    s_setpc_b64 s[30:31]8561;8562; GCN2-LABEL: flat_atomic_uinc_wrap_i32_noret_scalar:8563; GCN2:       ; %bb.0:8564; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8565; GCN2-NEXT:    v_mov_b32_e32 v0, s48566; GCN2-NEXT:    v_mov_b32_e32 v1, s58567; GCN2-NEXT:    flat_load_dword v3, v[0:1]8568; GCN2-NEXT:    s_mov_b64 s[34:35], 08569; GCN2-NEXT:  .LBB135_1: ; %atomicrmw.start8570; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=18571; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8572; GCN2-NEXT:    v_add_u32_e32 v2, vcc, 1, v38573; GCN2-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v38574; GCN2-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc8575; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc8576; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8577; GCN2-NEXT:    buffer_wbinvl1_vol8578; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38579; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]8580; GCN2-NEXT:    v_mov_b32_e32 v3, v28581; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]8582; GCN2-NEXT:    s_cbranch_execnz .LBB135_18583; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end8584; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]8585; GCN2-NEXT:    s_setpc_b64 s[30:31]8586;8587; GCN3-LABEL: flat_atomic_uinc_wrap_i32_noret_scalar:8588; GCN3:       ; %bb.0:8589; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8590; GCN3-NEXT:    v_mov_b32_e32 v0, s48591; GCN3-NEXT:    v_mov_b32_e32 v1, s58592; GCN3-NEXT:    flat_load_dword v3, v[0:1]8593; GCN3-NEXT:    s_mov_b64 s[34:35], 08594; GCN3-NEXT:  .LBB135_1: ; %atomicrmw.start8595; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=18596; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8597; GCN3-NEXT:    v_add_u32_e32 v2, 1, v38598; GCN3-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v38599; GCN3-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc8600; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc8601; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8602; GCN3-NEXT:    buffer_wbinvl1_vol8603; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38604; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]8605; GCN3-NEXT:    v_mov_b32_e32 v3, v28606; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]8607; GCN3-NEXT:    s_cbranch_execnz .LBB135_18608; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end8609; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]8610; GCN3-NEXT:    s_setpc_b64 s[30:31]8611  %tmp0 = atomicrmw uinc_wrap ptr %ptr, i32 %in seq_cst8612  ret void8613}8614 8615define amdgpu_gfx void @flat_atomic_uinc_wrap_i32_noret_offset_scalar(ptr inreg %out, i32 inreg %in) {8616; GCN1-LABEL: flat_atomic_uinc_wrap_i32_noret_offset_scalar:8617; GCN1:       ; %bb.0:8618; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8619; GCN1-NEXT:    s_add_u32 s34, s4, 168620; GCN1-NEXT:    s_addc_u32 s35, s5, 08621; GCN1-NEXT:    v_mov_b32_e32 v0, s348622; GCN1-NEXT:    v_mov_b32_e32 v1, s358623; GCN1-NEXT:    flat_load_dword v3, v[0:1]8624; GCN1-NEXT:    s_mov_b64 s[34:35], 08625; GCN1-NEXT:  .LBB136_1: ; %atomicrmw.start8626; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=18627; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8628; GCN1-NEXT:    v_add_i32_e32 v2, vcc, 1, v38629; GCN1-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v38630; GCN1-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc8631; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc8632; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8633; GCN1-NEXT:    buffer_wbinvl1_vol8634; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38635; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]8636; GCN1-NEXT:    v_mov_b32_e32 v3, v28637; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]8638; GCN1-NEXT:    s_cbranch_execnz .LBB136_18639; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end8640; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]8641; GCN1-NEXT:    s_setpc_b64 s[30:31]8642;8643; GCN2-LABEL: flat_atomic_uinc_wrap_i32_noret_offset_scalar:8644; GCN2:       ; %bb.0:8645; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8646; GCN2-NEXT:    s_add_u32 s34, s4, 168647; GCN2-NEXT:    s_addc_u32 s35, s5, 08648; GCN2-NEXT:    v_mov_b32_e32 v0, s348649; GCN2-NEXT:    v_mov_b32_e32 v1, s358650; GCN2-NEXT:    flat_load_dword v3, v[0:1]8651; GCN2-NEXT:    s_mov_b64 s[34:35], 08652; GCN2-NEXT:  .LBB136_1: ; %atomicrmw.start8653; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=18654; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8655; GCN2-NEXT:    v_add_u32_e32 v2, vcc, 1, v38656; GCN2-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v38657; GCN2-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc8658; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc8659; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8660; GCN2-NEXT:    buffer_wbinvl1_vol8661; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38662; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]8663; GCN2-NEXT:    v_mov_b32_e32 v3, v28664; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]8665; GCN2-NEXT:    s_cbranch_execnz .LBB136_18666; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end8667; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]8668; GCN2-NEXT:    s_setpc_b64 s[30:31]8669;8670; GCN3-LABEL: flat_atomic_uinc_wrap_i32_noret_offset_scalar:8671; GCN3:       ; %bb.0:8672; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8673; GCN3-NEXT:    v_mov_b32_e32 v0, s48674; GCN3-NEXT:    v_mov_b32_e32 v1, s58675; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:168676; GCN3-NEXT:    s_mov_b64 s[34:35], 08677; GCN3-NEXT:  .LBB136_1: ; %atomicrmw.start8678; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=18679; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8680; GCN3-NEXT:    v_add_u32_e32 v2, 1, v38681; GCN3-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v38682; GCN3-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc8683; GCN3-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] offset:16 glc8684; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8685; GCN3-NEXT:    buffer_wbinvl1_vol8686; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v38687; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]8688; GCN3-NEXT:    v_mov_b32_e32 v3, v28689; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]8690; GCN3-NEXT:    s_cbranch_execnz .LBB136_18691; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end8692; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]8693; GCN3-NEXT:    s_setpc_b64 s[30:31]8694  %gep = getelementptr inbounds i32, ptr %out, i32 48695  %tmp0 = atomicrmw uinc_wrap ptr %gep, i32 %in seq_cst8696  ret void8697}8698 8699define amdgpu_gfx i32 @flat_atomic_uinc_wrap_i32_ret_scalar(ptr inreg %ptr, i32 inreg %in) {8700; GCN1-LABEL: flat_atomic_uinc_wrap_i32_ret_scalar:8701; GCN1:       ; %bb.0:8702; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8703; GCN1-NEXT:    v_mov_b32_e32 v0, s48704; GCN1-NEXT:    v_mov_b32_e32 v1, s58705; GCN1-NEXT:    flat_load_dword v0, v[0:1]8706; GCN1-NEXT:    v_mov_b32_e32 v1, s48707; GCN1-NEXT:    s_mov_b64 s[34:35], 08708; GCN1-NEXT:    v_mov_b32_e32 v2, s58709; GCN1-NEXT:  .LBB137_1: ; %atomicrmw.start8710; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=18711; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8712; GCN1-NEXT:    v_mov_b32_e32 v4, v08713; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 1, v48714; GCN1-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v48715; GCN1-NEXT:    v_cndmask_b32_e32 v3, 0, v0, vcc8716; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc8717; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8718; GCN1-NEXT:    buffer_wbinvl1_vol8719; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v48720; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]8721; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]8722; GCN1-NEXT:    s_cbranch_execnz .LBB137_18723; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end8724; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]8725; GCN1-NEXT:    s_setpc_b64 s[30:31]8726;8727; GCN2-LABEL: flat_atomic_uinc_wrap_i32_ret_scalar:8728; GCN2:       ; %bb.0:8729; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8730; GCN2-NEXT:    v_mov_b32_e32 v0, s48731; GCN2-NEXT:    v_mov_b32_e32 v1, s58732; GCN2-NEXT:    flat_load_dword v0, v[0:1]8733; GCN2-NEXT:    v_mov_b32_e32 v1, s48734; GCN2-NEXT:    s_mov_b64 s[34:35], 08735; GCN2-NEXT:    v_mov_b32_e32 v2, s58736; GCN2-NEXT:  .LBB137_1: ; %atomicrmw.start8737; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=18738; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8739; GCN2-NEXT:    v_mov_b32_e32 v4, v08740; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 1, v48741; GCN2-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v48742; GCN2-NEXT:    v_cndmask_b32_e32 v3, 0, v0, vcc8743; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc8744; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8745; GCN2-NEXT:    buffer_wbinvl1_vol8746; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v48747; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]8748; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]8749; GCN2-NEXT:    s_cbranch_execnz .LBB137_18750; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end8751; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]8752; GCN2-NEXT:    s_setpc_b64 s[30:31]8753;8754; GCN3-LABEL: flat_atomic_uinc_wrap_i32_ret_scalar:8755; GCN3:       ; %bb.0:8756; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8757; GCN3-NEXT:    v_mov_b32_e32 v0, s48758; GCN3-NEXT:    v_mov_b32_e32 v1, s58759; GCN3-NEXT:    flat_load_dword v0, v[0:1]8760; GCN3-NEXT:    v_mov_b32_e32 v1, s48761; GCN3-NEXT:    s_mov_b64 s[34:35], 08762; GCN3-NEXT:    v_mov_b32_e32 v2, s58763; GCN3-NEXT:  .LBB137_1: ; %atomicrmw.start8764; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=18765; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8766; GCN3-NEXT:    v_mov_b32_e32 v4, v08767; GCN3-NEXT:    v_add_u32_e32 v0, 1, v48768; GCN3-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v48769; GCN3-NEXT:    v_cndmask_b32_e32 v3, 0, v0, vcc8770; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc8771; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8772; GCN3-NEXT:    buffer_wbinvl1_vol8773; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v48774; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]8775; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]8776; GCN3-NEXT:    s_cbranch_execnz .LBB137_18777; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end8778; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]8779; GCN3-NEXT:    s_setpc_b64 s[30:31]8780  %result = atomicrmw uinc_wrap ptr %ptr, i32 %in seq_cst8781  ret i32 %result8782}8783 8784define amdgpu_gfx i32 @flat_atomic_uinc_wrap_i32_ret_offset_scalar(ptr inreg %out, i32 inreg %in) {8785; GCN1-LABEL: flat_atomic_uinc_wrap_i32_ret_offset_scalar:8786; GCN1:       ; %bb.0:8787; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8788; GCN1-NEXT:    s_add_u32 s34, s4, 168789; GCN1-NEXT:    s_addc_u32 s35, s5, 08790; GCN1-NEXT:    v_mov_b32_e32 v1, s348791; GCN1-NEXT:    v_mov_b32_e32 v2, s358792; GCN1-NEXT:    flat_load_dword v0, v[1:2]8793; GCN1-NEXT:    s_mov_b64 s[34:35], 08794; GCN1-NEXT:  .LBB138_1: ; %atomicrmw.start8795; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=18796; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8797; GCN1-NEXT:    v_mov_b32_e32 v4, v08798; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 1, v48799; GCN1-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v48800; GCN1-NEXT:    v_cndmask_b32_e32 v3, 0, v0, vcc8801; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc8802; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8803; GCN1-NEXT:    buffer_wbinvl1_vol8804; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v48805; GCN1-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]8806; GCN1-NEXT:    s_andn2_b64 exec, exec, s[34:35]8807; GCN1-NEXT:    s_cbranch_execnz .LBB138_18808; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end8809; GCN1-NEXT:    s_or_b64 exec, exec, s[34:35]8810; GCN1-NEXT:    s_setpc_b64 s[30:31]8811;8812; GCN2-LABEL: flat_atomic_uinc_wrap_i32_ret_offset_scalar:8813; GCN2:       ; %bb.0:8814; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8815; GCN2-NEXT:    s_add_u32 s34, s4, 168816; GCN2-NEXT:    s_addc_u32 s35, s5, 08817; GCN2-NEXT:    v_mov_b32_e32 v1, s348818; GCN2-NEXT:    v_mov_b32_e32 v2, s358819; GCN2-NEXT:    flat_load_dword v0, v[1:2]8820; GCN2-NEXT:    s_mov_b64 s[34:35], 08821; GCN2-NEXT:  .LBB138_1: ; %atomicrmw.start8822; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=18823; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8824; GCN2-NEXT:    v_mov_b32_e32 v4, v08825; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 1, v48826; GCN2-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v48827; GCN2-NEXT:    v_cndmask_b32_e32 v3, 0, v0, vcc8828; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] glc8829; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8830; GCN2-NEXT:    buffer_wbinvl1_vol8831; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v48832; GCN2-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]8833; GCN2-NEXT:    s_andn2_b64 exec, exec, s[34:35]8834; GCN2-NEXT:    s_cbranch_execnz .LBB138_18835; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end8836; GCN2-NEXT:    s_or_b64 exec, exec, s[34:35]8837; GCN2-NEXT:    s_setpc_b64 s[30:31]8838;8839; GCN3-LABEL: flat_atomic_uinc_wrap_i32_ret_offset_scalar:8840; GCN3:       ; %bb.0:8841; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8842; GCN3-NEXT:    v_mov_b32_e32 v0, s48843; GCN3-NEXT:    v_mov_b32_e32 v1, s58844; GCN3-NEXT:    flat_load_dword v0, v[0:1] offset:168845; GCN3-NEXT:    v_mov_b32_e32 v1, s48846; GCN3-NEXT:    s_mov_b64 s[34:35], 08847; GCN3-NEXT:    v_mov_b32_e32 v2, s58848; GCN3-NEXT:  .LBB138_1: ; %atomicrmw.start8849; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=18850; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8851; GCN3-NEXT:    v_mov_b32_e32 v4, v08852; GCN3-NEXT:    v_add_u32_e32 v0, 1, v48853; GCN3-NEXT:    v_cmp_gt_u32_e32 vcc, s6, v48854; GCN3-NEXT:    v_cndmask_b32_e32 v3, 0, v0, vcc8855; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[3:4] offset:16 glc8856; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8857; GCN3-NEXT:    buffer_wbinvl1_vol8858; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v48859; GCN3-NEXT:    s_or_b64 s[34:35], vcc, s[34:35]8860; GCN3-NEXT:    s_andn2_b64 exec, exec, s[34:35]8861; GCN3-NEXT:    s_cbranch_execnz .LBB138_18862; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end8863; GCN3-NEXT:    s_or_b64 exec, exec, s[34:35]8864; GCN3-NEXT:    s_setpc_b64 s[30:31]8865  %gep = getelementptr inbounds i32, ptr %out, i32 48866  %result = atomicrmw uinc_wrap ptr %gep, i32 %in seq_cst8867  ret i32 %result8868}8869 8870define void @flat_uinc_wrap_i32_noret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {8871; GCN1-LABEL: flat_uinc_wrap_i32_noret_offset__amdgpu_no_remote_memory:8872; GCN1:       ; %bb.0:8873; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8874; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v08875; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc8876; GCN1-NEXT:    flat_atomic_inc v[0:1], v28877; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8878; GCN1-NEXT:    buffer_wbinvl1_vol8879; GCN1-NEXT:    s_setpc_b64 s[30:31]8880;8881; GCN2-LABEL: flat_uinc_wrap_i32_noret_offset__amdgpu_no_remote_memory:8882; GCN2:       ; %bb.0:8883; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8884; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v08885; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc8886; GCN2-NEXT:    flat_atomic_inc v[0:1], v28887; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8888; GCN2-NEXT:    buffer_wbinvl1_vol8889; GCN2-NEXT:    s_setpc_b64 s[30:31]8890;8891; GCN3-LABEL: flat_uinc_wrap_i32_noret_offset__amdgpu_no_remote_memory:8892; GCN3:       ; %bb.0:8893; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8894; GCN3-NEXT:    flat_atomic_inc v[0:1], v2 offset:168895; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8896; GCN3-NEXT:    buffer_wbinvl1_vol8897; GCN3-NEXT:    s_setpc_b64 s[30:31]8898  %gep = getelementptr inbounds i32, ptr %out, i64 48899  %tmp0 = atomicrmw uinc_wrap ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !08900  ret void8901}8902 8903define i32 @flat_atomic_uinc_wrap_i32_ret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {8904; GCN1-LABEL: flat_atomic_uinc_wrap_i32_ret_offset__amdgpu_no_remote_memory:8905; GCN1:       ; %bb.0:8906; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8907; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v08908; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc8909; GCN1-NEXT:    flat_atomic_inc v0, v[0:1], v2 glc8910; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8911; GCN1-NEXT:    buffer_wbinvl1_vol8912; GCN1-NEXT:    s_setpc_b64 s[30:31]8913;8914; GCN2-LABEL: flat_atomic_uinc_wrap_i32_ret_offset__amdgpu_no_remote_memory:8915; GCN2:       ; %bb.0:8916; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8917; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v08918; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc8919; GCN2-NEXT:    flat_atomic_inc v0, v[0:1], v2 glc8920; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8921; GCN2-NEXT:    buffer_wbinvl1_vol8922; GCN2-NEXT:    s_setpc_b64 s[30:31]8923;8924; GCN3-LABEL: flat_atomic_uinc_wrap_i32_ret_offset__amdgpu_no_remote_memory:8925; GCN3:       ; %bb.0:8926; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8927; GCN3-NEXT:    flat_atomic_inc v0, v[0:1], v2 offset:16 glc8928; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8929; GCN3-NEXT:    buffer_wbinvl1_vol8930; GCN3-NEXT:    s_setpc_b64 s[30:31]8931  %gep = getelementptr inbounds i32, ptr %out, i64 48932  %result = atomicrmw uinc_wrap ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !08933  ret i32 %result8934}8935 8936; ---------------------------------------------------------------------8937; atomicrmw udec_wrap8938; ---------------------------------------------------------------------8939 8940define void @flat_atomic_udec_wrap_i32_noret(ptr %ptr, i32 %in) {8941; GCN1-LABEL: flat_atomic_udec_wrap_i32_noret:8942; GCN1:       ; %bb.0:8943; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8944; GCN1-NEXT:    flat_load_dword v4, v[0:1]8945; GCN1-NEXT:    s_mov_b64 s[6:7], 08946; GCN1-NEXT:  .LBB141_1: ; %atomicrmw.start8947; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=18948; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8949; GCN1-NEXT:    v_subrev_i32_e32 v3, vcc, 1, v48950; GCN1-NEXT:    v_cmp_gt_u32_e64 s[4:5], v4, v28951; GCN1-NEXT:    s_or_b64 vcc, vcc, s[4:5]8952; GCN1-NEXT:    v_cndmask_b32_e32 v3, v3, v2, vcc8953; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc8954; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8955; GCN1-NEXT:    buffer_wbinvl1_vol8956; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v48957; GCN1-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]8958; GCN1-NEXT:    v_mov_b32_e32 v4, v38959; GCN1-NEXT:    s_andn2_b64 exec, exec, s[6:7]8960; GCN1-NEXT:    s_cbranch_execnz .LBB141_18961; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end8962; GCN1-NEXT:    s_or_b64 exec, exec, s[6:7]8963; GCN1-NEXT:    s_setpc_b64 s[30:31]8964;8965; GCN2-LABEL: flat_atomic_udec_wrap_i32_noret:8966; GCN2:       ; %bb.0:8967; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8968; GCN2-NEXT:    flat_load_dword v4, v[0:1]8969; GCN2-NEXT:    s_mov_b64 s[6:7], 08970; GCN2-NEXT:  .LBB141_1: ; %atomicrmw.start8971; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=18972; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8973; GCN2-NEXT:    v_subrev_u32_e32 v3, vcc, 1, v48974; GCN2-NEXT:    v_cmp_gt_u32_e64 s[4:5], v4, v28975; GCN2-NEXT:    s_or_b64 vcc, vcc, s[4:5]8976; GCN2-NEXT:    v_cndmask_b32_e32 v3, v3, v2, vcc8977; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc8978; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8979; GCN2-NEXT:    buffer_wbinvl1_vol8980; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v48981; GCN2-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]8982; GCN2-NEXT:    v_mov_b32_e32 v4, v38983; GCN2-NEXT:    s_andn2_b64 exec, exec, s[6:7]8984; GCN2-NEXT:    s_cbranch_execnz .LBB141_18985; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end8986; GCN2-NEXT:    s_or_b64 exec, exec, s[6:7]8987; GCN2-NEXT:    s_setpc_b64 s[30:31]8988;8989; GCN3-LABEL: flat_atomic_udec_wrap_i32_noret:8990; GCN3:       ; %bb.0:8991; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8992; GCN3-NEXT:    flat_load_dword v4, v[0:1]8993; GCN3-NEXT:    s_mov_b64 s[6:7], 08994; GCN3-NEXT:  .LBB141_1: ; %atomicrmw.start8995; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=18996; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)8997; GCN3-NEXT:    v_subrev_co_u32_e32 v3, vcc, 1, v48998; GCN3-NEXT:    v_cmp_gt_u32_e64 s[4:5], v4, v28999; GCN3-NEXT:    s_or_b64 vcc, vcc, s[4:5]9000; GCN3-NEXT:    v_cndmask_b32_e32 v3, v3, v2, vcc9001; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc9002; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9003; GCN3-NEXT:    buffer_wbinvl1_vol9004; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v49005; GCN3-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]9006; GCN3-NEXT:    v_mov_b32_e32 v4, v39007; GCN3-NEXT:    s_andn2_b64 exec, exec, s[6:7]9008; GCN3-NEXT:    s_cbranch_execnz .LBB141_19009; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end9010; GCN3-NEXT:    s_or_b64 exec, exec, s[6:7]9011; GCN3-NEXT:    s_setpc_b64 s[30:31]9012  %tmp0 = atomicrmw udec_wrap ptr %ptr, i32 %in seq_cst9013  ret void9014}9015 9016define void @flat_atomic_udec_wrap_i32_noret_offset(ptr %out, i32 %in) {9017; GCN1-LABEL: flat_atomic_udec_wrap_i32_noret_offset:9018; GCN1:       ; %bb.0:9019; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9020; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v09021; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc9022; GCN1-NEXT:    flat_load_dword v4, v[0:1]9023; GCN1-NEXT:    s_mov_b64 s[6:7], 09024; GCN1-NEXT:  .LBB142_1: ; %atomicrmw.start9025; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=19026; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9027; GCN1-NEXT:    v_subrev_i32_e32 v3, vcc, 1, v49028; GCN1-NEXT:    v_cmp_gt_u32_e64 s[4:5], v4, v29029; GCN1-NEXT:    s_or_b64 vcc, vcc, s[4:5]9030; GCN1-NEXT:    v_cndmask_b32_e32 v3, v3, v2, vcc9031; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc9032; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9033; GCN1-NEXT:    buffer_wbinvl1_vol9034; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v49035; GCN1-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]9036; GCN1-NEXT:    v_mov_b32_e32 v4, v39037; GCN1-NEXT:    s_andn2_b64 exec, exec, s[6:7]9038; GCN1-NEXT:    s_cbranch_execnz .LBB142_19039; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end9040; GCN1-NEXT:    s_or_b64 exec, exec, s[6:7]9041; GCN1-NEXT:    s_setpc_b64 s[30:31]9042;9043; GCN2-LABEL: flat_atomic_udec_wrap_i32_noret_offset:9044; GCN2:       ; %bb.0:9045; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9046; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v09047; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc9048; GCN2-NEXT:    flat_load_dword v4, v[0:1]9049; GCN2-NEXT:    s_mov_b64 s[6:7], 09050; GCN2-NEXT:  .LBB142_1: ; %atomicrmw.start9051; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=19052; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9053; GCN2-NEXT:    v_subrev_u32_e32 v3, vcc, 1, v49054; GCN2-NEXT:    v_cmp_gt_u32_e64 s[4:5], v4, v29055; GCN2-NEXT:    s_or_b64 vcc, vcc, s[4:5]9056; GCN2-NEXT:    v_cndmask_b32_e32 v3, v3, v2, vcc9057; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc9058; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9059; GCN2-NEXT:    buffer_wbinvl1_vol9060; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v49061; GCN2-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]9062; GCN2-NEXT:    v_mov_b32_e32 v4, v39063; GCN2-NEXT:    s_andn2_b64 exec, exec, s[6:7]9064; GCN2-NEXT:    s_cbranch_execnz .LBB142_19065; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end9066; GCN2-NEXT:    s_or_b64 exec, exec, s[6:7]9067; GCN2-NEXT:    s_setpc_b64 s[30:31]9068;9069; GCN3-LABEL: flat_atomic_udec_wrap_i32_noret_offset:9070; GCN3:       ; %bb.0:9071; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9072; GCN3-NEXT:    flat_load_dword v4, v[0:1] offset:169073; GCN3-NEXT:    s_mov_b64 s[6:7], 09074; GCN3-NEXT:  .LBB142_1: ; %atomicrmw.start9075; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=19076; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9077; GCN3-NEXT:    v_subrev_co_u32_e32 v3, vcc, 1, v49078; GCN3-NEXT:    v_cmp_gt_u32_e64 s[4:5], v4, v29079; GCN3-NEXT:    s_or_b64 vcc, vcc, s[4:5]9080; GCN3-NEXT:    v_cndmask_b32_e32 v3, v3, v2, vcc9081; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc9082; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9083; GCN3-NEXT:    buffer_wbinvl1_vol9084; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v49085; GCN3-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]9086; GCN3-NEXT:    v_mov_b32_e32 v4, v39087; GCN3-NEXT:    s_andn2_b64 exec, exec, s[6:7]9088; GCN3-NEXT:    s_cbranch_execnz .LBB142_19089; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end9090; GCN3-NEXT:    s_or_b64 exec, exec, s[6:7]9091; GCN3-NEXT:    s_setpc_b64 s[30:31]9092  %gep = getelementptr inbounds i32, ptr %out, i32 49093  %tmp0 = atomicrmw udec_wrap ptr %gep, i32 %in seq_cst9094  ret void9095}9096 9097define i32 @flat_atomic_udec_wrap_i32_ret(ptr %ptr, i32 %in) {9098; GCN1-LABEL: flat_atomic_udec_wrap_i32_ret:9099; GCN1:       ; %bb.0:9100; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9101; GCN1-NEXT:    flat_load_dword v3, v[0:1]9102; GCN1-NEXT:    s_mov_b64 s[6:7], 09103; GCN1-NEXT:  .LBB143_1: ; %atomicrmw.start9104; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=19105; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9106; GCN1-NEXT:    v_mov_b32_e32 v4, v39107; GCN1-NEXT:    v_subrev_i32_e32 v3, vcc, 1, v49108; GCN1-NEXT:    v_cmp_gt_u32_e64 s[4:5], v4, v29109; GCN1-NEXT:    s_or_b64 vcc, vcc, s[4:5]9110; GCN1-NEXT:    v_cndmask_b32_e32 v3, v3, v2, vcc9111; GCN1-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc9112; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9113; GCN1-NEXT:    buffer_wbinvl1_vol9114; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v49115; GCN1-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]9116; GCN1-NEXT:    s_andn2_b64 exec, exec, s[6:7]9117; GCN1-NEXT:    s_cbranch_execnz .LBB143_19118; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end9119; GCN1-NEXT:    s_or_b64 exec, exec, s[6:7]9120; GCN1-NEXT:    v_mov_b32_e32 v0, v39121; GCN1-NEXT:    s_setpc_b64 s[30:31]9122;9123; GCN2-LABEL: flat_atomic_udec_wrap_i32_ret:9124; GCN2:       ; %bb.0:9125; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9126; GCN2-NEXT:    flat_load_dword v3, v[0:1]9127; GCN2-NEXT:    s_mov_b64 s[6:7], 09128; GCN2-NEXT:  .LBB143_1: ; %atomicrmw.start9129; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=19130; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9131; GCN2-NEXT:    v_mov_b32_e32 v4, v39132; GCN2-NEXT:    v_subrev_u32_e32 v3, vcc, 1, v49133; GCN2-NEXT:    v_cmp_gt_u32_e64 s[4:5], v4, v29134; GCN2-NEXT:    s_or_b64 vcc, vcc, s[4:5]9135; GCN2-NEXT:    v_cndmask_b32_e32 v3, v3, v2, vcc9136; GCN2-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc9137; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9138; GCN2-NEXT:    buffer_wbinvl1_vol9139; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v49140; GCN2-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]9141; GCN2-NEXT:    s_andn2_b64 exec, exec, s[6:7]9142; GCN2-NEXT:    s_cbranch_execnz .LBB143_19143; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end9144; GCN2-NEXT:    s_or_b64 exec, exec, s[6:7]9145; GCN2-NEXT:    v_mov_b32_e32 v0, v39146; GCN2-NEXT:    s_setpc_b64 s[30:31]9147;9148; GCN3-LABEL: flat_atomic_udec_wrap_i32_ret:9149; GCN3:       ; %bb.0:9150; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9151; GCN3-NEXT:    flat_load_dword v3, v[0:1]9152; GCN3-NEXT:    s_mov_b64 s[6:7], 09153; GCN3-NEXT:  .LBB143_1: ; %atomicrmw.start9154; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=19155; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9156; GCN3-NEXT:    v_mov_b32_e32 v4, v39157; GCN3-NEXT:    v_subrev_co_u32_e32 v3, vcc, 1, v49158; GCN3-NEXT:    v_cmp_gt_u32_e64 s[4:5], v4, v29159; GCN3-NEXT:    s_or_b64 vcc, vcc, s[4:5]9160; GCN3-NEXT:    v_cndmask_b32_e32 v3, v3, v2, vcc9161; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] glc9162; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9163; GCN3-NEXT:    buffer_wbinvl1_vol9164; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v49165; GCN3-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]9166; GCN3-NEXT:    s_andn2_b64 exec, exec, s[6:7]9167; GCN3-NEXT:    s_cbranch_execnz .LBB143_19168; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end9169; GCN3-NEXT:    s_or_b64 exec, exec, s[6:7]9170; GCN3-NEXT:    v_mov_b32_e32 v0, v39171; GCN3-NEXT:    s_setpc_b64 s[30:31]9172  %result = atomicrmw udec_wrap ptr %ptr, i32 %in seq_cst9173  ret i32 %result9174}9175 9176define i32 @flat_atomic_udec_wrap_i32_ret_offset(ptr %out, i32 %in) {9177; GCN1-LABEL: flat_atomic_udec_wrap_i32_ret_offset:9178; GCN1:       ; %bb.0:9179; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9180; GCN1-NEXT:    v_add_i32_e32 v3, vcc, 16, v09181; GCN1-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc9182; GCN1-NEXT:    flat_load_dword v0, v[3:4]9183; GCN1-NEXT:    s_mov_b64 s[6:7], 09184; GCN1-NEXT:  .LBB144_1: ; %atomicrmw.start9185; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=19186; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9187; GCN1-NEXT:    v_mov_b32_e32 v1, v09188; GCN1-NEXT:    v_subrev_i32_e32 v0, vcc, 1, v19189; GCN1-NEXT:    v_cmp_gt_u32_e64 s[4:5], v1, v29190; GCN1-NEXT:    s_or_b64 vcc, vcc, s[4:5]9191; GCN1-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc9192; GCN1-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc9193; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9194; GCN1-NEXT:    buffer_wbinvl1_vol9195; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v19196; GCN1-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]9197; GCN1-NEXT:    s_andn2_b64 exec, exec, s[6:7]9198; GCN1-NEXT:    s_cbranch_execnz .LBB144_19199; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end9200; GCN1-NEXT:    s_or_b64 exec, exec, s[6:7]9201; GCN1-NEXT:    s_setpc_b64 s[30:31]9202;9203; GCN2-LABEL: flat_atomic_udec_wrap_i32_ret_offset:9204; GCN2:       ; %bb.0:9205; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9206; GCN2-NEXT:    v_add_u32_e32 v3, vcc, 16, v09207; GCN2-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc9208; GCN2-NEXT:    flat_load_dword v0, v[3:4]9209; GCN2-NEXT:    s_mov_b64 s[6:7], 09210; GCN2-NEXT:  .LBB144_1: ; %atomicrmw.start9211; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=19212; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9213; GCN2-NEXT:    v_mov_b32_e32 v1, v09214; GCN2-NEXT:    v_subrev_u32_e32 v0, vcc, 1, v19215; GCN2-NEXT:    v_cmp_gt_u32_e64 s[4:5], v1, v29216; GCN2-NEXT:    s_or_b64 vcc, vcc, s[4:5]9217; GCN2-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc9218; GCN2-NEXT:    flat_atomic_cmpswap v0, v[3:4], v[0:1] glc9219; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9220; GCN2-NEXT:    buffer_wbinvl1_vol9221; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v19222; GCN2-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]9223; GCN2-NEXT:    s_andn2_b64 exec, exec, s[6:7]9224; GCN2-NEXT:    s_cbranch_execnz .LBB144_19225; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end9226; GCN2-NEXT:    s_or_b64 exec, exec, s[6:7]9227; GCN2-NEXT:    s_setpc_b64 s[30:31]9228;9229; GCN3-LABEL: flat_atomic_udec_wrap_i32_ret_offset:9230; GCN3:       ; %bb.0:9231; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9232; GCN3-NEXT:    flat_load_dword v3, v[0:1] offset:169233; GCN3-NEXT:    s_mov_b64 s[6:7], 09234; GCN3-NEXT:  .LBB144_1: ; %atomicrmw.start9235; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=19236; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9237; GCN3-NEXT:    v_mov_b32_e32 v4, v39238; GCN3-NEXT:    v_subrev_co_u32_e32 v3, vcc, 1, v49239; GCN3-NEXT:    v_cmp_gt_u32_e64 s[4:5], v4, v29240; GCN3-NEXT:    s_or_b64 vcc, vcc, s[4:5]9241; GCN3-NEXT:    v_cndmask_b32_e32 v3, v3, v2, vcc9242; GCN3-NEXT:    flat_atomic_cmpswap v3, v[0:1], v[3:4] offset:16 glc9243; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9244; GCN3-NEXT:    buffer_wbinvl1_vol9245; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v49246; GCN3-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]9247; GCN3-NEXT:    s_andn2_b64 exec, exec, s[6:7]9248; GCN3-NEXT:    s_cbranch_execnz .LBB144_19249; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end9250; GCN3-NEXT:    s_or_b64 exec, exec, s[6:7]9251; GCN3-NEXT:    v_mov_b32_e32 v0, v39252; GCN3-NEXT:    s_setpc_b64 s[30:31]9253  %gep = getelementptr inbounds i32, ptr %out, i32 49254  %result = atomicrmw udec_wrap ptr %gep, i32 %in seq_cst9255  ret i32 %result9256}9257 9258define amdgpu_gfx void @flat_atomic_udec_wrap_i32_noret_scalar(ptr inreg %ptr, i32 inreg %in) {9259; GCN1-LABEL: flat_atomic_udec_wrap_i32_noret_scalar:9260; GCN1:       ; %bb.0:9261; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9262; GCN1-NEXT:    v_mov_b32_e32 v0, s49263; GCN1-NEXT:    v_mov_b32_e32 v1, s59264; GCN1-NEXT:    flat_load_dword v1, v[0:1]9265; GCN1-NEXT:    v_mov_b32_e32 v2, s49266; GCN1-NEXT:    s_mov_b64 s[36:37], 09267; GCN1-NEXT:    v_mov_b32_e32 v4, s69268; GCN1-NEXT:    v_mov_b32_e32 v3, s59269; GCN1-NEXT:  .LBB145_1: ; %atomicrmw.start9270; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=19271; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9272; GCN1-NEXT:    v_subrev_i32_e32 v0, vcc, 1, v19273; GCN1-NEXT:    v_cmp_lt_u32_e64 s[34:35], s6, v19274; GCN1-NEXT:    s_or_b64 vcc, vcc, s[34:35]9275; GCN1-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc9276; GCN1-NEXT:    flat_atomic_cmpswap v0, v[2:3], v[0:1] glc9277; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9278; GCN1-NEXT:    buffer_wbinvl1_vol9279; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v19280; GCN1-NEXT:    s_or_b64 s[36:37], vcc, s[36:37]9281; GCN1-NEXT:    v_mov_b32_e32 v1, v09282; GCN1-NEXT:    s_andn2_b64 exec, exec, s[36:37]9283; GCN1-NEXT:    s_cbranch_execnz .LBB145_19284; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end9285; GCN1-NEXT:    s_or_b64 exec, exec, s[36:37]9286; GCN1-NEXT:    s_setpc_b64 s[30:31]9287;9288; GCN2-LABEL: flat_atomic_udec_wrap_i32_noret_scalar:9289; GCN2:       ; %bb.0:9290; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9291; GCN2-NEXT:    v_mov_b32_e32 v0, s49292; GCN2-NEXT:    v_mov_b32_e32 v1, s59293; GCN2-NEXT:    flat_load_dword v1, v[0:1]9294; GCN2-NEXT:    v_mov_b32_e32 v2, s49295; GCN2-NEXT:    s_mov_b64 s[36:37], 09296; GCN2-NEXT:    v_mov_b32_e32 v4, s69297; GCN2-NEXT:    v_mov_b32_e32 v3, s59298; GCN2-NEXT:  .LBB145_1: ; %atomicrmw.start9299; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=19300; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9301; GCN2-NEXT:    v_subrev_u32_e32 v0, vcc, 1, v19302; GCN2-NEXT:    v_cmp_lt_u32_e64 s[34:35], s6, v19303; GCN2-NEXT:    s_or_b64 vcc, vcc, s[34:35]9304; GCN2-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc9305; GCN2-NEXT:    flat_atomic_cmpswap v0, v[2:3], v[0:1] glc9306; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9307; GCN2-NEXT:    buffer_wbinvl1_vol9308; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v19309; GCN2-NEXT:    s_or_b64 s[36:37], vcc, s[36:37]9310; GCN2-NEXT:    v_mov_b32_e32 v1, v09311; GCN2-NEXT:    s_andn2_b64 exec, exec, s[36:37]9312; GCN2-NEXT:    s_cbranch_execnz .LBB145_19313; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end9314; GCN2-NEXT:    s_or_b64 exec, exec, s[36:37]9315; GCN2-NEXT:    s_setpc_b64 s[30:31]9316;9317; GCN3-LABEL: flat_atomic_udec_wrap_i32_noret_scalar:9318; GCN3:       ; %bb.0:9319; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9320; GCN3-NEXT:    v_mov_b32_e32 v0, s49321; GCN3-NEXT:    v_mov_b32_e32 v1, s59322; GCN3-NEXT:    flat_load_dword v1, v[0:1]9323; GCN3-NEXT:    v_mov_b32_e32 v2, s49324; GCN3-NEXT:    s_mov_b64 s[36:37], 09325; GCN3-NEXT:    v_mov_b32_e32 v4, s69326; GCN3-NEXT:    v_mov_b32_e32 v3, s59327; GCN3-NEXT:  .LBB145_1: ; %atomicrmw.start9328; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=19329; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9330; GCN3-NEXT:    v_subrev_co_u32_e32 v0, vcc, 1, v19331; GCN3-NEXT:    v_cmp_lt_u32_e64 s[34:35], s6, v19332; GCN3-NEXT:    s_or_b64 vcc, vcc, s[34:35]9333; GCN3-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc9334; GCN3-NEXT:    flat_atomic_cmpswap v0, v[2:3], v[0:1] glc9335; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9336; GCN3-NEXT:    buffer_wbinvl1_vol9337; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v19338; GCN3-NEXT:    s_or_b64 s[36:37], vcc, s[36:37]9339; GCN3-NEXT:    v_mov_b32_e32 v1, v09340; GCN3-NEXT:    s_andn2_b64 exec, exec, s[36:37]9341; GCN3-NEXT:    s_cbranch_execnz .LBB145_19342; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end9343; GCN3-NEXT:    s_or_b64 exec, exec, s[36:37]9344; GCN3-NEXT:    s_setpc_b64 s[30:31]9345  %tmp0 = atomicrmw udec_wrap ptr %ptr, i32 %in seq_cst9346  ret void9347}9348 9349define amdgpu_gfx void @flat_atomic_udec_wrap_i32_noret_offset_scalar(ptr inreg %out, i32 inreg %in) {9350; GCN1-LABEL: flat_atomic_udec_wrap_i32_noret_offset_scalar:9351; GCN1:       ; %bb.0:9352; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9353; GCN1-NEXT:    s_add_u32 s34, s4, 169354; GCN1-NEXT:    s_addc_u32 s35, s5, 09355; GCN1-NEXT:    v_mov_b32_e32 v0, s349356; GCN1-NEXT:    v_mov_b32_e32 v1, s359357; GCN1-NEXT:    flat_load_dword v3, v[0:1]9358; GCN1-NEXT:    s_mov_b64 s[36:37], 09359; GCN1-NEXT:    v_mov_b32_e32 v4, s69360; GCN1-NEXT:  .LBB146_1: ; %atomicrmw.start9361; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=19362; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9363; GCN1-NEXT:    v_subrev_i32_e32 v2, vcc, 1, v39364; GCN1-NEXT:    v_cmp_lt_u32_e64 s[34:35], s6, v39365; GCN1-NEXT:    s_or_b64 vcc, vcc, s[34:35]9366; GCN1-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc9367; GCN1-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc9368; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9369; GCN1-NEXT:    buffer_wbinvl1_vol9370; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v39371; GCN1-NEXT:    s_or_b64 s[36:37], vcc, s[36:37]9372; GCN1-NEXT:    v_mov_b32_e32 v3, v29373; GCN1-NEXT:    s_andn2_b64 exec, exec, s[36:37]9374; GCN1-NEXT:    s_cbranch_execnz .LBB146_19375; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end9376; GCN1-NEXT:    s_or_b64 exec, exec, s[36:37]9377; GCN1-NEXT:    s_setpc_b64 s[30:31]9378;9379; GCN2-LABEL: flat_atomic_udec_wrap_i32_noret_offset_scalar:9380; GCN2:       ; %bb.0:9381; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9382; GCN2-NEXT:    s_add_u32 s34, s4, 169383; GCN2-NEXT:    s_addc_u32 s35, s5, 09384; GCN2-NEXT:    v_mov_b32_e32 v0, s349385; GCN2-NEXT:    v_mov_b32_e32 v1, s359386; GCN2-NEXT:    flat_load_dword v3, v[0:1]9387; GCN2-NEXT:    s_mov_b64 s[36:37], 09388; GCN2-NEXT:    v_mov_b32_e32 v4, s69389; GCN2-NEXT:  .LBB146_1: ; %atomicrmw.start9390; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=19391; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9392; GCN2-NEXT:    v_subrev_u32_e32 v2, vcc, 1, v39393; GCN2-NEXT:    v_cmp_lt_u32_e64 s[34:35], s6, v39394; GCN2-NEXT:    s_or_b64 vcc, vcc, s[34:35]9395; GCN2-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc9396; GCN2-NEXT:    flat_atomic_cmpswap v2, v[0:1], v[2:3] glc9397; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9398; GCN2-NEXT:    buffer_wbinvl1_vol9399; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v39400; GCN2-NEXT:    s_or_b64 s[36:37], vcc, s[36:37]9401; GCN2-NEXT:    v_mov_b32_e32 v3, v29402; GCN2-NEXT:    s_andn2_b64 exec, exec, s[36:37]9403; GCN2-NEXT:    s_cbranch_execnz .LBB146_19404; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end9405; GCN2-NEXT:    s_or_b64 exec, exec, s[36:37]9406; GCN2-NEXT:    s_setpc_b64 s[30:31]9407;9408; GCN3-LABEL: flat_atomic_udec_wrap_i32_noret_offset_scalar:9409; GCN3:       ; %bb.0:9410; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9411; GCN3-NEXT:    v_mov_b32_e32 v0, s49412; GCN3-NEXT:    v_mov_b32_e32 v1, s59413; GCN3-NEXT:    flat_load_dword v1, v[0:1] offset:169414; GCN3-NEXT:    v_mov_b32_e32 v2, s49415; GCN3-NEXT:    s_mov_b64 s[36:37], 09416; GCN3-NEXT:    v_mov_b32_e32 v4, s69417; GCN3-NEXT:    v_mov_b32_e32 v3, s59418; GCN3-NEXT:  .LBB146_1: ; %atomicrmw.start9419; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=19420; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9421; GCN3-NEXT:    v_subrev_co_u32_e32 v0, vcc, 1, v19422; GCN3-NEXT:    v_cmp_lt_u32_e64 s[34:35], s6, v19423; GCN3-NEXT:    s_or_b64 vcc, vcc, s[34:35]9424; GCN3-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc9425; GCN3-NEXT:    flat_atomic_cmpswap v0, v[2:3], v[0:1] offset:16 glc9426; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9427; GCN3-NEXT:    buffer_wbinvl1_vol9428; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v19429; GCN3-NEXT:    s_or_b64 s[36:37], vcc, s[36:37]9430; GCN3-NEXT:    v_mov_b32_e32 v1, v09431; GCN3-NEXT:    s_andn2_b64 exec, exec, s[36:37]9432; GCN3-NEXT:    s_cbranch_execnz .LBB146_19433; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end9434; GCN3-NEXT:    s_or_b64 exec, exec, s[36:37]9435; GCN3-NEXT:    s_setpc_b64 s[30:31]9436  %gep = getelementptr inbounds i32, ptr %out, i32 49437  %tmp0 = atomicrmw udec_wrap ptr %gep, i32 %in seq_cst9438  ret void9439}9440 9441define amdgpu_gfx i32 @flat_atomic_udec_wrap_i32_ret_scalar(ptr inreg %ptr, i32 inreg %in) {9442; GCN1-LABEL: flat_atomic_udec_wrap_i32_ret_scalar:9443; GCN1:       ; %bb.0:9444; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9445; GCN1-NEXT:    v_mov_b32_e32 v0, s49446; GCN1-NEXT:    v_mov_b32_e32 v1, s59447; GCN1-NEXT:    flat_load_dword v0, v[0:1]9448; GCN1-NEXT:    v_mov_b32_e32 v1, s49449; GCN1-NEXT:    s_mov_b64 s[36:37], 09450; GCN1-NEXT:    v_mov_b32_e32 v3, s69451; GCN1-NEXT:    v_mov_b32_e32 v2, s59452; GCN1-NEXT:  .LBB147_1: ; %atomicrmw.start9453; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=19454; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9455; GCN1-NEXT:    v_mov_b32_e32 v5, v09456; GCN1-NEXT:    v_subrev_i32_e32 v0, vcc, 1, v59457; GCN1-NEXT:    v_cmp_lt_u32_e64 s[34:35], s6, v59458; GCN1-NEXT:    s_or_b64 vcc, vcc, s[34:35]9459; GCN1-NEXT:    v_cndmask_b32_e32 v4, v0, v3, vcc9460; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[4:5] glc9461; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9462; GCN1-NEXT:    buffer_wbinvl1_vol9463; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v59464; GCN1-NEXT:    s_or_b64 s[36:37], vcc, s[36:37]9465; GCN1-NEXT:    s_andn2_b64 exec, exec, s[36:37]9466; GCN1-NEXT:    s_cbranch_execnz .LBB147_19467; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end9468; GCN1-NEXT:    s_or_b64 exec, exec, s[36:37]9469; GCN1-NEXT:    s_setpc_b64 s[30:31]9470;9471; GCN2-LABEL: flat_atomic_udec_wrap_i32_ret_scalar:9472; GCN2:       ; %bb.0:9473; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9474; GCN2-NEXT:    v_mov_b32_e32 v0, s49475; GCN2-NEXT:    v_mov_b32_e32 v1, s59476; GCN2-NEXT:    flat_load_dword v0, v[0:1]9477; GCN2-NEXT:    v_mov_b32_e32 v1, s49478; GCN2-NEXT:    s_mov_b64 s[36:37], 09479; GCN2-NEXT:    v_mov_b32_e32 v3, s69480; GCN2-NEXT:    v_mov_b32_e32 v2, s59481; GCN2-NEXT:  .LBB147_1: ; %atomicrmw.start9482; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=19483; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9484; GCN2-NEXT:    v_mov_b32_e32 v5, v09485; GCN2-NEXT:    v_subrev_u32_e32 v0, vcc, 1, v59486; GCN2-NEXT:    v_cmp_lt_u32_e64 s[34:35], s6, v59487; GCN2-NEXT:    s_or_b64 vcc, vcc, s[34:35]9488; GCN2-NEXT:    v_cndmask_b32_e32 v4, v0, v3, vcc9489; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[4:5] glc9490; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9491; GCN2-NEXT:    buffer_wbinvl1_vol9492; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v59493; GCN2-NEXT:    s_or_b64 s[36:37], vcc, s[36:37]9494; GCN2-NEXT:    s_andn2_b64 exec, exec, s[36:37]9495; GCN2-NEXT:    s_cbranch_execnz .LBB147_19496; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end9497; GCN2-NEXT:    s_or_b64 exec, exec, s[36:37]9498; GCN2-NEXT:    s_setpc_b64 s[30:31]9499;9500; GCN3-LABEL: flat_atomic_udec_wrap_i32_ret_scalar:9501; GCN3:       ; %bb.0:9502; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9503; GCN3-NEXT:    v_mov_b32_e32 v0, s49504; GCN3-NEXT:    v_mov_b32_e32 v1, s59505; GCN3-NEXT:    flat_load_dword v0, v[0:1]9506; GCN3-NEXT:    v_mov_b32_e32 v1, s49507; GCN3-NEXT:    s_mov_b64 s[36:37], 09508; GCN3-NEXT:    v_mov_b32_e32 v3, s69509; GCN3-NEXT:    v_mov_b32_e32 v2, s59510; GCN3-NEXT:  .LBB147_1: ; %atomicrmw.start9511; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=19512; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9513; GCN3-NEXT:    v_mov_b32_e32 v5, v09514; GCN3-NEXT:    v_subrev_co_u32_e32 v0, vcc, 1, v59515; GCN3-NEXT:    v_cmp_lt_u32_e64 s[34:35], s6, v59516; GCN3-NEXT:    s_or_b64 vcc, vcc, s[34:35]9517; GCN3-NEXT:    v_cndmask_b32_e32 v4, v0, v3, vcc9518; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[4:5] glc9519; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9520; GCN3-NEXT:    buffer_wbinvl1_vol9521; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v59522; GCN3-NEXT:    s_or_b64 s[36:37], vcc, s[36:37]9523; GCN3-NEXT:    s_andn2_b64 exec, exec, s[36:37]9524; GCN3-NEXT:    s_cbranch_execnz .LBB147_19525; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end9526; GCN3-NEXT:    s_or_b64 exec, exec, s[36:37]9527; GCN3-NEXT:    s_setpc_b64 s[30:31]9528  %result = atomicrmw udec_wrap ptr %ptr, i32 %in seq_cst9529  ret i32 %result9530}9531 9532define amdgpu_gfx i32 @flat_atomic_udec_wrap_i32_ret_offset_scalar(ptr inreg %out, i32 inreg %in) {9533; GCN1-LABEL: flat_atomic_udec_wrap_i32_ret_offset_scalar:9534; GCN1:       ; %bb.0:9535; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9536; GCN1-NEXT:    s_add_u32 s34, s4, 169537; GCN1-NEXT:    s_addc_u32 s35, s5, 09538; GCN1-NEXT:    v_mov_b32_e32 v1, s349539; GCN1-NEXT:    v_mov_b32_e32 v2, s359540; GCN1-NEXT:    flat_load_dword v0, v[1:2]9541; GCN1-NEXT:    s_mov_b64 s[36:37], 09542; GCN1-NEXT:    v_mov_b32_e32 v3, s69543; GCN1-NEXT:  .LBB148_1: ; %atomicrmw.start9544; GCN1-NEXT:    ; =>This Inner Loop Header: Depth=19545; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9546; GCN1-NEXT:    v_mov_b32_e32 v5, v09547; GCN1-NEXT:    v_subrev_i32_e32 v0, vcc, 1, v59548; GCN1-NEXT:    v_cmp_lt_u32_e64 s[34:35], s6, v59549; GCN1-NEXT:    s_or_b64 vcc, vcc, s[34:35]9550; GCN1-NEXT:    v_cndmask_b32_e32 v4, v0, v3, vcc9551; GCN1-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[4:5] glc9552; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9553; GCN1-NEXT:    buffer_wbinvl1_vol9554; GCN1-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v59555; GCN1-NEXT:    s_or_b64 s[36:37], vcc, s[36:37]9556; GCN1-NEXT:    s_andn2_b64 exec, exec, s[36:37]9557; GCN1-NEXT:    s_cbranch_execnz .LBB148_19558; GCN1-NEXT:  ; %bb.2: ; %atomicrmw.end9559; GCN1-NEXT:    s_or_b64 exec, exec, s[36:37]9560; GCN1-NEXT:    s_setpc_b64 s[30:31]9561;9562; GCN2-LABEL: flat_atomic_udec_wrap_i32_ret_offset_scalar:9563; GCN2:       ; %bb.0:9564; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9565; GCN2-NEXT:    s_add_u32 s34, s4, 169566; GCN2-NEXT:    s_addc_u32 s35, s5, 09567; GCN2-NEXT:    v_mov_b32_e32 v1, s349568; GCN2-NEXT:    v_mov_b32_e32 v2, s359569; GCN2-NEXT:    flat_load_dword v0, v[1:2]9570; GCN2-NEXT:    s_mov_b64 s[36:37], 09571; GCN2-NEXT:    v_mov_b32_e32 v3, s69572; GCN2-NEXT:  .LBB148_1: ; %atomicrmw.start9573; GCN2-NEXT:    ; =>This Inner Loop Header: Depth=19574; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9575; GCN2-NEXT:    v_mov_b32_e32 v5, v09576; GCN2-NEXT:    v_subrev_u32_e32 v0, vcc, 1, v59577; GCN2-NEXT:    v_cmp_lt_u32_e64 s[34:35], s6, v59578; GCN2-NEXT:    s_or_b64 vcc, vcc, s[34:35]9579; GCN2-NEXT:    v_cndmask_b32_e32 v4, v0, v3, vcc9580; GCN2-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[4:5] glc9581; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9582; GCN2-NEXT:    buffer_wbinvl1_vol9583; GCN2-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v59584; GCN2-NEXT:    s_or_b64 s[36:37], vcc, s[36:37]9585; GCN2-NEXT:    s_andn2_b64 exec, exec, s[36:37]9586; GCN2-NEXT:    s_cbranch_execnz .LBB148_19587; GCN2-NEXT:  ; %bb.2: ; %atomicrmw.end9588; GCN2-NEXT:    s_or_b64 exec, exec, s[36:37]9589; GCN2-NEXT:    s_setpc_b64 s[30:31]9590;9591; GCN3-LABEL: flat_atomic_udec_wrap_i32_ret_offset_scalar:9592; GCN3:       ; %bb.0:9593; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9594; GCN3-NEXT:    v_mov_b32_e32 v0, s49595; GCN3-NEXT:    v_mov_b32_e32 v1, s59596; GCN3-NEXT:    flat_load_dword v0, v[0:1] offset:169597; GCN3-NEXT:    v_mov_b32_e32 v1, s49598; GCN3-NEXT:    s_mov_b64 s[36:37], 09599; GCN3-NEXT:    v_mov_b32_e32 v3, s69600; GCN3-NEXT:    v_mov_b32_e32 v2, s59601; GCN3-NEXT:  .LBB148_1: ; %atomicrmw.start9602; GCN3-NEXT:    ; =>This Inner Loop Header: Depth=19603; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9604; GCN3-NEXT:    v_mov_b32_e32 v5, v09605; GCN3-NEXT:    v_subrev_co_u32_e32 v0, vcc, 1, v59606; GCN3-NEXT:    v_cmp_lt_u32_e64 s[34:35], s6, v59607; GCN3-NEXT:    s_or_b64 vcc, vcc, s[34:35]9608; GCN3-NEXT:    v_cndmask_b32_e32 v4, v0, v3, vcc9609; GCN3-NEXT:    flat_atomic_cmpswap v0, v[1:2], v[4:5] offset:16 glc9610; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9611; GCN3-NEXT:    buffer_wbinvl1_vol9612; GCN3-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v59613; GCN3-NEXT:    s_or_b64 s[36:37], vcc, s[36:37]9614; GCN3-NEXT:    s_andn2_b64 exec, exec, s[36:37]9615; GCN3-NEXT:    s_cbranch_execnz .LBB148_19616; GCN3-NEXT:  ; %bb.2: ; %atomicrmw.end9617; GCN3-NEXT:    s_or_b64 exec, exec, s[36:37]9618; GCN3-NEXT:    s_setpc_b64 s[30:31]9619  %gep = getelementptr inbounds i32, ptr %out, i32 49620  %result = atomicrmw udec_wrap ptr %gep, i32 %in seq_cst9621  ret i32 %result9622}9623 9624define void @flat_udec_wrap_i32_noret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {9625; GCN1-LABEL: flat_udec_wrap_i32_noret_offset__amdgpu_no_remote_memory:9626; GCN1:       ; %bb.0:9627; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9628; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v09629; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc9630; GCN1-NEXT:    flat_atomic_dec v[0:1], v29631; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9632; GCN1-NEXT:    buffer_wbinvl1_vol9633; GCN1-NEXT:    s_setpc_b64 s[30:31]9634;9635; GCN2-LABEL: flat_udec_wrap_i32_noret_offset__amdgpu_no_remote_memory:9636; GCN2:       ; %bb.0:9637; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9638; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v09639; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc9640; GCN2-NEXT:    flat_atomic_dec v[0:1], v29641; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9642; GCN2-NEXT:    buffer_wbinvl1_vol9643; GCN2-NEXT:    s_setpc_b64 s[30:31]9644;9645; GCN3-LABEL: flat_udec_wrap_i32_noret_offset__amdgpu_no_remote_memory:9646; GCN3:       ; %bb.0:9647; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9648; GCN3-NEXT:    flat_atomic_dec v[0:1], v2 offset:169649; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9650; GCN3-NEXT:    buffer_wbinvl1_vol9651; GCN3-NEXT:    s_setpc_b64 s[30:31]9652  %gep = getelementptr inbounds i32, ptr %out, i64 49653  %tmp0 = atomicrmw udec_wrap ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !09654  ret void9655}9656 9657define i32 @flat_atomic_udec_wrap_i32_ret_offset__amdgpu_no_remote_memory(ptr %out, i32 %in) {9658; GCN1-LABEL: flat_atomic_udec_wrap_i32_ret_offset__amdgpu_no_remote_memory:9659; GCN1:       ; %bb.0:9660; GCN1-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9661; GCN1-NEXT:    v_add_i32_e32 v0, vcc, 16, v09662; GCN1-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc9663; GCN1-NEXT:    flat_atomic_dec v0, v[0:1], v2 glc9664; GCN1-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9665; GCN1-NEXT:    buffer_wbinvl1_vol9666; GCN1-NEXT:    s_setpc_b64 s[30:31]9667;9668; GCN2-LABEL: flat_atomic_udec_wrap_i32_ret_offset__amdgpu_no_remote_memory:9669; GCN2:       ; %bb.0:9670; GCN2-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9671; GCN2-NEXT:    v_add_u32_e32 v0, vcc, 16, v09672; GCN2-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc9673; GCN2-NEXT:    flat_atomic_dec v0, v[0:1], v2 glc9674; GCN2-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9675; GCN2-NEXT:    buffer_wbinvl1_vol9676; GCN2-NEXT:    s_setpc_b64 s[30:31]9677;9678; GCN3-LABEL: flat_atomic_udec_wrap_i32_ret_offset__amdgpu_no_remote_memory:9679; GCN3:       ; %bb.0:9680; GCN3-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9681; GCN3-NEXT:    flat_atomic_dec v0, v[0:1], v2 offset:16 glc9682; GCN3-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)9683; GCN3-NEXT:    buffer_wbinvl1_vol9684; GCN3-NEXT:    s_setpc_b64 s[30:31]9685  %gep = getelementptr inbounds i32, ptr %out, i64 49686  %result = atomicrmw udec_wrap ptr %gep, i32 %in seq_cst, !amdgpu.no.remote.memory !09687  ret i32 %result9688}9689 9690!0 = !{}9691