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=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX6789 %s 4; RUN: llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs -show-mc-encoding < %s | FileCheck -check-prefixes=GFX10 %s 5 6define amdgpu_ps <4 x float> @sample_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 7; VERDE-LABEL: sample_1d: 8; VERDE: ; %bb.0: ; %main_body 9; VERDE-NEXT: s_mov_b64 s[12:13], exec 10; VERDE-NEXT: s_wqm_b64 exec, exec 11; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 12; VERDE-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf 13; VERDE-NEXT: s_waitcnt vmcnt(0) 14; VERDE-NEXT: ; return to shader part epilog 15; 16; GFX6789-LABEL: sample_1d: 17; GFX6789: ; %bb.0: ; %main_body 18; GFX6789-NEXT: s_mov_b64 s[12:13], exec 19; GFX6789-NEXT: s_wqm_b64 exec, exec 20; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 21; GFX6789-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf 22; GFX6789-NEXT: s_waitcnt vmcnt(0) 23; GFX6789-NEXT: ; return to shader part epilog 24; 25; GFX10-LABEL: sample_1d: 26; GFX10: ; %bb.0: ; %main_body 27; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 28; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 29; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 30; GFX10-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0x80,0xf0,0x00,0x00,0x40,0x00] 31; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 32; GFX10-NEXT: ; return to shader part epilog 33main_body: 34 %v = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 35 ret <4 x float> %v 36} 37 38define amdgpu_ps <4 x float> @sample_1d_tfe(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, i32 addrspace(1)* inreg %out, float %s) { 39; VERDE-LABEL: sample_1d_tfe: 40; VERDE: ; %bb.0: ; %main_body 41; VERDE-NEXT: s_mov_b64 s[14:15], exec 42; VERDE-NEXT: s_wqm_b64 exec, exec 43; VERDE-NEXT: v_mov_b32_e32 v5, v0 44; VERDE-NEXT: v_mov_b32_e32 v0, 0 45; VERDE-NEXT: v_mov_b32_e32 v1, v0 46; VERDE-NEXT: v_mov_b32_e32 v2, v0 47; VERDE-NEXT: v_mov_b32_e32 v3, v0 48; VERDE-NEXT: v_mov_b32_e32 v4, v0 49; VERDE-NEXT: s_and_b64 exec, exec, s[14:15] 50; VERDE-NEXT: image_sample v[0:4], v5, s[0:7], s[8:11] dmask:0xf tfe 51; VERDE-NEXT: s_mov_b32 s15, 0xf000 52; VERDE-NEXT: s_mov_b32 s14, -1 53; VERDE-NEXT: s_waitcnt vmcnt(0) 54; VERDE-NEXT: buffer_store_dword v4, off, s[12:15], 0 55; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 56; VERDE-NEXT: ; return to shader part epilog 57; 58; GFX6789-LABEL: sample_1d_tfe: 59; GFX6789: ; %bb.0: ; %main_body 60; GFX6789-NEXT: s_mov_b64 s[14:15], exec 61; GFX6789-NEXT: s_wqm_b64 exec, exec 62; GFX6789-NEXT: v_mov_b32_e32 v6, 0 63; GFX6789-NEXT: v_mov_b32_e32 v5, v0 64; GFX6789-NEXT: v_mov_b32_e32 v7, v6 65; GFX6789-NEXT: v_mov_b32_e32 v8, v6 66; GFX6789-NEXT: v_mov_b32_e32 v9, v6 67; GFX6789-NEXT: v_mov_b32_e32 v10, v6 68; GFX6789-NEXT: v_mov_b32_e32 v0, v6 69; GFX6789-NEXT: v_mov_b32_e32 v1, v7 70; GFX6789-NEXT: v_mov_b32_e32 v2, v8 71; GFX6789-NEXT: v_mov_b32_e32 v3, v9 72; GFX6789-NEXT: v_mov_b32_e32 v4, v10 73; GFX6789-NEXT: s_and_b64 exec, exec, s[14:15] 74; GFX6789-NEXT: image_sample v[0:4], v5, s[0:7], s[8:11] dmask:0xf tfe 75; GFX6789-NEXT: s_waitcnt vmcnt(0) 76; GFX6789-NEXT: global_store_dword v6, v4, s[12:13] 77; GFX6789-NEXT: s_waitcnt vmcnt(0) 78; GFX6789-NEXT: ; return to shader part epilog 79; 80; GFX10-LABEL: sample_1d_tfe: 81; GFX10: ; %bb.0: ; %main_body 82; GFX10-NEXT: s_mov_b32 s14, exec_lo ; encoding: [0x7e,0x03,0x8e,0xbe] 83; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 84; GFX10-NEXT: v_mov_b32_e32 v6, 0 ; encoding: [0x80,0x02,0x0c,0x7e] 85; GFX10-NEXT: v_mov_b32_e32 v5, v0 ; encoding: [0x00,0x03,0x0a,0x7e] 86; GFX10-NEXT: v_mov_b32_e32 v7, v6 ; encoding: [0x06,0x03,0x0e,0x7e] 87; GFX10-NEXT: v_mov_b32_e32 v8, v6 ; encoding: [0x06,0x03,0x10,0x7e] 88; GFX10-NEXT: v_mov_b32_e32 v9, v6 ; encoding: [0x06,0x03,0x12,0x7e] 89; GFX10-NEXT: v_mov_b32_e32 v10, v6 ; encoding: [0x06,0x03,0x14,0x7e] 90; GFX10-NEXT: v_mov_b32_e32 v0, v6 ; encoding: [0x06,0x03,0x00,0x7e] 91; GFX10-NEXT: v_mov_b32_e32 v1, v7 ; encoding: [0x07,0x03,0x02,0x7e] 92; GFX10-NEXT: v_mov_b32_e32 v2, v8 ; encoding: [0x08,0x03,0x04,0x7e] 93; GFX10-NEXT: v_mov_b32_e32 v3, v9 ; encoding: [0x09,0x03,0x06,0x7e] 94; GFX10-NEXT: v_mov_b32_e32 v4, v10 ; encoding: [0x0a,0x03,0x08,0x7e] 95; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s14 ; encoding: [0x7e,0x0e,0x7e,0x87] 96; GFX10-NEXT: image_sample v[0:4], v5, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D tfe ; encoding: [0x00,0x0f,0x81,0xf0,0x05,0x00,0x40,0x00] 97; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 98; GFX10-NEXT: global_store_dword v6, v4, s[12:13] ; encoding: [0x00,0x80,0x70,0xdc,0x06,0x04,0x0c,0x00] 99; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 ; encoding: [0x00,0x00,0xfd,0xbb] 100; GFX10-NEXT: ; return to shader part epilog 101main_body: 102 %v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 1, i32 0) 103 %v.vec = extractvalue {<4 x float>, i32} %v, 0 104 %v.err = extractvalue {<4 x float>, i32} %v, 1 105 store i32 %v.err, i32 addrspace(1)* %out, align 4 106 ret <4 x float> %v.vec 107} 108 109define amdgpu_ps <2 x float> @sample_1d_tfe_adjust_writemask_1(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, i32 addrspace(1)* inreg %out, float %s) { 110; VERDE-LABEL: sample_1d_tfe_adjust_writemask_1: 111; VERDE: ; %bb.0: ; %main_body 112; VERDE-NEXT: s_mov_b64 s[12:13], exec 113; VERDE-NEXT: s_wqm_b64 exec, exec 114; VERDE-NEXT: v_mov_b32_e32 v2, v0 115; VERDE-NEXT: v_mov_b32_e32 v0, 0 116; VERDE-NEXT: v_mov_b32_e32 v1, v0 117; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 118; VERDE-NEXT: image_sample v[0:1], v2, s[0:7], s[8:11] dmask:0x1 tfe 119; VERDE-NEXT: s_waitcnt vmcnt(0) 120; VERDE-NEXT: ; return to shader part epilog 121; 122; GFX6789-LABEL: sample_1d_tfe_adjust_writemask_1: 123; GFX6789: ; %bb.0: ; %main_body 124; GFX6789-NEXT: s_mov_b64 s[12:13], exec 125; GFX6789-NEXT: s_wqm_b64 exec, exec 126; GFX6789-NEXT: v_mov_b32_e32 v2, v0 127; GFX6789-NEXT: v_mov_b32_e32 v0, 0 128; GFX6789-NEXT: v_mov_b32_e32 v1, v0 129; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 130; GFX6789-NEXT: image_sample v[0:1], v2, s[0:7], s[8:11] dmask:0x1 tfe 131; GFX6789-NEXT: s_waitcnt vmcnt(0) 132; GFX6789-NEXT: ; return to shader part epilog 133; 134; GFX10-LABEL: sample_1d_tfe_adjust_writemask_1: 135; GFX10: ; %bb.0: ; %main_body 136; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 137; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 138; GFX10-NEXT: v_mov_b32_e32 v2, v0 ; encoding: [0x00,0x03,0x04,0x7e] 139; GFX10-NEXT: v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e] 140; GFX10-NEXT: v_mov_b32_e32 v1, v0 ; encoding: [0x00,0x03,0x02,0x7e] 141; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 142; GFX10-NEXT: image_sample v[0:1], v2, s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_1D tfe ; encoding: [0x00,0x01,0x81,0xf0,0x02,0x00,0x40,0x00] 143; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 144; GFX10-NEXT: ; return to shader part epilog 145main_body: 146 %v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 1, i32 0) 147 %res.vec = extractvalue {<4 x float>,i32} %v, 0 148 %res.f = extractelement <4 x float> %res.vec, i32 0 149 %res.err = extractvalue {<4 x float>,i32} %v, 1 150 %res.errf = bitcast i32 %res.err to float 151 %res.tmp = insertelement <2 x float> undef, float %res.f, i32 0 152 %res = insertelement <2 x float> %res.tmp, float %res.errf, i32 1 153 ret <2 x float> %res 154} 155 156define amdgpu_ps <2 x float> @sample_1d_tfe_adjust_writemask_2(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 157; VERDE-LABEL: sample_1d_tfe_adjust_writemask_2: 158; VERDE: ; %bb.0: ; %main_body 159; VERDE-NEXT: s_mov_b64 s[12:13], exec 160; VERDE-NEXT: s_wqm_b64 exec, exec 161; VERDE-NEXT: v_mov_b32_e32 v2, v0 162; VERDE-NEXT: v_mov_b32_e32 v0, 0 163; VERDE-NEXT: v_mov_b32_e32 v1, v0 164; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 165; VERDE-NEXT: image_sample v[0:1], v2, s[0:7], s[8:11] dmask:0x2 tfe 166; VERDE-NEXT: s_waitcnt vmcnt(0) 167; VERDE-NEXT: ; return to shader part epilog 168; 169; GFX6789-LABEL: sample_1d_tfe_adjust_writemask_2: 170; GFX6789: ; %bb.0: ; %main_body 171; GFX6789-NEXT: s_mov_b64 s[12:13], exec 172; GFX6789-NEXT: s_wqm_b64 exec, exec 173; GFX6789-NEXT: v_mov_b32_e32 v2, v0 174; GFX6789-NEXT: v_mov_b32_e32 v0, 0 175; GFX6789-NEXT: v_mov_b32_e32 v1, v0 176; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 177; GFX6789-NEXT: image_sample v[0:1], v2, s[0:7], s[8:11] dmask:0x2 tfe 178; GFX6789-NEXT: s_waitcnt vmcnt(0) 179; GFX6789-NEXT: ; return to shader part epilog 180; 181; GFX10-LABEL: sample_1d_tfe_adjust_writemask_2: 182; GFX10: ; %bb.0: ; %main_body 183; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 184; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 185; GFX10-NEXT: v_mov_b32_e32 v2, v0 ; encoding: [0x00,0x03,0x04,0x7e] 186; GFX10-NEXT: v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e] 187; GFX10-NEXT: v_mov_b32_e32 v1, v0 ; encoding: [0x00,0x03,0x02,0x7e] 188; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 189; GFX10-NEXT: image_sample v[0:1], v2, s[0:7], s[8:11] dmask:0x2 dim:SQ_RSRC_IMG_1D tfe ; encoding: [0x00,0x02,0x81,0xf0,0x02,0x00,0x40,0x00] 190; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 191; GFX10-NEXT: ; return to shader part epilog 192main_body: 193 %v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 1, i32 0) 194 %res.vec = extractvalue {<4 x float>,i32} %v, 0 195 %res.f = extractelement <4 x float> %res.vec, i32 1 196 %res.err = extractvalue {<4 x float>,i32} %v, 1 197 %res.errf = bitcast i32 %res.err to float 198 %res.tmp = insertelement <2 x float> undef, float %res.f, i32 0 199 %res = insertelement <2 x float> %res.tmp, float %res.errf, i32 1 200 ret <2 x float> %res 201} 202 203define amdgpu_ps <2 x float> @sample_1d_tfe_adjust_writemask_3(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 204; VERDE-LABEL: sample_1d_tfe_adjust_writemask_3: 205; VERDE: ; %bb.0: ; %main_body 206; VERDE-NEXT: s_mov_b64 s[12:13], exec 207; VERDE-NEXT: s_wqm_b64 exec, exec 208; VERDE-NEXT: v_mov_b32_e32 v2, v0 209; VERDE-NEXT: v_mov_b32_e32 v0, 0 210; VERDE-NEXT: v_mov_b32_e32 v1, v0 211; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 212; VERDE-NEXT: image_sample v[0:1], v2, s[0:7], s[8:11] dmask:0x4 tfe 213; VERDE-NEXT: s_waitcnt vmcnt(0) 214; VERDE-NEXT: ; return to shader part epilog 215; 216; GFX6789-LABEL: sample_1d_tfe_adjust_writemask_3: 217; GFX6789: ; %bb.0: ; %main_body 218; GFX6789-NEXT: s_mov_b64 s[12:13], exec 219; GFX6789-NEXT: s_wqm_b64 exec, exec 220; GFX6789-NEXT: v_mov_b32_e32 v2, v0 221; GFX6789-NEXT: v_mov_b32_e32 v0, 0 222; GFX6789-NEXT: v_mov_b32_e32 v1, v0 223; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 224; GFX6789-NEXT: image_sample v[0:1], v2, s[0:7], s[8:11] dmask:0x4 tfe 225; GFX6789-NEXT: s_waitcnt vmcnt(0) 226; GFX6789-NEXT: ; return to shader part epilog 227; 228; GFX10-LABEL: sample_1d_tfe_adjust_writemask_3: 229; GFX10: ; %bb.0: ; %main_body 230; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 231; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 232; GFX10-NEXT: v_mov_b32_e32 v2, v0 ; encoding: [0x00,0x03,0x04,0x7e] 233; GFX10-NEXT: v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e] 234; GFX10-NEXT: v_mov_b32_e32 v1, v0 ; encoding: [0x00,0x03,0x02,0x7e] 235; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 236; GFX10-NEXT: image_sample v[0:1], v2, s[0:7], s[8:11] dmask:0x4 dim:SQ_RSRC_IMG_1D tfe ; encoding: [0x00,0x04,0x81,0xf0,0x02,0x00,0x40,0x00] 237; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 238; GFX10-NEXT: ; return to shader part epilog 239main_body: 240 %v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 1, i32 0) 241 %res.vec = extractvalue {<4 x float>,i32} %v, 0 242 %res.f = extractelement <4 x float> %res.vec, i32 2 243 %res.err = extractvalue {<4 x float>,i32} %v, 1 244 %res.errf = bitcast i32 %res.err to float 245 %res.tmp = insertelement <2 x float> undef, float %res.f, i32 0 246 %res = insertelement <2 x float> %res.tmp, float %res.errf, i32 1 247 ret <2 x float> %res 248} 249 250define amdgpu_ps <2 x float> @sample_1d_tfe_adjust_writemask_4(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 251; VERDE-LABEL: sample_1d_tfe_adjust_writemask_4: 252; VERDE: ; %bb.0: ; %main_body 253; VERDE-NEXT: s_mov_b64 s[12:13], exec 254; VERDE-NEXT: s_wqm_b64 exec, exec 255; VERDE-NEXT: v_mov_b32_e32 v2, v0 256; VERDE-NEXT: v_mov_b32_e32 v0, 0 257; VERDE-NEXT: v_mov_b32_e32 v1, v0 258; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 259; VERDE-NEXT: image_sample v[0:1], v2, s[0:7], s[8:11] dmask:0x8 tfe 260; VERDE-NEXT: s_waitcnt vmcnt(0) 261; VERDE-NEXT: ; return to shader part epilog 262; 263; GFX6789-LABEL: sample_1d_tfe_adjust_writemask_4: 264; GFX6789: ; %bb.0: ; %main_body 265; GFX6789-NEXT: s_mov_b64 s[12:13], exec 266; GFX6789-NEXT: s_wqm_b64 exec, exec 267; GFX6789-NEXT: v_mov_b32_e32 v2, v0 268; GFX6789-NEXT: v_mov_b32_e32 v0, 0 269; GFX6789-NEXT: v_mov_b32_e32 v1, v0 270; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 271; GFX6789-NEXT: image_sample v[0:1], v2, s[0:7], s[8:11] dmask:0x8 tfe 272; GFX6789-NEXT: s_waitcnt vmcnt(0) 273; GFX6789-NEXT: ; return to shader part epilog 274; 275; GFX10-LABEL: sample_1d_tfe_adjust_writemask_4: 276; GFX10: ; %bb.0: ; %main_body 277; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 278; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 279; GFX10-NEXT: v_mov_b32_e32 v2, v0 ; encoding: [0x00,0x03,0x04,0x7e] 280; GFX10-NEXT: v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e] 281; GFX10-NEXT: v_mov_b32_e32 v1, v0 ; encoding: [0x00,0x03,0x02,0x7e] 282; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 283; GFX10-NEXT: image_sample v[0:1], v2, s[0:7], s[8:11] dmask:0x8 dim:SQ_RSRC_IMG_1D tfe ; encoding: [0x00,0x08,0x81,0xf0,0x02,0x00,0x40,0x00] 284; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 285; GFX10-NEXT: ; return to shader part epilog 286main_body: 287 %v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 1, i32 0) 288 %res.vec = extractvalue {<4 x float>,i32} %v, 0 289 %res.f = extractelement <4 x float> %res.vec, i32 3 290 %res.err = extractvalue {<4 x float>,i32} %v, 1 291 %res.errf = bitcast i32 %res.err to float 292 %res.tmp = insertelement <2 x float> undef, float %res.f, i32 0 293 %res = insertelement <2 x float> %res.tmp, float %res.errf, i32 1 294 ret <2 x float> %res 295} 296 297define amdgpu_ps <4 x float> @sample_1d_tfe_adjust_writemask_12(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 298; VERDE-LABEL: sample_1d_tfe_adjust_writemask_12: 299; VERDE: ; %bb.0: ; %main_body 300; VERDE-NEXT: s_mov_b64 s[12:13], exec 301; VERDE-NEXT: s_wqm_b64 exec, exec 302; VERDE-NEXT: v_mov_b32_e32 v3, v0 303; VERDE-NEXT: v_mov_b32_e32 v0, 0 304; VERDE-NEXT: v_mov_b32_e32 v1, v0 305; VERDE-NEXT: v_mov_b32_e32 v2, v0 306; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 307; VERDE-NEXT: image_sample v[0:2], v3, s[0:7], s[8:11] dmask:0x3 tfe 308; VERDE-NEXT: s_waitcnt vmcnt(0) 309; VERDE-NEXT: ; return to shader part epilog 310; 311; GFX6789-LABEL: sample_1d_tfe_adjust_writemask_12: 312; GFX6789: ; %bb.0: ; %main_body 313; GFX6789-NEXT: s_mov_b64 s[12:13], exec 314; GFX6789-NEXT: s_wqm_b64 exec, exec 315; GFX6789-NEXT: v_mov_b32_e32 v3, v0 316; GFX6789-NEXT: v_mov_b32_e32 v0, 0 317; GFX6789-NEXT: v_mov_b32_e32 v1, v0 318; GFX6789-NEXT: v_mov_b32_e32 v2, v0 319; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 320; GFX6789-NEXT: image_sample v[0:2], v3, s[0:7], s[8:11] dmask:0x3 tfe 321; GFX6789-NEXT: s_waitcnt vmcnt(0) 322; GFX6789-NEXT: ; return to shader part epilog 323; 324; GFX10-LABEL: sample_1d_tfe_adjust_writemask_12: 325; GFX10: ; %bb.0: ; %main_body 326; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 327; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 328; GFX10-NEXT: v_mov_b32_e32 v3, v0 ; encoding: [0x00,0x03,0x06,0x7e] 329; GFX10-NEXT: v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e] 330; GFX10-NEXT: v_mov_b32_e32 v1, v0 ; encoding: [0x00,0x03,0x02,0x7e] 331; GFX10-NEXT: v_mov_b32_e32 v2, v0 ; encoding: [0x00,0x03,0x04,0x7e] 332; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 333; GFX10-NEXT: image_sample v[0:2], v3, s[0:7], s[8:11] dmask:0x3 dim:SQ_RSRC_IMG_1D tfe ; encoding: [0x00,0x03,0x81,0xf0,0x03,0x00,0x40,0x00] 334; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 335; GFX10-NEXT: ; return to shader part epilog 336main_body: 337 %v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 1, i32 0) 338 %res.vec = extractvalue {<4 x float>,i32} %v, 0 339 %res.f1 = extractelement <4 x float> %res.vec, i32 0 340 %res.f2 = extractelement <4 x float> %res.vec, i32 1 341 %res.err = extractvalue {<4 x float>,i32} %v, 1 342 %res.errf = bitcast i32 %res.err to float 343 %res.tmp1 = insertelement <4 x float> undef, float %res.f1, i32 0 344 %res.tmp2 = insertelement <4 x float> %res.tmp1, float %res.f2, i32 1 345 %res = insertelement <4 x float> %res.tmp2, float %res.errf, i32 2 346 ret <4 x float> %res 347} 348 349define amdgpu_ps <4 x float> @sample_1d_tfe_adjust_writemask_24(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 350; VERDE-LABEL: sample_1d_tfe_adjust_writemask_24: 351; VERDE: ; %bb.0: ; %main_body 352; VERDE-NEXT: s_mov_b64 s[12:13], exec 353; VERDE-NEXT: s_wqm_b64 exec, exec 354; VERDE-NEXT: v_mov_b32_e32 v3, v0 355; VERDE-NEXT: v_mov_b32_e32 v0, 0 356; VERDE-NEXT: v_mov_b32_e32 v1, v0 357; VERDE-NEXT: v_mov_b32_e32 v2, v0 358; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 359; VERDE-NEXT: image_sample v[0:2], v3, s[0:7], s[8:11] dmask:0xa tfe 360; VERDE-NEXT: s_waitcnt vmcnt(0) 361; VERDE-NEXT: ; return to shader part epilog 362; 363; GFX6789-LABEL: sample_1d_tfe_adjust_writemask_24: 364; GFX6789: ; %bb.0: ; %main_body 365; GFX6789-NEXT: s_mov_b64 s[12:13], exec 366; GFX6789-NEXT: s_wqm_b64 exec, exec 367; GFX6789-NEXT: v_mov_b32_e32 v3, v0 368; GFX6789-NEXT: v_mov_b32_e32 v0, 0 369; GFX6789-NEXT: v_mov_b32_e32 v1, v0 370; GFX6789-NEXT: v_mov_b32_e32 v2, v0 371; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 372; GFX6789-NEXT: image_sample v[0:2], v3, s[0:7], s[8:11] dmask:0xa tfe 373; GFX6789-NEXT: s_waitcnt vmcnt(0) 374; GFX6789-NEXT: ; return to shader part epilog 375; 376; GFX10-LABEL: sample_1d_tfe_adjust_writemask_24: 377; GFX10: ; %bb.0: ; %main_body 378; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 379; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 380; GFX10-NEXT: v_mov_b32_e32 v3, v0 ; encoding: [0x00,0x03,0x06,0x7e] 381; GFX10-NEXT: v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e] 382; GFX10-NEXT: v_mov_b32_e32 v1, v0 ; encoding: [0x00,0x03,0x02,0x7e] 383; GFX10-NEXT: v_mov_b32_e32 v2, v0 ; encoding: [0x00,0x03,0x04,0x7e] 384; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 385; GFX10-NEXT: image_sample v[0:2], v3, s[0:7], s[8:11] dmask:0xa dim:SQ_RSRC_IMG_1D tfe ; encoding: [0x00,0x0a,0x81,0xf0,0x03,0x00,0x40,0x00] 386; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 387; GFX10-NEXT: ; return to shader part epilog 388main_body: 389 %v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 1, i32 0) 390 %res.vec = extractvalue {<4 x float>,i32} %v, 0 391 %res.f1 = extractelement <4 x float> %res.vec, i32 1 392 %res.f2 = extractelement <4 x float> %res.vec, i32 3 393 %res.err = extractvalue {<4 x float>,i32} %v, 1 394 %res.errf = bitcast i32 %res.err to float 395 %res.tmp1 = insertelement <4 x float> undef, float %res.f1, i32 0 396 %res.tmp2 = insertelement <4 x float> %res.tmp1, float %res.f2, i32 1 397 %res = insertelement <4 x float> %res.tmp2, float %res.errf, i32 2 398 ret <4 x float> %res 399} 400 401define amdgpu_ps <4 x float> @sample_1d_tfe_adjust_writemask_134(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 402; VERDE-LABEL: sample_1d_tfe_adjust_writemask_134: 403; VERDE: ; %bb.0: ; %main_body 404; VERDE-NEXT: s_mov_b64 s[12:13], exec 405; VERDE-NEXT: s_wqm_b64 exec, exec 406; VERDE-NEXT: v_mov_b32_e32 v4, v0 407; VERDE-NEXT: v_mov_b32_e32 v0, 0 408; VERDE-NEXT: v_mov_b32_e32 v1, v0 409; VERDE-NEXT: v_mov_b32_e32 v2, v0 410; VERDE-NEXT: v_mov_b32_e32 v3, v0 411; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 412; VERDE-NEXT: image_sample v[0:3], v4, s[0:7], s[8:11] dmask:0xd tfe 413; VERDE-NEXT: s_waitcnt vmcnt(0) 414; VERDE-NEXT: ; return to shader part epilog 415; 416; GFX6789-LABEL: sample_1d_tfe_adjust_writemask_134: 417; GFX6789: ; %bb.0: ; %main_body 418; GFX6789-NEXT: s_mov_b64 s[12:13], exec 419; GFX6789-NEXT: s_wqm_b64 exec, exec 420; GFX6789-NEXT: v_mov_b32_e32 v4, v0 421; GFX6789-NEXT: v_mov_b32_e32 v0, 0 422; GFX6789-NEXT: v_mov_b32_e32 v1, v0 423; GFX6789-NEXT: v_mov_b32_e32 v2, v0 424; GFX6789-NEXT: v_mov_b32_e32 v3, v0 425; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 426; GFX6789-NEXT: image_sample v[0:3], v4, s[0:7], s[8:11] dmask:0xd tfe 427; GFX6789-NEXT: s_waitcnt vmcnt(0) 428; GFX6789-NEXT: ; return to shader part epilog 429; 430; GFX10-LABEL: sample_1d_tfe_adjust_writemask_134: 431; GFX10: ; %bb.0: ; %main_body 432; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 433; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 434; GFX10-NEXT: v_mov_b32_e32 v4, v0 ; encoding: [0x00,0x03,0x08,0x7e] 435; GFX10-NEXT: v_mov_b32_e32 v0, 0 ; encoding: [0x80,0x02,0x00,0x7e] 436; GFX10-NEXT: v_mov_b32_e32 v1, v0 ; encoding: [0x00,0x03,0x02,0x7e] 437; GFX10-NEXT: v_mov_b32_e32 v2, v0 ; encoding: [0x00,0x03,0x04,0x7e] 438; GFX10-NEXT: v_mov_b32_e32 v3, v0 ; encoding: [0x00,0x03,0x06,0x7e] 439; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 440; GFX10-NEXT: image_sample v[0:3], v4, s[0:7], s[8:11] dmask:0xd dim:SQ_RSRC_IMG_1D tfe ; encoding: [0x00,0x0d,0x81,0xf0,0x04,0x00,0x40,0x00] 441; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 442; GFX10-NEXT: ; return to shader part epilog 443main_body: 444 %v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 1, i32 0) 445 %res.vec = extractvalue {<4 x float>,i32} %v, 0 446 %res.f1 = extractelement <4 x float> %res.vec, i32 0 447 %res.f2 = extractelement <4 x float> %res.vec, i32 2 448 %res.f3 = extractelement <4 x float> %res.vec, i32 3 449 %res.err = extractvalue {<4 x float>,i32} %v, 1 450 %res.errf = bitcast i32 %res.err to float 451 %res.tmp1 = insertelement <4 x float> undef, float %res.f1, i32 0 452 %res.tmp2 = insertelement <4 x float> %res.tmp1, float %res.f2, i32 1 453 %res.tmp3 = insertelement <4 x float> %res.tmp2, float %res.f3, i32 2 454 %res = insertelement <4 x float> %res.tmp3, float %res.errf, i32 3 455 ret <4 x float> %res 456} 457 458define amdgpu_ps <4 x float> @sample_1d_lwe(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, i32 addrspace(1)* inreg %out, float %s) { 459; VERDE-LABEL: sample_1d_lwe: 460; VERDE: ; %bb.0: ; %main_body 461; VERDE-NEXT: s_mov_b64 s[14:15], exec 462; VERDE-NEXT: s_wqm_b64 exec, exec 463; VERDE-NEXT: v_mov_b32_e32 v5, v0 464; VERDE-NEXT: v_mov_b32_e32 v0, 0 465; VERDE-NEXT: v_mov_b32_e32 v1, v0 466; VERDE-NEXT: v_mov_b32_e32 v2, v0 467; VERDE-NEXT: v_mov_b32_e32 v3, v0 468; VERDE-NEXT: v_mov_b32_e32 v4, v0 469; VERDE-NEXT: s_and_b64 exec, exec, s[14:15] 470; VERDE-NEXT: image_sample v[0:4], v5, s[0:7], s[8:11] dmask:0xf lwe 471; VERDE-NEXT: s_mov_b32 s15, 0xf000 472; VERDE-NEXT: s_mov_b32 s14, -1 473; VERDE-NEXT: s_waitcnt vmcnt(0) 474; VERDE-NEXT: buffer_store_dword v4, off, s[12:15], 0 475; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 476; VERDE-NEXT: ; return to shader part epilog 477; 478; GFX6789-LABEL: sample_1d_lwe: 479; GFX6789: ; %bb.0: ; %main_body 480; GFX6789-NEXT: s_mov_b64 s[14:15], exec 481; GFX6789-NEXT: s_wqm_b64 exec, exec 482; GFX6789-NEXT: v_mov_b32_e32 v6, 0 483; GFX6789-NEXT: v_mov_b32_e32 v5, v0 484; GFX6789-NEXT: v_mov_b32_e32 v7, v6 485; GFX6789-NEXT: v_mov_b32_e32 v8, v6 486; GFX6789-NEXT: v_mov_b32_e32 v9, v6 487; GFX6789-NEXT: v_mov_b32_e32 v10, v6 488; GFX6789-NEXT: v_mov_b32_e32 v0, v6 489; GFX6789-NEXT: v_mov_b32_e32 v1, v7 490; GFX6789-NEXT: v_mov_b32_e32 v2, v8 491; GFX6789-NEXT: v_mov_b32_e32 v3, v9 492; GFX6789-NEXT: v_mov_b32_e32 v4, v10 493; GFX6789-NEXT: s_and_b64 exec, exec, s[14:15] 494; GFX6789-NEXT: image_sample v[0:4], v5, s[0:7], s[8:11] dmask:0xf lwe 495; GFX6789-NEXT: s_waitcnt vmcnt(0) 496; GFX6789-NEXT: global_store_dword v6, v4, s[12:13] 497; GFX6789-NEXT: s_waitcnt vmcnt(0) 498; GFX6789-NEXT: ; return to shader part epilog 499; 500; GFX10-LABEL: sample_1d_lwe: 501; GFX10: ; %bb.0: ; %main_body 502; GFX10-NEXT: s_mov_b32 s14, exec_lo ; encoding: [0x7e,0x03,0x8e,0xbe] 503; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 504; GFX10-NEXT: v_mov_b32_e32 v6, 0 ; encoding: [0x80,0x02,0x0c,0x7e] 505; GFX10-NEXT: v_mov_b32_e32 v5, v0 ; encoding: [0x00,0x03,0x0a,0x7e] 506; GFX10-NEXT: v_mov_b32_e32 v7, v6 ; encoding: [0x06,0x03,0x0e,0x7e] 507; GFX10-NEXT: v_mov_b32_e32 v8, v6 ; encoding: [0x06,0x03,0x10,0x7e] 508; GFX10-NEXT: v_mov_b32_e32 v9, v6 ; encoding: [0x06,0x03,0x12,0x7e] 509; GFX10-NEXT: v_mov_b32_e32 v10, v6 ; encoding: [0x06,0x03,0x14,0x7e] 510; GFX10-NEXT: v_mov_b32_e32 v0, v6 ; encoding: [0x06,0x03,0x00,0x7e] 511; GFX10-NEXT: v_mov_b32_e32 v1, v7 ; encoding: [0x07,0x03,0x02,0x7e] 512; GFX10-NEXT: v_mov_b32_e32 v2, v8 ; encoding: [0x08,0x03,0x04,0x7e] 513; GFX10-NEXT: v_mov_b32_e32 v3, v9 ; encoding: [0x09,0x03,0x06,0x7e] 514; GFX10-NEXT: v_mov_b32_e32 v4, v10 ; encoding: [0x0a,0x03,0x08,0x7e] 515; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s14 ; encoding: [0x7e,0x0e,0x7e,0x87] 516; GFX10-NEXT: image_sample v[0:4], v5, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D lwe ; encoding: [0x00,0x0f,0x82,0xf0,0x05,0x00,0x40,0x00] 517; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 518; GFX10-NEXT: global_store_dword v6, v4, s[12:13] ; encoding: [0x00,0x80,0x70,0xdc,0x06,0x04,0x0c,0x00] 519; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 ; encoding: [0x00,0x00,0xfd,0xbb] 520; GFX10-NEXT: ; return to shader part epilog 521main_body: 522 %v = call {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 2, i32 0) 523 %v.vec = extractvalue {<4 x float>, i32} %v, 0 524 %v.err = extractvalue {<4 x float>, i32} %v, 1 525 store i32 %v.err, i32 addrspace(1)* %out, align 4 526 ret <4 x float> %v.vec 527} 528 529define amdgpu_ps <4 x float> @sample_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t) { 530; VERDE-LABEL: sample_2d: 531; VERDE: ; %bb.0: ; %main_body 532; VERDE-NEXT: s_mov_b64 s[12:13], exec 533; VERDE-NEXT: s_wqm_b64 exec, exec 534; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 535; VERDE-NEXT: image_sample v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf 536; VERDE-NEXT: s_waitcnt vmcnt(0) 537; VERDE-NEXT: ; return to shader part epilog 538; 539; GFX6789-LABEL: sample_2d: 540; GFX6789: ; %bb.0: ; %main_body 541; GFX6789-NEXT: s_mov_b64 s[12:13], exec 542; GFX6789-NEXT: s_wqm_b64 exec, exec 543; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 544; GFX6789-NEXT: image_sample v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf 545; GFX6789-NEXT: s_waitcnt vmcnt(0) 546; GFX6789-NEXT: ; return to shader part epilog 547; 548; GFX10-LABEL: sample_2d: 549; GFX10: ; %bb.0: ; %main_body 550; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 551; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 552; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 553; GFX10-NEXT: image_sample v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0x80,0xf0,0x00,0x00,0x40,0x00] 554; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 555; GFX10-NEXT: ; return to shader part epilog 556main_body: 557 %v = call <4 x float> @llvm.amdgcn.image.sample.2d.v4f32.f32(i32 15, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 558 ret <4 x float> %v 559} 560 561define amdgpu_ps <4 x float> @sample_3d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t, float %r) { 562; VERDE-LABEL: sample_3d: 563; VERDE: ; %bb.0: ; %main_body 564; VERDE-NEXT: s_mov_b64 s[12:13], exec 565; VERDE-NEXT: s_wqm_b64 exec, exec 566; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 567; VERDE-NEXT: image_sample v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 568; VERDE-NEXT: s_waitcnt vmcnt(0) 569; VERDE-NEXT: ; return to shader part epilog 570; 571; GFX6789-LABEL: sample_3d: 572; GFX6789: ; %bb.0: ; %main_body 573; GFX6789-NEXT: s_mov_b64 s[12:13], exec 574; GFX6789-NEXT: s_wqm_b64 exec, exec 575; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 576; GFX6789-NEXT: image_sample v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 577; GFX6789-NEXT: s_waitcnt vmcnt(0) 578; GFX6789-NEXT: ; return to shader part epilog 579; 580; GFX10-LABEL: sample_3d: 581; GFX10: ; %bb.0: ; %main_body 582; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 583; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 584; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 585; GFX10-NEXT: image_sample v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_3D ; encoding: [0x10,0x0f,0x80,0xf0,0x00,0x00,0x40,0x00] 586; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 587; GFX10-NEXT: ; return to shader part epilog 588main_body: 589 %v = call <4 x float> @llvm.amdgcn.image.sample.3d.v4f32.f32(i32 15, float %s, float %t, float %r, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 590 ret <4 x float> %v 591} 592 593define amdgpu_ps <4 x float> @sample_cube(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t, float %face) { 594; VERDE-LABEL: sample_cube: 595; VERDE: ; %bb.0: ; %main_body 596; VERDE-NEXT: s_mov_b64 s[12:13], exec 597; VERDE-NEXT: s_wqm_b64 exec, exec 598; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 599; VERDE-NEXT: image_sample v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf da 600; VERDE-NEXT: s_waitcnt vmcnt(0) 601; VERDE-NEXT: ; return to shader part epilog 602; 603; GFX6789-LABEL: sample_cube: 604; GFX6789: ; %bb.0: ; %main_body 605; GFX6789-NEXT: s_mov_b64 s[12:13], exec 606; GFX6789-NEXT: s_wqm_b64 exec, exec 607; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 608; GFX6789-NEXT: image_sample v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf da 609; GFX6789-NEXT: s_waitcnt vmcnt(0) 610; GFX6789-NEXT: ; return to shader part epilog 611; 612; GFX10-LABEL: sample_cube: 613; GFX10: ; %bb.0: ; %main_body 614; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 615; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 616; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 617; GFX10-NEXT: image_sample v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_CUBE ; encoding: [0x18,0x0f,0x80,0xf0,0x00,0x00,0x40,0x00] 618; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 619; GFX10-NEXT: ; return to shader part epilog 620main_body: 621 %v = call <4 x float> @llvm.amdgcn.image.sample.cube.v4f32.f32(i32 15, float %s, float %t, float %face, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 622 ret <4 x float> %v 623} 624 625define amdgpu_ps <4 x float> @sample_1darray(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %slice) { 626; VERDE-LABEL: sample_1darray: 627; VERDE: ; %bb.0: ; %main_body 628; VERDE-NEXT: s_mov_b64 s[12:13], exec 629; VERDE-NEXT: s_wqm_b64 exec, exec 630; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 631; VERDE-NEXT: image_sample v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf da 632; VERDE-NEXT: s_waitcnt vmcnt(0) 633; VERDE-NEXT: ; return to shader part epilog 634; 635; GFX6789-LABEL: sample_1darray: 636; GFX6789: ; %bb.0: ; %main_body 637; GFX6789-NEXT: s_mov_b64 s[12:13], exec 638; GFX6789-NEXT: s_wqm_b64 exec, exec 639; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 640; GFX6789-NEXT: image_sample v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf da 641; GFX6789-NEXT: s_waitcnt vmcnt(0) 642; GFX6789-NEXT: ; return to shader part epilog 643; 644; GFX10-LABEL: sample_1darray: 645; GFX10: ; %bb.0: ; %main_body 646; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 647; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 648; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 649; GFX10-NEXT: image_sample v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY ; encoding: [0x20,0x0f,0x80,0xf0,0x00,0x00,0x40,0x00] 650; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 651; GFX10-NEXT: ; return to shader part epilog 652main_body: 653 %v = call <4 x float> @llvm.amdgcn.image.sample.1darray.v4f32.f32(i32 15, float %s, float %slice, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 654 ret <4 x float> %v 655} 656 657define amdgpu_ps <4 x float> @sample_2darray(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t, float %slice) { 658; VERDE-LABEL: sample_2darray: 659; VERDE: ; %bb.0: ; %main_body 660; VERDE-NEXT: s_mov_b64 s[12:13], exec 661; VERDE-NEXT: s_wqm_b64 exec, exec 662; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 663; VERDE-NEXT: image_sample v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf da 664; VERDE-NEXT: s_waitcnt vmcnt(0) 665; VERDE-NEXT: ; return to shader part epilog 666; 667; GFX6789-LABEL: sample_2darray: 668; GFX6789: ; %bb.0: ; %main_body 669; GFX6789-NEXT: s_mov_b64 s[12:13], exec 670; GFX6789-NEXT: s_wqm_b64 exec, exec 671; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 672; GFX6789-NEXT: image_sample v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf da 673; GFX6789-NEXT: s_waitcnt vmcnt(0) 674; GFX6789-NEXT: ; return to shader part epilog 675; 676; GFX10-LABEL: sample_2darray: 677; GFX10: ; %bb.0: ; %main_body 678; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 679; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 680; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 681; GFX10-NEXT: image_sample v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY ; encoding: [0x28,0x0f,0x80,0xf0,0x00,0x00,0x40,0x00] 682; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 683; GFX10-NEXT: ; return to shader part epilog 684main_body: 685 %v = call <4 x float> @llvm.amdgcn.image.sample.2darray.v4f32.f32(i32 15, float %s, float %t, float %slice, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 686 ret <4 x float> %v 687} 688 689define amdgpu_ps <4 x float> @sample_c_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %s) { 690; VERDE-LABEL: sample_c_1d: 691; VERDE: ; %bb.0: ; %main_body 692; VERDE-NEXT: s_mov_b64 s[12:13], exec 693; VERDE-NEXT: s_wqm_b64 exec, exec 694; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 695; VERDE-NEXT: image_sample_c v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf 696; VERDE-NEXT: s_waitcnt vmcnt(0) 697; VERDE-NEXT: ; return to shader part epilog 698; 699; GFX6789-LABEL: sample_c_1d: 700; GFX6789: ; %bb.0: ; %main_body 701; GFX6789-NEXT: s_mov_b64 s[12:13], exec 702; GFX6789-NEXT: s_wqm_b64 exec, exec 703; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 704; GFX6789-NEXT: image_sample_c v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf 705; GFX6789-NEXT: s_waitcnt vmcnt(0) 706; GFX6789-NEXT: ; return to shader part epilog 707; 708; GFX10-LABEL: sample_c_1d: 709; GFX10: ; %bb.0: ; %main_body 710; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 711; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 712; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 713; GFX10-NEXT: image_sample_c v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0xa0,0xf0,0x00,0x00,0x40,0x00] 714; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 715; GFX10-NEXT: ; return to shader part epilog 716main_body: 717 %v = call <4 x float> @llvm.amdgcn.image.sample.c.1d.v4f32.f32(i32 15, float %zcompare, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 718 ret <4 x float> %v 719} 720 721define amdgpu_ps <4 x float> @sample_c_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %s, float %t) { 722; VERDE-LABEL: sample_c_2d: 723; VERDE: ; %bb.0: ; %main_body 724; VERDE-NEXT: s_mov_b64 s[12:13], exec 725; VERDE-NEXT: s_wqm_b64 exec, exec 726; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 727; VERDE-NEXT: image_sample_c v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 728; VERDE-NEXT: s_waitcnt vmcnt(0) 729; VERDE-NEXT: ; return to shader part epilog 730; 731; GFX6789-LABEL: sample_c_2d: 732; GFX6789: ; %bb.0: ; %main_body 733; GFX6789-NEXT: s_mov_b64 s[12:13], exec 734; GFX6789-NEXT: s_wqm_b64 exec, exec 735; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 736; GFX6789-NEXT: image_sample_c v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 737; GFX6789-NEXT: s_waitcnt vmcnt(0) 738; GFX6789-NEXT: ; return to shader part epilog 739; 740; GFX10-LABEL: sample_c_2d: 741; GFX10: ; %bb.0: ; %main_body 742; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 743; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 744; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 745; GFX10-NEXT: image_sample_c v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0xa0,0xf0,0x00,0x00,0x40,0x00] 746; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 747; GFX10-NEXT: ; return to shader part epilog 748main_body: 749 %v = call <4 x float> @llvm.amdgcn.image.sample.c.2d.v4f32.f32(i32 15, float %zcompare, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 750 ret <4 x float> %v 751} 752 753define amdgpu_ps <4 x float> @sample_cl_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %clamp) { 754; VERDE-LABEL: sample_cl_1d: 755; VERDE: ; %bb.0: ; %main_body 756; VERDE-NEXT: s_mov_b64 s[12:13], exec 757; VERDE-NEXT: s_wqm_b64 exec, exec 758; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 759; VERDE-NEXT: image_sample_cl v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf 760; VERDE-NEXT: s_waitcnt vmcnt(0) 761; VERDE-NEXT: ; return to shader part epilog 762; 763; GFX6789-LABEL: sample_cl_1d: 764; GFX6789: ; %bb.0: ; %main_body 765; GFX6789-NEXT: s_mov_b64 s[12:13], exec 766; GFX6789-NEXT: s_wqm_b64 exec, exec 767; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 768; GFX6789-NEXT: image_sample_cl v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf 769; GFX6789-NEXT: s_waitcnt vmcnt(0) 770; GFX6789-NEXT: ; return to shader part epilog 771; 772; GFX10-LABEL: sample_cl_1d: 773; GFX10: ; %bb.0: ; %main_body 774; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 775; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 776; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 777; GFX10-NEXT: image_sample_cl v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0x84,0xf0,0x00,0x00,0x40,0x00] 778; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 779; GFX10-NEXT: ; return to shader part epilog 780main_body: 781 %v = call <4 x float> @llvm.amdgcn.image.sample.cl.1d.v4f32.f32(i32 15, float %s, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 782 ret <4 x float> %v 783} 784 785define amdgpu_ps <4 x float> @sample_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t, float %clamp) { 786; VERDE-LABEL: sample_cl_2d: 787; VERDE: ; %bb.0: ; %main_body 788; VERDE-NEXT: s_mov_b64 s[12:13], exec 789; VERDE-NEXT: s_wqm_b64 exec, exec 790; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 791; VERDE-NEXT: image_sample_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 792; VERDE-NEXT: s_waitcnt vmcnt(0) 793; VERDE-NEXT: ; return to shader part epilog 794; 795; GFX6789-LABEL: sample_cl_2d: 796; GFX6789: ; %bb.0: ; %main_body 797; GFX6789-NEXT: s_mov_b64 s[12:13], exec 798; GFX6789-NEXT: s_wqm_b64 exec, exec 799; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 800; GFX6789-NEXT: image_sample_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 801; GFX6789-NEXT: s_waitcnt vmcnt(0) 802; GFX6789-NEXT: ; return to shader part epilog 803; 804; GFX10-LABEL: sample_cl_2d: 805; GFX10: ; %bb.0: ; %main_body 806; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 807; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 808; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 809; GFX10-NEXT: image_sample_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0x84,0xf0,0x00,0x00,0x40,0x00] 810; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 811; GFX10-NEXT: ; return to shader part epilog 812main_body: 813 %v = call <4 x float> @llvm.amdgcn.image.sample.cl.2d.v4f32.f32(i32 15, float %s, float %t, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 814 ret <4 x float> %v 815} 816 817define amdgpu_ps <4 x float> @sample_c_cl_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %s, float %clamp) { 818; VERDE-LABEL: sample_c_cl_1d: 819; VERDE: ; %bb.0: ; %main_body 820; VERDE-NEXT: s_mov_b64 s[12:13], exec 821; VERDE-NEXT: s_wqm_b64 exec, exec 822; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 823; VERDE-NEXT: image_sample_c_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 824; VERDE-NEXT: s_waitcnt vmcnt(0) 825; VERDE-NEXT: ; return to shader part epilog 826; 827; GFX6789-LABEL: sample_c_cl_1d: 828; GFX6789: ; %bb.0: ; %main_body 829; GFX6789-NEXT: s_mov_b64 s[12:13], exec 830; GFX6789-NEXT: s_wqm_b64 exec, exec 831; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 832; GFX6789-NEXT: image_sample_c_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 833; GFX6789-NEXT: s_waitcnt vmcnt(0) 834; GFX6789-NEXT: ; return to shader part epilog 835; 836; GFX10-LABEL: sample_c_cl_1d: 837; GFX10: ; %bb.0: ; %main_body 838; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 839; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 840; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 841; GFX10-NEXT: image_sample_c_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0xa4,0xf0,0x00,0x00,0x40,0x00] 842; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 843; GFX10-NEXT: ; return to shader part epilog 844main_body: 845 %v = call <4 x float> @llvm.amdgcn.image.sample.c.cl.1d.v4f32.f32(i32 15, float %zcompare, float %s, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 846 ret <4 x float> %v 847} 848 849define amdgpu_ps <4 x float> @sample_c_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %s, float %t, float %clamp) { 850; VERDE-LABEL: sample_c_cl_2d: 851; VERDE: ; %bb.0: ; %main_body 852; VERDE-NEXT: s_mov_b64 s[12:13], exec 853; VERDE-NEXT: s_wqm_b64 exec, exec 854; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 855; VERDE-NEXT: image_sample_c_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 856; VERDE-NEXT: s_waitcnt vmcnt(0) 857; VERDE-NEXT: ; return to shader part epilog 858; 859; GFX6789-LABEL: sample_c_cl_2d: 860; GFX6789: ; %bb.0: ; %main_body 861; GFX6789-NEXT: s_mov_b64 s[12:13], exec 862; GFX6789-NEXT: s_wqm_b64 exec, exec 863; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 864; GFX6789-NEXT: image_sample_c_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 865; GFX6789-NEXT: s_waitcnt vmcnt(0) 866; GFX6789-NEXT: ; return to shader part epilog 867; 868; GFX10-LABEL: sample_c_cl_2d: 869; GFX10: ; %bb.0: ; %main_body 870; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 871; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 872; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 873; GFX10-NEXT: image_sample_c_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0xa4,0xf0,0x00,0x00,0x40,0x00] 874; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 875; GFX10-NEXT: ; return to shader part epilog 876main_body: 877 %v = call <4 x float> @llvm.amdgcn.image.sample.c.cl.2d.v4f32.f32(i32 15, float %zcompare, float %s, float %t, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 878 ret <4 x float> %v 879} 880 881define amdgpu_ps <4 x float> @sample_b_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %bias, float %s) { 882; VERDE-LABEL: sample_b_1d: 883; VERDE: ; %bb.0: ; %main_body 884; VERDE-NEXT: s_mov_b64 s[12:13], exec 885; VERDE-NEXT: s_wqm_b64 exec, exec 886; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 887; VERDE-NEXT: image_sample_b v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf 888; VERDE-NEXT: s_waitcnt vmcnt(0) 889; VERDE-NEXT: ; return to shader part epilog 890; 891; GFX6789-LABEL: sample_b_1d: 892; GFX6789: ; %bb.0: ; %main_body 893; GFX6789-NEXT: s_mov_b64 s[12:13], exec 894; GFX6789-NEXT: s_wqm_b64 exec, exec 895; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 896; GFX6789-NEXT: image_sample_b v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf 897; GFX6789-NEXT: s_waitcnt vmcnt(0) 898; GFX6789-NEXT: ; return to shader part epilog 899; 900; GFX10-LABEL: sample_b_1d: 901; GFX10: ; %bb.0: ; %main_body 902; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 903; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 904; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 905; GFX10-NEXT: image_sample_b v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0x94,0xf0,0x00,0x00,0x40,0x00] 906; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 907; GFX10-NEXT: ; return to shader part epilog 908main_body: 909 %v = call <4 x float> @llvm.amdgcn.image.sample.b.1d.v4f32.f32.f32(i32 15, float %bias, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 910 ret <4 x float> %v 911} 912 913define amdgpu_ps <4 x float> @sample_b_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %bias, float %s, float %t) { 914; VERDE-LABEL: sample_b_2d: 915; VERDE: ; %bb.0: ; %main_body 916; VERDE-NEXT: s_mov_b64 s[12:13], exec 917; VERDE-NEXT: s_wqm_b64 exec, exec 918; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 919; VERDE-NEXT: image_sample_b v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 920; VERDE-NEXT: s_waitcnt vmcnt(0) 921; VERDE-NEXT: ; return to shader part epilog 922; 923; GFX6789-LABEL: sample_b_2d: 924; GFX6789: ; %bb.0: ; %main_body 925; GFX6789-NEXT: s_mov_b64 s[12:13], exec 926; GFX6789-NEXT: s_wqm_b64 exec, exec 927; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 928; GFX6789-NEXT: image_sample_b v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 929; GFX6789-NEXT: s_waitcnt vmcnt(0) 930; GFX6789-NEXT: ; return to shader part epilog 931; 932; GFX10-LABEL: sample_b_2d: 933; GFX10: ; %bb.0: ; %main_body 934; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 935; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 936; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 937; GFX10-NEXT: image_sample_b v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0x94,0xf0,0x00,0x00,0x40,0x00] 938; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 939; GFX10-NEXT: ; return to shader part epilog 940main_body: 941 %v = call <4 x float> @llvm.amdgcn.image.sample.b.2d.v4f32.f32.f32(i32 15, float %bias, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 942 ret <4 x float> %v 943} 944 945define amdgpu_ps <4 x float> @sample_c_b_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %bias, float %zcompare, float %s) { 946; VERDE-LABEL: sample_c_b_1d: 947; VERDE: ; %bb.0: ; %main_body 948; VERDE-NEXT: s_mov_b64 s[12:13], exec 949; VERDE-NEXT: s_wqm_b64 exec, exec 950; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 951; VERDE-NEXT: image_sample_c_b v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 952; VERDE-NEXT: s_waitcnt vmcnt(0) 953; VERDE-NEXT: ; return to shader part epilog 954; 955; GFX6789-LABEL: sample_c_b_1d: 956; GFX6789: ; %bb.0: ; %main_body 957; GFX6789-NEXT: s_mov_b64 s[12:13], exec 958; GFX6789-NEXT: s_wqm_b64 exec, exec 959; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 960; GFX6789-NEXT: image_sample_c_b v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 961; GFX6789-NEXT: s_waitcnt vmcnt(0) 962; GFX6789-NEXT: ; return to shader part epilog 963; 964; GFX10-LABEL: sample_c_b_1d: 965; GFX10: ; %bb.0: ; %main_body 966; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 967; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 968; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 969; GFX10-NEXT: image_sample_c_b v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0xb4,0xf0,0x00,0x00,0x40,0x00] 970; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 971; GFX10-NEXT: ; return to shader part epilog 972main_body: 973 %v = call <4 x float> @llvm.amdgcn.image.sample.c.b.1d.v4f32.f32.f32(i32 15, float %bias, float %zcompare, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 974 ret <4 x float> %v 975} 976 977define amdgpu_ps <4 x float> @sample_c_b_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %bias, float %zcompare, float %s, float %t) { 978; VERDE-LABEL: sample_c_b_2d: 979; VERDE: ; %bb.0: ; %main_body 980; VERDE-NEXT: s_mov_b64 s[12:13], exec 981; VERDE-NEXT: s_wqm_b64 exec, exec 982; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 983; VERDE-NEXT: image_sample_c_b v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 984; VERDE-NEXT: s_waitcnt vmcnt(0) 985; VERDE-NEXT: ; return to shader part epilog 986; 987; GFX6789-LABEL: sample_c_b_2d: 988; GFX6789: ; %bb.0: ; %main_body 989; GFX6789-NEXT: s_mov_b64 s[12:13], exec 990; GFX6789-NEXT: s_wqm_b64 exec, exec 991; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 992; GFX6789-NEXT: image_sample_c_b v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 993; GFX6789-NEXT: s_waitcnt vmcnt(0) 994; GFX6789-NEXT: ; return to shader part epilog 995; 996; GFX10-LABEL: sample_c_b_2d: 997; GFX10: ; %bb.0: ; %main_body 998; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 999; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 1000; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 1001; GFX10-NEXT: image_sample_c_b v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0xb4,0xf0,0x00,0x00,0x40,0x00] 1002; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1003; GFX10-NEXT: ; return to shader part epilog 1004main_body: 1005 %v = call <4 x float> @llvm.amdgcn.image.sample.c.b.2d.v4f32.f32.f32(i32 15, float %bias, float %zcompare, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1006 ret <4 x float> %v 1007} 1008 1009define amdgpu_ps <4 x float> @sample_b_cl_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %bias, float %s, float %clamp) { 1010; VERDE-LABEL: sample_b_cl_1d: 1011; VERDE: ; %bb.0: ; %main_body 1012; VERDE-NEXT: s_mov_b64 s[12:13], exec 1013; VERDE-NEXT: s_wqm_b64 exec, exec 1014; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 1015; VERDE-NEXT: image_sample_b_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 1016; VERDE-NEXT: s_waitcnt vmcnt(0) 1017; VERDE-NEXT: ; return to shader part epilog 1018; 1019; GFX6789-LABEL: sample_b_cl_1d: 1020; GFX6789: ; %bb.0: ; %main_body 1021; GFX6789-NEXT: s_mov_b64 s[12:13], exec 1022; GFX6789-NEXT: s_wqm_b64 exec, exec 1023; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 1024; GFX6789-NEXT: image_sample_b_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 1025; GFX6789-NEXT: s_waitcnt vmcnt(0) 1026; GFX6789-NEXT: ; return to shader part epilog 1027; 1028; GFX10-LABEL: sample_b_cl_1d: 1029; GFX10: ; %bb.0: ; %main_body 1030; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 1031; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 1032; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 1033; GFX10-NEXT: image_sample_b_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0x98,0xf0,0x00,0x00,0x40,0x00] 1034; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1035; GFX10-NEXT: ; return to shader part epilog 1036main_body: 1037 %v = call <4 x float> @llvm.amdgcn.image.sample.b.cl.1d.v4f32.f32.f32(i32 15, float %bias, float %s, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1038 ret <4 x float> %v 1039} 1040 1041define amdgpu_ps <4 x float> @sample_b_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %bias, float %s, float %t, float %clamp) { 1042; VERDE-LABEL: sample_b_cl_2d: 1043; VERDE: ; %bb.0: ; %main_body 1044; VERDE-NEXT: s_mov_b64 s[12:13], exec 1045; VERDE-NEXT: s_wqm_b64 exec, exec 1046; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 1047; VERDE-NEXT: image_sample_b_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 1048; VERDE-NEXT: s_waitcnt vmcnt(0) 1049; VERDE-NEXT: ; return to shader part epilog 1050; 1051; GFX6789-LABEL: sample_b_cl_2d: 1052; GFX6789: ; %bb.0: ; %main_body 1053; GFX6789-NEXT: s_mov_b64 s[12:13], exec 1054; GFX6789-NEXT: s_wqm_b64 exec, exec 1055; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 1056; GFX6789-NEXT: image_sample_b_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 1057; GFX6789-NEXT: s_waitcnt vmcnt(0) 1058; GFX6789-NEXT: ; return to shader part epilog 1059; 1060; GFX10-LABEL: sample_b_cl_2d: 1061; GFX10: ; %bb.0: ; %main_body 1062; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 1063; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 1064; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 1065; GFX10-NEXT: image_sample_b_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0x98,0xf0,0x00,0x00,0x40,0x00] 1066; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1067; GFX10-NEXT: ; return to shader part epilog 1068main_body: 1069 %v = call <4 x float> @llvm.amdgcn.image.sample.b.cl.2d.v4f32.f32.f32(i32 15, float %bias, float %s, float %t, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1070 ret <4 x float> %v 1071} 1072 1073define amdgpu_ps <4 x float> @sample_c_b_cl_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %bias, float %zcompare, float %s, float %clamp) { 1074; VERDE-LABEL: sample_c_b_cl_1d: 1075; VERDE: ; %bb.0: ; %main_body 1076; VERDE-NEXT: s_mov_b64 s[12:13], exec 1077; VERDE-NEXT: s_wqm_b64 exec, exec 1078; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 1079; VERDE-NEXT: image_sample_c_b_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 1080; VERDE-NEXT: s_waitcnt vmcnt(0) 1081; VERDE-NEXT: ; return to shader part epilog 1082; 1083; GFX6789-LABEL: sample_c_b_cl_1d: 1084; GFX6789: ; %bb.0: ; %main_body 1085; GFX6789-NEXT: s_mov_b64 s[12:13], exec 1086; GFX6789-NEXT: s_wqm_b64 exec, exec 1087; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 1088; GFX6789-NEXT: image_sample_c_b_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 1089; GFX6789-NEXT: s_waitcnt vmcnt(0) 1090; GFX6789-NEXT: ; return to shader part epilog 1091; 1092; GFX10-LABEL: sample_c_b_cl_1d: 1093; GFX10: ; %bb.0: ; %main_body 1094; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 1095; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 1096; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 1097; GFX10-NEXT: image_sample_c_b_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0xb8,0xf0,0x00,0x00,0x40,0x00] 1098; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1099; GFX10-NEXT: ; return to shader part epilog 1100main_body: 1101 %v = call <4 x float> @llvm.amdgcn.image.sample.c.b.cl.1d.v4f32.f32.f32(i32 15, float %bias, float %zcompare, float %s, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1102 ret <4 x float> %v 1103} 1104 1105define amdgpu_ps <4 x float> @sample_c_b_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %bias, float %zcompare, float %s, float %t, float %clamp) { 1106; VERDE-LABEL: sample_c_b_cl_2d: 1107; VERDE: ; %bb.0: ; %main_body 1108; VERDE-NEXT: s_mov_b64 s[12:13], exec 1109; VERDE-NEXT: s_wqm_b64 exec, exec 1110; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 1111; VERDE-NEXT: image_sample_c_b_cl v[0:3], v[0:4], s[0:7], s[8:11] dmask:0xf 1112; VERDE-NEXT: s_waitcnt vmcnt(0) 1113; VERDE-NEXT: ; return to shader part epilog 1114; 1115; GFX6789-LABEL: sample_c_b_cl_2d: 1116; GFX6789: ; %bb.0: ; %main_body 1117; GFX6789-NEXT: s_mov_b64 s[12:13], exec 1118; GFX6789-NEXT: s_wqm_b64 exec, exec 1119; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 1120; GFX6789-NEXT: image_sample_c_b_cl v[0:3], v[0:4], s[0:7], s[8:11] dmask:0xf 1121; GFX6789-NEXT: s_waitcnt vmcnt(0) 1122; GFX6789-NEXT: ; return to shader part epilog 1123; 1124; GFX10-LABEL: sample_c_b_cl_2d: 1125; GFX10: ; %bb.0: ; %main_body 1126; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 1127; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 1128; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 1129; GFX10-NEXT: image_sample_c_b_cl v[0:3], v[0:4], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0xb8,0xf0,0x00,0x00,0x40,0x00] 1130; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1131; GFX10-NEXT: ; return to shader part epilog 1132main_body: 1133 %v = call <4 x float> @llvm.amdgcn.image.sample.c.b.cl.2d.v4f32.f32.f32(i32 15, float %bias, float %zcompare, float %s, float %t, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1134 ret <4 x float> %v 1135} 1136 1137define amdgpu_ps <4 x float> @sample_d_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %dsdh, float %dsdv, float %s) { 1138; VERDE-LABEL: sample_d_1d: 1139; VERDE: ; %bb.0: ; %main_body 1140; VERDE-NEXT: image_sample_d v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 1141; VERDE-NEXT: s_waitcnt vmcnt(0) 1142; VERDE-NEXT: ; return to shader part epilog 1143; 1144; GFX6789-LABEL: sample_d_1d: 1145; GFX6789: ; %bb.0: ; %main_body 1146; GFX6789-NEXT: image_sample_d v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 1147; GFX6789-NEXT: s_waitcnt vmcnt(0) 1148; GFX6789-NEXT: ; return to shader part epilog 1149; 1150; GFX10-LABEL: sample_d_1d: 1151; GFX10: ; %bb.0: ; %main_body 1152; GFX10-NEXT: image_sample_d v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0x88,0xf0,0x00,0x00,0x40,0x00] 1153; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1154; GFX10-NEXT: ; return to shader part epilog 1155main_body: 1156 %v = call <4 x float> @llvm.amdgcn.image.sample.d.1d.v4f32.f32.f32(i32 15, float %dsdh, float %dsdv, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1157 ret <4 x float> %v 1158} 1159 1160define amdgpu_ps <4 x float> @sample_d_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t) { 1161; VERDE-LABEL: sample_d_2d: 1162; VERDE: ; %bb.0: ; %main_body 1163; VERDE-NEXT: image_sample_d v[0:3], v[0:5], s[0:7], s[8:11] dmask:0xf 1164; VERDE-NEXT: s_waitcnt vmcnt(0) 1165; VERDE-NEXT: ; return to shader part epilog 1166; 1167; GFX6789-LABEL: sample_d_2d: 1168; GFX6789: ; %bb.0: ; %main_body 1169; GFX6789-NEXT: image_sample_d v[0:3], v[0:5], s[0:7], s[8:11] dmask:0xf 1170; GFX6789-NEXT: s_waitcnt vmcnt(0) 1171; GFX6789-NEXT: ; return to shader part epilog 1172; 1173; GFX10-LABEL: sample_d_2d: 1174; GFX10: ; %bb.0: ; %main_body 1175; GFX10-NEXT: image_sample_d v[0:3], v[0:5], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0x88,0xf0,0x00,0x00,0x40,0x00] 1176; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1177; GFX10-NEXT: ; return to shader part epilog 1178main_body: 1179 %v = call <4 x float> @llvm.amdgcn.image.sample.d.2d.v4f32.f32.f32(i32 15, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1180 ret <4 x float> %v 1181} 1182 1183define amdgpu_ps <4 x float> @sample_c_d_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %dsdh, float %dsdv, float %s) { 1184; VERDE-LABEL: sample_c_d_1d: 1185; VERDE: ; %bb.0: ; %main_body 1186; VERDE-NEXT: image_sample_c_d v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 1187; VERDE-NEXT: s_waitcnt vmcnt(0) 1188; VERDE-NEXT: ; return to shader part epilog 1189; 1190; GFX6789-LABEL: sample_c_d_1d: 1191; GFX6789: ; %bb.0: ; %main_body 1192; GFX6789-NEXT: image_sample_c_d v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 1193; GFX6789-NEXT: s_waitcnt vmcnt(0) 1194; GFX6789-NEXT: ; return to shader part epilog 1195; 1196; GFX10-LABEL: sample_c_d_1d: 1197; GFX10: ; %bb.0: ; %main_body 1198; GFX10-NEXT: image_sample_c_d v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0xa8,0xf0,0x00,0x00,0x40,0x00] 1199; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1200; GFX10-NEXT: ; return to shader part epilog 1201main_body: 1202 %v = call <4 x float> @llvm.amdgcn.image.sample.c.d.1d.v4f32.f32.f32(i32 15, float %zcompare, float %dsdh, float %dsdv, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1203 ret <4 x float> %v 1204} 1205 1206define amdgpu_ps <4 x float> @sample_c_d_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t) { 1207; VERDE-LABEL: sample_c_d_2d: 1208; VERDE: ; %bb.0: ; %main_body 1209; VERDE-NEXT: image_sample_c_d v[0:3], v[0:6], s[0:7], s[8:11] dmask:0xf 1210; VERDE-NEXT: s_waitcnt vmcnt(0) 1211; VERDE-NEXT: ; return to shader part epilog 1212; 1213; GFX6789-LABEL: sample_c_d_2d: 1214; GFX6789: ; %bb.0: ; %main_body 1215; GFX6789-NEXT: image_sample_c_d v[0:3], v[0:6], s[0:7], s[8:11] dmask:0xf 1216; GFX6789-NEXT: s_waitcnt vmcnt(0) 1217; GFX6789-NEXT: ; return to shader part epilog 1218; 1219; GFX10-LABEL: sample_c_d_2d: 1220; GFX10: ; %bb.0: ; %main_body 1221; GFX10-NEXT: image_sample_c_d v[0:3], v[0:6], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0xa8,0xf0,0x00,0x00,0x40,0x00] 1222; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1223; GFX10-NEXT: ; return to shader part epilog 1224main_body: 1225 %v = call <4 x float> @llvm.amdgcn.image.sample.c.d.2d.v4f32.f32.f32(i32 15, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1226 ret <4 x float> %v 1227} 1228 1229define amdgpu_ps <4 x float> @sample_d_cl_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %dsdh, float %dsdv, float %s, float %clamp) { 1230; VERDE-LABEL: sample_d_cl_1d: 1231; VERDE: ; %bb.0: ; %main_body 1232; VERDE-NEXT: image_sample_d_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 1233; VERDE-NEXT: s_waitcnt vmcnt(0) 1234; VERDE-NEXT: ; return to shader part epilog 1235; 1236; GFX6789-LABEL: sample_d_cl_1d: 1237; GFX6789: ; %bb.0: ; %main_body 1238; GFX6789-NEXT: image_sample_d_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 1239; GFX6789-NEXT: s_waitcnt vmcnt(0) 1240; GFX6789-NEXT: ; return to shader part epilog 1241; 1242; GFX10-LABEL: sample_d_cl_1d: 1243; GFX10: ; %bb.0: ; %main_body 1244; GFX10-NEXT: image_sample_d_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0x8c,0xf0,0x00,0x00,0x40,0x00] 1245; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1246; GFX10-NEXT: ; return to shader part epilog 1247main_body: 1248 %v = call <4 x float> @llvm.amdgcn.image.sample.d.cl.1d.v4f32.f32.f32(i32 15, float %dsdh, float %dsdv, float %s, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1249 ret <4 x float> %v 1250} 1251 1252define amdgpu_ps <4 x float> @sample_d_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %clamp) { 1253; VERDE-LABEL: sample_d_cl_2d: 1254; VERDE: ; %bb.0: ; %main_body 1255; VERDE-NEXT: image_sample_d_cl v[0:3], v[0:6], s[0:7], s[8:11] dmask:0xf 1256; VERDE-NEXT: s_waitcnt vmcnt(0) 1257; VERDE-NEXT: ; return to shader part epilog 1258; 1259; GFX6789-LABEL: sample_d_cl_2d: 1260; GFX6789: ; %bb.0: ; %main_body 1261; GFX6789-NEXT: image_sample_d_cl v[0:3], v[0:6], s[0:7], s[8:11] dmask:0xf 1262; GFX6789-NEXT: s_waitcnt vmcnt(0) 1263; GFX6789-NEXT: ; return to shader part epilog 1264; 1265; GFX10-LABEL: sample_d_cl_2d: 1266; GFX10: ; %bb.0: ; %main_body 1267; GFX10-NEXT: image_sample_d_cl v[0:3], v[0:6], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0x8c,0xf0,0x00,0x00,0x40,0x00] 1268; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1269; GFX10-NEXT: ; return to shader part epilog 1270main_body: 1271 %v = call <4 x float> @llvm.amdgcn.image.sample.d.cl.2d.v4f32.f32.f32(i32 15, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1272 ret <4 x float> %v 1273} 1274 1275define amdgpu_ps <4 x float> @sample_c_d_cl_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %dsdh, float %dsdv, float %s, float %clamp) { 1276; VERDE-LABEL: sample_c_d_cl_1d: 1277; VERDE: ; %bb.0: ; %main_body 1278; VERDE-NEXT: image_sample_c_d_cl v[0:3], v[0:4], s[0:7], s[8:11] dmask:0xf 1279; VERDE-NEXT: s_waitcnt vmcnt(0) 1280; VERDE-NEXT: ; return to shader part epilog 1281; 1282; GFX6789-LABEL: sample_c_d_cl_1d: 1283; GFX6789: ; %bb.0: ; %main_body 1284; GFX6789-NEXT: image_sample_c_d_cl v[0:3], v[0:4], s[0:7], s[8:11] dmask:0xf 1285; GFX6789-NEXT: s_waitcnt vmcnt(0) 1286; GFX6789-NEXT: ; return to shader part epilog 1287; 1288; GFX10-LABEL: sample_c_d_cl_1d: 1289; GFX10: ; %bb.0: ; %main_body 1290; GFX10-NEXT: image_sample_c_d_cl v[0:3], v[0:4], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0xac,0xf0,0x00,0x00,0x40,0x00] 1291; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1292; GFX10-NEXT: ; return to shader part epilog 1293main_body: 1294 %v = call <4 x float> @llvm.amdgcn.image.sample.c.d.cl.1d.v4f32.f32.f32(i32 15, float %zcompare, float %dsdh, float %dsdv, float %s, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1295 ret <4 x float> %v 1296} 1297 1298define amdgpu_ps <4 x float> @sample_c_d_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %clamp) { 1299; VERDE-LABEL: sample_c_d_cl_2d: 1300; VERDE: ; %bb.0: ; %main_body 1301; VERDE-NEXT: image_sample_c_d_cl v[0:3], v[0:7], s[0:7], s[8:11] dmask:0xf 1302; VERDE-NEXT: s_waitcnt vmcnt(0) 1303; VERDE-NEXT: ; return to shader part epilog 1304; 1305; GFX6789-LABEL: sample_c_d_cl_2d: 1306; GFX6789: ; %bb.0: ; %main_body 1307; GFX6789-NEXT: image_sample_c_d_cl v[0:3], v[0:7], s[0:7], s[8:11] dmask:0xf 1308; GFX6789-NEXT: s_waitcnt vmcnt(0) 1309; GFX6789-NEXT: ; return to shader part epilog 1310; 1311; GFX10-LABEL: sample_c_d_cl_2d: 1312; GFX10: ; %bb.0: ; %main_body 1313; GFX10-NEXT: image_sample_c_d_cl v[0:3], v[0:7], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0xac,0xf0,0x00,0x00,0x40,0x00] 1314; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1315; GFX10-NEXT: ; return to shader part epilog 1316main_body: 1317 %v = call <4 x float> @llvm.amdgcn.image.sample.c.d.cl.2d.v4f32.f32.f32(i32 15, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1318 ret <4 x float> %v 1319} 1320 1321define amdgpu_ps <4 x float> @sample_cd_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %dsdh, float %dsdv, float %s) { 1322; VERDE-LABEL: sample_cd_1d: 1323; VERDE: ; %bb.0: ; %main_body 1324; VERDE-NEXT: image_sample_cd v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 1325; VERDE-NEXT: s_waitcnt vmcnt(0) 1326; VERDE-NEXT: ; return to shader part epilog 1327; 1328; GFX6789-LABEL: sample_cd_1d: 1329; GFX6789: ; %bb.0: ; %main_body 1330; GFX6789-NEXT: image_sample_cd v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 1331; GFX6789-NEXT: s_waitcnt vmcnt(0) 1332; GFX6789-NEXT: ; return to shader part epilog 1333; 1334; GFX10-LABEL: sample_cd_1d: 1335; GFX10: ; %bb.0: ; %main_body 1336; GFX10-NEXT: image_sample_cd v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0xa0,0xf1,0x00,0x00,0x40,0x00] 1337; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1338; GFX10-NEXT: ; return to shader part epilog 1339main_body: 1340 %v = call <4 x float> @llvm.amdgcn.image.sample.cd.1d.v4f32.f32.f32(i32 15, float %dsdh, float %dsdv, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1341 ret <4 x float> %v 1342} 1343 1344define amdgpu_ps <4 x float> @sample_cd_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t) { 1345; VERDE-LABEL: sample_cd_2d: 1346; VERDE: ; %bb.0: ; %main_body 1347; VERDE-NEXT: image_sample_cd v[0:3], v[0:5], s[0:7], s[8:11] dmask:0xf 1348; VERDE-NEXT: s_waitcnt vmcnt(0) 1349; VERDE-NEXT: ; return to shader part epilog 1350; 1351; GFX6789-LABEL: sample_cd_2d: 1352; GFX6789: ; %bb.0: ; %main_body 1353; GFX6789-NEXT: image_sample_cd v[0:3], v[0:5], s[0:7], s[8:11] dmask:0xf 1354; GFX6789-NEXT: s_waitcnt vmcnt(0) 1355; GFX6789-NEXT: ; return to shader part epilog 1356; 1357; GFX10-LABEL: sample_cd_2d: 1358; GFX10: ; %bb.0: ; %main_body 1359; GFX10-NEXT: image_sample_cd v[0:3], v[0:5], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0xa0,0xf1,0x00,0x00,0x40,0x00] 1360; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1361; GFX10-NEXT: ; return to shader part epilog 1362main_body: 1363 %v = call <4 x float> @llvm.amdgcn.image.sample.cd.2d.v4f32.f32.f32(i32 15, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1364 ret <4 x float> %v 1365} 1366 1367define amdgpu_ps <4 x float> @sample_c_cd_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %dsdh, float %dsdv, float %s) { 1368; VERDE-LABEL: sample_c_cd_1d: 1369; VERDE: ; %bb.0: ; %main_body 1370; VERDE-NEXT: image_sample_c_cd v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 1371; VERDE-NEXT: s_waitcnt vmcnt(0) 1372; VERDE-NEXT: ; return to shader part epilog 1373; 1374; GFX6789-LABEL: sample_c_cd_1d: 1375; GFX6789: ; %bb.0: ; %main_body 1376; GFX6789-NEXT: image_sample_c_cd v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 1377; GFX6789-NEXT: s_waitcnt vmcnt(0) 1378; GFX6789-NEXT: ; return to shader part epilog 1379; 1380; GFX10-LABEL: sample_c_cd_1d: 1381; GFX10: ; %bb.0: ; %main_body 1382; GFX10-NEXT: image_sample_c_cd v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0xa8,0xf1,0x00,0x00,0x40,0x00] 1383; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1384; GFX10-NEXT: ; return to shader part epilog 1385main_body: 1386 %v = call <4 x float> @llvm.amdgcn.image.sample.c.cd.1d.v4f32.f32.f32(i32 15, float %zcompare, float %dsdh, float %dsdv, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1387 ret <4 x float> %v 1388} 1389 1390define amdgpu_ps <4 x float> @sample_c_cd_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t) { 1391; VERDE-LABEL: sample_c_cd_2d: 1392; VERDE: ; %bb.0: ; %main_body 1393; VERDE-NEXT: image_sample_c_cd v[0:3], v[0:6], s[0:7], s[8:11] dmask:0xf 1394; VERDE-NEXT: s_waitcnt vmcnt(0) 1395; VERDE-NEXT: ; return to shader part epilog 1396; 1397; GFX6789-LABEL: sample_c_cd_2d: 1398; GFX6789: ; %bb.0: ; %main_body 1399; GFX6789-NEXT: image_sample_c_cd v[0:3], v[0:6], s[0:7], s[8:11] dmask:0xf 1400; GFX6789-NEXT: s_waitcnt vmcnt(0) 1401; GFX6789-NEXT: ; return to shader part epilog 1402; 1403; GFX10-LABEL: sample_c_cd_2d: 1404; GFX10: ; %bb.0: ; %main_body 1405; GFX10-NEXT: image_sample_c_cd v[0:3], v[0:6], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0xa8,0xf1,0x00,0x00,0x40,0x00] 1406; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1407; GFX10-NEXT: ; return to shader part epilog 1408main_body: 1409 %v = call <4 x float> @llvm.amdgcn.image.sample.c.cd.2d.v4f32.f32.f32(i32 15, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1410 ret <4 x float> %v 1411} 1412 1413define amdgpu_ps <4 x float> @sample_cd_cl_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %dsdh, float %dsdv, float %s, float %clamp) { 1414; VERDE-LABEL: sample_cd_cl_1d: 1415; VERDE: ; %bb.0: ; %main_body 1416; VERDE-NEXT: image_sample_cd_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 1417; VERDE-NEXT: s_waitcnt vmcnt(0) 1418; VERDE-NEXT: ; return to shader part epilog 1419; 1420; GFX6789-LABEL: sample_cd_cl_1d: 1421; GFX6789: ; %bb.0: ; %main_body 1422; GFX6789-NEXT: image_sample_cd_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 1423; GFX6789-NEXT: s_waitcnt vmcnt(0) 1424; GFX6789-NEXT: ; return to shader part epilog 1425; 1426; GFX10-LABEL: sample_cd_cl_1d: 1427; GFX10: ; %bb.0: ; %main_body 1428; GFX10-NEXT: image_sample_cd_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0xa4,0xf1,0x00,0x00,0x40,0x00] 1429; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1430; GFX10-NEXT: ; return to shader part epilog 1431main_body: 1432 %v = call <4 x float> @llvm.amdgcn.image.sample.cd.cl.1d.v4f32.f32.f32(i32 15, float %dsdh, float %dsdv, float %s, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1433 ret <4 x float> %v 1434} 1435 1436define amdgpu_ps <4 x float> @sample_cd_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %clamp) { 1437; VERDE-LABEL: sample_cd_cl_2d: 1438; VERDE: ; %bb.0: ; %main_body 1439; VERDE-NEXT: image_sample_cd_cl v[0:3], v[0:6], s[0:7], s[8:11] dmask:0xf 1440; VERDE-NEXT: s_waitcnt vmcnt(0) 1441; VERDE-NEXT: ; return to shader part epilog 1442; 1443; GFX6789-LABEL: sample_cd_cl_2d: 1444; GFX6789: ; %bb.0: ; %main_body 1445; GFX6789-NEXT: image_sample_cd_cl v[0:3], v[0:6], s[0:7], s[8:11] dmask:0xf 1446; GFX6789-NEXT: s_waitcnt vmcnt(0) 1447; GFX6789-NEXT: ; return to shader part epilog 1448; 1449; GFX10-LABEL: sample_cd_cl_2d: 1450; GFX10: ; %bb.0: ; %main_body 1451; GFX10-NEXT: image_sample_cd_cl v[0:3], v[0:6], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0xa4,0xf1,0x00,0x00,0x40,0x00] 1452; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1453; GFX10-NEXT: ; return to shader part epilog 1454main_body: 1455 %v = call <4 x float> @llvm.amdgcn.image.sample.cd.cl.2d.v4f32.f32.f32(i32 15, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1456 ret <4 x float> %v 1457} 1458 1459define amdgpu_ps <4 x float> @sample_c_cd_cl_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %dsdh, float %dsdv, float %s, float %clamp) { 1460; VERDE-LABEL: sample_c_cd_cl_1d: 1461; VERDE: ; %bb.0: ; %main_body 1462; VERDE-NEXT: image_sample_c_cd_cl v[0:3], v[0:4], s[0:7], s[8:11] dmask:0xf 1463; VERDE-NEXT: s_waitcnt vmcnt(0) 1464; VERDE-NEXT: ; return to shader part epilog 1465; 1466; GFX6789-LABEL: sample_c_cd_cl_1d: 1467; GFX6789: ; %bb.0: ; %main_body 1468; GFX6789-NEXT: image_sample_c_cd_cl v[0:3], v[0:4], s[0:7], s[8:11] dmask:0xf 1469; GFX6789-NEXT: s_waitcnt vmcnt(0) 1470; GFX6789-NEXT: ; return to shader part epilog 1471; 1472; GFX10-LABEL: sample_c_cd_cl_1d: 1473; GFX10: ; %bb.0: ; %main_body 1474; GFX10-NEXT: image_sample_c_cd_cl v[0:3], v[0:4], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0xac,0xf1,0x00,0x00,0x40,0x00] 1475; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1476; GFX10-NEXT: ; return to shader part epilog 1477main_body: 1478 %v = call <4 x float> @llvm.amdgcn.image.sample.c.cd.cl.1d.v4f32.f32.f32(i32 15, float %zcompare, float %dsdh, float %dsdv, float %s, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1479 ret <4 x float> %v 1480} 1481 1482define amdgpu_ps <4 x float> @sample_c_cd_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %clamp) { 1483; VERDE-LABEL: sample_c_cd_cl_2d: 1484; VERDE: ; %bb.0: ; %main_body 1485; VERDE-NEXT: image_sample_c_cd_cl v[0:3], v[0:7], s[0:7], s[8:11] dmask:0xf 1486; VERDE-NEXT: s_waitcnt vmcnt(0) 1487; VERDE-NEXT: ; return to shader part epilog 1488; 1489; GFX6789-LABEL: sample_c_cd_cl_2d: 1490; GFX6789: ; %bb.0: ; %main_body 1491; GFX6789-NEXT: image_sample_c_cd_cl v[0:3], v[0:7], s[0:7], s[8:11] dmask:0xf 1492; GFX6789-NEXT: s_waitcnt vmcnt(0) 1493; GFX6789-NEXT: ; return to shader part epilog 1494; 1495; GFX10-LABEL: sample_c_cd_cl_2d: 1496; GFX10: ; %bb.0: ; %main_body 1497; GFX10-NEXT: image_sample_c_cd_cl v[0:3], v[0:7], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0xac,0xf1,0x00,0x00,0x40,0x00] 1498; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1499; GFX10-NEXT: ; return to shader part epilog 1500main_body: 1501 %v = call <4 x float> @llvm.amdgcn.image.sample.c.cd.cl.2d.v4f32.f32.f32(i32 15, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1502 ret <4 x float> %v 1503} 1504 1505define amdgpu_ps <4 x float> @sample_l_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %lod) { 1506; VERDE-LABEL: sample_l_1d: 1507; VERDE: ; %bb.0: ; %main_body 1508; VERDE-NEXT: image_sample_l v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf 1509; VERDE-NEXT: s_waitcnt vmcnt(0) 1510; VERDE-NEXT: ; return to shader part epilog 1511; 1512; GFX6789-LABEL: sample_l_1d: 1513; GFX6789: ; %bb.0: ; %main_body 1514; GFX6789-NEXT: image_sample_l v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf 1515; GFX6789-NEXT: s_waitcnt vmcnt(0) 1516; GFX6789-NEXT: ; return to shader part epilog 1517; 1518; GFX10-LABEL: sample_l_1d: 1519; GFX10: ; %bb.0: ; %main_body 1520; GFX10-NEXT: image_sample_l v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0x90,0xf0,0x00,0x00,0x40,0x00] 1521; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1522; GFX10-NEXT: ; return to shader part epilog 1523main_body: 1524 %v = call <4 x float> @llvm.amdgcn.image.sample.l.1d.v4f32.f32(i32 15, float %s, float %lod, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1525 ret <4 x float> %v 1526} 1527 1528define amdgpu_ps <4 x float> @sample_l_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t, float %lod) { 1529; VERDE-LABEL: sample_l_2d: 1530; VERDE: ; %bb.0: ; %main_body 1531; VERDE-NEXT: image_sample_l v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 1532; VERDE-NEXT: s_waitcnt vmcnt(0) 1533; VERDE-NEXT: ; return to shader part epilog 1534; 1535; GFX6789-LABEL: sample_l_2d: 1536; GFX6789: ; %bb.0: ; %main_body 1537; GFX6789-NEXT: image_sample_l v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 1538; GFX6789-NEXT: s_waitcnt vmcnt(0) 1539; GFX6789-NEXT: ; return to shader part epilog 1540; 1541; GFX10-LABEL: sample_l_2d: 1542; GFX10: ; %bb.0: ; %main_body 1543; GFX10-NEXT: image_sample_l v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0x90,0xf0,0x00,0x00,0x40,0x00] 1544; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1545; GFX10-NEXT: ; return to shader part epilog 1546main_body: 1547 %v = call <4 x float> @llvm.amdgcn.image.sample.l.2d.v4f32.f32(i32 15, float %s, float %t, float %lod, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1548 ret <4 x float> %v 1549} 1550 1551define amdgpu_ps <4 x float> @sample_c_l_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %s, float %lod) { 1552; VERDE-LABEL: sample_c_l_1d: 1553; VERDE: ; %bb.0: ; %main_body 1554; VERDE-NEXT: image_sample_c_l v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 1555; VERDE-NEXT: s_waitcnt vmcnt(0) 1556; VERDE-NEXT: ; return to shader part epilog 1557; 1558; GFX6789-LABEL: sample_c_l_1d: 1559; GFX6789: ; %bb.0: ; %main_body 1560; GFX6789-NEXT: image_sample_c_l v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 1561; GFX6789-NEXT: s_waitcnt vmcnt(0) 1562; GFX6789-NEXT: ; return to shader part epilog 1563; 1564; GFX10-LABEL: sample_c_l_1d: 1565; GFX10: ; %bb.0: ; %main_body 1566; GFX10-NEXT: image_sample_c_l v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0xb0,0xf0,0x00,0x00,0x40,0x00] 1567; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1568; GFX10-NEXT: ; return to shader part epilog 1569main_body: 1570 %v = call <4 x float> @llvm.amdgcn.image.sample.c.l.1d.v4f32.f32(i32 15, float %zcompare, float %s, float %lod, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1571 ret <4 x float> %v 1572} 1573 1574define amdgpu_ps <4 x float> @sample_c_l_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %s, float %t, float %lod) { 1575; VERDE-LABEL: sample_c_l_2d: 1576; VERDE: ; %bb.0: ; %main_body 1577; VERDE-NEXT: image_sample_c_l v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 1578; VERDE-NEXT: s_waitcnt vmcnt(0) 1579; VERDE-NEXT: ; return to shader part epilog 1580; 1581; GFX6789-LABEL: sample_c_l_2d: 1582; GFX6789: ; %bb.0: ; %main_body 1583; GFX6789-NEXT: image_sample_c_l v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf 1584; GFX6789-NEXT: s_waitcnt vmcnt(0) 1585; GFX6789-NEXT: ; return to shader part epilog 1586; 1587; GFX10-LABEL: sample_c_l_2d: 1588; GFX10: ; %bb.0: ; %main_body 1589; GFX10-NEXT: image_sample_c_l v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0xb0,0xf0,0x00,0x00,0x40,0x00] 1590; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1591; GFX10-NEXT: ; return to shader part epilog 1592main_body: 1593 %v = call <4 x float> @llvm.amdgcn.image.sample.c.l.2d.v4f32.f32(i32 15, float %zcompare, float %s, float %t, float %lod, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1594 ret <4 x float> %v 1595} 1596 1597define amdgpu_ps <4 x float> @sample_lz_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 1598; VERDE-LABEL: sample_lz_1d: 1599; VERDE: ; %bb.0: ; %main_body 1600; VERDE-NEXT: image_sample_lz v[0:3], v0, s[0:7], s[8:11] dmask:0xf 1601; VERDE-NEXT: s_waitcnt vmcnt(0) 1602; VERDE-NEXT: ; return to shader part epilog 1603; 1604; GFX6789-LABEL: sample_lz_1d: 1605; GFX6789: ; %bb.0: ; %main_body 1606; GFX6789-NEXT: image_sample_lz v[0:3], v0, s[0:7], s[8:11] dmask:0xf 1607; GFX6789-NEXT: s_waitcnt vmcnt(0) 1608; GFX6789-NEXT: ; return to shader part epilog 1609; 1610; GFX10-LABEL: sample_lz_1d: 1611; GFX10: ; %bb.0: ; %main_body 1612; GFX10-NEXT: image_sample_lz v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0x9c,0xf0,0x00,0x00,0x40,0x00] 1613; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1614; GFX10-NEXT: ; return to shader part epilog 1615main_body: 1616 %v = call <4 x float> @llvm.amdgcn.image.sample.lz.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1617 ret <4 x float> %v 1618} 1619 1620define amdgpu_ps <4 x float> @sample_lz_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s, float %t) { 1621; VERDE-LABEL: sample_lz_2d: 1622; VERDE: ; %bb.0: ; %main_body 1623; VERDE-NEXT: image_sample_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf 1624; VERDE-NEXT: s_waitcnt vmcnt(0) 1625; VERDE-NEXT: ; return to shader part epilog 1626; 1627; GFX6789-LABEL: sample_lz_2d: 1628; GFX6789: ; %bb.0: ; %main_body 1629; GFX6789-NEXT: image_sample_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf 1630; GFX6789-NEXT: s_waitcnt vmcnt(0) 1631; GFX6789-NEXT: ; return to shader part epilog 1632; 1633; GFX10-LABEL: sample_lz_2d: 1634; GFX10: ; %bb.0: ; %main_body 1635; GFX10-NEXT: image_sample_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0x9c,0xf0,0x00,0x00,0x40,0x00] 1636; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1637; GFX10-NEXT: ; return to shader part epilog 1638main_body: 1639 %v = call <4 x float> @llvm.amdgcn.image.sample.lz.2d.v4f32.f32(i32 15, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1640 ret <4 x float> %v 1641} 1642 1643define amdgpu_ps <4 x float> @sample_c_lz_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %s) { 1644; VERDE-LABEL: sample_c_lz_1d: 1645; VERDE: ; %bb.0: ; %main_body 1646; VERDE-NEXT: image_sample_c_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf 1647; VERDE-NEXT: s_waitcnt vmcnt(0) 1648; VERDE-NEXT: ; return to shader part epilog 1649; 1650; GFX6789-LABEL: sample_c_lz_1d: 1651; GFX6789: ; %bb.0: ; %main_body 1652; GFX6789-NEXT: image_sample_c_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf 1653; GFX6789-NEXT: s_waitcnt vmcnt(0) 1654; GFX6789-NEXT: ; return to shader part epilog 1655; 1656; GFX10-LABEL: sample_c_lz_1d: 1657; GFX10: ; %bb.0: ; %main_body 1658; GFX10-NEXT: image_sample_c_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0f,0xbc,0xf0,0x00,0x00,0x40,0x00] 1659; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1660; GFX10-NEXT: ; return to shader part epilog 1661main_body: 1662 %v = call <4 x float> @llvm.amdgcn.image.sample.c.lz.1d.v4f32.f32(i32 15, float %zcompare, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1663 ret <4 x float> %v 1664} 1665 1666define amdgpu_ps <4 x float> @sample_c_lz_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, float %s, float %t) { 1667; VERDE-LABEL: sample_c_lz_2d: 1668; VERDE: ; %bb.0: ; %main_body 1669; VERDE-NEXT: image_sample_c_lz v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 1670; VERDE-NEXT: s_waitcnt vmcnt(0) 1671; VERDE-NEXT: ; return to shader part epilog 1672; 1673; GFX6789-LABEL: sample_c_lz_2d: 1674; GFX6789: ; %bb.0: ; %main_body 1675; GFX6789-NEXT: image_sample_c_lz v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf 1676; GFX6789-NEXT: s_waitcnt vmcnt(0) 1677; GFX6789-NEXT: ; return to shader part epilog 1678; 1679; GFX10-LABEL: sample_c_lz_2d: 1680; GFX10: ; %bb.0: ; %main_body 1681; GFX10-NEXT: image_sample_c_lz v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x08,0x0f,0xbc,0xf0,0x00,0x00,0x40,0x00] 1682; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1683; GFX10-NEXT: ; return to shader part epilog 1684main_body: 1685 %v = call <4 x float> @llvm.amdgcn.image.sample.c.lz.2d.v4f32.f32(i32 15, float %zcompare, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1686 ret <4 x float> %v 1687} 1688 1689define amdgpu_ps float @sample_c_d_o_2darray_V1(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice) { 1690; VERDE-LABEL: sample_c_d_o_2darray_V1: 1691; VERDE: ; %bb.0: ; %main_body 1692; VERDE-NEXT: image_sample_c_d_o v0, v[0:15], s[0:7], s[8:11] dmask:0x4 da 1693; VERDE-NEXT: s_waitcnt vmcnt(0) 1694; VERDE-NEXT: ; return to shader part epilog 1695; 1696; GFX6789-LABEL: sample_c_d_o_2darray_V1: 1697; GFX6789: ; %bb.0: ; %main_body 1698; GFX6789-NEXT: image_sample_c_d_o v0, v[0:15], s[0:7], s[8:11] dmask:0x4 da 1699; GFX6789-NEXT: s_waitcnt vmcnt(0) 1700; GFX6789-NEXT: ; return to shader part epilog 1701; 1702; GFX10-LABEL: sample_c_d_o_2darray_V1: 1703; GFX10: ; %bb.0: ; %main_body 1704; GFX10-NEXT: image_sample_c_d_o v0, v[0:15], s[0:7], s[8:11] dmask:0x4 dim:SQ_RSRC_IMG_2D_ARRAY ; encoding: [0x28,0x04,0xe8,0xf0,0x00,0x00,0x40,0x00] 1705; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1706; GFX10-NEXT: ; return to shader part epilog 1707main_body: 1708 %v = call float @llvm.amdgcn.image.sample.c.d.o.2darray.f32.f32.f32(i32 4, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1709 ret float %v 1710} 1711 1712define amdgpu_ps float @sample_c_d_o_2darray_V1_tfe(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice, i32 addrspace(1)* inreg %out) { 1713; VERDE-LABEL: sample_c_d_o_2darray_V1_tfe: 1714; VERDE: ; %bb.0: ; %main_body 1715; VERDE-NEXT: v_mov_b32_e32 v9, 0 1716; VERDE-NEXT: v_mov_b32_e32 v10, v9 1717; VERDE-NEXT: image_sample_c_d_o v[9:10], v[0:15], s[0:7], s[8:11] dmask:0x4 tfe da 1718; VERDE-NEXT: s_mov_b32 s15, 0xf000 1719; VERDE-NEXT: s_mov_b32 s14, -1 1720; VERDE-NEXT: s_waitcnt vmcnt(0) 1721; VERDE-NEXT: v_mov_b32_e32 v0, v9 1722; VERDE-NEXT: buffer_store_dword v10, off, s[12:15], 0 1723; VERDE-NEXT: s_waitcnt vmcnt(0) expcnt(0) 1724; VERDE-NEXT: ; return to shader part epilog 1725; 1726; GFX6789-LABEL: sample_c_d_o_2darray_V1_tfe: 1727; GFX6789: ; %bb.0: ; %main_body 1728; GFX6789-NEXT: v_mov_b32_e32 v11, 0 1729; GFX6789-NEXT: v_mov_b32_e32 v12, v11 1730; GFX6789-NEXT: v_mov_b32_e32 v9, v11 1731; GFX6789-NEXT: v_mov_b32_e32 v10, v12 1732; GFX6789-NEXT: image_sample_c_d_o v[9:10], v[0:15], s[0:7], s[8:11] dmask:0x4 tfe da 1733; GFX6789-NEXT: s_waitcnt vmcnt(0) 1734; GFX6789-NEXT: v_mov_b32_e32 v0, v9 1735; GFX6789-NEXT: global_store_dword v11, v10, s[12:13] 1736; GFX6789-NEXT: s_waitcnt vmcnt(0) 1737; GFX6789-NEXT: ; return to shader part epilog 1738; 1739; GFX10-LABEL: sample_c_d_o_2darray_V1_tfe: 1740; GFX10: ; %bb.0: ; %main_body 1741; GFX10-NEXT: v_mov_b32_e32 v11, 0 ; encoding: [0x80,0x02,0x16,0x7e] 1742; GFX10-NEXT: v_mov_b32_e32 v12, v11 ; encoding: [0x0b,0x03,0x18,0x7e] 1743; GFX10-NEXT: v_mov_b32_e32 v9, v11 ; encoding: [0x0b,0x03,0x12,0x7e] 1744; GFX10-NEXT: v_mov_b32_e32 v10, v12 ; encoding: [0x0c,0x03,0x14,0x7e] 1745; GFX10-NEXT: image_sample_c_d_o v[9:10], v[0:15], s[0:7], s[8:11] dmask:0x4 dim:SQ_RSRC_IMG_2D_ARRAY tfe ; encoding: [0x28,0x04,0xe9,0xf0,0x00,0x09,0x40,0x00] 1746; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1747; GFX10-NEXT: v_mov_b32_e32 v0, v9 ; encoding: [0x09,0x03,0x00,0x7e] 1748; GFX10-NEXT: global_store_dword v11, v10, s[12:13] ; encoding: [0x00,0x80,0x70,0xdc,0x0b,0x0a,0x0c,0x00] 1749; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 ; encoding: [0x00,0x00,0xfd,0xbb] 1750; GFX10-NEXT: ; return to shader part epilog 1751main_body: 1752 %v = call {float,i32} @llvm.amdgcn.image.sample.c.d.o.2darray.f32i32.f32.f32(i32 4, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 1, i32 0) 1753 %v.vec = extractvalue {float, i32} %v, 0 1754 %v.err = extractvalue {float, i32} %v, 1 1755 store i32 %v.err, i32 addrspace(1)* %out, align 4 1756 ret float %v.vec 1757} 1758 1759define amdgpu_ps <2 x float> @sample_c_d_o_2darray_V2(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice) { 1760; VERDE-LABEL: sample_c_d_o_2darray_V2: 1761; VERDE: ; %bb.0: ; %main_body 1762; VERDE-NEXT: image_sample_c_d_o v[0:1], v[0:15], s[0:7], s[8:11] dmask:0x6 da 1763; VERDE-NEXT: s_waitcnt vmcnt(0) 1764; VERDE-NEXT: ; return to shader part epilog 1765; 1766; GFX6789-LABEL: sample_c_d_o_2darray_V2: 1767; GFX6789: ; %bb.0: ; %main_body 1768; GFX6789-NEXT: image_sample_c_d_o v[0:1], v[0:15], s[0:7], s[8:11] dmask:0x6 da 1769; GFX6789-NEXT: s_waitcnt vmcnt(0) 1770; GFX6789-NEXT: ; return to shader part epilog 1771; 1772; GFX10-LABEL: sample_c_d_o_2darray_V2: 1773; GFX10: ; %bb.0: ; %main_body 1774; GFX10-NEXT: image_sample_c_d_o v[0:1], v[0:15], s[0:7], s[8:11] dmask:0x6 dim:SQ_RSRC_IMG_2D_ARRAY ; encoding: [0x28,0x06,0xe8,0xf0,0x00,0x00,0x40,0x00] 1775; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1776; GFX10-NEXT: ; return to shader part epilog 1777main_body: 1778 %v = call <2 x float> @llvm.amdgcn.image.sample.c.d.o.2darray.v2f32.f32.f32(i32 6, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1779 ret <2 x float> %v 1780} 1781 1782define amdgpu_ps <4 x float> @sample_c_d_o_2darray_V2_tfe(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice) { 1783; VERDE-LABEL: sample_c_d_o_2darray_V2_tfe: 1784; VERDE: ; %bb.0: ; %main_body 1785; VERDE-NEXT: v_mov_b32_e32 v9, 0 1786; VERDE-NEXT: v_mov_b32_e32 v10, v9 1787; VERDE-NEXT: v_mov_b32_e32 v11, v9 1788; VERDE-NEXT: image_sample_c_d_o v[9:11], v[0:15], s[0:7], s[8:11] dmask:0x6 tfe da 1789; VERDE-NEXT: s_waitcnt vmcnt(0) 1790; VERDE-NEXT: v_mov_b32_e32 v0, v9 1791; VERDE-NEXT: v_mov_b32_e32 v1, v10 1792; VERDE-NEXT: v_mov_b32_e32 v2, v11 1793; VERDE-NEXT: ; return to shader part epilog 1794; 1795; GFX6789-LABEL: sample_c_d_o_2darray_V2_tfe: 1796; GFX6789: ; %bb.0: ; %main_body 1797; GFX6789-NEXT: v_mov_b32_e32 v9, 0 1798; GFX6789-NEXT: v_mov_b32_e32 v10, v9 1799; GFX6789-NEXT: v_mov_b32_e32 v11, v9 1800; GFX6789-NEXT: image_sample_c_d_o v[9:11], v[0:15], s[0:7], s[8:11] dmask:0x6 tfe da 1801; GFX6789-NEXT: s_waitcnt vmcnt(0) 1802; GFX6789-NEXT: v_mov_b32_e32 v0, v9 1803; GFX6789-NEXT: v_mov_b32_e32 v1, v10 1804; GFX6789-NEXT: v_mov_b32_e32 v2, v11 1805; GFX6789-NEXT: ; return to shader part epilog 1806; 1807; GFX10-LABEL: sample_c_d_o_2darray_V2_tfe: 1808; GFX10: ; %bb.0: ; %main_body 1809; GFX10-NEXT: v_mov_b32_e32 v9, 0 ; encoding: [0x80,0x02,0x12,0x7e] 1810; GFX10-NEXT: v_mov_b32_e32 v10, v9 ; encoding: [0x09,0x03,0x14,0x7e] 1811; GFX10-NEXT: v_mov_b32_e32 v11, v9 ; encoding: [0x09,0x03,0x16,0x7e] 1812; GFX10-NEXT: image_sample_c_d_o v[9:11], v[0:15], s[0:7], s[8:11] dmask:0x6 dim:SQ_RSRC_IMG_2D_ARRAY tfe ; encoding: [0x28,0x06,0xe9,0xf0,0x00,0x09,0x40,0x00] 1813; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1814; GFX10-NEXT: v_mov_b32_e32 v0, v9 ; encoding: [0x09,0x03,0x00,0x7e] 1815; GFX10-NEXT: v_mov_b32_e32 v1, v10 ; encoding: [0x0a,0x03,0x02,0x7e] 1816; GFX10-NEXT: v_mov_b32_e32 v2, v11 ; encoding: [0x0b,0x03,0x04,0x7e] 1817; GFX10-NEXT: ; return to shader part epilog 1818main_body: 1819 %v = call {<2 x float>, i32} @llvm.amdgcn.image.sample.c.d.o.2darray.v2f32i32.f32.f32(i32 6, i32 %offset, float %zcompare, float %dsdh, float %dtdh, float %dsdv, float %dtdv, float %s, float %t, float %slice, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 1, i32 0) 1820 %v.vec = extractvalue {<2 x float>, i32} %v, 0 1821 %v.f1 = extractelement <2 x float> %v.vec, i32 0 1822 %v.f2 = extractelement <2 x float> %v.vec, i32 1 1823 %v.err = extractvalue {<2 x float>, i32} %v, 1 1824 %v.errf = bitcast i32 %v.err to float 1825 %res.0 = insertelement <4 x float> undef, float %v.f1, i32 0 1826 %res.1 = insertelement <4 x float> %res.0, float %v.f2, i32 1 1827 %res.2 = insertelement <4 x float> %res.1, float %v.errf, i32 2 1828 ret <4 x float> %res.2 1829} 1830 1831define amdgpu_ps <4 x float> @sample_1d_unorm(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 1832; VERDE-LABEL: sample_1d_unorm: 1833; VERDE: ; %bb.0: ; %main_body 1834; VERDE-NEXT: s_mov_b64 s[12:13], exec 1835; VERDE-NEXT: s_wqm_b64 exec, exec 1836; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 1837; VERDE-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf unorm 1838; VERDE-NEXT: s_waitcnt vmcnt(0) 1839; VERDE-NEXT: ; return to shader part epilog 1840; 1841; GFX6789-LABEL: sample_1d_unorm: 1842; GFX6789: ; %bb.0: ; %main_body 1843; GFX6789-NEXT: s_mov_b64 s[12:13], exec 1844; GFX6789-NEXT: s_wqm_b64 exec, exec 1845; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 1846; GFX6789-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf unorm 1847; GFX6789-NEXT: s_waitcnt vmcnt(0) 1848; GFX6789-NEXT: ; return to shader part epilog 1849; 1850; GFX10-LABEL: sample_1d_unorm: 1851; GFX10: ; %bb.0: ; %main_body 1852; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 1853; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 1854; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 1855; GFX10-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D unorm ; encoding: [0x00,0x1f,0x80,0xf0,0x00,0x00,0x40,0x00] 1856; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1857; GFX10-NEXT: ; return to shader part epilog 1858main_body: 1859 %v = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 1, i32 0, i32 0) 1860 ret <4 x float> %v 1861} 1862 1863define amdgpu_ps <4 x float> @sample_1d_glc(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 1864; VERDE-LABEL: sample_1d_glc: 1865; VERDE: ; %bb.0: ; %main_body 1866; VERDE-NEXT: s_mov_b64 s[12:13], exec 1867; VERDE-NEXT: s_wqm_b64 exec, exec 1868; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 1869; VERDE-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf glc 1870; VERDE-NEXT: s_waitcnt vmcnt(0) 1871; VERDE-NEXT: ; return to shader part epilog 1872; 1873; GFX6789-LABEL: sample_1d_glc: 1874; GFX6789: ; %bb.0: ; %main_body 1875; GFX6789-NEXT: s_mov_b64 s[12:13], exec 1876; GFX6789-NEXT: s_wqm_b64 exec, exec 1877; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 1878; GFX6789-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf glc 1879; GFX6789-NEXT: s_waitcnt vmcnt(0) 1880; GFX6789-NEXT: ; return to shader part epilog 1881; 1882; GFX10-LABEL: sample_1d_glc: 1883; GFX10: ; %bb.0: ; %main_body 1884; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 1885; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 1886; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 1887; GFX10-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D glc ; encoding: [0x00,0x2f,0x80,0xf0,0x00,0x00,0x40,0x00] 1888; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1889; GFX10-NEXT: ; return to shader part epilog 1890main_body: 1891 %v = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 1) 1892 ret <4 x float> %v 1893} 1894 1895define amdgpu_ps <4 x float> @sample_1d_slc(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 1896; VERDE-LABEL: sample_1d_slc: 1897; VERDE: ; %bb.0: ; %main_body 1898; VERDE-NEXT: s_mov_b64 s[12:13], exec 1899; VERDE-NEXT: s_wqm_b64 exec, exec 1900; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 1901; VERDE-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf slc 1902; VERDE-NEXT: s_waitcnt vmcnt(0) 1903; VERDE-NEXT: ; return to shader part epilog 1904; 1905; GFX6789-LABEL: sample_1d_slc: 1906; GFX6789: ; %bb.0: ; %main_body 1907; GFX6789-NEXT: s_mov_b64 s[12:13], exec 1908; GFX6789-NEXT: s_wqm_b64 exec, exec 1909; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 1910; GFX6789-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf slc 1911; GFX6789-NEXT: s_waitcnt vmcnt(0) 1912; GFX6789-NEXT: ; return to shader part epilog 1913; 1914; GFX10-LABEL: sample_1d_slc: 1915; GFX10: ; %bb.0: ; %main_body 1916; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 1917; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 1918; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 1919; GFX10-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D slc ; encoding: [0x00,0x0f,0x80,0xf2,0x00,0x00,0x40,0x00] 1920; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1921; GFX10-NEXT: ; return to shader part epilog 1922main_body: 1923 %v = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 2) 1924 ret <4 x float> %v 1925} 1926 1927define amdgpu_ps <4 x float> @sample_1d_glc_slc(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 1928; VERDE-LABEL: sample_1d_glc_slc: 1929; VERDE: ; %bb.0: ; %main_body 1930; VERDE-NEXT: s_mov_b64 s[12:13], exec 1931; VERDE-NEXT: s_wqm_b64 exec, exec 1932; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 1933; VERDE-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf glc slc 1934; VERDE-NEXT: s_waitcnt vmcnt(0) 1935; VERDE-NEXT: ; return to shader part epilog 1936; 1937; GFX6789-LABEL: sample_1d_glc_slc: 1938; GFX6789: ; %bb.0: ; %main_body 1939; GFX6789-NEXT: s_mov_b64 s[12:13], exec 1940; GFX6789-NEXT: s_wqm_b64 exec, exec 1941; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 1942; GFX6789-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf glc slc 1943; GFX6789-NEXT: s_waitcnt vmcnt(0) 1944; GFX6789-NEXT: ; return to shader part epilog 1945; 1946; GFX10-LABEL: sample_1d_glc_slc: 1947; GFX10: ; %bb.0: ; %main_body 1948; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 1949; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 1950; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 1951; GFX10-NEXT: image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D glc slc ; encoding: [0x00,0x2f,0x80,0xf2,0x00,0x00,0x40,0x00] 1952; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1953; GFX10-NEXT: ; return to shader part epilog 1954main_body: 1955 %v = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 3) 1956 ret <4 x float> %v 1957} 1958 1959define amdgpu_ps float @adjust_writemask_sample_0(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 1960; VERDE-LABEL: adjust_writemask_sample_0: 1961; VERDE: ; %bb.0: ; %main_body 1962; VERDE-NEXT: s_mov_b64 s[12:13], exec 1963; VERDE-NEXT: s_wqm_b64 exec, exec 1964; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 1965; VERDE-NEXT: image_sample v0, v0, s[0:7], s[8:11] dmask:0x1 1966; VERDE-NEXT: s_waitcnt vmcnt(0) 1967; VERDE-NEXT: ; return to shader part epilog 1968; 1969; GFX6789-LABEL: adjust_writemask_sample_0: 1970; GFX6789: ; %bb.0: ; %main_body 1971; GFX6789-NEXT: s_mov_b64 s[12:13], exec 1972; GFX6789-NEXT: s_wqm_b64 exec, exec 1973; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 1974; GFX6789-NEXT: image_sample v0, v0, s[0:7], s[8:11] dmask:0x1 1975; GFX6789-NEXT: s_waitcnt vmcnt(0) 1976; GFX6789-NEXT: ; return to shader part epilog 1977; 1978; GFX10-LABEL: adjust_writemask_sample_0: 1979; GFX10: ; %bb.0: ; %main_body 1980; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 1981; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 1982; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 1983; GFX10-NEXT: image_sample v0, v0, s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x01,0x80,0xf0,0x00,0x00,0x40,0x00] 1984; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 1985; GFX10-NEXT: ; return to shader part epilog 1986main_body: 1987 %r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 1988 %elt0 = extractelement <4 x float> %r, i32 0 1989 ret float %elt0 1990} 1991 1992define amdgpu_ps <2 x float> @adjust_writemask_sample_01(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 1993; VERDE-LABEL: adjust_writemask_sample_01: 1994; VERDE: ; %bb.0: ; %main_body 1995; VERDE-NEXT: s_mov_b64 s[12:13], exec 1996; VERDE-NEXT: s_wqm_b64 exec, exec 1997; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 1998; VERDE-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0x3 1999; VERDE-NEXT: s_waitcnt vmcnt(0) 2000; VERDE-NEXT: ; return to shader part epilog 2001; 2002; GFX6789-LABEL: adjust_writemask_sample_01: 2003; GFX6789: ; %bb.0: ; %main_body 2004; GFX6789-NEXT: s_mov_b64 s[12:13], exec 2005; GFX6789-NEXT: s_wqm_b64 exec, exec 2006; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 2007; GFX6789-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0x3 2008; GFX6789-NEXT: s_waitcnt vmcnt(0) 2009; GFX6789-NEXT: ; return to shader part epilog 2010; 2011; GFX10-LABEL: adjust_writemask_sample_01: 2012; GFX10: ; %bb.0: ; %main_body 2013; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 2014; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 2015; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 2016; GFX10-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0x3 dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x03,0x80,0xf0,0x00,0x00,0x40,0x00] 2017; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 2018; GFX10-NEXT: ; return to shader part epilog 2019main_body: 2020 %r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 2021 %out = shufflevector <4 x float> %r, <4 x float> undef, <2 x i32> <i32 0, i32 1> 2022 ret <2 x float> %out 2023} 2024 2025define amdgpu_ps <3 x float> @adjust_writemask_sample_012(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 2026; VERDE-LABEL: adjust_writemask_sample_012: 2027; VERDE: ; %bb.0: ; %main_body 2028; VERDE-NEXT: s_mov_b64 s[12:13], exec 2029; VERDE-NEXT: s_wqm_b64 exec, exec 2030; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 2031; VERDE-NEXT: image_sample v[0:2], v0, s[0:7], s[8:11] dmask:0x7 2032; VERDE-NEXT: s_waitcnt vmcnt(0) 2033; VERDE-NEXT: ; return to shader part epilog 2034; 2035; GFX6789-LABEL: adjust_writemask_sample_012: 2036; GFX6789: ; %bb.0: ; %main_body 2037; GFX6789-NEXT: s_mov_b64 s[12:13], exec 2038; GFX6789-NEXT: s_wqm_b64 exec, exec 2039; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 2040; GFX6789-NEXT: image_sample v[0:2], v0, s[0:7], s[8:11] dmask:0x7 2041; GFX6789-NEXT: s_waitcnt vmcnt(0) 2042; GFX6789-NEXT: ; return to shader part epilog 2043; 2044; GFX10-LABEL: adjust_writemask_sample_012: 2045; GFX10: ; %bb.0: ; %main_body 2046; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 2047; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 2048; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 2049; GFX10-NEXT: image_sample v[0:2], v0, s[0:7], s[8:11] dmask:0x7 dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x07,0x80,0xf0,0x00,0x00,0x40,0x00] 2050; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 2051; GFX10-NEXT: ; return to shader part epilog 2052main_body: 2053 %r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 2054 %out = shufflevector <4 x float> %r, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2> 2055 ret <3 x float> %out 2056} 2057 2058define amdgpu_ps <2 x float> @adjust_writemask_sample_12(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 2059; VERDE-LABEL: adjust_writemask_sample_12: 2060; VERDE: ; %bb.0: ; %main_body 2061; VERDE-NEXT: s_mov_b64 s[12:13], exec 2062; VERDE-NEXT: s_wqm_b64 exec, exec 2063; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 2064; VERDE-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0x6 2065; VERDE-NEXT: s_waitcnt vmcnt(0) 2066; VERDE-NEXT: ; return to shader part epilog 2067; 2068; GFX6789-LABEL: adjust_writemask_sample_12: 2069; GFX6789: ; %bb.0: ; %main_body 2070; GFX6789-NEXT: s_mov_b64 s[12:13], exec 2071; GFX6789-NEXT: s_wqm_b64 exec, exec 2072; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 2073; GFX6789-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0x6 2074; GFX6789-NEXT: s_waitcnt vmcnt(0) 2075; GFX6789-NEXT: ; return to shader part epilog 2076; 2077; GFX10-LABEL: adjust_writemask_sample_12: 2078; GFX10: ; %bb.0: ; %main_body 2079; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 2080; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 2081; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 2082; GFX10-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0x6 dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x06,0x80,0xf0,0x00,0x00,0x40,0x00] 2083; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 2084; GFX10-NEXT: ; return to shader part epilog 2085main_body: 2086 %r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 2087 %out = shufflevector <4 x float> %r, <4 x float> undef, <2 x i32> <i32 1, i32 2> 2088 ret <2 x float> %out 2089} 2090 2091define amdgpu_ps <2 x float> @adjust_writemask_sample_03(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 2092; VERDE-LABEL: adjust_writemask_sample_03: 2093; VERDE: ; %bb.0: ; %main_body 2094; VERDE-NEXT: s_mov_b64 s[12:13], exec 2095; VERDE-NEXT: s_wqm_b64 exec, exec 2096; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 2097; VERDE-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0x9 2098; VERDE-NEXT: s_waitcnt vmcnt(0) 2099; VERDE-NEXT: ; return to shader part epilog 2100; 2101; GFX6789-LABEL: adjust_writemask_sample_03: 2102; GFX6789: ; %bb.0: ; %main_body 2103; GFX6789-NEXT: s_mov_b64 s[12:13], exec 2104; GFX6789-NEXT: s_wqm_b64 exec, exec 2105; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 2106; GFX6789-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0x9 2107; GFX6789-NEXT: s_waitcnt vmcnt(0) 2108; GFX6789-NEXT: ; return to shader part epilog 2109; 2110; GFX10-LABEL: adjust_writemask_sample_03: 2111; GFX10: ; %bb.0: ; %main_body 2112; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 2113; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 2114; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 2115; GFX10-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0x9 dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x09,0x80,0xf0,0x00,0x00,0x40,0x00] 2116; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 2117; GFX10-NEXT: ; return to shader part epilog 2118main_body: 2119 %r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 2120 %out = shufflevector <4 x float> %r, <4 x float> undef, <2 x i32> <i32 0, i32 3> 2121 ret <2 x float> %out 2122} 2123 2124define amdgpu_ps <2 x float> @adjust_writemask_sample_13(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 2125; VERDE-LABEL: adjust_writemask_sample_13: 2126; VERDE: ; %bb.0: ; %main_body 2127; VERDE-NEXT: s_mov_b64 s[12:13], exec 2128; VERDE-NEXT: s_wqm_b64 exec, exec 2129; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 2130; VERDE-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0xa 2131; VERDE-NEXT: s_waitcnt vmcnt(0) 2132; VERDE-NEXT: ; return to shader part epilog 2133; 2134; GFX6789-LABEL: adjust_writemask_sample_13: 2135; GFX6789: ; %bb.0: ; %main_body 2136; GFX6789-NEXT: s_mov_b64 s[12:13], exec 2137; GFX6789-NEXT: s_wqm_b64 exec, exec 2138; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 2139; GFX6789-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0xa 2140; GFX6789-NEXT: s_waitcnt vmcnt(0) 2141; GFX6789-NEXT: ; return to shader part epilog 2142; 2143; GFX10-LABEL: adjust_writemask_sample_13: 2144; GFX10: ; %bb.0: ; %main_body 2145; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 2146; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 2147; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 2148; GFX10-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0xa dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0a,0x80,0xf0,0x00,0x00,0x40,0x00] 2149; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 2150; GFX10-NEXT: ; return to shader part epilog 2151main_body: 2152 %r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 2153 %out = shufflevector <4 x float> %r, <4 x float> undef, <2 x i32> <i32 1, i32 3> 2154 ret <2 x float> %out 2155} 2156 2157define amdgpu_ps <3 x float> @adjust_writemask_sample_123(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 2158; VERDE-LABEL: adjust_writemask_sample_123: 2159; VERDE: ; %bb.0: ; %main_body 2160; VERDE-NEXT: s_mov_b64 s[12:13], exec 2161; VERDE-NEXT: s_wqm_b64 exec, exec 2162; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 2163; VERDE-NEXT: image_sample v[0:2], v0, s[0:7], s[8:11] dmask:0xe 2164; VERDE-NEXT: s_waitcnt vmcnt(0) 2165; VERDE-NEXT: ; return to shader part epilog 2166; 2167; GFX6789-LABEL: adjust_writemask_sample_123: 2168; GFX6789: ; %bb.0: ; %main_body 2169; GFX6789-NEXT: s_mov_b64 s[12:13], exec 2170; GFX6789-NEXT: s_wqm_b64 exec, exec 2171; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 2172; GFX6789-NEXT: image_sample v[0:2], v0, s[0:7], s[8:11] dmask:0xe 2173; GFX6789-NEXT: s_waitcnt vmcnt(0) 2174; GFX6789-NEXT: ; return to shader part epilog 2175; 2176; GFX10-LABEL: adjust_writemask_sample_123: 2177; GFX10: ; %bb.0: ; %main_body 2178; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 2179; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 2180; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 2181; GFX10-NEXT: image_sample v[0:2], v0, s[0:7], s[8:11] dmask:0xe dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0e,0x80,0xf0,0x00,0x00,0x40,0x00] 2182; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 2183; GFX10-NEXT: ; return to shader part epilog 2184main_body: 2185 %r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 15, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 2186 %out = shufflevector <4 x float> %r, <4 x float> undef, <3 x i32> <i32 1, i32 2, i32 3> 2187 ret <3 x float> %out 2188} 2189 2190define amdgpu_ps <4 x float> @adjust_writemask_sample_none_enabled(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 2191; VERDE-LABEL: adjust_writemask_sample_none_enabled: 2192; VERDE: ; %bb.0: ; %main_body 2193; VERDE-NEXT: ; return to shader part epilog 2194; 2195; GFX6789-LABEL: adjust_writemask_sample_none_enabled: 2196; GFX6789: ; %bb.0: ; %main_body 2197; GFX6789-NEXT: ; return to shader part epilog 2198; 2199; GFX10-LABEL: adjust_writemask_sample_none_enabled: 2200; GFX10: ; %bb.0: ; %main_body 2201; GFX10-NEXT: ; return to shader part epilog 2202main_body: 2203 %r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 0, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 2204 ret <4 x float> %r 2205} 2206 2207define amdgpu_ps <2 x float> @adjust_writemask_sample_123_to_12(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 2208; VERDE-LABEL: adjust_writemask_sample_123_to_12: 2209; VERDE: ; %bb.0: ; %main_body 2210; VERDE-NEXT: s_mov_b64 s[12:13], exec 2211; VERDE-NEXT: s_wqm_b64 exec, exec 2212; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 2213; VERDE-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0x6 2214; VERDE-NEXT: s_waitcnt vmcnt(0) 2215; VERDE-NEXT: ; return to shader part epilog 2216; 2217; GFX6789-LABEL: adjust_writemask_sample_123_to_12: 2218; GFX6789: ; %bb.0: ; %main_body 2219; GFX6789-NEXT: s_mov_b64 s[12:13], exec 2220; GFX6789-NEXT: s_wqm_b64 exec, exec 2221; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 2222; GFX6789-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0x6 2223; GFX6789-NEXT: s_waitcnt vmcnt(0) 2224; GFX6789-NEXT: ; return to shader part epilog 2225; 2226; GFX10-LABEL: adjust_writemask_sample_123_to_12: 2227; GFX10: ; %bb.0: ; %main_body 2228; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 2229; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 2230; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 2231; GFX10-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0x6 dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x06,0x80,0xf0,0x00,0x00,0x40,0x00] 2232; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 2233; GFX10-NEXT: ; return to shader part epilog 2234main_body: 2235 %r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 14, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 2236 %out = shufflevector <4 x float> %r, <4 x float> undef, <2 x i32> <i32 0, i32 1> 2237 ret <2 x float> %out 2238} 2239 2240define amdgpu_ps <2 x float> @adjust_writemask_sample_013_to_13(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %s) { 2241; VERDE-LABEL: adjust_writemask_sample_013_to_13: 2242; VERDE: ; %bb.0: ; %main_body 2243; VERDE-NEXT: s_mov_b64 s[12:13], exec 2244; VERDE-NEXT: s_wqm_b64 exec, exec 2245; VERDE-NEXT: s_and_b64 exec, exec, s[12:13] 2246; VERDE-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0xa 2247; VERDE-NEXT: s_waitcnt vmcnt(0) 2248; VERDE-NEXT: ; return to shader part epilog 2249; 2250; GFX6789-LABEL: adjust_writemask_sample_013_to_13: 2251; GFX6789: ; %bb.0: ; %main_body 2252; GFX6789-NEXT: s_mov_b64 s[12:13], exec 2253; GFX6789-NEXT: s_wqm_b64 exec, exec 2254; GFX6789-NEXT: s_and_b64 exec, exec, s[12:13] 2255; GFX6789-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0xa 2256; GFX6789-NEXT: s_waitcnt vmcnt(0) 2257; GFX6789-NEXT: ; return to shader part epilog 2258; 2259; GFX10-LABEL: adjust_writemask_sample_013_to_13: 2260; GFX10: ; %bb.0: ; %main_body 2261; GFX10-NEXT: s_mov_b32 s12, exec_lo ; encoding: [0x7e,0x03,0x8c,0xbe] 2262; GFX10-NEXT: s_wqm_b32 exec_lo, exec_lo ; encoding: [0x7e,0x09,0xfe,0xbe] 2263; GFX10-NEXT: s_and_b32 exec_lo, exec_lo, s12 ; encoding: [0x7e,0x0c,0x7e,0x87] 2264; GFX10-NEXT: image_sample v[0:1], v0, s[0:7], s[8:11] dmask:0xa dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x0a,0x80,0xf0,0x00,0x00,0x40,0x00] 2265; GFX10-NEXT: s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf] 2266; GFX10-NEXT: ; return to shader part epilog 2267main_body: 2268 %r = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32 11, float %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0) 2269 %out = shufflevector <4 x float> %r, <4 x float> undef, <2 x i32> <i32 1, i32 2> 2270 ret <2 x float> %out 2271} 2272 2273declare <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f32(i32, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2274declare {<4 x float>,i32} @llvm.amdgcn.image.sample.1d.v4f32i32.f32(i32, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2275declare <4 x float> @llvm.amdgcn.image.sample.2d.v4f32.f32(i32, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2276declare <4 x float> @llvm.amdgcn.image.sample.3d.v4f32.f32(i32, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2277declare <4 x float> @llvm.amdgcn.image.sample.cube.v4f32.f32(i32, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2278declare <4 x float> @llvm.amdgcn.image.sample.1darray.v4f32.f32(i32, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2279declare <4 x float> @llvm.amdgcn.image.sample.2darray.v4f32.f32(i32, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2280 2281declare <4 x float> @llvm.amdgcn.image.sample.c.1d.v4f32.f32(i32, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2282declare <4 x float> @llvm.amdgcn.image.sample.c.2d.v4f32.f32(i32, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2283declare <4 x float> @llvm.amdgcn.image.sample.cl.1d.v4f32.f32(i32, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2284declare <4 x float> @llvm.amdgcn.image.sample.cl.2d.v4f32.f32(i32, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2285declare <4 x float> @llvm.amdgcn.image.sample.c.cl.1d.v4f32.f32(i32, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2286declare <4 x float> @llvm.amdgcn.image.sample.c.cl.2d.v4f32.f32(i32, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2287 2288declare <4 x float> @llvm.amdgcn.image.sample.b.1d.v4f32.f32.f32(i32, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2289declare <4 x float> @llvm.amdgcn.image.sample.b.2d.v4f32.f32.f32(i32, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2290declare <4 x float> @llvm.amdgcn.image.sample.c.b.1d.v4f32.f32.f32(i32, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2291declare <4 x float> @llvm.amdgcn.image.sample.c.b.2d.v4f32.f32.f32(i32, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2292declare <4 x float> @llvm.amdgcn.image.sample.b.cl.1d.v4f32.f32.f32(i32, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2293declare <4 x float> @llvm.amdgcn.image.sample.b.cl.2d.v4f32.f32.f32(i32, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2294declare <4 x float> @llvm.amdgcn.image.sample.c.b.cl.1d.v4f32.f32.f32(i32, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2295declare <4 x float> @llvm.amdgcn.image.sample.c.b.cl.2d.v4f32.f32.f32(i32, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2296 2297declare <4 x float> @llvm.amdgcn.image.sample.d.1d.v4f32.f32.f32(i32, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2298declare <4 x float> @llvm.amdgcn.image.sample.d.2d.v4f32.f32.f32(i32, float, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2299declare <4 x float> @llvm.amdgcn.image.sample.c.d.1d.v4f32.f32.f32(i32, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2300declare <4 x float> @llvm.amdgcn.image.sample.c.d.2d.v4f32.f32.f32(i32, float, float, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2301declare <4 x float> @llvm.amdgcn.image.sample.d.cl.1d.v4f32.f32.f32(i32, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2302declare <4 x float> @llvm.amdgcn.image.sample.d.cl.2d.v4f32.f32.f32(i32, float, float, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2303declare <4 x float> @llvm.amdgcn.image.sample.c.d.cl.1d.v4f32.f32.f32(i32, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2304declare <4 x float> @llvm.amdgcn.image.sample.c.d.cl.2d.v4f32.f32.f32(i32, float, float, float, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2305 2306declare <4 x float> @llvm.amdgcn.image.sample.cd.1d.v4f32.f32.f32(i32, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2307declare <4 x float> @llvm.amdgcn.image.sample.cd.2d.v4f32.f32.f32(i32, float, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2308declare <4 x float> @llvm.amdgcn.image.sample.c.cd.1d.v4f32.f32.f32(i32, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2309declare <4 x float> @llvm.amdgcn.image.sample.c.cd.2d.v4f32.f32.f32(i32, float, float, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2310declare <4 x float> @llvm.amdgcn.image.sample.cd.cl.1d.v4f32.f32.f32(i32, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2311declare <4 x float> @llvm.amdgcn.image.sample.cd.cl.2d.v4f32.f32.f32(i32, float, float, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2312declare <4 x float> @llvm.amdgcn.image.sample.c.cd.cl.1d.v4f32.f32.f32(i32, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2313declare <4 x float> @llvm.amdgcn.image.sample.c.cd.cl.2d.v4f32.f32.f32(i32, float, float, float, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2314 2315declare <4 x float> @llvm.amdgcn.image.sample.l.1d.v4f32.f32(i32, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2316declare <4 x float> @llvm.amdgcn.image.sample.l.2d.v4f32.f32(i32, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2317declare <4 x float> @llvm.amdgcn.image.sample.c.l.1d.v4f32.f32(i32, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2318declare <4 x float> @llvm.amdgcn.image.sample.c.l.2d.v4f32.f32(i32, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2319 2320declare <4 x float> @llvm.amdgcn.image.sample.lz.1d.v4f32.f32(i32, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2321declare <4 x float> @llvm.amdgcn.image.sample.lz.2d.v4f32.f32(i32, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2322declare <4 x float> @llvm.amdgcn.image.sample.c.lz.1d.v4f32.f32(i32, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2323declare <4 x float> @llvm.amdgcn.image.sample.c.lz.2d.v4f32.f32(i32, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2324 2325declare float @llvm.amdgcn.image.sample.c.d.o.2darray.f32.f32.f32(i32, i32, float, float, float, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2326declare {float, i32} @llvm.amdgcn.image.sample.c.d.o.2darray.f32i32.f32.f32(i32, i32, float, float, float, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2327declare <2 x float> @llvm.amdgcn.image.sample.c.d.o.2darray.v2f32.f32.f32(i32, i32, float, float, float, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2328declare {<2 x float>, i32} @llvm.amdgcn.image.sample.c.d.o.2darray.v2f32i32.f32.f32(i32, i32, float, float, float, float, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32) #1 2329 2330attributes #0 = { nounwind } 2331attributes #1 = { nounwind readonly } 2332attributes #2 = { nounwind readnone } 2333