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; GFX10PLUS-LABEL: store_1d: 2441; GFX10PLUS: ; %bb.0: ; %main_body 2442; GFX10PLUS-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 2443; GFX10PLUS-NEXT: s_endpgm 2444main_body: 2445 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) 2446 ret void 2447} 2448 2449define amdgpu_ps void @store_2d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t) { 2450; VERDE-LABEL: store_2d: 2451; VERDE: ; %bb.0: ; %main_body 2452; VERDE-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2453; VERDE-NEXT: s_endpgm 2454; 2455; FIJI-LABEL: store_2d: 2456; FIJI: ; %bb.0: ; %main_body 2457; FIJI-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2458; FIJI-NEXT: s_endpgm 2459; 2460; GFX6789-LABEL: store_2d: 2461; GFX6789: ; %bb.0: ; %main_body 2462; GFX6789-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2463; GFX6789-NEXT: s_endpgm 2464; 2465; NOPRT-LABEL: store_2d: 2466; NOPRT: ; %bb.0: ; %main_body 2467; NOPRT-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2468; NOPRT-NEXT: s_endpgm 2469; 2470; GFX10PLUS-LABEL: store_2d: 2471; GFX10PLUS: ; %bb.0: ; %main_body 2472; GFX10PLUS-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm 2473; GFX10PLUS-NEXT: s_endpgm 2474main_body: 2475 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) 2476 ret void 2477} 2478 2479define amdgpu_ps void @store_3d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %r) { 2480; VERDE-LABEL: store_3d: 2481; VERDE: ; %bb.0: ; %main_body 2482; VERDE-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2483; VERDE-NEXT: s_endpgm 2484; 2485; FIJI-LABEL: store_3d: 2486; FIJI: ; %bb.0: ; %main_body 2487; FIJI-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2488; FIJI-NEXT: s_endpgm 2489; 2490; GFX6789-LABEL: store_3d: 2491; GFX6789: ; %bb.0: ; %main_body 2492; GFX6789-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2493; GFX6789-NEXT: s_endpgm 2494; 2495; NOPRT-LABEL: store_3d: 2496; NOPRT: ; %bb.0: ; %main_body 2497; NOPRT-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2498; NOPRT-NEXT: s_endpgm 2499; 2500; GFX10PLUS-LABEL: store_3d: 2501; GFX10PLUS: ; %bb.0: ; %main_body 2502; GFX10PLUS-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm 2503; GFX10PLUS-NEXT: s_endpgm 2504main_body: 2505 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) 2506 ret void 2507} 2508 2509define amdgpu_ps void @store_cube(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice) { 2510; VERDE-LABEL: store_cube: 2511; VERDE: ; %bb.0: ; %main_body 2512; VERDE-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2513; VERDE-NEXT: s_endpgm 2514; 2515; FIJI-LABEL: store_cube: 2516; FIJI: ; %bb.0: ; %main_body 2517; FIJI-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2518; FIJI-NEXT: s_endpgm 2519; 2520; GFX6789-LABEL: store_cube: 2521; GFX6789: ; %bb.0: ; %main_body 2522; GFX6789-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2523; GFX6789-NEXT: s_endpgm 2524; 2525; NOPRT-LABEL: store_cube: 2526; NOPRT: ; %bb.0: ; %main_body 2527; NOPRT-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2528; NOPRT-NEXT: s_endpgm 2529; 2530; GFX10PLUS-LABEL: store_cube: 2531; GFX10PLUS: ; %bb.0: ; %main_body 2532; GFX10PLUS-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm 2533; GFX10PLUS-NEXT: s_endpgm 2534main_body: 2535 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) 2536 ret void 2537} 2538 2539define amdgpu_ps void @store_1darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %slice) { 2540; VERDE-LABEL: store_1darray: 2541; VERDE: ; %bb.0: ; %main_body 2542; VERDE-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da 2543; VERDE-NEXT: s_endpgm 2544; 2545; FIJI-LABEL: store_1darray: 2546; FIJI: ; %bb.0: ; %main_body 2547; FIJI-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da 2548; FIJI-NEXT: s_endpgm 2549; 2550; GFX6789-LABEL: store_1darray: 2551; GFX6789: ; %bb.0: ; %main_body 2552; GFX6789-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da 2553; GFX6789-NEXT: s_endpgm 2554; 2555; NOPRT-LABEL: store_1darray: 2556; NOPRT: ; %bb.0: ; %main_body 2557; NOPRT-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da 2558; NOPRT-NEXT: s_endpgm 2559; 2560; GFX10PLUS-LABEL: store_1darray: 2561; GFX10PLUS: ; %bb.0: ; %main_body 2562; GFX10PLUS-NEXT: image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm 2563; GFX10PLUS-NEXT: s_endpgm 2564main_body: 2565 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) 2566 ret void 2567} 2568 2569define amdgpu_ps void @store_2darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice) { 2570; VERDE-LABEL: store_2darray: 2571; VERDE: ; %bb.0: ; %main_body 2572; VERDE-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2573; VERDE-NEXT: s_endpgm 2574; 2575; FIJI-LABEL: store_2darray: 2576; FIJI: ; %bb.0: ; %main_body 2577; FIJI-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2578; FIJI-NEXT: s_endpgm 2579; 2580; GFX6789-LABEL: store_2darray: 2581; GFX6789: ; %bb.0: ; %main_body 2582; GFX6789-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2583; GFX6789-NEXT: s_endpgm 2584; 2585; NOPRT-LABEL: store_2darray: 2586; NOPRT: ; %bb.0: ; %main_body 2587; NOPRT-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2588; NOPRT-NEXT: s_endpgm 2589; 2590; GFX10PLUS-LABEL: store_2darray: 2591; GFX10PLUS: ; %bb.0: ; %main_body 2592; GFX10PLUS-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm 2593; GFX10PLUS-NEXT: s_endpgm 2594main_body: 2595 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) 2596 ret void 2597} 2598 2599define amdgpu_ps void @store_2dmsaa(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %fragid) { 2600; VERDE-LABEL: store_2dmsaa: 2601; VERDE: ; %bb.0: ; %main_body 2602; VERDE-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2603; VERDE-NEXT: s_endpgm 2604; 2605; FIJI-LABEL: store_2dmsaa: 2606; FIJI: ; %bb.0: ; %main_body 2607; FIJI-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2608; FIJI-NEXT: s_endpgm 2609; 2610; GFX6789-LABEL: store_2dmsaa: 2611; GFX6789: ; %bb.0: ; %main_body 2612; GFX6789-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2613; GFX6789-NEXT: s_endpgm 2614; 2615; NOPRT-LABEL: store_2dmsaa: 2616; NOPRT: ; %bb.0: ; %main_body 2617; NOPRT-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2618; NOPRT-NEXT: s_endpgm 2619; 2620; GFX10PLUS-LABEL: store_2dmsaa: 2621; GFX10PLUS: ; %bb.0: ; %main_body 2622; GFX10PLUS-NEXT: image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm 2623; GFX10PLUS-NEXT: s_endpgm 2624main_body: 2625 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) 2626 ret void 2627} 2628 2629define amdgpu_ps void @store_2darraymsaa(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %fragid) { 2630; VERDE-LABEL: store_2darraymsaa: 2631; VERDE: ; %bb.0: ; %main_body 2632; VERDE-NEXT: image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2633; VERDE-NEXT: s_endpgm 2634; 2635; FIJI-LABEL: store_2darraymsaa: 2636; FIJI: ; %bb.0: ; %main_body 2637; FIJI-NEXT: image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2638; FIJI-NEXT: s_endpgm 2639; 2640; GFX6789-LABEL: store_2darraymsaa: 2641; GFX6789: ; %bb.0: ; %main_body 2642; GFX6789-NEXT: image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2643; GFX6789-NEXT: s_endpgm 2644; 2645; NOPRT-LABEL: store_2darraymsaa: 2646; NOPRT: ; %bb.0: ; %main_body 2647; NOPRT-NEXT: image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2648; NOPRT-NEXT: s_endpgm 2649; 2650; GFX10PLUS-LABEL: store_2darraymsaa: 2651; GFX10PLUS: ; %bb.0: ; %main_body 2652; GFX10PLUS-NEXT: image_store v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm 2653; GFX10PLUS-NEXT: s_endpgm 2654main_body: 2655 call void @llvm.amdgcn.image.store.2darraymsaa.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0) 2656 ret void 2657} 2658 2659define amdgpu_ps void @store_mip_1d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %mip) { 2660; VERDE-LABEL: store_mip_1d: 2661; VERDE: ; %bb.0: ; %main_body 2662; VERDE-NEXT: image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2663; VERDE-NEXT: s_endpgm 2664; 2665; FIJI-LABEL: store_mip_1d: 2666; FIJI: ; %bb.0: ; %main_body 2667; FIJI-NEXT: image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2668; FIJI-NEXT: s_endpgm 2669; 2670; GFX6789-LABEL: store_mip_1d: 2671; GFX6789: ; %bb.0: ; %main_body 2672; GFX6789-NEXT: image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2673; GFX6789-NEXT: s_endpgm 2674; 2675; NOPRT-LABEL: store_mip_1d: 2676; NOPRT: ; %bb.0: ; %main_body 2677; NOPRT-NEXT: image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm 2678; NOPRT-NEXT: s_endpgm 2679; 2680; GFX10PLUS-LABEL: store_mip_1d: 2681; GFX10PLUS: ; %bb.0: ; %main_body 2682; GFX10PLUS-NEXT: image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 2683; GFX10PLUS-NEXT: s_endpgm 2684main_body: 2685 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) 2686 ret void 2687} 2688 2689define amdgpu_ps void @store_mip_2d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %mip) { 2690; VERDE-LABEL: store_mip_2d: 2691; VERDE: ; %bb.0: ; %main_body 2692; VERDE-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2693; VERDE-NEXT: s_endpgm 2694; 2695; FIJI-LABEL: store_mip_2d: 2696; FIJI: ; %bb.0: ; %main_body 2697; FIJI-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2698; FIJI-NEXT: s_endpgm 2699; 2700; GFX6789-LABEL: store_mip_2d: 2701; GFX6789: ; %bb.0: ; %main_body 2702; GFX6789-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2703; GFX6789-NEXT: s_endpgm 2704; 2705; NOPRT-LABEL: store_mip_2d: 2706; NOPRT: ; %bb.0: ; %main_body 2707; NOPRT-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm 2708; NOPRT-NEXT: s_endpgm 2709; 2710; GFX10PLUS-LABEL: store_mip_2d: 2711; GFX10PLUS: ; %bb.0: ; %main_body 2712; GFX10PLUS-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm 2713; GFX10PLUS-NEXT: s_endpgm 2714main_body: 2715 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) 2716 ret void 2717} 2718 2719define amdgpu_ps void @store_mip_3d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %r, i32 %mip) { 2720; VERDE-LABEL: store_mip_3d: 2721; VERDE: ; %bb.0: ; %main_body 2722; VERDE-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm 2723; VERDE-NEXT: s_endpgm 2724; 2725; FIJI-LABEL: store_mip_3d: 2726; FIJI: ; %bb.0: ; %main_body 2727; FIJI-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm 2728; FIJI-NEXT: s_endpgm 2729; 2730; GFX6789-LABEL: store_mip_3d: 2731; GFX6789: ; %bb.0: ; %main_body 2732; GFX6789-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm 2733; GFX6789-NEXT: s_endpgm 2734; 2735; NOPRT-LABEL: store_mip_3d: 2736; NOPRT: ; %bb.0: ; %main_body 2737; NOPRT-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm 2738; NOPRT-NEXT: s_endpgm 2739; 2740; GFX10PLUS-LABEL: store_mip_3d: 2741; GFX10PLUS: ; %bb.0: ; %main_body 2742; GFX10PLUS-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm 2743; GFX10PLUS-NEXT: s_endpgm 2744main_body: 2745 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) 2746 ret void 2747} 2748 2749define amdgpu_ps void @store_mip_cube(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %mip) { 2750; VERDE-LABEL: store_mip_cube: 2751; VERDE: ; %bb.0: ; %main_body 2752; VERDE-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2753; VERDE-NEXT: s_endpgm 2754; 2755; FIJI-LABEL: store_mip_cube: 2756; FIJI: ; %bb.0: ; %main_body 2757; FIJI-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2758; FIJI-NEXT: s_endpgm 2759; 2760; GFX6789-LABEL: store_mip_cube: 2761; GFX6789: ; %bb.0: ; %main_body 2762; GFX6789-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2763; GFX6789-NEXT: s_endpgm 2764; 2765; NOPRT-LABEL: store_mip_cube: 2766; NOPRT: ; %bb.0: ; %main_body 2767; NOPRT-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2768; NOPRT-NEXT: s_endpgm 2769; 2770; GFX10PLUS-LABEL: store_mip_cube: 2771; GFX10PLUS: ; %bb.0: ; %main_body 2772; GFX10PLUS-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm 2773; GFX10PLUS-NEXT: s_endpgm 2774main_body: 2775 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) 2776 ret void 2777} 2778 2779define amdgpu_ps void @store_mip_1darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %slice, i32 %mip) { 2780; VERDE-LABEL: store_mip_1darray: 2781; VERDE: ; %bb.0: ; %main_body 2782; VERDE-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2783; VERDE-NEXT: s_endpgm 2784; 2785; FIJI-LABEL: store_mip_1darray: 2786; FIJI: ; %bb.0: ; %main_body 2787; FIJI-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2788; FIJI-NEXT: s_endpgm 2789; 2790; GFX6789-LABEL: store_mip_1darray: 2791; GFX6789: ; %bb.0: ; %main_body 2792; GFX6789-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2793; GFX6789-NEXT: s_endpgm 2794; 2795; NOPRT-LABEL: store_mip_1darray: 2796; NOPRT: ; %bb.0: ; %main_body 2797; NOPRT-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da 2798; NOPRT-NEXT: s_endpgm 2799; 2800; GFX10PLUS-LABEL: store_mip_1darray: 2801; GFX10PLUS: ; %bb.0: ; %main_body 2802; GFX10PLUS-NEXT: image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm 2803; GFX10PLUS-NEXT: s_endpgm 2804main_body: 2805 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) 2806 ret void 2807} 2808 2809define amdgpu_ps void @store_mip_2darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %mip) { 2810; VERDE-LABEL: store_mip_2darray: 2811; VERDE: ; %bb.0: ; %main_body 2812; VERDE-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2813; VERDE-NEXT: s_endpgm 2814; 2815; FIJI-LABEL: store_mip_2darray: 2816; FIJI: ; %bb.0: ; %main_body 2817; FIJI-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2818; FIJI-NEXT: s_endpgm 2819; 2820; GFX6789-LABEL: store_mip_2darray: 2821; GFX6789: ; %bb.0: ; %main_body 2822; GFX6789-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2823; GFX6789-NEXT: s_endpgm 2824; 2825; NOPRT-LABEL: store_mip_2darray: 2826; NOPRT: ; %bb.0: ; %main_body 2827; NOPRT-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da 2828; NOPRT-NEXT: s_endpgm 2829; 2830; GFX10PLUS-LABEL: store_mip_2darray: 2831; GFX10PLUS: ; %bb.0: ; %main_body 2832; GFX10PLUS-NEXT: image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm 2833; GFX10PLUS-NEXT: s_endpgm 2834main_body: 2835 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) 2836 ret void 2837} 2838 2839define amdgpu_ps <4 x float> @getresinfo_1d(<8 x i32> inreg %rsrc, i32 %mip) { 2840; VERDE-LABEL: getresinfo_1d: 2841; VERDE: ; %bb.0: ; %main_body 2842; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 2843; VERDE-NEXT: s_waitcnt vmcnt(0) 2844; VERDE-NEXT: ; return to shader part epilog 2845; 2846; FIJI-LABEL: getresinfo_1d: 2847; FIJI: ; %bb.0: ; %main_body 2848; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 2849; FIJI-NEXT: s_waitcnt vmcnt(0) 2850; FIJI-NEXT: ; return to shader part epilog 2851; 2852; GFX6789-LABEL: getresinfo_1d: 2853; GFX6789: ; %bb.0: ; %main_body 2854; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 2855; GFX6789-NEXT: s_waitcnt vmcnt(0) 2856; GFX6789-NEXT: ; return to shader part epilog 2857; 2858; NOPRT-LABEL: getresinfo_1d: 2859; NOPRT: ; %bb.0: ; %main_body 2860; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 2861; NOPRT-NEXT: s_waitcnt vmcnt(0) 2862; NOPRT-NEXT: ; return to shader part epilog 2863; 2864; GFX10PLUS-LABEL: getresinfo_1d: 2865; GFX10PLUS: ; %bb.0: ; %main_body 2866; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 2867; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 2868; GFX10PLUS-NEXT: ; return to shader part epilog 2869main_body: 2870 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 2871 ret <4 x float> %v 2872} 2873 2874define amdgpu_ps <4 x float> @getresinfo_2d(<8 x i32> inreg %rsrc, i32 %mip) { 2875; VERDE-LABEL: getresinfo_2d: 2876; VERDE: ; %bb.0: ; %main_body 2877; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 2878; VERDE-NEXT: s_waitcnt vmcnt(0) 2879; VERDE-NEXT: ; return to shader part epilog 2880; 2881; FIJI-LABEL: getresinfo_2d: 2882; FIJI: ; %bb.0: ; %main_body 2883; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 2884; FIJI-NEXT: s_waitcnt vmcnt(0) 2885; FIJI-NEXT: ; return to shader part epilog 2886; 2887; GFX6789-LABEL: getresinfo_2d: 2888; GFX6789: ; %bb.0: ; %main_body 2889; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 2890; GFX6789-NEXT: s_waitcnt vmcnt(0) 2891; GFX6789-NEXT: ; return to shader part epilog 2892; 2893; NOPRT-LABEL: getresinfo_2d: 2894; NOPRT: ; %bb.0: ; %main_body 2895; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 2896; NOPRT-NEXT: s_waitcnt vmcnt(0) 2897; NOPRT-NEXT: ; return to shader part epilog 2898; 2899; GFX10PLUS-LABEL: getresinfo_2d: 2900; GFX10PLUS: ; %bb.0: ; %main_body 2901; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm 2902; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 2903; GFX10PLUS-NEXT: ; return to shader part epilog 2904main_body: 2905 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 2906 ret <4 x float> %v 2907} 2908 2909define amdgpu_ps <4 x float> @getresinfo_3d(<8 x i32> inreg %rsrc, i32 %mip) { 2910; VERDE-LABEL: getresinfo_3d: 2911; VERDE: ; %bb.0: ; %main_body 2912; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 2913; VERDE-NEXT: s_waitcnt vmcnt(0) 2914; VERDE-NEXT: ; return to shader part epilog 2915; 2916; FIJI-LABEL: getresinfo_3d: 2917; FIJI: ; %bb.0: ; %main_body 2918; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 2919; FIJI-NEXT: s_waitcnt vmcnt(0) 2920; FIJI-NEXT: ; return to shader part epilog 2921; 2922; GFX6789-LABEL: getresinfo_3d: 2923; GFX6789: ; %bb.0: ; %main_body 2924; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 2925; GFX6789-NEXT: s_waitcnt vmcnt(0) 2926; GFX6789-NEXT: ; return to shader part epilog 2927; 2928; NOPRT-LABEL: getresinfo_3d: 2929; NOPRT: ; %bb.0: ; %main_body 2930; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 2931; NOPRT-NEXT: s_waitcnt vmcnt(0) 2932; NOPRT-NEXT: ; return to shader part epilog 2933; 2934; GFX10PLUS-LABEL: getresinfo_3d: 2935; GFX10PLUS: ; %bb.0: ; %main_body 2936; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm 2937; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 2938; GFX10PLUS-NEXT: ; return to shader part epilog 2939main_body: 2940 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 2941 ret <4 x float> %v 2942} 2943 2944define amdgpu_ps <4 x float> @getresinfo_cube(<8 x i32> inreg %rsrc, i32 %mip) { 2945; VERDE-LABEL: getresinfo_cube: 2946; VERDE: ; %bb.0: ; %main_body 2947; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 2948; VERDE-NEXT: s_waitcnt vmcnt(0) 2949; VERDE-NEXT: ; return to shader part epilog 2950; 2951; FIJI-LABEL: getresinfo_cube: 2952; FIJI: ; %bb.0: ; %main_body 2953; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 2954; FIJI-NEXT: s_waitcnt vmcnt(0) 2955; FIJI-NEXT: ; return to shader part epilog 2956; 2957; GFX6789-LABEL: getresinfo_cube: 2958; GFX6789: ; %bb.0: ; %main_body 2959; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 2960; GFX6789-NEXT: s_waitcnt vmcnt(0) 2961; GFX6789-NEXT: ; return to shader part epilog 2962; 2963; NOPRT-LABEL: getresinfo_cube: 2964; NOPRT: ; %bb.0: ; %main_body 2965; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 2966; NOPRT-NEXT: s_waitcnt vmcnt(0) 2967; NOPRT-NEXT: ; return to shader part epilog 2968; 2969; GFX10PLUS-LABEL: getresinfo_cube: 2970; GFX10PLUS: ; %bb.0: ; %main_body 2971; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm 2972; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 2973; GFX10PLUS-NEXT: ; return to shader part epilog 2974main_body: 2975 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 2976 ret <4 x float> %v 2977} 2978 2979define amdgpu_ps <4 x float> @getresinfo_1darray(<8 x i32> inreg %rsrc, i32 %mip) { 2980; VERDE-LABEL: getresinfo_1darray: 2981; VERDE: ; %bb.0: ; %main_body 2982; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 2983; VERDE-NEXT: s_waitcnt vmcnt(0) 2984; VERDE-NEXT: ; return to shader part epilog 2985; 2986; FIJI-LABEL: getresinfo_1darray: 2987; FIJI: ; %bb.0: ; %main_body 2988; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 2989; FIJI-NEXT: s_waitcnt vmcnt(0) 2990; FIJI-NEXT: ; return to shader part epilog 2991; 2992; GFX6789-LABEL: getresinfo_1darray: 2993; GFX6789: ; %bb.0: ; %main_body 2994; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 2995; GFX6789-NEXT: s_waitcnt vmcnt(0) 2996; GFX6789-NEXT: ; return to shader part epilog 2997; 2998; NOPRT-LABEL: getresinfo_1darray: 2999; NOPRT: ; %bb.0: ; %main_body 3000; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3001; NOPRT-NEXT: s_waitcnt vmcnt(0) 3002; NOPRT-NEXT: ; return to shader part epilog 3003; 3004; GFX10PLUS-LABEL: getresinfo_1darray: 3005; GFX10PLUS: ; %bb.0: ; %main_body 3006; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm 3007; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3008; GFX10PLUS-NEXT: ; return to shader part epilog 3009main_body: 3010 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3011 ret <4 x float> %v 3012} 3013 3014define amdgpu_ps <4 x float> @getresinfo_2darray(<8 x i32> inreg %rsrc, i32 %mip) { 3015; VERDE-LABEL: getresinfo_2darray: 3016; VERDE: ; %bb.0: ; %main_body 3017; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3018; VERDE-NEXT: s_waitcnt vmcnt(0) 3019; VERDE-NEXT: ; return to shader part epilog 3020; 3021; FIJI-LABEL: getresinfo_2darray: 3022; FIJI: ; %bb.0: ; %main_body 3023; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3024; FIJI-NEXT: s_waitcnt vmcnt(0) 3025; FIJI-NEXT: ; return to shader part epilog 3026; 3027; GFX6789-LABEL: getresinfo_2darray: 3028; GFX6789: ; %bb.0: ; %main_body 3029; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3030; GFX6789-NEXT: s_waitcnt vmcnt(0) 3031; GFX6789-NEXT: ; return to shader part epilog 3032; 3033; NOPRT-LABEL: getresinfo_2darray: 3034; NOPRT: ; %bb.0: ; %main_body 3035; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3036; NOPRT-NEXT: s_waitcnt vmcnt(0) 3037; NOPRT-NEXT: ; return to shader part epilog 3038; 3039; GFX10PLUS-LABEL: getresinfo_2darray: 3040; GFX10PLUS: ; %bb.0: ; %main_body 3041; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm 3042; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3043; GFX10PLUS-NEXT: ; return to shader part epilog 3044main_body: 3045 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3046 ret <4 x float> %v 3047} 3048 3049define amdgpu_ps <4 x float> @getresinfo_2dmsaa(<8 x i32> inreg %rsrc, i32 %mip) { 3050; VERDE-LABEL: getresinfo_2dmsaa: 3051; VERDE: ; %bb.0: ; %main_body 3052; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3053; VERDE-NEXT: s_waitcnt vmcnt(0) 3054; VERDE-NEXT: ; return to shader part epilog 3055; 3056; FIJI-LABEL: getresinfo_2dmsaa: 3057; FIJI: ; %bb.0: ; %main_body 3058; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3059; FIJI-NEXT: s_waitcnt vmcnt(0) 3060; FIJI-NEXT: ; return to shader part epilog 3061; 3062; GFX6789-LABEL: getresinfo_2dmsaa: 3063; GFX6789: ; %bb.0: ; %main_body 3064; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3065; GFX6789-NEXT: s_waitcnt vmcnt(0) 3066; GFX6789-NEXT: ; return to shader part epilog 3067; 3068; NOPRT-LABEL: getresinfo_2dmsaa: 3069; NOPRT: ; %bb.0: ; %main_body 3070; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 3071; NOPRT-NEXT: s_waitcnt vmcnt(0) 3072; NOPRT-NEXT: ; return to shader part epilog 3073; 3074; GFX10PLUS-LABEL: getresinfo_2dmsaa: 3075; GFX10PLUS: ; %bb.0: ; %main_body 3076; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm 3077; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3078; GFX10PLUS-NEXT: ; return to shader part epilog 3079main_body: 3080 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3081 ret <4 x float> %v 3082} 3083 3084define amdgpu_ps <4 x float> @getresinfo_2darraymsaa(<8 x i32> inreg %rsrc, i32 %mip) { 3085; VERDE-LABEL: getresinfo_2darraymsaa: 3086; VERDE: ; %bb.0: ; %main_body 3087; VERDE-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3088; VERDE-NEXT: s_waitcnt vmcnt(0) 3089; VERDE-NEXT: ; return to shader part epilog 3090; 3091; FIJI-LABEL: getresinfo_2darraymsaa: 3092; FIJI: ; %bb.0: ; %main_body 3093; FIJI-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3094; FIJI-NEXT: s_waitcnt vmcnt(0) 3095; FIJI-NEXT: ; return to shader part epilog 3096; 3097; GFX6789-LABEL: getresinfo_2darraymsaa: 3098; GFX6789: ; %bb.0: ; %main_body 3099; GFX6789-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3100; GFX6789-NEXT: s_waitcnt vmcnt(0) 3101; GFX6789-NEXT: ; return to shader part epilog 3102; 3103; NOPRT-LABEL: getresinfo_2darraymsaa: 3104; NOPRT: ; %bb.0: ; %main_body 3105; NOPRT-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 3106; NOPRT-NEXT: s_waitcnt vmcnt(0) 3107; NOPRT-NEXT: ; return to shader part epilog 3108; 3109; GFX10PLUS-LABEL: getresinfo_2darraymsaa: 3110; GFX10PLUS: ; %bb.0: ; %main_body 3111; GFX10PLUS-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm 3112; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3113; GFX10PLUS-NEXT: ; return to shader part epilog 3114main_body: 3115 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3116 ret <4 x float> %v 3117} 3118 3119define amdgpu_ps float @load_1d_V1(<8 x i32> inreg %rsrc, i32 %s) { 3120; VERDE-LABEL: load_1d_V1: 3121; VERDE: ; %bb.0: ; %main_body 3122; VERDE-NEXT: image_load v0, v0, s[0:7] dmask:0x8 unorm 3123; VERDE-NEXT: s_waitcnt vmcnt(0) 3124; VERDE-NEXT: ; return to shader part epilog 3125; 3126; FIJI-LABEL: load_1d_V1: 3127; FIJI: ; %bb.0: ; %main_body 3128; FIJI-NEXT: image_load v0, v0, s[0:7] dmask:0x8 unorm 3129; FIJI-NEXT: s_waitcnt vmcnt(0) 3130; FIJI-NEXT: ; return to shader part epilog 3131; 3132; GFX6789-LABEL: load_1d_V1: 3133; GFX6789: ; %bb.0: ; %main_body 3134; GFX6789-NEXT: image_load v0, v0, s[0:7] dmask:0x8 unorm 3135; GFX6789-NEXT: s_waitcnt vmcnt(0) 3136; GFX6789-NEXT: ; return to shader part epilog 3137; 3138; NOPRT-LABEL: load_1d_V1: 3139; NOPRT: ; %bb.0: ; %main_body 3140; NOPRT-NEXT: image_load v0, v0, s[0:7] dmask:0x8 unorm 3141; NOPRT-NEXT: s_waitcnt vmcnt(0) 3142; NOPRT-NEXT: ; return to shader part epilog 3143; 3144; GFX10PLUS-LABEL: load_1d_V1: 3145; GFX10PLUS: ; %bb.0: ; %main_body 3146; GFX10PLUS-NEXT: image_load v0, v0, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm 3147; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3148; GFX10PLUS-NEXT: ; return to shader part epilog 3149main_body: 3150 %v = call float @llvm.amdgcn.image.load.1d.f32.i32(i32 8, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 3151 ret float %v 3152} 3153 3154define amdgpu_ps <2 x float> @load_1d_V2(<8 x i32> inreg %rsrc, i32 %s) { 3155; VERDE-LABEL: load_1d_V2: 3156; VERDE: ; %bb.0: ; %main_body 3157; VERDE-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 unorm 3158; VERDE-NEXT: s_waitcnt vmcnt(0) 3159; VERDE-NEXT: ; return to shader part epilog 3160; 3161; FIJI-LABEL: load_1d_V2: 3162; FIJI: ; %bb.0: ; %main_body 3163; FIJI-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 unorm 3164; FIJI-NEXT: s_waitcnt vmcnt(0) 3165; FIJI-NEXT: ; return to shader part epilog 3166; 3167; GFX6789-LABEL: load_1d_V2: 3168; GFX6789: ; %bb.0: ; %main_body 3169; GFX6789-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 unorm 3170; GFX6789-NEXT: s_waitcnt vmcnt(0) 3171; GFX6789-NEXT: ; return to shader part epilog 3172; 3173; NOPRT-LABEL: load_1d_V2: 3174; NOPRT: ; %bb.0: ; %main_body 3175; NOPRT-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 unorm 3176; NOPRT-NEXT: s_waitcnt vmcnt(0) 3177; NOPRT-NEXT: ; return to shader part epilog 3178; 3179; GFX10PLUS-LABEL: load_1d_V2: 3180; GFX10PLUS: ; %bb.0: ; %main_body 3181; GFX10PLUS-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 dim:SQ_RSRC_IMG_1D unorm 3182; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3183; GFX10PLUS-NEXT: ; return to shader part epilog 3184main_body: 3185 %v = call <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32 9, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 3186 ret <2 x float> %v 3187} 3188 3189define amdgpu_ps void @store_1d_V1(<8 x i32> inreg %rsrc, float %vdata, i32 %s) { 3190; VERDE-LABEL: store_1d_V1: 3191; VERDE: ; %bb.0: ; %main_body 3192; VERDE-NEXT: image_store v0, v1, s[0:7] dmask:0x2 unorm 3193; VERDE-NEXT: s_endpgm 3194; 3195; FIJI-LABEL: store_1d_V1: 3196; FIJI: ; %bb.0: ; %main_body 3197; FIJI-NEXT: image_store v0, v1, s[0:7] dmask:0x2 unorm 3198; FIJI-NEXT: s_endpgm 3199; 3200; GFX6789-LABEL: store_1d_V1: 3201; GFX6789: ; %bb.0: ; %main_body 3202; GFX6789-NEXT: image_store v0, v1, s[0:7] dmask:0x2 unorm 3203; GFX6789-NEXT: s_endpgm 3204; 3205; NOPRT-LABEL: store_1d_V1: 3206; NOPRT: ; %bb.0: ; %main_body 3207; NOPRT-NEXT: image_store v0, v1, s[0:7] dmask:0x2 unorm 3208; NOPRT-NEXT: s_endpgm 3209; 3210; GFX10PLUS-LABEL: store_1d_V1: 3211; GFX10PLUS: ; %bb.0: ; %main_body 3212; GFX10PLUS-NEXT: image_store v0, v1, s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_1D unorm 3213; GFX10PLUS-NEXT: s_endpgm 3214main_body: 3215 call void @llvm.amdgcn.image.store.1d.f32.i32(float %vdata, i32 2, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 3216 ret void 3217} 3218 3219define amdgpu_ps void @store_1d_V2(<8 x i32> inreg %rsrc, <2 x float> %vdata, i32 %s) { 3220; VERDE-LABEL: store_1d_V2: 3221; VERDE: ; %bb.0: ; %main_body 3222; VERDE-NEXT: image_store v[0:1], v2, s[0:7] dmask:0xc unorm 3223; VERDE-NEXT: s_endpgm 3224; 3225; FIJI-LABEL: store_1d_V2: 3226; FIJI: ; %bb.0: ; %main_body 3227; FIJI-NEXT: image_store v[0:1], v2, s[0:7] dmask:0xc unorm 3228; FIJI-NEXT: s_endpgm 3229; 3230; GFX6789-LABEL: store_1d_V2: 3231; GFX6789: ; %bb.0: ; %main_body 3232; GFX6789-NEXT: image_store v[0:1], v2, s[0:7] dmask:0xc unorm 3233; GFX6789-NEXT: s_endpgm 3234; 3235; NOPRT-LABEL: store_1d_V2: 3236; NOPRT: ; %bb.0: ; %main_body 3237; NOPRT-NEXT: image_store v[0:1], v2, s[0:7] dmask:0xc unorm 3238; NOPRT-NEXT: s_endpgm 3239; 3240; GFX10PLUS-LABEL: store_1d_V2: 3241; GFX10PLUS: ; %bb.0: ; %main_body 3242; GFX10PLUS-NEXT: image_store v[0:1], v2, s[0:7] dmask:0xc dim:SQ_RSRC_IMG_1D unorm 3243; GFX10PLUS-NEXT: s_endpgm 3244main_body: 3245 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) 3246 ret void 3247} 3248 3249define amdgpu_ps <4 x float> @load_1d_glc(<8 x i32> inreg %rsrc, i32 %s) { 3250; VERDE-LABEL: load_1d_glc: 3251; VERDE: ; %bb.0: ; %main_body 3252; VERDE-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc 3253; VERDE-NEXT: s_waitcnt vmcnt(0) 3254; VERDE-NEXT: ; return to shader part epilog 3255; 3256; FIJI-LABEL: load_1d_glc: 3257; FIJI: ; %bb.0: ; %main_body 3258; FIJI-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc 3259; FIJI-NEXT: s_waitcnt vmcnt(0) 3260; FIJI-NEXT: ; return to shader part epilog 3261; 3262; GFX6789-LABEL: load_1d_glc: 3263; GFX6789: ; %bb.0: ; %main_body 3264; GFX6789-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc 3265; GFX6789-NEXT: s_waitcnt vmcnt(0) 3266; GFX6789-NEXT: ; return to shader part epilog 3267; 3268; NOPRT-LABEL: load_1d_glc: 3269; NOPRT: ; %bb.0: ; %main_body 3270; NOPRT-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc 3271; NOPRT-NEXT: s_waitcnt vmcnt(0) 3272; NOPRT-NEXT: ; return to shader part epilog 3273; 3274; GFX10PLUS-LABEL: load_1d_glc: 3275; GFX10PLUS: ; %bb.0: ; %main_body 3276; GFX10PLUS-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc 3277; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3278; GFX10PLUS-NEXT: ; return to shader part epilog 3279main_body: 3280 %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 1) 3281 ret <4 x float> %v 3282} 3283 3284define amdgpu_ps <4 x float> @load_1d_slc(<8 x i32> inreg %rsrc, i32 %s) { 3285; VERDE-LABEL: load_1d_slc: 3286; VERDE: ; %bb.0: ; %main_body 3287; VERDE-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc 3288; VERDE-NEXT: s_waitcnt vmcnt(0) 3289; VERDE-NEXT: ; return to shader part epilog 3290; 3291; FIJI-LABEL: load_1d_slc: 3292; FIJI: ; %bb.0: ; %main_body 3293; FIJI-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc 3294; FIJI-NEXT: s_waitcnt vmcnt(0) 3295; FIJI-NEXT: ; return to shader part epilog 3296; 3297; GFX6789-LABEL: load_1d_slc: 3298; GFX6789: ; %bb.0: ; %main_body 3299; GFX6789-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc 3300; GFX6789-NEXT: s_waitcnt vmcnt(0) 3301; GFX6789-NEXT: ; return to shader part epilog 3302; 3303; NOPRT-LABEL: load_1d_slc: 3304; NOPRT: ; %bb.0: ; %main_body 3305; NOPRT-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc 3306; NOPRT-NEXT: s_waitcnt vmcnt(0) 3307; NOPRT-NEXT: ; return to shader part epilog 3308; 3309; GFX10PLUS-LABEL: load_1d_slc: 3310; GFX10PLUS: ; %bb.0: ; %main_body 3311; GFX10PLUS-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc 3312; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3313; GFX10PLUS-NEXT: ; return to shader part epilog 3314main_body: 3315 %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 2) 3316 ret <4 x float> %v 3317} 3318 3319define amdgpu_ps <4 x float> @load_1d_glc_slc(<8 x i32> inreg %rsrc, i32 %s) { 3320; VERDE-LABEL: load_1d_glc_slc: 3321; VERDE: ; %bb.0: ; %main_body 3322; VERDE-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc 3323; VERDE-NEXT: s_waitcnt vmcnt(0) 3324; VERDE-NEXT: ; return to shader part epilog 3325; 3326; FIJI-LABEL: load_1d_glc_slc: 3327; FIJI: ; %bb.0: ; %main_body 3328; FIJI-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc 3329; FIJI-NEXT: s_waitcnt vmcnt(0) 3330; FIJI-NEXT: ; return to shader part epilog 3331; 3332; GFX6789-LABEL: load_1d_glc_slc: 3333; GFX6789: ; %bb.0: ; %main_body 3334; GFX6789-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc 3335; GFX6789-NEXT: s_waitcnt vmcnt(0) 3336; GFX6789-NEXT: ; return to shader part epilog 3337; 3338; NOPRT-LABEL: load_1d_glc_slc: 3339; NOPRT: ; %bb.0: ; %main_body 3340; NOPRT-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc 3341; NOPRT-NEXT: s_waitcnt vmcnt(0) 3342; NOPRT-NEXT: ; return to shader part epilog 3343; 3344; GFX10PLUS-LABEL: load_1d_glc_slc: 3345; GFX10PLUS: ; %bb.0: ; %main_body 3346; GFX10PLUS-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc 3347; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3348; GFX10PLUS-NEXT: ; return to shader part epilog 3349main_body: 3350 %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 3) 3351 ret <4 x float> %v 3352} 3353 3354define amdgpu_ps void @store_1d_glc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) { 3355; VERDE-LABEL: store_1d_glc: 3356; VERDE: ; %bb.0: ; %main_body 3357; VERDE-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc 3358; VERDE-NEXT: s_endpgm 3359; 3360; FIJI-LABEL: store_1d_glc: 3361; FIJI: ; %bb.0: ; %main_body 3362; FIJI-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc 3363; FIJI-NEXT: s_endpgm 3364; 3365; GFX6789-LABEL: store_1d_glc: 3366; GFX6789: ; %bb.0: ; %main_body 3367; GFX6789-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc 3368; GFX6789-NEXT: s_endpgm 3369; 3370; NOPRT-LABEL: store_1d_glc: 3371; NOPRT: ; %bb.0: ; %main_body 3372; NOPRT-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc 3373; NOPRT-NEXT: s_endpgm 3374; 3375; GFX10PLUS-LABEL: store_1d_glc: 3376; GFX10PLUS: ; %bb.0: ; %main_body 3377; GFX10PLUS-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc 3378; GFX10PLUS-NEXT: s_endpgm 3379main_body: 3380 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) 3381 ret void 3382} 3383 3384define amdgpu_ps void @store_1d_slc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) { 3385; VERDE-LABEL: store_1d_slc: 3386; VERDE: ; %bb.0: ; %main_body 3387; VERDE-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc 3388; VERDE-NEXT: s_endpgm 3389; 3390; FIJI-LABEL: store_1d_slc: 3391; FIJI: ; %bb.0: ; %main_body 3392; FIJI-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc 3393; FIJI-NEXT: s_endpgm 3394; 3395; GFX6789-LABEL: store_1d_slc: 3396; GFX6789: ; %bb.0: ; %main_body 3397; GFX6789-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc 3398; GFX6789-NEXT: s_endpgm 3399; 3400; NOPRT-LABEL: store_1d_slc: 3401; NOPRT: ; %bb.0: ; %main_body 3402; NOPRT-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc 3403; NOPRT-NEXT: s_endpgm 3404; 3405; GFX10PLUS-LABEL: store_1d_slc: 3406; GFX10PLUS: ; %bb.0: ; %main_body 3407; GFX10PLUS-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc 3408; GFX10PLUS-NEXT: s_endpgm 3409main_body: 3410 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) 3411 ret void 3412} 3413 3414define amdgpu_ps void @store_1d_glc_slc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) { 3415; VERDE-LABEL: store_1d_glc_slc: 3416; VERDE: ; %bb.0: ; %main_body 3417; VERDE-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc 3418; VERDE-NEXT: s_endpgm 3419; 3420; FIJI-LABEL: store_1d_glc_slc: 3421; FIJI: ; %bb.0: ; %main_body 3422; FIJI-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc 3423; FIJI-NEXT: s_endpgm 3424; 3425; GFX6789-LABEL: store_1d_glc_slc: 3426; GFX6789: ; %bb.0: ; %main_body 3427; GFX6789-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc 3428; GFX6789-NEXT: s_endpgm 3429; 3430; NOPRT-LABEL: store_1d_glc_slc: 3431; NOPRT: ; %bb.0: ; %main_body 3432; NOPRT-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc 3433; NOPRT-NEXT: s_endpgm 3434; 3435; GFX10PLUS-LABEL: store_1d_glc_slc: 3436; GFX10PLUS: ; %bb.0: ; %main_body 3437; GFX10PLUS-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc 3438; GFX10PLUS-NEXT: s_endpgm 3439main_body: 3440 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) 3441 ret void 3442} 3443 3444define amdgpu_ps <3 x float> @getresinfo_dmask7(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) { 3445; GFX6-LABEL: getresinfo_dmask7: 3446; GFX6: ; %bb.0: ; %main_body 3447; GFX6-NEXT: s_mov_b32 s0, s2 3448; GFX6-NEXT: s_mov_b32 s1, s3 3449; GFX6-NEXT: s_mov_b32 s2, s4 3450; GFX6-NEXT: s_mov_b32 s3, s5 3451; GFX6-NEXT: s_mov_b32 s4, s6 3452; GFX6-NEXT: s_mov_b32 s5, s7 3453; GFX6-NEXT: s_mov_b32 s6, s8 3454; GFX6-NEXT: s_mov_b32 s7, s9 3455; GFX6-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm 3456; GFX6-NEXT: s_waitcnt vmcnt(0) 3457; GFX6-NEXT: ; return to shader part epilog 3458; 3459; GFX8-LABEL: getresinfo_dmask7: 3460; GFX8: ; %bb.0: ; %main_body 3461; GFX8-NEXT: s_mov_b32 s0, s2 3462; GFX8-NEXT: s_mov_b32 s1, s3 3463; GFX8-NEXT: s_mov_b32 s2, s4 3464; GFX8-NEXT: s_mov_b32 s3, s5 3465; GFX8-NEXT: s_mov_b32 s4, s6 3466; GFX8-NEXT: s_mov_b32 s5, s7 3467; GFX8-NEXT: s_mov_b32 s6, s8 3468; GFX8-NEXT: s_mov_b32 s7, s9 3469; GFX8-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm 3470; GFX8-NEXT: s_waitcnt vmcnt(0) 3471; GFX8-NEXT: ; return to shader part epilog 3472; 3473; VERDE-LABEL: getresinfo_dmask7: 3474; VERDE: ; %bb.0: ; %main_body 3475; VERDE-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm 3476; VERDE-NEXT: s_waitcnt vmcnt(0) 3477; VERDE-NEXT: ; return to shader part epilog 3478; 3479; FIJI-LABEL: getresinfo_dmask7: 3480; FIJI: ; %bb.0: ; %main_body 3481; FIJI-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm 3482; FIJI-NEXT: s_waitcnt vmcnt(0) 3483; FIJI-NEXT: ; return to shader part epilog 3484; 3485; GFX6789-LABEL: getresinfo_dmask7: 3486; GFX6789: ; %bb.0: ; %main_body 3487; GFX6789-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm 3488; GFX6789-NEXT: s_waitcnt vmcnt(0) 3489; GFX6789-NEXT: ; return to shader part epilog 3490; 3491; NOPRT-LABEL: getresinfo_dmask7: 3492; NOPRT: ; %bb.0: ; %main_body 3493; NOPRT-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm 3494; NOPRT-NEXT: s_waitcnt vmcnt(0) 3495; NOPRT-NEXT: ; return to shader part epilog 3496; 3497; GFX10PLUS-LABEL: getresinfo_dmask7: 3498; GFX10PLUS: ; %bb.0: ; %main_body 3499; GFX10PLUS-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm 3500; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3501; GFX10PLUS-NEXT: ; return to shader part epilog 3502main_body: 3503 %r = call <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 7, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3504 ret <3 x float> %r 3505} 3506 3507define amdgpu_ps <2 x float> @getresinfo_dmask3(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) { 3508; GFX6-LABEL: getresinfo_dmask3: 3509; GFX6: ; %bb.0: ; %main_body 3510; GFX6-NEXT: s_mov_b32 s0, s2 3511; GFX6-NEXT: s_mov_b32 s1, s3 3512; GFX6-NEXT: s_mov_b32 s2, s4 3513; GFX6-NEXT: s_mov_b32 s3, s5 3514; GFX6-NEXT: s_mov_b32 s4, s6 3515; GFX6-NEXT: s_mov_b32 s5, s7 3516; GFX6-NEXT: s_mov_b32 s6, s8 3517; GFX6-NEXT: s_mov_b32 s7, s9 3518; GFX6-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm 3519; GFX6-NEXT: s_waitcnt vmcnt(0) 3520; GFX6-NEXT: ; return to shader part epilog 3521; 3522; GFX8-LABEL: getresinfo_dmask3: 3523; GFX8: ; %bb.0: ; %main_body 3524; GFX8-NEXT: s_mov_b32 s0, s2 3525; GFX8-NEXT: s_mov_b32 s1, s3 3526; GFX8-NEXT: s_mov_b32 s2, s4 3527; GFX8-NEXT: s_mov_b32 s3, s5 3528; GFX8-NEXT: s_mov_b32 s4, s6 3529; GFX8-NEXT: s_mov_b32 s5, s7 3530; GFX8-NEXT: s_mov_b32 s6, s8 3531; GFX8-NEXT: s_mov_b32 s7, s9 3532; GFX8-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm 3533; GFX8-NEXT: s_waitcnt vmcnt(0) 3534; GFX8-NEXT: ; return to shader part epilog 3535; 3536; VERDE-LABEL: getresinfo_dmask3: 3537; VERDE: ; %bb.0: ; %main_body 3538; VERDE-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm 3539; VERDE-NEXT: s_waitcnt vmcnt(0) 3540; VERDE-NEXT: ; return to shader part epilog 3541; 3542; FIJI-LABEL: getresinfo_dmask3: 3543; FIJI: ; %bb.0: ; %main_body 3544; FIJI-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm 3545; FIJI-NEXT: s_waitcnt vmcnt(0) 3546; FIJI-NEXT: ; return to shader part epilog 3547; 3548; GFX6789-LABEL: getresinfo_dmask3: 3549; GFX6789: ; %bb.0: ; %main_body 3550; GFX6789-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm 3551; GFX6789-NEXT: s_waitcnt vmcnt(0) 3552; GFX6789-NEXT: ; return to shader part epilog 3553; 3554; NOPRT-LABEL: getresinfo_dmask3: 3555; NOPRT: ; %bb.0: ; %main_body 3556; NOPRT-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm 3557; NOPRT-NEXT: s_waitcnt vmcnt(0) 3558; NOPRT-NEXT: ; return to shader part epilog 3559; 3560; GFX10PLUS-LABEL: getresinfo_dmask3: 3561; GFX10PLUS: ; %bb.0: ; %main_body 3562; GFX10PLUS-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm 3563; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3564; GFX10PLUS-NEXT: ; return to shader part epilog 3565main_body: 3566 %r = call <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 3, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3567 ret <2 x float> %r 3568} 3569 3570define amdgpu_ps float @getresinfo_dmask1(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) { 3571; GFX6-LABEL: getresinfo_dmask1: 3572; GFX6: ; %bb.0: ; %main_body 3573; GFX6-NEXT: s_mov_b32 s0, s2 3574; GFX6-NEXT: s_mov_b32 s1, s3 3575; GFX6-NEXT: s_mov_b32 s2, s4 3576; GFX6-NEXT: s_mov_b32 s3, s5 3577; GFX6-NEXT: s_mov_b32 s4, s6 3578; GFX6-NEXT: s_mov_b32 s5, s7 3579; GFX6-NEXT: s_mov_b32 s6, s8 3580; GFX6-NEXT: s_mov_b32 s7, s9 3581; GFX6-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm 3582; GFX6-NEXT: s_waitcnt vmcnt(0) 3583; GFX6-NEXT: ; return to shader part epilog 3584; 3585; GFX8-LABEL: getresinfo_dmask1: 3586; GFX8: ; %bb.0: ; %main_body 3587; GFX8-NEXT: s_mov_b32 s0, s2 3588; GFX8-NEXT: s_mov_b32 s1, s3 3589; GFX8-NEXT: s_mov_b32 s2, s4 3590; GFX8-NEXT: s_mov_b32 s3, s5 3591; GFX8-NEXT: s_mov_b32 s4, s6 3592; GFX8-NEXT: s_mov_b32 s5, s7 3593; GFX8-NEXT: s_mov_b32 s6, s8 3594; GFX8-NEXT: s_mov_b32 s7, s9 3595; GFX8-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm 3596; GFX8-NEXT: s_waitcnt vmcnt(0) 3597; GFX8-NEXT: ; return to shader part epilog 3598; 3599; VERDE-LABEL: getresinfo_dmask1: 3600; VERDE: ; %bb.0: ; %main_body 3601; VERDE-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm 3602; VERDE-NEXT: s_waitcnt vmcnt(0) 3603; VERDE-NEXT: ; return to shader part epilog 3604; 3605; FIJI-LABEL: getresinfo_dmask1: 3606; FIJI: ; %bb.0: ; %main_body 3607; FIJI-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm 3608; FIJI-NEXT: s_waitcnt vmcnt(0) 3609; FIJI-NEXT: ; return to shader part epilog 3610; 3611; GFX6789-LABEL: getresinfo_dmask1: 3612; GFX6789: ; %bb.0: ; %main_body 3613; GFX6789-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm 3614; GFX6789-NEXT: s_waitcnt vmcnt(0) 3615; GFX6789-NEXT: ; return to shader part epilog 3616; 3617; NOPRT-LABEL: getresinfo_dmask1: 3618; NOPRT: ; %bb.0: ; %main_body 3619; NOPRT-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm 3620; NOPRT-NEXT: s_waitcnt vmcnt(0) 3621; NOPRT-NEXT: ; return to shader part epilog 3622; 3623; GFX10PLUS-LABEL: getresinfo_dmask1: 3624; GFX10PLUS: ; %bb.0: ; %main_body 3625; GFX10PLUS-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm 3626; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3627; GFX10PLUS-NEXT: ; return to shader part epilog 3628main_body: 3629 %r = call float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 1, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3630 ret float %r 3631} 3632 3633define amdgpu_ps <4 x float> @getresinfo_dmask0(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) #0 { 3634; VERDE-LABEL: getresinfo_dmask0: 3635; VERDE: ; %bb.0: ; %main_body 3636; VERDE-NEXT: ; return to shader part epilog 3637; 3638; FIJI-LABEL: getresinfo_dmask0: 3639; FIJI: ; %bb.0: ; %main_body 3640; FIJI-NEXT: ; return to shader part epilog 3641; 3642; GFX6789-LABEL: getresinfo_dmask0: 3643; GFX6789: ; %bb.0: ; %main_body 3644; GFX6789-NEXT: ; return to shader part epilog 3645; 3646; NOPRT-LABEL: getresinfo_dmask0: 3647; NOPRT: ; %bb.0: ; %main_body 3648; NOPRT-NEXT: ; return to shader part epilog 3649; 3650; GFX10PLUS-LABEL: getresinfo_dmask0: 3651; GFX10PLUS: ; %bb.0: ; %main_body 3652; GFX10PLUS-NEXT: ; return to shader part epilog 3653main_body: 3654 %r = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 0, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 3655 ret <4 x float> %r 3656} 3657 3658; 3659define 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 { 3660; VERDE-LABEL: image_store_wait: 3661; VERDE: ; %bb.0: ; %main_body 3662; VERDE-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm 3663; VERDE-NEXT: s_waitcnt expcnt(0) 3664; VERDE-NEXT: image_load v[0:3], v4, s[8:15] dmask:0xf unorm 3665; VERDE-NEXT: s_waitcnt vmcnt(0) 3666; VERDE-NEXT: image_store v[0:3], v4, s[16:23] dmask:0xf unorm 3667; VERDE-NEXT: s_endpgm 3668; 3669; FIJI-LABEL: image_store_wait: 3670; FIJI: ; %bb.0: ; %main_body 3671; FIJI-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm 3672; FIJI-NEXT: image_load v[0:3], v4, s[8:15] dmask:0xf unorm 3673; FIJI-NEXT: s_waitcnt vmcnt(0) 3674; FIJI-NEXT: image_store v[0:3], v4, s[16:23] dmask:0xf unorm 3675; FIJI-NEXT: s_endpgm 3676; 3677; GFX6789-LABEL: image_store_wait: 3678; GFX6789: ; %bb.0: ; %main_body 3679; GFX6789-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm 3680; GFX6789-NEXT: image_load v[0:3], v4, s[8:15] dmask:0xf unorm 3681; GFX6789-NEXT: s_waitcnt vmcnt(0) 3682; GFX6789-NEXT: image_store v[0:3], v4, s[16:23] dmask:0xf unorm 3683; GFX6789-NEXT: s_endpgm 3684; 3685; NOPRT-LABEL: image_store_wait: 3686; NOPRT: ; %bb.0: ; %main_body 3687; NOPRT-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf unorm 3688; NOPRT-NEXT: image_load v[0:3], v4, s[8:15] dmask:0xf unorm 3689; NOPRT-NEXT: s_waitcnt vmcnt(0) 3690; NOPRT-NEXT: image_store v[0:3], v4, s[16:23] dmask:0xf unorm 3691; NOPRT-NEXT: s_endpgm 3692; 3693; GFX10PLUS-LABEL: image_store_wait: 3694; GFX10PLUS: ; %bb.0: ; %main_body 3695; GFX10PLUS-NEXT: image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 3696; GFX10PLUS-NEXT: image_load v[0:3], v4, s[8:15] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 3697; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 3698; GFX10PLUS-NEXT: image_store v[0:3], v4, s[16:23] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 3699; GFX10PLUS-NEXT: s_endpgm 3700main_body: 3701 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) 3702 %data = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %arg4, <8 x i32> %arg1, i32 0, i32 0) 3703 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) 3704 ret void 3705} 3706 3707define amdgpu_ps float @image_load_mmo(<8 x i32> inreg %rsrc, float addrspace(3)* %lds, <2 x i32> %c) #0 { 3708; VERDE-LABEL: image_load_mmo: 3709; VERDE: ; %bb.0: 3710; VERDE-NEXT: image_load v1, v[1:2], s[0:7] dmask:0x1 unorm 3711; VERDE-NEXT: v_mov_b32_e32 v2, 0 3712; VERDE-NEXT: s_mov_b32 m0, -1 3713; VERDE-NEXT: ds_write_b32 v0, v2 3714; VERDE-NEXT: v_add_i32_e32 v0, vcc, 16, v0 3715; VERDE-NEXT: ds_write_b32 v0, v2 3716; VERDE-NEXT: s_waitcnt vmcnt(0) 3717; VERDE-NEXT: v_mov_b32_e32 v0, v1 3718; VERDE-NEXT: s_waitcnt lgkmcnt(0) 3719; VERDE-NEXT: ; return to shader part epilog 3720; 3721; FIJI-LABEL: image_load_mmo: 3722; FIJI: ; %bb.0: 3723; FIJI-NEXT: image_load v1, v[1:2], s[0:7] dmask:0x1 unorm 3724; FIJI-NEXT: v_mov_b32_e32 v2, 0 3725; FIJI-NEXT: s_mov_b32 m0, -1 3726; FIJI-NEXT: ds_write2_b32 v0, v2, v2 offset1:4 3727; FIJI-NEXT: s_waitcnt vmcnt(0) 3728; FIJI-NEXT: v_mov_b32_e32 v0, v1 3729; FIJI-NEXT: s_waitcnt lgkmcnt(0) 3730; FIJI-NEXT: ; return to shader part epilog 3731; 3732; GFX6789-LABEL: image_load_mmo: 3733; GFX6789: ; %bb.0: 3734; GFX6789-NEXT: image_load v1, v[1:2], s[0:7] dmask:0x1 unorm 3735; GFX6789-NEXT: v_mov_b32_e32 v2, 0 3736; GFX6789-NEXT: ds_write2_b32 v0, v2, v2 offset1:4 3737; GFX6789-NEXT: s_waitcnt vmcnt(0) 3738; GFX6789-NEXT: v_mov_b32_e32 v0, v1 3739; GFX6789-NEXT: s_waitcnt lgkmcnt(0) 3740; GFX6789-NEXT: ; return to shader part epilog 3741; 3742; NOPRT-LABEL: image_load_mmo: 3743; NOPRT: ; %bb.0: 3744; NOPRT-NEXT: image_load v1, v[1:2], s[0:7] dmask:0x1 unorm 3745; NOPRT-NEXT: v_mov_b32_e32 v2, 0 3746; NOPRT-NEXT: ds_write2_b32 v0, v2, v2 offset1:4 3747; NOPRT-NEXT: s_waitcnt vmcnt(0) 3748; NOPRT-NEXT: v_mov_b32_e32 v0, v1 3749; NOPRT-NEXT: s_waitcnt lgkmcnt(0) 3750; NOPRT-NEXT: ; return to shader part epilog 3751; 3752; GFX10-LABEL: image_load_mmo: 3753; GFX10: ; %bb.0: 3754; GFX10-NEXT: image_load v1, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm 3755; GFX10-NEXT: v_mov_b32_e32 v2, 0 3756; GFX10-NEXT: ds_write2_b32 v0, v2, v2 offset1:4 3757; GFX10-NEXT: s_waitcnt vmcnt(0) 3758; GFX10-NEXT: v_mov_b32_e32 v0, v1 3759; GFX10-NEXT: s_waitcnt lgkmcnt(0) 3760; GFX10-NEXT: ; return to shader part epilog 3761; 3762; GFX11-LABEL: image_load_mmo: 3763; GFX11: ; %bb.0: 3764; GFX11-NEXT: image_load v1, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm 3765; GFX11-NEXT: v_mov_b32_e32 v2, 0 3766; GFX11-NEXT: ds_store_2addr_b32 v0, v2, v2 offset1:4 3767; GFX11-NEXT: s_waitcnt vmcnt(0) 3768; GFX11-NEXT: v_mov_b32_e32 v0, v1 3769; GFX11-NEXT: s_waitcnt lgkmcnt(0) 3770; GFX11-NEXT: ; return to shader part epilog 3771 store float 0.000000e+00, float addrspace(3)* %lds 3772 %c0 = extractelement <2 x i32> %c, i32 0 3773 %c1 = extractelement <2 x i32> %c, i32 1 3774 %tex = call float @llvm.amdgcn.image.load.2d.f32.i32(i32 1, i32 %c0, i32 %c1, <8 x i32> %rsrc, i32 0, i32 0) 3775 %tmp2 = getelementptr float, float addrspace(3)* %lds, i32 4 3776 store float 0.000000e+00, float addrspace(3)* %tmp2 3777 ret float %tex 3778} 3779 3780declare <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #1 3781declare {float,i32} @llvm.amdgcn.image.load.1d.f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1 3782declare {<2 x float>,i32} @llvm.amdgcn.image.load.1d.v2f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1 3783declare {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1 3784declare <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1 3785declare {<4 x float>,i32} @llvm.amdgcn.image.load.2d.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1 3786declare <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3787declare {<4 x float>,i32} @llvm.amdgcn.image.load.3d.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3788declare <4 x float> @llvm.amdgcn.image.load.cube.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3789declare {<4 x float>,i32} @llvm.amdgcn.image.load.cube.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3790declare <4 x float> @llvm.amdgcn.image.load.1darray.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1 3791declare {<4 x float>,i32} @llvm.amdgcn.image.load.1darray.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1 3792declare <4 x float> @llvm.amdgcn.image.load.2darray.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3793declare {<4 x float>,i32} @llvm.amdgcn.image.load.2darray.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3794declare <4 x float> @llvm.amdgcn.image.load.2dmsaa.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3795declare {<4 x float>,i32} @llvm.amdgcn.image.load.2dmsaa.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3796declare <4 x float> @llvm.amdgcn.image.load.2darraymsaa.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3797declare {<4 x float>,i32} @llvm.amdgcn.image.load.2darraymsaa.v4f32i32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3798 3799declare <4 x float> @llvm.amdgcn.image.load.mip.1d.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1 3800declare <4 x float> @llvm.amdgcn.image.load.mip.2d.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3801declare {<4 x float>,i32} @llvm.amdgcn.image.load.mip.1d.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1 3802declare {<4 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3803declare {<2 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v2f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3804declare {float,i32} @llvm.amdgcn.image.load.mip.2d.f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3805declare <4 x float> @llvm.amdgcn.image.load.mip.3d.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3806declare <4 x float> @llvm.amdgcn.image.load.mip.cube.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3807declare <4 x float> @llvm.amdgcn.image.load.mip.1darray.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3808declare <4 x float> @llvm.amdgcn.image.load.mip.2darray.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1 3809 3810declare void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float>, i32, i32, <8 x i32>, i32, i32) #0 3811declare void @llvm.amdgcn.image.store.2d.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0 3812declare void @llvm.amdgcn.image.store.3d.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 3813declare void @llvm.amdgcn.image.store.cube.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 3814declare void @llvm.amdgcn.image.store.1darray.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0 3815declare void @llvm.amdgcn.image.store.2darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 3816declare void @llvm.amdgcn.image.store.2dmsaa.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 3817declare void @llvm.amdgcn.image.store.2darraymsaa.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 3818 3819declare void @llvm.amdgcn.image.store.mip.1d.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0 3820declare void @llvm.amdgcn.image.store.mip.2d.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 3821declare void @llvm.amdgcn.image.store.mip.3d.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 3822declare void @llvm.amdgcn.image.store.mip.cube.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 3823declare void @llvm.amdgcn.image.store.mip.1darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 3824declare void @llvm.amdgcn.image.store.mip.2darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0 3825 3826declare <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 3827declare <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 3828declare <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 3829declare float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 3830declare <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 3831declare <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 3832declare <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 3833declare <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 3834declare <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 3835declare <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 3836declare <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2 3837 3838declare float @llvm.amdgcn.image.load.1d.f32.i32(i32, i32, <8 x i32>, i32, i32) #1 3839declare float @llvm.amdgcn.image.load.2d.f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1 3840declare <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32, i32, <8 x i32>, i32, i32) #1 3841declare void @llvm.amdgcn.image.store.1d.f32.i32(float, i32, i32, <8 x i32>, i32, i32) #0 3842declare void @llvm.amdgcn.image.store.1d.v2f32.i32(<2 x float>, i32, i32, <8 x i32>, i32, i32) #0 3843 3844attributes #0 = { nounwind } 3845attributes #1 = { nounwind readonly } 3846attributes #2 = { nounwind readnone } 3847