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