brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.4 KiB · 5bd9fa6 Raw
241 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 -mattr=+real-true16 %s -o - | FileCheck -check-prefix=GFX-SDAG-TRUE16 %s3; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 -mattr=-real-true16 %s -o - | FileCheck -check-prefix=GFX-SDAG-FAKE16 %s4; xUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 -mattr=+real-true16 %s -o - | FileCheck -check-prefix=GFX-GISEL-TRUE16 %s5; xUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 -mattr=-real-true16 %s -o - | FileCheck -check-prefix=GFX-GISEL-FAKE16 %s6 7define bfloat @v_log2_bf16(bfloat %in) {8; GFX-SDAG-TRUE16-LABEL: v_log2_bf16:9; GFX-SDAG-TRUE16:       ; %bb.0:10; GFX-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x011; GFX-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x012; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e32 v0.l, v0.l13; GFX-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]14;15; GFX-SDAG-FAKE16-LABEL: v_log2_bf16:16; GFX-SDAG-FAKE16:       ; %bb.0:17; GFX-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x018; GFX-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x019; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e32 v0, v020; GFX-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]21  %result = call bfloat @llvm.log2.bf16(bfloat %in)22  ret bfloat %result23}24 25define bfloat @v_log2_fabs_bf16(bfloat %in) {26; GFX-SDAG-TRUE16-LABEL: v_log2_fabs_bf16:27; GFX-SDAG-TRUE16:       ; %bb.0:28; GFX-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x029; GFX-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x030; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e64 v0.l, |v0.l|31; GFX-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]32;33; GFX-SDAG-FAKE16-LABEL: v_log2_fabs_bf16:34; GFX-SDAG-FAKE16:       ; %bb.0:35; GFX-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x036; GFX-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x037; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e64 v0, |v0|38; GFX-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]39  %fabs = call bfloat @llvm.fabs.bf16(bfloat %in)40  %result = call bfloat @llvm.log2.bf16(bfloat %fabs)41  ret bfloat %result42}43 44define bfloat @v_log2_fneg_fabs_bf16(bfloat %in) {45; GFX-SDAG-TRUE16-LABEL: v_log2_fneg_fabs_bf16:46; GFX-SDAG-TRUE16:       ; %bb.0:47; GFX-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x048; GFX-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x049; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e64 v0.l, -|v0.l|50; GFX-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]51;52; GFX-SDAG-FAKE16-LABEL: v_log2_fneg_fabs_bf16:53; GFX-SDAG-FAKE16:       ; %bb.0:54; GFX-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x055; GFX-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x056; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e64 v0, -|v0|57; GFX-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]58  %fabs = call bfloat @llvm.fabs.bf16(bfloat %in)59  %fneg.fabs = fneg bfloat %fabs60  %result = call bfloat @llvm.log2.bf16(bfloat %fneg.fabs)61  ret bfloat %result62}63 64define bfloat @v_log2_fneg_bf16(bfloat %in) {65; GFX-SDAG-TRUE16-LABEL: v_log2_fneg_bf16:66; GFX-SDAG-TRUE16:       ; %bb.0:67; GFX-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x068; GFX-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x069; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e64 v0.l, -v0.l70; GFX-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]71;72; GFX-SDAG-FAKE16-LABEL: v_log2_fneg_bf16:73; GFX-SDAG-FAKE16:       ; %bb.0:74; GFX-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x075; GFX-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x076; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e64 v0, -v077; GFX-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]78  %fneg = fneg bfloat %in79  %result = call bfloat @llvm.log2.bf16(bfloat %fneg)80  ret bfloat %result81}82 83define bfloat @v_log2_bf16_fast(bfloat %in) {84; GFX-SDAG-TRUE16-LABEL: v_log2_bf16_fast:85; GFX-SDAG-TRUE16:       ; %bb.0:86; GFX-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x087; GFX-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x088; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e32 v0.l, v0.l89; GFX-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]90;91; GFX-SDAG-FAKE16-LABEL: v_log2_bf16_fast:92; GFX-SDAG-FAKE16:       ; %bb.0:93; GFX-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x094; GFX-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x095; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e32 v0, v096; GFX-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]97  %result = call fast bfloat @llvm.log2.bf16(bfloat %in)98  ret bfloat %result99}100 101define <2 x bfloat> @v_log2_v2bf16(<2 x bfloat> %in) {102; GFX-SDAG-TRUE16-LABEL: v_log2_v2bf16:103; GFX-SDAG-TRUE16:       ; %bb.0:104; GFX-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0105; GFX-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0106; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e32 v0.h, v0.h107; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e32 v0.l, v0.l108; GFX-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]109;110; GFX-SDAG-FAKE16-LABEL: v_log2_v2bf16:111; GFX-SDAG-FAKE16:       ; %bb.0:112; GFX-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0113; GFX-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0114; GFX-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0115; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e32 v0, v0116; GFX-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(TRANS32_DEP_1)117; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e32 v1, v1118; GFX-SDAG-FAKE16-NEXT:    v_nop119; GFX-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100120; GFX-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]121  %result = call <2 x bfloat> @llvm.log2.v2bf16(<2 x bfloat> %in)122  ret <2 x bfloat> %result123}124 125define <2 x bfloat> @v_log2_fabs_v2bf16(<2 x bfloat> %in) {126; GFX-SDAG-TRUE16-LABEL: v_log2_fabs_v2bf16:127; GFX-SDAG-TRUE16:       ; %bb.0:128; GFX-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0129; GFX-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0130; GFX-SDAG-TRUE16-NEXT:    v_and_b32_e32 v1, 0x7fff7fff, v0131; GFX-SDAG-TRUE16-NEXT:    v_bfe_u32 v2, v0, 16, 15132; GFX-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)133; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e32 v0.l, v1.l134; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e32 v0.h, v2.l135; GFX-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]136;137; GFX-SDAG-FAKE16-LABEL: v_log2_fabs_v2bf16:138; GFX-SDAG-FAKE16:       ; %bb.0:139; GFX-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0140; GFX-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0141; GFX-SDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff7fff, v0142; GFX-SDAG-FAKE16-NEXT:    v_bfe_u32 v0, v0, 16, 15143; GFX-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)144; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e32 v1, v1145; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e32 v0, v0146; GFX-SDAG-FAKE16-NEXT:    v_nop147; GFX-SDAG-FAKE16-NEXT:    s_delay_alu instid0(TRANS32_DEP_1)148; GFX-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v0, v1, 0x5040100149; GFX-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]150  %fabs = call <2 x bfloat> @llvm.fabs.v2bf16(<2 x bfloat> %in)151  %result = call <2 x bfloat> @llvm.log2.v2bf16(<2 x bfloat> %fabs)152  ret <2 x bfloat> %result153}154 155define <2 x bfloat> @v_log2_fneg_fabs_v2bf16(<2 x bfloat> %in) {156; GFX-SDAG-TRUE16-LABEL: v_log2_fneg_fabs_v2bf16:157; GFX-SDAG-TRUE16:       ; %bb.0:158; GFX-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0159; GFX-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0160; GFX-SDAG-TRUE16-NEXT:    v_and_b32_e32 v1, 0x7fff7fff, v0161; GFX-SDAG-TRUE16-NEXT:    v_bfe_u32 v2, v0, 16, 15162; GFX-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)163; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e64 v0.l, -v1.l164; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e64 v0.h, -v2.l165; GFX-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]166;167; GFX-SDAG-FAKE16-LABEL: v_log2_fneg_fabs_v2bf16:168; GFX-SDAG-FAKE16:       ; %bb.0:169; GFX-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0170; GFX-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0171; GFX-SDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff7fff, v0172; GFX-SDAG-FAKE16-NEXT:    v_bfe_u32 v0, v0, 16, 15173; GFX-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)174; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e64 v1, -v1175; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e64 v0, -v0176; GFX-SDAG-FAKE16-NEXT:    v_nop177; GFX-SDAG-FAKE16-NEXT:    s_delay_alu instid0(TRANS32_DEP_1)178; GFX-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v0, v1, 0x5040100179; GFX-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]180  %fabs = call <2 x bfloat> @llvm.fabs.v2bf16(<2 x bfloat> %in)181  %fneg.fabs = fneg <2 x bfloat> %fabs182  %result = call <2 x bfloat> @llvm.log2.v2bf16(<2 x bfloat> %fneg.fabs)183  ret <2 x bfloat> %result184}185 186define <2 x bfloat> @v_log2_fneg_v2bf16(<2 x bfloat> %in) {187; GFX-SDAG-TRUE16-LABEL: v_log2_fneg_v2bf16:188; GFX-SDAG-TRUE16:       ; %bb.0:189; GFX-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0190; GFX-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0191; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e64 v0.h, -v0.h192; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e64 v0.l, -v0.l193; GFX-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]194;195; GFX-SDAG-FAKE16-LABEL: v_log2_fneg_v2bf16:196; GFX-SDAG-FAKE16:       ; %bb.0:197; GFX-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0198; GFX-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0199; GFX-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0200; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e64 v0, -v0201; GFX-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(TRANS32_DEP_1)202; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e64 v1, -v1203; GFX-SDAG-FAKE16-NEXT:    v_nop204; GFX-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100205; GFX-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]206  %fneg = fneg <2 x bfloat> %in207  %result = call <2 x bfloat> @llvm.log2.v2bf16(<2 x bfloat> %fneg)208  ret <2 x bfloat> %result209}210 211define <2 x bfloat> @v_log2_v2bf16_fast(<2 x bfloat> %in) {212; GFX-SDAG-TRUE16-LABEL: v_log2_v2bf16_fast:213; GFX-SDAG-TRUE16:       ; %bb.0:214; GFX-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0215; GFX-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0216; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e32 v0.h, v0.h217; GFX-SDAG-TRUE16-NEXT:    v_log_bf16_e32 v0.l, v0.l218; GFX-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]219;220; GFX-SDAG-FAKE16-LABEL: v_log2_v2bf16_fast:221; GFX-SDAG-FAKE16:       ; %bb.0:222; GFX-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0223; GFX-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0224; GFX-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0225; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e32 v0, v0226; GFX-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(TRANS32_DEP_1)227; GFX-SDAG-FAKE16-NEXT:    v_log_bf16_e32 v1, v1228; GFX-SDAG-FAKE16-NEXT:    v_nop229; GFX-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100230; GFX-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]231  %result = call fast <2 x bfloat> @llvm.log2.v2bf16(<2 x bfloat> %in)232  ret <2 x bfloat> %result233}234 235declare bfloat @llvm.log2.bf16(bfloat) #0236declare <2 x bfloat> @llvm.log2.v2bf16(<2 x bfloat>) #0237declare bfloat @llvm.fabs.bf16(bfloat) #0238declare <2 x bfloat> @llvm.fabs.v2bf16(<2 x bfloat>) #0239 240attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }241