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