1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -verify-machineinstrs < %s | FileCheck -check-prefix=GFX6 %s 3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -verify-machineinstrs < %s | FileCheck -check-prefix=GFX8 %s 4; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefix=GFX10 %s 5; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck -check-prefix=GFX10 %s 6; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 -verify-machineinstrs < %s | FileCheck -check-prefix=GFX12 %s 7 8define amdgpu_ps <4 x float> @getresinfo_1d(<8 x i32> inreg %rsrc, i32 %mip) { 9; GFX6-LABEL: getresinfo_1d: 10; GFX6: ; %bb.0: ; %main_body 11; GFX6-NEXT: s_mov_b32 s0, s2 12; GFX6-NEXT: s_mov_b32 s1, s3 13; GFX6-NEXT: s_mov_b32 s2, s4 14; GFX6-NEXT: s_mov_b32 s3, s5 15; GFX6-NEXT: s_mov_b32 s4, s6 16; GFX6-NEXT: s_mov_b32 s5, s7 17; GFX6-NEXT: s_mov_b32 s6, s8 18; GFX6-NEXT: s_mov_b32 s7, s9 19; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 20; GFX6-NEXT: s_waitcnt vmcnt(0) 21; GFX6-NEXT: ; return to shader part epilog 22; 23; GFX8-LABEL: getresinfo_1d: 24; GFX8: ; %bb.0: ; %main_body 25; GFX8-NEXT: s_mov_b32 s0, s2 26; GFX8-NEXT: s_mov_b32 s1, s3 27; GFX8-NEXT: s_mov_b32 s2, s4 28; GFX8-NEXT: s_mov_b32 s3, s5 29; GFX8-NEXT: s_mov_b32 s4, s6 30; GFX8-NEXT: s_mov_b32 s5, s7 31; GFX8-NEXT: s_mov_b32 s6, s8 32; GFX8-NEXT: s_mov_b32 s7, s9 33; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 34; GFX8-NEXT: s_waitcnt vmcnt(0) 35; GFX8-NEXT: ; return to shader part epilog 36; 37; GFX10-LABEL: getresinfo_1d: 38; GFX10: ; %bb.0: ; %main_body 39; GFX10-NEXT: s_mov_b32 s0, s2 40; GFX10-NEXT: s_mov_b32 s1, s3 41; GFX10-NEXT: s_mov_b32 s2, s4 42; GFX10-NEXT: s_mov_b32 s3, s5 43; GFX10-NEXT: s_mov_b32 s4, s6 44; GFX10-NEXT: s_mov_b32 s5, s7 45; GFX10-NEXT: s_mov_b32 s6, s8 46; GFX10-NEXT: s_mov_b32 s7, s9 47; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm 48; GFX10-NEXT: s_waitcnt vmcnt(0) 49; GFX10-NEXT: ; return to shader part epilog 50; 51; GFX12-LABEL: getresinfo_1d: 52; GFX12: ; %bb.0: ; %main_body 53; GFX12-NEXT: s_mov_b32 s0, s2 54; GFX12-NEXT: s_mov_b32 s1, s3 55; GFX12-NEXT: s_mov_b32 s2, s4 56; GFX12-NEXT: s_mov_b32 s3, s5 57; GFX12-NEXT: s_mov_b32 s4, s6 58; GFX12-NEXT: s_mov_b32 s5, s7 59; GFX12-NEXT: s_mov_b32 s6, s8 60; GFX12-NEXT: s_mov_b32 s7, s9 61; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D 62; GFX12-NEXT: s_wait_loadcnt 0x0 63; GFX12-NEXT: ; return to shader part epilog 64main_body: 65 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 66 ret <4 x float> %v 67} 68 69define amdgpu_ps <4 x float> @getresinfo_2d(<8 x i32> inreg %rsrc, i32 %mip) { 70; GFX6-LABEL: getresinfo_2d: 71; GFX6: ; %bb.0: ; %main_body 72; GFX6-NEXT: s_mov_b32 s0, s2 73; GFX6-NEXT: s_mov_b32 s1, s3 74; GFX6-NEXT: s_mov_b32 s2, s4 75; GFX6-NEXT: s_mov_b32 s3, s5 76; GFX6-NEXT: s_mov_b32 s4, s6 77; GFX6-NEXT: s_mov_b32 s5, s7 78; GFX6-NEXT: s_mov_b32 s6, s8 79; GFX6-NEXT: s_mov_b32 s7, s9 80; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 81; GFX6-NEXT: s_waitcnt vmcnt(0) 82; GFX6-NEXT: ; return to shader part epilog 83; 84; GFX8-LABEL: getresinfo_2d: 85; GFX8: ; %bb.0: ; %main_body 86; GFX8-NEXT: s_mov_b32 s0, s2 87; GFX8-NEXT: s_mov_b32 s1, s3 88; GFX8-NEXT: s_mov_b32 s2, s4 89; GFX8-NEXT: s_mov_b32 s3, s5 90; GFX8-NEXT: s_mov_b32 s4, s6 91; GFX8-NEXT: s_mov_b32 s5, s7 92; GFX8-NEXT: s_mov_b32 s6, s8 93; GFX8-NEXT: s_mov_b32 s7, s9 94; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 95; GFX8-NEXT: s_waitcnt vmcnt(0) 96; GFX8-NEXT: ; return to shader part epilog 97; 98; GFX10-LABEL: getresinfo_2d: 99; GFX10: ; %bb.0: ; %main_body 100; GFX10-NEXT: s_mov_b32 s0, s2 101; GFX10-NEXT: s_mov_b32 s1, s3 102; GFX10-NEXT: s_mov_b32 s2, s4 103; GFX10-NEXT: s_mov_b32 s3, s5 104; GFX10-NEXT: s_mov_b32 s4, s6 105; GFX10-NEXT: s_mov_b32 s5, s7 106; GFX10-NEXT: s_mov_b32 s6, s8 107; GFX10-NEXT: s_mov_b32 s7, s9 108; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm 109; GFX10-NEXT: s_waitcnt vmcnt(0) 110; GFX10-NEXT: ; return to shader part epilog 111; 112; GFX12-LABEL: getresinfo_2d: 113; GFX12: ; %bb.0: ; %main_body 114; GFX12-NEXT: s_mov_b32 s0, s2 115; GFX12-NEXT: s_mov_b32 s1, s3 116; GFX12-NEXT: s_mov_b32 s2, s4 117; GFX12-NEXT: s_mov_b32 s3, s5 118; GFX12-NEXT: s_mov_b32 s4, s6 119; GFX12-NEXT: s_mov_b32 s5, s7 120; GFX12-NEXT: s_mov_b32 s6, s8 121; GFX12-NEXT: s_mov_b32 s7, s9 122; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D 123; GFX12-NEXT: s_wait_loadcnt 0x0 124; GFX12-NEXT: ; return to shader part epilog 125main_body: 126 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 127 ret <4 x float> %v 128} 129 130define amdgpu_ps <4 x float> @getresinfo_3d(<8 x i32> inreg %rsrc, i32 %mip) { 131; GFX6-LABEL: getresinfo_3d: 132; GFX6: ; %bb.0: ; %main_body 133; GFX6-NEXT: s_mov_b32 s0, s2 134; GFX6-NEXT: s_mov_b32 s1, s3 135; GFX6-NEXT: s_mov_b32 s2, s4 136; GFX6-NEXT: s_mov_b32 s3, s5 137; GFX6-NEXT: s_mov_b32 s4, s6 138; GFX6-NEXT: s_mov_b32 s5, s7 139; GFX6-NEXT: s_mov_b32 s6, s8 140; GFX6-NEXT: s_mov_b32 s7, s9 141; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 142; GFX6-NEXT: s_waitcnt vmcnt(0) 143; GFX6-NEXT: ; return to shader part epilog 144; 145; GFX8-LABEL: getresinfo_3d: 146; GFX8: ; %bb.0: ; %main_body 147; GFX8-NEXT: s_mov_b32 s0, s2 148; GFX8-NEXT: s_mov_b32 s1, s3 149; GFX8-NEXT: s_mov_b32 s2, s4 150; GFX8-NEXT: s_mov_b32 s3, s5 151; GFX8-NEXT: s_mov_b32 s4, s6 152; GFX8-NEXT: s_mov_b32 s5, s7 153; GFX8-NEXT: s_mov_b32 s6, s8 154; GFX8-NEXT: s_mov_b32 s7, s9 155; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 156; GFX8-NEXT: s_waitcnt vmcnt(0) 157; GFX8-NEXT: ; return to shader part epilog 158; 159; GFX10-LABEL: getresinfo_3d: 160; GFX10: ; %bb.0: ; %main_body 161; GFX10-NEXT: s_mov_b32 s0, s2 162; GFX10-NEXT: s_mov_b32 s1, s3 163; GFX10-NEXT: s_mov_b32 s2, s4 164; GFX10-NEXT: s_mov_b32 s3, s5 165; GFX10-NEXT: s_mov_b32 s4, s6 166; GFX10-NEXT: s_mov_b32 s5, s7 167; GFX10-NEXT: s_mov_b32 s6, s8 168; GFX10-NEXT: s_mov_b32 s7, s9 169; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm 170; GFX10-NEXT: s_waitcnt vmcnt(0) 171; GFX10-NEXT: ; return to shader part epilog 172; 173; GFX12-LABEL: getresinfo_3d: 174; GFX12: ; %bb.0: ; %main_body 175; GFX12-NEXT: s_mov_b32 s0, s2 176; GFX12-NEXT: s_mov_b32 s1, s3 177; GFX12-NEXT: s_mov_b32 s2, s4 178; GFX12-NEXT: s_mov_b32 s3, s5 179; GFX12-NEXT: s_mov_b32 s4, s6 180; GFX12-NEXT: s_mov_b32 s5, s7 181; GFX12-NEXT: s_mov_b32 s6, s8 182; GFX12-NEXT: s_mov_b32 s7, s9 183; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D 184; GFX12-NEXT: s_wait_loadcnt 0x0 185; GFX12-NEXT: ; return to shader part epilog 186main_body: 187 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 188 ret <4 x float> %v 189} 190 191define amdgpu_ps <4 x float> @getresinfo_cube(<8 x i32> inreg %rsrc, i32 %mip) { 192; GFX6-LABEL: getresinfo_cube: 193; GFX6: ; %bb.0: ; %main_body 194; GFX6-NEXT: s_mov_b32 s0, s2 195; GFX6-NEXT: s_mov_b32 s1, s3 196; GFX6-NEXT: s_mov_b32 s2, s4 197; GFX6-NEXT: s_mov_b32 s3, s5 198; GFX6-NEXT: s_mov_b32 s4, s6 199; GFX6-NEXT: s_mov_b32 s5, s7 200; GFX6-NEXT: s_mov_b32 s6, s8 201; GFX6-NEXT: s_mov_b32 s7, s9 202; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 203; GFX6-NEXT: s_waitcnt vmcnt(0) 204; GFX6-NEXT: ; return to shader part epilog 205; 206; GFX8-LABEL: getresinfo_cube: 207; GFX8: ; %bb.0: ; %main_body 208; GFX8-NEXT: s_mov_b32 s0, s2 209; GFX8-NEXT: s_mov_b32 s1, s3 210; GFX8-NEXT: s_mov_b32 s2, s4 211; GFX8-NEXT: s_mov_b32 s3, s5 212; GFX8-NEXT: s_mov_b32 s4, s6 213; GFX8-NEXT: s_mov_b32 s5, s7 214; GFX8-NEXT: s_mov_b32 s6, s8 215; GFX8-NEXT: s_mov_b32 s7, s9 216; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 217; GFX8-NEXT: s_waitcnt vmcnt(0) 218; GFX8-NEXT: ; return to shader part epilog 219; 220; GFX10-LABEL: getresinfo_cube: 221; GFX10: ; %bb.0: ; %main_body 222; GFX10-NEXT: s_mov_b32 s0, s2 223; GFX10-NEXT: s_mov_b32 s1, s3 224; GFX10-NEXT: s_mov_b32 s2, s4 225; GFX10-NEXT: s_mov_b32 s3, s5 226; GFX10-NEXT: s_mov_b32 s4, s6 227; GFX10-NEXT: s_mov_b32 s5, s7 228; GFX10-NEXT: s_mov_b32 s6, s8 229; GFX10-NEXT: s_mov_b32 s7, s9 230; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm 231; GFX10-NEXT: s_waitcnt vmcnt(0) 232; GFX10-NEXT: ; return to shader part epilog 233; 234; GFX12-LABEL: getresinfo_cube: 235; GFX12: ; %bb.0: ; %main_body 236; GFX12-NEXT: s_mov_b32 s0, s2 237; GFX12-NEXT: s_mov_b32 s1, s3 238; GFX12-NEXT: s_mov_b32 s2, s4 239; GFX12-NEXT: s_mov_b32 s3, s5 240; GFX12-NEXT: s_mov_b32 s4, s6 241; GFX12-NEXT: s_mov_b32 s5, s7 242; GFX12-NEXT: s_mov_b32 s6, s8 243; GFX12-NEXT: s_mov_b32 s7, s9 244; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE 245; GFX12-NEXT: s_wait_loadcnt 0x0 246; GFX12-NEXT: ; return to shader part epilog 247main_body: 248 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 249 ret <4 x float> %v 250} 251 252define amdgpu_ps <4 x float> @getresinfo_1darray(<8 x i32> inreg %rsrc, i32 %mip) { 253; GFX6-LABEL: getresinfo_1darray: 254; GFX6: ; %bb.0: ; %main_body 255; GFX6-NEXT: s_mov_b32 s0, s2 256; GFX6-NEXT: s_mov_b32 s1, s3 257; GFX6-NEXT: s_mov_b32 s2, s4 258; GFX6-NEXT: s_mov_b32 s3, s5 259; GFX6-NEXT: s_mov_b32 s4, s6 260; GFX6-NEXT: s_mov_b32 s5, s7 261; GFX6-NEXT: s_mov_b32 s6, s8 262; GFX6-NEXT: s_mov_b32 s7, s9 263; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 264; GFX6-NEXT: s_waitcnt vmcnt(0) 265; GFX6-NEXT: ; return to shader part epilog 266; 267; GFX8-LABEL: getresinfo_1darray: 268; GFX8: ; %bb.0: ; %main_body 269; GFX8-NEXT: s_mov_b32 s0, s2 270; GFX8-NEXT: s_mov_b32 s1, s3 271; GFX8-NEXT: s_mov_b32 s2, s4 272; GFX8-NEXT: s_mov_b32 s3, s5 273; GFX8-NEXT: s_mov_b32 s4, s6 274; GFX8-NEXT: s_mov_b32 s5, s7 275; GFX8-NEXT: s_mov_b32 s6, s8 276; GFX8-NEXT: s_mov_b32 s7, s9 277; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 278; GFX8-NEXT: s_waitcnt vmcnt(0) 279; GFX8-NEXT: ; return to shader part epilog 280; 281; GFX10-LABEL: getresinfo_1darray: 282; GFX10: ; %bb.0: ; %main_body 283; GFX10-NEXT: s_mov_b32 s0, s2 284; GFX10-NEXT: s_mov_b32 s1, s3 285; GFX10-NEXT: s_mov_b32 s2, s4 286; GFX10-NEXT: s_mov_b32 s3, s5 287; GFX10-NEXT: s_mov_b32 s4, s6 288; GFX10-NEXT: s_mov_b32 s5, s7 289; GFX10-NEXT: s_mov_b32 s6, s8 290; GFX10-NEXT: s_mov_b32 s7, s9 291; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm 292; GFX10-NEXT: s_waitcnt vmcnt(0) 293; GFX10-NEXT: ; return to shader part epilog 294; 295; GFX12-LABEL: getresinfo_1darray: 296; GFX12: ; %bb.0: ; %main_body 297; GFX12-NEXT: s_mov_b32 s0, s2 298; GFX12-NEXT: s_mov_b32 s1, s3 299; GFX12-NEXT: s_mov_b32 s2, s4 300; GFX12-NEXT: s_mov_b32 s3, s5 301; GFX12-NEXT: s_mov_b32 s4, s6 302; GFX12-NEXT: s_mov_b32 s5, s7 303; GFX12-NEXT: s_mov_b32 s6, s8 304; GFX12-NEXT: s_mov_b32 s7, s9 305; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY 306; GFX12-NEXT: s_wait_loadcnt 0x0 307; GFX12-NEXT: ; return to shader part epilog 308main_body: 309 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 310 ret <4 x float> %v 311} 312 313define amdgpu_ps <4 x float> @getresinfo_2darray(<8 x i32> inreg %rsrc, i32 %mip) { 314; GFX6-LABEL: getresinfo_2darray: 315; GFX6: ; %bb.0: ; %main_body 316; GFX6-NEXT: s_mov_b32 s0, s2 317; GFX6-NEXT: s_mov_b32 s1, s3 318; GFX6-NEXT: s_mov_b32 s2, s4 319; GFX6-NEXT: s_mov_b32 s3, s5 320; GFX6-NEXT: s_mov_b32 s4, s6 321; GFX6-NEXT: s_mov_b32 s5, s7 322; GFX6-NEXT: s_mov_b32 s6, s8 323; GFX6-NEXT: s_mov_b32 s7, s9 324; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 325; GFX6-NEXT: s_waitcnt vmcnt(0) 326; GFX6-NEXT: ; return to shader part epilog 327; 328; GFX8-LABEL: getresinfo_2darray: 329; GFX8: ; %bb.0: ; %main_body 330; GFX8-NEXT: s_mov_b32 s0, s2 331; GFX8-NEXT: s_mov_b32 s1, s3 332; GFX8-NEXT: s_mov_b32 s2, s4 333; GFX8-NEXT: s_mov_b32 s3, s5 334; GFX8-NEXT: s_mov_b32 s4, s6 335; GFX8-NEXT: s_mov_b32 s5, s7 336; GFX8-NEXT: s_mov_b32 s6, s8 337; GFX8-NEXT: s_mov_b32 s7, s9 338; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 339; GFX8-NEXT: s_waitcnt vmcnt(0) 340; GFX8-NEXT: ; return to shader part epilog 341; 342; GFX10-LABEL: getresinfo_2darray: 343; GFX10: ; %bb.0: ; %main_body 344; GFX10-NEXT: s_mov_b32 s0, s2 345; GFX10-NEXT: s_mov_b32 s1, s3 346; GFX10-NEXT: s_mov_b32 s2, s4 347; GFX10-NEXT: s_mov_b32 s3, s5 348; GFX10-NEXT: s_mov_b32 s4, s6 349; GFX10-NEXT: s_mov_b32 s5, s7 350; GFX10-NEXT: s_mov_b32 s6, s8 351; GFX10-NEXT: s_mov_b32 s7, s9 352; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm 353; GFX10-NEXT: s_waitcnt vmcnt(0) 354; GFX10-NEXT: ; return to shader part epilog 355; 356; GFX12-LABEL: getresinfo_2darray: 357; GFX12: ; %bb.0: ; %main_body 358; GFX12-NEXT: s_mov_b32 s0, s2 359; GFX12-NEXT: s_mov_b32 s1, s3 360; GFX12-NEXT: s_mov_b32 s2, s4 361; GFX12-NEXT: s_mov_b32 s3, s5 362; GFX12-NEXT: s_mov_b32 s4, s6 363; GFX12-NEXT: s_mov_b32 s5, s7 364; GFX12-NEXT: s_mov_b32 s6, s8 365; GFX12-NEXT: s_mov_b32 s7, s9 366; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY 367; GFX12-NEXT: s_wait_loadcnt 0x0 368; GFX12-NEXT: ; return to shader part epilog 369main_body: 370 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 371 ret <4 x float> %v 372} 373 374define amdgpu_ps <4 x float> @getresinfo_2dmsaa(<8 x i32> inreg %rsrc, i32 %mip) { 375; GFX6-LABEL: getresinfo_2dmsaa: 376; GFX6: ; %bb.0: ; %main_body 377; GFX6-NEXT: s_mov_b32 s0, s2 378; GFX6-NEXT: s_mov_b32 s1, s3 379; GFX6-NEXT: s_mov_b32 s2, s4 380; GFX6-NEXT: s_mov_b32 s3, s5 381; GFX6-NEXT: s_mov_b32 s4, s6 382; GFX6-NEXT: s_mov_b32 s5, s7 383; GFX6-NEXT: s_mov_b32 s6, s8 384; GFX6-NEXT: s_mov_b32 s7, s9 385; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 386; GFX6-NEXT: s_waitcnt vmcnt(0) 387; GFX6-NEXT: ; return to shader part epilog 388; 389; GFX8-LABEL: getresinfo_2dmsaa: 390; GFX8: ; %bb.0: ; %main_body 391; GFX8-NEXT: s_mov_b32 s0, s2 392; GFX8-NEXT: s_mov_b32 s1, s3 393; GFX8-NEXT: s_mov_b32 s2, s4 394; GFX8-NEXT: s_mov_b32 s3, s5 395; GFX8-NEXT: s_mov_b32 s4, s6 396; GFX8-NEXT: s_mov_b32 s5, s7 397; GFX8-NEXT: s_mov_b32 s6, s8 398; GFX8-NEXT: s_mov_b32 s7, s9 399; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm 400; GFX8-NEXT: s_waitcnt vmcnt(0) 401; GFX8-NEXT: ; return to shader part epilog 402; 403; GFX10-LABEL: getresinfo_2dmsaa: 404; GFX10: ; %bb.0: ; %main_body 405; GFX10-NEXT: s_mov_b32 s0, s2 406; GFX10-NEXT: s_mov_b32 s1, s3 407; GFX10-NEXT: s_mov_b32 s2, s4 408; GFX10-NEXT: s_mov_b32 s3, s5 409; GFX10-NEXT: s_mov_b32 s4, s6 410; GFX10-NEXT: s_mov_b32 s5, s7 411; GFX10-NEXT: s_mov_b32 s6, s8 412; GFX10-NEXT: s_mov_b32 s7, s9 413; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm 414; GFX10-NEXT: s_waitcnt vmcnt(0) 415; GFX10-NEXT: ; return to shader part epilog 416; 417; GFX12-LABEL: getresinfo_2dmsaa: 418; GFX12: ; %bb.0: ; %main_body 419; GFX12-NEXT: s_mov_b32 s0, s2 420; GFX12-NEXT: s_mov_b32 s1, s3 421; GFX12-NEXT: s_mov_b32 s2, s4 422; GFX12-NEXT: s_mov_b32 s3, s5 423; GFX12-NEXT: s_mov_b32 s4, s6 424; GFX12-NEXT: s_mov_b32 s5, s7 425; GFX12-NEXT: s_mov_b32 s6, s8 426; GFX12-NEXT: s_mov_b32 s7, s9 427; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA 428; GFX12-NEXT: s_wait_loadcnt 0x0 429; GFX12-NEXT: ; return to shader part epilog 430main_body: 431 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 432 ret <4 x float> %v 433} 434 435define amdgpu_ps <4 x float> @getresinfo_2darraymsaa(<8 x i32> inreg %rsrc, i32 %mip) { 436; GFX6-LABEL: getresinfo_2darraymsaa: 437; GFX6: ; %bb.0: ; %main_body 438; GFX6-NEXT: s_mov_b32 s0, s2 439; GFX6-NEXT: s_mov_b32 s1, s3 440; GFX6-NEXT: s_mov_b32 s2, s4 441; GFX6-NEXT: s_mov_b32 s3, s5 442; GFX6-NEXT: s_mov_b32 s4, s6 443; GFX6-NEXT: s_mov_b32 s5, s7 444; GFX6-NEXT: s_mov_b32 s6, s8 445; GFX6-NEXT: s_mov_b32 s7, s9 446; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 447; GFX6-NEXT: s_waitcnt vmcnt(0) 448; GFX6-NEXT: ; return to shader part epilog 449; 450; GFX8-LABEL: getresinfo_2darraymsaa: 451; GFX8: ; %bb.0: ; %main_body 452; GFX8-NEXT: s_mov_b32 s0, s2 453; GFX8-NEXT: s_mov_b32 s1, s3 454; GFX8-NEXT: s_mov_b32 s2, s4 455; GFX8-NEXT: s_mov_b32 s3, s5 456; GFX8-NEXT: s_mov_b32 s4, s6 457; GFX8-NEXT: s_mov_b32 s5, s7 458; GFX8-NEXT: s_mov_b32 s6, s8 459; GFX8-NEXT: s_mov_b32 s7, s9 460; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da 461; GFX8-NEXT: s_waitcnt vmcnt(0) 462; GFX8-NEXT: ; return to shader part epilog 463; 464; GFX10-LABEL: getresinfo_2darraymsaa: 465; GFX10: ; %bb.0: ; %main_body 466; GFX10-NEXT: s_mov_b32 s0, s2 467; GFX10-NEXT: s_mov_b32 s1, s3 468; GFX10-NEXT: s_mov_b32 s2, s4 469; GFX10-NEXT: s_mov_b32 s3, s5 470; GFX10-NEXT: s_mov_b32 s4, s6 471; GFX10-NEXT: s_mov_b32 s5, s7 472; GFX10-NEXT: s_mov_b32 s6, s8 473; GFX10-NEXT: s_mov_b32 s7, s9 474; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm 475; GFX10-NEXT: s_waitcnt vmcnt(0) 476; GFX10-NEXT: ; return to shader part epilog 477; 478; GFX12-LABEL: getresinfo_2darraymsaa: 479; GFX12: ; %bb.0: ; %main_body 480; GFX12-NEXT: s_mov_b32 s0, s2 481; GFX12-NEXT: s_mov_b32 s1, s3 482; GFX12-NEXT: s_mov_b32 s2, s4 483; GFX12-NEXT: s_mov_b32 s3, s5 484; GFX12-NEXT: s_mov_b32 s4, s6 485; GFX12-NEXT: s_mov_b32 s5, s7 486; GFX12-NEXT: s_mov_b32 s6, s8 487; GFX12-NEXT: s_mov_b32 s7, s9 488; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY 489; GFX12-NEXT: s_wait_loadcnt 0x0 490; GFX12-NEXT: ; return to shader part epilog 491main_body: 492 %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 493 ret <4 x float> %v 494} 495 496define amdgpu_ps <3 x float> @getresinfo_dmask7(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) { 497; GFX6-LABEL: getresinfo_dmask7: 498; GFX6: ; %bb.0: ; %main_body 499; GFX6-NEXT: s_mov_b32 s0, s2 500; GFX6-NEXT: s_mov_b32 s1, s3 501; GFX6-NEXT: s_mov_b32 s2, s4 502; GFX6-NEXT: s_mov_b32 s3, s5 503; GFX6-NEXT: s_mov_b32 s4, s6 504; GFX6-NEXT: s_mov_b32 s5, s7 505; GFX6-NEXT: s_mov_b32 s6, s8 506; GFX6-NEXT: s_mov_b32 s7, s9 507; GFX6-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm 508; GFX6-NEXT: s_waitcnt vmcnt(0) 509; GFX6-NEXT: ; return to shader part epilog 510; 511; GFX8-LABEL: getresinfo_dmask7: 512; GFX8: ; %bb.0: ; %main_body 513; GFX8-NEXT: s_mov_b32 s0, s2 514; GFX8-NEXT: s_mov_b32 s1, s3 515; GFX8-NEXT: s_mov_b32 s2, s4 516; GFX8-NEXT: s_mov_b32 s3, s5 517; GFX8-NEXT: s_mov_b32 s4, s6 518; GFX8-NEXT: s_mov_b32 s5, s7 519; GFX8-NEXT: s_mov_b32 s6, s8 520; GFX8-NEXT: s_mov_b32 s7, s9 521; GFX8-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm 522; GFX8-NEXT: s_waitcnt vmcnt(0) 523; GFX8-NEXT: ; return to shader part epilog 524; 525; GFX10-LABEL: getresinfo_dmask7: 526; GFX10: ; %bb.0: ; %main_body 527; GFX10-NEXT: s_mov_b32 s0, s2 528; GFX10-NEXT: s_mov_b32 s1, s3 529; GFX10-NEXT: s_mov_b32 s2, s4 530; GFX10-NEXT: s_mov_b32 s3, s5 531; GFX10-NEXT: s_mov_b32 s4, s6 532; GFX10-NEXT: s_mov_b32 s5, s7 533; GFX10-NEXT: s_mov_b32 s6, s8 534; GFX10-NEXT: s_mov_b32 s7, s9 535; GFX10-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm 536; GFX10-NEXT: s_waitcnt vmcnt(0) 537; GFX10-NEXT: ; return to shader part epilog 538; 539; GFX12-LABEL: getresinfo_dmask7: 540; GFX12: ; %bb.0: ; %main_body 541; GFX12-NEXT: s_mov_b32 s0, s2 542; GFX12-NEXT: s_mov_b32 s1, s3 543; GFX12-NEXT: s_mov_b32 s2, s4 544; GFX12-NEXT: s_mov_b32 s3, s5 545; GFX12-NEXT: s_mov_b32 s4, s6 546; GFX12-NEXT: s_mov_b32 s5, s7 547; GFX12-NEXT: s_mov_b32 s6, s8 548; GFX12-NEXT: s_mov_b32 s7, s9 549; GFX12-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D 550; GFX12-NEXT: s_wait_loadcnt 0x0 551; GFX12-NEXT: ; return to shader part epilog 552main_body: 553 %r = call <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 7, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 554 ret <3 x float> %r 555} 556 557define amdgpu_ps <2 x float> @getresinfo_dmask3(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) { 558; GFX6-LABEL: getresinfo_dmask3: 559; GFX6: ; %bb.0: ; %main_body 560; GFX6-NEXT: s_mov_b32 s0, s2 561; GFX6-NEXT: s_mov_b32 s1, s3 562; GFX6-NEXT: s_mov_b32 s2, s4 563; GFX6-NEXT: s_mov_b32 s3, s5 564; GFX6-NEXT: s_mov_b32 s4, s6 565; GFX6-NEXT: s_mov_b32 s5, s7 566; GFX6-NEXT: s_mov_b32 s6, s8 567; GFX6-NEXT: s_mov_b32 s7, s9 568; GFX6-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm 569; GFX6-NEXT: s_waitcnt vmcnt(0) 570; GFX6-NEXT: ; return to shader part epilog 571; 572; GFX8-LABEL: getresinfo_dmask3: 573; GFX8: ; %bb.0: ; %main_body 574; GFX8-NEXT: s_mov_b32 s0, s2 575; GFX8-NEXT: s_mov_b32 s1, s3 576; GFX8-NEXT: s_mov_b32 s2, s4 577; GFX8-NEXT: s_mov_b32 s3, s5 578; GFX8-NEXT: s_mov_b32 s4, s6 579; GFX8-NEXT: s_mov_b32 s5, s7 580; GFX8-NEXT: s_mov_b32 s6, s8 581; GFX8-NEXT: s_mov_b32 s7, s9 582; GFX8-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm 583; GFX8-NEXT: s_waitcnt vmcnt(0) 584; GFX8-NEXT: ; return to shader part epilog 585; 586; GFX10-LABEL: getresinfo_dmask3: 587; GFX10: ; %bb.0: ; %main_body 588; GFX10-NEXT: s_mov_b32 s0, s2 589; GFX10-NEXT: s_mov_b32 s1, s3 590; GFX10-NEXT: s_mov_b32 s2, s4 591; GFX10-NEXT: s_mov_b32 s3, s5 592; GFX10-NEXT: s_mov_b32 s4, s6 593; GFX10-NEXT: s_mov_b32 s5, s7 594; GFX10-NEXT: s_mov_b32 s6, s8 595; GFX10-NEXT: s_mov_b32 s7, s9 596; GFX10-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm 597; GFX10-NEXT: s_waitcnt vmcnt(0) 598; GFX10-NEXT: ; return to shader part epilog 599; 600; GFX12-LABEL: getresinfo_dmask3: 601; GFX12: ; %bb.0: ; %main_body 602; GFX12-NEXT: s_mov_b32 s0, s2 603; GFX12-NEXT: s_mov_b32 s1, s3 604; GFX12-NEXT: s_mov_b32 s2, s4 605; GFX12-NEXT: s_mov_b32 s3, s5 606; GFX12-NEXT: s_mov_b32 s4, s6 607; GFX12-NEXT: s_mov_b32 s5, s7 608; GFX12-NEXT: s_mov_b32 s6, s8 609; GFX12-NEXT: s_mov_b32 s7, s9 610; GFX12-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D 611; GFX12-NEXT: s_wait_loadcnt 0x0 612; GFX12-NEXT: ; return to shader part epilog 613main_body: 614 %r = call <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 3, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 615 ret <2 x float> %r 616} 617 618define amdgpu_ps float @getresinfo_dmask1(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) { 619; GFX6-LABEL: getresinfo_dmask1: 620; GFX6: ; %bb.0: ; %main_body 621; GFX6-NEXT: s_mov_b32 s0, s2 622; GFX6-NEXT: s_mov_b32 s1, s3 623; GFX6-NEXT: s_mov_b32 s2, s4 624; GFX6-NEXT: s_mov_b32 s3, s5 625; GFX6-NEXT: s_mov_b32 s4, s6 626; GFX6-NEXT: s_mov_b32 s5, s7 627; GFX6-NEXT: s_mov_b32 s6, s8 628; GFX6-NEXT: s_mov_b32 s7, s9 629; GFX6-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm 630; GFX6-NEXT: s_waitcnt vmcnt(0) 631; GFX6-NEXT: ; return to shader part epilog 632; 633; GFX8-LABEL: getresinfo_dmask1: 634; GFX8: ; %bb.0: ; %main_body 635; GFX8-NEXT: s_mov_b32 s0, s2 636; GFX8-NEXT: s_mov_b32 s1, s3 637; GFX8-NEXT: s_mov_b32 s2, s4 638; GFX8-NEXT: s_mov_b32 s3, s5 639; GFX8-NEXT: s_mov_b32 s4, s6 640; GFX8-NEXT: s_mov_b32 s5, s7 641; GFX8-NEXT: s_mov_b32 s6, s8 642; GFX8-NEXT: s_mov_b32 s7, s9 643; GFX8-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm 644; GFX8-NEXT: s_waitcnt vmcnt(0) 645; GFX8-NEXT: ; return to shader part epilog 646; 647; GFX10-LABEL: getresinfo_dmask1: 648; GFX10: ; %bb.0: ; %main_body 649; GFX10-NEXT: s_mov_b32 s0, s2 650; GFX10-NEXT: s_mov_b32 s1, s3 651; GFX10-NEXT: s_mov_b32 s2, s4 652; GFX10-NEXT: s_mov_b32 s3, s5 653; GFX10-NEXT: s_mov_b32 s4, s6 654; GFX10-NEXT: s_mov_b32 s5, s7 655; GFX10-NEXT: s_mov_b32 s6, s8 656; GFX10-NEXT: s_mov_b32 s7, s9 657; GFX10-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm 658; GFX10-NEXT: s_waitcnt vmcnt(0) 659; GFX10-NEXT: ; return to shader part epilog 660; 661; GFX12-LABEL: getresinfo_dmask1: 662; GFX12: ; %bb.0: ; %main_body 663; GFX12-NEXT: s_mov_b32 s0, s2 664; GFX12-NEXT: s_mov_b32 s1, s3 665; GFX12-NEXT: s_mov_b32 s2, s4 666; GFX12-NEXT: s_mov_b32 s3, s5 667; GFX12-NEXT: s_mov_b32 s4, s6 668; GFX12-NEXT: s_mov_b32 s5, s7 669; GFX12-NEXT: s_mov_b32 s6, s8 670; GFX12-NEXT: s_mov_b32 s7, s9 671; GFX12-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D 672; GFX12-NEXT: s_wait_loadcnt 0x0 673; GFX12-NEXT: ; return to shader part epilog 674main_body: 675 %r = call float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 1, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 676 ret float %r 677} 678 679define amdgpu_ps <4 x float> @getresinfo_dmask0(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) { 680; GFX6-LABEL: getresinfo_dmask0: 681; GFX6: ; %bb.0: ; %main_body 682; GFX6-NEXT: ; return to shader part epilog 683; 684; GFX8-LABEL: getresinfo_dmask0: 685; GFX8: ; %bb.0: ; %main_body 686; GFX8-NEXT: ; return to shader part epilog 687; 688; GFX10-LABEL: getresinfo_dmask0: 689; GFX10: ; %bb.0: ; %main_body 690; GFX10-NEXT: ; return to shader part epilog 691; 692; GFX12-LABEL: getresinfo_dmask0: 693; GFX12: ; %bb.0: ; %main_body 694; GFX12-NEXT: ; return to shader part epilog 695main_body: 696 %r = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 0, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0) 697 ret <4 x float> %r 698} 699 700declare <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 701declare <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 702declare <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 703declare float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 704declare <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 705declare <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 706declare <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 707declare <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 708declare <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 709declare <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 710declare <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1 711 712attributes #0 = { nounwind } 713attributes #1 = { nounwind readnone } 714