1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GFX8-UNPACKED %s 3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx810 -verify-machineinstrs < %s | FileCheck -check-prefix=GFX8-PACKED %s 4; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefix=GFX9 %s 5; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10PLUS,GFX10 %s 6; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10PLUS,GFX11 %s 7 8define amdgpu_ps half @load_1d_f16_x(<8 x i32> inreg %rsrc, i32 %s) { 9; GFX8-UNPACKED-LABEL: load_1d_f16_x: 10; GFX8-UNPACKED: ; %bb.0: 11; GFX8-UNPACKED-NEXT: s_mov_b32 s0, s2 12; GFX8-UNPACKED-NEXT: s_mov_b32 s1, s3 13; GFX8-UNPACKED-NEXT: s_mov_b32 s2, s4 14; GFX8-UNPACKED-NEXT: s_mov_b32 s3, s5 15; GFX8-UNPACKED-NEXT: s_mov_b32 s4, s6 16; GFX8-UNPACKED-NEXT: s_mov_b32 s5, s7 17; GFX8-UNPACKED-NEXT: s_mov_b32 s6, s8 18; GFX8-UNPACKED-NEXT: s_mov_b32 s7, s9 19; GFX8-UNPACKED-NEXT: image_load v0, v0, s[0:7] dmask:0x1 unorm d16 20; GFX8-UNPACKED-NEXT: s_waitcnt vmcnt(0) 21; GFX8-UNPACKED-NEXT: ; return to shader part epilog 22; 23; GFX8-PACKED-LABEL: load_1d_f16_x: 24; GFX8-PACKED: ; %bb.0: 25; GFX8-PACKED-NEXT: s_mov_b32 s0, s2 26; GFX8-PACKED-NEXT: s_mov_b32 s1, s3 27; GFX8-PACKED-NEXT: s_mov_b32 s2, s4 28; GFX8-PACKED-NEXT: s_mov_b32 s3, s5 29; GFX8-PACKED-NEXT: s_mov_b32 s4, s6 30; GFX8-PACKED-NEXT: s_mov_b32 s5, s7 31; GFX8-PACKED-NEXT: s_mov_b32 s6, s8 32; GFX8-PACKED-NEXT: s_mov_b32 s7, s9 33; GFX8-PACKED-NEXT: image_load v0, v0, s[0:7] dmask:0x1 unorm d16 34; GFX8-PACKED-NEXT: s_waitcnt vmcnt(0) 35; GFX8-PACKED-NEXT: ; return to shader part epilog 36; 37; GFX9-LABEL: load_1d_f16_x: 38; GFX9: ; %bb.0: 39; GFX9-NEXT: s_mov_b32 s0, s2 40; GFX9-NEXT: s_mov_b32 s1, s3 41; GFX9-NEXT: s_mov_b32 s2, s4 42; GFX9-NEXT: s_mov_b32 s3, s5 43; GFX9-NEXT: s_mov_b32 s4, s6 44; GFX9-NEXT: s_mov_b32 s5, s7 45; GFX9-NEXT: s_mov_b32 s6, s8 46; GFX9-NEXT: s_mov_b32 s7, s9 47; GFX9-NEXT: image_load v0, v0, s[0:7] dmask:0x1 unorm d16 48; GFX9-NEXT: s_waitcnt vmcnt(0) 49; GFX9-NEXT: ; return to shader part epilog 50; 51; GFX10PLUS-LABEL: load_1d_f16_x: 52; GFX10PLUS: ; %bb.0: 53; GFX10PLUS-NEXT: s_mov_b32 s0, s2 54; GFX10PLUS-NEXT: s_mov_b32 s1, s3 55; GFX10PLUS-NEXT: s_mov_b32 s2, s4 56; GFX10PLUS-NEXT: s_mov_b32 s3, s5 57; GFX10PLUS-NEXT: s_mov_b32 s4, s6 58; GFX10PLUS-NEXT: s_mov_b32 s5, s7 59; GFX10PLUS-NEXT: s_mov_b32 s6, s8 60; GFX10PLUS-NEXT: s_mov_b32 s7, s9 61; GFX10PLUS-NEXT: image_load v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm d16 62; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 63; GFX10PLUS-NEXT: ; return to shader part epilog 64 %v = call half @llvm.amdgcn.image.load.1d.half.i32(i32 1, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 65 ret half %v 66} 67 68define amdgpu_ps half @load_1d_f16_y(<8 x i32> inreg %rsrc, i32 %s) { 69; GFX8-UNPACKED-LABEL: load_1d_f16_y: 70; GFX8-UNPACKED: ; %bb.0: 71; GFX8-UNPACKED-NEXT: s_mov_b32 s0, s2 72; GFX8-UNPACKED-NEXT: s_mov_b32 s1, s3 73; GFX8-UNPACKED-NEXT: s_mov_b32 s2, s4 74; GFX8-UNPACKED-NEXT: s_mov_b32 s3, s5 75; GFX8-UNPACKED-NEXT: s_mov_b32 s4, s6 76; GFX8-UNPACKED-NEXT: s_mov_b32 s5, s7 77; GFX8-UNPACKED-NEXT: s_mov_b32 s6, s8 78; GFX8-UNPACKED-NEXT: s_mov_b32 s7, s9 79; GFX8-UNPACKED-NEXT: image_load v0, v0, s[0:7] dmask:0x2 unorm d16 80; GFX8-UNPACKED-NEXT: s_waitcnt vmcnt(0) 81; GFX8-UNPACKED-NEXT: ; return to shader part epilog 82; 83; GFX8-PACKED-LABEL: load_1d_f16_y: 84; GFX8-PACKED: ; %bb.0: 85; GFX8-PACKED-NEXT: s_mov_b32 s0, s2 86; GFX8-PACKED-NEXT: s_mov_b32 s1, s3 87; GFX8-PACKED-NEXT: s_mov_b32 s2, s4 88; GFX8-PACKED-NEXT: s_mov_b32 s3, s5 89; GFX8-PACKED-NEXT: s_mov_b32 s4, s6 90; GFX8-PACKED-NEXT: s_mov_b32 s5, s7 91; GFX8-PACKED-NEXT: s_mov_b32 s6, s8 92; GFX8-PACKED-NEXT: s_mov_b32 s7, s9 93; GFX8-PACKED-NEXT: image_load v0, v0, s[0:7] dmask:0x2 unorm d16 94; GFX8-PACKED-NEXT: s_waitcnt vmcnt(0) 95; GFX8-PACKED-NEXT: ; return to shader part epilog 96; 97; GFX9-LABEL: load_1d_f16_y: 98; GFX9: ; %bb.0: 99; GFX9-NEXT: s_mov_b32 s0, s2 100; GFX9-NEXT: s_mov_b32 s1, s3 101; GFX9-NEXT: s_mov_b32 s2, s4 102; GFX9-NEXT: s_mov_b32 s3, s5 103; GFX9-NEXT: s_mov_b32 s4, s6 104; GFX9-NEXT: s_mov_b32 s5, s7 105; GFX9-NEXT: s_mov_b32 s6, s8 106; GFX9-NEXT: s_mov_b32 s7, s9 107; GFX9-NEXT: image_load v0, v0, s[0:7] dmask:0x2 unorm d16 108; GFX9-NEXT: s_waitcnt vmcnt(0) 109; GFX9-NEXT: ; return to shader part epilog 110; 111; GFX10PLUS-LABEL: load_1d_f16_y: 112; GFX10PLUS: ; %bb.0: 113; GFX10PLUS-NEXT: s_mov_b32 s0, s2 114; GFX10PLUS-NEXT: s_mov_b32 s1, s3 115; GFX10PLUS-NEXT: s_mov_b32 s2, s4 116; GFX10PLUS-NEXT: s_mov_b32 s3, s5 117; GFX10PLUS-NEXT: s_mov_b32 s4, s6 118; GFX10PLUS-NEXT: s_mov_b32 s5, s7 119; GFX10PLUS-NEXT: s_mov_b32 s6, s8 120; GFX10PLUS-NEXT: s_mov_b32 s7, s9 121; GFX10PLUS-NEXT: image_load v0, v0, s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_1D unorm d16 122; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 123; GFX10PLUS-NEXT: ; return to shader part epilog 124 %v = call half @llvm.amdgcn.image.load.1d.half.i32(i32 2, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 125 ret half %v 126} 127 128define amdgpu_ps half @load_1d_f16_z(<8 x i32> inreg %rsrc, i32 %s) { 129; GFX8-UNPACKED-LABEL: load_1d_f16_z: 130; GFX8-UNPACKED: ; %bb.0: 131; GFX8-UNPACKED-NEXT: s_mov_b32 s0, s2 132; GFX8-UNPACKED-NEXT: s_mov_b32 s1, s3 133; GFX8-UNPACKED-NEXT: s_mov_b32 s2, s4 134; GFX8-UNPACKED-NEXT: s_mov_b32 s3, s5 135; GFX8-UNPACKED-NEXT: s_mov_b32 s4, s6 136; GFX8-UNPACKED-NEXT: s_mov_b32 s5, s7 137; GFX8-UNPACKED-NEXT: s_mov_b32 s6, s8 138; GFX8-UNPACKED-NEXT: s_mov_b32 s7, s9 139; GFX8-UNPACKED-NEXT: image_load v0, v0, s[0:7] dmask:0x4 unorm d16 140; GFX8-UNPACKED-NEXT: s_waitcnt vmcnt(0) 141; GFX8-UNPACKED-NEXT: ; return to shader part epilog 142; 143; GFX8-PACKED-LABEL: load_1d_f16_z: 144; GFX8-PACKED: ; %bb.0: 145; GFX8-PACKED-NEXT: s_mov_b32 s0, s2 146; GFX8-PACKED-NEXT: s_mov_b32 s1, s3 147; GFX8-PACKED-NEXT: s_mov_b32 s2, s4 148; GFX8-PACKED-NEXT: s_mov_b32 s3, s5 149; GFX8-PACKED-NEXT: s_mov_b32 s4, s6 150; GFX8-PACKED-NEXT: s_mov_b32 s5, s7 151; GFX8-PACKED-NEXT: s_mov_b32 s6, s8 152; GFX8-PACKED-NEXT: s_mov_b32 s7, s9 153; GFX8-PACKED-NEXT: image_load v0, v0, s[0:7] dmask:0x4 unorm d16 154; GFX8-PACKED-NEXT: s_waitcnt vmcnt(0) 155; GFX8-PACKED-NEXT: ; return to shader part epilog 156; 157; GFX9-LABEL: load_1d_f16_z: 158; GFX9: ; %bb.0: 159; GFX9-NEXT: s_mov_b32 s0, s2 160; GFX9-NEXT: s_mov_b32 s1, s3 161; GFX9-NEXT: s_mov_b32 s2, s4 162; GFX9-NEXT: s_mov_b32 s3, s5 163; GFX9-NEXT: s_mov_b32 s4, s6 164; GFX9-NEXT: s_mov_b32 s5, s7 165; GFX9-NEXT: s_mov_b32 s6, s8 166; GFX9-NEXT: s_mov_b32 s7, s9 167; GFX9-NEXT: image_load v0, v0, s[0:7] dmask:0x4 unorm d16 168; GFX9-NEXT: s_waitcnt vmcnt(0) 169; GFX9-NEXT: ; return to shader part epilog 170; 171; GFX10PLUS-LABEL: load_1d_f16_z: 172; GFX10PLUS: ; %bb.0: 173; GFX10PLUS-NEXT: s_mov_b32 s0, s2 174; GFX10PLUS-NEXT: s_mov_b32 s1, s3 175; GFX10PLUS-NEXT: s_mov_b32 s2, s4 176; GFX10PLUS-NEXT: s_mov_b32 s3, s5 177; GFX10PLUS-NEXT: s_mov_b32 s4, s6 178; GFX10PLUS-NEXT: s_mov_b32 s5, s7 179; GFX10PLUS-NEXT: s_mov_b32 s6, s8 180; GFX10PLUS-NEXT: s_mov_b32 s7, s9 181; GFX10PLUS-NEXT: image_load v0, v0, s[0:7] dmask:0x4 dim:SQ_RSRC_IMG_1D unorm d16 182; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 183; GFX10PLUS-NEXT: ; return to shader part epilog 184 %v = call half @llvm.amdgcn.image.load.1d.half.i32(i32 4, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 185 ret half %v 186} 187 188define amdgpu_ps half @load_1d_f16_w(<8 x i32> inreg %rsrc, i32 %s) { 189; GFX8-UNPACKED-LABEL: load_1d_f16_w: 190; GFX8-UNPACKED: ; %bb.0: 191; GFX8-UNPACKED-NEXT: s_mov_b32 s0, s2 192; GFX8-UNPACKED-NEXT: s_mov_b32 s1, s3 193; GFX8-UNPACKED-NEXT: s_mov_b32 s2, s4 194; GFX8-UNPACKED-NEXT: s_mov_b32 s3, s5 195; GFX8-UNPACKED-NEXT: s_mov_b32 s4, s6 196; GFX8-UNPACKED-NEXT: s_mov_b32 s5, s7 197; GFX8-UNPACKED-NEXT: s_mov_b32 s6, s8 198; GFX8-UNPACKED-NEXT: s_mov_b32 s7, s9 199; GFX8-UNPACKED-NEXT: image_load v0, v0, s[0:7] dmask:0x8 unorm d16 200; GFX8-UNPACKED-NEXT: s_waitcnt vmcnt(0) 201; GFX8-UNPACKED-NEXT: ; return to shader part epilog 202; 203; GFX8-PACKED-LABEL: load_1d_f16_w: 204; GFX8-PACKED: ; %bb.0: 205; GFX8-PACKED-NEXT: s_mov_b32 s0, s2 206; GFX8-PACKED-NEXT: s_mov_b32 s1, s3 207; GFX8-PACKED-NEXT: s_mov_b32 s2, s4 208; GFX8-PACKED-NEXT: s_mov_b32 s3, s5 209; GFX8-PACKED-NEXT: s_mov_b32 s4, s6 210; GFX8-PACKED-NEXT: s_mov_b32 s5, s7 211; GFX8-PACKED-NEXT: s_mov_b32 s6, s8 212; GFX8-PACKED-NEXT: s_mov_b32 s7, s9 213; GFX8-PACKED-NEXT: image_load v0, v0, s[0:7] dmask:0x8 unorm d16 214; GFX8-PACKED-NEXT: s_waitcnt vmcnt(0) 215; GFX8-PACKED-NEXT: ; return to shader part epilog 216; 217; GFX9-LABEL: load_1d_f16_w: 218; GFX9: ; %bb.0: 219; GFX9-NEXT: s_mov_b32 s0, s2 220; GFX9-NEXT: s_mov_b32 s1, s3 221; GFX9-NEXT: s_mov_b32 s2, s4 222; GFX9-NEXT: s_mov_b32 s3, s5 223; GFX9-NEXT: s_mov_b32 s4, s6 224; GFX9-NEXT: s_mov_b32 s5, s7 225; GFX9-NEXT: s_mov_b32 s6, s8 226; GFX9-NEXT: s_mov_b32 s7, s9 227; GFX9-NEXT: image_load v0, v0, s[0:7] dmask:0x8 unorm d16 228; GFX9-NEXT: s_waitcnt vmcnt(0) 229; GFX9-NEXT: ; return to shader part epilog 230; 231; GFX10PLUS-LABEL: load_1d_f16_w: 232; GFX10PLUS: ; %bb.0: 233; GFX10PLUS-NEXT: s_mov_b32 s0, s2 234; GFX10PLUS-NEXT: s_mov_b32 s1, s3 235; GFX10PLUS-NEXT: s_mov_b32 s2, s4 236; GFX10PLUS-NEXT: s_mov_b32 s3, s5 237; GFX10PLUS-NEXT: s_mov_b32 s4, s6 238; GFX10PLUS-NEXT: s_mov_b32 s5, s7 239; GFX10PLUS-NEXT: s_mov_b32 s6, s8 240; GFX10PLUS-NEXT: s_mov_b32 s7, s9 241; GFX10PLUS-NEXT: image_load v0, v0, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm d16 242; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 243; GFX10PLUS-NEXT: ; return to shader part epilog 244 %v = call half @llvm.amdgcn.image.load.1d.half.i32(i32 8, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 245 ret half %v 246} 247 248define amdgpu_ps <2 x half> @load_1d_v2f16_xy(<8 x i32> inreg %rsrc, i32 %s) { 249; GFX8-UNPACKED-LABEL: load_1d_v2f16_xy: 250; GFX8-UNPACKED: ; %bb.0: 251; GFX8-UNPACKED-NEXT: s_mov_b32 s0, s2 252; GFX8-UNPACKED-NEXT: s_mov_b32 s1, s3 253; GFX8-UNPACKED-NEXT: s_mov_b32 s2, s4 254; GFX8-UNPACKED-NEXT: s_mov_b32 s3, s5 255; GFX8-UNPACKED-NEXT: s_mov_b32 s4, s6 256; GFX8-UNPACKED-NEXT: s_mov_b32 s5, s7 257; GFX8-UNPACKED-NEXT: s_mov_b32 s6, s8 258; GFX8-UNPACKED-NEXT: s_mov_b32 s7, s9 259; GFX8-UNPACKED-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x3 unorm d16 260; GFX8-UNPACKED-NEXT: s_waitcnt vmcnt(0) 261; GFX8-UNPACKED-NEXT: v_and_b32_e32 v1, 0xffff, v1 262; GFX8-UNPACKED-NEXT: v_lshlrev_b32_e32 v1, 16, v1 263; GFX8-UNPACKED-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 264; GFX8-UNPACKED-NEXT: ; return to shader part epilog 265; 266; GFX8-PACKED-LABEL: load_1d_v2f16_xy: 267; GFX8-PACKED: ; %bb.0: 268; GFX8-PACKED-NEXT: s_mov_b32 s0, s2 269; GFX8-PACKED-NEXT: s_mov_b32 s1, s3 270; GFX8-PACKED-NEXT: s_mov_b32 s2, s4 271; GFX8-PACKED-NEXT: s_mov_b32 s3, s5 272; GFX8-PACKED-NEXT: s_mov_b32 s4, s6 273; GFX8-PACKED-NEXT: s_mov_b32 s5, s7 274; GFX8-PACKED-NEXT: s_mov_b32 s6, s8 275; GFX8-PACKED-NEXT: s_mov_b32 s7, s9 276; GFX8-PACKED-NEXT: image_load v0, v0, s[0:7] dmask:0x3 unorm d16 277; GFX8-PACKED-NEXT: s_waitcnt vmcnt(0) 278; GFX8-PACKED-NEXT: ; return to shader part epilog 279; 280; GFX9-LABEL: load_1d_v2f16_xy: 281; GFX9: ; %bb.0: 282; GFX9-NEXT: s_mov_b32 s0, s2 283; GFX9-NEXT: s_mov_b32 s1, s3 284; GFX9-NEXT: s_mov_b32 s2, s4 285; GFX9-NEXT: s_mov_b32 s3, s5 286; GFX9-NEXT: s_mov_b32 s4, s6 287; GFX9-NEXT: s_mov_b32 s5, s7 288; GFX9-NEXT: s_mov_b32 s6, s8 289; GFX9-NEXT: s_mov_b32 s7, s9 290; GFX9-NEXT: image_load v0, v0, s[0:7] dmask:0x3 unorm d16 291; GFX9-NEXT: s_waitcnt vmcnt(0) 292; GFX9-NEXT: ; return to shader part epilog 293; 294; GFX10PLUS-LABEL: load_1d_v2f16_xy: 295; GFX10PLUS: ; %bb.0: 296; GFX10PLUS-NEXT: s_mov_b32 s0, s2 297; GFX10PLUS-NEXT: s_mov_b32 s1, s3 298; GFX10PLUS-NEXT: s_mov_b32 s2, s4 299; GFX10PLUS-NEXT: s_mov_b32 s3, s5 300; GFX10PLUS-NEXT: s_mov_b32 s4, s6 301; GFX10PLUS-NEXT: s_mov_b32 s5, s7 302; GFX10PLUS-NEXT: s_mov_b32 s6, s8 303; GFX10PLUS-NEXT: s_mov_b32 s7, s9 304; GFX10PLUS-NEXT: image_load v0, v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm d16 305; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 306; GFX10PLUS-NEXT: ; return to shader part epilog 307 %v = call <2 x half> @llvm.amdgcn.image.load.1d.v2f16.i32(i32 3, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 308 ret <2 x half> %v 309} 310 311define amdgpu_ps <2 x half> @load_1d_v2f16_xz(<8 x i32> inreg %rsrc, i32 %s) { 312; GFX8-UNPACKED-LABEL: load_1d_v2f16_xz: 313; GFX8-UNPACKED: ; %bb.0: 314; GFX8-UNPACKED-NEXT: s_mov_b32 s0, s2 315; GFX8-UNPACKED-NEXT: s_mov_b32 s1, s3 316; GFX8-UNPACKED-NEXT: s_mov_b32 s2, s4 317; GFX8-UNPACKED-NEXT: s_mov_b32 s3, s5 318; GFX8-UNPACKED-NEXT: s_mov_b32 s4, s6 319; GFX8-UNPACKED-NEXT: s_mov_b32 s5, s7 320; GFX8-UNPACKED-NEXT: s_mov_b32 s6, s8 321; GFX8-UNPACKED-NEXT: s_mov_b32 s7, s9 322; GFX8-UNPACKED-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x5 unorm d16 323; GFX8-UNPACKED-NEXT: s_waitcnt vmcnt(0) 324; GFX8-UNPACKED-NEXT: v_and_b32_e32 v1, 0xffff, v1 325; GFX8-UNPACKED-NEXT: v_lshlrev_b32_e32 v1, 16, v1 326; GFX8-UNPACKED-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 327; GFX8-UNPACKED-NEXT: ; return to shader part epilog 328; 329; GFX8-PACKED-LABEL: load_1d_v2f16_xz: 330; GFX8-PACKED: ; %bb.0: 331; GFX8-PACKED-NEXT: s_mov_b32 s0, s2 332; GFX8-PACKED-NEXT: s_mov_b32 s1, s3 333; GFX8-PACKED-NEXT: s_mov_b32 s2, s4 334; GFX8-PACKED-NEXT: s_mov_b32 s3, s5 335; GFX8-PACKED-NEXT: s_mov_b32 s4, s6 336; GFX8-PACKED-NEXT: s_mov_b32 s5, s7 337; GFX8-PACKED-NEXT: s_mov_b32 s6, s8 338; GFX8-PACKED-NEXT: s_mov_b32 s7, s9 339; GFX8-PACKED-NEXT: image_load v0, v0, s[0:7] dmask:0x5 unorm d16 340; GFX8-PACKED-NEXT: s_waitcnt vmcnt(0) 341; GFX8-PACKED-NEXT: ; return to shader part epilog 342; 343; GFX9-LABEL: load_1d_v2f16_xz: 344; GFX9: ; %bb.0: 345; GFX9-NEXT: s_mov_b32 s0, s2 346; GFX9-NEXT: s_mov_b32 s1, s3 347; GFX9-NEXT: s_mov_b32 s2, s4 348; GFX9-NEXT: s_mov_b32 s3, s5 349; GFX9-NEXT: s_mov_b32 s4, s6 350; GFX9-NEXT: s_mov_b32 s5, s7 351; GFX9-NEXT: s_mov_b32 s6, s8 352; GFX9-NEXT: s_mov_b32 s7, s9 353; GFX9-NEXT: image_load v0, v0, s[0:7] dmask:0x5 unorm d16 354; GFX9-NEXT: s_waitcnt vmcnt(0) 355; GFX9-NEXT: ; return to shader part epilog 356; 357; GFX10PLUS-LABEL: load_1d_v2f16_xz: 358; GFX10PLUS: ; %bb.0: 359; GFX10PLUS-NEXT: s_mov_b32 s0, s2 360; GFX10PLUS-NEXT: s_mov_b32 s1, s3 361; GFX10PLUS-NEXT: s_mov_b32 s2, s4 362; GFX10PLUS-NEXT: s_mov_b32 s3, s5 363; GFX10PLUS-NEXT: s_mov_b32 s4, s6 364; GFX10PLUS-NEXT: s_mov_b32 s5, s7 365; GFX10PLUS-NEXT: s_mov_b32 s6, s8 366; GFX10PLUS-NEXT: s_mov_b32 s7, s9 367; GFX10PLUS-NEXT: image_load v0, v0, s[0:7] dmask:0x5 dim:SQ_RSRC_IMG_1D unorm d16 368; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 369; GFX10PLUS-NEXT: ; return to shader part epilog 370 %v = call <2 x half> @llvm.amdgcn.image.load.1d.v2f16.i32(i32 5, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 371 ret <2 x half> %v 372} 373 374define amdgpu_ps <2 x half> @load_1d_v2f16_xw(<8 x i32> inreg %rsrc, i32 %s) { 375; GFX8-UNPACKED-LABEL: load_1d_v2f16_xw: 376; GFX8-UNPACKED: ; %bb.0: 377; GFX8-UNPACKED-NEXT: s_mov_b32 s0, s2 378; GFX8-UNPACKED-NEXT: s_mov_b32 s1, s3 379; GFX8-UNPACKED-NEXT: s_mov_b32 s2, s4 380; GFX8-UNPACKED-NEXT: s_mov_b32 s3, s5 381; GFX8-UNPACKED-NEXT: s_mov_b32 s4, s6 382; GFX8-UNPACKED-NEXT: s_mov_b32 s5, s7 383; GFX8-UNPACKED-NEXT: s_mov_b32 s6, s8 384; GFX8-UNPACKED-NEXT: s_mov_b32 s7, s9 385; GFX8-UNPACKED-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x9 unorm d16 386; GFX8-UNPACKED-NEXT: s_waitcnt vmcnt(0) 387; GFX8-UNPACKED-NEXT: v_and_b32_e32 v1, 0xffff, v1 388; GFX8-UNPACKED-NEXT: v_lshlrev_b32_e32 v1, 16, v1 389; GFX8-UNPACKED-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 390; GFX8-UNPACKED-NEXT: ; return to shader part epilog 391; 392; GFX8-PACKED-LABEL: load_1d_v2f16_xw: 393; GFX8-PACKED: ; %bb.0: 394; GFX8-PACKED-NEXT: s_mov_b32 s0, s2 395; GFX8-PACKED-NEXT: s_mov_b32 s1, s3 396; GFX8-PACKED-NEXT: s_mov_b32 s2, s4 397; GFX8-PACKED-NEXT: s_mov_b32 s3, s5 398; GFX8-PACKED-NEXT: s_mov_b32 s4, s6 399; GFX8-PACKED-NEXT: s_mov_b32 s5, s7 400; GFX8-PACKED-NEXT: s_mov_b32 s6, s8 401; GFX8-PACKED-NEXT: s_mov_b32 s7, s9 402; GFX8-PACKED-NEXT: image_load v0, v0, s[0:7] dmask:0x9 unorm d16 403; GFX8-PACKED-NEXT: s_waitcnt vmcnt(0) 404; GFX8-PACKED-NEXT: ; return to shader part epilog 405; 406; GFX9-LABEL: load_1d_v2f16_xw: 407; GFX9: ; %bb.0: 408; GFX9-NEXT: s_mov_b32 s0, s2 409; GFX9-NEXT: s_mov_b32 s1, s3 410; GFX9-NEXT: s_mov_b32 s2, s4 411; GFX9-NEXT: s_mov_b32 s3, s5 412; GFX9-NEXT: s_mov_b32 s4, s6 413; GFX9-NEXT: s_mov_b32 s5, s7 414; GFX9-NEXT: s_mov_b32 s6, s8 415; GFX9-NEXT: s_mov_b32 s7, s9 416; GFX9-NEXT: image_load v0, v0, s[0:7] dmask:0x9 unorm d16 417; GFX9-NEXT: s_waitcnt vmcnt(0) 418; GFX9-NEXT: ; return to shader part epilog 419; 420; GFX10PLUS-LABEL: load_1d_v2f16_xw: 421; GFX10PLUS: ; %bb.0: 422; GFX10PLUS-NEXT: s_mov_b32 s0, s2 423; GFX10PLUS-NEXT: s_mov_b32 s1, s3 424; GFX10PLUS-NEXT: s_mov_b32 s2, s4 425; GFX10PLUS-NEXT: s_mov_b32 s3, s5 426; GFX10PLUS-NEXT: s_mov_b32 s4, s6 427; GFX10PLUS-NEXT: s_mov_b32 s5, s7 428; GFX10PLUS-NEXT: s_mov_b32 s6, s8 429; GFX10PLUS-NEXT: s_mov_b32 s7, s9 430; GFX10PLUS-NEXT: image_load v0, v0, s[0:7] dmask:0x9 dim:SQ_RSRC_IMG_1D unorm d16 431; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 432; GFX10PLUS-NEXT: ; return to shader part epilog 433 %v = call <2 x half> @llvm.amdgcn.image.load.1d.v2f16.i32(i32 9, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 434 ret <2 x half> %v 435} 436 437define amdgpu_ps <2 x half> @load_1d_v2f16_yz(<8 x i32> inreg %rsrc, i32 %s) { 438; GFX8-UNPACKED-LABEL: load_1d_v2f16_yz: 439; GFX8-UNPACKED: ; %bb.0: 440; GFX8-UNPACKED-NEXT: s_mov_b32 s0, s2 441; GFX8-UNPACKED-NEXT: s_mov_b32 s1, s3 442; GFX8-UNPACKED-NEXT: s_mov_b32 s2, s4 443; GFX8-UNPACKED-NEXT: s_mov_b32 s3, s5 444; GFX8-UNPACKED-NEXT: s_mov_b32 s4, s6 445; GFX8-UNPACKED-NEXT: s_mov_b32 s5, s7 446; GFX8-UNPACKED-NEXT: s_mov_b32 s6, s8 447; GFX8-UNPACKED-NEXT: s_mov_b32 s7, s9 448; GFX8-UNPACKED-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x6 unorm d16 449; GFX8-UNPACKED-NEXT: s_waitcnt vmcnt(0) 450; GFX8-UNPACKED-NEXT: v_and_b32_e32 v1, 0xffff, v1 451; GFX8-UNPACKED-NEXT: v_lshlrev_b32_e32 v1, 16, v1 452; GFX8-UNPACKED-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 453; GFX8-UNPACKED-NEXT: ; return to shader part epilog 454; 455; GFX8-PACKED-LABEL: load_1d_v2f16_yz: 456; GFX8-PACKED: ; %bb.0: 457; GFX8-PACKED-NEXT: s_mov_b32 s0, s2 458; GFX8-PACKED-NEXT: s_mov_b32 s1, s3 459; GFX8-PACKED-NEXT: s_mov_b32 s2, s4 460; GFX8-PACKED-NEXT: s_mov_b32 s3, s5 461; GFX8-PACKED-NEXT: s_mov_b32 s4, s6 462; GFX8-PACKED-NEXT: s_mov_b32 s5, s7 463; GFX8-PACKED-NEXT: s_mov_b32 s6, s8 464; GFX8-PACKED-NEXT: s_mov_b32 s7, s9 465; GFX8-PACKED-NEXT: image_load v0, v0, s[0:7] dmask:0x6 unorm d16 466; GFX8-PACKED-NEXT: s_waitcnt vmcnt(0) 467; GFX8-PACKED-NEXT: ; return to shader part epilog 468; 469; GFX9-LABEL: load_1d_v2f16_yz: 470; GFX9: ; %bb.0: 471; GFX9-NEXT: s_mov_b32 s0, s2 472; GFX9-NEXT: s_mov_b32 s1, s3 473; GFX9-NEXT: s_mov_b32 s2, s4 474; GFX9-NEXT: s_mov_b32 s3, s5 475; GFX9-NEXT: s_mov_b32 s4, s6 476; GFX9-NEXT: s_mov_b32 s5, s7 477; GFX9-NEXT: s_mov_b32 s6, s8 478; GFX9-NEXT: s_mov_b32 s7, s9 479; GFX9-NEXT: image_load v0, v0, s[0:7] dmask:0x6 unorm d16 480; GFX9-NEXT: s_waitcnt vmcnt(0) 481; GFX9-NEXT: ; return to shader part epilog 482; 483; GFX10PLUS-LABEL: load_1d_v2f16_yz: 484; GFX10PLUS: ; %bb.0: 485; GFX10PLUS-NEXT: s_mov_b32 s0, s2 486; GFX10PLUS-NEXT: s_mov_b32 s1, s3 487; GFX10PLUS-NEXT: s_mov_b32 s2, s4 488; GFX10PLUS-NEXT: s_mov_b32 s3, s5 489; GFX10PLUS-NEXT: s_mov_b32 s4, s6 490; GFX10PLUS-NEXT: s_mov_b32 s5, s7 491; GFX10PLUS-NEXT: s_mov_b32 s6, s8 492; GFX10PLUS-NEXT: s_mov_b32 s7, s9 493; GFX10PLUS-NEXT: image_load v0, v0, s[0:7] dmask:0x6 dim:SQ_RSRC_IMG_1D unorm d16 494; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 495; GFX10PLUS-NEXT: ; return to shader part epilog 496 %v = call <2 x half> @llvm.amdgcn.image.load.1d.v2f16.i32(i32 6, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 497 ret <2 x half> %v 498} 499 500define amdgpu_ps <3 x half> @load_1d_v3f16_xyz(<8 x i32> inreg %rsrc, i32 %s) { 501; GFX8-UNPACKED-LABEL: load_1d_v3f16_xyz: 502; GFX8-UNPACKED: ; %bb.0: 503; GFX8-UNPACKED-NEXT: s_mov_b32 s0, s2 504; GFX8-UNPACKED-NEXT: s_mov_b32 s1, s3 505; GFX8-UNPACKED-NEXT: s_mov_b32 s2, s4 506; GFX8-UNPACKED-NEXT: s_mov_b32 s3, s5 507; GFX8-UNPACKED-NEXT: s_mov_b32 s4, s6 508; GFX8-UNPACKED-NEXT: s_mov_b32 s5, s7 509; GFX8-UNPACKED-NEXT: s_mov_b32 s6, s8 510; GFX8-UNPACKED-NEXT: s_mov_b32 s7, s9 511; GFX8-UNPACKED-NEXT: image_load v[0:2], v0, s[0:7] dmask:0x7 unorm d16 512; GFX8-UNPACKED-NEXT: s_waitcnt vmcnt(0) 513; GFX8-UNPACKED-NEXT: v_and_b32_e32 v3, 0xffff, v1 514; GFX8-UNPACKED-NEXT: v_and_b32_e32 v1, 0xffff, v2 515; GFX8-UNPACKED-NEXT: v_lshlrev_b32_e32 v2, 16, v3 516; GFX8-UNPACKED-NEXT: v_or_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 517; GFX8-UNPACKED-NEXT: ; return to shader part epilog 518; 519; GFX8-PACKED-LABEL: load_1d_v3f16_xyz: 520; GFX8-PACKED: ; %bb.0: 521; GFX8-PACKED-NEXT: s_mov_b32 s0, s2 522; GFX8-PACKED-NEXT: s_mov_b32 s1, s3 523; GFX8-PACKED-NEXT: s_mov_b32 s2, s4 524; GFX8-PACKED-NEXT: s_mov_b32 s3, s5 525; GFX8-PACKED-NEXT: s_mov_b32 s4, s6 526; GFX8-PACKED-NEXT: s_mov_b32 s5, s7 527; GFX8-PACKED-NEXT: s_mov_b32 s6, s8 528; GFX8-PACKED-NEXT: s_mov_b32 s7, s9 529; GFX8-PACKED-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x7 unorm d16 530; GFX8-PACKED-NEXT: s_waitcnt vmcnt(0) 531; GFX8-PACKED-NEXT: v_lshrrev_b32_e32 v2, 16, v0 532; GFX8-PACKED-NEXT: v_lshlrev_b32_e32 v2, 16, v2 533; GFX8-PACKED-NEXT: v_and_b32_e32 v1, 0xffff, v1 534; GFX8-PACKED-NEXT: v_or_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 535; GFX8-PACKED-NEXT: ; return to shader part epilog 536; 537; GFX9-LABEL: load_1d_v3f16_xyz: 538; GFX9: ; %bb.0: 539; GFX9-NEXT: s_mov_b32 s0, s2 540; GFX9-NEXT: s_mov_b32 s1, s3 541; GFX9-NEXT: s_mov_b32 s2, s4 542; GFX9-NEXT: s_mov_b32 s3, s5 543; GFX9-NEXT: s_mov_b32 s4, s6 544; GFX9-NEXT: s_mov_b32 s5, s7 545; GFX9-NEXT: s_mov_b32 s6, s8 546; GFX9-NEXT: s_mov_b32 s7, s9 547; GFX9-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x7 unorm d16 548; GFX9-NEXT: v_mov_b32_e32 v2, 0xffff 549; GFX9-NEXT: s_lshl_b32 s0, s0, 16 550; GFX9-NEXT: s_waitcnt vmcnt(0) 551; GFX9-NEXT: v_lshrrev_b32_e32 v3, 16, v0 552; GFX9-NEXT: v_lshlrev_b32_e32 v3, 16, v3 553; GFX9-NEXT: v_and_or_b32 v1, v1, v2, s0 554; GFX9-NEXT: v_and_or_b32 v0, v0, v2, v3 555; GFX9-NEXT: ; return to shader part epilog 556; 557; GFX10-LABEL: load_1d_v3f16_xyz: 558; GFX10: ; %bb.0: 559; GFX10-NEXT: s_mov_b32 s0, s2 560; GFX10-NEXT: s_mov_b32 s1, s3 561; GFX10-NEXT: s_mov_b32 s2, s4 562; GFX10-NEXT: s_mov_b32 s3, s5 563; GFX10-NEXT: s_mov_b32 s4, s6 564; GFX10-NEXT: s_mov_b32 s5, s7 565; GFX10-NEXT: s_mov_b32 s6, s8 566; GFX10-NEXT: s_mov_b32 s7, s9 567; GFX10-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm d16 568; GFX10-NEXT: s_waitcnt_depctr 0xffe3 569; GFX10-NEXT: s_lshl_b32 s0, s0, 16 570; GFX10-NEXT: s_waitcnt vmcnt(0) 571; GFX10-NEXT: v_lshrrev_b32_e32 v2, 16, v0 572; GFX10-NEXT: v_and_or_b32 v1, 0xffff, v1, s0 573; GFX10-NEXT: v_lshlrev_b32_e32 v2, 16, v2 574; GFX10-NEXT: v_and_or_b32 v0, 0xffff, v0, v2 575; GFX10-NEXT: ; return to shader part epilog 576; 577; GFX11-LABEL: load_1d_v3f16_xyz: 578; GFX11: ; %bb.0: 579; GFX11-NEXT: s_mov_b32 s0, s2 580; GFX11-NEXT: s_mov_b32 s1, s3 581; GFX11-NEXT: s_mov_b32 s2, s4 582; GFX11-NEXT: s_mov_b32 s3, s5 583; GFX11-NEXT: s_mov_b32 s4, s6 584; GFX11-NEXT: s_mov_b32 s5, s7 585; GFX11-NEXT: s_mov_b32 s6, s8 586; GFX11-NEXT: s_mov_b32 s7, s9 587; GFX11-NEXT: image_load v[0:1], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm d16 588; GFX11-NEXT: s_lshl_b32 s0, s0, 16 589; GFX11-NEXT: s_waitcnt vmcnt(0) 590; GFX11-NEXT: v_lshrrev_b32_e32 v2, 16, v0 591; GFX11-NEXT: v_and_or_b32 v1, 0xffff, v1, s0 592; GFX11-NEXT: v_lshlrev_b32_e32 v2, 16, v2 593; GFX11-NEXT: v_and_or_b32 v0, 0xffff, v0, v2 594; GFX11-NEXT: ; return to shader part epilog 595 %v = call <3 x half> @llvm.amdgcn.image.load.1d.v3f16.i32(i32 7, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 596 ret <3 x half> %v 597} 598 599define amdgpu_ps <4 x half> @load_1d_v4f16_xyzw(<8 x i32> inreg %rsrc, i32 %s) { 600; GFX8-UNPACKED-LABEL: load_1d_v4f16_xyzw: 601; GFX8-UNPACKED: ; %bb.0: 602; GFX8-UNPACKED-NEXT: s_mov_b32 s0, s2 603; GFX8-UNPACKED-NEXT: s_mov_b32 s1, s3 604; GFX8-UNPACKED-NEXT: s_mov_b32 s2, s4 605; GFX8-UNPACKED-NEXT: s_mov_b32 s3, s5 606; GFX8-UNPACKED-NEXT: s_mov_b32 s4, s6 607; GFX8-UNPACKED-NEXT: s_mov_b32 s5, s7 608; GFX8-UNPACKED-NEXT: s_mov_b32 s6, s8 609; GFX8-UNPACKED-NEXT: s_mov_b32 s7, s9 610; GFX8-UNPACKED-NEXT: image_load v[0:3], v0, s[0:7] dmask:0xf unorm d16 611; GFX8-UNPACKED-NEXT: s_waitcnt vmcnt(0) 612; GFX8-UNPACKED-NEXT: v_and_b32_e32 v1, 0xffff, v1 613; GFX8-UNPACKED-NEXT: v_and_b32_e32 v3, 0xffff, v3 614; GFX8-UNPACKED-NEXT: v_lshlrev_b32_e32 v1, 16, v1 615; GFX8-UNPACKED-NEXT: v_lshlrev_b32_e32 v3, 16, v3 616; GFX8-UNPACKED-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 617; GFX8-UNPACKED-NEXT: v_or_b32_sdwa v1, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD 618; GFX8-UNPACKED-NEXT: ; return to shader part epilog 619; 620; GFX8-PACKED-LABEL: load_1d_v4f16_xyzw: 621; GFX8-PACKED: ; %bb.0: 622; GFX8-PACKED-NEXT: s_mov_b32 s0, s2 623; GFX8-PACKED-NEXT: s_mov_b32 s1, s3 624; GFX8-PACKED-NEXT: s_mov_b32 s2, s4 625; GFX8-PACKED-NEXT: s_mov_b32 s3, s5 626; GFX8-PACKED-NEXT: s_mov_b32 s4, s6 627; GFX8-PACKED-NEXT: s_mov_b32 s5, s7 628; GFX8-PACKED-NEXT: s_mov_b32 s6, s8 629; GFX8-PACKED-NEXT: s_mov_b32 s7, s9 630; GFX8-PACKED-NEXT: image_load v[0:1], v0, s[0:7] dmask:0xf unorm d16 631; GFX8-PACKED-NEXT: s_waitcnt vmcnt(0) 632; GFX8-PACKED-NEXT: ; return to shader part epilog 633; 634; GFX9-LABEL: load_1d_v4f16_xyzw: 635; GFX9: ; %bb.0: 636; GFX9-NEXT: s_mov_b32 s0, s2 637; GFX9-NEXT: s_mov_b32 s1, s3 638; GFX9-NEXT: s_mov_b32 s2, s4 639; GFX9-NEXT: s_mov_b32 s3, s5 640; GFX9-NEXT: s_mov_b32 s4, s6 641; GFX9-NEXT: s_mov_b32 s5, s7 642; GFX9-NEXT: s_mov_b32 s6, s8 643; GFX9-NEXT: s_mov_b32 s7, s9 644; GFX9-NEXT: image_load v[0:1], v0, s[0:7] dmask:0xf unorm d16 645; GFX9-NEXT: s_waitcnt vmcnt(0) 646; GFX9-NEXT: ; return to shader part epilog 647; 648; GFX10PLUS-LABEL: load_1d_v4f16_xyzw: 649; GFX10PLUS: ; %bb.0: 650; GFX10PLUS-NEXT: s_mov_b32 s0, s2 651; GFX10PLUS-NEXT: s_mov_b32 s1, s3 652; GFX10PLUS-NEXT: s_mov_b32 s2, s4 653; GFX10PLUS-NEXT: s_mov_b32 s3, s5 654; GFX10PLUS-NEXT: s_mov_b32 s4, s6 655; GFX10PLUS-NEXT: s_mov_b32 s5, s7 656; GFX10PLUS-NEXT: s_mov_b32 s6, s8 657; GFX10PLUS-NEXT: s_mov_b32 s7, s9 658; GFX10PLUS-NEXT: image_load v[0:1], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm d16 659; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 660; GFX10PLUS-NEXT: ; return to shader part epilog 661 %v = call <4 x half> @llvm.amdgcn.image.load.1d.v4f16.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 0) 662 ret <4 x half> %v 663} 664 665define amdgpu_ps float @load_1d_f16_tfe_dmask_x(<8 x i32> inreg %rsrc, i32 %s) { 666; GFX8-UNPACKED-LABEL: load_1d_f16_tfe_dmask_x: 667; GFX8-UNPACKED: ; %bb.0: 668; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v1, 0 669; GFX8-UNPACKED-NEXT: s_mov_b32 s0, s2 670; GFX8-UNPACKED-NEXT: s_mov_b32 s1, s3 671; GFX8-UNPACKED-NEXT: s_mov_b32 s2, s4 672; GFX8-UNPACKED-NEXT: s_mov_b32 s3, s5 673; GFX8-UNPACKED-NEXT: s_mov_b32 s4, s6 674; GFX8-UNPACKED-NEXT: s_mov_b32 s5, s7 675; GFX8-UNPACKED-NEXT: s_mov_b32 s6, s8 676; GFX8-UNPACKED-NEXT: s_mov_b32 s7, s9 677; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v2, v1 678; GFX8-UNPACKED-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe d16 679; GFX8-UNPACKED-NEXT: s_waitcnt vmcnt(0) 680; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v0, v2 681; GFX8-UNPACKED-NEXT: ; return to shader part epilog 682; 683; GFX8-PACKED-LABEL: load_1d_f16_tfe_dmask_x: 684; GFX8-PACKED: ; %bb.0: 685; GFX8-PACKED-NEXT: v_mov_b32_e32 v1, 0 686; GFX8-PACKED-NEXT: s_mov_b32 s0, s2 687; GFX8-PACKED-NEXT: s_mov_b32 s1, s3 688; GFX8-PACKED-NEXT: s_mov_b32 s2, s4 689; GFX8-PACKED-NEXT: s_mov_b32 s3, s5 690; GFX8-PACKED-NEXT: s_mov_b32 s4, s6 691; GFX8-PACKED-NEXT: s_mov_b32 s5, s7 692; GFX8-PACKED-NEXT: s_mov_b32 s6, s8 693; GFX8-PACKED-NEXT: s_mov_b32 s7, s9 694; GFX8-PACKED-NEXT: v_mov_b32_e32 v2, v1 695; GFX8-PACKED-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe d16 696; GFX8-PACKED-NEXT: s_waitcnt vmcnt(0) 697; GFX8-PACKED-NEXT: v_mov_b32_e32 v0, v2 698; GFX8-PACKED-NEXT: ; return to shader part epilog 699; 700; GFX9-LABEL: load_1d_f16_tfe_dmask_x: 701; GFX9: ; %bb.0: 702; GFX9-NEXT: v_mov_b32_e32 v1, 0 703; GFX9-NEXT: s_mov_b32 s0, s2 704; GFX9-NEXT: s_mov_b32 s1, s3 705; GFX9-NEXT: s_mov_b32 s2, s4 706; GFX9-NEXT: s_mov_b32 s3, s5 707; GFX9-NEXT: s_mov_b32 s4, s6 708; GFX9-NEXT: s_mov_b32 s5, s7 709; GFX9-NEXT: s_mov_b32 s6, s8 710; GFX9-NEXT: s_mov_b32 s7, s9 711; GFX9-NEXT: v_mov_b32_e32 v2, v1 712; GFX9-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe d16 713; GFX9-NEXT: s_waitcnt vmcnt(0) 714; GFX9-NEXT: v_mov_b32_e32 v0, v2 715; GFX9-NEXT: ; return to shader part epilog 716; 717; GFX10PLUS-LABEL: load_1d_f16_tfe_dmask_x: 718; GFX10PLUS: ; %bb.0: 719; GFX10PLUS-NEXT: v_mov_b32_e32 v1, 0 720; GFX10PLUS-NEXT: s_mov_b32 s0, s2 721; GFX10PLUS-NEXT: s_mov_b32 s1, s3 722; GFX10PLUS-NEXT: s_mov_b32 s2, s4 723; GFX10PLUS-NEXT: s_mov_b32 s3, s5 724; GFX10PLUS-NEXT: s_mov_b32 s4, s6 725; GFX10PLUS-NEXT: s_mov_b32 s5, s7 726; GFX10PLUS-NEXT: s_mov_b32 s6, s8 727; GFX10PLUS-NEXT: s_mov_b32 s7, s9 728; GFX10PLUS-NEXT: v_mov_b32_e32 v2, v1 729; GFX10PLUS-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe d16 730; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 731; GFX10PLUS-NEXT: v_mov_b32_e32 v0, v2 732; GFX10PLUS-NEXT: ; return to shader part epilog 733 %v = call { half, i32 } @llvm.amdgcn.image.load.1d.sl_f16i32s.i32(i32 1, i32 %s, <8 x i32> %rsrc, i32 1, i32 0) 734 %v.err = extractvalue { half, i32 } %v, 1 735 %vv = bitcast i32 %v.err to float 736 ret float %vv 737} 738 739define amdgpu_ps float @load_1d_v2f16_tfe_dmask_xy(<8 x i32> inreg %rsrc, i32 %s) { 740; GFX8-UNPACKED-LABEL: load_1d_v2f16_tfe_dmask_xy: 741; GFX8-UNPACKED: ; %bb.0: 742; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v1, 0 743; GFX8-UNPACKED-NEXT: s_mov_b32 s0, s2 744; GFX8-UNPACKED-NEXT: s_mov_b32 s1, s3 745; GFX8-UNPACKED-NEXT: s_mov_b32 s2, s4 746; GFX8-UNPACKED-NEXT: s_mov_b32 s3, s5 747; GFX8-UNPACKED-NEXT: s_mov_b32 s4, s6 748; GFX8-UNPACKED-NEXT: s_mov_b32 s5, s7 749; GFX8-UNPACKED-NEXT: s_mov_b32 s6, s8 750; GFX8-UNPACKED-NEXT: s_mov_b32 s7, s9 751; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v2, v1 752; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v3, v1 753; GFX8-UNPACKED-NEXT: image_load v[1:3], v0, s[0:7] dmask:0x3 unorm tfe d16 754; GFX8-UNPACKED-NEXT: s_waitcnt vmcnt(0) 755; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v0, v3 756; GFX8-UNPACKED-NEXT: ; return to shader part epilog 757; 758; GFX8-PACKED-LABEL: load_1d_v2f16_tfe_dmask_xy: 759; GFX8-PACKED: ; %bb.0: 760; GFX8-PACKED-NEXT: v_mov_b32_e32 v1, 0 761; GFX8-PACKED-NEXT: s_mov_b32 s0, s2 762; GFX8-PACKED-NEXT: s_mov_b32 s1, s3 763; GFX8-PACKED-NEXT: s_mov_b32 s2, s4 764; GFX8-PACKED-NEXT: s_mov_b32 s3, s5 765; GFX8-PACKED-NEXT: s_mov_b32 s4, s6 766; GFX8-PACKED-NEXT: s_mov_b32 s5, s7 767; GFX8-PACKED-NEXT: s_mov_b32 s6, s8 768; GFX8-PACKED-NEXT: s_mov_b32 s7, s9 769; GFX8-PACKED-NEXT: v_mov_b32_e32 v2, v1 770; GFX8-PACKED-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x3 unorm tfe d16 771; GFX8-PACKED-NEXT: s_waitcnt vmcnt(0) 772; GFX8-PACKED-NEXT: v_mov_b32_e32 v0, v2 773; GFX8-PACKED-NEXT: ; return to shader part epilog 774; 775; GFX9-LABEL: load_1d_v2f16_tfe_dmask_xy: 776; GFX9: ; %bb.0: 777; GFX9-NEXT: v_mov_b32_e32 v1, 0 778; GFX9-NEXT: s_mov_b32 s0, s2 779; GFX9-NEXT: s_mov_b32 s1, s3 780; GFX9-NEXT: s_mov_b32 s2, s4 781; GFX9-NEXT: s_mov_b32 s3, s5 782; GFX9-NEXT: s_mov_b32 s4, s6 783; GFX9-NEXT: s_mov_b32 s5, s7 784; GFX9-NEXT: s_mov_b32 s6, s8 785; GFX9-NEXT: s_mov_b32 s7, s9 786; GFX9-NEXT: v_mov_b32_e32 v2, v1 787; GFX9-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x3 unorm tfe d16 788; GFX9-NEXT: s_waitcnt vmcnt(0) 789; GFX9-NEXT: v_mov_b32_e32 v0, v2 790; GFX9-NEXT: ; return to shader part epilog 791; 792; GFX10PLUS-LABEL: load_1d_v2f16_tfe_dmask_xy: 793; GFX10PLUS: ; %bb.0: 794; GFX10PLUS-NEXT: v_mov_b32_e32 v1, 0 795; GFX10PLUS-NEXT: s_mov_b32 s0, s2 796; GFX10PLUS-NEXT: s_mov_b32 s1, s3 797; GFX10PLUS-NEXT: s_mov_b32 s2, s4 798; GFX10PLUS-NEXT: s_mov_b32 s3, s5 799; GFX10PLUS-NEXT: s_mov_b32 s4, s6 800; GFX10PLUS-NEXT: s_mov_b32 s5, s7 801; GFX10PLUS-NEXT: s_mov_b32 s6, s8 802; GFX10PLUS-NEXT: s_mov_b32 s7, s9 803; GFX10PLUS-NEXT: v_mov_b32_e32 v2, v1 804; GFX10PLUS-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm tfe d16 805; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 806; GFX10PLUS-NEXT: v_mov_b32_e32 v0, v2 807; GFX10PLUS-NEXT: ; return to shader part epilog 808 %v = call { <2 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v2f16i32s.i32(i32 3, i32 %s, <8 x i32> %rsrc, i32 1, i32 0) 809 %v.err = extractvalue { <2 x half>, i32 } %v, 1 810 %vv = bitcast i32 %v.err to float 811 ret float %vv 812} 813 814define amdgpu_ps float @load_1d_v3f16_tfe_dmask_xyz(<8 x i32> inreg %rsrc, i32 %s) { 815; GFX8-UNPACKED-LABEL: load_1d_v3f16_tfe_dmask_xyz: 816; GFX8-UNPACKED: ; %bb.0: 817; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v1, 0 818; GFX8-UNPACKED-NEXT: s_mov_b32 s0, s2 819; GFX8-UNPACKED-NEXT: s_mov_b32 s1, s3 820; GFX8-UNPACKED-NEXT: s_mov_b32 s2, s4 821; GFX8-UNPACKED-NEXT: s_mov_b32 s3, s5 822; GFX8-UNPACKED-NEXT: s_mov_b32 s4, s6 823; GFX8-UNPACKED-NEXT: s_mov_b32 s5, s7 824; GFX8-UNPACKED-NEXT: s_mov_b32 s6, s8 825; GFX8-UNPACKED-NEXT: s_mov_b32 s7, s9 826; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v2, v1 827; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v3, v1 828; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v4, v1 829; GFX8-UNPACKED-NEXT: image_load v[1:4], v0, s[0:7] dmask:0x7 unorm tfe d16 830; GFX8-UNPACKED-NEXT: s_waitcnt vmcnt(0) 831; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v0, v4 832; GFX8-UNPACKED-NEXT: ; return to shader part epilog 833; 834; GFX8-PACKED-LABEL: load_1d_v3f16_tfe_dmask_xyz: 835; GFX8-PACKED: ; %bb.0: 836; GFX8-PACKED-NEXT: v_mov_b32_e32 v1, 0 837; GFX8-PACKED-NEXT: s_mov_b32 s0, s2 838; GFX8-PACKED-NEXT: s_mov_b32 s1, s3 839; GFX8-PACKED-NEXT: s_mov_b32 s2, s4 840; GFX8-PACKED-NEXT: s_mov_b32 s3, s5 841; GFX8-PACKED-NEXT: s_mov_b32 s4, s6 842; GFX8-PACKED-NEXT: s_mov_b32 s5, s7 843; GFX8-PACKED-NEXT: s_mov_b32 s6, s8 844; GFX8-PACKED-NEXT: s_mov_b32 s7, s9 845; GFX8-PACKED-NEXT: v_mov_b32_e32 v2, v1 846; GFX8-PACKED-NEXT: v_mov_b32_e32 v3, v1 847; GFX8-PACKED-NEXT: image_load v[1:3], v0, s[0:7] dmask:0x7 unorm tfe d16 848; GFX8-PACKED-NEXT: s_waitcnt vmcnt(0) 849; GFX8-PACKED-NEXT: v_mov_b32_e32 v0, v3 850; GFX8-PACKED-NEXT: ; return to shader part epilog 851; 852; GFX9-LABEL: load_1d_v3f16_tfe_dmask_xyz: 853; GFX9: ; %bb.0: 854; GFX9-NEXT: v_mov_b32_e32 v1, 0 855; GFX9-NEXT: s_mov_b32 s0, s2 856; GFX9-NEXT: s_mov_b32 s1, s3 857; GFX9-NEXT: s_mov_b32 s2, s4 858; GFX9-NEXT: s_mov_b32 s3, s5 859; GFX9-NEXT: s_mov_b32 s4, s6 860; GFX9-NEXT: s_mov_b32 s5, s7 861; GFX9-NEXT: s_mov_b32 s6, s8 862; GFX9-NEXT: s_mov_b32 s7, s9 863; GFX9-NEXT: v_mov_b32_e32 v2, v1 864; GFX9-NEXT: v_mov_b32_e32 v3, v1 865; GFX9-NEXT: image_load v[1:3], v0, s[0:7] dmask:0x7 unorm tfe d16 866; GFX9-NEXT: s_waitcnt vmcnt(0) 867; GFX9-NEXT: v_mov_b32_e32 v0, v3 868; GFX9-NEXT: ; return to shader part epilog 869; 870; GFX10PLUS-LABEL: load_1d_v3f16_tfe_dmask_xyz: 871; GFX10PLUS: ; %bb.0: 872; GFX10PLUS-NEXT: v_mov_b32_e32 v1, 0 873; GFX10PLUS-NEXT: s_mov_b32 s0, s2 874; GFX10PLUS-NEXT: s_mov_b32 s1, s3 875; GFX10PLUS-NEXT: s_mov_b32 s2, s4 876; GFX10PLUS-NEXT: s_mov_b32 s3, s5 877; GFX10PLUS-NEXT: s_mov_b32 s4, s6 878; GFX10PLUS-NEXT: s_mov_b32 s5, s7 879; GFX10PLUS-NEXT: s_mov_b32 s6, s8 880; GFX10PLUS-NEXT: s_mov_b32 s7, s9 881; GFX10PLUS-NEXT: v_mov_b32_e32 v2, v1 882; GFX10PLUS-NEXT: v_mov_b32_e32 v3, v1 883; GFX10PLUS-NEXT: image_load v[1:3], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm tfe d16 884; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 885; GFX10PLUS-NEXT: v_mov_b32_e32 v0, v3 886; GFX10PLUS-NEXT: ; return to shader part epilog 887 %v = call { <3 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v3f16i32s.i32(i32 7, i32 %s, <8 x i32> %rsrc, i32 1, i32 0) 888 %v.err = extractvalue { <3 x half>, i32 } %v, 1 889 %vv = bitcast i32 %v.err to float 890 ret float %vv 891} 892 893define amdgpu_ps float @load_1d_v4f16_tfe_dmask_xyzw(<8 x i32> inreg %rsrc, i32 %s) { 894; GFX8-UNPACKED-LABEL: load_1d_v4f16_tfe_dmask_xyzw: 895; GFX8-UNPACKED: ; %bb.0: 896; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v1, 0 897; GFX8-UNPACKED-NEXT: s_mov_b32 s0, s2 898; GFX8-UNPACKED-NEXT: s_mov_b32 s1, s3 899; GFX8-UNPACKED-NEXT: s_mov_b32 s2, s4 900; GFX8-UNPACKED-NEXT: s_mov_b32 s3, s5 901; GFX8-UNPACKED-NEXT: s_mov_b32 s4, s6 902; GFX8-UNPACKED-NEXT: s_mov_b32 s5, s7 903; GFX8-UNPACKED-NEXT: s_mov_b32 s6, s8 904; GFX8-UNPACKED-NEXT: s_mov_b32 s7, s9 905; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v2, v1 906; GFX8-UNPACKED-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x10 unorm tfe d16 907; GFX8-UNPACKED-NEXT: s_waitcnt vmcnt(0) 908; GFX8-UNPACKED-NEXT: v_mov_b32_e32 v0, v2 909; GFX8-UNPACKED-NEXT: ; return to shader part epilog 910; 911; GFX8-PACKED-LABEL: load_1d_v4f16_tfe_dmask_xyzw: 912; GFX8-PACKED: ; %bb.0: 913; GFX8-PACKED-NEXT: v_mov_b32_e32 v1, 0 914; GFX8-PACKED-NEXT: s_mov_b32 s0, s2 915; GFX8-PACKED-NEXT: s_mov_b32 s1, s3 916; GFX8-PACKED-NEXT: s_mov_b32 s2, s4 917; GFX8-PACKED-NEXT: s_mov_b32 s3, s5 918; GFX8-PACKED-NEXT: s_mov_b32 s4, s6 919; GFX8-PACKED-NEXT: s_mov_b32 s5, s7 920; GFX8-PACKED-NEXT: s_mov_b32 s6, s8 921; GFX8-PACKED-NEXT: s_mov_b32 s7, s9 922; GFX8-PACKED-NEXT: v_mov_b32_e32 v2, v1 923; GFX8-PACKED-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x10 unorm tfe d16 924; GFX8-PACKED-NEXT: s_waitcnt vmcnt(0) 925; GFX8-PACKED-NEXT: v_mov_b32_e32 v0, v2 926; GFX8-PACKED-NEXT: ; return to shader part epilog 927; 928; GFX9-LABEL: load_1d_v4f16_tfe_dmask_xyzw: 929; GFX9: ; %bb.0: 930; GFX9-NEXT: v_mov_b32_e32 v1, 0 931; GFX9-NEXT: s_mov_b32 s0, s2 932; GFX9-NEXT: s_mov_b32 s1, s3 933; GFX9-NEXT: s_mov_b32 s2, s4 934; GFX9-NEXT: s_mov_b32 s3, s5 935; GFX9-NEXT: s_mov_b32 s4, s6 936; GFX9-NEXT: s_mov_b32 s5, s7 937; GFX9-NEXT: s_mov_b32 s6, s8 938; GFX9-NEXT: s_mov_b32 s7, s9 939; GFX9-NEXT: v_mov_b32_e32 v2, v1 940; GFX9-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x10 unorm tfe d16 941; GFX9-NEXT: s_waitcnt vmcnt(0) 942; GFX9-NEXT: v_mov_b32_e32 v0, v2 943; GFX9-NEXT: ; return to shader part epilog 944; 945; GFX10PLUS-LABEL: load_1d_v4f16_tfe_dmask_xyzw: 946; GFX10PLUS: ; %bb.0: 947; GFX10PLUS-NEXT: v_mov_b32_e32 v1, 0 948; GFX10PLUS-NEXT: s_mov_b32 s0, s2 949; GFX10PLUS-NEXT: s_mov_b32 s1, s3 950; GFX10PLUS-NEXT: s_mov_b32 s2, s4 951; GFX10PLUS-NEXT: s_mov_b32 s3, s5 952; GFX10PLUS-NEXT: s_mov_b32 s4, s6 953; GFX10PLUS-NEXT: s_mov_b32 s5, s7 954; GFX10PLUS-NEXT: s_mov_b32 s6, s8 955; GFX10PLUS-NEXT: s_mov_b32 s7, s9 956; GFX10PLUS-NEXT: v_mov_b32_e32 v2, v1 957; GFX10PLUS-NEXT: image_load v[1:2], v0, s[0:7] dmask:0x10 dim:SQ_RSRC_IMG_1D unorm tfe d16 958; GFX10PLUS-NEXT: s_waitcnt vmcnt(0) 959; GFX10PLUS-NEXT: v_mov_b32_e32 v0, v2 960; GFX10PLUS-NEXT: ; return to shader part epilog 961 %v = call { <4 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v4f16i32s.i32(i32 16, i32 %s, <8 x i32> %rsrc, i32 1, i32 0) 962 %v.err = extractvalue { <4 x half>, i32 } %v, 1 963 %vv = bitcast i32 %v.err to float 964 ret float %vv 965} 966 967declare half @llvm.amdgcn.image.load.1d.half.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0 968declare <2 x half> @llvm.amdgcn.image.load.1d.v2f16.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0 969declare <3 x half> @llvm.amdgcn.image.load.1d.v3f16.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0 970declare <4 x half> @llvm.amdgcn.image.load.1d.v4f16.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0 971 972declare { half, i32 } @llvm.amdgcn.image.load.1d.sl_f16i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0 973declare { <2 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v2f16i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0 974declare { <3 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v3f16i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0 975declare { <4 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v4f16i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0 976 977attributes #0 = { nounwind readonly } 978