brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.0 KiB · b20dc4b Raw
289 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9 %s3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10PLUS,GFX10 %s4; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX10PLUS,GFX11 %s5; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX12 %s6 7define amdgpu_ps <4 x float> @load_3d_v4f32_xyzw(<8 x i32> inreg %rsrc, i16 %s, i16 %t, i16 %r) {8; GFX9-LABEL: load_3d_v4f32_xyzw:9; GFX9:       ; %bb.0:10; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v011; GFX9-NEXT:    s_mov_b32 s0, s212; GFX9-NEXT:    s_mov_b32 s1, s313; GFX9-NEXT:    s_mov_b32 s2, s414; GFX9-NEXT:    s_mov_b32 s3, s515; GFX9-NEXT:    s_mov_b32 s4, s616; GFX9-NEXT:    s_mov_b32 s5, s717; GFX9-NEXT:    s_mov_b32 s6, s818; GFX9-NEXT:    s_mov_b32 s7, s919; GFX9-NEXT:    v_lshl_or_b32 v1, v1, 16, v020; GFX9-NEXT:    image_load v[0:3], v[1:2], s[0:7] dmask:0xf unorm a1621; GFX9-NEXT:    s_waitcnt vmcnt(0)22; GFX9-NEXT:    ; return to shader part epilog23;24; GFX10PLUS-LABEL: load_3d_v4f32_xyzw:25; GFX10PLUS:       ; %bb.0:26; GFX10PLUS-NEXT:    v_and_b32_e32 v0, 0xffff, v027; GFX10PLUS-NEXT:    s_mov_b32 s0, s228; GFX10PLUS-NEXT:    s_mov_b32 s1, s329; GFX10PLUS-NEXT:    s_mov_b32 s2, s430; GFX10PLUS-NEXT:    s_mov_b32 s3, s531; GFX10PLUS-NEXT:    v_lshl_or_b32 v0, v1, 16, v032; GFX10PLUS-NEXT:    s_mov_b32 s4, s633; GFX10PLUS-NEXT:    s_mov_b32 s5, s734; GFX10PLUS-NEXT:    s_mov_b32 s6, s835; GFX10PLUS-NEXT:    s_mov_b32 s7, s936; GFX10PLUS-NEXT:    image_load v[0:3], [v0, v2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a1637; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)38; GFX10PLUS-NEXT:    ; return to shader part epilog39;40; GFX12-LABEL: load_3d_v4f32_xyzw:41; GFX12:       ; %bb.0:42; GFX12-NEXT:    v_and_b32_e32 v0, 0xffff, v043; GFX12-NEXT:    s_mov_b32 s0, s244; GFX12-NEXT:    s_mov_b32 s1, s345; GFX12-NEXT:    s_mov_b32 s2, s446; GFX12-NEXT:    s_mov_b32 s3, s547; GFX12-NEXT:    v_lshl_or_b32 v0, v1, 16, v048; GFX12-NEXT:    s_mov_b32 s4, s649; GFX12-NEXT:    s_mov_b32 s5, s750; GFX12-NEXT:    s_mov_b32 s6, s851; GFX12-NEXT:    s_mov_b32 s7, s952; GFX12-NEXT:    image_load v[0:3], [v0, v2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D a1653; GFX12-NEXT:    s_wait_loadcnt 0x054; GFX12-NEXT:    ; return to shader part epilog55  %v = call <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i16(i32 15, i16 %s, i16 %t, i16 %r, <8 x i32> %rsrc, i32 0, i32 0)56  ret <4 x float> %v57}58 59define amdgpu_ps <4 x float> @load_3d_v4f32_xyzw_tfe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i16 %s, i16 %t, i16 %r) {60; GFX9-LABEL: load_3d_v4f32_xyzw_tfe:61; GFX9:       ; %bb.0:62; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v063; GFX9-NEXT:    v_mov_b32_e32 v7, 064; GFX9-NEXT:    v_mov_b32_e32 v6, v265; GFX9-NEXT:    v_lshl_or_b32 v5, v1, 16, v066; GFX9-NEXT:    v_mov_b32_e32 v8, v767; GFX9-NEXT:    v_mov_b32_e32 v9, v768; GFX9-NEXT:    v_mov_b32_e32 v10, v769; GFX9-NEXT:    v_mov_b32_e32 v11, v770; GFX9-NEXT:    v_mov_b32_e32 v0, v771; GFX9-NEXT:    s_mov_b32 s0, s272; GFX9-NEXT:    s_mov_b32 s1, s373; GFX9-NEXT:    s_mov_b32 s2, s474; GFX9-NEXT:    s_mov_b32 s3, s575; GFX9-NEXT:    s_mov_b32 s4, s676; GFX9-NEXT:    s_mov_b32 s5, s777; GFX9-NEXT:    s_mov_b32 s6, s878; GFX9-NEXT:    s_mov_b32 s7, s979; GFX9-NEXT:    v_mov_b32_e32 v1, v880; GFX9-NEXT:    v_mov_b32_e32 v2, v981; GFX9-NEXT:    v_mov_b32_e32 v3, v1082; GFX9-NEXT:    v_mov_b32_e32 v4, v1183; GFX9-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm a16 tfe84; GFX9-NEXT:    s_waitcnt vmcnt(0)85; GFX9-NEXT:    global_store_dword v7, v4, s[10:11]86; GFX9-NEXT:    s_waitcnt vmcnt(0)87; GFX9-NEXT:    ; return to shader part epilog88;89; GFX10-LABEL: load_3d_v4f32_xyzw_tfe:90; GFX10:       ; %bb.0:91; GFX10-NEXT:    v_mov_b32_e32 v6, 092; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v093; GFX10-NEXT:    v_mov_b32_e32 v12, v294; GFX10-NEXT:    s_mov_b32 s0, s295; GFX10-NEXT:    s_mov_b32 s1, s396; GFX10-NEXT:    v_mov_b32_e32 v7, v697; GFX10-NEXT:    v_mov_b32_e32 v8, v698; GFX10-NEXT:    v_mov_b32_e32 v9, v699; GFX10-NEXT:    v_mov_b32_e32 v10, v6100; GFX10-NEXT:    v_lshl_or_b32 v11, v1, 16, v0101; GFX10-NEXT:    s_mov_b32 s2, s4102; GFX10-NEXT:    s_mov_b32 s3, s5103; GFX10-NEXT:    s_mov_b32 s4, s6104; GFX10-NEXT:    s_mov_b32 s5, s7105; GFX10-NEXT:    s_mov_b32 s6, s8106; GFX10-NEXT:    s_mov_b32 s7, s9107; GFX10-NEXT:    v_mov_b32_e32 v0, v6108; GFX10-NEXT:    v_mov_b32_e32 v1, v7109; GFX10-NEXT:    v_mov_b32_e32 v2, v8110; GFX10-NEXT:    v_mov_b32_e32 v3, v9111; GFX10-NEXT:    v_mov_b32_e32 v4, v10112; GFX10-NEXT:    image_load v[0:4], v[11:12], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 tfe113; GFX10-NEXT:    s_waitcnt vmcnt(0)114; GFX10-NEXT:    global_store_dword v6, v4, s[10:11]115; GFX10-NEXT:    ; return to shader part epilog116;117; GFX11-LABEL: load_3d_v4f32_xyzw_tfe:118; GFX11:       ; %bb.0:119; GFX11-NEXT:    v_mov_b32_e32 v6, 0120; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0121; GFX11-NEXT:    s_mov_b32 s0, s2122; GFX11-NEXT:    s_mov_b32 s1, s3123; GFX11-NEXT:    s_mov_b32 s2, s4124; GFX11-NEXT:    v_mov_b32_e32 v7, v6125; GFX11-NEXT:    v_mov_b32_e32 v8, v6126; GFX11-NEXT:    v_mov_b32_e32 v9, v6127; GFX11-NEXT:    v_mov_b32_e32 v10, v6128; GFX11-NEXT:    v_mov_b32_e32 v12, v2129; GFX11-NEXT:    v_lshl_or_b32 v11, v1, 16, v0130; GFX11-NEXT:    s_mov_b32 s3, s5131; GFX11-NEXT:    s_mov_b32 s4, s6132; GFX11-NEXT:    s_mov_b32 s5, s7133; GFX11-NEXT:    s_mov_b32 s6, s8134; GFX11-NEXT:    s_mov_b32 s7, s9135; GFX11-NEXT:    v_dual_mov_b32 v0, v6 :: v_dual_mov_b32 v3, v9136; GFX11-NEXT:    v_dual_mov_b32 v1, v7 :: v_dual_mov_b32 v2, v8137; GFX11-NEXT:    v_mov_b32_e32 v4, v10138; GFX11-NEXT:    image_load v[0:4], v[11:12], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 tfe139; GFX11-NEXT:    s_waitcnt vmcnt(0)140; GFX11-NEXT:    global_store_b32 v6, v4, s[10:11]141; GFX11-NEXT:    ; return to shader part epilog142;143; GFX12-LABEL: load_3d_v4f32_xyzw_tfe:144; GFX12:       ; %bb.0:145; GFX12-NEXT:    v_dual_mov_b32 v5, v2 :: v_dual_mov_b32 v6, 0146; GFX12-NEXT:    v_and_b32_e32 v0, 0xffff, v0147; GFX12-NEXT:    s_mov_b32 s0, s2148; GFX12-NEXT:    s_mov_b32 s1, s3149; GFX12-NEXT:    s_mov_b32 s2, s4150; GFX12-NEXT:    v_dual_mov_b32 v7, v6 :: v_dual_mov_b32 v8, v6151; GFX12-NEXT:    v_dual_mov_b32 v9, v6 :: v_dual_mov_b32 v10, v6152; GFX12-NEXT:    v_lshl_or_b32 v11, v1, 16, v0153; GFX12-NEXT:    s_mov_b32 s3, s5154; GFX12-NEXT:    s_mov_b32 s4, s6155; GFX12-NEXT:    s_mov_b32 s5, s7156; GFX12-NEXT:    s_mov_b32 s6, s8157; GFX12-NEXT:    s_mov_b32 s7, s9158; GFX12-NEXT:    v_dual_mov_b32 v0, v6 :: v_dual_mov_b32 v1, v7159; GFX12-NEXT:    v_dual_mov_b32 v2, v8 :: v_dual_mov_b32 v3, v9160; GFX12-NEXT:    v_mov_b32_e32 v4, v10161; GFX12-NEXT:    image_load v[0:4], [v11, v5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D a16 tfe162; GFX12-NEXT:    s_wait_loadcnt 0x0163; GFX12-NEXT:    global_store_b32 v6, v4, s[10:11]164; GFX12-NEXT:    ; return to shader part epilog165  %v = call { <4 x float>, i32 } @llvm.amdgcn.image.load.3d.sl_v4f32i32s.i16(i32 15, i16 %s, i16 %t, i16 %r, <8 x i32> %rsrc, i32 1, i32 0)166  %v.vec = extractvalue { <4 x float>, i32 } %v, 0167  %v.err = extractvalue { <4 x float>, i32 } %v, 1168  store i32 %v.err, ptr addrspace(1) %out, align 4169  ret <4 x float> %v.vec170}171 172define amdgpu_ps <4 x float> @load_3d_v4f32_xyzw_tfe_lwe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i16 %s, i16 %t, i16 %r) {173; GFX9-LABEL: load_3d_v4f32_xyzw_tfe_lwe:174; GFX9:       ; %bb.0:175; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0176; GFX9-NEXT:    v_mov_b32_e32 v7, 0177; GFX9-NEXT:    v_mov_b32_e32 v6, v2178; GFX9-NEXT:    v_lshl_or_b32 v5, v1, 16, v0179; GFX9-NEXT:    v_mov_b32_e32 v8, v7180; GFX9-NEXT:    v_mov_b32_e32 v9, v7181; GFX9-NEXT:    v_mov_b32_e32 v10, v7182; GFX9-NEXT:    v_mov_b32_e32 v11, v7183; GFX9-NEXT:    v_mov_b32_e32 v0, v7184; GFX9-NEXT:    s_mov_b32 s0, s2185; GFX9-NEXT:    s_mov_b32 s1, s3186; GFX9-NEXT:    s_mov_b32 s2, s4187; GFX9-NEXT:    s_mov_b32 s3, s5188; GFX9-NEXT:    s_mov_b32 s4, s6189; GFX9-NEXT:    s_mov_b32 s5, s7190; GFX9-NEXT:    s_mov_b32 s6, s8191; GFX9-NEXT:    s_mov_b32 s7, s9192; GFX9-NEXT:    v_mov_b32_e32 v1, v8193; GFX9-NEXT:    v_mov_b32_e32 v2, v9194; GFX9-NEXT:    v_mov_b32_e32 v3, v10195; GFX9-NEXT:    v_mov_b32_e32 v4, v11196; GFX9-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm a16 tfe lwe197; GFX9-NEXT:    s_waitcnt vmcnt(0)198; GFX9-NEXT:    global_store_dword v7, v4, s[10:11]199; GFX9-NEXT:    s_waitcnt vmcnt(0)200; GFX9-NEXT:    ; return to shader part epilog201;202; GFX10-LABEL: load_3d_v4f32_xyzw_tfe_lwe:203; GFX10:       ; %bb.0:204; GFX10-NEXT:    v_mov_b32_e32 v6, 0205; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0206; GFX10-NEXT:    v_mov_b32_e32 v12, v2207; GFX10-NEXT:    s_mov_b32 s0, s2208; GFX10-NEXT:    s_mov_b32 s1, s3209; GFX10-NEXT:    v_mov_b32_e32 v7, v6210; GFX10-NEXT:    v_mov_b32_e32 v8, v6211; GFX10-NEXT:    v_mov_b32_e32 v9, v6212; GFX10-NEXT:    v_mov_b32_e32 v10, v6213; GFX10-NEXT:    v_lshl_or_b32 v11, v1, 16, v0214; GFX10-NEXT:    s_mov_b32 s2, s4215; GFX10-NEXT:    s_mov_b32 s3, s5216; GFX10-NEXT:    s_mov_b32 s4, s6217; GFX10-NEXT:    s_mov_b32 s5, s7218; GFX10-NEXT:    s_mov_b32 s6, s8219; GFX10-NEXT:    s_mov_b32 s7, s9220; GFX10-NEXT:    v_mov_b32_e32 v0, v6221; GFX10-NEXT:    v_mov_b32_e32 v1, v7222; GFX10-NEXT:    v_mov_b32_e32 v2, v8223; GFX10-NEXT:    v_mov_b32_e32 v3, v9224; GFX10-NEXT:    v_mov_b32_e32 v4, v10225; GFX10-NEXT:    image_load v[0:4], v[11:12], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 tfe lwe226; GFX10-NEXT:    s_waitcnt vmcnt(0)227; GFX10-NEXT:    global_store_dword v6, v4, s[10:11]228; GFX10-NEXT:    ; return to shader part epilog229;230; GFX11-LABEL: load_3d_v4f32_xyzw_tfe_lwe:231; GFX11:       ; %bb.0:232; GFX11-NEXT:    v_mov_b32_e32 v6, 0233; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0234; GFX11-NEXT:    s_mov_b32 s0, s2235; GFX11-NEXT:    s_mov_b32 s1, s3236; GFX11-NEXT:    s_mov_b32 s2, s4237; GFX11-NEXT:    v_mov_b32_e32 v7, v6238; GFX11-NEXT:    v_mov_b32_e32 v8, v6239; GFX11-NEXT:    v_mov_b32_e32 v9, v6240; GFX11-NEXT:    v_mov_b32_e32 v10, v6241; GFX11-NEXT:    v_mov_b32_e32 v12, v2242; GFX11-NEXT:    v_lshl_or_b32 v11, v1, 16, v0243; GFX11-NEXT:    s_mov_b32 s3, s5244; GFX11-NEXT:    s_mov_b32 s4, s6245; GFX11-NEXT:    s_mov_b32 s5, s7246; GFX11-NEXT:    s_mov_b32 s6, s8247; GFX11-NEXT:    s_mov_b32 s7, s9248; GFX11-NEXT:    v_dual_mov_b32 v0, v6 :: v_dual_mov_b32 v3, v9249; GFX11-NEXT:    v_dual_mov_b32 v1, v7 :: v_dual_mov_b32 v2, v8250; GFX11-NEXT:    v_mov_b32_e32 v4, v10251; GFX11-NEXT:    image_load v[0:4], v[11:12], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 tfe lwe252; GFX11-NEXT:    s_waitcnt vmcnt(0)253; GFX11-NEXT:    global_store_b32 v6, v4, s[10:11]254; GFX11-NEXT:    ; return to shader part epilog255;256; GFX12-LABEL: load_3d_v4f32_xyzw_tfe_lwe:257; GFX12:       ; %bb.0:258; GFX12-NEXT:    v_dual_mov_b32 v5, v2 :: v_dual_mov_b32 v6, 0259; GFX12-NEXT:    v_and_b32_e32 v0, 0xffff, v0260; GFX12-NEXT:    s_mov_b32 s0, s2261; GFX12-NEXT:    s_mov_b32 s1, s3262; GFX12-NEXT:    s_mov_b32 s2, s4263; GFX12-NEXT:    v_dual_mov_b32 v7, v6 :: v_dual_mov_b32 v8, v6264; GFX12-NEXT:    v_dual_mov_b32 v9, v6 :: v_dual_mov_b32 v10, v6265; GFX12-NEXT:    v_lshl_or_b32 v11, v1, 16, v0266; GFX12-NEXT:    s_mov_b32 s3, s5267; GFX12-NEXT:    s_mov_b32 s4, s6268; GFX12-NEXT:    s_mov_b32 s5, s7269; GFX12-NEXT:    s_mov_b32 s6, s8270; GFX12-NEXT:    s_mov_b32 s7, s9271; GFX12-NEXT:    v_dual_mov_b32 v0, v6 :: v_dual_mov_b32 v1, v7272; GFX12-NEXT:    v_dual_mov_b32 v2, v8 :: v_dual_mov_b32 v3, v9273; GFX12-NEXT:    v_mov_b32_e32 v4, v10274; GFX12-NEXT:    image_load v[0:4], [v11, v5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D a16 tfe275; GFX12-NEXT:    s_wait_loadcnt 0x0276; GFX12-NEXT:    global_store_b32 v6, v4, s[10:11]277; GFX12-NEXT:    ; return to shader part epilog278  %v = call { <4 x float>, i32 } @llvm.amdgcn.image.load.3d.sl_v4f32i32s.i16(i32 15, i16 %s, i16 %t, i16 %r, <8 x i32> %rsrc, i32 3, i32 0)279  %v.vec = extractvalue { <4 x float>, i32 } %v, 0280  %v.err = extractvalue { <4 x float>, i32 } %v, 1281  store i32 %v.err, ptr addrspace(1) %out, align 4282  ret <4 x float> %v.vec283}284 285declare <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i16(i32 immarg, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0286declare { <4 x float>, i32 } @llvm.amdgcn.image.load.3d.sl_v4f32i32s.i16(i32 immarg, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0287 288attributes #0 = { nounwind readonly }289