brintos

brintos / llvm-project-archived public Read only

0
0
Text · 84.7 KiB · d2ee008 Raw
2162 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -o - %s | FileCheck -check-prefix=GFX9 %s3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -o - %s | FileCheck -check-prefix=GFX10 %s4; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -mattr=-real-true16 -o - %s | FileCheck -check-prefixes=GFX10 %s5; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 -mattr=-real-true16 -o - %s | FileCheck -check-prefixes=GFX12 %s6 7define amdgpu_ps float @atomic_swap_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {8; GFX9-LABEL: atomic_swap_i32_1d:9; GFX9:       ; %bb.0: ; %main_body10; GFX9-NEXT:    s_mov_b32 s0, s211; GFX9-NEXT:    s_mov_b32 s1, s312; GFX9-NEXT:    s_mov_b32 s2, s413; GFX9-NEXT:    s_mov_b32 s3, s514; GFX9-NEXT:    s_mov_b32 s4, s615; GFX9-NEXT:    s_mov_b32 s5, s716; GFX9-NEXT:    s_mov_b32 s6, s817; GFX9-NEXT:    s_mov_b32 s7, s918; GFX9-NEXT:    image_atomic_swap v0, v1, s[0:7] dmask:0x1 unorm glc a1619; GFX9-NEXT:    s_waitcnt vmcnt(0)20; GFX9-NEXT:    ; return to shader part epilog21;22; GFX10-LABEL: atomic_swap_i32_1d:23; GFX10:       ; %bb.0: ; %main_body24; GFX10-NEXT:    s_mov_b32 s0, s225; GFX10-NEXT:    s_mov_b32 s1, s326; GFX10-NEXT:    s_mov_b32 s2, s427; GFX10-NEXT:    s_mov_b32 s3, s528; GFX10-NEXT:    s_mov_b32 s4, s629; GFX10-NEXT:    s_mov_b32 s5, s730; GFX10-NEXT:    s_mov_b32 s6, s831; GFX10-NEXT:    s_mov_b32 s7, s932; GFX10-NEXT:    image_atomic_swap v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a1633; GFX10-NEXT:    s_waitcnt vmcnt(0)34; GFX10-NEXT:    ; return to shader part epilog35;36; GFX12-LABEL: atomic_swap_i32_1d:37; GFX12:       ; %bb.0: ; %main_body38; GFX12-NEXT:    s_mov_b32 s0, s239; GFX12-NEXT:    s_mov_b32 s1, s340; GFX12-NEXT:    s_mov_b32 s2, s441; GFX12-NEXT:    s_mov_b32 s3, s542; GFX12-NEXT:    s_mov_b32 s4, s643; GFX12-NEXT:    s_mov_b32 s5, s744; GFX12-NEXT:    s_mov_b32 s6, s845; GFX12-NEXT:    s_mov_b32 s7, s946; GFX12-NEXT:    image_atomic_swap v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a1647; GFX12-NEXT:    s_wait_loadcnt 0x048; GFX12-NEXT:    ; return to shader part epilog49main_body:50  %v = call i32 @llvm.amdgcn.image.atomic.swap.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)51  %out = bitcast i32 %v to float52  ret float %out53}54 55define amdgpu_ps float @atomic_add_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {56; GFX9-LABEL: atomic_add_i32_1d:57; GFX9:       ; %bb.0: ; %main_body58; GFX9-NEXT:    s_mov_b32 s0, s259; GFX9-NEXT:    s_mov_b32 s1, s360; GFX9-NEXT:    s_mov_b32 s2, s461; GFX9-NEXT:    s_mov_b32 s3, s562; GFX9-NEXT:    s_mov_b32 s4, s663; GFX9-NEXT:    s_mov_b32 s5, s764; GFX9-NEXT:    s_mov_b32 s6, s865; GFX9-NEXT:    s_mov_b32 s7, s966; GFX9-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc a1667; GFX9-NEXT:    s_waitcnt vmcnt(0)68; GFX9-NEXT:    ; return to shader part epilog69;70; GFX10-LABEL: atomic_add_i32_1d:71; GFX10:       ; %bb.0: ; %main_body72; GFX10-NEXT:    s_mov_b32 s0, s273; GFX10-NEXT:    s_mov_b32 s1, s374; GFX10-NEXT:    s_mov_b32 s2, s475; GFX10-NEXT:    s_mov_b32 s3, s576; GFX10-NEXT:    s_mov_b32 s4, s677; GFX10-NEXT:    s_mov_b32 s5, s778; GFX10-NEXT:    s_mov_b32 s6, s879; GFX10-NEXT:    s_mov_b32 s7, s980; GFX10-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a1681; GFX10-NEXT:    s_waitcnt vmcnt(0)82; GFX10-NEXT:    ; return to shader part epilog83;84; GFX12-LABEL: atomic_add_i32_1d:85; GFX12:       ; %bb.0: ; %main_body86; GFX12-NEXT:    s_mov_b32 s0, s287; GFX12-NEXT:    s_mov_b32 s1, s388; GFX12-NEXT:    s_mov_b32 s2, s489; GFX12-NEXT:    s_mov_b32 s3, s590; GFX12-NEXT:    s_mov_b32 s4, s691; GFX12-NEXT:    s_mov_b32 s5, s792; GFX12-NEXT:    s_mov_b32 s6, s893; GFX12-NEXT:    s_mov_b32 s7, s994; GFX12-NEXT:    image_atomic_add_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a1695; GFX12-NEXT:    s_wait_loadcnt 0x096; GFX12-NEXT:    ; return to shader part epilog97main_body:98  %v = call i32 @llvm.amdgcn.image.atomic.add.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)99  %out = bitcast i32 %v to float100  ret float %out101}102 103define amdgpu_ps float @atomic_sub_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {104; GFX9-LABEL: atomic_sub_i32_1d:105; GFX9:       ; %bb.0: ; %main_body106; GFX9-NEXT:    s_mov_b32 s0, s2107; GFX9-NEXT:    s_mov_b32 s1, s3108; GFX9-NEXT:    s_mov_b32 s2, s4109; GFX9-NEXT:    s_mov_b32 s3, s5110; GFX9-NEXT:    s_mov_b32 s4, s6111; GFX9-NEXT:    s_mov_b32 s5, s7112; GFX9-NEXT:    s_mov_b32 s6, s8113; GFX9-NEXT:    s_mov_b32 s7, s9114; GFX9-NEXT:    image_atomic_sub v0, v1, s[0:7] dmask:0x1 unorm glc a16115; GFX9-NEXT:    s_waitcnt vmcnt(0)116; GFX9-NEXT:    ; return to shader part epilog117;118; GFX10-LABEL: atomic_sub_i32_1d:119; GFX10:       ; %bb.0: ; %main_body120; GFX10-NEXT:    s_mov_b32 s0, s2121; GFX10-NEXT:    s_mov_b32 s1, s3122; GFX10-NEXT:    s_mov_b32 s2, s4123; GFX10-NEXT:    s_mov_b32 s3, s5124; GFX10-NEXT:    s_mov_b32 s4, s6125; GFX10-NEXT:    s_mov_b32 s5, s7126; GFX10-NEXT:    s_mov_b32 s6, s8127; GFX10-NEXT:    s_mov_b32 s7, s9128; GFX10-NEXT:    image_atomic_sub v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16129; GFX10-NEXT:    s_waitcnt vmcnt(0)130; GFX10-NEXT:    ; return to shader part epilog131;132; GFX12-LABEL: atomic_sub_i32_1d:133; GFX12:       ; %bb.0: ; %main_body134; GFX12-NEXT:    s_mov_b32 s0, s2135; GFX12-NEXT:    s_mov_b32 s1, s3136; GFX12-NEXT:    s_mov_b32 s2, s4137; GFX12-NEXT:    s_mov_b32 s3, s5138; GFX12-NEXT:    s_mov_b32 s4, s6139; GFX12-NEXT:    s_mov_b32 s5, s7140; GFX12-NEXT:    s_mov_b32 s6, s8141; GFX12-NEXT:    s_mov_b32 s7, s9142; GFX12-NEXT:    image_atomic_sub_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16143; GFX12-NEXT:    s_wait_loadcnt 0x0144; GFX12-NEXT:    ; return to shader part epilog145main_body:146  %v = call i32 @llvm.amdgcn.image.atomic.sub.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)147  %out = bitcast i32 %v to float148  ret float %out149}150 151define amdgpu_ps float @atomic_smin_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {152; GFX9-LABEL: atomic_smin_i32_1d:153; GFX9:       ; %bb.0: ; %main_body154; GFX9-NEXT:    s_mov_b32 s0, s2155; GFX9-NEXT:    s_mov_b32 s1, s3156; GFX9-NEXT:    s_mov_b32 s2, s4157; GFX9-NEXT:    s_mov_b32 s3, s5158; GFX9-NEXT:    s_mov_b32 s4, s6159; GFX9-NEXT:    s_mov_b32 s5, s7160; GFX9-NEXT:    s_mov_b32 s6, s8161; GFX9-NEXT:    s_mov_b32 s7, s9162; GFX9-NEXT:    image_atomic_smin v0, v1, s[0:7] dmask:0x1 unorm glc a16163; GFX9-NEXT:    s_waitcnt vmcnt(0)164; GFX9-NEXT:    ; return to shader part epilog165;166; GFX10-LABEL: atomic_smin_i32_1d:167; GFX10:       ; %bb.0: ; %main_body168; GFX10-NEXT:    s_mov_b32 s0, s2169; GFX10-NEXT:    s_mov_b32 s1, s3170; GFX10-NEXT:    s_mov_b32 s2, s4171; GFX10-NEXT:    s_mov_b32 s3, s5172; GFX10-NEXT:    s_mov_b32 s4, s6173; GFX10-NEXT:    s_mov_b32 s5, s7174; GFX10-NEXT:    s_mov_b32 s6, s8175; GFX10-NEXT:    s_mov_b32 s7, s9176; GFX10-NEXT:    image_atomic_smin v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16177; GFX10-NEXT:    s_waitcnt vmcnt(0)178; GFX10-NEXT:    ; return to shader part epilog179;180; GFX12-LABEL: atomic_smin_i32_1d:181; GFX12:       ; %bb.0: ; %main_body182; GFX12-NEXT:    s_mov_b32 s0, s2183; GFX12-NEXT:    s_mov_b32 s1, s3184; GFX12-NEXT:    s_mov_b32 s2, s4185; GFX12-NEXT:    s_mov_b32 s3, s5186; GFX12-NEXT:    s_mov_b32 s4, s6187; GFX12-NEXT:    s_mov_b32 s5, s7188; GFX12-NEXT:    s_mov_b32 s6, s8189; GFX12-NEXT:    s_mov_b32 s7, s9190; GFX12-NEXT:    image_atomic_min_int v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16191; GFX12-NEXT:    s_wait_loadcnt 0x0192; GFX12-NEXT:    ; return to shader part epilog193main_body:194  %v = call i32 @llvm.amdgcn.image.atomic.smin.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)195  %out = bitcast i32 %v to float196  ret float %out197}198 199define amdgpu_ps float @atomic_umin_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {200; GFX9-LABEL: atomic_umin_i32_1d:201; GFX9:       ; %bb.0: ; %main_body202; GFX9-NEXT:    s_mov_b32 s0, s2203; GFX9-NEXT:    s_mov_b32 s1, s3204; GFX9-NEXT:    s_mov_b32 s2, s4205; GFX9-NEXT:    s_mov_b32 s3, s5206; GFX9-NEXT:    s_mov_b32 s4, s6207; GFX9-NEXT:    s_mov_b32 s5, s7208; GFX9-NEXT:    s_mov_b32 s6, s8209; GFX9-NEXT:    s_mov_b32 s7, s9210; GFX9-NEXT:    image_atomic_umin v0, v1, s[0:7] dmask:0x1 unorm glc a16211; GFX9-NEXT:    s_waitcnt vmcnt(0)212; GFX9-NEXT:    ; return to shader part epilog213;214; GFX10-LABEL: atomic_umin_i32_1d:215; GFX10:       ; %bb.0: ; %main_body216; GFX10-NEXT:    s_mov_b32 s0, s2217; GFX10-NEXT:    s_mov_b32 s1, s3218; GFX10-NEXT:    s_mov_b32 s2, s4219; GFX10-NEXT:    s_mov_b32 s3, s5220; GFX10-NEXT:    s_mov_b32 s4, s6221; GFX10-NEXT:    s_mov_b32 s5, s7222; GFX10-NEXT:    s_mov_b32 s6, s8223; GFX10-NEXT:    s_mov_b32 s7, s9224; GFX10-NEXT:    image_atomic_umin v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16225; GFX10-NEXT:    s_waitcnt vmcnt(0)226; GFX10-NEXT:    ; return to shader part epilog227;228; GFX12-LABEL: atomic_umin_i32_1d:229; GFX12:       ; %bb.0: ; %main_body230; GFX12-NEXT:    s_mov_b32 s0, s2231; GFX12-NEXT:    s_mov_b32 s1, s3232; GFX12-NEXT:    s_mov_b32 s2, s4233; GFX12-NEXT:    s_mov_b32 s3, s5234; GFX12-NEXT:    s_mov_b32 s4, s6235; GFX12-NEXT:    s_mov_b32 s5, s7236; GFX12-NEXT:    s_mov_b32 s6, s8237; GFX12-NEXT:    s_mov_b32 s7, s9238; GFX12-NEXT:    image_atomic_min_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16239; GFX12-NEXT:    s_wait_loadcnt 0x0240; GFX12-NEXT:    ; return to shader part epilog241main_body:242  %v = call i32 @llvm.amdgcn.image.atomic.umin.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)243  %out = bitcast i32 %v to float244  ret float %out245}246 247define amdgpu_ps float @atomic_smax_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {248; GFX9-LABEL: atomic_smax_i32_1d:249; GFX9:       ; %bb.0: ; %main_body250; GFX9-NEXT:    s_mov_b32 s0, s2251; GFX9-NEXT:    s_mov_b32 s1, s3252; GFX9-NEXT:    s_mov_b32 s2, s4253; GFX9-NEXT:    s_mov_b32 s3, s5254; GFX9-NEXT:    s_mov_b32 s4, s6255; GFX9-NEXT:    s_mov_b32 s5, s7256; GFX9-NEXT:    s_mov_b32 s6, s8257; GFX9-NEXT:    s_mov_b32 s7, s9258; GFX9-NEXT:    image_atomic_smax v0, v1, s[0:7] dmask:0x1 unorm glc a16259; GFX9-NEXT:    s_waitcnt vmcnt(0)260; GFX9-NEXT:    ; return to shader part epilog261;262; GFX10-LABEL: atomic_smax_i32_1d:263; GFX10:       ; %bb.0: ; %main_body264; GFX10-NEXT:    s_mov_b32 s0, s2265; GFX10-NEXT:    s_mov_b32 s1, s3266; GFX10-NEXT:    s_mov_b32 s2, s4267; GFX10-NEXT:    s_mov_b32 s3, s5268; GFX10-NEXT:    s_mov_b32 s4, s6269; GFX10-NEXT:    s_mov_b32 s5, s7270; GFX10-NEXT:    s_mov_b32 s6, s8271; GFX10-NEXT:    s_mov_b32 s7, s9272; GFX10-NEXT:    image_atomic_smax v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16273; GFX10-NEXT:    s_waitcnt vmcnt(0)274; GFX10-NEXT:    ; return to shader part epilog275;276; GFX12-LABEL: atomic_smax_i32_1d:277; GFX12:       ; %bb.0: ; %main_body278; GFX12-NEXT:    s_mov_b32 s0, s2279; GFX12-NEXT:    s_mov_b32 s1, s3280; GFX12-NEXT:    s_mov_b32 s2, s4281; GFX12-NEXT:    s_mov_b32 s3, s5282; GFX12-NEXT:    s_mov_b32 s4, s6283; GFX12-NEXT:    s_mov_b32 s5, s7284; GFX12-NEXT:    s_mov_b32 s6, s8285; GFX12-NEXT:    s_mov_b32 s7, s9286; GFX12-NEXT:    image_atomic_max_int v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16287; GFX12-NEXT:    s_wait_loadcnt 0x0288; GFX12-NEXT:    ; return to shader part epilog289main_body:290  %v = call i32 @llvm.amdgcn.image.atomic.smax.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)291  %out = bitcast i32 %v to float292  ret float %out293}294 295define amdgpu_ps float @atomic_umax_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {296; GFX9-LABEL: atomic_umax_i32_1d:297; GFX9:       ; %bb.0: ; %main_body298; GFX9-NEXT:    s_mov_b32 s0, s2299; GFX9-NEXT:    s_mov_b32 s1, s3300; GFX9-NEXT:    s_mov_b32 s2, s4301; GFX9-NEXT:    s_mov_b32 s3, s5302; GFX9-NEXT:    s_mov_b32 s4, s6303; GFX9-NEXT:    s_mov_b32 s5, s7304; GFX9-NEXT:    s_mov_b32 s6, s8305; GFX9-NEXT:    s_mov_b32 s7, s9306; GFX9-NEXT:    image_atomic_umax v0, v1, s[0:7] dmask:0x1 unorm glc a16307; GFX9-NEXT:    s_waitcnt vmcnt(0)308; GFX9-NEXT:    ; return to shader part epilog309;310; GFX10-LABEL: atomic_umax_i32_1d:311; GFX10:       ; %bb.0: ; %main_body312; GFX10-NEXT:    s_mov_b32 s0, s2313; GFX10-NEXT:    s_mov_b32 s1, s3314; GFX10-NEXT:    s_mov_b32 s2, s4315; GFX10-NEXT:    s_mov_b32 s3, s5316; GFX10-NEXT:    s_mov_b32 s4, s6317; GFX10-NEXT:    s_mov_b32 s5, s7318; GFX10-NEXT:    s_mov_b32 s6, s8319; GFX10-NEXT:    s_mov_b32 s7, s9320; GFX10-NEXT:    image_atomic_umax v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16321; GFX10-NEXT:    s_waitcnt vmcnt(0)322; GFX10-NEXT:    ; return to shader part epilog323;324; GFX12-LABEL: atomic_umax_i32_1d:325; GFX12:       ; %bb.0: ; %main_body326; GFX12-NEXT:    s_mov_b32 s0, s2327; GFX12-NEXT:    s_mov_b32 s1, s3328; GFX12-NEXT:    s_mov_b32 s2, s4329; GFX12-NEXT:    s_mov_b32 s3, s5330; GFX12-NEXT:    s_mov_b32 s4, s6331; GFX12-NEXT:    s_mov_b32 s5, s7332; GFX12-NEXT:    s_mov_b32 s6, s8333; GFX12-NEXT:    s_mov_b32 s7, s9334; GFX12-NEXT:    image_atomic_max_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16335; GFX12-NEXT:    s_wait_loadcnt 0x0336; GFX12-NEXT:    ; return to shader part epilog337main_body:338  %v = call i32 @llvm.amdgcn.image.atomic.umax.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)339  %out = bitcast i32 %v to float340  ret float %out341}342 343define amdgpu_ps float @atomic_and_i321d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {344; GFX9-LABEL: atomic_and_i321d:345; GFX9:       ; %bb.0: ; %main_body346; GFX9-NEXT:    s_mov_b32 s0, s2347; GFX9-NEXT:    s_mov_b32 s1, s3348; GFX9-NEXT:    s_mov_b32 s2, s4349; GFX9-NEXT:    s_mov_b32 s3, s5350; GFX9-NEXT:    s_mov_b32 s4, s6351; GFX9-NEXT:    s_mov_b32 s5, s7352; GFX9-NEXT:    s_mov_b32 s6, s8353; GFX9-NEXT:    s_mov_b32 s7, s9354; GFX9-NEXT:    image_atomic_and v0, v1, s[0:7] dmask:0x1 unorm glc a16355; GFX9-NEXT:    s_waitcnt vmcnt(0)356; GFX9-NEXT:    ; return to shader part epilog357;358; GFX10-LABEL: atomic_and_i321d:359; GFX10:       ; %bb.0: ; %main_body360; GFX10-NEXT:    s_mov_b32 s0, s2361; GFX10-NEXT:    s_mov_b32 s1, s3362; GFX10-NEXT:    s_mov_b32 s2, s4363; GFX10-NEXT:    s_mov_b32 s3, s5364; GFX10-NEXT:    s_mov_b32 s4, s6365; GFX10-NEXT:    s_mov_b32 s5, s7366; GFX10-NEXT:    s_mov_b32 s6, s8367; GFX10-NEXT:    s_mov_b32 s7, s9368; GFX10-NEXT:    image_atomic_and v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16369; GFX10-NEXT:    s_waitcnt vmcnt(0)370; GFX10-NEXT:    ; return to shader part epilog371;372; GFX12-LABEL: atomic_and_i321d:373; GFX12:       ; %bb.0: ; %main_body374; GFX12-NEXT:    s_mov_b32 s0, s2375; GFX12-NEXT:    s_mov_b32 s1, s3376; GFX12-NEXT:    s_mov_b32 s2, s4377; GFX12-NEXT:    s_mov_b32 s3, s5378; GFX12-NEXT:    s_mov_b32 s4, s6379; GFX12-NEXT:    s_mov_b32 s5, s7380; GFX12-NEXT:    s_mov_b32 s6, s8381; GFX12-NEXT:    s_mov_b32 s7, s9382; GFX12-NEXT:    image_atomic_and v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16383; GFX12-NEXT:    s_wait_loadcnt 0x0384; GFX12-NEXT:    ; return to shader part epilog385main_body:386  %v = call i32 @llvm.amdgcn.image.atomic.and.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)387  %out = bitcast i32 %v to float388  ret float %out389}390 391define amdgpu_ps float @atomic_or_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {392; GFX9-LABEL: atomic_or_i32_1d:393; GFX9:       ; %bb.0: ; %main_body394; GFX9-NEXT:    s_mov_b32 s0, s2395; GFX9-NEXT:    s_mov_b32 s1, s3396; GFX9-NEXT:    s_mov_b32 s2, s4397; GFX9-NEXT:    s_mov_b32 s3, s5398; GFX9-NEXT:    s_mov_b32 s4, s6399; GFX9-NEXT:    s_mov_b32 s5, s7400; GFX9-NEXT:    s_mov_b32 s6, s8401; GFX9-NEXT:    s_mov_b32 s7, s9402; GFX9-NEXT:    image_atomic_or v0, v1, s[0:7] dmask:0x1 unorm glc a16403; GFX9-NEXT:    s_waitcnt vmcnt(0)404; GFX9-NEXT:    ; return to shader part epilog405;406; GFX10-LABEL: atomic_or_i32_1d:407; GFX10:       ; %bb.0: ; %main_body408; GFX10-NEXT:    s_mov_b32 s0, s2409; GFX10-NEXT:    s_mov_b32 s1, s3410; GFX10-NEXT:    s_mov_b32 s2, s4411; GFX10-NEXT:    s_mov_b32 s3, s5412; GFX10-NEXT:    s_mov_b32 s4, s6413; GFX10-NEXT:    s_mov_b32 s5, s7414; GFX10-NEXT:    s_mov_b32 s6, s8415; GFX10-NEXT:    s_mov_b32 s7, s9416; GFX10-NEXT:    image_atomic_or v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16417; GFX10-NEXT:    s_waitcnt vmcnt(0)418; GFX10-NEXT:    ; return to shader part epilog419;420; GFX12-LABEL: atomic_or_i32_1d:421; GFX12:       ; %bb.0: ; %main_body422; GFX12-NEXT:    s_mov_b32 s0, s2423; GFX12-NEXT:    s_mov_b32 s1, s3424; GFX12-NEXT:    s_mov_b32 s2, s4425; GFX12-NEXT:    s_mov_b32 s3, s5426; GFX12-NEXT:    s_mov_b32 s4, s6427; GFX12-NEXT:    s_mov_b32 s5, s7428; GFX12-NEXT:    s_mov_b32 s6, s8429; GFX12-NEXT:    s_mov_b32 s7, s9430; GFX12-NEXT:    image_atomic_or v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16431; GFX12-NEXT:    s_wait_loadcnt 0x0432; GFX12-NEXT:    ; return to shader part epilog433main_body:434  %v = call i32 @llvm.amdgcn.image.atomic.or.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)435  %out = bitcast i32 %v to float436  ret float %out437}438 439define amdgpu_ps float @atomic_xor_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {440; GFX9-LABEL: atomic_xor_i32_1d:441; GFX9:       ; %bb.0: ; %main_body442; GFX9-NEXT:    s_mov_b32 s0, s2443; GFX9-NEXT:    s_mov_b32 s1, s3444; GFX9-NEXT:    s_mov_b32 s2, s4445; GFX9-NEXT:    s_mov_b32 s3, s5446; GFX9-NEXT:    s_mov_b32 s4, s6447; GFX9-NEXT:    s_mov_b32 s5, s7448; GFX9-NEXT:    s_mov_b32 s6, s8449; GFX9-NEXT:    s_mov_b32 s7, s9450; GFX9-NEXT:    image_atomic_xor v0, v1, s[0:7] dmask:0x1 unorm glc a16451; GFX9-NEXT:    s_waitcnt vmcnt(0)452; GFX9-NEXT:    ; return to shader part epilog453;454; GFX10-LABEL: atomic_xor_i32_1d:455; GFX10:       ; %bb.0: ; %main_body456; GFX10-NEXT:    s_mov_b32 s0, s2457; GFX10-NEXT:    s_mov_b32 s1, s3458; GFX10-NEXT:    s_mov_b32 s2, s4459; GFX10-NEXT:    s_mov_b32 s3, s5460; GFX10-NEXT:    s_mov_b32 s4, s6461; GFX10-NEXT:    s_mov_b32 s5, s7462; GFX10-NEXT:    s_mov_b32 s6, s8463; GFX10-NEXT:    s_mov_b32 s7, s9464; GFX10-NEXT:    image_atomic_xor v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16465; GFX10-NEXT:    s_waitcnt vmcnt(0)466; GFX10-NEXT:    ; return to shader part epilog467;468; GFX12-LABEL: atomic_xor_i32_1d:469; GFX12:       ; %bb.0: ; %main_body470; GFX12-NEXT:    s_mov_b32 s0, s2471; GFX12-NEXT:    s_mov_b32 s1, s3472; GFX12-NEXT:    s_mov_b32 s2, s4473; GFX12-NEXT:    s_mov_b32 s3, s5474; GFX12-NEXT:    s_mov_b32 s4, s6475; GFX12-NEXT:    s_mov_b32 s5, s7476; GFX12-NEXT:    s_mov_b32 s6, s8477; GFX12-NEXT:    s_mov_b32 s7, s9478; GFX12-NEXT:    image_atomic_xor v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16479; GFX12-NEXT:    s_wait_loadcnt 0x0480; GFX12-NEXT:    ; return to shader part epilog481main_body:482  %v = call i32 @llvm.amdgcn.image.atomic.xor.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)483  %out = bitcast i32 %v to float484  ret float %out485}486 487define amdgpu_ps float @atomic_inc_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {488; GFX9-LABEL: atomic_inc_i32_1d:489; GFX9:       ; %bb.0: ; %main_body490; GFX9-NEXT:    s_mov_b32 s0, s2491; GFX9-NEXT:    s_mov_b32 s1, s3492; GFX9-NEXT:    s_mov_b32 s2, s4493; GFX9-NEXT:    s_mov_b32 s3, s5494; GFX9-NEXT:    s_mov_b32 s4, s6495; GFX9-NEXT:    s_mov_b32 s5, s7496; GFX9-NEXT:    s_mov_b32 s6, s8497; GFX9-NEXT:    s_mov_b32 s7, s9498; GFX9-NEXT:    image_atomic_inc v0, v1, s[0:7] dmask:0x1 unorm glc a16499; GFX9-NEXT:    s_waitcnt vmcnt(0)500; GFX9-NEXT:    ; return to shader part epilog501;502; GFX10-LABEL: atomic_inc_i32_1d:503; GFX10:       ; %bb.0: ; %main_body504; GFX10-NEXT:    s_mov_b32 s0, s2505; GFX10-NEXT:    s_mov_b32 s1, s3506; GFX10-NEXT:    s_mov_b32 s2, s4507; GFX10-NEXT:    s_mov_b32 s3, s5508; GFX10-NEXT:    s_mov_b32 s4, s6509; GFX10-NEXT:    s_mov_b32 s5, s7510; GFX10-NEXT:    s_mov_b32 s6, s8511; GFX10-NEXT:    s_mov_b32 s7, s9512; GFX10-NEXT:    image_atomic_inc v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16513; GFX10-NEXT:    s_waitcnt vmcnt(0)514; GFX10-NEXT:    ; return to shader part epilog515;516; GFX12-LABEL: atomic_inc_i32_1d:517; GFX12:       ; %bb.0: ; %main_body518; GFX12-NEXT:    s_mov_b32 s0, s2519; GFX12-NEXT:    s_mov_b32 s1, s3520; GFX12-NEXT:    s_mov_b32 s2, s4521; GFX12-NEXT:    s_mov_b32 s3, s5522; GFX12-NEXT:    s_mov_b32 s4, s6523; GFX12-NEXT:    s_mov_b32 s5, s7524; GFX12-NEXT:    s_mov_b32 s6, s8525; GFX12-NEXT:    s_mov_b32 s7, s9526; GFX12-NEXT:    image_atomic_inc_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16527; GFX12-NEXT:    s_wait_loadcnt 0x0528; GFX12-NEXT:    ; return to shader part epilog529main_body:530  %v = call i32 @llvm.amdgcn.image.atomic.inc.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)531  %out = bitcast i32 %v to float532  ret float %out533}534 535define amdgpu_ps float @atomic_dec_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {536; GFX9-LABEL: atomic_dec_i32_1d:537; GFX9:       ; %bb.0: ; %main_body538; GFX9-NEXT:    s_mov_b32 s0, s2539; GFX9-NEXT:    s_mov_b32 s1, s3540; GFX9-NEXT:    s_mov_b32 s2, s4541; GFX9-NEXT:    s_mov_b32 s3, s5542; GFX9-NEXT:    s_mov_b32 s4, s6543; GFX9-NEXT:    s_mov_b32 s5, s7544; GFX9-NEXT:    s_mov_b32 s6, s8545; GFX9-NEXT:    s_mov_b32 s7, s9546; GFX9-NEXT:    image_atomic_dec v0, v1, s[0:7] dmask:0x1 unorm glc a16547; GFX9-NEXT:    s_waitcnt vmcnt(0)548; GFX9-NEXT:    ; return to shader part epilog549;550; GFX10-LABEL: atomic_dec_i32_1d:551; GFX10:       ; %bb.0: ; %main_body552; GFX10-NEXT:    s_mov_b32 s0, s2553; GFX10-NEXT:    s_mov_b32 s1, s3554; GFX10-NEXT:    s_mov_b32 s2, s4555; GFX10-NEXT:    s_mov_b32 s3, s5556; GFX10-NEXT:    s_mov_b32 s4, s6557; GFX10-NEXT:    s_mov_b32 s5, s7558; GFX10-NEXT:    s_mov_b32 s6, s8559; GFX10-NEXT:    s_mov_b32 s7, s9560; GFX10-NEXT:    image_atomic_dec v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16561; GFX10-NEXT:    s_waitcnt vmcnt(0)562; GFX10-NEXT:    ; return to shader part epilog563;564; GFX12-LABEL: atomic_dec_i32_1d:565; GFX12:       ; %bb.0: ; %main_body566; GFX12-NEXT:    s_mov_b32 s0, s2567; GFX12-NEXT:    s_mov_b32 s1, s3568; GFX12-NEXT:    s_mov_b32 s2, s4569; GFX12-NEXT:    s_mov_b32 s3, s5570; GFX12-NEXT:    s_mov_b32 s4, s6571; GFX12-NEXT:    s_mov_b32 s5, s7572; GFX12-NEXT:    s_mov_b32 s6, s8573; GFX12-NEXT:    s_mov_b32 s7, s9574; GFX12-NEXT:    image_atomic_dec_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16575; GFX12-NEXT:    s_wait_loadcnt 0x0576; GFX12-NEXT:    ; return to shader part epilog577main_body:578  %v = call i32 @llvm.amdgcn.image.atomic.dec.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)579  %out = bitcast i32 %v to float580  ret float %out581}582 583define amdgpu_ps float @atomic_cmpswap_i32_1d(<8 x i32> inreg %rsrc, i32 %cmp, i32 %swap, i16 %s) {584; GFX9-LABEL: atomic_cmpswap_i32_1d:585; GFX9:       ; %bb.0: ; %main_body586; GFX9-NEXT:    s_mov_b32 s0, s2587; GFX9-NEXT:    s_mov_b32 s1, s3588; GFX9-NEXT:    s_mov_b32 s2, s4589; GFX9-NEXT:    s_mov_b32 s3, s5590; GFX9-NEXT:    s_mov_b32 s4, s6591; GFX9-NEXT:    s_mov_b32 s5, s7592; GFX9-NEXT:    s_mov_b32 s6, s8593; GFX9-NEXT:    s_mov_b32 s7, s9594; GFX9-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16595; GFX9-NEXT:    s_waitcnt vmcnt(0)596; GFX9-NEXT:    ; return to shader part epilog597;598; GFX10-LABEL: atomic_cmpswap_i32_1d:599; GFX10:       ; %bb.0: ; %main_body600; GFX10-NEXT:    s_mov_b32 s0, s2601; GFX10-NEXT:    s_mov_b32 s1, s3602; GFX10-NEXT:    s_mov_b32 s2, s4603; GFX10-NEXT:    s_mov_b32 s3, s5604; GFX10-NEXT:    s_mov_b32 s4, s6605; GFX10-NEXT:    s_mov_b32 s5, s7606; GFX10-NEXT:    s_mov_b32 s6, s8607; GFX10-NEXT:    s_mov_b32 s7, s9608; GFX10-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a16609; GFX10-NEXT:    s_waitcnt vmcnt(0)610; GFX10-NEXT:    ; return to shader part epilog611;612; GFX12-LABEL: atomic_cmpswap_i32_1d:613; GFX12:       ; %bb.0: ; %main_body614; GFX12-NEXT:    s_mov_b32 s0, s2615; GFX12-NEXT:    s_mov_b32 s1, s3616; GFX12-NEXT:    s_mov_b32 s2, s4617; GFX12-NEXT:    s_mov_b32 s3, s5618; GFX12-NEXT:    s_mov_b32 s4, s6619; GFX12-NEXT:    s_mov_b32 s5, s7620; GFX12-NEXT:    s_mov_b32 s6, s8621; GFX12-NEXT:    s_mov_b32 s7, s9622; GFX12-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16623; GFX12-NEXT:    s_wait_loadcnt 0x0624; GFX12-NEXT:    ; return to shader part epilog625main_body:626  %v = call i32 @llvm.amdgcn.image.atomic.cmpswap.1d.i32.i16(i32 %cmp, i32 %swap, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)627  %out = bitcast i32 %v to float628  ret float %out629}630 631define amdgpu_ps float @atomic_add_i32_2d(<8 x i32> inreg %rsrc, i32 %data, i16 %s, i16 %t) {632; GFX9-LABEL: atomic_add_i32_2d:633; GFX9:       ; %bb.0: ; %main_body634; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1635; GFX9-NEXT:    s_mov_b32 s0, s2636; GFX9-NEXT:    s_mov_b32 s1, s3637; GFX9-NEXT:    s_mov_b32 s2, s4638; GFX9-NEXT:    s_mov_b32 s3, s5639; GFX9-NEXT:    s_mov_b32 s4, s6640; GFX9-NEXT:    s_mov_b32 s5, s7641; GFX9-NEXT:    s_mov_b32 s6, s8642; GFX9-NEXT:    s_mov_b32 s7, s9643; GFX9-NEXT:    v_lshl_or_b32 v1, v2, 16, v1644; GFX9-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc a16645; GFX9-NEXT:    s_waitcnt vmcnt(0)646; GFX9-NEXT:    ; return to shader part epilog647;648; GFX10-LABEL: atomic_add_i32_2d:649; GFX10:       ; %bb.0: ; %main_body650; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1651; GFX10-NEXT:    s_mov_b32 s0, s2652; GFX10-NEXT:    s_mov_b32 s1, s3653; GFX10-NEXT:    s_mov_b32 s2, s4654; GFX10-NEXT:    s_mov_b32 s3, s5655; GFX10-NEXT:    v_lshl_or_b32 v1, v2, 16, v1656; GFX10-NEXT:    s_mov_b32 s4, s6657; GFX10-NEXT:    s_mov_b32 s5, s7658; GFX10-NEXT:    s_mov_b32 s6, s8659; GFX10-NEXT:    s_mov_b32 s7, s9660; GFX10-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm glc a16661; GFX10-NEXT:    s_waitcnt vmcnt(0)662; GFX10-NEXT:    ; return to shader part epilog663;664; GFX12-LABEL: atomic_add_i32_2d:665; GFX12:       ; %bb.0: ; %main_body666; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1667; GFX12-NEXT:    s_mov_b32 s0, s2668; GFX12-NEXT:    s_mov_b32 s1, s3669; GFX12-NEXT:    s_mov_b32 s2, s4670; GFX12-NEXT:    s_mov_b32 s3, s5671; GFX12-NEXT:    v_lshl_or_b32 v1, v2, 16, v1672; GFX12-NEXT:    s_mov_b32 s4, s6673; GFX12-NEXT:    s_mov_b32 s5, s7674; GFX12-NEXT:    s_mov_b32 s6, s8675; GFX12-NEXT:    s_mov_b32 s7, s9676; GFX12-NEXT:    image_atomic_add_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D th:TH_ATOMIC_RETURN a16677; GFX12-NEXT:    s_wait_loadcnt 0x0678; GFX12-NEXT:    ; return to shader part epilog679main_body:680  %v = call i32 @llvm.amdgcn.image.atomic.add.2d.i32.i16(i32 %data, i16 %s, i16 %t, <8 x i32> %rsrc, i32 0, i32 0)681  %out = bitcast i32 %v to float682  ret float %out683}684 685define amdgpu_ps float @atomic_add_i32_3d(<8 x i32> inreg %rsrc, i32 %data, i16 %s, i16 %t, i16 %r) {686; GFX9-LABEL: atomic_add_i32_3d:687; GFX9:       ; %bb.0: ; %main_body688; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1689; GFX9-NEXT:    s_mov_b32 s0, s2690; GFX9-NEXT:    s_mov_b32 s1, s3691; GFX9-NEXT:    s_mov_b32 s2, s4692; GFX9-NEXT:    s_mov_b32 s3, s5693; GFX9-NEXT:    s_mov_b32 s4, s6694; GFX9-NEXT:    s_mov_b32 s5, s7695; GFX9-NEXT:    s_mov_b32 s6, s8696; GFX9-NEXT:    s_mov_b32 s7, s9697; GFX9-NEXT:    v_lshl_or_b32 v2, v2, 16, v1698; GFX9-NEXT:    image_atomic_add v0, v[2:3], s[0:7] dmask:0x1 unorm glc a16699; GFX9-NEXT:    s_waitcnt vmcnt(0)700; GFX9-NEXT:    ; return to shader part epilog701;702; GFX10-LABEL: atomic_add_i32_3d:703; GFX10:       ; %bb.0: ; %main_body704; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1705; GFX10-NEXT:    s_mov_b32 s0, s2706; GFX10-NEXT:    s_mov_b32 s1, s3707; GFX10-NEXT:    s_mov_b32 s2, s4708; GFX10-NEXT:    s_mov_b32 s3, s5709; GFX10-NEXT:    v_lshl_or_b32 v1, v2, 16, v1710; GFX10-NEXT:    s_mov_b32 s4, s6711; GFX10-NEXT:    s_mov_b32 s5, s7712; GFX10-NEXT:    s_mov_b32 s6, s8713; GFX10-NEXT:    s_mov_b32 s7, s9714; GFX10-NEXT:    image_atomic_add v0, [v1, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_3D unorm glc a16715; GFX10-NEXT:    s_waitcnt vmcnt(0)716; GFX10-NEXT:    ; return to shader part epilog717;718; GFX12-LABEL: atomic_add_i32_3d:719; GFX12:       ; %bb.0: ; %main_body720; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1721; GFX12-NEXT:    s_mov_b32 s0, s2722; GFX12-NEXT:    s_mov_b32 s1, s3723; GFX12-NEXT:    s_mov_b32 s2, s4724; GFX12-NEXT:    s_mov_b32 s3, s5725; GFX12-NEXT:    v_lshl_or_b32 v1, v2, 16, v1726; GFX12-NEXT:    s_mov_b32 s4, s6727; GFX12-NEXT:    s_mov_b32 s5, s7728; GFX12-NEXT:    s_mov_b32 s6, s8729; GFX12-NEXT:    s_mov_b32 s7, s9730; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_3D th:TH_ATOMIC_RETURN a16731; GFX12-NEXT:    s_wait_loadcnt 0x0732; GFX12-NEXT:    ; return to shader part epilog733main_body:734  %v = call i32 @llvm.amdgcn.image.atomic.add.3d.i32.i16(i32 %data, i16 %s, i16 %t, i16 %r, <8 x i32> %rsrc, i32 0, i32 0)735  %out = bitcast i32 %v to float736  ret float %out737}738 739define amdgpu_ps float @atomic_add_i32_cube(<8 x i32> inreg %rsrc, i32 %data, i16 %s, i16 %t, i16 %face) {740; GFX9-LABEL: atomic_add_i32_cube:741; GFX9:       ; %bb.0: ; %main_body742; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1743; GFX9-NEXT:    s_mov_b32 s0, s2744; GFX9-NEXT:    s_mov_b32 s1, s3745; GFX9-NEXT:    s_mov_b32 s2, s4746; GFX9-NEXT:    s_mov_b32 s3, s5747; GFX9-NEXT:    s_mov_b32 s4, s6748; GFX9-NEXT:    s_mov_b32 s5, s7749; GFX9-NEXT:    s_mov_b32 s6, s8750; GFX9-NEXT:    s_mov_b32 s7, s9751; GFX9-NEXT:    v_lshl_or_b32 v2, v2, 16, v1752; GFX9-NEXT:    image_atomic_add v0, v[2:3], s[0:7] dmask:0x1 unorm glc a16 da753; GFX9-NEXT:    s_waitcnt vmcnt(0)754; GFX9-NEXT:    ; return to shader part epilog755;756; GFX10-LABEL: atomic_add_i32_cube:757; GFX10:       ; %bb.0: ; %main_body758; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1759; GFX10-NEXT:    s_mov_b32 s0, s2760; GFX10-NEXT:    s_mov_b32 s1, s3761; GFX10-NEXT:    s_mov_b32 s2, s4762; GFX10-NEXT:    s_mov_b32 s3, s5763; GFX10-NEXT:    v_lshl_or_b32 v1, v2, 16, v1764; GFX10-NEXT:    s_mov_b32 s4, s6765; GFX10-NEXT:    s_mov_b32 s5, s7766; GFX10-NEXT:    s_mov_b32 s6, s8767; GFX10-NEXT:    s_mov_b32 s7, s9768; GFX10-NEXT:    image_atomic_add v0, [v1, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_CUBE unorm glc a16769; GFX10-NEXT:    s_waitcnt vmcnt(0)770; GFX10-NEXT:    ; return to shader part epilog771;772; GFX12-LABEL: atomic_add_i32_cube:773; GFX12:       ; %bb.0: ; %main_body774; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1775; GFX12-NEXT:    s_mov_b32 s0, s2776; GFX12-NEXT:    s_mov_b32 s1, s3777; GFX12-NEXT:    s_mov_b32 s2, s4778; GFX12-NEXT:    s_mov_b32 s3, s5779; GFX12-NEXT:    v_lshl_or_b32 v1, v2, 16, v1780; GFX12-NEXT:    s_mov_b32 s4, s6781; GFX12-NEXT:    s_mov_b32 s5, s7782; GFX12-NEXT:    s_mov_b32 s6, s8783; GFX12-NEXT:    s_mov_b32 s7, s9784; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_CUBE th:TH_ATOMIC_RETURN a16785; GFX12-NEXT:    s_wait_loadcnt 0x0786; GFX12-NEXT:    ; return to shader part epilog787main_body:788  %v = call i32 @llvm.amdgcn.image.atomic.add.cube.i32.i16(i32 %data, i16 %s, i16 %t, i16 %face, <8 x i32> %rsrc, i32 0, i32 0)789  %out = bitcast i32 %v to float790  ret float %out791}792 793define amdgpu_ps float @atomic_add_i32_1darray(<8 x i32> inreg %rsrc, i32 %data, i16 %s, i16 %slice) {794; GFX9-LABEL: atomic_add_i32_1darray:795; GFX9:       ; %bb.0: ; %main_body796; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1797; GFX9-NEXT:    s_mov_b32 s0, s2798; GFX9-NEXT:    s_mov_b32 s1, s3799; GFX9-NEXT:    s_mov_b32 s2, s4800; GFX9-NEXT:    s_mov_b32 s3, s5801; GFX9-NEXT:    s_mov_b32 s4, s6802; GFX9-NEXT:    s_mov_b32 s5, s7803; GFX9-NEXT:    s_mov_b32 s6, s8804; GFX9-NEXT:    s_mov_b32 s7, s9805; GFX9-NEXT:    v_lshl_or_b32 v1, v2, 16, v1806; GFX9-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc a16 da807; GFX9-NEXT:    s_waitcnt vmcnt(0)808; GFX9-NEXT:    ; return to shader part epilog809;810; GFX10-LABEL: atomic_add_i32_1darray:811; GFX10:       ; %bb.0: ; %main_body812; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1813; GFX10-NEXT:    s_mov_b32 s0, s2814; GFX10-NEXT:    s_mov_b32 s1, s3815; GFX10-NEXT:    s_mov_b32 s2, s4816; GFX10-NEXT:    s_mov_b32 s3, s5817; GFX10-NEXT:    v_lshl_or_b32 v1, v2, 16, v1818; GFX10-NEXT:    s_mov_b32 s4, s6819; GFX10-NEXT:    s_mov_b32 s5, s7820; GFX10-NEXT:    s_mov_b32 s6, s8821; GFX10-NEXT:    s_mov_b32 s7, s9822; GFX10-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D_ARRAY unorm glc a16823; GFX10-NEXT:    s_waitcnt vmcnt(0)824; GFX10-NEXT:    ; return to shader part epilog825;826; GFX12-LABEL: atomic_add_i32_1darray:827; GFX12:       ; %bb.0: ; %main_body828; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1829; GFX12-NEXT:    s_mov_b32 s0, s2830; GFX12-NEXT:    s_mov_b32 s1, s3831; GFX12-NEXT:    s_mov_b32 s2, s4832; GFX12-NEXT:    s_mov_b32 s3, s5833; GFX12-NEXT:    v_lshl_or_b32 v1, v2, 16, v1834; GFX12-NEXT:    s_mov_b32 s4, s6835; GFX12-NEXT:    s_mov_b32 s5, s7836; GFX12-NEXT:    s_mov_b32 s6, s8837; GFX12-NEXT:    s_mov_b32 s7, s9838; GFX12-NEXT:    image_atomic_add_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D_ARRAY th:TH_ATOMIC_RETURN a16839; GFX12-NEXT:    s_wait_loadcnt 0x0840; GFX12-NEXT:    ; return to shader part epilog841main_body:842  %v = call i32 @llvm.amdgcn.image.atomic.add.1darray.i32.i16(i32 %data, i16 %s, i16 %slice, <8 x i32> %rsrc, i32 0, i32 0)843  %out = bitcast i32 %v to float844  ret float %out845}846 847define amdgpu_ps float @atomic_add_i32_2darray(<8 x i32> inreg %rsrc, i32 %data, i16 %s, i16 %t, i16 %slice) {848; GFX9-LABEL: atomic_add_i32_2darray:849; GFX9:       ; %bb.0: ; %main_body850; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1851; GFX9-NEXT:    s_mov_b32 s0, s2852; GFX9-NEXT:    s_mov_b32 s1, s3853; GFX9-NEXT:    s_mov_b32 s2, s4854; GFX9-NEXT:    s_mov_b32 s3, s5855; GFX9-NEXT:    s_mov_b32 s4, s6856; GFX9-NEXT:    s_mov_b32 s5, s7857; GFX9-NEXT:    s_mov_b32 s6, s8858; GFX9-NEXT:    s_mov_b32 s7, s9859; GFX9-NEXT:    v_lshl_or_b32 v2, v2, 16, v1860; GFX9-NEXT:    image_atomic_add v0, v[2:3], s[0:7] dmask:0x1 unorm glc a16 da861; GFX9-NEXT:    s_waitcnt vmcnt(0)862; GFX9-NEXT:    ; return to shader part epilog863;864; GFX10-LABEL: atomic_add_i32_2darray:865; GFX10:       ; %bb.0: ; %main_body866; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1867; GFX10-NEXT:    s_mov_b32 s0, s2868; GFX10-NEXT:    s_mov_b32 s1, s3869; GFX10-NEXT:    s_mov_b32 s2, s4870; GFX10-NEXT:    s_mov_b32 s3, s5871; GFX10-NEXT:    v_lshl_or_b32 v1, v2, 16, v1872; GFX10-NEXT:    s_mov_b32 s4, s6873; GFX10-NEXT:    s_mov_b32 s5, s7874; GFX10-NEXT:    s_mov_b32 s6, s8875; GFX10-NEXT:    s_mov_b32 s7, s9876; GFX10-NEXT:    image_atomic_add v0, [v1, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_ARRAY unorm glc a16877; GFX10-NEXT:    s_waitcnt vmcnt(0)878; GFX10-NEXT:    ; return to shader part epilog879;880; GFX12-LABEL: atomic_add_i32_2darray:881; GFX12:       ; %bb.0: ; %main_body882; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1883; GFX12-NEXT:    s_mov_b32 s0, s2884; GFX12-NEXT:    s_mov_b32 s1, s3885; GFX12-NEXT:    s_mov_b32 s2, s4886; GFX12-NEXT:    s_mov_b32 s3, s5887; GFX12-NEXT:    v_lshl_or_b32 v1, v2, 16, v1888; GFX12-NEXT:    s_mov_b32 s4, s6889; GFX12-NEXT:    s_mov_b32 s5, s7890; GFX12-NEXT:    s_mov_b32 s6, s8891; GFX12-NEXT:    s_mov_b32 s7, s9892; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_ARRAY th:TH_ATOMIC_RETURN a16893; GFX12-NEXT:    s_wait_loadcnt 0x0894; GFX12-NEXT:    ; return to shader part epilog895main_body:896  %v = call i32 @llvm.amdgcn.image.atomic.add.2darray.i32.i16(i32 %data, i16 %s, i16 %t, i16 %slice, <8 x i32> %rsrc, i32 0, i32 0)897  %out = bitcast i32 %v to float898  ret float %out899}900 901define amdgpu_ps float @atomic_add_i32_2dmsaa(<8 x i32> inreg %rsrc, i32 %data, i16 %s, i16 %t, i16 %fragid) {902; GFX9-LABEL: atomic_add_i32_2dmsaa:903; GFX9:       ; %bb.0: ; %main_body904; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1905; GFX9-NEXT:    s_mov_b32 s0, s2906; GFX9-NEXT:    s_mov_b32 s1, s3907; GFX9-NEXT:    s_mov_b32 s2, s4908; GFX9-NEXT:    s_mov_b32 s3, s5909; GFX9-NEXT:    s_mov_b32 s4, s6910; GFX9-NEXT:    s_mov_b32 s5, s7911; GFX9-NEXT:    s_mov_b32 s6, s8912; GFX9-NEXT:    s_mov_b32 s7, s9913; GFX9-NEXT:    v_lshl_or_b32 v2, v2, 16, v1914; GFX9-NEXT:    image_atomic_add v0, v[2:3], s[0:7] dmask:0x1 unorm glc a16915; GFX9-NEXT:    s_waitcnt vmcnt(0)916; GFX9-NEXT:    ; return to shader part epilog917;918; GFX10-LABEL: atomic_add_i32_2dmsaa:919; GFX10:       ; %bb.0: ; %main_body920; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1921; GFX10-NEXT:    s_mov_b32 s0, s2922; GFX10-NEXT:    s_mov_b32 s1, s3923; GFX10-NEXT:    s_mov_b32 s2, s4924; GFX10-NEXT:    s_mov_b32 s3, s5925; GFX10-NEXT:    v_lshl_or_b32 v1, v2, 16, v1926; GFX10-NEXT:    s_mov_b32 s4, s6927; GFX10-NEXT:    s_mov_b32 s5, s7928; GFX10-NEXT:    s_mov_b32 s6, s8929; GFX10-NEXT:    s_mov_b32 s7, s9930; GFX10-NEXT:    image_atomic_add v0, [v1, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm glc a16931; GFX10-NEXT:    s_waitcnt vmcnt(0)932; GFX10-NEXT:    ; return to shader part epilog933;934; GFX12-LABEL: atomic_add_i32_2dmsaa:935; GFX12:       ; %bb.0: ; %main_body936; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1937; GFX12-NEXT:    s_mov_b32 s0, s2938; GFX12-NEXT:    s_mov_b32 s1, s3939; GFX12-NEXT:    s_mov_b32 s2, s4940; GFX12-NEXT:    s_mov_b32 s3, s5941; GFX12-NEXT:    v_lshl_or_b32 v1, v2, 16, v1942; GFX12-NEXT:    s_mov_b32 s4, s6943; GFX12-NEXT:    s_mov_b32 s5, s7944; GFX12-NEXT:    s_mov_b32 s6, s8945; GFX12-NEXT:    s_mov_b32 s7, s9946; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA th:TH_ATOMIC_RETURN a16947; GFX12-NEXT:    s_wait_loadcnt 0x0948; GFX12-NEXT:    ; return to shader part epilog949main_body:950  %v = call i32 @llvm.amdgcn.image.atomic.add.2dmsaa.i32.i16(i32 %data, i16 %s, i16 %t, i16 %fragid, <8 x i32> %rsrc, i32 0, i32 0)951  %out = bitcast i32 %v to float952  ret float %out953}954 955define amdgpu_ps float @atomic_add_i32_2darraymsaa(<8 x i32> inreg %rsrc, i32 %data, i16 %s, i16 %t, i16 %slice, i16 %fragid) {956; GFX9-LABEL: atomic_add_i32_2darraymsaa:957; GFX9:       ; %bb.0: ; %main_body958; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1959; GFX9-NEXT:    v_lshl_or_b32 v1, v2, 16, v1960; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v3961; GFX9-NEXT:    s_mov_b32 s0, s2962; GFX9-NEXT:    s_mov_b32 s1, s3963; GFX9-NEXT:    s_mov_b32 s2, s4964; GFX9-NEXT:    s_mov_b32 s3, s5965; GFX9-NEXT:    s_mov_b32 s4, s6966; GFX9-NEXT:    s_mov_b32 s5, s7967; GFX9-NEXT:    s_mov_b32 s6, s8968; GFX9-NEXT:    s_mov_b32 s7, s9969; GFX9-NEXT:    v_lshl_or_b32 v2, v4, 16, v2970; GFX9-NEXT:    image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 unorm glc a16 da971; GFX9-NEXT:    s_waitcnt vmcnt(0)972; GFX9-NEXT:    ; return to shader part epilog973;974; GFX10-LABEL: atomic_add_i32_2darraymsaa:975; GFX10:       ; %bb.0: ; %main_body976; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1977; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff, v3978; GFX10-NEXT:    s_mov_b32 s0, s2979; GFX10-NEXT:    s_mov_b32 s1, s3980; GFX10-NEXT:    s_mov_b32 s2, s4981; GFX10-NEXT:    v_lshl_or_b32 v1, v2, 16, v1982; GFX10-NEXT:    v_lshl_or_b32 v2, v4, 16, v3983; GFX10-NEXT:    s_mov_b32 s3, s5984; GFX10-NEXT:    s_mov_b32 s4, s6985; GFX10-NEXT:    s_mov_b32 s5, s7986; GFX10-NEXT:    s_mov_b32 s6, s8987; GFX10-NEXT:    s_mov_b32 s7, s9988; GFX10-NEXT:    image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm glc a16989; GFX10-NEXT:    s_waitcnt vmcnt(0)990; GFX10-NEXT:    ; return to shader part epilog991;992; GFX12-LABEL: atomic_add_i32_2darraymsaa:993; GFX12:       ; %bb.0: ; %main_body994; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1995; GFX12-NEXT:    v_and_b32_e32 v3, 0xffff, v3996; GFX12-NEXT:    s_mov_b32 s0, s2997; GFX12-NEXT:    s_mov_b32 s1, s3998; GFX12-NEXT:    s_mov_b32 s2, s4999; GFX12-NEXT:    v_lshl_or_b32 v1, v2, 16, v11000; GFX12-NEXT:    v_lshl_or_b32 v2, v4, 16, v31001; GFX12-NEXT:    s_mov_b32 s3, s51002; GFX12-NEXT:    s_mov_b32 s4, s61003; GFX12-NEXT:    s_mov_b32 s5, s71004; GFX12-NEXT:    s_mov_b32 s6, s81005; GFX12-NEXT:    s_mov_b32 s7, s91006; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY th:TH_ATOMIC_RETURN a161007; GFX12-NEXT:    s_wait_loadcnt 0x01008; GFX12-NEXT:    ; return to shader part epilog1009main_body:1010  %v = call i32 @llvm.amdgcn.image.atomic.add.2darraymsaa.i32.i16(i32 %data, i16 %s, i16 %t, i16 %slice, i16 %fragid, <8 x i32> %rsrc, i32 0, i32 0)1011  %out = bitcast i32 %v to float1012  ret float %out1013}1014 1015define amdgpu_ps float @atomic_add_i32_1d_slc(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {1016; GFX9-LABEL: atomic_add_i32_1d_slc:1017; GFX9:       ; %bb.0: ; %main_body1018; GFX9-NEXT:    s_mov_b32 s0, s21019; GFX9-NEXT:    s_mov_b32 s1, s31020; GFX9-NEXT:    s_mov_b32 s2, s41021; GFX9-NEXT:    s_mov_b32 s3, s51022; GFX9-NEXT:    s_mov_b32 s4, s61023; GFX9-NEXT:    s_mov_b32 s5, s71024; GFX9-NEXT:    s_mov_b32 s6, s81025; GFX9-NEXT:    s_mov_b32 s7, s91026; GFX9-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc slc a161027; GFX9-NEXT:    s_waitcnt vmcnt(0)1028; GFX9-NEXT:    ; return to shader part epilog1029;1030; GFX10-LABEL: atomic_add_i32_1d_slc:1031; GFX10:       ; %bb.0: ; %main_body1032; GFX10-NEXT:    s_mov_b32 s0, s21033; GFX10-NEXT:    s_mov_b32 s1, s31034; GFX10-NEXT:    s_mov_b32 s2, s41035; GFX10-NEXT:    s_mov_b32 s3, s51036; GFX10-NEXT:    s_mov_b32 s4, s61037; GFX10-NEXT:    s_mov_b32 s5, s71038; GFX10-NEXT:    s_mov_b32 s6, s81039; GFX10-NEXT:    s_mov_b32 s7, s91040; GFX10-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc slc a161041; GFX10-NEXT:    s_waitcnt vmcnt(0)1042; GFX10-NEXT:    ; return to shader part epilog1043;1044; GFX12-LABEL: atomic_add_i32_1d_slc:1045; GFX12:       ; %bb.0: ; %main_body1046; GFX12-NEXT:    s_mov_b32 s0, s21047; GFX12-NEXT:    s_mov_b32 s1, s31048; GFX12-NEXT:    s_mov_b32 s2, s41049; GFX12-NEXT:    s_mov_b32 s3, s51050; GFX12-NEXT:    s_mov_b32 s4, s61051; GFX12-NEXT:    s_mov_b32 s5, s71052; GFX12-NEXT:    s_mov_b32 s6, s81053; GFX12-NEXT:    s_mov_b32 s7, s91054; GFX12-NEXT:    image_atomic_add_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_NT_RETURN a161055; GFX12-NEXT:    s_wait_loadcnt 0x01056; GFX12-NEXT:    ; return to shader part epilog1057main_body:1058  %v = call i32 @llvm.amdgcn.image.atomic.add.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 2)1059  %out = bitcast i32 %v to float1060  ret float %out1061}1062 1063define amdgpu_ps <2 x float> @atomic_swap_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {1064; GFX9-LABEL: atomic_swap_i64_1d:1065; GFX9:       ; %bb.0: ; %main_body1066; GFX9-NEXT:    s_mov_b32 s0, s21067; GFX9-NEXT:    s_mov_b32 s1, s31068; GFX9-NEXT:    s_mov_b32 s2, s41069; GFX9-NEXT:    s_mov_b32 s3, s51070; GFX9-NEXT:    s_mov_b32 s4, s61071; GFX9-NEXT:    s_mov_b32 s5, s71072; GFX9-NEXT:    s_mov_b32 s6, s81073; GFX9-NEXT:    s_mov_b32 s7, s91074; GFX9-NEXT:    image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 unorm glc a161075; GFX9-NEXT:    s_waitcnt vmcnt(0)1076; GFX9-NEXT:    ; return to shader part epilog1077;1078; GFX10-LABEL: atomic_swap_i64_1d:1079; GFX10:       ; %bb.0: ; %main_body1080; GFX10-NEXT:    s_mov_b32 s0, s21081; GFX10-NEXT:    s_mov_b32 s1, s31082; GFX10-NEXT:    s_mov_b32 s2, s41083; GFX10-NEXT:    s_mov_b32 s3, s51084; GFX10-NEXT:    s_mov_b32 s4, s61085; GFX10-NEXT:    s_mov_b32 s5, s71086; GFX10-NEXT:    s_mov_b32 s6, s81087; GFX10-NEXT:    s_mov_b32 s7, s91088; GFX10-NEXT:    image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a161089; GFX10-NEXT:    s_waitcnt vmcnt(0)1090; GFX10-NEXT:    ; return to shader part epilog1091;1092; GFX12-LABEL: atomic_swap_i64_1d:1093; GFX12:       ; %bb.0: ; %main_body1094; GFX12-NEXT:    s_mov_b32 s0, s21095; GFX12-NEXT:    s_mov_b32 s1, s31096; GFX12-NEXT:    s_mov_b32 s2, s41097; GFX12-NEXT:    s_mov_b32 s3, s51098; GFX12-NEXT:    s_mov_b32 s4, s61099; GFX12-NEXT:    s_mov_b32 s5, s71100; GFX12-NEXT:    s_mov_b32 s6, s81101; GFX12-NEXT:    s_mov_b32 s7, s91102; GFX12-NEXT:    image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a161103; GFX12-NEXT:    s_wait_loadcnt 0x01104; GFX12-NEXT:    ; return to shader part epilog1105main_body:1106  %v = call i64 @llvm.amdgcn.image.atomic.swap.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)1107  %out = bitcast i64 %v to <2 x float>1108  ret <2 x float> %out1109}1110 1111define amdgpu_ps <2 x float> @atomic_add_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {1112; GFX9-LABEL: atomic_add_i64_1d:1113; GFX9:       ; %bb.0: ; %main_body1114; GFX9-NEXT:    s_mov_b32 s0, s21115; GFX9-NEXT:    s_mov_b32 s1, s31116; GFX9-NEXT:    s_mov_b32 s2, s41117; GFX9-NEXT:    s_mov_b32 s3, s51118; GFX9-NEXT:    s_mov_b32 s4, s61119; GFX9-NEXT:    s_mov_b32 s5, s71120; GFX9-NEXT:    s_mov_b32 s6, s81121; GFX9-NEXT:    s_mov_b32 s7, s91122; GFX9-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc a161123; GFX9-NEXT:    s_waitcnt vmcnt(0)1124; GFX9-NEXT:    ; return to shader part epilog1125;1126; GFX10-LABEL: atomic_add_i64_1d:1127; GFX10:       ; %bb.0: ; %main_body1128; GFX10-NEXT:    s_mov_b32 s0, s21129; GFX10-NEXT:    s_mov_b32 s1, s31130; GFX10-NEXT:    s_mov_b32 s2, s41131; GFX10-NEXT:    s_mov_b32 s3, s51132; GFX10-NEXT:    s_mov_b32 s4, s61133; GFX10-NEXT:    s_mov_b32 s5, s71134; GFX10-NEXT:    s_mov_b32 s6, s81135; GFX10-NEXT:    s_mov_b32 s7, s91136; GFX10-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a161137; GFX10-NEXT:    s_waitcnt vmcnt(0)1138; GFX10-NEXT:    ; return to shader part epilog1139;1140; GFX12-LABEL: atomic_add_i64_1d:1141; GFX12:       ; %bb.0: ; %main_body1142; GFX12-NEXT:    s_mov_b32 s0, s21143; GFX12-NEXT:    s_mov_b32 s1, s31144; GFX12-NEXT:    s_mov_b32 s2, s41145; GFX12-NEXT:    s_mov_b32 s3, s51146; GFX12-NEXT:    s_mov_b32 s4, s61147; GFX12-NEXT:    s_mov_b32 s5, s71148; GFX12-NEXT:    s_mov_b32 s6, s81149; GFX12-NEXT:    s_mov_b32 s7, s91150; GFX12-NEXT:    image_atomic_add_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a161151; GFX12-NEXT:    s_wait_loadcnt 0x01152; GFX12-NEXT:    ; return to shader part epilog1153main_body:1154  %v = call i64 @llvm.amdgcn.image.atomic.add.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)1155  %out = bitcast i64 %v to <2 x float>1156  ret <2 x float> %out1157}1158 1159define amdgpu_ps <2 x float> @atomic_sub_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {1160; GFX9-LABEL: atomic_sub_i64_1d:1161; GFX9:       ; %bb.0: ; %main_body1162; GFX9-NEXT:    s_mov_b32 s0, s21163; GFX9-NEXT:    s_mov_b32 s1, s31164; GFX9-NEXT:    s_mov_b32 s2, s41165; GFX9-NEXT:    s_mov_b32 s3, s51166; GFX9-NEXT:    s_mov_b32 s4, s61167; GFX9-NEXT:    s_mov_b32 s5, s71168; GFX9-NEXT:    s_mov_b32 s6, s81169; GFX9-NEXT:    s_mov_b32 s7, s91170; GFX9-NEXT:    image_atomic_sub v[0:1], v2, s[0:7] dmask:0x3 unorm glc a161171; GFX9-NEXT:    s_waitcnt vmcnt(0)1172; GFX9-NEXT:    ; return to shader part epilog1173;1174; GFX10-LABEL: atomic_sub_i64_1d:1175; GFX10:       ; %bb.0: ; %main_body1176; GFX10-NEXT:    s_mov_b32 s0, s21177; GFX10-NEXT:    s_mov_b32 s1, s31178; GFX10-NEXT:    s_mov_b32 s2, s41179; GFX10-NEXT:    s_mov_b32 s3, s51180; GFX10-NEXT:    s_mov_b32 s4, s61181; GFX10-NEXT:    s_mov_b32 s5, s71182; GFX10-NEXT:    s_mov_b32 s6, s81183; GFX10-NEXT:    s_mov_b32 s7, s91184; GFX10-NEXT:    image_atomic_sub v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a161185; GFX10-NEXT:    s_waitcnt vmcnt(0)1186; GFX10-NEXT:    ; return to shader part epilog1187;1188; GFX12-LABEL: atomic_sub_i64_1d:1189; GFX12:       ; %bb.0: ; %main_body1190; GFX12-NEXT:    s_mov_b32 s0, s21191; GFX12-NEXT:    s_mov_b32 s1, s31192; GFX12-NEXT:    s_mov_b32 s2, s41193; GFX12-NEXT:    s_mov_b32 s3, s51194; GFX12-NEXT:    s_mov_b32 s4, s61195; GFX12-NEXT:    s_mov_b32 s5, s71196; GFX12-NEXT:    s_mov_b32 s6, s81197; GFX12-NEXT:    s_mov_b32 s7, s91198; GFX12-NEXT:    image_atomic_sub_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a161199; GFX12-NEXT:    s_wait_loadcnt 0x01200; GFX12-NEXT:    ; return to shader part epilog1201main_body:1202  %v = call i64 @llvm.amdgcn.image.atomic.sub.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)1203  %out = bitcast i64 %v to <2 x float>1204  ret <2 x float> %out1205}1206 1207define amdgpu_ps <2 x float> @atomic_smin_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {1208; GFX9-LABEL: atomic_smin_i64_1d:1209; GFX9:       ; %bb.0: ; %main_body1210; GFX9-NEXT:    s_mov_b32 s0, s21211; GFX9-NEXT:    s_mov_b32 s1, s31212; GFX9-NEXT:    s_mov_b32 s2, s41213; GFX9-NEXT:    s_mov_b32 s3, s51214; GFX9-NEXT:    s_mov_b32 s4, s61215; GFX9-NEXT:    s_mov_b32 s5, s71216; GFX9-NEXT:    s_mov_b32 s6, s81217; GFX9-NEXT:    s_mov_b32 s7, s91218; GFX9-NEXT:    image_atomic_smin v[0:1], v2, s[0:7] dmask:0x3 unorm glc a161219; GFX9-NEXT:    s_waitcnt vmcnt(0)1220; GFX9-NEXT:    ; return to shader part epilog1221;1222; GFX10-LABEL: atomic_smin_i64_1d:1223; GFX10:       ; %bb.0: ; %main_body1224; GFX10-NEXT:    s_mov_b32 s0, s21225; GFX10-NEXT:    s_mov_b32 s1, s31226; GFX10-NEXT:    s_mov_b32 s2, s41227; GFX10-NEXT:    s_mov_b32 s3, s51228; GFX10-NEXT:    s_mov_b32 s4, s61229; GFX10-NEXT:    s_mov_b32 s5, s71230; GFX10-NEXT:    s_mov_b32 s6, s81231; GFX10-NEXT:    s_mov_b32 s7, s91232; GFX10-NEXT:    image_atomic_smin v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a161233; GFX10-NEXT:    s_waitcnt vmcnt(0)1234; GFX10-NEXT:    ; return to shader part epilog1235;1236; GFX12-LABEL: atomic_smin_i64_1d:1237; GFX12:       ; %bb.0: ; %main_body1238; GFX12-NEXT:    s_mov_b32 s0, s21239; GFX12-NEXT:    s_mov_b32 s1, s31240; GFX12-NEXT:    s_mov_b32 s2, s41241; GFX12-NEXT:    s_mov_b32 s3, s51242; GFX12-NEXT:    s_mov_b32 s4, s61243; GFX12-NEXT:    s_mov_b32 s5, s71244; GFX12-NEXT:    s_mov_b32 s6, s81245; GFX12-NEXT:    s_mov_b32 s7, s91246; GFX12-NEXT:    image_atomic_min_int v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a161247; GFX12-NEXT:    s_wait_loadcnt 0x01248; GFX12-NEXT:    ; return to shader part epilog1249main_body:1250  %v = call i64 @llvm.amdgcn.image.atomic.smin.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)1251  %out = bitcast i64 %v to <2 x float>1252  ret <2 x float> %out1253}1254 1255define amdgpu_ps <2 x float> @atomic_umin_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {1256; GFX9-LABEL: atomic_umin_i64_1d:1257; GFX9:       ; %bb.0: ; %main_body1258; GFX9-NEXT:    s_mov_b32 s0, s21259; GFX9-NEXT:    s_mov_b32 s1, s31260; GFX9-NEXT:    s_mov_b32 s2, s41261; GFX9-NEXT:    s_mov_b32 s3, s51262; GFX9-NEXT:    s_mov_b32 s4, s61263; GFX9-NEXT:    s_mov_b32 s5, s71264; GFX9-NEXT:    s_mov_b32 s6, s81265; GFX9-NEXT:    s_mov_b32 s7, s91266; GFX9-NEXT:    image_atomic_umin v[0:1], v2, s[0:7] dmask:0x3 unorm glc a161267; GFX9-NEXT:    s_waitcnt vmcnt(0)1268; GFX9-NEXT:    ; return to shader part epilog1269;1270; GFX10-LABEL: atomic_umin_i64_1d:1271; GFX10:       ; %bb.0: ; %main_body1272; GFX10-NEXT:    s_mov_b32 s0, s21273; GFX10-NEXT:    s_mov_b32 s1, s31274; GFX10-NEXT:    s_mov_b32 s2, s41275; GFX10-NEXT:    s_mov_b32 s3, s51276; GFX10-NEXT:    s_mov_b32 s4, s61277; GFX10-NEXT:    s_mov_b32 s5, s71278; GFX10-NEXT:    s_mov_b32 s6, s81279; GFX10-NEXT:    s_mov_b32 s7, s91280; GFX10-NEXT:    image_atomic_umin v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a161281; GFX10-NEXT:    s_waitcnt vmcnt(0)1282; GFX10-NEXT:    ; return to shader part epilog1283;1284; GFX12-LABEL: atomic_umin_i64_1d:1285; GFX12:       ; %bb.0: ; %main_body1286; GFX12-NEXT:    s_mov_b32 s0, s21287; GFX12-NEXT:    s_mov_b32 s1, s31288; GFX12-NEXT:    s_mov_b32 s2, s41289; GFX12-NEXT:    s_mov_b32 s3, s51290; GFX12-NEXT:    s_mov_b32 s4, s61291; GFX12-NEXT:    s_mov_b32 s5, s71292; GFX12-NEXT:    s_mov_b32 s6, s81293; GFX12-NEXT:    s_mov_b32 s7, s91294; GFX12-NEXT:    image_atomic_min_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a161295; GFX12-NEXT:    s_wait_loadcnt 0x01296; GFX12-NEXT:    ; return to shader part epilog1297main_body:1298  %v = call i64 @llvm.amdgcn.image.atomic.umin.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)1299  %out = bitcast i64 %v to <2 x float>1300  ret <2 x float> %out1301}1302 1303define amdgpu_ps <2 x float> @atomic_smax_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {1304; GFX9-LABEL: atomic_smax_i64_1d:1305; GFX9:       ; %bb.0: ; %main_body1306; GFX9-NEXT:    s_mov_b32 s0, s21307; GFX9-NEXT:    s_mov_b32 s1, s31308; GFX9-NEXT:    s_mov_b32 s2, s41309; GFX9-NEXT:    s_mov_b32 s3, s51310; GFX9-NEXT:    s_mov_b32 s4, s61311; GFX9-NEXT:    s_mov_b32 s5, s71312; GFX9-NEXT:    s_mov_b32 s6, s81313; GFX9-NEXT:    s_mov_b32 s7, s91314; GFX9-NEXT:    image_atomic_smax v[0:1], v2, s[0:7] dmask:0x3 unorm glc a161315; GFX9-NEXT:    s_waitcnt vmcnt(0)1316; GFX9-NEXT:    ; return to shader part epilog1317;1318; GFX10-LABEL: atomic_smax_i64_1d:1319; GFX10:       ; %bb.0: ; %main_body1320; GFX10-NEXT:    s_mov_b32 s0, s21321; GFX10-NEXT:    s_mov_b32 s1, s31322; GFX10-NEXT:    s_mov_b32 s2, s41323; GFX10-NEXT:    s_mov_b32 s3, s51324; GFX10-NEXT:    s_mov_b32 s4, s61325; GFX10-NEXT:    s_mov_b32 s5, s71326; GFX10-NEXT:    s_mov_b32 s6, s81327; GFX10-NEXT:    s_mov_b32 s7, s91328; GFX10-NEXT:    image_atomic_smax v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a161329; GFX10-NEXT:    s_waitcnt vmcnt(0)1330; GFX10-NEXT:    ; return to shader part epilog1331;1332; GFX12-LABEL: atomic_smax_i64_1d:1333; GFX12:       ; %bb.0: ; %main_body1334; GFX12-NEXT:    s_mov_b32 s0, s21335; GFX12-NEXT:    s_mov_b32 s1, s31336; GFX12-NEXT:    s_mov_b32 s2, s41337; GFX12-NEXT:    s_mov_b32 s3, s51338; GFX12-NEXT:    s_mov_b32 s4, s61339; GFX12-NEXT:    s_mov_b32 s5, s71340; GFX12-NEXT:    s_mov_b32 s6, s81341; GFX12-NEXT:    s_mov_b32 s7, s91342; GFX12-NEXT:    image_atomic_max_int v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a161343; GFX12-NEXT:    s_wait_loadcnt 0x01344; GFX12-NEXT:    ; return to shader part epilog1345main_body:1346  %v = call i64 @llvm.amdgcn.image.atomic.smax.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)1347  %out = bitcast i64 %v to <2 x float>1348  ret <2 x float> %out1349}1350 1351define amdgpu_ps <2 x float> @atomic_umax_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {1352; GFX9-LABEL: atomic_umax_i64_1d:1353; GFX9:       ; %bb.0: ; %main_body1354; GFX9-NEXT:    s_mov_b32 s0, s21355; GFX9-NEXT:    s_mov_b32 s1, s31356; GFX9-NEXT:    s_mov_b32 s2, s41357; GFX9-NEXT:    s_mov_b32 s3, s51358; GFX9-NEXT:    s_mov_b32 s4, s61359; GFX9-NEXT:    s_mov_b32 s5, s71360; GFX9-NEXT:    s_mov_b32 s6, s81361; GFX9-NEXT:    s_mov_b32 s7, s91362; GFX9-NEXT:    image_atomic_umax v[0:1], v2, s[0:7] dmask:0x3 unorm glc a161363; GFX9-NEXT:    s_waitcnt vmcnt(0)1364; GFX9-NEXT:    ; return to shader part epilog1365;1366; GFX10-LABEL: atomic_umax_i64_1d:1367; GFX10:       ; %bb.0: ; %main_body1368; GFX10-NEXT:    s_mov_b32 s0, s21369; GFX10-NEXT:    s_mov_b32 s1, s31370; GFX10-NEXT:    s_mov_b32 s2, s41371; GFX10-NEXT:    s_mov_b32 s3, s51372; GFX10-NEXT:    s_mov_b32 s4, s61373; GFX10-NEXT:    s_mov_b32 s5, s71374; GFX10-NEXT:    s_mov_b32 s6, s81375; GFX10-NEXT:    s_mov_b32 s7, s91376; GFX10-NEXT:    image_atomic_umax v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a161377; GFX10-NEXT:    s_waitcnt vmcnt(0)1378; GFX10-NEXT:    ; return to shader part epilog1379;1380; GFX12-LABEL: atomic_umax_i64_1d:1381; GFX12:       ; %bb.0: ; %main_body1382; GFX12-NEXT:    s_mov_b32 s0, s21383; GFX12-NEXT:    s_mov_b32 s1, s31384; GFX12-NEXT:    s_mov_b32 s2, s41385; GFX12-NEXT:    s_mov_b32 s3, s51386; GFX12-NEXT:    s_mov_b32 s4, s61387; GFX12-NEXT:    s_mov_b32 s5, s71388; GFX12-NEXT:    s_mov_b32 s6, s81389; GFX12-NEXT:    s_mov_b32 s7, s91390; GFX12-NEXT:    image_atomic_max_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a161391; GFX12-NEXT:    s_wait_loadcnt 0x01392; GFX12-NEXT:    ; return to shader part epilog1393main_body:1394  %v = call i64 @llvm.amdgcn.image.atomic.umax.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)1395  %out = bitcast i64 %v to <2 x float>1396  ret <2 x float> %out1397}1398 1399define amdgpu_ps <2 x float> @atomic_and_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {1400; GFX9-LABEL: atomic_and_i64_1d:1401; GFX9:       ; %bb.0: ; %main_body1402; GFX9-NEXT:    s_mov_b32 s0, s21403; GFX9-NEXT:    s_mov_b32 s1, s31404; GFX9-NEXT:    s_mov_b32 s2, s41405; GFX9-NEXT:    s_mov_b32 s3, s51406; GFX9-NEXT:    s_mov_b32 s4, s61407; GFX9-NEXT:    s_mov_b32 s5, s71408; GFX9-NEXT:    s_mov_b32 s6, s81409; GFX9-NEXT:    s_mov_b32 s7, s91410; GFX9-NEXT:    image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 unorm glc a161411; GFX9-NEXT:    s_waitcnt vmcnt(0)1412; GFX9-NEXT:    ; return to shader part epilog1413;1414; GFX10-LABEL: atomic_and_i64_1d:1415; GFX10:       ; %bb.0: ; %main_body1416; GFX10-NEXT:    s_mov_b32 s0, s21417; GFX10-NEXT:    s_mov_b32 s1, s31418; GFX10-NEXT:    s_mov_b32 s2, s41419; GFX10-NEXT:    s_mov_b32 s3, s51420; GFX10-NEXT:    s_mov_b32 s4, s61421; GFX10-NEXT:    s_mov_b32 s5, s71422; GFX10-NEXT:    s_mov_b32 s6, s81423; GFX10-NEXT:    s_mov_b32 s7, s91424; GFX10-NEXT:    image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a161425; GFX10-NEXT:    s_waitcnt vmcnt(0)1426; GFX10-NEXT:    ; return to shader part epilog1427;1428; GFX12-LABEL: atomic_and_i64_1d:1429; GFX12:       ; %bb.0: ; %main_body1430; GFX12-NEXT:    s_mov_b32 s0, s21431; GFX12-NEXT:    s_mov_b32 s1, s31432; GFX12-NEXT:    s_mov_b32 s2, s41433; GFX12-NEXT:    s_mov_b32 s3, s51434; GFX12-NEXT:    s_mov_b32 s4, s61435; GFX12-NEXT:    s_mov_b32 s5, s71436; GFX12-NEXT:    s_mov_b32 s6, s81437; GFX12-NEXT:    s_mov_b32 s7, s91438; GFX12-NEXT:    image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a161439; GFX12-NEXT:    s_wait_loadcnt 0x01440; GFX12-NEXT:    ; return to shader part epilog1441main_body:1442  %v = call i64 @llvm.amdgcn.image.atomic.and.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)1443  %out = bitcast i64 %v to <2 x float>1444  ret <2 x float> %out1445}1446 1447define amdgpu_ps <2 x float> @atomic_or_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {1448; GFX9-LABEL: atomic_or_i64_1d:1449; GFX9:       ; %bb.0: ; %main_body1450; GFX9-NEXT:    s_mov_b32 s0, s21451; GFX9-NEXT:    s_mov_b32 s1, s31452; GFX9-NEXT:    s_mov_b32 s2, s41453; GFX9-NEXT:    s_mov_b32 s3, s51454; GFX9-NEXT:    s_mov_b32 s4, s61455; GFX9-NEXT:    s_mov_b32 s5, s71456; GFX9-NEXT:    s_mov_b32 s6, s81457; GFX9-NEXT:    s_mov_b32 s7, s91458; GFX9-NEXT:    image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 unorm glc a161459; GFX9-NEXT:    s_waitcnt vmcnt(0)1460; GFX9-NEXT:    ; return to shader part epilog1461;1462; GFX10-LABEL: atomic_or_i64_1d:1463; GFX10:       ; %bb.0: ; %main_body1464; GFX10-NEXT:    s_mov_b32 s0, s21465; GFX10-NEXT:    s_mov_b32 s1, s31466; GFX10-NEXT:    s_mov_b32 s2, s41467; GFX10-NEXT:    s_mov_b32 s3, s51468; GFX10-NEXT:    s_mov_b32 s4, s61469; GFX10-NEXT:    s_mov_b32 s5, s71470; GFX10-NEXT:    s_mov_b32 s6, s81471; GFX10-NEXT:    s_mov_b32 s7, s91472; GFX10-NEXT:    image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a161473; GFX10-NEXT:    s_waitcnt vmcnt(0)1474; GFX10-NEXT:    ; return to shader part epilog1475;1476; GFX12-LABEL: atomic_or_i64_1d:1477; GFX12:       ; %bb.0: ; %main_body1478; GFX12-NEXT:    s_mov_b32 s0, s21479; GFX12-NEXT:    s_mov_b32 s1, s31480; GFX12-NEXT:    s_mov_b32 s2, s41481; GFX12-NEXT:    s_mov_b32 s3, s51482; GFX12-NEXT:    s_mov_b32 s4, s61483; GFX12-NEXT:    s_mov_b32 s5, s71484; GFX12-NEXT:    s_mov_b32 s6, s81485; GFX12-NEXT:    s_mov_b32 s7, s91486; GFX12-NEXT:    image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a161487; GFX12-NEXT:    s_wait_loadcnt 0x01488; GFX12-NEXT:    ; return to shader part epilog1489main_body:1490  %v = call i64 @llvm.amdgcn.image.atomic.or.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)1491  %out = bitcast i64 %v to <2 x float>1492  ret <2 x float> %out1493}1494 1495define amdgpu_ps <2 x float> @atomic_xor_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {1496; GFX9-LABEL: atomic_xor_i64_1d:1497; GFX9:       ; %bb.0: ; %main_body1498; GFX9-NEXT:    s_mov_b32 s0, s21499; GFX9-NEXT:    s_mov_b32 s1, s31500; GFX9-NEXT:    s_mov_b32 s2, s41501; GFX9-NEXT:    s_mov_b32 s3, s51502; GFX9-NEXT:    s_mov_b32 s4, s61503; GFX9-NEXT:    s_mov_b32 s5, s71504; GFX9-NEXT:    s_mov_b32 s6, s81505; GFX9-NEXT:    s_mov_b32 s7, s91506; GFX9-NEXT:    image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 unorm glc a161507; GFX9-NEXT:    s_waitcnt vmcnt(0)1508; GFX9-NEXT:    ; return to shader part epilog1509;1510; GFX10-LABEL: atomic_xor_i64_1d:1511; GFX10:       ; %bb.0: ; %main_body1512; GFX10-NEXT:    s_mov_b32 s0, s21513; GFX10-NEXT:    s_mov_b32 s1, s31514; GFX10-NEXT:    s_mov_b32 s2, s41515; GFX10-NEXT:    s_mov_b32 s3, s51516; GFX10-NEXT:    s_mov_b32 s4, s61517; GFX10-NEXT:    s_mov_b32 s5, s71518; GFX10-NEXT:    s_mov_b32 s6, s81519; GFX10-NEXT:    s_mov_b32 s7, s91520; GFX10-NEXT:    image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a161521; GFX10-NEXT:    s_waitcnt vmcnt(0)1522; GFX10-NEXT:    ; return to shader part epilog1523;1524; GFX12-LABEL: atomic_xor_i64_1d:1525; GFX12:       ; %bb.0: ; %main_body1526; GFX12-NEXT:    s_mov_b32 s0, s21527; GFX12-NEXT:    s_mov_b32 s1, s31528; GFX12-NEXT:    s_mov_b32 s2, s41529; GFX12-NEXT:    s_mov_b32 s3, s51530; GFX12-NEXT:    s_mov_b32 s4, s61531; GFX12-NEXT:    s_mov_b32 s5, s71532; GFX12-NEXT:    s_mov_b32 s6, s81533; GFX12-NEXT:    s_mov_b32 s7, s91534; GFX12-NEXT:    image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a161535; GFX12-NEXT:    s_wait_loadcnt 0x01536; GFX12-NEXT:    ; return to shader part epilog1537main_body:1538  %v = call i64 @llvm.amdgcn.image.atomic.xor.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)1539  %out = bitcast i64 %v to <2 x float>1540  ret <2 x float> %out1541}1542 1543define amdgpu_ps <2 x float> @atomic_inc_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {1544; GFX9-LABEL: atomic_inc_i64_1d:1545; GFX9:       ; %bb.0: ; %main_body1546; GFX9-NEXT:    s_mov_b32 s0, s21547; GFX9-NEXT:    s_mov_b32 s1, s31548; GFX9-NEXT:    s_mov_b32 s2, s41549; GFX9-NEXT:    s_mov_b32 s3, s51550; GFX9-NEXT:    s_mov_b32 s4, s61551; GFX9-NEXT:    s_mov_b32 s5, s71552; GFX9-NEXT:    s_mov_b32 s6, s81553; GFX9-NEXT:    s_mov_b32 s7, s91554; GFX9-NEXT:    image_atomic_inc v[0:1], v2, s[0:7] dmask:0x3 unorm glc a161555; GFX9-NEXT:    s_waitcnt vmcnt(0)1556; GFX9-NEXT:    ; return to shader part epilog1557;1558; GFX10-LABEL: atomic_inc_i64_1d:1559; GFX10:       ; %bb.0: ; %main_body1560; GFX10-NEXT:    s_mov_b32 s0, s21561; GFX10-NEXT:    s_mov_b32 s1, s31562; GFX10-NEXT:    s_mov_b32 s2, s41563; GFX10-NEXT:    s_mov_b32 s3, s51564; GFX10-NEXT:    s_mov_b32 s4, s61565; GFX10-NEXT:    s_mov_b32 s5, s71566; GFX10-NEXT:    s_mov_b32 s6, s81567; GFX10-NEXT:    s_mov_b32 s7, s91568; GFX10-NEXT:    image_atomic_inc v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a161569; GFX10-NEXT:    s_waitcnt vmcnt(0)1570; GFX10-NEXT:    ; return to shader part epilog1571;1572; GFX12-LABEL: atomic_inc_i64_1d:1573; GFX12:       ; %bb.0: ; %main_body1574; GFX12-NEXT:    s_mov_b32 s0, s21575; GFX12-NEXT:    s_mov_b32 s1, s31576; GFX12-NEXT:    s_mov_b32 s2, s41577; GFX12-NEXT:    s_mov_b32 s3, s51578; GFX12-NEXT:    s_mov_b32 s4, s61579; GFX12-NEXT:    s_mov_b32 s5, s71580; GFX12-NEXT:    s_mov_b32 s6, s81581; GFX12-NEXT:    s_mov_b32 s7, s91582; GFX12-NEXT:    image_atomic_inc_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a161583; GFX12-NEXT:    s_wait_loadcnt 0x01584; GFX12-NEXT:    ; return to shader part epilog1585main_body:1586  %v = call i64 @llvm.amdgcn.image.atomic.inc.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)1587  %out = bitcast i64 %v to <2 x float>1588  ret <2 x float> %out1589}1590 1591define amdgpu_ps <2 x float> @atomic_dec_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {1592; GFX9-LABEL: atomic_dec_i64_1d:1593; GFX9:       ; %bb.0: ; %main_body1594; GFX9-NEXT:    s_mov_b32 s0, s21595; GFX9-NEXT:    s_mov_b32 s1, s31596; GFX9-NEXT:    s_mov_b32 s2, s41597; GFX9-NEXT:    s_mov_b32 s3, s51598; GFX9-NEXT:    s_mov_b32 s4, s61599; GFX9-NEXT:    s_mov_b32 s5, s71600; GFX9-NEXT:    s_mov_b32 s6, s81601; GFX9-NEXT:    s_mov_b32 s7, s91602; GFX9-NEXT:    image_atomic_dec v[0:1], v2, s[0:7] dmask:0x3 unorm glc a161603; GFX9-NEXT:    s_waitcnt vmcnt(0)1604; GFX9-NEXT:    ; return to shader part epilog1605;1606; GFX10-LABEL: atomic_dec_i64_1d:1607; GFX10:       ; %bb.0: ; %main_body1608; GFX10-NEXT:    s_mov_b32 s0, s21609; GFX10-NEXT:    s_mov_b32 s1, s31610; GFX10-NEXT:    s_mov_b32 s2, s41611; GFX10-NEXT:    s_mov_b32 s3, s51612; GFX10-NEXT:    s_mov_b32 s4, s61613; GFX10-NEXT:    s_mov_b32 s5, s71614; GFX10-NEXT:    s_mov_b32 s6, s81615; GFX10-NEXT:    s_mov_b32 s7, s91616; GFX10-NEXT:    image_atomic_dec v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a161617; GFX10-NEXT:    s_waitcnt vmcnt(0)1618; GFX10-NEXT:    ; return to shader part epilog1619;1620; GFX12-LABEL: atomic_dec_i64_1d:1621; GFX12:       ; %bb.0: ; %main_body1622; GFX12-NEXT:    s_mov_b32 s0, s21623; GFX12-NEXT:    s_mov_b32 s1, s31624; GFX12-NEXT:    s_mov_b32 s2, s41625; GFX12-NEXT:    s_mov_b32 s3, s51626; GFX12-NEXT:    s_mov_b32 s4, s61627; GFX12-NEXT:    s_mov_b32 s5, s71628; GFX12-NEXT:    s_mov_b32 s6, s81629; GFX12-NEXT:    s_mov_b32 s7, s91630; GFX12-NEXT:    image_atomic_dec_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a161631; GFX12-NEXT:    s_wait_loadcnt 0x01632; GFX12-NEXT:    ; return to shader part epilog1633main_body:1634  %v = call i64 @llvm.amdgcn.image.atomic.dec.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)1635  %out = bitcast i64 %v to <2 x float>1636  ret <2 x float> %out1637}1638 1639define amdgpu_ps <2 x float> @atomic_cmpswap_i64_1d(<8 x i32> inreg %rsrc, i64 %cmp, i64 %swap, i16 %s) {1640; GFX9-LABEL: atomic_cmpswap_i64_1d:1641; GFX9:       ; %bb.0: ; %main_body1642; GFX9-NEXT:    s_mov_b32 s0, s21643; GFX9-NEXT:    s_mov_b32 s1, s31644; GFX9-NEXT:    s_mov_b32 s2, s41645; GFX9-NEXT:    s_mov_b32 s3, s51646; GFX9-NEXT:    s_mov_b32 s4, s61647; GFX9-NEXT:    s_mov_b32 s5, s71648; GFX9-NEXT:    s_mov_b32 s6, s81649; GFX9-NEXT:    s_mov_b32 s7, s91650; GFX9-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm glc a161651; GFX9-NEXT:    s_waitcnt vmcnt(0)1652; GFX9-NEXT:    ; return to shader part epilog1653;1654; GFX10-LABEL: atomic_cmpswap_i64_1d:1655; GFX10:       ; %bb.0: ; %main_body1656; GFX10-NEXT:    s_mov_b32 s0, s21657; GFX10-NEXT:    s_mov_b32 s1, s31658; GFX10-NEXT:    s_mov_b32 s2, s41659; GFX10-NEXT:    s_mov_b32 s3, s51660; GFX10-NEXT:    s_mov_b32 s4, s61661; GFX10-NEXT:    s_mov_b32 s5, s71662; GFX10-NEXT:    s_mov_b32 s6, s81663; GFX10-NEXT:    s_mov_b32 s7, s91664; GFX10-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc a161665; GFX10-NEXT:    s_waitcnt vmcnt(0)1666; GFX10-NEXT:    ; return to shader part epilog1667;1668; GFX12-LABEL: atomic_cmpswap_i64_1d:1669; GFX12:       ; %bb.0: ; %main_body1670; GFX12-NEXT:    s_mov_b32 s0, s21671; GFX12-NEXT:    s_mov_b32 s1, s31672; GFX12-NEXT:    s_mov_b32 s2, s41673; GFX12-NEXT:    s_mov_b32 s3, s51674; GFX12-NEXT:    s_mov_b32 s4, s61675; GFX12-NEXT:    s_mov_b32 s5, s71676; GFX12-NEXT:    s_mov_b32 s6, s81677; GFX12-NEXT:    s_mov_b32 s7, s91678; GFX12-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a161679; GFX12-NEXT:    s_wait_loadcnt 0x01680; GFX12-NEXT:    ; return to shader part epilog1681main_body:1682  %v = call i64 @llvm.amdgcn.image.atomic.cmpswap.1d.i64.i16(i64 %cmp, i64 %swap, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)1683  %out = bitcast i64 %v to <2 x float>1684  ret <2 x float> %out1685}1686 1687define amdgpu_ps <2 x float> @atomic_add_i64_2d(<8 x i32> inreg %rsrc, i64 %data, i16 %s, i16 %t) {1688; GFX9-LABEL: atomic_add_i64_2d:1689; GFX9:       ; %bb.0: ; %main_body1690; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v21691; GFX9-NEXT:    s_mov_b32 s0, s21692; GFX9-NEXT:    s_mov_b32 s1, s31693; GFX9-NEXT:    s_mov_b32 s2, s41694; GFX9-NEXT:    s_mov_b32 s3, s51695; GFX9-NEXT:    s_mov_b32 s4, s61696; GFX9-NEXT:    s_mov_b32 s5, s71697; GFX9-NEXT:    s_mov_b32 s6, s81698; GFX9-NEXT:    s_mov_b32 s7, s91699; GFX9-NEXT:    v_lshl_or_b32 v2, v3, 16, v21700; GFX9-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc a161701; GFX9-NEXT:    s_waitcnt vmcnt(0)1702; GFX9-NEXT:    ; return to shader part epilog1703;1704; GFX10-LABEL: atomic_add_i64_2d:1705; GFX10:       ; %bb.0: ; %main_body1706; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v21707; GFX10-NEXT:    s_mov_b32 s0, s21708; GFX10-NEXT:    s_mov_b32 s1, s31709; GFX10-NEXT:    s_mov_b32 s2, s41710; GFX10-NEXT:    s_mov_b32 s3, s51711; GFX10-NEXT:    v_lshl_or_b32 v2, v3, 16, v21712; GFX10-NEXT:    s_mov_b32 s4, s61713; GFX10-NEXT:    s_mov_b32 s5, s71714; GFX10-NEXT:    s_mov_b32 s6, s81715; GFX10-NEXT:    s_mov_b32 s7, s91716; GFX10-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D unorm glc a161717; GFX10-NEXT:    s_waitcnt vmcnt(0)1718; GFX10-NEXT:    ; return to shader part epilog1719;1720; GFX12-LABEL: atomic_add_i64_2d:1721; GFX12:       ; %bb.0: ; %main_body1722; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff, v21723; GFX12-NEXT:    s_mov_b32 s0, s21724; GFX12-NEXT:    s_mov_b32 s1, s31725; GFX12-NEXT:    s_mov_b32 s2, s41726; GFX12-NEXT:    s_mov_b32 s3, s51727; GFX12-NEXT:    v_lshl_or_b32 v2, v3, 16, v21728; GFX12-NEXT:    s_mov_b32 s4, s61729; GFX12-NEXT:    s_mov_b32 s5, s71730; GFX12-NEXT:    s_mov_b32 s6, s81731; GFX12-NEXT:    s_mov_b32 s7, s91732; GFX12-NEXT:    image_atomic_add_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D th:TH_ATOMIC_RETURN a161733; GFX12-NEXT:    s_wait_loadcnt 0x01734; GFX12-NEXT:    ; return to shader part epilog1735main_body:1736  %v = call i64 @llvm.amdgcn.image.atomic.add.2d.i64.i16(i64 %data, i16 %s, i16 %t, <8 x i32> %rsrc, i32 0, i32 0)1737  %out = bitcast i64 %v to <2 x float>1738  ret <2 x float> %out1739}1740 1741define amdgpu_ps <2 x float> @atomic_add_i64_3d(<8 x i32> inreg %rsrc, i64 %data, i16 %s, i16 %t, i16 %r) {1742; GFX9-LABEL: atomic_add_i64_3d:1743; GFX9:       ; %bb.0: ; %main_body1744; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v21745; GFX9-NEXT:    s_mov_b32 s0, s21746; GFX9-NEXT:    s_mov_b32 s1, s31747; GFX9-NEXT:    s_mov_b32 s2, s41748; GFX9-NEXT:    s_mov_b32 s3, s51749; GFX9-NEXT:    s_mov_b32 s4, s61750; GFX9-NEXT:    s_mov_b32 s5, s71751; GFX9-NEXT:    s_mov_b32 s6, s81752; GFX9-NEXT:    s_mov_b32 s7, s91753; GFX9-NEXT:    v_lshl_or_b32 v3, v3, 16, v21754; GFX9-NEXT:    image_atomic_add v[0:1], v[3:4], s[0:7] dmask:0x3 unorm glc a161755; GFX9-NEXT:    s_waitcnt vmcnt(0)1756; GFX9-NEXT:    ; return to shader part epilog1757;1758; GFX10-LABEL: atomic_add_i64_3d:1759; GFX10:       ; %bb.0: ; %main_body1760; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v21761; GFX10-NEXT:    s_mov_b32 s0, s21762; GFX10-NEXT:    s_mov_b32 s1, s31763; GFX10-NEXT:    s_mov_b32 s2, s41764; GFX10-NEXT:    s_mov_b32 s3, s51765; GFX10-NEXT:    v_lshl_or_b32 v2, v3, 16, v21766; GFX10-NEXT:    s_mov_b32 s4, s61767; GFX10-NEXT:    s_mov_b32 s5, s71768; GFX10-NEXT:    s_mov_b32 s6, s81769; GFX10-NEXT:    s_mov_b32 s7, s91770; GFX10-NEXT:    image_atomic_add v[0:1], [v2, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_3D unorm glc a161771; GFX10-NEXT:    s_waitcnt vmcnt(0)1772; GFX10-NEXT:    ; return to shader part epilog1773;1774; GFX12-LABEL: atomic_add_i64_3d:1775; GFX12:       ; %bb.0: ; %main_body1776; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff, v21777; GFX12-NEXT:    s_mov_b32 s0, s21778; GFX12-NEXT:    s_mov_b32 s1, s31779; GFX12-NEXT:    s_mov_b32 s2, s41780; GFX12-NEXT:    s_mov_b32 s3, s51781; GFX12-NEXT:    v_lshl_or_b32 v2, v3, 16, v21782; GFX12-NEXT:    s_mov_b32 s4, s61783; GFX12-NEXT:    s_mov_b32 s5, s71784; GFX12-NEXT:    s_mov_b32 s6, s81785; GFX12-NEXT:    s_mov_b32 s7, s91786; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_3D th:TH_ATOMIC_RETURN a161787; GFX12-NEXT:    s_wait_loadcnt 0x01788; GFX12-NEXT:    ; return to shader part epilog1789main_body:1790  %v = call i64 @llvm.amdgcn.image.atomic.add.3d.i64.i16(i64 %data, i16 %s, i16 %t, i16 %r, <8 x i32> %rsrc, i32 0, i32 0)1791  %out = bitcast i64 %v to <2 x float>1792  ret <2 x float> %out1793}1794 1795define amdgpu_ps <2 x float> @atomic_add_i64_cube(<8 x i32> inreg %rsrc, i64 %data, i16 %s, i16 %t, i16 %face) {1796; GFX9-LABEL: atomic_add_i64_cube:1797; GFX9:       ; %bb.0: ; %main_body1798; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v21799; GFX9-NEXT:    s_mov_b32 s0, s21800; GFX9-NEXT:    s_mov_b32 s1, s31801; GFX9-NEXT:    s_mov_b32 s2, s41802; GFX9-NEXT:    s_mov_b32 s3, s51803; GFX9-NEXT:    s_mov_b32 s4, s61804; GFX9-NEXT:    s_mov_b32 s5, s71805; GFX9-NEXT:    s_mov_b32 s6, s81806; GFX9-NEXT:    s_mov_b32 s7, s91807; GFX9-NEXT:    v_lshl_or_b32 v3, v3, 16, v21808; GFX9-NEXT:    image_atomic_add v[0:1], v[3:4], s[0:7] dmask:0x3 unorm glc a16 da1809; GFX9-NEXT:    s_waitcnt vmcnt(0)1810; GFX9-NEXT:    ; return to shader part epilog1811;1812; GFX10-LABEL: atomic_add_i64_cube:1813; GFX10:       ; %bb.0: ; %main_body1814; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v21815; GFX10-NEXT:    s_mov_b32 s0, s21816; GFX10-NEXT:    s_mov_b32 s1, s31817; GFX10-NEXT:    s_mov_b32 s2, s41818; GFX10-NEXT:    s_mov_b32 s3, s51819; GFX10-NEXT:    v_lshl_or_b32 v2, v3, 16, v21820; GFX10-NEXT:    s_mov_b32 s4, s61821; GFX10-NEXT:    s_mov_b32 s5, s71822; GFX10-NEXT:    s_mov_b32 s6, s81823; GFX10-NEXT:    s_mov_b32 s7, s91824; GFX10-NEXT:    image_atomic_add v[0:1], [v2, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_CUBE unorm glc a161825; GFX10-NEXT:    s_waitcnt vmcnt(0)1826; GFX10-NEXT:    ; return to shader part epilog1827;1828; GFX12-LABEL: atomic_add_i64_cube:1829; GFX12:       ; %bb.0: ; %main_body1830; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff, v21831; GFX12-NEXT:    s_mov_b32 s0, s21832; GFX12-NEXT:    s_mov_b32 s1, s31833; GFX12-NEXT:    s_mov_b32 s2, s41834; GFX12-NEXT:    s_mov_b32 s3, s51835; GFX12-NEXT:    v_lshl_or_b32 v2, v3, 16, v21836; GFX12-NEXT:    s_mov_b32 s4, s61837; GFX12-NEXT:    s_mov_b32 s5, s71838; GFX12-NEXT:    s_mov_b32 s6, s81839; GFX12-NEXT:    s_mov_b32 s7, s91840; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_CUBE th:TH_ATOMIC_RETURN a161841; GFX12-NEXT:    s_wait_loadcnt 0x01842; GFX12-NEXT:    ; return to shader part epilog1843main_body:1844  %v = call i64 @llvm.amdgcn.image.atomic.add.cube.i64.i16(i64 %data, i16 %s, i16 %t, i16 %face , <8 x i32> %rsrc, i32 0, i32 0)1845  %out = bitcast i64 %v to <2 x float>1846  ret <2 x float> %out1847}1848 1849define amdgpu_ps <2 x float> @atomic_add_i64_1darray(<8 x i32> inreg %rsrc, i64 %data, i16 %s, i16 %slice) {1850; GFX9-LABEL: atomic_add_i64_1darray:1851; GFX9:       ; %bb.0: ; %main_body1852; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v21853; GFX9-NEXT:    s_mov_b32 s0, s21854; GFX9-NEXT:    s_mov_b32 s1, s31855; GFX9-NEXT:    s_mov_b32 s2, s41856; GFX9-NEXT:    s_mov_b32 s3, s51857; GFX9-NEXT:    s_mov_b32 s4, s61858; GFX9-NEXT:    s_mov_b32 s5, s71859; GFX9-NEXT:    s_mov_b32 s6, s81860; GFX9-NEXT:    s_mov_b32 s7, s91861; GFX9-NEXT:    v_lshl_or_b32 v2, v3, 16, v21862; GFX9-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16 da1863; GFX9-NEXT:    s_waitcnt vmcnt(0)1864; GFX9-NEXT:    ; return to shader part epilog1865;1866; GFX10-LABEL: atomic_add_i64_1darray:1867; GFX10:       ; %bb.0: ; %main_body1868; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v21869; GFX10-NEXT:    s_mov_b32 s0, s21870; GFX10-NEXT:    s_mov_b32 s1, s31871; GFX10-NEXT:    s_mov_b32 s2, s41872; GFX10-NEXT:    s_mov_b32 s3, s51873; GFX10-NEXT:    v_lshl_or_b32 v2, v3, 16, v21874; GFX10-NEXT:    s_mov_b32 s4, s61875; GFX10-NEXT:    s_mov_b32 s5, s71876; GFX10-NEXT:    s_mov_b32 s6, s81877; GFX10-NEXT:    s_mov_b32 s7, s91878; GFX10-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D_ARRAY unorm glc a161879; GFX10-NEXT:    s_waitcnt vmcnt(0)1880; GFX10-NEXT:    ; return to shader part epilog1881;1882; GFX12-LABEL: atomic_add_i64_1darray:1883; GFX12:       ; %bb.0: ; %main_body1884; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff, v21885; GFX12-NEXT:    s_mov_b32 s0, s21886; GFX12-NEXT:    s_mov_b32 s1, s31887; GFX12-NEXT:    s_mov_b32 s2, s41888; GFX12-NEXT:    s_mov_b32 s3, s51889; GFX12-NEXT:    v_lshl_or_b32 v2, v3, 16, v21890; GFX12-NEXT:    s_mov_b32 s4, s61891; GFX12-NEXT:    s_mov_b32 s5, s71892; GFX12-NEXT:    s_mov_b32 s6, s81893; GFX12-NEXT:    s_mov_b32 s7, s91894; GFX12-NEXT:    image_atomic_add_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D_ARRAY th:TH_ATOMIC_RETURN a161895; GFX12-NEXT:    s_wait_loadcnt 0x01896; GFX12-NEXT:    ; return to shader part epilog1897main_body:1898  %v = call i64 @llvm.amdgcn.image.atomic.add.1darray.i64.i16(i64 %data, i16 %s, i16 %slice, <8 x i32> %rsrc, i32 0, i32 0)1899  %out = bitcast i64 %v to <2 x float>1900  ret <2 x float> %out1901}1902 1903define amdgpu_ps <2 x float> @atomic_add_i64_2darray(<8 x i32> inreg %rsrc, i64 %data, i16 %s, i16 %t, i16 %slice) {1904; GFX9-LABEL: atomic_add_i64_2darray:1905; GFX9:       ; %bb.0: ; %main_body1906; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v21907; GFX9-NEXT:    s_mov_b32 s0, s21908; GFX9-NEXT:    s_mov_b32 s1, s31909; GFX9-NEXT:    s_mov_b32 s2, s41910; GFX9-NEXT:    s_mov_b32 s3, s51911; GFX9-NEXT:    s_mov_b32 s4, s61912; GFX9-NEXT:    s_mov_b32 s5, s71913; GFX9-NEXT:    s_mov_b32 s6, s81914; GFX9-NEXT:    s_mov_b32 s7, s91915; GFX9-NEXT:    v_lshl_or_b32 v3, v3, 16, v21916; GFX9-NEXT:    image_atomic_add v[0:1], v[3:4], s[0:7] dmask:0x3 unorm glc a16 da1917; GFX9-NEXT:    s_waitcnt vmcnt(0)1918; GFX9-NEXT:    ; return to shader part epilog1919;1920; GFX10-LABEL: atomic_add_i64_2darray:1921; GFX10:       ; %bb.0: ; %main_body1922; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v21923; GFX10-NEXT:    s_mov_b32 s0, s21924; GFX10-NEXT:    s_mov_b32 s1, s31925; GFX10-NEXT:    s_mov_b32 s2, s41926; GFX10-NEXT:    s_mov_b32 s3, s51927; GFX10-NEXT:    v_lshl_or_b32 v2, v3, 16, v21928; GFX10-NEXT:    s_mov_b32 s4, s61929; GFX10-NEXT:    s_mov_b32 s5, s71930; GFX10-NEXT:    s_mov_b32 s6, s81931; GFX10-NEXT:    s_mov_b32 s7, s91932; GFX10-NEXT:    image_atomic_add v[0:1], [v2, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_ARRAY unorm glc a161933; GFX10-NEXT:    s_waitcnt vmcnt(0)1934; GFX10-NEXT:    ; return to shader part epilog1935;1936; GFX12-LABEL: atomic_add_i64_2darray:1937; GFX12:       ; %bb.0: ; %main_body1938; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff, v21939; GFX12-NEXT:    s_mov_b32 s0, s21940; GFX12-NEXT:    s_mov_b32 s1, s31941; GFX12-NEXT:    s_mov_b32 s2, s41942; GFX12-NEXT:    s_mov_b32 s3, s51943; GFX12-NEXT:    v_lshl_or_b32 v2, v3, 16, v21944; GFX12-NEXT:    s_mov_b32 s4, s61945; GFX12-NEXT:    s_mov_b32 s5, s71946; GFX12-NEXT:    s_mov_b32 s6, s81947; GFX12-NEXT:    s_mov_b32 s7, s91948; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_ARRAY th:TH_ATOMIC_RETURN a161949; GFX12-NEXT:    s_wait_loadcnt 0x01950; GFX12-NEXT:    ; return to shader part epilog1951main_body:1952  %v = call i64 @llvm.amdgcn.image.atomic.add.2darray.i64.i16(i64 %data, i16 %s, i16 %t, i16 %slice, <8 x i32> %rsrc, i32 0, i32 0)1953  %out = bitcast i64 %v to <2 x float>1954  ret <2 x float> %out1955}1956 1957define amdgpu_ps <2 x float> @atomic_add_i64_2dmsaa(<8 x i32> inreg %rsrc, i64 %data, i16 %s, i16 %t, i16 %fragid) {1958; GFX9-LABEL: atomic_add_i64_2dmsaa:1959; GFX9:       ; %bb.0: ; %main_body1960; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v21961; GFX9-NEXT:    s_mov_b32 s0, s21962; GFX9-NEXT:    s_mov_b32 s1, s31963; GFX9-NEXT:    s_mov_b32 s2, s41964; GFX9-NEXT:    s_mov_b32 s3, s51965; GFX9-NEXT:    s_mov_b32 s4, s61966; GFX9-NEXT:    s_mov_b32 s5, s71967; GFX9-NEXT:    s_mov_b32 s6, s81968; GFX9-NEXT:    s_mov_b32 s7, s91969; GFX9-NEXT:    v_lshl_or_b32 v3, v3, 16, v21970; GFX9-NEXT:    image_atomic_add v[0:1], v[3:4], s[0:7] dmask:0x3 unorm glc a161971; GFX9-NEXT:    s_waitcnt vmcnt(0)1972; GFX9-NEXT:    ; return to shader part epilog1973;1974; GFX10-LABEL: atomic_add_i64_2dmsaa:1975; GFX10:       ; %bb.0: ; %main_body1976; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v21977; GFX10-NEXT:    s_mov_b32 s0, s21978; GFX10-NEXT:    s_mov_b32 s1, s31979; GFX10-NEXT:    s_mov_b32 s2, s41980; GFX10-NEXT:    s_mov_b32 s3, s51981; GFX10-NEXT:    v_lshl_or_b32 v2, v3, 16, v21982; GFX10-NEXT:    s_mov_b32 s4, s61983; GFX10-NEXT:    s_mov_b32 s5, s71984; GFX10-NEXT:    s_mov_b32 s6, s81985; GFX10-NEXT:    s_mov_b32 s7, s91986; GFX10-NEXT:    image_atomic_add v[0:1], [v2, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_MSAA unorm glc a161987; GFX10-NEXT:    s_waitcnt vmcnt(0)1988; GFX10-NEXT:    ; return to shader part epilog1989;1990; GFX12-LABEL: atomic_add_i64_2dmsaa:1991; GFX12:       ; %bb.0: ; %main_body1992; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff, v21993; GFX12-NEXT:    s_mov_b32 s0, s21994; GFX12-NEXT:    s_mov_b32 s1, s31995; GFX12-NEXT:    s_mov_b32 s2, s41996; GFX12-NEXT:    s_mov_b32 s3, s51997; GFX12-NEXT:    v_lshl_or_b32 v2, v3, 16, v21998; GFX12-NEXT:    s_mov_b32 s4, s61999; GFX12-NEXT:    s_mov_b32 s5, s72000; GFX12-NEXT:    s_mov_b32 s6, s82001; GFX12-NEXT:    s_mov_b32 s7, s92002; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_MSAA th:TH_ATOMIC_RETURN a162003; GFX12-NEXT:    s_wait_loadcnt 0x02004; GFX12-NEXT:    ; return to shader part epilog2005main_body:2006  %v = call i64 @llvm.amdgcn.image.atomic.add.2dmsaa.i64.i16(i64 %data, i16 %s, i16 %t, i16 %fragid, <8 x i32> %rsrc, i32 0, i32 0)2007  %out = bitcast i64 %v to <2 x float>2008  ret <2 x float> %out2009}2010 2011define amdgpu_ps <2 x float> @atomic_add_i64_2darraymsaa(<8 x i32> inreg %rsrc, i64 %data, i16 %s, i16 %t, i16 %slice, i16 %fragid) {2012; GFX9-LABEL: atomic_add_i64_2darraymsaa:2013; GFX9:       ; %bb.0: ; %main_body2014; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v22015; GFX9-NEXT:    v_lshl_or_b32 v2, v3, 16, v22016; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff, v42017; GFX9-NEXT:    s_mov_b32 s0, s22018; GFX9-NEXT:    s_mov_b32 s1, s32019; GFX9-NEXT:    s_mov_b32 s2, s42020; GFX9-NEXT:    s_mov_b32 s3, s52021; GFX9-NEXT:    s_mov_b32 s4, s62022; GFX9-NEXT:    s_mov_b32 s5, s72023; GFX9-NEXT:    s_mov_b32 s6, s82024; GFX9-NEXT:    s_mov_b32 s7, s92025; GFX9-NEXT:    v_lshl_or_b32 v3, v5, 16, v32026; GFX9-NEXT:    image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc a16 da2027; GFX9-NEXT:    s_waitcnt vmcnt(0)2028; GFX9-NEXT:    ; return to shader part epilog2029;2030; GFX10-LABEL: atomic_add_i64_2darraymsaa:2031; GFX10:       ; %bb.0: ; %main_body2032; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v22033; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff, v42034; GFX10-NEXT:    s_mov_b32 s0, s22035; GFX10-NEXT:    s_mov_b32 s1, s32036; GFX10-NEXT:    s_mov_b32 s2, s42037; GFX10-NEXT:    v_lshl_or_b32 v2, v3, 16, v22038; GFX10-NEXT:    v_lshl_or_b32 v3, v5, 16, v42039; GFX10-NEXT:    s_mov_b32 s3, s52040; GFX10-NEXT:    s_mov_b32 s4, s62041; GFX10-NEXT:    s_mov_b32 s5, s72042; GFX10-NEXT:    s_mov_b32 s6, s82043; GFX10-NEXT:    s_mov_b32 s7, s92044; GFX10-NEXT:    image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm glc a162045; GFX10-NEXT:    s_waitcnt vmcnt(0)2046; GFX10-NEXT:    ; return to shader part epilog2047;2048; GFX12-LABEL: atomic_add_i64_2darraymsaa:2049; GFX12:       ; %bb.0: ; %main_body2050; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff, v22051; GFX12-NEXT:    v_and_b32_e32 v4, 0xffff, v42052; GFX12-NEXT:    s_mov_b32 s0, s22053; GFX12-NEXT:    s_mov_b32 s1, s32054; GFX12-NEXT:    s_mov_b32 s2, s42055; GFX12-NEXT:    v_lshl_or_b32 v2, v3, 16, v22056; GFX12-NEXT:    v_lshl_or_b32 v3, v5, 16, v42057; GFX12-NEXT:    s_mov_b32 s3, s52058; GFX12-NEXT:    s_mov_b32 s4, s62059; GFX12-NEXT:    s_mov_b32 s5, s72060; GFX12-NEXT:    s_mov_b32 s6, s82061; GFX12-NEXT:    s_mov_b32 s7, s92062; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v3], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY th:TH_ATOMIC_RETURN a162063; GFX12-NEXT:    s_wait_loadcnt 0x02064; GFX12-NEXT:    ; return to shader part epilog2065main_body:2066  %v = call i64 @llvm.amdgcn.image.atomic.add.2darraymsaa.i64.i16(i64 %data, i16 %s, i16 %t, i16 %slice, i16 %fragid, <8 x i32> %rsrc, i32 0, i32 0)2067  %out = bitcast i64 %v to <2 x float>2068  ret <2 x float> %out2069}2070 2071define amdgpu_ps <2 x float> @atomic_add_i64_1d_slc(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {2072; GFX9-LABEL: atomic_add_i64_1d_slc:2073; GFX9:       ; %bb.0: ; %main_body2074; GFX9-NEXT:    s_mov_b32 s0, s22075; GFX9-NEXT:    s_mov_b32 s1, s32076; GFX9-NEXT:    s_mov_b32 s2, s42077; GFX9-NEXT:    s_mov_b32 s3, s52078; GFX9-NEXT:    s_mov_b32 s4, s62079; GFX9-NEXT:    s_mov_b32 s5, s72080; GFX9-NEXT:    s_mov_b32 s6, s82081; GFX9-NEXT:    s_mov_b32 s7, s92082; GFX9-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc slc a162083; GFX9-NEXT:    s_waitcnt vmcnt(0)2084; GFX9-NEXT:    ; return to shader part epilog2085;2086; GFX10-LABEL: atomic_add_i64_1d_slc:2087; GFX10:       ; %bb.0: ; %main_body2088; GFX10-NEXT:    s_mov_b32 s0, s22089; GFX10-NEXT:    s_mov_b32 s1, s32090; GFX10-NEXT:    s_mov_b32 s2, s42091; GFX10-NEXT:    s_mov_b32 s3, s52092; GFX10-NEXT:    s_mov_b32 s4, s62093; GFX10-NEXT:    s_mov_b32 s5, s72094; GFX10-NEXT:    s_mov_b32 s6, s82095; GFX10-NEXT:    s_mov_b32 s7, s92096; GFX10-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc slc a162097; GFX10-NEXT:    s_waitcnt vmcnt(0)2098; GFX10-NEXT:    ; return to shader part epilog2099;2100; GFX12-LABEL: atomic_add_i64_1d_slc:2101; GFX12:       ; %bb.0: ; %main_body2102; GFX12-NEXT:    s_mov_b32 s0, s22103; GFX12-NEXT:    s_mov_b32 s1, s32104; GFX12-NEXT:    s_mov_b32 s2, s42105; GFX12-NEXT:    s_mov_b32 s3, s52106; GFX12-NEXT:    s_mov_b32 s4, s62107; GFX12-NEXT:    s_mov_b32 s5, s72108; GFX12-NEXT:    s_mov_b32 s6, s82109; GFX12-NEXT:    s_mov_b32 s7, s92110; GFX12-NEXT:    image_atomic_add_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_NT_RETURN a162111; GFX12-NEXT:    s_wait_loadcnt 0x02112; GFX12-NEXT:    ; return to shader part epilog2113main_body:2114  %v = call i64 @llvm.amdgcn.image.atomic.add.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 2)2115  %out = bitcast i64 %v to <2 x float>2116  ret <2 x float> %out2117}2118 2119declare i32 @llvm.amdgcn.image.atomic.swap.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #02120declare i32 @llvm.amdgcn.image.atomic.add.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #02121declare i32 @llvm.amdgcn.image.atomic.sub.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #02122declare i32 @llvm.amdgcn.image.atomic.smin.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #02123declare i32 @llvm.amdgcn.image.atomic.umin.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #02124declare i32 @llvm.amdgcn.image.atomic.smax.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #02125declare i32 @llvm.amdgcn.image.atomic.umax.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #02126declare i32 @llvm.amdgcn.image.atomic.and.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #02127declare i32 @llvm.amdgcn.image.atomic.or.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #02128declare i32 @llvm.amdgcn.image.atomic.xor.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #02129declare i32 @llvm.amdgcn.image.atomic.inc.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #02130declare i32 @llvm.amdgcn.image.atomic.dec.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #02131declare i32 @llvm.amdgcn.image.atomic.cmpswap.1d.i32.i16(i32, i32, i16, <8 x i32>, i32 immarg, i32 immarg) #02132declare i32 @llvm.amdgcn.image.atomic.add.2d.i32.i16(i32, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #02133declare i32 @llvm.amdgcn.image.atomic.add.3d.i32.i16(i32, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #02134declare i32 @llvm.amdgcn.image.atomic.add.cube.i32.i16(i32, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #02135declare i32 @llvm.amdgcn.image.atomic.add.1darray.i32.i16(i32, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #02136declare i32 @llvm.amdgcn.image.atomic.add.2darray.i32.i16(i32, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #02137declare i32 @llvm.amdgcn.image.atomic.add.2dmsaa.i32.i16(i32, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #02138declare i32 @llvm.amdgcn.image.atomic.add.2darraymsaa.i32.i16(i32, i16, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #02139 2140declare i64 @llvm.amdgcn.image.atomic.swap.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #02141declare i64 @llvm.amdgcn.image.atomic.add.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #02142declare i64 @llvm.amdgcn.image.atomic.sub.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #02143declare i64 @llvm.amdgcn.image.atomic.smin.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #02144declare i64 @llvm.amdgcn.image.atomic.umin.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #02145declare i64 @llvm.amdgcn.image.atomic.smax.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #02146declare i64 @llvm.amdgcn.image.atomic.umax.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #02147declare i64 @llvm.amdgcn.image.atomic.and.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #02148declare i64 @llvm.amdgcn.image.atomic.or.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #02149declare i64 @llvm.amdgcn.image.atomic.xor.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #02150declare i64 @llvm.amdgcn.image.atomic.inc.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #02151declare i64 @llvm.amdgcn.image.atomic.dec.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #02152declare i64 @llvm.amdgcn.image.atomic.cmpswap.1d.i64.i16(i64, i64, i16, <8 x i32>, i32 immarg, i32 immarg) #02153declare i64 @llvm.amdgcn.image.atomic.add.2d.i64.i16(i64, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #02154declare i64 @llvm.amdgcn.image.atomic.add.3d.i64.i16(i64, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #02155declare i64 @llvm.amdgcn.image.atomic.add.cube.i64.i16(i64, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #02156declare i64 @llvm.amdgcn.image.atomic.add.1darray.i64.i16(i64, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #02157declare i64 @llvm.amdgcn.image.atomic.add.2darray.i64.i16(i64, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #02158declare i64 @llvm.amdgcn.image.atomic.add.2dmsaa.i64.i16(i64, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #02159declare i64 @llvm.amdgcn.image.atomic.add.2darraymsaa.i64.i16(i64, i16, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #02160 2161attributes #0 = { nounwind }2162