brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.4 KiB · 796f6b8 Raw
336 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12 %s3; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GFX12 %s4 5define float @test_amdgcn_dot4_f32_fp8_bf8(i32 %a, i32 %b, float %c) {6; GFX12-LABEL: test_amdgcn_dot4_f32_fp8_bf8:7; GFX12:       ; %bb.0: ; %entry8; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x09; GFX12-NEXT:    s_wait_expcnt 0x010; GFX12-NEXT:    s_wait_samplecnt 0x011; GFX12-NEXT:    s_wait_bvhcnt 0x012; GFX12-NEXT:    s_wait_kmcnt 0x013; GFX12-NEXT:    v_dot4_f32_fp8_bf8 v0, v0, v1, v214; GFX12-NEXT:    s_setpc_b64 s[30:31]15entry:16  %ret = call float @llvm.amdgcn.dot4.f32.fp8.bf8(i32 %a, i32 %b, float %c)17  ret float %ret18}19 20define float @test_amdgcn_dot4_f32_fp8_bf8_fabs(i32 %a, i32 %b, float %c) {21; GFX12-LABEL: test_amdgcn_dot4_f32_fp8_bf8_fabs:22; GFX12:       ; %bb.0: ; %entry23; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x024; GFX12-NEXT:    s_wait_expcnt 0x025; GFX12-NEXT:    s_wait_samplecnt 0x026; GFX12-NEXT:    s_wait_bvhcnt 0x027; GFX12-NEXT:    s_wait_kmcnt 0x028; GFX12-NEXT:    v_dot4_f32_fp8_bf8 v0, v0, v1, v2 neg_hi:[0,0,1]29; GFX12-NEXT:    s_setpc_b64 s[30:31]30entry:31  %fabs.c = call float @llvm.fabs.f32(float %c)32  %ret = call float @llvm.amdgcn.dot4.f32.fp8.bf8(i32 %a, i32 %b, float %fabs.c)33  ret float %ret34}35 36define float @test_amdgcn_dot4_f32_fp8_bf8_fneg(i32 %a, i32 %b, float %c) {37; GFX12-LABEL: test_amdgcn_dot4_f32_fp8_bf8_fneg:38; GFX12:       ; %bb.0: ; %entry39; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x040; GFX12-NEXT:    s_wait_expcnt 0x041; GFX12-NEXT:    s_wait_samplecnt 0x042; GFX12-NEXT:    s_wait_bvhcnt 0x043; GFX12-NEXT:    s_wait_kmcnt 0x044; GFX12-NEXT:    v_dot4_f32_fp8_bf8 v0, v0, v1, v2 neg_lo:[0,0,1]45; GFX12-NEXT:    s_setpc_b64 s[30:31]46entry:47  %fneg.c = fneg float %c48  %ret = call float @llvm.amdgcn.dot4.f32.fp8.bf8(i32 %a, i32 %b, float %fneg.c)49  ret float %ret50}51 52define float @test_amdgcn_dot4_f32_fp8_bf8_fabs_fneg(i32 %a, i32 %b, float %c) {53; GFX12-LABEL: test_amdgcn_dot4_f32_fp8_bf8_fabs_fneg:54; GFX12:       ; %bb.0: ; %entry55; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x056; GFX12-NEXT:    s_wait_expcnt 0x057; GFX12-NEXT:    s_wait_samplecnt 0x058; GFX12-NEXT:    s_wait_bvhcnt 0x059; GFX12-NEXT:    s_wait_kmcnt 0x060; GFX12-NEXT:    v_dot4_f32_fp8_bf8 v0, v0, v1, v2 neg_hi:[0,0,1]61; GFX12-NEXT:    s_setpc_b64 s[30:31]62entry:63  %fneg.c = fneg float %c64  %fabs.fneg.c = call float @llvm.fabs.f32(float %fneg.c)65  %ret = call float @llvm.amdgcn.dot4.f32.fp8.bf8(i32 %a, i32 %b, float %fabs.fneg.c)66  ret float %ret67}68 69define float @test_amdgcn_dot4_f32_fp8_bf8_fneg_fabs(i32 %a, i32 %b, float %c) {70; GFX12-LABEL: test_amdgcn_dot4_f32_fp8_bf8_fneg_fabs:71; GFX12:       ; %bb.0: ; %entry72; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x073; GFX12-NEXT:    s_wait_expcnt 0x074; GFX12-NEXT:    s_wait_samplecnt 0x075; GFX12-NEXT:    s_wait_bvhcnt 0x076; GFX12-NEXT:    s_wait_kmcnt 0x077; GFX12-NEXT:    v_dot4_f32_fp8_bf8 v0, v0, v1, v2 neg_lo:[0,0,1] neg_hi:[0,0,1]78; GFX12-NEXT:    s_setpc_b64 s[30:31]79entry:80  %fabs.c = call float @llvm.fabs.f32(float %c)81  %fneg.fabs.c = fneg float %fabs.c82  %ret = call float @llvm.amdgcn.dot4.f32.fp8.bf8(i32 %a, i32 %b, float %fneg.fabs.c)83  ret float %ret84}85 86define float @test_amdgcn_dot4_f32_bf8_fp8(i32 %a, i32 %b, float %c) {87; GFX12-LABEL: test_amdgcn_dot4_f32_bf8_fp8:88; GFX12:       ; %bb.0: ; %entry89; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x090; GFX12-NEXT:    s_wait_expcnt 0x091; GFX12-NEXT:    s_wait_samplecnt 0x092; GFX12-NEXT:    s_wait_bvhcnt 0x093; GFX12-NEXT:    s_wait_kmcnt 0x094; GFX12-NEXT:    v_dot4_f32_bf8_fp8 v0, v0, v1, v295; GFX12-NEXT:    s_setpc_b64 s[30:31]96entry:97  %ret = call float @llvm.amdgcn.dot4.f32.bf8.fp8(i32 %a, i32 %b, float %c)98  ret float %ret99}100 101define float @test_amdgcn_dot4_f32_bf8_fp8_fabs(i32 %a, i32 %b, float %c) {102; GFX12-LABEL: test_amdgcn_dot4_f32_bf8_fp8_fabs:103; GFX12:       ; %bb.0: ; %entry104; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0105; GFX12-NEXT:    s_wait_expcnt 0x0106; GFX12-NEXT:    s_wait_samplecnt 0x0107; GFX12-NEXT:    s_wait_bvhcnt 0x0108; GFX12-NEXT:    s_wait_kmcnt 0x0109; GFX12-NEXT:    v_dot4_f32_bf8_fp8 v0, v0, v1, v2 neg_hi:[0,0,1]110; GFX12-NEXT:    s_setpc_b64 s[30:31]111entry:112  %fabs.c = call float @llvm.fabs.f32(float %c)113  %ret = call float @llvm.amdgcn.dot4.f32.bf8.fp8(i32 %a, i32 %b, float %fabs.c)114  ret float %ret115}116 117define float @test_amdgcn_dot4_f32_bf8_fp8_fneg(i32 %a, i32 %b, float %c) {118; GFX12-LABEL: test_amdgcn_dot4_f32_bf8_fp8_fneg:119; GFX12:       ; %bb.0: ; %entry120; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0121; GFX12-NEXT:    s_wait_expcnt 0x0122; GFX12-NEXT:    s_wait_samplecnt 0x0123; GFX12-NEXT:    s_wait_bvhcnt 0x0124; GFX12-NEXT:    s_wait_kmcnt 0x0125; GFX12-NEXT:    v_dot4_f32_bf8_fp8 v0, v0, v1, v2 neg_lo:[0,0,1]126; GFX12-NEXT:    s_setpc_b64 s[30:31]127entry:128  %fneg.c = fneg float %c129  %ret = call float @llvm.amdgcn.dot4.f32.bf8.fp8(i32 %a, i32 %b, float %fneg.c)130  ret float %ret131}132 133define float @test_amdgcn_dot4_f32_bf8_fp8_fabs_fneg(i32 %a, i32 %b, float %c) {134; GFX12-LABEL: test_amdgcn_dot4_f32_bf8_fp8_fabs_fneg:135; GFX12:       ; %bb.0: ; %entry136; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0137; GFX12-NEXT:    s_wait_expcnt 0x0138; GFX12-NEXT:    s_wait_samplecnt 0x0139; GFX12-NEXT:    s_wait_bvhcnt 0x0140; GFX12-NEXT:    s_wait_kmcnt 0x0141; GFX12-NEXT:    v_dot4_f32_bf8_fp8 v0, v0, v1, v2 neg_hi:[0,0,1]142; GFX12-NEXT:    s_setpc_b64 s[30:31]143entry:144  %fneg.c = fneg float %c145  %fabs.fneg.c = call float @llvm.fabs.f32(float %fneg.c)146  %ret = call float @llvm.amdgcn.dot4.f32.bf8.fp8(i32 %a, i32 %b, float %fabs.fneg.c)147  ret float %ret148}149 150define float @test_amdgcn_dot4_f32_bf8_fp8_fneg_fabs(i32 %a, i32 %b, float %c) {151; GFX12-LABEL: test_amdgcn_dot4_f32_bf8_fp8_fneg_fabs:152; GFX12:       ; %bb.0: ; %entry153; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0154; GFX12-NEXT:    s_wait_expcnt 0x0155; GFX12-NEXT:    s_wait_samplecnt 0x0156; GFX12-NEXT:    s_wait_bvhcnt 0x0157; GFX12-NEXT:    s_wait_kmcnt 0x0158; GFX12-NEXT:    v_dot4_f32_bf8_fp8 v0, v0, v1, v2 neg_lo:[0,0,1] neg_hi:[0,0,1]159; GFX12-NEXT:    s_setpc_b64 s[30:31]160entry:161  %fabs.c = call float @llvm.fabs.f32(float %c)162  %fneg.fabs.c = fneg float %fabs.c163  %ret = call float @llvm.amdgcn.dot4.f32.bf8.fp8(i32 %a, i32 %b, float %fneg.fabs.c)164  ret float %ret165}166 167define float @test_amdgcn_dot4_f32_fp8_fp8(i32 %a, i32 %b, float %c) {168; GFX12-LABEL: test_amdgcn_dot4_f32_fp8_fp8:169; GFX12:       ; %bb.0: ; %entry170; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0171; GFX12-NEXT:    s_wait_expcnt 0x0172; GFX12-NEXT:    s_wait_samplecnt 0x0173; GFX12-NEXT:    s_wait_bvhcnt 0x0174; GFX12-NEXT:    s_wait_kmcnt 0x0175; GFX12-NEXT:    v_dot4_f32_fp8_fp8 v0, v0, v1, v2176; GFX12-NEXT:    s_setpc_b64 s[30:31]177entry:178  %ret = call float @llvm.amdgcn.dot4.f32.fp8.fp8(i32 %a, i32 %b, float %c)179  ret float %ret180}181 182define float @test_amdgcn_dot4_f32_fp8_fp8_fabs(i32 %a, i32 %b, float %c) {183; GFX12-LABEL: test_amdgcn_dot4_f32_fp8_fp8_fabs:184; GFX12:       ; %bb.0: ; %entry185; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0186; GFX12-NEXT:    s_wait_expcnt 0x0187; GFX12-NEXT:    s_wait_samplecnt 0x0188; GFX12-NEXT:    s_wait_bvhcnt 0x0189; GFX12-NEXT:    s_wait_kmcnt 0x0190; GFX12-NEXT:    v_dot4_f32_fp8_fp8 v0, v0, v1, v2 neg_hi:[0,0,1]191; GFX12-NEXT:    s_setpc_b64 s[30:31]192entry:193  %fabs.c = call float @llvm.fabs.f32(float %c)194  %ret = call float @llvm.amdgcn.dot4.f32.fp8.fp8(i32 %a, i32 %b, float %fabs.c)195  ret float %ret196}197 198define float @test_amdgcn_dot4_f32_fp8_fp8_fneg(i32 %a, i32 %b, float %c) {199; GFX12-LABEL: test_amdgcn_dot4_f32_fp8_fp8_fneg:200; GFX12:       ; %bb.0: ; %entry201; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0202; GFX12-NEXT:    s_wait_expcnt 0x0203; GFX12-NEXT:    s_wait_samplecnt 0x0204; GFX12-NEXT:    s_wait_bvhcnt 0x0205; GFX12-NEXT:    s_wait_kmcnt 0x0206; GFX12-NEXT:    v_dot4_f32_fp8_fp8 v0, v0, v1, v2 neg_lo:[0,0,1]207; GFX12-NEXT:    s_setpc_b64 s[30:31]208entry:209  %fneg.c = fneg float %c210  %ret = call float @llvm.amdgcn.dot4.f32.fp8.fp8(i32 %a, i32 %b, float %fneg.c)211  ret float %ret212}213 214define float @test_amdgcn_dot4_f32_fp8_fp8_fabs_fneg(i32 %a, i32 %b, float %c) {215; GFX12-LABEL: test_amdgcn_dot4_f32_fp8_fp8_fabs_fneg:216; GFX12:       ; %bb.0: ; %entry217; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0218; GFX12-NEXT:    s_wait_expcnt 0x0219; GFX12-NEXT:    s_wait_samplecnt 0x0220; GFX12-NEXT:    s_wait_bvhcnt 0x0221; GFX12-NEXT:    s_wait_kmcnt 0x0222; GFX12-NEXT:    v_dot4_f32_fp8_fp8 v0, v0, v1, v2 neg_hi:[0,0,1]223; GFX12-NEXT:    s_setpc_b64 s[30:31]224entry:225  %fneg.c = fneg float %c226  %fabs.fneg.c = call float @llvm.fabs.f32(float %fneg.c)227  %ret = call float @llvm.amdgcn.dot4.f32.fp8.fp8(i32 %a, i32 %b, float %fabs.fneg.c)228  ret float %ret229}230 231define float @test_amdgcn_dot4_f32_fp8_fp8_fneg_fabs(i32 %a, i32 %b, float %c) {232; GFX12-LABEL: test_amdgcn_dot4_f32_fp8_fp8_fneg_fabs:233; GFX12:       ; %bb.0: ; %entry234; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0235; GFX12-NEXT:    s_wait_expcnt 0x0236; GFX12-NEXT:    s_wait_samplecnt 0x0237; GFX12-NEXT:    s_wait_bvhcnt 0x0238; GFX12-NEXT:    s_wait_kmcnt 0x0239; GFX12-NEXT:    v_dot4_f32_fp8_fp8 v0, v0, v1, v2 neg_lo:[0,0,1] neg_hi:[0,0,1]240; GFX12-NEXT:    s_setpc_b64 s[30:31]241entry:242  %fabs.c = call float @llvm.fabs.f32(float %c)243  %fneg.fabs.c = fneg float %fabs.c244  %ret = call float @llvm.amdgcn.dot4.f32.fp8.fp8(i32 %a, i32 %b, float %fneg.fabs.c)245  ret float %ret246}247 248define float @test_amdgcn_dot4_f32_bf8_bf8(i32 %a, i32 %b, float %c) {249; GFX12-LABEL: test_amdgcn_dot4_f32_bf8_bf8:250; GFX12:       ; %bb.0: ; %entry251; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0252; GFX12-NEXT:    s_wait_expcnt 0x0253; GFX12-NEXT:    s_wait_samplecnt 0x0254; GFX12-NEXT:    s_wait_bvhcnt 0x0255; GFX12-NEXT:    s_wait_kmcnt 0x0256; GFX12-NEXT:    v_dot4_f32_bf8_bf8 v0, v0, v1, v2257; GFX12-NEXT:    s_setpc_b64 s[30:31]258entry:259  %ret = call float @llvm.amdgcn.dot4.f32.bf8.bf8(i32 %a, i32 %b, float %c)260  ret float %ret261}262 263define float @test_amdgcn_dot4_f32_bf8_bf8_fabs(i32 %a, i32 %b, float %c) {264; GFX12-LABEL: test_amdgcn_dot4_f32_bf8_bf8_fabs:265; GFX12:       ; %bb.0: ; %entry266; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0267; GFX12-NEXT:    s_wait_expcnt 0x0268; GFX12-NEXT:    s_wait_samplecnt 0x0269; GFX12-NEXT:    s_wait_bvhcnt 0x0270; GFX12-NEXT:    s_wait_kmcnt 0x0271; GFX12-NEXT:    v_dot4_f32_bf8_bf8 v0, v0, v1, v2 neg_hi:[0,0,1]272; GFX12-NEXT:    s_setpc_b64 s[30:31]273entry:274  %fabs.c = call float @llvm.fabs.f32(float %c)275  %ret = call float @llvm.amdgcn.dot4.f32.bf8.bf8(i32 %a, i32 %b, float %fabs.c)276  ret float %ret277}278 279define float @test_amdgcn_dot4_f32_bf8_bf8_fneg(i32 %a, i32 %b, float %c) {280; GFX12-LABEL: test_amdgcn_dot4_f32_bf8_bf8_fneg:281; GFX12:       ; %bb.0: ; %entry282; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0283; GFX12-NEXT:    s_wait_expcnt 0x0284; GFX12-NEXT:    s_wait_samplecnt 0x0285; GFX12-NEXT:    s_wait_bvhcnt 0x0286; GFX12-NEXT:    s_wait_kmcnt 0x0287; GFX12-NEXT:    v_dot4_f32_bf8_bf8 v0, v0, v1, v2 neg_lo:[0,0,1]288; GFX12-NEXT:    s_setpc_b64 s[30:31]289entry:290  %fneg.c = fneg float %c291  %ret = call float @llvm.amdgcn.dot4.f32.bf8.bf8(i32 %a, i32 %b, float %fneg.c)292  ret float %ret293}294 295define float @test_amdgcn_dot4_f32_bf8_bf8_fabs_fneg(i32 %a, i32 %b, float %c) {296; GFX12-LABEL: test_amdgcn_dot4_f32_bf8_bf8_fabs_fneg:297; GFX12:       ; %bb.0: ; %entry298; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0299; GFX12-NEXT:    s_wait_expcnt 0x0300; GFX12-NEXT:    s_wait_samplecnt 0x0301; GFX12-NEXT:    s_wait_bvhcnt 0x0302; GFX12-NEXT:    s_wait_kmcnt 0x0303; GFX12-NEXT:    v_dot4_f32_bf8_bf8 v0, v0, v1, v2 neg_hi:[0,0,1]304; GFX12-NEXT:    s_setpc_b64 s[30:31]305entry:306  %fneg.c = fneg float %c307  %fabs.fneg.c = call float @llvm.fabs.f32(float %fneg.c)308  %ret = call float @llvm.amdgcn.dot4.f32.bf8.bf8(i32 %a, i32 %b, float %fabs.fneg.c)309  ret float %ret310}311 312define float @test_amdgcn_dot4_f32_bf8_bf8_fneg_fabs(i32 %a, i32 %b, float %c) {313; GFX12-LABEL: test_amdgcn_dot4_f32_bf8_bf8_fneg_fabs:314; GFX12:       ; %bb.0: ; %entry315; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0316; GFX12-NEXT:    s_wait_expcnt 0x0317; GFX12-NEXT:    s_wait_samplecnt 0x0318; GFX12-NEXT:    s_wait_bvhcnt 0x0319; GFX12-NEXT:    s_wait_kmcnt 0x0320; GFX12-NEXT:    v_dot4_f32_bf8_bf8 v0, v0, v1, v2 neg_lo:[0,0,1] neg_hi:[0,0,1]321; GFX12-NEXT:    s_setpc_b64 s[30:31]322entry:323  %fabs.c = call float @llvm.fabs.f32(float %c)324  %fneg.fabs.c = fneg float %fabs.c325  %ret = call float @llvm.amdgcn.dot4.f32.bf8.bf8(i32 %a, i32 %b, float %fneg.fabs.c)326  ret float %ret327}328 329declare float @llvm.amdgcn.dot4.f32.fp8.bf8(i32 %a, i32 %b, float %c)330declare float @llvm.amdgcn.dot4.f32.bf8.fp8(i32 %a, i32 %b, float %c)331declare float @llvm.amdgcn.dot4.f32.fp8.fp8(i32 %a, i32 %b, float %c)332declare float @llvm.amdgcn.dot4.f32.bf8.bf8(i32 %a, i32 %b, float %c)333 334declare float @llvm.fabs.f32(float %a)335 336