brintos

brintos / llvm-project-archived public Read only

0
0
Text · 152.7 KiB · 09e1fca Raw
4032 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -o - %s | FileCheck -check-prefix=GFX6 %s3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -o - %s | FileCheck -check-prefix=GFX8 %s4; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -o - %s | FileCheck -check-prefix=GFX900 %s5; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx90a -o - %s | FileCheck -check-prefix=GFX90A %s6; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -o - %s | FileCheck -check-prefix=GFX10PLUS %s7; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -o - %s | FileCheck -check-prefix=GFX10PLUS %s8; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 -o - %s | FileCheck -check-prefixes=GFX12 %s9 10define amdgpu_ps float @atomic_swap_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) {11; GFX6-LABEL: atomic_swap_i32_1d:12; GFX6:       ; %bb.0: ; %main_body13; GFX6-NEXT:    s_mov_b32 s0, s214; GFX6-NEXT:    s_mov_b32 s1, s315; GFX6-NEXT:    s_mov_b32 s2, s416; GFX6-NEXT:    s_mov_b32 s3, s517; GFX6-NEXT:    s_mov_b32 s4, s618; GFX6-NEXT:    s_mov_b32 s5, s719; GFX6-NEXT:    s_mov_b32 s6, s820; GFX6-NEXT:    s_mov_b32 s7, s921; GFX6-NEXT:    image_atomic_swap v0, v1, s[0:7] dmask:0x1 unorm glc22; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)23; GFX6-NEXT:    ; return to shader part epilog24;25; GFX8-LABEL: atomic_swap_i32_1d:26; GFX8:       ; %bb.0: ; %main_body27; GFX8-NEXT:    s_mov_b32 s0, s228; GFX8-NEXT:    s_mov_b32 s1, s329; GFX8-NEXT:    s_mov_b32 s2, s430; GFX8-NEXT:    s_mov_b32 s3, s531; GFX8-NEXT:    s_mov_b32 s4, s632; GFX8-NEXT:    s_mov_b32 s5, s733; GFX8-NEXT:    s_mov_b32 s6, s834; GFX8-NEXT:    s_mov_b32 s7, s935; GFX8-NEXT:    image_atomic_swap v0, v1, s[0:7] dmask:0x1 unorm glc36; GFX8-NEXT:    s_waitcnt vmcnt(0)37; GFX8-NEXT:    ; return to shader part epilog38;39; GFX900-LABEL: atomic_swap_i32_1d:40; GFX900:       ; %bb.0: ; %main_body41; GFX900-NEXT:    s_mov_b32 s0, s242; GFX900-NEXT:    s_mov_b32 s1, s343; GFX900-NEXT:    s_mov_b32 s2, s444; GFX900-NEXT:    s_mov_b32 s3, s545; GFX900-NEXT:    s_mov_b32 s4, s646; GFX900-NEXT:    s_mov_b32 s5, s747; GFX900-NEXT:    s_mov_b32 s6, s848; GFX900-NEXT:    s_mov_b32 s7, s949; GFX900-NEXT:    image_atomic_swap v0, v1, s[0:7] dmask:0x1 unorm glc50; GFX900-NEXT:    s_waitcnt vmcnt(0)51; GFX900-NEXT:    ; return to shader part epilog52;53; GFX90A-LABEL: atomic_swap_i32_1d:54; GFX90A:       ; %bb.0: ; %main_body55; GFX90A-NEXT:    s_mov_b32 s0, s256; GFX90A-NEXT:    s_mov_b32 s1, s357; GFX90A-NEXT:    s_mov_b32 s2, s458; GFX90A-NEXT:    s_mov_b32 s3, s559; GFX90A-NEXT:    s_mov_b32 s4, s660; GFX90A-NEXT:    s_mov_b32 s5, s761; GFX90A-NEXT:    s_mov_b32 s6, s862; GFX90A-NEXT:    s_mov_b32 s7, s963; GFX90A-NEXT:    v_mov_b32_e32 v2, v164; GFX90A-NEXT:    image_atomic_swap v0, v2, s[0:7] dmask:0x1 unorm glc65; GFX90A-NEXT:    s_waitcnt vmcnt(0)66; GFX90A-NEXT:    ; return to shader part epilog67;68; GFX10PLUS-LABEL: atomic_swap_i32_1d:69; GFX10PLUS:       ; %bb.0: ; %main_body70; GFX10PLUS-NEXT:    s_mov_b32 s0, s271; GFX10PLUS-NEXT:    s_mov_b32 s1, s372; GFX10PLUS-NEXT:    s_mov_b32 s2, s473; GFX10PLUS-NEXT:    s_mov_b32 s3, s574; GFX10PLUS-NEXT:    s_mov_b32 s4, s675; GFX10PLUS-NEXT:    s_mov_b32 s5, s776; GFX10PLUS-NEXT:    s_mov_b32 s6, s877; GFX10PLUS-NEXT:    s_mov_b32 s7, s978; GFX10PLUS-NEXT:    image_atomic_swap v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc79; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)80; GFX10PLUS-NEXT:    ; return to shader part epilog81;82; GFX12-LABEL: atomic_swap_i32_1d:83; GFX12:       ; %bb.0: ; %main_body84; GFX12-NEXT:    s_mov_b32 s0, s285; GFX12-NEXT:    s_mov_b32 s1, s386; GFX12-NEXT:    s_mov_b32 s2, s487; GFX12-NEXT:    s_mov_b32 s3, s588; GFX12-NEXT:    s_mov_b32 s4, s689; GFX12-NEXT:    s_mov_b32 s5, s790; GFX12-NEXT:    s_mov_b32 s6, s891; GFX12-NEXT:    s_mov_b32 s7, s992; GFX12-NEXT:    image_atomic_swap v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN93; GFX12-NEXT:    s_wait_loadcnt 0x094; GFX12-NEXT:    ; return to shader part epilog95main_body:96  %v = call i32 @llvm.amdgcn.image.atomic.swap.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)97  %out = bitcast i32 %v to float98  ret float %out99}100 101define amdgpu_ps float @atomic_add_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) {102; GFX6-LABEL: atomic_add_i32_1d:103; GFX6:       ; %bb.0: ; %main_body104; GFX6-NEXT:    s_mov_b32 s0, s2105; GFX6-NEXT:    s_mov_b32 s1, s3106; GFX6-NEXT:    s_mov_b32 s2, s4107; GFX6-NEXT:    s_mov_b32 s3, s5108; GFX6-NEXT:    s_mov_b32 s4, s6109; GFX6-NEXT:    s_mov_b32 s5, s7110; GFX6-NEXT:    s_mov_b32 s6, s8111; GFX6-NEXT:    s_mov_b32 s7, s9112; GFX6-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc113; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)114; GFX6-NEXT:    ; return to shader part epilog115;116; GFX8-LABEL: atomic_add_i32_1d:117; GFX8:       ; %bb.0: ; %main_body118; GFX8-NEXT:    s_mov_b32 s0, s2119; GFX8-NEXT:    s_mov_b32 s1, s3120; GFX8-NEXT:    s_mov_b32 s2, s4121; GFX8-NEXT:    s_mov_b32 s3, s5122; GFX8-NEXT:    s_mov_b32 s4, s6123; GFX8-NEXT:    s_mov_b32 s5, s7124; GFX8-NEXT:    s_mov_b32 s6, s8125; GFX8-NEXT:    s_mov_b32 s7, s9126; GFX8-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc127; GFX8-NEXT:    s_waitcnt vmcnt(0)128; GFX8-NEXT:    ; return to shader part epilog129;130; GFX900-LABEL: atomic_add_i32_1d:131; GFX900:       ; %bb.0: ; %main_body132; GFX900-NEXT:    s_mov_b32 s0, s2133; GFX900-NEXT:    s_mov_b32 s1, s3134; GFX900-NEXT:    s_mov_b32 s2, s4135; GFX900-NEXT:    s_mov_b32 s3, s5136; GFX900-NEXT:    s_mov_b32 s4, s6137; GFX900-NEXT:    s_mov_b32 s5, s7138; GFX900-NEXT:    s_mov_b32 s6, s8139; GFX900-NEXT:    s_mov_b32 s7, s9140; GFX900-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc141; GFX900-NEXT:    s_waitcnt vmcnt(0)142; GFX900-NEXT:    ; return to shader part epilog143;144; GFX90A-LABEL: atomic_add_i32_1d:145; GFX90A:       ; %bb.0: ; %main_body146; GFX90A-NEXT:    s_mov_b32 s0, s2147; GFX90A-NEXT:    s_mov_b32 s1, s3148; GFX90A-NEXT:    s_mov_b32 s2, s4149; GFX90A-NEXT:    s_mov_b32 s3, s5150; GFX90A-NEXT:    s_mov_b32 s4, s6151; GFX90A-NEXT:    s_mov_b32 s5, s7152; GFX90A-NEXT:    s_mov_b32 s6, s8153; GFX90A-NEXT:    s_mov_b32 s7, s9154; GFX90A-NEXT:    v_mov_b32_e32 v2, v1155; GFX90A-NEXT:    image_atomic_add v0, v2, s[0:7] dmask:0x1 unorm glc156; GFX90A-NEXT:    s_waitcnt vmcnt(0)157; GFX90A-NEXT:    ; return to shader part epilog158;159; GFX10PLUS-LABEL: atomic_add_i32_1d:160; GFX10PLUS:       ; %bb.0: ; %main_body161; GFX10PLUS-NEXT:    s_mov_b32 s0, s2162; GFX10PLUS-NEXT:    s_mov_b32 s1, s3163; GFX10PLUS-NEXT:    s_mov_b32 s2, s4164; GFX10PLUS-NEXT:    s_mov_b32 s3, s5165; GFX10PLUS-NEXT:    s_mov_b32 s4, s6166; GFX10PLUS-NEXT:    s_mov_b32 s5, s7167; GFX10PLUS-NEXT:    s_mov_b32 s6, s8168; GFX10PLUS-NEXT:    s_mov_b32 s7, s9169; GFX10PLUS-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc170; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)171; GFX10PLUS-NEXT:    ; return to shader part epilog172;173; GFX12-LABEL: atomic_add_i32_1d:174; GFX12:       ; %bb.0: ; %main_body175; GFX12-NEXT:    s_mov_b32 s0, s2176; GFX12-NEXT:    s_mov_b32 s1, s3177; GFX12-NEXT:    s_mov_b32 s2, s4178; GFX12-NEXT:    s_mov_b32 s3, s5179; GFX12-NEXT:    s_mov_b32 s4, s6180; GFX12-NEXT:    s_mov_b32 s5, s7181; GFX12-NEXT:    s_mov_b32 s6, s8182; GFX12-NEXT:    s_mov_b32 s7, s9183; GFX12-NEXT:    image_atomic_add_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN184; GFX12-NEXT:    s_wait_loadcnt 0x0185; GFX12-NEXT:    ; return to shader part epilog186main_body:187  %v = call i32 @llvm.amdgcn.image.atomic.add.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)188  %out = bitcast i32 %v to float189  ret float %out190}191 192define amdgpu_ps float @atomic_sub_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) {193; GFX6-LABEL: atomic_sub_i32_1d:194; GFX6:       ; %bb.0: ; %main_body195; GFX6-NEXT:    s_mov_b32 s0, s2196; GFX6-NEXT:    s_mov_b32 s1, s3197; GFX6-NEXT:    s_mov_b32 s2, s4198; GFX6-NEXT:    s_mov_b32 s3, s5199; GFX6-NEXT:    s_mov_b32 s4, s6200; GFX6-NEXT:    s_mov_b32 s5, s7201; GFX6-NEXT:    s_mov_b32 s6, s8202; GFX6-NEXT:    s_mov_b32 s7, s9203; GFX6-NEXT:    image_atomic_sub v0, v1, s[0:7] dmask:0x1 unorm glc204; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)205; GFX6-NEXT:    ; return to shader part epilog206;207; GFX8-LABEL: atomic_sub_i32_1d:208; GFX8:       ; %bb.0: ; %main_body209; GFX8-NEXT:    s_mov_b32 s0, s2210; GFX8-NEXT:    s_mov_b32 s1, s3211; GFX8-NEXT:    s_mov_b32 s2, s4212; GFX8-NEXT:    s_mov_b32 s3, s5213; GFX8-NEXT:    s_mov_b32 s4, s6214; GFX8-NEXT:    s_mov_b32 s5, s7215; GFX8-NEXT:    s_mov_b32 s6, s8216; GFX8-NEXT:    s_mov_b32 s7, s9217; GFX8-NEXT:    image_atomic_sub v0, v1, s[0:7] dmask:0x1 unorm glc218; GFX8-NEXT:    s_waitcnt vmcnt(0)219; GFX8-NEXT:    ; return to shader part epilog220;221; GFX900-LABEL: atomic_sub_i32_1d:222; GFX900:       ; %bb.0: ; %main_body223; GFX900-NEXT:    s_mov_b32 s0, s2224; GFX900-NEXT:    s_mov_b32 s1, s3225; GFX900-NEXT:    s_mov_b32 s2, s4226; GFX900-NEXT:    s_mov_b32 s3, s5227; GFX900-NEXT:    s_mov_b32 s4, s6228; GFX900-NEXT:    s_mov_b32 s5, s7229; GFX900-NEXT:    s_mov_b32 s6, s8230; GFX900-NEXT:    s_mov_b32 s7, s9231; GFX900-NEXT:    image_atomic_sub v0, v1, s[0:7] dmask:0x1 unorm glc232; GFX900-NEXT:    s_waitcnt vmcnt(0)233; GFX900-NEXT:    ; return to shader part epilog234;235; GFX90A-LABEL: atomic_sub_i32_1d:236; GFX90A:       ; %bb.0: ; %main_body237; GFX90A-NEXT:    s_mov_b32 s0, s2238; GFX90A-NEXT:    s_mov_b32 s1, s3239; GFX90A-NEXT:    s_mov_b32 s2, s4240; GFX90A-NEXT:    s_mov_b32 s3, s5241; GFX90A-NEXT:    s_mov_b32 s4, s6242; GFX90A-NEXT:    s_mov_b32 s5, s7243; GFX90A-NEXT:    s_mov_b32 s6, s8244; GFX90A-NEXT:    s_mov_b32 s7, s9245; GFX90A-NEXT:    v_mov_b32_e32 v2, v1246; GFX90A-NEXT:    image_atomic_sub v0, v2, s[0:7] dmask:0x1 unorm glc247; GFX90A-NEXT:    s_waitcnt vmcnt(0)248; GFX90A-NEXT:    ; return to shader part epilog249;250; GFX10PLUS-LABEL: atomic_sub_i32_1d:251; GFX10PLUS:       ; %bb.0: ; %main_body252; GFX10PLUS-NEXT:    s_mov_b32 s0, s2253; GFX10PLUS-NEXT:    s_mov_b32 s1, s3254; GFX10PLUS-NEXT:    s_mov_b32 s2, s4255; GFX10PLUS-NEXT:    s_mov_b32 s3, s5256; GFX10PLUS-NEXT:    s_mov_b32 s4, s6257; GFX10PLUS-NEXT:    s_mov_b32 s5, s7258; GFX10PLUS-NEXT:    s_mov_b32 s6, s8259; GFX10PLUS-NEXT:    s_mov_b32 s7, s9260; GFX10PLUS-NEXT:    image_atomic_sub v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc261; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)262; GFX10PLUS-NEXT:    ; return to shader part epilog263;264; GFX12-LABEL: atomic_sub_i32_1d:265; GFX12:       ; %bb.0: ; %main_body266; GFX12-NEXT:    s_mov_b32 s0, s2267; GFX12-NEXT:    s_mov_b32 s1, s3268; GFX12-NEXT:    s_mov_b32 s2, s4269; GFX12-NEXT:    s_mov_b32 s3, s5270; GFX12-NEXT:    s_mov_b32 s4, s6271; GFX12-NEXT:    s_mov_b32 s5, s7272; GFX12-NEXT:    s_mov_b32 s6, s8273; GFX12-NEXT:    s_mov_b32 s7, s9274; GFX12-NEXT:    image_atomic_sub_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN275; GFX12-NEXT:    s_wait_loadcnt 0x0276; GFX12-NEXT:    ; return to shader part epilog277main_body:278  %v = call i32 @llvm.amdgcn.image.atomic.sub.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)279  %out = bitcast i32 %v to float280  ret float %out281}282 283define amdgpu_ps float @atomic_smin_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) {284; GFX6-LABEL: atomic_smin_i32_1d:285; GFX6:       ; %bb.0: ; %main_body286; GFX6-NEXT:    s_mov_b32 s0, s2287; GFX6-NEXT:    s_mov_b32 s1, s3288; GFX6-NEXT:    s_mov_b32 s2, s4289; GFX6-NEXT:    s_mov_b32 s3, s5290; GFX6-NEXT:    s_mov_b32 s4, s6291; GFX6-NEXT:    s_mov_b32 s5, s7292; GFX6-NEXT:    s_mov_b32 s6, s8293; GFX6-NEXT:    s_mov_b32 s7, s9294; GFX6-NEXT:    image_atomic_smin v0, v1, s[0:7] dmask:0x1 unorm glc295; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)296; GFX6-NEXT:    ; return to shader part epilog297;298; GFX8-LABEL: atomic_smin_i32_1d:299; GFX8:       ; %bb.0: ; %main_body300; GFX8-NEXT:    s_mov_b32 s0, s2301; GFX8-NEXT:    s_mov_b32 s1, s3302; GFX8-NEXT:    s_mov_b32 s2, s4303; GFX8-NEXT:    s_mov_b32 s3, s5304; GFX8-NEXT:    s_mov_b32 s4, s6305; GFX8-NEXT:    s_mov_b32 s5, s7306; GFX8-NEXT:    s_mov_b32 s6, s8307; GFX8-NEXT:    s_mov_b32 s7, s9308; GFX8-NEXT:    image_atomic_smin v0, v1, s[0:7] dmask:0x1 unorm glc309; GFX8-NEXT:    s_waitcnt vmcnt(0)310; GFX8-NEXT:    ; return to shader part epilog311;312; GFX900-LABEL: atomic_smin_i32_1d:313; GFX900:       ; %bb.0: ; %main_body314; GFX900-NEXT:    s_mov_b32 s0, s2315; GFX900-NEXT:    s_mov_b32 s1, s3316; GFX900-NEXT:    s_mov_b32 s2, s4317; GFX900-NEXT:    s_mov_b32 s3, s5318; GFX900-NEXT:    s_mov_b32 s4, s6319; GFX900-NEXT:    s_mov_b32 s5, s7320; GFX900-NEXT:    s_mov_b32 s6, s8321; GFX900-NEXT:    s_mov_b32 s7, s9322; GFX900-NEXT:    image_atomic_smin v0, v1, s[0:7] dmask:0x1 unorm glc323; GFX900-NEXT:    s_waitcnt vmcnt(0)324; GFX900-NEXT:    ; return to shader part epilog325;326; GFX90A-LABEL: atomic_smin_i32_1d:327; GFX90A:       ; %bb.0: ; %main_body328; GFX90A-NEXT:    s_mov_b32 s0, s2329; GFX90A-NEXT:    s_mov_b32 s1, s3330; GFX90A-NEXT:    s_mov_b32 s2, s4331; GFX90A-NEXT:    s_mov_b32 s3, s5332; GFX90A-NEXT:    s_mov_b32 s4, s6333; GFX90A-NEXT:    s_mov_b32 s5, s7334; GFX90A-NEXT:    s_mov_b32 s6, s8335; GFX90A-NEXT:    s_mov_b32 s7, s9336; GFX90A-NEXT:    v_mov_b32_e32 v2, v1337; GFX90A-NEXT:    image_atomic_smin v0, v2, s[0:7] dmask:0x1 unorm glc338; GFX90A-NEXT:    s_waitcnt vmcnt(0)339; GFX90A-NEXT:    ; return to shader part epilog340;341; GFX10PLUS-LABEL: atomic_smin_i32_1d:342; GFX10PLUS:       ; %bb.0: ; %main_body343; GFX10PLUS-NEXT:    s_mov_b32 s0, s2344; GFX10PLUS-NEXT:    s_mov_b32 s1, s3345; GFX10PLUS-NEXT:    s_mov_b32 s2, s4346; GFX10PLUS-NEXT:    s_mov_b32 s3, s5347; GFX10PLUS-NEXT:    s_mov_b32 s4, s6348; GFX10PLUS-NEXT:    s_mov_b32 s5, s7349; GFX10PLUS-NEXT:    s_mov_b32 s6, s8350; GFX10PLUS-NEXT:    s_mov_b32 s7, s9351; GFX10PLUS-NEXT:    image_atomic_smin v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc352; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)353; GFX10PLUS-NEXT:    ; return to shader part epilog354;355; GFX12-LABEL: atomic_smin_i32_1d:356; GFX12:       ; %bb.0: ; %main_body357; GFX12-NEXT:    s_mov_b32 s0, s2358; GFX12-NEXT:    s_mov_b32 s1, s3359; GFX12-NEXT:    s_mov_b32 s2, s4360; GFX12-NEXT:    s_mov_b32 s3, s5361; GFX12-NEXT:    s_mov_b32 s4, s6362; GFX12-NEXT:    s_mov_b32 s5, s7363; GFX12-NEXT:    s_mov_b32 s6, s8364; GFX12-NEXT:    s_mov_b32 s7, s9365; GFX12-NEXT:    image_atomic_min_int v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN366; GFX12-NEXT:    s_wait_loadcnt 0x0367; GFX12-NEXT:    ; return to shader part epilog368main_body:369  %v = call i32 @llvm.amdgcn.image.atomic.smin.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)370  %out = bitcast i32 %v to float371  ret float %out372}373 374define amdgpu_ps float @atomic_umin_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) {375; GFX6-LABEL: atomic_umin_i32_1d:376; GFX6:       ; %bb.0: ; %main_body377; GFX6-NEXT:    s_mov_b32 s0, s2378; GFX6-NEXT:    s_mov_b32 s1, s3379; GFX6-NEXT:    s_mov_b32 s2, s4380; GFX6-NEXT:    s_mov_b32 s3, s5381; GFX6-NEXT:    s_mov_b32 s4, s6382; GFX6-NEXT:    s_mov_b32 s5, s7383; GFX6-NEXT:    s_mov_b32 s6, s8384; GFX6-NEXT:    s_mov_b32 s7, s9385; GFX6-NEXT:    image_atomic_umin v0, v1, s[0:7] dmask:0x1 unorm glc386; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)387; GFX6-NEXT:    ; return to shader part epilog388;389; GFX8-LABEL: atomic_umin_i32_1d:390; GFX8:       ; %bb.0: ; %main_body391; GFX8-NEXT:    s_mov_b32 s0, s2392; GFX8-NEXT:    s_mov_b32 s1, s3393; GFX8-NEXT:    s_mov_b32 s2, s4394; GFX8-NEXT:    s_mov_b32 s3, s5395; GFX8-NEXT:    s_mov_b32 s4, s6396; GFX8-NEXT:    s_mov_b32 s5, s7397; GFX8-NEXT:    s_mov_b32 s6, s8398; GFX8-NEXT:    s_mov_b32 s7, s9399; GFX8-NEXT:    image_atomic_umin v0, v1, s[0:7] dmask:0x1 unorm glc400; GFX8-NEXT:    s_waitcnt vmcnt(0)401; GFX8-NEXT:    ; return to shader part epilog402;403; GFX900-LABEL: atomic_umin_i32_1d:404; GFX900:       ; %bb.0: ; %main_body405; GFX900-NEXT:    s_mov_b32 s0, s2406; GFX900-NEXT:    s_mov_b32 s1, s3407; GFX900-NEXT:    s_mov_b32 s2, s4408; GFX900-NEXT:    s_mov_b32 s3, s5409; GFX900-NEXT:    s_mov_b32 s4, s6410; GFX900-NEXT:    s_mov_b32 s5, s7411; GFX900-NEXT:    s_mov_b32 s6, s8412; GFX900-NEXT:    s_mov_b32 s7, s9413; GFX900-NEXT:    image_atomic_umin v0, v1, s[0:7] dmask:0x1 unorm glc414; GFX900-NEXT:    s_waitcnt vmcnt(0)415; GFX900-NEXT:    ; return to shader part epilog416;417; GFX90A-LABEL: atomic_umin_i32_1d:418; GFX90A:       ; %bb.0: ; %main_body419; GFX90A-NEXT:    s_mov_b32 s0, s2420; GFX90A-NEXT:    s_mov_b32 s1, s3421; GFX90A-NEXT:    s_mov_b32 s2, s4422; GFX90A-NEXT:    s_mov_b32 s3, s5423; GFX90A-NEXT:    s_mov_b32 s4, s6424; GFX90A-NEXT:    s_mov_b32 s5, s7425; GFX90A-NEXT:    s_mov_b32 s6, s8426; GFX90A-NEXT:    s_mov_b32 s7, s9427; GFX90A-NEXT:    v_mov_b32_e32 v2, v1428; GFX90A-NEXT:    image_atomic_umin v0, v2, s[0:7] dmask:0x1 unorm glc429; GFX90A-NEXT:    s_waitcnt vmcnt(0)430; GFX90A-NEXT:    ; return to shader part epilog431;432; GFX10PLUS-LABEL: atomic_umin_i32_1d:433; GFX10PLUS:       ; %bb.0: ; %main_body434; GFX10PLUS-NEXT:    s_mov_b32 s0, s2435; GFX10PLUS-NEXT:    s_mov_b32 s1, s3436; GFX10PLUS-NEXT:    s_mov_b32 s2, s4437; GFX10PLUS-NEXT:    s_mov_b32 s3, s5438; GFX10PLUS-NEXT:    s_mov_b32 s4, s6439; GFX10PLUS-NEXT:    s_mov_b32 s5, s7440; GFX10PLUS-NEXT:    s_mov_b32 s6, s8441; GFX10PLUS-NEXT:    s_mov_b32 s7, s9442; GFX10PLUS-NEXT:    image_atomic_umin v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc443; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)444; GFX10PLUS-NEXT:    ; return to shader part epilog445;446; GFX12-LABEL: atomic_umin_i32_1d:447; GFX12:       ; %bb.0: ; %main_body448; GFX12-NEXT:    s_mov_b32 s0, s2449; GFX12-NEXT:    s_mov_b32 s1, s3450; GFX12-NEXT:    s_mov_b32 s2, s4451; GFX12-NEXT:    s_mov_b32 s3, s5452; GFX12-NEXT:    s_mov_b32 s4, s6453; GFX12-NEXT:    s_mov_b32 s5, s7454; GFX12-NEXT:    s_mov_b32 s6, s8455; GFX12-NEXT:    s_mov_b32 s7, s9456; GFX12-NEXT:    image_atomic_min_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN457; GFX12-NEXT:    s_wait_loadcnt 0x0458; GFX12-NEXT:    ; return to shader part epilog459main_body:460  %v = call i32 @llvm.amdgcn.image.atomic.umin.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)461  %out = bitcast i32 %v to float462  ret float %out463}464 465define amdgpu_ps float @atomic_smax_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) {466; GFX6-LABEL: atomic_smax_i32_1d:467; GFX6:       ; %bb.0: ; %main_body468; GFX6-NEXT:    s_mov_b32 s0, s2469; GFX6-NEXT:    s_mov_b32 s1, s3470; GFX6-NEXT:    s_mov_b32 s2, s4471; GFX6-NEXT:    s_mov_b32 s3, s5472; GFX6-NEXT:    s_mov_b32 s4, s6473; GFX6-NEXT:    s_mov_b32 s5, s7474; GFX6-NEXT:    s_mov_b32 s6, s8475; GFX6-NEXT:    s_mov_b32 s7, s9476; GFX6-NEXT:    image_atomic_smax v0, v1, s[0:7] dmask:0x1 unorm glc477; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)478; GFX6-NEXT:    ; return to shader part epilog479;480; GFX8-LABEL: atomic_smax_i32_1d:481; GFX8:       ; %bb.0: ; %main_body482; GFX8-NEXT:    s_mov_b32 s0, s2483; GFX8-NEXT:    s_mov_b32 s1, s3484; GFX8-NEXT:    s_mov_b32 s2, s4485; GFX8-NEXT:    s_mov_b32 s3, s5486; GFX8-NEXT:    s_mov_b32 s4, s6487; GFX8-NEXT:    s_mov_b32 s5, s7488; GFX8-NEXT:    s_mov_b32 s6, s8489; GFX8-NEXT:    s_mov_b32 s7, s9490; GFX8-NEXT:    image_atomic_smax v0, v1, s[0:7] dmask:0x1 unorm glc491; GFX8-NEXT:    s_waitcnt vmcnt(0)492; GFX8-NEXT:    ; return to shader part epilog493;494; GFX900-LABEL: atomic_smax_i32_1d:495; GFX900:       ; %bb.0: ; %main_body496; GFX900-NEXT:    s_mov_b32 s0, s2497; GFX900-NEXT:    s_mov_b32 s1, s3498; GFX900-NEXT:    s_mov_b32 s2, s4499; GFX900-NEXT:    s_mov_b32 s3, s5500; GFX900-NEXT:    s_mov_b32 s4, s6501; GFX900-NEXT:    s_mov_b32 s5, s7502; GFX900-NEXT:    s_mov_b32 s6, s8503; GFX900-NEXT:    s_mov_b32 s7, s9504; GFX900-NEXT:    image_atomic_smax v0, v1, s[0:7] dmask:0x1 unorm glc505; GFX900-NEXT:    s_waitcnt vmcnt(0)506; GFX900-NEXT:    ; return to shader part epilog507;508; GFX90A-LABEL: atomic_smax_i32_1d:509; GFX90A:       ; %bb.0: ; %main_body510; GFX90A-NEXT:    s_mov_b32 s0, s2511; GFX90A-NEXT:    s_mov_b32 s1, s3512; GFX90A-NEXT:    s_mov_b32 s2, s4513; GFX90A-NEXT:    s_mov_b32 s3, s5514; GFX90A-NEXT:    s_mov_b32 s4, s6515; GFX90A-NEXT:    s_mov_b32 s5, s7516; GFX90A-NEXT:    s_mov_b32 s6, s8517; GFX90A-NEXT:    s_mov_b32 s7, s9518; GFX90A-NEXT:    v_mov_b32_e32 v2, v1519; GFX90A-NEXT:    image_atomic_smax v0, v2, s[0:7] dmask:0x1 unorm glc520; GFX90A-NEXT:    s_waitcnt vmcnt(0)521; GFX90A-NEXT:    ; return to shader part epilog522;523; GFX10PLUS-LABEL: atomic_smax_i32_1d:524; GFX10PLUS:       ; %bb.0: ; %main_body525; GFX10PLUS-NEXT:    s_mov_b32 s0, s2526; GFX10PLUS-NEXT:    s_mov_b32 s1, s3527; GFX10PLUS-NEXT:    s_mov_b32 s2, s4528; GFX10PLUS-NEXT:    s_mov_b32 s3, s5529; GFX10PLUS-NEXT:    s_mov_b32 s4, s6530; GFX10PLUS-NEXT:    s_mov_b32 s5, s7531; GFX10PLUS-NEXT:    s_mov_b32 s6, s8532; GFX10PLUS-NEXT:    s_mov_b32 s7, s9533; GFX10PLUS-NEXT:    image_atomic_smax v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc534; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)535; GFX10PLUS-NEXT:    ; return to shader part epilog536;537; GFX12-LABEL: atomic_smax_i32_1d:538; GFX12:       ; %bb.0: ; %main_body539; GFX12-NEXT:    s_mov_b32 s0, s2540; GFX12-NEXT:    s_mov_b32 s1, s3541; GFX12-NEXT:    s_mov_b32 s2, s4542; GFX12-NEXT:    s_mov_b32 s3, s5543; GFX12-NEXT:    s_mov_b32 s4, s6544; GFX12-NEXT:    s_mov_b32 s5, s7545; GFX12-NEXT:    s_mov_b32 s6, s8546; GFX12-NEXT:    s_mov_b32 s7, s9547; GFX12-NEXT:    image_atomic_max_int v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN548; GFX12-NEXT:    s_wait_loadcnt 0x0549; GFX12-NEXT:    ; return to shader part epilog550main_body:551  %v = call i32 @llvm.amdgcn.image.atomic.smax.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)552  %out = bitcast i32 %v to float553  ret float %out554}555 556define amdgpu_ps float @atomic_umax_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) {557; GFX6-LABEL: atomic_umax_i32_1d:558; GFX6:       ; %bb.0: ; %main_body559; GFX6-NEXT:    s_mov_b32 s0, s2560; GFX6-NEXT:    s_mov_b32 s1, s3561; GFX6-NEXT:    s_mov_b32 s2, s4562; GFX6-NEXT:    s_mov_b32 s3, s5563; GFX6-NEXT:    s_mov_b32 s4, s6564; GFX6-NEXT:    s_mov_b32 s5, s7565; GFX6-NEXT:    s_mov_b32 s6, s8566; GFX6-NEXT:    s_mov_b32 s7, s9567; GFX6-NEXT:    image_atomic_umax v0, v1, s[0:7] dmask:0x1 unorm glc568; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)569; GFX6-NEXT:    ; return to shader part epilog570;571; GFX8-LABEL: atomic_umax_i32_1d:572; GFX8:       ; %bb.0: ; %main_body573; GFX8-NEXT:    s_mov_b32 s0, s2574; GFX8-NEXT:    s_mov_b32 s1, s3575; GFX8-NEXT:    s_mov_b32 s2, s4576; GFX8-NEXT:    s_mov_b32 s3, s5577; GFX8-NEXT:    s_mov_b32 s4, s6578; GFX8-NEXT:    s_mov_b32 s5, s7579; GFX8-NEXT:    s_mov_b32 s6, s8580; GFX8-NEXT:    s_mov_b32 s7, s9581; GFX8-NEXT:    image_atomic_umax v0, v1, s[0:7] dmask:0x1 unorm glc582; GFX8-NEXT:    s_waitcnt vmcnt(0)583; GFX8-NEXT:    ; return to shader part epilog584;585; GFX900-LABEL: atomic_umax_i32_1d:586; GFX900:       ; %bb.0: ; %main_body587; GFX900-NEXT:    s_mov_b32 s0, s2588; GFX900-NEXT:    s_mov_b32 s1, s3589; GFX900-NEXT:    s_mov_b32 s2, s4590; GFX900-NEXT:    s_mov_b32 s3, s5591; GFX900-NEXT:    s_mov_b32 s4, s6592; GFX900-NEXT:    s_mov_b32 s5, s7593; GFX900-NEXT:    s_mov_b32 s6, s8594; GFX900-NEXT:    s_mov_b32 s7, s9595; GFX900-NEXT:    image_atomic_umax v0, v1, s[0:7] dmask:0x1 unorm glc596; GFX900-NEXT:    s_waitcnt vmcnt(0)597; GFX900-NEXT:    ; return to shader part epilog598;599; GFX90A-LABEL: atomic_umax_i32_1d:600; GFX90A:       ; %bb.0: ; %main_body601; GFX90A-NEXT:    s_mov_b32 s0, s2602; GFX90A-NEXT:    s_mov_b32 s1, s3603; GFX90A-NEXT:    s_mov_b32 s2, s4604; GFX90A-NEXT:    s_mov_b32 s3, s5605; GFX90A-NEXT:    s_mov_b32 s4, s6606; GFX90A-NEXT:    s_mov_b32 s5, s7607; GFX90A-NEXT:    s_mov_b32 s6, s8608; GFX90A-NEXT:    s_mov_b32 s7, s9609; GFX90A-NEXT:    v_mov_b32_e32 v2, v1610; GFX90A-NEXT:    image_atomic_umax v0, v2, s[0:7] dmask:0x1 unorm glc611; GFX90A-NEXT:    s_waitcnt vmcnt(0)612; GFX90A-NEXT:    ; return to shader part epilog613;614; GFX10PLUS-LABEL: atomic_umax_i32_1d:615; GFX10PLUS:       ; %bb.0: ; %main_body616; GFX10PLUS-NEXT:    s_mov_b32 s0, s2617; GFX10PLUS-NEXT:    s_mov_b32 s1, s3618; GFX10PLUS-NEXT:    s_mov_b32 s2, s4619; GFX10PLUS-NEXT:    s_mov_b32 s3, s5620; GFX10PLUS-NEXT:    s_mov_b32 s4, s6621; GFX10PLUS-NEXT:    s_mov_b32 s5, s7622; GFX10PLUS-NEXT:    s_mov_b32 s6, s8623; GFX10PLUS-NEXT:    s_mov_b32 s7, s9624; GFX10PLUS-NEXT:    image_atomic_umax v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc625; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)626; GFX10PLUS-NEXT:    ; return to shader part epilog627;628; GFX12-LABEL: atomic_umax_i32_1d:629; GFX12:       ; %bb.0: ; %main_body630; GFX12-NEXT:    s_mov_b32 s0, s2631; GFX12-NEXT:    s_mov_b32 s1, s3632; GFX12-NEXT:    s_mov_b32 s2, s4633; GFX12-NEXT:    s_mov_b32 s3, s5634; GFX12-NEXT:    s_mov_b32 s4, s6635; GFX12-NEXT:    s_mov_b32 s5, s7636; GFX12-NEXT:    s_mov_b32 s6, s8637; GFX12-NEXT:    s_mov_b32 s7, s9638; GFX12-NEXT:    image_atomic_max_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN639; GFX12-NEXT:    s_wait_loadcnt 0x0640; GFX12-NEXT:    ; return to shader part epilog641main_body:642  %v = call i32 @llvm.amdgcn.image.atomic.umax.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)643  %out = bitcast i32 %v to float644  ret float %out645}646 647define amdgpu_ps float @atomic_and_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) {648; GFX6-LABEL: atomic_and_i32_1d:649; GFX6:       ; %bb.0: ; %main_body650; GFX6-NEXT:    s_mov_b32 s0, s2651; GFX6-NEXT:    s_mov_b32 s1, s3652; GFX6-NEXT:    s_mov_b32 s2, s4653; GFX6-NEXT:    s_mov_b32 s3, s5654; GFX6-NEXT:    s_mov_b32 s4, s6655; GFX6-NEXT:    s_mov_b32 s5, s7656; GFX6-NEXT:    s_mov_b32 s6, s8657; GFX6-NEXT:    s_mov_b32 s7, s9658; GFX6-NEXT:    image_atomic_and v0, v1, s[0:7] dmask:0x1 unorm glc659; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)660; GFX6-NEXT:    ; return to shader part epilog661;662; GFX8-LABEL: atomic_and_i32_1d:663; GFX8:       ; %bb.0: ; %main_body664; GFX8-NEXT:    s_mov_b32 s0, s2665; GFX8-NEXT:    s_mov_b32 s1, s3666; GFX8-NEXT:    s_mov_b32 s2, s4667; GFX8-NEXT:    s_mov_b32 s3, s5668; GFX8-NEXT:    s_mov_b32 s4, s6669; GFX8-NEXT:    s_mov_b32 s5, s7670; GFX8-NEXT:    s_mov_b32 s6, s8671; GFX8-NEXT:    s_mov_b32 s7, s9672; GFX8-NEXT:    image_atomic_and v0, v1, s[0:7] dmask:0x1 unorm glc673; GFX8-NEXT:    s_waitcnt vmcnt(0)674; GFX8-NEXT:    ; return to shader part epilog675;676; GFX900-LABEL: atomic_and_i32_1d:677; GFX900:       ; %bb.0: ; %main_body678; GFX900-NEXT:    s_mov_b32 s0, s2679; GFX900-NEXT:    s_mov_b32 s1, s3680; GFX900-NEXT:    s_mov_b32 s2, s4681; GFX900-NEXT:    s_mov_b32 s3, s5682; GFX900-NEXT:    s_mov_b32 s4, s6683; GFX900-NEXT:    s_mov_b32 s5, s7684; GFX900-NEXT:    s_mov_b32 s6, s8685; GFX900-NEXT:    s_mov_b32 s7, s9686; GFX900-NEXT:    image_atomic_and v0, v1, s[0:7] dmask:0x1 unorm glc687; GFX900-NEXT:    s_waitcnt vmcnt(0)688; GFX900-NEXT:    ; return to shader part epilog689;690; GFX90A-LABEL: atomic_and_i32_1d:691; GFX90A:       ; %bb.0: ; %main_body692; GFX90A-NEXT:    s_mov_b32 s0, s2693; GFX90A-NEXT:    s_mov_b32 s1, s3694; GFX90A-NEXT:    s_mov_b32 s2, s4695; GFX90A-NEXT:    s_mov_b32 s3, s5696; GFX90A-NEXT:    s_mov_b32 s4, s6697; GFX90A-NEXT:    s_mov_b32 s5, s7698; GFX90A-NEXT:    s_mov_b32 s6, s8699; GFX90A-NEXT:    s_mov_b32 s7, s9700; GFX90A-NEXT:    v_mov_b32_e32 v2, v1701; GFX90A-NEXT:    image_atomic_and v0, v2, s[0:7] dmask:0x1 unorm glc702; GFX90A-NEXT:    s_waitcnt vmcnt(0)703; GFX90A-NEXT:    ; return to shader part epilog704;705; GFX10PLUS-LABEL: atomic_and_i32_1d:706; GFX10PLUS:       ; %bb.0: ; %main_body707; GFX10PLUS-NEXT:    s_mov_b32 s0, s2708; GFX10PLUS-NEXT:    s_mov_b32 s1, s3709; GFX10PLUS-NEXT:    s_mov_b32 s2, s4710; GFX10PLUS-NEXT:    s_mov_b32 s3, s5711; GFX10PLUS-NEXT:    s_mov_b32 s4, s6712; GFX10PLUS-NEXT:    s_mov_b32 s5, s7713; GFX10PLUS-NEXT:    s_mov_b32 s6, s8714; GFX10PLUS-NEXT:    s_mov_b32 s7, s9715; GFX10PLUS-NEXT:    image_atomic_and v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc716; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)717; GFX10PLUS-NEXT:    ; return to shader part epilog718;719; GFX12-LABEL: atomic_and_i32_1d:720; GFX12:       ; %bb.0: ; %main_body721; 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:    s_mov_b32 s4, s6726; GFX12-NEXT:    s_mov_b32 s5, s7727; GFX12-NEXT:    s_mov_b32 s6, s8728; GFX12-NEXT:    s_mov_b32 s7, s9729; GFX12-NEXT:    image_atomic_and v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN730; GFX12-NEXT:    s_wait_loadcnt 0x0731; GFX12-NEXT:    ; return to shader part epilog732main_body:733  %v = call i32 @llvm.amdgcn.image.atomic.and.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)734  %out = bitcast i32 %v to float735  ret float %out736}737 738define amdgpu_ps float @atomic_or_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) {739; GFX6-LABEL: atomic_or_i32_1d:740; GFX6:       ; %bb.0: ; %main_body741; GFX6-NEXT:    s_mov_b32 s0, s2742; GFX6-NEXT:    s_mov_b32 s1, s3743; GFX6-NEXT:    s_mov_b32 s2, s4744; GFX6-NEXT:    s_mov_b32 s3, s5745; GFX6-NEXT:    s_mov_b32 s4, s6746; GFX6-NEXT:    s_mov_b32 s5, s7747; GFX6-NEXT:    s_mov_b32 s6, s8748; GFX6-NEXT:    s_mov_b32 s7, s9749; GFX6-NEXT:    image_atomic_or v0, v1, s[0:7] dmask:0x1 unorm glc750; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)751; GFX6-NEXT:    ; return to shader part epilog752;753; GFX8-LABEL: atomic_or_i32_1d:754; GFX8:       ; %bb.0: ; %main_body755; GFX8-NEXT:    s_mov_b32 s0, s2756; GFX8-NEXT:    s_mov_b32 s1, s3757; GFX8-NEXT:    s_mov_b32 s2, s4758; GFX8-NEXT:    s_mov_b32 s3, s5759; GFX8-NEXT:    s_mov_b32 s4, s6760; GFX8-NEXT:    s_mov_b32 s5, s7761; GFX8-NEXT:    s_mov_b32 s6, s8762; GFX8-NEXT:    s_mov_b32 s7, s9763; GFX8-NEXT:    image_atomic_or v0, v1, s[0:7] dmask:0x1 unorm glc764; GFX8-NEXT:    s_waitcnt vmcnt(0)765; GFX8-NEXT:    ; return to shader part epilog766;767; GFX900-LABEL: atomic_or_i32_1d:768; GFX900:       ; %bb.0: ; %main_body769; GFX900-NEXT:    s_mov_b32 s0, s2770; GFX900-NEXT:    s_mov_b32 s1, s3771; GFX900-NEXT:    s_mov_b32 s2, s4772; GFX900-NEXT:    s_mov_b32 s3, s5773; GFX900-NEXT:    s_mov_b32 s4, s6774; GFX900-NEXT:    s_mov_b32 s5, s7775; GFX900-NEXT:    s_mov_b32 s6, s8776; GFX900-NEXT:    s_mov_b32 s7, s9777; GFX900-NEXT:    image_atomic_or v0, v1, s[0:7] dmask:0x1 unorm glc778; GFX900-NEXT:    s_waitcnt vmcnt(0)779; GFX900-NEXT:    ; return to shader part epilog780;781; GFX90A-LABEL: atomic_or_i32_1d:782; GFX90A:       ; %bb.0: ; %main_body783; GFX90A-NEXT:    s_mov_b32 s0, s2784; GFX90A-NEXT:    s_mov_b32 s1, s3785; GFX90A-NEXT:    s_mov_b32 s2, s4786; GFX90A-NEXT:    s_mov_b32 s3, s5787; GFX90A-NEXT:    s_mov_b32 s4, s6788; GFX90A-NEXT:    s_mov_b32 s5, s7789; GFX90A-NEXT:    s_mov_b32 s6, s8790; GFX90A-NEXT:    s_mov_b32 s7, s9791; GFX90A-NEXT:    v_mov_b32_e32 v2, v1792; GFX90A-NEXT:    image_atomic_or v0, v2, s[0:7] dmask:0x1 unorm glc793; GFX90A-NEXT:    s_waitcnt vmcnt(0)794; GFX90A-NEXT:    ; return to shader part epilog795;796; GFX10PLUS-LABEL: atomic_or_i32_1d:797; GFX10PLUS:       ; %bb.0: ; %main_body798; GFX10PLUS-NEXT:    s_mov_b32 s0, s2799; GFX10PLUS-NEXT:    s_mov_b32 s1, s3800; GFX10PLUS-NEXT:    s_mov_b32 s2, s4801; GFX10PLUS-NEXT:    s_mov_b32 s3, s5802; GFX10PLUS-NEXT:    s_mov_b32 s4, s6803; GFX10PLUS-NEXT:    s_mov_b32 s5, s7804; GFX10PLUS-NEXT:    s_mov_b32 s6, s8805; GFX10PLUS-NEXT:    s_mov_b32 s7, s9806; GFX10PLUS-NEXT:    image_atomic_or v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc807; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)808; GFX10PLUS-NEXT:    ; return to shader part epilog809;810; GFX12-LABEL: atomic_or_i32_1d:811; GFX12:       ; %bb.0: ; %main_body812; GFX12-NEXT:    s_mov_b32 s0, s2813; GFX12-NEXT:    s_mov_b32 s1, s3814; GFX12-NEXT:    s_mov_b32 s2, s4815; GFX12-NEXT:    s_mov_b32 s3, s5816; GFX12-NEXT:    s_mov_b32 s4, s6817; GFX12-NEXT:    s_mov_b32 s5, s7818; GFX12-NEXT:    s_mov_b32 s6, s8819; GFX12-NEXT:    s_mov_b32 s7, s9820; GFX12-NEXT:    image_atomic_or v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN821; GFX12-NEXT:    s_wait_loadcnt 0x0822; GFX12-NEXT:    ; return to shader part epilog823main_body:824  %v = call i32 @llvm.amdgcn.image.atomic.or.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)825  %out = bitcast i32 %v to float826  ret float %out827}828 829define amdgpu_ps float @atomic_xor_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) {830; GFX6-LABEL: atomic_xor_i32_1d:831; GFX6:       ; %bb.0: ; %main_body832; GFX6-NEXT:    s_mov_b32 s0, s2833; GFX6-NEXT:    s_mov_b32 s1, s3834; GFX6-NEXT:    s_mov_b32 s2, s4835; GFX6-NEXT:    s_mov_b32 s3, s5836; GFX6-NEXT:    s_mov_b32 s4, s6837; GFX6-NEXT:    s_mov_b32 s5, s7838; GFX6-NEXT:    s_mov_b32 s6, s8839; GFX6-NEXT:    s_mov_b32 s7, s9840; GFX6-NEXT:    image_atomic_xor v0, v1, s[0:7] dmask:0x1 unorm glc841; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)842; GFX6-NEXT:    ; return to shader part epilog843;844; GFX8-LABEL: atomic_xor_i32_1d:845; GFX8:       ; %bb.0: ; %main_body846; GFX8-NEXT:    s_mov_b32 s0, s2847; GFX8-NEXT:    s_mov_b32 s1, s3848; GFX8-NEXT:    s_mov_b32 s2, s4849; GFX8-NEXT:    s_mov_b32 s3, s5850; GFX8-NEXT:    s_mov_b32 s4, s6851; GFX8-NEXT:    s_mov_b32 s5, s7852; GFX8-NEXT:    s_mov_b32 s6, s8853; GFX8-NEXT:    s_mov_b32 s7, s9854; GFX8-NEXT:    image_atomic_xor v0, v1, s[0:7] dmask:0x1 unorm glc855; GFX8-NEXT:    s_waitcnt vmcnt(0)856; GFX8-NEXT:    ; return to shader part epilog857;858; GFX900-LABEL: atomic_xor_i32_1d:859; GFX900:       ; %bb.0: ; %main_body860; GFX900-NEXT:    s_mov_b32 s0, s2861; GFX900-NEXT:    s_mov_b32 s1, s3862; GFX900-NEXT:    s_mov_b32 s2, s4863; GFX900-NEXT:    s_mov_b32 s3, s5864; GFX900-NEXT:    s_mov_b32 s4, s6865; GFX900-NEXT:    s_mov_b32 s5, s7866; GFX900-NEXT:    s_mov_b32 s6, s8867; GFX900-NEXT:    s_mov_b32 s7, s9868; GFX900-NEXT:    image_atomic_xor v0, v1, s[0:7] dmask:0x1 unorm glc869; GFX900-NEXT:    s_waitcnt vmcnt(0)870; GFX900-NEXT:    ; return to shader part epilog871;872; GFX90A-LABEL: atomic_xor_i32_1d:873; GFX90A:       ; %bb.0: ; %main_body874; GFX90A-NEXT:    s_mov_b32 s0, s2875; GFX90A-NEXT:    s_mov_b32 s1, s3876; GFX90A-NEXT:    s_mov_b32 s2, s4877; GFX90A-NEXT:    s_mov_b32 s3, s5878; GFX90A-NEXT:    s_mov_b32 s4, s6879; GFX90A-NEXT:    s_mov_b32 s5, s7880; GFX90A-NEXT:    s_mov_b32 s6, s8881; GFX90A-NEXT:    s_mov_b32 s7, s9882; GFX90A-NEXT:    v_mov_b32_e32 v2, v1883; GFX90A-NEXT:    image_atomic_xor v0, v2, s[0:7] dmask:0x1 unorm glc884; GFX90A-NEXT:    s_waitcnt vmcnt(0)885; GFX90A-NEXT:    ; return to shader part epilog886;887; GFX10PLUS-LABEL: atomic_xor_i32_1d:888; GFX10PLUS:       ; %bb.0: ; %main_body889; GFX10PLUS-NEXT:    s_mov_b32 s0, s2890; GFX10PLUS-NEXT:    s_mov_b32 s1, s3891; GFX10PLUS-NEXT:    s_mov_b32 s2, s4892; GFX10PLUS-NEXT:    s_mov_b32 s3, s5893; GFX10PLUS-NEXT:    s_mov_b32 s4, s6894; GFX10PLUS-NEXT:    s_mov_b32 s5, s7895; GFX10PLUS-NEXT:    s_mov_b32 s6, s8896; GFX10PLUS-NEXT:    s_mov_b32 s7, s9897; GFX10PLUS-NEXT:    image_atomic_xor v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc898; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)899; GFX10PLUS-NEXT:    ; return to shader part epilog900;901; GFX12-LABEL: atomic_xor_i32_1d:902; GFX12:       ; %bb.0: ; %main_body903; GFX12-NEXT:    s_mov_b32 s0, s2904; GFX12-NEXT:    s_mov_b32 s1, s3905; GFX12-NEXT:    s_mov_b32 s2, s4906; GFX12-NEXT:    s_mov_b32 s3, s5907; GFX12-NEXT:    s_mov_b32 s4, s6908; GFX12-NEXT:    s_mov_b32 s5, s7909; GFX12-NEXT:    s_mov_b32 s6, s8910; GFX12-NEXT:    s_mov_b32 s7, s9911; GFX12-NEXT:    image_atomic_xor v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN912; GFX12-NEXT:    s_wait_loadcnt 0x0913; GFX12-NEXT:    ; return to shader part epilog914main_body:915  %v = call i32 @llvm.amdgcn.image.atomic.xor.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)916  %out = bitcast i32 %v to float917  ret float %out918}919 920define amdgpu_ps float @atomic_inc_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) {921; GFX6-LABEL: atomic_inc_i32_1d:922; GFX6:       ; %bb.0: ; %main_body923; GFX6-NEXT:    s_mov_b32 s0, s2924; GFX6-NEXT:    s_mov_b32 s1, s3925; GFX6-NEXT:    s_mov_b32 s2, s4926; GFX6-NEXT:    s_mov_b32 s3, s5927; GFX6-NEXT:    s_mov_b32 s4, s6928; GFX6-NEXT:    s_mov_b32 s5, s7929; GFX6-NEXT:    s_mov_b32 s6, s8930; GFX6-NEXT:    s_mov_b32 s7, s9931; GFX6-NEXT:    image_atomic_inc v0, v1, s[0:7] dmask:0x1 unorm glc932; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)933; GFX6-NEXT:    ; return to shader part epilog934;935; GFX8-LABEL: atomic_inc_i32_1d:936; GFX8:       ; %bb.0: ; %main_body937; GFX8-NEXT:    s_mov_b32 s0, s2938; GFX8-NEXT:    s_mov_b32 s1, s3939; GFX8-NEXT:    s_mov_b32 s2, s4940; GFX8-NEXT:    s_mov_b32 s3, s5941; GFX8-NEXT:    s_mov_b32 s4, s6942; GFX8-NEXT:    s_mov_b32 s5, s7943; GFX8-NEXT:    s_mov_b32 s6, s8944; GFX8-NEXT:    s_mov_b32 s7, s9945; GFX8-NEXT:    image_atomic_inc v0, v1, s[0:7] dmask:0x1 unorm glc946; GFX8-NEXT:    s_waitcnt vmcnt(0)947; GFX8-NEXT:    ; return to shader part epilog948;949; GFX900-LABEL: atomic_inc_i32_1d:950; GFX900:       ; %bb.0: ; %main_body951; GFX900-NEXT:    s_mov_b32 s0, s2952; GFX900-NEXT:    s_mov_b32 s1, s3953; GFX900-NEXT:    s_mov_b32 s2, s4954; GFX900-NEXT:    s_mov_b32 s3, s5955; GFX900-NEXT:    s_mov_b32 s4, s6956; GFX900-NEXT:    s_mov_b32 s5, s7957; GFX900-NEXT:    s_mov_b32 s6, s8958; GFX900-NEXT:    s_mov_b32 s7, s9959; GFX900-NEXT:    image_atomic_inc v0, v1, s[0:7] dmask:0x1 unorm glc960; GFX900-NEXT:    s_waitcnt vmcnt(0)961; GFX900-NEXT:    ; return to shader part epilog962;963; GFX90A-LABEL: atomic_inc_i32_1d:964; GFX90A:       ; %bb.0: ; %main_body965; GFX90A-NEXT:    s_mov_b32 s0, s2966; GFX90A-NEXT:    s_mov_b32 s1, s3967; GFX90A-NEXT:    s_mov_b32 s2, s4968; GFX90A-NEXT:    s_mov_b32 s3, s5969; GFX90A-NEXT:    s_mov_b32 s4, s6970; GFX90A-NEXT:    s_mov_b32 s5, s7971; GFX90A-NEXT:    s_mov_b32 s6, s8972; GFX90A-NEXT:    s_mov_b32 s7, s9973; GFX90A-NEXT:    v_mov_b32_e32 v2, v1974; GFX90A-NEXT:    image_atomic_inc v0, v2, s[0:7] dmask:0x1 unorm glc975; GFX90A-NEXT:    s_waitcnt vmcnt(0)976; GFX90A-NEXT:    ; return to shader part epilog977;978; GFX10PLUS-LABEL: atomic_inc_i32_1d:979; GFX10PLUS:       ; %bb.0: ; %main_body980; GFX10PLUS-NEXT:    s_mov_b32 s0, s2981; GFX10PLUS-NEXT:    s_mov_b32 s1, s3982; GFX10PLUS-NEXT:    s_mov_b32 s2, s4983; GFX10PLUS-NEXT:    s_mov_b32 s3, s5984; GFX10PLUS-NEXT:    s_mov_b32 s4, s6985; GFX10PLUS-NEXT:    s_mov_b32 s5, s7986; GFX10PLUS-NEXT:    s_mov_b32 s6, s8987; GFX10PLUS-NEXT:    s_mov_b32 s7, s9988; GFX10PLUS-NEXT:    image_atomic_inc v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc989; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)990; GFX10PLUS-NEXT:    ; return to shader part epilog991;992; GFX12-LABEL: atomic_inc_i32_1d:993; GFX12:       ; %bb.0: ; %main_body994; GFX12-NEXT:    s_mov_b32 s0, s2995; GFX12-NEXT:    s_mov_b32 s1, s3996; GFX12-NEXT:    s_mov_b32 s2, s4997; GFX12-NEXT:    s_mov_b32 s3, s5998; GFX12-NEXT:    s_mov_b32 s4, s6999; GFX12-NEXT:    s_mov_b32 s5, s71000; GFX12-NEXT:    s_mov_b32 s6, s81001; GFX12-NEXT:    s_mov_b32 s7, s91002; GFX12-NEXT:    image_atomic_inc_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN1003; GFX12-NEXT:    s_wait_loadcnt 0x01004; GFX12-NEXT:    ; return to shader part epilog1005main_body:1006  %v = call i32 @llvm.amdgcn.image.atomic.inc.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)1007  %out = bitcast i32 %v to float1008  ret float %out1009}1010 1011define amdgpu_ps float @atomic_dec_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) {1012; GFX6-LABEL: atomic_dec_i32_1d:1013; GFX6:       ; %bb.0: ; %main_body1014; GFX6-NEXT:    s_mov_b32 s0, s21015; GFX6-NEXT:    s_mov_b32 s1, s31016; GFX6-NEXT:    s_mov_b32 s2, s41017; GFX6-NEXT:    s_mov_b32 s3, s51018; GFX6-NEXT:    s_mov_b32 s4, s61019; GFX6-NEXT:    s_mov_b32 s5, s71020; GFX6-NEXT:    s_mov_b32 s6, s81021; GFX6-NEXT:    s_mov_b32 s7, s91022; GFX6-NEXT:    image_atomic_dec v0, v1, s[0:7] dmask:0x1 unorm glc1023; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)1024; GFX6-NEXT:    ; return to shader part epilog1025;1026; GFX8-LABEL: atomic_dec_i32_1d:1027; GFX8:       ; %bb.0: ; %main_body1028; GFX8-NEXT:    s_mov_b32 s0, s21029; GFX8-NEXT:    s_mov_b32 s1, s31030; GFX8-NEXT:    s_mov_b32 s2, s41031; GFX8-NEXT:    s_mov_b32 s3, s51032; GFX8-NEXT:    s_mov_b32 s4, s61033; GFX8-NEXT:    s_mov_b32 s5, s71034; GFX8-NEXT:    s_mov_b32 s6, s81035; GFX8-NEXT:    s_mov_b32 s7, s91036; GFX8-NEXT:    image_atomic_dec v0, v1, s[0:7] dmask:0x1 unorm glc1037; GFX8-NEXT:    s_waitcnt vmcnt(0)1038; GFX8-NEXT:    ; return to shader part epilog1039;1040; GFX900-LABEL: atomic_dec_i32_1d:1041; GFX900:       ; %bb.0: ; %main_body1042; GFX900-NEXT:    s_mov_b32 s0, s21043; GFX900-NEXT:    s_mov_b32 s1, s31044; GFX900-NEXT:    s_mov_b32 s2, s41045; GFX900-NEXT:    s_mov_b32 s3, s51046; GFX900-NEXT:    s_mov_b32 s4, s61047; GFX900-NEXT:    s_mov_b32 s5, s71048; GFX900-NEXT:    s_mov_b32 s6, s81049; GFX900-NEXT:    s_mov_b32 s7, s91050; GFX900-NEXT:    image_atomic_dec v0, v1, s[0:7] dmask:0x1 unorm glc1051; GFX900-NEXT:    s_waitcnt vmcnt(0)1052; GFX900-NEXT:    ; return to shader part epilog1053;1054; GFX90A-LABEL: atomic_dec_i32_1d:1055; GFX90A:       ; %bb.0: ; %main_body1056; GFX90A-NEXT:    s_mov_b32 s0, s21057; GFX90A-NEXT:    s_mov_b32 s1, s31058; GFX90A-NEXT:    s_mov_b32 s2, s41059; GFX90A-NEXT:    s_mov_b32 s3, s51060; GFX90A-NEXT:    s_mov_b32 s4, s61061; GFX90A-NEXT:    s_mov_b32 s5, s71062; GFX90A-NEXT:    s_mov_b32 s6, s81063; GFX90A-NEXT:    s_mov_b32 s7, s91064; GFX90A-NEXT:    v_mov_b32_e32 v2, v11065; GFX90A-NEXT:    image_atomic_dec v0, v2, s[0:7] dmask:0x1 unorm glc1066; GFX90A-NEXT:    s_waitcnt vmcnt(0)1067; GFX90A-NEXT:    ; return to shader part epilog1068;1069; GFX10PLUS-LABEL: atomic_dec_i32_1d:1070; GFX10PLUS:       ; %bb.0: ; %main_body1071; GFX10PLUS-NEXT:    s_mov_b32 s0, s21072; GFX10PLUS-NEXT:    s_mov_b32 s1, s31073; GFX10PLUS-NEXT:    s_mov_b32 s2, s41074; GFX10PLUS-NEXT:    s_mov_b32 s3, s51075; GFX10PLUS-NEXT:    s_mov_b32 s4, s61076; GFX10PLUS-NEXT:    s_mov_b32 s5, s71077; GFX10PLUS-NEXT:    s_mov_b32 s6, s81078; GFX10PLUS-NEXT:    s_mov_b32 s7, s91079; GFX10PLUS-NEXT:    image_atomic_dec v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc1080; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)1081; GFX10PLUS-NEXT:    ; return to shader part epilog1082;1083; GFX12-LABEL: atomic_dec_i32_1d:1084; GFX12:       ; %bb.0: ; %main_body1085; GFX12-NEXT:    s_mov_b32 s0, s21086; GFX12-NEXT:    s_mov_b32 s1, s31087; GFX12-NEXT:    s_mov_b32 s2, s41088; GFX12-NEXT:    s_mov_b32 s3, s51089; GFX12-NEXT:    s_mov_b32 s4, s61090; GFX12-NEXT:    s_mov_b32 s5, s71091; GFX12-NEXT:    s_mov_b32 s6, s81092; GFX12-NEXT:    s_mov_b32 s7, s91093; GFX12-NEXT:    image_atomic_dec_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN1094; GFX12-NEXT:    s_wait_loadcnt 0x01095; GFX12-NEXT:    ; return to shader part epilog1096main_body:1097  %v = call i32 @llvm.amdgcn.image.atomic.dec.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)1098  %out = bitcast i32 %v to float1099  ret float %out1100}1101 1102define amdgpu_ps float @atomic_cmpswap_i32_1d(<8 x i32> inreg %rsrc, i32 %cmp, i32 %swap, i32 %s) {1103; GFX6-LABEL: atomic_cmpswap_i32_1d:1104; GFX6:       ; %bb.0: ; %main_body1105; GFX6-NEXT:    s_mov_b32 s0, s21106; GFX6-NEXT:    s_mov_b32 s1, s31107; GFX6-NEXT:    s_mov_b32 s2, s41108; GFX6-NEXT:    s_mov_b32 s3, s51109; GFX6-NEXT:    s_mov_b32 s4, s61110; GFX6-NEXT:    s_mov_b32 s5, s71111; GFX6-NEXT:    s_mov_b32 s6, s81112; GFX6-NEXT:    s_mov_b32 s7, s91113; GFX6-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm glc1114; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)1115; GFX6-NEXT:    ; return to shader part epilog1116;1117; GFX8-LABEL: atomic_cmpswap_i32_1d:1118; GFX8:       ; %bb.0: ; %main_body1119; GFX8-NEXT:    s_mov_b32 s0, s21120; GFX8-NEXT:    s_mov_b32 s1, s31121; GFX8-NEXT:    s_mov_b32 s2, s41122; GFX8-NEXT:    s_mov_b32 s3, s51123; GFX8-NEXT:    s_mov_b32 s4, s61124; GFX8-NEXT:    s_mov_b32 s5, s71125; GFX8-NEXT:    s_mov_b32 s6, s81126; GFX8-NEXT:    s_mov_b32 s7, s91127; GFX8-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm glc1128; GFX8-NEXT:    s_waitcnt vmcnt(0)1129; GFX8-NEXT:    ; return to shader part epilog1130;1131; GFX900-LABEL: atomic_cmpswap_i32_1d:1132; GFX900:       ; %bb.0: ; %main_body1133; GFX900-NEXT:    s_mov_b32 s0, s21134; GFX900-NEXT:    s_mov_b32 s1, s31135; GFX900-NEXT:    s_mov_b32 s2, s41136; GFX900-NEXT:    s_mov_b32 s3, s51137; GFX900-NEXT:    s_mov_b32 s4, s61138; GFX900-NEXT:    s_mov_b32 s5, s71139; GFX900-NEXT:    s_mov_b32 s6, s81140; GFX900-NEXT:    s_mov_b32 s7, s91141; GFX900-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm glc1142; GFX900-NEXT:    s_waitcnt vmcnt(0)1143; GFX900-NEXT:    ; return to shader part epilog1144;1145; GFX90A-LABEL: atomic_cmpswap_i32_1d:1146; GFX90A:       ; %bb.0: ; %main_body1147; GFX90A-NEXT:    s_mov_b32 s0, s21148; GFX90A-NEXT:    s_mov_b32 s1, s31149; GFX90A-NEXT:    s_mov_b32 s2, s41150; GFX90A-NEXT:    s_mov_b32 s3, s51151; GFX90A-NEXT:    s_mov_b32 s4, s61152; GFX90A-NEXT:    s_mov_b32 s5, s71153; GFX90A-NEXT:    s_mov_b32 s6, s81154; GFX90A-NEXT:    s_mov_b32 s7, s91155; GFX90A-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm glc1156; GFX90A-NEXT:    s_waitcnt vmcnt(0)1157; GFX90A-NEXT:    ; return to shader part epilog1158;1159; GFX10PLUS-LABEL: atomic_cmpswap_i32_1d:1160; GFX10PLUS:       ; %bb.0: ; %main_body1161; GFX10PLUS-NEXT:    s_mov_b32 s0, s21162; GFX10PLUS-NEXT:    s_mov_b32 s1, s31163; GFX10PLUS-NEXT:    s_mov_b32 s2, s41164; GFX10PLUS-NEXT:    s_mov_b32 s3, s51165; GFX10PLUS-NEXT:    s_mov_b32 s4, s61166; GFX10PLUS-NEXT:    s_mov_b32 s5, s71167; GFX10PLUS-NEXT:    s_mov_b32 s6, s81168; GFX10PLUS-NEXT:    s_mov_b32 s7, s91169; GFX10PLUS-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc1170; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)1171; GFX10PLUS-NEXT:    ; return to shader part epilog1172;1173; GFX12-LABEL: atomic_cmpswap_i32_1d:1174; GFX12:       ; %bb.0: ; %main_body1175; GFX12-NEXT:    s_mov_b32 s0, s21176; GFX12-NEXT:    s_mov_b32 s1, s31177; GFX12-NEXT:    s_mov_b32 s2, s41178; GFX12-NEXT:    s_mov_b32 s3, s51179; GFX12-NEXT:    s_mov_b32 s4, s61180; GFX12-NEXT:    s_mov_b32 s5, s71181; GFX12-NEXT:    s_mov_b32 s6, s81182; GFX12-NEXT:    s_mov_b32 s7, s91183; GFX12-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN1184; GFX12-NEXT:    s_wait_loadcnt 0x01185; GFX12-NEXT:    ; return to shader part epilog1186main_body:1187  %v = call i32 @llvm.amdgcn.image.atomic.cmpswap.1d.i32.i32(i32 %cmp, i32 %swap, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)1188  %out = bitcast i32 %v to float1189  ret float %out1190}1191 1192define amdgpu_ps void @atomic_cmpswap_i32_1d_no_return(<8 x i32> inreg %rsrc, i32 %cmp, i32 %swap, i32 %s) {1193; GFX6-LABEL: atomic_cmpswap_i32_1d_no_return:1194; GFX6:       ; %bb.0: ; %main_body1195; GFX6-NEXT:    s_mov_b32 s0, s21196; GFX6-NEXT:    s_mov_b32 s1, s31197; GFX6-NEXT:    s_mov_b32 s2, s41198; GFX6-NEXT:    s_mov_b32 s3, s51199; GFX6-NEXT:    s_mov_b32 s4, s61200; GFX6-NEXT:    s_mov_b32 s5, s71201; GFX6-NEXT:    s_mov_b32 s6, s81202; GFX6-NEXT:    s_mov_b32 s7, s91203; GFX6-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm1204; GFX6-NEXT:    s_endpgm1205;1206; GFX8-LABEL: atomic_cmpswap_i32_1d_no_return:1207; GFX8:       ; %bb.0: ; %main_body1208; GFX8-NEXT:    s_mov_b32 s0, s21209; GFX8-NEXT:    s_mov_b32 s1, s31210; GFX8-NEXT:    s_mov_b32 s2, s41211; GFX8-NEXT:    s_mov_b32 s3, s51212; GFX8-NEXT:    s_mov_b32 s4, s61213; GFX8-NEXT:    s_mov_b32 s5, s71214; GFX8-NEXT:    s_mov_b32 s6, s81215; GFX8-NEXT:    s_mov_b32 s7, s91216; GFX8-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm1217; GFX8-NEXT:    s_endpgm1218;1219; GFX900-LABEL: atomic_cmpswap_i32_1d_no_return:1220; GFX900:       ; %bb.0: ; %main_body1221; GFX900-NEXT:    s_mov_b32 s0, s21222; GFX900-NEXT:    s_mov_b32 s1, s31223; GFX900-NEXT:    s_mov_b32 s2, s41224; GFX900-NEXT:    s_mov_b32 s3, s51225; GFX900-NEXT:    s_mov_b32 s4, s61226; GFX900-NEXT:    s_mov_b32 s5, s71227; GFX900-NEXT:    s_mov_b32 s6, s81228; GFX900-NEXT:    s_mov_b32 s7, s91229; GFX900-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm1230; GFX900-NEXT:    s_endpgm1231;1232; GFX90A-LABEL: atomic_cmpswap_i32_1d_no_return:1233; GFX90A:       ; %bb.0: ; %main_body1234; GFX90A-NEXT:    s_mov_b32 s0, s21235; GFX90A-NEXT:    s_mov_b32 s1, s31236; GFX90A-NEXT:    s_mov_b32 s2, s41237; GFX90A-NEXT:    s_mov_b32 s3, s51238; GFX90A-NEXT:    s_mov_b32 s4, s61239; GFX90A-NEXT:    s_mov_b32 s5, s71240; GFX90A-NEXT:    s_mov_b32 s6, s81241; GFX90A-NEXT:    s_mov_b32 s7, s91242; GFX90A-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm1243; GFX90A-NEXT:    s_endpgm1244;1245; GFX10PLUS-LABEL: atomic_cmpswap_i32_1d_no_return:1246; GFX10PLUS:       ; %bb.0: ; %main_body1247; GFX10PLUS-NEXT:    s_mov_b32 s0, s21248; GFX10PLUS-NEXT:    s_mov_b32 s1, s31249; GFX10PLUS-NEXT:    s_mov_b32 s2, s41250; GFX10PLUS-NEXT:    s_mov_b32 s3, s51251; GFX10PLUS-NEXT:    s_mov_b32 s4, s61252; GFX10PLUS-NEXT:    s_mov_b32 s5, s71253; GFX10PLUS-NEXT:    s_mov_b32 s6, s81254; GFX10PLUS-NEXT:    s_mov_b32 s7, s91255; GFX10PLUS-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm1256; GFX10PLUS-NEXT:    s_endpgm1257;1258; GFX12-LABEL: atomic_cmpswap_i32_1d_no_return:1259; GFX12:       ; %bb.0: ; %main_body1260; GFX12-NEXT:    s_mov_b32 s0, s21261; GFX12-NEXT:    s_mov_b32 s1, s31262; GFX12-NEXT:    s_mov_b32 s2, s41263; GFX12-NEXT:    s_mov_b32 s3, s51264; GFX12-NEXT:    s_mov_b32 s4, s61265; GFX12-NEXT:    s_mov_b32 s5, s71266; GFX12-NEXT:    s_mov_b32 s6, s81267; GFX12-NEXT:    s_mov_b32 s7, s91268; GFX12-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D1269; GFX12-NEXT:    s_endpgm1270main_body:1271  %v = call i32 @llvm.amdgcn.image.atomic.cmpswap.1d.i32.i32(i32 %cmp, i32 %swap, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)1272  ret void1273}1274 1275define amdgpu_ps float @atomic_add_i32_2d(<8 x i32> inreg %rsrc, i32 %data, i32 %s, i32 %t) {1276; GFX6-LABEL: atomic_add_i32_2d:1277; GFX6:       ; %bb.0: ; %main_body1278; GFX6-NEXT:    s_mov_b32 s0, s21279; GFX6-NEXT:    s_mov_b32 s1, s31280; GFX6-NEXT:    s_mov_b32 s2, s41281; GFX6-NEXT:    s_mov_b32 s3, s51282; GFX6-NEXT:    s_mov_b32 s4, s61283; GFX6-NEXT:    s_mov_b32 s5, s71284; GFX6-NEXT:    s_mov_b32 s6, s81285; GFX6-NEXT:    s_mov_b32 s7, s91286; GFX6-NEXT:    image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 unorm glc1287; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)1288; GFX6-NEXT:    ; return to shader part epilog1289;1290; GFX8-LABEL: atomic_add_i32_2d:1291; GFX8:       ; %bb.0: ; %main_body1292; GFX8-NEXT:    s_mov_b32 s0, s21293; GFX8-NEXT:    s_mov_b32 s1, s31294; GFX8-NEXT:    s_mov_b32 s2, s41295; GFX8-NEXT:    s_mov_b32 s3, s51296; GFX8-NEXT:    s_mov_b32 s4, s61297; GFX8-NEXT:    s_mov_b32 s5, s71298; GFX8-NEXT:    s_mov_b32 s6, s81299; GFX8-NEXT:    s_mov_b32 s7, s91300; GFX8-NEXT:    image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 unorm glc1301; GFX8-NEXT:    s_waitcnt vmcnt(0)1302; GFX8-NEXT:    ; return to shader part epilog1303;1304; GFX900-LABEL: atomic_add_i32_2d:1305; GFX900:       ; %bb.0: ; %main_body1306; GFX900-NEXT:    s_mov_b32 s0, s21307; GFX900-NEXT:    s_mov_b32 s1, s31308; GFX900-NEXT:    s_mov_b32 s2, s41309; GFX900-NEXT:    s_mov_b32 s3, s51310; GFX900-NEXT:    s_mov_b32 s4, s61311; GFX900-NEXT:    s_mov_b32 s5, s71312; GFX900-NEXT:    s_mov_b32 s6, s81313; GFX900-NEXT:    s_mov_b32 s7, s91314; GFX900-NEXT:    image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 unorm glc1315; GFX900-NEXT:    s_waitcnt vmcnt(0)1316; GFX900-NEXT:    ; return to shader part epilog1317;1318; GFX90A-LABEL: atomic_add_i32_2d:1319; GFX90A:       ; %bb.0: ; %main_body1320; GFX90A-NEXT:    s_mov_b32 s0, s21321; GFX90A-NEXT:    s_mov_b32 s1, s31322; GFX90A-NEXT:    s_mov_b32 s2, s41323; GFX90A-NEXT:    s_mov_b32 s3, s51324; GFX90A-NEXT:    s_mov_b32 s4, s61325; GFX90A-NEXT:    s_mov_b32 s5, s71326; GFX90A-NEXT:    s_mov_b32 s6, s81327; GFX90A-NEXT:    s_mov_b32 s7, s91328; GFX90A-NEXT:    v_mov_b32_e32 v4, v11329; GFX90A-NEXT:    v_mov_b32_e32 v5, v21330; GFX90A-NEXT:    image_atomic_add v0, v[4:5], s[0:7] dmask:0x1 unorm glc1331; GFX90A-NEXT:    s_waitcnt vmcnt(0)1332; GFX90A-NEXT:    ; return to shader part epilog1333;1334; GFX10PLUS-LABEL: atomic_add_i32_2d:1335; GFX10PLUS:       ; %bb.0: ; %main_body1336; GFX10PLUS-NEXT:    s_mov_b32 s0, s21337; GFX10PLUS-NEXT:    s_mov_b32 s1, s31338; GFX10PLUS-NEXT:    s_mov_b32 s2, s41339; GFX10PLUS-NEXT:    s_mov_b32 s3, s51340; GFX10PLUS-NEXT:    s_mov_b32 s4, s61341; GFX10PLUS-NEXT:    s_mov_b32 s5, s71342; GFX10PLUS-NEXT:    s_mov_b32 s6, s81343; GFX10PLUS-NEXT:    s_mov_b32 s7, s91344; GFX10PLUS-NEXT:    image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm glc1345; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)1346; GFX10PLUS-NEXT:    ; return to shader part epilog1347;1348; GFX12-LABEL: atomic_add_i32_2d:1349; GFX12:       ; %bb.0: ; %main_body1350; GFX12-NEXT:    s_mov_b32 s0, s21351; GFX12-NEXT:    s_mov_b32 s1, s31352; GFX12-NEXT:    s_mov_b32 s2, s41353; GFX12-NEXT:    s_mov_b32 s3, s51354; GFX12-NEXT:    s_mov_b32 s4, s61355; GFX12-NEXT:    s_mov_b32 s5, s71356; GFX12-NEXT:    s_mov_b32 s6, s81357; GFX12-NEXT:    s_mov_b32 s7, s91358; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D th:TH_ATOMIC_RETURN1359; GFX12-NEXT:    s_wait_loadcnt 0x01360; GFX12-NEXT:    ; return to shader part epilog1361main_body:1362  %v = call i32 @llvm.amdgcn.image.atomic.add.2d.i32.i32(i32 %data, i32 %s, i32 %t, <8 x i32> %rsrc, i32 0, i32 0)1363  %out = bitcast i32 %v to float1364  ret float %out1365}1366 1367define amdgpu_ps float @atomic_add_i32_3d(<8 x i32> inreg %rsrc, i32 %data, i32 %s, i32 %t, i32 %r) {1368; GFX6-LABEL: atomic_add_i32_3d:1369; GFX6:       ; %bb.0: ; %main_body1370; GFX6-NEXT:    s_mov_b32 s0, s21371; GFX6-NEXT:    s_mov_b32 s1, s31372; GFX6-NEXT:    s_mov_b32 s2, s41373; GFX6-NEXT:    s_mov_b32 s3, s51374; GFX6-NEXT:    s_mov_b32 s4, s61375; GFX6-NEXT:    s_mov_b32 s5, s71376; GFX6-NEXT:    s_mov_b32 s6, s81377; GFX6-NEXT:    s_mov_b32 s7, s91378; GFX6-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc1379; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)1380; GFX6-NEXT:    ; return to shader part epilog1381;1382; GFX8-LABEL: atomic_add_i32_3d:1383; GFX8:       ; %bb.0: ; %main_body1384; GFX8-NEXT:    s_mov_b32 s0, s21385; GFX8-NEXT:    s_mov_b32 s1, s31386; GFX8-NEXT:    s_mov_b32 s2, s41387; GFX8-NEXT:    s_mov_b32 s3, s51388; GFX8-NEXT:    s_mov_b32 s4, s61389; GFX8-NEXT:    s_mov_b32 s5, s71390; GFX8-NEXT:    s_mov_b32 s6, s81391; GFX8-NEXT:    s_mov_b32 s7, s91392; GFX8-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc1393; GFX8-NEXT:    s_waitcnt vmcnt(0)1394; GFX8-NEXT:    ; return to shader part epilog1395;1396; GFX900-LABEL: atomic_add_i32_3d:1397; GFX900:       ; %bb.0: ; %main_body1398; GFX900-NEXT:    s_mov_b32 s0, s21399; GFX900-NEXT:    s_mov_b32 s1, s31400; GFX900-NEXT:    s_mov_b32 s2, s41401; GFX900-NEXT:    s_mov_b32 s3, s51402; GFX900-NEXT:    s_mov_b32 s4, s61403; GFX900-NEXT:    s_mov_b32 s5, s71404; GFX900-NEXT:    s_mov_b32 s6, s81405; GFX900-NEXT:    s_mov_b32 s7, s91406; GFX900-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc1407; GFX900-NEXT:    s_waitcnt vmcnt(0)1408; GFX900-NEXT:    ; return to shader part epilog1409;1410; GFX90A-LABEL: atomic_add_i32_3d:1411; GFX90A:       ; %bb.0: ; %main_body1412; GFX90A-NEXT:    s_mov_b32 s0, s21413; GFX90A-NEXT:    s_mov_b32 s1, s31414; GFX90A-NEXT:    s_mov_b32 s2, s41415; GFX90A-NEXT:    s_mov_b32 s3, s51416; GFX90A-NEXT:    s_mov_b32 s4, s61417; GFX90A-NEXT:    s_mov_b32 s5, s71418; GFX90A-NEXT:    s_mov_b32 s6, s81419; GFX90A-NEXT:    s_mov_b32 s7, s91420; GFX90A-NEXT:    v_mov_b32_e32 v4, v11421; GFX90A-NEXT:    v_mov_b32_e32 v5, v21422; GFX90A-NEXT:    v_mov_b32_e32 v6, v31423; GFX90A-NEXT:    image_atomic_add v0, v[4:6], s[0:7] dmask:0x1 unorm glc1424; GFX90A-NEXT:    s_waitcnt vmcnt(0)1425; GFX90A-NEXT:    ; return to shader part epilog1426;1427; GFX10PLUS-LABEL: atomic_add_i32_3d:1428; GFX10PLUS:       ; %bb.0: ; %main_body1429; GFX10PLUS-NEXT:    s_mov_b32 s0, s21430; GFX10PLUS-NEXT:    s_mov_b32 s1, s31431; GFX10PLUS-NEXT:    s_mov_b32 s2, s41432; GFX10PLUS-NEXT:    s_mov_b32 s3, s51433; GFX10PLUS-NEXT:    s_mov_b32 s4, s61434; GFX10PLUS-NEXT:    s_mov_b32 s5, s71435; GFX10PLUS-NEXT:    s_mov_b32 s6, s81436; GFX10PLUS-NEXT:    s_mov_b32 s7, s91437; GFX10PLUS-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_3D unorm glc1438; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)1439; GFX10PLUS-NEXT:    ; return to shader part epilog1440;1441; GFX12-LABEL: atomic_add_i32_3d:1442; GFX12:       ; %bb.0: ; %main_body1443; GFX12-NEXT:    s_mov_b32 s0, s21444; GFX12-NEXT:    s_mov_b32 s1, s31445; GFX12-NEXT:    s_mov_b32 s2, s41446; GFX12-NEXT:    s_mov_b32 s3, s51447; GFX12-NEXT:    s_mov_b32 s4, s61448; GFX12-NEXT:    s_mov_b32 s5, s71449; GFX12-NEXT:    s_mov_b32 s6, s81450; GFX12-NEXT:    s_mov_b32 s7, s91451; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v2, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_3D th:TH_ATOMIC_RETURN1452; GFX12-NEXT:    s_wait_loadcnt 0x01453; GFX12-NEXT:    ; return to shader part epilog1454main_body:1455  %v = call i32 @llvm.amdgcn.image.atomic.add.3d.i32.i32(i32 %data, i32 %s, i32 %t, i32 %r, <8 x i32> %rsrc, i32 0, i32 0)1456  %out = bitcast i32 %v to float1457  ret float %out1458}1459 1460define amdgpu_ps float @atomic_add_i32_cube(<8 x i32> inreg %rsrc, i32 %data, i32 %s, i32 %t, i32 %face) {1461; GFX6-LABEL: atomic_add_i32_cube:1462; GFX6:       ; %bb.0: ; %main_body1463; GFX6-NEXT:    s_mov_b32 s0, s21464; GFX6-NEXT:    s_mov_b32 s1, s31465; GFX6-NEXT:    s_mov_b32 s2, s41466; GFX6-NEXT:    s_mov_b32 s3, s51467; GFX6-NEXT:    s_mov_b32 s4, s61468; GFX6-NEXT:    s_mov_b32 s5, s71469; GFX6-NEXT:    s_mov_b32 s6, s81470; GFX6-NEXT:    s_mov_b32 s7, s91471; GFX6-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc da1472; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)1473; GFX6-NEXT:    ; return to shader part epilog1474;1475; GFX8-LABEL: atomic_add_i32_cube:1476; GFX8:       ; %bb.0: ; %main_body1477; GFX8-NEXT:    s_mov_b32 s0, s21478; GFX8-NEXT:    s_mov_b32 s1, s31479; GFX8-NEXT:    s_mov_b32 s2, s41480; GFX8-NEXT:    s_mov_b32 s3, s51481; GFX8-NEXT:    s_mov_b32 s4, s61482; GFX8-NEXT:    s_mov_b32 s5, s71483; GFX8-NEXT:    s_mov_b32 s6, s81484; GFX8-NEXT:    s_mov_b32 s7, s91485; GFX8-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc da1486; GFX8-NEXT:    s_waitcnt vmcnt(0)1487; GFX8-NEXT:    ; return to shader part epilog1488;1489; GFX900-LABEL: atomic_add_i32_cube:1490; GFX900:       ; %bb.0: ; %main_body1491; GFX900-NEXT:    s_mov_b32 s0, s21492; GFX900-NEXT:    s_mov_b32 s1, s31493; GFX900-NEXT:    s_mov_b32 s2, s41494; GFX900-NEXT:    s_mov_b32 s3, s51495; GFX900-NEXT:    s_mov_b32 s4, s61496; GFX900-NEXT:    s_mov_b32 s5, s71497; GFX900-NEXT:    s_mov_b32 s6, s81498; GFX900-NEXT:    s_mov_b32 s7, s91499; GFX900-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc da1500; GFX900-NEXT:    s_waitcnt vmcnt(0)1501; GFX900-NEXT:    ; return to shader part epilog1502;1503; GFX90A-LABEL: atomic_add_i32_cube:1504; GFX90A:       ; %bb.0: ; %main_body1505; GFX90A-NEXT:    s_mov_b32 s0, s21506; GFX90A-NEXT:    s_mov_b32 s1, s31507; GFX90A-NEXT:    s_mov_b32 s2, s41508; GFX90A-NEXT:    s_mov_b32 s3, s51509; GFX90A-NEXT:    s_mov_b32 s4, s61510; GFX90A-NEXT:    s_mov_b32 s5, s71511; GFX90A-NEXT:    s_mov_b32 s6, s81512; GFX90A-NEXT:    s_mov_b32 s7, s91513; GFX90A-NEXT:    v_mov_b32_e32 v4, v11514; GFX90A-NEXT:    v_mov_b32_e32 v5, v21515; GFX90A-NEXT:    v_mov_b32_e32 v6, v31516; GFX90A-NEXT:    image_atomic_add v0, v[4:6], s[0:7] dmask:0x1 unorm glc da1517; GFX90A-NEXT:    s_waitcnt vmcnt(0)1518; GFX90A-NEXT:    ; return to shader part epilog1519;1520; GFX10PLUS-LABEL: atomic_add_i32_cube:1521; GFX10PLUS:       ; %bb.0: ; %main_body1522; GFX10PLUS-NEXT:    s_mov_b32 s0, s21523; GFX10PLUS-NEXT:    s_mov_b32 s1, s31524; GFX10PLUS-NEXT:    s_mov_b32 s2, s41525; GFX10PLUS-NEXT:    s_mov_b32 s3, s51526; GFX10PLUS-NEXT:    s_mov_b32 s4, s61527; GFX10PLUS-NEXT:    s_mov_b32 s5, s71528; GFX10PLUS-NEXT:    s_mov_b32 s6, s81529; GFX10PLUS-NEXT:    s_mov_b32 s7, s91530; GFX10PLUS-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_CUBE unorm glc1531; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)1532; GFX10PLUS-NEXT:    ; return to shader part epilog1533;1534; GFX12-LABEL: atomic_add_i32_cube:1535; GFX12:       ; %bb.0: ; %main_body1536; GFX12-NEXT:    s_mov_b32 s0, s21537; GFX12-NEXT:    s_mov_b32 s1, s31538; GFX12-NEXT:    s_mov_b32 s2, s41539; GFX12-NEXT:    s_mov_b32 s3, s51540; GFX12-NEXT:    s_mov_b32 s4, s61541; GFX12-NEXT:    s_mov_b32 s5, s71542; GFX12-NEXT:    s_mov_b32 s6, s81543; GFX12-NEXT:    s_mov_b32 s7, s91544; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v2, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_CUBE th:TH_ATOMIC_RETURN1545; GFX12-NEXT:    s_wait_loadcnt 0x01546; GFX12-NEXT:    ; return to shader part epilog1547main_body:1548  %v = call i32 @llvm.amdgcn.image.atomic.add.cube.i32.i32(i32 %data, i32 %s, i32 %t, i32 %face, <8 x i32> %rsrc, i32 0, i32 0)1549  %out = bitcast i32 %v to float1550  ret float %out1551}1552 1553define amdgpu_ps float @atomic_add_i32_1darray(<8 x i32> inreg %rsrc, i32 %data, i32 %s, i32 %slice) {1554; GFX6-LABEL: atomic_add_i32_1darray:1555; GFX6:       ; %bb.0: ; %main_body1556; GFX6-NEXT:    s_mov_b32 s0, s21557; GFX6-NEXT:    s_mov_b32 s1, s31558; GFX6-NEXT:    s_mov_b32 s2, s41559; GFX6-NEXT:    s_mov_b32 s3, s51560; GFX6-NEXT:    s_mov_b32 s4, s61561; GFX6-NEXT:    s_mov_b32 s5, s71562; GFX6-NEXT:    s_mov_b32 s6, s81563; GFX6-NEXT:    s_mov_b32 s7, s91564; GFX6-NEXT:    image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 unorm glc da1565; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)1566; GFX6-NEXT:    ; return to shader part epilog1567;1568; GFX8-LABEL: atomic_add_i32_1darray:1569; GFX8:       ; %bb.0: ; %main_body1570; GFX8-NEXT:    s_mov_b32 s0, s21571; GFX8-NEXT:    s_mov_b32 s1, s31572; GFX8-NEXT:    s_mov_b32 s2, s41573; GFX8-NEXT:    s_mov_b32 s3, s51574; GFX8-NEXT:    s_mov_b32 s4, s61575; GFX8-NEXT:    s_mov_b32 s5, s71576; GFX8-NEXT:    s_mov_b32 s6, s81577; GFX8-NEXT:    s_mov_b32 s7, s91578; GFX8-NEXT:    image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 unorm glc da1579; GFX8-NEXT:    s_waitcnt vmcnt(0)1580; GFX8-NEXT:    ; return to shader part epilog1581;1582; GFX900-LABEL: atomic_add_i32_1darray:1583; GFX900:       ; %bb.0: ; %main_body1584; GFX900-NEXT:    s_mov_b32 s0, s21585; GFX900-NEXT:    s_mov_b32 s1, s31586; GFX900-NEXT:    s_mov_b32 s2, s41587; GFX900-NEXT:    s_mov_b32 s3, s51588; GFX900-NEXT:    s_mov_b32 s4, s61589; GFX900-NEXT:    s_mov_b32 s5, s71590; GFX900-NEXT:    s_mov_b32 s6, s81591; GFX900-NEXT:    s_mov_b32 s7, s91592; GFX900-NEXT:    image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 unorm glc da1593; GFX900-NEXT:    s_waitcnt vmcnt(0)1594; GFX900-NEXT:    ; return to shader part epilog1595;1596; GFX90A-LABEL: atomic_add_i32_1darray:1597; GFX90A:       ; %bb.0: ; %main_body1598; GFX90A-NEXT:    s_mov_b32 s0, s21599; GFX90A-NEXT:    s_mov_b32 s1, s31600; GFX90A-NEXT:    s_mov_b32 s2, s41601; GFX90A-NEXT:    s_mov_b32 s3, s51602; GFX90A-NEXT:    s_mov_b32 s4, s61603; GFX90A-NEXT:    s_mov_b32 s5, s71604; GFX90A-NEXT:    s_mov_b32 s6, s81605; GFX90A-NEXT:    s_mov_b32 s7, s91606; GFX90A-NEXT:    v_mov_b32_e32 v4, v11607; GFX90A-NEXT:    v_mov_b32_e32 v5, v21608; GFX90A-NEXT:    image_atomic_add v0, v[4:5], s[0:7] dmask:0x1 unorm glc da1609; GFX90A-NEXT:    s_waitcnt vmcnt(0)1610; GFX90A-NEXT:    ; return to shader part epilog1611;1612; GFX10PLUS-LABEL: atomic_add_i32_1darray:1613; GFX10PLUS:       ; %bb.0: ; %main_body1614; GFX10PLUS-NEXT:    s_mov_b32 s0, s21615; GFX10PLUS-NEXT:    s_mov_b32 s1, s31616; GFX10PLUS-NEXT:    s_mov_b32 s2, s41617; GFX10PLUS-NEXT:    s_mov_b32 s3, s51618; GFX10PLUS-NEXT:    s_mov_b32 s4, s61619; GFX10PLUS-NEXT:    s_mov_b32 s5, s71620; GFX10PLUS-NEXT:    s_mov_b32 s6, s81621; GFX10PLUS-NEXT:    s_mov_b32 s7, s91622; GFX10PLUS-NEXT:    image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D_ARRAY unorm glc1623; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)1624; GFX10PLUS-NEXT:    ; return to shader part epilog1625;1626; GFX12-LABEL: atomic_add_i32_1darray:1627; GFX12:       ; %bb.0: ; %main_body1628; GFX12-NEXT:    s_mov_b32 s0, s21629; GFX12-NEXT:    s_mov_b32 s1, s31630; GFX12-NEXT:    s_mov_b32 s2, s41631; GFX12-NEXT:    s_mov_b32 s3, s51632; GFX12-NEXT:    s_mov_b32 s4, s61633; GFX12-NEXT:    s_mov_b32 s5, s71634; GFX12-NEXT:    s_mov_b32 s6, s81635; GFX12-NEXT:    s_mov_b32 s7, s91636; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D_ARRAY th:TH_ATOMIC_RETURN1637; GFX12-NEXT:    s_wait_loadcnt 0x01638; GFX12-NEXT:    ; return to shader part epilog1639main_body:1640  %v = call i32 @llvm.amdgcn.image.atomic.add.1darray.i32.i32(i32 %data, i32 %s, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)1641  %out = bitcast i32 %v to float1642  ret float %out1643}1644 1645define amdgpu_ps float @atomic_add_i32_2darray(<8 x i32> inreg %rsrc, i32 %data, i32 %s, i32 %t, i32 %slice) {1646; GFX6-LABEL: atomic_add_i32_2darray:1647; GFX6:       ; %bb.0: ; %main_body1648; GFX6-NEXT:    s_mov_b32 s0, s21649; GFX6-NEXT:    s_mov_b32 s1, s31650; GFX6-NEXT:    s_mov_b32 s2, s41651; GFX6-NEXT:    s_mov_b32 s3, s51652; GFX6-NEXT:    s_mov_b32 s4, s61653; GFX6-NEXT:    s_mov_b32 s5, s71654; GFX6-NEXT:    s_mov_b32 s6, s81655; GFX6-NEXT:    s_mov_b32 s7, s91656; GFX6-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc da1657; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)1658; GFX6-NEXT:    ; return to shader part epilog1659;1660; GFX8-LABEL: atomic_add_i32_2darray:1661; GFX8:       ; %bb.0: ; %main_body1662; GFX8-NEXT:    s_mov_b32 s0, s21663; GFX8-NEXT:    s_mov_b32 s1, s31664; GFX8-NEXT:    s_mov_b32 s2, s41665; GFX8-NEXT:    s_mov_b32 s3, s51666; GFX8-NEXT:    s_mov_b32 s4, s61667; GFX8-NEXT:    s_mov_b32 s5, s71668; GFX8-NEXT:    s_mov_b32 s6, s81669; GFX8-NEXT:    s_mov_b32 s7, s91670; GFX8-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc da1671; GFX8-NEXT:    s_waitcnt vmcnt(0)1672; GFX8-NEXT:    ; return to shader part epilog1673;1674; GFX900-LABEL: atomic_add_i32_2darray:1675; GFX900:       ; %bb.0: ; %main_body1676; GFX900-NEXT:    s_mov_b32 s0, s21677; GFX900-NEXT:    s_mov_b32 s1, s31678; GFX900-NEXT:    s_mov_b32 s2, s41679; GFX900-NEXT:    s_mov_b32 s3, s51680; GFX900-NEXT:    s_mov_b32 s4, s61681; GFX900-NEXT:    s_mov_b32 s5, s71682; GFX900-NEXT:    s_mov_b32 s6, s81683; GFX900-NEXT:    s_mov_b32 s7, s91684; GFX900-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc da1685; GFX900-NEXT:    s_waitcnt vmcnt(0)1686; GFX900-NEXT:    ; return to shader part epilog1687;1688; GFX90A-LABEL: atomic_add_i32_2darray:1689; GFX90A:       ; %bb.0: ; %main_body1690; GFX90A-NEXT:    s_mov_b32 s0, s21691; GFX90A-NEXT:    s_mov_b32 s1, s31692; GFX90A-NEXT:    s_mov_b32 s2, s41693; GFX90A-NEXT:    s_mov_b32 s3, s51694; GFX90A-NEXT:    s_mov_b32 s4, s61695; GFX90A-NEXT:    s_mov_b32 s5, s71696; GFX90A-NEXT:    s_mov_b32 s6, s81697; GFX90A-NEXT:    s_mov_b32 s7, s91698; GFX90A-NEXT:    v_mov_b32_e32 v4, v11699; GFX90A-NEXT:    v_mov_b32_e32 v5, v21700; GFX90A-NEXT:    v_mov_b32_e32 v6, v31701; GFX90A-NEXT:    image_atomic_add v0, v[4:6], s[0:7] dmask:0x1 unorm glc da1702; GFX90A-NEXT:    s_waitcnt vmcnt(0)1703; GFX90A-NEXT:    ; return to shader part epilog1704;1705; GFX10PLUS-LABEL: atomic_add_i32_2darray:1706; GFX10PLUS:       ; %bb.0: ; %main_body1707; GFX10PLUS-NEXT:    s_mov_b32 s0, s21708; GFX10PLUS-NEXT:    s_mov_b32 s1, s31709; GFX10PLUS-NEXT:    s_mov_b32 s2, s41710; GFX10PLUS-NEXT:    s_mov_b32 s3, s51711; GFX10PLUS-NEXT:    s_mov_b32 s4, s61712; GFX10PLUS-NEXT:    s_mov_b32 s5, s71713; GFX10PLUS-NEXT:    s_mov_b32 s6, s81714; GFX10PLUS-NEXT:    s_mov_b32 s7, s91715; GFX10PLUS-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_ARRAY unorm glc1716; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)1717; GFX10PLUS-NEXT:    ; return to shader part epilog1718;1719; GFX12-LABEL: atomic_add_i32_2darray:1720; GFX12:       ; %bb.0: ; %main_body1721; GFX12-NEXT:    s_mov_b32 s0, s21722; GFX12-NEXT:    s_mov_b32 s1, s31723; GFX12-NEXT:    s_mov_b32 s2, s41724; GFX12-NEXT:    s_mov_b32 s3, s51725; GFX12-NEXT:    s_mov_b32 s4, s61726; GFX12-NEXT:    s_mov_b32 s5, s71727; GFX12-NEXT:    s_mov_b32 s6, s81728; GFX12-NEXT:    s_mov_b32 s7, s91729; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v2, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_ARRAY th:TH_ATOMIC_RETURN1730; GFX12-NEXT:    s_wait_loadcnt 0x01731; GFX12-NEXT:    ; return to shader part epilog1732main_body:1733  %v = call i32 @llvm.amdgcn.image.atomic.add.2darray.i32.i32(i32 %data, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)1734  %out = bitcast i32 %v to float1735  ret float %out1736}1737 1738define amdgpu_ps float @atomic_add_i32_2dmsaa(<8 x i32> inreg %rsrc, i32 %data, i32 %s, i32 %t, i32 %fragid) {1739; GFX6-LABEL: atomic_add_i32_2dmsaa:1740; GFX6:       ; %bb.0: ; %main_body1741; GFX6-NEXT:    s_mov_b32 s0, s21742; GFX6-NEXT:    s_mov_b32 s1, s31743; GFX6-NEXT:    s_mov_b32 s2, s41744; GFX6-NEXT:    s_mov_b32 s3, s51745; GFX6-NEXT:    s_mov_b32 s4, s61746; GFX6-NEXT:    s_mov_b32 s5, s71747; GFX6-NEXT:    s_mov_b32 s6, s81748; GFX6-NEXT:    s_mov_b32 s7, s91749; GFX6-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc1750; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)1751; GFX6-NEXT:    ; return to shader part epilog1752;1753; GFX8-LABEL: atomic_add_i32_2dmsaa:1754; GFX8:       ; %bb.0: ; %main_body1755; GFX8-NEXT:    s_mov_b32 s0, s21756; GFX8-NEXT:    s_mov_b32 s1, s31757; GFX8-NEXT:    s_mov_b32 s2, s41758; GFX8-NEXT:    s_mov_b32 s3, s51759; GFX8-NEXT:    s_mov_b32 s4, s61760; GFX8-NEXT:    s_mov_b32 s5, s71761; GFX8-NEXT:    s_mov_b32 s6, s81762; GFX8-NEXT:    s_mov_b32 s7, s91763; GFX8-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc1764; GFX8-NEXT:    s_waitcnt vmcnt(0)1765; GFX8-NEXT:    ; return to shader part epilog1766;1767; GFX900-LABEL: atomic_add_i32_2dmsaa:1768; GFX900:       ; %bb.0: ; %main_body1769; GFX900-NEXT:    s_mov_b32 s0, s21770; GFX900-NEXT:    s_mov_b32 s1, s31771; GFX900-NEXT:    s_mov_b32 s2, s41772; GFX900-NEXT:    s_mov_b32 s3, s51773; GFX900-NEXT:    s_mov_b32 s4, s61774; GFX900-NEXT:    s_mov_b32 s5, s71775; GFX900-NEXT:    s_mov_b32 s6, s81776; GFX900-NEXT:    s_mov_b32 s7, s91777; GFX900-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc1778; GFX900-NEXT:    s_waitcnt vmcnt(0)1779; GFX900-NEXT:    ; return to shader part epilog1780;1781; GFX90A-LABEL: atomic_add_i32_2dmsaa:1782; GFX90A:       ; %bb.0: ; %main_body1783; GFX90A-NEXT:    s_mov_b32 s0, s21784; GFX90A-NEXT:    s_mov_b32 s1, s31785; GFX90A-NEXT:    s_mov_b32 s2, s41786; GFX90A-NEXT:    s_mov_b32 s3, s51787; GFX90A-NEXT:    s_mov_b32 s4, s61788; GFX90A-NEXT:    s_mov_b32 s5, s71789; GFX90A-NEXT:    s_mov_b32 s6, s81790; GFX90A-NEXT:    s_mov_b32 s7, s91791; GFX90A-NEXT:    v_mov_b32_e32 v4, v11792; GFX90A-NEXT:    v_mov_b32_e32 v5, v21793; GFX90A-NEXT:    v_mov_b32_e32 v6, v31794; GFX90A-NEXT:    image_atomic_add v0, v[4:6], s[0:7] dmask:0x1 unorm glc1795; GFX90A-NEXT:    s_waitcnt vmcnt(0)1796; GFX90A-NEXT:    ; return to shader part epilog1797;1798; GFX10PLUS-LABEL: atomic_add_i32_2dmsaa:1799; GFX10PLUS:       ; %bb.0: ; %main_body1800; GFX10PLUS-NEXT:    s_mov_b32 s0, s21801; GFX10PLUS-NEXT:    s_mov_b32 s1, s31802; GFX10PLUS-NEXT:    s_mov_b32 s2, s41803; GFX10PLUS-NEXT:    s_mov_b32 s3, s51804; GFX10PLUS-NEXT:    s_mov_b32 s4, s61805; GFX10PLUS-NEXT:    s_mov_b32 s5, s71806; GFX10PLUS-NEXT:    s_mov_b32 s6, s81807; GFX10PLUS-NEXT:    s_mov_b32 s7, s91808; GFX10PLUS-NEXT:    image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm glc1809; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)1810; GFX10PLUS-NEXT:    ; return to shader part epilog1811;1812; GFX12-LABEL: atomic_add_i32_2dmsaa:1813; GFX12:       ; %bb.0: ; %main_body1814; GFX12-NEXT:    s_mov_b32 s0, s21815; GFX12-NEXT:    s_mov_b32 s1, s31816; GFX12-NEXT:    s_mov_b32 s2, s41817; GFX12-NEXT:    s_mov_b32 s3, s51818; GFX12-NEXT:    s_mov_b32 s4, s61819; GFX12-NEXT:    s_mov_b32 s5, s71820; GFX12-NEXT:    s_mov_b32 s6, s81821; GFX12-NEXT:    s_mov_b32 s7, s91822; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v2, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA th:TH_ATOMIC_RETURN1823; GFX12-NEXT:    s_wait_loadcnt 0x01824; GFX12-NEXT:    ; return to shader part epilog1825main_body:1826  %v = call i32 @llvm.amdgcn.image.atomic.add.2dmsaa.i32.i32(i32 %data, i32 %s, i32 %t, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0)1827  %out = bitcast i32 %v to float1828  ret float %out1829}1830 1831define amdgpu_ps float @atomic_add_i32_2darraymsaa(<8 x i32> inreg %rsrc, i32 %data, i32 %s, i32 %t, i32 %slice, i32 %fragid) {1832; GFX6-LABEL: atomic_add_i32_2darraymsaa:1833; GFX6:       ; %bb.0: ; %main_body1834; GFX6-NEXT:    s_mov_b32 s0, s21835; GFX6-NEXT:    s_mov_b32 s1, s31836; GFX6-NEXT:    s_mov_b32 s2, s41837; GFX6-NEXT:    s_mov_b32 s3, s51838; GFX6-NEXT:    s_mov_b32 s4, s61839; GFX6-NEXT:    s_mov_b32 s5, s71840; GFX6-NEXT:    s_mov_b32 s6, s81841; GFX6-NEXT:    s_mov_b32 s7, s91842; GFX6-NEXT:    image_atomic_add v0, v[1:4], s[0:7] dmask:0x1 unorm glc da1843; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)1844; GFX6-NEXT:    ; return to shader part epilog1845;1846; GFX8-LABEL: atomic_add_i32_2darraymsaa:1847; GFX8:       ; %bb.0: ; %main_body1848; GFX8-NEXT:    s_mov_b32 s0, s21849; GFX8-NEXT:    s_mov_b32 s1, s31850; GFX8-NEXT:    s_mov_b32 s2, s41851; GFX8-NEXT:    s_mov_b32 s3, s51852; GFX8-NEXT:    s_mov_b32 s4, s61853; GFX8-NEXT:    s_mov_b32 s5, s71854; GFX8-NEXT:    s_mov_b32 s6, s81855; GFX8-NEXT:    s_mov_b32 s7, s91856; GFX8-NEXT:    image_atomic_add v0, v[1:4], s[0:7] dmask:0x1 unorm glc da1857; GFX8-NEXT:    s_waitcnt vmcnt(0)1858; GFX8-NEXT:    ; return to shader part epilog1859;1860; GFX900-LABEL: atomic_add_i32_2darraymsaa:1861; GFX900:       ; %bb.0: ; %main_body1862; GFX900-NEXT:    s_mov_b32 s0, s21863; GFX900-NEXT:    s_mov_b32 s1, s31864; GFX900-NEXT:    s_mov_b32 s2, s41865; GFX900-NEXT:    s_mov_b32 s3, s51866; GFX900-NEXT:    s_mov_b32 s4, s61867; GFX900-NEXT:    s_mov_b32 s5, s71868; GFX900-NEXT:    s_mov_b32 s6, s81869; GFX900-NEXT:    s_mov_b32 s7, s91870; GFX900-NEXT:    image_atomic_add v0, v[1:4], s[0:7] dmask:0x1 unorm glc da1871; GFX900-NEXT:    s_waitcnt vmcnt(0)1872; GFX900-NEXT:    ; return to shader part epilog1873;1874; GFX90A-LABEL: atomic_add_i32_2darraymsaa:1875; GFX90A:       ; %bb.0: ; %main_body1876; GFX90A-NEXT:    s_mov_b32 s0, s21877; GFX90A-NEXT:    s_mov_b32 s1, s31878; GFX90A-NEXT:    s_mov_b32 s2, s41879; GFX90A-NEXT:    s_mov_b32 s3, s51880; GFX90A-NEXT:    s_mov_b32 s4, s61881; GFX90A-NEXT:    s_mov_b32 s5, s71882; GFX90A-NEXT:    s_mov_b32 s6, s81883; GFX90A-NEXT:    s_mov_b32 s7, s91884; GFX90A-NEXT:    v_mov_b32_e32 v6, v11885; GFX90A-NEXT:    v_mov_b32_e32 v7, v21886; GFX90A-NEXT:    v_mov_b32_e32 v8, v31887; GFX90A-NEXT:    v_mov_b32_e32 v9, v41888; GFX90A-NEXT:    image_atomic_add v0, v[6:9], s[0:7] dmask:0x1 unorm glc da1889; GFX90A-NEXT:    s_waitcnt vmcnt(0)1890; GFX90A-NEXT:    ; return to shader part epilog1891;1892; GFX10PLUS-LABEL: atomic_add_i32_2darraymsaa:1893; GFX10PLUS:       ; %bb.0: ; %main_body1894; GFX10PLUS-NEXT:    s_mov_b32 s0, s21895; GFX10PLUS-NEXT:    s_mov_b32 s1, s31896; GFX10PLUS-NEXT:    s_mov_b32 s2, s41897; GFX10PLUS-NEXT:    s_mov_b32 s3, s51898; GFX10PLUS-NEXT:    s_mov_b32 s4, s61899; GFX10PLUS-NEXT:    s_mov_b32 s5, s71900; GFX10PLUS-NEXT:    s_mov_b32 s6, s81901; GFX10PLUS-NEXT:    s_mov_b32 s7, s91902; GFX10PLUS-NEXT:    image_atomic_add v0, v[1:4], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm glc1903; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)1904; GFX10PLUS-NEXT:    ; return to shader part epilog1905;1906; GFX12-LABEL: atomic_add_i32_2darraymsaa:1907; GFX12:       ; %bb.0: ; %main_body1908; GFX12-NEXT:    s_mov_b32 s0, s21909; GFX12-NEXT:    s_mov_b32 s1, s31910; GFX12-NEXT:    s_mov_b32 s2, s41911; GFX12-NEXT:    s_mov_b32 s3, s51912; GFX12-NEXT:    s_mov_b32 s4, s61913; GFX12-NEXT:    s_mov_b32 s5, s71914; GFX12-NEXT:    s_mov_b32 s6, s81915; GFX12-NEXT:    s_mov_b32 s7, s91916; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v2, v3, v4], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY th:TH_ATOMIC_RETURN1917; GFX12-NEXT:    s_wait_loadcnt 0x01918; GFX12-NEXT:    ; return to shader part epilog1919main_body:1920  %v = call i32 @llvm.amdgcn.image.atomic.add.2darraymsaa.i32.i32(i32 %data, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0)1921  %out = bitcast i32 %v to float1922  ret float %out1923}1924 1925define amdgpu_ps float @atomic_add_i32_1d_slc(<8 x i32> inreg %rsrc, i32 %data, i32 %s) {1926; GFX6-LABEL: atomic_add_i32_1d_slc:1927; GFX6:       ; %bb.0: ; %main_body1928; GFX6-NEXT:    s_mov_b32 s0, s21929; GFX6-NEXT:    s_mov_b32 s1, s31930; GFX6-NEXT:    s_mov_b32 s2, s41931; GFX6-NEXT:    s_mov_b32 s3, s51932; GFX6-NEXT:    s_mov_b32 s4, s61933; GFX6-NEXT:    s_mov_b32 s5, s71934; GFX6-NEXT:    s_mov_b32 s6, s81935; GFX6-NEXT:    s_mov_b32 s7, s91936; GFX6-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc slc1937; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)1938; GFX6-NEXT:    ; return to shader part epilog1939;1940; GFX8-LABEL: atomic_add_i32_1d_slc:1941; GFX8:       ; %bb.0: ; %main_body1942; GFX8-NEXT:    s_mov_b32 s0, s21943; GFX8-NEXT:    s_mov_b32 s1, s31944; GFX8-NEXT:    s_mov_b32 s2, s41945; GFX8-NEXT:    s_mov_b32 s3, s51946; GFX8-NEXT:    s_mov_b32 s4, s61947; GFX8-NEXT:    s_mov_b32 s5, s71948; GFX8-NEXT:    s_mov_b32 s6, s81949; GFX8-NEXT:    s_mov_b32 s7, s91950; GFX8-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc slc1951; GFX8-NEXT:    s_waitcnt vmcnt(0)1952; GFX8-NEXT:    ; return to shader part epilog1953;1954; GFX900-LABEL: atomic_add_i32_1d_slc:1955; GFX900:       ; %bb.0: ; %main_body1956; GFX900-NEXT:    s_mov_b32 s0, s21957; GFX900-NEXT:    s_mov_b32 s1, s31958; GFX900-NEXT:    s_mov_b32 s2, s41959; GFX900-NEXT:    s_mov_b32 s3, s51960; GFX900-NEXT:    s_mov_b32 s4, s61961; GFX900-NEXT:    s_mov_b32 s5, s71962; GFX900-NEXT:    s_mov_b32 s6, s81963; GFX900-NEXT:    s_mov_b32 s7, s91964; GFX900-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc slc1965; GFX900-NEXT:    s_waitcnt vmcnt(0)1966; GFX900-NEXT:    ; return to shader part epilog1967;1968; GFX90A-LABEL: atomic_add_i32_1d_slc:1969; GFX90A:       ; %bb.0: ; %main_body1970; GFX90A-NEXT:    s_mov_b32 s0, s21971; GFX90A-NEXT:    s_mov_b32 s1, s31972; GFX90A-NEXT:    s_mov_b32 s2, s41973; GFX90A-NEXT:    s_mov_b32 s3, s51974; GFX90A-NEXT:    s_mov_b32 s4, s61975; GFX90A-NEXT:    s_mov_b32 s5, s71976; GFX90A-NEXT:    s_mov_b32 s6, s81977; GFX90A-NEXT:    s_mov_b32 s7, s91978; GFX90A-NEXT:    v_mov_b32_e32 v2, v11979; GFX90A-NEXT:    image_atomic_add v0, v2, s[0:7] dmask:0x1 unorm glc slc1980; GFX90A-NEXT:    s_waitcnt vmcnt(0)1981; GFX90A-NEXT:    ; return to shader part epilog1982;1983; GFX10PLUS-LABEL: atomic_add_i32_1d_slc:1984; GFX10PLUS:       ; %bb.0: ; %main_body1985; GFX10PLUS-NEXT:    s_mov_b32 s0, s21986; GFX10PLUS-NEXT:    s_mov_b32 s1, s31987; GFX10PLUS-NEXT:    s_mov_b32 s2, s41988; GFX10PLUS-NEXT:    s_mov_b32 s3, s51989; GFX10PLUS-NEXT:    s_mov_b32 s4, s61990; GFX10PLUS-NEXT:    s_mov_b32 s5, s71991; GFX10PLUS-NEXT:    s_mov_b32 s6, s81992; GFX10PLUS-NEXT:    s_mov_b32 s7, s91993; GFX10PLUS-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc slc1994; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)1995; GFX10PLUS-NEXT:    ; return to shader part epilog1996;1997; GFX12-LABEL: atomic_add_i32_1d_slc:1998; GFX12:       ; %bb.0: ; %main_body1999; GFX12-NEXT:    s_mov_b32 s0, s22000; GFX12-NEXT:    s_mov_b32 s1, s32001; GFX12-NEXT:    s_mov_b32 s2, s42002; GFX12-NEXT:    s_mov_b32 s3, s52003; GFX12-NEXT:    s_mov_b32 s4, s62004; GFX12-NEXT:    s_mov_b32 s5, s72005; GFX12-NEXT:    s_mov_b32 s6, s82006; GFX12-NEXT:    s_mov_b32 s7, s92007; GFX12-NEXT:    image_atomic_add_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_NT_RETURN2008; GFX12-NEXT:    s_wait_loadcnt 0x02009; GFX12-NEXT:    ; return to shader part epilog2010main_body:2011  %v = call i32 @llvm.amdgcn.image.atomic.add.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 2)2012  %out = bitcast i32 %v to float2013  ret float %out2014}2015 2016define amdgpu_ps <2 x float> @atomic_swap_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) {2017; GFX6-LABEL: atomic_swap_i64_1d:2018; GFX6:       ; %bb.0: ; %main_body2019; GFX6-NEXT:    s_mov_b32 s0, s22020; GFX6-NEXT:    s_mov_b32 s1, s32021; GFX6-NEXT:    s_mov_b32 s2, s42022; GFX6-NEXT:    s_mov_b32 s3, s52023; GFX6-NEXT:    s_mov_b32 s4, s62024; GFX6-NEXT:    s_mov_b32 s5, s72025; GFX6-NEXT:    s_mov_b32 s6, s82026; GFX6-NEXT:    s_mov_b32 s7, s92027; GFX6-NEXT:    image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 unorm glc2028; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)2029; GFX6-NEXT:    ; return to shader part epilog2030;2031; GFX8-LABEL: atomic_swap_i64_1d:2032; GFX8:       ; %bb.0: ; %main_body2033; GFX8-NEXT:    s_mov_b32 s0, s22034; GFX8-NEXT:    s_mov_b32 s1, s32035; GFX8-NEXT:    s_mov_b32 s2, s42036; GFX8-NEXT:    s_mov_b32 s3, s52037; GFX8-NEXT:    s_mov_b32 s4, s62038; GFX8-NEXT:    s_mov_b32 s5, s72039; GFX8-NEXT:    s_mov_b32 s6, s82040; GFX8-NEXT:    s_mov_b32 s7, s92041; GFX8-NEXT:    image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 unorm glc2042; GFX8-NEXT:    s_waitcnt vmcnt(0)2043; GFX8-NEXT:    ; return to shader part epilog2044;2045; GFX900-LABEL: atomic_swap_i64_1d:2046; GFX900:       ; %bb.0: ; %main_body2047; GFX900-NEXT:    s_mov_b32 s0, s22048; GFX900-NEXT:    s_mov_b32 s1, s32049; GFX900-NEXT:    s_mov_b32 s2, s42050; GFX900-NEXT:    s_mov_b32 s3, s52051; GFX900-NEXT:    s_mov_b32 s4, s62052; GFX900-NEXT:    s_mov_b32 s5, s72053; GFX900-NEXT:    s_mov_b32 s6, s82054; GFX900-NEXT:    s_mov_b32 s7, s92055; GFX900-NEXT:    image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 unorm glc2056; GFX900-NEXT:    s_waitcnt vmcnt(0)2057; GFX900-NEXT:    ; return to shader part epilog2058;2059; GFX90A-LABEL: atomic_swap_i64_1d:2060; GFX90A:       ; %bb.0: ; %main_body2061; GFX90A-NEXT:    s_mov_b32 s0, s22062; GFX90A-NEXT:    s_mov_b32 s1, s32063; GFX90A-NEXT:    s_mov_b32 s2, s42064; GFX90A-NEXT:    s_mov_b32 s3, s52065; GFX90A-NEXT:    s_mov_b32 s4, s62066; GFX90A-NEXT:    s_mov_b32 s5, s72067; GFX90A-NEXT:    s_mov_b32 s6, s82068; GFX90A-NEXT:    s_mov_b32 s7, s92069; GFX90A-NEXT:    image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 unorm glc2070; GFX90A-NEXT:    s_waitcnt vmcnt(0)2071; GFX90A-NEXT:    ; return to shader part epilog2072;2073; GFX10PLUS-LABEL: atomic_swap_i64_1d:2074; GFX10PLUS:       ; %bb.0: ; %main_body2075; GFX10PLUS-NEXT:    s_mov_b32 s0, s22076; GFX10PLUS-NEXT:    s_mov_b32 s1, s32077; GFX10PLUS-NEXT:    s_mov_b32 s2, s42078; GFX10PLUS-NEXT:    s_mov_b32 s3, s52079; GFX10PLUS-NEXT:    s_mov_b32 s4, s62080; GFX10PLUS-NEXT:    s_mov_b32 s5, s72081; GFX10PLUS-NEXT:    s_mov_b32 s6, s82082; GFX10PLUS-NEXT:    s_mov_b32 s7, s92083; GFX10PLUS-NEXT:    image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc2084; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)2085; GFX10PLUS-NEXT:    ; return to shader part epilog2086;2087; GFX12-LABEL: atomic_swap_i64_1d:2088; GFX12:       ; %bb.0: ; %main_body2089; GFX12-NEXT:    s_mov_b32 s0, s22090; GFX12-NEXT:    s_mov_b32 s1, s32091; GFX12-NEXT:    s_mov_b32 s2, s42092; GFX12-NEXT:    s_mov_b32 s3, s52093; GFX12-NEXT:    s_mov_b32 s4, s62094; GFX12-NEXT:    s_mov_b32 s5, s72095; GFX12-NEXT:    s_mov_b32 s6, s82096; GFX12-NEXT:    s_mov_b32 s7, s92097; GFX12-NEXT:    image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN2098; GFX12-NEXT:    s_wait_loadcnt 0x02099; GFX12-NEXT:    ; return to shader part epilog2100main_body:2101  %v = call i64 @llvm.amdgcn.image.atomic.swap.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)2102  %out = bitcast i64 %v to <2 x float>2103  ret <2 x float> %out2104}2105 2106define amdgpu_ps <2 x float> @atomic_add_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) {2107; GFX6-LABEL: atomic_add_i64_1d:2108; GFX6:       ; %bb.0: ; %main_body2109; GFX6-NEXT:    s_mov_b32 s0, s22110; GFX6-NEXT:    s_mov_b32 s1, s32111; GFX6-NEXT:    s_mov_b32 s2, s42112; GFX6-NEXT:    s_mov_b32 s3, s52113; GFX6-NEXT:    s_mov_b32 s4, s62114; GFX6-NEXT:    s_mov_b32 s5, s72115; GFX6-NEXT:    s_mov_b32 s6, s82116; GFX6-NEXT:    s_mov_b32 s7, s92117; GFX6-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc2118; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)2119; GFX6-NEXT:    ; return to shader part epilog2120;2121; GFX8-LABEL: atomic_add_i64_1d:2122; GFX8:       ; %bb.0: ; %main_body2123; GFX8-NEXT:    s_mov_b32 s0, s22124; GFX8-NEXT:    s_mov_b32 s1, s32125; GFX8-NEXT:    s_mov_b32 s2, s42126; GFX8-NEXT:    s_mov_b32 s3, s52127; GFX8-NEXT:    s_mov_b32 s4, s62128; GFX8-NEXT:    s_mov_b32 s5, s72129; GFX8-NEXT:    s_mov_b32 s6, s82130; GFX8-NEXT:    s_mov_b32 s7, s92131; GFX8-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc2132; GFX8-NEXT:    s_waitcnt vmcnt(0)2133; GFX8-NEXT:    ; return to shader part epilog2134;2135; GFX900-LABEL: atomic_add_i64_1d:2136; GFX900:       ; %bb.0: ; %main_body2137; GFX900-NEXT:    s_mov_b32 s0, s22138; GFX900-NEXT:    s_mov_b32 s1, s32139; GFX900-NEXT:    s_mov_b32 s2, s42140; GFX900-NEXT:    s_mov_b32 s3, s52141; GFX900-NEXT:    s_mov_b32 s4, s62142; GFX900-NEXT:    s_mov_b32 s5, s72143; GFX900-NEXT:    s_mov_b32 s6, s82144; GFX900-NEXT:    s_mov_b32 s7, s92145; GFX900-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc2146; GFX900-NEXT:    s_waitcnt vmcnt(0)2147; GFX900-NEXT:    ; return to shader part epilog2148;2149; GFX90A-LABEL: atomic_add_i64_1d:2150; GFX90A:       ; %bb.0: ; %main_body2151; GFX90A-NEXT:    s_mov_b32 s0, s22152; GFX90A-NEXT:    s_mov_b32 s1, s32153; GFX90A-NEXT:    s_mov_b32 s2, s42154; GFX90A-NEXT:    s_mov_b32 s3, s52155; GFX90A-NEXT:    s_mov_b32 s4, s62156; GFX90A-NEXT:    s_mov_b32 s5, s72157; GFX90A-NEXT:    s_mov_b32 s6, s82158; GFX90A-NEXT:    s_mov_b32 s7, s92159; GFX90A-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc2160; GFX90A-NEXT:    s_waitcnt vmcnt(0)2161; GFX90A-NEXT:    ; return to shader part epilog2162;2163; GFX10PLUS-LABEL: atomic_add_i64_1d:2164; GFX10PLUS:       ; %bb.0: ; %main_body2165; GFX10PLUS-NEXT:    s_mov_b32 s0, s22166; GFX10PLUS-NEXT:    s_mov_b32 s1, s32167; GFX10PLUS-NEXT:    s_mov_b32 s2, s42168; GFX10PLUS-NEXT:    s_mov_b32 s3, s52169; GFX10PLUS-NEXT:    s_mov_b32 s4, s62170; GFX10PLUS-NEXT:    s_mov_b32 s5, s72171; GFX10PLUS-NEXT:    s_mov_b32 s6, s82172; GFX10PLUS-NEXT:    s_mov_b32 s7, s92173; GFX10PLUS-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc2174; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)2175; GFX10PLUS-NEXT:    ; return to shader part epilog2176;2177; GFX12-LABEL: atomic_add_i64_1d:2178; GFX12:       ; %bb.0: ; %main_body2179; GFX12-NEXT:    s_mov_b32 s0, s22180; GFX12-NEXT:    s_mov_b32 s1, s32181; GFX12-NEXT:    s_mov_b32 s2, s42182; GFX12-NEXT:    s_mov_b32 s3, s52183; GFX12-NEXT:    s_mov_b32 s4, s62184; GFX12-NEXT:    s_mov_b32 s5, s72185; GFX12-NEXT:    s_mov_b32 s6, s82186; GFX12-NEXT:    s_mov_b32 s7, s92187; GFX12-NEXT:    image_atomic_add_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN2188; GFX12-NEXT:    s_wait_loadcnt 0x02189; GFX12-NEXT:    ; return to shader part epilog2190main_body:2191  %v = call i64 @llvm.amdgcn.image.atomic.add.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)2192  %out = bitcast i64 %v to <2 x float>2193  ret <2 x float> %out2194}2195 2196define amdgpu_ps <2 x float> @atomic_sub_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) {2197; GFX6-LABEL: atomic_sub_i64_1d:2198; GFX6:       ; %bb.0: ; %main_body2199; GFX6-NEXT:    s_mov_b32 s0, s22200; GFX6-NEXT:    s_mov_b32 s1, s32201; GFX6-NEXT:    s_mov_b32 s2, s42202; GFX6-NEXT:    s_mov_b32 s3, s52203; GFX6-NEXT:    s_mov_b32 s4, s62204; GFX6-NEXT:    s_mov_b32 s5, s72205; GFX6-NEXT:    s_mov_b32 s6, s82206; GFX6-NEXT:    s_mov_b32 s7, s92207; GFX6-NEXT:    image_atomic_sub v[0:1], v2, s[0:7] dmask:0x3 unorm glc2208; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)2209; GFX6-NEXT:    ; return to shader part epilog2210;2211; GFX8-LABEL: atomic_sub_i64_1d:2212; GFX8:       ; %bb.0: ; %main_body2213; GFX8-NEXT:    s_mov_b32 s0, s22214; GFX8-NEXT:    s_mov_b32 s1, s32215; GFX8-NEXT:    s_mov_b32 s2, s42216; GFX8-NEXT:    s_mov_b32 s3, s52217; GFX8-NEXT:    s_mov_b32 s4, s62218; GFX8-NEXT:    s_mov_b32 s5, s72219; GFX8-NEXT:    s_mov_b32 s6, s82220; GFX8-NEXT:    s_mov_b32 s7, s92221; GFX8-NEXT:    image_atomic_sub v[0:1], v2, s[0:7] dmask:0x3 unorm glc2222; GFX8-NEXT:    s_waitcnt vmcnt(0)2223; GFX8-NEXT:    ; return to shader part epilog2224;2225; GFX900-LABEL: atomic_sub_i64_1d:2226; GFX900:       ; %bb.0: ; %main_body2227; GFX900-NEXT:    s_mov_b32 s0, s22228; GFX900-NEXT:    s_mov_b32 s1, s32229; GFX900-NEXT:    s_mov_b32 s2, s42230; GFX900-NEXT:    s_mov_b32 s3, s52231; GFX900-NEXT:    s_mov_b32 s4, s62232; GFX900-NEXT:    s_mov_b32 s5, s72233; GFX900-NEXT:    s_mov_b32 s6, s82234; GFX900-NEXT:    s_mov_b32 s7, s92235; GFX900-NEXT:    image_atomic_sub v[0:1], v2, s[0:7] dmask:0x3 unorm glc2236; GFX900-NEXT:    s_waitcnt vmcnt(0)2237; GFX900-NEXT:    ; return to shader part epilog2238;2239; GFX90A-LABEL: atomic_sub_i64_1d:2240; GFX90A:       ; %bb.0: ; %main_body2241; GFX90A-NEXT:    s_mov_b32 s0, s22242; GFX90A-NEXT:    s_mov_b32 s1, s32243; GFX90A-NEXT:    s_mov_b32 s2, s42244; GFX90A-NEXT:    s_mov_b32 s3, s52245; GFX90A-NEXT:    s_mov_b32 s4, s62246; GFX90A-NEXT:    s_mov_b32 s5, s72247; GFX90A-NEXT:    s_mov_b32 s6, s82248; GFX90A-NEXT:    s_mov_b32 s7, s92249; GFX90A-NEXT:    image_atomic_sub v[0:1], v2, s[0:7] dmask:0x3 unorm glc2250; GFX90A-NEXT:    s_waitcnt vmcnt(0)2251; GFX90A-NEXT:    ; return to shader part epilog2252;2253; GFX10PLUS-LABEL: atomic_sub_i64_1d:2254; GFX10PLUS:       ; %bb.0: ; %main_body2255; GFX10PLUS-NEXT:    s_mov_b32 s0, s22256; GFX10PLUS-NEXT:    s_mov_b32 s1, s32257; GFX10PLUS-NEXT:    s_mov_b32 s2, s42258; GFX10PLUS-NEXT:    s_mov_b32 s3, s52259; GFX10PLUS-NEXT:    s_mov_b32 s4, s62260; GFX10PLUS-NEXT:    s_mov_b32 s5, s72261; GFX10PLUS-NEXT:    s_mov_b32 s6, s82262; GFX10PLUS-NEXT:    s_mov_b32 s7, s92263; GFX10PLUS-NEXT:    image_atomic_sub v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc2264; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)2265; GFX10PLUS-NEXT:    ; return to shader part epilog2266;2267; GFX12-LABEL: atomic_sub_i64_1d:2268; GFX12:       ; %bb.0: ; %main_body2269; GFX12-NEXT:    s_mov_b32 s0, s22270; GFX12-NEXT:    s_mov_b32 s1, s32271; GFX12-NEXT:    s_mov_b32 s2, s42272; GFX12-NEXT:    s_mov_b32 s3, s52273; GFX12-NEXT:    s_mov_b32 s4, s62274; GFX12-NEXT:    s_mov_b32 s5, s72275; GFX12-NEXT:    s_mov_b32 s6, s82276; GFX12-NEXT:    s_mov_b32 s7, s92277; GFX12-NEXT:    image_atomic_sub_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN2278; GFX12-NEXT:    s_wait_loadcnt 0x02279; GFX12-NEXT:    ; return to shader part epilog2280main_body:2281  %v = call i64 @llvm.amdgcn.image.atomic.sub.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)2282  %out = bitcast i64 %v to <2 x float>2283  ret <2 x float> %out2284}2285 2286define amdgpu_ps <2 x float> @atomic_smin_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) {2287; GFX6-LABEL: atomic_smin_i64_1d:2288; GFX6:       ; %bb.0: ; %main_body2289; GFX6-NEXT:    s_mov_b32 s0, s22290; GFX6-NEXT:    s_mov_b32 s1, s32291; GFX6-NEXT:    s_mov_b32 s2, s42292; GFX6-NEXT:    s_mov_b32 s3, s52293; GFX6-NEXT:    s_mov_b32 s4, s62294; GFX6-NEXT:    s_mov_b32 s5, s72295; GFX6-NEXT:    s_mov_b32 s6, s82296; GFX6-NEXT:    s_mov_b32 s7, s92297; GFX6-NEXT:    image_atomic_smin v[0:1], v2, s[0:7] dmask:0x3 unorm glc2298; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)2299; GFX6-NEXT:    ; return to shader part epilog2300;2301; GFX8-LABEL: atomic_smin_i64_1d:2302; GFX8:       ; %bb.0: ; %main_body2303; GFX8-NEXT:    s_mov_b32 s0, s22304; GFX8-NEXT:    s_mov_b32 s1, s32305; GFX8-NEXT:    s_mov_b32 s2, s42306; GFX8-NEXT:    s_mov_b32 s3, s52307; GFX8-NEXT:    s_mov_b32 s4, s62308; GFX8-NEXT:    s_mov_b32 s5, s72309; GFX8-NEXT:    s_mov_b32 s6, s82310; GFX8-NEXT:    s_mov_b32 s7, s92311; GFX8-NEXT:    image_atomic_smin v[0:1], v2, s[0:7] dmask:0x3 unorm glc2312; GFX8-NEXT:    s_waitcnt vmcnt(0)2313; GFX8-NEXT:    ; return to shader part epilog2314;2315; GFX900-LABEL: atomic_smin_i64_1d:2316; GFX900:       ; %bb.0: ; %main_body2317; GFX900-NEXT:    s_mov_b32 s0, s22318; GFX900-NEXT:    s_mov_b32 s1, s32319; GFX900-NEXT:    s_mov_b32 s2, s42320; GFX900-NEXT:    s_mov_b32 s3, s52321; GFX900-NEXT:    s_mov_b32 s4, s62322; GFX900-NEXT:    s_mov_b32 s5, s72323; GFX900-NEXT:    s_mov_b32 s6, s82324; GFX900-NEXT:    s_mov_b32 s7, s92325; GFX900-NEXT:    image_atomic_smin v[0:1], v2, s[0:7] dmask:0x3 unorm glc2326; GFX900-NEXT:    s_waitcnt vmcnt(0)2327; GFX900-NEXT:    ; return to shader part epilog2328;2329; GFX90A-LABEL: atomic_smin_i64_1d:2330; GFX90A:       ; %bb.0: ; %main_body2331; GFX90A-NEXT:    s_mov_b32 s0, s22332; GFX90A-NEXT:    s_mov_b32 s1, s32333; GFX90A-NEXT:    s_mov_b32 s2, s42334; GFX90A-NEXT:    s_mov_b32 s3, s52335; GFX90A-NEXT:    s_mov_b32 s4, s62336; GFX90A-NEXT:    s_mov_b32 s5, s72337; GFX90A-NEXT:    s_mov_b32 s6, s82338; GFX90A-NEXT:    s_mov_b32 s7, s92339; GFX90A-NEXT:    image_atomic_smin v[0:1], v2, s[0:7] dmask:0x3 unorm glc2340; GFX90A-NEXT:    s_waitcnt vmcnt(0)2341; GFX90A-NEXT:    ; return to shader part epilog2342;2343; GFX10PLUS-LABEL: atomic_smin_i64_1d:2344; GFX10PLUS:       ; %bb.0: ; %main_body2345; GFX10PLUS-NEXT:    s_mov_b32 s0, s22346; GFX10PLUS-NEXT:    s_mov_b32 s1, s32347; GFX10PLUS-NEXT:    s_mov_b32 s2, s42348; GFX10PLUS-NEXT:    s_mov_b32 s3, s52349; GFX10PLUS-NEXT:    s_mov_b32 s4, s62350; GFX10PLUS-NEXT:    s_mov_b32 s5, s72351; GFX10PLUS-NEXT:    s_mov_b32 s6, s82352; GFX10PLUS-NEXT:    s_mov_b32 s7, s92353; GFX10PLUS-NEXT:    image_atomic_smin v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc2354; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)2355; GFX10PLUS-NEXT:    ; return to shader part epilog2356;2357; GFX12-LABEL: atomic_smin_i64_1d:2358; GFX12:       ; %bb.0: ; %main_body2359; GFX12-NEXT:    s_mov_b32 s0, s22360; GFX12-NEXT:    s_mov_b32 s1, s32361; GFX12-NEXT:    s_mov_b32 s2, s42362; GFX12-NEXT:    s_mov_b32 s3, s52363; GFX12-NEXT:    s_mov_b32 s4, s62364; GFX12-NEXT:    s_mov_b32 s5, s72365; GFX12-NEXT:    s_mov_b32 s6, s82366; GFX12-NEXT:    s_mov_b32 s7, s92367; GFX12-NEXT:    image_atomic_min_int v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN2368; GFX12-NEXT:    s_wait_loadcnt 0x02369; GFX12-NEXT:    ; return to shader part epilog2370main_body:2371  %v = call i64 @llvm.amdgcn.image.atomic.smin.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)2372  %out = bitcast i64 %v to <2 x float>2373  ret <2 x float> %out2374}2375 2376define amdgpu_ps <2 x float> @atomic_umin_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) {2377; GFX6-LABEL: atomic_umin_i64_1d:2378; GFX6:       ; %bb.0: ; %main_body2379; GFX6-NEXT:    s_mov_b32 s0, s22380; GFX6-NEXT:    s_mov_b32 s1, s32381; GFX6-NEXT:    s_mov_b32 s2, s42382; GFX6-NEXT:    s_mov_b32 s3, s52383; GFX6-NEXT:    s_mov_b32 s4, s62384; GFX6-NEXT:    s_mov_b32 s5, s72385; GFX6-NEXT:    s_mov_b32 s6, s82386; GFX6-NEXT:    s_mov_b32 s7, s92387; GFX6-NEXT:    image_atomic_umin v[0:1], v2, s[0:7] dmask:0x3 unorm glc2388; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)2389; GFX6-NEXT:    ; return to shader part epilog2390;2391; GFX8-LABEL: atomic_umin_i64_1d:2392; GFX8:       ; %bb.0: ; %main_body2393; GFX8-NEXT:    s_mov_b32 s0, s22394; GFX8-NEXT:    s_mov_b32 s1, s32395; GFX8-NEXT:    s_mov_b32 s2, s42396; GFX8-NEXT:    s_mov_b32 s3, s52397; GFX8-NEXT:    s_mov_b32 s4, s62398; GFX8-NEXT:    s_mov_b32 s5, s72399; GFX8-NEXT:    s_mov_b32 s6, s82400; GFX8-NEXT:    s_mov_b32 s7, s92401; GFX8-NEXT:    image_atomic_umin v[0:1], v2, s[0:7] dmask:0x3 unorm glc2402; GFX8-NEXT:    s_waitcnt vmcnt(0)2403; GFX8-NEXT:    ; return to shader part epilog2404;2405; GFX900-LABEL: atomic_umin_i64_1d:2406; GFX900:       ; %bb.0: ; %main_body2407; GFX900-NEXT:    s_mov_b32 s0, s22408; GFX900-NEXT:    s_mov_b32 s1, s32409; GFX900-NEXT:    s_mov_b32 s2, s42410; GFX900-NEXT:    s_mov_b32 s3, s52411; GFX900-NEXT:    s_mov_b32 s4, s62412; GFX900-NEXT:    s_mov_b32 s5, s72413; GFX900-NEXT:    s_mov_b32 s6, s82414; GFX900-NEXT:    s_mov_b32 s7, s92415; GFX900-NEXT:    image_atomic_umin v[0:1], v2, s[0:7] dmask:0x3 unorm glc2416; GFX900-NEXT:    s_waitcnt vmcnt(0)2417; GFX900-NEXT:    ; return to shader part epilog2418;2419; GFX90A-LABEL: atomic_umin_i64_1d:2420; GFX90A:       ; %bb.0: ; %main_body2421; GFX90A-NEXT:    s_mov_b32 s0, s22422; GFX90A-NEXT:    s_mov_b32 s1, s32423; GFX90A-NEXT:    s_mov_b32 s2, s42424; GFX90A-NEXT:    s_mov_b32 s3, s52425; GFX90A-NEXT:    s_mov_b32 s4, s62426; GFX90A-NEXT:    s_mov_b32 s5, s72427; GFX90A-NEXT:    s_mov_b32 s6, s82428; GFX90A-NEXT:    s_mov_b32 s7, s92429; GFX90A-NEXT:    image_atomic_umin v[0:1], v2, s[0:7] dmask:0x3 unorm glc2430; GFX90A-NEXT:    s_waitcnt vmcnt(0)2431; GFX90A-NEXT:    ; return to shader part epilog2432;2433; GFX10PLUS-LABEL: atomic_umin_i64_1d:2434; GFX10PLUS:       ; %bb.0: ; %main_body2435; GFX10PLUS-NEXT:    s_mov_b32 s0, s22436; GFX10PLUS-NEXT:    s_mov_b32 s1, s32437; GFX10PLUS-NEXT:    s_mov_b32 s2, s42438; GFX10PLUS-NEXT:    s_mov_b32 s3, s52439; GFX10PLUS-NEXT:    s_mov_b32 s4, s62440; GFX10PLUS-NEXT:    s_mov_b32 s5, s72441; GFX10PLUS-NEXT:    s_mov_b32 s6, s82442; GFX10PLUS-NEXT:    s_mov_b32 s7, s92443; GFX10PLUS-NEXT:    image_atomic_umin v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc2444; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)2445; GFX10PLUS-NEXT:    ; return to shader part epilog2446;2447; GFX12-LABEL: atomic_umin_i64_1d:2448; GFX12:       ; %bb.0: ; %main_body2449; GFX12-NEXT:    s_mov_b32 s0, s22450; GFX12-NEXT:    s_mov_b32 s1, s32451; GFX12-NEXT:    s_mov_b32 s2, s42452; GFX12-NEXT:    s_mov_b32 s3, s52453; GFX12-NEXT:    s_mov_b32 s4, s62454; GFX12-NEXT:    s_mov_b32 s5, s72455; GFX12-NEXT:    s_mov_b32 s6, s82456; GFX12-NEXT:    s_mov_b32 s7, s92457; GFX12-NEXT:    image_atomic_min_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN2458; GFX12-NEXT:    s_wait_loadcnt 0x02459; GFX12-NEXT:    ; return to shader part epilog2460main_body:2461  %v = call i64 @llvm.amdgcn.image.atomic.umin.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)2462  %out = bitcast i64 %v to <2 x float>2463  ret <2 x float> %out2464}2465 2466define amdgpu_ps <2 x float> @atomic_smax_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) {2467; GFX6-LABEL: atomic_smax_i64_1d:2468; GFX6:       ; %bb.0: ; %main_body2469; GFX6-NEXT:    s_mov_b32 s0, s22470; GFX6-NEXT:    s_mov_b32 s1, s32471; GFX6-NEXT:    s_mov_b32 s2, s42472; GFX6-NEXT:    s_mov_b32 s3, s52473; GFX6-NEXT:    s_mov_b32 s4, s62474; GFX6-NEXT:    s_mov_b32 s5, s72475; GFX6-NEXT:    s_mov_b32 s6, s82476; GFX6-NEXT:    s_mov_b32 s7, s92477; GFX6-NEXT:    image_atomic_smax v[0:1], v2, s[0:7] dmask:0x3 unorm glc2478; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)2479; GFX6-NEXT:    ; return to shader part epilog2480;2481; GFX8-LABEL: atomic_smax_i64_1d:2482; GFX8:       ; %bb.0: ; %main_body2483; GFX8-NEXT:    s_mov_b32 s0, s22484; GFX8-NEXT:    s_mov_b32 s1, s32485; GFX8-NEXT:    s_mov_b32 s2, s42486; GFX8-NEXT:    s_mov_b32 s3, s52487; GFX8-NEXT:    s_mov_b32 s4, s62488; GFX8-NEXT:    s_mov_b32 s5, s72489; GFX8-NEXT:    s_mov_b32 s6, s82490; GFX8-NEXT:    s_mov_b32 s7, s92491; GFX8-NEXT:    image_atomic_smax v[0:1], v2, s[0:7] dmask:0x3 unorm glc2492; GFX8-NEXT:    s_waitcnt vmcnt(0)2493; GFX8-NEXT:    ; return to shader part epilog2494;2495; GFX900-LABEL: atomic_smax_i64_1d:2496; GFX900:       ; %bb.0: ; %main_body2497; GFX900-NEXT:    s_mov_b32 s0, s22498; GFX900-NEXT:    s_mov_b32 s1, s32499; GFX900-NEXT:    s_mov_b32 s2, s42500; GFX900-NEXT:    s_mov_b32 s3, s52501; GFX900-NEXT:    s_mov_b32 s4, s62502; GFX900-NEXT:    s_mov_b32 s5, s72503; GFX900-NEXT:    s_mov_b32 s6, s82504; GFX900-NEXT:    s_mov_b32 s7, s92505; GFX900-NEXT:    image_atomic_smax v[0:1], v2, s[0:7] dmask:0x3 unorm glc2506; GFX900-NEXT:    s_waitcnt vmcnt(0)2507; GFX900-NEXT:    ; return to shader part epilog2508;2509; GFX90A-LABEL: atomic_smax_i64_1d:2510; GFX90A:       ; %bb.0: ; %main_body2511; GFX90A-NEXT:    s_mov_b32 s0, s22512; GFX90A-NEXT:    s_mov_b32 s1, s32513; GFX90A-NEXT:    s_mov_b32 s2, s42514; GFX90A-NEXT:    s_mov_b32 s3, s52515; GFX90A-NEXT:    s_mov_b32 s4, s62516; GFX90A-NEXT:    s_mov_b32 s5, s72517; GFX90A-NEXT:    s_mov_b32 s6, s82518; GFX90A-NEXT:    s_mov_b32 s7, s92519; GFX90A-NEXT:    image_atomic_smax v[0:1], v2, s[0:7] dmask:0x3 unorm glc2520; GFX90A-NEXT:    s_waitcnt vmcnt(0)2521; GFX90A-NEXT:    ; return to shader part epilog2522;2523; GFX10PLUS-LABEL: atomic_smax_i64_1d:2524; GFX10PLUS:       ; %bb.0: ; %main_body2525; GFX10PLUS-NEXT:    s_mov_b32 s0, s22526; GFX10PLUS-NEXT:    s_mov_b32 s1, s32527; GFX10PLUS-NEXT:    s_mov_b32 s2, s42528; GFX10PLUS-NEXT:    s_mov_b32 s3, s52529; GFX10PLUS-NEXT:    s_mov_b32 s4, s62530; GFX10PLUS-NEXT:    s_mov_b32 s5, s72531; GFX10PLUS-NEXT:    s_mov_b32 s6, s82532; GFX10PLUS-NEXT:    s_mov_b32 s7, s92533; GFX10PLUS-NEXT:    image_atomic_smax v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc2534; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)2535; GFX10PLUS-NEXT:    ; return to shader part epilog2536;2537; GFX12-LABEL: atomic_smax_i64_1d:2538; GFX12:       ; %bb.0: ; %main_body2539; GFX12-NEXT:    s_mov_b32 s0, s22540; GFX12-NEXT:    s_mov_b32 s1, s32541; GFX12-NEXT:    s_mov_b32 s2, s42542; GFX12-NEXT:    s_mov_b32 s3, s52543; GFX12-NEXT:    s_mov_b32 s4, s62544; GFX12-NEXT:    s_mov_b32 s5, s72545; GFX12-NEXT:    s_mov_b32 s6, s82546; GFX12-NEXT:    s_mov_b32 s7, s92547; GFX12-NEXT:    image_atomic_max_int v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN2548; GFX12-NEXT:    s_wait_loadcnt 0x02549; GFX12-NEXT:    ; return to shader part epilog2550main_body:2551  %v = call i64 @llvm.amdgcn.image.atomic.smax.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)2552  %out = bitcast i64 %v to <2 x float>2553  ret <2 x float> %out2554}2555 2556define amdgpu_ps <2 x float> @atomic_umax_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) {2557; GFX6-LABEL: atomic_umax_i64_1d:2558; GFX6:       ; %bb.0: ; %main_body2559; GFX6-NEXT:    s_mov_b32 s0, s22560; GFX6-NEXT:    s_mov_b32 s1, s32561; GFX6-NEXT:    s_mov_b32 s2, s42562; GFX6-NEXT:    s_mov_b32 s3, s52563; GFX6-NEXT:    s_mov_b32 s4, s62564; GFX6-NEXT:    s_mov_b32 s5, s72565; GFX6-NEXT:    s_mov_b32 s6, s82566; GFX6-NEXT:    s_mov_b32 s7, s92567; GFX6-NEXT:    image_atomic_umax v[0:1], v2, s[0:7] dmask:0x3 unorm glc2568; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)2569; GFX6-NEXT:    ; return to shader part epilog2570;2571; GFX8-LABEL: atomic_umax_i64_1d:2572; GFX8:       ; %bb.0: ; %main_body2573; GFX8-NEXT:    s_mov_b32 s0, s22574; GFX8-NEXT:    s_mov_b32 s1, s32575; GFX8-NEXT:    s_mov_b32 s2, s42576; GFX8-NEXT:    s_mov_b32 s3, s52577; GFX8-NEXT:    s_mov_b32 s4, s62578; GFX8-NEXT:    s_mov_b32 s5, s72579; GFX8-NEXT:    s_mov_b32 s6, s82580; GFX8-NEXT:    s_mov_b32 s7, s92581; GFX8-NEXT:    image_atomic_umax v[0:1], v2, s[0:7] dmask:0x3 unorm glc2582; GFX8-NEXT:    s_waitcnt vmcnt(0)2583; GFX8-NEXT:    ; return to shader part epilog2584;2585; GFX900-LABEL: atomic_umax_i64_1d:2586; GFX900:       ; %bb.0: ; %main_body2587; GFX900-NEXT:    s_mov_b32 s0, s22588; GFX900-NEXT:    s_mov_b32 s1, s32589; GFX900-NEXT:    s_mov_b32 s2, s42590; GFX900-NEXT:    s_mov_b32 s3, s52591; GFX900-NEXT:    s_mov_b32 s4, s62592; GFX900-NEXT:    s_mov_b32 s5, s72593; GFX900-NEXT:    s_mov_b32 s6, s82594; GFX900-NEXT:    s_mov_b32 s7, s92595; GFX900-NEXT:    image_atomic_umax v[0:1], v2, s[0:7] dmask:0x3 unorm glc2596; GFX900-NEXT:    s_waitcnt vmcnt(0)2597; GFX900-NEXT:    ; return to shader part epilog2598;2599; GFX90A-LABEL: atomic_umax_i64_1d:2600; GFX90A:       ; %bb.0: ; %main_body2601; GFX90A-NEXT:    s_mov_b32 s0, s22602; GFX90A-NEXT:    s_mov_b32 s1, s32603; GFX90A-NEXT:    s_mov_b32 s2, s42604; GFX90A-NEXT:    s_mov_b32 s3, s52605; GFX90A-NEXT:    s_mov_b32 s4, s62606; GFX90A-NEXT:    s_mov_b32 s5, s72607; GFX90A-NEXT:    s_mov_b32 s6, s82608; GFX90A-NEXT:    s_mov_b32 s7, s92609; GFX90A-NEXT:    image_atomic_umax v[0:1], v2, s[0:7] dmask:0x3 unorm glc2610; GFX90A-NEXT:    s_waitcnt vmcnt(0)2611; GFX90A-NEXT:    ; return to shader part epilog2612;2613; GFX10PLUS-LABEL: atomic_umax_i64_1d:2614; GFX10PLUS:       ; %bb.0: ; %main_body2615; GFX10PLUS-NEXT:    s_mov_b32 s0, s22616; GFX10PLUS-NEXT:    s_mov_b32 s1, s32617; GFX10PLUS-NEXT:    s_mov_b32 s2, s42618; GFX10PLUS-NEXT:    s_mov_b32 s3, s52619; GFX10PLUS-NEXT:    s_mov_b32 s4, s62620; GFX10PLUS-NEXT:    s_mov_b32 s5, s72621; GFX10PLUS-NEXT:    s_mov_b32 s6, s82622; GFX10PLUS-NEXT:    s_mov_b32 s7, s92623; GFX10PLUS-NEXT:    image_atomic_umax v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc2624; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)2625; GFX10PLUS-NEXT:    ; return to shader part epilog2626;2627; GFX12-LABEL: atomic_umax_i64_1d:2628; GFX12:       ; %bb.0: ; %main_body2629; GFX12-NEXT:    s_mov_b32 s0, s22630; GFX12-NEXT:    s_mov_b32 s1, s32631; GFX12-NEXT:    s_mov_b32 s2, s42632; GFX12-NEXT:    s_mov_b32 s3, s52633; GFX12-NEXT:    s_mov_b32 s4, s62634; GFX12-NEXT:    s_mov_b32 s5, s72635; GFX12-NEXT:    s_mov_b32 s6, s82636; GFX12-NEXT:    s_mov_b32 s7, s92637; GFX12-NEXT:    image_atomic_max_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN2638; GFX12-NEXT:    s_wait_loadcnt 0x02639; GFX12-NEXT:    ; return to shader part epilog2640main_body:2641  %v = call i64 @llvm.amdgcn.image.atomic.umax.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)2642  %out = bitcast i64 %v to <2 x float>2643  ret <2 x float> %out2644}2645 2646define amdgpu_ps <2 x float> @atomic_and_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) {2647; GFX6-LABEL: atomic_and_i64_1d:2648; GFX6:       ; %bb.0: ; %main_body2649; GFX6-NEXT:    s_mov_b32 s0, s22650; GFX6-NEXT:    s_mov_b32 s1, s32651; GFX6-NEXT:    s_mov_b32 s2, s42652; GFX6-NEXT:    s_mov_b32 s3, s52653; GFX6-NEXT:    s_mov_b32 s4, s62654; GFX6-NEXT:    s_mov_b32 s5, s72655; GFX6-NEXT:    s_mov_b32 s6, s82656; GFX6-NEXT:    s_mov_b32 s7, s92657; GFX6-NEXT:    image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 unorm glc2658; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)2659; GFX6-NEXT:    ; return to shader part epilog2660;2661; GFX8-LABEL: atomic_and_i64_1d:2662; GFX8:       ; %bb.0: ; %main_body2663; GFX8-NEXT:    s_mov_b32 s0, s22664; GFX8-NEXT:    s_mov_b32 s1, s32665; GFX8-NEXT:    s_mov_b32 s2, s42666; GFX8-NEXT:    s_mov_b32 s3, s52667; GFX8-NEXT:    s_mov_b32 s4, s62668; GFX8-NEXT:    s_mov_b32 s5, s72669; GFX8-NEXT:    s_mov_b32 s6, s82670; GFX8-NEXT:    s_mov_b32 s7, s92671; GFX8-NEXT:    image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 unorm glc2672; GFX8-NEXT:    s_waitcnt vmcnt(0)2673; GFX8-NEXT:    ; return to shader part epilog2674;2675; GFX900-LABEL: atomic_and_i64_1d:2676; GFX900:       ; %bb.0: ; %main_body2677; GFX900-NEXT:    s_mov_b32 s0, s22678; GFX900-NEXT:    s_mov_b32 s1, s32679; GFX900-NEXT:    s_mov_b32 s2, s42680; GFX900-NEXT:    s_mov_b32 s3, s52681; GFX900-NEXT:    s_mov_b32 s4, s62682; GFX900-NEXT:    s_mov_b32 s5, s72683; GFX900-NEXT:    s_mov_b32 s6, s82684; GFX900-NEXT:    s_mov_b32 s7, s92685; GFX900-NEXT:    image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 unorm glc2686; GFX900-NEXT:    s_waitcnt vmcnt(0)2687; GFX900-NEXT:    ; return to shader part epilog2688;2689; GFX90A-LABEL: atomic_and_i64_1d:2690; GFX90A:       ; %bb.0: ; %main_body2691; GFX90A-NEXT:    s_mov_b32 s0, s22692; GFX90A-NEXT:    s_mov_b32 s1, s32693; GFX90A-NEXT:    s_mov_b32 s2, s42694; GFX90A-NEXT:    s_mov_b32 s3, s52695; GFX90A-NEXT:    s_mov_b32 s4, s62696; GFX90A-NEXT:    s_mov_b32 s5, s72697; GFX90A-NEXT:    s_mov_b32 s6, s82698; GFX90A-NEXT:    s_mov_b32 s7, s92699; GFX90A-NEXT:    image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 unorm glc2700; GFX90A-NEXT:    s_waitcnt vmcnt(0)2701; GFX90A-NEXT:    ; return to shader part epilog2702;2703; GFX10PLUS-LABEL: atomic_and_i64_1d:2704; GFX10PLUS:       ; %bb.0: ; %main_body2705; GFX10PLUS-NEXT:    s_mov_b32 s0, s22706; GFX10PLUS-NEXT:    s_mov_b32 s1, s32707; GFX10PLUS-NEXT:    s_mov_b32 s2, s42708; GFX10PLUS-NEXT:    s_mov_b32 s3, s52709; GFX10PLUS-NEXT:    s_mov_b32 s4, s62710; GFX10PLUS-NEXT:    s_mov_b32 s5, s72711; GFX10PLUS-NEXT:    s_mov_b32 s6, s82712; GFX10PLUS-NEXT:    s_mov_b32 s7, s92713; GFX10PLUS-NEXT:    image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc2714; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)2715; GFX10PLUS-NEXT:    ; return to shader part epilog2716;2717; GFX12-LABEL: atomic_and_i64_1d:2718; GFX12:       ; %bb.0: ; %main_body2719; GFX12-NEXT:    s_mov_b32 s0, s22720; GFX12-NEXT:    s_mov_b32 s1, s32721; GFX12-NEXT:    s_mov_b32 s2, s42722; GFX12-NEXT:    s_mov_b32 s3, s52723; GFX12-NEXT:    s_mov_b32 s4, s62724; GFX12-NEXT:    s_mov_b32 s5, s72725; GFX12-NEXT:    s_mov_b32 s6, s82726; GFX12-NEXT:    s_mov_b32 s7, s92727; GFX12-NEXT:    image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN2728; GFX12-NEXT:    s_wait_loadcnt 0x02729; GFX12-NEXT:    ; return to shader part epilog2730main_body:2731  %v = call i64 @llvm.amdgcn.image.atomic.and.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)2732  %out = bitcast i64 %v to <2 x float>2733  ret <2 x float> %out2734}2735 2736define amdgpu_ps <2 x float> @atomic_or_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) {2737; GFX6-LABEL: atomic_or_i64_1d:2738; GFX6:       ; %bb.0: ; %main_body2739; GFX6-NEXT:    s_mov_b32 s0, s22740; GFX6-NEXT:    s_mov_b32 s1, s32741; GFX6-NEXT:    s_mov_b32 s2, s42742; GFX6-NEXT:    s_mov_b32 s3, s52743; GFX6-NEXT:    s_mov_b32 s4, s62744; GFX6-NEXT:    s_mov_b32 s5, s72745; GFX6-NEXT:    s_mov_b32 s6, s82746; GFX6-NEXT:    s_mov_b32 s7, s92747; GFX6-NEXT:    image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 unorm glc2748; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)2749; GFX6-NEXT:    ; return to shader part epilog2750;2751; GFX8-LABEL: atomic_or_i64_1d:2752; GFX8:       ; %bb.0: ; %main_body2753; GFX8-NEXT:    s_mov_b32 s0, s22754; GFX8-NEXT:    s_mov_b32 s1, s32755; GFX8-NEXT:    s_mov_b32 s2, s42756; GFX8-NEXT:    s_mov_b32 s3, s52757; GFX8-NEXT:    s_mov_b32 s4, s62758; GFX8-NEXT:    s_mov_b32 s5, s72759; GFX8-NEXT:    s_mov_b32 s6, s82760; GFX8-NEXT:    s_mov_b32 s7, s92761; GFX8-NEXT:    image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 unorm glc2762; GFX8-NEXT:    s_waitcnt vmcnt(0)2763; GFX8-NEXT:    ; return to shader part epilog2764;2765; GFX900-LABEL: atomic_or_i64_1d:2766; GFX900:       ; %bb.0: ; %main_body2767; GFX900-NEXT:    s_mov_b32 s0, s22768; GFX900-NEXT:    s_mov_b32 s1, s32769; GFX900-NEXT:    s_mov_b32 s2, s42770; GFX900-NEXT:    s_mov_b32 s3, s52771; GFX900-NEXT:    s_mov_b32 s4, s62772; GFX900-NEXT:    s_mov_b32 s5, s72773; GFX900-NEXT:    s_mov_b32 s6, s82774; GFX900-NEXT:    s_mov_b32 s7, s92775; GFX900-NEXT:    image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 unorm glc2776; GFX900-NEXT:    s_waitcnt vmcnt(0)2777; GFX900-NEXT:    ; return to shader part epilog2778;2779; GFX90A-LABEL: atomic_or_i64_1d:2780; GFX90A:       ; %bb.0: ; %main_body2781; GFX90A-NEXT:    s_mov_b32 s0, s22782; GFX90A-NEXT:    s_mov_b32 s1, s32783; GFX90A-NEXT:    s_mov_b32 s2, s42784; GFX90A-NEXT:    s_mov_b32 s3, s52785; GFX90A-NEXT:    s_mov_b32 s4, s62786; GFX90A-NEXT:    s_mov_b32 s5, s72787; GFX90A-NEXT:    s_mov_b32 s6, s82788; GFX90A-NEXT:    s_mov_b32 s7, s92789; GFX90A-NEXT:    image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 unorm glc2790; GFX90A-NEXT:    s_waitcnt vmcnt(0)2791; GFX90A-NEXT:    ; return to shader part epilog2792;2793; GFX10PLUS-LABEL: atomic_or_i64_1d:2794; GFX10PLUS:       ; %bb.0: ; %main_body2795; GFX10PLUS-NEXT:    s_mov_b32 s0, s22796; GFX10PLUS-NEXT:    s_mov_b32 s1, s32797; GFX10PLUS-NEXT:    s_mov_b32 s2, s42798; GFX10PLUS-NEXT:    s_mov_b32 s3, s52799; GFX10PLUS-NEXT:    s_mov_b32 s4, s62800; GFX10PLUS-NEXT:    s_mov_b32 s5, s72801; GFX10PLUS-NEXT:    s_mov_b32 s6, s82802; GFX10PLUS-NEXT:    s_mov_b32 s7, s92803; GFX10PLUS-NEXT:    image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc2804; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)2805; GFX10PLUS-NEXT:    ; return to shader part epilog2806;2807; GFX12-LABEL: atomic_or_i64_1d:2808; GFX12:       ; %bb.0: ; %main_body2809; GFX12-NEXT:    s_mov_b32 s0, s22810; GFX12-NEXT:    s_mov_b32 s1, s32811; GFX12-NEXT:    s_mov_b32 s2, s42812; GFX12-NEXT:    s_mov_b32 s3, s52813; GFX12-NEXT:    s_mov_b32 s4, s62814; GFX12-NEXT:    s_mov_b32 s5, s72815; GFX12-NEXT:    s_mov_b32 s6, s82816; GFX12-NEXT:    s_mov_b32 s7, s92817; GFX12-NEXT:    image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN2818; GFX12-NEXT:    s_wait_loadcnt 0x02819; GFX12-NEXT:    ; return to shader part epilog2820main_body:2821  %v = call i64 @llvm.amdgcn.image.atomic.or.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)2822  %out = bitcast i64 %v to <2 x float>2823  ret <2 x float> %out2824}2825 2826define amdgpu_ps <2 x float> @atomic_xor_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) {2827; GFX6-LABEL: atomic_xor_i64_1d:2828; GFX6:       ; %bb.0: ; %main_body2829; GFX6-NEXT:    s_mov_b32 s0, s22830; GFX6-NEXT:    s_mov_b32 s1, s32831; GFX6-NEXT:    s_mov_b32 s2, s42832; GFX6-NEXT:    s_mov_b32 s3, s52833; GFX6-NEXT:    s_mov_b32 s4, s62834; GFX6-NEXT:    s_mov_b32 s5, s72835; GFX6-NEXT:    s_mov_b32 s6, s82836; GFX6-NEXT:    s_mov_b32 s7, s92837; GFX6-NEXT:    image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 unorm glc2838; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)2839; GFX6-NEXT:    ; return to shader part epilog2840;2841; GFX8-LABEL: atomic_xor_i64_1d:2842; GFX8:       ; %bb.0: ; %main_body2843; GFX8-NEXT:    s_mov_b32 s0, s22844; GFX8-NEXT:    s_mov_b32 s1, s32845; GFX8-NEXT:    s_mov_b32 s2, s42846; GFX8-NEXT:    s_mov_b32 s3, s52847; GFX8-NEXT:    s_mov_b32 s4, s62848; GFX8-NEXT:    s_mov_b32 s5, s72849; GFX8-NEXT:    s_mov_b32 s6, s82850; GFX8-NEXT:    s_mov_b32 s7, s92851; GFX8-NEXT:    image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 unorm glc2852; GFX8-NEXT:    s_waitcnt vmcnt(0)2853; GFX8-NEXT:    ; return to shader part epilog2854;2855; GFX900-LABEL: atomic_xor_i64_1d:2856; GFX900:       ; %bb.0: ; %main_body2857; GFX900-NEXT:    s_mov_b32 s0, s22858; GFX900-NEXT:    s_mov_b32 s1, s32859; GFX900-NEXT:    s_mov_b32 s2, s42860; GFX900-NEXT:    s_mov_b32 s3, s52861; GFX900-NEXT:    s_mov_b32 s4, s62862; GFX900-NEXT:    s_mov_b32 s5, s72863; GFX900-NEXT:    s_mov_b32 s6, s82864; GFX900-NEXT:    s_mov_b32 s7, s92865; GFX900-NEXT:    image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 unorm glc2866; GFX900-NEXT:    s_waitcnt vmcnt(0)2867; GFX900-NEXT:    ; return to shader part epilog2868;2869; GFX90A-LABEL: atomic_xor_i64_1d:2870; GFX90A:       ; %bb.0: ; %main_body2871; GFX90A-NEXT:    s_mov_b32 s0, s22872; GFX90A-NEXT:    s_mov_b32 s1, s32873; GFX90A-NEXT:    s_mov_b32 s2, s42874; GFX90A-NEXT:    s_mov_b32 s3, s52875; GFX90A-NEXT:    s_mov_b32 s4, s62876; GFX90A-NEXT:    s_mov_b32 s5, s72877; GFX90A-NEXT:    s_mov_b32 s6, s82878; GFX90A-NEXT:    s_mov_b32 s7, s92879; GFX90A-NEXT:    image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 unorm glc2880; GFX90A-NEXT:    s_waitcnt vmcnt(0)2881; GFX90A-NEXT:    ; return to shader part epilog2882;2883; GFX10PLUS-LABEL: atomic_xor_i64_1d:2884; GFX10PLUS:       ; %bb.0: ; %main_body2885; GFX10PLUS-NEXT:    s_mov_b32 s0, s22886; GFX10PLUS-NEXT:    s_mov_b32 s1, s32887; GFX10PLUS-NEXT:    s_mov_b32 s2, s42888; GFX10PLUS-NEXT:    s_mov_b32 s3, s52889; GFX10PLUS-NEXT:    s_mov_b32 s4, s62890; GFX10PLUS-NEXT:    s_mov_b32 s5, s72891; GFX10PLUS-NEXT:    s_mov_b32 s6, s82892; GFX10PLUS-NEXT:    s_mov_b32 s7, s92893; GFX10PLUS-NEXT:    image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc2894; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)2895; GFX10PLUS-NEXT:    ; return to shader part epilog2896;2897; GFX12-LABEL: atomic_xor_i64_1d:2898; GFX12:       ; %bb.0: ; %main_body2899; GFX12-NEXT:    s_mov_b32 s0, s22900; GFX12-NEXT:    s_mov_b32 s1, s32901; GFX12-NEXT:    s_mov_b32 s2, s42902; GFX12-NEXT:    s_mov_b32 s3, s52903; GFX12-NEXT:    s_mov_b32 s4, s62904; GFX12-NEXT:    s_mov_b32 s5, s72905; GFX12-NEXT:    s_mov_b32 s6, s82906; GFX12-NEXT:    s_mov_b32 s7, s92907; GFX12-NEXT:    image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN2908; GFX12-NEXT:    s_wait_loadcnt 0x02909; GFX12-NEXT:    ; return to shader part epilog2910main_body:2911  %v = call i64 @llvm.amdgcn.image.atomic.xor.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)2912  %out = bitcast i64 %v to <2 x float>2913  ret <2 x float> %out2914}2915 2916define amdgpu_ps <2 x float> @atomic_inc_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) {2917; GFX6-LABEL: atomic_inc_i64_1d:2918; GFX6:       ; %bb.0: ; %main_body2919; GFX6-NEXT:    s_mov_b32 s0, s22920; GFX6-NEXT:    s_mov_b32 s1, s32921; GFX6-NEXT:    s_mov_b32 s2, s42922; GFX6-NEXT:    s_mov_b32 s3, s52923; GFX6-NEXT:    s_mov_b32 s4, s62924; GFX6-NEXT:    s_mov_b32 s5, s72925; GFX6-NEXT:    s_mov_b32 s6, s82926; GFX6-NEXT:    s_mov_b32 s7, s92927; GFX6-NEXT:    image_atomic_inc v[0:1], v2, s[0:7] dmask:0x3 unorm glc2928; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)2929; GFX6-NEXT:    ; return to shader part epilog2930;2931; GFX8-LABEL: atomic_inc_i64_1d:2932; GFX8:       ; %bb.0: ; %main_body2933; GFX8-NEXT:    s_mov_b32 s0, s22934; GFX8-NEXT:    s_mov_b32 s1, s32935; GFX8-NEXT:    s_mov_b32 s2, s42936; GFX8-NEXT:    s_mov_b32 s3, s52937; GFX8-NEXT:    s_mov_b32 s4, s62938; GFX8-NEXT:    s_mov_b32 s5, s72939; GFX8-NEXT:    s_mov_b32 s6, s82940; GFX8-NEXT:    s_mov_b32 s7, s92941; GFX8-NEXT:    image_atomic_inc v[0:1], v2, s[0:7] dmask:0x3 unorm glc2942; GFX8-NEXT:    s_waitcnt vmcnt(0)2943; GFX8-NEXT:    ; return to shader part epilog2944;2945; GFX900-LABEL: atomic_inc_i64_1d:2946; GFX900:       ; %bb.0: ; %main_body2947; GFX900-NEXT:    s_mov_b32 s0, s22948; GFX900-NEXT:    s_mov_b32 s1, s32949; GFX900-NEXT:    s_mov_b32 s2, s42950; GFX900-NEXT:    s_mov_b32 s3, s52951; GFX900-NEXT:    s_mov_b32 s4, s62952; GFX900-NEXT:    s_mov_b32 s5, s72953; GFX900-NEXT:    s_mov_b32 s6, s82954; GFX900-NEXT:    s_mov_b32 s7, s92955; GFX900-NEXT:    image_atomic_inc v[0:1], v2, s[0:7] dmask:0x3 unorm glc2956; GFX900-NEXT:    s_waitcnt vmcnt(0)2957; GFX900-NEXT:    ; return to shader part epilog2958;2959; GFX90A-LABEL: atomic_inc_i64_1d:2960; GFX90A:       ; %bb.0: ; %main_body2961; GFX90A-NEXT:    s_mov_b32 s0, s22962; GFX90A-NEXT:    s_mov_b32 s1, s32963; GFX90A-NEXT:    s_mov_b32 s2, s42964; GFX90A-NEXT:    s_mov_b32 s3, s52965; GFX90A-NEXT:    s_mov_b32 s4, s62966; GFX90A-NEXT:    s_mov_b32 s5, s72967; GFX90A-NEXT:    s_mov_b32 s6, s82968; GFX90A-NEXT:    s_mov_b32 s7, s92969; GFX90A-NEXT:    image_atomic_inc v[0:1], v2, s[0:7] dmask:0x3 unorm glc2970; GFX90A-NEXT:    s_waitcnt vmcnt(0)2971; GFX90A-NEXT:    ; return to shader part epilog2972;2973; GFX10PLUS-LABEL: atomic_inc_i64_1d:2974; GFX10PLUS:       ; %bb.0: ; %main_body2975; GFX10PLUS-NEXT:    s_mov_b32 s0, s22976; GFX10PLUS-NEXT:    s_mov_b32 s1, s32977; GFX10PLUS-NEXT:    s_mov_b32 s2, s42978; GFX10PLUS-NEXT:    s_mov_b32 s3, s52979; GFX10PLUS-NEXT:    s_mov_b32 s4, s62980; GFX10PLUS-NEXT:    s_mov_b32 s5, s72981; GFX10PLUS-NEXT:    s_mov_b32 s6, s82982; GFX10PLUS-NEXT:    s_mov_b32 s7, s92983; GFX10PLUS-NEXT:    image_atomic_inc v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc2984; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)2985; GFX10PLUS-NEXT:    ; return to shader part epilog2986;2987; GFX12-LABEL: atomic_inc_i64_1d:2988; GFX12:       ; %bb.0: ; %main_body2989; GFX12-NEXT:    s_mov_b32 s0, s22990; GFX12-NEXT:    s_mov_b32 s1, s32991; GFX12-NEXT:    s_mov_b32 s2, s42992; GFX12-NEXT:    s_mov_b32 s3, s52993; GFX12-NEXT:    s_mov_b32 s4, s62994; GFX12-NEXT:    s_mov_b32 s5, s72995; GFX12-NEXT:    s_mov_b32 s6, s82996; GFX12-NEXT:    s_mov_b32 s7, s92997; GFX12-NEXT:    image_atomic_inc_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN2998; GFX12-NEXT:    s_wait_loadcnt 0x02999; GFX12-NEXT:    ; return to shader part epilog3000main_body:3001  %v = call i64 @llvm.amdgcn.image.atomic.inc.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)3002  %out = bitcast i64 %v to <2 x float>3003  ret <2 x float> %out3004}3005 3006define amdgpu_ps <2 x float> @atomic_dec_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) {3007; GFX6-LABEL: atomic_dec_i64_1d:3008; GFX6:       ; %bb.0: ; %main_body3009; GFX6-NEXT:    s_mov_b32 s0, s23010; GFX6-NEXT:    s_mov_b32 s1, s33011; GFX6-NEXT:    s_mov_b32 s2, s43012; GFX6-NEXT:    s_mov_b32 s3, s53013; GFX6-NEXT:    s_mov_b32 s4, s63014; GFX6-NEXT:    s_mov_b32 s5, s73015; GFX6-NEXT:    s_mov_b32 s6, s83016; GFX6-NEXT:    s_mov_b32 s7, s93017; GFX6-NEXT:    image_atomic_dec v[0:1], v2, s[0:7] dmask:0x3 unorm glc3018; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)3019; GFX6-NEXT:    ; return to shader part epilog3020;3021; GFX8-LABEL: atomic_dec_i64_1d:3022; GFX8:       ; %bb.0: ; %main_body3023; GFX8-NEXT:    s_mov_b32 s0, s23024; GFX8-NEXT:    s_mov_b32 s1, s33025; GFX8-NEXT:    s_mov_b32 s2, s43026; GFX8-NEXT:    s_mov_b32 s3, s53027; GFX8-NEXT:    s_mov_b32 s4, s63028; GFX8-NEXT:    s_mov_b32 s5, s73029; GFX8-NEXT:    s_mov_b32 s6, s83030; GFX8-NEXT:    s_mov_b32 s7, s93031; GFX8-NEXT:    image_atomic_dec v[0:1], v2, s[0:7] dmask:0x3 unorm glc3032; GFX8-NEXT:    s_waitcnt vmcnt(0)3033; GFX8-NEXT:    ; return to shader part epilog3034;3035; GFX900-LABEL: atomic_dec_i64_1d:3036; GFX900:       ; %bb.0: ; %main_body3037; GFX900-NEXT:    s_mov_b32 s0, s23038; GFX900-NEXT:    s_mov_b32 s1, s33039; GFX900-NEXT:    s_mov_b32 s2, s43040; GFX900-NEXT:    s_mov_b32 s3, s53041; GFX900-NEXT:    s_mov_b32 s4, s63042; GFX900-NEXT:    s_mov_b32 s5, s73043; GFX900-NEXT:    s_mov_b32 s6, s83044; GFX900-NEXT:    s_mov_b32 s7, s93045; GFX900-NEXT:    image_atomic_dec v[0:1], v2, s[0:7] dmask:0x3 unorm glc3046; GFX900-NEXT:    s_waitcnt vmcnt(0)3047; GFX900-NEXT:    ; return to shader part epilog3048;3049; GFX90A-LABEL: atomic_dec_i64_1d:3050; GFX90A:       ; %bb.0: ; %main_body3051; GFX90A-NEXT:    s_mov_b32 s0, s23052; GFX90A-NEXT:    s_mov_b32 s1, s33053; GFX90A-NEXT:    s_mov_b32 s2, s43054; GFX90A-NEXT:    s_mov_b32 s3, s53055; GFX90A-NEXT:    s_mov_b32 s4, s63056; GFX90A-NEXT:    s_mov_b32 s5, s73057; GFX90A-NEXT:    s_mov_b32 s6, s83058; GFX90A-NEXT:    s_mov_b32 s7, s93059; GFX90A-NEXT:    image_atomic_dec v[0:1], v2, s[0:7] dmask:0x3 unorm glc3060; GFX90A-NEXT:    s_waitcnt vmcnt(0)3061; GFX90A-NEXT:    ; return to shader part epilog3062;3063; GFX10PLUS-LABEL: atomic_dec_i64_1d:3064; GFX10PLUS:       ; %bb.0: ; %main_body3065; GFX10PLUS-NEXT:    s_mov_b32 s0, s23066; GFX10PLUS-NEXT:    s_mov_b32 s1, s33067; GFX10PLUS-NEXT:    s_mov_b32 s2, s43068; GFX10PLUS-NEXT:    s_mov_b32 s3, s53069; GFX10PLUS-NEXT:    s_mov_b32 s4, s63070; GFX10PLUS-NEXT:    s_mov_b32 s5, s73071; GFX10PLUS-NEXT:    s_mov_b32 s6, s83072; GFX10PLUS-NEXT:    s_mov_b32 s7, s93073; GFX10PLUS-NEXT:    image_atomic_dec v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc3074; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)3075; GFX10PLUS-NEXT:    ; return to shader part epilog3076;3077; GFX12-LABEL: atomic_dec_i64_1d:3078; GFX12:       ; %bb.0: ; %main_body3079; GFX12-NEXT:    s_mov_b32 s0, s23080; GFX12-NEXT:    s_mov_b32 s1, s33081; GFX12-NEXT:    s_mov_b32 s2, s43082; GFX12-NEXT:    s_mov_b32 s3, s53083; GFX12-NEXT:    s_mov_b32 s4, s63084; GFX12-NEXT:    s_mov_b32 s5, s73085; GFX12-NEXT:    s_mov_b32 s6, s83086; GFX12-NEXT:    s_mov_b32 s7, s93087; GFX12-NEXT:    image_atomic_dec_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN3088; GFX12-NEXT:    s_wait_loadcnt 0x03089; GFX12-NEXT:    ; return to shader part epilog3090main_body:3091  %v = call i64 @llvm.amdgcn.image.atomic.dec.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)3092  %out = bitcast i64 %v to <2 x float>3093  ret <2 x float> %out3094}3095 3096define amdgpu_ps <2 x float> @atomic_cmpswap_i64_1d(<8 x i32> inreg %rsrc, i64 %cmp, i64 %swap, i32 %s) {3097; GFX6-LABEL: atomic_cmpswap_i64_1d:3098; GFX6:       ; %bb.0: ; %main_body3099; GFX6-NEXT:    s_mov_b32 s0, s23100; GFX6-NEXT:    s_mov_b32 s1, s33101; GFX6-NEXT:    s_mov_b32 s2, s43102; GFX6-NEXT:    s_mov_b32 s3, s53103; GFX6-NEXT:    s_mov_b32 s4, s63104; GFX6-NEXT:    s_mov_b32 s5, s73105; GFX6-NEXT:    s_mov_b32 s6, s83106; GFX6-NEXT:    s_mov_b32 s7, s93107; GFX6-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm glc3108; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)3109; GFX6-NEXT:    ; return to shader part epilog3110;3111; GFX8-LABEL: atomic_cmpswap_i64_1d:3112; GFX8:       ; %bb.0: ; %main_body3113; GFX8-NEXT:    s_mov_b32 s0, s23114; GFX8-NEXT:    s_mov_b32 s1, s33115; GFX8-NEXT:    s_mov_b32 s2, s43116; GFX8-NEXT:    s_mov_b32 s3, s53117; GFX8-NEXT:    s_mov_b32 s4, s63118; GFX8-NEXT:    s_mov_b32 s5, s73119; GFX8-NEXT:    s_mov_b32 s6, s83120; GFX8-NEXT:    s_mov_b32 s7, s93121; GFX8-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm glc3122; GFX8-NEXT:    s_waitcnt vmcnt(0)3123; GFX8-NEXT:    ; return to shader part epilog3124;3125; GFX900-LABEL: atomic_cmpswap_i64_1d:3126; GFX900:       ; %bb.0: ; %main_body3127; GFX900-NEXT:    s_mov_b32 s0, s23128; GFX900-NEXT:    s_mov_b32 s1, s33129; GFX900-NEXT:    s_mov_b32 s2, s43130; GFX900-NEXT:    s_mov_b32 s3, s53131; GFX900-NEXT:    s_mov_b32 s4, s63132; GFX900-NEXT:    s_mov_b32 s5, s73133; GFX900-NEXT:    s_mov_b32 s6, s83134; GFX900-NEXT:    s_mov_b32 s7, s93135; GFX900-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm glc3136; GFX900-NEXT:    s_waitcnt vmcnt(0)3137; GFX900-NEXT:    ; return to shader part epilog3138;3139; GFX90A-LABEL: atomic_cmpswap_i64_1d:3140; GFX90A:       ; %bb.0: ; %main_body3141; GFX90A-NEXT:    s_mov_b32 s0, s23142; GFX90A-NEXT:    s_mov_b32 s1, s33143; GFX90A-NEXT:    s_mov_b32 s2, s43144; GFX90A-NEXT:    s_mov_b32 s3, s53145; GFX90A-NEXT:    s_mov_b32 s4, s63146; GFX90A-NEXT:    s_mov_b32 s5, s73147; GFX90A-NEXT:    s_mov_b32 s6, s83148; GFX90A-NEXT:    s_mov_b32 s7, s93149; GFX90A-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm glc3150; GFX90A-NEXT:    s_waitcnt vmcnt(0)3151; GFX90A-NEXT:    ; return to shader part epilog3152;3153; GFX10PLUS-LABEL: atomic_cmpswap_i64_1d:3154; GFX10PLUS:       ; %bb.0: ; %main_body3155; GFX10PLUS-NEXT:    s_mov_b32 s0, s23156; GFX10PLUS-NEXT:    s_mov_b32 s1, s33157; GFX10PLUS-NEXT:    s_mov_b32 s2, s43158; GFX10PLUS-NEXT:    s_mov_b32 s3, s53159; GFX10PLUS-NEXT:    s_mov_b32 s4, s63160; GFX10PLUS-NEXT:    s_mov_b32 s5, s73161; GFX10PLUS-NEXT:    s_mov_b32 s6, s83162; GFX10PLUS-NEXT:    s_mov_b32 s7, s93163; GFX10PLUS-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc3164; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)3165; GFX10PLUS-NEXT:    ; return to shader part epilog3166;3167; GFX12-LABEL: atomic_cmpswap_i64_1d:3168; GFX12:       ; %bb.0: ; %main_body3169; GFX12-NEXT:    s_mov_b32 s0, s23170; GFX12-NEXT:    s_mov_b32 s1, s33171; GFX12-NEXT:    s_mov_b32 s2, s43172; GFX12-NEXT:    s_mov_b32 s3, s53173; GFX12-NEXT:    s_mov_b32 s4, s63174; GFX12-NEXT:    s_mov_b32 s5, s73175; GFX12-NEXT:    s_mov_b32 s6, s83176; GFX12-NEXT:    s_mov_b32 s7, s93177; GFX12-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN3178; GFX12-NEXT:    s_wait_loadcnt 0x03179; GFX12-NEXT:    ; return to shader part epilog3180main_body:3181  %v = call i64 @llvm.amdgcn.image.atomic.cmpswap.1d.i64.i32(i64 %cmp, i64 %swap, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)3182  %out = bitcast i64 %v to <2 x float>3183  ret <2 x float> %out3184}3185 3186define amdgpu_ps void @atomic_cmpswap_i64_1d_no_return(<8 x i32> inreg %rsrc, i64 %cmp, i64 %swap, i32 %s) {3187; GFX6-LABEL: atomic_cmpswap_i64_1d_no_return:3188; GFX6:       ; %bb.0: ; %main_body3189; GFX6-NEXT:    s_mov_b32 s0, s23190; GFX6-NEXT:    s_mov_b32 s1, s33191; GFX6-NEXT:    s_mov_b32 s2, s43192; GFX6-NEXT:    s_mov_b32 s3, s53193; GFX6-NEXT:    s_mov_b32 s4, s63194; GFX6-NEXT:    s_mov_b32 s5, s73195; GFX6-NEXT:    s_mov_b32 s6, s83196; GFX6-NEXT:    s_mov_b32 s7, s93197; GFX6-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm3198; GFX6-NEXT:    s_endpgm3199;3200; GFX8-LABEL: atomic_cmpswap_i64_1d_no_return:3201; GFX8:       ; %bb.0: ; %main_body3202; GFX8-NEXT:    s_mov_b32 s0, s23203; GFX8-NEXT:    s_mov_b32 s1, s33204; GFX8-NEXT:    s_mov_b32 s2, s43205; GFX8-NEXT:    s_mov_b32 s3, s53206; GFX8-NEXT:    s_mov_b32 s4, s63207; GFX8-NEXT:    s_mov_b32 s5, s73208; GFX8-NEXT:    s_mov_b32 s6, s83209; GFX8-NEXT:    s_mov_b32 s7, s93210; GFX8-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm3211; GFX8-NEXT:    s_endpgm3212;3213; GFX900-LABEL: atomic_cmpswap_i64_1d_no_return:3214; GFX900:       ; %bb.0: ; %main_body3215; GFX900-NEXT:    s_mov_b32 s0, s23216; GFX900-NEXT:    s_mov_b32 s1, s33217; GFX900-NEXT:    s_mov_b32 s2, s43218; GFX900-NEXT:    s_mov_b32 s3, s53219; GFX900-NEXT:    s_mov_b32 s4, s63220; GFX900-NEXT:    s_mov_b32 s5, s73221; GFX900-NEXT:    s_mov_b32 s6, s83222; GFX900-NEXT:    s_mov_b32 s7, s93223; GFX900-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm3224; GFX900-NEXT:    s_endpgm3225;3226; GFX90A-LABEL: atomic_cmpswap_i64_1d_no_return:3227; GFX90A:       ; %bb.0: ; %main_body3228; GFX90A-NEXT:    s_mov_b32 s0, s23229; GFX90A-NEXT:    s_mov_b32 s1, s33230; GFX90A-NEXT:    s_mov_b32 s2, s43231; GFX90A-NEXT:    s_mov_b32 s3, s53232; GFX90A-NEXT:    s_mov_b32 s4, s63233; GFX90A-NEXT:    s_mov_b32 s5, s73234; GFX90A-NEXT:    s_mov_b32 s6, s83235; GFX90A-NEXT:    s_mov_b32 s7, s93236; GFX90A-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm3237; GFX90A-NEXT:    s_endpgm3238;3239; GFX10PLUS-LABEL: atomic_cmpswap_i64_1d_no_return:3240; GFX10PLUS:       ; %bb.0: ; %main_body3241; GFX10PLUS-NEXT:    s_mov_b32 s0, s23242; GFX10PLUS-NEXT:    s_mov_b32 s1, s33243; GFX10PLUS-NEXT:    s_mov_b32 s2, s43244; GFX10PLUS-NEXT:    s_mov_b32 s3, s53245; GFX10PLUS-NEXT:    s_mov_b32 s4, s63246; GFX10PLUS-NEXT:    s_mov_b32 s5, s73247; GFX10PLUS-NEXT:    s_mov_b32 s6, s83248; GFX10PLUS-NEXT:    s_mov_b32 s7, s93249; GFX10PLUS-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm3250; GFX10PLUS-NEXT:    s_endpgm3251;3252; GFX12-LABEL: atomic_cmpswap_i64_1d_no_return:3253; GFX12:       ; %bb.0: ; %main_body3254; GFX12-NEXT:    s_mov_b32 s0, s23255; GFX12-NEXT:    s_mov_b32 s1, s33256; GFX12-NEXT:    s_mov_b32 s2, s43257; GFX12-NEXT:    s_mov_b32 s3, s53258; GFX12-NEXT:    s_mov_b32 s4, s63259; GFX12-NEXT:    s_mov_b32 s5, s73260; GFX12-NEXT:    s_mov_b32 s6, s83261; GFX12-NEXT:    s_mov_b32 s7, s93262; GFX12-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D3263; GFX12-NEXT:    s_endpgm3264main_body:3265  %v = call i64 @llvm.amdgcn.image.atomic.cmpswap.1d.i64.i32(i64 %cmp, i64 %swap, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)3266  ret void3267}3268 3269define amdgpu_ps <2 x float> @atomic_add_i64_2d(<8 x i32> inreg %rsrc, i64 %data, i32 %s, i32 %t) {3270; GFX6-LABEL: atomic_add_i64_2d:3271; GFX6:       ; %bb.0: ; %main_body3272; GFX6-NEXT:    s_mov_b32 s0, s23273; GFX6-NEXT:    s_mov_b32 s1, s33274; GFX6-NEXT:    s_mov_b32 s2, s43275; GFX6-NEXT:    s_mov_b32 s3, s53276; GFX6-NEXT:    s_mov_b32 s4, s63277; GFX6-NEXT:    s_mov_b32 s5, s73278; GFX6-NEXT:    s_mov_b32 s6, s83279; GFX6-NEXT:    s_mov_b32 s7, s93280; GFX6-NEXT:    image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc3281; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)3282; GFX6-NEXT:    ; return to shader part epilog3283;3284; GFX8-LABEL: atomic_add_i64_2d:3285; GFX8:       ; %bb.0: ; %main_body3286; GFX8-NEXT:    s_mov_b32 s0, s23287; GFX8-NEXT:    s_mov_b32 s1, s33288; GFX8-NEXT:    s_mov_b32 s2, s43289; GFX8-NEXT:    s_mov_b32 s3, s53290; GFX8-NEXT:    s_mov_b32 s4, s63291; GFX8-NEXT:    s_mov_b32 s5, s73292; GFX8-NEXT:    s_mov_b32 s6, s83293; GFX8-NEXT:    s_mov_b32 s7, s93294; GFX8-NEXT:    image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc3295; GFX8-NEXT:    s_waitcnt vmcnt(0)3296; GFX8-NEXT:    ; return to shader part epilog3297;3298; GFX900-LABEL: atomic_add_i64_2d:3299; GFX900:       ; %bb.0: ; %main_body3300; GFX900-NEXT:    s_mov_b32 s0, s23301; GFX900-NEXT:    s_mov_b32 s1, s33302; GFX900-NEXT:    s_mov_b32 s2, s43303; GFX900-NEXT:    s_mov_b32 s3, s53304; GFX900-NEXT:    s_mov_b32 s4, s63305; GFX900-NEXT:    s_mov_b32 s5, s73306; GFX900-NEXT:    s_mov_b32 s6, s83307; GFX900-NEXT:    s_mov_b32 s7, s93308; GFX900-NEXT:    image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc3309; GFX900-NEXT:    s_waitcnt vmcnt(0)3310; GFX900-NEXT:    ; return to shader part epilog3311;3312; GFX90A-LABEL: atomic_add_i64_2d:3313; GFX90A:       ; %bb.0: ; %main_body3314; GFX90A-NEXT:    s_mov_b32 s0, s23315; GFX90A-NEXT:    s_mov_b32 s1, s33316; GFX90A-NEXT:    s_mov_b32 s2, s43317; GFX90A-NEXT:    s_mov_b32 s3, s53318; GFX90A-NEXT:    s_mov_b32 s4, s63319; GFX90A-NEXT:    s_mov_b32 s5, s73320; GFX90A-NEXT:    s_mov_b32 s6, s83321; GFX90A-NEXT:    s_mov_b32 s7, s93322; GFX90A-NEXT:    image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc3323; GFX90A-NEXT:    s_waitcnt vmcnt(0)3324; GFX90A-NEXT:    ; return to shader part epilog3325;3326; GFX10PLUS-LABEL: atomic_add_i64_2d:3327; GFX10PLUS:       ; %bb.0: ; %main_body3328; GFX10PLUS-NEXT:    s_mov_b32 s0, s23329; GFX10PLUS-NEXT:    s_mov_b32 s1, s33330; GFX10PLUS-NEXT:    s_mov_b32 s2, s43331; GFX10PLUS-NEXT:    s_mov_b32 s3, s53332; GFX10PLUS-NEXT:    s_mov_b32 s4, s63333; GFX10PLUS-NEXT:    s_mov_b32 s5, s73334; GFX10PLUS-NEXT:    s_mov_b32 s6, s83335; GFX10PLUS-NEXT:    s_mov_b32 s7, s93336; GFX10PLUS-NEXT:    image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D unorm glc3337; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)3338; GFX10PLUS-NEXT:    ; return to shader part epilog3339;3340; GFX12-LABEL: atomic_add_i64_2d:3341; GFX12:       ; %bb.0: ; %main_body3342; GFX12-NEXT:    s_mov_b32 s0, s23343; GFX12-NEXT:    s_mov_b32 s1, s33344; GFX12-NEXT:    s_mov_b32 s2, s43345; GFX12-NEXT:    s_mov_b32 s3, s53346; GFX12-NEXT:    s_mov_b32 s4, s63347; GFX12-NEXT:    s_mov_b32 s5, s73348; GFX12-NEXT:    s_mov_b32 s6, s83349; GFX12-NEXT:    s_mov_b32 s7, s93350; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v3], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D th:TH_ATOMIC_RETURN3351; GFX12-NEXT:    s_wait_loadcnt 0x03352; GFX12-NEXT:    ; return to shader part epilog3353main_body:3354  %v = call i64 @llvm.amdgcn.image.atomic.add.2d.i64.i32(i64 %data, i32 %s, i32 %t, <8 x i32> %rsrc, i32 0, i32 0)3355  %out = bitcast i64 %v to <2 x float>3356  ret <2 x float> %out3357}3358 3359define amdgpu_ps <2 x float> @atomic_add_i64_3d(<8 x i32> inreg %rsrc, i64 %data, i32 %s, i32 %t, i32 %r) {3360; GFX6-LABEL: atomic_add_i64_3d:3361; GFX6:       ; %bb.0: ; %main_body3362; GFX6-NEXT:    s_mov_b32 s0, s23363; GFX6-NEXT:    s_mov_b32 s1, s33364; GFX6-NEXT:    s_mov_b32 s2, s43365; GFX6-NEXT:    s_mov_b32 s3, s53366; GFX6-NEXT:    s_mov_b32 s4, s63367; GFX6-NEXT:    s_mov_b32 s5, s73368; GFX6-NEXT:    s_mov_b32 s6, s83369; GFX6-NEXT:    s_mov_b32 s7, s93370; GFX6-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc3371; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)3372; GFX6-NEXT:    ; return to shader part epilog3373;3374; GFX8-LABEL: atomic_add_i64_3d:3375; GFX8:       ; %bb.0: ; %main_body3376; GFX8-NEXT:    s_mov_b32 s0, s23377; GFX8-NEXT:    s_mov_b32 s1, s33378; GFX8-NEXT:    s_mov_b32 s2, s43379; GFX8-NEXT:    s_mov_b32 s3, s53380; GFX8-NEXT:    s_mov_b32 s4, s63381; GFX8-NEXT:    s_mov_b32 s5, s73382; GFX8-NEXT:    s_mov_b32 s6, s83383; GFX8-NEXT:    s_mov_b32 s7, s93384; GFX8-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc3385; GFX8-NEXT:    s_waitcnt vmcnt(0)3386; GFX8-NEXT:    ; return to shader part epilog3387;3388; GFX900-LABEL: atomic_add_i64_3d:3389; GFX900:       ; %bb.0: ; %main_body3390; GFX900-NEXT:    s_mov_b32 s0, s23391; GFX900-NEXT:    s_mov_b32 s1, s33392; GFX900-NEXT:    s_mov_b32 s2, s43393; GFX900-NEXT:    s_mov_b32 s3, s53394; GFX900-NEXT:    s_mov_b32 s4, s63395; GFX900-NEXT:    s_mov_b32 s5, s73396; GFX900-NEXT:    s_mov_b32 s6, s83397; GFX900-NEXT:    s_mov_b32 s7, s93398; GFX900-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc3399; GFX900-NEXT:    s_waitcnt vmcnt(0)3400; GFX900-NEXT:    ; return to shader part epilog3401;3402; GFX90A-LABEL: atomic_add_i64_3d:3403; GFX90A:       ; %bb.0: ; %main_body3404; GFX90A-NEXT:    s_mov_b32 s0, s23405; GFX90A-NEXT:    s_mov_b32 s1, s33406; GFX90A-NEXT:    s_mov_b32 s2, s43407; GFX90A-NEXT:    s_mov_b32 s3, s53408; GFX90A-NEXT:    s_mov_b32 s4, s63409; GFX90A-NEXT:    s_mov_b32 s5, s73410; GFX90A-NEXT:    s_mov_b32 s6, s83411; GFX90A-NEXT:    s_mov_b32 s7, s93412; GFX90A-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc3413; GFX90A-NEXT:    s_waitcnt vmcnt(0)3414; GFX90A-NEXT:    ; return to shader part epilog3415;3416; GFX10PLUS-LABEL: atomic_add_i64_3d:3417; GFX10PLUS:       ; %bb.0: ; %main_body3418; GFX10PLUS-NEXT:    s_mov_b32 s0, s23419; GFX10PLUS-NEXT:    s_mov_b32 s1, s33420; GFX10PLUS-NEXT:    s_mov_b32 s2, s43421; GFX10PLUS-NEXT:    s_mov_b32 s3, s53422; GFX10PLUS-NEXT:    s_mov_b32 s4, s63423; GFX10PLUS-NEXT:    s_mov_b32 s5, s73424; GFX10PLUS-NEXT:    s_mov_b32 s6, s83425; GFX10PLUS-NEXT:    s_mov_b32 s7, s93426; GFX10PLUS-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_3D unorm glc3427; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)3428; GFX10PLUS-NEXT:    ; return to shader part epilog3429;3430; GFX12-LABEL: atomic_add_i64_3d:3431; GFX12:       ; %bb.0: ; %main_body3432; GFX12-NEXT:    s_mov_b32 s0, s23433; GFX12-NEXT:    s_mov_b32 s1, s33434; GFX12-NEXT:    s_mov_b32 s2, s43435; GFX12-NEXT:    s_mov_b32 s3, s53436; GFX12-NEXT:    s_mov_b32 s4, s63437; GFX12-NEXT:    s_mov_b32 s5, s73438; GFX12-NEXT:    s_mov_b32 s6, s83439; GFX12-NEXT:    s_mov_b32 s7, s93440; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v3, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_3D th:TH_ATOMIC_RETURN3441; GFX12-NEXT:    s_wait_loadcnt 0x03442; GFX12-NEXT:    ; return to shader part epilog3443main_body:3444  %v = call i64 @llvm.amdgcn.image.atomic.add.3d.i64.i32(i64 %data, i32 %s, i32 %t, i32 %r, <8 x i32> %rsrc, i32 0, i32 0)3445  %out = bitcast i64 %v to <2 x float>3446  ret <2 x float> %out3447}3448 3449define amdgpu_ps <2 x float> @atomic_add_i64_cube(<8 x i32> inreg %rsrc, i64 %data, i32 %s, i32 %t, i32 %face) {3450; GFX6-LABEL: atomic_add_i64_cube:3451; GFX6:       ; %bb.0: ; %main_body3452; GFX6-NEXT:    s_mov_b32 s0, s23453; GFX6-NEXT:    s_mov_b32 s1, s33454; GFX6-NEXT:    s_mov_b32 s2, s43455; GFX6-NEXT:    s_mov_b32 s3, s53456; GFX6-NEXT:    s_mov_b32 s4, s63457; GFX6-NEXT:    s_mov_b32 s5, s73458; GFX6-NEXT:    s_mov_b32 s6, s83459; GFX6-NEXT:    s_mov_b32 s7, s93460; GFX6-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da3461; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)3462; GFX6-NEXT:    ; return to shader part epilog3463;3464; GFX8-LABEL: atomic_add_i64_cube:3465; GFX8:       ; %bb.0: ; %main_body3466; GFX8-NEXT:    s_mov_b32 s0, s23467; GFX8-NEXT:    s_mov_b32 s1, s33468; GFX8-NEXT:    s_mov_b32 s2, s43469; GFX8-NEXT:    s_mov_b32 s3, s53470; GFX8-NEXT:    s_mov_b32 s4, s63471; GFX8-NEXT:    s_mov_b32 s5, s73472; GFX8-NEXT:    s_mov_b32 s6, s83473; GFX8-NEXT:    s_mov_b32 s7, s93474; GFX8-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da3475; GFX8-NEXT:    s_waitcnt vmcnt(0)3476; GFX8-NEXT:    ; return to shader part epilog3477;3478; GFX900-LABEL: atomic_add_i64_cube:3479; GFX900:       ; %bb.0: ; %main_body3480; GFX900-NEXT:    s_mov_b32 s0, s23481; GFX900-NEXT:    s_mov_b32 s1, s33482; GFX900-NEXT:    s_mov_b32 s2, s43483; GFX900-NEXT:    s_mov_b32 s3, s53484; GFX900-NEXT:    s_mov_b32 s4, s63485; GFX900-NEXT:    s_mov_b32 s5, s73486; GFX900-NEXT:    s_mov_b32 s6, s83487; GFX900-NEXT:    s_mov_b32 s7, s93488; GFX900-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da3489; GFX900-NEXT:    s_waitcnt vmcnt(0)3490; GFX900-NEXT:    ; return to shader part epilog3491;3492; GFX90A-LABEL: atomic_add_i64_cube:3493; GFX90A:       ; %bb.0: ; %main_body3494; GFX90A-NEXT:    s_mov_b32 s0, s23495; GFX90A-NEXT:    s_mov_b32 s1, s33496; GFX90A-NEXT:    s_mov_b32 s2, s43497; GFX90A-NEXT:    s_mov_b32 s3, s53498; GFX90A-NEXT:    s_mov_b32 s4, s63499; GFX90A-NEXT:    s_mov_b32 s5, s73500; GFX90A-NEXT:    s_mov_b32 s6, s83501; GFX90A-NEXT:    s_mov_b32 s7, s93502; GFX90A-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da3503; GFX90A-NEXT:    s_waitcnt vmcnt(0)3504; GFX90A-NEXT:    ; return to shader part epilog3505;3506; GFX10PLUS-LABEL: atomic_add_i64_cube:3507; GFX10PLUS:       ; %bb.0: ; %main_body3508; GFX10PLUS-NEXT:    s_mov_b32 s0, s23509; GFX10PLUS-NEXT:    s_mov_b32 s1, s33510; GFX10PLUS-NEXT:    s_mov_b32 s2, s43511; GFX10PLUS-NEXT:    s_mov_b32 s3, s53512; GFX10PLUS-NEXT:    s_mov_b32 s4, s63513; GFX10PLUS-NEXT:    s_mov_b32 s5, s73514; GFX10PLUS-NEXT:    s_mov_b32 s6, s83515; GFX10PLUS-NEXT:    s_mov_b32 s7, s93516; GFX10PLUS-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_CUBE unorm glc3517; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)3518; GFX10PLUS-NEXT:    ; return to shader part epilog3519;3520; GFX12-LABEL: atomic_add_i64_cube:3521; GFX12:       ; %bb.0: ; %main_body3522; GFX12-NEXT:    s_mov_b32 s0, s23523; GFX12-NEXT:    s_mov_b32 s1, s33524; GFX12-NEXT:    s_mov_b32 s2, s43525; GFX12-NEXT:    s_mov_b32 s3, s53526; GFX12-NEXT:    s_mov_b32 s4, s63527; GFX12-NEXT:    s_mov_b32 s5, s73528; GFX12-NEXT:    s_mov_b32 s6, s83529; GFX12-NEXT:    s_mov_b32 s7, s93530; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v3, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_CUBE th:TH_ATOMIC_RETURN3531; GFX12-NEXT:    s_wait_loadcnt 0x03532; GFX12-NEXT:    ; return to shader part epilog3533main_body:3534  %v = call i64 @llvm.amdgcn.image.atomic.add.cube.i64.i32(i64 %data, i32 %s, i32 %t, i32 %face, <8 x i32> %rsrc, i32 0, i32 0)3535  %out = bitcast i64 %v to <2 x float>3536  ret <2 x float> %out3537}3538 3539define amdgpu_ps <2 x float> @atomic_add_i64_1darray(<8 x i32> inreg %rsrc, i64 %data, i32 %s, i32 %slice) {3540; GFX6-LABEL: atomic_add_i64_1darray:3541; GFX6:       ; %bb.0: ; %main_body3542; GFX6-NEXT:    s_mov_b32 s0, s23543; GFX6-NEXT:    s_mov_b32 s1, s33544; GFX6-NEXT:    s_mov_b32 s2, s43545; GFX6-NEXT:    s_mov_b32 s3, s53546; GFX6-NEXT:    s_mov_b32 s4, s63547; GFX6-NEXT:    s_mov_b32 s5, s73548; GFX6-NEXT:    s_mov_b32 s6, s83549; GFX6-NEXT:    s_mov_b32 s7, s93550; GFX6-NEXT:    image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc da3551; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)3552; GFX6-NEXT:    ; return to shader part epilog3553;3554; GFX8-LABEL: atomic_add_i64_1darray:3555; GFX8:       ; %bb.0: ; %main_body3556; GFX8-NEXT:    s_mov_b32 s0, s23557; GFX8-NEXT:    s_mov_b32 s1, s33558; GFX8-NEXT:    s_mov_b32 s2, s43559; GFX8-NEXT:    s_mov_b32 s3, s53560; GFX8-NEXT:    s_mov_b32 s4, s63561; GFX8-NEXT:    s_mov_b32 s5, s73562; GFX8-NEXT:    s_mov_b32 s6, s83563; GFX8-NEXT:    s_mov_b32 s7, s93564; GFX8-NEXT:    image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc da3565; GFX8-NEXT:    s_waitcnt vmcnt(0)3566; GFX8-NEXT:    ; return to shader part epilog3567;3568; GFX900-LABEL: atomic_add_i64_1darray:3569; GFX900:       ; %bb.0: ; %main_body3570; GFX900-NEXT:    s_mov_b32 s0, s23571; GFX900-NEXT:    s_mov_b32 s1, s33572; GFX900-NEXT:    s_mov_b32 s2, s43573; GFX900-NEXT:    s_mov_b32 s3, s53574; GFX900-NEXT:    s_mov_b32 s4, s63575; GFX900-NEXT:    s_mov_b32 s5, s73576; GFX900-NEXT:    s_mov_b32 s6, s83577; GFX900-NEXT:    s_mov_b32 s7, s93578; GFX900-NEXT:    image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc da3579; GFX900-NEXT:    s_waitcnt vmcnt(0)3580; GFX900-NEXT:    ; return to shader part epilog3581;3582; GFX90A-LABEL: atomic_add_i64_1darray:3583; GFX90A:       ; %bb.0: ; %main_body3584; GFX90A-NEXT:    s_mov_b32 s0, s23585; GFX90A-NEXT:    s_mov_b32 s1, s33586; GFX90A-NEXT:    s_mov_b32 s2, s43587; GFX90A-NEXT:    s_mov_b32 s3, s53588; GFX90A-NEXT:    s_mov_b32 s4, s63589; GFX90A-NEXT:    s_mov_b32 s5, s73590; GFX90A-NEXT:    s_mov_b32 s6, s83591; GFX90A-NEXT:    s_mov_b32 s7, s93592; GFX90A-NEXT:    image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc da3593; GFX90A-NEXT:    s_waitcnt vmcnt(0)3594; GFX90A-NEXT:    ; return to shader part epilog3595;3596; GFX10PLUS-LABEL: atomic_add_i64_1darray:3597; GFX10PLUS:       ; %bb.0: ; %main_body3598; GFX10PLUS-NEXT:    s_mov_b32 s0, s23599; GFX10PLUS-NEXT:    s_mov_b32 s1, s33600; GFX10PLUS-NEXT:    s_mov_b32 s2, s43601; GFX10PLUS-NEXT:    s_mov_b32 s3, s53602; GFX10PLUS-NEXT:    s_mov_b32 s4, s63603; GFX10PLUS-NEXT:    s_mov_b32 s5, s73604; GFX10PLUS-NEXT:    s_mov_b32 s6, s83605; GFX10PLUS-NEXT:    s_mov_b32 s7, s93606; GFX10PLUS-NEXT:    image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D_ARRAY unorm glc3607; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)3608; GFX10PLUS-NEXT:    ; return to shader part epilog3609;3610; GFX12-LABEL: atomic_add_i64_1darray:3611; GFX12:       ; %bb.0: ; %main_body3612; GFX12-NEXT:    s_mov_b32 s0, s23613; GFX12-NEXT:    s_mov_b32 s1, s33614; GFX12-NEXT:    s_mov_b32 s2, s43615; GFX12-NEXT:    s_mov_b32 s3, s53616; GFX12-NEXT:    s_mov_b32 s4, s63617; GFX12-NEXT:    s_mov_b32 s5, s73618; GFX12-NEXT:    s_mov_b32 s6, s83619; GFX12-NEXT:    s_mov_b32 s7, s93620; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v3], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D_ARRAY th:TH_ATOMIC_RETURN3621; GFX12-NEXT:    s_wait_loadcnt 0x03622; GFX12-NEXT:    ; return to shader part epilog3623main_body:3624  %v = call i64 @llvm.amdgcn.image.atomic.add.1darray.i64.i32(i64 %data, i32 %s, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)3625  %out = bitcast i64 %v to <2 x float>3626  ret <2 x float> %out3627}3628 3629define amdgpu_ps <2 x float> @atomic_add_i64_2darray(<8 x i32> inreg %rsrc, i64 %data, i32 %s, i32 %t, i32 %slice) {3630; GFX6-LABEL: atomic_add_i64_2darray:3631; GFX6:       ; %bb.0: ; %main_body3632; GFX6-NEXT:    s_mov_b32 s0, s23633; GFX6-NEXT:    s_mov_b32 s1, s33634; GFX6-NEXT:    s_mov_b32 s2, s43635; GFX6-NEXT:    s_mov_b32 s3, s53636; GFX6-NEXT:    s_mov_b32 s4, s63637; GFX6-NEXT:    s_mov_b32 s5, s73638; GFX6-NEXT:    s_mov_b32 s6, s83639; GFX6-NEXT:    s_mov_b32 s7, s93640; GFX6-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da3641; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)3642; GFX6-NEXT:    ; return to shader part epilog3643;3644; GFX8-LABEL: atomic_add_i64_2darray:3645; GFX8:       ; %bb.0: ; %main_body3646; GFX8-NEXT:    s_mov_b32 s0, s23647; GFX8-NEXT:    s_mov_b32 s1, s33648; GFX8-NEXT:    s_mov_b32 s2, s43649; GFX8-NEXT:    s_mov_b32 s3, s53650; GFX8-NEXT:    s_mov_b32 s4, s63651; GFX8-NEXT:    s_mov_b32 s5, s73652; GFX8-NEXT:    s_mov_b32 s6, s83653; GFX8-NEXT:    s_mov_b32 s7, s93654; GFX8-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da3655; GFX8-NEXT:    s_waitcnt vmcnt(0)3656; GFX8-NEXT:    ; return to shader part epilog3657;3658; GFX900-LABEL: atomic_add_i64_2darray:3659; GFX900:       ; %bb.0: ; %main_body3660; GFX900-NEXT:    s_mov_b32 s0, s23661; GFX900-NEXT:    s_mov_b32 s1, s33662; GFX900-NEXT:    s_mov_b32 s2, s43663; GFX900-NEXT:    s_mov_b32 s3, s53664; GFX900-NEXT:    s_mov_b32 s4, s63665; GFX900-NEXT:    s_mov_b32 s5, s73666; GFX900-NEXT:    s_mov_b32 s6, s83667; GFX900-NEXT:    s_mov_b32 s7, s93668; GFX900-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da3669; GFX900-NEXT:    s_waitcnt vmcnt(0)3670; GFX900-NEXT:    ; return to shader part epilog3671;3672; GFX90A-LABEL: atomic_add_i64_2darray:3673; GFX90A:       ; %bb.0: ; %main_body3674; GFX90A-NEXT:    s_mov_b32 s0, s23675; GFX90A-NEXT:    s_mov_b32 s1, s33676; GFX90A-NEXT:    s_mov_b32 s2, s43677; GFX90A-NEXT:    s_mov_b32 s3, s53678; GFX90A-NEXT:    s_mov_b32 s4, s63679; GFX90A-NEXT:    s_mov_b32 s5, s73680; GFX90A-NEXT:    s_mov_b32 s6, s83681; GFX90A-NEXT:    s_mov_b32 s7, s93682; GFX90A-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da3683; GFX90A-NEXT:    s_waitcnt vmcnt(0)3684; GFX90A-NEXT:    ; return to shader part epilog3685;3686; GFX10PLUS-LABEL: atomic_add_i64_2darray:3687; GFX10PLUS:       ; %bb.0: ; %main_body3688; GFX10PLUS-NEXT:    s_mov_b32 s0, s23689; GFX10PLUS-NEXT:    s_mov_b32 s1, s33690; GFX10PLUS-NEXT:    s_mov_b32 s2, s43691; GFX10PLUS-NEXT:    s_mov_b32 s3, s53692; GFX10PLUS-NEXT:    s_mov_b32 s4, s63693; GFX10PLUS-NEXT:    s_mov_b32 s5, s73694; GFX10PLUS-NEXT:    s_mov_b32 s6, s83695; GFX10PLUS-NEXT:    s_mov_b32 s7, s93696; GFX10PLUS-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_ARRAY unorm glc3697; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)3698; GFX10PLUS-NEXT:    ; return to shader part epilog3699;3700; GFX12-LABEL: atomic_add_i64_2darray:3701; GFX12:       ; %bb.0: ; %main_body3702; GFX12-NEXT:    s_mov_b32 s0, s23703; GFX12-NEXT:    s_mov_b32 s1, s33704; GFX12-NEXT:    s_mov_b32 s2, s43705; GFX12-NEXT:    s_mov_b32 s3, s53706; GFX12-NEXT:    s_mov_b32 s4, s63707; GFX12-NEXT:    s_mov_b32 s5, s73708; GFX12-NEXT:    s_mov_b32 s6, s83709; GFX12-NEXT:    s_mov_b32 s7, s93710; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v3, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_ARRAY th:TH_ATOMIC_RETURN3711; GFX12-NEXT:    s_wait_loadcnt 0x03712; GFX12-NEXT:    ; return to shader part epilog3713main_body:3714  %v = call i64 @llvm.amdgcn.image.atomic.add.2darray.i64.i32(i64 %data, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)3715  %out = bitcast i64 %v to <2 x float>3716  ret <2 x float> %out3717}3718 3719define amdgpu_ps <2 x float> @atomic_add_i64_2dmsaa(<8 x i32> inreg %rsrc, i64 %data, i32 %s, i32 %t, i32 %fragid) {3720; GFX6-LABEL: atomic_add_i64_2dmsaa:3721; GFX6:       ; %bb.0: ; %main_body3722; GFX6-NEXT:    s_mov_b32 s0, s23723; GFX6-NEXT:    s_mov_b32 s1, s33724; GFX6-NEXT:    s_mov_b32 s2, s43725; GFX6-NEXT:    s_mov_b32 s3, s53726; GFX6-NEXT:    s_mov_b32 s4, s63727; GFX6-NEXT:    s_mov_b32 s5, s73728; GFX6-NEXT:    s_mov_b32 s6, s83729; GFX6-NEXT:    s_mov_b32 s7, s93730; GFX6-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc3731; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)3732; GFX6-NEXT:    ; return to shader part epilog3733;3734; GFX8-LABEL: atomic_add_i64_2dmsaa:3735; GFX8:       ; %bb.0: ; %main_body3736; GFX8-NEXT:    s_mov_b32 s0, s23737; GFX8-NEXT:    s_mov_b32 s1, s33738; GFX8-NEXT:    s_mov_b32 s2, s43739; GFX8-NEXT:    s_mov_b32 s3, s53740; GFX8-NEXT:    s_mov_b32 s4, s63741; GFX8-NEXT:    s_mov_b32 s5, s73742; GFX8-NEXT:    s_mov_b32 s6, s83743; GFX8-NEXT:    s_mov_b32 s7, s93744; GFX8-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc3745; GFX8-NEXT:    s_waitcnt vmcnt(0)3746; GFX8-NEXT:    ; return to shader part epilog3747;3748; GFX900-LABEL: atomic_add_i64_2dmsaa:3749; GFX900:       ; %bb.0: ; %main_body3750; GFX900-NEXT:    s_mov_b32 s0, s23751; GFX900-NEXT:    s_mov_b32 s1, s33752; GFX900-NEXT:    s_mov_b32 s2, s43753; GFX900-NEXT:    s_mov_b32 s3, s53754; GFX900-NEXT:    s_mov_b32 s4, s63755; GFX900-NEXT:    s_mov_b32 s5, s73756; GFX900-NEXT:    s_mov_b32 s6, s83757; GFX900-NEXT:    s_mov_b32 s7, s93758; GFX900-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc3759; GFX900-NEXT:    s_waitcnt vmcnt(0)3760; GFX900-NEXT:    ; return to shader part epilog3761;3762; GFX90A-LABEL: atomic_add_i64_2dmsaa:3763; GFX90A:       ; %bb.0: ; %main_body3764; GFX90A-NEXT:    s_mov_b32 s0, s23765; GFX90A-NEXT:    s_mov_b32 s1, s33766; GFX90A-NEXT:    s_mov_b32 s2, s43767; GFX90A-NEXT:    s_mov_b32 s3, s53768; GFX90A-NEXT:    s_mov_b32 s4, s63769; GFX90A-NEXT:    s_mov_b32 s5, s73770; GFX90A-NEXT:    s_mov_b32 s6, s83771; GFX90A-NEXT:    s_mov_b32 s7, s93772; GFX90A-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc3773; GFX90A-NEXT:    s_waitcnt vmcnt(0)3774; GFX90A-NEXT:    ; return to shader part epilog3775;3776; GFX10PLUS-LABEL: atomic_add_i64_2dmsaa:3777; GFX10PLUS:       ; %bb.0: ; %main_body3778; GFX10PLUS-NEXT:    s_mov_b32 s0, s23779; GFX10PLUS-NEXT:    s_mov_b32 s1, s33780; GFX10PLUS-NEXT:    s_mov_b32 s2, s43781; GFX10PLUS-NEXT:    s_mov_b32 s3, s53782; GFX10PLUS-NEXT:    s_mov_b32 s4, s63783; GFX10PLUS-NEXT:    s_mov_b32 s5, s73784; GFX10PLUS-NEXT:    s_mov_b32 s6, s83785; GFX10PLUS-NEXT:    s_mov_b32 s7, s93786; GFX10PLUS-NEXT:    image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_MSAA unorm glc3787; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)3788; GFX10PLUS-NEXT:    ; return to shader part epilog3789;3790; GFX12-LABEL: atomic_add_i64_2dmsaa:3791; GFX12:       ; %bb.0: ; %main_body3792; GFX12-NEXT:    s_mov_b32 s0, s23793; GFX12-NEXT:    s_mov_b32 s1, s33794; GFX12-NEXT:    s_mov_b32 s2, s43795; GFX12-NEXT:    s_mov_b32 s3, s53796; GFX12-NEXT:    s_mov_b32 s4, s63797; GFX12-NEXT:    s_mov_b32 s5, s73798; GFX12-NEXT:    s_mov_b32 s6, s83799; GFX12-NEXT:    s_mov_b32 s7, s93800; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v3, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_MSAA th:TH_ATOMIC_RETURN3801; GFX12-NEXT:    s_wait_loadcnt 0x03802; GFX12-NEXT:    ; return to shader part epilog3803main_body:3804  %v = call i64 @llvm.amdgcn.image.atomic.add.2dmsaa.i64.i32(i64 %data, i32 %s, i32 %t, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0)3805  %out = bitcast i64 %v to <2 x float>3806  ret <2 x float> %out3807}3808 3809define amdgpu_ps <2 x float> @atomic_add_i64_2darraymsaa(<8 x i32> inreg %rsrc, i64 %data, i32 %s, i32 %t, i32 %slice, i32 %fragid) {3810; GFX6-LABEL: atomic_add_i64_2darraymsaa:3811; GFX6:       ; %bb.0: ; %main_body3812; GFX6-NEXT:    s_mov_b32 s0, s23813; GFX6-NEXT:    s_mov_b32 s1, s33814; GFX6-NEXT:    s_mov_b32 s2, s43815; GFX6-NEXT:    s_mov_b32 s3, s53816; GFX6-NEXT:    s_mov_b32 s4, s63817; GFX6-NEXT:    s_mov_b32 s5, s73818; GFX6-NEXT:    s_mov_b32 s6, s83819; GFX6-NEXT:    s_mov_b32 s7, s93820; GFX6-NEXT:    image_atomic_add v[0:1], v[2:5], s[0:7] dmask:0x3 unorm glc da3821; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)3822; GFX6-NEXT:    ; return to shader part epilog3823;3824; GFX8-LABEL: atomic_add_i64_2darraymsaa:3825; GFX8:       ; %bb.0: ; %main_body3826; GFX8-NEXT:    s_mov_b32 s0, s23827; GFX8-NEXT:    s_mov_b32 s1, s33828; GFX8-NEXT:    s_mov_b32 s2, s43829; GFX8-NEXT:    s_mov_b32 s3, s53830; GFX8-NEXT:    s_mov_b32 s4, s63831; GFX8-NEXT:    s_mov_b32 s5, s73832; GFX8-NEXT:    s_mov_b32 s6, s83833; GFX8-NEXT:    s_mov_b32 s7, s93834; GFX8-NEXT:    image_atomic_add v[0:1], v[2:5], s[0:7] dmask:0x3 unorm glc da3835; GFX8-NEXT:    s_waitcnt vmcnt(0)3836; GFX8-NEXT:    ; return to shader part epilog3837;3838; GFX900-LABEL: atomic_add_i64_2darraymsaa:3839; GFX900:       ; %bb.0: ; %main_body3840; GFX900-NEXT:    s_mov_b32 s0, s23841; GFX900-NEXT:    s_mov_b32 s1, s33842; GFX900-NEXT:    s_mov_b32 s2, s43843; GFX900-NEXT:    s_mov_b32 s3, s53844; GFX900-NEXT:    s_mov_b32 s4, s63845; GFX900-NEXT:    s_mov_b32 s5, s73846; GFX900-NEXT:    s_mov_b32 s6, s83847; GFX900-NEXT:    s_mov_b32 s7, s93848; GFX900-NEXT:    image_atomic_add v[0:1], v[2:5], s[0:7] dmask:0x3 unorm glc da3849; GFX900-NEXT:    s_waitcnt vmcnt(0)3850; GFX900-NEXT:    ; return to shader part epilog3851;3852; GFX90A-LABEL: atomic_add_i64_2darraymsaa:3853; GFX90A:       ; %bb.0: ; %main_body3854; GFX90A-NEXT:    s_mov_b32 s0, s23855; GFX90A-NEXT:    s_mov_b32 s1, s33856; GFX90A-NEXT:    s_mov_b32 s2, s43857; GFX90A-NEXT:    s_mov_b32 s3, s53858; GFX90A-NEXT:    s_mov_b32 s4, s63859; GFX90A-NEXT:    s_mov_b32 s5, s73860; GFX90A-NEXT:    s_mov_b32 s6, s83861; GFX90A-NEXT:    s_mov_b32 s7, s93862; GFX90A-NEXT:    image_atomic_add v[0:1], v[2:5], s[0:7] dmask:0x3 unorm glc da3863; GFX90A-NEXT:    s_waitcnt vmcnt(0)3864; GFX90A-NEXT:    ; return to shader part epilog3865;3866; GFX10PLUS-LABEL: atomic_add_i64_2darraymsaa:3867; GFX10PLUS:       ; %bb.0: ; %main_body3868; GFX10PLUS-NEXT:    s_mov_b32 s0, s23869; GFX10PLUS-NEXT:    s_mov_b32 s1, s33870; GFX10PLUS-NEXT:    s_mov_b32 s2, s43871; GFX10PLUS-NEXT:    s_mov_b32 s3, s53872; GFX10PLUS-NEXT:    s_mov_b32 s4, s63873; GFX10PLUS-NEXT:    s_mov_b32 s5, s73874; GFX10PLUS-NEXT:    s_mov_b32 s6, s83875; GFX10PLUS-NEXT:    s_mov_b32 s7, s93876; GFX10PLUS-NEXT:    image_atomic_add v[0:1], v[2:5], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm glc3877; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)3878; GFX10PLUS-NEXT:    ; return to shader part epilog3879;3880; GFX12-LABEL: atomic_add_i64_2darraymsaa:3881; GFX12:       ; %bb.0: ; %main_body3882; GFX12-NEXT:    s_mov_b32 s0, s23883; GFX12-NEXT:    s_mov_b32 s1, s33884; GFX12-NEXT:    s_mov_b32 s2, s43885; GFX12-NEXT:    s_mov_b32 s3, s53886; GFX12-NEXT:    s_mov_b32 s4, s63887; GFX12-NEXT:    s_mov_b32 s5, s73888; GFX12-NEXT:    s_mov_b32 s6, s83889; GFX12-NEXT:    s_mov_b32 s7, s93890; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v3, v4, v5], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY th:TH_ATOMIC_RETURN3891; GFX12-NEXT:    s_wait_loadcnt 0x03892; GFX12-NEXT:    ; return to shader part epilog3893main_body:3894  %v = call i64 @llvm.amdgcn.image.atomic.add.2darraymsaa.i64.i32(i64 %data, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0)3895  %out = bitcast i64 %v to <2 x float>3896  ret <2 x float> %out3897}3898 3899define amdgpu_ps <2 x float> @atomic_add_i64_1d_slc(<8 x i32> inreg %rsrc, i64 %data, i32 %s) {3900; GFX6-LABEL: atomic_add_i64_1d_slc:3901; GFX6:       ; %bb.0: ; %main_body3902; GFX6-NEXT:    s_mov_b32 s0, s23903; GFX6-NEXT:    s_mov_b32 s1, s33904; GFX6-NEXT:    s_mov_b32 s2, s43905; GFX6-NEXT:    s_mov_b32 s3, s53906; GFX6-NEXT:    s_mov_b32 s4, s63907; GFX6-NEXT:    s_mov_b32 s5, s73908; GFX6-NEXT:    s_mov_b32 s6, s83909; GFX6-NEXT:    s_mov_b32 s7, s93910; GFX6-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc slc3911; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)3912; GFX6-NEXT:    ; return to shader part epilog3913;3914; GFX8-LABEL: atomic_add_i64_1d_slc:3915; GFX8:       ; %bb.0: ; %main_body3916; GFX8-NEXT:    s_mov_b32 s0, s23917; GFX8-NEXT:    s_mov_b32 s1, s33918; GFX8-NEXT:    s_mov_b32 s2, s43919; GFX8-NEXT:    s_mov_b32 s3, s53920; GFX8-NEXT:    s_mov_b32 s4, s63921; GFX8-NEXT:    s_mov_b32 s5, s73922; GFX8-NEXT:    s_mov_b32 s6, s83923; GFX8-NEXT:    s_mov_b32 s7, s93924; GFX8-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc slc3925; GFX8-NEXT:    s_waitcnt vmcnt(0)3926; GFX8-NEXT:    ; return to shader part epilog3927;3928; GFX900-LABEL: atomic_add_i64_1d_slc:3929; GFX900:       ; %bb.0: ; %main_body3930; GFX900-NEXT:    s_mov_b32 s0, s23931; GFX900-NEXT:    s_mov_b32 s1, s33932; GFX900-NEXT:    s_mov_b32 s2, s43933; GFX900-NEXT:    s_mov_b32 s3, s53934; GFX900-NEXT:    s_mov_b32 s4, s63935; GFX900-NEXT:    s_mov_b32 s5, s73936; GFX900-NEXT:    s_mov_b32 s6, s83937; GFX900-NEXT:    s_mov_b32 s7, s93938; GFX900-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc slc3939; GFX900-NEXT:    s_waitcnt vmcnt(0)3940; GFX900-NEXT:    ; return to shader part epilog3941;3942; GFX90A-LABEL: atomic_add_i64_1d_slc:3943; GFX90A:       ; %bb.0: ; %main_body3944; GFX90A-NEXT:    s_mov_b32 s0, s23945; GFX90A-NEXT:    s_mov_b32 s1, s33946; GFX90A-NEXT:    s_mov_b32 s2, s43947; GFX90A-NEXT:    s_mov_b32 s3, s53948; GFX90A-NEXT:    s_mov_b32 s4, s63949; GFX90A-NEXT:    s_mov_b32 s5, s73950; GFX90A-NEXT:    s_mov_b32 s6, s83951; GFX90A-NEXT:    s_mov_b32 s7, s93952; GFX90A-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc slc3953; GFX90A-NEXT:    s_waitcnt vmcnt(0)3954; GFX90A-NEXT:    ; return to shader part epilog3955;3956; GFX10PLUS-LABEL: atomic_add_i64_1d_slc:3957; GFX10PLUS:       ; %bb.0: ; %main_body3958; GFX10PLUS-NEXT:    s_mov_b32 s0, s23959; GFX10PLUS-NEXT:    s_mov_b32 s1, s33960; GFX10PLUS-NEXT:    s_mov_b32 s2, s43961; GFX10PLUS-NEXT:    s_mov_b32 s3, s53962; GFX10PLUS-NEXT:    s_mov_b32 s4, s63963; GFX10PLUS-NEXT:    s_mov_b32 s5, s73964; GFX10PLUS-NEXT:    s_mov_b32 s6, s83965; GFX10PLUS-NEXT:    s_mov_b32 s7, s93966; GFX10PLUS-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc slc3967; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)3968; GFX10PLUS-NEXT:    ; return to shader part epilog3969;3970; GFX12-LABEL: atomic_add_i64_1d_slc:3971; GFX12:       ; %bb.0: ; %main_body3972; GFX12-NEXT:    s_mov_b32 s0, s23973; GFX12-NEXT:    s_mov_b32 s1, s33974; GFX12-NEXT:    s_mov_b32 s2, s43975; GFX12-NEXT:    s_mov_b32 s3, s53976; GFX12-NEXT:    s_mov_b32 s4, s63977; GFX12-NEXT:    s_mov_b32 s5, s73978; GFX12-NEXT:    s_mov_b32 s6, s83979; GFX12-NEXT:    s_mov_b32 s7, s93980; GFX12-NEXT:    image_atomic_add_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_NT_RETURN3981; GFX12-NEXT:    s_wait_loadcnt 0x03982; GFX12-NEXT:    ; return to shader part epilog3983main_body:3984  %v = call i64 @llvm.amdgcn.image.atomic.add.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 2)3985  %out = bitcast i64 %v to <2 x float>3986  ret <2 x float> %out3987}3988 3989declare i32 @llvm.amdgcn.image.atomic.swap.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #03990declare i32 @llvm.amdgcn.image.atomic.add.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #03991declare i32 @llvm.amdgcn.image.atomic.sub.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #03992declare i32 @llvm.amdgcn.image.atomic.smin.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #03993declare i32 @llvm.amdgcn.image.atomic.umin.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #03994declare i32 @llvm.amdgcn.image.atomic.smax.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #03995declare i32 @llvm.amdgcn.image.atomic.umax.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #03996declare i32 @llvm.amdgcn.image.atomic.and.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #03997declare i32 @llvm.amdgcn.image.atomic.or.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #03998declare i32 @llvm.amdgcn.image.atomic.xor.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #03999declare i32 @llvm.amdgcn.image.atomic.inc.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04000declare i32 @llvm.amdgcn.image.atomic.dec.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04001declare i32 @llvm.amdgcn.image.atomic.cmpswap.1d.i32.i32(i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04002declare i32 @llvm.amdgcn.image.atomic.add.2d.i32.i32(i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04003declare i32 @llvm.amdgcn.image.atomic.add.3d.i32.i32(i32, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04004declare i32 @llvm.amdgcn.image.atomic.add.cube.i32.i32(i32, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04005declare i32 @llvm.amdgcn.image.atomic.add.1darray.i32.i32(i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04006declare i32 @llvm.amdgcn.image.atomic.add.2darray.i32.i32(i32, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04007declare i32 @llvm.amdgcn.image.atomic.add.2dmsaa.i32.i32(i32, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04008declare i32 @llvm.amdgcn.image.atomic.add.2darraymsaa.i32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04009 4010declare i64 @llvm.amdgcn.image.atomic.swap.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #04011declare i64 @llvm.amdgcn.image.atomic.add.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #04012declare i64 @llvm.amdgcn.image.atomic.sub.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #04013declare i64 @llvm.amdgcn.image.atomic.smin.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #04014declare i64 @llvm.amdgcn.image.atomic.umin.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #04015declare i64 @llvm.amdgcn.image.atomic.smax.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #04016declare i64 @llvm.amdgcn.image.atomic.umax.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #04017declare i64 @llvm.amdgcn.image.atomic.and.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #04018declare i64 @llvm.amdgcn.image.atomic.or.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #04019declare i64 @llvm.amdgcn.image.atomic.xor.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #04020declare i64 @llvm.amdgcn.image.atomic.inc.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #04021declare i64 @llvm.amdgcn.image.atomic.dec.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #04022declare i64 @llvm.amdgcn.image.atomic.cmpswap.1d.i64.i32(i64, i64, i32, <8 x i32>, i32 immarg, i32 immarg) #04023declare i64 @llvm.amdgcn.image.atomic.add.2d.i64.i32(i64, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04024declare i64 @llvm.amdgcn.image.atomic.add.3d.i64.i32(i64, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04025declare i64 @llvm.amdgcn.image.atomic.add.cube.i64.i32(i64, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04026declare i64 @llvm.amdgcn.image.atomic.add.1darray.i64.i32(i64, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04027declare i64 @llvm.amdgcn.image.atomic.add.2darray.i64.i32(i64, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04028declare i64 @llvm.amdgcn.image.atomic.add.2dmsaa.i64.i32(i64, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04029declare i64 @llvm.amdgcn.image.atomic.add.2darraymsaa.i64.i32(i64, i32, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #04030 4031attributes #0 = { nounwind }4032