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