brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.0 KiB · f0031dd Raw
237 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-TRUE16 %s3; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-FAKE16 %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX1150,GFX1150-TRUE16 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX1150,GFX1150-FAKE16 %s6; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX12,GFX12-TRUE16 %s7; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX12,GFX12-FAKE16 %s8 9define amdgpu_ps <3 x float> @gather_sample(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, <8 x i32> inreg %rsrc2, <4 x i32> inreg %samp2, float %s, float %t) {10; GFX11-LABEL: gather_sample:11; GFX11:       ; %bb.0:12; GFX11-NEXT:    v_mov_b32_e32 v4, 013; GFX11-NEXT:    image_gather4_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D14; GFX11-NEXT:    image_sample_lz v2, [v4, v4], s[12:19], s[20:23] dmask:0x1 dim:SQ_RSRC_IMG_2D15; GFX11-NEXT:    s_waitcnt vmcnt(0)16; GFX11-NEXT:    ; return to shader part epilog17;18; GFX1150-LABEL: gather_sample:19; GFX1150:       ; %bb.0:20; GFX1150-NEXT:    v_mov_b32_e32 v4, 021; GFX1150-NEXT:    image_gather4_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D22; GFX1150-NEXT:    s_waitcnt vmcnt(0)23; GFX1150-NEXT:    image_sample_lz v2, [v4, v4], s[12:19], s[20:23] dmask:0x1 dim:SQ_RSRC_IMG_2D24; GFX1150-NEXT:    s_waitcnt vmcnt(0)25; GFX1150-NEXT:    ; return to shader part epilog26;27; GFX12-LABEL: gather_sample:28; GFX12:       ; %bb.0:29; GFX12-NEXT:    v_mov_b32_e32 v4, 030; GFX12-NEXT:    image_gather4_lz v[0:3], [v0, v1], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D31; GFX12-NEXT:    s_wait_samplecnt 0x032; GFX12-NEXT:    image_sample_lz v2, [v4, v4], s[12:19], s[20:23] dmask:0x1 dim:SQ_RSRC_IMG_2D33; GFX12-NEXT:    s_wait_samplecnt 0x034; GFX12-NEXT:    ; return to shader part epilog35 36  %v = call <4 x float> @llvm.amdgcn.image.gather4.lz.2d.v4f32.f32(i32 1, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)37  %w = call <4 x float> @llvm.amdgcn.image.sample.lz.2d.v4f32.f32(i32 1, float 0.000000e+00, float 0.000000e+00, <8 x i32> %rsrc2, <4 x i32> %samp2, i1 false, i32 0, i32 0)38  %t0 = extractelement <4 x float> %v, i32 039  %res0 = insertelement <3 x float> poison, float %t0, i32 040  %t1 = extractelement <4 x float> %v, i32 141  %res1 = insertelement <3 x float> %res0, float %t1, i32 142  %t2 = extractelement <4 x float> %w, i32 043  %res2 = insertelement <3 x float> %res1, float %t2, i32 244  ret <3 x float> %res245}46 47define amdgpu_ps <3 x float> @sample_gather(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, <8 x i32> inreg %rsrc2, <4 x i32> inreg %samp2, float %s, float %t) {48; GFX11-LABEL: sample_gather:49; GFX11:       ; %bb.0:50; GFX11-NEXT:    v_mov_b32_e32 v4, 051; GFX11-NEXT:    image_gather4_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D52; GFX11-NEXT:    image_sample_lz v2, [v4, v4], s[12:19], s[20:23] dmask:0x1 dim:SQ_RSRC_IMG_2D53; GFX11-NEXT:    s_waitcnt vmcnt(0)54; GFX11-NEXT:    ; return to shader part epilog55;56; GFX1150-LABEL: sample_gather:57; GFX1150:       ; %bb.0:58; GFX1150-NEXT:    v_mov_b32_e32 v4, 059; GFX1150-NEXT:    image_gather4_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D60; GFX1150-NEXT:    s_waitcnt vmcnt(0)61; GFX1150-NEXT:    image_sample_lz v2, [v4, v4], s[12:19], s[20:23] dmask:0x1 dim:SQ_RSRC_IMG_2D62; GFX1150-NEXT:    s_waitcnt vmcnt(0)63; GFX1150-NEXT:    ; return to shader part epilog64;65; GFX12-LABEL: sample_gather:66; GFX12:       ; %bb.0:67; GFX12-NEXT:    v_mov_b32_e32 v4, 068; GFX12-NEXT:    image_gather4_lz v[0:3], [v0, v1], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D69; GFX12-NEXT:    s_wait_samplecnt 0x070; GFX12-NEXT:    image_sample_lz v2, [v4, v4], s[12:19], s[20:23] dmask:0x1 dim:SQ_RSRC_IMG_2D71; GFX12-NEXT:    s_wait_samplecnt 0x072; GFX12-NEXT:    ; return to shader part epilog73 74  %w = call <4 x float> @llvm.amdgcn.image.sample.lz.2d.v4f32.f32(i32 15, float 0.000000e+00, float 0.000000e+00, <8 x i32> %rsrc2, <4 x i32> %samp2, i1 false, i32 0, i32 0)75  %v = call <4 x float> @llvm.amdgcn.image.gather4.lz.2d.v4f32.f32(i32 1, float %s, float %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)76  %t0 = extractelement <4 x float> %v, i32 077  %res0 = insertelement <3 x float> poison, float %t0, i32 078  %t1 = extractelement <4 x float> %v, i32 179  %res1 = insertelement <3 x float> %res0, float %t1, i32 180  %t2 = extractelement <4 x float> %w, i32 081  %res2 = insertelement <3 x float> %res1, float %t2, i32 282  ret <3 x float> %res283}84 85define amdgpu_ps <3 x float> @sample_load(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, <8 x i32> inreg %rsrc2, i16 %s.16, i16 %t.16, i16 %fragid) {86; GFX11-TRUE16-LABEL: sample_load:87; GFX11-TRUE16:       ; %bb.0:88; GFX11-TRUE16-NEXT:    v_mov_b16_e32 v3.l, v2.l89; GFX11-TRUE16-NEXT:    v_mov_b16_e32 v2.l, v0.l90; GFX11-TRUE16-NEXT:    v_mov_b16_e32 v2.h, v1.l91; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v4, 092; GFX11-TRUE16-NEXT:    image_msaa_load v[0:3], v[2:3], s[12:19] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm a1693; GFX11-TRUE16-NEXT:    image_sample_lz v2, [v4, v4], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D94; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)95; GFX11-TRUE16-NEXT:    ; return to shader part epilog96;97; GFX11-FAKE16-LABEL: sample_load:98; GFX11-FAKE16:       ; %bb.0:99; GFX11-FAKE16-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100100; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v4, 0101; GFX11-FAKE16-NEXT:    image_msaa_load v[0:3], [v0, v2], s[12:19] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm a16102; GFX11-FAKE16-NEXT:    image_sample_lz v2, [v4, v4], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D103; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)104; GFX11-FAKE16-NEXT:    ; return to shader part epilog105;106; GFX1150-TRUE16-LABEL: sample_load:107; GFX1150-TRUE16:       ; %bb.0:108; GFX1150-TRUE16-NEXT:    v_mov_b16_e32 v3.l, v2.l109; GFX1150-TRUE16-NEXT:    v_mov_b16_e32 v2.l, v0.l110; GFX1150-TRUE16-NEXT:    v_mov_b16_e32 v2.h, v1.l111; GFX1150-TRUE16-NEXT:    v_mov_b32_e32 v4, 0112; GFX1150-TRUE16-NEXT:    image_msaa_load v[0:3], v[2:3], s[12:19] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm a16113; GFX1150-TRUE16-NEXT:    s_waitcnt vmcnt(0)114; GFX1150-TRUE16-NEXT:    image_sample_lz v2, [v4, v4], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D115; GFX1150-TRUE16-NEXT:    s_waitcnt vmcnt(0)116; GFX1150-TRUE16-NEXT:    ; return to shader part epilog117;118; GFX1150-FAKE16-LABEL: sample_load:119; GFX1150-FAKE16:       ; %bb.0:120; GFX1150-FAKE16-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100121; GFX1150-FAKE16-NEXT:    v_mov_b32_e32 v4, 0122; GFX1150-FAKE16-NEXT:    image_msaa_load v[0:3], [v0, v2], s[12:19] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm a16123; GFX1150-FAKE16-NEXT:    s_waitcnt vmcnt(0)124; GFX1150-FAKE16-NEXT:    image_sample_lz v2, [v4, v4], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D125; GFX1150-FAKE16-NEXT:    s_waitcnt vmcnt(0)126; GFX1150-FAKE16-NEXT:    ; return to shader part epilog127;128; GFX12-TRUE16-LABEL: sample_load:129; GFX12-TRUE16:       ; %bb.0:130; GFX12-TRUE16-NEXT:    v_mov_b16_e32 v0.h, v1.l131; GFX12-TRUE16-NEXT:    v_mov_b32_e32 v4, 0132; GFX12-TRUE16-NEXT:    image_msaa_load v[0:3], [v0, v2], s[12:19] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm a16133; GFX12-TRUE16-NEXT:    s_wait_samplecnt 0x0134; GFX12-TRUE16-NEXT:    image_sample_lz v2, [v4, v4], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D135; GFX12-TRUE16-NEXT:    s_wait_samplecnt 0x0136; GFX12-TRUE16-NEXT:    ; return to shader part epilog137;138; GFX12-FAKE16-LABEL: sample_load:139; GFX12-FAKE16:       ; %bb.0:140; GFX12-FAKE16-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100141; GFX12-FAKE16-NEXT:    v_mov_b32_e32 v4, 0142; GFX12-FAKE16-NEXT:    image_msaa_load v[0:3], [v0, v2], s[12:19] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm a16143; GFX12-FAKE16-NEXT:    s_wait_samplecnt 0x0144; GFX12-FAKE16-NEXT:    image_sample_lz v2, [v4, v4], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D145; GFX12-FAKE16-NEXT:    s_wait_samplecnt 0x0146; GFX12-FAKE16-NEXT:    ; return to shader part epilog147 148  %w = call <4 x float> @llvm.amdgcn.image.sample.lz.2d.v4f32.f32(i32 15, float 0.000000e+00, float 0.000000e+00, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)149  %v = call <4 x float> @llvm.amdgcn.image.msaa.load.2dmsaa.v4f32.i32(i32 1, i16 %s.16, i16 %t.16, i16 %fragid, <8 x i32> %rsrc2, i32 0, i32 0)150  %t0 = extractelement <4 x float> %v, i32 0151  %res0 = insertelement <3 x float> poison, float %t0, i32 0152  %t1 = extractelement <4 x float> %v, i32 1153  %res1 = insertelement <3 x float> %res0, float %t1, i32 1154  %t2 = extractelement <4 x float> %w, i32 0155  %res2 = insertelement <3 x float> %res1, float %t2, i32 2156  ret <3 x float> %res2157}158 159define amdgpu_ps <3 x float> @load_sample(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, <8 x i32> inreg %rsrc2, i16 %s.16, i16 %t.16, i16 %fragid) {160; GFX11-TRUE16-LABEL: load_sample:161; GFX11-TRUE16:       ; %bb.0:162; GFX11-TRUE16-NEXT:    v_mov_b16_e32 v3.l, v2.l163; GFX11-TRUE16-NEXT:    v_mov_b16_e32 v2.l, v0.l164; GFX11-TRUE16-NEXT:    v_mov_b16_e32 v2.h, v1.l165; GFX11-TRUE16-NEXT:    v_mov_b32_e32 v4, 0166; GFX11-TRUE16-NEXT:    image_msaa_load v[0:3], v[2:3], s[12:19] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm a16167; GFX11-TRUE16-NEXT:    image_sample_lz v2, [v4, v4], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D168; GFX11-TRUE16-NEXT:    s_waitcnt vmcnt(0)169; GFX11-TRUE16-NEXT:    ; return to shader part epilog170;171; GFX11-FAKE16-LABEL: load_sample:172; GFX11-FAKE16:       ; %bb.0:173; GFX11-FAKE16-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100174; GFX11-FAKE16-NEXT:    v_mov_b32_e32 v4, 0175; GFX11-FAKE16-NEXT:    image_msaa_load v[0:3], [v0, v2], s[12:19] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm a16176; GFX11-FAKE16-NEXT:    image_sample_lz v2, [v4, v4], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D177; GFX11-FAKE16-NEXT:    s_waitcnt vmcnt(0)178; GFX11-FAKE16-NEXT:    ; return to shader part epilog179;180; GFX1150-TRUE16-LABEL: load_sample:181; GFX1150-TRUE16:       ; %bb.0:182; GFX1150-TRUE16-NEXT:    v_mov_b16_e32 v3.l, v2.l183; GFX1150-TRUE16-NEXT:    v_mov_b16_e32 v2.l, v0.l184; GFX1150-TRUE16-NEXT:    v_mov_b16_e32 v2.h, v1.l185; GFX1150-TRUE16-NEXT:    v_mov_b32_e32 v4, 0186; GFX1150-TRUE16-NEXT:    image_msaa_load v[0:3], v[2:3], s[12:19] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm a16187; GFX1150-TRUE16-NEXT:    s_waitcnt vmcnt(0)188; GFX1150-TRUE16-NEXT:    image_sample_lz v2, [v4, v4], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D189; GFX1150-TRUE16-NEXT:    s_waitcnt vmcnt(0)190; GFX1150-TRUE16-NEXT:    ; return to shader part epilog191;192; GFX1150-FAKE16-LABEL: load_sample:193; GFX1150-FAKE16:       ; %bb.0:194; GFX1150-FAKE16-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100195; GFX1150-FAKE16-NEXT:    v_mov_b32_e32 v4, 0196; GFX1150-FAKE16-NEXT:    image_msaa_load v[0:3], [v0, v2], s[12:19] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm a16197; GFX1150-FAKE16-NEXT:    s_waitcnt vmcnt(0)198; GFX1150-FAKE16-NEXT:    image_sample_lz v2, [v4, v4], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D199; GFX1150-FAKE16-NEXT:    s_waitcnt vmcnt(0)200; GFX1150-FAKE16-NEXT:    ; return to shader part epilog201;202; GFX12-TRUE16-LABEL: load_sample:203; GFX12-TRUE16:       ; %bb.0:204; GFX12-TRUE16-NEXT:    v_mov_b16_e32 v0.h, v1.l205; GFX12-TRUE16-NEXT:    v_mov_b32_e32 v4, 0206; GFX12-TRUE16-NEXT:    image_msaa_load v[0:3], [v0, v2], s[12:19] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm a16207; GFX12-TRUE16-NEXT:    s_wait_samplecnt 0x0208; GFX12-TRUE16-NEXT:    image_sample_lz v2, [v4, v4], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D209; GFX12-TRUE16-NEXT:    s_wait_samplecnt 0x0210; GFX12-TRUE16-NEXT:    ; return to shader part epilog211;212; GFX12-FAKE16-LABEL: load_sample:213; GFX12-FAKE16:       ; %bb.0:214; GFX12-FAKE16-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100215; GFX12-FAKE16-NEXT:    v_mov_b32_e32 v4, 0216; GFX12-FAKE16-NEXT:    image_msaa_load v[0:3], [v0, v2], s[12:19] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm a16217; GFX12-FAKE16-NEXT:    s_wait_samplecnt 0x0218; GFX12-FAKE16-NEXT:    image_sample_lz v2, [v4, v4], s[0:7], s[8:11] dmask:0x1 dim:SQ_RSRC_IMG_2D219; GFX12-FAKE16-NEXT:    s_wait_samplecnt 0x0220; GFX12-FAKE16-NEXT:    ; return to shader part epilog221 222  %v = call <4 x float> @llvm.amdgcn.image.msaa.load.2dmsaa.v4f32.i32(i32 1, i16 %s.16, i16 %t.16, i16 %fragid, <8 x i32> %rsrc2, i32 0, i32 0)223  %w = call <4 x float> @llvm.amdgcn.image.sample.lz.2d.v4f32.f32(i32 15, float 0.000000e+00, float 0.000000e+00, <8 x i32> %rsrc, <4 x i32> %samp, i1 false, i32 0, i32 0)224  %t0 = extractelement <4 x float> %v, i32 0225  %res0 = insertelement <3 x float> poison, float %t0, i32 0226  %t1 = extractelement <4 x float> %v, i32 1227  %res1 = insertelement <3 x float> %res0, float %t1, i32 1228  %t2 = extractelement <4 x float> %w, i32 0229  %res2 = insertelement <3 x float> %res1, float %t2, i32 2230  ret <3 x float> %res2231}232 233 234declare <4 x float> @llvm.amdgcn.image.gather4.lz.2d.v4f32.f32(i32, float, float, <8 x i32>, <4 x i32>, i1, i32, i32)235declare <4 x float> @llvm.amdgcn.image.sample.lz.2d.v4f32.f32(i32, float, float, <8 x i32>, <4 x i32>, i1, i32, i32)236declare <4 x float> @llvm.amdgcn.image.msaa.load.2dmsaa.v4f32.i16(i32, i16, i16, i16, <8 x i32>, i32, i32)237