714 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti < %s | FileCheck -check-prefix=GFX6 %s3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji < %s | FileCheck -check-prefix=GFX8 %s4; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 < %s | FileCheck -check-prefix=GFX10 %s5; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 < %s | FileCheck -check-prefix=GFX10 %s6; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 < %s | FileCheck -check-prefix=GFX12 %s7 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_body11; GFX6-NEXT: s_mov_b32 s0, s212; GFX6-NEXT: s_mov_b32 s1, s313; GFX6-NEXT: s_mov_b32 s2, s414; GFX6-NEXT: s_mov_b32 s3, s515; GFX6-NEXT: s_mov_b32 s4, s616; GFX6-NEXT: s_mov_b32 s5, s717; GFX6-NEXT: s_mov_b32 s6, s818; GFX6-NEXT: s_mov_b32 s7, s919; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm20; GFX6-NEXT: s_waitcnt vmcnt(0)21; GFX6-NEXT: ; return to shader part epilog22;23; GFX8-LABEL: getresinfo_1d:24; GFX8: ; %bb.0: ; %main_body25; GFX8-NEXT: s_mov_b32 s0, s226; GFX8-NEXT: s_mov_b32 s1, s327; GFX8-NEXT: s_mov_b32 s2, s428; GFX8-NEXT: s_mov_b32 s3, s529; GFX8-NEXT: s_mov_b32 s4, s630; GFX8-NEXT: s_mov_b32 s5, s731; GFX8-NEXT: s_mov_b32 s6, s832; GFX8-NEXT: s_mov_b32 s7, s933; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm34; GFX8-NEXT: s_waitcnt vmcnt(0)35; GFX8-NEXT: ; return to shader part epilog36;37; GFX10-LABEL: getresinfo_1d:38; GFX10: ; %bb.0: ; %main_body39; GFX10-NEXT: s_mov_b32 s0, s240; GFX10-NEXT: s_mov_b32 s1, s341; GFX10-NEXT: s_mov_b32 s2, s442; GFX10-NEXT: s_mov_b32 s3, s543; GFX10-NEXT: s_mov_b32 s4, s644; GFX10-NEXT: s_mov_b32 s5, s745; GFX10-NEXT: s_mov_b32 s6, s846; GFX10-NEXT: s_mov_b32 s7, s947; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm48; GFX10-NEXT: s_waitcnt vmcnt(0)49; GFX10-NEXT: ; return to shader part epilog50;51; GFX12-LABEL: getresinfo_1d:52; GFX12: ; %bb.0: ; %main_body53; GFX12-NEXT: s_mov_b32 s0, s254; GFX12-NEXT: s_mov_b32 s1, s355; GFX12-NEXT: s_mov_b32 s2, s456; GFX12-NEXT: s_mov_b32 s3, s557; GFX12-NEXT: s_mov_b32 s4, s658; GFX12-NEXT: s_mov_b32 s5, s759; GFX12-NEXT: s_mov_b32 s6, s860; GFX12-NEXT: s_mov_b32 s7, s961; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D62; GFX12-NEXT: s_wait_loadcnt 0x063; GFX12-NEXT: ; return to shader part epilog64main_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> %v67}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_body72; GFX6-NEXT: s_mov_b32 s0, s273; GFX6-NEXT: s_mov_b32 s1, s374; GFX6-NEXT: s_mov_b32 s2, s475; GFX6-NEXT: s_mov_b32 s3, s576; GFX6-NEXT: s_mov_b32 s4, s677; GFX6-NEXT: s_mov_b32 s5, s778; GFX6-NEXT: s_mov_b32 s6, s879; GFX6-NEXT: s_mov_b32 s7, s980; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm81; GFX6-NEXT: s_waitcnt vmcnt(0)82; GFX6-NEXT: ; return to shader part epilog83;84; GFX8-LABEL: getresinfo_2d:85; GFX8: ; %bb.0: ; %main_body86; GFX8-NEXT: s_mov_b32 s0, s287; GFX8-NEXT: s_mov_b32 s1, s388; GFX8-NEXT: s_mov_b32 s2, s489; GFX8-NEXT: s_mov_b32 s3, s590; GFX8-NEXT: s_mov_b32 s4, s691; GFX8-NEXT: s_mov_b32 s5, s792; GFX8-NEXT: s_mov_b32 s6, s893; GFX8-NEXT: s_mov_b32 s7, s994; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm95; GFX8-NEXT: s_waitcnt vmcnt(0)96; GFX8-NEXT: ; return to shader part epilog97;98; GFX10-LABEL: getresinfo_2d:99; GFX10: ; %bb.0: ; %main_body100; GFX10-NEXT: s_mov_b32 s0, s2101; GFX10-NEXT: s_mov_b32 s1, s3102; GFX10-NEXT: s_mov_b32 s2, s4103; GFX10-NEXT: s_mov_b32 s3, s5104; GFX10-NEXT: s_mov_b32 s4, s6105; GFX10-NEXT: s_mov_b32 s5, s7106; GFX10-NEXT: s_mov_b32 s6, s8107; GFX10-NEXT: s_mov_b32 s7, s9108; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm109; GFX10-NEXT: s_waitcnt vmcnt(0)110; GFX10-NEXT: ; return to shader part epilog111;112; GFX12-LABEL: getresinfo_2d:113; GFX12: ; %bb.0: ; %main_body114; GFX12-NEXT: s_mov_b32 s0, s2115; GFX12-NEXT: s_mov_b32 s1, s3116; GFX12-NEXT: s_mov_b32 s2, s4117; GFX12-NEXT: s_mov_b32 s3, s5118; GFX12-NEXT: s_mov_b32 s4, s6119; GFX12-NEXT: s_mov_b32 s5, s7120; GFX12-NEXT: s_mov_b32 s6, s8121; GFX12-NEXT: s_mov_b32 s7, s9122; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D123; GFX12-NEXT: s_wait_loadcnt 0x0124; GFX12-NEXT: ; return to shader part epilog125main_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> %v128}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_body133; GFX6-NEXT: s_mov_b32 s0, s2134; GFX6-NEXT: s_mov_b32 s1, s3135; GFX6-NEXT: s_mov_b32 s2, s4136; GFX6-NEXT: s_mov_b32 s3, s5137; GFX6-NEXT: s_mov_b32 s4, s6138; GFX6-NEXT: s_mov_b32 s5, s7139; GFX6-NEXT: s_mov_b32 s6, s8140; GFX6-NEXT: s_mov_b32 s7, s9141; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm142; GFX6-NEXT: s_waitcnt vmcnt(0)143; GFX6-NEXT: ; return to shader part epilog144;145; GFX8-LABEL: getresinfo_3d:146; GFX8: ; %bb.0: ; %main_body147; GFX8-NEXT: s_mov_b32 s0, s2148; GFX8-NEXT: s_mov_b32 s1, s3149; GFX8-NEXT: s_mov_b32 s2, s4150; GFX8-NEXT: s_mov_b32 s3, s5151; GFX8-NEXT: s_mov_b32 s4, s6152; GFX8-NEXT: s_mov_b32 s5, s7153; GFX8-NEXT: s_mov_b32 s6, s8154; GFX8-NEXT: s_mov_b32 s7, s9155; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm156; GFX8-NEXT: s_waitcnt vmcnt(0)157; GFX8-NEXT: ; return to shader part epilog158;159; GFX10-LABEL: getresinfo_3d:160; GFX10: ; %bb.0: ; %main_body161; GFX10-NEXT: s_mov_b32 s0, s2162; GFX10-NEXT: s_mov_b32 s1, s3163; GFX10-NEXT: s_mov_b32 s2, s4164; GFX10-NEXT: s_mov_b32 s3, s5165; GFX10-NEXT: s_mov_b32 s4, s6166; GFX10-NEXT: s_mov_b32 s5, s7167; GFX10-NEXT: s_mov_b32 s6, s8168; GFX10-NEXT: s_mov_b32 s7, s9169; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm170; GFX10-NEXT: s_waitcnt vmcnt(0)171; GFX10-NEXT: ; return to shader part epilog172;173; GFX12-LABEL: getresinfo_3d:174; GFX12: ; %bb.0: ; %main_body175; GFX12-NEXT: s_mov_b32 s0, s2176; GFX12-NEXT: s_mov_b32 s1, s3177; GFX12-NEXT: s_mov_b32 s2, s4178; GFX12-NEXT: s_mov_b32 s3, s5179; GFX12-NEXT: s_mov_b32 s4, s6180; GFX12-NEXT: s_mov_b32 s5, s7181; GFX12-NEXT: s_mov_b32 s6, s8182; GFX12-NEXT: s_mov_b32 s7, s9183; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D184; GFX12-NEXT: s_wait_loadcnt 0x0185; GFX12-NEXT: ; return to shader part epilog186main_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> %v189}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_body194; GFX6-NEXT: s_mov_b32 s0, s2195; GFX6-NEXT: s_mov_b32 s1, s3196; GFX6-NEXT: s_mov_b32 s2, s4197; GFX6-NEXT: s_mov_b32 s3, s5198; GFX6-NEXT: s_mov_b32 s4, s6199; GFX6-NEXT: s_mov_b32 s5, s7200; GFX6-NEXT: s_mov_b32 s6, s8201; GFX6-NEXT: s_mov_b32 s7, s9202; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da203; GFX6-NEXT: s_waitcnt vmcnt(0)204; GFX6-NEXT: ; return to shader part epilog205;206; GFX8-LABEL: getresinfo_cube:207; GFX8: ; %bb.0: ; %main_body208; GFX8-NEXT: s_mov_b32 s0, s2209; GFX8-NEXT: s_mov_b32 s1, s3210; GFX8-NEXT: s_mov_b32 s2, s4211; GFX8-NEXT: s_mov_b32 s3, s5212; GFX8-NEXT: s_mov_b32 s4, s6213; GFX8-NEXT: s_mov_b32 s5, s7214; GFX8-NEXT: s_mov_b32 s6, s8215; GFX8-NEXT: s_mov_b32 s7, s9216; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da217; GFX8-NEXT: s_waitcnt vmcnt(0)218; GFX8-NEXT: ; return to shader part epilog219;220; GFX10-LABEL: getresinfo_cube:221; GFX10: ; %bb.0: ; %main_body222; GFX10-NEXT: s_mov_b32 s0, s2223; GFX10-NEXT: s_mov_b32 s1, s3224; GFX10-NEXT: s_mov_b32 s2, s4225; GFX10-NEXT: s_mov_b32 s3, s5226; GFX10-NEXT: s_mov_b32 s4, s6227; GFX10-NEXT: s_mov_b32 s5, s7228; GFX10-NEXT: s_mov_b32 s6, s8229; GFX10-NEXT: s_mov_b32 s7, s9230; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm231; GFX10-NEXT: s_waitcnt vmcnt(0)232; GFX10-NEXT: ; return to shader part epilog233;234; GFX12-LABEL: getresinfo_cube:235; GFX12: ; %bb.0: ; %main_body236; GFX12-NEXT: s_mov_b32 s0, s2237; GFX12-NEXT: s_mov_b32 s1, s3238; GFX12-NEXT: s_mov_b32 s2, s4239; GFX12-NEXT: s_mov_b32 s3, s5240; GFX12-NEXT: s_mov_b32 s4, s6241; GFX12-NEXT: s_mov_b32 s5, s7242; GFX12-NEXT: s_mov_b32 s6, s8243; GFX12-NEXT: s_mov_b32 s7, s9244; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE245; GFX12-NEXT: s_wait_loadcnt 0x0246; GFX12-NEXT: ; return to shader part epilog247main_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> %v250}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_body255; GFX6-NEXT: s_mov_b32 s0, s2256; GFX6-NEXT: s_mov_b32 s1, s3257; GFX6-NEXT: s_mov_b32 s2, s4258; GFX6-NEXT: s_mov_b32 s3, s5259; GFX6-NEXT: s_mov_b32 s4, s6260; GFX6-NEXT: s_mov_b32 s5, s7261; GFX6-NEXT: s_mov_b32 s6, s8262; GFX6-NEXT: s_mov_b32 s7, s9263; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da264; GFX6-NEXT: s_waitcnt vmcnt(0)265; GFX6-NEXT: ; return to shader part epilog266;267; GFX8-LABEL: getresinfo_1darray:268; GFX8: ; %bb.0: ; %main_body269; GFX8-NEXT: s_mov_b32 s0, s2270; GFX8-NEXT: s_mov_b32 s1, s3271; GFX8-NEXT: s_mov_b32 s2, s4272; GFX8-NEXT: s_mov_b32 s3, s5273; GFX8-NEXT: s_mov_b32 s4, s6274; GFX8-NEXT: s_mov_b32 s5, s7275; GFX8-NEXT: s_mov_b32 s6, s8276; GFX8-NEXT: s_mov_b32 s7, s9277; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da278; GFX8-NEXT: s_waitcnt vmcnt(0)279; GFX8-NEXT: ; return to shader part epilog280;281; GFX10-LABEL: getresinfo_1darray:282; GFX10: ; %bb.0: ; %main_body283; GFX10-NEXT: s_mov_b32 s0, s2284; GFX10-NEXT: s_mov_b32 s1, s3285; GFX10-NEXT: s_mov_b32 s2, s4286; GFX10-NEXT: s_mov_b32 s3, s5287; GFX10-NEXT: s_mov_b32 s4, s6288; GFX10-NEXT: s_mov_b32 s5, s7289; GFX10-NEXT: s_mov_b32 s6, s8290; GFX10-NEXT: s_mov_b32 s7, s9291; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm292; GFX10-NEXT: s_waitcnt vmcnt(0)293; GFX10-NEXT: ; return to shader part epilog294;295; GFX12-LABEL: getresinfo_1darray:296; GFX12: ; %bb.0: ; %main_body297; GFX12-NEXT: s_mov_b32 s0, s2298; GFX12-NEXT: s_mov_b32 s1, s3299; GFX12-NEXT: s_mov_b32 s2, s4300; GFX12-NEXT: s_mov_b32 s3, s5301; GFX12-NEXT: s_mov_b32 s4, s6302; GFX12-NEXT: s_mov_b32 s5, s7303; GFX12-NEXT: s_mov_b32 s6, s8304; GFX12-NEXT: s_mov_b32 s7, s9305; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY306; GFX12-NEXT: s_wait_loadcnt 0x0307; GFX12-NEXT: ; return to shader part epilog308main_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> %v311}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_body316; GFX6-NEXT: s_mov_b32 s0, s2317; GFX6-NEXT: s_mov_b32 s1, s3318; GFX6-NEXT: s_mov_b32 s2, s4319; GFX6-NEXT: s_mov_b32 s3, s5320; GFX6-NEXT: s_mov_b32 s4, s6321; GFX6-NEXT: s_mov_b32 s5, s7322; GFX6-NEXT: s_mov_b32 s6, s8323; GFX6-NEXT: s_mov_b32 s7, s9324; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da325; GFX6-NEXT: s_waitcnt vmcnt(0)326; GFX6-NEXT: ; return to shader part epilog327;328; GFX8-LABEL: getresinfo_2darray:329; GFX8: ; %bb.0: ; %main_body330; GFX8-NEXT: s_mov_b32 s0, s2331; GFX8-NEXT: s_mov_b32 s1, s3332; GFX8-NEXT: s_mov_b32 s2, s4333; GFX8-NEXT: s_mov_b32 s3, s5334; GFX8-NEXT: s_mov_b32 s4, s6335; GFX8-NEXT: s_mov_b32 s5, s7336; GFX8-NEXT: s_mov_b32 s6, s8337; GFX8-NEXT: s_mov_b32 s7, s9338; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da339; GFX8-NEXT: s_waitcnt vmcnt(0)340; GFX8-NEXT: ; return to shader part epilog341;342; GFX10-LABEL: getresinfo_2darray:343; GFX10: ; %bb.0: ; %main_body344; GFX10-NEXT: s_mov_b32 s0, s2345; GFX10-NEXT: s_mov_b32 s1, s3346; GFX10-NEXT: s_mov_b32 s2, s4347; GFX10-NEXT: s_mov_b32 s3, s5348; GFX10-NEXT: s_mov_b32 s4, s6349; GFX10-NEXT: s_mov_b32 s5, s7350; GFX10-NEXT: s_mov_b32 s6, s8351; GFX10-NEXT: s_mov_b32 s7, s9352; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm353; GFX10-NEXT: s_waitcnt vmcnt(0)354; GFX10-NEXT: ; return to shader part epilog355;356; GFX12-LABEL: getresinfo_2darray:357; GFX12: ; %bb.0: ; %main_body358; GFX12-NEXT: s_mov_b32 s0, s2359; GFX12-NEXT: s_mov_b32 s1, s3360; GFX12-NEXT: s_mov_b32 s2, s4361; GFX12-NEXT: s_mov_b32 s3, s5362; GFX12-NEXT: s_mov_b32 s4, s6363; GFX12-NEXT: s_mov_b32 s5, s7364; GFX12-NEXT: s_mov_b32 s6, s8365; GFX12-NEXT: s_mov_b32 s7, s9366; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY367; GFX12-NEXT: s_wait_loadcnt 0x0368; GFX12-NEXT: ; return to shader part epilog369main_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> %v372}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_body377; GFX6-NEXT: s_mov_b32 s0, s2378; GFX6-NEXT: s_mov_b32 s1, s3379; GFX6-NEXT: s_mov_b32 s2, s4380; GFX6-NEXT: s_mov_b32 s3, s5381; GFX6-NEXT: s_mov_b32 s4, s6382; GFX6-NEXT: s_mov_b32 s5, s7383; GFX6-NEXT: s_mov_b32 s6, s8384; GFX6-NEXT: s_mov_b32 s7, s9385; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm386; GFX6-NEXT: s_waitcnt vmcnt(0)387; GFX6-NEXT: ; return to shader part epilog388;389; GFX8-LABEL: getresinfo_2dmsaa:390; GFX8: ; %bb.0: ; %main_body391; GFX8-NEXT: s_mov_b32 s0, s2392; GFX8-NEXT: s_mov_b32 s1, s3393; GFX8-NEXT: s_mov_b32 s2, s4394; GFX8-NEXT: s_mov_b32 s3, s5395; GFX8-NEXT: s_mov_b32 s4, s6396; GFX8-NEXT: s_mov_b32 s5, s7397; GFX8-NEXT: s_mov_b32 s6, s8398; GFX8-NEXT: s_mov_b32 s7, s9399; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm400; GFX8-NEXT: s_waitcnt vmcnt(0)401; GFX8-NEXT: ; return to shader part epilog402;403; GFX10-LABEL: getresinfo_2dmsaa:404; GFX10: ; %bb.0: ; %main_body405; GFX10-NEXT: s_mov_b32 s0, s2406; GFX10-NEXT: s_mov_b32 s1, s3407; GFX10-NEXT: s_mov_b32 s2, s4408; GFX10-NEXT: s_mov_b32 s3, s5409; GFX10-NEXT: s_mov_b32 s4, s6410; GFX10-NEXT: s_mov_b32 s5, s7411; GFX10-NEXT: s_mov_b32 s6, s8412; GFX10-NEXT: s_mov_b32 s7, s9413; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm414; GFX10-NEXT: s_waitcnt vmcnt(0)415; GFX10-NEXT: ; return to shader part epilog416;417; GFX12-LABEL: getresinfo_2dmsaa:418; GFX12: ; %bb.0: ; %main_body419; GFX12-NEXT: s_mov_b32 s0, s2420; GFX12-NEXT: s_mov_b32 s1, s3421; GFX12-NEXT: s_mov_b32 s2, s4422; GFX12-NEXT: s_mov_b32 s3, s5423; GFX12-NEXT: s_mov_b32 s4, s6424; GFX12-NEXT: s_mov_b32 s5, s7425; GFX12-NEXT: s_mov_b32 s6, s8426; GFX12-NEXT: s_mov_b32 s7, s9427; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA428; GFX12-NEXT: s_wait_loadcnt 0x0429; GFX12-NEXT: ; return to shader part epilog430main_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> %v433}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_body438; GFX6-NEXT: s_mov_b32 s0, s2439; GFX6-NEXT: s_mov_b32 s1, s3440; GFX6-NEXT: s_mov_b32 s2, s4441; GFX6-NEXT: s_mov_b32 s3, s5442; GFX6-NEXT: s_mov_b32 s4, s6443; GFX6-NEXT: s_mov_b32 s5, s7444; GFX6-NEXT: s_mov_b32 s6, s8445; GFX6-NEXT: s_mov_b32 s7, s9446; GFX6-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da447; GFX6-NEXT: s_waitcnt vmcnt(0)448; GFX6-NEXT: ; return to shader part epilog449;450; GFX8-LABEL: getresinfo_2darraymsaa:451; GFX8: ; %bb.0: ; %main_body452; GFX8-NEXT: s_mov_b32 s0, s2453; GFX8-NEXT: s_mov_b32 s1, s3454; GFX8-NEXT: s_mov_b32 s2, s4455; GFX8-NEXT: s_mov_b32 s3, s5456; GFX8-NEXT: s_mov_b32 s4, s6457; GFX8-NEXT: s_mov_b32 s5, s7458; GFX8-NEXT: s_mov_b32 s6, s8459; GFX8-NEXT: s_mov_b32 s7, s9460; GFX8-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da461; GFX8-NEXT: s_waitcnt vmcnt(0)462; GFX8-NEXT: ; return to shader part epilog463;464; GFX10-LABEL: getresinfo_2darraymsaa:465; GFX10: ; %bb.0: ; %main_body466; GFX10-NEXT: s_mov_b32 s0, s2467; GFX10-NEXT: s_mov_b32 s1, s3468; GFX10-NEXT: s_mov_b32 s2, s4469; GFX10-NEXT: s_mov_b32 s3, s5470; GFX10-NEXT: s_mov_b32 s4, s6471; GFX10-NEXT: s_mov_b32 s5, s7472; GFX10-NEXT: s_mov_b32 s6, s8473; GFX10-NEXT: s_mov_b32 s7, s9474; GFX10-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm475; GFX10-NEXT: s_waitcnt vmcnt(0)476; GFX10-NEXT: ; return to shader part epilog477;478; GFX12-LABEL: getresinfo_2darraymsaa:479; GFX12: ; %bb.0: ; %main_body480; GFX12-NEXT: s_mov_b32 s0, s2481; GFX12-NEXT: s_mov_b32 s1, s3482; GFX12-NEXT: s_mov_b32 s2, s4483; GFX12-NEXT: s_mov_b32 s3, s5484; GFX12-NEXT: s_mov_b32 s4, s6485; GFX12-NEXT: s_mov_b32 s5, s7486; GFX12-NEXT: s_mov_b32 s6, s8487; GFX12-NEXT: s_mov_b32 s7, s9488; GFX12-NEXT: image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY489; GFX12-NEXT: s_wait_loadcnt 0x0490; GFX12-NEXT: ; return to shader part epilog491main_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> %v494}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_body499; GFX6-NEXT: s_mov_b32 s0, s2500; GFX6-NEXT: s_mov_b32 s1, s3501; GFX6-NEXT: s_mov_b32 s2, s4502; GFX6-NEXT: s_mov_b32 s3, s5503; GFX6-NEXT: s_mov_b32 s4, s6504; GFX6-NEXT: s_mov_b32 s5, s7505; GFX6-NEXT: s_mov_b32 s6, s8506; GFX6-NEXT: s_mov_b32 s7, s9507; GFX6-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm508; GFX6-NEXT: s_waitcnt vmcnt(0)509; GFX6-NEXT: ; return to shader part epilog510;511; GFX8-LABEL: getresinfo_dmask7:512; GFX8: ; %bb.0: ; %main_body513; GFX8-NEXT: s_mov_b32 s0, s2514; GFX8-NEXT: s_mov_b32 s1, s3515; GFX8-NEXT: s_mov_b32 s2, s4516; GFX8-NEXT: s_mov_b32 s3, s5517; GFX8-NEXT: s_mov_b32 s4, s6518; GFX8-NEXT: s_mov_b32 s5, s7519; GFX8-NEXT: s_mov_b32 s6, s8520; GFX8-NEXT: s_mov_b32 s7, s9521; GFX8-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm522; GFX8-NEXT: s_waitcnt vmcnt(0)523; GFX8-NEXT: ; return to shader part epilog524;525; GFX10-LABEL: getresinfo_dmask7:526; GFX10: ; %bb.0: ; %main_body527; GFX10-NEXT: s_mov_b32 s0, s2528; GFX10-NEXT: s_mov_b32 s1, s3529; GFX10-NEXT: s_mov_b32 s2, s4530; GFX10-NEXT: s_mov_b32 s3, s5531; GFX10-NEXT: s_mov_b32 s4, s6532; GFX10-NEXT: s_mov_b32 s5, s7533; GFX10-NEXT: s_mov_b32 s6, s8534; GFX10-NEXT: s_mov_b32 s7, s9535; GFX10-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm536; GFX10-NEXT: s_waitcnt vmcnt(0)537; GFX10-NEXT: ; return to shader part epilog538;539; GFX12-LABEL: getresinfo_dmask7:540; GFX12: ; %bb.0: ; %main_body541; GFX12-NEXT: s_mov_b32 s0, s2542; GFX12-NEXT: s_mov_b32 s1, s3543; GFX12-NEXT: s_mov_b32 s2, s4544; GFX12-NEXT: s_mov_b32 s3, s5545; GFX12-NEXT: s_mov_b32 s4, s6546; GFX12-NEXT: s_mov_b32 s5, s7547; GFX12-NEXT: s_mov_b32 s6, s8548; GFX12-NEXT: s_mov_b32 s7, s9549; GFX12-NEXT: image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D550; GFX12-NEXT: s_wait_loadcnt 0x0551; GFX12-NEXT: ; return to shader part epilog552main_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> %r555}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_body560; GFX6-NEXT: s_mov_b32 s0, s2561; GFX6-NEXT: s_mov_b32 s1, s3562; GFX6-NEXT: s_mov_b32 s2, s4563; GFX6-NEXT: s_mov_b32 s3, s5564; GFX6-NEXT: s_mov_b32 s4, s6565; GFX6-NEXT: s_mov_b32 s5, s7566; GFX6-NEXT: s_mov_b32 s6, s8567; GFX6-NEXT: s_mov_b32 s7, s9568; GFX6-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm569; GFX6-NEXT: s_waitcnt vmcnt(0)570; GFX6-NEXT: ; return to shader part epilog571;572; GFX8-LABEL: getresinfo_dmask3:573; GFX8: ; %bb.0: ; %main_body574; GFX8-NEXT: s_mov_b32 s0, s2575; GFX8-NEXT: s_mov_b32 s1, s3576; GFX8-NEXT: s_mov_b32 s2, s4577; GFX8-NEXT: s_mov_b32 s3, s5578; GFX8-NEXT: s_mov_b32 s4, s6579; GFX8-NEXT: s_mov_b32 s5, s7580; GFX8-NEXT: s_mov_b32 s6, s8581; GFX8-NEXT: s_mov_b32 s7, s9582; GFX8-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm583; GFX8-NEXT: s_waitcnt vmcnt(0)584; GFX8-NEXT: ; return to shader part epilog585;586; GFX10-LABEL: getresinfo_dmask3:587; GFX10: ; %bb.0: ; %main_body588; GFX10-NEXT: s_mov_b32 s0, s2589; GFX10-NEXT: s_mov_b32 s1, s3590; GFX10-NEXT: s_mov_b32 s2, s4591; GFX10-NEXT: s_mov_b32 s3, s5592; GFX10-NEXT: s_mov_b32 s4, s6593; GFX10-NEXT: s_mov_b32 s5, s7594; GFX10-NEXT: s_mov_b32 s6, s8595; GFX10-NEXT: s_mov_b32 s7, s9596; GFX10-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm597; GFX10-NEXT: s_waitcnt vmcnt(0)598; GFX10-NEXT: ; return to shader part epilog599;600; GFX12-LABEL: getresinfo_dmask3:601; GFX12: ; %bb.0: ; %main_body602; GFX12-NEXT: s_mov_b32 s0, s2603; GFX12-NEXT: s_mov_b32 s1, s3604; GFX12-NEXT: s_mov_b32 s2, s4605; GFX12-NEXT: s_mov_b32 s3, s5606; GFX12-NEXT: s_mov_b32 s4, s6607; GFX12-NEXT: s_mov_b32 s5, s7608; GFX12-NEXT: s_mov_b32 s6, s8609; GFX12-NEXT: s_mov_b32 s7, s9610; GFX12-NEXT: image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D611; GFX12-NEXT: s_wait_loadcnt 0x0612; GFX12-NEXT: ; return to shader part epilog613main_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> %r616}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_body621; GFX6-NEXT: s_mov_b32 s0, s2622; GFX6-NEXT: s_mov_b32 s1, s3623; GFX6-NEXT: s_mov_b32 s2, s4624; GFX6-NEXT: s_mov_b32 s3, s5625; GFX6-NEXT: s_mov_b32 s4, s6626; GFX6-NEXT: s_mov_b32 s5, s7627; GFX6-NEXT: s_mov_b32 s6, s8628; GFX6-NEXT: s_mov_b32 s7, s9629; GFX6-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm630; GFX6-NEXT: s_waitcnt vmcnt(0)631; GFX6-NEXT: ; return to shader part epilog632;633; GFX8-LABEL: getresinfo_dmask1:634; GFX8: ; %bb.0: ; %main_body635; GFX8-NEXT: s_mov_b32 s0, s2636; GFX8-NEXT: s_mov_b32 s1, s3637; GFX8-NEXT: s_mov_b32 s2, s4638; GFX8-NEXT: s_mov_b32 s3, s5639; GFX8-NEXT: s_mov_b32 s4, s6640; GFX8-NEXT: s_mov_b32 s5, s7641; GFX8-NEXT: s_mov_b32 s6, s8642; GFX8-NEXT: s_mov_b32 s7, s9643; GFX8-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm644; GFX8-NEXT: s_waitcnt vmcnt(0)645; GFX8-NEXT: ; return to shader part epilog646;647; GFX10-LABEL: getresinfo_dmask1:648; GFX10: ; %bb.0: ; %main_body649; GFX10-NEXT: s_mov_b32 s0, s2650; GFX10-NEXT: s_mov_b32 s1, s3651; GFX10-NEXT: s_mov_b32 s2, s4652; GFX10-NEXT: s_mov_b32 s3, s5653; GFX10-NEXT: s_mov_b32 s4, s6654; GFX10-NEXT: s_mov_b32 s5, s7655; GFX10-NEXT: s_mov_b32 s6, s8656; GFX10-NEXT: s_mov_b32 s7, s9657; GFX10-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm658; GFX10-NEXT: s_waitcnt vmcnt(0)659; GFX10-NEXT: ; return to shader part epilog660;661; GFX12-LABEL: getresinfo_dmask1:662; GFX12: ; %bb.0: ; %main_body663; GFX12-NEXT: s_mov_b32 s0, s2664; GFX12-NEXT: s_mov_b32 s1, s3665; GFX12-NEXT: s_mov_b32 s2, s4666; GFX12-NEXT: s_mov_b32 s3, s5667; GFX12-NEXT: s_mov_b32 s4, s6668; GFX12-NEXT: s_mov_b32 s5, s7669; GFX12-NEXT: s_mov_b32 s6, s8670; GFX12-NEXT: s_mov_b32 s7, s9671; GFX12-NEXT: image_get_resinfo v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D672; GFX12-NEXT: s_wait_loadcnt 0x0673; GFX12-NEXT: ; return to shader part epilog674main_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 %r677}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_body682; GFX6-NEXT: ; return to shader part epilog683;684; GFX8-LABEL: getresinfo_dmask0:685; GFX8: ; %bb.0: ; %main_body686; GFX8-NEXT: ; return to shader part epilog687;688; GFX10-LABEL: getresinfo_dmask0:689; GFX10: ; %bb.0: ; %main_body690; GFX10-NEXT: ; return to shader part epilog691;692; GFX12-LABEL: getresinfo_dmask0:693; GFX12: ; %bb.0: ; %main_body694; GFX12-NEXT: ; return to shader part epilog695main_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> %r698}699 700declare <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1701declare <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1702declare <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1703declare float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1704declare <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1705declare <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1706declare <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1707declare <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1708declare <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1709declare <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1710declare <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1711 712attributes #0 = { nounwind }713attributes #1 = { nounwind readnone }714