1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -o - %s | FileCheck -check-prefix=GFX6 %s 3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -o - %s | FileCheck -check-prefix=GFX8 %s 4; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -o - %s | FileCheck -check-prefix=GFX900 %s 5; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx90a -o - %s | FileCheck -check-prefix=GFX90A %s 6; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -o - %s | FileCheck -check-prefix=GFX10 %s 7; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -o - %s | FileCheck -check-prefix=GFX10 %s 8 9define amdgpu_ps float @atomic_swap_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) { 10; GFX6-LABEL: atomic_swap_i32_1d: 11; GFX6: ; %bb.0: ; %main_body 12; GFX6-NEXT: s_mov_b32 s0, s2 13; GFX6-NEXT: s_mov_b32 s1, s3 14; GFX6-NEXT: s_mov_b32 s2, s4 15; GFX6-NEXT: s_mov_b32 s3, s5 16; GFX6-NEXT: s_mov_b32 s4, s6 17; GFX6-NEXT: s_mov_b32 s5, s7 18; GFX6-NEXT: s_mov_b32 s6, s8 19; GFX6-NEXT: s_mov_b32 s7, s9 20; GFX6-NEXT: image_atomic_swap v0, v1, s[0:7] dmask:0x1 unorm glc 21; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 22; GFX6-NEXT: ; return to shader part epilog 23; 24; GFX8-LABEL: atomic_swap_i32_1d: 25; GFX8: ; %bb.0: ; %main_body 26; GFX8-NEXT: s_mov_b32 s0, s2 27; GFX8-NEXT: s_mov_b32 s1, s3 28; GFX8-NEXT: s_mov_b32 s2, s4 29; GFX8-NEXT: s_mov_b32 s3, s5 30; GFX8-NEXT: s_mov_b32 s4, s6 31; GFX8-NEXT: s_mov_b32 s5, s7 32; GFX8-NEXT: s_mov_b32 s6, s8 33; GFX8-NEXT: s_mov_b32 s7, s9 34; GFX8-NEXT: image_atomic_swap v0, v1, s[0:7] dmask:0x1 unorm glc 35; GFX8-NEXT: s_waitcnt vmcnt(0) 36; GFX8-NEXT: ; return to shader part epilog 37; 38; GFX900-LABEL: atomic_swap_i32_1d: 39; GFX900: ; %bb.0: ; %main_body 40; GFX900-NEXT: s_mov_b32 s0, s2 41; GFX900-NEXT: s_mov_b32 s1, s3 42; GFX900-NEXT: s_mov_b32 s2, s4 43; GFX900-NEXT: s_mov_b32 s3, s5 44; GFX900-NEXT: s_mov_b32 s4, s6 45; GFX900-NEXT: s_mov_b32 s5, s7 46; GFX900-NEXT: s_mov_b32 s6, s8 47; GFX900-NEXT: s_mov_b32 s7, s9 48; GFX900-NEXT: image_atomic_swap v0, v1, s[0:7] dmask:0x1 unorm glc 49; GFX900-NEXT: s_waitcnt vmcnt(0) 50; GFX900-NEXT: ; return to shader part epilog 51; 52; GFX90A-LABEL: atomic_swap_i32_1d: 53; GFX90A: ; %bb.0: ; %main_body 54; GFX90A-NEXT: s_mov_b32 s0, s2 55; GFX90A-NEXT: s_mov_b32 s1, s3 56; GFX90A-NEXT: s_mov_b32 s2, s4 57; GFX90A-NEXT: s_mov_b32 s3, s5 58; GFX90A-NEXT: s_mov_b32 s4, s6 59; GFX90A-NEXT: s_mov_b32 s5, s7 60; GFX90A-NEXT: s_mov_b32 s6, s8 61; GFX90A-NEXT: s_mov_b32 s7, s9 62; GFX90A-NEXT: v_mov_b32_e32 v2, v1 63; GFX90A-NEXT: image_atomic_swap v0, v2, s[0:7] dmask:0x1 unorm glc 64; GFX90A-NEXT: s_waitcnt vmcnt(0) 65; GFX90A-NEXT: ; return to shader part epilog 66; 67; GFX10-LABEL: atomic_swap_i32_1d: 68; GFX10: ; %bb.0: ; %main_body 69; GFX10-NEXT: s_mov_b32 s0, s2 70; GFX10-NEXT: s_mov_b32 s1, s3 71; GFX10-NEXT: s_mov_b32 s2, s4 72; GFX10-NEXT: s_mov_b32 s3, s5 73; GFX10-NEXT: s_mov_b32 s4, s6 74; GFX10-NEXT: s_mov_b32 s5, s7 75; GFX10-NEXT: s_mov_b32 s6, s8 76; GFX10-NEXT: s_mov_b32 s7, s9 77; GFX10-NEXT: image_atomic_swap v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc 78; GFX10-NEXT: s_waitcnt vmcnt(0) 79; GFX10-NEXT: ; return to shader part epilog 80main_body: 81 %v = call i32 @llvm.amdgcn.image.atomic.swap.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 82 %out = bitcast i32 %v to float 83 ret float %out 84} 85 86define amdgpu_ps float @atomic_add_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) { 87; GFX6-LABEL: atomic_add_i32_1d: 88; GFX6: ; %bb.0: ; %main_body 89; GFX6-NEXT: s_mov_b32 s0, s2 90; GFX6-NEXT: s_mov_b32 s1, s3 91; GFX6-NEXT: s_mov_b32 s2, s4 92; GFX6-NEXT: s_mov_b32 s3, s5 93; GFX6-NEXT: s_mov_b32 s4, s6 94; GFX6-NEXT: s_mov_b32 s5, s7 95; GFX6-NEXT: s_mov_b32 s6, s8 96; GFX6-NEXT: s_mov_b32 s7, s9 97; GFX6-NEXT: image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc 98; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 99; GFX6-NEXT: ; return to shader part epilog 100; 101; GFX8-LABEL: atomic_add_i32_1d: 102; GFX8: ; %bb.0: ; %main_body 103; GFX8-NEXT: s_mov_b32 s0, s2 104; GFX8-NEXT: s_mov_b32 s1, s3 105; GFX8-NEXT: s_mov_b32 s2, s4 106; GFX8-NEXT: s_mov_b32 s3, s5 107; GFX8-NEXT: s_mov_b32 s4, s6 108; GFX8-NEXT: s_mov_b32 s5, s7 109; GFX8-NEXT: s_mov_b32 s6, s8 110; GFX8-NEXT: s_mov_b32 s7, s9 111; GFX8-NEXT: image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc 112; GFX8-NEXT: s_waitcnt vmcnt(0) 113; GFX8-NEXT: ; return to shader part epilog 114; 115; GFX900-LABEL: atomic_add_i32_1d: 116; GFX900: ; %bb.0: ; %main_body 117; GFX900-NEXT: s_mov_b32 s0, s2 118; GFX900-NEXT: s_mov_b32 s1, s3 119; GFX900-NEXT: s_mov_b32 s2, s4 120; GFX900-NEXT: s_mov_b32 s3, s5 121; GFX900-NEXT: s_mov_b32 s4, s6 122; GFX900-NEXT: s_mov_b32 s5, s7 123; GFX900-NEXT: s_mov_b32 s6, s8 124; GFX900-NEXT: s_mov_b32 s7, s9 125; GFX900-NEXT: image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc 126; GFX900-NEXT: s_waitcnt vmcnt(0) 127; GFX900-NEXT: ; return to shader part epilog 128; 129; GFX90A-LABEL: atomic_add_i32_1d: 130; GFX90A: ; %bb.0: ; %main_body 131; GFX90A-NEXT: s_mov_b32 s0, s2 132; GFX90A-NEXT: s_mov_b32 s1, s3 133; GFX90A-NEXT: s_mov_b32 s2, s4 134; GFX90A-NEXT: s_mov_b32 s3, s5 135; GFX90A-NEXT: s_mov_b32 s4, s6 136; GFX90A-NEXT: s_mov_b32 s5, s7 137; GFX90A-NEXT: s_mov_b32 s6, s8 138; GFX90A-NEXT: s_mov_b32 s7, s9 139; GFX90A-NEXT: v_mov_b32_e32 v2, v1 140; GFX90A-NEXT: image_atomic_add v0, v2, s[0:7] dmask:0x1 unorm glc 141; GFX90A-NEXT: s_waitcnt vmcnt(0) 142; GFX90A-NEXT: ; return to shader part epilog 143; 144; GFX10-LABEL: atomic_add_i32_1d: 145; GFX10: ; %bb.0: ; %main_body 146; GFX10-NEXT: s_mov_b32 s0, s2 147; GFX10-NEXT: s_mov_b32 s1, s3 148; GFX10-NEXT: s_mov_b32 s2, s4 149; GFX10-NEXT: s_mov_b32 s3, s5 150; GFX10-NEXT: s_mov_b32 s4, s6 151; GFX10-NEXT: s_mov_b32 s5, s7 152; GFX10-NEXT: s_mov_b32 s6, s8 153; GFX10-NEXT: s_mov_b32 s7, s9 154; GFX10-NEXT: image_atomic_add v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc 155; GFX10-NEXT: s_waitcnt vmcnt(0) 156; GFX10-NEXT: ; return to shader part epilog 157main_body: 158 %v = call i32 @llvm.amdgcn.image.atomic.add.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 159 %out = bitcast i32 %v to float 160 ret float %out 161} 162 163define amdgpu_ps float @atomic_sub_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) { 164; GFX6-LABEL: atomic_sub_i32_1d: 165; GFX6: ; %bb.0: ; %main_body 166; GFX6-NEXT: s_mov_b32 s0, s2 167; GFX6-NEXT: s_mov_b32 s1, s3 168; GFX6-NEXT: s_mov_b32 s2, s4 169; GFX6-NEXT: s_mov_b32 s3, s5 170; GFX6-NEXT: s_mov_b32 s4, s6 171; GFX6-NEXT: s_mov_b32 s5, s7 172; GFX6-NEXT: s_mov_b32 s6, s8 173; GFX6-NEXT: s_mov_b32 s7, s9 174; GFX6-NEXT: image_atomic_sub v0, v1, s[0:7] dmask:0x1 unorm glc 175; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 176; GFX6-NEXT: ; return to shader part epilog 177; 178; GFX8-LABEL: atomic_sub_i32_1d: 179; GFX8: ; %bb.0: ; %main_body 180; GFX8-NEXT: s_mov_b32 s0, s2 181; GFX8-NEXT: s_mov_b32 s1, s3 182; GFX8-NEXT: s_mov_b32 s2, s4 183; GFX8-NEXT: s_mov_b32 s3, s5 184; GFX8-NEXT: s_mov_b32 s4, s6 185; GFX8-NEXT: s_mov_b32 s5, s7 186; GFX8-NEXT: s_mov_b32 s6, s8 187; GFX8-NEXT: s_mov_b32 s7, s9 188; GFX8-NEXT: image_atomic_sub v0, v1, s[0:7] dmask:0x1 unorm glc 189; GFX8-NEXT: s_waitcnt vmcnt(0) 190; GFX8-NEXT: ; return to shader part epilog 191; 192; GFX900-LABEL: atomic_sub_i32_1d: 193; GFX900: ; %bb.0: ; %main_body 194; GFX900-NEXT: s_mov_b32 s0, s2 195; GFX900-NEXT: s_mov_b32 s1, s3 196; GFX900-NEXT: s_mov_b32 s2, s4 197; GFX900-NEXT: s_mov_b32 s3, s5 198; GFX900-NEXT: s_mov_b32 s4, s6 199; GFX900-NEXT: s_mov_b32 s5, s7 200; GFX900-NEXT: s_mov_b32 s6, s8 201; GFX900-NEXT: s_mov_b32 s7, s9 202; GFX900-NEXT: image_atomic_sub v0, v1, s[0:7] dmask:0x1 unorm glc 203; GFX900-NEXT: s_waitcnt vmcnt(0) 204; GFX900-NEXT: ; return to shader part epilog 205; 206; GFX90A-LABEL: atomic_sub_i32_1d: 207; GFX90A: ; %bb.0: ; %main_body 208; GFX90A-NEXT: s_mov_b32 s0, s2 209; GFX90A-NEXT: s_mov_b32 s1, s3 210; GFX90A-NEXT: s_mov_b32 s2, s4 211; GFX90A-NEXT: s_mov_b32 s3, s5 212; GFX90A-NEXT: s_mov_b32 s4, s6 213; GFX90A-NEXT: s_mov_b32 s5, s7 214; GFX90A-NEXT: s_mov_b32 s6, s8 215; GFX90A-NEXT: s_mov_b32 s7, s9 216; GFX90A-NEXT: v_mov_b32_e32 v2, v1 217; GFX90A-NEXT: image_atomic_sub v0, v2, s[0:7] dmask:0x1 unorm glc 218; GFX90A-NEXT: s_waitcnt vmcnt(0) 219; GFX90A-NEXT: ; return to shader part epilog 220; 221; GFX10-LABEL: atomic_sub_i32_1d: 222; GFX10: ; %bb.0: ; %main_body 223; GFX10-NEXT: s_mov_b32 s0, s2 224; GFX10-NEXT: s_mov_b32 s1, s3 225; GFX10-NEXT: s_mov_b32 s2, s4 226; GFX10-NEXT: s_mov_b32 s3, s5 227; GFX10-NEXT: s_mov_b32 s4, s6 228; GFX10-NEXT: s_mov_b32 s5, s7 229; GFX10-NEXT: s_mov_b32 s6, s8 230; GFX10-NEXT: s_mov_b32 s7, s9 231; GFX10-NEXT: image_atomic_sub v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc 232; GFX10-NEXT: s_waitcnt vmcnt(0) 233; GFX10-NEXT: ; return to shader part epilog 234main_body: 235 %v = call i32 @llvm.amdgcn.image.atomic.sub.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 236 %out = bitcast i32 %v to float 237 ret float %out 238} 239 240define amdgpu_ps float @atomic_smin_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) { 241; GFX6-LABEL: atomic_smin_i32_1d: 242; GFX6: ; %bb.0: ; %main_body 243; GFX6-NEXT: s_mov_b32 s0, s2 244; GFX6-NEXT: s_mov_b32 s1, s3 245; GFX6-NEXT: s_mov_b32 s2, s4 246; GFX6-NEXT: s_mov_b32 s3, s5 247; GFX6-NEXT: s_mov_b32 s4, s6 248; GFX6-NEXT: s_mov_b32 s5, s7 249; GFX6-NEXT: s_mov_b32 s6, s8 250; GFX6-NEXT: s_mov_b32 s7, s9 251; GFX6-NEXT: image_atomic_smin v0, v1, s[0:7] dmask:0x1 unorm glc 252; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 253; GFX6-NEXT: ; return to shader part epilog 254; 255; GFX8-LABEL: atomic_smin_i32_1d: 256; GFX8: ; %bb.0: ; %main_body 257; GFX8-NEXT: s_mov_b32 s0, s2 258; GFX8-NEXT: s_mov_b32 s1, s3 259; GFX8-NEXT: s_mov_b32 s2, s4 260; GFX8-NEXT: s_mov_b32 s3, s5 261; GFX8-NEXT: s_mov_b32 s4, s6 262; GFX8-NEXT: s_mov_b32 s5, s7 263; GFX8-NEXT: s_mov_b32 s6, s8 264; GFX8-NEXT: s_mov_b32 s7, s9 265; GFX8-NEXT: image_atomic_smin v0, v1, s[0:7] dmask:0x1 unorm glc 266; GFX8-NEXT: s_waitcnt vmcnt(0) 267; GFX8-NEXT: ; return to shader part epilog 268; 269; GFX900-LABEL: atomic_smin_i32_1d: 270; GFX900: ; %bb.0: ; %main_body 271; GFX900-NEXT: s_mov_b32 s0, s2 272; GFX900-NEXT: s_mov_b32 s1, s3 273; GFX900-NEXT: s_mov_b32 s2, s4 274; GFX900-NEXT: s_mov_b32 s3, s5 275; GFX900-NEXT: s_mov_b32 s4, s6 276; GFX900-NEXT: s_mov_b32 s5, s7 277; GFX900-NEXT: s_mov_b32 s6, s8 278; GFX900-NEXT: s_mov_b32 s7, s9 279; GFX900-NEXT: image_atomic_smin v0, v1, s[0:7] dmask:0x1 unorm glc 280; GFX900-NEXT: s_waitcnt vmcnt(0) 281; GFX900-NEXT: ; return to shader part epilog 282; 283; GFX90A-LABEL: atomic_smin_i32_1d: 284; GFX90A: ; %bb.0: ; %main_body 285; GFX90A-NEXT: s_mov_b32 s0, s2 286; GFX90A-NEXT: s_mov_b32 s1, s3 287; GFX90A-NEXT: s_mov_b32 s2, s4 288; GFX90A-NEXT: s_mov_b32 s3, s5 289; GFX90A-NEXT: s_mov_b32 s4, s6 290; GFX90A-NEXT: s_mov_b32 s5, s7 291; GFX90A-NEXT: s_mov_b32 s6, s8 292; GFX90A-NEXT: s_mov_b32 s7, s9 293; GFX90A-NEXT: v_mov_b32_e32 v2, v1 294; GFX90A-NEXT: image_atomic_smin v0, v2, s[0:7] dmask:0x1 unorm glc 295; GFX90A-NEXT: s_waitcnt vmcnt(0) 296; GFX90A-NEXT: ; return to shader part epilog 297; 298; GFX10-LABEL: atomic_smin_i32_1d: 299; GFX10: ; %bb.0: ; %main_body 300; GFX10-NEXT: s_mov_b32 s0, s2 301; GFX10-NEXT: s_mov_b32 s1, s3 302; GFX10-NEXT: s_mov_b32 s2, s4 303; GFX10-NEXT: s_mov_b32 s3, s5 304; GFX10-NEXT: s_mov_b32 s4, s6 305; GFX10-NEXT: s_mov_b32 s5, s7 306; GFX10-NEXT: s_mov_b32 s6, s8 307; GFX10-NEXT: s_mov_b32 s7, s9 308; GFX10-NEXT: image_atomic_smin v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc 309; GFX10-NEXT: s_waitcnt vmcnt(0) 310; GFX10-NEXT: ; return to shader part epilog 311main_body: 312 %v = call i32 @llvm.amdgcn.image.atomic.smin.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 313 %out = bitcast i32 %v to float 314 ret float %out 315} 316 317define amdgpu_ps float @atomic_umin_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) { 318; GFX6-LABEL: atomic_umin_i32_1d: 319; GFX6: ; %bb.0: ; %main_body 320; GFX6-NEXT: s_mov_b32 s0, s2 321; GFX6-NEXT: s_mov_b32 s1, s3 322; GFX6-NEXT: s_mov_b32 s2, s4 323; GFX6-NEXT: s_mov_b32 s3, s5 324; GFX6-NEXT: s_mov_b32 s4, s6 325; GFX6-NEXT: s_mov_b32 s5, s7 326; GFX6-NEXT: s_mov_b32 s6, s8 327; GFX6-NEXT: s_mov_b32 s7, s9 328; GFX6-NEXT: image_atomic_umin v0, v1, s[0:7] dmask:0x1 unorm glc 329; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 330; GFX6-NEXT: ; return to shader part epilog 331; 332; GFX8-LABEL: atomic_umin_i32_1d: 333; GFX8: ; %bb.0: ; %main_body 334; GFX8-NEXT: s_mov_b32 s0, s2 335; GFX8-NEXT: s_mov_b32 s1, s3 336; GFX8-NEXT: s_mov_b32 s2, s4 337; GFX8-NEXT: s_mov_b32 s3, s5 338; GFX8-NEXT: s_mov_b32 s4, s6 339; GFX8-NEXT: s_mov_b32 s5, s7 340; GFX8-NEXT: s_mov_b32 s6, s8 341; GFX8-NEXT: s_mov_b32 s7, s9 342; GFX8-NEXT: image_atomic_umin v0, v1, s[0:7] dmask:0x1 unorm glc 343; GFX8-NEXT: s_waitcnt vmcnt(0) 344; GFX8-NEXT: ; return to shader part epilog 345; 346; GFX900-LABEL: atomic_umin_i32_1d: 347; GFX900: ; %bb.0: ; %main_body 348; GFX900-NEXT: s_mov_b32 s0, s2 349; GFX900-NEXT: s_mov_b32 s1, s3 350; GFX900-NEXT: s_mov_b32 s2, s4 351; GFX900-NEXT: s_mov_b32 s3, s5 352; GFX900-NEXT: s_mov_b32 s4, s6 353; GFX900-NEXT: s_mov_b32 s5, s7 354; GFX900-NEXT: s_mov_b32 s6, s8 355; GFX900-NEXT: s_mov_b32 s7, s9 356; GFX900-NEXT: image_atomic_umin v0, v1, s[0:7] dmask:0x1 unorm glc 357; GFX900-NEXT: s_waitcnt vmcnt(0) 358; GFX900-NEXT: ; return to shader part epilog 359; 360; GFX90A-LABEL: atomic_umin_i32_1d: 361; GFX90A: ; %bb.0: ; %main_body 362; GFX90A-NEXT: s_mov_b32 s0, s2 363; GFX90A-NEXT: s_mov_b32 s1, s3 364; GFX90A-NEXT: s_mov_b32 s2, s4 365; GFX90A-NEXT: s_mov_b32 s3, s5 366; GFX90A-NEXT: s_mov_b32 s4, s6 367; GFX90A-NEXT: s_mov_b32 s5, s7 368; GFX90A-NEXT: s_mov_b32 s6, s8 369; GFX90A-NEXT: s_mov_b32 s7, s9 370; GFX90A-NEXT: v_mov_b32_e32 v2, v1 371; GFX90A-NEXT: image_atomic_umin v0, v2, s[0:7] dmask:0x1 unorm glc 372; GFX90A-NEXT: s_waitcnt vmcnt(0) 373; GFX90A-NEXT: ; return to shader part epilog 374; 375; GFX10-LABEL: atomic_umin_i32_1d: 376; GFX10: ; %bb.0: ; %main_body 377; GFX10-NEXT: s_mov_b32 s0, s2 378; GFX10-NEXT: s_mov_b32 s1, s3 379; GFX10-NEXT: s_mov_b32 s2, s4 380; GFX10-NEXT: s_mov_b32 s3, s5 381; GFX10-NEXT: s_mov_b32 s4, s6 382; GFX10-NEXT: s_mov_b32 s5, s7 383; GFX10-NEXT: s_mov_b32 s6, s8 384; GFX10-NEXT: s_mov_b32 s7, s9 385; GFX10-NEXT: image_atomic_umin v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc 386; GFX10-NEXT: s_waitcnt vmcnt(0) 387; GFX10-NEXT: ; return to shader part epilog 388main_body: 389 %v = call i32 @llvm.amdgcn.image.atomic.umin.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 390 %out = bitcast i32 %v to float 391 ret float %out 392} 393 394define amdgpu_ps float @atomic_smax_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) { 395; GFX6-LABEL: atomic_smax_i32_1d: 396; GFX6: ; %bb.0: ; %main_body 397; GFX6-NEXT: s_mov_b32 s0, s2 398; GFX6-NEXT: s_mov_b32 s1, s3 399; GFX6-NEXT: s_mov_b32 s2, s4 400; GFX6-NEXT: s_mov_b32 s3, s5 401; GFX6-NEXT: s_mov_b32 s4, s6 402; GFX6-NEXT: s_mov_b32 s5, s7 403; GFX6-NEXT: s_mov_b32 s6, s8 404; GFX6-NEXT: s_mov_b32 s7, s9 405; GFX6-NEXT: image_atomic_smax v0, v1, s[0:7] dmask:0x1 unorm glc 406; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 407; GFX6-NEXT: ; return to shader part epilog 408; 409; GFX8-LABEL: atomic_smax_i32_1d: 410; GFX8: ; %bb.0: ; %main_body 411; GFX8-NEXT: s_mov_b32 s0, s2 412; GFX8-NEXT: s_mov_b32 s1, s3 413; GFX8-NEXT: s_mov_b32 s2, s4 414; GFX8-NEXT: s_mov_b32 s3, s5 415; GFX8-NEXT: s_mov_b32 s4, s6 416; GFX8-NEXT: s_mov_b32 s5, s7 417; GFX8-NEXT: s_mov_b32 s6, s8 418; GFX8-NEXT: s_mov_b32 s7, s9 419; GFX8-NEXT: image_atomic_smax v0, v1, s[0:7] dmask:0x1 unorm glc 420; GFX8-NEXT: s_waitcnt vmcnt(0) 421; GFX8-NEXT: ; return to shader part epilog 422; 423; GFX900-LABEL: atomic_smax_i32_1d: 424; GFX900: ; %bb.0: ; %main_body 425; GFX900-NEXT: s_mov_b32 s0, s2 426; GFX900-NEXT: s_mov_b32 s1, s3 427; GFX900-NEXT: s_mov_b32 s2, s4 428; GFX900-NEXT: s_mov_b32 s3, s5 429; GFX900-NEXT: s_mov_b32 s4, s6 430; GFX900-NEXT: s_mov_b32 s5, s7 431; GFX900-NEXT: s_mov_b32 s6, s8 432; GFX900-NEXT: s_mov_b32 s7, s9 433; GFX900-NEXT: image_atomic_smax v0, v1, s[0:7] dmask:0x1 unorm glc 434; GFX900-NEXT: s_waitcnt vmcnt(0) 435; GFX900-NEXT: ; return to shader part epilog 436; 437; GFX90A-LABEL: atomic_smax_i32_1d: 438; GFX90A: ; %bb.0: ; %main_body 439; GFX90A-NEXT: s_mov_b32 s0, s2 440; GFX90A-NEXT: s_mov_b32 s1, s3 441; GFX90A-NEXT: s_mov_b32 s2, s4 442; GFX90A-NEXT: s_mov_b32 s3, s5 443; GFX90A-NEXT: s_mov_b32 s4, s6 444; GFX90A-NEXT: s_mov_b32 s5, s7 445; GFX90A-NEXT: s_mov_b32 s6, s8 446; GFX90A-NEXT: s_mov_b32 s7, s9 447; GFX90A-NEXT: v_mov_b32_e32 v2, v1 448; GFX90A-NEXT: image_atomic_smax v0, v2, s[0:7] dmask:0x1 unorm glc 449; GFX90A-NEXT: s_waitcnt vmcnt(0) 450; GFX90A-NEXT: ; return to shader part epilog 451; 452; GFX10-LABEL: atomic_smax_i32_1d: 453; GFX10: ; %bb.0: ; %main_body 454; GFX10-NEXT: s_mov_b32 s0, s2 455; GFX10-NEXT: s_mov_b32 s1, s3 456; GFX10-NEXT: s_mov_b32 s2, s4 457; GFX10-NEXT: s_mov_b32 s3, s5 458; GFX10-NEXT: s_mov_b32 s4, s6 459; GFX10-NEXT: s_mov_b32 s5, s7 460; GFX10-NEXT: s_mov_b32 s6, s8 461; GFX10-NEXT: s_mov_b32 s7, s9 462; GFX10-NEXT: image_atomic_smax v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc 463; GFX10-NEXT: s_waitcnt vmcnt(0) 464; GFX10-NEXT: ; return to shader part epilog 465main_body: 466 %v = call i32 @llvm.amdgcn.image.atomic.smax.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 467 %out = bitcast i32 %v to float 468 ret float %out 469} 470 471define amdgpu_ps float @atomic_umax_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) { 472; GFX6-LABEL: atomic_umax_i32_1d: 473; GFX6: ; %bb.0: ; %main_body 474; GFX6-NEXT: s_mov_b32 s0, s2 475; GFX6-NEXT: s_mov_b32 s1, s3 476; GFX6-NEXT: s_mov_b32 s2, s4 477; GFX6-NEXT: s_mov_b32 s3, s5 478; GFX6-NEXT: s_mov_b32 s4, s6 479; GFX6-NEXT: s_mov_b32 s5, s7 480; GFX6-NEXT: s_mov_b32 s6, s8 481; GFX6-NEXT: s_mov_b32 s7, s9 482; GFX6-NEXT: image_atomic_umax v0, v1, s[0:7] dmask:0x1 unorm glc 483; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 484; GFX6-NEXT: ; return to shader part epilog 485; 486; GFX8-LABEL: atomic_umax_i32_1d: 487; GFX8: ; %bb.0: ; %main_body 488; GFX8-NEXT: s_mov_b32 s0, s2 489; GFX8-NEXT: s_mov_b32 s1, s3 490; GFX8-NEXT: s_mov_b32 s2, s4 491; GFX8-NEXT: s_mov_b32 s3, s5 492; GFX8-NEXT: s_mov_b32 s4, s6 493; GFX8-NEXT: s_mov_b32 s5, s7 494; GFX8-NEXT: s_mov_b32 s6, s8 495; GFX8-NEXT: s_mov_b32 s7, s9 496; GFX8-NEXT: image_atomic_umax v0, v1, s[0:7] dmask:0x1 unorm glc 497; GFX8-NEXT: s_waitcnt vmcnt(0) 498; GFX8-NEXT: ; return to shader part epilog 499; 500; GFX900-LABEL: atomic_umax_i32_1d: 501; GFX900: ; %bb.0: ; %main_body 502; GFX900-NEXT: s_mov_b32 s0, s2 503; GFX900-NEXT: s_mov_b32 s1, s3 504; GFX900-NEXT: s_mov_b32 s2, s4 505; GFX900-NEXT: s_mov_b32 s3, s5 506; GFX900-NEXT: s_mov_b32 s4, s6 507; GFX900-NEXT: s_mov_b32 s5, s7 508; GFX900-NEXT: s_mov_b32 s6, s8 509; GFX900-NEXT: s_mov_b32 s7, s9 510; GFX900-NEXT: image_atomic_umax v0, v1, s[0:7] dmask:0x1 unorm glc 511; GFX900-NEXT: s_waitcnt vmcnt(0) 512; GFX900-NEXT: ; return to shader part epilog 513; 514; GFX90A-LABEL: atomic_umax_i32_1d: 515; GFX90A: ; %bb.0: ; %main_body 516; GFX90A-NEXT: s_mov_b32 s0, s2 517; GFX90A-NEXT: s_mov_b32 s1, s3 518; GFX90A-NEXT: s_mov_b32 s2, s4 519; GFX90A-NEXT: s_mov_b32 s3, s5 520; GFX90A-NEXT: s_mov_b32 s4, s6 521; GFX90A-NEXT: s_mov_b32 s5, s7 522; GFX90A-NEXT: s_mov_b32 s6, s8 523; GFX90A-NEXT: s_mov_b32 s7, s9 524; GFX90A-NEXT: v_mov_b32_e32 v2, v1 525; GFX90A-NEXT: image_atomic_umax v0, v2, s[0:7] dmask:0x1 unorm glc 526; GFX90A-NEXT: s_waitcnt vmcnt(0) 527; GFX90A-NEXT: ; return to shader part epilog 528; 529; GFX10-LABEL: atomic_umax_i32_1d: 530; GFX10: ; %bb.0: ; %main_body 531; GFX10-NEXT: s_mov_b32 s0, s2 532; GFX10-NEXT: s_mov_b32 s1, s3 533; GFX10-NEXT: s_mov_b32 s2, s4 534; GFX10-NEXT: s_mov_b32 s3, s5 535; GFX10-NEXT: s_mov_b32 s4, s6 536; GFX10-NEXT: s_mov_b32 s5, s7 537; GFX10-NEXT: s_mov_b32 s6, s8 538; GFX10-NEXT: s_mov_b32 s7, s9 539; GFX10-NEXT: image_atomic_umax v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc 540; GFX10-NEXT: s_waitcnt vmcnt(0) 541; GFX10-NEXT: ; return to shader part epilog 542main_body: 543 %v = call i32 @llvm.amdgcn.image.atomic.umax.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 544 %out = bitcast i32 %v to float 545 ret float %out 546} 547 548define amdgpu_ps float @atomic_and_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) { 549; GFX6-LABEL: atomic_and_i32_1d: 550; GFX6: ; %bb.0: ; %main_body 551; GFX6-NEXT: s_mov_b32 s0, s2 552; GFX6-NEXT: s_mov_b32 s1, s3 553; GFX6-NEXT: s_mov_b32 s2, s4 554; GFX6-NEXT: s_mov_b32 s3, s5 555; GFX6-NEXT: s_mov_b32 s4, s6 556; GFX6-NEXT: s_mov_b32 s5, s7 557; GFX6-NEXT: s_mov_b32 s6, s8 558; GFX6-NEXT: s_mov_b32 s7, s9 559; GFX6-NEXT: image_atomic_and v0, v1, s[0:7] dmask:0x1 unorm glc 560; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 561; GFX6-NEXT: ; return to shader part epilog 562; 563; GFX8-LABEL: atomic_and_i32_1d: 564; GFX8: ; %bb.0: ; %main_body 565; GFX8-NEXT: s_mov_b32 s0, s2 566; GFX8-NEXT: s_mov_b32 s1, s3 567; GFX8-NEXT: s_mov_b32 s2, s4 568; GFX8-NEXT: s_mov_b32 s3, s5 569; GFX8-NEXT: s_mov_b32 s4, s6 570; GFX8-NEXT: s_mov_b32 s5, s7 571; GFX8-NEXT: s_mov_b32 s6, s8 572; GFX8-NEXT: s_mov_b32 s7, s9 573; GFX8-NEXT: image_atomic_and v0, v1, s[0:7] dmask:0x1 unorm glc 574; GFX8-NEXT: s_waitcnt vmcnt(0) 575; GFX8-NEXT: ; return to shader part epilog 576; 577; GFX900-LABEL: atomic_and_i32_1d: 578; GFX900: ; %bb.0: ; %main_body 579; GFX900-NEXT: s_mov_b32 s0, s2 580; GFX900-NEXT: s_mov_b32 s1, s3 581; GFX900-NEXT: s_mov_b32 s2, s4 582; GFX900-NEXT: s_mov_b32 s3, s5 583; GFX900-NEXT: s_mov_b32 s4, s6 584; GFX900-NEXT: s_mov_b32 s5, s7 585; GFX900-NEXT: s_mov_b32 s6, s8 586; GFX900-NEXT: s_mov_b32 s7, s9 587; GFX900-NEXT: image_atomic_and v0, v1, s[0:7] dmask:0x1 unorm glc 588; GFX900-NEXT: s_waitcnt vmcnt(0) 589; GFX900-NEXT: ; return to shader part epilog 590; 591; GFX90A-LABEL: atomic_and_i32_1d: 592; GFX90A: ; %bb.0: ; %main_body 593; GFX90A-NEXT: s_mov_b32 s0, s2 594; GFX90A-NEXT: s_mov_b32 s1, s3 595; GFX90A-NEXT: s_mov_b32 s2, s4 596; GFX90A-NEXT: s_mov_b32 s3, s5 597; GFX90A-NEXT: s_mov_b32 s4, s6 598; GFX90A-NEXT: s_mov_b32 s5, s7 599; GFX90A-NEXT: s_mov_b32 s6, s8 600; GFX90A-NEXT: s_mov_b32 s7, s9 601; GFX90A-NEXT: v_mov_b32_e32 v2, v1 602; GFX90A-NEXT: image_atomic_and v0, v2, s[0:7] dmask:0x1 unorm glc 603; GFX90A-NEXT: s_waitcnt vmcnt(0) 604; GFX90A-NEXT: ; return to shader part epilog 605; 606; GFX10-LABEL: atomic_and_i32_1d: 607; GFX10: ; %bb.0: ; %main_body 608; GFX10-NEXT: s_mov_b32 s0, s2 609; GFX10-NEXT: s_mov_b32 s1, s3 610; GFX10-NEXT: s_mov_b32 s2, s4 611; GFX10-NEXT: s_mov_b32 s3, s5 612; GFX10-NEXT: s_mov_b32 s4, s6 613; GFX10-NEXT: s_mov_b32 s5, s7 614; GFX10-NEXT: s_mov_b32 s6, s8 615; GFX10-NEXT: s_mov_b32 s7, s9 616; GFX10-NEXT: image_atomic_and v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc 617; GFX10-NEXT: s_waitcnt vmcnt(0) 618; GFX10-NEXT: ; return to shader part epilog 619main_body: 620 %v = call i32 @llvm.amdgcn.image.atomic.and.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 621 %out = bitcast i32 %v to float 622 ret float %out 623} 624 625define amdgpu_ps float @atomic_or_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) { 626; GFX6-LABEL: atomic_or_i32_1d: 627; GFX6: ; %bb.0: ; %main_body 628; GFX6-NEXT: s_mov_b32 s0, s2 629; GFX6-NEXT: s_mov_b32 s1, s3 630; GFX6-NEXT: s_mov_b32 s2, s4 631; GFX6-NEXT: s_mov_b32 s3, s5 632; GFX6-NEXT: s_mov_b32 s4, s6 633; GFX6-NEXT: s_mov_b32 s5, s7 634; GFX6-NEXT: s_mov_b32 s6, s8 635; GFX6-NEXT: s_mov_b32 s7, s9 636; GFX6-NEXT: image_atomic_or v0, v1, s[0:7] dmask:0x1 unorm glc 637; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 638; GFX6-NEXT: ; return to shader part epilog 639; 640; GFX8-LABEL: atomic_or_i32_1d: 641; GFX8: ; %bb.0: ; %main_body 642; GFX8-NEXT: s_mov_b32 s0, s2 643; GFX8-NEXT: s_mov_b32 s1, s3 644; GFX8-NEXT: s_mov_b32 s2, s4 645; GFX8-NEXT: s_mov_b32 s3, s5 646; GFX8-NEXT: s_mov_b32 s4, s6 647; GFX8-NEXT: s_mov_b32 s5, s7 648; GFX8-NEXT: s_mov_b32 s6, s8 649; GFX8-NEXT: s_mov_b32 s7, s9 650; GFX8-NEXT: image_atomic_or v0, v1, s[0:7] dmask:0x1 unorm glc 651; GFX8-NEXT: s_waitcnt vmcnt(0) 652; GFX8-NEXT: ; return to shader part epilog 653; 654; GFX900-LABEL: atomic_or_i32_1d: 655; GFX900: ; %bb.0: ; %main_body 656; GFX900-NEXT: s_mov_b32 s0, s2 657; GFX900-NEXT: s_mov_b32 s1, s3 658; GFX900-NEXT: s_mov_b32 s2, s4 659; GFX900-NEXT: s_mov_b32 s3, s5 660; GFX900-NEXT: s_mov_b32 s4, s6 661; GFX900-NEXT: s_mov_b32 s5, s7 662; GFX900-NEXT: s_mov_b32 s6, s8 663; GFX900-NEXT: s_mov_b32 s7, s9 664; GFX900-NEXT: image_atomic_or v0, v1, s[0:7] dmask:0x1 unorm glc 665; GFX900-NEXT: s_waitcnt vmcnt(0) 666; GFX900-NEXT: ; return to shader part epilog 667; 668; GFX90A-LABEL: atomic_or_i32_1d: 669; GFX90A: ; %bb.0: ; %main_body 670; GFX90A-NEXT: s_mov_b32 s0, s2 671; GFX90A-NEXT: s_mov_b32 s1, s3 672; GFX90A-NEXT: s_mov_b32 s2, s4 673; GFX90A-NEXT: s_mov_b32 s3, s5 674; GFX90A-NEXT: s_mov_b32 s4, s6 675; GFX90A-NEXT: s_mov_b32 s5, s7 676; GFX90A-NEXT: s_mov_b32 s6, s8 677; GFX90A-NEXT: s_mov_b32 s7, s9 678; GFX90A-NEXT: v_mov_b32_e32 v2, v1 679; GFX90A-NEXT: image_atomic_or v0, v2, s[0:7] dmask:0x1 unorm glc 680; GFX90A-NEXT: s_waitcnt vmcnt(0) 681; GFX90A-NEXT: ; return to shader part epilog 682; 683; GFX10-LABEL: atomic_or_i32_1d: 684; GFX10: ; %bb.0: ; %main_body 685; GFX10-NEXT: s_mov_b32 s0, s2 686; GFX10-NEXT: s_mov_b32 s1, s3 687; GFX10-NEXT: s_mov_b32 s2, s4 688; GFX10-NEXT: s_mov_b32 s3, s5 689; GFX10-NEXT: s_mov_b32 s4, s6 690; GFX10-NEXT: s_mov_b32 s5, s7 691; GFX10-NEXT: s_mov_b32 s6, s8 692; GFX10-NEXT: s_mov_b32 s7, s9 693; GFX10-NEXT: image_atomic_or v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc 694; GFX10-NEXT: s_waitcnt vmcnt(0) 695; GFX10-NEXT: ; return to shader part epilog 696main_body: 697 %v = call i32 @llvm.amdgcn.image.atomic.or.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 698 %out = bitcast i32 %v to float 699 ret float %out 700} 701 702define amdgpu_ps float @atomic_xor_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) { 703; GFX6-LABEL: atomic_xor_i32_1d: 704; GFX6: ; %bb.0: ; %main_body 705; GFX6-NEXT: s_mov_b32 s0, s2 706; GFX6-NEXT: s_mov_b32 s1, s3 707; GFX6-NEXT: s_mov_b32 s2, s4 708; GFX6-NEXT: s_mov_b32 s3, s5 709; GFX6-NEXT: s_mov_b32 s4, s6 710; GFX6-NEXT: s_mov_b32 s5, s7 711; GFX6-NEXT: s_mov_b32 s6, s8 712; GFX6-NEXT: s_mov_b32 s7, s9 713; GFX6-NEXT: image_atomic_xor v0, v1, s[0:7] dmask:0x1 unorm glc 714; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 715; GFX6-NEXT: ; return to shader part epilog 716; 717; GFX8-LABEL: atomic_xor_i32_1d: 718; GFX8: ; %bb.0: ; %main_body 719; GFX8-NEXT: s_mov_b32 s0, s2 720; GFX8-NEXT: s_mov_b32 s1, s3 721; GFX8-NEXT: s_mov_b32 s2, s4 722; GFX8-NEXT: s_mov_b32 s3, s5 723; GFX8-NEXT: s_mov_b32 s4, s6 724; GFX8-NEXT: s_mov_b32 s5, s7 725; GFX8-NEXT: s_mov_b32 s6, s8 726; GFX8-NEXT: s_mov_b32 s7, s9 727; GFX8-NEXT: image_atomic_xor v0, v1, s[0:7] dmask:0x1 unorm glc 728; GFX8-NEXT: s_waitcnt vmcnt(0) 729; GFX8-NEXT: ; return to shader part epilog 730; 731; GFX900-LABEL: atomic_xor_i32_1d: 732; GFX900: ; %bb.0: ; %main_body 733; GFX900-NEXT: s_mov_b32 s0, s2 734; GFX900-NEXT: s_mov_b32 s1, s3 735; GFX900-NEXT: s_mov_b32 s2, s4 736; GFX900-NEXT: s_mov_b32 s3, s5 737; GFX900-NEXT: s_mov_b32 s4, s6 738; GFX900-NEXT: s_mov_b32 s5, s7 739; GFX900-NEXT: s_mov_b32 s6, s8 740; GFX900-NEXT: s_mov_b32 s7, s9 741; GFX900-NEXT: image_atomic_xor v0, v1, s[0:7] dmask:0x1 unorm glc 742; GFX900-NEXT: s_waitcnt vmcnt(0) 743; GFX900-NEXT: ; return to shader part epilog 744; 745; GFX90A-LABEL: atomic_xor_i32_1d: 746; GFX90A: ; %bb.0: ; %main_body 747; GFX90A-NEXT: s_mov_b32 s0, s2 748; GFX90A-NEXT: s_mov_b32 s1, s3 749; GFX90A-NEXT: s_mov_b32 s2, s4 750; GFX90A-NEXT: s_mov_b32 s3, s5 751; GFX90A-NEXT: s_mov_b32 s4, s6 752; GFX90A-NEXT: s_mov_b32 s5, s7 753; GFX90A-NEXT: s_mov_b32 s6, s8 754; GFX90A-NEXT: s_mov_b32 s7, s9 755; GFX90A-NEXT: v_mov_b32_e32 v2, v1 756; GFX90A-NEXT: image_atomic_xor v0, v2, s[0:7] dmask:0x1 unorm glc 757; GFX90A-NEXT: s_waitcnt vmcnt(0) 758; GFX90A-NEXT: ; return to shader part epilog 759; 760; GFX10-LABEL: atomic_xor_i32_1d: 761; GFX10: ; %bb.0: ; %main_body 762; GFX10-NEXT: s_mov_b32 s0, s2 763; GFX10-NEXT: s_mov_b32 s1, s3 764; GFX10-NEXT: s_mov_b32 s2, s4 765; GFX10-NEXT: s_mov_b32 s3, s5 766; GFX10-NEXT: s_mov_b32 s4, s6 767; GFX10-NEXT: s_mov_b32 s5, s7 768; GFX10-NEXT: s_mov_b32 s6, s8 769; GFX10-NEXT: s_mov_b32 s7, s9 770; GFX10-NEXT: image_atomic_xor v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc 771; GFX10-NEXT: s_waitcnt vmcnt(0) 772; GFX10-NEXT: ; return to shader part epilog 773main_body: 774 %v = call i32 @llvm.amdgcn.image.atomic.xor.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 775 %out = bitcast i32 %v to float 776 ret float %out 777} 778 779define amdgpu_ps float @atomic_inc_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) { 780; GFX6-LABEL: atomic_inc_i32_1d: 781; GFX6: ; %bb.0: ; %main_body 782; GFX6-NEXT: s_mov_b32 s0, s2 783; GFX6-NEXT: s_mov_b32 s1, s3 784; GFX6-NEXT: s_mov_b32 s2, s4 785; GFX6-NEXT: s_mov_b32 s3, s5 786; GFX6-NEXT: s_mov_b32 s4, s6 787; GFX6-NEXT: s_mov_b32 s5, s7 788; GFX6-NEXT: s_mov_b32 s6, s8 789; GFX6-NEXT: s_mov_b32 s7, s9 790; GFX6-NEXT: image_atomic_inc v0, v1, s[0:7] dmask:0x1 unorm glc 791; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 792; GFX6-NEXT: ; return to shader part epilog 793; 794; GFX8-LABEL: atomic_inc_i32_1d: 795; GFX8: ; %bb.0: ; %main_body 796; GFX8-NEXT: s_mov_b32 s0, s2 797; GFX8-NEXT: s_mov_b32 s1, s3 798; GFX8-NEXT: s_mov_b32 s2, s4 799; GFX8-NEXT: s_mov_b32 s3, s5 800; GFX8-NEXT: s_mov_b32 s4, s6 801; GFX8-NEXT: s_mov_b32 s5, s7 802; GFX8-NEXT: s_mov_b32 s6, s8 803; GFX8-NEXT: s_mov_b32 s7, s9 804; GFX8-NEXT: image_atomic_inc v0, v1, s[0:7] dmask:0x1 unorm glc 805; GFX8-NEXT: s_waitcnt vmcnt(0) 806; GFX8-NEXT: ; return to shader part epilog 807; 808; GFX900-LABEL: atomic_inc_i32_1d: 809; GFX900: ; %bb.0: ; %main_body 810; GFX900-NEXT: s_mov_b32 s0, s2 811; GFX900-NEXT: s_mov_b32 s1, s3 812; GFX900-NEXT: s_mov_b32 s2, s4 813; GFX900-NEXT: s_mov_b32 s3, s5 814; GFX900-NEXT: s_mov_b32 s4, s6 815; GFX900-NEXT: s_mov_b32 s5, s7 816; GFX900-NEXT: s_mov_b32 s6, s8 817; GFX900-NEXT: s_mov_b32 s7, s9 818; GFX900-NEXT: image_atomic_inc v0, v1, s[0:7] dmask:0x1 unorm glc 819; GFX900-NEXT: s_waitcnt vmcnt(0) 820; GFX900-NEXT: ; return to shader part epilog 821; 822; GFX90A-LABEL: atomic_inc_i32_1d: 823; GFX90A: ; %bb.0: ; %main_body 824; GFX90A-NEXT: s_mov_b32 s0, s2 825; GFX90A-NEXT: s_mov_b32 s1, s3 826; GFX90A-NEXT: s_mov_b32 s2, s4 827; GFX90A-NEXT: s_mov_b32 s3, s5 828; GFX90A-NEXT: s_mov_b32 s4, s6 829; GFX90A-NEXT: s_mov_b32 s5, s7 830; GFX90A-NEXT: s_mov_b32 s6, s8 831; GFX90A-NEXT: s_mov_b32 s7, s9 832; GFX90A-NEXT: v_mov_b32_e32 v2, v1 833; GFX90A-NEXT: image_atomic_inc v0, v2, s[0:7] dmask:0x1 unorm glc 834; GFX90A-NEXT: s_waitcnt vmcnt(0) 835; GFX90A-NEXT: ; return to shader part epilog 836; 837; GFX10-LABEL: atomic_inc_i32_1d: 838; GFX10: ; %bb.0: ; %main_body 839; GFX10-NEXT: s_mov_b32 s0, s2 840; GFX10-NEXT: s_mov_b32 s1, s3 841; GFX10-NEXT: s_mov_b32 s2, s4 842; GFX10-NEXT: s_mov_b32 s3, s5 843; GFX10-NEXT: s_mov_b32 s4, s6 844; GFX10-NEXT: s_mov_b32 s5, s7 845; GFX10-NEXT: s_mov_b32 s6, s8 846; GFX10-NEXT: s_mov_b32 s7, s9 847; GFX10-NEXT: image_atomic_inc v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc 848; GFX10-NEXT: s_waitcnt vmcnt(0) 849; GFX10-NEXT: ; return to shader part epilog 850main_body: 851 %v = call i32 @llvm.amdgcn.image.atomic.inc.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 852 %out = bitcast i32 %v to float 853 ret float %out 854} 855 856define amdgpu_ps float @atomic_dec_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i32 %s) { 857; GFX6-LABEL: atomic_dec_i32_1d: 858; GFX6: ; %bb.0: ; %main_body 859; GFX6-NEXT: s_mov_b32 s0, s2 860; GFX6-NEXT: s_mov_b32 s1, s3 861; GFX6-NEXT: s_mov_b32 s2, s4 862; GFX6-NEXT: s_mov_b32 s3, s5 863; GFX6-NEXT: s_mov_b32 s4, s6 864; GFX6-NEXT: s_mov_b32 s5, s7 865; GFX6-NEXT: s_mov_b32 s6, s8 866; GFX6-NEXT: s_mov_b32 s7, s9 867; GFX6-NEXT: image_atomic_dec v0, v1, s[0:7] dmask:0x1 unorm glc 868; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 869; GFX6-NEXT: ; return to shader part epilog 870; 871; GFX8-LABEL: atomic_dec_i32_1d: 872; GFX8: ; %bb.0: ; %main_body 873; GFX8-NEXT: s_mov_b32 s0, s2 874; GFX8-NEXT: s_mov_b32 s1, s3 875; GFX8-NEXT: s_mov_b32 s2, s4 876; GFX8-NEXT: s_mov_b32 s3, s5 877; GFX8-NEXT: s_mov_b32 s4, s6 878; GFX8-NEXT: s_mov_b32 s5, s7 879; GFX8-NEXT: s_mov_b32 s6, s8 880; GFX8-NEXT: s_mov_b32 s7, s9 881; GFX8-NEXT: image_atomic_dec v0, v1, s[0:7] dmask:0x1 unorm glc 882; GFX8-NEXT: s_waitcnt vmcnt(0) 883; GFX8-NEXT: ; return to shader part epilog 884; 885; GFX900-LABEL: atomic_dec_i32_1d: 886; GFX900: ; %bb.0: ; %main_body 887; GFX900-NEXT: s_mov_b32 s0, s2 888; GFX900-NEXT: s_mov_b32 s1, s3 889; GFX900-NEXT: s_mov_b32 s2, s4 890; GFX900-NEXT: s_mov_b32 s3, s5 891; GFX900-NEXT: s_mov_b32 s4, s6 892; GFX900-NEXT: s_mov_b32 s5, s7 893; GFX900-NEXT: s_mov_b32 s6, s8 894; GFX900-NEXT: s_mov_b32 s7, s9 895; GFX900-NEXT: image_atomic_dec v0, v1, s[0:7] dmask:0x1 unorm glc 896; GFX900-NEXT: s_waitcnt vmcnt(0) 897; GFX900-NEXT: ; return to shader part epilog 898; 899; GFX90A-LABEL: atomic_dec_i32_1d: 900; GFX90A: ; %bb.0: ; %main_body 901; GFX90A-NEXT: s_mov_b32 s0, s2 902; GFX90A-NEXT: s_mov_b32 s1, s3 903; GFX90A-NEXT: s_mov_b32 s2, s4 904; GFX90A-NEXT: s_mov_b32 s3, s5 905; GFX90A-NEXT: s_mov_b32 s4, s6 906; GFX90A-NEXT: s_mov_b32 s5, s7 907; GFX90A-NEXT: s_mov_b32 s6, s8 908; GFX90A-NEXT: s_mov_b32 s7, s9 909; GFX90A-NEXT: v_mov_b32_e32 v2, v1 910; GFX90A-NEXT: image_atomic_dec v0, v2, s[0:7] dmask:0x1 unorm glc 911; GFX90A-NEXT: s_waitcnt vmcnt(0) 912; GFX90A-NEXT: ; return to shader part epilog 913; 914; GFX10-LABEL: atomic_dec_i32_1d: 915; GFX10: ; %bb.0: ; %main_body 916; GFX10-NEXT: s_mov_b32 s0, s2 917; GFX10-NEXT: s_mov_b32 s1, s3 918; GFX10-NEXT: s_mov_b32 s2, s4 919; GFX10-NEXT: s_mov_b32 s3, s5 920; GFX10-NEXT: s_mov_b32 s4, s6 921; GFX10-NEXT: s_mov_b32 s5, s7 922; GFX10-NEXT: s_mov_b32 s6, s8 923; GFX10-NEXT: s_mov_b32 s7, s9 924; GFX10-NEXT: image_atomic_dec v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc 925; GFX10-NEXT: s_waitcnt vmcnt(0) 926; GFX10-NEXT: ; return to shader part epilog 927main_body: 928 %v = call i32 @llvm.amdgcn.image.atomic.dec.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 929 %out = bitcast i32 %v to float 930 ret float %out 931} 932 933define amdgpu_ps float @atomic_cmpswap_i32_1d(<8 x i32> inreg %rsrc, i32 %cmp, i32 %swap, i32 %s) { 934; GFX6-LABEL: atomic_cmpswap_i32_1d: 935; GFX6: ; %bb.0: ; %main_body 936; GFX6-NEXT: s_mov_b32 s0, s2 937; GFX6-NEXT: s_mov_b32 s1, s3 938; GFX6-NEXT: s_mov_b32 s2, s4 939; GFX6-NEXT: s_mov_b32 s3, s5 940; GFX6-NEXT: s_mov_b32 s4, s6 941; GFX6-NEXT: s_mov_b32 s5, s7 942; GFX6-NEXT: s_mov_b32 s6, s8 943; GFX6-NEXT: s_mov_b32 s7, s9 944; GFX6-NEXT: image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm glc 945; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 946; GFX6-NEXT: ; return to shader part epilog 947; 948; GFX8-LABEL: atomic_cmpswap_i32_1d: 949; GFX8: ; %bb.0: ; %main_body 950; GFX8-NEXT: s_mov_b32 s0, s2 951; GFX8-NEXT: s_mov_b32 s1, s3 952; GFX8-NEXT: s_mov_b32 s2, s4 953; GFX8-NEXT: s_mov_b32 s3, s5 954; GFX8-NEXT: s_mov_b32 s4, s6 955; GFX8-NEXT: s_mov_b32 s5, s7 956; GFX8-NEXT: s_mov_b32 s6, s8 957; GFX8-NEXT: s_mov_b32 s7, s9 958; GFX8-NEXT: image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm glc 959; GFX8-NEXT: s_waitcnt vmcnt(0) 960; GFX8-NEXT: ; return to shader part epilog 961; 962; GFX900-LABEL: atomic_cmpswap_i32_1d: 963; GFX900: ; %bb.0: ; %main_body 964; GFX900-NEXT: s_mov_b32 s0, s2 965; GFX900-NEXT: s_mov_b32 s1, s3 966; GFX900-NEXT: s_mov_b32 s2, s4 967; GFX900-NEXT: s_mov_b32 s3, s5 968; GFX900-NEXT: s_mov_b32 s4, s6 969; GFX900-NEXT: s_mov_b32 s5, s7 970; GFX900-NEXT: s_mov_b32 s6, s8 971; GFX900-NEXT: s_mov_b32 s7, s9 972; GFX900-NEXT: image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm glc 973; GFX900-NEXT: s_waitcnt vmcnt(0) 974; GFX900-NEXT: ; return to shader part epilog 975; 976; GFX90A-LABEL: atomic_cmpswap_i32_1d: 977; GFX90A: ; %bb.0: ; %main_body 978; GFX90A-NEXT: s_mov_b32 s0, s2 979; GFX90A-NEXT: s_mov_b32 s1, s3 980; GFX90A-NEXT: s_mov_b32 s2, s4 981; GFX90A-NEXT: s_mov_b32 s3, s5 982; GFX90A-NEXT: s_mov_b32 s4, s6 983; GFX90A-NEXT: s_mov_b32 s5, s7 984; GFX90A-NEXT: s_mov_b32 s6, s8 985; GFX90A-NEXT: s_mov_b32 s7, s9 986; GFX90A-NEXT: image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm glc 987; GFX90A-NEXT: s_waitcnt vmcnt(0) 988; GFX90A-NEXT: ; return to shader part epilog 989; 990; GFX10-LABEL: atomic_cmpswap_i32_1d: 991; GFX10: ; %bb.0: ; %main_body 992; GFX10-NEXT: s_mov_b32 s0, s2 993; GFX10-NEXT: s_mov_b32 s1, s3 994; GFX10-NEXT: s_mov_b32 s2, s4 995; GFX10-NEXT: s_mov_b32 s3, s5 996; GFX10-NEXT: s_mov_b32 s4, s6 997; GFX10-NEXT: s_mov_b32 s5, s7 998; GFX10-NEXT: s_mov_b32 s6, s8 999; GFX10-NEXT: s_mov_b32 s7, s9 1000; GFX10-NEXT: image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc 1001; GFX10-NEXT: s_waitcnt vmcnt(0) 1002; GFX10-NEXT: ; return to shader part epilog 1003main_body: 1004 %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) 1005 %out = bitcast i32 %v to float 1006 ret float %out 1007} 1008 1009define amdgpu_ps void @atomic_cmpswap_i32_1d_no_return(<8 x i32> inreg %rsrc, i32 %cmp, i32 %swap, i32 %s) { 1010; GFX6-LABEL: atomic_cmpswap_i32_1d_no_return: 1011; GFX6: ; %bb.0: ; %main_body 1012; GFX6-NEXT: s_mov_b32 s0, s2 1013; GFX6-NEXT: s_mov_b32 s1, s3 1014; GFX6-NEXT: s_mov_b32 s2, s4 1015; GFX6-NEXT: s_mov_b32 s3, s5 1016; GFX6-NEXT: s_mov_b32 s4, s6 1017; GFX6-NEXT: s_mov_b32 s5, s7 1018; GFX6-NEXT: s_mov_b32 s6, s8 1019; GFX6-NEXT: s_mov_b32 s7, s9 1020; GFX6-NEXT: image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1021; GFX6-NEXT: s_endpgm 1022; 1023; GFX8-LABEL: atomic_cmpswap_i32_1d_no_return: 1024; GFX8: ; %bb.0: ; %main_body 1025; GFX8-NEXT: s_mov_b32 s0, s2 1026; GFX8-NEXT: s_mov_b32 s1, s3 1027; GFX8-NEXT: s_mov_b32 s2, s4 1028; GFX8-NEXT: s_mov_b32 s3, s5 1029; GFX8-NEXT: s_mov_b32 s4, s6 1030; GFX8-NEXT: s_mov_b32 s5, s7 1031; GFX8-NEXT: s_mov_b32 s6, s8 1032; GFX8-NEXT: s_mov_b32 s7, s9 1033; GFX8-NEXT: image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1034; GFX8-NEXT: s_endpgm 1035; 1036; GFX900-LABEL: atomic_cmpswap_i32_1d_no_return: 1037; GFX900: ; %bb.0: ; %main_body 1038; GFX900-NEXT: s_mov_b32 s0, s2 1039; GFX900-NEXT: s_mov_b32 s1, s3 1040; GFX900-NEXT: s_mov_b32 s2, s4 1041; GFX900-NEXT: s_mov_b32 s3, s5 1042; GFX900-NEXT: s_mov_b32 s4, s6 1043; GFX900-NEXT: s_mov_b32 s5, s7 1044; GFX900-NEXT: s_mov_b32 s6, s8 1045; GFX900-NEXT: s_mov_b32 s7, s9 1046; GFX900-NEXT: image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1047; GFX900-NEXT: s_endpgm 1048; 1049; GFX90A-LABEL: atomic_cmpswap_i32_1d_no_return: 1050; GFX90A: ; %bb.0: ; %main_body 1051; GFX90A-NEXT: s_mov_b32 s0, s2 1052; GFX90A-NEXT: s_mov_b32 s1, s3 1053; GFX90A-NEXT: s_mov_b32 s2, s4 1054; GFX90A-NEXT: s_mov_b32 s3, s5 1055; GFX90A-NEXT: s_mov_b32 s4, s6 1056; GFX90A-NEXT: s_mov_b32 s5, s7 1057; GFX90A-NEXT: s_mov_b32 s6, s8 1058; GFX90A-NEXT: s_mov_b32 s7, s9 1059; GFX90A-NEXT: image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1060; GFX90A-NEXT: s_endpgm 1061; 1062; GFX10-LABEL: atomic_cmpswap_i32_1d_no_return: 1063; GFX10: ; %bb.0: ; %main_body 1064; GFX10-NEXT: s_mov_b32 s0, s2 1065; GFX10-NEXT: s_mov_b32 s1, s3 1066; GFX10-NEXT: s_mov_b32 s2, s4 1067; GFX10-NEXT: s_mov_b32 s3, s5 1068; GFX10-NEXT: s_mov_b32 s4, s6 1069; GFX10-NEXT: s_mov_b32 s5, s7 1070; GFX10-NEXT: s_mov_b32 s6, s8 1071; GFX10-NEXT: s_mov_b32 s7, s9 1072; GFX10-NEXT: image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc 1073; GFX10-NEXT: s_endpgm 1074main_body: 1075 %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) 1076 ret void 1077} 1078 1079define amdgpu_ps float @atomic_add_i32_2d(<8 x i32> inreg %rsrc, i32 %data, i32 %s, i32 %t) { 1080; GFX6-LABEL: atomic_add_i32_2d: 1081; GFX6: ; %bb.0: ; %main_body 1082; GFX6-NEXT: s_mov_b32 s0, s2 1083; GFX6-NEXT: s_mov_b32 s1, s3 1084; GFX6-NEXT: s_mov_b32 s2, s4 1085; GFX6-NEXT: s_mov_b32 s3, s5 1086; GFX6-NEXT: s_mov_b32 s4, s6 1087; GFX6-NEXT: s_mov_b32 s5, s7 1088; GFX6-NEXT: s_mov_b32 s6, s8 1089; GFX6-NEXT: s_mov_b32 s7, s9 1090; GFX6-NEXT: image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 unorm glc 1091; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1092; GFX6-NEXT: ; return to shader part epilog 1093; 1094; GFX8-LABEL: atomic_add_i32_2d: 1095; GFX8: ; %bb.0: ; %main_body 1096; GFX8-NEXT: s_mov_b32 s0, s2 1097; GFX8-NEXT: s_mov_b32 s1, s3 1098; GFX8-NEXT: s_mov_b32 s2, s4 1099; GFX8-NEXT: s_mov_b32 s3, s5 1100; GFX8-NEXT: s_mov_b32 s4, s6 1101; GFX8-NEXT: s_mov_b32 s5, s7 1102; GFX8-NEXT: s_mov_b32 s6, s8 1103; GFX8-NEXT: s_mov_b32 s7, s9 1104; GFX8-NEXT: image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 unorm glc 1105; GFX8-NEXT: s_waitcnt vmcnt(0) 1106; GFX8-NEXT: ; return to shader part epilog 1107; 1108; GFX900-LABEL: atomic_add_i32_2d: 1109; GFX900: ; %bb.0: ; %main_body 1110; GFX900-NEXT: s_mov_b32 s0, s2 1111; GFX900-NEXT: s_mov_b32 s1, s3 1112; GFX900-NEXT: s_mov_b32 s2, s4 1113; GFX900-NEXT: s_mov_b32 s3, s5 1114; GFX900-NEXT: s_mov_b32 s4, s6 1115; GFX900-NEXT: s_mov_b32 s5, s7 1116; GFX900-NEXT: s_mov_b32 s6, s8 1117; GFX900-NEXT: s_mov_b32 s7, s9 1118; GFX900-NEXT: image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 unorm glc 1119; GFX900-NEXT: s_waitcnt vmcnt(0) 1120; GFX900-NEXT: ; return to shader part epilog 1121; 1122; GFX90A-LABEL: atomic_add_i32_2d: 1123; GFX90A: ; %bb.0: ; %main_body 1124; GFX90A-NEXT: s_mov_b32 s0, s2 1125; GFX90A-NEXT: s_mov_b32 s1, s3 1126; GFX90A-NEXT: s_mov_b32 s2, s4 1127; GFX90A-NEXT: s_mov_b32 s3, s5 1128; GFX90A-NEXT: s_mov_b32 s4, s6 1129; GFX90A-NEXT: s_mov_b32 s5, s7 1130; GFX90A-NEXT: s_mov_b32 s6, s8 1131; GFX90A-NEXT: s_mov_b32 s7, s9 1132; GFX90A-NEXT: v_mov_b32_e32 v4, v1 1133; GFX90A-NEXT: v_mov_b32_e32 v5, v2 1134; GFX90A-NEXT: image_atomic_add v0, v[4:5], s[0:7] dmask:0x1 unorm glc 1135; GFX90A-NEXT: s_waitcnt vmcnt(0) 1136; GFX90A-NEXT: ; return to shader part epilog 1137; 1138; GFX10-LABEL: atomic_add_i32_2d: 1139; GFX10: ; %bb.0: ; %main_body 1140; GFX10-NEXT: s_mov_b32 s0, s2 1141; GFX10-NEXT: s_mov_b32 s1, s3 1142; GFX10-NEXT: s_mov_b32 s2, s4 1143; GFX10-NEXT: s_mov_b32 s3, s5 1144; GFX10-NEXT: s_mov_b32 s4, s6 1145; GFX10-NEXT: s_mov_b32 s5, s7 1146; GFX10-NEXT: s_mov_b32 s6, s8 1147; GFX10-NEXT: s_mov_b32 s7, s9 1148; GFX10-NEXT: image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm glc 1149; GFX10-NEXT: s_waitcnt vmcnt(0) 1150; GFX10-NEXT: ; return to shader part epilog 1151main_body: 1152 %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) 1153 %out = bitcast i32 %v to float 1154 ret float %out 1155} 1156 1157define amdgpu_ps float @atomic_add_i32_3d(<8 x i32> inreg %rsrc, i32 %data, i32 %s, i32 %t, i32 %r) { 1158; GFX6-LABEL: atomic_add_i32_3d: 1159; GFX6: ; %bb.0: ; %main_body 1160; GFX6-NEXT: s_mov_b32 s0, s2 1161; GFX6-NEXT: s_mov_b32 s1, s3 1162; GFX6-NEXT: s_mov_b32 s2, s4 1163; GFX6-NEXT: s_mov_b32 s3, s5 1164; GFX6-NEXT: s_mov_b32 s4, s6 1165; GFX6-NEXT: s_mov_b32 s5, s7 1166; GFX6-NEXT: s_mov_b32 s6, s8 1167; GFX6-NEXT: s_mov_b32 s7, s9 1168; GFX6-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc 1169; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1170; GFX6-NEXT: ; return to shader part epilog 1171; 1172; GFX8-LABEL: atomic_add_i32_3d: 1173; GFX8: ; %bb.0: ; %main_body 1174; GFX8-NEXT: s_mov_b32 s0, s2 1175; GFX8-NEXT: s_mov_b32 s1, s3 1176; GFX8-NEXT: s_mov_b32 s2, s4 1177; GFX8-NEXT: s_mov_b32 s3, s5 1178; GFX8-NEXT: s_mov_b32 s4, s6 1179; GFX8-NEXT: s_mov_b32 s5, s7 1180; GFX8-NEXT: s_mov_b32 s6, s8 1181; GFX8-NEXT: s_mov_b32 s7, s9 1182; GFX8-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc 1183; GFX8-NEXT: s_waitcnt vmcnt(0) 1184; GFX8-NEXT: ; return to shader part epilog 1185; 1186; GFX900-LABEL: atomic_add_i32_3d: 1187; GFX900: ; %bb.0: ; %main_body 1188; GFX900-NEXT: s_mov_b32 s0, s2 1189; GFX900-NEXT: s_mov_b32 s1, s3 1190; GFX900-NEXT: s_mov_b32 s2, s4 1191; GFX900-NEXT: s_mov_b32 s3, s5 1192; GFX900-NEXT: s_mov_b32 s4, s6 1193; GFX900-NEXT: s_mov_b32 s5, s7 1194; GFX900-NEXT: s_mov_b32 s6, s8 1195; GFX900-NEXT: s_mov_b32 s7, s9 1196; GFX900-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc 1197; GFX900-NEXT: s_waitcnt vmcnt(0) 1198; GFX900-NEXT: ; return to shader part epilog 1199; 1200; GFX90A-LABEL: atomic_add_i32_3d: 1201; GFX90A: ; %bb.0: ; %main_body 1202; GFX90A-NEXT: s_mov_b32 s0, s2 1203; GFX90A-NEXT: s_mov_b32 s1, s3 1204; GFX90A-NEXT: s_mov_b32 s2, s4 1205; GFX90A-NEXT: s_mov_b32 s3, s5 1206; GFX90A-NEXT: s_mov_b32 s4, s6 1207; GFX90A-NEXT: s_mov_b32 s5, s7 1208; GFX90A-NEXT: s_mov_b32 s6, s8 1209; GFX90A-NEXT: s_mov_b32 s7, s9 1210; GFX90A-NEXT: v_mov_b32_e32 v4, v1 1211; GFX90A-NEXT: v_mov_b32_e32 v5, v2 1212; GFX90A-NEXT: v_mov_b32_e32 v6, v3 1213; GFX90A-NEXT: image_atomic_add v0, v[4:6], s[0:7] dmask:0x1 unorm glc 1214; GFX90A-NEXT: s_waitcnt vmcnt(0) 1215; GFX90A-NEXT: ; return to shader part epilog 1216; 1217; GFX10-LABEL: atomic_add_i32_3d: 1218; GFX10: ; %bb.0: ; %main_body 1219; GFX10-NEXT: s_mov_b32 s0, s2 1220; GFX10-NEXT: s_mov_b32 s1, s3 1221; GFX10-NEXT: s_mov_b32 s2, s4 1222; GFX10-NEXT: s_mov_b32 s3, s5 1223; GFX10-NEXT: s_mov_b32 s4, s6 1224; GFX10-NEXT: s_mov_b32 s5, s7 1225; GFX10-NEXT: s_mov_b32 s6, s8 1226; GFX10-NEXT: s_mov_b32 s7, s9 1227; GFX10-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_3D unorm glc 1228; GFX10-NEXT: s_waitcnt vmcnt(0) 1229; GFX10-NEXT: ; return to shader part epilog 1230main_body: 1231 %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) 1232 %out = bitcast i32 %v to float 1233 ret float %out 1234} 1235 1236define amdgpu_ps float @atomic_add_i32_cube(<8 x i32> inreg %rsrc, i32 %data, i32 %s, i32 %t, i32 %face) { 1237; GFX6-LABEL: atomic_add_i32_cube: 1238; GFX6: ; %bb.0: ; %main_body 1239; GFX6-NEXT: s_mov_b32 s0, s2 1240; GFX6-NEXT: s_mov_b32 s1, s3 1241; GFX6-NEXT: s_mov_b32 s2, s4 1242; GFX6-NEXT: s_mov_b32 s3, s5 1243; GFX6-NEXT: s_mov_b32 s4, s6 1244; GFX6-NEXT: s_mov_b32 s5, s7 1245; GFX6-NEXT: s_mov_b32 s6, s8 1246; GFX6-NEXT: s_mov_b32 s7, s9 1247; GFX6-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc da 1248; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1249; GFX6-NEXT: ; return to shader part epilog 1250; 1251; GFX8-LABEL: atomic_add_i32_cube: 1252; GFX8: ; %bb.0: ; %main_body 1253; GFX8-NEXT: s_mov_b32 s0, s2 1254; GFX8-NEXT: s_mov_b32 s1, s3 1255; GFX8-NEXT: s_mov_b32 s2, s4 1256; GFX8-NEXT: s_mov_b32 s3, s5 1257; GFX8-NEXT: s_mov_b32 s4, s6 1258; GFX8-NEXT: s_mov_b32 s5, s7 1259; GFX8-NEXT: s_mov_b32 s6, s8 1260; GFX8-NEXT: s_mov_b32 s7, s9 1261; GFX8-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc da 1262; GFX8-NEXT: s_waitcnt vmcnt(0) 1263; GFX8-NEXT: ; return to shader part epilog 1264; 1265; GFX900-LABEL: atomic_add_i32_cube: 1266; GFX900: ; %bb.0: ; %main_body 1267; GFX900-NEXT: s_mov_b32 s0, s2 1268; GFX900-NEXT: s_mov_b32 s1, s3 1269; GFX900-NEXT: s_mov_b32 s2, s4 1270; GFX900-NEXT: s_mov_b32 s3, s5 1271; GFX900-NEXT: s_mov_b32 s4, s6 1272; GFX900-NEXT: s_mov_b32 s5, s7 1273; GFX900-NEXT: s_mov_b32 s6, s8 1274; GFX900-NEXT: s_mov_b32 s7, s9 1275; GFX900-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc da 1276; GFX900-NEXT: s_waitcnt vmcnt(0) 1277; GFX900-NEXT: ; return to shader part epilog 1278; 1279; GFX90A-LABEL: atomic_add_i32_cube: 1280; GFX90A: ; %bb.0: ; %main_body 1281; GFX90A-NEXT: s_mov_b32 s0, s2 1282; GFX90A-NEXT: s_mov_b32 s1, s3 1283; GFX90A-NEXT: s_mov_b32 s2, s4 1284; GFX90A-NEXT: s_mov_b32 s3, s5 1285; GFX90A-NEXT: s_mov_b32 s4, s6 1286; GFX90A-NEXT: s_mov_b32 s5, s7 1287; GFX90A-NEXT: s_mov_b32 s6, s8 1288; GFX90A-NEXT: s_mov_b32 s7, s9 1289; GFX90A-NEXT: v_mov_b32_e32 v4, v1 1290; GFX90A-NEXT: v_mov_b32_e32 v5, v2 1291; GFX90A-NEXT: v_mov_b32_e32 v6, v3 1292; GFX90A-NEXT: image_atomic_add v0, v[4:6], s[0:7] dmask:0x1 unorm glc da 1293; GFX90A-NEXT: s_waitcnt vmcnt(0) 1294; GFX90A-NEXT: ; return to shader part epilog 1295; 1296; GFX10-LABEL: atomic_add_i32_cube: 1297; GFX10: ; %bb.0: ; %main_body 1298; GFX10-NEXT: s_mov_b32 s0, s2 1299; GFX10-NEXT: s_mov_b32 s1, s3 1300; GFX10-NEXT: s_mov_b32 s2, s4 1301; GFX10-NEXT: s_mov_b32 s3, s5 1302; GFX10-NEXT: s_mov_b32 s4, s6 1303; GFX10-NEXT: s_mov_b32 s5, s7 1304; GFX10-NEXT: s_mov_b32 s6, s8 1305; GFX10-NEXT: s_mov_b32 s7, s9 1306; GFX10-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_CUBE unorm glc 1307; GFX10-NEXT: s_waitcnt vmcnt(0) 1308; GFX10-NEXT: ; return to shader part epilog 1309main_body: 1310 %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) 1311 %out = bitcast i32 %v to float 1312 ret float %out 1313} 1314 1315define amdgpu_ps float @atomic_add_i32_1darray(<8 x i32> inreg %rsrc, i32 %data, i32 %s, i32 %slice) { 1316; GFX6-LABEL: atomic_add_i32_1darray: 1317; GFX6: ; %bb.0: ; %main_body 1318; GFX6-NEXT: s_mov_b32 s0, s2 1319; GFX6-NEXT: s_mov_b32 s1, s3 1320; GFX6-NEXT: s_mov_b32 s2, s4 1321; GFX6-NEXT: s_mov_b32 s3, s5 1322; GFX6-NEXT: s_mov_b32 s4, s6 1323; GFX6-NEXT: s_mov_b32 s5, s7 1324; GFX6-NEXT: s_mov_b32 s6, s8 1325; GFX6-NEXT: s_mov_b32 s7, s9 1326; GFX6-NEXT: image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 unorm glc da 1327; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1328; GFX6-NEXT: ; return to shader part epilog 1329; 1330; GFX8-LABEL: atomic_add_i32_1darray: 1331; GFX8: ; %bb.0: ; %main_body 1332; GFX8-NEXT: s_mov_b32 s0, s2 1333; GFX8-NEXT: s_mov_b32 s1, s3 1334; GFX8-NEXT: s_mov_b32 s2, s4 1335; GFX8-NEXT: s_mov_b32 s3, s5 1336; GFX8-NEXT: s_mov_b32 s4, s6 1337; GFX8-NEXT: s_mov_b32 s5, s7 1338; GFX8-NEXT: s_mov_b32 s6, s8 1339; GFX8-NEXT: s_mov_b32 s7, s9 1340; GFX8-NEXT: image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 unorm glc da 1341; GFX8-NEXT: s_waitcnt vmcnt(0) 1342; GFX8-NEXT: ; return to shader part epilog 1343; 1344; GFX900-LABEL: atomic_add_i32_1darray: 1345; GFX900: ; %bb.0: ; %main_body 1346; GFX900-NEXT: s_mov_b32 s0, s2 1347; GFX900-NEXT: s_mov_b32 s1, s3 1348; GFX900-NEXT: s_mov_b32 s2, s4 1349; GFX900-NEXT: s_mov_b32 s3, s5 1350; GFX900-NEXT: s_mov_b32 s4, s6 1351; GFX900-NEXT: s_mov_b32 s5, s7 1352; GFX900-NEXT: s_mov_b32 s6, s8 1353; GFX900-NEXT: s_mov_b32 s7, s9 1354; GFX900-NEXT: image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 unorm glc da 1355; GFX900-NEXT: s_waitcnt vmcnt(0) 1356; GFX900-NEXT: ; return to shader part epilog 1357; 1358; GFX90A-LABEL: atomic_add_i32_1darray: 1359; GFX90A: ; %bb.0: ; %main_body 1360; GFX90A-NEXT: s_mov_b32 s0, s2 1361; GFX90A-NEXT: s_mov_b32 s1, s3 1362; GFX90A-NEXT: s_mov_b32 s2, s4 1363; GFX90A-NEXT: s_mov_b32 s3, s5 1364; GFX90A-NEXT: s_mov_b32 s4, s6 1365; GFX90A-NEXT: s_mov_b32 s5, s7 1366; GFX90A-NEXT: s_mov_b32 s6, s8 1367; GFX90A-NEXT: s_mov_b32 s7, s9 1368; GFX90A-NEXT: v_mov_b32_e32 v4, v1 1369; GFX90A-NEXT: v_mov_b32_e32 v5, v2 1370; GFX90A-NEXT: image_atomic_add v0, v[4:5], s[0:7] dmask:0x1 unorm glc da 1371; GFX90A-NEXT: s_waitcnt vmcnt(0) 1372; GFX90A-NEXT: ; return to shader part epilog 1373; 1374; GFX10-LABEL: atomic_add_i32_1darray: 1375; GFX10: ; %bb.0: ; %main_body 1376; GFX10-NEXT: s_mov_b32 s0, s2 1377; GFX10-NEXT: s_mov_b32 s1, s3 1378; GFX10-NEXT: s_mov_b32 s2, s4 1379; GFX10-NEXT: s_mov_b32 s3, s5 1380; GFX10-NEXT: s_mov_b32 s4, s6 1381; GFX10-NEXT: s_mov_b32 s5, s7 1382; GFX10-NEXT: s_mov_b32 s6, s8 1383; GFX10-NEXT: s_mov_b32 s7, s9 1384; GFX10-NEXT: image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D_ARRAY unorm glc 1385; GFX10-NEXT: s_waitcnt vmcnt(0) 1386; GFX10-NEXT: ; return to shader part epilog 1387main_body: 1388 %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) 1389 %out = bitcast i32 %v to float 1390 ret float %out 1391} 1392 1393define amdgpu_ps float @atomic_add_i32_2darray(<8 x i32> inreg %rsrc, i32 %data, i32 %s, i32 %t, i32 %slice) { 1394; GFX6-LABEL: atomic_add_i32_2darray: 1395; GFX6: ; %bb.0: ; %main_body 1396; GFX6-NEXT: s_mov_b32 s0, s2 1397; GFX6-NEXT: s_mov_b32 s1, s3 1398; GFX6-NEXT: s_mov_b32 s2, s4 1399; GFX6-NEXT: s_mov_b32 s3, s5 1400; GFX6-NEXT: s_mov_b32 s4, s6 1401; GFX6-NEXT: s_mov_b32 s5, s7 1402; GFX6-NEXT: s_mov_b32 s6, s8 1403; GFX6-NEXT: s_mov_b32 s7, s9 1404; GFX6-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc da 1405; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1406; GFX6-NEXT: ; return to shader part epilog 1407; 1408; GFX8-LABEL: atomic_add_i32_2darray: 1409; GFX8: ; %bb.0: ; %main_body 1410; GFX8-NEXT: s_mov_b32 s0, s2 1411; GFX8-NEXT: s_mov_b32 s1, s3 1412; GFX8-NEXT: s_mov_b32 s2, s4 1413; GFX8-NEXT: s_mov_b32 s3, s5 1414; GFX8-NEXT: s_mov_b32 s4, s6 1415; GFX8-NEXT: s_mov_b32 s5, s7 1416; GFX8-NEXT: s_mov_b32 s6, s8 1417; GFX8-NEXT: s_mov_b32 s7, s9 1418; GFX8-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc da 1419; GFX8-NEXT: s_waitcnt vmcnt(0) 1420; GFX8-NEXT: ; return to shader part epilog 1421; 1422; GFX900-LABEL: atomic_add_i32_2darray: 1423; GFX900: ; %bb.0: ; %main_body 1424; GFX900-NEXT: s_mov_b32 s0, s2 1425; GFX900-NEXT: s_mov_b32 s1, s3 1426; GFX900-NEXT: s_mov_b32 s2, s4 1427; GFX900-NEXT: s_mov_b32 s3, s5 1428; GFX900-NEXT: s_mov_b32 s4, s6 1429; GFX900-NEXT: s_mov_b32 s5, s7 1430; GFX900-NEXT: s_mov_b32 s6, s8 1431; GFX900-NEXT: s_mov_b32 s7, s9 1432; GFX900-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc da 1433; GFX900-NEXT: s_waitcnt vmcnt(0) 1434; GFX900-NEXT: ; return to shader part epilog 1435; 1436; GFX90A-LABEL: atomic_add_i32_2darray: 1437; GFX90A: ; %bb.0: ; %main_body 1438; GFX90A-NEXT: s_mov_b32 s0, s2 1439; GFX90A-NEXT: s_mov_b32 s1, s3 1440; GFX90A-NEXT: s_mov_b32 s2, s4 1441; GFX90A-NEXT: s_mov_b32 s3, s5 1442; GFX90A-NEXT: s_mov_b32 s4, s6 1443; GFX90A-NEXT: s_mov_b32 s5, s7 1444; GFX90A-NEXT: s_mov_b32 s6, s8 1445; GFX90A-NEXT: s_mov_b32 s7, s9 1446; GFX90A-NEXT: v_mov_b32_e32 v4, v1 1447; GFX90A-NEXT: v_mov_b32_e32 v5, v2 1448; GFX90A-NEXT: v_mov_b32_e32 v6, v3 1449; GFX90A-NEXT: image_atomic_add v0, v[4:6], s[0:7] dmask:0x1 unorm glc da 1450; GFX90A-NEXT: s_waitcnt vmcnt(0) 1451; GFX90A-NEXT: ; return to shader part epilog 1452; 1453; GFX10-LABEL: atomic_add_i32_2darray: 1454; GFX10: ; %bb.0: ; %main_body 1455; GFX10-NEXT: s_mov_b32 s0, s2 1456; GFX10-NEXT: s_mov_b32 s1, s3 1457; GFX10-NEXT: s_mov_b32 s2, s4 1458; GFX10-NEXT: s_mov_b32 s3, s5 1459; GFX10-NEXT: s_mov_b32 s4, s6 1460; GFX10-NEXT: s_mov_b32 s5, s7 1461; GFX10-NEXT: s_mov_b32 s6, s8 1462; GFX10-NEXT: s_mov_b32 s7, s9 1463; GFX10-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_ARRAY unorm glc 1464; GFX10-NEXT: s_waitcnt vmcnt(0) 1465; GFX10-NEXT: ; return to shader part epilog 1466main_body: 1467 %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) 1468 %out = bitcast i32 %v to float 1469 ret float %out 1470} 1471 1472define amdgpu_ps float @atomic_add_i32_2dmsaa(<8 x i32> inreg %rsrc, i32 %data, i32 %s, i32 %t, i32 %fragid) { 1473; GFX6-LABEL: atomic_add_i32_2dmsaa: 1474; GFX6: ; %bb.0: ; %main_body 1475; GFX6-NEXT: s_mov_b32 s0, s2 1476; GFX6-NEXT: s_mov_b32 s1, s3 1477; GFX6-NEXT: s_mov_b32 s2, s4 1478; GFX6-NEXT: s_mov_b32 s3, s5 1479; GFX6-NEXT: s_mov_b32 s4, s6 1480; GFX6-NEXT: s_mov_b32 s5, s7 1481; GFX6-NEXT: s_mov_b32 s6, s8 1482; GFX6-NEXT: s_mov_b32 s7, s9 1483; GFX6-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc 1484; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1485; GFX6-NEXT: ; return to shader part epilog 1486; 1487; GFX8-LABEL: atomic_add_i32_2dmsaa: 1488; GFX8: ; %bb.0: ; %main_body 1489; GFX8-NEXT: s_mov_b32 s0, s2 1490; GFX8-NEXT: s_mov_b32 s1, s3 1491; GFX8-NEXT: s_mov_b32 s2, s4 1492; GFX8-NEXT: s_mov_b32 s3, s5 1493; GFX8-NEXT: s_mov_b32 s4, s6 1494; GFX8-NEXT: s_mov_b32 s5, s7 1495; GFX8-NEXT: s_mov_b32 s6, s8 1496; GFX8-NEXT: s_mov_b32 s7, s9 1497; GFX8-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc 1498; GFX8-NEXT: s_waitcnt vmcnt(0) 1499; GFX8-NEXT: ; return to shader part epilog 1500; 1501; GFX900-LABEL: atomic_add_i32_2dmsaa: 1502; GFX900: ; %bb.0: ; %main_body 1503; GFX900-NEXT: s_mov_b32 s0, s2 1504; GFX900-NEXT: s_mov_b32 s1, s3 1505; GFX900-NEXT: s_mov_b32 s2, s4 1506; GFX900-NEXT: s_mov_b32 s3, s5 1507; GFX900-NEXT: s_mov_b32 s4, s6 1508; GFX900-NEXT: s_mov_b32 s5, s7 1509; GFX900-NEXT: s_mov_b32 s6, s8 1510; GFX900-NEXT: s_mov_b32 s7, s9 1511; GFX900-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 unorm glc 1512; GFX900-NEXT: s_waitcnt vmcnt(0) 1513; GFX900-NEXT: ; return to shader part epilog 1514; 1515; GFX90A-LABEL: atomic_add_i32_2dmsaa: 1516; GFX90A: ; %bb.0: ; %main_body 1517; GFX90A-NEXT: s_mov_b32 s0, s2 1518; GFX90A-NEXT: s_mov_b32 s1, s3 1519; GFX90A-NEXT: s_mov_b32 s2, s4 1520; GFX90A-NEXT: s_mov_b32 s3, s5 1521; GFX90A-NEXT: s_mov_b32 s4, s6 1522; GFX90A-NEXT: s_mov_b32 s5, s7 1523; GFX90A-NEXT: s_mov_b32 s6, s8 1524; GFX90A-NEXT: s_mov_b32 s7, s9 1525; GFX90A-NEXT: v_mov_b32_e32 v4, v1 1526; GFX90A-NEXT: v_mov_b32_e32 v5, v2 1527; GFX90A-NEXT: v_mov_b32_e32 v6, v3 1528; GFX90A-NEXT: image_atomic_add v0, v[4:6], s[0:7] dmask:0x1 unorm glc 1529; GFX90A-NEXT: s_waitcnt vmcnt(0) 1530; GFX90A-NEXT: ; return to shader part epilog 1531; 1532; GFX10-LABEL: atomic_add_i32_2dmsaa: 1533; GFX10: ; %bb.0: ; %main_body 1534; GFX10-NEXT: s_mov_b32 s0, s2 1535; GFX10-NEXT: s_mov_b32 s1, s3 1536; GFX10-NEXT: s_mov_b32 s2, s4 1537; GFX10-NEXT: s_mov_b32 s3, s5 1538; GFX10-NEXT: s_mov_b32 s4, s6 1539; GFX10-NEXT: s_mov_b32 s5, s7 1540; GFX10-NEXT: s_mov_b32 s6, s8 1541; GFX10-NEXT: s_mov_b32 s7, s9 1542; GFX10-NEXT: image_atomic_add v0, v[1:3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm glc 1543; GFX10-NEXT: s_waitcnt vmcnt(0) 1544; GFX10-NEXT: ; return to shader part epilog 1545main_body: 1546 %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) 1547 %out = bitcast i32 %v to float 1548 ret float %out 1549} 1550 1551define amdgpu_ps float @atomic_add_i32_2darraymsaa(<8 x i32> inreg %rsrc, i32 %data, i32 %s, i32 %t, i32 %slice, i32 %fragid) { 1552; GFX6-LABEL: atomic_add_i32_2darraymsaa: 1553; GFX6: ; %bb.0: ; %main_body 1554; GFX6-NEXT: s_mov_b32 s0, s2 1555; GFX6-NEXT: s_mov_b32 s1, s3 1556; GFX6-NEXT: s_mov_b32 s2, s4 1557; GFX6-NEXT: s_mov_b32 s3, s5 1558; GFX6-NEXT: s_mov_b32 s4, s6 1559; GFX6-NEXT: s_mov_b32 s5, s7 1560; GFX6-NEXT: s_mov_b32 s6, s8 1561; GFX6-NEXT: s_mov_b32 s7, s9 1562; GFX6-NEXT: image_atomic_add v0, v[1:4], s[0:7] dmask:0x1 unorm glc da 1563; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1564; GFX6-NEXT: ; return to shader part epilog 1565; 1566; GFX8-LABEL: atomic_add_i32_2darraymsaa: 1567; GFX8: ; %bb.0: ; %main_body 1568; GFX8-NEXT: s_mov_b32 s0, s2 1569; GFX8-NEXT: s_mov_b32 s1, s3 1570; GFX8-NEXT: s_mov_b32 s2, s4 1571; GFX8-NEXT: s_mov_b32 s3, s5 1572; GFX8-NEXT: s_mov_b32 s4, s6 1573; GFX8-NEXT: s_mov_b32 s5, s7 1574; GFX8-NEXT: s_mov_b32 s6, s8 1575; GFX8-NEXT: s_mov_b32 s7, s9 1576; GFX8-NEXT: image_atomic_add v0, v[1:4], s[0:7] dmask:0x1 unorm glc da 1577; GFX8-NEXT: s_waitcnt vmcnt(0) 1578; GFX8-NEXT: ; return to shader part epilog 1579; 1580; GFX900-LABEL: atomic_add_i32_2darraymsaa: 1581; GFX900: ; %bb.0: ; %main_body 1582; GFX900-NEXT: s_mov_b32 s0, s2 1583; GFX900-NEXT: s_mov_b32 s1, s3 1584; GFX900-NEXT: s_mov_b32 s2, s4 1585; GFX900-NEXT: s_mov_b32 s3, s5 1586; GFX900-NEXT: s_mov_b32 s4, s6 1587; GFX900-NEXT: s_mov_b32 s5, s7 1588; GFX900-NEXT: s_mov_b32 s6, s8 1589; GFX900-NEXT: s_mov_b32 s7, s9 1590; GFX900-NEXT: image_atomic_add v0, v[1:4], s[0:7] dmask:0x1 unorm glc da 1591; GFX900-NEXT: s_waitcnt vmcnt(0) 1592; GFX900-NEXT: ; return to shader part epilog 1593; 1594; GFX90A-LABEL: atomic_add_i32_2darraymsaa: 1595; GFX90A: ; %bb.0: ; %main_body 1596; GFX90A-NEXT: s_mov_b32 s0, s2 1597; GFX90A-NEXT: s_mov_b32 s1, s3 1598; GFX90A-NEXT: s_mov_b32 s2, s4 1599; GFX90A-NEXT: s_mov_b32 s3, s5 1600; GFX90A-NEXT: s_mov_b32 s4, s6 1601; GFX90A-NEXT: s_mov_b32 s5, s7 1602; GFX90A-NEXT: s_mov_b32 s6, s8 1603; GFX90A-NEXT: s_mov_b32 s7, s9 1604; GFX90A-NEXT: v_mov_b32_e32 v6, v1 1605; GFX90A-NEXT: v_mov_b32_e32 v7, v2 1606; GFX90A-NEXT: v_mov_b32_e32 v8, v3 1607; GFX90A-NEXT: v_mov_b32_e32 v9, v4 1608; GFX90A-NEXT: image_atomic_add v0, v[6:9], s[0:7] dmask:0x1 unorm glc da 1609; GFX90A-NEXT: s_waitcnt vmcnt(0) 1610; GFX90A-NEXT: ; return to shader part epilog 1611; 1612; GFX10-LABEL: atomic_add_i32_2darraymsaa: 1613; GFX10: ; %bb.0: ; %main_body 1614; GFX10-NEXT: s_mov_b32 s0, s2 1615; GFX10-NEXT: s_mov_b32 s1, s3 1616; GFX10-NEXT: s_mov_b32 s2, s4 1617; GFX10-NEXT: s_mov_b32 s3, s5 1618; GFX10-NEXT: s_mov_b32 s4, s6 1619; GFX10-NEXT: s_mov_b32 s5, s7 1620; GFX10-NEXT: s_mov_b32 s6, s8 1621; GFX10-NEXT: s_mov_b32 s7, s9 1622; GFX10-NEXT: image_atomic_add v0, v[1:4], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm glc 1623; GFX10-NEXT: s_waitcnt vmcnt(0) 1624; GFX10-NEXT: ; return to shader part epilog 1625main_body: 1626 %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) 1627 %out = bitcast i32 %v to float 1628 ret float %out 1629} 1630 1631define amdgpu_ps float @atomic_add_i32_1d_slc(<8 x i32> inreg %rsrc, i32 %data, i32 %s) { 1632; GFX6-LABEL: atomic_add_i32_1d_slc: 1633; GFX6: ; %bb.0: ; %main_body 1634; GFX6-NEXT: s_mov_b32 s0, s2 1635; GFX6-NEXT: s_mov_b32 s1, s3 1636; GFX6-NEXT: s_mov_b32 s2, s4 1637; GFX6-NEXT: s_mov_b32 s3, s5 1638; GFX6-NEXT: s_mov_b32 s4, s6 1639; GFX6-NEXT: s_mov_b32 s5, s7 1640; GFX6-NEXT: s_mov_b32 s6, s8 1641; GFX6-NEXT: s_mov_b32 s7, s9 1642; GFX6-NEXT: image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc slc 1643; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1644; GFX6-NEXT: ; return to shader part epilog 1645; 1646; GFX8-LABEL: atomic_add_i32_1d_slc: 1647; GFX8: ; %bb.0: ; %main_body 1648; GFX8-NEXT: s_mov_b32 s0, s2 1649; GFX8-NEXT: s_mov_b32 s1, s3 1650; GFX8-NEXT: s_mov_b32 s2, s4 1651; GFX8-NEXT: s_mov_b32 s3, s5 1652; GFX8-NEXT: s_mov_b32 s4, s6 1653; GFX8-NEXT: s_mov_b32 s5, s7 1654; GFX8-NEXT: s_mov_b32 s6, s8 1655; GFX8-NEXT: s_mov_b32 s7, s9 1656; GFX8-NEXT: image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc slc 1657; GFX8-NEXT: s_waitcnt vmcnt(0) 1658; GFX8-NEXT: ; return to shader part epilog 1659; 1660; GFX900-LABEL: atomic_add_i32_1d_slc: 1661; GFX900: ; %bb.0: ; %main_body 1662; GFX900-NEXT: s_mov_b32 s0, s2 1663; GFX900-NEXT: s_mov_b32 s1, s3 1664; GFX900-NEXT: s_mov_b32 s2, s4 1665; GFX900-NEXT: s_mov_b32 s3, s5 1666; GFX900-NEXT: s_mov_b32 s4, s6 1667; GFX900-NEXT: s_mov_b32 s5, s7 1668; GFX900-NEXT: s_mov_b32 s6, s8 1669; GFX900-NEXT: s_mov_b32 s7, s9 1670; GFX900-NEXT: image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc slc 1671; GFX900-NEXT: s_waitcnt vmcnt(0) 1672; GFX900-NEXT: ; return to shader part epilog 1673; 1674; GFX90A-LABEL: atomic_add_i32_1d_slc: 1675; GFX90A: ; %bb.0: ; %main_body 1676; GFX90A-NEXT: s_mov_b32 s0, s2 1677; GFX90A-NEXT: s_mov_b32 s1, s3 1678; GFX90A-NEXT: s_mov_b32 s2, s4 1679; GFX90A-NEXT: s_mov_b32 s3, s5 1680; GFX90A-NEXT: s_mov_b32 s4, s6 1681; GFX90A-NEXT: s_mov_b32 s5, s7 1682; GFX90A-NEXT: s_mov_b32 s6, s8 1683; GFX90A-NEXT: s_mov_b32 s7, s9 1684; GFX90A-NEXT: v_mov_b32_e32 v2, v1 1685; GFX90A-NEXT: image_atomic_add v0, v2, s[0:7] dmask:0x1 unorm glc slc 1686; GFX90A-NEXT: s_waitcnt vmcnt(0) 1687; GFX90A-NEXT: ; return to shader part epilog 1688; 1689; GFX10-LABEL: atomic_add_i32_1d_slc: 1690; GFX10: ; %bb.0: ; %main_body 1691; GFX10-NEXT: s_mov_b32 s0, s2 1692; GFX10-NEXT: s_mov_b32 s1, s3 1693; GFX10-NEXT: s_mov_b32 s2, s4 1694; GFX10-NEXT: s_mov_b32 s3, s5 1695; GFX10-NEXT: s_mov_b32 s4, s6 1696; GFX10-NEXT: s_mov_b32 s5, s7 1697; GFX10-NEXT: s_mov_b32 s6, s8 1698; GFX10-NEXT: s_mov_b32 s7, s9 1699; GFX10-NEXT: image_atomic_add v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc slc 1700; GFX10-NEXT: s_waitcnt vmcnt(0) 1701; GFX10-NEXT: ; return to shader part epilog 1702main_body: 1703 %v = call i32 @llvm.amdgcn.image.atomic.add.1d.i32.i32(i32 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 2) 1704 %out = bitcast i32 %v to float 1705 ret float %out 1706} 1707 1708define amdgpu_ps <2 x float> @atomic_swap_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) { 1709; GFX6-LABEL: atomic_swap_i64_1d: 1710; GFX6: ; %bb.0: ; %main_body 1711; GFX6-NEXT: s_mov_b32 s0, s2 1712; GFX6-NEXT: s_mov_b32 s1, s3 1713; GFX6-NEXT: s_mov_b32 s2, s4 1714; GFX6-NEXT: s_mov_b32 s3, s5 1715; GFX6-NEXT: s_mov_b32 s4, s6 1716; GFX6-NEXT: s_mov_b32 s5, s7 1717; GFX6-NEXT: s_mov_b32 s6, s8 1718; GFX6-NEXT: s_mov_b32 s7, s9 1719; GFX6-NEXT: image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1720; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1721; GFX6-NEXT: ; return to shader part epilog 1722; 1723; GFX8-LABEL: atomic_swap_i64_1d: 1724; GFX8: ; %bb.0: ; %main_body 1725; GFX8-NEXT: s_mov_b32 s0, s2 1726; GFX8-NEXT: s_mov_b32 s1, s3 1727; GFX8-NEXT: s_mov_b32 s2, s4 1728; GFX8-NEXT: s_mov_b32 s3, s5 1729; GFX8-NEXT: s_mov_b32 s4, s6 1730; GFX8-NEXT: s_mov_b32 s5, s7 1731; GFX8-NEXT: s_mov_b32 s6, s8 1732; GFX8-NEXT: s_mov_b32 s7, s9 1733; GFX8-NEXT: image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1734; GFX8-NEXT: s_waitcnt vmcnt(0) 1735; GFX8-NEXT: ; return to shader part epilog 1736; 1737; GFX900-LABEL: atomic_swap_i64_1d: 1738; GFX900: ; %bb.0: ; %main_body 1739; GFX900-NEXT: s_mov_b32 s0, s2 1740; GFX900-NEXT: s_mov_b32 s1, s3 1741; GFX900-NEXT: s_mov_b32 s2, s4 1742; GFX900-NEXT: s_mov_b32 s3, s5 1743; GFX900-NEXT: s_mov_b32 s4, s6 1744; GFX900-NEXT: s_mov_b32 s5, s7 1745; GFX900-NEXT: s_mov_b32 s6, s8 1746; GFX900-NEXT: s_mov_b32 s7, s9 1747; GFX900-NEXT: image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1748; GFX900-NEXT: s_waitcnt vmcnt(0) 1749; GFX900-NEXT: ; return to shader part epilog 1750; 1751; GFX90A-LABEL: atomic_swap_i64_1d: 1752; GFX90A: ; %bb.0: ; %main_body 1753; GFX90A-NEXT: s_mov_b32 s0, s2 1754; GFX90A-NEXT: s_mov_b32 s1, s3 1755; GFX90A-NEXT: s_mov_b32 s2, s4 1756; GFX90A-NEXT: s_mov_b32 s3, s5 1757; GFX90A-NEXT: s_mov_b32 s4, s6 1758; GFX90A-NEXT: s_mov_b32 s5, s7 1759; GFX90A-NEXT: s_mov_b32 s6, s8 1760; GFX90A-NEXT: s_mov_b32 s7, s9 1761; GFX90A-NEXT: image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1762; GFX90A-NEXT: s_waitcnt vmcnt(0) 1763; GFX90A-NEXT: ; return to shader part epilog 1764; 1765; GFX10-LABEL: atomic_swap_i64_1d: 1766; GFX10: ; %bb.0: ; %main_body 1767; GFX10-NEXT: s_mov_b32 s0, s2 1768; GFX10-NEXT: s_mov_b32 s1, s3 1769; GFX10-NEXT: s_mov_b32 s2, s4 1770; GFX10-NEXT: s_mov_b32 s3, s5 1771; GFX10-NEXT: s_mov_b32 s4, s6 1772; GFX10-NEXT: s_mov_b32 s5, s7 1773; GFX10-NEXT: s_mov_b32 s6, s8 1774; GFX10-NEXT: s_mov_b32 s7, s9 1775; GFX10-NEXT: image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc 1776; GFX10-NEXT: s_waitcnt vmcnt(0) 1777; GFX10-NEXT: ; return to shader part epilog 1778main_body: 1779 %v = call i64 @llvm.amdgcn.image.atomic.swap.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 1780 %out = bitcast i64 %v to <2 x float> 1781 ret <2 x float> %out 1782} 1783 1784define amdgpu_ps <2 x float> @atomic_add_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) { 1785; GFX6-LABEL: atomic_add_i64_1d: 1786; GFX6: ; %bb.0: ; %main_body 1787; GFX6-NEXT: s_mov_b32 s0, s2 1788; GFX6-NEXT: s_mov_b32 s1, s3 1789; GFX6-NEXT: s_mov_b32 s2, s4 1790; GFX6-NEXT: s_mov_b32 s3, s5 1791; GFX6-NEXT: s_mov_b32 s4, s6 1792; GFX6-NEXT: s_mov_b32 s5, s7 1793; GFX6-NEXT: s_mov_b32 s6, s8 1794; GFX6-NEXT: s_mov_b32 s7, s9 1795; GFX6-NEXT: image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1796; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1797; GFX6-NEXT: ; return to shader part epilog 1798; 1799; GFX8-LABEL: atomic_add_i64_1d: 1800; GFX8: ; %bb.0: ; %main_body 1801; GFX8-NEXT: s_mov_b32 s0, s2 1802; GFX8-NEXT: s_mov_b32 s1, s3 1803; GFX8-NEXT: s_mov_b32 s2, s4 1804; GFX8-NEXT: s_mov_b32 s3, s5 1805; GFX8-NEXT: s_mov_b32 s4, s6 1806; GFX8-NEXT: s_mov_b32 s5, s7 1807; GFX8-NEXT: s_mov_b32 s6, s8 1808; GFX8-NEXT: s_mov_b32 s7, s9 1809; GFX8-NEXT: image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1810; GFX8-NEXT: s_waitcnt vmcnt(0) 1811; GFX8-NEXT: ; return to shader part epilog 1812; 1813; GFX900-LABEL: atomic_add_i64_1d: 1814; GFX900: ; %bb.0: ; %main_body 1815; GFX900-NEXT: s_mov_b32 s0, s2 1816; GFX900-NEXT: s_mov_b32 s1, s3 1817; GFX900-NEXT: s_mov_b32 s2, s4 1818; GFX900-NEXT: s_mov_b32 s3, s5 1819; GFX900-NEXT: s_mov_b32 s4, s6 1820; GFX900-NEXT: s_mov_b32 s5, s7 1821; GFX900-NEXT: s_mov_b32 s6, s8 1822; GFX900-NEXT: s_mov_b32 s7, s9 1823; GFX900-NEXT: image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1824; GFX900-NEXT: s_waitcnt vmcnt(0) 1825; GFX900-NEXT: ; return to shader part epilog 1826; 1827; GFX90A-LABEL: atomic_add_i64_1d: 1828; GFX90A: ; %bb.0: ; %main_body 1829; GFX90A-NEXT: s_mov_b32 s0, s2 1830; GFX90A-NEXT: s_mov_b32 s1, s3 1831; GFX90A-NEXT: s_mov_b32 s2, s4 1832; GFX90A-NEXT: s_mov_b32 s3, s5 1833; GFX90A-NEXT: s_mov_b32 s4, s6 1834; GFX90A-NEXT: s_mov_b32 s5, s7 1835; GFX90A-NEXT: s_mov_b32 s6, s8 1836; GFX90A-NEXT: s_mov_b32 s7, s9 1837; GFX90A-NEXT: image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1838; GFX90A-NEXT: s_waitcnt vmcnt(0) 1839; GFX90A-NEXT: ; return to shader part epilog 1840; 1841; GFX10-LABEL: atomic_add_i64_1d: 1842; GFX10: ; %bb.0: ; %main_body 1843; GFX10-NEXT: s_mov_b32 s0, s2 1844; GFX10-NEXT: s_mov_b32 s1, s3 1845; GFX10-NEXT: s_mov_b32 s2, s4 1846; GFX10-NEXT: s_mov_b32 s3, s5 1847; GFX10-NEXT: s_mov_b32 s4, s6 1848; GFX10-NEXT: s_mov_b32 s5, s7 1849; GFX10-NEXT: s_mov_b32 s6, s8 1850; GFX10-NEXT: s_mov_b32 s7, s9 1851; GFX10-NEXT: image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc 1852; GFX10-NEXT: s_waitcnt vmcnt(0) 1853; GFX10-NEXT: ; return to shader part epilog 1854main_body: 1855 %v = call i64 @llvm.amdgcn.image.atomic.add.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 1856 %out = bitcast i64 %v to <2 x float> 1857 ret <2 x float> %out 1858} 1859 1860define amdgpu_ps <2 x float> @atomic_sub_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) { 1861; GFX6-LABEL: atomic_sub_i64_1d: 1862; GFX6: ; %bb.0: ; %main_body 1863; GFX6-NEXT: s_mov_b32 s0, s2 1864; GFX6-NEXT: s_mov_b32 s1, s3 1865; GFX6-NEXT: s_mov_b32 s2, s4 1866; GFX6-NEXT: s_mov_b32 s3, s5 1867; GFX6-NEXT: s_mov_b32 s4, s6 1868; GFX6-NEXT: s_mov_b32 s5, s7 1869; GFX6-NEXT: s_mov_b32 s6, s8 1870; GFX6-NEXT: s_mov_b32 s7, s9 1871; GFX6-NEXT: image_atomic_sub v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1872; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1873; GFX6-NEXT: ; return to shader part epilog 1874; 1875; GFX8-LABEL: atomic_sub_i64_1d: 1876; GFX8: ; %bb.0: ; %main_body 1877; GFX8-NEXT: s_mov_b32 s0, s2 1878; GFX8-NEXT: s_mov_b32 s1, s3 1879; GFX8-NEXT: s_mov_b32 s2, s4 1880; GFX8-NEXT: s_mov_b32 s3, s5 1881; GFX8-NEXT: s_mov_b32 s4, s6 1882; GFX8-NEXT: s_mov_b32 s5, s7 1883; GFX8-NEXT: s_mov_b32 s6, s8 1884; GFX8-NEXT: s_mov_b32 s7, s9 1885; GFX8-NEXT: image_atomic_sub v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1886; GFX8-NEXT: s_waitcnt vmcnt(0) 1887; GFX8-NEXT: ; return to shader part epilog 1888; 1889; GFX900-LABEL: atomic_sub_i64_1d: 1890; GFX900: ; %bb.0: ; %main_body 1891; GFX900-NEXT: s_mov_b32 s0, s2 1892; GFX900-NEXT: s_mov_b32 s1, s3 1893; GFX900-NEXT: s_mov_b32 s2, s4 1894; GFX900-NEXT: s_mov_b32 s3, s5 1895; GFX900-NEXT: s_mov_b32 s4, s6 1896; GFX900-NEXT: s_mov_b32 s5, s7 1897; GFX900-NEXT: s_mov_b32 s6, s8 1898; GFX900-NEXT: s_mov_b32 s7, s9 1899; GFX900-NEXT: image_atomic_sub v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1900; GFX900-NEXT: s_waitcnt vmcnt(0) 1901; GFX900-NEXT: ; return to shader part epilog 1902; 1903; GFX90A-LABEL: atomic_sub_i64_1d: 1904; GFX90A: ; %bb.0: ; %main_body 1905; GFX90A-NEXT: s_mov_b32 s0, s2 1906; GFX90A-NEXT: s_mov_b32 s1, s3 1907; GFX90A-NEXT: s_mov_b32 s2, s4 1908; GFX90A-NEXT: s_mov_b32 s3, s5 1909; GFX90A-NEXT: s_mov_b32 s4, s6 1910; GFX90A-NEXT: s_mov_b32 s5, s7 1911; GFX90A-NEXT: s_mov_b32 s6, s8 1912; GFX90A-NEXT: s_mov_b32 s7, s9 1913; GFX90A-NEXT: image_atomic_sub v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1914; GFX90A-NEXT: s_waitcnt vmcnt(0) 1915; GFX90A-NEXT: ; return to shader part epilog 1916; 1917; GFX10-LABEL: atomic_sub_i64_1d: 1918; GFX10: ; %bb.0: ; %main_body 1919; GFX10-NEXT: s_mov_b32 s0, s2 1920; GFX10-NEXT: s_mov_b32 s1, s3 1921; GFX10-NEXT: s_mov_b32 s2, s4 1922; GFX10-NEXT: s_mov_b32 s3, s5 1923; GFX10-NEXT: s_mov_b32 s4, s6 1924; GFX10-NEXT: s_mov_b32 s5, s7 1925; GFX10-NEXT: s_mov_b32 s6, s8 1926; GFX10-NEXT: s_mov_b32 s7, s9 1927; GFX10-NEXT: image_atomic_sub v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc 1928; GFX10-NEXT: s_waitcnt vmcnt(0) 1929; GFX10-NEXT: ; return to shader part epilog 1930main_body: 1931 %v = call i64 @llvm.amdgcn.image.atomic.sub.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 1932 %out = bitcast i64 %v to <2 x float> 1933 ret <2 x float> %out 1934} 1935 1936define amdgpu_ps <2 x float> @atomic_smin_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) { 1937; GFX6-LABEL: atomic_smin_i64_1d: 1938; GFX6: ; %bb.0: ; %main_body 1939; GFX6-NEXT: s_mov_b32 s0, s2 1940; GFX6-NEXT: s_mov_b32 s1, s3 1941; GFX6-NEXT: s_mov_b32 s2, s4 1942; GFX6-NEXT: s_mov_b32 s3, s5 1943; GFX6-NEXT: s_mov_b32 s4, s6 1944; GFX6-NEXT: s_mov_b32 s5, s7 1945; GFX6-NEXT: s_mov_b32 s6, s8 1946; GFX6-NEXT: s_mov_b32 s7, s9 1947; GFX6-NEXT: image_atomic_smin v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1948; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1949; GFX6-NEXT: ; return to shader part epilog 1950; 1951; GFX8-LABEL: atomic_smin_i64_1d: 1952; GFX8: ; %bb.0: ; %main_body 1953; GFX8-NEXT: s_mov_b32 s0, s2 1954; GFX8-NEXT: s_mov_b32 s1, s3 1955; GFX8-NEXT: s_mov_b32 s2, s4 1956; GFX8-NEXT: s_mov_b32 s3, s5 1957; GFX8-NEXT: s_mov_b32 s4, s6 1958; GFX8-NEXT: s_mov_b32 s5, s7 1959; GFX8-NEXT: s_mov_b32 s6, s8 1960; GFX8-NEXT: s_mov_b32 s7, s9 1961; GFX8-NEXT: image_atomic_smin v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1962; GFX8-NEXT: s_waitcnt vmcnt(0) 1963; GFX8-NEXT: ; return to shader part epilog 1964; 1965; GFX900-LABEL: atomic_smin_i64_1d: 1966; GFX900: ; %bb.0: ; %main_body 1967; GFX900-NEXT: s_mov_b32 s0, s2 1968; GFX900-NEXT: s_mov_b32 s1, s3 1969; GFX900-NEXT: s_mov_b32 s2, s4 1970; GFX900-NEXT: s_mov_b32 s3, s5 1971; GFX900-NEXT: s_mov_b32 s4, s6 1972; GFX900-NEXT: s_mov_b32 s5, s7 1973; GFX900-NEXT: s_mov_b32 s6, s8 1974; GFX900-NEXT: s_mov_b32 s7, s9 1975; GFX900-NEXT: image_atomic_smin v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1976; GFX900-NEXT: s_waitcnt vmcnt(0) 1977; GFX900-NEXT: ; return to shader part epilog 1978; 1979; GFX90A-LABEL: atomic_smin_i64_1d: 1980; GFX90A: ; %bb.0: ; %main_body 1981; GFX90A-NEXT: s_mov_b32 s0, s2 1982; GFX90A-NEXT: s_mov_b32 s1, s3 1983; GFX90A-NEXT: s_mov_b32 s2, s4 1984; GFX90A-NEXT: s_mov_b32 s3, s5 1985; GFX90A-NEXT: s_mov_b32 s4, s6 1986; GFX90A-NEXT: s_mov_b32 s5, s7 1987; GFX90A-NEXT: s_mov_b32 s6, s8 1988; GFX90A-NEXT: s_mov_b32 s7, s9 1989; GFX90A-NEXT: image_atomic_smin v[0:1], v2, s[0:7] dmask:0x3 unorm glc 1990; GFX90A-NEXT: s_waitcnt vmcnt(0) 1991; GFX90A-NEXT: ; return to shader part epilog 1992; 1993; GFX10-LABEL: atomic_smin_i64_1d: 1994; GFX10: ; %bb.0: ; %main_body 1995; GFX10-NEXT: s_mov_b32 s0, s2 1996; GFX10-NEXT: s_mov_b32 s1, s3 1997; GFX10-NEXT: s_mov_b32 s2, s4 1998; GFX10-NEXT: s_mov_b32 s3, s5 1999; GFX10-NEXT: s_mov_b32 s4, s6 2000; GFX10-NEXT: s_mov_b32 s5, s7 2001; GFX10-NEXT: s_mov_b32 s6, s8 2002; GFX10-NEXT: s_mov_b32 s7, s9 2003; GFX10-NEXT: image_atomic_smin v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc 2004; GFX10-NEXT: s_waitcnt vmcnt(0) 2005; GFX10-NEXT: ; return to shader part epilog 2006main_body: 2007 %v = call i64 @llvm.amdgcn.image.atomic.smin.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 2008 %out = bitcast i64 %v to <2 x float> 2009 ret <2 x float> %out 2010} 2011 2012define amdgpu_ps <2 x float> @atomic_umin_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) { 2013; GFX6-LABEL: atomic_umin_i64_1d: 2014; GFX6: ; %bb.0: ; %main_body 2015; GFX6-NEXT: s_mov_b32 s0, s2 2016; GFX6-NEXT: s_mov_b32 s1, s3 2017; GFX6-NEXT: s_mov_b32 s2, s4 2018; GFX6-NEXT: s_mov_b32 s3, s5 2019; GFX6-NEXT: s_mov_b32 s4, s6 2020; GFX6-NEXT: s_mov_b32 s5, s7 2021; GFX6-NEXT: s_mov_b32 s6, s8 2022; GFX6-NEXT: s_mov_b32 s7, s9 2023; GFX6-NEXT: image_atomic_umin v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2024; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2025; GFX6-NEXT: ; return to shader part epilog 2026; 2027; GFX8-LABEL: atomic_umin_i64_1d: 2028; GFX8: ; %bb.0: ; %main_body 2029; GFX8-NEXT: s_mov_b32 s0, s2 2030; GFX8-NEXT: s_mov_b32 s1, s3 2031; GFX8-NEXT: s_mov_b32 s2, s4 2032; GFX8-NEXT: s_mov_b32 s3, s5 2033; GFX8-NEXT: s_mov_b32 s4, s6 2034; GFX8-NEXT: s_mov_b32 s5, s7 2035; GFX8-NEXT: s_mov_b32 s6, s8 2036; GFX8-NEXT: s_mov_b32 s7, s9 2037; GFX8-NEXT: image_atomic_umin v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2038; GFX8-NEXT: s_waitcnt vmcnt(0) 2039; GFX8-NEXT: ; return to shader part epilog 2040; 2041; GFX900-LABEL: atomic_umin_i64_1d: 2042; GFX900: ; %bb.0: ; %main_body 2043; GFX900-NEXT: s_mov_b32 s0, s2 2044; GFX900-NEXT: s_mov_b32 s1, s3 2045; GFX900-NEXT: s_mov_b32 s2, s4 2046; GFX900-NEXT: s_mov_b32 s3, s5 2047; GFX900-NEXT: s_mov_b32 s4, s6 2048; GFX900-NEXT: s_mov_b32 s5, s7 2049; GFX900-NEXT: s_mov_b32 s6, s8 2050; GFX900-NEXT: s_mov_b32 s7, s9 2051; GFX900-NEXT: image_atomic_umin v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2052; GFX900-NEXT: s_waitcnt vmcnt(0) 2053; GFX900-NEXT: ; return to shader part epilog 2054; 2055; GFX90A-LABEL: atomic_umin_i64_1d: 2056; GFX90A: ; %bb.0: ; %main_body 2057; GFX90A-NEXT: s_mov_b32 s0, s2 2058; GFX90A-NEXT: s_mov_b32 s1, s3 2059; GFX90A-NEXT: s_mov_b32 s2, s4 2060; GFX90A-NEXT: s_mov_b32 s3, s5 2061; GFX90A-NEXT: s_mov_b32 s4, s6 2062; GFX90A-NEXT: s_mov_b32 s5, s7 2063; GFX90A-NEXT: s_mov_b32 s6, s8 2064; GFX90A-NEXT: s_mov_b32 s7, s9 2065; GFX90A-NEXT: image_atomic_umin v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2066; GFX90A-NEXT: s_waitcnt vmcnt(0) 2067; GFX90A-NEXT: ; return to shader part epilog 2068; 2069; GFX10-LABEL: atomic_umin_i64_1d: 2070; GFX10: ; %bb.0: ; %main_body 2071; GFX10-NEXT: s_mov_b32 s0, s2 2072; GFX10-NEXT: s_mov_b32 s1, s3 2073; GFX10-NEXT: s_mov_b32 s2, s4 2074; GFX10-NEXT: s_mov_b32 s3, s5 2075; GFX10-NEXT: s_mov_b32 s4, s6 2076; GFX10-NEXT: s_mov_b32 s5, s7 2077; GFX10-NEXT: s_mov_b32 s6, s8 2078; GFX10-NEXT: s_mov_b32 s7, s9 2079; GFX10-NEXT: image_atomic_umin v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc 2080; GFX10-NEXT: s_waitcnt vmcnt(0) 2081; GFX10-NEXT: ; return to shader part epilog 2082main_body: 2083 %v = call i64 @llvm.amdgcn.image.atomic.umin.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 2084 %out = bitcast i64 %v to <2 x float> 2085 ret <2 x float> %out 2086} 2087 2088define amdgpu_ps <2 x float> @atomic_smax_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) { 2089; GFX6-LABEL: atomic_smax_i64_1d: 2090; GFX6: ; %bb.0: ; %main_body 2091; GFX6-NEXT: s_mov_b32 s0, s2 2092; GFX6-NEXT: s_mov_b32 s1, s3 2093; GFX6-NEXT: s_mov_b32 s2, s4 2094; GFX6-NEXT: s_mov_b32 s3, s5 2095; GFX6-NEXT: s_mov_b32 s4, s6 2096; GFX6-NEXT: s_mov_b32 s5, s7 2097; GFX6-NEXT: s_mov_b32 s6, s8 2098; GFX6-NEXT: s_mov_b32 s7, s9 2099; GFX6-NEXT: image_atomic_smax v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2100; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2101; GFX6-NEXT: ; return to shader part epilog 2102; 2103; GFX8-LABEL: atomic_smax_i64_1d: 2104; GFX8: ; %bb.0: ; %main_body 2105; GFX8-NEXT: s_mov_b32 s0, s2 2106; GFX8-NEXT: s_mov_b32 s1, s3 2107; GFX8-NEXT: s_mov_b32 s2, s4 2108; GFX8-NEXT: s_mov_b32 s3, s5 2109; GFX8-NEXT: s_mov_b32 s4, s6 2110; GFX8-NEXT: s_mov_b32 s5, s7 2111; GFX8-NEXT: s_mov_b32 s6, s8 2112; GFX8-NEXT: s_mov_b32 s7, s9 2113; GFX8-NEXT: image_atomic_smax v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2114; GFX8-NEXT: s_waitcnt vmcnt(0) 2115; GFX8-NEXT: ; return to shader part epilog 2116; 2117; GFX900-LABEL: atomic_smax_i64_1d: 2118; GFX900: ; %bb.0: ; %main_body 2119; GFX900-NEXT: s_mov_b32 s0, s2 2120; GFX900-NEXT: s_mov_b32 s1, s3 2121; GFX900-NEXT: s_mov_b32 s2, s4 2122; GFX900-NEXT: s_mov_b32 s3, s5 2123; GFX900-NEXT: s_mov_b32 s4, s6 2124; GFX900-NEXT: s_mov_b32 s5, s7 2125; GFX900-NEXT: s_mov_b32 s6, s8 2126; GFX900-NEXT: s_mov_b32 s7, s9 2127; GFX900-NEXT: image_atomic_smax v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2128; GFX900-NEXT: s_waitcnt vmcnt(0) 2129; GFX900-NEXT: ; return to shader part epilog 2130; 2131; GFX90A-LABEL: atomic_smax_i64_1d: 2132; GFX90A: ; %bb.0: ; %main_body 2133; GFX90A-NEXT: s_mov_b32 s0, s2 2134; GFX90A-NEXT: s_mov_b32 s1, s3 2135; GFX90A-NEXT: s_mov_b32 s2, s4 2136; GFX90A-NEXT: s_mov_b32 s3, s5 2137; GFX90A-NEXT: s_mov_b32 s4, s6 2138; GFX90A-NEXT: s_mov_b32 s5, s7 2139; GFX90A-NEXT: s_mov_b32 s6, s8 2140; GFX90A-NEXT: s_mov_b32 s7, s9 2141; GFX90A-NEXT: image_atomic_smax v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2142; GFX90A-NEXT: s_waitcnt vmcnt(0) 2143; GFX90A-NEXT: ; return to shader part epilog 2144; 2145; GFX10-LABEL: atomic_smax_i64_1d: 2146; GFX10: ; %bb.0: ; %main_body 2147; GFX10-NEXT: s_mov_b32 s0, s2 2148; GFX10-NEXT: s_mov_b32 s1, s3 2149; GFX10-NEXT: s_mov_b32 s2, s4 2150; GFX10-NEXT: s_mov_b32 s3, s5 2151; GFX10-NEXT: s_mov_b32 s4, s6 2152; GFX10-NEXT: s_mov_b32 s5, s7 2153; GFX10-NEXT: s_mov_b32 s6, s8 2154; GFX10-NEXT: s_mov_b32 s7, s9 2155; GFX10-NEXT: image_atomic_smax v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc 2156; GFX10-NEXT: s_waitcnt vmcnt(0) 2157; GFX10-NEXT: ; return to shader part epilog 2158main_body: 2159 %v = call i64 @llvm.amdgcn.image.atomic.smax.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 2160 %out = bitcast i64 %v to <2 x float> 2161 ret <2 x float> %out 2162} 2163 2164define amdgpu_ps <2 x float> @atomic_umax_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) { 2165; GFX6-LABEL: atomic_umax_i64_1d: 2166; GFX6: ; %bb.0: ; %main_body 2167; GFX6-NEXT: s_mov_b32 s0, s2 2168; GFX6-NEXT: s_mov_b32 s1, s3 2169; GFX6-NEXT: s_mov_b32 s2, s4 2170; GFX6-NEXT: s_mov_b32 s3, s5 2171; GFX6-NEXT: s_mov_b32 s4, s6 2172; GFX6-NEXT: s_mov_b32 s5, s7 2173; GFX6-NEXT: s_mov_b32 s6, s8 2174; GFX6-NEXT: s_mov_b32 s7, s9 2175; GFX6-NEXT: image_atomic_umax v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2176; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2177; GFX6-NEXT: ; return to shader part epilog 2178; 2179; GFX8-LABEL: atomic_umax_i64_1d: 2180; GFX8: ; %bb.0: ; %main_body 2181; GFX8-NEXT: s_mov_b32 s0, s2 2182; GFX8-NEXT: s_mov_b32 s1, s3 2183; GFX8-NEXT: s_mov_b32 s2, s4 2184; GFX8-NEXT: s_mov_b32 s3, s5 2185; GFX8-NEXT: s_mov_b32 s4, s6 2186; GFX8-NEXT: s_mov_b32 s5, s7 2187; GFX8-NEXT: s_mov_b32 s6, s8 2188; GFX8-NEXT: s_mov_b32 s7, s9 2189; GFX8-NEXT: image_atomic_umax v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2190; GFX8-NEXT: s_waitcnt vmcnt(0) 2191; GFX8-NEXT: ; return to shader part epilog 2192; 2193; GFX900-LABEL: atomic_umax_i64_1d: 2194; GFX900: ; %bb.0: ; %main_body 2195; GFX900-NEXT: s_mov_b32 s0, s2 2196; GFX900-NEXT: s_mov_b32 s1, s3 2197; GFX900-NEXT: s_mov_b32 s2, s4 2198; GFX900-NEXT: s_mov_b32 s3, s5 2199; GFX900-NEXT: s_mov_b32 s4, s6 2200; GFX900-NEXT: s_mov_b32 s5, s7 2201; GFX900-NEXT: s_mov_b32 s6, s8 2202; GFX900-NEXT: s_mov_b32 s7, s9 2203; GFX900-NEXT: image_atomic_umax v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2204; GFX900-NEXT: s_waitcnt vmcnt(0) 2205; GFX900-NEXT: ; return to shader part epilog 2206; 2207; GFX90A-LABEL: atomic_umax_i64_1d: 2208; GFX90A: ; %bb.0: ; %main_body 2209; GFX90A-NEXT: s_mov_b32 s0, s2 2210; GFX90A-NEXT: s_mov_b32 s1, s3 2211; GFX90A-NEXT: s_mov_b32 s2, s4 2212; GFX90A-NEXT: s_mov_b32 s3, s5 2213; GFX90A-NEXT: s_mov_b32 s4, s6 2214; GFX90A-NEXT: s_mov_b32 s5, s7 2215; GFX90A-NEXT: s_mov_b32 s6, s8 2216; GFX90A-NEXT: s_mov_b32 s7, s9 2217; GFX90A-NEXT: image_atomic_umax v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2218; GFX90A-NEXT: s_waitcnt vmcnt(0) 2219; GFX90A-NEXT: ; return to shader part epilog 2220; 2221; GFX10-LABEL: atomic_umax_i64_1d: 2222; GFX10: ; %bb.0: ; %main_body 2223; GFX10-NEXT: s_mov_b32 s0, s2 2224; GFX10-NEXT: s_mov_b32 s1, s3 2225; GFX10-NEXT: s_mov_b32 s2, s4 2226; GFX10-NEXT: s_mov_b32 s3, s5 2227; GFX10-NEXT: s_mov_b32 s4, s6 2228; GFX10-NEXT: s_mov_b32 s5, s7 2229; GFX10-NEXT: s_mov_b32 s6, s8 2230; GFX10-NEXT: s_mov_b32 s7, s9 2231; GFX10-NEXT: image_atomic_umax v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc 2232; GFX10-NEXT: s_waitcnt vmcnt(0) 2233; GFX10-NEXT: ; return to shader part epilog 2234main_body: 2235 %v = call i64 @llvm.amdgcn.image.atomic.umax.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 2236 %out = bitcast i64 %v to <2 x float> 2237 ret <2 x float> %out 2238} 2239 2240define amdgpu_ps <2 x float> @atomic_and_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) { 2241; GFX6-LABEL: atomic_and_i64_1d: 2242; GFX6: ; %bb.0: ; %main_body 2243; GFX6-NEXT: s_mov_b32 s0, s2 2244; GFX6-NEXT: s_mov_b32 s1, s3 2245; GFX6-NEXT: s_mov_b32 s2, s4 2246; GFX6-NEXT: s_mov_b32 s3, s5 2247; GFX6-NEXT: s_mov_b32 s4, s6 2248; GFX6-NEXT: s_mov_b32 s5, s7 2249; GFX6-NEXT: s_mov_b32 s6, s8 2250; GFX6-NEXT: s_mov_b32 s7, s9 2251; GFX6-NEXT: image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2252; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2253; GFX6-NEXT: ; return to shader part epilog 2254; 2255; GFX8-LABEL: atomic_and_i64_1d: 2256; GFX8: ; %bb.0: ; %main_body 2257; GFX8-NEXT: s_mov_b32 s0, s2 2258; GFX8-NEXT: s_mov_b32 s1, s3 2259; GFX8-NEXT: s_mov_b32 s2, s4 2260; GFX8-NEXT: s_mov_b32 s3, s5 2261; GFX8-NEXT: s_mov_b32 s4, s6 2262; GFX8-NEXT: s_mov_b32 s5, s7 2263; GFX8-NEXT: s_mov_b32 s6, s8 2264; GFX8-NEXT: s_mov_b32 s7, s9 2265; GFX8-NEXT: image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2266; GFX8-NEXT: s_waitcnt vmcnt(0) 2267; GFX8-NEXT: ; return to shader part epilog 2268; 2269; GFX900-LABEL: atomic_and_i64_1d: 2270; GFX900: ; %bb.0: ; %main_body 2271; GFX900-NEXT: s_mov_b32 s0, s2 2272; GFX900-NEXT: s_mov_b32 s1, s3 2273; GFX900-NEXT: s_mov_b32 s2, s4 2274; GFX900-NEXT: s_mov_b32 s3, s5 2275; GFX900-NEXT: s_mov_b32 s4, s6 2276; GFX900-NEXT: s_mov_b32 s5, s7 2277; GFX900-NEXT: s_mov_b32 s6, s8 2278; GFX900-NEXT: s_mov_b32 s7, s9 2279; GFX900-NEXT: image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2280; GFX900-NEXT: s_waitcnt vmcnt(0) 2281; GFX900-NEXT: ; return to shader part epilog 2282; 2283; GFX90A-LABEL: atomic_and_i64_1d: 2284; GFX90A: ; %bb.0: ; %main_body 2285; GFX90A-NEXT: s_mov_b32 s0, s2 2286; GFX90A-NEXT: s_mov_b32 s1, s3 2287; GFX90A-NEXT: s_mov_b32 s2, s4 2288; GFX90A-NEXT: s_mov_b32 s3, s5 2289; GFX90A-NEXT: s_mov_b32 s4, s6 2290; GFX90A-NEXT: s_mov_b32 s5, s7 2291; GFX90A-NEXT: s_mov_b32 s6, s8 2292; GFX90A-NEXT: s_mov_b32 s7, s9 2293; GFX90A-NEXT: image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2294; GFX90A-NEXT: s_waitcnt vmcnt(0) 2295; GFX90A-NEXT: ; return to shader part epilog 2296; 2297; GFX10-LABEL: atomic_and_i64_1d: 2298; GFX10: ; %bb.0: ; %main_body 2299; GFX10-NEXT: s_mov_b32 s0, s2 2300; GFX10-NEXT: s_mov_b32 s1, s3 2301; GFX10-NEXT: s_mov_b32 s2, s4 2302; GFX10-NEXT: s_mov_b32 s3, s5 2303; GFX10-NEXT: s_mov_b32 s4, s6 2304; GFX10-NEXT: s_mov_b32 s5, s7 2305; GFX10-NEXT: s_mov_b32 s6, s8 2306; GFX10-NEXT: s_mov_b32 s7, s9 2307; GFX10-NEXT: image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc 2308; GFX10-NEXT: s_waitcnt vmcnt(0) 2309; GFX10-NEXT: ; return to shader part epilog 2310main_body: 2311 %v = call i64 @llvm.amdgcn.image.atomic.and.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 2312 %out = bitcast i64 %v to <2 x float> 2313 ret <2 x float> %out 2314} 2315 2316define amdgpu_ps <2 x float> @atomic_or_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) { 2317; GFX6-LABEL: atomic_or_i64_1d: 2318; GFX6: ; %bb.0: ; %main_body 2319; GFX6-NEXT: s_mov_b32 s0, s2 2320; GFX6-NEXT: s_mov_b32 s1, s3 2321; GFX6-NEXT: s_mov_b32 s2, s4 2322; GFX6-NEXT: s_mov_b32 s3, s5 2323; GFX6-NEXT: s_mov_b32 s4, s6 2324; GFX6-NEXT: s_mov_b32 s5, s7 2325; GFX6-NEXT: s_mov_b32 s6, s8 2326; GFX6-NEXT: s_mov_b32 s7, s9 2327; GFX6-NEXT: image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2328; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2329; GFX6-NEXT: ; return to shader part epilog 2330; 2331; GFX8-LABEL: atomic_or_i64_1d: 2332; GFX8: ; %bb.0: ; %main_body 2333; GFX8-NEXT: s_mov_b32 s0, s2 2334; GFX8-NEXT: s_mov_b32 s1, s3 2335; GFX8-NEXT: s_mov_b32 s2, s4 2336; GFX8-NEXT: s_mov_b32 s3, s5 2337; GFX8-NEXT: s_mov_b32 s4, s6 2338; GFX8-NEXT: s_mov_b32 s5, s7 2339; GFX8-NEXT: s_mov_b32 s6, s8 2340; GFX8-NEXT: s_mov_b32 s7, s9 2341; GFX8-NEXT: image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2342; GFX8-NEXT: s_waitcnt vmcnt(0) 2343; GFX8-NEXT: ; return to shader part epilog 2344; 2345; GFX900-LABEL: atomic_or_i64_1d: 2346; GFX900: ; %bb.0: ; %main_body 2347; GFX900-NEXT: s_mov_b32 s0, s2 2348; GFX900-NEXT: s_mov_b32 s1, s3 2349; GFX900-NEXT: s_mov_b32 s2, s4 2350; GFX900-NEXT: s_mov_b32 s3, s5 2351; GFX900-NEXT: s_mov_b32 s4, s6 2352; GFX900-NEXT: s_mov_b32 s5, s7 2353; GFX900-NEXT: s_mov_b32 s6, s8 2354; GFX900-NEXT: s_mov_b32 s7, s9 2355; GFX900-NEXT: image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2356; GFX900-NEXT: s_waitcnt vmcnt(0) 2357; GFX900-NEXT: ; return to shader part epilog 2358; 2359; GFX90A-LABEL: atomic_or_i64_1d: 2360; GFX90A: ; %bb.0: ; %main_body 2361; GFX90A-NEXT: s_mov_b32 s0, s2 2362; GFX90A-NEXT: s_mov_b32 s1, s3 2363; GFX90A-NEXT: s_mov_b32 s2, s4 2364; GFX90A-NEXT: s_mov_b32 s3, s5 2365; GFX90A-NEXT: s_mov_b32 s4, s6 2366; GFX90A-NEXT: s_mov_b32 s5, s7 2367; GFX90A-NEXT: s_mov_b32 s6, s8 2368; GFX90A-NEXT: s_mov_b32 s7, s9 2369; GFX90A-NEXT: image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2370; GFX90A-NEXT: s_waitcnt vmcnt(0) 2371; GFX90A-NEXT: ; return to shader part epilog 2372; 2373; GFX10-LABEL: atomic_or_i64_1d: 2374; GFX10: ; %bb.0: ; %main_body 2375; GFX10-NEXT: s_mov_b32 s0, s2 2376; GFX10-NEXT: s_mov_b32 s1, s3 2377; GFX10-NEXT: s_mov_b32 s2, s4 2378; GFX10-NEXT: s_mov_b32 s3, s5 2379; GFX10-NEXT: s_mov_b32 s4, s6 2380; GFX10-NEXT: s_mov_b32 s5, s7 2381; GFX10-NEXT: s_mov_b32 s6, s8 2382; GFX10-NEXT: s_mov_b32 s7, s9 2383; GFX10-NEXT: image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc 2384; GFX10-NEXT: s_waitcnt vmcnt(0) 2385; GFX10-NEXT: ; return to shader part epilog 2386main_body: 2387 %v = call i64 @llvm.amdgcn.image.atomic.or.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 2388 %out = bitcast i64 %v to <2 x float> 2389 ret <2 x float> %out 2390} 2391 2392define amdgpu_ps <2 x float> @atomic_xor_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) { 2393; GFX6-LABEL: atomic_xor_i64_1d: 2394; GFX6: ; %bb.0: ; %main_body 2395; GFX6-NEXT: s_mov_b32 s0, s2 2396; GFX6-NEXT: s_mov_b32 s1, s3 2397; GFX6-NEXT: s_mov_b32 s2, s4 2398; GFX6-NEXT: s_mov_b32 s3, s5 2399; GFX6-NEXT: s_mov_b32 s4, s6 2400; GFX6-NEXT: s_mov_b32 s5, s7 2401; GFX6-NEXT: s_mov_b32 s6, s8 2402; GFX6-NEXT: s_mov_b32 s7, s9 2403; GFX6-NEXT: image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2404; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2405; GFX6-NEXT: ; return to shader part epilog 2406; 2407; GFX8-LABEL: atomic_xor_i64_1d: 2408; GFX8: ; %bb.0: ; %main_body 2409; GFX8-NEXT: s_mov_b32 s0, s2 2410; GFX8-NEXT: s_mov_b32 s1, s3 2411; GFX8-NEXT: s_mov_b32 s2, s4 2412; GFX8-NEXT: s_mov_b32 s3, s5 2413; GFX8-NEXT: s_mov_b32 s4, s6 2414; GFX8-NEXT: s_mov_b32 s5, s7 2415; GFX8-NEXT: s_mov_b32 s6, s8 2416; GFX8-NEXT: s_mov_b32 s7, s9 2417; GFX8-NEXT: image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2418; GFX8-NEXT: s_waitcnt vmcnt(0) 2419; GFX8-NEXT: ; return to shader part epilog 2420; 2421; GFX900-LABEL: atomic_xor_i64_1d: 2422; GFX900: ; %bb.0: ; %main_body 2423; GFX900-NEXT: s_mov_b32 s0, s2 2424; GFX900-NEXT: s_mov_b32 s1, s3 2425; GFX900-NEXT: s_mov_b32 s2, s4 2426; GFX900-NEXT: s_mov_b32 s3, s5 2427; GFX900-NEXT: s_mov_b32 s4, s6 2428; GFX900-NEXT: s_mov_b32 s5, s7 2429; GFX900-NEXT: s_mov_b32 s6, s8 2430; GFX900-NEXT: s_mov_b32 s7, s9 2431; GFX900-NEXT: image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2432; GFX900-NEXT: s_waitcnt vmcnt(0) 2433; GFX900-NEXT: ; return to shader part epilog 2434; 2435; GFX90A-LABEL: atomic_xor_i64_1d: 2436; GFX90A: ; %bb.0: ; %main_body 2437; GFX90A-NEXT: s_mov_b32 s0, s2 2438; GFX90A-NEXT: s_mov_b32 s1, s3 2439; GFX90A-NEXT: s_mov_b32 s2, s4 2440; GFX90A-NEXT: s_mov_b32 s3, s5 2441; GFX90A-NEXT: s_mov_b32 s4, s6 2442; GFX90A-NEXT: s_mov_b32 s5, s7 2443; GFX90A-NEXT: s_mov_b32 s6, s8 2444; GFX90A-NEXT: s_mov_b32 s7, s9 2445; GFX90A-NEXT: image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2446; GFX90A-NEXT: s_waitcnt vmcnt(0) 2447; GFX90A-NEXT: ; return to shader part epilog 2448; 2449; GFX10-LABEL: atomic_xor_i64_1d: 2450; GFX10: ; %bb.0: ; %main_body 2451; GFX10-NEXT: s_mov_b32 s0, s2 2452; GFX10-NEXT: s_mov_b32 s1, s3 2453; GFX10-NEXT: s_mov_b32 s2, s4 2454; GFX10-NEXT: s_mov_b32 s3, s5 2455; GFX10-NEXT: s_mov_b32 s4, s6 2456; GFX10-NEXT: s_mov_b32 s5, s7 2457; GFX10-NEXT: s_mov_b32 s6, s8 2458; GFX10-NEXT: s_mov_b32 s7, s9 2459; GFX10-NEXT: image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc 2460; GFX10-NEXT: s_waitcnt vmcnt(0) 2461; GFX10-NEXT: ; return to shader part epilog 2462main_body: 2463 %v = call i64 @llvm.amdgcn.image.atomic.xor.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 2464 %out = bitcast i64 %v to <2 x float> 2465 ret <2 x float> %out 2466} 2467 2468define amdgpu_ps <2 x float> @atomic_inc_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) { 2469; GFX6-LABEL: atomic_inc_i64_1d: 2470; GFX6: ; %bb.0: ; %main_body 2471; GFX6-NEXT: s_mov_b32 s0, s2 2472; GFX6-NEXT: s_mov_b32 s1, s3 2473; GFX6-NEXT: s_mov_b32 s2, s4 2474; GFX6-NEXT: s_mov_b32 s3, s5 2475; GFX6-NEXT: s_mov_b32 s4, s6 2476; GFX6-NEXT: s_mov_b32 s5, s7 2477; GFX6-NEXT: s_mov_b32 s6, s8 2478; GFX6-NEXT: s_mov_b32 s7, s9 2479; GFX6-NEXT: image_atomic_inc v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2480; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2481; GFX6-NEXT: ; return to shader part epilog 2482; 2483; GFX8-LABEL: atomic_inc_i64_1d: 2484; GFX8: ; %bb.0: ; %main_body 2485; GFX8-NEXT: s_mov_b32 s0, s2 2486; GFX8-NEXT: s_mov_b32 s1, s3 2487; GFX8-NEXT: s_mov_b32 s2, s4 2488; GFX8-NEXT: s_mov_b32 s3, s5 2489; GFX8-NEXT: s_mov_b32 s4, s6 2490; GFX8-NEXT: s_mov_b32 s5, s7 2491; GFX8-NEXT: s_mov_b32 s6, s8 2492; GFX8-NEXT: s_mov_b32 s7, s9 2493; GFX8-NEXT: image_atomic_inc v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2494; GFX8-NEXT: s_waitcnt vmcnt(0) 2495; GFX8-NEXT: ; return to shader part epilog 2496; 2497; GFX900-LABEL: atomic_inc_i64_1d: 2498; GFX900: ; %bb.0: ; %main_body 2499; GFX900-NEXT: s_mov_b32 s0, s2 2500; GFX900-NEXT: s_mov_b32 s1, s3 2501; GFX900-NEXT: s_mov_b32 s2, s4 2502; GFX900-NEXT: s_mov_b32 s3, s5 2503; GFX900-NEXT: s_mov_b32 s4, s6 2504; GFX900-NEXT: s_mov_b32 s5, s7 2505; GFX900-NEXT: s_mov_b32 s6, s8 2506; GFX900-NEXT: s_mov_b32 s7, s9 2507; GFX900-NEXT: image_atomic_inc v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2508; GFX900-NEXT: s_waitcnt vmcnt(0) 2509; GFX900-NEXT: ; return to shader part epilog 2510; 2511; GFX90A-LABEL: atomic_inc_i64_1d: 2512; GFX90A: ; %bb.0: ; %main_body 2513; GFX90A-NEXT: s_mov_b32 s0, s2 2514; GFX90A-NEXT: s_mov_b32 s1, s3 2515; GFX90A-NEXT: s_mov_b32 s2, s4 2516; GFX90A-NEXT: s_mov_b32 s3, s5 2517; GFX90A-NEXT: s_mov_b32 s4, s6 2518; GFX90A-NEXT: s_mov_b32 s5, s7 2519; GFX90A-NEXT: s_mov_b32 s6, s8 2520; GFX90A-NEXT: s_mov_b32 s7, s9 2521; GFX90A-NEXT: image_atomic_inc v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2522; GFX90A-NEXT: s_waitcnt vmcnt(0) 2523; GFX90A-NEXT: ; return to shader part epilog 2524; 2525; GFX10-LABEL: atomic_inc_i64_1d: 2526; GFX10: ; %bb.0: ; %main_body 2527; GFX10-NEXT: s_mov_b32 s0, s2 2528; GFX10-NEXT: s_mov_b32 s1, s3 2529; GFX10-NEXT: s_mov_b32 s2, s4 2530; GFX10-NEXT: s_mov_b32 s3, s5 2531; GFX10-NEXT: s_mov_b32 s4, s6 2532; GFX10-NEXT: s_mov_b32 s5, s7 2533; GFX10-NEXT: s_mov_b32 s6, s8 2534; GFX10-NEXT: s_mov_b32 s7, s9 2535; GFX10-NEXT: image_atomic_inc v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc 2536; GFX10-NEXT: s_waitcnt vmcnt(0) 2537; GFX10-NEXT: ; return to shader part epilog 2538main_body: 2539 %v = call i64 @llvm.amdgcn.image.atomic.inc.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 2540 %out = bitcast i64 %v to <2 x float> 2541 ret <2 x float> %out 2542} 2543 2544define amdgpu_ps <2 x float> @atomic_dec_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i32 %s) { 2545; GFX6-LABEL: atomic_dec_i64_1d: 2546; GFX6: ; %bb.0: ; %main_body 2547; GFX6-NEXT: s_mov_b32 s0, s2 2548; GFX6-NEXT: s_mov_b32 s1, s3 2549; GFX6-NEXT: s_mov_b32 s2, s4 2550; GFX6-NEXT: s_mov_b32 s3, s5 2551; GFX6-NEXT: s_mov_b32 s4, s6 2552; GFX6-NEXT: s_mov_b32 s5, s7 2553; GFX6-NEXT: s_mov_b32 s6, s8 2554; GFX6-NEXT: s_mov_b32 s7, s9 2555; GFX6-NEXT: image_atomic_dec v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2556; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2557; GFX6-NEXT: ; return to shader part epilog 2558; 2559; GFX8-LABEL: atomic_dec_i64_1d: 2560; GFX8: ; %bb.0: ; %main_body 2561; GFX8-NEXT: s_mov_b32 s0, s2 2562; GFX8-NEXT: s_mov_b32 s1, s3 2563; GFX8-NEXT: s_mov_b32 s2, s4 2564; GFX8-NEXT: s_mov_b32 s3, s5 2565; GFX8-NEXT: s_mov_b32 s4, s6 2566; GFX8-NEXT: s_mov_b32 s5, s7 2567; GFX8-NEXT: s_mov_b32 s6, s8 2568; GFX8-NEXT: s_mov_b32 s7, s9 2569; GFX8-NEXT: image_atomic_dec v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2570; GFX8-NEXT: s_waitcnt vmcnt(0) 2571; GFX8-NEXT: ; return to shader part epilog 2572; 2573; GFX900-LABEL: atomic_dec_i64_1d: 2574; GFX900: ; %bb.0: ; %main_body 2575; GFX900-NEXT: s_mov_b32 s0, s2 2576; GFX900-NEXT: s_mov_b32 s1, s3 2577; GFX900-NEXT: s_mov_b32 s2, s4 2578; GFX900-NEXT: s_mov_b32 s3, s5 2579; GFX900-NEXT: s_mov_b32 s4, s6 2580; GFX900-NEXT: s_mov_b32 s5, s7 2581; GFX900-NEXT: s_mov_b32 s6, s8 2582; GFX900-NEXT: s_mov_b32 s7, s9 2583; GFX900-NEXT: image_atomic_dec v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2584; GFX900-NEXT: s_waitcnt vmcnt(0) 2585; GFX900-NEXT: ; return to shader part epilog 2586; 2587; GFX90A-LABEL: atomic_dec_i64_1d: 2588; GFX90A: ; %bb.0: ; %main_body 2589; GFX90A-NEXT: s_mov_b32 s0, s2 2590; GFX90A-NEXT: s_mov_b32 s1, s3 2591; GFX90A-NEXT: s_mov_b32 s2, s4 2592; GFX90A-NEXT: s_mov_b32 s3, s5 2593; GFX90A-NEXT: s_mov_b32 s4, s6 2594; GFX90A-NEXT: s_mov_b32 s5, s7 2595; GFX90A-NEXT: s_mov_b32 s6, s8 2596; GFX90A-NEXT: s_mov_b32 s7, s9 2597; GFX90A-NEXT: image_atomic_dec v[0:1], v2, s[0:7] dmask:0x3 unorm glc 2598; GFX90A-NEXT: s_waitcnt vmcnt(0) 2599; GFX90A-NEXT: ; return to shader part epilog 2600; 2601; GFX10-LABEL: atomic_dec_i64_1d: 2602; GFX10: ; %bb.0: ; %main_body 2603; GFX10-NEXT: s_mov_b32 s0, s2 2604; GFX10-NEXT: s_mov_b32 s1, s3 2605; GFX10-NEXT: s_mov_b32 s2, s4 2606; GFX10-NEXT: s_mov_b32 s3, s5 2607; GFX10-NEXT: s_mov_b32 s4, s6 2608; GFX10-NEXT: s_mov_b32 s5, s7 2609; GFX10-NEXT: s_mov_b32 s6, s8 2610; GFX10-NEXT: s_mov_b32 s7, s9 2611; GFX10-NEXT: image_atomic_dec v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc 2612; GFX10-NEXT: s_waitcnt vmcnt(0) 2613; GFX10-NEXT: ; return to shader part epilog 2614main_body: 2615 %v = call i64 @llvm.amdgcn.image.atomic.dec.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 2616 %out = bitcast i64 %v to <2 x float> 2617 ret <2 x float> %out 2618} 2619 2620define amdgpu_ps <2 x float> @atomic_cmpswap_i64_1d(<8 x i32> inreg %rsrc, i64 %cmp, i64 %swap, i32 %s) { 2621; GFX6-LABEL: atomic_cmpswap_i64_1d: 2622; GFX6: ; %bb.0: ; %main_body 2623; GFX6-NEXT: s_mov_b32 s0, s2 2624; GFX6-NEXT: s_mov_b32 s1, s3 2625; GFX6-NEXT: s_mov_b32 s2, s4 2626; GFX6-NEXT: s_mov_b32 s3, s5 2627; GFX6-NEXT: s_mov_b32 s4, s6 2628; GFX6-NEXT: s_mov_b32 s5, s7 2629; GFX6-NEXT: s_mov_b32 s6, s8 2630; GFX6-NEXT: s_mov_b32 s7, s9 2631; GFX6-NEXT: image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm glc 2632; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2633; GFX6-NEXT: ; return to shader part epilog 2634; 2635; GFX8-LABEL: atomic_cmpswap_i64_1d: 2636; GFX8: ; %bb.0: ; %main_body 2637; GFX8-NEXT: s_mov_b32 s0, s2 2638; GFX8-NEXT: s_mov_b32 s1, s3 2639; GFX8-NEXT: s_mov_b32 s2, s4 2640; GFX8-NEXT: s_mov_b32 s3, s5 2641; GFX8-NEXT: s_mov_b32 s4, s6 2642; GFX8-NEXT: s_mov_b32 s5, s7 2643; GFX8-NEXT: s_mov_b32 s6, s8 2644; GFX8-NEXT: s_mov_b32 s7, s9 2645; GFX8-NEXT: image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm glc 2646; GFX8-NEXT: s_waitcnt vmcnt(0) 2647; GFX8-NEXT: ; return to shader part epilog 2648; 2649; GFX900-LABEL: atomic_cmpswap_i64_1d: 2650; GFX900: ; %bb.0: ; %main_body 2651; GFX900-NEXT: s_mov_b32 s0, s2 2652; GFX900-NEXT: s_mov_b32 s1, s3 2653; GFX900-NEXT: s_mov_b32 s2, s4 2654; GFX900-NEXT: s_mov_b32 s3, s5 2655; GFX900-NEXT: s_mov_b32 s4, s6 2656; GFX900-NEXT: s_mov_b32 s5, s7 2657; GFX900-NEXT: s_mov_b32 s6, s8 2658; GFX900-NEXT: s_mov_b32 s7, s9 2659; GFX900-NEXT: image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm glc 2660; GFX900-NEXT: s_waitcnt vmcnt(0) 2661; GFX900-NEXT: ; return to shader part epilog 2662; 2663; GFX90A-LABEL: atomic_cmpswap_i64_1d: 2664; GFX90A: ; %bb.0: ; %main_body 2665; GFX90A-NEXT: s_mov_b32 s0, s2 2666; GFX90A-NEXT: s_mov_b32 s1, s3 2667; GFX90A-NEXT: s_mov_b32 s2, s4 2668; GFX90A-NEXT: s_mov_b32 s3, s5 2669; GFX90A-NEXT: s_mov_b32 s4, s6 2670; GFX90A-NEXT: s_mov_b32 s5, s7 2671; GFX90A-NEXT: s_mov_b32 s6, s8 2672; GFX90A-NEXT: s_mov_b32 s7, s9 2673; GFX90A-NEXT: image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm glc 2674; GFX90A-NEXT: s_waitcnt vmcnt(0) 2675; GFX90A-NEXT: ; return to shader part epilog 2676; 2677; GFX10-LABEL: atomic_cmpswap_i64_1d: 2678; GFX10: ; %bb.0: ; %main_body 2679; GFX10-NEXT: s_mov_b32 s0, s2 2680; GFX10-NEXT: s_mov_b32 s1, s3 2681; GFX10-NEXT: s_mov_b32 s2, s4 2682; GFX10-NEXT: s_mov_b32 s3, s5 2683; GFX10-NEXT: s_mov_b32 s4, s6 2684; GFX10-NEXT: s_mov_b32 s5, s7 2685; GFX10-NEXT: s_mov_b32 s6, s8 2686; GFX10-NEXT: s_mov_b32 s7, s9 2687; GFX10-NEXT: image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc 2688; GFX10-NEXT: s_waitcnt vmcnt(0) 2689; GFX10-NEXT: ; return to shader part epilog 2690main_body: 2691 %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) 2692 %out = bitcast i64 %v to <2 x float> 2693 ret <2 x float> %out 2694} 2695 2696define amdgpu_ps void @atomic_cmpswap_i64_1d_no_return(<8 x i32> inreg %rsrc, i64 %cmp, i64 %swap, i32 %s) { 2697; GFX6-LABEL: atomic_cmpswap_i64_1d_no_return: 2698; GFX6: ; %bb.0: ; %main_body 2699; GFX6-NEXT: s_mov_b32 s0, s2 2700; GFX6-NEXT: s_mov_b32 s1, s3 2701; GFX6-NEXT: s_mov_b32 s2, s4 2702; GFX6-NEXT: s_mov_b32 s3, s5 2703; GFX6-NEXT: s_mov_b32 s4, s6 2704; GFX6-NEXT: s_mov_b32 s5, s7 2705; GFX6-NEXT: s_mov_b32 s6, s8 2706; GFX6-NEXT: s_mov_b32 s7, s9 2707; GFX6-NEXT: image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm glc 2708; GFX6-NEXT: s_endpgm 2709; 2710; GFX8-LABEL: atomic_cmpswap_i64_1d_no_return: 2711; GFX8: ; %bb.0: ; %main_body 2712; GFX8-NEXT: s_mov_b32 s0, s2 2713; GFX8-NEXT: s_mov_b32 s1, s3 2714; GFX8-NEXT: s_mov_b32 s2, s4 2715; GFX8-NEXT: s_mov_b32 s3, s5 2716; GFX8-NEXT: s_mov_b32 s4, s6 2717; GFX8-NEXT: s_mov_b32 s5, s7 2718; GFX8-NEXT: s_mov_b32 s6, s8 2719; GFX8-NEXT: s_mov_b32 s7, s9 2720; GFX8-NEXT: image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm glc 2721; GFX8-NEXT: s_endpgm 2722; 2723; GFX900-LABEL: atomic_cmpswap_i64_1d_no_return: 2724; GFX900: ; %bb.0: ; %main_body 2725; GFX900-NEXT: s_mov_b32 s0, s2 2726; GFX900-NEXT: s_mov_b32 s1, s3 2727; GFX900-NEXT: s_mov_b32 s2, s4 2728; GFX900-NEXT: s_mov_b32 s3, s5 2729; GFX900-NEXT: s_mov_b32 s4, s6 2730; GFX900-NEXT: s_mov_b32 s5, s7 2731; GFX900-NEXT: s_mov_b32 s6, s8 2732; GFX900-NEXT: s_mov_b32 s7, s9 2733; GFX900-NEXT: image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm glc 2734; GFX900-NEXT: s_endpgm 2735; 2736; GFX90A-LABEL: atomic_cmpswap_i64_1d_no_return: 2737; GFX90A: ; %bb.0: ; %main_body 2738; GFX90A-NEXT: s_mov_b32 s0, s2 2739; GFX90A-NEXT: s_mov_b32 s1, s3 2740; GFX90A-NEXT: s_mov_b32 s2, s4 2741; GFX90A-NEXT: s_mov_b32 s3, s5 2742; GFX90A-NEXT: s_mov_b32 s4, s6 2743; GFX90A-NEXT: s_mov_b32 s5, s7 2744; GFX90A-NEXT: s_mov_b32 s6, s8 2745; GFX90A-NEXT: s_mov_b32 s7, s9 2746; GFX90A-NEXT: image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm glc 2747; GFX90A-NEXT: s_endpgm 2748; 2749; GFX10-LABEL: atomic_cmpswap_i64_1d_no_return: 2750; GFX10: ; %bb.0: ; %main_body 2751; GFX10-NEXT: s_mov_b32 s0, s2 2752; GFX10-NEXT: s_mov_b32 s1, s3 2753; GFX10-NEXT: s_mov_b32 s2, s4 2754; GFX10-NEXT: s_mov_b32 s3, s5 2755; GFX10-NEXT: s_mov_b32 s4, s6 2756; GFX10-NEXT: s_mov_b32 s5, s7 2757; GFX10-NEXT: s_mov_b32 s6, s8 2758; GFX10-NEXT: s_mov_b32 s7, s9 2759; GFX10-NEXT: image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc 2760; GFX10-NEXT: s_endpgm 2761main_body: 2762 %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) 2763 ret void 2764} 2765 2766define amdgpu_ps <2 x float> @atomic_add_i64_2d(<8 x i32> inreg %rsrc, i64 %data, i32 %s, i32 %t) { 2767; GFX6-LABEL: atomic_add_i64_2d: 2768; GFX6: ; %bb.0: ; %main_body 2769; GFX6-NEXT: s_mov_b32 s0, s2 2770; GFX6-NEXT: s_mov_b32 s1, s3 2771; GFX6-NEXT: s_mov_b32 s2, s4 2772; GFX6-NEXT: s_mov_b32 s3, s5 2773; GFX6-NEXT: s_mov_b32 s4, s6 2774; GFX6-NEXT: s_mov_b32 s5, s7 2775; GFX6-NEXT: s_mov_b32 s6, s8 2776; GFX6-NEXT: s_mov_b32 s7, s9 2777; GFX6-NEXT: image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc 2778; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2779; GFX6-NEXT: ; return to shader part epilog 2780; 2781; GFX8-LABEL: atomic_add_i64_2d: 2782; GFX8: ; %bb.0: ; %main_body 2783; GFX8-NEXT: s_mov_b32 s0, s2 2784; GFX8-NEXT: s_mov_b32 s1, s3 2785; GFX8-NEXT: s_mov_b32 s2, s4 2786; GFX8-NEXT: s_mov_b32 s3, s5 2787; GFX8-NEXT: s_mov_b32 s4, s6 2788; GFX8-NEXT: s_mov_b32 s5, s7 2789; GFX8-NEXT: s_mov_b32 s6, s8 2790; GFX8-NEXT: s_mov_b32 s7, s9 2791; GFX8-NEXT: image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc 2792; GFX8-NEXT: s_waitcnt vmcnt(0) 2793; GFX8-NEXT: ; return to shader part epilog 2794; 2795; GFX900-LABEL: atomic_add_i64_2d: 2796; GFX900: ; %bb.0: ; %main_body 2797; GFX900-NEXT: s_mov_b32 s0, s2 2798; GFX900-NEXT: s_mov_b32 s1, s3 2799; GFX900-NEXT: s_mov_b32 s2, s4 2800; GFX900-NEXT: s_mov_b32 s3, s5 2801; GFX900-NEXT: s_mov_b32 s4, s6 2802; GFX900-NEXT: s_mov_b32 s5, s7 2803; GFX900-NEXT: s_mov_b32 s6, s8 2804; GFX900-NEXT: s_mov_b32 s7, s9 2805; GFX900-NEXT: image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc 2806; GFX900-NEXT: s_waitcnt vmcnt(0) 2807; GFX900-NEXT: ; return to shader part epilog 2808; 2809; GFX90A-LABEL: atomic_add_i64_2d: 2810; GFX90A: ; %bb.0: ; %main_body 2811; GFX90A-NEXT: s_mov_b32 s0, s2 2812; GFX90A-NEXT: s_mov_b32 s1, s3 2813; GFX90A-NEXT: s_mov_b32 s2, s4 2814; GFX90A-NEXT: s_mov_b32 s3, s5 2815; GFX90A-NEXT: s_mov_b32 s4, s6 2816; GFX90A-NEXT: s_mov_b32 s5, s7 2817; GFX90A-NEXT: s_mov_b32 s6, s8 2818; GFX90A-NEXT: s_mov_b32 s7, s9 2819; GFX90A-NEXT: image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc 2820; GFX90A-NEXT: s_waitcnt vmcnt(0) 2821; GFX90A-NEXT: ; return to shader part epilog 2822; 2823; GFX10-LABEL: atomic_add_i64_2d: 2824; GFX10: ; %bb.0: ; %main_body 2825; GFX10-NEXT: s_mov_b32 s0, s2 2826; GFX10-NEXT: s_mov_b32 s1, s3 2827; GFX10-NEXT: s_mov_b32 s2, s4 2828; GFX10-NEXT: s_mov_b32 s3, s5 2829; GFX10-NEXT: s_mov_b32 s4, s6 2830; GFX10-NEXT: s_mov_b32 s5, s7 2831; GFX10-NEXT: s_mov_b32 s6, s8 2832; GFX10-NEXT: s_mov_b32 s7, s9 2833; GFX10-NEXT: image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D unorm glc 2834; GFX10-NEXT: s_waitcnt vmcnt(0) 2835; GFX10-NEXT: ; return to shader part epilog 2836main_body: 2837 %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) 2838 %out = bitcast i64 %v to <2 x float> 2839 ret <2 x float> %out 2840} 2841 2842define amdgpu_ps <2 x float> @atomic_add_i64_3d(<8 x i32> inreg %rsrc, i64 %data, i32 %s, i32 %t, i32 %r) { 2843; GFX6-LABEL: atomic_add_i64_3d: 2844; GFX6: ; %bb.0: ; %main_body 2845; GFX6-NEXT: s_mov_b32 s0, s2 2846; GFX6-NEXT: s_mov_b32 s1, s3 2847; GFX6-NEXT: s_mov_b32 s2, s4 2848; GFX6-NEXT: s_mov_b32 s3, s5 2849; GFX6-NEXT: s_mov_b32 s4, s6 2850; GFX6-NEXT: s_mov_b32 s5, s7 2851; GFX6-NEXT: s_mov_b32 s6, s8 2852; GFX6-NEXT: s_mov_b32 s7, s9 2853; GFX6-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc 2854; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2855; GFX6-NEXT: ; return to shader part epilog 2856; 2857; GFX8-LABEL: atomic_add_i64_3d: 2858; GFX8: ; %bb.0: ; %main_body 2859; GFX8-NEXT: s_mov_b32 s0, s2 2860; GFX8-NEXT: s_mov_b32 s1, s3 2861; GFX8-NEXT: s_mov_b32 s2, s4 2862; GFX8-NEXT: s_mov_b32 s3, s5 2863; GFX8-NEXT: s_mov_b32 s4, s6 2864; GFX8-NEXT: s_mov_b32 s5, s7 2865; GFX8-NEXT: s_mov_b32 s6, s8 2866; GFX8-NEXT: s_mov_b32 s7, s9 2867; GFX8-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc 2868; GFX8-NEXT: s_waitcnt vmcnt(0) 2869; GFX8-NEXT: ; return to shader part epilog 2870; 2871; GFX900-LABEL: atomic_add_i64_3d: 2872; GFX900: ; %bb.0: ; %main_body 2873; GFX900-NEXT: s_mov_b32 s0, s2 2874; GFX900-NEXT: s_mov_b32 s1, s3 2875; GFX900-NEXT: s_mov_b32 s2, s4 2876; GFX900-NEXT: s_mov_b32 s3, s5 2877; GFX900-NEXT: s_mov_b32 s4, s6 2878; GFX900-NEXT: s_mov_b32 s5, s7 2879; GFX900-NEXT: s_mov_b32 s6, s8 2880; GFX900-NEXT: s_mov_b32 s7, s9 2881; GFX900-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc 2882; GFX900-NEXT: s_waitcnt vmcnt(0) 2883; GFX900-NEXT: ; return to shader part epilog 2884; 2885; GFX90A-LABEL: atomic_add_i64_3d: 2886; GFX90A: ; %bb.0: ; %main_body 2887; GFX90A-NEXT: s_mov_b32 s0, s2 2888; GFX90A-NEXT: s_mov_b32 s1, s3 2889; GFX90A-NEXT: s_mov_b32 s2, s4 2890; GFX90A-NEXT: s_mov_b32 s3, s5 2891; GFX90A-NEXT: s_mov_b32 s4, s6 2892; GFX90A-NEXT: s_mov_b32 s5, s7 2893; GFX90A-NEXT: s_mov_b32 s6, s8 2894; GFX90A-NEXT: s_mov_b32 s7, s9 2895; GFX90A-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc 2896; GFX90A-NEXT: s_waitcnt vmcnt(0) 2897; GFX90A-NEXT: ; return to shader part epilog 2898; 2899; GFX10-LABEL: atomic_add_i64_3d: 2900; GFX10: ; %bb.0: ; %main_body 2901; GFX10-NEXT: s_mov_b32 s0, s2 2902; GFX10-NEXT: s_mov_b32 s1, s3 2903; GFX10-NEXT: s_mov_b32 s2, s4 2904; GFX10-NEXT: s_mov_b32 s3, s5 2905; GFX10-NEXT: s_mov_b32 s4, s6 2906; GFX10-NEXT: s_mov_b32 s5, s7 2907; GFX10-NEXT: s_mov_b32 s6, s8 2908; GFX10-NEXT: s_mov_b32 s7, s9 2909; GFX10-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_3D unorm glc 2910; GFX10-NEXT: s_waitcnt vmcnt(0) 2911; GFX10-NEXT: ; return to shader part epilog 2912main_body: 2913 %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) 2914 %out = bitcast i64 %v to <2 x float> 2915 ret <2 x float> %out 2916} 2917 2918define amdgpu_ps <2 x float> @atomic_add_i64_cube(<8 x i32> inreg %rsrc, i64 %data, i32 %s, i32 %t, i32 %face) { 2919; GFX6-LABEL: atomic_add_i64_cube: 2920; GFX6: ; %bb.0: ; %main_body 2921; GFX6-NEXT: s_mov_b32 s0, s2 2922; GFX6-NEXT: s_mov_b32 s1, s3 2923; GFX6-NEXT: s_mov_b32 s2, s4 2924; GFX6-NEXT: s_mov_b32 s3, s5 2925; GFX6-NEXT: s_mov_b32 s4, s6 2926; GFX6-NEXT: s_mov_b32 s5, s7 2927; GFX6-NEXT: s_mov_b32 s6, s8 2928; GFX6-NEXT: s_mov_b32 s7, s9 2929; GFX6-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da 2930; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2931; GFX6-NEXT: ; return to shader part epilog 2932; 2933; GFX8-LABEL: atomic_add_i64_cube: 2934; GFX8: ; %bb.0: ; %main_body 2935; GFX8-NEXT: s_mov_b32 s0, s2 2936; GFX8-NEXT: s_mov_b32 s1, s3 2937; GFX8-NEXT: s_mov_b32 s2, s4 2938; GFX8-NEXT: s_mov_b32 s3, s5 2939; GFX8-NEXT: s_mov_b32 s4, s6 2940; GFX8-NEXT: s_mov_b32 s5, s7 2941; GFX8-NEXT: s_mov_b32 s6, s8 2942; GFX8-NEXT: s_mov_b32 s7, s9 2943; GFX8-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da 2944; GFX8-NEXT: s_waitcnt vmcnt(0) 2945; GFX8-NEXT: ; return to shader part epilog 2946; 2947; GFX900-LABEL: atomic_add_i64_cube: 2948; GFX900: ; %bb.0: ; %main_body 2949; GFX900-NEXT: s_mov_b32 s0, s2 2950; GFX900-NEXT: s_mov_b32 s1, s3 2951; GFX900-NEXT: s_mov_b32 s2, s4 2952; GFX900-NEXT: s_mov_b32 s3, s5 2953; GFX900-NEXT: s_mov_b32 s4, s6 2954; GFX900-NEXT: s_mov_b32 s5, s7 2955; GFX900-NEXT: s_mov_b32 s6, s8 2956; GFX900-NEXT: s_mov_b32 s7, s9 2957; GFX900-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da 2958; GFX900-NEXT: s_waitcnt vmcnt(0) 2959; GFX900-NEXT: ; return to shader part epilog 2960; 2961; GFX90A-LABEL: atomic_add_i64_cube: 2962; GFX90A: ; %bb.0: ; %main_body 2963; GFX90A-NEXT: s_mov_b32 s0, s2 2964; GFX90A-NEXT: s_mov_b32 s1, s3 2965; GFX90A-NEXT: s_mov_b32 s2, s4 2966; GFX90A-NEXT: s_mov_b32 s3, s5 2967; GFX90A-NEXT: s_mov_b32 s4, s6 2968; GFX90A-NEXT: s_mov_b32 s5, s7 2969; GFX90A-NEXT: s_mov_b32 s6, s8 2970; GFX90A-NEXT: s_mov_b32 s7, s9 2971; GFX90A-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da 2972; GFX90A-NEXT: s_waitcnt vmcnt(0) 2973; GFX90A-NEXT: ; return to shader part epilog 2974; 2975; GFX10-LABEL: atomic_add_i64_cube: 2976; GFX10: ; %bb.0: ; %main_body 2977; GFX10-NEXT: s_mov_b32 s0, s2 2978; GFX10-NEXT: s_mov_b32 s1, s3 2979; GFX10-NEXT: s_mov_b32 s2, s4 2980; GFX10-NEXT: s_mov_b32 s3, s5 2981; GFX10-NEXT: s_mov_b32 s4, s6 2982; GFX10-NEXT: s_mov_b32 s5, s7 2983; GFX10-NEXT: s_mov_b32 s6, s8 2984; GFX10-NEXT: s_mov_b32 s7, s9 2985; GFX10-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_CUBE unorm glc 2986; GFX10-NEXT: s_waitcnt vmcnt(0) 2987; GFX10-NEXT: ; return to shader part epilog 2988main_body: 2989 %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) 2990 %out = bitcast i64 %v to <2 x float> 2991 ret <2 x float> %out 2992} 2993 2994define amdgpu_ps <2 x float> @atomic_add_i64_1darray(<8 x i32> inreg %rsrc, i64 %data, i32 %s, i32 %slice) { 2995; GFX6-LABEL: atomic_add_i64_1darray: 2996; GFX6: ; %bb.0: ; %main_body 2997; GFX6-NEXT: s_mov_b32 s0, s2 2998; GFX6-NEXT: s_mov_b32 s1, s3 2999; GFX6-NEXT: s_mov_b32 s2, s4 3000; GFX6-NEXT: s_mov_b32 s3, s5 3001; GFX6-NEXT: s_mov_b32 s4, s6 3002; GFX6-NEXT: s_mov_b32 s5, s7 3003; GFX6-NEXT: s_mov_b32 s6, s8 3004; GFX6-NEXT: s_mov_b32 s7, s9 3005; GFX6-NEXT: image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc da 3006; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 3007; GFX6-NEXT: ; return to shader part epilog 3008; 3009; GFX8-LABEL: atomic_add_i64_1darray: 3010; GFX8: ; %bb.0: ; %main_body 3011; GFX8-NEXT: s_mov_b32 s0, s2 3012; GFX8-NEXT: s_mov_b32 s1, s3 3013; GFX8-NEXT: s_mov_b32 s2, s4 3014; GFX8-NEXT: s_mov_b32 s3, s5 3015; GFX8-NEXT: s_mov_b32 s4, s6 3016; GFX8-NEXT: s_mov_b32 s5, s7 3017; GFX8-NEXT: s_mov_b32 s6, s8 3018; GFX8-NEXT: s_mov_b32 s7, s9 3019; GFX8-NEXT: image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc da 3020; GFX8-NEXT: s_waitcnt vmcnt(0) 3021; GFX8-NEXT: ; return to shader part epilog 3022; 3023; GFX900-LABEL: atomic_add_i64_1darray: 3024; GFX900: ; %bb.0: ; %main_body 3025; GFX900-NEXT: s_mov_b32 s0, s2 3026; GFX900-NEXT: s_mov_b32 s1, s3 3027; GFX900-NEXT: s_mov_b32 s2, s4 3028; GFX900-NEXT: s_mov_b32 s3, s5 3029; GFX900-NEXT: s_mov_b32 s4, s6 3030; GFX900-NEXT: s_mov_b32 s5, s7 3031; GFX900-NEXT: s_mov_b32 s6, s8 3032; GFX900-NEXT: s_mov_b32 s7, s9 3033; GFX900-NEXT: image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc da 3034; GFX900-NEXT: s_waitcnt vmcnt(0) 3035; GFX900-NEXT: ; return to shader part epilog 3036; 3037; GFX90A-LABEL: atomic_add_i64_1darray: 3038; GFX90A: ; %bb.0: ; %main_body 3039; GFX90A-NEXT: s_mov_b32 s0, s2 3040; GFX90A-NEXT: s_mov_b32 s1, s3 3041; GFX90A-NEXT: s_mov_b32 s2, s4 3042; GFX90A-NEXT: s_mov_b32 s3, s5 3043; GFX90A-NEXT: s_mov_b32 s4, s6 3044; GFX90A-NEXT: s_mov_b32 s5, s7 3045; GFX90A-NEXT: s_mov_b32 s6, s8 3046; GFX90A-NEXT: s_mov_b32 s7, s9 3047; GFX90A-NEXT: image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc da 3048; GFX90A-NEXT: s_waitcnt vmcnt(0) 3049; GFX90A-NEXT: ; return to shader part epilog 3050; 3051; GFX10-LABEL: atomic_add_i64_1darray: 3052; GFX10: ; %bb.0: ; %main_body 3053; GFX10-NEXT: s_mov_b32 s0, s2 3054; GFX10-NEXT: s_mov_b32 s1, s3 3055; GFX10-NEXT: s_mov_b32 s2, s4 3056; GFX10-NEXT: s_mov_b32 s3, s5 3057; GFX10-NEXT: s_mov_b32 s4, s6 3058; GFX10-NEXT: s_mov_b32 s5, s7 3059; GFX10-NEXT: s_mov_b32 s6, s8 3060; GFX10-NEXT: s_mov_b32 s7, s9 3061; GFX10-NEXT: image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D_ARRAY unorm glc 3062; GFX10-NEXT: s_waitcnt vmcnt(0) 3063; GFX10-NEXT: ; return to shader part epilog 3064main_body: 3065 %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) 3066 %out = bitcast i64 %v to <2 x float> 3067 ret <2 x float> %out 3068} 3069 3070define amdgpu_ps <2 x float> @atomic_add_i64_2darray(<8 x i32> inreg %rsrc, i64 %data, i32 %s, i32 %t, i32 %slice) { 3071; GFX6-LABEL: atomic_add_i64_2darray: 3072; GFX6: ; %bb.0: ; %main_body 3073; GFX6-NEXT: s_mov_b32 s0, s2 3074; GFX6-NEXT: s_mov_b32 s1, s3 3075; GFX6-NEXT: s_mov_b32 s2, s4 3076; GFX6-NEXT: s_mov_b32 s3, s5 3077; GFX6-NEXT: s_mov_b32 s4, s6 3078; GFX6-NEXT: s_mov_b32 s5, s7 3079; GFX6-NEXT: s_mov_b32 s6, s8 3080; GFX6-NEXT: s_mov_b32 s7, s9 3081; GFX6-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da 3082; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 3083; GFX6-NEXT: ; return to shader part epilog 3084; 3085; GFX8-LABEL: atomic_add_i64_2darray: 3086; GFX8: ; %bb.0: ; %main_body 3087; GFX8-NEXT: s_mov_b32 s0, s2 3088; GFX8-NEXT: s_mov_b32 s1, s3 3089; GFX8-NEXT: s_mov_b32 s2, s4 3090; GFX8-NEXT: s_mov_b32 s3, s5 3091; GFX8-NEXT: s_mov_b32 s4, s6 3092; GFX8-NEXT: s_mov_b32 s5, s7 3093; GFX8-NEXT: s_mov_b32 s6, s8 3094; GFX8-NEXT: s_mov_b32 s7, s9 3095; GFX8-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da 3096; GFX8-NEXT: s_waitcnt vmcnt(0) 3097; GFX8-NEXT: ; return to shader part epilog 3098; 3099; GFX900-LABEL: atomic_add_i64_2darray: 3100; GFX900: ; %bb.0: ; %main_body 3101; GFX900-NEXT: s_mov_b32 s0, s2 3102; GFX900-NEXT: s_mov_b32 s1, s3 3103; GFX900-NEXT: s_mov_b32 s2, s4 3104; GFX900-NEXT: s_mov_b32 s3, s5 3105; GFX900-NEXT: s_mov_b32 s4, s6 3106; GFX900-NEXT: s_mov_b32 s5, s7 3107; GFX900-NEXT: s_mov_b32 s6, s8 3108; GFX900-NEXT: s_mov_b32 s7, s9 3109; GFX900-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da 3110; GFX900-NEXT: s_waitcnt vmcnt(0) 3111; GFX900-NEXT: ; return to shader part epilog 3112; 3113; GFX90A-LABEL: atomic_add_i64_2darray: 3114; GFX90A: ; %bb.0: ; %main_body 3115; GFX90A-NEXT: s_mov_b32 s0, s2 3116; GFX90A-NEXT: s_mov_b32 s1, s3 3117; GFX90A-NEXT: s_mov_b32 s2, s4 3118; GFX90A-NEXT: s_mov_b32 s3, s5 3119; GFX90A-NEXT: s_mov_b32 s4, s6 3120; GFX90A-NEXT: s_mov_b32 s5, s7 3121; GFX90A-NEXT: s_mov_b32 s6, s8 3122; GFX90A-NEXT: s_mov_b32 s7, s9 3123; GFX90A-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc da 3124; GFX90A-NEXT: s_waitcnt vmcnt(0) 3125; GFX90A-NEXT: ; return to shader part epilog 3126; 3127; GFX10-LABEL: atomic_add_i64_2darray: 3128; GFX10: ; %bb.0: ; %main_body 3129; GFX10-NEXT: s_mov_b32 s0, s2 3130; GFX10-NEXT: s_mov_b32 s1, s3 3131; GFX10-NEXT: s_mov_b32 s2, s4 3132; GFX10-NEXT: s_mov_b32 s3, s5 3133; GFX10-NEXT: s_mov_b32 s4, s6 3134; GFX10-NEXT: s_mov_b32 s5, s7 3135; GFX10-NEXT: s_mov_b32 s6, s8 3136; GFX10-NEXT: s_mov_b32 s7, s9 3137; GFX10-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_ARRAY unorm glc 3138; GFX10-NEXT: s_waitcnt vmcnt(0) 3139; GFX10-NEXT: ; return to shader part epilog 3140main_body: 3141 %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) 3142 %out = bitcast i64 %v to <2 x float> 3143 ret <2 x float> %out 3144} 3145 3146define amdgpu_ps <2 x float> @atomic_add_i64_2dmsaa(<8 x i32> inreg %rsrc, i64 %data, i32 %s, i32 %t, i32 %fragid) { 3147; GFX6-LABEL: atomic_add_i64_2dmsaa: 3148; GFX6: ; %bb.0: ; %main_body 3149; GFX6-NEXT: s_mov_b32 s0, s2 3150; GFX6-NEXT: s_mov_b32 s1, s3 3151; GFX6-NEXT: s_mov_b32 s2, s4 3152; GFX6-NEXT: s_mov_b32 s3, s5 3153; GFX6-NEXT: s_mov_b32 s4, s6 3154; GFX6-NEXT: s_mov_b32 s5, s7 3155; GFX6-NEXT: s_mov_b32 s6, s8 3156; GFX6-NEXT: s_mov_b32 s7, s9 3157; GFX6-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc 3158; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 3159; GFX6-NEXT: ; return to shader part epilog 3160; 3161; GFX8-LABEL: atomic_add_i64_2dmsaa: 3162; GFX8: ; %bb.0: ; %main_body 3163; GFX8-NEXT: s_mov_b32 s0, s2 3164; GFX8-NEXT: s_mov_b32 s1, s3 3165; GFX8-NEXT: s_mov_b32 s2, s4 3166; GFX8-NEXT: s_mov_b32 s3, s5 3167; GFX8-NEXT: s_mov_b32 s4, s6 3168; GFX8-NEXT: s_mov_b32 s5, s7 3169; GFX8-NEXT: s_mov_b32 s6, s8 3170; GFX8-NEXT: s_mov_b32 s7, s9 3171; GFX8-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc 3172; GFX8-NEXT: s_waitcnt vmcnt(0) 3173; GFX8-NEXT: ; return to shader part epilog 3174; 3175; GFX900-LABEL: atomic_add_i64_2dmsaa: 3176; GFX900: ; %bb.0: ; %main_body 3177; GFX900-NEXT: s_mov_b32 s0, s2 3178; GFX900-NEXT: s_mov_b32 s1, s3 3179; GFX900-NEXT: s_mov_b32 s2, s4 3180; GFX900-NEXT: s_mov_b32 s3, s5 3181; GFX900-NEXT: s_mov_b32 s4, s6 3182; GFX900-NEXT: s_mov_b32 s5, s7 3183; GFX900-NEXT: s_mov_b32 s6, s8 3184; GFX900-NEXT: s_mov_b32 s7, s9 3185; GFX900-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc 3186; GFX900-NEXT: s_waitcnt vmcnt(0) 3187; GFX900-NEXT: ; return to shader part epilog 3188; 3189; GFX90A-LABEL: atomic_add_i64_2dmsaa: 3190; GFX90A: ; %bb.0: ; %main_body 3191; GFX90A-NEXT: s_mov_b32 s0, s2 3192; GFX90A-NEXT: s_mov_b32 s1, s3 3193; GFX90A-NEXT: s_mov_b32 s2, s4 3194; GFX90A-NEXT: s_mov_b32 s3, s5 3195; GFX90A-NEXT: s_mov_b32 s4, s6 3196; GFX90A-NEXT: s_mov_b32 s5, s7 3197; GFX90A-NEXT: s_mov_b32 s6, s8 3198; GFX90A-NEXT: s_mov_b32 s7, s9 3199; GFX90A-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 unorm glc 3200; GFX90A-NEXT: s_waitcnt vmcnt(0) 3201; GFX90A-NEXT: ; return to shader part epilog 3202; 3203; GFX10-LABEL: atomic_add_i64_2dmsaa: 3204; GFX10: ; %bb.0: ; %main_body 3205; GFX10-NEXT: s_mov_b32 s0, s2 3206; GFX10-NEXT: s_mov_b32 s1, s3 3207; GFX10-NEXT: s_mov_b32 s2, s4 3208; GFX10-NEXT: s_mov_b32 s3, s5 3209; GFX10-NEXT: s_mov_b32 s4, s6 3210; GFX10-NEXT: s_mov_b32 s5, s7 3211; GFX10-NEXT: s_mov_b32 s6, s8 3212; GFX10-NEXT: s_mov_b32 s7, s9 3213; GFX10-NEXT: image_atomic_add v[0:1], v[2:4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_MSAA unorm glc 3214; GFX10-NEXT: s_waitcnt vmcnt(0) 3215; GFX10-NEXT: ; return to shader part epilog 3216main_body: 3217 %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) 3218 %out = bitcast i64 %v to <2 x float> 3219 ret <2 x float> %out 3220} 3221 3222define amdgpu_ps <2 x float> @atomic_add_i64_2darraymsaa(<8 x i32> inreg %rsrc, i64 %data, i32 %s, i32 %t, i32 %slice, i32 %fragid) { 3223; GFX6-LABEL: atomic_add_i64_2darraymsaa: 3224; GFX6: ; %bb.0: ; %main_body 3225; GFX6-NEXT: s_mov_b32 s0, s2 3226; GFX6-NEXT: s_mov_b32 s1, s3 3227; GFX6-NEXT: s_mov_b32 s2, s4 3228; GFX6-NEXT: s_mov_b32 s3, s5 3229; GFX6-NEXT: s_mov_b32 s4, s6 3230; GFX6-NEXT: s_mov_b32 s5, s7 3231; GFX6-NEXT: s_mov_b32 s6, s8 3232; GFX6-NEXT: s_mov_b32 s7, s9 3233; GFX6-NEXT: image_atomic_add v[0:1], v[2:5], s[0:7] dmask:0x3 unorm glc da 3234; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 3235; GFX6-NEXT: ; return to shader part epilog 3236; 3237; GFX8-LABEL: atomic_add_i64_2darraymsaa: 3238; GFX8: ; %bb.0: ; %main_body 3239; GFX8-NEXT: s_mov_b32 s0, s2 3240; GFX8-NEXT: s_mov_b32 s1, s3 3241; GFX8-NEXT: s_mov_b32 s2, s4 3242; GFX8-NEXT: s_mov_b32 s3, s5 3243; GFX8-NEXT: s_mov_b32 s4, s6 3244; GFX8-NEXT: s_mov_b32 s5, s7 3245; GFX8-NEXT: s_mov_b32 s6, s8 3246; GFX8-NEXT: s_mov_b32 s7, s9 3247; GFX8-NEXT: image_atomic_add v[0:1], v[2:5], s[0:7] dmask:0x3 unorm glc da 3248; GFX8-NEXT: s_waitcnt vmcnt(0) 3249; GFX8-NEXT: ; return to shader part epilog 3250; 3251; GFX900-LABEL: atomic_add_i64_2darraymsaa: 3252; GFX900: ; %bb.0: ; %main_body 3253; GFX900-NEXT: s_mov_b32 s0, s2 3254; GFX900-NEXT: s_mov_b32 s1, s3 3255; GFX900-NEXT: s_mov_b32 s2, s4 3256; GFX900-NEXT: s_mov_b32 s3, s5 3257; GFX900-NEXT: s_mov_b32 s4, s6 3258; GFX900-NEXT: s_mov_b32 s5, s7 3259; GFX900-NEXT: s_mov_b32 s6, s8 3260; GFX900-NEXT: s_mov_b32 s7, s9 3261; GFX900-NEXT: image_atomic_add v[0:1], v[2:5], s[0:7] dmask:0x3 unorm glc da 3262; GFX900-NEXT: s_waitcnt vmcnt(0) 3263; GFX900-NEXT: ; return to shader part epilog 3264; 3265; GFX90A-LABEL: atomic_add_i64_2darraymsaa: 3266; GFX90A: ; %bb.0: ; %main_body 3267; GFX90A-NEXT: s_mov_b32 s0, s2 3268; GFX90A-NEXT: s_mov_b32 s1, s3 3269; GFX90A-NEXT: s_mov_b32 s2, s4 3270; GFX90A-NEXT: s_mov_b32 s3, s5 3271; GFX90A-NEXT: s_mov_b32 s4, s6 3272; GFX90A-NEXT: s_mov_b32 s5, s7 3273; GFX90A-NEXT: s_mov_b32 s6, s8 3274; GFX90A-NEXT: s_mov_b32 s7, s9 3275; GFX90A-NEXT: image_atomic_add v[0:1], v[2:5], s[0:7] dmask:0x3 unorm glc da 3276; GFX90A-NEXT: s_waitcnt vmcnt(0) 3277; GFX90A-NEXT: ; return to shader part epilog 3278; 3279; GFX10-LABEL: atomic_add_i64_2darraymsaa: 3280; GFX10: ; %bb.0: ; %main_body 3281; GFX10-NEXT: s_mov_b32 s0, s2 3282; GFX10-NEXT: s_mov_b32 s1, s3 3283; GFX10-NEXT: s_mov_b32 s2, s4 3284; GFX10-NEXT: s_mov_b32 s3, s5 3285; GFX10-NEXT: s_mov_b32 s4, s6 3286; GFX10-NEXT: s_mov_b32 s5, s7 3287; GFX10-NEXT: s_mov_b32 s6, s8 3288; GFX10-NEXT: s_mov_b32 s7, s9 3289; GFX10-NEXT: image_atomic_add v[0:1], v[2:5], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm glc 3290; GFX10-NEXT: s_waitcnt vmcnt(0) 3291; GFX10-NEXT: ; return to shader part epilog 3292main_body: 3293 %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) 3294 %out = bitcast i64 %v to <2 x float> 3295 ret <2 x float> %out 3296} 3297 3298define amdgpu_ps <2 x float> @atomic_add_i64_1d_slc(<8 x i32> inreg %rsrc, i64 %data, i32 %s) { 3299; GFX6-LABEL: atomic_add_i64_1d_slc: 3300; GFX6: ; %bb.0: ; %main_body 3301; GFX6-NEXT: s_mov_b32 s0, s2 3302; GFX6-NEXT: s_mov_b32 s1, s3 3303; GFX6-NEXT: s_mov_b32 s2, s4 3304; GFX6-NEXT: s_mov_b32 s3, s5 3305; GFX6-NEXT: s_mov_b32 s4, s6 3306; GFX6-NEXT: s_mov_b32 s5, s7 3307; GFX6-NEXT: s_mov_b32 s6, s8 3308; GFX6-NEXT: s_mov_b32 s7, s9 3309; GFX6-NEXT: image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc slc 3310; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) 3311; GFX6-NEXT: ; return to shader part epilog 3312; 3313; GFX8-LABEL: atomic_add_i64_1d_slc: 3314; GFX8: ; %bb.0: ; %main_body 3315; GFX8-NEXT: s_mov_b32 s0, s2 3316; GFX8-NEXT: s_mov_b32 s1, s3 3317; GFX8-NEXT: s_mov_b32 s2, s4 3318; GFX8-NEXT: s_mov_b32 s3, s5 3319; GFX8-NEXT: s_mov_b32 s4, s6 3320; GFX8-NEXT: s_mov_b32 s5, s7 3321; GFX8-NEXT: s_mov_b32 s6, s8 3322; GFX8-NEXT: s_mov_b32 s7, s9 3323; GFX8-NEXT: image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc slc 3324; GFX8-NEXT: s_waitcnt vmcnt(0) 3325; GFX8-NEXT: ; return to shader part epilog 3326; 3327; GFX900-LABEL: atomic_add_i64_1d_slc: 3328; GFX900: ; %bb.0: ; %main_body 3329; GFX900-NEXT: s_mov_b32 s0, s2 3330; GFX900-NEXT: s_mov_b32 s1, s3 3331; GFX900-NEXT: s_mov_b32 s2, s4 3332; GFX900-NEXT: s_mov_b32 s3, s5 3333; GFX900-NEXT: s_mov_b32 s4, s6 3334; GFX900-NEXT: s_mov_b32 s5, s7 3335; GFX900-NEXT: s_mov_b32 s6, s8 3336; GFX900-NEXT: s_mov_b32 s7, s9 3337; GFX900-NEXT: image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc slc 3338; GFX900-NEXT: s_waitcnt vmcnt(0) 3339; GFX900-NEXT: ; return to shader part epilog 3340; 3341; GFX90A-LABEL: atomic_add_i64_1d_slc: 3342; GFX90A: ; %bb.0: ; %main_body 3343; GFX90A-NEXT: s_mov_b32 s0, s2 3344; GFX90A-NEXT: s_mov_b32 s1, s3 3345; GFX90A-NEXT: s_mov_b32 s2, s4 3346; GFX90A-NEXT: s_mov_b32 s3, s5 3347; GFX90A-NEXT: s_mov_b32 s4, s6 3348; GFX90A-NEXT: s_mov_b32 s5, s7 3349; GFX90A-NEXT: s_mov_b32 s6, s8 3350; GFX90A-NEXT: s_mov_b32 s7, s9 3351; GFX90A-NEXT: image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc slc 3352; GFX90A-NEXT: s_waitcnt vmcnt(0) 3353; GFX90A-NEXT: ; return to shader part epilog 3354; 3355; GFX10-LABEL: atomic_add_i64_1d_slc: 3356; GFX10: ; %bb.0: ; %main_body 3357; GFX10-NEXT: s_mov_b32 s0, s2 3358; GFX10-NEXT: s_mov_b32 s1, s3 3359; GFX10-NEXT: s_mov_b32 s2, s4 3360; GFX10-NEXT: s_mov_b32 s3, s5 3361; GFX10-NEXT: s_mov_b32 s4, s6 3362; GFX10-NEXT: s_mov_b32 s5, s7 3363; GFX10-NEXT: s_mov_b32 s6, s8 3364; GFX10-NEXT: s_mov_b32 s7, s9 3365; GFX10-NEXT: image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc slc 3366; GFX10-NEXT: s_waitcnt vmcnt(0) 3367; GFX10-NEXT: ; return to shader part epilog 3368main_body: 3369 %v = call i64 @llvm.amdgcn.image.atomic.add.1d.i64.i32(i64 %data, i32 %s, <8 x i32> %rsrc, i32 0, i32 2) 3370 %out = bitcast i64 %v to <2 x float> 3371 ret <2 x float> %out 3372} 3373 3374declare i32 @llvm.amdgcn.image.atomic.swap.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3375declare i32 @llvm.amdgcn.image.atomic.add.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3376declare i32 @llvm.amdgcn.image.atomic.sub.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3377declare i32 @llvm.amdgcn.image.atomic.smin.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3378declare i32 @llvm.amdgcn.image.atomic.umin.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3379declare i32 @llvm.amdgcn.image.atomic.smax.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3380declare i32 @llvm.amdgcn.image.atomic.umax.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3381declare i32 @llvm.amdgcn.image.atomic.and.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3382declare i32 @llvm.amdgcn.image.atomic.or.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3383declare i32 @llvm.amdgcn.image.atomic.xor.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3384declare i32 @llvm.amdgcn.image.atomic.inc.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3385declare i32 @llvm.amdgcn.image.atomic.dec.1d.i32.i32(i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3386declare i32 @llvm.amdgcn.image.atomic.cmpswap.1d.i32.i32(i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3387declare i32 @llvm.amdgcn.image.atomic.add.2d.i32.i32(i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3388declare i32 @llvm.amdgcn.image.atomic.add.3d.i32.i32(i32, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3389declare i32 @llvm.amdgcn.image.atomic.add.cube.i32.i32(i32, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3390declare i32 @llvm.amdgcn.image.atomic.add.1darray.i32.i32(i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3391declare i32 @llvm.amdgcn.image.atomic.add.2darray.i32.i32(i32, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3392declare i32 @llvm.amdgcn.image.atomic.add.2dmsaa.i32.i32(i32, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3393declare i32 @llvm.amdgcn.image.atomic.add.2darraymsaa.i32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3394 3395declare i64 @llvm.amdgcn.image.atomic.swap.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3396declare i64 @llvm.amdgcn.image.atomic.add.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3397declare i64 @llvm.amdgcn.image.atomic.sub.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3398declare i64 @llvm.amdgcn.image.atomic.smin.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3399declare i64 @llvm.amdgcn.image.atomic.umin.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3400declare i64 @llvm.amdgcn.image.atomic.smax.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3401declare i64 @llvm.amdgcn.image.atomic.umax.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3402declare i64 @llvm.amdgcn.image.atomic.and.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3403declare i64 @llvm.amdgcn.image.atomic.or.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3404declare i64 @llvm.amdgcn.image.atomic.xor.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3405declare i64 @llvm.amdgcn.image.atomic.inc.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3406declare i64 @llvm.amdgcn.image.atomic.dec.1d.i64.i32(i64, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3407declare i64 @llvm.amdgcn.image.atomic.cmpswap.1d.i64.i32(i64, i64, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3408declare i64 @llvm.amdgcn.image.atomic.add.2d.i64.i32(i64, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3409declare i64 @llvm.amdgcn.image.atomic.add.3d.i64.i32(i64, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3410declare i64 @llvm.amdgcn.image.atomic.add.cube.i64.i32(i64, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3411declare i64 @llvm.amdgcn.image.atomic.add.1darray.i64.i32(i64, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3412declare i64 @llvm.amdgcn.image.atomic.add.2darray.i64.i32(i64, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3413declare i64 @llvm.amdgcn.image.atomic.add.2dmsaa.i64.i32(i64, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3414declare i64 @llvm.amdgcn.image.atomic.add.2darraymsaa.i64.i32(i64, i32, i32, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #0 3415 3416attributes #0 = { nounwind } 3417