brintos

brintos / llvm-project-archived public Read only

0
0
Text · 59.0 KiB · f3bca31 Raw
1005 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=gfx1200 -mattr=+real-true16 %s -o - | FileCheck %s -check-prefixes=GFX1200-SDAG-TRUE163; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -mattr=-real-true16 %s -o - | FileCheck %s -check-prefixes=GFX1200-SDAG-FAKE164; xUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -mattr=+real-true16 %s -o - | FileCheck %s -check-prefixes=GFX1200-GI-TRUE165; xUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -mattr=-real-true16 %s -o - | FileCheck %s -check-prefixes=GFX1200-GI-FAKE166; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 -mattr=+real-true16 %s -o - | FileCheck %s -check-prefixes=GFX1250-SDAG-TRUE167; RUN: llc -global-isel=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 -mattr=-real-true16 %s -o - | FileCheck %s -check-prefixes=GFX1250-SDAG-FAKE168; xUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 -mattr=+real-true16 %s -o - | FileCheck %s -check-prefixes=GFX1250-GI-TRUE169; xUN: llc -global-isel=1 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1250 -mattr=-real-true16 %s -o - | FileCheck %s -check-prefixes=GFX1250-GI-FAKE1610 11define bfloat @v_exp2_bf16(bfloat %in) {12; GFX1200-SDAG-TRUE16-LABEL: v_exp2_bf16:13; GFX1200-SDAG-TRUE16:       ; %bb.0:14; GFX1200-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x015; GFX1200-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x016; GFX1200-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x017; GFX1200-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x018; GFX1200-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x019; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v1.l, 020; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v1.h, v0.l21; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)22; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v123; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)24; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 0x42800000, vcc_lo25; GFX1200-SDAG-TRUE16-NEXT:    v_add_f32_e32 v0, v1, v026; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v1, 0, 0xffffffc0, vcc_lo27; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(TRANS32_DEP_1)28; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v0, v029; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v0, v0, v130; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)31; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v1, v0, 16, 132; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v2, 0x400000, v033; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v034; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff35; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)36; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)37; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo38; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v0.l, v0.h39; GFX1200-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]40;41; GFX1200-SDAG-FAKE16-LABEL: v_exp2_bf16:42; GFX1200-SDAG-FAKE16:       ; %bb.0:43; GFX1200-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x044; GFX1200-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x045; GFX1200-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x046; GFX1200-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x047; GFX1200-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x048; GFX1200-SDAG-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 16, v049; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)50; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v051; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)52; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo53; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v1, 0, 0xffffffc0, vcc_lo54; GFX1200-SDAG-FAKE16-NEXT:    v_add_f32_e32 v0, v0, v255; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(TRANS32_DEP_1)56; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v0, v057; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v0, v0, v158; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)59; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v1, v0, 16, 160; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v2, 0x400000, v061; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v062; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff63; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)64; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)65; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo66; GFX1200-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v0, 16, v067; GFX1200-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]68;69; GFX1250-SDAG-TRUE16-LABEL: v_exp2_bf16:70; GFX1250-SDAG-TRUE16:       ; %bb.0:71; GFX1250-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x072; GFX1250-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x073; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e32 v0.l, v0.l74; GFX1250-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]75;76; GFX1250-SDAG-FAKE16-LABEL: v_exp2_bf16:77; GFX1250-SDAG-FAKE16:       ; %bb.0:78; GFX1250-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x079; GFX1250-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x080; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e32 v0, v081; GFX1250-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]82  %result = call bfloat @llvm.exp2.bf16(bfloat %in)83  ret bfloat %result84}85 86define bfloat @v_exp2_fabs_bf16(bfloat %in) {87; GFX1200-SDAG-TRUE16-LABEL: v_exp2_fabs_bf16:88; GFX1200-SDAG-TRUE16:       ; %bb.0:89; GFX1200-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x090; GFX1200-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x091; GFX1200-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x092; GFX1200-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x093; GFX1200-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x094; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v1.l, 095; GFX1200-SDAG-TRUE16-NEXT:    v_and_b16 v1.h, 0x7fff, v0.l96; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)97; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v198; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)99; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 0x42800000, vcc_lo100; GFX1200-SDAG-TRUE16-NEXT:    v_add_f32_e32 v0, v1, v0101; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v1, 0, 0xffffffc0, vcc_lo102; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(TRANS32_DEP_1)103; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v0, v0104; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v0, v0, v1105; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)106; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v1, v0, 16, 1107; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v2, 0x400000, v0108; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0109; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff110; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)111; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)112; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo113; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v0.l, v0.h114; GFX1200-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]115;116; GFX1200-SDAG-FAKE16-LABEL: v_exp2_fabs_bf16:117; GFX1200-SDAG-FAKE16:       ; %bb.0:118; GFX1200-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0119; GFX1200-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0120; GFX1200-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0121; GFX1200-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x0122; GFX1200-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0123; GFX1200-SDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff, v0124; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)125; GFX1200-SDAG-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 16, v0126; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0127; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)128; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo129; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)130; GFX1200-SDAG-FAKE16-NEXT:    v_add_f32_e32 v0, v0, v1131; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v1, 0, 0xffffffc0, vcc_lo132; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v0, v0133; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(TRANS32_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)134; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v0, v0, v1135; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v1, v0, 16, 1136; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v2, 0x400000, v0137; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0138; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)139; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff140; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)141; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo142; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)143; GFX1200-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v0, 16, v0144; GFX1200-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]145;146; GFX1250-SDAG-TRUE16-LABEL: v_exp2_fabs_bf16:147; GFX1250-SDAG-TRUE16:       ; %bb.0:148; GFX1250-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0149; GFX1250-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0150; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e64 v0.l, |v0.l|151; GFX1250-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]152;153; GFX1250-SDAG-FAKE16-LABEL: v_exp2_fabs_bf16:154; GFX1250-SDAG-FAKE16:       ; %bb.0:155; GFX1250-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0156; GFX1250-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0157; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e64 v0, |v0|158; GFX1250-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]159  %fabs = call bfloat @llvm.fabs.bf16(bfloat %in)160  %result = call bfloat @llvm.exp2.bf16(bfloat %fabs)161  ret bfloat %result162}163 164define bfloat @v_exp2_fneg_fabs_bf16(bfloat %in) {165; GFX1200-SDAG-TRUE16-LABEL: v_exp2_fneg_fabs_bf16:166; GFX1200-SDAG-TRUE16:       ; %bb.0:167; GFX1200-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0168; GFX1200-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x0169; GFX1200-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x0170; GFX1200-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x0171; GFX1200-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0172; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v1.l, 0173; GFX1200-SDAG-TRUE16-NEXT:    v_or_b16 v1.h, 0x8000, v0.l174; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)175; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v1176; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)177; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 0x42800000, vcc_lo178; GFX1200-SDAG-TRUE16-NEXT:    v_add_f32_e32 v0, v1, v0179; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v1, 0, 0xffffffc0, vcc_lo180; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(TRANS32_DEP_1)181; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v0, v0182; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v0, v0, v1183; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)184; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v1, v0, 16, 1185; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v2, 0x400000, v0186; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0187; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff188; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)189; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)190; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo191; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v0.l, v0.h192; GFX1200-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]193;194; GFX1200-SDAG-FAKE16-LABEL: v_exp2_fneg_fabs_bf16:195; GFX1200-SDAG-FAKE16:       ; %bb.0:196; GFX1200-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0197; GFX1200-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0198; GFX1200-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0199; GFX1200-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x0200; GFX1200-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0201; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v0, 0x8000, v0202; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)203; GFX1200-SDAG-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 16, v0204; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0205; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)206; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo207; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)208; GFX1200-SDAG-FAKE16-NEXT:    v_add_f32_e32 v0, v0, v1209; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v1, 0, 0xffffffc0, vcc_lo210; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v0, v0211; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(TRANS32_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)212; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v0, v0, v1213; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v1, v0, 16, 1214; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v2, 0x400000, v0215; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0216; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)217; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff218; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)219; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo220; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)221; GFX1200-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v0, 16, v0222; GFX1200-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]223;224; GFX1250-SDAG-TRUE16-LABEL: v_exp2_fneg_fabs_bf16:225; GFX1250-SDAG-TRUE16:       ; %bb.0:226; GFX1250-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0227; GFX1250-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0228; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e64 v0.l, -|v0.l|229; GFX1250-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]230;231; GFX1250-SDAG-FAKE16-LABEL: v_exp2_fneg_fabs_bf16:232; GFX1250-SDAG-FAKE16:       ; %bb.0:233; GFX1250-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0234; GFX1250-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0235; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e64 v0, -|v0|236; GFX1250-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]237  %fabs = call bfloat @llvm.fabs.bf16(bfloat %in)238  %fneg.fabs = fneg bfloat %fabs239  %result = call bfloat @llvm.exp2.bf16(bfloat %fneg.fabs)240  ret bfloat %result241}242 243define bfloat @v_exp2_fneg_bf16(bfloat %in) {244; GFX1200-SDAG-TRUE16-LABEL: v_exp2_fneg_bf16:245; GFX1200-SDAG-TRUE16:       ; %bb.0:246; GFX1200-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0247; GFX1200-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x0248; GFX1200-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x0249; GFX1200-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x0250; GFX1200-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0251; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v1.l, 0252; GFX1200-SDAG-TRUE16-NEXT:    v_xor_b16 v1.h, 0x8000, v0.l253; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)254; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v1255; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)256; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 0x42800000, vcc_lo257; GFX1200-SDAG-TRUE16-NEXT:    v_add_f32_e32 v0, v1, v0258; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v1, 0, 0xffffffc0, vcc_lo259; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(TRANS32_DEP_1)260; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v0, v0261; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v0, v0, v1262; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)263; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v1, v0, 16, 1264; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v2, 0x400000, v0265; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0266; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff267; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)268; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)269; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo270; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v0.l, v0.h271; GFX1200-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]272;273; GFX1200-SDAG-FAKE16-LABEL: v_exp2_fneg_bf16:274; GFX1200-SDAG-FAKE16:       ; %bb.0:275; GFX1200-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0276; GFX1200-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0277; GFX1200-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0278; GFX1200-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x0279; GFX1200-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0280; GFX1200-SDAG-FAKE16-NEXT:    v_xor_b32_e32 v0, 0x8000, v0281; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)282; GFX1200-SDAG-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 16, v0283; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0284; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)285; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo286; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)287; GFX1200-SDAG-FAKE16-NEXT:    v_add_f32_e32 v0, v0, v1288; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v1, 0, 0xffffffc0, vcc_lo289; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v0, v0290; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(TRANS32_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)291; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v0, v0, v1292; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v1, v0, 16, 1293; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v2, 0x400000, v0294; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0295; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)296; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff297; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)298; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo299; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)300; GFX1200-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v0, 16, v0301; GFX1200-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]302;303; GFX1250-SDAG-TRUE16-LABEL: v_exp2_fneg_bf16:304; GFX1250-SDAG-TRUE16:       ; %bb.0:305; GFX1250-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0306; GFX1250-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0307; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e64 v0.l, -v0.l308; GFX1250-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]309;310; GFX1250-SDAG-FAKE16-LABEL: v_exp2_fneg_bf16:311; GFX1250-SDAG-FAKE16:       ; %bb.0:312; GFX1250-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0313; GFX1250-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0314; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e64 v0, -v0315; GFX1250-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]316  %fneg = fneg bfloat %in317  %result = call bfloat @llvm.exp2.bf16(bfloat %fneg)318  ret bfloat %result319}320 321define bfloat @v_exp2_bf16_fast(bfloat %in) {322; GFX1200-SDAG-TRUE16-LABEL: v_exp2_bf16_fast:323; GFX1200-SDAG-TRUE16:       ; %bb.0:324; GFX1200-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0325; GFX1200-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x0326; GFX1200-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x0327; GFX1200-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x0328; GFX1200-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0329; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v1.l, 0330; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v1.h, v0.l331; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)332; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v1333; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)334; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 0x42800000, vcc_lo335; GFX1200-SDAG-TRUE16-NEXT:    v_add_f32_e32 v0, v1, v0336; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v1, 0, 0xffffffc0, vcc_lo337; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(TRANS32_DEP_1)338; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v0, v0339; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v0, v0, v1340; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)341; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v1, v0, 16, 1342; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v2, 0x400000, v0343; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0344; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff345; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)346; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)347; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo348; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v0.l, v0.h349; GFX1200-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]350;351; GFX1200-SDAG-FAKE16-LABEL: v_exp2_bf16_fast:352; GFX1200-SDAG-FAKE16:       ; %bb.0:353; GFX1200-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0354; GFX1200-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0355; GFX1200-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0356; GFX1200-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x0357; GFX1200-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0358; GFX1200-SDAG-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 16, v0359; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)360; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0361; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)362; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo363; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v1, 0, 0xffffffc0, vcc_lo364; GFX1200-SDAG-FAKE16-NEXT:    v_add_f32_e32 v0, v0, v2365; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(TRANS32_DEP_1)366; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v0, v0367; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v0, v0, v1368; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)369; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v1, v0, 16, 1370; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v2, 0x400000, v0371; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0372; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff373; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)374; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)375; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo376; GFX1200-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v0, 16, v0377; GFX1200-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]378;379; GFX1250-SDAG-TRUE16-LABEL: v_exp2_bf16_fast:380; GFX1250-SDAG-TRUE16:       ; %bb.0:381; GFX1250-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0382; GFX1250-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0383; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e32 v0.l, v0.l384; GFX1250-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]385;386; GFX1250-SDAG-FAKE16-LABEL: v_exp2_bf16_fast:387; GFX1250-SDAG-FAKE16:       ; %bb.0:388; GFX1250-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0389; GFX1250-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0390; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e32 v0, v0391; GFX1250-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]392  %result = call fast bfloat @llvm.exp2.bf16(bfloat %in)393  ret bfloat %result394}395 396define <2 x bfloat> @v_exp2_v2bf16(<2 x bfloat> %in) {397; GFX1200-SDAG-TRUE16-LABEL: v_exp2_v2bf16:398; GFX1200-SDAG-TRUE16:       ; %bb.0:399; GFX1200-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0400; GFX1200-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x0401; GFX1200-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x0402; GFX1200-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x0403; GFX1200-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0404; GFX1200-SDAG-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 16, v0405; GFX1200-SDAG-TRUE16-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0406; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)407; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e64 s0, 0xc2fc0000, v0408; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_sdst(0)409; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0x42800000, s0410; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)411; GFX1200-SDAG-TRUE16-NEXT:    v_add_f32_e32 v0, v0, v3412; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v1413; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0xffffffc0, s0414; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v0, v0415; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)416; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo417; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(TRANS32_DEP_1)418; GFX1200-SDAG-TRUE16-NEXT:    v_add_f32_e32 v1, v1, v2419; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0xffffffc0, vcc_lo420; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v0, v0, v3421; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)422; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v1, v1423; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v3, v0, 16, 1424; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v5, 0x400000, v0425; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(TRANS32_DEP_1)426; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff427; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v1, v1, v2428; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)429; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v2, v1, 16, 1430; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v4, 0x400000, v1431; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1432; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff433; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)434; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_3)435; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v1, v2, v4, vcc_lo436; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0437; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)438; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo439; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v0.l, v1.h440; GFX1200-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]441;442; GFX1200-SDAG-FAKE16-LABEL: v_exp2_v2bf16:443; GFX1200-SDAG-FAKE16:       ; %bb.0:444; GFX1200-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0445; GFX1200-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0446; GFX1200-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0447; GFX1200-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x0448; GFX1200-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0449; GFX1200-SDAG-FAKE16-NEXT:    v_lshlrev_b32_e32 v1, 16, v0450; GFX1200-SDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0451; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)452; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e64 s0, 0xc2fc0000, v0453; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_sdst(0)454; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0x42800000, s0455; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)456; GFX1200-SDAG-FAKE16-NEXT:    v_add_f32_e32 v0, v0, v3457; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v1458; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0xffffffc0, s0459; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v0, v0460; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)461; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo462; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(TRANS32_DEP_1)463; GFX1200-SDAG-FAKE16-NEXT:    v_add_f32_e32 v1, v1, v2464; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0xffffffc0, vcc_lo465; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v0, v0, v3466; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)467; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v1, v1468; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v3, v0, 16, 1469; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v5, 0x400000, v0470; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(TRANS32_DEP_1)471; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff472; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v1, v1, v2473; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)474; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v2, v1, 16, 1475; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v4, 0x400000, v1476; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1477; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff478; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)479; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)480; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e32 v1, v2, v4, vcc_lo481; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0482; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)483; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo484; GFX1200-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302485; GFX1200-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]486;487; GFX1250-SDAG-TRUE16-LABEL: v_exp2_v2bf16:488; GFX1250-SDAG-TRUE16:       ; %bb.0:489; GFX1250-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0490; GFX1250-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0491; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e32 v0.h, v0.h492; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e32 v0.l, v0.l493; GFX1250-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]494;495; GFX1250-SDAG-FAKE16-LABEL: v_exp2_v2bf16:496; GFX1250-SDAG-FAKE16:       ; %bb.0:497; GFX1250-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0498; GFX1250-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0499; GFX1250-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0500; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e32 v0, v0501; GFX1250-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(TRANS32_DEP_1)502; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e32 v1, v1503; GFX1250-SDAG-FAKE16-NEXT:    v_nop504; GFX1250-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100505; GFX1250-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]506  %result = call <2 x bfloat> @llvm.exp2.v2bf16(<2 x bfloat> %in)507  ret <2 x bfloat> %result508}509 510define <2 x bfloat> @v_exp2_fabs_v2bf16(<2 x bfloat> %in) {511; GFX1200-SDAG-TRUE16-LABEL: v_exp2_fabs_v2bf16:512; GFX1200-SDAG-TRUE16:       ; %bb.0:513; GFX1200-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0514; GFX1200-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x0515; GFX1200-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x0516; GFX1200-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x0517; GFX1200-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0518; GFX1200-SDAG-TRUE16-NEXT:    v_and_b32_e32 v1, 0x7fff, v0519; GFX1200-SDAG-TRUE16-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0520; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)521; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e64 s0, 0xc2fc0000, v0522; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_sdst(0)523; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0x42800000, s0524; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)525; GFX1200-SDAG-TRUE16-NEXT:    v_dual_add_f32 v0, v0, v3 :: v_dual_lshlrev_b32 v1, 16, v1526; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0xffffffc0, s0527; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v0, v0528; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(TRANS32_DEP_1)529; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v1530; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)531; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo532; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v0, v0, v3533; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)534; GFX1200-SDAG-TRUE16-NEXT:    v_add_f32_e32 v1, v1, v2535; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0xffffffc0, vcc_lo536; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v3, v0, 16, 1537; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)538; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v1, v1539; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v5, 0x400000, v0540; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff541; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(TRANS32_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)542; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v1, v1, v2543; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v2, v1, 16, 1544; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v4, 0x400000, v1545; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1546; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)547; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff548; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)549; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v1, v2, v4, vcc_lo550; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0551; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)552; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo553; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3)554; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v0.l, v1.h555; GFX1200-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]556;557; GFX1200-SDAG-FAKE16-LABEL: v_exp2_fabs_v2bf16:558; GFX1200-SDAG-FAKE16:       ; %bb.0:559; GFX1200-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0560; GFX1200-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0561; GFX1200-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0562; GFX1200-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x0563; GFX1200-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0564; GFX1200-SDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff, v0565; GFX1200-SDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0566; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)567; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0568; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)569; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo570; GFX1200-SDAG-FAKE16-NEXT:    v_add_f32_e32 v0, v0, v2571; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0xffffffc0, vcc_lo572; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(TRANS32_DEP_1)573; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v0, v0574; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v0, v0, v2575; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)576; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v2, v0, 16, 1577; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v4, 0x400000, v0578; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0579; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff580; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)581; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)582; GFX1200-SDAG-FAKE16-NEXT:    v_dual_cndmask_b32 v0, v2, v4 :: v_dual_lshlrev_b32 v1, 16, v1583; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e64 s0, 0xc2fc0000, v1584; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_sdst(0)585; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)586; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0x42800000, s0587; GFX1200-SDAG-FAKE16-NEXT:    v_add_f32_e32 v1, v1, v3588; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0xffffffc0, s0589; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(TRANS32_DEP_1)590; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v1, v1591; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v1, v1, v3592; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)593; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v3, v1, 16, 1594; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v5, 0x400000, v1595; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1596; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff597; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)598; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)599; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc_lo600; GFX1200-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302601; GFX1200-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]602;603; GFX1250-SDAG-TRUE16-LABEL: v_exp2_fabs_v2bf16:604; GFX1250-SDAG-TRUE16:       ; %bb.0:605; GFX1250-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0606; GFX1250-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0607; GFX1250-SDAG-TRUE16-NEXT:    v_and_b32_e32 v1, 0x7fff7fff, v0608; GFX1250-SDAG-TRUE16-NEXT:    v_bfe_u32 v2, v0, 16, 15609; GFX1250-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)610; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e32 v0.l, v1.l611; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e32 v0.h, v2.l612; GFX1250-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]613;614; GFX1250-SDAG-FAKE16-LABEL: v_exp2_fabs_v2bf16:615; GFX1250-SDAG-FAKE16:       ; %bb.0:616; GFX1250-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0617; GFX1250-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0618; GFX1250-SDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff7fff, v0619; GFX1250-SDAG-FAKE16-NEXT:    v_bfe_u32 v0, v0, 16, 15620; GFX1250-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)621; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e32 v1, v1622; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e32 v0, v0623; GFX1250-SDAG-FAKE16-NEXT:    v_nop624; GFX1250-SDAG-FAKE16-NEXT:    s_delay_alu instid0(TRANS32_DEP_1)625; GFX1250-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v0, v1, 0x5040100626; GFX1250-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]627  %fabs = call <2 x bfloat> @llvm.fabs.v2bf16(<2 x bfloat> %in)628  %result = call <2 x bfloat> @llvm.exp2.v2bf16(<2 x bfloat> %fabs)629  ret <2 x bfloat> %result630}631 632define <2 x bfloat> @v_exp2_fneg_fabs_v2bf16(<2 x bfloat> %in) {633; GFX1200-SDAG-TRUE16-LABEL: v_exp2_fneg_fabs_v2bf16:634; GFX1200-SDAG-TRUE16:       ; %bb.0:635; GFX1200-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0636; GFX1200-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x0637; GFX1200-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x0638; GFX1200-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x0639; GFX1200-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0640; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v1, v0, 16, 15641; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v2.l, 0642; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)643; GFX1200-SDAG-TRUE16-NEXT:    v_xor_b16 v2.h, 0x8000, v1.l644; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v2645; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)646; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42800000, vcc_lo647; GFX1200-SDAG-TRUE16-NEXT:    v_and_b32_e32 v0, 0x7fff7fff, v0648; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0xffffffc0, vcc_lo649; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)650; GFX1200-SDAG-TRUE16-NEXT:    v_add_f32_e32 v1, v2, v1651; GFX1200-SDAG-TRUE16-NEXT:    v_xor_b16 v2.h, 0x8000, v0.l652; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)653; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v1, v1654; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e64 s0, 0xc2fc0000, v2655; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_sdst(0)656; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(TRANS32_DEP_1)657; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 0x42800000, s0658; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v1, v1, v3659; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)660; GFX1200-SDAG-TRUE16-NEXT:    v_add_f32_e32 v0, v2, v0661; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0xffffffc0, s0662; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v3, v1, 16, 1663; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)664; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v0, v0665; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v5, 0x400000, v1666; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff667; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(TRANS32_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)668; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v0, v0, v2669; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v2, v0, 16, 1670; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v4, 0x400000, v0671; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0672; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)673; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff674; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)675; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc_lo676; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1677; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)678; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo679; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3)680; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v0.l, v2.h681; GFX1200-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]682;683; GFX1200-SDAG-FAKE16-LABEL: v_exp2_fneg_fabs_v2bf16:684; GFX1200-SDAG-FAKE16:       ; %bb.0:685; GFX1200-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0686; GFX1200-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0687; GFX1200-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0688; GFX1200-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x0689; GFX1200-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0690; GFX1200-SDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff7fff, v0691; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v0, v0, 16, 15692; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)693; GFX1200-SDAG-FAKE16-NEXT:    v_xor_b32_e32 v0, 0x8000, v0694; GFX1200-SDAG-FAKE16-NEXT:    v_lshlrev_b32_e32 v0, 16, v0695; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)696; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e64 s0, 0xc2fc0000, v0697; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_sdst(0)698; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0x42800000, s0699; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)700; GFX1200-SDAG-FAKE16-NEXT:    v_add_f32_e32 v0, v0, v3701; GFX1200-SDAG-FAKE16-NEXT:    v_xor_b32_e32 v1, 0x8000, v1702; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0xffffffc0, s0703; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v0, v0704; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)705; GFX1200-SDAG-FAKE16-NEXT:    v_lshlrev_b32_e32 v1, 16, v1706; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v1707; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(TRANS32_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)708; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v0, v0, v3709; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)710; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo711; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v3, v0, 16, 1712; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)713; GFX1200-SDAG-FAKE16-NEXT:    v_add_f32_e32 v1, v1, v2714; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0xffffffc0, vcc_lo715; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v5, 0x400000, v0716; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff717; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(TRANS32_DEP_1)718; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v1, v1719; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v1, v1, v2720; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)721; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v2, v1, 16, 1722; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v4, 0x400000, v1723; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1724; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff725; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)726; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)727; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e32 v1, v2, v4, vcc_lo728; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0729; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)730; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo731; GFX1200-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302732; GFX1200-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]733;734; GFX1250-SDAG-TRUE16-LABEL: v_exp2_fneg_fabs_v2bf16:735; GFX1250-SDAG-TRUE16:       ; %bb.0:736; GFX1250-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0737; GFX1250-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0738; GFX1250-SDAG-TRUE16-NEXT:    v_and_b32_e32 v1, 0x7fff7fff, v0739; GFX1250-SDAG-TRUE16-NEXT:    v_bfe_u32 v2, v0, 16, 15740; GFX1250-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)741; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e64 v0.l, -v1.l742; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e64 v0.h, -v2.l743; GFX1250-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]744;745; GFX1250-SDAG-FAKE16-LABEL: v_exp2_fneg_fabs_v2bf16:746; GFX1250-SDAG-FAKE16:       ; %bb.0:747; GFX1250-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0748; GFX1250-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0749; GFX1250-SDAG-FAKE16-NEXT:    v_and_b32_e32 v1, 0x7fff7fff, v0750; GFX1250-SDAG-FAKE16-NEXT:    v_bfe_u32 v0, v0, 16, 15751; GFX1250-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)752; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e64 v1, -v1753; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e64 v0, -v0754; GFX1250-SDAG-FAKE16-NEXT:    v_nop755; GFX1250-SDAG-FAKE16-NEXT:    s_delay_alu instid0(TRANS32_DEP_1)756; GFX1250-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v0, v1, 0x5040100757; GFX1250-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]758  %fabs = call <2 x bfloat> @llvm.fabs.v2bf16(<2 x bfloat> %in)759  %fneg.fabs = fneg <2 x bfloat> %fabs760  %result = call <2 x bfloat> @llvm.exp2.v2bf16(<2 x bfloat> %fneg.fabs)761  ret <2 x bfloat> %result762}763 764define <2 x bfloat> @v_exp2_fneg_v2bf16(<2 x bfloat> %in) {765; GFX1200-SDAG-TRUE16-LABEL: v_exp2_fneg_v2bf16:766; GFX1200-SDAG-TRUE16:       ; %bb.0:767; GFX1200-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0768; GFX1200-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x0769; GFX1200-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x0770; GFX1200-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x0771; GFX1200-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0772; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v1.l, 0773; GFX1200-SDAG-TRUE16-NEXT:    v_xor_b16 v1.h, 0x8000, v0.l774; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)775; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v1776; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)777; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo778; GFX1200-SDAG-TRUE16-NEXT:    v_add_f32_e32 v2, v1, v2779; GFX1200-SDAG-TRUE16-NEXT:    v_xor_b16 v1.h, 0x8000, v0.h780; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)781; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e64 s0, 0xc2fc0000, v1782; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_sdst(0)783; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v0, 0, 0x42800000, s0784; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0xffffffc0, s0785; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)786; GFX1200-SDAG-TRUE16-NEXT:    v_add_f32_e32 v0, v1, v0787; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v1, v2788; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0xffffffc0, vcc_lo789; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v0, v0790; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(TRANS32_DEP_2) | instid1(VALU_DEP_1)791; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v1, v1, v2792; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(TRANS32_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)793; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v0, v0, v3794; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v2, v1, 16, 1795; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v4, 0x400000, v1796; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1797; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)798; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v3, v0, 16, 1799; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff800; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v5, 0x400000, v0801; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)802; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff803; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)804; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v1, v2, v4, vcc_lo805; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0806; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)807; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo808; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3)809; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v0.l, v1.h810; GFX1200-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]811;812; GFX1200-SDAG-FAKE16-LABEL: v_exp2_fneg_v2bf16:813; GFX1200-SDAG-FAKE16:       ; %bb.0:814; GFX1200-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0815; GFX1200-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0816; GFX1200-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0817; GFX1200-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x0818; GFX1200-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0819; GFX1200-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0820; GFX1200-SDAG-FAKE16-NEXT:    v_xor_b32_e32 v0, 0x8000, v0821; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)822; GFX1200-SDAG-FAKE16-NEXT:    v_xor_b32_e32 v1, 0x8000, v1823; GFX1200-SDAG-FAKE16-NEXT:    v_lshlrev_b32_e32 v1, 16, v1824; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)825; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e64 s0, 0xc2fc0000, v1826; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_sdst(0)827; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0x42800000, s0828; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)829; GFX1200-SDAG-FAKE16-NEXT:    v_dual_add_f32 v1, v1, v3 :: v_dual_lshlrev_b32 v0, 16, v0830; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0831; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0xffffffc0, s0832; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_1)833; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v1, v1834; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)835; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo836; GFX1200-SDAG-FAKE16-NEXT:    v_add_f32_e32 v0, v0, v2837; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0xffffffc0, vcc_lo838; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(TRANS32_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)839; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v1, v1, v3840; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v0, v0841; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)842; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v3, v1, 16, 1843; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v5, 0x400000, v1844; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff845; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(TRANS32_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)846; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v0, v0, v2847; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v2, v0, 16, 1848; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v4, 0x400000, v0849; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0850; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)851; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff852; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)853; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc_lo854; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1855; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)856; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc_lo857; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)858; GFX1200-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302859; GFX1200-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]860;861; GFX1250-SDAG-TRUE16-LABEL: v_exp2_fneg_v2bf16:862; GFX1250-SDAG-TRUE16:       ; %bb.0:863; GFX1250-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0864; GFX1250-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0865; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e64 v0.h, -v0.h866; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e64 v0.l, -v0.l867; GFX1250-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]868;869; GFX1250-SDAG-FAKE16-LABEL: v_exp2_fneg_v2bf16:870; GFX1250-SDAG-FAKE16:       ; %bb.0:871; GFX1250-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0872; GFX1250-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0873; GFX1250-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0874; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e64 v0, -v0875; GFX1250-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(TRANS32_DEP_1)876; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e64 v1, -v1877; GFX1250-SDAG-FAKE16-NEXT:    v_nop878; GFX1250-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100879; GFX1250-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]880  %fneg = fneg <2 x bfloat> %in881  %result = call <2 x bfloat> @llvm.exp2.v2bf16(<2 x bfloat> %fneg)882  ret <2 x bfloat> %result883}884 885define <2 x bfloat> @v_exp2_v2bf16_fast(<2 x bfloat> %in) {886; GFX1200-SDAG-TRUE16-LABEL: v_exp2_v2bf16_fast:887; GFX1200-SDAG-TRUE16:       ; %bb.0:888; GFX1200-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0889; GFX1200-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x0890; GFX1200-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x0891; GFX1200-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x0892; GFX1200-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0893; GFX1200-SDAG-TRUE16-NEXT:    v_lshlrev_b32_e32 v1, 16, v0894; GFX1200-SDAG-TRUE16-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0895; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)896; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e64 s0, 0xc2fc0000, v0897; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_sdst(0)898; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0x42800000, s0899; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)900; GFX1200-SDAG-TRUE16-NEXT:    v_add_f32_e32 v0, v0, v3901; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v1902; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0xffffffc0, s0903; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v0, v0904; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)905; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo906; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(TRANS32_DEP_1)907; GFX1200-SDAG-TRUE16-NEXT:    v_add_f32_e32 v1, v1, v2908; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0xffffffc0, vcc_lo909; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v0, v0, v3910; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)911; GFX1200-SDAG-TRUE16-NEXT:    v_exp_f32_e32 v1, v1912; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v3, v0, 16, 1913; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v5, 0x400000, v0914; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(TRANS32_DEP_1)915; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff916; GFX1200-SDAG-TRUE16-NEXT:    v_ldexp_f32 v1, v1, v2917; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)918; GFX1200-SDAG-TRUE16-NEXT:    v_bfe_u32 v2, v1, 16, 1919; GFX1200-SDAG-TRUE16-NEXT:    v_or_b32_e32 v4, 0x400000, v1920; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1921; GFX1200-SDAG-TRUE16-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff922; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)923; GFX1200-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_3)924; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v1, v2, v4, vcc_lo925; GFX1200-SDAG-TRUE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0926; GFX1200-SDAG-TRUE16-NEXT:    s_wait_alu depctr_va_vcc(0)927; GFX1200-SDAG-TRUE16-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo928; GFX1200-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v0.l, v1.h929; GFX1200-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]930;931; GFX1200-SDAG-FAKE16-LABEL: v_exp2_v2bf16_fast:932; GFX1200-SDAG-FAKE16:       ; %bb.0:933; GFX1200-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0934; GFX1200-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0935; GFX1200-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0936; GFX1200-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x0937; GFX1200-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0938; GFX1200-SDAG-FAKE16-NEXT:    v_lshlrev_b32_e32 v1, 16, v0939; GFX1200-SDAG-FAKE16-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0940; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)941; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e64 s0, 0xc2fc0000, v0942; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_sdst(0)943; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0x42800000, s0944; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)945; GFX1200-SDAG-FAKE16-NEXT:    v_add_f32_e32 v0, v0, v3946; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v1947; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v3, 0, 0xffffffc0, s0948; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v0, v0949; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)950; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo951; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(TRANS32_DEP_1)952; GFX1200-SDAG-FAKE16-NEXT:    v_add_f32_e32 v1, v1, v2953; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e64 v2, 0, 0xffffffc0, vcc_lo954; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v0, v0, v3955; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)956; GFX1200-SDAG-FAKE16-NEXT:    v_exp_f32_e32 v1, v1957; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v3, v0, 16, 1958; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v5, 0x400000, v0959; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(TRANS32_DEP_1)960; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff961; GFX1200-SDAG-FAKE16-NEXT:    v_ldexp_f32 v1, v1, v2962; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)963; GFX1200-SDAG-FAKE16-NEXT:    v_bfe_u32 v2, v1, 16, 1964; GFX1200-SDAG-FAKE16-NEXT:    v_or_b32_e32 v4, 0x400000, v1965; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1966; GFX1200-SDAG-FAKE16-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff967; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)968; GFX1200-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_1)969; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e32 v1, v2, v4, vcc_lo970; GFX1200-SDAG-FAKE16-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0971; GFX1200-SDAG-FAKE16-NEXT:    s_wait_alu depctr_va_vcc(0)972; GFX1200-SDAG-FAKE16-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo973; GFX1200-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302974; GFX1200-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]975;976; GFX1250-SDAG-TRUE16-LABEL: v_exp2_v2bf16_fast:977; GFX1250-SDAG-TRUE16:       ; %bb.0:978; GFX1250-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0979; GFX1250-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0980; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e32 v0.h, v0.h981; GFX1250-SDAG-TRUE16-NEXT:    v_exp_bf16_e32 v0.l, v0.l982; GFX1250-SDAG-TRUE16-NEXT:    s_set_pc_i64 s[30:31]983;984; GFX1250-SDAG-FAKE16-LABEL: v_exp2_v2bf16_fast:985; GFX1250-SDAG-FAKE16:       ; %bb.0:986; GFX1250-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0987; GFX1250-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0988; GFX1250-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0989; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e32 v0, v0990; GFX1250-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(TRANS32_DEP_1)991; GFX1250-SDAG-FAKE16-NEXT:    v_exp_bf16_e32 v1, v1992; GFX1250-SDAG-FAKE16-NEXT:    v_nop993; GFX1250-SDAG-FAKE16-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100994; GFX1250-SDAG-FAKE16-NEXT:    s_set_pc_i64 s[30:31]995  %result = call fast <2 x bfloat> @llvm.exp2.v2bf16(<2 x bfloat> %in)996  ret <2 x bfloat> %result997}998 999declare bfloat @llvm.exp2.bf16(bfloat) #01000declare <2 x bfloat> @llvm.exp2.v2bf16(<2 x bfloat>) #01001declare bfloat @llvm.fabs.bf16(bfloat) #01002declare <2 x bfloat> @llvm.fabs.v2bf16(<2 x bfloat>) #01003 1004attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }1005