1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefixes=VERDE %s 3; RUN: llc -mtriple=amdgcn -mcpu=fiji -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefixes=FIJI %s 4; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX6789 %s 5; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -mattr=-enable-prt-strict-null -verify-machineinstrs < %s | FileCheck -check-prefixes=NOPRT %s 6; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10PLUS,GFX10 %s 7; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10PLUS,GFX11 %s 8; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -amdgpu-enable-delay-alu=0 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX12 %s 9 10define amdgpu_ps <4 x float> @load_1d(<8 x i32> inreg %rsrc, i32 %s) { 11; VERDE-LABEL: load_1d: 12; VERDE: ; %bb.0: ; %main_body 13; VERDE-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm 14; VERDE-NEXT: s_waitcnt vmcnt(0) 15; VERDE-NEXT: ; return to shader part epilog 16; 17; FIJI-LABEL: load_1d: 18; FIJI: ; %bb.0: ; %main_body 19; FIJI-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm 20; FIJI-NEXT: s_waitcnt vmcnt(0) 21; FIJI-NEXT: ; return to shader part epilog 22; 23; GFX6789-LABEL: load_1d: 24; GFX6789: ; %bb.0: ; %main_body 25; GFX6789-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm 26; GFX6789-NEXT: s_waitcnt vmcnt(0) 27; GFX6789-NEXT: ; return to shader part epilog 28; 29; NOPRT-LABEL: load_1d: 30; NOPRT: ; %bb.0: ; %main_body 31; NOPRT-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm 32; NOPRT-NEXT: s_waitcnt vmcnt(0) 33; NOPRT-NEXT: ; return to shader part epilog 34; 35; GFX10PLUS-LABEL: load_1d: 36; GFX10PLUS: ; %bb.0: ; %main_body 37; GFX10PLUS-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 38; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 39; GFX10PLUS-NEXT: ; return to shader part epilog 40; 41; GFX12-LABEL: load_1d: 42; GFX12: ; %bb.0: ; %main_body 43; GFX12-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D 44; GFX12-NEXT: s_wait_loadcnt 0x0 45; GFX12-NEXT: ; return to shader part epilog 46main_body: 47 %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 48 ret <4 x float> %v 49} 50 51define amdgpu_ps <4 x float> @load_1d_tfe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s) { 52; VERDE-LABEL: load_1d_tfe: 53; VERDE: ; %bb.0: ; %main_body 54; VERDE-NEXT: v_mov_b32_e32 v5, v0 55; VERDE-NEXT: v_mov_b32_e32 v0, 0 56; VERDE-NEXT: v_mov_b32_e32 v1, v0 57; VERDE-NEXT: v_mov_b32_e32 v2, v0 58; VERDE-NEXT: v_mov_b32_e32 v3, v0 59; VERDE-NEXT: v_mov_b32_e32 v4, v0 60; VERDE-NEXT: image_load v[0:4], v5, s[0:7] dmask:0xf unorm tfe 61; VERDE-NEXT: s_mov_b32 s11, 0xf000 62; VERDE-NEXT: s_mov_b32 s10, -1 63; VERDE-NEXT: s_waitcnt vmcnt(0) 64; VERDE-NEXT: buffer_store_dword v4, off, s[8:11], 0 65; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 66; VERDE-NEXT: ; return to shader part epilog 67; 68; FIJI-LABEL: load_1d_tfe: 69; FIJI: ; %bb.0: ; %main_body 70; FIJI-NEXT: v_mov_b32_e32 v5, v0 71; FIJI-NEXT: v_mov_b32_e32 v0, 0 72; FIJI-NEXT: v_mov_b32_e32 v1, v0 73; FIJI-NEXT: v_mov_b32_e32 v2, v0 74; FIJI-NEXT: v_mov_b32_e32 v3, v0 75; FIJI-NEXT: v_mov_b32_e32 v4, v0 76; FIJI-NEXT: image_load v[0:4], v5, s[0:7] dmask:0xf unorm tfe 77; FIJI-NEXT: s_mov_b32 s11, 0xf000 78; FIJI-NEXT: s_mov_b32 s10, -1 79; FIJI-NEXT: s_waitcnt vmcnt(0) 80; FIJI-NEXT: buffer_store_dword v4, off, s[8:11], 0 81; FIJI-NEXT: s_waitcnt vmcnt(0) 82; FIJI-NEXT: ; return to shader part epilog 83; 84; GFX6789-LABEL: load_1d_tfe: 85; GFX6789: ; %bb.0: ; %main_body 86; GFX6789-NEXT: v_mov_b32_e32 v6, 0 87; GFX6789-NEXT: v_mov_b32_e32 v5, v0 88; GFX6789-NEXT: v_mov_b32_e32 v7, v6 89; GFX6789-NEXT: v_mov_b32_e32 v8, v6 90; GFX6789-NEXT: v_mov_b32_e32 v9, v6 91; GFX6789-NEXT: v_mov_b32_e32 v10, v6 92; GFX6789-NEXT: v_mov_b32_e32 v0, v6 93; GFX6789-NEXT: v_mov_b32_e32 v1, v7 94; GFX6789-NEXT: v_mov_b32_e32 v2, v8 95; GFX6789-NEXT: v_mov_b32_e32 v3, v9 96; GFX6789-NEXT: v_mov_b32_e32 v4, v10 97; GFX6789-NEXT: image_load v[0:4], v5, s[0:7] dmask:0xf unorm tfe 98; GFX6789-NEXT: s_waitcnt vmcnt(0) 99; GFX6789-NEXT: global_store_dword v6, v4, s[8:9] 100; GFX6789-NEXT: s_waitcnt vmcnt(0) 101; GFX6789-NEXT: ; return to shader part epilog 102; 103; NOPRT-LABEL: load_1d_tfe: 104; NOPRT: ; %bb.0: ; %main_body 105; NOPRT-NEXT: v_mov_b32_e32 v4, 0 106; NOPRT-NEXT: image_load v[0:4], v0, s[0:7] dmask:0xf unorm tfe 107; NOPRT-NEXT: v_mov_b32_e32 v5, 0 108; NOPRT-NEXT: s_waitcnt vmcnt(0) 109; NOPRT-NEXT: global_store_dword v5, v4, s[8:9] 110; NOPRT-NEXT: s_waitcnt vmcnt(0) 111; NOPRT-NEXT: ; return to shader part epilog 112; 113; GFX10-LABEL: load_1d_tfe: 114; GFX10: ; %bb.0: ; %main_body 115; GFX10-NEXT: v_mov_b32_e32 v6, 0 116; GFX10-NEXT: v_mov_b32_e32 v5, v0 117; GFX10-NEXT: v_mov_b32_e32 v7, v6 118; GFX10-NEXT: v_mov_b32_e32 v8, v6 119; GFX10-NEXT: v_mov_b32_e32 v9, v6 120; GFX10-NEXT: v_mov_b32_e32 v10, v6 121; GFX10-NEXT: v_mov_b32_e32 v0, v6 122; GFX10-NEXT: v_mov_b32_e32 v1, v7 123; GFX10-NEXT: v_mov_b32_e32 v2, v8 124; GFX10-NEXT: v_mov_b32_e32 v3, v9 125; GFX10-NEXT: v_mov_b32_e32 v4, v10 126; GFX10-NEXT: image_load v[0:4], v5, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm tfe 127; GFX10-NEXT: s_waitcnt vmcnt(0) 128; GFX10-NEXT: global_store_dword v6, v4, s[8:9] 129; GFX10-NEXT: ; return to shader part epilog 130; 131; GFX11-LABEL: load_1d_tfe: 132; GFX11: ; %bb.0: ; %main_body 133; GFX11-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v6, 0 134; GFX11-NEXT: v_mov_b32_e32 v7, v6 135; GFX11-NEXT: v_mov_b32_e32 v8, v6 136; GFX11-NEXT: v_mov_b32_e32 v9, v6 137; GFX11-NEXT: v_mov_b32_e32 v10, v6 138; GFX11-NEXT: v_dual_mov_b32 v0, v6 :: v_dual_mov_b32 v1, v7 139; GFX11-NEXT: v_dual_mov_b32 v2, v8 :: v_dual_mov_b32 v3, v9 140; GFX11-NEXT: v_mov_b32_e32 v4, v10 141; GFX11-NEXT: image_load v[0:4], v5, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm tfe 142; GFX11-NEXT: s_waitcnt vmcnt(0) 143; GFX11-NEXT: global_store_b32 v6, v4, s[8:9] 144; GFX11-NEXT: ; return to shader part epilog 145; 146; GFX12-LABEL: load_1d_tfe: 147; GFX12: ; %bb.0: ; %main_body 148; GFX12-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v6, 0 149; GFX12-NEXT: v_dual_mov_b32 v7, v6 :: v_dual_mov_b32 v8, v6 150; GFX12-NEXT: v_dual_mov_b32 v9, v6 :: v_dual_mov_b32 v10, v6 151; GFX12-NEXT: v_dual_mov_b32 v0, v6 :: v_dual_mov_b32 v1, v7 152; GFX12-NEXT: v_dual_mov_b32 v2, v8 :: v_dual_mov_b32 v3, v9 153; GFX12-NEXT: v_mov_b32_e32 v4, v10 154; GFX12-NEXT: image_load v[0:4], v5, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D tfe 155; GFX12-NEXT: s_wait_loadcnt 0x0 156; GFX12-NEXT: global_store_b32 v6, v4, s[8:9] 157; GFX12-NEXT: ; return to shader part epilog 158main_body: 159 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 1, i32 0) 160 %v.vec = extractvalue {<4 x float>, i32} %v, 0 161 %v.err = extractvalue {<4 x float>, i32} %v, 1 162 store i32 %v.err, ptr addrspace(1) %out, align 4 163 ret <4 x float> %v.vec 164} 165 166define amdgpu_ps <4 x float> @load_1d_lwe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s) { 167; VERDE-LABEL: load_1d_lwe: 168; VERDE: ; %bb.0: ; %main_body 169; VERDE-NEXT: v_mov_b32_e32 v5, v0 170; VERDE-NEXT: v_mov_b32_e32 v0, 0 171; VERDE-NEXT: v_mov_b32_e32 v1, v0 172; VERDE-NEXT: v_mov_b32_e32 v2, v0 173; VERDE-NEXT: v_mov_b32_e32 v3, v0 174; VERDE-NEXT: v_mov_b32_e32 v4, v0 175; VERDE-NEXT: image_load v[0:4], v5, s[0:7] dmask:0xf unorm lwe 176; VERDE-NEXT: s_mov_b32 s11, 0xf000 177; VERDE-NEXT: s_mov_b32 s10, -1 178; VERDE-NEXT: s_waitcnt vmcnt(0) 179; VERDE-NEXT: buffer_store_dword v4, off, s[8:11], 0 180; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 181; VERDE-NEXT: ; return to shader part epilog 182; 183; FIJI-LABEL: load_1d_lwe: 184; FIJI: ; %bb.0: ; %main_body 185; FIJI-NEXT: v_mov_b32_e32 v5, v0 186; FIJI-NEXT: v_mov_b32_e32 v0, 0 187; FIJI-NEXT: v_mov_b32_e32 v1, v0 188; FIJI-NEXT: v_mov_b32_e32 v2, v0 189; FIJI-NEXT: v_mov_b32_e32 v3, v0 190; FIJI-NEXT: v_mov_b32_e32 v4, v0 191; FIJI-NEXT: image_load v[0:4], v5, s[0:7] dmask:0xf unorm lwe 192; FIJI-NEXT: s_mov_b32 s11, 0xf000 193; FIJI-NEXT: s_mov_b32 s10, -1 194; FIJI-NEXT: s_waitcnt vmcnt(0) 195; FIJI-NEXT: buffer_store_dword v4, off, s[8:11], 0 196; FIJI-NEXT: s_waitcnt vmcnt(0) 197; FIJI-NEXT: ; return to shader part epilog 198; 199; GFX6789-LABEL: load_1d_lwe: 200; GFX6789: ; %bb.0: ; %main_body 201; GFX6789-NEXT: v_mov_b32_e32 v6, 0 202; GFX6789-NEXT: v_mov_b32_e32 v5, v0 203; GFX6789-NEXT: v_mov_b32_e32 v7, v6 204; GFX6789-NEXT: v_mov_b32_e32 v8, v6 205; GFX6789-NEXT: v_mov_b32_e32 v9, v6 206; GFX6789-NEXT: v_mov_b32_e32 v10, v6 207; GFX6789-NEXT: v_mov_b32_e32 v0, v6 208; GFX6789-NEXT: v_mov_b32_e32 v1, v7 209; GFX6789-NEXT: v_mov_b32_e32 v2, v8 210; GFX6789-NEXT: v_mov_b32_e32 v3, v9 211; GFX6789-NEXT: v_mov_b32_e32 v4, v10 212; GFX6789-NEXT: image_load v[0:4], v5, s[0:7] dmask:0xf unorm lwe 213; GFX6789-NEXT: s_waitcnt vmcnt(0) 214; GFX6789-NEXT: global_store_dword v6, v4, s[8:9] 215; GFX6789-NEXT: s_waitcnt vmcnt(0) 216; GFX6789-NEXT: ; return to shader part epilog 217; 218; NOPRT-LABEL: load_1d_lwe: 219; NOPRT: ; %bb.0: ; %main_body 220; NOPRT-NEXT: v_mov_b32_e32 v4, 0 221; NOPRT-NEXT: image_load v[0:4], v0, s[0:7] dmask:0xf unorm lwe 222; NOPRT-NEXT: v_mov_b32_e32 v5, 0 223; NOPRT-NEXT: s_waitcnt vmcnt(0) 224; NOPRT-NEXT: global_store_dword v5, v4, s[8:9] 225; NOPRT-NEXT: s_waitcnt vmcnt(0) 226; NOPRT-NEXT: ; return to shader part epilog 227; 228; GFX10-LABEL: load_1d_lwe: 229; GFX10: ; %bb.0: ; %main_body 230; GFX10-NEXT: v_mov_b32_e32 v6, 0 231; GFX10-NEXT: v_mov_b32_e32 v5, v0 232; GFX10-NEXT: v_mov_b32_e32 v7, v6 233; GFX10-NEXT: v_mov_b32_e32 v8, v6 234; GFX10-NEXT: v_mov_b32_e32 v9, v6 235; GFX10-NEXT: v_mov_b32_e32 v10, v6 236; GFX10-NEXT: v_mov_b32_e32 v0, v6 237; GFX10-NEXT: v_mov_b32_e32 v1, v7 238; GFX10-NEXT: v_mov_b32_e32 v2, v8 239; GFX10-NEXT: v_mov_b32_e32 v3, v9 240; GFX10-NEXT: v_mov_b32_e32 v4, v10 241; GFX10-NEXT: image_load v[0:4], v5, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm lwe 242; GFX10-NEXT: s_waitcnt vmcnt(0) 243; GFX10-NEXT: global_store_dword v6, v4, s[8:9] 244; GFX10-NEXT: ; return to shader part epilog 245; 246; GFX11-LABEL: load_1d_lwe: 247; GFX11: ; %bb.0: ; %main_body 248; GFX11-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v6, 0 249; GFX11-NEXT: v_mov_b32_e32 v7, v6 250; GFX11-NEXT: v_mov_b32_e32 v8, v6 251; GFX11-NEXT: v_mov_b32_e32 v9, v6 252; GFX11-NEXT: v_mov_b32_e32 v10, v6 253; GFX11-NEXT: v_dual_mov_b32 v0, v6 :: v_dual_mov_b32 v1, v7 254; GFX11-NEXT: v_dual_mov_b32 v2, v8 :: v_dual_mov_b32 v3, v9 255; GFX11-NEXT: v_mov_b32_e32 v4, v10 256; GFX11-NEXT: image_load v[0:4], v5, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm lwe 257; GFX11-NEXT: s_waitcnt vmcnt(0) 258; GFX11-NEXT: global_store_b32 v6, v4, s[8:9] 259; GFX11-NEXT: ; return to shader part epilog 260; 261; GFX12-LABEL: load_1d_lwe: 262; GFX12: ; %bb.0: ; %main_body 263; GFX12-NEXT: image_load v[0:4], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D 264; GFX12-NEXT: v_mov_b32_e32 v5, 0 265; GFX12-NEXT: s_wait_loadcnt 0x0 266; GFX12-NEXT: global_store_b32 v5, v4, s[8:9] 267; GFX12-NEXT: ; return to shader part epilog 268main_body: 269 %v = call {<4 x float>, i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 2, i32 0) 270 %v.vec = extractvalue {<4 x float>, i32} %v, 0 271 %v.err = extractvalue {<4 x float>, i32} %v, 1 272 store i32 %v.err, ptr addrspace(1) %out, align 4 273 ret <4 x float> %v.vec 274} 275 276define amdgpu_ps <4 x float> @load_2d(<8 x i32> inreg %rsrc, i32 %s, i32 %t) { 277; VERDE-LABEL: load_2d: 278; VERDE: ; %bb.0: ; %main_body 279; VERDE-NEXT: image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm 280; VERDE-NEXT: s_waitcnt vmcnt(0) 281; VERDE-NEXT: ; return to shader part epilog 282; 283; FIJI-LABEL: load_2d: 284; FIJI: ; %bb.0: ; %main_body 285; FIJI-NEXT: image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm 286; FIJI-NEXT: s_waitcnt vmcnt(0) 287; FIJI-NEXT: ; return to shader part epilog 288; 289; GFX6789-LABEL: load_2d: 290; GFX6789: ; %bb.0: ; %main_body 291; GFX6789-NEXT: image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm 292; GFX6789-NEXT: s_waitcnt vmcnt(0) 293; GFX6789-NEXT: ; return to shader part epilog 294; 295; NOPRT-LABEL: load_2d: 296; NOPRT: ; %bb.0: ; %main_body 297; NOPRT-NEXT: image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm 298; NOPRT-NEXT: s_waitcnt vmcnt(0) 299; NOPRT-NEXT: ; return to shader part epilog 300; 301; GFX10PLUS-LABEL: load_2d: 302; GFX10PLUS: ; %bb.0: ; %main_body 303; GFX10PLUS-NEXT: image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm 304; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 305; GFX10PLUS-NEXT: ; return to shader part epilog 306; 307; GFX12-LABEL: load_2d: 308; GFX12: ; %bb.0: ; %main_body 309; GFX12-NEXT: image_load v[0:3], [v0, v1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D 310; GFX12-NEXT: s_wait_loadcnt 0x0 311; GFX12-NEXT: ; return to shader part epilog 312main_body: 313 %v = call <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i32(i32 15, i32 %s, i32 %t, <8 x i32> %rsrc, i32 0, i32 0) 314 ret <4 x float> %v 315} 316 317define amdgpu_ps <4 x float> @load_2d_tfe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t) { 318; VERDE-LABEL: load_2d_tfe: 319; VERDE: ; %bb.0: ; %main_body 320; VERDE-NEXT: v_mov_b32_e32 v5, v0 321; VERDE-NEXT: v_mov_b32_e32 v0, 0 322; VERDE-NEXT: v_mov_b32_e32 v6, v1 323; VERDE-NEXT: v_mov_b32_e32 v1, v0 324; VERDE-NEXT: v_mov_b32_e32 v2, v0 325; VERDE-NEXT: v_mov_b32_e32 v3, v0 326; VERDE-NEXT: v_mov_b32_e32 v4, v0 327; VERDE-NEXT: image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe 328; VERDE-NEXT: s_mov_b32 s11, 0xf000 329; VERDE-NEXT: s_mov_b32 s10, -1 330; VERDE-NEXT: s_waitcnt vmcnt(0) 331; VERDE-NEXT: buffer_store_dword v4, off, s[8:11], 0 332; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 333; VERDE-NEXT: ; return to shader part epilog 334; 335; FIJI-LABEL: load_2d_tfe: 336; FIJI: ; %bb.0: ; %main_body 337; FIJI-NEXT: v_mov_b32_e32 v5, v0 338; FIJI-NEXT: v_mov_b32_e32 v0, 0 339; FIJI-NEXT: v_mov_b32_e32 v6, v1 340; FIJI-NEXT: v_mov_b32_e32 v1, v0 341; FIJI-NEXT: v_mov_b32_e32 v2, v0 342; FIJI-NEXT: v_mov_b32_e32 v3, v0 343; FIJI-NEXT: v_mov_b32_e32 v4, v0 344; FIJI-NEXT: image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe 345; FIJI-NEXT: s_mov_b32 s11, 0xf000 346; FIJI-NEXT: s_mov_b32 s10, -1 347; FIJI-NEXT: s_waitcnt vmcnt(0) 348; FIJI-NEXT: buffer_store_dword v4, off, s[8:11], 0 349; FIJI-NEXT: s_waitcnt vmcnt(0) 350; FIJI-NEXT: ; return to shader part epilog 351; 352; GFX6789-LABEL: load_2d_tfe: 353; GFX6789: ; %bb.0: ; %main_body 354; GFX6789-NEXT: v_mov_b32_e32 v7, 0 355; GFX6789-NEXT: v_mov_b32_e32 v6, v1 356; GFX6789-NEXT: v_mov_b32_e32 v5, v0 357; GFX6789-NEXT: v_mov_b32_e32 v8, v7 358; GFX6789-NEXT: v_mov_b32_e32 v9, v7 359; GFX6789-NEXT: v_mov_b32_e32 v10, v7 360; GFX6789-NEXT: v_mov_b32_e32 v11, v7 361; GFX6789-NEXT: v_mov_b32_e32 v0, v7 362; GFX6789-NEXT: v_mov_b32_e32 v1, v8 363; GFX6789-NEXT: v_mov_b32_e32 v2, v9 364; GFX6789-NEXT: v_mov_b32_e32 v3, v10 365; GFX6789-NEXT: v_mov_b32_e32 v4, v11 366; GFX6789-NEXT: image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe 367; GFX6789-NEXT: s_waitcnt vmcnt(0) 368; GFX6789-NEXT: global_store_dword v7, v4, s[8:9] 369; GFX6789-NEXT: s_waitcnt vmcnt(0) 370; GFX6789-NEXT: ; return to shader part epilog 371; 372; NOPRT-LABEL: load_2d_tfe: 373; NOPRT: ; %bb.0: ; %main_body 374; NOPRT-NEXT: v_mov_b32_e32 v4, 0 375; NOPRT-NEXT: image_load v[0:4], v[0:1], s[0:7] dmask:0xf unorm tfe 376; NOPRT-NEXT: v_mov_b32_e32 v5, 0 377; NOPRT-NEXT: s_waitcnt vmcnt(0) 378; NOPRT-NEXT: global_store_dword v5, v4, s[8:9] 379; NOPRT-NEXT: s_waitcnt vmcnt(0) 380; NOPRT-NEXT: ; return to shader part epilog 381; 382; GFX10-LABEL: load_2d_tfe: 383; GFX10: ; %bb.0: ; %main_body 384; GFX10-NEXT: v_mov_b32_e32 v7, 0 385; GFX10-NEXT: v_mov_b32_e32 v6, v1 386; GFX10-NEXT: v_mov_b32_e32 v5, v0 387; GFX10-NEXT: v_mov_b32_e32 v8, v7 388; GFX10-NEXT: v_mov_b32_e32 v9, v7 389; GFX10-NEXT: v_mov_b32_e32 v10, v7 390; GFX10-NEXT: v_mov_b32_e32 v11, v7 391; GFX10-NEXT: v_mov_b32_e32 v0, v7 392; GFX10-NEXT: v_mov_b32_e32 v1, v8 393; GFX10-NEXT: v_mov_b32_e32 v2, v9 394; GFX10-NEXT: v_mov_b32_e32 v3, v10 395; GFX10-NEXT: v_mov_b32_e32 v4, v11 396; GFX10-NEXT: image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm tfe 397; GFX10-NEXT: s_waitcnt vmcnt(0) 398; GFX10-NEXT: global_store_dword v7, v4, s[8:9] 399; GFX10-NEXT: ; return to shader part epilog 400; 401; GFX11-LABEL: load_2d_tfe: 402; GFX11: ; %bb.0: ; %main_body 403; GFX11-NEXT: v_dual_mov_b32 v7, 0 :: v_dual_mov_b32 v6, v1 404; GFX11-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, v7 405; GFX11-NEXT: v_mov_b32_e32 v9, v7 406; GFX11-NEXT: v_mov_b32_e32 v10, v7 407; GFX11-NEXT: v_mov_b32_e32 v11, v7 408; GFX11-NEXT: v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8 409; GFX11-NEXT: v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10 410; GFX11-NEXT: v_mov_b32_e32 v4, v11 411; GFX11-NEXT: image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm tfe 412; GFX11-NEXT: s_waitcnt vmcnt(0) 413; GFX11-NEXT: global_store_b32 v7, v4, s[8:9] 414; GFX11-NEXT: ; return to shader part epilog 415; 416; GFX12-LABEL: load_2d_tfe: 417; GFX12: ; %bb.0: ; %main_body 418; GFX12-NEXT: v_mov_b32_e32 v7, 0 419; GFX12-NEXT: v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v6, v0 420; GFX12-NEXT: v_dual_mov_b32 v8, v7 :: v_dual_mov_b32 v9, v7 421; GFX12-NEXT: v_dual_mov_b32 v10, v7 :: v_dual_mov_b32 v11, v7 422; GFX12-NEXT: v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8 423; GFX12-NEXT: v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10 424; GFX12-NEXT: v_mov_b32_e32 v4, v11 425; GFX12-NEXT: image_load v[0:4], [v6, v5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D tfe 426; GFX12-NEXT: s_wait_loadcnt 0x0 427; GFX12-NEXT: global_store_b32 v7, v4, s[8:9] 428; GFX12-NEXT: ; return to shader part epilog 429main_body: 430 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.2d.v4f32i32.i32(i32 15, i32 %s, i32 %t, <8 x i32> %rsrc, i32 1, i32 0) 431 %v.vec = extractvalue {<4 x float>, i32} %v, 0 432 %v.err = extractvalue {<4 x float>, i32} %v, 1 433 store i32 %v.err, ptr addrspace(1) %out, align 4 434 ret <4 x float> %v.vec 435} 436 437define amdgpu_ps <4 x float> @load_3d(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %r) { 438; VERDE-LABEL: load_3d: 439; VERDE: ; %bb.0: ; %main_body 440; VERDE-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm 441; VERDE-NEXT: s_waitcnt vmcnt(0) 442; VERDE-NEXT: ; return to shader part epilog 443; 444; FIJI-LABEL: load_3d: 445; FIJI: ; %bb.0: ; %main_body 446; FIJI-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm 447; FIJI-NEXT: s_waitcnt vmcnt(0) 448; FIJI-NEXT: ; return to shader part epilog 449; 450; GFX6789-LABEL: load_3d: 451; GFX6789: ; %bb.0: ; %main_body 452; GFX6789-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm 453; GFX6789-NEXT: s_waitcnt vmcnt(0) 454; GFX6789-NEXT: ; return to shader part epilog 455; 456; NOPRT-LABEL: load_3d: 457; NOPRT: ; %bb.0: ; %main_body 458; NOPRT-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm 459; NOPRT-NEXT: s_waitcnt vmcnt(0) 460; NOPRT-NEXT: ; return to shader part epilog 461; 462; GFX10PLUS-LABEL: load_3d: 463; GFX10PLUS: ; %bb.0: ; %main_body 464; GFX10PLUS-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm 465; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 466; GFX10PLUS-NEXT: ; return to shader part epilog 467; 468; GFX12-LABEL: load_3d: 469; GFX12: ; %bb.0: ; %main_body 470; GFX12-NEXT: image_load v[0:3], [v0, v1, v2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D 471; GFX12-NEXT: s_wait_loadcnt 0x0 472; GFX12-NEXT: ; return to shader part epilog 473main_body: 474 %v = call <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %r, <8 x i32> %rsrc, i32 0, i32 0) 475 ret <4 x float> %v 476} 477 478define amdgpu_ps <4 x float> @load_3d_tfe_lwe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t, i32 %r) { 479; VERDE-LABEL: load_3d_tfe_lwe: 480; VERDE: ; %bb.0: ; %main_body 481; VERDE-NEXT: v_mov_b32_e32 v5, v0 482; VERDE-NEXT: v_mov_b32_e32 v0, 0 483; VERDE-NEXT: v_mov_b32_e32 v7, v2 484; VERDE-NEXT: v_mov_b32_e32 v6, v1 485; VERDE-NEXT: v_mov_b32_e32 v1, v0 486; VERDE-NEXT: v_mov_b32_e32 v2, v0 487; VERDE-NEXT: v_mov_b32_e32 v3, v0 488; VERDE-NEXT: v_mov_b32_e32 v4, v0 489; VERDE-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe 490; VERDE-NEXT: s_mov_b32 s11, 0xf000 491; VERDE-NEXT: s_mov_b32 s10, -1 492; VERDE-NEXT: s_waitcnt vmcnt(0) 493; VERDE-NEXT: buffer_store_dword v4, off, s[8:11], 0 494; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 495; VERDE-NEXT: ; return to shader part epilog 496; 497; FIJI-LABEL: load_3d_tfe_lwe: 498; FIJI: ; %bb.0: ; %main_body 499; FIJI-NEXT: v_mov_b32_e32 v5, v0 500; FIJI-NEXT: v_mov_b32_e32 v0, 0 501; FIJI-NEXT: v_mov_b32_e32 v7, v2 502; FIJI-NEXT: v_mov_b32_e32 v6, v1 503; FIJI-NEXT: v_mov_b32_e32 v1, v0 504; FIJI-NEXT: v_mov_b32_e32 v2, v0 505; FIJI-NEXT: v_mov_b32_e32 v3, v0 506; FIJI-NEXT: v_mov_b32_e32 v4, v0 507; FIJI-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe 508; FIJI-NEXT: s_mov_b32 s11, 0xf000 509; FIJI-NEXT: s_mov_b32 s10, -1 510; FIJI-NEXT: s_waitcnt vmcnt(0) 511; FIJI-NEXT: buffer_store_dword v4, off, s[8:11], 0 512; FIJI-NEXT: s_waitcnt vmcnt(0) 513; FIJI-NEXT: ; return to shader part epilog 514; 515; GFX6789-LABEL: load_3d_tfe_lwe: 516; GFX6789: ; %bb.0: ; %main_body 517; GFX6789-NEXT: v_mov_b32_e32 v8, 0 518; GFX6789-NEXT: v_mov_b32_e32 v7, v2 519; GFX6789-NEXT: v_mov_b32_e32 v6, v1 520; GFX6789-NEXT: v_mov_b32_e32 v5, v0 521; GFX6789-NEXT: v_mov_b32_e32 v9, v8 522; GFX6789-NEXT: v_mov_b32_e32 v10, v8 523; GFX6789-NEXT: v_mov_b32_e32 v11, v8 524; GFX6789-NEXT: v_mov_b32_e32 v12, v8 525; GFX6789-NEXT: v_mov_b32_e32 v0, v8 526; GFX6789-NEXT: v_mov_b32_e32 v1, v9 527; GFX6789-NEXT: v_mov_b32_e32 v2, v10 528; GFX6789-NEXT: v_mov_b32_e32 v3, v11 529; GFX6789-NEXT: v_mov_b32_e32 v4, v12 530; GFX6789-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe 531; GFX6789-NEXT: s_waitcnt vmcnt(0) 532; GFX6789-NEXT: global_store_dword v8, v4, s[8:9] 533; GFX6789-NEXT: s_waitcnt vmcnt(0) 534; GFX6789-NEXT: ; return to shader part epilog 535; 536; NOPRT-LABEL: load_3d_tfe_lwe: 537; NOPRT: ; %bb.0: ; %main_body 538; NOPRT-NEXT: v_mov_b32_e32 v4, 0 539; NOPRT-NEXT: image_load v[0:4], v[0:2], s[0:7] dmask:0xf unorm tfe lwe 540; NOPRT-NEXT: v_mov_b32_e32 v5, 0 541; NOPRT-NEXT: s_waitcnt vmcnt(0) 542; NOPRT-NEXT: global_store_dword v5, v4, s[8:9] 543; NOPRT-NEXT: s_waitcnt vmcnt(0) 544; NOPRT-NEXT: ; return to shader part epilog 545; 546; GFX10-LABEL: load_3d_tfe_lwe: 547; GFX10: ; %bb.0: ; %main_body 548; GFX10-NEXT: v_mov_b32_e32 v8, 0 549; GFX10-NEXT: v_mov_b32_e32 v7, v2 550; GFX10-NEXT: v_mov_b32_e32 v6, v1 551; GFX10-NEXT: v_mov_b32_e32 v5, v0 552; GFX10-NEXT: v_mov_b32_e32 v9, v8 553; GFX10-NEXT: v_mov_b32_e32 v10, v8 554; GFX10-NEXT: v_mov_b32_e32 v11, v8 555; GFX10-NEXT: v_mov_b32_e32 v12, v8 556; GFX10-NEXT: v_mov_b32_e32 v0, v8 557; GFX10-NEXT: v_mov_b32_e32 v1, v9 558; GFX10-NEXT: v_mov_b32_e32 v2, v10 559; GFX10-NEXT: v_mov_b32_e32 v3, v11 560; GFX10-NEXT: v_mov_b32_e32 v4, v12 561; GFX10-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm tfe lwe 562; GFX10-NEXT: s_waitcnt vmcnt(0) 563; GFX10-NEXT: global_store_dword v8, v4, s[8:9] 564; GFX10-NEXT: ; return to shader part epilog 565; 566; GFX11-LABEL: load_3d_tfe_lwe: 567; GFX11: ; %bb.0: ; %main_body 568; GFX11-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, 0 569; GFX11-NEXT: v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v6, v1 570; GFX11-NEXT: v_mov_b32_e32 v9, v8 571; GFX11-NEXT: v_mov_b32_e32 v10, v8 572; GFX11-NEXT: v_mov_b32_e32 v11, v8 573; GFX11-NEXT: v_mov_b32_e32 v12, v8 574; GFX11-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9 575; GFX11-NEXT: v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11 576; GFX11-NEXT: v_mov_b32_e32 v4, v12 577; GFX11-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm tfe lwe 578; GFX11-NEXT: s_waitcnt vmcnt(0) 579; GFX11-NEXT: global_store_b32 v8, v4, s[8:9] 580; GFX11-NEXT: ; return to shader part epilog 581; 582; GFX12-LABEL: load_3d_tfe_lwe: 583; GFX12: ; %bb.0: ; %main_body 584; GFX12-NEXT: v_dual_mov_b32 v7, v0 :: v_dual_mov_b32 v8, 0 585; GFX12-NEXT: v_dual_mov_b32 v5, v2 :: v_dual_mov_b32 v6, v1 586; GFX12-NEXT: v_dual_mov_b32 v9, v8 :: v_dual_mov_b32 v10, v8 587; GFX12-NEXT: v_dual_mov_b32 v11, v8 :: v_dual_mov_b32 v12, v8 588; GFX12-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9 589; GFX12-NEXT: v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11 590; GFX12-NEXT: v_mov_b32_e32 v4, v12 591; GFX12-NEXT: image_load v[0:4], [v7, v6, v5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D tfe 592; GFX12-NEXT: s_wait_loadcnt 0x0 593; GFX12-NEXT: global_store_b32 v8, v4, s[8:9] 594; GFX12-NEXT: ; return to shader part epilog 595main_body: 596 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.3d.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %r, <8 x i32> %rsrc, i32 3, i32 0) 597 %v.vec = extractvalue {<4 x float>, i32} %v, 0 598 %v.err = extractvalue {<4 x float>, i32} %v, 1 599 store i32 %v.err, ptr addrspace(1) %out, align 4 600 ret <4 x float> %v.vec 601} 602 603define amdgpu_ps <4 x float> @load_cube(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice) { 604; VERDE-LABEL: load_cube: 605; VERDE: ; %bb.0: ; %main_body 606; VERDE-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da 607; VERDE-NEXT: s_waitcnt vmcnt(0) 608; VERDE-NEXT: ; return to shader part epilog 609; 610; FIJI-LABEL: load_cube: 611; FIJI: ; %bb.0: ; %main_body 612; FIJI-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da 613; FIJI-NEXT: s_waitcnt vmcnt(0) 614; FIJI-NEXT: ; return to shader part epilog 615; 616; GFX6789-LABEL: load_cube: 617; GFX6789: ; %bb.0: ; %main_body 618; GFX6789-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da 619; GFX6789-NEXT: s_waitcnt vmcnt(0) 620; GFX6789-NEXT: ; return to shader part epilog 621; 622; NOPRT-LABEL: load_cube: 623; NOPRT: ; %bb.0: ; %main_body 624; NOPRT-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da 625; NOPRT-NEXT: s_waitcnt vmcnt(0) 626; NOPRT-NEXT: ; return to shader part epilog 627; 628; GFX10PLUS-LABEL: load_cube: 629; GFX10PLUS: ; %bb.0: ; %main_body 630; GFX10PLUS-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm 631; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 632; GFX10PLUS-NEXT: ; return to shader part epilog 633; 634; GFX12-LABEL: load_cube: 635; GFX12: ; %bb.0: ; %main_body 636; GFX12-NEXT: image_load v[0:3], [v0, v1, v2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE 637; GFX12-NEXT: s_wait_loadcnt 0x0 638; GFX12-NEXT: ; return to shader part epilog 639main_body: 640 %v = call <4 x float> @llvm.amdgcn.image.load.cube.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0) 641 ret <4 x float> %v 642} 643 644define amdgpu_ps <4 x float> @load_cube_lwe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t, i32 %slice) { 645; VERDE-LABEL: load_cube_lwe: 646; VERDE: ; %bb.0: ; %main_body 647; VERDE-NEXT: v_mov_b32_e32 v5, v0 648; VERDE-NEXT: v_mov_b32_e32 v0, 0 649; VERDE-NEXT: v_mov_b32_e32 v7, v2 650; VERDE-NEXT: v_mov_b32_e32 v6, v1 651; VERDE-NEXT: v_mov_b32_e32 v1, v0 652; VERDE-NEXT: v_mov_b32_e32 v2, v0 653; VERDE-NEXT: v_mov_b32_e32 v3, v0 654; VERDE-NEXT: v_mov_b32_e32 v4, v0 655; VERDE-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da 656; VERDE-NEXT: s_mov_b32 s11, 0xf000 657; VERDE-NEXT: s_mov_b32 s10, -1 658; VERDE-NEXT: s_waitcnt vmcnt(0) 659; VERDE-NEXT: buffer_store_dword v4, off, s[8:11], 0 660; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 661; VERDE-NEXT: ; return to shader part epilog 662; 663; FIJI-LABEL: load_cube_lwe: 664; FIJI: ; %bb.0: ; %main_body 665; FIJI-NEXT: v_mov_b32_e32 v5, v0 666; FIJI-NEXT: v_mov_b32_e32 v0, 0 667; FIJI-NEXT: v_mov_b32_e32 v7, v2 668; FIJI-NEXT: v_mov_b32_e32 v6, v1 669; FIJI-NEXT: v_mov_b32_e32 v1, v0 670; FIJI-NEXT: v_mov_b32_e32 v2, v0 671; FIJI-NEXT: v_mov_b32_e32 v3, v0 672; FIJI-NEXT: v_mov_b32_e32 v4, v0 673; FIJI-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da 674; FIJI-NEXT: s_mov_b32 s11, 0xf000 675; FIJI-NEXT: s_mov_b32 s10, -1 676; FIJI-NEXT: s_waitcnt vmcnt(0) 677; FIJI-NEXT: buffer_store_dword v4, off, s[8:11], 0 678; FIJI-NEXT: s_waitcnt vmcnt(0) 679; FIJI-NEXT: ; return to shader part epilog 680; 681; GFX6789-LABEL: load_cube_lwe: 682; GFX6789: ; %bb.0: ; %main_body 683; GFX6789-NEXT: v_mov_b32_e32 v8, 0 684; GFX6789-NEXT: v_mov_b32_e32 v7, v2 685; GFX6789-NEXT: v_mov_b32_e32 v6, v1 686; GFX6789-NEXT: v_mov_b32_e32 v5, v0 687; GFX6789-NEXT: v_mov_b32_e32 v9, v8 688; GFX6789-NEXT: v_mov_b32_e32 v10, v8 689; GFX6789-NEXT: v_mov_b32_e32 v11, v8 690; GFX6789-NEXT: v_mov_b32_e32 v12, v8 691; GFX6789-NEXT: v_mov_b32_e32 v0, v8 692; GFX6789-NEXT: v_mov_b32_e32 v1, v9 693; GFX6789-NEXT: v_mov_b32_e32 v2, v10 694; GFX6789-NEXT: v_mov_b32_e32 v3, v11 695; GFX6789-NEXT: v_mov_b32_e32 v4, v12 696; GFX6789-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da 697; GFX6789-NEXT: s_waitcnt vmcnt(0) 698; GFX6789-NEXT: global_store_dword v8, v4, s[8:9] 699; GFX6789-NEXT: s_waitcnt vmcnt(0) 700; GFX6789-NEXT: ; return to shader part epilog 701; 702; NOPRT-LABEL: load_cube_lwe: 703; NOPRT: ; %bb.0: ; %main_body 704; NOPRT-NEXT: v_mov_b32_e32 v4, 0 705; NOPRT-NEXT: image_load v[0:4], v[0:2], s[0:7] dmask:0xf unorm lwe da 706; NOPRT-NEXT: v_mov_b32_e32 v5, 0 707; NOPRT-NEXT: s_waitcnt vmcnt(0) 708; NOPRT-NEXT: global_store_dword v5, v4, s[8:9] 709; NOPRT-NEXT: s_waitcnt vmcnt(0) 710; NOPRT-NEXT: ; return to shader part epilog 711; 712; GFX10-LABEL: load_cube_lwe: 713; GFX10: ; %bb.0: ; %main_body 714; GFX10-NEXT: v_mov_b32_e32 v8, 0 715; GFX10-NEXT: v_mov_b32_e32 v7, v2 716; GFX10-NEXT: v_mov_b32_e32 v6, v1 717; GFX10-NEXT: v_mov_b32_e32 v5, v0 718; GFX10-NEXT: v_mov_b32_e32 v9, v8 719; GFX10-NEXT: v_mov_b32_e32 v10, v8 720; GFX10-NEXT: v_mov_b32_e32 v11, v8 721; GFX10-NEXT: v_mov_b32_e32 v12, v8 722; GFX10-NEXT: v_mov_b32_e32 v0, v8 723; GFX10-NEXT: v_mov_b32_e32 v1, v9 724; GFX10-NEXT: v_mov_b32_e32 v2, v10 725; GFX10-NEXT: v_mov_b32_e32 v3, v11 726; GFX10-NEXT: v_mov_b32_e32 v4, v12 727; GFX10-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm lwe 728; GFX10-NEXT: s_waitcnt vmcnt(0) 729; GFX10-NEXT: global_store_dword v8, v4, s[8:9] 730; GFX10-NEXT: ; return to shader part epilog 731; 732; GFX11-LABEL: load_cube_lwe: 733; GFX11: ; %bb.0: ; %main_body 734; GFX11-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, 0 735; GFX11-NEXT: v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v6, v1 736; GFX11-NEXT: v_mov_b32_e32 v9, v8 737; GFX11-NEXT: v_mov_b32_e32 v10, v8 738; GFX11-NEXT: v_mov_b32_e32 v11, v8 739; GFX11-NEXT: v_mov_b32_e32 v12, v8 740; GFX11-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9 741; GFX11-NEXT: v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11 742; GFX11-NEXT: v_mov_b32_e32 v4, v12 743; GFX11-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm lwe 744; GFX11-NEXT: s_waitcnt vmcnt(0) 745; GFX11-NEXT: global_store_b32 v8, v4, s[8:9] 746; GFX11-NEXT: ; return to shader part epilog 747; 748; GFX12-LABEL: load_cube_lwe: 749; GFX12: ; %bb.0: ; %main_body 750; GFX12-NEXT: image_load v[0:4], [v0, v1, v2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE 751; GFX12-NEXT: v_mov_b32_e32 v5, 0 752; GFX12-NEXT: s_wait_loadcnt 0x0 753; GFX12-NEXT: global_store_b32 v5, v4, s[8:9] 754; GFX12-NEXT: ; return to shader part epilog 755main_body: 756 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.cube.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 2, i32 0) 757 %v.vec = extractvalue {<4 x float>, i32} %v, 0 758 %v.err = extractvalue {<4 x float>, i32} %v, 1 759 store i32 %v.err, ptr addrspace(1) %out, align 4 760 ret <4 x float> %v.vec 761} 762 763define amdgpu_ps <4 x float> @load_1darray(<8 x i32> inreg %rsrc, i32 %s, i32 %slice) { 764; VERDE-LABEL: load_1darray: 765; VERDE: ; %bb.0: ; %main_body 766; VERDE-NEXT: image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm da 767; VERDE-NEXT: s_waitcnt vmcnt(0) 768; VERDE-NEXT: ; return to shader part epilog 769; 770; FIJI-LABEL: load_1darray: 771; FIJI: ; %bb.0: ; %main_body 772; FIJI-NEXT: image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm da 773; FIJI-NEXT: s_waitcnt vmcnt(0) 774; FIJI-NEXT: ; return to shader part epilog 775; 776; GFX6789-LABEL: load_1darray: 777; GFX6789: ; %bb.0: ; %main_body 778; GFX6789-NEXT: image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm da 779; GFX6789-NEXT: s_waitcnt vmcnt(0) 780; GFX6789-NEXT: ; return to shader part epilog 781; 782; NOPRT-LABEL: load_1darray: 783; NOPRT: ; %bb.0: ; %main_body 784; NOPRT-NEXT: image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm da 785; NOPRT-NEXT: s_waitcnt vmcnt(0) 786; NOPRT-NEXT: ; return to shader part epilog 787; 788; GFX10PLUS-LABEL: load_1darray: 789; GFX10PLUS: ; %bb.0: ; %main_body 790; GFX10PLUS-NEXT: image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm 791; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 792; GFX10PLUS-NEXT: ; return to shader part epilog 793; 794; GFX12-LABEL: load_1darray: 795; GFX12: ; %bb.0: ; %main_body 796; GFX12-NEXT: image_load v[0:3], [v0, v1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY 797; GFX12-NEXT: s_wait_loadcnt 0x0 798; GFX12-NEXT: ; return to shader part epilog 799main_body: 800 %v = call <4 x float> @llvm.amdgcn.image.load.1darray.v4f32.i32(i32 15, i32 %s, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0) 801 ret <4 x float> %v 802} 803 804define amdgpu_ps <4 x float> @load_1darray_tfe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %slice) { 805; VERDE-LABEL: load_1darray_tfe: 806; VERDE: ; %bb.0: ; %main_body 807; VERDE-NEXT: v_mov_b32_e32 v5, v0 808; VERDE-NEXT: v_mov_b32_e32 v0, 0 809; VERDE-NEXT: v_mov_b32_e32 v6, v1 810; VERDE-NEXT: v_mov_b32_e32 v1, v0 811; VERDE-NEXT: v_mov_b32_e32 v2, v0 812; VERDE-NEXT: v_mov_b32_e32 v3, v0 813; VERDE-NEXT: v_mov_b32_e32 v4, v0 814; VERDE-NEXT: image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe da 815; VERDE-NEXT: s_mov_b32 s11, 0xf000 816; VERDE-NEXT: s_mov_b32 s10, -1 817; VERDE-NEXT: s_waitcnt vmcnt(0) 818; VERDE-NEXT: buffer_store_dword v4, off, s[8:11], 0 819; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 820; VERDE-NEXT: ; return to shader part epilog 821; 822; FIJI-LABEL: load_1darray_tfe: 823; FIJI: ; %bb.0: ; %main_body 824; FIJI-NEXT: v_mov_b32_e32 v5, v0 825; FIJI-NEXT: v_mov_b32_e32 v0, 0 826; FIJI-NEXT: v_mov_b32_e32 v6, v1 827; FIJI-NEXT: v_mov_b32_e32 v1, v0 828; FIJI-NEXT: v_mov_b32_e32 v2, v0 829; FIJI-NEXT: v_mov_b32_e32 v3, v0 830; FIJI-NEXT: v_mov_b32_e32 v4, v0 831; FIJI-NEXT: image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe da 832; FIJI-NEXT: s_mov_b32 s11, 0xf000 833; FIJI-NEXT: s_mov_b32 s10, -1 834; FIJI-NEXT: s_waitcnt vmcnt(0) 835; FIJI-NEXT: buffer_store_dword v4, off, s[8:11], 0 836; FIJI-NEXT: s_waitcnt vmcnt(0) 837; FIJI-NEXT: ; return to shader part epilog 838; 839; GFX6789-LABEL: load_1darray_tfe: 840; GFX6789: ; %bb.0: ; %main_body 841; GFX6789-NEXT: v_mov_b32_e32 v7, 0 842; GFX6789-NEXT: v_mov_b32_e32 v6, v1 843; GFX6789-NEXT: v_mov_b32_e32 v5, v0 844; GFX6789-NEXT: v_mov_b32_e32 v8, v7 845; GFX6789-NEXT: v_mov_b32_e32 v9, v7 846; GFX6789-NEXT: v_mov_b32_e32 v10, v7 847; GFX6789-NEXT: v_mov_b32_e32 v11, v7 848; GFX6789-NEXT: v_mov_b32_e32 v0, v7 849; GFX6789-NEXT: v_mov_b32_e32 v1, v8 850; GFX6789-NEXT: v_mov_b32_e32 v2, v9 851; GFX6789-NEXT: v_mov_b32_e32 v3, v10 852; GFX6789-NEXT: v_mov_b32_e32 v4, v11 853; GFX6789-NEXT: image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe da 854; GFX6789-NEXT: s_waitcnt vmcnt(0) 855; GFX6789-NEXT: global_store_dword v7, v4, s[8:9] 856; GFX6789-NEXT: s_waitcnt vmcnt(0) 857; GFX6789-NEXT: ; return to shader part epilog 858; 859; NOPRT-LABEL: load_1darray_tfe: 860; NOPRT: ; %bb.0: ; %main_body 861; NOPRT-NEXT: v_mov_b32_e32 v4, 0 862; NOPRT-NEXT: image_load v[0:4], v[0:1], s[0:7] dmask:0xf unorm tfe da 863; NOPRT-NEXT: v_mov_b32_e32 v5, 0 864; NOPRT-NEXT: s_waitcnt vmcnt(0) 865; NOPRT-NEXT: global_store_dword v5, v4, s[8:9] 866; NOPRT-NEXT: s_waitcnt vmcnt(0) 867; NOPRT-NEXT: ; return to shader part epilog 868; 869; GFX10-LABEL: load_1darray_tfe: 870; GFX10: ; %bb.0: ; %main_body 871; GFX10-NEXT: v_mov_b32_e32 v7, 0 872; GFX10-NEXT: v_mov_b32_e32 v6, v1 873; GFX10-NEXT: v_mov_b32_e32 v5, v0 874; GFX10-NEXT: v_mov_b32_e32 v8, v7 875; GFX10-NEXT: v_mov_b32_e32 v9, v7 876; GFX10-NEXT: v_mov_b32_e32 v10, v7 877; GFX10-NEXT: v_mov_b32_e32 v11, v7 878; GFX10-NEXT: v_mov_b32_e32 v0, v7 879; GFX10-NEXT: v_mov_b32_e32 v1, v8 880; GFX10-NEXT: v_mov_b32_e32 v2, v9 881; GFX10-NEXT: v_mov_b32_e32 v3, v10 882; GFX10-NEXT: v_mov_b32_e32 v4, v11 883; GFX10-NEXT: image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm tfe 884; GFX10-NEXT: s_waitcnt vmcnt(0) 885; GFX10-NEXT: global_store_dword v7, v4, s[8:9] 886; GFX10-NEXT: ; return to shader part epilog 887; 888; GFX11-LABEL: load_1darray_tfe: 889; GFX11: ; %bb.0: ; %main_body 890; GFX11-NEXT: v_dual_mov_b32 v7, 0 :: v_dual_mov_b32 v6, v1 891; GFX11-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, v7 892; GFX11-NEXT: v_mov_b32_e32 v9, v7 893; GFX11-NEXT: v_mov_b32_e32 v10, v7 894; GFX11-NEXT: v_mov_b32_e32 v11, v7 895; GFX11-NEXT: v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8 896; GFX11-NEXT: v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10 897; GFX11-NEXT: v_mov_b32_e32 v4, v11 898; GFX11-NEXT: image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm tfe 899; GFX11-NEXT: s_waitcnt vmcnt(0) 900; GFX11-NEXT: global_store_b32 v7, v4, s[8:9] 901; GFX11-NEXT: ; return to shader part epilog 902; 903; GFX12-LABEL: load_1darray_tfe: 904; GFX12: ; %bb.0: ; %main_body 905; GFX12-NEXT: v_mov_b32_e32 v7, 0 906; GFX12-NEXT: v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v6, v0 907; GFX12-NEXT: v_dual_mov_b32 v8, v7 :: v_dual_mov_b32 v9, v7 908; GFX12-NEXT: v_dual_mov_b32 v10, v7 :: v_dual_mov_b32 v11, v7 909; GFX12-NEXT: v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8 910; GFX12-NEXT: v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10 911; GFX12-NEXT: v_mov_b32_e32 v4, v11 912; GFX12-NEXT: image_load v[0:4], [v6, v5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY tfe 913; GFX12-NEXT: s_wait_loadcnt 0x0 914; GFX12-NEXT: global_store_b32 v7, v4, s[8:9] 915; GFX12-NEXT: ; return to shader part epilog 916main_body: 917 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1darray.v4f32i32.i32(i32 15, i32 %s, i32 %slice, <8 x i32> %rsrc, i32 1, i32 0) 918 %v.vec = extractvalue {<4 x float>, i32} %v, 0 919 %v.err = extractvalue {<4 x float>, i32} %v, 1 920 store i32 %v.err, ptr addrspace(1) %out, align 4 921 ret <4 x float> %v.vec 922} 923 924define amdgpu_ps <4 x float> @load_2darray(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice) { 925; VERDE-LABEL: load_2darray: 926; VERDE: ; %bb.0: ; %main_body 927; VERDE-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da 928; VERDE-NEXT: s_waitcnt vmcnt(0) 929; VERDE-NEXT: ; return to shader part epilog 930; 931; FIJI-LABEL: load_2darray: 932; FIJI: ; %bb.0: ; %main_body 933; FIJI-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da 934; FIJI-NEXT: s_waitcnt vmcnt(0) 935; FIJI-NEXT: ; return to shader part epilog 936; 937; GFX6789-LABEL: load_2darray: 938; GFX6789: ; %bb.0: ; %main_body 939; GFX6789-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da 940; GFX6789-NEXT: s_waitcnt vmcnt(0) 941; GFX6789-NEXT: ; return to shader part epilog 942; 943; NOPRT-LABEL: load_2darray: 944; NOPRT: ; %bb.0: ; %main_body 945; NOPRT-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da 946; NOPRT-NEXT: s_waitcnt vmcnt(0) 947; NOPRT-NEXT: ; return to shader part epilog 948; 949; GFX10PLUS-LABEL: load_2darray: 950; GFX10PLUS: ; %bb.0: ; %main_body 951; GFX10PLUS-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm 952; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 953; GFX10PLUS-NEXT: ; return to shader part epilog 954; 955; GFX12-LABEL: load_2darray: 956; GFX12: ; %bb.0: ; %main_body 957; GFX12-NEXT: image_load v[0:3], [v0, v1, v2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY 958; GFX12-NEXT: s_wait_loadcnt 0x0 959; GFX12-NEXT: ; return to shader part epilog 960main_body: 961 %v = call <4 x float> @llvm.amdgcn.image.load.2darray.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0) 962 ret <4 x float> %v 963} 964 965define amdgpu_ps <4 x float> @load_2darray_lwe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t, i32 %slice) { 966; VERDE-LABEL: load_2darray_lwe: 967; VERDE: ; %bb.0: ; %main_body 968; VERDE-NEXT: v_mov_b32_e32 v5, v0 969; VERDE-NEXT: v_mov_b32_e32 v0, 0 970; VERDE-NEXT: v_mov_b32_e32 v7, v2 971; VERDE-NEXT: v_mov_b32_e32 v6, v1 972; VERDE-NEXT: v_mov_b32_e32 v1, v0 973; VERDE-NEXT: v_mov_b32_e32 v2, v0 974; VERDE-NEXT: v_mov_b32_e32 v3, v0 975; VERDE-NEXT: v_mov_b32_e32 v4, v0 976; VERDE-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da 977; VERDE-NEXT: s_mov_b32 s11, 0xf000 978; VERDE-NEXT: s_mov_b32 s10, -1 979; VERDE-NEXT: s_waitcnt vmcnt(0) 980; VERDE-NEXT: buffer_store_dword v4, off, s[8:11], 0 981; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 982; VERDE-NEXT: ; return to shader part epilog 983; 984; FIJI-LABEL: load_2darray_lwe: 985; FIJI: ; %bb.0: ; %main_body 986; FIJI-NEXT: v_mov_b32_e32 v5, v0 987; FIJI-NEXT: v_mov_b32_e32 v0, 0 988; FIJI-NEXT: v_mov_b32_e32 v7, v2 989; FIJI-NEXT: v_mov_b32_e32 v6, v1 990; FIJI-NEXT: v_mov_b32_e32 v1, v0 991; FIJI-NEXT: v_mov_b32_e32 v2, v0 992; FIJI-NEXT: v_mov_b32_e32 v3, v0 993; FIJI-NEXT: v_mov_b32_e32 v4, v0 994; FIJI-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da 995; FIJI-NEXT: s_mov_b32 s11, 0xf000 996; FIJI-NEXT: s_mov_b32 s10, -1 997; FIJI-NEXT: s_waitcnt vmcnt(0) 998; FIJI-NEXT: buffer_store_dword v4, off, s[8:11], 0 999; FIJI-NEXT: s_waitcnt vmcnt(0) 1000; FIJI-NEXT: ; return to shader part epilog 1001; 1002; GFX6789-LABEL: load_2darray_lwe: 1003; GFX6789: ; %bb.0: ; %main_body 1004; GFX6789-NEXT: v_mov_b32_e32 v8, 0 1005; GFX6789-NEXT: v_mov_b32_e32 v7, v2 1006; GFX6789-NEXT: v_mov_b32_e32 v6, v1 1007; GFX6789-NEXT: v_mov_b32_e32 v5, v0 1008; GFX6789-NEXT: v_mov_b32_e32 v9, v8 1009; GFX6789-NEXT: v_mov_b32_e32 v10, v8 1010; GFX6789-NEXT: v_mov_b32_e32 v11, v8 1011; GFX6789-NEXT: v_mov_b32_e32 v12, v8 1012; GFX6789-NEXT: v_mov_b32_e32 v0, v8 1013; GFX6789-NEXT: v_mov_b32_e32 v1, v9 1014; GFX6789-NEXT: v_mov_b32_e32 v2, v10 1015; GFX6789-NEXT: v_mov_b32_e32 v3, v11 1016; GFX6789-NEXT: v_mov_b32_e32 v4, v12 1017; GFX6789-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da 1018; GFX6789-NEXT: s_waitcnt vmcnt(0) 1019; GFX6789-NEXT: global_store_dword v8, v4, s[8:9] 1020; GFX6789-NEXT: s_waitcnt vmcnt(0) 1021; GFX6789-NEXT: ; return to shader part epilog 1022; 1023; NOPRT-LABEL: load_2darray_lwe: 1024; NOPRT: ; %bb.0: ; %main_body 1025; NOPRT-NEXT: v_mov_b32_e32 v4, 0 1026; NOPRT-NEXT: image_load v[0:4], v[0:2], s[0:7] dmask:0xf unorm lwe da 1027; NOPRT-NEXT: v_mov_b32_e32 v5, 0 1028; NOPRT-NEXT: s_waitcnt vmcnt(0) 1029; NOPRT-NEXT: global_store_dword v5, v4, s[8:9] 1030; NOPRT-NEXT: s_waitcnt vmcnt(0) 1031; NOPRT-NEXT: ; return to shader part epilog 1032; 1033; GFX10-LABEL: load_2darray_lwe: 1034; GFX10: ; %bb.0: ; %main_body 1035; GFX10-NEXT: v_mov_b32_e32 v8, 0 1036; GFX10-NEXT: v_mov_b32_e32 v7, v2 1037; GFX10-NEXT: v_mov_b32_e32 v6, v1 1038; GFX10-NEXT: v_mov_b32_e32 v5, v0 1039; GFX10-NEXT: v_mov_b32_e32 v9, v8 1040; GFX10-NEXT: v_mov_b32_e32 v10, v8 1041; GFX10-NEXT: v_mov_b32_e32 v11, v8 1042; GFX10-NEXT: v_mov_b32_e32 v12, v8 1043; GFX10-NEXT: v_mov_b32_e32 v0, v8 1044; GFX10-NEXT: v_mov_b32_e32 v1, v9 1045; GFX10-NEXT: v_mov_b32_e32 v2, v10 1046; GFX10-NEXT: v_mov_b32_e32 v3, v11 1047; GFX10-NEXT: v_mov_b32_e32 v4, v12 1048; GFX10-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm lwe 1049; GFX10-NEXT: s_waitcnt vmcnt(0) 1050; GFX10-NEXT: global_store_dword v8, v4, s[8:9] 1051; GFX10-NEXT: ; return to shader part epilog 1052; 1053; GFX11-LABEL: load_2darray_lwe: 1054; GFX11: ; %bb.0: ; %main_body 1055; GFX11-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, 0 1056; GFX11-NEXT: v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v6, v1 1057; GFX11-NEXT: v_mov_b32_e32 v9, v8 1058; GFX11-NEXT: v_mov_b32_e32 v10, v8 1059; GFX11-NEXT: v_mov_b32_e32 v11, v8 1060; GFX11-NEXT: v_mov_b32_e32 v12, v8 1061; GFX11-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9 1062; GFX11-NEXT: v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11 1063; GFX11-NEXT: v_mov_b32_e32 v4, v12 1064; GFX11-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm lwe 1065; GFX11-NEXT: s_waitcnt vmcnt(0) 1066; GFX11-NEXT: global_store_b32 v8, v4, s[8:9] 1067; GFX11-NEXT: ; return to shader part epilog 1068; 1069; GFX12-LABEL: load_2darray_lwe: 1070; GFX12: ; %bb.0: ; %main_body 1071; GFX12-NEXT: image_load v[0:4], [v0, v1, v2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY 1072; GFX12-NEXT: v_mov_b32_e32 v5, 0 1073; GFX12-NEXT: s_wait_loadcnt 0x0 1074; GFX12-NEXT: global_store_b32 v5, v4, s[8:9] 1075; GFX12-NEXT: ; return to shader part epilog 1076main_body: 1077 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.2darray.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 2, i32 0) 1078 %v.vec = extractvalue {<4 x float>, i32} %v, 0 1079 %v.err = extractvalue {<4 x float>, i32} %v, 1 1080 store i32 %v.err, ptr addrspace(1) %out, align 4 1081 ret <4 x float> %v.vec 1082} 1083 1084define amdgpu_ps <4 x float> @load_2dmsaa(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %fragid) { 1085; VERDE-LABEL: load_2dmsaa: 1086; VERDE: ; %bb.0: ; %main_body 1087; VERDE-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm 1088; VERDE-NEXT: s_waitcnt vmcnt(0) 1089; VERDE-NEXT: ; return to shader part epilog 1090; 1091; FIJI-LABEL: load_2dmsaa: 1092; FIJI: ; %bb.0: ; %main_body 1093; FIJI-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm 1094; FIJI-NEXT: s_waitcnt vmcnt(0) 1095; FIJI-NEXT: ; return to shader part epilog 1096; 1097; GFX6789-LABEL: load_2dmsaa: 1098; GFX6789: ; %bb.0: ; %main_body 1099; GFX6789-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm 1100; GFX6789-NEXT: s_waitcnt vmcnt(0) 1101; GFX6789-NEXT: ; return to shader part epilog 1102; 1103; NOPRT-LABEL: load_2dmsaa: 1104; NOPRT: ; %bb.0: ; %main_body 1105; NOPRT-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm 1106; NOPRT-NEXT: s_waitcnt vmcnt(0) 1107; NOPRT-NEXT: ; return to shader part epilog 1108; 1109; GFX10PLUS-LABEL: load_2dmsaa: 1110; GFX10PLUS: ; %bb.0: ; %main_body 1111; GFX10PLUS-NEXT: image_load v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm 1112; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 1113; GFX10PLUS-NEXT: ; return to shader part epilog 1114; 1115; GFX12-LABEL: load_2dmsaa: 1116; GFX12: ; %bb.0: ; %main_body 1117; GFX12-NEXT: image_load v[0:3], [v0, v1, v2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA 1118; GFX12-NEXT: s_wait_loadcnt 0x0 1119; GFX12-NEXT: ; return to shader part epilog 1120main_body: 1121 %v = call <4 x float> @llvm.amdgcn.image.load.2dmsaa.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0) 1122 ret <4 x float> %v 1123} 1124 1125define amdgpu_ps <4 x float> @load_2dmsaa_both(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t, i32 %fragid) { 1126; VERDE-LABEL: load_2dmsaa_both: 1127; VERDE: ; %bb.0: ; %main_body 1128; VERDE-NEXT: v_mov_b32_e32 v5, v0 1129; VERDE-NEXT: v_mov_b32_e32 v0, 0 1130; VERDE-NEXT: v_mov_b32_e32 v7, v2 1131; VERDE-NEXT: v_mov_b32_e32 v6, v1 1132; VERDE-NEXT: v_mov_b32_e32 v1, v0 1133; VERDE-NEXT: v_mov_b32_e32 v2, v0 1134; VERDE-NEXT: v_mov_b32_e32 v3, v0 1135; VERDE-NEXT: v_mov_b32_e32 v4, v0 1136; VERDE-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe 1137; VERDE-NEXT: s_mov_b32 s11, 0xf000 1138; VERDE-NEXT: s_mov_b32 s10, -1 1139; VERDE-NEXT: s_waitcnt vmcnt(0) 1140; VERDE-NEXT: buffer_store_dword v4, off, s[8:11], 0 1141; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1142; VERDE-NEXT: ; return to shader part epilog 1143; 1144; FIJI-LABEL: load_2dmsaa_both: 1145; FIJI: ; %bb.0: ; %main_body 1146; FIJI-NEXT: v_mov_b32_e32 v5, v0 1147; FIJI-NEXT: v_mov_b32_e32 v0, 0 1148; FIJI-NEXT: v_mov_b32_e32 v7, v2 1149; FIJI-NEXT: v_mov_b32_e32 v6, v1 1150; FIJI-NEXT: v_mov_b32_e32 v1, v0 1151; FIJI-NEXT: v_mov_b32_e32 v2, v0 1152; FIJI-NEXT: v_mov_b32_e32 v3, v0 1153; FIJI-NEXT: v_mov_b32_e32 v4, v0 1154; FIJI-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe 1155; FIJI-NEXT: s_mov_b32 s11, 0xf000 1156; FIJI-NEXT: s_mov_b32 s10, -1 1157; FIJI-NEXT: s_waitcnt vmcnt(0) 1158; FIJI-NEXT: buffer_store_dword v4, off, s[8:11], 0 1159; FIJI-NEXT: s_waitcnt vmcnt(0) 1160; FIJI-NEXT: ; return to shader part epilog 1161; 1162; GFX6789-LABEL: load_2dmsaa_both: 1163; GFX6789: ; %bb.0: ; %main_body 1164; GFX6789-NEXT: v_mov_b32_e32 v8, 0 1165; GFX6789-NEXT: v_mov_b32_e32 v7, v2 1166; GFX6789-NEXT: v_mov_b32_e32 v6, v1 1167; GFX6789-NEXT: v_mov_b32_e32 v5, v0 1168; GFX6789-NEXT: v_mov_b32_e32 v9, v8 1169; GFX6789-NEXT: v_mov_b32_e32 v10, v8 1170; GFX6789-NEXT: v_mov_b32_e32 v11, v8 1171; GFX6789-NEXT: v_mov_b32_e32 v12, v8 1172; GFX6789-NEXT: v_mov_b32_e32 v0, v8 1173; GFX6789-NEXT: v_mov_b32_e32 v1, v9 1174; GFX6789-NEXT: v_mov_b32_e32 v2, v10 1175; GFX6789-NEXT: v_mov_b32_e32 v3, v11 1176; GFX6789-NEXT: v_mov_b32_e32 v4, v12 1177; GFX6789-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe 1178; GFX6789-NEXT: s_waitcnt vmcnt(0) 1179; GFX6789-NEXT: global_store_dword v8, v4, s[8:9] 1180; GFX6789-NEXT: s_waitcnt vmcnt(0) 1181; GFX6789-NEXT: ; return to shader part epilog 1182; 1183; NOPRT-LABEL: load_2dmsaa_both: 1184; NOPRT: ; %bb.0: ; %main_body 1185; NOPRT-NEXT: v_mov_b32_e32 v4, 0 1186; NOPRT-NEXT: image_load v[0:4], v[0:2], s[0:7] dmask:0xf unorm tfe lwe 1187; NOPRT-NEXT: v_mov_b32_e32 v5, 0 1188; NOPRT-NEXT: s_waitcnt vmcnt(0) 1189; NOPRT-NEXT: global_store_dword v5, v4, s[8:9] 1190; NOPRT-NEXT: s_waitcnt vmcnt(0) 1191; NOPRT-NEXT: ; return to shader part epilog 1192; 1193; GFX10-LABEL: load_2dmsaa_both: 1194; GFX10: ; %bb.0: ; %main_body 1195; GFX10-NEXT: v_mov_b32_e32 v8, 0 1196; GFX10-NEXT: v_mov_b32_e32 v7, v2 1197; GFX10-NEXT: v_mov_b32_e32 v6, v1 1198; GFX10-NEXT: v_mov_b32_e32 v5, v0 1199; GFX10-NEXT: v_mov_b32_e32 v9, v8 1200; GFX10-NEXT: v_mov_b32_e32 v10, v8 1201; GFX10-NEXT: v_mov_b32_e32 v11, v8 1202; GFX10-NEXT: v_mov_b32_e32 v12, v8 1203; GFX10-NEXT: v_mov_b32_e32 v0, v8 1204; GFX10-NEXT: v_mov_b32_e32 v1, v9 1205; GFX10-NEXT: v_mov_b32_e32 v2, v10 1206; GFX10-NEXT: v_mov_b32_e32 v3, v11 1207; GFX10-NEXT: v_mov_b32_e32 v4, v12 1208; GFX10-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm tfe lwe 1209; GFX10-NEXT: s_waitcnt vmcnt(0) 1210; GFX10-NEXT: global_store_dword v8, v4, s[8:9] 1211; GFX10-NEXT: ; return to shader part epilog 1212; 1213; GFX11-LABEL: load_2dmsaa_both: 1214; GFX11: ; %bb.0: ; %main_body 1215; GFX11-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, 0 1216; GFX11-NEXT: v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v6, v1 1217; GFX11-NEXT: v_mov_b32_e32 v9, v8 1218; GFX11-NEXT: v_mov_b32_e32 v10, v8 1219; GFX11-NEXT: v_mov_b32_e32 v11, v8 1220; GFX11-NEXT: v_mov_b32_e32 v12, v8 1221; GFX11-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9 1222; GFX11-NEXT: v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11 1223; GFX11-NEXT: v_mov_b32_e32 v4, v12 1224; GFX11-NEXT: image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm tfe lwe 1225; GFX11-NEXT: s_waitcnt vmcnt(0) 1226; GFX11-NEXT: global_store_b32 v8, v4, s[8:9] 1227; GFX11-NEXT: ; return to shader part epilog 1228; 1229; GFX12-LABEL: load_2dmsaa_both: 1230; GFX12: ; %bb.0: ; %main_body 1231; GFX12-NEXT: v_dual_mov_b32 v7, v0 :: v_dual_mov_b32 v8, 0 1232; GFX12-NEXT: v_dual_mov_b32 v5, v2 :: v_dual_mov_b32 v6, v1 1233; GFX12-NEXT: v_dual_mov_b32 v9, v8 :: v_dual_mov_b32 v10, v8 1234; GFX12-NEXT: v_dual_mov_b32 v11, v8 :: v_dual_mov_b32 v12, v8 1235; GFX12-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9 1236; GFX12-NEXT: v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11 1237; GFX12-NEXT: v_mov_b32_e32 v4, v12 1238; GFX12-NEXT: image_load v[0:4], [v7, v6, v5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA tfe 1239; GFX12-NEXT: s_wait_loadcnt 0x0 1240; GFX12-NEXT: global_store_b32 v8, v4, s[8:9] 1241; GFX12-NEXT: ; return to shader part epilog 1242main_body: 1243 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.2dmsaa.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %fragid, <8 x i32> %rsrc, i32 3, i32 0) 1244 %v.vec = extractvalue {<4 x float>, i32} %v, 0 1245 %v.err = extractvalue {<4 x float>, i32} %v, 1 1246 store i32 %v.err, ptr addrspace(1) %out, align 4 1247 ret <4 x float> %v.vec 1248} 1249 1250define amdgpu_ps <4 x float> @load_2darraymsaa(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice, i32 %fragid) { 1251; VERDE-LABEL: load_2darraymsaa: 1252; VERDE: ; %bb.0: ; %main_body 1253; VERDE-NEXT: image_load v[0:3], v[0:3], s[0:7] dmask:0xf unorm da 1254; VERDE-NEXT: s_waitcnt vmcnt(0) 1255; VERDE-NEXT: ; return to shader part epilog 1256; 1257; FIJI-LABEL: load_2darraymsaa: 1258; FIJI: ; %bb.0: ; %main_body 1259; FIJI-NEXT: image_load v[0:3], v[0:3], s[0:7] dmask:0xf unorm da 1260; FIJI-NEXT: s_waitcnt vmcnt(0) 1261; FIJI-NEXT: ; return to shader part epilog 1262; 1263; GFX6789-LABEL: load_2darraymsaa: 1264; GFX6789: ; %bb.0: ; %main_body 1265; GFX6789-NEXT: image_load v[0:3], v[0:3], s[0:7] dmask:0xf unorm da 1266; GFX6789-NEXT: s_waitcnt vmcnt(0) 1267; GFX6789-NEXT: ; return to shader part epilog 1268; 1269; NOPRT-LABEL: load_2darraymsaa: 1270; NOPRT: ; %bb.0: ; %main_body 1271; NOPRT-NEXT: image_load v[0:3], v[0:3], s[0:7] dmask:0xf unorm da 1272; NOPRT-NEXT: s_waitcnt vmcnt(0) 1273; NOPRT-NEXT: ; return to shader part epilog 1274; 1275; GFX10PLUS-LABEL: load_2darraymsaa: 1276; GFX10PLUS: ; %bb.0: ; %main_body 1277; GFX10PLUS-NEXT: image_load v[0:3], v[0:3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm 1278; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 1279; GFX10PLUS-NEXT: ; return to shader part epilog 1280; 1281; GFX12-LABEL: load_2darraymsaa: 1282; GFX12: ; %bb.0: ; %main_body 1283; GFX12-NEXT: image_load v[0:3], [v0, v1, v2, v3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY 1284; GFX12-NEXT: s_wait_loadcnt 0x0 1285; GFX12-NEXT: ; return to shader part epilog 1286main_body: 1287 %v = call <4 x float> @llvm.amdgcn.image.load.2darraymsaa.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0) 1288 ret <4 x float> %v 1289} 1290 1291define amdgpu_ps <4 x float> @load_2darraymsaa_tfe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t, i32 %slice, i32 %fragid) { 1292; VERDE-LABEL: load_2darraymsaa_tfe: 1293; VERDE: ; %bb.0: ; %main_body 1294; VERDE-NEXT: v_mov_b32_e32 v5, v0 1295; VERDE-NEXT: v_mov_b32_e32 v0, 0 1296; VERDE-NEXT: v_mov_b32_e32 v8, v3 1297; VERDE-NEXT: v_mov_b32_e32 v7, v2 1298; VERDE-NEXT: v_mov_b32_e32 v6, v1 1299; VERDE-NEXT: v_mov_b32_e32 v1, v0 1300; VERDE-NEXT: v_mov_b32_e32 v2, v0 1301; VERDE-NEXT: v_mov_b32_e32 v3, v0 1302; VERDE-NEXT: v_mov_b32_e32 v4, v0 1303; VERDE-NEXT: image_load v[0:4], v[5:8], s[0:7] dmask:0xf unorm tfe da 1304; VERDE-NEXT: s_mov_b32 s11, 0xf000 1305; VERDE-NEXT: s_mov_b32 s10, -1 1306; VERDE-NEXT: s_waitcnt vmcnt(0) 1307; VERDE-NEXT: buffer_store_dword v4, off, s[8:11], 0 1308; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1309; VERDE-NEXT: ; return to shader part epilog 1310; 1311; FIJI-LABEL: load_2darraymsaa_tfe: 1312; FIJI: ; %bb.0: ; %main_body 1313; FIJI-NEXT: v_mov_b32_e32 v5, v0 1314; FIJI-NEXT: v_mov_b32_e32 v0, 0 1315; FIJI-NEXT: v_mov_b32_e32 v8, v3 1316; FIJI-NEXT: v_mov_b32_e32 v7, v2 1317; FIJI-NEXT: v_mov_b32_e32 v6, v1 1318; FIJI-NEXT: v_mov_b32_e32 v1, v0 1319; FIJI-NEXT: v_mov_b32_e32 v2, v0 1320; FIJI-NEXT: v_mov_b32_e32 v3, v0 1321; FIJI-NEXT: v_mov_b32_e32 v4, v0 1322; FIJI-NEXT: image_load v[0:4], v[5:8], s[0:7] dmask:0xf unorm tfe da 1323; FIJI-NEXT: s_mov_b32 s11, 0xf000 1324; FIJI-NEXT: s_mov_b32 s10, -1 1325; FIJI-NEXT: s_waitcnt vmcnt(0) 1326; FIJI-NEXT: buffer_store_dword v4, off, s[8:11], 0 1327; FIJI-NEXT: s_waitcnt vmcnt(0) 1328; FIJI-NEXT: ; return to shader part epilog 1329; 1330; GFX6789-LABEL: load_2darraymsaa_tfe: 1331; GFX6789: ; %bb.0: ; %main_body 1332; GFX6789-NEXT: v_mov_b32_e32 v9, 0 1333; GFX6789-NEXT: v_mov_b32_e32 v8, v3 1334; GFX6789-NEXT: v_mov_b32_e32 v7, v2 1335; GFX6789-NEXT: v_mov_b32_e32 v6, v1 1336; GFX6789-NEXT: v_mov_b32_e32 v5, v0 1337; GFX6789-NEXT: v_mov_b32_e32 v10, v9 1338; GFX6789-NEXT: v_mov_b32_e32 v11, v9 1339; GFX6789-NEXT: v_mov_b32_e32 v12, v9 1340; GFX6789-NEXT: v_mov_b32_e32 v13, v9 1341; GFX6789-NEXT: v_mov_b32_e32 v0, v9 1342; GFX6789-NEXT: v_mov_b32_e32 v1, v10 1343; GFX6789-NEXT: v_mov_b32_e32 v2, v11 1344; GFX6789-NEXT: v_mov_b32_e32 v3, v12 1345; GFX6789-NEXT: v_mov_b32_e32 v4, v13 1346; GFX6789-NEXT: image_load v[0:4], v[5:8], s[0:7] dmask:0xf unorm tfe da 1347; GFX6789-NEXT: s_waitcnt vmcnt(0) 1348; GFX6789-NEXT: global_store_dword v9, v4, s[8:9] 1349; GFX6789-NEXT: s_waitcnt vmcnt(0) 1350; GFX6789-NEXT: ; return to shader part epilog 1351; 1352; NOPRT-LABEL: load_2darraymsaa_tfe: 1353; NOPRT: ; %bb.0: ; %main_body 1354; NOPRT-NEXT: v_mov_b32_e32 v4, 0 1355; NOPRT-NEXT: image_load v[0:4], v[0:3], s[0:7] dmask:0xf unorm tfe da 1356; NOPRT-NEXT: v_mov_b32_e32 v5, 0 1357; NOPRT-NEXT: s_waitcnt vmcnt(0) 1358; NOPRT-NEXT: global_store_dword v5, v4, s[8:9] 1359; NOPRT-NEXT: s_waitcnt vmcnt(0) 1360; NOPRT-NEXT: ; return to shader part epilog 1361; 1362; GFX10-LABEL: load_2darraymsaa_tfe: 1363; GFX10: ; %bb.0: ; %main_body 1364; GFX10-NEXT: v_mov_b32_e32 v9, 0 1365; GFX10-NEXT: v_mov_b32_e32 v8, v3 1366; GFX10-NEXT: v_mov_b32_e32 v7, v2 1367; GFX10-NEXT: v_mov_b32_e32 v6, v1 1368; GFX10-NEXT: v_mov_b32_e32 v5, v0 1369; GFX10-NEXT: v_mov_b32_e32 v10, v9 1370; GFX10-NEXT: v_mov_b32_e32 v11, v9 1371; GFX10-NEXT: v_mov_b32_e32 v12, v9 1372; GFX10-NEXT: v_mov_b32_e32 v13, v9 1373; GFX10-NEXT: v_mov_b32_e32 v0, v9 1374; GFX10-NEXT: v_mov_b32_e32 v1, v10 1375; GFX10-NEXT: v_mov_b32_e32 v2, v11 1376; GFX10-NEXT: v_mov_b32_e32 v3, v12 1377; GFX10-NEXT: v_mov_b32_e32 v4, v13 1378; GFX10-NEXT: image_load v[0:4], v[5:8], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm tfe 1379; GFX10-NEXT: s_waitcnt vmcnt(0) 1380; GFX10-NEXT: global_store_dword v9, v4, s[8:9] 1381; GFX10-NEXT: ; return to shader part epilog 1382; 1383; GFX11-LABEL: load_2darraymsaa_tfe: 1384; GFX11: ; %bb.0: ; %main_body 1385; GFX11-NEXT: v_dual_mov_b32 v9, 0 :: v_dual_mov_b32 v8, v3 1386; GFX11-NEXT: v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v6, v1 1387; GFX11-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v10, v9 1388; GFX11-NEXT: v_mov_b32_e32 v11, v9 1389; GFX11-NEXT: v_mov_b32_e32 v12, v9 1390; GFX11-NEXT: v_mov_b32_e32 v13, v9 1391; GFX11-NEXT: v_dual_mov_b32 v0, v9 :: v_dual_mov_b32 v1, v10 1392; GFX11-NEXT: v_dual_mov_b32 v2, v11 :: v_dual_mov_b32 v3, v12 1393; GFX11-NEXT: v_mov_b32_e32 v4, v13 1394; GFX11-NEXT: image_load v[0:4], v[5:8], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm tfe 1395; GFX11-NEXT: s_waitcnt vmcnt(0) 1396; GFX11-NEXT: global_store_b32 v9, v4, s[8:9] 1397; GFX11-NEXT: ; return to shader part epilog 1398; 1399; GFX12-LABEL: load_2darraymsaa_tfe: 1400; GFX12: ; %bb.0: ; %main_body 1401; GFX12-NEXT: v_mov_b32_e32 v9, 0 1402; GFX12-NEXT: v_dual_mov_b32 v5, v3 :: v_dual_mov_b32 v6, v2 1403; GFX12-NEXT: v_dual_mov_b32 v7, v1 :: v_dual_mov_b32 v8, v0 1404; GFX12-NEXT: v_dual_mov_b32 v10, v9 :: v_dual_mov_b32 v11, v9 1405; GFX12-NEXT: v_dual_mov_b32 v12, v9 :: v_dual_mov_b32 v13, v9 1406; GFX12-NEXT: v_dual_mov_b32 v0, v9 :: v_dual_mov_b32 v1, v10 1407; GFX12-NEXT: v_dual_mov_b32 v2, v11 :: v_dual_mov_b32 v3, v12 1408; GFX12-NEXT: v_mov_b32_e32 v4, v13 1409; GFX12-NEXT: image_load v[0:4], [v8, v7, v6, v5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY tfe 1410; GFX12-NEXT: s_wait_loadcnt 0x0 1411; GFX12-NEXT: global_store_b32 v9, v4, s[8:9] 1412; GFX12-NEXT: ; return to shader part epilog 1413main_body: 1414 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.2darraymsaa.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 1, i32 0) 1415 %v.vec = extractvalue {<4 x float>, i32} %v, 0 1416 %v.err = extractvalue {<4 x float>, i32} %v, 1 1417 store i32 %v.err, ptr addrspace(1) %out, align 4 1418 ret <4 x float> %v.vec 1419} 1420 1421define amdgpu_ps <4 x float> @load_mip_1d(<8 x i32> inreg %rsrc, i32 %s, i32 %mip) { 1422; VERDE-LABEL: load_mip_1d: 1423; VERDE: ; %bb.0: ; %main_body 1424; VERDE-NEXT: image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm 1425; VERDE-NEXT: s_waitcnt vmcnt(0) 1426; VERDE-NEXT: ; return to shader part epilog 1427; 1428; FIJI-LABEL: load_mip_1d: 1429; FIJI: ; %bb.0: ; %main_body 1430; FIJI-NEXT: image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm 1431; FIJI-NEXT: s_waitcnt vmcnt(0) 1432; FIJI-NEXT: ; return to shader part epilog 1433; 1434; GFX6789-LABEL: load_mip_1d: 1435; GFX6789: ; %bb.0: ; %main_body 1436; GFX6789-NEXT: image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm 1437; GFX6789-NEXT: s_waitcnt vmcnt(0) 1438; GFX6789-NEXT: ; return to shader part epilog 1439; 1440; NOPRT-LABEL: load_mip_1d: 1441; NOPRT: ; %bb.0: ; %main_body 1442; NOPRT-NEXT: image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm 1443; NOPRT-NEXT: s_waitcnt vmcnt(0) 1444; NOPRT-NEXT: ; return to shader part epilog 1445; 1446; GFX10PLUS-LABEL: load_mip_1d: 1447; GFX10PLUS: ; %bb.0: ; %main_body 1448; GFX10PLUS-NEXT: image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 1449; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 1450; GFX10PLUS-NEXT: ; return to shader part epilog 1451; 1452; GFX12-LABEL: load_mip_1d: 1453; GFX12: ; %bb.0: ; %main_body 1454; GFX12-NEXT: image_load_mip v[0:3], [v0, v1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D 1455; GFX12-NEXT: s_wait_loadcnt 0x0 1456; GFX12-NEXT: ; return to shader part epilog 1457main_body: 1458 %v = call <4 x float> @llvm.amdgcn.image.load.mip.1d.v4f32.i32(i32 15, i32 %s, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 1459 ret <4 x float> %v 1460} 1461 1462define amdgpu_ps <4 x float> @load_mip_1d_lwe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %mip) { 1463; VERDE-LABEL: load_mip_1d_lwe: 1464; VERDE: ; %bb.0: ; %main_body 1465; VERDE-NEXT: v_mov_b32_e32 v5, v0 1466; VERDE-NEXT: v_mov_b32_e32 v0, 0 1467; VERDE-NEXT: v_mov_b32_e32 v6, v1 1468; VERDE-NEXT: v_mov_b32_e32 v1, v0 1469; VERDE-NEXT: v_mov_b32_e32 v2, v0 1470; VERDE-NEXT: v_mov_b32_e32 v3, v0 1471; VERDE-NEXT: v_mov_b32_e32 v4, v0 1472; VERDE-NEXT: image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf unorm lwe 1473; VERDE-NEXT: s_mov_b32 s11, 0xf000 1474; VERDE-NEXT: s_mov_b32 s10, -1 1475; VERDE-NEXT: s_waitcnt vmcnt(0) 1476; VERDE-NEXT: buffer_store_dword v4, off, s[8:11], 0 1477; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1478; VERDE-NEXT: ; return to shader part epilog 1479; 1480; FIJI-LABEL: load_mip_1d_lwe: 1481; FIJI: ; %bb.0: ; %main_body 1482; FIJI-NEXT: v_mov_b32_e32 v5, v0 1483; FIJI-NEXT: v_mov_b32_e32 v0, 0 1484; FIJI-NEXT: v_mov_b32_e32 v6, v1 1485; FIJI-NEXT: v_mov_b32_e32 v1, v0 1486; FIJI-NEXT: v_mov_b32_e32 v2, v0 1487; FIJI-NEXT: v_mov_b32_e32 v3, v0 1488; FIJI-NEXT: v_mov_b32_e32 v4, v0 1489; FIJI-NEXT: image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf unorm lwe 1490; FIJI-NEXT: s_mov_b32 s11, 0xf000 1491; FIJI-NEXT: s_mov_b32 s10, -1 1492; FIJI-NEXT: s_waitcnt vmcnt(0) 1493; FIJI-NEXT: buffer_store_dword v4, off, s[8:11], 0 1494; FIJI-NEXT: s_waitcnt vmcnt(0) 1495; FIJI-NEXT: ; return to shader part epilog 1496; 1497; GFX6789-LABEL: load_mip_1d_lwe: 1498; GFX6789: ; %bb.0: ; %main_body 1499; GFX6789-NEXT: v_mov_b32_e32 v7, 0 1500; GFX6789-NEXT: v_mov_b32_e32 v6, v1 1501; GFX6789-NEXT: v_mov_b32_e32 v5, v0 1502; GFX6789-NEXT: v_mov_b32_e32 v8, v7 1503; GFX6789-NEXT: v_mov_b32_e32 v9, v7 1504; GFX6789-NEXT: v_mov_b32_e32 v10, v7 1505; GFX6789-NEXT: v_mov_b32_e32 v11, v7 1506; GFX6789-NEXT: v_mov_b32_e32 v0, v7 1507; GFX6789-NEXT: v_mov_b32_e32 v1, v8 1508; GFX6789-NEXT: v_mov_b32_e32 v2, v9 1509; GFX6789-NEXT: v_mov_b32_e32 v3, v10 1510; GFX6789-NEXT: v_mov_b32_e32 v4, v11 1511; GFX6789-NEXT: image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf unorm lwe 1512; GFX6789-NEXT: s_waitcnt vmcnt(0) 1513; GFX6789-NEXT: global_store_dword v7, v4, s[8:9] 1514; GFX6789-NEXT: s_waitcnt vmcnt(0) 1515; GFX6789-NEXT: ; return to shader part epilog 1516; 1517; NOPRT-LABEL: load_mip_1d_lwe: 1518; NOPRT: ; %bb.0: ; %main_body 1519; NOPRT-NEXT: v_mov_b32_e32 v4, 0 1520; NOPRT-NEXT: image_load_mip v[0:4], v[0:1], s[0:7] dmask:0xf unorm lwe 1521; NOPRT-NEXT: v_mov_b32_e32 v5, 0 1522; NOPRT-NEXT: s_waitcnt vmcnt(0) 1523; NOPRT-NEXT: global_store_dword v5, v4, s[8:9] 1524; NOPRT-NEXT: s_waitcnt vmcnt(0) 1525; NOPRT-NEXT: ; return to shader part epilog 1526; 1527; GFX10-LABEL: load_mip_1d_lwe: 1528; GFX10: ; %bb.0: ; %main_body 1529; GFX10-NEXT: v_mov_b32_e32 v7, 0 1530; GFX10-NEXT: v_mov_b32_e32 v6, v1 1531; GFX10-NEXT: v_mov_b32_e32 v5, v0 1532; GFX10-NEXT: v_mov_b32_e32 v8, v7 1533; GFX10-NEXT: v_mov_b32_e32 v9, v7 1534; GFX10-NEXT: v_mov_b32_e32 v10, v7 1535; GFX10-NEXT: v_mov_b32_e32 v11, v7 1536; GFX10-NEXT: v_mov_b32_e32 v0, v7 1537; GFX10-NEXT: v_mov_b32_e32 v1, v8 1538; GFX10-NEXT: v_mov_b32_e32 v2, v9 1539; GFX10-NEXT: v_mov_b32_e32 v3, v10 1540; GFX10-NEXT: v_mov_b32_e32 v4, v11 1541; GFX10-NEXT: image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm lwe 1542; GFX10-NEXT: s_waitcnt vmcnt(0) 1543; GFX10-NEXT: global_store_dword v7, v4, s[8:9] 1544; GFX10-NEXT: ; return to shader part epilog 1545; 1546; GFX11-LABEL: load_mip_1d_lwe: 1547; GFX11: ; %bb.0: ; %main_body 1548; GFX11-NEXT: v_dual_mov_b32 v7, 0 :: v_dual_mov_b32 v6, v1 1549; GFX11-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, v7 1550; GFX11-NEXT: v_mov_b32_e32 v9, v7 1551; GFX11-NEXT: v_mov_b32_e32 v10, v7 1552; GFX11-NEXT: v_mov_b32_e32 v11, v7 1553; GFX11-NEXT: v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8 1554; GFX11-NEXT: v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10 1555; GFX11-NEXT: v_mov_b32_e32 v4, v11 1556; GFX11-NEXT: image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm lwe 1557; GFX11-NEXT: s_waitcnt vmcnt(0) 1558; GFX11-NEXT: global_store_b32 v7, v4, s[8:9] 1559; GFX11-NEXT: ; return to shader part epilog 1560; 1561; GFX12-LABEL: load_mip_1d_lwe: 1562; GFX12: ; %bb.0: ; %main_body 1563; GFX12-NEXT: image_load_mip v[0:4], [v0, v1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D 1564; GFX12-NEXT: v_mov_b32_e32 v5, 0 1565; GFX12-NEXT: s_wait_loadcnt 0x0 1566; GFX12-NEXT: global_store_b32 v5, v4, s[8:9] 1567; GFX12-NEXT: ; return to shader part epilog 1568main_body: 1569 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.mip.1d.v4f32i32.i32(i32 15, i32 %s, i32 %mip, <8 x i32> %rsrc, i32 2, i32 0) 1570 %v.vec = extractvalue {<4 x float>, i32} %v, 0 1571 %v.err = extractvalue {<4 x float>, i32} %v, 1 1572 store i32 %v.err, ptr addrspace(1) %out, align 4 1573 ret <4 x float> %v.vec 1574} 1575 1576define amdgpu_ps <4 x float> @load_mip_2d(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) { 1577; VERDE-LABEL: load_mip_2d: 1578; VERDE: ; %bb.0: ; %main_body 1579; VERDE-NEXT: image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm 1580; VERDE-NEXT: s_waitcnt vmcnt(0) 1581; VERDE-NEXT: ; return to shader part epilog 1582; 1583; FIJI-LABEL: load_mip_2d: 1584; FIJI: ; %bb.0: ; %main_body 1585; FIJI-NEXT: image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm 1586; FIJI-NEXT: s_waitcnt vmcnt(0) 1587; FIJI-NEXT: ; return to shader part epilog 1588; 1589; GFX6789-LABEL: load_mip_2d: 1590; GFX6789: ; %bb.0: ; %main_body 1591; GFX6789-NEXT: image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm 1592; GFX6789-NEXT: s_waitcnt vmcnt(0) 1593; GFX6789-NEXT: ; return to shader part epilog 1594; 1595; NOPRT-LABEL: load_mip_2d: 1596; NOPRT: ; %bb.0: ; %main_body 1597; NOPRT-NEXT: image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm 1598; NOPRT-NEXT: s_waitcnt vmcnt(0) 1599; NOPRT-NEXT: ; return to shader part epilog 1600; 1601; GFX10PLUS-LABEL: load_mip_2d: 1602; GFX10PLUS: ; %bb.0: ; %main_body 1603; GFX10PLUS-NEXT: image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm 1604; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 1605; GFX10PLUS-NEXT: ; return to shader part epilog 1606; 1607; GFX12-LABEL: load_mip_2d: 1608; GFX12: ; %bb.0: ; %main_body 1609; GFX12-NEXT: image_load_mip v[0:3], [v0, v1, v2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D 1610; GFX12-NEXT: s_wait_loadcnt 0x0 1611; GFX12-NEXT: ; return to shader part epilog 1612main_body: 1613 %v = call <4 x float> @llvm.amdgcn.image.load.mip.2d.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 1614 ret <4 x float> %v 1615} 1616 1617define amdgpu_ps <4 x float> @load_mip_2d_tfe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t, i32 %mip) { 1618; VERDE-LABEL: load_mip_2d_tfe: 1619; VERDE: ; %bb.0: ; %main_body 1620; VERDE-NEXT: v_mov_b32_e32 v5, v0 1621; VERDE-NEXT: v_mov_b32_e32 v0, 0 1622; VERDE-NEXT: v_mov_b32_e32 v7, v2 1623; VERDE-NEXT: v_mov_b32_e32 v6, v1 1624; VERDE-NEXT: v_mov_b32_e32 v1, v0 1625; VERDE-NEXT: v_mov_b32_e32 v2, v0 1626; VERDE-NEXT: v_mov_b32_e32 v3, v0 1627; VERDE-NEXT: v_mov_b32_e32 v4, v0 1628; VERDE-NEXT: image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe 1629; VERDE-NEXT: s_mov_b32 s11, 0xf000 1630; VERDE-NEXT: s_mov_b32 s10, -1 1631; VERDE-NEXT: s_waitcnt vmcnt(0) 1632; VERDE-NEXT: buffer_store_dword v4, off, s[8:11], 0 1633; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1634; VERDE-NEXT: ; return to shader part epilog 1635; 1636; FIJI-LABEL: load_mip_2d_tfe: 1637; FIJI: ; %bb.0: ; %main_body 1638; FIJI-NEXT: v_mov_b32_e32 v5, v0 1639; FIJI-NEXT: v_mov_b32_e32 v0, 0 1640; FIJI-NEXT: v_mov_b32_e32 v7, v2 1641; FIJI-NEXT: v_mov_b32_e32 v6, v1 1642; FIJI-NEXT: v_mov_b32_e32 v1, v0 1643; FIJI-NEXT: v_mov_b32_e32 v2, v0 1644; FIJI-NEXT: v_mov_b32_e32 v3, v0 1645; FIJI-NEXT: v_mov_b32_e32 v4, v0 1646; FIJI-NEXT: image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe 1647; FIJI-NEXT: s_mov_b32 s11, 0xf000 1648; FIJI-NEXT: s_mov_b32 s10, -1 1649; FIJI-NEXT: s_waitcnt vmcnt(0) 1650; FIJI-NEXT: buffer_store_dword v4, off, s[8:11], 0 1651; FIJI-NEXT: s_waitcnt vmcnt(0) 1652; FIJI-NEXT: ; return to shader part epilog 1653; 1654; GFX6789-LABEL: load_mip_2d_tfe: 1655; GFX6789: ; %bb.0: ; %main_body 1656; GFX6789-NEXT: v_mov_b32_e32 v8, 0 1657; GFX6789-NEXT: v_mov_b32_e32 v7, v2 1658; GFX6789-NEXT: v_mov_b32_e32 v6, v1 1659; GFX6789-NEXT: v_mov_b32_e32 v5, v0 1660; GFX6789-NEXT: v_mov_b32_e32 v9, v8 1661; GFX6789-NEXT: v_mov_b32_e32 v10, v8 1662; GFX6789-NEXT: v_mov_b32_e32 v11, v8 1663; GFX6789-NEXT: v_mov_b32_e32 v12, v8 1664; GFX6789-NEXT: v_mov_b32_e32 v0, v8 1665; GFX6789-NEXT: v_mov_b32_e32 v1, v9 1666; GFX6789-NEXT: v_mov_b32_e32 v2, v10 1667; GFX6789-NEXT: v_mov_b32_e32 v3, v11 1668; GFX6789-NEXT: v_mov_b32_e32 v4, v12 1669; GFX6789-NEXT: image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe 1670; GFX6789-NEXT: s_waitcnt vmcnt(0) 1671; GFX6789-NEXT: global_store_dword v8, v4, s[8:9] 1672; GFX6789-NEXT: s_waitcnt vmcnt(0) 1673; GFX6789-NEXT: ; return to shader part epilog 1674; 1675; NOPRT-LABEL: load_mip_2d_tfe: 1676; NOPRT: ; %bb.0: ; %main_body 1677; NOPRT-NEXT: v_mov_b32_e32 v4, 0 1678; NOPRT-NEXT: image_load_mip v[0:4], v[0:2], s[0:7] dmask:0xf unorm tfe 1679; NOPRT-NEXT: v_mov_b32_e32 v5, 0 1680; NOPRT-NEXT: s_waitcnt vmcnt(0) 1681; NOPRT-NEXT: global_store_dword v5, v4, s[8:9] 1682; NOPRT-NEXT: s_waitcnt vmcnt(0) 1683; NOPRT-NEXT: ; return to shader part epilog 1684; 1685; GFX10-LABEL: load_mip_2d_tfe: 1686; GFX10: ; %bb.0: ; %main_body 1687; GFX10-NEXT: v_mov_b32_e32 v8, 0 1688; GFX10-NEXT: v_mov_b32_e32 v7, v2 1689; GFX10-NEXT: v_mov_b32_e32 v6, v1 1690; GFX10-NEXT: v_mov_b32_e32 v5, v0 1691; GFX10-NEXT: v_mov_b32_e32 v9, v8 1692; GFX10-NEXT: v_mov_b32_e32 v10, v8 1693; GFX10-NEXT: v_mov_b32_e32 v11, v8 1694; GFX10-NEXT: v_mov_b32_e32 v12, v8 1695; GFX10-NEXT: v_mov_b32_e32 v0, v8 1696; GFX10-NEXT: v_mov_b32_e32 v1, v9 1697; GFX10-NEXT: v_mov_b32_e32 v2, v10 1698; GFX10-NEXT: v_mov_b32_e32 v3, v11 1699; GFX10-NEXT: v_mov_b32_e32 v4, v12 1700; GFX10-NEXT: image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm tfe 1701; GFX10-NEXT: s_waitcnt vmcnt(0) 1702; GFX10-NEXT: global_store_dword v8, v4, s[8:9] 1703; GFX10-NEXT: ; return to shader part epilog 1704; 1705; GFX11-LABEL: load_mip_2d_tfe: 1706; GFX11: ; %bb.0: ; %main_body 1707; GFX11-NEXT: v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, 0 1708; GFX11-NEXT: v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v6, v1 1709; GFX11-NEXT: v_mov_b32_e32 v9, v8 1710; GFX11-NEXT: v_mov_b32_e32 v10, v8 1711; GFX11-NEXT: v_mov_b32_e32 v11, v8 1712; GFX11-NEXT: v_mov_b32_e32 v12, v8 1713; GFX11-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9 1714; GFX11-NEXT: v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11 1715; GFX11-NEXT: v_mov_b32_e32 v4, v12 1716; GFX11-NEXT: image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm tfe 1717; GFX11-NEXT: s_waitcnt vmcnt(0) 1718; GFX11-NEXT: global_store_b32 v8, v4, s[8:9] 1719; GFX11-NEXT: ; return to shader part epilog 1720; 1721; GFX12-LABEL: load_mip_2d_tfe: 1722; GFX12: ; %bb.0: ; %main_body 1723; GFX12-NEXT: v_dual_mov_b32 v7, v0 :: v_dual_mov_b32 v8, 0 1724; GFX12-NEXT: v_dual_mov_b32 v5, v2 :: v_dual_mov_b32 v6, v1 1725; GFX12-NEXT: v_dual_mov_b32 v9, v8 :: v_dual_mov_b32 v10, v8 1726; GFX12-NEXT: v_dual_mov_b32 v11, v8 :: v_dual_mov_b32 v12, v8 1727; GFX12-NEXT: v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9 1728; GFX12-NEXT: v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11 1729; GFX12-NEXT: v_mov_b32_e32 v4, v12 1730; GFX12-NEXT: image_load_mip v[0:4], [v7, v6, v5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D tfe 1731; GFX12-NEXT: s_wait_loadcnt 0x0 1732; GFX12-NEXT: global_store_b32 v8, v4, s[8:9] 1733; GFX12-NEXT: ; return to shader part epilog 1734main_body: 1735 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0) 1736 %v.vec = extractvalue {<4 x float>, i32} %v, 0 1737 %v.err = extractvalue {<4 x float>, i32} %v, 1 1738 store i32 %v.err, ptr addrspace(1) %out, align 4 1739 ret <4 x float> %v.vec 1740} 1741 1742define amdgpu_ps float @load_1d_V2_tfe_dmask0(<8 x i32> inreg %rsrc, i32 %s) { 1743; VERDE-LABEL: load_1d_V2_tfe_dmask0: 1744; VERDE: ; %bb.0: ; %main_body 1745; VERDE-NEXT: v_mov_b32_e32 v1, 0 1746; VERDE-NEXT: v_mov_b32_e32 v2, v1 1747; VERDE-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe 1748; VERDE-NEXT: s_waitcnt vmcnt(0) 1749; VERDE-NEXT: v_mov_b32_e32 v0, v2 1750; VERDE-NEXT: ; return to shader part epilog 1751; 1752; FIJI-LABEL: load_1d_V2_tfe_dmask0: 1753; FIJI: ; %bb.0: ; %main_body 1754; FIJI-NEXT: v_mov_b32_e32 v1, 0 1755; FIJI-NEXT: v_mov_b32_e32 v2, v1 1756; FIJI-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe 1757; FIJI-NEXT: s_waitcnt vmcnt(0) 1758; FIJI-NEXT: v_mov_b32_e32 v0, v2 1759; FIJI-NEXT: ; return to shader part epilog 1760; 1761; GFX6789-LABEL: load_1d_V2_tfe_dmask0: 1762; GFX6789: ; %bb.0: ; %main_body 1763; GFX6789-NEXT: v_mov_b32_e32 v1, 0 1764; GFX6789-NEXT: v_mov_b32_e32 v2, v1 1765; GFX6789-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe 1766; GFX6789-NEXT: s_waitcnt vmcnt(0) 1767; GFX6789-NEXT: v_mov_b32_e32 v0, v2 1768; GFX6789-NEXT: ; return to shader part epilog 1769; 1770; NOPRT-LABEL: load_1d_V2_tfe_dmask0: 1771; NOPRT: ; %bb.0: ; %main_body 1772; NOPRT-NEXT: v_mov_b32_e32 v1, 0 1773; NOPRT-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x1 unorm tfe 1774; NOPRT-NEXT: s_waitcnt vmcnt(0) 1775; NOPRT-NEXT: v_mov_b32_e32 v0, v1 1776; NOPRT-NEXT: ; return to shader part epilog 1777; 1778; GFX10PLUS-LABEL: load_1d_V2_tfe_dmask0: 1779; GFX10PLUS: ; %bb.0: ; %main_body 1780; GFX10PLUS-NEXT: v_mov_b32_e32 v1, 0 1781; GFX10PLUS-NEXT: v_mov_b32_e32 v2, v1 1782; GFX10PLUS-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe 1783; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 1784; GFX10PLUS-NEXT: v_mov_b32_e32 v0, v2 1785; GFX10PLUS-NEXT: ; return to shader part epilog 1786; 1787; GFX12-LABEL: load_1d_V2_tfe_dmask0: 1788; GFX12: ; %bb.0: ; %main_body 1789; GFX12-NEXT: v_mov_b32_e32 v1, 0 1790; GFX12-NEXT: v_mov_b32_e32 v2, v1 1791; GFX12-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D tfe 1792; GFX12-NEXT: s_wait_loadcnt 0x0 1793; GFX12-NEXT: v_mov_b32_e32 v0, v2 1794; GFX12-NEXT: ; return to shader part epilog 1795main_body: 1796 %v = call {<2 x float>,i32} @llvm.amdgcn.image.load.1d.v2f32i32.i32(i32 0, i32 %s, <8 x i32> %rsrc, i32 1, i32 0) 1797 %v.err = extractvalue {<2 x float>, i32} %v, 1 1798 %vv = bitcast i32 %v.err to float 1799 ret float %vv 1800} 1801 1802define amdgpu_ps float @load_1d_V1_tfe_dmask0(<8 x i32> inreg %rsrc, i32 %s) { 1803; VERDE-LABEL: load_1d_V1_tfe_dmask0: 1804; VERDE: ; %bb.0: ; %main_body 1805; VERDE-NEXT: v_mov_b32_e32 v1, 0 1806; VERDE-NEXT: v_mov_b32_e32 v2, v1 1807; VERDE-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe 1808; VERDE-NEXT: s_waitcnt vmcnt(0) 1809; VERDE-NEXT: v_mov_b32_e32 v0, v2 1810; VERDE-NEXT: ; return to shader part epilog 1811; 1812; FIJI-LABEL: load_1d_V1_tfe_dmask0: 1813; FIJI: ; %bb.0: ; %main_body 1814; FIJI-NEXT: v_mov_b32_e32 v1, 0 1815; FIJI-NEXT: v_mov_b32_e32 v2, v1 1816; FIJI-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe 1817; FIJI-NEXT: s_waitcnt vmcnt(0) 1818; FIJI-NEXT: v_mov_b32_e32 v0, v2 1819; FIJI-NEXT: ; return to shader part epilog 1820; 1821; GFX6789-LABEL: load_1d_V1_tfe_dmask0: 1822; GFX6789: ; %bb.0: ; %main_body 1823; GFX6789-NEXT: v_mov_b32_e32 v1, 0 1824; GFX6789-NEXT: v_mov_b32_e32 v2, v1 1825; GFX6789-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe 1826; GFX6789-NEXT: s_waitcnt vmcnt(0) 1827; GFX6789-NEXT: v_mov_b32_e32 v0, v2 1828; GFX6789-NEXT: ; return to shader part epilog 1829; 1830; NOPRT-LABEL: load_1d_V1_tfe_dmask0: 1831; NOPRT: ; %bb.0: ; %main_body 1832; NOPRT-NEXT: v_mov_b32_e32 v1, 0 1833; NOPRT-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x1 unorm tfe 1834; NOPRT-NEXT: s_waitcnt vmcnt(0) 1835; NOPRT-NEXT: v_mov_b32_e32 v0, v1 1836; NOPRT-NEXT: ; return to shader part epilog 1837; 1838; GFX10PLUS-LABEL: load_1d_V1_tfe_dmask0: 1839; GFX10PLUS: ; %bb.0: ; %main_body 1840; GFX10PLUS-NEXT: v_mov_b32_e32 v1, 0 1841; GFX10PLUS-NEXT: v_mov_b32_e32 v2, v1 1842; GFX10PLUS-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe 1843; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 1844; GFX10PLUS-NEXT: v_mov_b32_e32 v0, v2 1845; GFX10PLUS-NEXT: ; return to shader part epilog 1846; 1847; GFX12-LABEL: load_1d_V1_tfe_dmask0: 1848; GFX12: ; %bb.0: ; %main_body 1849; GFX12-NEXT: v_mov_b32_e32 v1, 0 1850; GFX12-NEXT: v_mov_b32_e32 v2, v1 1851; GFX12-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D tfe 1852; GFX12-NEXT: s_wait_loadcnt 0x0 1853; GFX12-NEXT: v_mov_b32_e32 v0, v2 1854; GFX12-NEXT: ; return to shader part epilog 1855main_body: 1856 %v = call {float,i32} @llvm.amdgcn.image.load.1d.f32i32.i32(i32 0, i32 %s, <8 x i32> %rsrc, i32 1, i32 0) 1857 %v.err = extractvalue {float, i32} %v, 1 1858 %vv = bitcast i32 %v.err to float 1859 ret float %vv 1860} 1861 1862define amdgpu_ps float @load_mip_2d_tfe_dmask0(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) { 1863; VERDE-LABEL: load_mip_2d_tfe_dmask0: 1864; VERDE: ; %bb.0: ; %main_body 1865; VERDE-NEXT: v_mov_b32_e32 v3, 0 1866; VERDE-NEXT: v_mov_b32_e32 v4, v3 1867; VERDE-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe 1868; VERDE-NEXT: s_waitcnt vmcnt(0) 1869; VERDE-NEXT: v_mov_b32_e32 v0, v4 1870; VERDE-NEXT: ; return to shader part epilog 1871; 1872; FIJI-LABEL: load_mip_2d_tfe_dmask0: 1873; FIJI: ; %bb.0: ; %main_body 1874; FIJI-NEXT: v_mov_b32_e32 v3, 0 1875; FIJI-NEXT: v_mov_b32_e32 v4, v3 1876; FIJI-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe 1877; FIJI-NEXT: s_waitcnt vmcnt(0) 1878; FIJI-NEXT: v_mov_b32_e32 v0, v4 1879; FIJI-NEXT: ; return to shader part epilog 1880; 1881; GFX6789-LABEL: load_mip_2d_tfe_dmask0: 1882; GFX6789: ; %bb.0: ; %main_body 1883; GFX6789-NEXT: v_mov_b32_e32 v3, 0 1884; GFX6789-NEXT: v_mov_b32_e32 v4, v3 1885; GFX6789-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe 1886; GFX6789-NEXT: s_waitcnt vmcnt(0) 1887; GFX6789-NEXT: v_mov_b32_e32 v0, v4 1888; GFX6789-NEXT: ; return to shader part epilog 1889; 1890; NOPRT-LABEL: load_mip_2d_tfe_dmask0: 1891; NOPRT: ; %bb.0: ; %main_body 1892; NOPRT-NEXT: v_mov_b32_e32 v3, 0 1893; NOPRT-NEXT: image_load_mip v[2:3], v[0:2], s[0:7] dmask:0x1 unorm tfe 1894; NOPRT-NEXT: s_waitcnt vmcnt(0) 1895; NOPRT-NEXT: v_mov_b32_e32 v0, v3 1896; NOPRT-NEXT: ; return to shader part epilog 1897; 1898; GFX10PLUS-LABEL: load_mip_2d_tfe_dmask0: 1899; GFX10PLUS: ; %bb.0: ; %main_body 1900; GFX10PLUS-NEXT: v_mov_b32_e32 v3, 0 1901; GFX10PLUS-NEXT: v_mov_b32_e32 v4, v3 1902; GFX10PLUS-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm tfe 1903; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 1904; GFX10PLUS-NEXT: v_mov_b32_e32 v0, v4 1905; GFX10PLUS-NEXT: ; return to shader part epilog 1906; 1907; GFX12-LABEL: load_mip_2d_tfe_dmask0: 1908; GFX12: ; %bb.0: ; %main_body 1909; GFX12-NEXT: v_mov_b32_e32 v3, 0 1910; GFX12-NEXT: v_mov_b32_e32 v4, v3 1911; GFX12-NEXT: image_load_mip v[3:4], [v0, v1, v2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D tfe 1912; GFX12-NEXT: s_wait_loadcnt 0x0 1913; GFX12-NEXT: v_mov_b32_e32 v0, v4 1914; GFX12-NEXT: ; return to shader part epilog 1915main_body: 1916 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v4f32i32.i32(i32 0, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0) 1917 %v.err = extractvalue {<4 x float>, i32} %v, 1 1918 %vv = bitcast i32 %v.err to float 1919 ret float %vv 1920} 1921 1922define amdgpu_ps float @load_mip_2d_tfe_nouse(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) { 1923; VERDE-LABEL: load_mip_2d_tfe_nouse: 1924; VERDE: ; %bb.0: ; %main_body 1925; VERDE-NEXT: v_mov_b32_e32 v3, 0 1926; VERDE-NEXT: v_mov_b32_e32 v4, v3 1927; VERDE-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe 1928; VERDE-NEXT: s_waitcnt vmcnt(0) 1929; VERDE-NEXT: v_mov_b32_e32 v0, v4 1930; VERDE-NEXT: ; return to shader part epilog 1931; 1932; FIJI-LABEL: load_mip_2d_tfe_nouse: 1933; FIJI: ; %bb.0: ; %main_body 1934; FIJI-NEXT: v_mov_b32_e32 v3, 0 1935; FIJI-NEXT: v_mov_b32_e32 v4, v3 1936; FIJI-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe 1937; FIJI-NEXT: s_waitcnt vmcnt(0) 1938; FIJI-NEXT: v_mov_b32_e32 v0, v4 1939; FIJI-NEXT: ; return to shader part epilog 1940; 1941; GFX6789-LABEL: load_mip_2d_tfe_nouse: 1942; GFX6789: ; %bb.0: ; %main_body 1943; GFX6789-NEXT: v_mov_b32_e32 v3, 0 1944; GFX6789-NEXT: v_mov_b32_e32 v4, v3 1945; GFX6789-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe 1946; GFX6789-NEXT: s_waitcnt vmcnt(0) 1947; GFX6789-NEXT: v_mov_b32_e32 v0, v4 1948; GFX6789-NEXT: ; return to shader part epilog 1949; 1950; NOPRT-LABEL: load_mip_2d_tfe_nouse: 1951; NOPRT: ; %bb.0: ; %main_body 1952; NOPRT-NEXT: v_mov_b32_e32 v3, 0 1953; NOPRT-NEXT: image_load_mip v[2:3], v[0:2], s[0:7] dmask:0x1 unorm tfe 1954; NOPRT-NEXT: s_waitcnt vmcnt(0) 1955; NOPRT-NEXT: v_mov_b32_e32 v0, v3 1956; NOPRT-NEXT: ; return to shader part epilog 1957; 1958; GFX10PLUS-LABEL: load_mip_2d_tfe_nouse: 1959; GFX10PLUS: ; %bb.0: ; %main_body 1960; GFX10PLUS-NEXT: v_mov_b32_e32 v3, 0 1961; GFX10PLUS-NEXT: v_mov_b32_e32 v4, v3 1962; GFX10PLUS-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm tfe 1963; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 1964; GFX10PLUS-NEXT: v_mov_b32_e32 v0, v4 1965; GFX10PLUS-NEXT: ; return to shader part epilog 1966; 1967; GFX12-LABEL: load_mip_2d_tfe_nouse: 1968; GFX12: ; %bb.0: ; %main_body 1969; GFX12-NEXT: v_mov_b32_e32 v3, 0 1970; GFX12-NEXT: v_mov_b32_e32 v4, v3 1971; GFX12-NEXT: image_load_mip v[3:4], [v0, v1, v2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D tfe 1972; GFX12-NEXT: s_wait_loadcnt 0x0 1973; GFX12-NEXT: v_mov_b32_e32 v0, v4 1974; GFX12-NEXT: ; return to shader part epilog 1975main_body: 1976 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0) 1977 %v.err = extractvalue {<4 x float>, i32} %v, 1 1978 %vv = bitcast i32 %v.err to float 1979 ret float %vv 1980} 1981 1982define amdgpu_ps float @load_mip_2d_tfe_nouse_V2(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) { 1983; VERDE-LABEL: load_mip_2d_tfe_nouse_V2: 1984; VERDE: ; %bb.0: ; %main_body 1985; VERDE-NEXT: v_mov_b32_e32 v3, 0 1986; VERDE-NEXT: v_mov_b32_e32 v4, v3 1987; VERDE-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe 1988; VERDE-NEXT: s_waitcnt vmcnt(0) 1989; VERDE-NEXT: v_mov_b32_e32 v0, v4 1990; VERDE-NEXT: ; return to shader part epilog 1991; 1992; FIJI-LABEL: load_mip_2d_tfe_nouse_V2: 1993; FIJI: ; %bb.0: ; %main_body 1994; FIJI-NEXT: v_mov_b32_e32 v3, 0 1995; FIJI-NEXT: v_mov_b32_e32 v4, v3 1996; FIJI-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe 1997; FIJI-NEXT: s_waitcnt vmcnt(0) 1998; FIJI-NEXT: v_mov_b32_e32 v0, v4 1999; FIJI-NEXT: ; return to shader part epilog 2000; 2001; GFX6789-LABEL: load_mip_2d_tfe_nouse_V2: 2002; GFX6789: ; %bb.0: ; %main_body 2003; GFX6789-NEXT: v_mov_b32_e32 v3, 0 2004; GFX6789-NEXT: v_mov_b32_e32 v4, v3 2005; GFX6789-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe 2006; GFX6789-NEXT: s_waitcnt vmcnt(0) 2007; GFX6789-NEXT: v_mov_b32_e32 v0, v4 2008; GFX6789-NEXT: ; return to shader part epilog 2009; 2010; NOPRT-LABEL: load_mip_2d_tfe_nouse_V2: 2011; NOPRT: ; %bb.0: ; %main_body 2012; NOPRT-NEXT: v_mov_b32_e32 v3, 0 2013; NOPRT-NEXT: image_load_mip v[2:3], v[0:2], s[0:7] dmask:0x1 unorm tfe 2014; NOPRT-NEXT: s_waitcnt vmcnt(0) 2015; NOPRT-NEXT: v_mov_b32_e32 v0, v3 2016; NOPRT-NEXT: ; return to shader part epilog 2017; 2018; GFX10PLUS-LABEL: load_mip_2d_tfe_nouse_V2: 2019; GFX10PLUS: ; %bb.0: ; %main_body 2020; GFX10PLUS-NEXT: v_mov_b32_e32 v3, 0 2021; GFX10PLUS-NEXT: v_mov_b32_e32 v4, v3 2022; GFX10PLUS-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm tfe 2023; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 2024; GFX10PLUS-NEXT: v_mov_b32_e32 v0, v4 2025; GFX10PLUS-NEXT: ; return to shader part epilog 2026; 2027; GFX12-LABEL: load_mip_2d_tfe_nouse_V2: 2028; GFX12: ; %bb.0: ; %main_body 2029; GFX12-NEXT: v_mov_b32_e32 v3, 0 2030; GFX12-NEXT: v_mov_b32_e32 v4, v3 2031; GFX12-NEXT: image_load_mip v[3:4], [v0, v1, v2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D tfe 2032; GFX12-NEXT: s_wait_loadcnt 0x0 2033; GFX12-NEXT: v_mov_b32_e32 v0, v4 2034; GFX12-NEXT: ; return to shader part epilog 2035main_body: 2036 %v = call {<2 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v2f32i32.i32(i32 6, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0) 2037 %v.err = extractvalue {<2 x float>, i32} %v, 1 2038 %vv = bitcast i32 %v.err to float 2039 ret float %vv 2040} 2041 2042define amdgpu_ps float @load_mip_2d_tfe_nouse_V1(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) { 2043; VERDE-LABEL: load_mip_2d_tfe_nouse_V1: 2044; VERDE: ; %bb.0: ; %main_body 2045; VERDE-NEXT: v_mov_b32_e32 v3, 0 2046; VERDE-NEXT: v_mov_b32_e32 v4, v3 2047; VERDE-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x2 unorm tfe 2048; VERDE-NEXT: s_waitcnt vmcnt(0) 2049; VERDE-NEXT: v_mov_b32_e32 v0, v4 2050; VERDE-NEXT: ; return to shader part epilog 2051; 2052; FIJI-LABEL: load_mip_2d_tfe_nouse_V1: 2053; FIJI: ; %bb.0: ; %main_body 2054; FIJI-NEXT: v_mov_b32_e32 v3, 0 2055; FIJI-NEXT: v_mov_b32_e32 v4, v3 2056; FIJI-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x2 unorm tfe 2057; FIJI-NEXT: s_waitcnt vmcnt(0) 2058; FIJI-NEXT: v_mov_b32_e32 v0, v4 2059; FIJI-NEXT: ; return to shader part epilog 2060; 2061; GFX6789-LABEL: load_mip_2d_tfe_nouse_V1: 2062; GFX6789: ; %bb.0: ; %main_body 2063; GFX6789-NEXT: v_mov_b32_e32 v3, 0 2064; GFX6789-NEXT: v_mov_b32_e32 v4, v3 2065; GFX6789-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x2 unorm tfe 2066; GFX6789-NEXT: s_waitcnt vmcnt(0) 2067; GFX6789-NEXT: v_mov_b32_e32 v0, v4 2068; GFX6789-NEXT: ; return to shader part epilog 2069; 2070; NOPRT-LABEL: load_mip_2d_tfe_nouse_V1: 2071; NOPRT: ; %bb.0: ; %main_body 2072; NOPRT-NEXT: v_mov_b32_e32 v3, 0 2073; NOPRT-NEXT: image_load_mip v[2:3], v[0:2], s[0:7] dmask:0x2 unorm tfe 2074; NOPRT-NEXT: s_waitcnt vmcnt(0) 2075; NOPRT-NEXT: v_mov_b32_e32 v0, v3 2076; NOPRT-NEXT: ; return to shader part epilog 2077; 2078; GFX10PLUS-LABEL: load_mip_2d_tfe_nouse_V1: 2079; GFX10PLUS: ; %bb.0: ; %main_body 2080; GFX10PLUS-NEXT: v_mov_b32_e32 v3, 0 2081; GFX10PLUS-NEXT: v_mov_b32_e32 v4, v3 2082; GFX10PLUS-NEXT: image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_2D unorm tfe 2083; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 2084; GFX10PLUS-NEXT: v_mov_b32_e32 v0, v4 2085; GFX10PLUS-NEXT: ; return to shader part epilog 2086; 2087; GFX12-LABEL: load_mip_2d_tfe_nouse_V1: 2088; GFX12: ; %bb.0: ; %main_body 2089; GFX12-NEXT: v_mov_b32_e32 v3, 0 2090; GFX12-NEXT: v_mov_b32_e32 v4, v3 2091; GFX12-NEXT: image_load_mip v[3:4], [v0, v1, v2], s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_2D tfe 2092; GFX12-NEXT: s_wait_loadcnt 0x0 2093; GFX12-NEXT: v_mov_b32_e32 v0, v4 2094; GFX12-NEXT: ; return to shader part epilog 2095main_body: 2096 %v = call {float, i32} @llvm.amdgcn.image.load.mip.2d.f32i32.i32(i32 2, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0) 2097 %v.err = extractvalue {float, i32} %v, 1 2098 %vv = bitcast i32 %v.err to float 2099 ret float %vv 2100} 2101 2102define amdgpu_ps <4 x float> @load_1d_tfe_V4_dmask3(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s) { 2103; VERDE-LABEL: load_1d_tfe_V4_dmask3: 2104; VERDE: ; %bb.0: ; %main_body 2105; VERDE-NEXT: v_mov_b32_e32 v4, v0 2106; VERDE-NEXT: v_mov_b32_e32 v0, 0 2107; VERDE-NEXT: v_mov_b32_e32 v1, v0 2108; VERDE-NEXT: v_mov_b32_e32 v2, v0 2109; VERDE-NEXT: v_mov_b32_e32 v3, v0 2110; VERDE-NEXT: image_load v[0:3], v4, s[0:7] dmask:0x7 unorm tfe 2111; VERDE-NEXT: s_mov_b32 s11, 0xf000 2112; VERDE-NEXT: s_mov_b32 s10, -1 2113; VERDE-NEXT: s_waitcnt vmcnt(0) 2114; VERDE-NEXT: buffer_store_dword v3, off, s[8:11], 0 2115; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2116; VERDE-NEXT: ; return to shader part epilog 2117; 2118; FIJI-LABEL: load_1d_tfe_V4_dmask3: 2119; FIJI: ; %bb.0: ; %main_body 2120; FIJI-NEXT: v_mov_b32_e32 v4, v0 2121; FIJI-NEXT: v_mov_b32_e32 v0, 0 2122; FIJI-NEXT: v_mov_b32_e32 v1, v0 2123; FIJI-NEXT: v_mov_b32_e32 v2, v0 2124; FIJI-NEXT: v_mov_b32_e32 v3, v0 2125; FIJI-NEXT: image_load v[0:3], v4, s[0:7] dmask:0x7 unorm tfe 2126; FIJI-NEXT: s_mov_b32 s11, 0xf000 2127; FIJI-NEXT: s_mov_b32 s10, -1 2128; FIJI-NEXT: s_waitcnt vmcnt(0) 2129; FIJI-NEXT: buffer_store_dword v3, off, s[8:11], 0 2130; FIJI-NEXT: s_waitcnt vmcnt(0) 2131; FIJI-NEXT: ; return to shader part epilog 2132; 2133; GFX6789-LABEL: load_1d_tfe_V4_dmask3: 2134; GFX6789: ; %bb.0: ; %main_body 2135; GFX6789-NEXT: v_mov_b32_e32 v5, 0 2136; GFX6789-NEXT: v_mov_b32_e32 v4, v0 2137; GFX6789-NEXT: v_mov_b32_e32 v6, v5 2138; GFX6789-NEXT: v_mov_b32_e32 v7, v5 2139; GFX6789-NEXT: v_mov_b32_e32 v8, v5 2140; GFX6789-NEXT: v_mov_b32_e32 v0, v5 2141; GFX6789-NEXT: v_mov_b32_e32 v1, v6 2142; GFX6789-NEXT: v_mov_b32_e32 v2, v7 2143; GFX6789-NEXT: v_mov_b32_e32 v3, v8 2144; GFX6789-NEXT: image_load v[0:3], v4, s[0:7] dmask:0x7 unorm tfe 2145; GFX6789-NEXT: s_waitcnt vmcnt(0) 2146; GFX6789-NEXT: global_store_dword v5, v3, s[8:9] 2147; GFX6789-NEXT: s_waitcnt vmcnt(0) 2148; GFX6789-NEXT: ; return to shader part epilog 2149; 2150; NOPRT-LABEL: load_1d_tfe_V4_dmask3: 2151; NOPRT: ; %bb.0: ; %main_body 2152; NOPRT-NEXT: v_mov_b32_e32 v3, 0 2153; NOPRT-NEXT: image_load v[0:3], v0, s[0:7] dmask:0x7 unorm tfe 2154; NOPRT-NEXT: v_mov_b32_e32 v4, 0 2155; NOPRT-NEXT: s_waitcnt vmcnt(0) 2156; NOPRT-NEXT: global_store_dword v4, v3, s[8:9] 2157; NOPRT-NEXT: s_waitcnt vmcnt(0) 2158; NOPRT-NEXT: ; return to shader part epilog 2159; 2160; GFX10-LABEL: load_1d_tfe_V4_dmask3: 2161; GFX10: ; %bb.0: ; %main_body 2162; GFX10-NEXT: v_mov_b32_e32 v5, 0 2163; GFX10-NEXT: v_mov_b32_e32 v4, v0 2164; GFX10-NEXT: v_mov_b32_e32 v6, v5 2165; GFX10-NEXT: v_mov_b32_e32 v7, v5 2166; GFX10-NEXT: v_mov_b32_e32 v8, v5 2167; GFX10-NEXT: v_mov_b32_e32 v0, v5 2168; GFX10-NEXT: v_mov_b32_e32 v1, v6 2169; GFX10-NEXT: v_mov_b32_e32 v2, v7 2170; GFX10-NEXT: v_mov_b32_e32 v3, v8 2171; GFX10-NEXT: image_load v[0:3], v4, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm tfe 2172; GFX10-NEXT: s_waitcnt vmcnt(0) 2173; GFX10-NEXT: global_store_dword v5, v3, s[8:9] 2174; GFX10-NEXT: ; return to shader part epilog 2175; 2176; GFX11-LABEL: load_1d_tfe_V4_dmask3: 2177; GFX11: ; %bb.0: ; %main_body 2178; GFX11-NEXT: v_dual_mov_b32 v4, v0 :: v_dual_mov_b32 v5, 0 2179; GFX11-NEXT: v_mov_b32_e32 v6, v5 2180; GFX11-NEXT: v_mov_b32_e32 v7, v5 2181; GFX11-NEXT: v_mov_b32_e32 v8, v5 2182; GFX11-NEXT: v_dual_mov_b32 v0, v5 :: v_dual_mov_b32 v1, v6 2183; GFX11-NEXT: v_dual_mov_b32 v2, v7 :: v_dual_mov_b32 v3, v8 2184; GFX11-NEXT: image_load v[0:3], v4, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm tfe 2185; GFX11-NEXT: s_waitcnt vmcnt(0) 2186; GFX11-NEXT: global_store_b32 v5, v3, s[8:9] 2187; GFX11-NEXT: ; return to shader part epilog 2188; 2189; GFX12-LABEL: load_1d_tfe_V4_dmask3: 2190; GFX12: ; %bb.0: ; %main_body 2191; GFX12-NEXT: v_dual_mov_b32 v4, v0 :: v_dual_mov_b32 v5, 0 2192; GFX12-NEXT: v_dual_mov_b32 v6, v5 :: v_dual_mov_b32 v7, v5 2193; GFX12-NEXT: v_mov_b32_e32 v8, v5 2194; GFX12-NEXT: v_dual_mov_b32 v0, v5 :: v_dual_mov_b32 v1, v6 2195; GFX12-NEXT: v_dual_mov_b32 v2, v7 :: v_dual_mov_b32 v3, v8 2196; GFX12-NEXT: image_load v[0:3], v4, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D tfe 2197; GFX12-NEXT: s_wait_loadcnt 0x0 2198; GFX12-NEXT: global_store_b32 v5, v3, s[8:9] 2199; GFX12-NEXT: ; return to shader part epilog 2200main_body: 2201 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 7, i32 %s, <8 x i32> %rsrc, i32 1, i32 0) 2202 %v.vec = extractvalue {<4 x float>, i32} %v, 0 2203 %v.err = extractvalue {<4 x float>, i32} %v, 1 2204 store i32 %v.err, ptr addrspace(1) %out, align 4 2205 ret <4 x float> %v.vec 2206} 2207 2208define amdgpu_ps <4 x float> @load_1d_tfe_V4_dmask2(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s) { 2209; VERDE-LABEL: load_1d_tfe_V4_dmask2: 2210; VERDE: ; %bb.0: ; %main_body 2211; VERDE-NEXT: v_mov_b32_e32 v3, v0 2212; VERDE-NEXT: v_mov_b32_e32 v0, 0 2213; VERDE-NEXT: v_mov_b32_e32 v1, v0 2214; VERDE-NEXT: v_mov_b32_e32 v2, v0 2215; VERDE-NEXT: image_load v[0:2], v3, s[0:7] dmask:0x6 unorm tfe 2216; VERDE-NEXT: s_mov_b32 s11, 0xf000 2217; VERDE-NEXT: s_mov_b32 s10, -1 2218; VERDE-NEXT: s_waitcnt vmcnt(0) 2219; VERDE-NEXT: buffer_store_dword v2, off, s[8:11], 0 2220; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2221; VERDE-NEXT: ; return to shader part epilog 2222; 2223; FIJI-LABEL: load_1d_tfe_V4_dmask2: 2224; FIJI: ; %bb.0: ; %main_body 2225; FIJI-NEXT: v_mov_b32_e32 v3, v0 2226; FIJI-NEXT: v_mov_b32_e32 v0, 0 2227; FIJI-NEXT: v_mov_b32_e32 v1, v0 2228; FIJI-NEXT: v_mov_b32_e32 v2, v0 2229; FIJI-NEXT: image_load v[0:2], v3, s[0:7] dmask:0x6 unorm tfe 2230; FIJI-NEXT: s_mov_b32 s11, 0xf000 2231; FIJI-NEXT: s_mov_b32 s10, -1 2232; FIJI-NEXT: s_waitcnt vmcnt(0) 2233; FIJI-NEXT: buffer_store_dword v2, off, s[8:11], 0 2234; FIJI-NEXT: s_waitcnt vmcnt(0) 2235; FIJI-NEXT: ; return to shader part epilog 2236; 2237; GFX6789-LABEL: load_1d_tfe_V4_dmask2: 2238; GFX6789: ; %bb.0: ; %main_body 2239; GFX6789-NEXT: v_mov_b32_e32 v4, 0 2240; GFX6789-NEXT: v_mov_b32_e32 v3, v0 2241; GFX6789-NEXT: v_mov_b32_e32 v5, v4 2242; GFX6789-NEXT: v_mov_b32_e32 v6, v4 2243; GFX6789-NEXT: v_mov_b32_e32 v0, v4 2244; GFX6789-NEXT: v_mov_b32_e32 v1, v5 2245; GFX6789-NEXT: v_mov_b32_e32 v2, v6 2246; GFX6789-NEXT: image_load v[0:2], v3, s[0:7] dmask:0x6 unorm tfe 2247; GFX6789-NEXT: s_waitcnt vmcnt(0) 2248; GFX6789-NEXT: global_store_dword v4, v2, s[8:9] 2249; GFX6789-NEXT: s_waitcnt vmcnt(0) 2250; GFX6789-NEXT: ; return to shader part epilog 2251; 2252; NOPRT-LABEL: load_1d_tfe_V4_dmask2: 2253; NOPRT: ; %bb.0: ; %main_body 2254; NOPRT-NEXT: v_mov_b32_e32 v2, 0 2255; NOPRT-NEXT: image_load v[0:2], v0, s[0:7] dmask:0x6 unorm tfe 2256; NOPRT-NEXT: v_mov_b32_e32 v3, 0 2257; NOPRT-NEXT: s_waitcnt vmcnt(0) 2258; NOPRT-NEXT: global_store_dword v3, v2, s[8:9] 2259; NOPRT-NEXT: s_waitcnt vmcnt(0) 2260; NOPRT-NEXT: ; return to shader part epilog 2261; 2262; GFX10-LABEL: load_1d_tfe_V4_dmask2: 2263; GFX10: ; %bb.0: ; %main_body 2264; GFX10-NEXT: v_mov_b32_e32 v4, 0 2265; GFX10-NEXT: v_mov_b32_e32 v3, v0 2266; GFX10-NEXT: v_mov_b32_e32 v5, v4 2267; GFX10-NEXT: v_mov_b32_e32 v6, v4 2268; GFX10-NEXT: v_mov_b32_e32 v0, v4 2269; GFX10-NEXT: v_mov_b32_e32 v1, v5 2270; GFX10-NEXT: v_mov_b32_e32 v2, v6 2271; GFX10-NEXT: image_load v[0:2], v3, s[0:7] dmask:0x6 dim:SQ_RSRC_IMG_1D unorm tfe 2272; GFX10-NEXT: s_waitcnt vmcnt(0) 2273; GFX10-NEXT: global_store_dword v4, v2, s[8:9] 2274; GFX10-NEXT: ; return to shader part epilog 2275; 2276; GFX11-LABEL: load_1d_tfe_V4_dmask2: 2277; GFX11: ; %bb.0: ; %main_body 2278; GFX11-NEXT: v_dual_mov_b32 v3, v0 :: v_dual_mov_b32 v4, 0 2279; GFX11-NEXT: v_mov_b32_e32 v5, v4 2280; GFX11-NEXT: v_mov_b32_e32 v6, v4 2281; GFX11-NEXT: v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v5 2282; GFX11-NEXT: v_mov_b32_e32 v2, v6 2283; GFX11-NEXT: image_load v[0:2], v3, s[0:7] dmask:0x6 dim:SQ_RSRC_IMG_1D unorm tfe 2284; GFX11-NEXT: s_waitcnt vmcnt(0) 2285; GFX11-NEXT: global_store_b32 v4, v2, s[8:9] 2286; GFX11-NEXT: ; return to shader part epilog 2287; 2288; GFX12-LABEL: load_1d_tfe_V4_dmask2: 2289; GFX12: ; %bb.0: ; %main_body 2290; GFX12-NEXT: v_dual_mov_b32 v3, v0 :: v_dual_mov_b32 v4, 0 2291; GFX12-NEXT: v_dual_mov_b32 v5, v4 :: v_dual_mov_b32 v6, v4 2292; GFX12-NEXT: v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v5 2293; GFX12-NEXT: v_mov_b32_e32 v2, v6 2294; GFX12-NEXT: image_load v[0:2], v3, s[0:7] dmask:0x6 dim:SQ_RSRC_IMG_1D tfe 2295; GFX12-NEXT: s_wait_loadcnt 0x0 2296; GFX12-NEXT: global_store_b32 v4, v2, s[8:9] 2297; GFX12-NEXT: ; return to shader part epilog 2298main_body: 2299 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 6, i32 %s, <8 x i32> %rsrc, i32 1, i32 0) 2300 %v.vec = extractvalue {<4 x float>, i32} %v, 0 2301 %v.err = extractvalue {<4 x float>, i32} %v, 1 2302 store i32 %v.err, ptr addrspace(1) %out, align 4 2303 ret <4 x float> %v.vec 2304} 2305 2306define amdgpu_ps <4 x float> @load_1d_tfe_V4_dmask1(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s) { 2307; VERDE-LABEL: load_1d_tfe_V4_dmask1: 2308; VERDE: ; %bb.0: ; %main_body 2309; VERDE-NEXT: v_mov_b32_e32 v2, v0 2310; VERDE-NEXT: v_mov_b32_e32 v0, 0 2311; VERDE-NEXT: v_mov_b32_e32 v1, v0 2312; VERDE-NEXT: image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe 2313; VERDE-NEXT: s_mov_b32 s11, 0xf000 2314; VERDE-NEXT: s_mov_b32 s10, -1 2315; VERDE-NEXT: s_waitcnt vmcnt(0) 2316; VERDE-NEXT: buffer_store_dword v1, off, s[8:11], 0 2317; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2318; VERDE-NEXT: ; return to shader part epilog 2319; 2320; FIJI-LABEL: load_1d_tfe_V4_dmask1: 2321; FIJI: ; %bb.0: ; %main_body 2322; FIJI-NEXT: v_mov_b32_e32 v2, v0 2323; FIJI-NEXT: v_mov_b32_e32 v0, 0 2324; FIJI-NEXT: v_mov_b32_e32 v1, v0 2325; FIJI-NEXT: image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe 2326; FIJI-NEXT: s_mov_b32 s11, 0xf000 2327; FIJI-NEXT: s_mov_b32 s10, -1 2328; FIJI-NEXT: s_waitcnt vmcnt(0) 2329; FIJI-NEXT: buffer_store_dword v1, off, s[8:11], 0 2330; FIJI-NEXT: s_waitcnt vmcnt(0) 2331; FIJI-NEXT: ; return to shader part epilog 2332; 2333; GFX6789-LABEL: load_1d_tfe_V4_dmask1: 2334; GFX6789: ; %bb.0: ; %main_body 2335; GFX6789-NEXT: v_mov_b32_e32 v3, 0 2336; GFX6789-NEXT: v_mov_b32_e32 v2, v0 2337; GFX6789-NEXT: v_mov_b32_e32 v4, v3 2338; GFX6789-NEXT: v_mov_b32_e32 v0, v3 2339; GFX6789-NEXT: v_mov_b32_e32 v1, v4 2340; GFX6789-NEXT: image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe 2341; GFX6789-NEXT: s_waitcnt vmcnt(0) 2342; GFX6789-NEXT: global_store_dword v3, v1, s[8:9] 2343; GFX6789-NEXT: s_waitcnt vmcnt(0) 2344; GFX6789-NEXT: ; return to shader part epilog 2345; 2346; NOPRT-LABEL: load_1d_tfe_V4_dmask1: 2347; NOPRT: ; %bb.0: ; %main_body 2348; NOPRT-NEXT: v_mov_b32_e32 v1, 0 2349; NOPRT-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x8 unorm tfe 2350; NOPRT-NEXT: v_mov_b32_e32 v2, 0 2351; NOPRT-NEXT: s_waitcnt vmcnt(0) 2352; NOPRT-NEXT: global_store_dword v2, v1, s[8:9] 2353; NOPRT-NEXT: s_waitcnt vmcnt(0) 2354; NOPRT-NEXT: ; return to shader part epilog 2355; 2356; GFX10-LABEL: load_1d_tfe_V4_dmask1: 2357; GFX10: ; %bb.0: ; %main_body 2358; GFX10-NEXT: v_mov_b32_e32 v3, 0 2359; GFX10-NEXT: v_mov_b32_e32 v2, v0 2360; GFX10-NEXT: v_mov_b32_e32 v4, v3 2361; GFX10-NEXT: v_mov_b32_e32 v0, v3 2362; GFX10-NEXT: v_mov_b32_e32 v1, v4 2363; GFX10-NEXT: image_load v[0:1], v2, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm tfe 2364; GFX10-NEXT: s_waitcnt vmcnt(0) 2365; GFX10-NEXT: global_store_dword v3, v1, s[8:9] 2366; GFX10-NEXT: ; return to shader part epilog 2367; 2368; GFX11-LABEL: load_1d_tfe_V4_dmask1: 2369; GFX11: ; %bb.0: ; %main_body 2370; GFX11-NEXT: v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v3, 0 2371; GFX11-NEXT: v_mov_b32_e32 v4, v3 2372; GFX11-NEXT: v_dual_mov_b32 v0, v3 :: v_dual_mov_b32 v1, v4 2373; GFX11-NEXT: image_load v[0:1], v2, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm tfe 2374; GFX11-NEXT: s_waitcnt vmcnt(0) 2375; GFX11-NEXT: global_store_b32 v3, v1, s[8:9] 2376; GFX11-NEXT: ; return to shader part epilog 2377; 2378; GFX12-LABEL: load_1d_tfe_V4_dmask1: 2379; GFX12: ; %bb.0: ; %main_body 2380; GFX12-NEXT: v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v3, 0 2381; GFX12-NEXT: v_mov_b32_e32 v4, v3 2382; GFX12-NEXT: v_dual_mov_b32 v0, v3 :: v_dual_mov_b32 v1, v4 2383; GFX12-NEXT: image_load v[0:1], v2, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D tfe 2384; GFX12-NEXT: s_wait_loadcnt 0x0 2385; GFX12-NEXT: global_store_b32 v3, v1, s[8:9] 2386; GFX12-NEXT: ; return to shader part epilog 2387main_body: 2388 %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 8, i32 %s, <8 x i32> %rsrc, i32 1, i32 0) 2389 %v.vec = extractvalue {<4 x float>, i32} %v, 0 2390 %v.err = extractvalue {<4 x float>, i32} %v, 1 2391 store i32 %v.err, ptr addrspace(1) %out, align 4 2392 ret <4 x float> %v.vec 2393} 2394 2395define amdgpu_ps <2 x float> @load_1d_tfe_V2_dmask1(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s) { 2396; VERDE-LABEL: load_1d_tfe_V2_dmask1: 2397; VERDE: ; %bb.0: ; %main_body 2398; VERDE-NEXT: v_mov_b32_e32 v2, v0 2399; VERDE-NEXT: v_mov_b32_e32 v0, 0 2400; VERDE-NEXT: v_mov_b32_e32 v1, v0 2401; VERDE-NEXT: image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe 2402; VERDE-NEXT: s_mov_b32 s11, 0xf000 2403; VERDE-NEXT: s_mov_b32 s10, -1 2404; VERDE-NEXT: s_waitcnt vmcnt(0) 2405; VERDE-NEXT: buffer_store_dword v1, off, s[8:11], 0 2406; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 2407; VERDE-NEXT: ; return to shader part epilog 2408; 2409; FIJI-LABEL: load_1d_tfe_V2_dmask1: 2410; FIJI: ; %bb.0: ; %main_body 2411; FIJI-NEXT: v_mov_b32_e32 v2, v0 2412; FIJI-NEXT: v_mov_b32_e32 v0, 0 2413; FIJI-NEXT: v_mov_b32_e32 v1, v0 2414; FIJI-NEXT: image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe 2415; FIJI-NEXT: s_mov_b32 s11, 0xf000 2416; FIJI-NEXT: s_mov_b32 s10, -1 2417; FIJI-NEXT: s_waitcnt vmcnt(0) 2418; FIJI-NEXT: buffer_store_dword v1, off, s[8:11], 0 2419; FIJI-NEXT: s_waitcnt vmcnt(0) 2420; FIJI-NEXT: ; return to shader part epilog 2421; 2422; GFX6789-LABEL: load_1d_tfe_V2_dmask1: 2423; GFX6789: ; %bb.0: ; %main_body 2424; GFX6789-NEXT: v_mov_b32_e32 v3, 0 2425; GFX6789-NEXT: v_mov_b32_e32 v2, v0 2426; GFX6789-NEXT: v_mov_b32_e32 v4, v3 2427; GFX6789-NEXT: v_mov_b32_e32 v0, v3 2428; GFX6789-NEXT: v_mov_b32_e32 v1, v4 2429; GFX6789-NEXT: image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe 2430; GFX6789-NEXT: s_waitcnt vmcnt(0) 2431; GFX6789-NEXT: global_store_dword v3, v1, s[8:9] 2432; GFX6789-NEXT: s_waitcnt vmcnt(0) 2433; GFX6789-NEXT: ; return to shader part epilog 2434; 2435; NOPRT-LABEL: load_1d_tfe_V2_dmask1: 2436; NOPRT: ; %bb.0: ; %main_body 2437; NOPRT-NEXT: v_mov_b32_e32 v1, 0 2438; NOPRT-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x8 unorm tfe 2439; NOPRT-NEXT: v_mov_b32_e32 v2, 0 2440; NOPRT-NEXT: s_waitcnt vmcnt(0) 2441; NOPRT-NEXT: global_store_dword v2, v1, s[8:9] 2442; NOPRT-NEXT: s_waitcnt vmcnt(0) 2443; NOPRT-NEXT: ; return to shader part epilog 2444; 2445; GFX10-LABEL: load_1d_tfe_V2_dmask1: 2446; GFX10: ; %bb.0: ; %main_body 2447; GFX10-NEXT: v_mov_b32_e32 v3, 0 2448; GFX10-NEXT: v_mov_b32_e32 v2, v0 2449; GFX10-NEXT: v_mov_b32_e32 v4, v3 2450; GFX10-NEXT: v_mov_b32_e32 v0, v3 2451; GFX10-NEXT: v_mov_b32_e32 v1, v4 2452; GFX10-NEXT: image_load v[0:1], v2, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm tfe 2453; GFX10-NEXT: s_waitcnt vmcnt(0) 2454; GFX10-NEXT: global_store_dword v3, v1, s[8:9] 2455; GFX10-NEXT: ; return to shader part epilog 2456; 2457; GFX11-LABEL: load_1d_tfe_V2_dmask1: 2458; GFX11: ; %bb.0: ; %main_body 2459; GFX11-NEXT: v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v3, 0 2460; GFX11-NEXT: v_mov_b32_e32 v4, v3 2461; GFX11-NEXT: v_dual_mov_b32 v0, v3 :: v_dual_mov_b32 v1, v4 2462; GFX11-NEXT: image_load v[0:1], v2, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm tfe 2463; GFX11-NEXT: s_waitcnt vmcnt(0) 2464; GFX11-NEXT: global_store_b32 v3, v1, s[8:9] 2465; GFX11-NEXT: ; return to shader part epilog 2466; 2467; GFX12-LABEL: load_1d_tfe_V2_dmask1: 2468; GFX12: ; %bb.0: ; %main_body 2469; GFX12-NEXT: v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v3, 0 2470; GFX12-NEXT: v_mov_b32_e32 v4, v3 2471; GFX12-NEXT: v_dual_mov_b32 v0, v3 :: v_dual_mov_b32 v1, v4 2472; GFX12-NEXT: image_load v[0:1], v2, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D tfe 2473; GFX12-NEXT: s_wait_loadcnt 0x0 2474; GFX12-NEXT: global_store_b32 v3, v1, s[8:9] 2475; GFX12-NEXT: ; return to shader part epilog 2476main_body: 2477 %v = call {<2 x float>,i32} @llvm.amdgcn.image.load.1d.v2f32i32.i32(i32 8, i32 %s, <8 x i32> %rsrc, i32 1, i32 0) 2478 %v.vec = extractvalue {<2 x float>, i32} %v, 0 2479 %v.err = extractvalue {<2 x float>, i32} %v, 1 2480 store i32 %v.err, ptr addrspace(1) %out, align 4 2481 ret <2 x float> %v.vec 2482} 2483 2484 2485define amdgpu_ps <4 x float> @load_mip_3d(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %r, i32 %mip) { 2486; VERDE-LABEL: load_mip_3d: 2487; VERDE: ; %bb.0: ; %main_body 2488; VERDE-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm 2489; VERDE-NEXT: s_waitcnt vmcnt(0) 2490; VERDE-NEXT: ; return to shader part epilog 2491; 2492; FIJI-LABEL: load_mip_3d: 2493; FIJI: ; %bb.0: ; %main_body 2494; FIJI-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm 2495; FIJI-NEXT: s_waitcnt vmcnt(0) 2496; FIJI-NEXT: ; return to shader part epilog 2497; 2498; GFX6789-LABEL: load_mip_3d: 2499; GFX6789: ; %bb.0: ; %main_body 2500; GFX6789-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm 2501; GFX6789-NEXT: s_waitcnt vmcnt(0) 2502; GFX6789-NEXT: ; return to shader part epilog 2503; 2504; NOPRT-LABEL: load_mip_3d: 2505; NOPRT: ; %bb.0: ; %main_body 2506; NOPRT-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm 2507; NOPRT-NEXT: s_waitcnt vmcnt(0) 2508; NOPRT-NEXT: ; return to shader part epilog 2509; 2510; GFX10PLUS-LABEL: load_mip_3d: 2511; GFX10PLUS: ; %bb.0: ; %main_body 2512; GFX10PLUS-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm 2513; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 2514; GFX10PLUS-NEXT: ; return to shader part epilog 2515; 2516; GFX12-LABEL: load_mip_3d: 2517; GFX12: ; %bb.0: ; %main_body 2518; GFX12-NEXT: image_load_mip v[0:3], [v0, v1, v2, v3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D 2519; GFX12-NEXT: s_wait_loadcnt 0x0 2520; GFX12-NEXT: ; return to shader part epilog 2521main_body: 2522 %v = call <4 x float> @llvm.amdgcn.image.load.mip.3d.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %r, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 2523 ret <4 x float> %v 2524} 2525 2526define amdgpu_ps <4 x float> @load_mip_cube(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice, i32 %mip) { 2527; VERDE-LABEL: load_mip_cube: 2528; VERDE: ; %bb.0: ; %main_body 2529; VERDE-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da 2530; VERDE-NEXT: s_waitcnt vmcnt(0) 2531; VERDE-NEXT: ; return to shader part epilog 2532; 2533; FIJI-LABEL: load_mip_cube: 2534; FIJI: ; %bb.0: ; %main_body 2535; FIJI-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da 2536; FIJI-NEXT: s_waitcnt vmcnt(0) 2537; FIJI-NEXT: ; return to shader part epilog 2538; 2539; GFX6789-LABEL: load_mip_cube: 2540; GFX6789: ; %bb.0: ; %main_body 2541; GFX6789-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da 2542; GFX6789-NEXT: s_waitcnt vmcnt(0) 2543; GFX6789-NEXT: ; return to shader part epilog 2544; 2545; NOPRT-LABEL: load_mip_cube: 2546; NOPRT: ; %bb.0: ; %main_body 2547; NOPRT-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da 2548; NOPRT-NEXT: s_waitcnt vmcnt(0) 2549; NOPRT-NEXT: ; return to shader part epilog 2550; 2551; GFX10PLUS-LABEL: load_mip_cube: 2552; GFX10PLUS: ; %bb.0: ; %main_body 2553; GFX10PLUS-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm 2554; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 2555; GFX10PLUS-NEXT: ; return to shader part epilog 2556; 2557; GFX12-LABEL: load_mip_cube: 2558; GFX12: ; %bb.0: ; %main_body 2559; GFX12-NEXT: image_load_mip v[0:3], [v0, v1, v2, v3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE 2560; GFX12-NEXT: s_wait_loadcnt 0x0 2561; GFX12-NEXT: ; return to shader part epilog 2562main_body: 2563 %v = call <4 x float> @llvm.amdgcn.image.load.mip.cube.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 2564 ret <4 x float> %v 2565} 2566 2567define amdgpu_ps <4 x float> @load_mip_1darray(<8 x i32> inreg %rsrc, i32 %s, i32 %slice, i32 %mip) { 2568; VERDE-LABEL: load_mip_1darray: 2569; VERDE: ; %bb.0: ; %main_body 2570; VERDE-NEXT: image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm da 2571; VERDE-NEXT: s_waitcnt vmcnt(0) 2572; VERDE-NEXT: ; return to shader part epilog 2573; 2574; FIJI-LABEL: load_mip_1darray: 2575; FIJI: ; %bb.0: ; %main_body 2576; FIJI-NEXT: image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm da 2577; FIJI-NEXT: s_waitcnt vmcnt(0) 2578; FIJI-NEXT: ; return to shader part epilog 2579; 2580; GFX6789-LABEL: load_mip_1darray: 2581; GFX6789: ; %bb.0: ; %main_body 2582; GFX6789-NEXT: image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm da 2583; GFX6789-NEXT: s_waitcnt vmcnt(0) 2584; GFX6789-NEXT: ; return to shader part epilog 2585; 2586; NOPRT-LABEL: load_mip_1darray: 2587; NOPRT: ; %bb.0: ; %main_body 2588; NOPRT-NEXT: image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm da 2589; NOPRT-NEXT: s_waitcnt vmcnt(0) 2590; NOPRT-NEXT: ; return to shader part epilog 2591; 2592; GFX10PLUS-LABEL: load_mip_1darray: 2593; GFX10PLUS: ; %bb.0: ; %main_body 2594; GFX10PLUS-NEXT: image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm 2595; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 2596; GFX10PLUS-NEXT: ; return to shader part epilog 2597; 2598; GFX12-LABEL: load_mip_1darray: 2599; GFX12: ; %bb.0: ; %main_body 2600; GFX12-NEXT: image_load_mip v[0:3], [v0, v1, v2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY 2601; GFX12-NEXT: s_wait_loadcnt 0x0 2602; GFX12-NEXT: ; return to shader part epilog 2603main_body: 2604 %v = call <4 x float> @llvm.amdgcn.image.load.mip.1darray.v4f32.i32(i32 15, i32 %s, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 2605 ret <4 x float> %v 2606} 2607 2608define amdgpu_ps <4 x float> @load_mip_2darray(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice, i32 %mip) { 2609; VERDE-LABEL: load_mip_2darray: 2610; VERDE: ; %bb.0: ; %main_body 2611; VERDE-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da 2612; VERDE-NEXT: s_waitcnt vmcnt(0) 2613; VERDE-NEXT: ; return to shader part epilog 2614; 2615; FIJI-LABEL: load_mip_2darray: 2616; FIJI: ; %bb.0: ; %main_body 2617; FIJI-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da 2618; FIJI-NEXT: s_waitcnt vmcnt(0) 2619; FIJI-NEXT: ; return to shader part epilog 2620; 2621; GFX6789-LABEL: load_mip_2darray: 2622; GFX6789: ; %bb.0: ; %main_body 2623; GFX6789-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da 2624; GFX6789-NEXT: s_waitcnt vmcnt(0) 2625; GFX6789-NEXT: ; return to shader part epilog 2626; 2627; NOPRT-LABEL: load_mip_2darray: 2628; NOPRT: ; %bb.0: ; %main_body 2629; NOPRT-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da 2630; NOPRT-NEXT: s_waitcnt vmcnt(0) 2631; NOPRT-NEXT: ; return to shader part epilog 2632; 2633; GFX10PLUS-LABEL: load_mip_2darray: 2634; GFX10PLUS: ; %bb.0: ; %main_body 2635; GFX10PLUS-NEXT: image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm 2636; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 2637; GFX10PLUS-NEXT: ; return to shader part epilog 2638; 2639; GFX12-LABEL: load_mip_2darray: 2640; GFX12: ; %bb.0: ; %main_body 2641; GFX12-NEXT: image_load_mip v[0:3], [v0, v1, v2, v3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY 2642; GFX12-NEXT: s_wait_loadcnt 0x0 2643; GFX12-NEXT: ; return to shader part epilog 2644main_body: 2645 %v = call <4 x float> @llvm.amdgcn.image.load.mip.2darray.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 2646 ret <4 x float> %v 2647} 2648 2649define amdgpu_ps void @store_1d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) { 2650; VERDE-LABEL: store_1d: 2651; VERDE: ; %bb.0: ; %main_body 2652; VERDE-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm 2653; VERDE-NEXT: s_endpgm 2654; 2655; FIJI-LABEL: store_1d: 2656; FIJI: ; %bb.0: ; %main_body 2657; FIJI-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm 2658; FIJI-NEXT: s_endpgm 2659; 2660; GFX6789-LABEL: store_1d: 2661; GFX6789: ; %bb.0: ; %main_body 2662; GFX6789-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm 2663; GFX6789-NEXT: s_endpgm 2664; 2665; NOPRT-LABEL: store_1d: 2666; NOPRT: ; %bb.0: ; %main_body 2667; NOPRT-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm 2668; NOPRT-NEXT: s_endpgm 2669; 2670; GFX10PLUS-LABEL: store_1d: 2671; GFX10PLUS: ; %bb.0: ; %main_body 2672; GFX10PLUS-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 2673; GFX10PLUS-NEXT: s_endpgm 2674; 2675; GFX12-LABEL: store_1d: 2676; GFX12: ; %bb.0: ; %main_body 2677; GFX12-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D 2678; GFX12-NEXT: s_endpgm 2679main_body: 2680 call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 2681 ret void 2682} 2683 2684define amdgpu_ps void @store_2d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t) { 2685; VERDE-LABEL: store_2d: 2686; VERDE: ; %bb.0: ; %main_body 2687; VERDE-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2688; VERDE-NEXT: s_endpgm 2689; 2690; FIJI-LABEL: store_2d: 2691; FIJI: ; %bb.0: ; %main_body 2692; FIJI-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2693; FIJI-NEXT: s_endpgm 2694; 2695; GFX6789-LABEL: store_2d: 2696; GFX6789: ; %bb.0: ; %main_body 2697; GFX6789-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2698; GFX6789-NEXT: s_endpgm 2699; 2700; NOPRT-LABEL: store_2d: 2701; NOPRT: ; %bb.0: ; %main_body 2702; NOPRT-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2703; NOPRT-NEXT: s_endpgm 2704; 2705; GFX10PLUS-LABEL: store_2d: 2706; GFX10PLUS: ; %bb.0: ; %main_body 2707; GFX10PLUS-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm 2708; GFX10PLUS-NEXT: s_endpgm 2709; 2710; GFX12-LABEL: store_2d: 2711; GFX12: ; %bb.0: ; %main_body 2712; GFX12-NEXT: image_store v[0:3], [v4, v5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D 2713; GFX12-NEXT: s_endpgm 2714main_body: 2715 call void @llvm.amdgcn.image.store.2d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, <8 x i32> %rsrc, i32 0, i32 0) 2716 ret void 2717} 2718 2719define amdgpu_ps void @store_3d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %r) { 2720; VERDE-LABEL: store_3d: 2721; VERDE: ; %bb.0: ; %main_body 2722; VERDE-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2723; VERDE-NEXT: s_endpgm 2724; 2725; FIJI-LABEL: store_3d: 2726; FIJI: ; %bb.0: ; %main_body 2727; FIJI-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2728; FIJI-NEXT: s_endpgm 2729; 2730; GFX6789-LABEL: store_3d: 2731; GFX6789: ; %bb.0: ; %main_body 2732; GFX6789-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2733; GFX6789-NEXT: s_endpgm 2734; 2735; NOPRT-LABEL: store_3d: 2736; NOPRT: ; %bb.0: ; %main_body 2737; NOPRT-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2738; NOPRT-NEXT: s_endpgm 2739; 2740; GFX10PLUS-LABEL: store_3d: 2741; GFX10PLUS: ; %bb.0: ; %main_body 2742; GFX10PLUS-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm 2743; GFX10PLUS-NEXT: s_endpgm 2744; 2745; GFX12-LABEL: store_3d: 2746; GFX12: ; %bb.0: ; %main_body 2747; GFX12-NEXT: image_store v[0:3], [v4, v5, v6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D 2748; GFX12-NEXT: s_endpgm 2749main_body: 2750 call void @llvm.amdgcn.image.store.3d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %r, <8 x i32> %rsrc, i32 0, i32 0) 2751 ret void 2752} 2753 2754define amdgpu_ps void @store_cube(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice) { 2755; VERDE-LABEL: store_cube: 2756; VERDE: ; %bb.0: ; %main_body 2757; VERDE-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2758; VERDE-NEXT: s_endpgm 2759; 2760; FIJI-LABEL: store_cube: 2761; FIJI: ; %bb.0: ; %main_body 2762; FIJI-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2763; FIJI-NEXT: s_endpgm 2764; 2765; GFX6789-LABEL: store_cube: 2766; GFX6789: ; %bb.0: ; %main_body 2767; GFX6789-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2768; GFX6789-NEXT: s_endpgm 2769; 2770; NOPRT-LABEL: store_cube: 2771; NOPRT: ; %bb.0: ; %main_body 2772; NOPRT-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2773; NOPRT-NEXT: s_endpgm 2774; 2775; GFX10PLUS-LABEL: store_cube: 2776; GFX10PLUS: ; %bb.0: ; %main_body 2777; GFX10PLUS-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm 2778; GFX10PLUS-NEXT: s_endpgm 2779; 2780; GFX12-LABEL: store_cube: 2781; GFX12: ; %bb.0: ; %main_body 2782; GFX12-NEXT: image_store v[0:3], [v4, v5, v6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE 2783; GFX12-NEXT: s_endpgm 2784main_body: 2785 call void @llvm.amdgcn.image.store.cube.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0) 2786 ret void 2787} 2788 2789define amdgpu_ps void @store_1darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %slice) { 2790; VERDE-LABEL: store_1darray: 2791; VERDE: ; %bb.0: ; %main_body 2792; VERDE-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da 2793; VERDE-NEXT: s_endpgm 2794; 2795; FIJI-LABEL: store_1darray: 2796; FIJI: ; %bb.0: ; %main_body 2797; FIJI-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da 2798; FIJI-NEXT: s_endpgm 2799; 2800; GFX6789-LABEL: store_1darray: 2801; GFX6789: ; %bb.0: ; %main_body 2802; GFX6789-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da 2803; GFX6789-NEXT: s_endpgm 2804; 2805; NOPRT-LABEL: store_1darray: 2806; NOPRT: ; %bb.0: ; %main_body 2807; NOPRT-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da 2808; NOPRT-NEXT: s_endpgm 2809; 2810; GFX10PLUS-LABEL: store_1darray: 2811; GFX10PLUS: ; %bb.0: ; %main_body 2812; GFX10PLUS-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm 2813; GFX10PLUS-NEXT: s_endpgm 2814; 2815; GFX12-LABEL: store_1darray: 2816; GFX12: ; %bb.0: ; %main_body 2817; GFX12-NEXT: image_store v[0:3], [v4, v5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY 2818; GFX12-NEXT: s_endpgm 2819main_body: 2820 call void @llvm.amdgcn.image.store.1darray.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0) 2821 ret void 2822} 2823 2824define amdgpu_ps void @store_2darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice) { 2825; VERDE-LABEL: store_2darray: 2826; VERDE: ; %bb.0: ; %main_body 2827; VERDE-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2828; VERDE-NEXT: s_endpgm 2829; 2830; FIJI-LABEL: store_2darray: 2831; FIJI: ; %bb.0: ; %main_body 2832; FIJI-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2833; FIJI-NEXT: s_endpgm 2834; 2835; GFX6789-LABEL: store_2darray: 2836; GFX6789: ; %bb.0: ; %main_body 2837; GFX6789-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2838; GFX6789-NEXT: s_endpgm 2839; 2840; NOPRT-LABEL: store_2darray: 2841; NOPRT: ; %bb.0: ; %main_body 2842; NOPRT-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2843; NOPRT-NEXT: s_endpgm 2844; 2845; GFX10PLUS-LABEL: store_2darray: 2846; GFX10PLUS: ; %bb.0: ; %main_body 2847; GFX10PLUS-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm 2848; GFX10PLUS-NEXT: s_endpgm 2849; 2850; GFX12-LABEL: store_2darray: 2851; GFX12: ; %bb.0: ; %main_body 2852; GFX12-NEXT: image_store v[0:3], [v4, v5, v6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY 2853; GFX12-NEXT: s_endpgm 2854main_body: 2855 call void @llvm.amdgcn.image.store.2darray.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0) 2856 ret void 2857} 2858 2859define amdgpu_ps void @store_2dmsaa(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %fragid) { 2860; VERDE-LABEL: store_2dmsaa: 2861; VERDE: ; %bb.0: ; %main_body 2862; VERDE-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2863; VERDE-NEXT: s_endpgm 2864; 2865; FIJI-LABEL: store_2dmsaa: 2866; FIJI: ; %bb.0: ; %main_body 2867; FIJI-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2868; FIJI-NEXT: s_endpgm 2869; 2870; GFX6789-LABEL: store_2dmsaa: 2871; GFX6789: ; %bb.0: ; %main_body 2872; GFX6789-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2873; GFX6789-NEXT: s_endpgm 2874; 2875; NOPRT-LABEL: store_2dmsaa: 2876; NOPRT: ; %bb.0: ; %main_body 2877; NOPRT-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2878; NOPRT-NEXT: s_endpgm 2879; 2880; GFX10PLUS-LABEL: store_2dmsaa: 2881; GFX10PLUS: ; %bb.0: ; %main_body 2882; GFX10PLUS-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm 2883; GFX10PLUS-NEXT: s_endpgm 2884; 2885; GFX12-LABEL: store_2dmsaa: 2886; GFX12: ; %bb.0: ; %main_body 2887; GFX12-NEXT: image_store v[0:3], [v4, v5, v6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA 2888; GFX12-NEXT: s_endpgm 2889main_body: 2890 call void @llvm.amdgcn.image.store.2dmsaa.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0) 2891 ret void 2892} 2893 2894define amdgpu_ps void @store_2darraymsaa(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %fragid) { 2895; VERDE-LABEL: store_2darraymsaa: 2896; VERDE: ; %bb.0: ; %main_body 2897; VERDE-NEXT: image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2898; VERDE-NEXT: s_endpgm 2899; 2900; FIJI-LABEL: store_2darraymsaa: 2901; FIJI: ; %bb.0: ; %main_body 2902; FIJI-NEXT: image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2903; FIJI-NEXT: s_endpgm 2904; 2905; GFX6789-LABEL: store_2darraymsaa: 2906; GFX6789: ; %bb.0: ; %main_body 2907; GFX6789-NEXT: image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2908; GFX6789-NEXT: s_endpgm 2909; 2910; NOPRT-LABEL: store_2darraymsaa: 2911; NOPRT: ; %bb.0: ; %main_body 2912; NOPRT-NEXT: image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2913; NOPRT-NEXT: s_endpgm 2914; 2915; GFX10PLUS-LABEL: store_2darraymsaa: 2916; GFX10PLUS: ; %bb.0: ; %main_body 2917; GFX10PLUS-NEXT: image_store v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm 2918; GFX10PLUS-NEXT: s_endpgm 2919; 2920; GFX12-LABEL: store_2darraymsaa: 2921; GFX12: ; %bb.0: ; %main_body 2922; GFX12-NEXT: image_store v[0:3], [v4, v5, v6, v7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY 2923; GFX12-NEXT: s_endpgm 2924main_body: 2925 call void @llvm.amdgcn.image.store.2darraymsaa.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0) 2926 ret void 2927} 2928 2929define amdgpu_ps void @store_mip_1d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %mip) { 2930; VERDE-LABEL: store_mip_1d: 2931; VERDE: ; %bb.0: ; %main_body 2932; VERDE-NEXT: image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2933; VERDE-NEXT: s_endpgm 2934; 2935; FIJI-LABEL: store_mip_1d: 2936; FIJI: ; %bb.0: ; %main_body 2937; FIJI-NEXT: image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2938; FIJI-NEXT: s_endpgm 2939; 2940; GFX6789-LABEL: store_mip_1d: 2941; GFX6789: ; %bb.0: ; %main_body 2942; GFX6789-NEXT: image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2943; GFX6789-NEXT: s_endpgm 2944; 2945; NOPRT-LABEL: store_mip_1d: 2946; NOPRT: ; %bb.0: ; %main_body 2947; NOPRT-NEXT: image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2948; NOPRT-NEXT: s_endpgm 2949; 2950; GFX10PLUS-LABEL: store_mip_1d: 2951; GFX10PLUS: ; %bb.0: ; %main_body 2952; GFX10PLUS-NEXT: image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 2953; GFX10PLUS-NEXT: s_endpgm 2954; 2955; GFX12-LABEL: store_mip_1d: 2956; GFX12: ; %bb.0: ; %main_body 2957; GFX12-NEXT: image_store_mip v[0:3], [v4, v5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D 2958; GFX12-NEXT: s_endpgm 2959main_body: 2960 call void @llvm.amdgcn.image.store.mip.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 2961 ret void 2962} 2963 2964define amdgpu_ps void @store_mip_2d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %mip) { 2965; VERDE-LABEL: store_mip_2d: 2966; VERDE: ; %bb.0: ; %main_body 2967; VERDE-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2968; VERDE-NEXT: s_endpgm 2969; 2970; FIJI-LABEL: store_mip_2d: 2971; FIJI: ; %bb.0: ; %main_body 2972; FIJI-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2973; FIJI-NEXT: s_endpgm 2974; 2975; GFX6789-LABEL: store_mip_2d: 2976; GFX6789: ; %bb.0: ; %main_body 2977; GFX6789-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2978; GFX6789-NEXT: s_endpgm 2979; 2980; NOPRT-LABEL: store_mip_2d: 2981; NOPRT: ; %bb.0: ; %main_body 2982; NOPRT-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2983; NOPRT-NEXT: s_endpgm 2984; 2985; GFX10PLUS-LABEL: store_mip_2d: 2986; GFX10PLUS: ; %bb.0: ; %main_body 2987; GFX10PLUS-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm 2988; GFX10PLUS-NEXT: s_endpgm 2989; 2990; GFX12-LABEL: store_mip_2d: 2991; GFX12: ; %bb.0: ; %main_body 2992; GFX12-NEXT: image_store_mip v[0:3], [v4, v5, v6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D 2993; GFX12-NEXT: s_endpgm 2994main_body: 2995 call void @llvm.amdgcn.image.store.mip.2d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 2996 ret void 2997} 2998 2999define amdgpu_ps void @store_mip_3d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %r, i32 %mip) { 3000; VERDE-LABEL: store_mip_3d: 3001; VERDE: ; %bb.0: ; %main_body 3002; VERDE-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm 3003; VERDE-NEXT: s_endpgm 3004; 3005; FIJI-LABEL: store_mip_3d: 3006; FIJI: ; %bb.0: ; %main_body 3007; FIJI-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm 3008; FIJI-NEXT: s_endpgm 3009; 3010; GFX6789-LABEL: store_mip_3d: 3011; GFX6789: ; %bb.0: ; %main_body 3012; GFX6789-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm 3013; GFX6789-NEXT: s_endpgm 3014; 3015; NOPRT-LABEL: store_mip_3d: 3016; NOPRT: ; %bb.0: ; %main_body 3017; NOPRT-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm 3018; NOPRT-NEXT: s_endpgm 3019; 3020; GFX10PLUS-LABEL: store_mip_3d: 3021; GFX10PLUS: ; %bb.0: ; %main_body 3022; GFX10PLUS-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm 3023; GFX10PLUS-NEXT: s_endpgm 3024; 3025; GFX12-LABEL: store_mip_3d: 3026; GFX12: ; %bb.0: ; %main_body 3027; GFX12-NEXT: image_store_mip v[0:3], [v4, v5, v6, v7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D 3028; GFX12-NEXT: s_endpgm 3029main_body: 3030 call void @llvm.amdgcn.image.store.mip.3d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %r, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3031 ret void 3032} 3033 3034define amdgpu_ps void @store_mip_cube(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %mip) { 3035; VERDE-LABEL: store_mip_cube: 3036; VERDE: ; %bb.0: ; %main_body 3037; VERDE-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 3038; VERDE-NEXT: s_endpgm 3039; 3040; FIJI-LABEL: store_mip_cube: 3041; FIJI: ; %bb.0: ; %main_body 3042; FIJI-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 3043; FIJI-NEXT: s_endpgm 3044; 3045; GFX6789-LABEL: store_mip_cube: 3046; GFX6789: ; %bb.0: ; %main_body 3047; GFX6789-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 3048; GFX6789-NEXT: s_endpgm 3049; 3050; NOPRT-LABEL: store_mip_cube: 3051; NOPRT: ; %bb.0: ; %main_body 3052; NOPRT-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 3053; NOPRT-NEXT: s_endpgm 3054; 3055; GFX10PLUS-LABEL: store_mip_cube: 3056; GFX10PLUS: ; %bb.0: ; %main_body 3057; GFX10PLUS-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm 3058; GFX10PLUS-NEXT: s_endpgm 3059; 3060; GFX12-LABEL: store_mip_cube: 3061; GFX12: ; %bb.0: ; %main_body 3062; GFX12-NEXT: image_store_mip v[0:3], [v4, v5, v6, v7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE 3063; GFX12-NEXT: s_endpgm 3064main_body: 3065 call void @llvm.amdgcn.image.store.mip.cube.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3066 ret void 3067} 3068 3069define amdgpu_ps void @store_mip_1darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %slice, i32 %mip) { 3070; VERDE-LABEL: store_mip_1darray: 3071; VERDE: ; %bb.0: ; %main_body 3072; VERDE-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 3073; VERDE-NEXT: s_endpgm 3074; 3075; FIJI-LABEL: store_mip_1darray: 3076; FIJI: ; %bb.0: ; %main_body 3077; FIJI-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 3078; FIJI-NEXT: s_endpgm 3079; 3080; GFX6789-LABEL: store_mip_1darray: 3081; GFX6789: ; %bb.0: ; %main_body 3082; GFX6789-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 3083; GFX6789-NEXT: s_endpgm 3084; 3085; NOPRT-LABEL: store_mip_1darray: 3086; NOPRT: ; %bb.0: ; %main_body 3087; NOPRT-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 3088; NOPRT-NEXT: s_endpgm 3089; 3090; GFX10PLUS-LABEL: store_mip_1darray: 3091; GFX10PLUS: ; %bb.0: ; %main_body 3092; GFX10PLUS-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm 3093; GFX10PLUS-NEXT: s_endpgm 3094; 3095; GFX12-LABEL: store_mip_1darray: 3096; GFX12: ; %bb.0: ; %main_body 3097; GFX12-NEXT: image_store_mip v[0:3], [v4, v5, v6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY 3098; GFX12-NEXT: s_endpgm 3099main_body: 3100 call void @llvm.amdgcn.image.store.mip.1darray.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3101 ret void 3102} 3103 3104define amdgpu_ps void @store_mip_2darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %mip) { 3105; VERDE-LABEL: store_mip_2darray: 3106; VERDE: ; %bb.0: ; %main_body 3107; VERDE-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 3108; VERDE-NEXT: s_endpgm 3109; 3110; FIJI-LABEL: store_mip_2darray: 3111; FIJI: ; %bb.0: ; %main_body 3112; FIJI-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 3113; FIJI-NEXT: s_endpgm 3114; 3115; GFX6789-LABEL: store_mip_2darray: 3116; GFX6789: ; %bb.0: ; %main_body 3117; GFX6789-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 3118; GFX6789-NEXT: s_endpgm 3119; 3120; NOPRT-LABEL: store_mip_2darray: 3121; NOPRT: ; %bb.0: ; %main_body 3122; NOPRT-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 3123; NOPRT-NEXT: s_endpgm 3124; 3125; GFX10PLUS-LABEL: store_mip_2darray: 3126; GFX10PLUS: ; %bb.0: ; %main_body 3127; GFX10PLUS-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm 3128; GFX10PLUS-NEXT: s_endpgm 3129; 3130; GFX12-LABEL: store_mip_2darray: 3131; GFX12: ; %bb.0: ; %main_body 3132; GFX12-NEXT: image_store_mip v[0:3], [v4, v5, v6, v7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY 3133; GFX12-NEXT: s_endpgm 3134main_body: 3135 call void @llvm.amdgcn.image.store.mip.2darray.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3136 ret void 3137} 3138 3139define amdgpu_ps <4 x float> @getresinfo_1d(<8 x i32> inreg %rsrc, i32 %mip) { 3140; VERDE-LABEL: getresinfo_1d: 3141; VERDE: ; %bb.0: ; %main_body 3142; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3143; VERDE-NEXT: s_waitcnt vmcnt(0) 3144; VERDE-NEXT: ; return to shader part epilog 3145; 3146; FIJI-LABEL: getresinfo_1d: 3147; FIJI: ; %bb.0: ; %main_body 3148; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3149; FIJI-NEXT: s_waitcnt vmcnt(0) 3150; FIJI-NEXT: ; return to shader part epilog 3151; 3152; GFX6789-LABEL: getresinfo_1d: 3153; GFX6789: ; %bb.0: ; %main_body 3154; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3155; GFX6789-NEXT: s_waitcnt vmcnt(0) 3156; GFX6789-NEXT: ; return to shader part epilog 3157; 3158; NOPRT-LABEL: getresinfo_1d: 3159; NOPRT: ; %bb.0: ; %main_body 3160; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3161; NOPRT-NEXT: s_waitcnt vmcnt(0) 3162; NOPRT-NEXT: ; return to shader part epilog 3163; 3164; GFX10PLUS-LABEL: getresinfo_1d: 3165; GFX10PLUS: ; %bb.0: ; %main_body 3166; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 3167; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3168; GFX10PLUS-NEXT: ; return to shader part epilog 3169; 3170; GFX12-LABEL: getresinfo_1d: 3171; GFX12: ; %bb.0: ; %main_body 3172; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D 3173; GFX12-NEXT: s_wait_loadcnt 0x0 3174; GFX12-NEXT: ; return to shader part epilog 3175main_body: 3176 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3177 ret <4 x float> %v 3178} 3179 3180define amdgpu_ps <4 x float> @getresinfo_2d(<8 x i32> inreg %rsrc, i32 %mip) { 3181; VERDE-LABEL: getresinfo_2d: 3182; VERDE: ; %bb.0: ; %main_body 3183; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3184; VERDE-NEXT: s_waitcnt vmcnt(0) 3185; VERDE-NEXT: ; return to shader part epilog 3186; 3187; FIJI-LABEL: getresinfo_2d: 3188; FIJI: ; %bb.0: ; %main_body 3189; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3190; FIJI-NEXT: s_waitcnt vmcnt(0) 3191; FIJI-NEXT: ; return to shader part epilog 3192; 3193; GFX6789-LABEL: getresinfo_2d: 3194; GFX6789: ; %bb.0: ; %main_body 3195; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3196; GFX6789-NEXT: s_waitcnt vmcnt(0) 3197; GFX6789-NEXT: ; return to shader part epilog 3198; 3199; NOPRT-LABEL: getresinfo_2d: 3200; NOPRT: ; %bb.0: ; %main_body 3201; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3202; NOPRT-NEXT: s_waitcnt vmcnt(0) 3203; NOPRT-NEXT: ; return to shader part epilog 3204; 3205; GFX10PLUS-LABEL: getresinfo_2d: 3206; GFX10PLUS: ; %bb.0: ; %main_body 3207; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm 3208; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3209; GFX10PLUS-NEXT: ; return to shader part epilog 3210; 3211; GFX12-LABEL: getresinfo_2d: 3212; GFX12: ; %bb.0: ; %main_body 3213; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D 3214; GFX12-NEXT: s_wait_loadcnt 0x0 3215; GFX12-NEXT: ; return to shader part epilog 3216main_body: 3217 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3218 ret <4 x float> %v 3219} 3220 3221define amdgpu_ps <4 x float> @getresinfo_3d(<8 x i32> inreg %rsrc, i32 %mip) { 3222; VERDE-LABEL: getresinfo_3d: 3223; VERDE: ; %bb.0: ; %main_body 3224; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3225; VERDE-NEXT: s_waitcnt vmcnt(0) 3226; VERDE-NEXT: ; return to shader part epilog 3227; 3228; FIJI-LABEL: getresinfo_3d: 3229; FIJI: ; %bb.0: ; %main_body 3230; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3231; FIJI-NEXT: s_waitcnt vmcnt(0) 3232; FIJI-NEXT: ; return to shader part epilog 3233; 3234; GFX6789-LABEL: getresinfo_3d: 3235; GFX6789: ; %bb.0: ; %main_body 3236; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3237; GFX6789-NEXT: s_waitcnt vmcnt(0) 3238; GFX6789-NEXT: ; return to shader part epilog 3239; 3240; NOPRT-LABEL: getresinfo_3d: 3241; NOPRT: ; %bb.0: ; %main_body 3242; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3243; NOPRT-NEXT: s_waitcnt vmcnt(0) 3244; NOPRT-NEXT: ; return to shader part epilog 3245; 3246; GFX10PLUS-LABEL: getresinfo_3d: 3247; GFX10PLUS: ; %bb.0: ; %main_body 3248; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm 3249; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3250; GFX10PLUS-NEXT: ; return to shader part epilog 3251; 3252; GFX12-LABEL: getresinfo_3d: 3253; GFX12: ; %bb.0: ; %main_body 3254; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D 3255; GFX12-NEXT: s_wait_loadcnt 0x0 3256; GFX12-NEXT: ; return to shader part epilog 3257main_body: 3258 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3259 ret <4 x float> %v 3260} 3261 3262define amdgpu_ps <4 x float> @getresinfo_cube(<8 x i32> inreg %rsrc, i32 %mip) { 3263; VERDE-LABEL: getresinfo_cube: 3264; VERDE: ; %bb.0: ; %main_body 3265; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3266; VERDE-NEXT: s_waitcnt vmcnt(0) 3267; VERDE-NEXT: ; return to shader part epilog 3268; 3269; FIJI-LABEL: getresinfo_cube: 3270; FIJI: ; %bb.0: ; %main_body 3271; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3272; FIJI-NEXT: s_waitcnt vmcnt(0) 3273; FIJI-NEXT: ; return to shader part epilog 3274; 3275; GFX6789-LABEL: getresinfo_cube: 3276; GFX6789: ; %bb.0: ; %main_body 3277; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3278; GFX6789-NEXT: s_waitcnt vmcnt(0) 3279; GFX6789-NEXT: ; return to shader part epilog 3280; 3281; NOPRT-LABEL: getresinfo_cube: 3282; NOPRT: ; %bb.0: ; %main_body 3283; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3284; NOPRT-NEXT: s_waitcnt vmcnt(0) 3285; NOPRT-NEXT: ; return to shader part epilog 3286; 3287; GFX10PLUS-LABEL: getresinfo_cube: 3288; GFX10PLUS: ; %bb.0: ; %main_body 3289; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm 3290; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3291; GFX10PLUS-NEXT: ; return to shader part epilog 3292; 3293; GFX12-LABEL: getresinfo_cube: 3294; GFX12: ; %bb.0: ; %main_body 3295; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE 3296; GFX12-NEXT: s_wait_loadcnt 0x0 3297; GFX12-NEXT: ; return to shader part epilog 3298main_body: 3299 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3300 ret <4 x float> %v 3301} 3302 3303define amdgpu_ps <4 x float> @getresinfo_1darray(<8 x i32> inreg %rsrc, i32 %mip) { 3304; VERDE-LABEL: getresinfo_1darray: 3305; VERDE: ; %bb.0: ; %main_body 3306; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3307; VERDE-NEXT: s_waitcnt vmcnt(0) 3308; VERDE-NEXT: ; return to shader part epilog 3309; 3310; FIJI-LABEL: getresinfo_1darray: 3311; FIJI: ; %bb.0: ; %main_body 3312; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3313; FIJI-NEXT: s_waitcnt vmcnt(0) 3314; FIJI-NEXT: ; return to shader part epilog 3315; 3316; GFX6789-LABEL: getresinfo_1darray: 3317; GFX6789: ; %bb.0: ; %main_body 3318; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3319; GFX6789-NEXT: s_waitcnt vmcnt(0) 3320; GFX6789-NEXT: ; return to shader part epilog 3321; 3322; NOPRT-LABEL: getresinfo_1darray: 3323; NOPRT: ; %bb.0: ; %main_body 3324; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3325; NOPRT-NEXT: s_waitcnt vmcnt(0) 3326; NOPRT-NEXT: ; return to shader part epilog 3327; 3328; GFX10PLUS-LABEL: getresinfo_1darray: 3329; GFX10PLUS: ; %bb.0: ; %main_body 3330; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm 3331; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3332; GFX10PLUS-NEXT: ; return to shader part epilog 3333; 3334; GFX12-LABEL: getresinfo_1darray: 3335; GFX12: ; %bb.0: ; %main_body 3336; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY 3337; GFX12-NEXT: s_wait_loadcnt 0x0 3338; GFX12-NEXT: ; return to shader part epilog 3339main_body: 3340 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3341 ret <4 x float> %v 3342} 3343 3344define amdgpu_ps <4 x float> @getresinfo_2darray(<8 x i32> inreg %rsrc, i32 %mip) { 3345; VERDE-LABEL: getresinfo_2darray: 3346; VERDE: ; %bb.0: ; %main_body 3347; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3348; VERDE-NEXT: s_waitcnt vmcnt(0) 3349; VERDE-NEXT: ; return to shader part epilog 3350; 3351; FIJI-LABEL: getresinfo_2darray: 3352; FIJI: ; %bb.0: ; %main_body 3353; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3354; FIJI-NEXT: s_waitcnt vmcnt(0) 3355; FIJI-NEXT: ; return to shader part epilog 3356; 3357; GFX6789-LABEL: getresinfo_2darray: 3358; GFX6789: ; %bb.0: ; %main_body 3359; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3360; GFX6789-NEXT: s_waitcnt vmcnt(0) 3361; GFX6789-NEXT: ; return to shader part epilog 3362; 3363; NOPRT-LABEL: getresinfo_2darray: 3364; NOPRT: ; %bb.0: ; %main_body 3365; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3366; NOPRT-NEXT: s_waitcnt vmcnt(0) 3367; NOPRT-NEXT: ; return to shader part epilog 3368; 3369; GFX10PLUS-LABEL: getresinfo_2darray: 3370; GFX10PLUS: ; %bb.0: ; %main_body 3371; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm 3372; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3373; GFX10PLUS-NEXT: ; return to shader part epilog 3374; 3375; GFX12-LABEL: getresinfo_2darray: 3376; GFX12: ; %bb.0: ; %main_body 3377; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY 3378; GFX12-NEXT: s_wait_loadcnt 0x0 3379; GFX12-NEXT: ; return to shader part epilog 3380main_body: 3381 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3382 ret <4 x float> %v 3383} 3384 3385define amdgpu_ps <4 x float> @getresinfo_2dmsaa(<8 x i32> inreg %rsrc, i32 %mip) { 3386; VERDE-LABEL: getresinfo_2dmsaa: 3387; VERDE: ; %bb.0: ; %main_body 3388; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3389; VERDE-NEXT: s_waitcnt vmcnt(0) 3390; VERDE-NEXT: ; return to shader part epilog 3391; 3392; FIJI-LABEL: getresinfo_2dmsaa: 3393; FIJI: ; %bb.0: ; %main_body 3394; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3395; FIJI-NEXT: s_waitcnt vmcnt(0) 3396; FIJI-NEXT: ; return to shader part epilog 3397; 3398; GFX6789-LABEL: getresinfo_2dmsaa: 3399; GFX6789: ; %bb.0: ; %main_body 3400; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3401; GFX6789-NEXT: s_waitcnt vmcnt(0) 3402; GFX6789-NEXT: ; return to shader part epilog 3403; 3404; NOPRT-LABEL: getresinfo_2dmsaa: 3405; NOPRT: ; %bb.0: ; %main_body 3406; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3407; NOPRT-NEXT: s_waitcnt vmcnt(0) 3408; NOPRT-NEXT: ; return to shader part epilog 3409; 3410; GFX10PLUS-LABEL: getresinfo_2dmsaa: 3411; GFX10PLUS: ; %bb.0: ; %main_body 3412; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm 3413; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3414; GFX10PLUS-NEXT: ; return to shader part epilog 3415; 3416; GFX12-LABEL: getresinfo_2dmsaa: 3417; GFX12: ; %bb.0: ; %main_body 3418; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA 3419; GFX12-NEXT: s_wait_loadcnt 0x0 3420; GFX12-NEXT: ; return to shader part epilog 3421main_body: 3422 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3423 ret <4 x float> %v 3424} 3425 3426define amdgpu_ps <4 x float> @getresinfo_2darraymsaa(<8 x i32> inreg %rsrc, i32 %mip) { 3427; VERDE-LABEL: getresinfo_2darraymsaa: 3428; VERDE: ; %bb.0: ; %main_body 3429; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3430; VERDE-NEXT: s_waitcnt vmcnt(0) 3431; VERDE-NEXT: ; return to shader part epilog 3432; 3433; FIJI-LABEL: getresinfo_2darraymsaa: 3434; FIJI: ; %bb.0: ; %main_body 3435; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3436; FIJI-NEXT: s_waitcnt vmcnt(0) 3437; FIJI-NEXT: ; return to shader part epilog 3438; 3439; GFX6789-LABEL: getresinfo_2darraymsaa: 3440; GFX6789: ; %bb.0: ; %main_body 3441; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3442; GFX6789-NEXT: s_waitcnt vmcnt(0) 3443; GFX6789-NEXT: ; return to shader part epilog 3444; 3445; NOPRT-LABEL: getresinfo_2darraymsaa: 3446; NOPRT: ; %bb.0: ; %main_body 3447; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3448; NOPRT-NEXT: s_waitcnt vmcnt(0) 3449; NOPRT-NEXT: ; return to shader part epilog 3450; 3451; GFX10PLUS-LABEL: getresinfo_2darraymsaa: 3452; GFX10PLUS: ; %bb.0: ; %main_body 3453; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm 3454; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3455; GFX10PLUS-NEXT: ; return to shader part epilog 3456; 3457; GFX12-LABEL: getresinfo_2darraymsaa: 3458; GFX12: ; %bb.0: ; %main_body 3459; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY 3460; GFX12-NEXT: s_wait_loadcnt 0x0 3461; GFX12-NEXT: ; return to shader part epilog 3462main_body: 3463 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3464 ret <4 x float> %v 3465} 3466 3467define amdgpu_ps float @load_1d_V1(<8 x i32> inreg %rsrc, i32 %s) { 3468; VERDE-LABEL: load_1d_V1: 3469; VERDE: ; %bb.0: ; %main_body 3470; VERDE-NEXT: image_load v0, v0, s[0:7] dmask:0x8 unorm 3471; VERDE-NEXT: s_waitcnt vmcnt(0) 3472; VERDE-NEXT: ; return to shader part epilog 3473; 3474; FIJI-LABEL: load_1d_V1: 3475; FIJI: ; %bb.0: ; %main_body 3476; FIJI-NEXT: image_load v0, v0, s[0:7] dmask:0x8 unorm 3477; FIJI-NEXT: s_waitcnt vmcnt(0) 3478; FIJI-NEXT: ; return to shader part epilog 3479; 3480; GFX6789-LABEL: load_1d_V1: 3481; GFX6789: ; %bb.0: ; %main_body 3482; GFX6789-NEXT: image_load v0, v0, s[0:7] dmask:0x8 unorm 3483; GFX6789-NEXT: s_waitcnt vmcnt(0) 3484; GFX6789-NEXT: ; return to shader part epilog 3485; 3486; NOPRT-LABEL: load_1d_V1: 3487; NOPRT: ; %bb.0: ; %main_body 3488; NOPRT-NEXT: image_load v0, v0, s[0:7] dmask:0x8 unorm 3489; NOPRT-NEXT: s_waitcnt vmcnt(0) 3490; NOPRT-NEXT: ; return to shader part epilog 3491; 3492; GFX10PLUS-LABEL: load_1d_V1: 3493; GFX10PLUS: ; %bb.0: ; %main_body 3494; GFX10PLUS-NEXT: image_load v0, v0, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm 3495; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3496; GFX10PLUS-NEXT: ; return to shader part epilog 3497; 3498; GFX12-LABEL: load_1d_V1: 3499; GFX12: ; %bb.0: ; %main_body 3500; GFX12-NEXT: image_load v0, v0, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D 3501; GFX12-NEXT: s_wait_loadcnt 0x0 3502; GFX12-NEXT: ; return to shader part epilog 3503main_body: 3504 %v = call float @llvm.amdgcn.image.load.1d.f32.i32(i32 8, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 3505 ret float %v 3506} 3507 3508define amdgpu_ps <2 x float> @load_1d_V2(<8 x i32> inreg %rsrc, i32 %s) { 3509; VERDE-LABEL: load_1d_V2: 3510; VERDE: ; %bb.0: ; %main_body 3511; VERDE-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 unorm 3512; VERDE-NEXT: s_waitcnt vmcnt(0) 3513; VERDE-NEXT: ; return to shader part epilog 3514; 3515; FIJI-LABEL: load_1d_V2: 3516; FIJI: ; %bb.0: ; %main_body 3517; FIJI-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 unorm 3518; FIJI-NEXT: s_waitcnt vmcnt(0) 3519; FIJI-NEXT: ; return to shader part epilog 3520; 3521; GFX6789-LABEL: load_1d_V2: 3522; GFX6789: ; %bb.0: ; %main_body 3523; GFX6789-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 unorm 3524; GFX6789-NEXT: s_waitcnt vmcnt(0) 3525; GFX6789-NEXT: ; return to shader part epilog 3526; 3527; NOPRT-LABEL: load_1d_V2: 3528; NOPRT: ; %bb.0: ; %main_body 3529; NOPRT-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 unorm 3530; NOPRT-NEXT: s_waitcnt vmcnt(0) 3531; NOPRT-NEXT: ; return to shader part epilog 3532; 3533; GFX10PLUS-LABEL: load_1d_V2: 3534; GFX10PLUS: ; %bb.0: ; %main_body 3535; GFX10PLUS-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 dim:SQ_RSRC_IMG_1D unorm 3536; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3537; GFX10PLUS-NEXT: ; return to shader part epilog 3538; 3539; GFX12-LABEL: load_1d_V2: 3540; GFX12: ; %bb.0: ; %main_body 3541; GFX12-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 dim:SQ_RSRC_IMG_1D 3542; GFX12-NEXT: s_wait_loadcnt 0x0 3543; GFX12-NEXT: ; return to shader part epilog 3544main_body: 3545 %v = call <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32 9, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 3546 ret <2 x float> %v 3547} 3548 3549define amdgpu_ps void @store_1d_V1(<8 x i32> inreg %rsrc, float %vdata, i32 %s) { 3550; VERDE-LABEL: store_1d_V1: 3551; VERDE: ; %bb.0: ; %main_body 3552; VERDE-NEXT: image_store v0, v1, s[0:7] dmask:0x2 unorm 3553; VERDE-NEXT: s_endpgm 3554; 3555; FIJI-LABEL: store_1d_V1: 3556; FIJI: ; %bb.0: ; %main_body 3557; FIJI-NEXT: image_store v0, v1, s[0:7] dmask:0x2 unorm 3558; FIJI-NEXT: s_endpgm 3559; 3560; GFX6789-LABEL: store_1d_V1: 3561; GFX6789: ; %bb.0: ; %main_body 3562; GFX6789-NEXT: image_store v0, v1, s[0:7] dmask:0x2 unorm 3563; GFX6789-NEXT: s_endpgm 3564; 3565; NOPRT-LABEL: store_1d_V1: 3566; NOPRT: ; %bb.0: ; %main_body 3567; NOPRT-NEXT: image_store v0, v1, s[0:7] dmask:0x2 unorm 3568; NOPRT-NEXT: s_endpgm 3569; 3570; GFX10PLUS-LABEL: store_1d_V1: 3571; GFX10PLUS: ; %bb.0: ; %main_body 3572; GFX10PLUS-NEXT: image_store v0, v1, s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_1D unorm 3573; GFX10PLUS-NEXT: s_endpgm 3574; 3575; GFX12-LABEL: store_1d_V1: 3576; GFX12: ; %bb.0: ; %main_body 3577; GFX12-NEXT: image_store v0, v1, s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_1D 3578; GFX12-NEXT: s_endpgm 3579main_body: 3580 call void @llvm.amdgcn.image.store.1d.f32.i32(float %vdata, i32 2, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 3581 ret void 3582} 3583 3584define amdgpu_ps void @store_1d_V2(<8 x i32> inreg %rsrc, <2 x float> %vdata, i32 %s) { 3585; VERDE-LABEL: store_1d_V2: 3586; VERDE: ; %bb.0: ; %main_body 3587; VERDE-NEXT: image_store v[0:1], v2, s[0:7] dmask:0xc unorm 3588; VERDE-NEXT: s_endpgm 3589; 3590; FIJI-LABEL: store_1d_V2: 3591; FIJI: ; %bb.0: ; %main_body 3592; FIJI-NEXT: image_store v[0:1], v2, s[0:7] dmask:0xc unorm 3593; FIJI-NEXT: s_endpgm 3594; 3595; GFX6789-LABEL: store_1d_V2: 3596; GFX6789: ; %bb.0: ; %main_body 3597; GFX6789-NEXT: image_store v[0:1], v2, s[0:7] dmask:0xc unorm 3598; GFX6789-NEXT: s_endpgm 3599; 3600; NOPRT-LABEL: store_1d_V2: 3601; NOPRT: ; %bb.0: ; %main_body 3602; NOPRT-NEXT: image_store v[0:1], v2, s[0:7] dmask:0xc unorm 3603; NOPRT-NEXT: s_endpgm 3604; 3605; GFX10PLUS-LABEL: store_1d_V2: 3606; GFX10PLUS: ; %bb.0: ; %main_body 3607; GFX10PLUS-NEXT: image_store v[0:1], v2, s[0:7] dmask:0xc dim:SQ_RSRC_IMG_1D unorm 3608; GFX10PLUS-NEXT: s_endpgm 3609; 3610; GFX12-LABEL: store_1d_V2: 3611; GFX12: ; %bb.0: ; %main_body 3612; GFX12-NEXT: image_store v[0:1], v2, s[0:7] dmask:0xc dim:SQ_RSRC_IMG_1D 3613; GFX12-NEXT: s_endpgm 3614main_body: 3615 call void @llvm.amdgcn.image.store.1d.v2f32.i32(<2 x float> %vdata, i32 12, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 3616 ret void 3617} 3618 3619define amdgpu_ps <4 x float> @load_1d_glc(<8 x i32> inreg %rsrc, i32 %s) { 3620; VERDE-LABEL: load_1d_glc: 3621; VERDE: ; %bb.0: ; %main_body 3622; VERDE-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc 3623; VERDE-NEXT: s_waitcnt vmcnt(0) 3624; VERDE-NEXT: ; return to shader part epilog 3625; 3626; FIJI-LABEL: load_1d_glc: 3627; FIJI: ; %bb.0: ; %main_body 3628; FIJI-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc 3629; FIJI-NEXT: s_waitcnt vmcnt(0) 3630; FIJI-NEXT: ; return to shader part epilog 3631; 3632; GFX6789-LABEL: load_1d_glc: 3633; GFX6789: ; %bb.0: ; %main_body 3634; GFX6789-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc 3635; GFX6789-NEXT: s_waitcnt vmcnt(0) 3636; GFX6789-NEXT: ; return to shader part epilog 3637; 3638; NOPRT-LABEL: load_1d_glc: 3639; NOPRT: ; %bb.0: ; %main_body 3640; NOPRT-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc 3641; NOPRT-NEXT: s_waitcnt vmcnt(0) 3642; NOPRT-NEXT: ; return to shader part epilog 3643; 3644; GFX10PLUS-LABEL: load_1d_glc: 3645; GFX10PLUS: ; %bb.0: ; %main_body 3646; GFX10PLUS-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc 3647; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3648; GFX10PLUS-NEXT: ; return to shader part epilog 3649; 3650; GFX12-LABEL: load_1d_glc: 3651; GFX12: ; %bb.0: ; %main_body 3652; GFX12-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D th:TH_LOAD_NT 3653; GFX12-NEXT: s_wait_loadcnt 0x0 3654; GFX12-NEXT: ; return to shader part epilog 3655main_body: 3656 %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 1) 3657 ret <4 x float> %v 3658} 3659 3660define amdgpu_ps <4 x float> @load_1d_slc(<8 x i32> inreg %rsrc, i32 %s) { 3661; VERDE-LABEL: load_1d_slc: 3662; VERDE: ; %bb.0: ; %main_body 3663; VERDE-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc 3664; VERDE-NEXT: s_waitcnt vmcnt(0) 3665; VERDE-NEXT: ; return to shader part epilog 3666; 3667; FIJI-LABEL: load_1d_slc: 3668; FIJI: ; %bb.0: ; %main_body 3669; FIJI-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc 3670; FIJI-NEXT: s_waitcnt vmcnt(0) 3671; FIJI-NEXT: ; return to shader part epilog 3672; 3673; GFX6789-LABEL: load_1d_slc: 3674; GFX6789: ; %bb.0: ; %main_body 3675; GFX6789-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc 3676; GFX6789-NEXT: s_waitcnt vmcnt(0) 3677; GFX6789-NEXT: ; return to shader part epilog 3678; 3679; NOPRT-LABEL: load_1d_slc: 3680; NOPRT: ; %bb.0: ; %main_body 3681; NOPRT-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc 3682; NOPRT-NEXT: s_waitcnt vmcnt(0) 3683; NOPRT-NEXT: ; return to shader part epilog 3684; 3685; GFX10PLUS-LABEL: load_1d_slc: 3686; GFX10PLUS: ; %bb.0: ; %main_body 3687; GFX10PLUS-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc 3688; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3689; GFX10PLUS-NEXT: ; return to shader part epilog 3690; 3691; GFX12-LABEL: load_1d_slc: 3692; GFX12: ; %bb.0: ; %main_body 3693; GFX12-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D th:TH_LOAD_HT 3694; GFX12-NEXT: s_wait_loadcnt 0x0 3695; GFX12-NEXT: ; return to shader part epilog 3696main_body: 3697 %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 2) 3698 ret <4 x float> %v 3699} 3700 3701define amdgpu_ps <4 x float> @load_1d_glc_slc(<8 x i32> inreg %rsrc, i32 %s) { 3702; VERDE-LABEL: load_1d_glc_slc: 3703; VERDE: ; %bb.0: ; %main_body 3704; VERDE-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc 3705; VERDE-NEXT: s_waitcnt vmcnt(0) 3706; VERDE-NEXT: ; return to shader part epilog 3707; 3708; FIJI-LABEL: load_1d_glc_slc: 3709; FIJI: ; %bb.0: ; %main_body 3710; FIJI-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc 3711; FIJI-NEXT: s_waitcnt vmcnt(0) 3712; FIJI-NEXT: ; return to shader part epilog 3713; 3714; GFX6789-LABEL: load_1d_glc_slc: 3715; GFX6789: ; %bb.0: ; %main_body 3716; GFX6789-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc 3717; GFX6789-NEXT: s_waitcnt vmcnt(0) 3718; GFX6789-NEXT: ; return to shader part epilog 3719; 3720; NOPRT-LABEL: load_1d_glc_slc: 3721; NOPRT: ; %bb.0: ; %main_body 3722; NOPRT-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc 3723; NOPRT-NEXT: s_waitcnt vmcnt(0) 3724; NOPRT-NEXT: ; return to shader part epilog 3725; 3726; GFX10PLUS-LABEL: load_1d_glc_slc: 3727; GFX10PLUS: ; %bb.0: ; %main_body 3728; GFX10PLUS-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc 3729; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3730; GFX10PLUS-NEXT: ; return to shader part epilog 3731; 3732; GFX12-LABEL: load_1d_glc_slc: 3733; GFX12: ; %bb.0: ; %main_body 3734; GFX12-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D th:TH_LOAD_LU 3735; GFX12-NEXT: s_wait_loadcnt 0x0 3736; GFX12-NEXT: ; return to shader part epilog 3737main_body: 3738 %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 3) 3739 ret <4 x float> %v 3740} 3741 3742define amdgpu_ps void @store_1d_glc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) { 3743; VERDE-LABEL: store_1d_glc: 3744; VERDE: ; %bb.0: ; %main_body 3745; VERDE-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc 3746; VERDE-NEXT: s_endpgm 3747; 3748; FIJI-LABEL: store_1d_glc: 3749; FIJI: ; %bb.0: ; %main_body 3750; FIJI-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc 3751; FIJI-NEXT: s_endpgm 3752; 3753; GFX6789-LABEL: store_1d_glc: 3754; GFX6789: ; %bb.0: ; %main_body 3755; GFX6789-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc 3756; GFX6789-NEXT: s_endpgm 3757; 3758; NOPRT-LABEL: store_1d_glc: 3759; NOPRT: ; %bb.0: ; %main_body 3760; NOPRT-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc 3761; NOPRT-NEXT: s_endpgm 3762; 3763; GFX10PLUS-LABEL: store_1d_glc: 3764; GFX10PLUS: ; %bb.0: ; %main_body 3765; GFX10PLUS-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc 3766; GFX10PLUS-NEXT: s_endpgm 3767; 3768; GFX12-LABEL: store_1d_glc: 3769; GFX12: ; %bb.0: ; %main_body 3770; GFX12-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D th:TH_STORE_NT 3771; GFX12-NEXT: s_endpgm 3772main_body: 3773 call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 1) 3774 ret void 3775} 3776 3777define amdgpu_ps void @store_1d_slc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) { 3778; VERDE-LABEL: store_1d_slc: 3779; VERDE: ; %bb.0: ; %main_body 3780; VERDE-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc 3781; VERDE-NEXT: s_endpgm 3782; 3783; FIJI-LABEL: store_1d_slc: 3784; FIJI: ; %bb.0: ; %main_body 3785; FIJI-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc 3786; FIJI-NEXT: s_endpgm 3787; 3788; GFX6789-LABEL: store_1d_slc: 3789; GFX6789: ; %bb.0: ; %main_body 3790; GFX6789-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc 3791; GFX6789-NEXT: s_endpgm 3792; 3793; NOPRT-LABEL: store_1d_slc: 3794; NOPRT: ; %bb.0: ; %main_body 3795; NOPRT-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc 3796; NOPRT-NEXT: s_endpgm 3797; 3798; GFX10PLUS-LABEL: store_1d_slc: 3799; GFX10PLUS: ; %bb.0: ; %main_body 3800; GFX10PLUS-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc 3801; GFX10PLUS-NEXT: s_endpgm 3802; 3803; GFX12-LABEL: store_1d_slc: 3804; GFX12: ; %bb.0: ; %main_body 3805; GFX12-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D th:TH_STORE_HT 3806; GFX12-NEXT: s_endpgm 3807main_body: 3808 call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 2) 3809 ret void 3810} 3811 3812define amdgpu_ps void @store_1d_glc_slc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) { 3813; VERDE-LABEL: store_1d_glc_slc: 3814; VERDE: ; %bb.0: ; %main_body 3815; VERDE-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc 3816; VERDE-NEXT: s_endpgm 3817; 3818; FIJI-LABEL: store_1d_glc_slc: 3819; FIJI: ; %bb.0: ; %main_body 3820; FIJI-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc 3821; FIJI-NEXT: s_endpgm 3822; 3823; GFX6789-LABEL: store_1d_glc_slc: 3824; GFX6789: ; %bb.0: ; %main_body 3825; GFX6789-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc 3826; GFX6789-NEXT: s_endpgm 3827; 3828; NOPRT-LABEL: store_1d_glc_slc: 3829; NOPRT: ; %bb.0: ; %main_body 3830; NOPRT-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc 3831; NOPRT-NEXT: s_endpgm 3832; 3833; GFX10PLUS-LABEL: store_1d_glc_slc: 3834; GFX10PLUS: ; %bb.0: ; %main_body 3835; GFX10PLUS-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc 3836; GFX10PLUS-NEXT: s_endpgm 3837; 3838; GFX12-LABEL: store_1d_glc_slc: 3839; GFX12: ; %bb.0: ; %main_body 3840; GFX12-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D th:TH_STORE_RT_WB 3841; GFX12-NEXT: s_endpgm 3842main_body: 3843 call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 3) 3844 ret void 3845} 3846 3847define amdgpu_ps <3 x float> @getresinfo_dmask7(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) { 3848; VERDE-LABEL: getresinfo_dmask7: 3849; VERDE: ; %bb.0: ; %main_body 3850; VERDE-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm 3851; VERDE-NEXT: s_waitcnt vmcnt(0) 3852; VERDE-NEXT: ; return to shader part epilog 3853; 3854; FIJI-LABEL: getresinfo_dmask7: 3855; FIJI: ; %bb.0: ; %main_body 3856; FIJI-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm 3857; FIJI-NEXT: s_waitcnt vmcnt(0) 3858; FIJI-NEXT: ; return to shader part epilog 3859; 3860; GFX6789-LABEL: getresinfo_dmask7: 3861; GFX6789: ; %bb.0: ; %main_body 3862; GFX6789-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm 3863; GFX6789-NEXT: s_waitcnt vmcnt(0) 3864; GFX6789-NEXT: ; return to shader part epilog 3865; 3866; NOPRT-LABEL: getresinfo_dmask7: 3867; NOPRT: ; %bb.0: ; %main_body 3868; NOPRT-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm 3869; NOPRT-NEXT: s_waitcnt vmcnt(0) 3870; NOPRT-NEXT: ; return to shader part epilog 3871; 3872; GFX10PLUS-LABEL: getresinfo_dmask7: 3873; GFX10PLUS: ; %bb.0: ; %main_body 3874; GFX10PLUS-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm 3875; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3876; GFX10PLUS-NEXT: ; return to shader part epilog 3877; 3878; GFX12-LABEL: getresinfo_dmask7: 3879; GFX12: ; %bb.0: ; %main_body 3880; GFX12-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D 3881; GFX12-NEXT: s_wait_loadcnt 0x0 3882; GFX12-NEXT: ; return to shader part epilog 3883main_body: 3884 %r = call <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 7, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3885 ret <3 x float> %r 3886} 3887 3888define amdgpu_ps <2 x float> @getresinfo_dmask3(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) { 3889; VERDE-LABEL: getresinfo_dmask3: 3890; VERDE: ; %bb.0: ; %main_body 3891; VERDE-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm 3892; VERDE-NEXT: s_waitcnt vmcnt(0) 3893; VERDE-NEXT: ; return to shader part epilog 3894; 3895; FIJI-LABEL: getresinfo_dmask3: 3896; FIJI: ; %bb.0: ; %main_body 3897; FIJI-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm 3898; FIJI-NEXT: s_waitcnt vmcnt(0) 3899; FIJI-NEXT: ; return to shader part epilog 3900; 3901; GFX6789-LABEL: getresinfo_dmask3: 3902; GFX6789: ; %bb.0: ; %main_body 3903; GFX6789-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm 3904; GFX6789-NEXT: s_waitcnt vmcnt(0) 3905; GFX6789-NEXT: ; return to shader part epilog 3906; 3907; NOPRT-LABEL: getresinfo_dmask3: 3908; NOPRT: ; %bb.0: ; %main_body 3909; NOPRT-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm 3910; NOPRT-NEXT: s_waitcnt vmcnt(0) 3911; NOPRT-NEXT: ; return to shader part epilog 3912; 3913; GFX10PLUS-LABEL: getresinfo_dmask3: 3914; GFX10PLUS: ; %bb.0: ; %main_body 3915; GFX10PLUS-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm 3916; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3917; GFX10PLUS-NEXT: ; return to shader part epilog 3918; 3919; GFX12-LABEL: getresinfo_dmask3: 3920; GFX12: ; %bb.0: ; %main_body 3921; GFX12-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D 3922; GFX12-NEXT: s_wait_loadcnt 0x0 3923; GFX12-NEXT: ; return to shader part epilog 3924main_body: 3925 %r = call <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 3, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3926 ret <2 x float> %r 3927} 3928 3929define amdgpu_ps float @getresinfo_dmask1(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) { 3930; VERDE-LABEL: getresinfo_dmask1: 3931; VERDE: ; %bb.0: ; %main_body 3932; VERDE-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm 3933; VERDE-NEXT: s_waitcnt vmcnt(0) 3934; VERDE-NEXT: ; return to shader part epilog 3935; 3936; FIJI-LABEL: getresinfo_dmask1: 3937; FIJI: ; %bb.0: ; %main_body 3938; FIJI-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm 3939; FIJI-NEXT: s_waitcnt vmcnt(0) 3940; FIJI-NEXT: ; return to shader part epilog 3941; 3942; GFX6789-LABEL: getresinfo_dmask1: 3943; GFX6789: ; %bb.0: ; %main_body 3944; GFX6789-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm 3945; GFX6789-NEXT: s_waitcnt vmcnt(0) 3946; GFX6789-NEXT: ; return to shader part epilog 3947; 3948; NOPRT-LABEL: getresinfo_dmask1: 3949; NOPRT: ; %bb.0: ; %main_body 3950; NOPRT-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm 3951; NOPRT-NEXT: s_waitcnt vmcnt(0) 3952; NOPRT-NEXT: ; return to shader part epilog 3953; 3954; GFX10PLUS-LABEL: getresinfo_dmask1: 3955; GFX10PLUS: ; %bb.0: ; %main_body 3956; GFX10PLUS-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm 3957; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3958; GFX10PLUS-NEXT: ; return to shader part epilog 3959; 3960; GFX12-LABEL: getresinfo_dmask1: 3961; GFX12: ; %bb.0: ; %main_body 3962; GFX12-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D 3963; GFX12-NEXT: s_wait_loadcnt 0x0 3964; GFX12-NEXT: ; return to shader part epilog 3965main_body: 3966 %r = call float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 1, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3967 ret float %r 3968} 3969 3970define amdgpu_ps <4 x float> @getresinfo_dmask0(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) #0 { 3971; VERDE-LABEL: getresinfo_dmask0: 3972; VERDE: ; %bb.0: ; %main_body 3973; VERDE-NEXT: ; return to shader part epilog 3974; 3975; FIJI-LABEL: getresinfo_dmask0: 3976; FIJI: ; %bb.0: ; %main_body 3977; FIJI-NEXT: ; return to shader part epilog 3978; 3979; GFX6789-LABEL: getresinfo_dmask0: 3980; GFX6789: ; %bb.0: ; %main_body 3981; GFX6789-NEXT: ; return to shader part epilog 3982; 3983; NOPRT-LABEL: getresinfo_dmask0: 3984; NOPRT: ; %bb.0: ; %main_body 3985; NOPRT-NEXT: ; return to shader part epilog 3986; 3987; GFX10PLUS-LABEL: getresinfo_dmask0: 3988; GFX10PLUS: ; %bb.0: ; %main_body 3989; GFX10PLUS-NEXT: ; return to shader part epilog 3990; 3991; GFX12-LABEL: getresinfo_dmask0: 3992; GFX12: ; %bb.0: ; %main_body 3993; GFX12-NEXT: ; return to shader part epilog 3994main_body: 3995 %r = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 0, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3996 ret <4 x float> %r 3997} 3998 3999; 4000define amdgpu_ps void @image_store_wait(<8 x i32> inreg %arg, <8 x i32> inreg %arg1, <8 x i32> inreg %arg2, <4 x float> %arg3, i32 %arg4) #0 { 4001; VERDE-LABEL: image_store_wait: 4002; VERDE: ; %bb.0: ; %main_body 4003; VERDE-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm 4004; VERDE-NEXT: s_waitcnt expcnt(0) 4005; VERDE-NEXT: image_load v[0:3], v4, s[8:15] dmask:0xf unorm 4006; VERDE-NEXT: s_waitcnt vmcnt(0) 4007; VERDE-NEXT: image_store v[0:3], v4, s[16:23] dmask:0xf unorm 4008; VERDE-NEXT: s_endpgm 4009; 4010; FIJI-LABEL: image_store_wait: 4011; FIJI: ; %bb.0: ; %main_body 4012; FIJI-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm 4013; FIJI-NEXT: image_load v[0:3], v4, s[8:15] dmask:0xf unorm 4014; FIJI-NEXT: s_waitcnt vmcnt(0) 4015; FIJI-NEXT: image_store v[0:3], v4, s[16:23] dmask:0xf unorm 4016; FIJI-NEXT: s_endpgm 4017; 4018; GFX6789-LABEL: image_store_wait: 4019; GFX6789: ; %bb.0: ; %main_body 4020; GFX6789-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm 4021; GFX6789-NEXT: image_load v[0:3], v4, s[8:15] dmask:0xf unorm 4022; GFX6789-NEXT: s_waitcnt vmcnt(0) 4023; GFX6789-NEXT: image_store v[0:3], v4, s[16:23] dmask:0xf unorm 4024; GFX6789-NEXT: s_endpgm 4025; 4026; NOPRT-LABEL: image_store_wait: 4027; NOPRT: ; %bb.0: ; %main_body 4028; NOPRT-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm 4029; NOPRT-NEXT: image_load v[0:3], v4, s[8:15] dmask:0xf unorm 4030; NOPRT-NEXT: s_waitcnt vmcnt(0) 4031; NOPRT-NEXT: image_store v[0:3], v4, s[16:23] dmask:0xf unorm 4032; NOPRT-NEXT: s_endpgm 4033; 4034; GFX10PLUS-LABEL: image_store_wait: 4035; GFX10PLUS: ; %bb.0: ; %main_body 4036; GFX10PLUS-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 4037; GFX10PLUS-NEXT: image_load v[0:3], v4, s[8:15] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 4038; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 4039; GFX10PLUS-NEXT: image_store v[0:3], v4, s[16:23] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 4040; GFX10PLUS-NEXT: s_endpgm 4041; 4042; GFX12-LABEL: image_store_wait: 4043; GFX12: ; %bb.0: ; %main_body 4044; GFX12-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D 4045; GFX12-NEXT: image_load v[0:3], v4, s[8:15] dmask:0xf dim:SQ_RSRC_IMG_1D 4046; GFX12-NEXT: s_wait_loadcnt 0x0 4047; GFX12-NEXT: image_store v[0:3], v4, s[16:23] dmask:0xf dim:SQ_RSRC_IMG_1D 4048; GFX12-NEXT: s_endpgm 4049main_body: 4050 call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %arg3, i32 15, i32 %arg4, <8 x i32> %arg, i32 0, i32 0) 4051 %data = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %arg4, <8 x i32> %arg1, i32 0, i32 0) 4052 call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %data, i32 15, i32 %arg4, <8 x i32> %arg2, i32 0, i32 0) 4053 ret void 4054} 4055 4056define amdgpu_ps float @image_load_mmo(<8 x i32> inreg %rsrc, ptr addrspace(3) %lds, <2 x i32> %c) #0 { 4057; VERDE-LABEL: image_load_mmo: 4058; VERDE: ; %bb.0: 4059; VERDE-NEXT: image_load v1, v[1:2], s[0:7] dmask:0x1 unorm 4060; VERDE-NEXT: v_mov_b32_e32 v2, 0 4061; VERDE-NEXT: s_mov_b32 m0, -1 4062; VERDE-NEXT: ds_write_b32 v0, v2 4063; VERDE-NEXT: v_add_i32_e32 v0, vcc, 16, v0 4064; VERDE-NEXT: ds_write_b32 v0, v2 4065; VERDE-NEXT: s_waitcnt vmcnt(0) 4066; VERDE-NEXT: v_mov_b32_e32 v0, v1 4067; VERDE-NEXT: s_waitcnt lgkmcnt(0) 4068; VERDE-NEXT: ; return to shader part epilog 4069; 4070; FIJI-LABEL: image_load_mmo: 4071; FIJI: ; %bb.0: 4072; FIJI-NEXT: image_load v1, v[1:2], s[0:7] dmask:0x1 unorm 4073; FIJI-NEXT: v_mov_b32_e32 v2, 0 4074; FIJI-NEXT: s_mov_b32 m0, -1 4075; FIJI-NEXT: ds_write2_b32 v0, v2, v2 offset1:4 4076; FIJI-NEXT: s_waitcnt vmcnt(0) 4077; FIJI-NEXT: v_mov_b32_e32 v0, v1 4078; FIJI-NEXT: s_waitcnt lgkmcnt(0) 4079; FIJI-NEXT: ; return to shader part epilog 4080; 4081; GFX6789-LABEL: image_load_mmo: 4082; GFX6789: ; %bb.0: 4083; GFX6789-NEXT: image_load v1, v[1:2], s[0:7] dmask:0x1 unorm 4084; GFX6789-NEXT: v_mov_b32_e32 v2, 0 4085; GFX6789-NEXT: ds_write2_b32 v0, v2, v2 offset1:4 4086; GFX6789-NEXT: s_waitcnt vmcnt(0) 4087; GFX6789-NEXT: v_mov_b32_e32 v0, v1 4088; GFX6789-NEXT: s_waitcnt lgkmcnt(0) 4089; GFX6789-NEXT: ; return to shader part epilog 4090; 4091; NOPRT-LABEL: image_load_mmo: 4092; NOPRT: ; %bb.0: 4093; NOPRT-NEXT: image_load v1, v[1:2], s[0:7] dmask:0x1 unorm 4094; NOPRT-NEXT: v_mov_b32_e32 v2, 0 4095; NOPRT-NEXT: ds_write2_b32 v0, v2, v2 offset1:4 4096; NOPRT-NEXT: s_waitcnt vmcnt(0) 4097; NOPRT-NEXT: v_mov_b32_e32 v0, v1 4098; NOPRT-NEXT: s_waitcnt lgkmcnt(0) 4099; NOPRT-NEXT: ; return to shader part epilog 4100; 4101; GFX10-LABEL: image_load_mmo: 4102; GFX10: ; %bb.0: 4103; GFX10-NEXT: image_load v1, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm 4104; GFX10-NEXT: v_mov_b32_e32 v2, 0 4105; GFX10-NEXT: ds_write2_b32 v0, v2, v2 offset1:4 4106; GFX10-NEXT: s_waitcnt vmcnt(0) 4107; GFX10-NEXT: v_mov_b32_e32 v0, v1 4108; GFX10-NEXT: s_waitcnt lgkmcnt(0) 4109; GFX10-NEXT: ; return to shader part epilog 4110; 4111; GFX11-LABEL: image_load_mmo: 4112; GFX11: ; %bb.0: 4113; GFX11-NEXT: image_load v1, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm 4114; GFX11-NEXT: v_mov_b32_e32 v2, 0 4115; GFX11-NEXT: ds_store_2addr_b32 v0, v2, v2 offset1:4 4116; GFX11-NEXT: s_waitcnt vmcnt(0) 4117; GFX11-NEXT: v_mov_b32_e32 v0, v1 4118; GFX11-NEXT: s_waitcnt lgkmcnt(0) 4119; GFX11-NEXT: ; return to shader part epilog 4120; 4121; GFX12-LABEL: image_load_mmo: 4122; GFX12: ; %bb.0: 4123; GFX12-NEXT: image_load v1, [v1, v2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D 4124; GFX12-NEXT: v_mov_b32_e32 v2, 0 4125; GFX12-NEXT: ds_store_2addr_b32 v0, v2, v2 offset1:4 4126; GFX12-NEXT: s_wait_loadcnt 0x0 4127; GFX12-NEXT: v_mov_b32_e32 v0, v1 4128; GFX12-NEXT: s_wait_dscnt 0x0 4129; GFX12-NEXT: ; return to shader part epilog 4130 store float 0.000000e+00, ptr addrspace(3) %lds 4131 %c0 = extractelement <2 x i32> %c, i32 0 4132 %c1 = extractelement <2 x i32> %c, i32 1 4133 %tex = call float @llvm.amdgcn.image.load.2d.f32.i32(i32 1, i32 %c0, i32 %c1, <8 x i32> %rsrc, i32 0, i32 0) 4134 %tmp2 = getelementptr float, ptr addrspace(3) %lds, i32 4 4135 store float 0.000000e+00, ptr addrspace(3) %tmp2 4136 ret float %tex 4137} 4138 4139declare <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #1 4140declare {float,i32} @llvm.amdgcn.image.load.1d.f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1 4141declare {<2 x float>,i32} @llvm.amdgcn.image.load.1d.v2f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1 4142declare {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1 4143declare <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1 4144declare {<4 x float>,i32} @llvm.amdgcn.image.load.2d.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1 4145declare <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4146declare {<4 x float>,i32} @llvm.amdgcn.image.load.3d.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4147declare <4 x float> @llvm.amdgcn.image.load.cube.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4148declare {<4 x float>,i32} @llvm.amdgcn.image.load.cube.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4149declare <4 x float> @llvm.amdgcn.image.load.1darray.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1 4150declare {<4 x float>,i32} @llvm.amdgcn.image.load.1darray.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1 4151declare <4 x float> @llvm.amdgcn.image.load.2darray.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4152declare {<4 x float>,i32} @llvm.amdgcn.image.load.2darray.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4153declare <4 x float> @llvm.amdgcn.image.load.2dmsaa.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4154declare {<4 x float>,i32} @llvm.amdgcn.image.load.2dmsaa.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4155declare <4 x float> @llvm.amdgcn.image.load.2darraymsaa.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4156declare {<4 x float>,i32} @llvm.amdgcn.image.load.2darraymsaa.v4f32i32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4157 4158declare <4 x float> @llvm.amdgcn.image.load.mip.1d.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1 4159declare <4 x float> @llvm.amdgcn.image.load.mip.2d.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4160declare {<4 x float>,i32} @llvm.amdgcn.image.load.mip.1d.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1 4161declare {<4 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4162declare {<2 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v2f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4163declare {float,i32} @llvm.amdgcn.image.load.mip.2d.f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4164declare <4 x float> @llvm.amdgcn.image.load.mip.3d.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4165declare <4 x float> @llvm.amdgcn.image.load.mip.cube.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4166declare <4 x float> @llvm.amdgcn.image.load.mip.1darray.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4167declare <4 x float> @llvm.amdgcn.image.load.mip.2darray.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1 4168 4169declare void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float>, i32, i32, <8 x i32>, i32, i32) #0 4170declare void @llvm.amdgcn.image.store.2d.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0 4171declare void @llvm.amdgcn.image.store.3d.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 4172declare void @llvm.amdgcn.image.store.cube.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 4173declare void @llvm.amdgcn.image.store.1darray.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0 4174declare void @llvm.amdgcn.image.store.2darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 4175declare void @llvm.amdgcn.image.store.2dmsaa.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 4176declare void @llvm.amdgcn.image.store.2darraymsaa.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 4177 4178declare void @llvm.amdgcn.image.store.mip.1d.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0 4179declare void @llvm.amdgcn.image.store.mip.2d.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 4180declare void @llvm.amdgcn.image.store.mip.3d.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 4181declare void @llvm.amdgcn.image.store.mip.cube.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 4182declare void @llvm.amdgcn.image.store.mip.1darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 4183declare void @llvm.amdgcn.image.store.mip.2darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 4184 4185declare <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 4186declare <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 4187declare <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 4188declare float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 4189declare <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 4190declare <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 4191declare <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 4192declare <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 4193declare <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 4194declare <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 4195declare <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 4196 4197declare float @llvm.amdgcn.image.load.1d.f32.i32(i32, i32, <8 x i32>, i32, i32) #1 4198declare float @llvm.amdgcn.image.load.2d.f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1 4199declare <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32, i32, <8 x i32>, i32, i32) #1 4200declare void @llvm.amdgcn.image.store.1d.f32.i32(float, i32, i32, <8 x i32>, i32, i32) #0 4201declare void @llvm.amdgcn.image.store.1d.v2f32.i32(<2 x float>, i32, i32, <8 x i32>, i32, i32) #0 4202 4203attributes #0 = { nounwind } 4204attributes #1 = { nounwind readonly } 4205attributes #2 = { nounwind readnone } 4206