brintos

brintos / llvm-project-archived public Read only

0
0
Text · 95.1 KiB · eed67d9 Raw
2111 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,GFX6,GFX6-SDAG %s3; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GCN,GFX8,GFX8-SDAG %s4; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9,GFX9-SDAG %s5; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GCN,GFX11,GFX11-SDAG,GFX11-SDAG-TRUE16 %s6; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GCN,GFX11,GFX11-SDAG,GFX11-SDAG-FAKE16 %s7; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GCN,GFX12,GFX12-SDAG,GFX12-SDAG-TRUE16 %s8; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GCN,GFX12,GFX12-SDAG,GFX12-SDAG-FAKE16 %s9 10; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,GFX6,GFX6-GISEL %s11; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GCN,GFX8,GFX8-GISEL %s12; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9,GFX9-GISEL %s13; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GCN,GFX11,GFX11-GISEL,GFX11-GISEL-TRUE16 %s14; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GCN,GFX11,GFX11-GISEL,GFX11-GISEL-FAKE16 %s15; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GCN,GFX12,GFX12-GISEL,GFX12-GISEL-TRUE16 %s16; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GCN,GFX12,GFX12-GISEL,GFX12-GISEL-FAKE16 %s17 18define { half, i32 } @test_frexp_f16_i32(half %a) {19; GFX6-SDAG-LABEL: test_frexp_f16_i32:20; GFX6-SDAG:       ; %bb.0:21; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)22; GFX6-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v023; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f80000024; GFX6-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v025; GFX6-SDAG-NEXT:    v_frexp_mant_f32_e32 v1, v026; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v2, v027; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s428; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc29; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v2, vcc30; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]31;32; GFX8-LABEL: test_frexp_f16_i32:33; GFX8:       ; %bb.0:34; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)35; GFX8-NEXT:    v_frexp_mant_f16_e32 v2, v036; GFX8-NEXT:    v_frexp_exp_i16_f16_e32 v0, v037; GFX8-NEXT:    v_bfe_i32 v1, v0, 0, 1638; GFX8-NEXT:    v_mov_b32_e32 v0, v239; GFX8-NEXT:    s_setpc_b64 s[30:31]40;41; GFX9-LABEL: test_frexp_f16_i32:42; GFX9:       ; %bb.0:43; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; GFX9-NEXT:    v_frexp_mant_f16_e32 v2, v045; GFX9-NEXT:    v_frexp_exp_i16_f16_e32 v0, v046; GFX9-NEXT:    v_bfe_i32 v1, v0, 0, 1647; GFX9-NEXT:    v_mov_b32_e32 v0, v248; GFX9-NEXT:    s_setpc_b64 s[30:31]49;50; GFX11-SDAG-TRUE16-LABEL: test_frexp_f16_i32:51; GFX11-SDAG-TRUE16:       ; %bb.0:52; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)53; GFX11-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v1.l, v0.l54; GFX11-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l55; GFX11-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)56; GFX11-SDAG-TRUE16-NEXT:    v_bfe_i32 v1, v1, 0, 1657; GFX11-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]58;59; GFX11-SDAG-FAKE16-LABEL: test_frexp_f16_i32:60; GFX11-SDAG-FAKE16:       ; %bb.0:61; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)62; GFX11-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v1, v063; GFX11-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v064; GFX11-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)65; GFX11-SDAG-FAKE16-NEXT:    v_bfe_i32 v1, v1, 0, 1666; GFX11-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]67;68; GFX12-SDAG-TRUE16-LABEL: test_frexp_f16_i32:69; GFX12-SDAG-TRUE16:       ; %bb.0:70; GFX12-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x071; GFX12-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x072; GFX12-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x073; GFX12-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x074; GFX12-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x075; GFX12-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v1.l, v0.l76; GFX12-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l77; GFX12-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)78; GFX12-SDAG-TRUE16-NEXT:    v_bfe_i32 v1, v1, 0, 1679; GFX12-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]80;81; GFX12-SDAG-FAKE16-LABEL: test_frexp_f16_i32:82; GFX12-SDAG-FAKE16:       ; %bb.0:83; GFX12-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x084; GFX12-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x085; GFX12-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x086; GFX12-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x087; GFX12-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x088; GFX12-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v1, v089; GFX12-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v090; GFX12-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)91; GFX12-SDAG-FAKE16-NEXT:    v_bfe_i32 v1, v1, 0, 1692; GFX12-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]93;94; GFX6-GISEL-LABEL: test_frexp_f16_i32:95; GFX6-GISEL:       ; %bb.0:96; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)97; GFX6-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v098; GFX6-GISEL-NEXT:    v_mov_b32_e32 v1, 0x7f80000099; GFX6-GISEL-NEXT:    v_frexp_mant_f32_e32 v2, v0100; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v1101; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v3, v0102; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc103; GFX6-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0104; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v3, vcc105; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]106;107; GFX11-GISEL-TRUE16-LABEL: test_frexp_f16_i32:108; GFX11-GISEL-TRUE16:       ; %bb.0:109; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)110; GFX11-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v1.l, v0.l111; GFX11-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l112; GFX11-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)113; GFX11-GISEL-TRUE16-NEXT:    v_bfe_i32 v1, v1, 0, 16114; GFX11-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]115;116; GFX11-GISEL-FAKE16-LABEL: test_frexp_f16_i32:117; GFX11-GISEL-FAKE16:       ; %bb.0:118; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)119; GFX11-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v1, v0120; GFX11-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v0121; GFX11-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)122; GFX11-GISEL-FAKE16-NEXT:    v_bfe_i32 v1, v1, 0, 16123; GFX11-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]124;125; GFX12-GISEL-TRUE16-LABEL: test_frexp_f16_i32:126; GFX12-GISEL-TRUE16:       ; %bb.0:127; GFX12-GISEL-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0128; GFX12-GISEL-TRUE16-NEXT:    s_wait_expcnt 0x0129; GFX12-GISEL-TRUE16-NEXT:    s_wait_samplecnt 0x0130; GFX12-GISEL-TRUE16-NEXT:    s_wait_bvhcnt 0x0131; GFX12-GISEL-TRUE16-NEXT:    s_wait_kmcnt 0x0132; GFX12-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v1.l, v0.l133; GFX12-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l134; GFX12-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)135; GFX12-GISEL-TRUE16-NEXT:    v_bfe_i32 v1, v1, 0, 16136; GFX12-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]137;138; GFX12-GISEL-FAKE16-LABEL: test_frexp_f16_i32:139; GFX12-GISEL-FAKE16:       ; %bb.0:140; GFX12-GISEL-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0141; GFX12-GISEL-FAKE16-NEXT:    s_wait_expcnt 0x0142; GFX12-GISEL-FAKE16-NEXT:    s_wait_samplecnt 0x0143; GFX12-GISEL-FAKE16-NEXT:    s_wait_bvhcnt 0x0144; GFX12-GISEL-FAKE16-NEXT:    s_wait_kmcnt 0x0145; GFX12-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v1, v0146; GFX12-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v0147; GFX12-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)148; GFX12-GISEL-FAKE16-NEXT:    v_bfe_i32 v1, v1, 0, 16149; GFX12-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]150  %result = call { half, i32 } @llvm.frexp.f16.i32(half %a)151  ret { half, i32 } %result152}153 154define half @test_frexp_f16_i32_only_use_fract(half %a) {155; GFX6-SDAG-LABEL: test_frexp_f16_i32_only_use_fract:156; GFX6-SDAG:       ; %bb.0:157; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)158; GFX6-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0159; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000160; GFX6-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0161; GFX6-SDAG-NEXT:    v_frexp_mant_f32_e32 v1, v0162; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4163; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc164; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]165;166; GFX8-LABEL: test_frexp_f16_i32_only_use_fract:167; GFX8:       ; %bb.0:168; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)169; GFX8-NEXT:    v_frexp_mant_f16_e32 v0, v0170; GFX8-NEXT:    s_setpc_b64 s[30:31]171;172; GFX9-LABEL: test_frexp_f16_i32_only_use_fract:173; GFX9:       ; %bb.0:174; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)175; GFX9-NEXT:    v_frexp_mant_f16_e32 v0, v0176; GFX9-NEXT:    s_setpc_b64 s[30:31]177;178; GFX11-SDAG-TRUE16-LABEL: test_frexp_f16_i32_only_use_fract:179; GFX11-SDAG-TRUE16:       ; %bb.0:180; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)181; GFX11-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l182; GFX11-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]183;184; GFX11-SDAG-FAKE16-LABEL: test_frexp_f16_i32_only_use_fract:185; GFX11-SDAG-FAKE16:       ; %bb.0:186; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)187; GFX11-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v0188; GFX11-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]189;190; GFX12-SDAG-TRUE16-LABEL: test_frexp_f16_i32_only_use_fract:191; GFX12-SDAG-TRUE16:       ; %bb.0:192; GFX12-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0193; GFX12-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x0194; GFX12-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x0195; GFX12-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x0196; GFX12-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0197; GFX12-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l198; GFX12-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]199;200; GFX12-SDAG-FAKE16-LABEL: test_frexp_f16_i32_only_use_fract:201; GFX12-SDAG-FAKE16:       ; %bb.0:202; GFX12-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0203; GFX12-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0204; GFX12-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0205; GFX12-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x0206; GFX12-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0207; GFX12-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v0208; GFX12-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]209;210; GFX6-GISEL-LABEL: test_frexp_f16_i32_only_use_fract:211; GFX6-GISEL:       ; %bb.0:212; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)213; GFX6-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0214; GFX6-GISEL-NEXT:    v_mov_b32_e32 v1, 0x7f800000215; GFX6-GISEL-NEXT:    v_frexp_mant_f32_e32 v2, v0216; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v1217; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc218; GFX6-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0219; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]220;221; GFX11-GISEL-TRUE16-LABEL: test_frexp_f16_i32_only_use_fract:222; GFX11-GISEL-TRUE16:       ; %bb.0:223; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)224; GFX11-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l225; GFX11-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]226;227; GFX11-GISEL-FAKE16-LABEL: test_frexp_f16_i32_only_use_fract:228; GFX11-GISEL-FAKE16:       ; %bb.0:229; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)230; GFX11-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v0231; GFX11-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]232;233; GFX12-GISEL-TRUE16-LABEL: test_frexp_f16_i32_only_use_fract:234; GFX12-GISEL-TRUE16:       ; %bb.0:235; GFX12-GISEL-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0236; GFX12-GISEL-TRUE16-NEXT:    s_wait_expcnt 0x0237; GFX12-GISEL-TRUE16-NEXT:    s_wait_samplecnt 0x0238; GFX12-GISEL-TRUE16-NEXT:    s_wait_bvhcnt 0x0239; GFX12-GISEL-TRUE16-NEXT:    s_wait_kmcnt 0x0240; GFX12-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l241; GFX12-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]242;243; GFX12-GISEL-FAKE16-LABEL: test_frexp_f16_i32_only_use_fract:244; GFX12-GISEL-FAKE16:       ; %bb.0:245; GFX12-GISEL-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0246; GFX12-GISEL-FAKE16-NEXT:    s_wait_expcnt 0x0247; GFX12-GISEL-FAKE16-NEXT:    s_wait_samplecnt 0x0248; GFX12-GISEL-FAKE16-NEXT:    s_wait_bvhcnt 0x0249; GFX12-GISEL-FAKE16-NEXT:    s_wait_kmcnt 0x0250; GFX12-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v0251; GFX12-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]252  %result = call { half, i32 } @llvm.frexp.f16.i32(half %a)253  %result.0 = extractvalue { half, i32 } %result, 0254  ret half %result.0255}256 257define i32 @test_frexp_f16_i32_only_use_exp(half %a) {258; GFX6-SDAG-LABEL: test_frexp_f16_i32_only_use_exp:259; GFX6-SDAG:       ; %bb.0:260; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)261; GFX6-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0262; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000263; GFX6-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0264; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v1, v0265; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4266; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc267; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]268;269; GFX8-LABEL: test_frexp_f16_i32_only_use_exp:270; GFX8:       ; %bb.0:271; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)272; GFX8-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0273; GFX8-NEXT:    v_bfe_i32 v0, v0, 0, 16274; GFX8-NEXT:    s_setpc_b64 s[30:31]275;276; GFX9-LABEL: test_frexp_f16_i32_only_use_exp:277; GFX9:       ; %bb.0:278; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)279; GFX9-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0280; GFX9-NEXT:    v_bfe_i32 v0, v0, 0, 16281; GFX9-NEXT:    s_setpc_b64 s[30:31]282;283; GFX11-SDAG-TRUE16-LABEL: test_frexp_f16_i32_only_use_exp:284; GFX11-SDAG-TRUE16:       ; %bb.0:285; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)286; GFX11-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v0.l, v0.l287; GFX11-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)288; GFX11-SDAG-TRUE16-NEXT:    v_bfe_i32 v0, v0, 0, 16289; GFX11-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]290;291; GFX11-SDAG-FAKE16-LABEL: test_frexp_f16_i32_only_use_exp:292; GFX11-SDAG-FAKE16:       ; %bb.0:293; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)294; GFX11-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0295; GFX11-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)296; GFX11-SDAG-FAKE16-NEXT:    v_bfe_i32 v0, v0, 0, 16297; GFX11-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]298;299; GFX12-SDAG-TRUE16-LABEL: test_frexp_f16_i32_only_use_exp:300; GFX12-SDAG-TRUE16:       ; %bb.0:301; GFX12-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0302; GFX12-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x0303; GFX12-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x0304; GFX12-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x0305; GFX12-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0306; GFX12-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v0.l, v0.l307; GFX12-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)308; GFX12-SDAG-TRUE16-NEXT:    v_bfe_i32 v0, v0, 0, 16309; GFX12-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]310;311; GFX12-SDAG-FAKE16-LABEL: test_frexp_f16_i32_only_use_exp:312; GFX12-SDAG-FAKE16:       ; %bb.0:313; GFX12-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0314; GFX12-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0315; GFX12-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0316; GFX12-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x0317; GFX12-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0318; GFX12-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0319; GFX12-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)320; GFX12-SDAG-FAKE16-NEXT:    v_bfe_i32 v0, v0, 0, 16321; GFX12-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]322;323; GFX6-GISEL-LABEL: test_frexp_f16_i32_only_use_exp:324; GFX6-GISEL:       ; %bb.0:325; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)326; GFX6-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0327; GFX6-GISEL-NEXT:    v_mov_b32_e32 v1, 0x7f800000328; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v2, v0329; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v1330; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v2, vcc331; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]332;333; GFX11-GISEL-TRUE16-LABEL: test_frexp_f16_i32_only_use_exp:334; GFX11-GISEL-TRUE16:       ; %bb.0:335; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)336; GFX11-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v0.l, v0.l337; GFX11-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)338; GFX11-GISEL-TRUE16-NEXT:    v_bfe_i32 v0, v0, 0, 16339; GFX11-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]340;341; GFX11-GISEL-FAKE16-LABEL: test_frexp_f16_i32_only_use_exp:342; GFX11-GISEL-FAKE16:       ; %bb.0:343; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)344; GFX11-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0345; GFX11-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)346; GFX11-GISEL-FAKE16-NEXT:    v_bfe_i32 v0, v0, 0, 16347; GFX11-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]348;349; GFX12-GISEL-TRUE16-LABEL: test_frexp_f16_i32_only_use_exp:350; GFX12-GISEL-TRUE16:       ; %bb.0:351; GFX12-GISEL-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0352; GFX12-GISEL-TRUE16-NEXT:    s_wait_expcnt 0x0353; GFX12-GISEL-TRUE16-NEXT:    s_wait_samplecnt 0x0354; GFX12-GISEL-TRUE16-NEXT:    s_wait_bvhcnt 0x0355; GFX12-GISEL-TRUE16-NEXT:    s_wait_kmcnt 0x0356; GFX12-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v0.l, v0.l357; GFX12-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)358; GFX12-GISEL-TRUE16-NEXT:    v_bfe_i32 v0, v0, 0, 16359; GFX12-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]360;361; GFX12-GISEL-FAKE16-LABEL: test_frexp_f16_i32_only_use_exp:362; GFX12-GISEL-FAKE16:       ; %bb.0:363; GFX12-GISEL-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0364; GFX12-GISEL-FAKE16-NEXT:    s_wait_expcnt 0x0365; GFX12-GISEL-FAKE16-NEXT:    s_wait_samplecnt 0x0366; GFX12-GISEL-FAKE16-NEXT:    s_wait_bvhcnt 0x0367; GFX12-GISEL-FAKE16-NEXT:    s_wait_kmcnt 0x0368; GFX12-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0369; GFX12-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)370; GFX12-GISEL-FAKE16-NEXT:    v_bfe_i32 v0, v0, 0, 16371; GFX12-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]372  %result = call { half, i32 } @llvm.frexp.f16.i32(half %a)373  %result.0 = extractvalue { half, i32 } %result, 1374  ret i32 %result.0375}376 377define { <2 x half>, <2 x i32> } @test_frexp_v2f16_v2i32(<2 x half> %a) {378; GFX6-SDAG-LABEL: test_frexp_v2f16_v2i32:379; GFX6-SDAG:       ; %bb.0:380; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)381; GFX6-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0382; GFX6-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1383; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000384; GFX6-SDAG-NEXT:    v_cvt_f32_f16_e32 v2, v0385; GFX6-SDAG-NEXT:    v_cvt_f32_f16_e32 v3, v1386; GFX6-SDAG-NEXT:    v_frexp_mant_f32_e32 v0, v2387; GFX6-SDAG-NEXT:    v_frexp_mant_f32_e32 v1, v3388; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v2|, s4389; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v3|, s4390; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc391; GFX6-SDAG-NEXT:    v_cndmask_b32_e64 v1, v3, v1, s[4:5]392; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v2, v2393; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v3, v3394; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc395; GFX6-SDAG-NEXT:    v_cndmask_b32_e64 v3, 0, v3, s[4:5]396; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]397;398; GFX8-SDAG-LABEL: test_frexp_v2f16_v2i32:399; GFX8-SDAG:       ; %bb.0:400; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)401; GFX8-SDAG-NEXT:    v_frexp_mant_f16_e32 v1, v0402; GFX8-SDAG-NEXT:    v_frexp_mant_f16_sdwa v2, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1403; GFX8-SDAG-NEXT:    v_or_b32_e32 v3, v1, v2404; GFX8-SDAG-NEXT:    v_frexp_exp_i16_f16_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1405; GFX8-SDAG-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0406; GFX8-SDAG-NEXT:    v_bfe_i32 v2, v1, 0, 16407; GFX8-SDAG-NEXT:    v_bfe_i32 v1, v0, 0, 16408; GFX8-SDAG-NEXT:    v_mov_b32_e32 v0, v3409; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]410;411; GFX9-SDAG-LABEL: test_frexp_v2f16_v2i32:412; GFX9-SDAG:       ; %bb.0:413; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)414; GFX9-SDAG-NEXT:    v_frexp_mant_f16_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1415; GFX9-SDAG-NEXT:    v_frexp_mant_f16_e32 v2, v0416; GFX9-SDAG-NEXT:    v_pack_b32_f16 v3, v2, v1417; GFX9-SDAG-NEXT:    v_frexp_exp_i16_f16_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1418; GFX9-SDAG-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0419; GFX9-SDAG-NEXT:    v_bfe_i32 v2, v1, 0, 16420; GFX9-SDAG-NEXT:    v_bfe_i32 v1, v0, 0, 16421; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, v3422; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]423;424; GFX11-SDAG-TRUE16-LABEL: test_frexp_v2f16_v2i32:425; GFX11-SDAG-TRUE16:       ; %bb.0:426; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)427; GFX11-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v1.l, v0.h428; GFX11-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v1.h, v0.l429; GFX11-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v2.l, v0.l430; GFX11-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v3.l, v0.h431; GFX11-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)432; GFX11-SDAG-TRUE16-NEXT:    v_pack_b32_f16 v0, v1.h, v1.l433; GFX11-SDAG-TRUE16-NEXT:    v_bfe_i32 v1, v2, 0, 16434; GFX11-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3)435; GFX11-SDAG-TRUE16-NEXT:    v_bfe_i32 v2, v3, 0, 16436; GFX11-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]437;438; GFX11-SDAG-FAKE16-LABEL: test_frexp_v2f16_v2i32:439; GFX11-SDAG-FAKE16:       ; %bb.0:440; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)441; GFX11-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0442; GFX11-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v2, v0443; GFX11-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0444; GFX11-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)445; GFX11-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v3, v1446; GFX11-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v4, v1447; GFX11-SDAG-FAKE16-NEXT:    v_bfe_i32 v1, v0, 0, 16448; GFX11-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)449; GFX11-SDAG-FAKE16-NEXT:    v_pack_b32_f16 v0, v2, v3450; GFX11-SDAG-FAKE16-NEXT:    v_bfe_i32 v2, v4, 0, 16451; GFX11-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]452;453; GFX12-SDAG-TRUE16-LABEL: test_frexp_v2f16_v2i32:454; GFX12-SDAG-TRUE16:       ; %bb.0:455; GFX12-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0456; GFX12-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x0457; GFX12-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x0458; GFX12-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x0459; GFX12-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0460; GFX12-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v1.l, v0.h461; GFX12-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v1.h, v0.l462; GFX12-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v2.l, v0.l463; GFX12-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v3.l, v0.h464; GFX12-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)465; GFX12-SDAG-TRUE16-NEXT:    v_pack_b32_f16 v0, v1.h, v1.l466; GFX12-SDAG-TRUE16-NEXT:    v_bfe_i32 v1, v2, 0, 16467; GFX12-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3)468; GFX12-SDAG-TRUE16-NEXT:    v_bfe_i32 v2, v3, 0, 16469; GFX12-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]470;471; GFX12-SDAG-FAKE16-LABEL: test_frexp_v2f16_v2i32:472; GFX12-SDAG-FAKE16:       ; %bb.0:473; GFX12-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0474; GFX12-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0475; GFX12-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0476; GFX12-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x0477; GFX12-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0478; GFX12-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0479; GFX12-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v2, v0480; GFX12-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0481; GFX12-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)482; GFX12-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v3, v1483; GFX12-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v4, v1484; GFX12-SDAG-FAKE16-NEXT:    v_bfe_i32 v1, v0, 0, 16485; GFX12-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)486; GFX12-SDAG-FAKE16-NEXT:    v_pack_b32_f16 v0, v2, v3487; GFX12-SDAG-FAKE16-NEXT:    v_bfe_i32 v2, v4, 0, 16488; GFX12-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]489;490; GFX6-GISEL-LABEL: test_frexp_v2f16_v2i32:491; GFX6-GISEL:       ; %bb.0:492; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)493; GFX6-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0494; GFX6-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1495; GFX6-GISEL-NEXT:    v_mov_b32_e32 v3, 0x7f800000496; GFX6-GISEL-NEXT:    v_frexp_mant_f32_e32 v4, v0497; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v2, v0498; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v3499; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc500; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc501; GFX6-GISEL-NEXT:    v_frexp_mant_f32_e32 v4, v1502; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v3503; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v5, v1504; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc505; GFX6-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0506; GFX6-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1507; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v3, 0, v5, vcc508; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]509;510; GFX8-GISEL-LABEL: test_frexp_v2f16_v2i32:511; GFX8-GISEL:       ; %bb.0:512; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)513; GFX8-GISEL-NEXT:    v_frexp_mant_f16_e32 v3, v0514; GFX8-GISEL-NEXT:    v_frexp_exp_i16_f16_e32 v1, v0515; GFX8-GISEL-NEXT:    v_frexp_mant_f16_sdwa v4, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1516; GFX8-GISEL-NEXT:    v_frexp_exp_i16_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1517; GFX8-GISEL-NEXT:    v_bfe_i32 v1, v1, 0, 16518; GFX8-GISEL-NEXT:    v_bfe_i32 v2, v0, 0, 16519; GFX8-GISEL-NEXT:    v_or_b32_e32 v0, v3, v4520; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]521;522; GFX9-GISEL-LABEL: test_frexp_v2f16_v2i32:523; GFX9-GISEL:       ; %bb.0:524; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)525; GFX9-GISEL-NEXT:    v_frexp_mant_f16_e32 v3, v0526; GFX9-GISEL-NEXT:    v_frexp_exp_i16_f16_e32 v1, v0527; GFX9-GISEL-NEXT:    v_frexp_mant_f16_sdwa v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1528; GFX9-GISEL-NEXT:    v_frexp_exp_i16_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1529; GFX9-GISEL-NEXT:    v_bfe_i32 v1, v1, 0, 16530; GFX9-GISEL-NEXT:    v_bfe_i32 v2, v0, 0, 16531; GFX9-GISEL-NEXT:    v_pack_b32_f16 v0, v3, v4532; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]533;534; GFX11-GISEL-TRUE16-LABEL: test_frexp_v2f16_v2i32:535; GFX11-GISEL-TRUE16:       ; %bb.0:536; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)537; GFX11-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v1.l, v0.l538; GFX11-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v1.h, v0.h539; GFX11-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v2.l, v0.l540; GFX11-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v3.l, v0.h541; GFX11-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)542; GFX11-GISEL-TRUE16-NEXT:    v_pack_b32_f16 v0, v1.l, v1.h543; GFX11-GISEL-TRUE16-NEXT:    v_bfe_i32 v1, v2, 0, 16544; GFX11-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3)545; GFX11-GISEL-TRUE16-NEXT:    v_bfe_i32 v2, v3, 0, 16546; GFX11-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]547;548; GFX11-GISEL-FAKE16-LABEL: test_frexp_v2f16_v2i32:549; GFX11-GISEL-FAKE16:       ; %bb.0:550; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)551; GFX11-GISEL-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0552; GFX11-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v2, v0553; GFX11-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0554; GFX11-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)555; GFX11-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v3, v1556; GFX11-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v4, v1557; GFX11-GISEL-FAKE16-NEXT:    v_bfe_i32 v1, v0, 0, 16558; GFX11-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)559; GFX11-GISEL-FAKE16-NEXT:    v_pack_b32_f16 v0, v2, v3560; GFX11-GISEL-FAKE16-NEXT:    v_bfe_i32 v2, v4, 0, 16561; GFX11-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]562;563; GFX12-GISEL-TRUE16-LABEL: test_frexp_v2f16_v2i32:564; GFX12-GISEL-TRUE16:       ; %bb.0:565; GFX12-GISEL-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0566; GFX12-GISEL-TRUE16-NEXT:    s_wait_expcnt 0x0567; GFX12-GISEL-TRUE16-NEXT:    s_wait_samplecnt 0x0568; GFX12-GISEL-TRUE16-NEXT:    s_wait_bvhcnt 0x0569; GFX12-GISEL-TRUE16-NEXT:    s_wait_kmcnt 0x0570; GFX12-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v1.l, v0.l571; GFX12-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v1.h, v0.h572; GFX12-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v2.l, v0.l573; GFX12-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v3.l, v0.h574; GFX12-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)575; GFX12-GISEL-TRUE16-NEXT:    v_pack_b32_f16 v0, v1.l, v1.h576; GFX12-GISEL-TRUE16-NEXT:    v_bfe_i32 v1, v2, 0, 16577; GFX12-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_3)578; GFX12-GISEL-TRUE16-NEXT:    v_bfe_i32 v2, v3, 0, 16579; GFX12-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]580;581; GFX12-GISEL-FAKE16-LABEL: test_frexp_v2f16_v2i32:582; GFX12-GISEL-FAKE16:       ; %bb.0:583; GFX12-GISEL-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0584; GFX12-GISEL-FAKE16-NEXT:    s_wait_expcnt 0x0585; GFX12-GISEL-FAKE16-NEXT:    s_wait_samplecnt 0x0586; GFX12-GISEL-FAKE16-NEXT:    s_wait_bvhcnt 0x0587; GFX12-GISEL-FAKE16-NEXT:    s_wait_kmcnt 0x0588; GFX12-GISEL-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0589; GFX12-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v2, v0590; GFX12-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0591; GFX12-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)592; GFX12-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v3, v1593; GFX12-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v4, v1594; GFX12-GISEL-FAKE16-NEXT:    v_bfe_i32 v1, v0, 0, 16595; GFX12-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)596; GFX12-GISEL-FAKE16-NEXT:    v_pack_b32_f16 v0, v2, v3597; GFX12-GISEL-FAKE16-NEXT:    v_bfe_i32 v2, v4, 0, 16598; GFX12-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]599  %result = call { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half> %a)600  ret { <2 x half>, <2 x i32> } %result601}602 603define <2 x half> @test_frexp_v2f16_v2i32_only_use_fract(<2 x half> %a) {604; GFX6-SDAG-LABEL: test_frexp_v2f16_v2i32_only_use_fract:605; GFX6-SDAG:       ; %bb.0:606; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)607; GFX6-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0608; GFX6-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1609; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000610; GFX6-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0611; GFX6-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1612; GFX6-SDAG-NEXT:    v_frexp_mant_f32_e32 v2, v0613; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4614; GFX6-SDAG-NEXT:    v_frexp_mant_f32_e32 v3, v1615; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc616; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4617; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc618; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]619;620; GFX8-LABEL: test_frexp_v2f16_v2i32_only_use_fract:621; GFX8:       ; %bb.0:622; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)623; GFX8-NEXT:    v_frexp_mant_f16_e32 v1, v0624; GFX8-NEXT:    v_frexp_mant_f16_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1625; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0626; GFX8-NEXT:    s_setpc_b64 s[30:31]627;628; GFX9-SDAG-LABEL: test_frexp_v2f16_v2i32_only_use_fract:629; GFX9-SDAG:       ; %bb.0:630; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)631; GFX9-SDAG-NEXT:    v_frexp_mant_f16_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1632; GFX9-SDAG-NEXT:    v_frexp_mant_f16_e32 v0, v0633; GFX9-SDAG-NEXT:    v_pack_b32_f16 v0, v0, v1634; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]635;636; GFX11-SDAG-TRUE16-LABEL: test_frexp_v2f16_v2i32_only_use_fract:637; GFX11-SDAG-TRUE16:       ; %bb.0:638; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)639; GFX11-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.h, v0.h640; GFX11-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l641; GFX11-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)642; GFX11-SDAG-TRUE16-NEXT:    v_pack_b32_f16 v0, v0.l, v0.h643; GFX11-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]644;645; GFX11-SDAG-FAKE16-LABEL: test_frexp_v2f16_v2i32_only_use_fract:646; GFX11-SDAG-FAKE16:       ; %bb.0:647; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)648; GFX11-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0649; GFX11-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v0650; GFX11-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)651; GFX11-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v1, v1652; GFX11-SDAG-FAKE16-NEXT:    v_pack_b32_f16 v0, v0, v1653; GFX11-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]654;655; GFX12-SDAG-TRUE16-LABEL: test_frexp_v2f16_v2i32_only_use_fract:656; GFX12-SDAG-TRUE16:       ; %bb.0:657; GFX12-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0658; GFX12-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x0659; GFX12-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x0660; GFX12-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x0661; GFX12-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0662; GFX12-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.h, v0.h663; GFX12-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l664; GFX12-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)665; GFX12-SDAG-TRUE16-NEXT:    v_pack_b32_f16 v0, v0.l, v0.h666; GFX12-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]667;668; GFX12-SDAG-FAKE16-LABEL: test_frexp_v2f16_v2i32_only_use_fract:669; GFX12-SDAG-FAKE16:       ; %bb.0:670; GFX12-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0671; GFX12-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0672; GFX12-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0673; GFX12-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x0674; GFX12-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0675; GFX12-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0676; GFX12-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v0677; GFX12-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)678; GFX12-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v1, v1679; GFX12-SDAG-FAKE16-NEXT:    v_pack_b32_f16 v0, v0, v1680; GFX12-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]681;682; GFX6-GISEL-LABEL: test_frexp_v2f16_v2i32_only_use_fract:683; GFX6-GISEL:       ; %bb.0:684; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)685; GFX6-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0686; GFX6-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1687; GFX6-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000688; GFX6-GISEL-NEXT:    v_frexp_mant_f32_e32 v3, v0689; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2690; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc691; GFX6-GISEL-NEXT:    v_frexp_mant_f32_e32 v3, v1692; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v2693; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc694; GFX6-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v0695; GFX6-GISEL-NEXT:    v_cvt_f16_f32_e32 v1, v1696; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]697;698; GFX9-GISEL-LABEL: test_frexp_v2f16_v2i32_only_use_fract:699; GFX9-GISEL:       ; %bb.0:700; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)701; GFX9-GISEL-NEXT:    v_frexp_mant_f16_e32 v1, v0702; GFX9-GISEL-NEXT:    v_frexp_mant_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1703; GFX9-GISEL-NEXT:    v_pack_b32_f16 v0, v1, v0704; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]705;706; GFX11-GISEL-TRUE16-LABEL: test_frexp_v2f16_v2i32_only_use_fract:707; GFX11-GISEL-TRUE16:       ; %bb.0:708; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)709; GFX11-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l710; GFX11-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.h, v0.h711; GFX11-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)712; GFX11-GISEL-TRUE16-NEXT:    v_pack_b32_f16 v0, v0.l, v0.h713; GFX11-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]714;715; GFX11-GISEL-FAKE16-LABEL: test_frexp_v2f16_v2i32_only_use_fract:716; GFX11-GISEL-FAKE16:       ; %bb.0:717; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)718; GFX11-GISEL-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0719; GFX11-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v0720; GFX11-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)721; GFX11-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v1, v1722; GFX11-GISEL-FAKE16-NEXT:    v_pack_b32_f16 v0, v0, v1723; GFX11-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]724;725; GFX12-GISEL-TRUE16-LABEL: test_frexp_v2f16_v2i32_only_use_fract:726; GFX12-GISEL-TRUE16:       ; %bb.0:727; GFX12-GISEL-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0728; GFX12-GISEL-TRUE16-NEXT:    s_wait_expcnt 0x0729; GFX12-GISEL-TRUE16-NEXT:    s_wait_samplecnt 0x0730; GFX12-GISEL-TRUE16-NEXT:    s_wait_bvhcnt 0x0731; GFX12-GISEL-TRUE16-NEXT:    s_wait_kmcnt 0x0732; GFX12-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l733; GFX12-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.h, v0.h734; GFX12-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)735; GFX12-GISEL-TRUE16-NEXT:    v_pack_b32_f16 v0, v0.l, v0.h736; GFX12-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]737;738; GFX12-GISEL-FAKE16-LABEL: test_frexp_v2f16_v2i32_only_use_fract:739; GFX12-GISEL-FAKE16:       ; %bb.0:740; GFX12-GISEL-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0741; GFX12-GISEL-FAKE16-NEXT:    s_wait_expcnt 0x0742; GFX12-GISEL-FAKE16-NEXT:    s_wait_samplecnt 0x0743; GFX12-GISEL-FAKE16-NEXT:    s_wait_bvhcnt 0x0744; GFX12-GISEL-FAKE16-NEXT:    s_wait_kmcnt 0x0745; GFX12-GISEL-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0746; GFX12-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v0747; GFX12-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)748; GFX12-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v1, v1749; GFX12-GISEL-FAKE16-NEXT:    v_pack_b32_f16 v0, v0, v1750; GFX12-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]751  %result = call { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half> %a)752  %result.0 = extractvalue { <2 x half>, <2 x i32> } %result, 0753  ret <2 x half> %result.0754}755 756define <2 x i32> @test_frexp_v2f16_v2i32_only_use_exp(<2 x half> %a) {757; GFX6-SDAG-LABEL: test_frexp_v2f16_v2i32_only_use_exp:758; GFX6-SDAG:       ; %bb.0:759; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)760; GFX6-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0761; GFX6-SDAG-NEXT:    v_cvt_f16_f32_e32 v1, v1762; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000763; GFX6-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0764; GFX6-SDAG-NEXT:    v_cvt_f32_f16_e32 v1, v1765; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v2, v0766; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4767; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v3, v1768; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v2, vcc769; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s4770; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v3, vcc771; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]772;773; GFX8-SDAG-LABEL: test_frexp_v2f16_v2i32_only_use_exp:774; GFX8-SDAG:       ; %bb.0:775; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)776; GFX8-SDAG-NEXT:    v_frexp_exp_i16_f16_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1777; GFX8-SDAG-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0778; GFX8-SDAG-NEXT:    v_bfe_i32 v1, v1, 0, 16779; GFX8-SDAG-NEXT:    v_bfe_i32 v0, v0, 0, 16780; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]781;782; GFX9-SDAG-LABEL: test_frexp_v2f16_v2i32_only_use_exp:783; GFX9-SDAG:       ; %bb.0:784; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)785; GFX9-SDAG-NEXT:    v_frexp_exp_i16_f16_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1786; GFX9-SDAG-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0787; GFX9-SDAG-NEXT:    v_bfe_i32 v1, v1, 0, 16788; GFX9-SDAG-NEXT:    v_bfe_i32 v0, v0, 0, 16789; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]790;791; GFX11-SDAG-TRUE16-LABEL: test_frexp_v2f16_v2i32_only_use_exp:792; GFX11-SDAG-TRUE16:       ; %bb.0:793; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)794; GFX11-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v0.l, v0.l795; GFX11-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v1.l, v0.h796; GFX11-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)797; GFX11-SDAG-TRUE16-NEXT:    v_bfe_i32 v0, v0, 0, 16798; GFX11-SDAG-TRUE16-NEXT:    v_bfe_i32 v1, v1, 0, 16799; GFX11-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]800;801; GFX11-SDAG-FAKE16-LABEL: test_frexp_v2f16_v2i32_only_use_exp:802; GFX11-SDAG-FAKE16:       ; %bb.0:803; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)804; GFX11-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0805; GFX11-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0806; GFX11-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)807; GFX11-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v1, v1808; GFX11-SDAG-FAKE16-NEXT:    v_bfe_i32 v0, v0, 0, 16809; GFX11-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)810; GFX11-SDAG-FAKE16-NEXT:    v_bfe_i32 v1, v1, 0, 16811; GFX11-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]812;813; GFX12-SDAG-TRUE16-LABEL: test_frexp_v2f16_v2i32_only_use_exp:814; GFX12-SDAG-TRUE16:       ; %bb.0:815; GFX12-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0816; GFX12-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x0817; GFX12-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x0818; GFX12-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x0819; GFX12-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0820; GFX12-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v0.l, v0.l821; GFX12-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v1.l, v0.h822; GFX12-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)823; GFX12-SDAG-TRUE16-NEXT:    v_bfe_i32 v0, v0, 0, 16824; GFX12-SDAG-TRUE16-NEXT:    v_bfe_i32 v1, v1, 0, 16825; GFX12-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]826;827; GFX12-SDAG-FAKE16-LABEL: test_frexp_v2f16_v2i32_only_use_exp:828; GFX12-SDAG-FAKE16:       ; %bb.0:829; GFX12-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0830; GFX12-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0831; GFX12-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0832; GFX12-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x0833; GFX12-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x0834; GFX12-SDAG-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0835; GFX12-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0836; GFX12-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)837; GFX12-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v1, v1838; GFX12-SDAG-FAKE16-NEXT:    v_bfe_i32 v0, v0, 0, 16839; GFX12-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)840; GFX12-SDAG-FAKE16-NEXT:    v_bfe_i32 v1, v1, 0, 16841; GFX12-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]842;843; GFX6-GISEL-LABEL: test_frexp_v2f16_v2i32_only_use_exp:844; GFX6-GISEL:       ; %bb.0:845; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)846; GFX6-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v0847; GFX6-GISEL-NEXT:    v_cvt_f32_f16_e32 v1, v1848; GFX6-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f800000849; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v3, v0850; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v2851; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v3, vcc852; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v3, v1853; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v2854; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v3, vcc855; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]856;857; GFX8-GISEL-LABEL: test_frexp_v2f16_v2i32_only_use_exp:858; GFX8-GISEL:       ; %bb.0:859; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)860; GFX8-GISEL-NEXT:    v_frexp_exp_i16_f16_e32 v1, v0861; GFX8-GISEL-NEXT:    v_bfe_i32 v2, v1, 0, 16862; GFX8-GISEL-NEXT:    v_frexp_exp_i16_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1863; GFX8-GISEL-NEXT:    v_bfe_i32 v1, v0, 0, 16864; GFX8-GISEL-NEXT:    v_mov_b32_e32 v0, v2865; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]866;867; GFX9-GISEL-LABEL: test_frexp_v2f16_v2i32_only_use_exp:868; GFX9-GISEL:       ; %bb.0:869; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)870; GFX9-GISEL-NEXT:    v_frexp_exp_i16_f16_e32 v1, v0871; GFX9-GISEL-NEXT:    v_bfe_i32 v2, v1, 0, 16872; GFX9-GISEL-NEXT:    v_frexp_exp_i16_f16_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1873; GFX9-GISEL-NEXT:    v_bfe_i32 v1, v0, 0, 16874; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, v2875; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]876;877; GFX11-GISEL-TRUE16-LABEL: test_frexp_v2f16_v2i32_only_use_exp:878; GFX11-GISEL-TRUE16:       ; %bb.0:879; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)880; GFX11-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v0.l, v0.l881; GFX11-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v1.l, v0.h882; GFX11-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)883; GFX11-GISEL-TRUE16-NEXT:    v_bfe_i32 v0, v0, 0, 16884; GFX11-GISEL-TRUE16-NEXT:    v_bfe_i32 v1, v1, 0, 16885; GFX11-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]886;887; GFX11-GISEL-FAKE16-LABEL: test_frexp_v2f16_v2i32_only_use_exp:888; GFX11-GISEL-FAKE16:       ; %bb.0:889; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)890; GFX11-GISEL-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0891; GFX11-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0892; GFX11-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)893; GFX11-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v1, v1894; GFX11-GISEL-FAKE16-NEXT:    v_bfe_i32 v0, v0, 0, 16895; GFX11-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)896; GFX11-GISEL-FAKE16-NEXT:    v_bfe_i32 v1, v1, 0, 16897; GFX11-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]898;899; GFX12-GISEL-TRUE16-LABEL: test_frexp_v2f16_v2i32_only_use_exp:900; GFX12-GISEL-TRUE16:       ; %bb.0:901; GFX12-GISEL-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0902; GFX12-GISEL-TRUE16-NEXT:    s_wait_expcnt 0x0903; GFX12-GISEL-TRUE16-NEXT:    s_wait_samplecnt 0x0904; GFX12-GISEL-TRUE16-NEXT:    s_wait_bvhcnt 0x0905; GFX12-GISEL-TRUE16-NEXT:    s_wait_kmcnt 0x0906; GFX12-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v0.l, v0.l907; GFX12-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v1.l, v0.h908; GFX12-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)909; GFX12-GISEL-TRUE16-NEXT:    v_bfe_i32 v0, v0, 0, 16910; GFX12-GISEL-TRUE16-NEXT:    v_bfe_i32 v1, v1, 0, 16911; GFX12-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]912;913; GFX12-GISEL-FAKE16-LABEL: test_frexp_v2f16_v2i32_only_use_exp:914; GFX12-GISEL-FAKE16:       ; %bb.0:915; GFX12-GISEL-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0916; GFX12-GISEL-FAKE16-NEXT:    s_wait_expcnt 0x0917; GFX12-GISEL-FAKE16-NEXT:    s_wait_samplecnt 0x0918; GFX12-GISEL-FAKE16-NEXT:    s_wait_bvhcnt 0x0919; GFX12-GISEL-FAKE16-NEXT:    s_wait_kmcnt 0x0920; GFX12-GISEL-FAKE16-NEXT:    v_lshrrev_b32_e32 v1, 16, v0921; GFX12-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v0922; GFX12-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)923; GFX12-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v1, v1924; GFX12-GISEL-FAKE16-NEXT:    v_bfe_i32 v0, v0, 0, 16925; GFX12-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)926; GFX12-GISEL-FAKE16-NEXT:    v_bfe_i32 v1, v1, 0, 16927; GFX12-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]928  %result = call { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half> %a)929  %result.1 = extractvalue { <2 x half>, <2 x i32> } %result, 1930  ret <2 x i32> %result.1931}932 933define { half, i16 } @test_frexp_f16_i16(half %a) {934; GFX6-SDAG-LABEL: test_frexp_f16_i16:935; GFX6-SDAG:       ; %bb.0:936; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)937; GFX6-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v0938; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f800000939; GFX6-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v0940; GFX6-SDAG-NEXT:    v_frexp_mant_f32_e32 v1, v0941; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v2, v0942; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4943; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc944; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v2, vcc945; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]946;947; GFX8-LABEL: test_frexp_f16_i16:948; GFX8:       ; %bb.0:949; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)950; GFX8-NEXT:    v_frexp_mant_f16_e32 v2, v0951; GFX8-NEXT:    v_frexp_exp_i16_f16_e32 v1, v0952; GFX8-NEXT:    v_mov_b32_e32 v0, v2953; GFX8-NEXT:    s_setpc_b64 s[30:31]954;955; GFX9-LABEL: test_frexp_f16_i16:956; GFX9:       ; %bb.0:957; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)958; GFX9-NEXT:    v_frexp_mant_f16_e32 v2, v0959; GFX9-NEXT:    v_frexp_exp_i16_f16_e32 v1, v0960; GFX9-NEXT:    v_mov_b32_e32 v0, v2961; GFX9-NEXT:    s_setpc_b64 s[30:31]962;963; GFX11-SDAG-TRUE16-LABEL: test_frexp_f16_i16:964; GFX11-SDAG-TRUE16:       ; %bb.0:965; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)966; GFX11-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v0.h, v0.l967; GFX11-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)968; GFX11-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.h969; GFX11-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v1.l, v0.h970; GFX11-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]971;972; GFX11-SDAG-FAKE16-LABEL: test_frexp_f16_i16:973; GFX11-SDAG-FAKE16:       ; %bb.0:974; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)975; GFX11-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v2, v0976; GFX11-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v1, v0977; GFX11-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)978; GFX11-SDAG-FAKE16-NEXT:    v_mov_b32_e32 v0, v2979; GFX11-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]980;981; GFX12-SDAG-TRUE16-LABEL: test_frexp_f16_i16:982; GFX12-SDAG-TRUE16:       ; %bb.0:983; GFX12-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x0984; GFX12-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x0985; GFX12-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x0986; GFX12-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x0987; GFX12-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x0988; GFX12-SDAG-TRUE16-NEXT:    v_mov_b16_e32 v0.h, v0.l989; GFX12-SDAG-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_1)990; GFX12-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.h991; GFX12-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v1.l, v0.h992; GFX12-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]993;994; GFX12-SDAG-FAKE16-LABEL: test_frexp_f16_i16:995; GFX12-SDAG-FAKE16:       ; %bb.0:996; GFX12-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x0997; GFX12-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x0998; GFX12-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x0999; GFX12-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x01000; GFX12-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x01001; GFX12-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v2, v01002; GFX12-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v1, v01003; GFX12-SDAG-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)1004; GFX12-SDAG-FAKE16-NEXT:    v_mov_b32_e32 v0, v21005; GFX12-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1006;1007; GFX6-GISEL-LABEL: test_frexp_f16_i16:1008; GFX6-GISEL:       ; %bb.0:1009; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1010; GFX6-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v01011; GFX6-GISEL-NEXT:    v_mov_b32_e32 v1, 0x7f8000001012; GFX6-GISEL-NEXT:    v_frexp_mant_f32_e32 v2, v01013; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v11014; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v3, v01015; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc1016; GFX6-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v01017; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v3, vcc1018; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]1019;1020; GFX11-GISEL-TRUE16-LABEL: test_frexp_f16_i16:1021; GFX11-GISEL-TRUE16:       ; %bb.0:1022; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1023; GFX11-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v2.l, v0.l1024; GFX11-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v1.l, v0.l1025; GFX11-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)1026; GFX11-GISEL-TRUE16-NEXT:    v_mov_b32_e32 v0, v21027; GFX11-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]1028;1029; GFX11-GISEL-FAKE16-LABEL: test_frexp_f16_i16:1030; GFX11-GISEL-FAKE16:       ; %bb.0:1031; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1032; GFX11-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v2, v01033; GFX11-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v1, v01034; GFX11-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)1035; GFX11-GISEL-FAKE16-NEXT:    v_mov_b32_e32 v0, v21036; GFX11-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]1037;1038; GFX12-GISEL-TRUE16-LABEL: test_frexp_f16_i16:1039; GFX12-GISEL-TRUE16:       ; %bb.0:1040; GFX12-GISEL-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x01041; GFX12-GISEL-TRUE16-NEXT:    s_wait_expcnt 0x01042; GFX12-GISEL-TRUE16-NEXT:    s_wait_samplecnt 0x01043; GFX12-GISEL-TRUE16-NEXT:    s_wait_bvhcnt 0x01044; GFX12-GISEL-TRUE16-NEXT:    s_wait_kmcnt 0x01045; GFX12-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v2.l, v0.l1046; GFX12-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v1.l, v0.l1047; GFX12-GISEL-TRUE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)1048; GFX12-GISEL-TRUE16-NEXT:    v_mov_b32_e32 v0, v21049; GFX12-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]1050;1051; GFX12-GISEL-FAKE16-LABEL: test_frexp_f16_i16:1052; GFX12-GISEL-FAKE16:       ; %bb.0:1053; GFX12-GISEL-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x01054; GFX12-GISEL-FAKE16-NEXT:    s_wait_expcnt 0x01055; GFX12-GISEL-FAKE16-NEXT:    s_wait_samplecnt 0x01056; GFX12-GISEL-FAKE16-NEXT:    s_wait_bvhcnt 0x01057; GFX12-GISEL-FAKE16-NEXT:    s_wait_kmcnt 0x01058; GFX12-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v2, v01059; GFX12-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v1, v01060; GFX12-GISEL-FAKE16-NEXT:    s_delay_alu instid0(VALU_DEP_2)1061; GFX12-GISEL-FAKE16-NEXT:    v_mov_b32_e32 v0, v21062; GFX12-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]1063  %result = call { half, i16 } @llvm.frexp.f16.i16(half %a)1064  ret { half, i16 } %result1065}1066 1067define half @test_frexp_f16_i16_only_use_fract(half %a) {1068; GFX6-SDAG-LABEL: test_frexp_f16_i16_only_use_fract:1069; GFX6-SDAG:       ; %bb.0:1070; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1071; GFX6-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v01072; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f8000001073; GFX6-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v01074; GFX6-SDAG-NEXT:    v_frexp_mant_f32_e32 v1, v01075; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s41076; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc1077; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]1078;1079; GFX8-LABEL: test_frexp_f16_i16_only_use_fract:1080; GFX8:       ; %bb.0:1081; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1082; GFX8-NEXT:    v_frexp_mant_f16_e32 v0, v01083; GFX8-NEXT:    s_setpc_b64 s[30:31]1084;1085; GFX9-LABEL: test_frexp_f16_i16_only_use_fract:1086; GFX9:       ; %bb.0:1087; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1088; GFX9-NEXT:    v_frexp_mant_f16_e32 v0, v01089; GFX9-NEXT:    s_setpc_b64 s[30:31]1090;1091; GFX11-SDAG-TRUE16-LABEL: test_frexp_f16_i16_only_use_fract:1092; GFX11-SDAG-TRUE16:       ; %bb.0:1093; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1094; GFX11-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l1095; GFX11-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1096;1097; GFX11-SDAG-FAKE16-LABEL: test_frexp_f16_i16_only_use_fract:1098; GFX11-SDAG-FAKE16:       ; %bb.0:1099; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1100; GFX11-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v01101; GFX11-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1102;1103; GFX12-SDAG-TRUE16-LABEL: test_frexp_f16_i16_only_use_fract:1104; GFX12-SDAG-TRUE16:       ; %bb.0:1105; GFX12-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x01106; GFX12-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x01107; GFX12-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x01108; GFX12-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x01109; GFX12-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x01110; GFX12-SDAG-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l1111; GFX12-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1112;1113; GFX12-SDAG-FAKE16-LABEL: test_frexp_f16_i16_only_use_fract:1114; GFX12-SDAG-FAKE16:       ; %bb.0:1115; GFX12-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x01116; GFX12-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x01117; GFX12-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x01118; GFX12-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x01119; GFX12-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x01120; GFX12-SDAG-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v01121; GFX12-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1122;1123; GFX6-GISEL-LABEL: test_frexp_f16_i16_only_use_fract:1124; GFX6-GISEL:       ; %bb.0:1125; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1126; GFX6-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v01127; GFX6-GISEL-NEXT:    v_mov_b32_e32 v1, 0x7f8000001128; GFX6-GISEL-NEXT:    v_frexp_mant_f32_e32 v2, v01129; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v11130; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc1131; GFX6-GISEL-NEXT:    v_cvt_f16_f32_e32 v0, v01132; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]1133;1134; GFX11-GISEL-TRUE16-LABEL: test_frexp_f16_i16_only_use_fract:1135; GFX11-GISEL-TRUE16:       ; %bb.0:1136; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1137; GFX11-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l1138; GFX11-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]1139;1140; GFX11-GISEL-FAKE16-LABEL: test_frexp_f16_i16_only_use_fract:1141; GFX11-GISEL-FAKE16:       ; %bb.0:1142; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1143; GFX11-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v01144; GFX11-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]1145;1146; GFX12-GISEL-TRUE16-LABEL: test_frexp_f16_i16_only_use_fract:1147; GFX12-GISEL-TRUE16:       ; %bb.0:1148; GFX12-GISEL-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x01149; GFX12-GISEL-TRUE16-NEXT:    s_wait_expcnt 0x01150; GFX12-GISEL-TRUE16-NEXT:    s_wait_samplecnt 0x01151; GFX12-GISEL-TRUE16-NEXT:    s_wait_bvhcnt 0x01152; GFX12-GISEL-TRUE16-NEXT:    s_wait_kmcnt 0x01153; GFX12-GISEL-TRUE16-NEXT:    v_frexp_mant_f16_e32 v0.l, v0.l1154; GFX12-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]1155;1156; GFX12-GISEL-FAKE16-LABEL: test_frexp_f16_i16_only_use_fract:1157; GFX12-GISEL-FAKE16:       ; %bb.0:1158; GFX12-GISEL-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x01159; GFX12-GISEL-FAKE16-NEXT:    s_wait_expcnt 0x01160; GFX12-GISEL-FAKE16-NEXT:    s_wait_samplecnt 0x01161; GFX12-GISEL-FAKE16-NEXT:    s_wait_bvhcnt 0x01162; GFX12-GISEL-FAKE16-NEXT:    s_wait_kmcnt 0x01163; GFX12-GISEL-FAKE16-NEXT:    v_frexp_mant_f16_e32 v0, v01164; GFX12-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]1165  %result = call { half, i16 } @llvm.frexp.f16.i16(half %a)1166  %result.0 = extractvalue { half, i16 } %result, 01167  ret half %result.01168}1169 1170define i16 @test_frexp_f16_i16_only_use_exp(half %a) {1171; GFX6-SDAG-LABEL: test_frexp_f16_i16_only_use_exp:1172; GFX6-SDAG:       ; %bb.0:1173; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1174; GFX6-SDAG-NEXT:    v_cvt_f16_f32_e32 v0, v01175; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f8000001176; GFX6-SDAG-NEXT:    v_cvt_f32_f16_e32 v0, v01177; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v1, v01178; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s41179; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc1180; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]1181;1182; GFX8-LABEL: test_frexp_f16_i16_only_use_exp:1183; GFX8:       ; %bb.0:1184; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1185; GFX8-NEXT:    v_frexp_exp_i16_f16_e32 v0, v01186; GFX8-NEXT:    s_setpc_b64 s[30:31]1187;1188; GFX9-LABEL: test_frexp_f16_i16_only_use_exp:1189; GFX9:       ; %bb.0:1190; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1191; GFX9-NEXT:    v_frexp_exp_i16_f16_e32 v0, v01192; GFX9-NEXT:    s_setpc_b64 s[30:31]1193;1194; GFX11-SDAG-TRUE16-LABEL: test_frexp_f16_i16_only_use_exp:1195; GFX11-SDAG-TRUE16:       ; %bb.0:1196; GFX11-SDAG-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1197; GFX11-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v0.l, v0.l1198; GFX11-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1199;1200; GFX11-SDAG-FAKE16-LABEL: test_frexp_f16_i16_only_use_exp:1201; GFX11-SDAG-FAKE16:       ; %bb.0:1202; GFX11-SDAG-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1203; GFX11-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v01204; GFX11-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1205;1206; GFX12-SDAG-TRUE16-LABEL: test_frexp_f16_i16_only_use_exp:1207; GFX12-SDAG-TRUE16:       ; %bb.0:1208; GFX12-SDAG-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x01209; GFX12-SDAG-TRUE16-NEXT:    s_wait_expcnt 0x01210; GFX12-SDAG-TRUE16-NEXT:    s_wait_samplecnt 0x01211; GFX12-SDAG-TRUE16-NEXT:    s_wait_bvhcnt 0x01212; GFX12-SDAG-TRUE16-NEXT:    s_wait_kmcnt 0x01213; GFX12-SDAG-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v0.l, v0.l1214; GFX12-SDAG-TRUE16-NEXT:    s_setpc_b64 s[30:31]1215;1216; GFX12-SDAG-FAKE16-LABEL: test_frexp_f16_i16_only_use_exp:1217; GFX12-SDAG-FAKE16:       ; %bb.0:1218; GFX12-SDAG-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x01219; GFX12-SDAG-FAKE16-NEXT:    s_wait_expcnt 0x01220; GFX12-SDAG-FAKE16-NEXT:    s_wait_samplecnt 0x01221; GFX12-SDAG-FAKE16-NEXT:    s_wait_bvhcnt 0x01222; GFX12-SDAG-FAKE16-NEXT:    s_wait_kmcnt 0x01223; GFX12-SDAG-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v01224; GFX12-SDAG-FAKE16-NEXT:    s_setpc_b64 s[30:31]1225;1226; GFX6-GISEL-LABEL: test_frexp_f16_i16_only_use_exp:1227; GFX6-GISEL:       ; %bb.0:1228; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1229; GFX6-GISEL-NEXT:    v_cvt_f32_f16_e32 v0, v01230; GFX6-GISEL-NEXT:    v_mov_b32_e32 v1, 0x7f8000001231; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v2, v01232; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v11233; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v2, vcc1234; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]1235;1236; GFX11-GISEL-TRUE16-LABEL: test_frexp_f16_i16_only_use_exp:1237; GFX11-GISEL-TRUE16:       ; %bb.0:1238; GFX11-GISEL-TRUE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1239; GFX11-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v0.l, v0.l1240; GFX11-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]1241;1242; GFX11-GISEL-FAKE16-LABEL: test_frexp_f16_i16_only_use_exp:1243; GFX11-GISEL-FAKE16:       ; %bb.0:1244; GFX11-GISEL-FAKE16-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1245; GFX11-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v01246; GFX11-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]1247;1248; GFX12-GISEL-TRUE16-LABEL: test_frexp_f16_i16_only_use_exp:1249; GFX12-GISEL-TRUE16:       ; %bb.0:1250; GFX12-GISEL-TRUE16-NEXT:    s_wait_loadcnt_dscnt 0x01251; GFX12-GISEL-TRUE16-NEXT:    s_wait_expcnt 0x01252; GFX12-GISEL-TRUE16-NEXT:    s_wait_samplecnt 0x01253; GFX12-GISEL-TRUE16-NEXT:    s_wait_bvhcnt 0x01254; GFX12-GISEL-TRUE16-NEXT:    s_wait_kmcnt 0x01255; GFX12-GISEL-TRUE16-NEXT:    v_frexp_exp_i16_f16_e32 v0.l, v0.l1256; GFX12-GISEL-TRUE16-NEXT:    s_setpc_b64 s[30:31]1257;1258; GFX12-GISEL-FAKE16-LABEL: test_frexp_f16_i16_only_use_exp:1259; GFX12-GISEL-FAKE16:       ; %bb.0:1260; GFX12-GISEL-FAKE16-NEXT:    s_wait_loadcnt_dscnt 0x01261; GFX12-GISEL-FAKE16-NEXT:    s_wait_expcnt 0x01262; GFX12-GISEL-FAKE16-NEXT:    s_wait_samplecnt 0x01263; GFX12-GISEL-FAKE16-NEXT:    s_wait_bvhcnt 0x01264; GFX12-GISEL-FAKE16-NEXT:    s_wait_kmcnt 0x01265; GFX12-GISEL-FAKE16-NEXT:    v_frexp_exp_i16_f16_e32 v0, v01266; GFX12-GISEL-FAKE16-NEXT:    s_setpc_b64 s[30:31]1267  %result = call { half, i16 } @llvm.frexp.f16.i16(half %a)1268  %result.0 = extractvalue { half, i16 } %result, 11269  ret i16 %result.01270}1271 1272; define { <2 x half>, <2 x i16> } @test_frexp_v2f16_v2i16(<2 x half> %a) {1273;   %result = call { <2 x half>, <2 x i16> } @llvm.frexp.v2f16.v2i16(<2 x half> %a)1274;   ret { <2 x half>, <2 x i16> } %result1275; }1276 1277; define <2 x half> @test_frexp_v2f16_v2i16_only_use_fract(<2 x half> %a) {1278;   %result = call { <2 x half>, <2 x i16> } @llvm.frexp.v2f16.v2i16(<2 x half> %a)1279;   %result.0 = extractvalue { <2 x half>, <2 x i16> } %result, 01280;   ret <2 x half> %result.01281; }1282 1283; define <2 x i16> @test_frexp_v2f16_v2i16_only_use_exp(<2 x half> %a) {1284;   %result = call { <2 x half>, <2 x i16> } @llvm.frexp.v2f16.v2i16(<2 x half> %a)1285;   %result.1 = extractvalue { <2 x half>, <2 x i16> } %result, 11286;   ret <2 x i16> %result.11287; }1288 1289define { float, i32 } @test_frexp_f32_i32(float %a) {1290; GFX6-SDAG-LABEL: test_frexp_f32_i32:1291; GFX6-SDAG:       ; %bb.0:1292; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1293; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f8000001294; GFX6-SDAG-NEXT:    v_frexp_mant_f32_e32 v1, v01295; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s41296; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v2, v0, v1, vcc1297; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v0, v01298; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v0, vcc1299; GFX6-SDAG-NEXT:    v_mov_b32_e32 v0, v21300; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]1301;1302; GFX8-LABEL: test_frexp_f32_i32:1303; GFX8:       ; %bb.0:1304; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1305; GFX8-NEXT:    v_frexp_mant_f32_e32 v2, v01306; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v1, v01307; GFX8-NEXT:    v_mov_b32_e32 v0, v21308; GFX8-NEXT:    s_setpc_b64 s[30:31]1309;1310; GFX9-LABEL: test_frexp_f32_i32:1311; GFX9:       ; %bb.0:1312; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1313; GFX9-NEXT:    v_frexp_mant_f32_e32 v2, v01314; GFX9-NEXT:    v_frexp_exp_i32_f32_e32 v1, v01315; GFX9-NEXT:    v_mov_b32_e32 v0, v21316; GFX9-NEXT:    s_setpc_b64 s[30:31]1317;1318; GFX11-LABEL: test_frexp_f32_i32:1319; GFX11:       ; %bb.0:1320; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1321; GFX11-NEXT:    v_frexp_mant_f32_e32 v2, v01322; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v1, v01323; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)1324; GFX11-NEXT:    v_mov_b32_e32 v0, v21325; GFX11-NEXT:    s_setpc_b64 s[30:31]1326;1327; GFX12-LABEL: test_frexp_f32_i32:1328; GFX12:       ; %bb.0:1329; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x01330; GFX12-NEXT:    s_wait_expcnt 0x01331; GFX12-NEXT:    s_wait_samplecnt 0x01332; GFX12-NEXT:    s_wait_bvhcnt 0x01333; GFX12-NEXT:    s_wait_kmcnt 0x01334; GFX12-NEXT:    v_frexp_mant_f32_e32 v2, v01335; GFX12-NEXT:    v_frexp_exp_i32_f32_e32 v1, v01336; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)1337; GFX12-NEXT:    v_mov_b32_e32 v0, v21338; GFX12-NEXT:    s_setpc_b64 s[30:31]1339;1340; GFX6-GISEL-LABEL: test_frexp_f32_i32:1341; GFX6-GISEL:       ; %bb.0:1342; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1343; GFX6-GISEL-NEXT:    v_mov_b32_e32 v3, 0x7f8000001344; GFX6-GISEL-NEXT:    v_frexp_mant_f32_e32 v2, v01345; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v1, v01346; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v31347; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc1348; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc1349; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]1350  %result = call { float, i32 } @llvm.frexp.f32.i32(float %a)1351  ret { float, i32 } %result1352}1353 1354define float @test_frexp_f32_i32_only_use_fract(float %a) {1355; GFX6-SDAG-LABEL: test_frexp_f32_i32_only_use_fract:1356; GFX6-SDAG:       ; %bb.0:1357; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1358; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f8000001359; GFX6-SDAG-NEXT:    v_frexp_mant_f32_e32 v1, v01360; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s41361; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc1362; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]1363;1364; GFX8-LABEL: test_frexp_f32_i32_only_use_fract:1365; GFX8:       ; %bb.0:1366; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1367; GFX8-NEXT:    v_frexp_mant_f32_e32 v0, v01368; GFX8-NEXT:    s_setpc_b64 s[30:31]1369;1370; GFX9-LABEL: test_frexp_f32_i32_only_use_fract:1371; GFX9:       ; %bb.0:1372; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1373; GFX9-NEXT:    v_frexp_mant_f32_e32 v0, v01374; GFX9-NEXT:    s_setpc_b64 s[30:31]1375;1376; GFX11-LABEL: test_frexp_f32_i32_only_use_fract:1377; GFX11:       ; %bb.0:1378; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1379; GFX11-NEXT:    v_frexp_mant_f32_e32 v0, v01380; GFX11-NEXT:    s_setpc_b64 s[30:31]1381;1382; GFX12-LABEL: test_frexp_f32_i32_only_use_fract:1383; GFX12:       ; %bb.0:1384; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x01385; GFX12-NEXT:    s_wait_expcnt 0x01386; GFX12-NEXT:    s_wait_samplecnt 0x01387; GFX12-NEXT:    s_wait_bvhcnt 0x01388; GFX12-NEXT:    s_wait_kmcnt 0x01389; GFX12-NEXT:    v_frexp_mant_f32_e32 v0, v01390; GFX12-NEXT:    s_setpc_b64 s[30:31]1391;1392; GFX6-GISEL-LABEL: test_frexp_f32_i32_only_use_fract:1393; GFX6-GISEL:       ; %bb.0:1394; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1395; GFX6-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f8000001396; GFX6-GISEL-NEXT:    v_frexp_mant_f32_e32 v1, v01397; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v21398; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc1399; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]1400  %result = call { float, i32 } @llvm.frexp.f32.i32(float %a)1401  %result.0 = extractvalue { float, i32 } %result, 01402  ret float %result.01403}1404 1405define i32 @test_frexp_f32_i32_only_use_exp(float %a) {1406; GFX6-SDAG-LABEL: test_frexp_f32_i32_only_use_exp:1407; GFX6-SDAG:       ; %bb.0:1408; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1409; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f8000001410; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v1, v01411; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s41412; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc1413; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]1414;1415; GFX8-LABEL: test_frexp_f32_i32_only_use_exp:1416; GFX8:       ; %bb.0:1417; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1418; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v0, v01419; GFX8-NEXT:    s_setpc_b64 s[30:31]1420;1421; GFX9-LABEL: test_frexp_f32_i32_only_use_exp:1422; GFX9:       ; %bb.0:1423; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1424; GFX9-NEXT:    v_frexp_exp_i32_f32_e32 v0, v01425; GFX9-NEXT:    s_setpc_b64 s[30:31]1426;1427; GFX11-LABEL: test_frexp_f32_i32_only_use_exp:1428; GFX11:       ; %bb.0:1429; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1430; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v0, v01431; GFX11-NEXT:    s_setpc_b64 s[30:31]1432;1433; GFX12-LABEL: test_frexp_f32_i32_only_use_exp:1434; GFX12:       ; %bb.0:1435; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x01436; GFX12-NEXT:    s_wait_expcnt 0x01437; GFX12-NEXT:    s_wait_samplecnt 0x01438; GFX12-NEXT:    s_wait_bvhcnt 0x01439; GFX12-NEXT:    s_wait_kmcnt 0x01440; GFX12-NEXT:    v_frexp_exp_i32_f32_e32 v0, v01441; GFX12-NEXT:    s_setpc_b64 s[30:31]1442;1443; GFX6-GISEL-LABEL: test_frexp_f32_i32_only_use_exp:1444; GFX6-GISEL:       ; %bb.0:1445; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1446; GFX6-GISEL-NEXT:    v_mov_b32_e32 v2, 0x7f8000001447; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v1, v01448; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v21449; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v1, vcc1450; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]1451  %result = call { float, i32 } @llvm.frexp.f32.i32(float %a)1452  %result.0 = extractvalue { float, i32 } %result, 11453  ret i32 %result.01454}1455 1456define { <2 x float>, <2 x i32> } @test_frexp_v2f32_v2i32(<2 x float> %a) {1457; GFX6-SDAG-LABEL: test_frexp_v2f32_v2i32:1458; GFX6-SDAG:       ; %bb.0:1459; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1460; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f8000001461; GFX6-SDAG-NEXT:    v_frexp_mant_f32_e32 v2, v01462; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s41463; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v4, v0, v2, vcc1464; GFX6-SDAG-NEXT:    v_frexp_mant_f32_e32 v2, v11465; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v1|, s41466; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v0, v01467; GFX6-SDAG-NEXT:    v_cndmask_b32_e64 v5, v1, v2, s[4:5]1468; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v2, 0, v0, vcc1469; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v0, v11470; GFX6-SDAG-NEXT:    v_cndmask_b32_e64 v3, 0, v0, s[4:5]1471; GFX6-SDAG-NEXT:    v_mov_b32_e32 v0, v41472; GFX6-SDAG-NEXT:    v_mov_b32_e32 v1, v51473; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]1474;1475; GFX8-SDAG-LABEL: test_frexp_v2f32_v2i32:1476; GFX8-SDAG:       ; %bb.0:1477; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1478; GFX8-SDAG-NEXT:    v_frexp_mant_f32_e32 v4, v01479; GFX8-SDAG-NEXT:    v_frexp_mant_f32_e32 v5, v11480; GFX8-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v2, v01481; GFX8-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v3, v11482; GFX8-SDAG-NEXT:    v_mov_b32_e32 v0, v41483; GFX8-SDAG-NEXT:    v_mov_b32_e32 v1, v51484; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]1485;1486; GFX9-SDAG-LABEL: test_frexp_v2f32_v2i32:1487; GFX9-SDAG:       ; %bb.0:1488; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1489; GFX9-SDAG-NEXT:    v_frexp_mant_f32_e32 v4, v01490; GFX9-SDAG-NEXT:    v_frexp_mant_f32_e32 v5, v11491; GFX9-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v2, v01492; GFX9-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v3, v11493; GFX9-SDAG-NEXT:    v_mov_b32_e32 v0, v41494; GFX9-SDAG-NEXT:    v_mov_b32_e32 v1, v51495; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]1496;1497; GFX11-LABEL: test_frexp_v2f32_v2i32:1498; GFX11:       ; %bb.0:1499; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1500; GFX11-NEXT:    v_frexp_mant_f32_e32 v4, v01501; GFX11-NEXT:    v_frexp_mant_f32_e32 v5, v11502; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v2, v01503; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v3, v11504; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)1505; GFX11-NEXT:    v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v51506; GFX11-NEXT:    s_setpc_b64 s[30:31]1507;1508; GFX12-LABEL: test_frexp_v2f32_v2i32:1509; GFX12:       ; %bb.0:1510; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x01511; GFX12-NEXT:    s_wait_expcnt 0x01512; GFX12-NEXT:    s_wait_samplecnt 0x01513; GFX12-NEXT:    s_wait_bvhcnt 0x01514; GFX12-NEXT:    s_wait_kmcnt 0x01515; GFX12-NEXT:    v_frexp_mant_f32_e32 v4, v01516; GFX12-NEXT:    v_frexp_mant_f32_e32 v5, v11517; GFX12-NEXT:    v_frexp_exp_i32_f32_e32 v2, v01518; GFX12-NEXT:    v_frexp_exp_i32_f32_e32 v3, v11519; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3)1520; GFX12-NEXT:    v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v51521; GFX12-NEXT:    s_setpc_b64 s[30:31]1522;1523; GFX6-GISEL-LABEL: test_frexp_v2f32_v2i32:1524; GFX6-GISEL:       ; %bb.0:1525; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1526; GFX6-GISEL-NEXT:    v_mov_b32_e32 v4, 0x7f8000001527; GFX6-GISEL-NEXT:    v_frexp_mant_f32_e32 v3, v01528; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v2, v01529; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v41530; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc1531; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc1532; GFX6-GISEL-NEXT:    v_frexp_mant_f32_e32 v5, v11533; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v3, v11534; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v41535; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v3, 0, v3, vcc1536; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc1537; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]1538;1539; GFX8-GISEL-LABEL: test_frexp_v2f32_v2i32:1540; GFX8-GISEL:       ; %bb.0:1541; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1542; GFX8-GISEL-NEXT:    v_frexp_mant_f32_e32 v5, v01543; GFX8-GISEL-NEXT:    v_frexp_mant_f32_e32 v4, v11544; GFX8-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v2, v01545; GFX8-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v3, v11546; GFX8-GISEL-NEXT:    v_mov_b32_e32 v0, v51547; GFX8-GISEL-NEXT:    v_mov_b32_e32 v1, v41548; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]1549;1550; GFX9-GISEL-LABEL: test_frexp_v2f32_v2i32:1551; GFX9-GISEL:       ; %bb.0:1552; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1553; GFX9-GISEL-NEXT:    v_frexp_mant_f32_e32 v5, v01554; GFX9-GISEL-NEXT:    v_frexp_mant_f32_e32 v4, v11555; GFX9-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v2, v01556; GFX9-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v3, v11557; GFX9-GISEL-NEXT:    v_mov_b32_e32 v0, v51558; GFX9-GISEL-NEXT:    v_mov_b32_e32 v1, v41559; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]1560  %result = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %a)1561  ret { <2 x float>, <2 x i32> } %result1562}1563 1564define <2 x float> @test_frexp_v2f32_v2i32_only_use_fract(<2 x float> %a) {1565; GFX6-SDAG-LABEL: test_frexp_v2f32_v2i32_only_use_fract:1566; GFX6-SDAG:       ; %bb.0:1567; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1568; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f8000001569; GFX6-SDAG-NEXT:    v_frexp_mant_f32_e32 v2, v01570; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s41571; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc1572; GFX6-SDAG-NEXT:    v_frexp_mant_f32_e32 v2, v11573; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s41574; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc1575; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]1576;1577; GFX8-LABEL: test_frexp_v2f32_v2i32_only_use_fract:1578; GFX8:       ; %bb.0:1579; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1580; GFX8-NEXT:    v_frexp_mant_f32_e32 v0, v01581; GFX8-NEXT:    v_frexp_mant_f32_e32 v1, v11582; GFX8-NEXT:    s_setpc_b64 s[30:31]1583;1584; GFX9-LABEL: test_frexp_v2f32_v2i32_only_use_fract:1585; GFX9:       ; %bb.0:1586; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1587; GFX9-NEXT:    v_frexp_mant_f32_e32 v0, v01588; GFX9-NEXT:    v_frexp_mant_f32_e32 v1, v11589; GFX9-NEXT:    s_setpc_b64 s[30:31]1590;1591; GFX11-LABEL: test_frexp_v2f32_v2i32_only_use_fract:1592; GFX11:       ; %bb.0:1593; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1594; GFX11-NEXT:    v_frexp_mant_f32_e32 v0, v01595; GFX11-NEXT:    v_frexp_mant_f32_e32 v1, v11596; GFX11-NEXT:    s_setpc_b64 s[30:31]1597;1598; GFX12-LABEL: test_frexp_v2f32_v2i32_only_use_fract:1599; GFX12:       ; %bb.0:1600; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x01601; GFX12-NEXT:    s_wait_expcnt 0x01602; GFX12-NEXT:    s_wait_samplecnt 0x01603; GFX12-NEXT:    s_wait_bvhcnt 0x01604; GFX12-NEXT:    s_wait_kmcnt 0x01605; GFX12-NEXT:    v_frexp_mant_f32_e32 v0, v01606; GFX12-NEXT:    v_frexp_mant_f32_e32 v1, v11607; GFX12-NEXT:    s_setpc_b64 s[30:31]1608;1609; GFX6-GISEL-LABEL: test_frexp_v2f32_v2i32_only_use_fract:1610; GFX6-GISEL:       ; %bb.0:1611; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1612; GFX6-GISEL-NEXT:    v_mov_b32_e32 v3, 0x7f8000001613; GFX6-GISEL-NEXT:    v_frexp_mant_f32_e32 v2, v01614; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v31615; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc1616; GFX6-GISEL-NEXT:    v_frexp_mant_f32_e32 v2, v11617; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v31618; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc1619; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]1620  %result = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %a)1621  %result.0 = extractvalue { <2 x float>, <2 x i32> } %result, 01622  ret <2 x float> %result.01623}1624 1625define <2 x i32> @test_frexp_v2f32_v2i32_only_use_exp(<2 x float> %a) {1626; GFX6-SDAG-LABEL: test_frexp_v2f32_v2i32_only_use_exp:1627; GFX6-SDAG:       ; %bb.0:1628; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1629; GFX6-SDAG-NEXT:    s_mov_b32 s4, 0x7f8000001630; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v2, v01631; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s41632; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v2, vcc1633; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f32_e32 v2, v11634; GFX6-SDAG-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, s41635; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v2, vcc1636; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]1637;1638; GFX8-LABEL: test_frexp_v2f32_v2i32_only_use_exp:1639; GFX8:       ; %bb.0:1640; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1641; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v0, v01642; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v1, v11643; GFX8-NEXT:    s_setpc_b64 s[30:31]1644;1645; GFX9-LABEL: test_frexp_v2f32_v2i32_only_use_exp:1646; GFX9:       ; %bb.0:1647; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1648; GFX9-NEXT:    v_frexp_exp_i32_f32_e32 v0, v01649; GFX9-NEXT:    v_frexp_exp_i32_f32_e32 v1, v11650; GFX9-NEXT:    s_setpc_b64 s[30:31]1651;1652; GFX11-LABEL: test_frexp_v2f32_v2i32_only_use_exp:1653; GFX11:       ; %bb.0:1654; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1655; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v0, v01656; GFX11-NEXT:    v_frexp_exp_i32_f32_e32 v1, v11657; GFX11-NEXT:    s_setpc_b64 s[30:31]1658;1659; GFX12-LABEL: test_frexp_v2f32_v2i32_only_use_exp:1660; GFX12:       ; %bb.0:1661; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x01662; GFX12-NEXT:    s_wait_expcnt 0x01663; GFX12-NEXT:    s_wait_samplecnt 0x01664; GFX12-NEXT:    s_wait_bvhcnt 0x01665; GFX12-NEXT:    s_wait_kmcnt 0x01666; GFX12-NEXT:    v_frexp_exp_i32_f32_e32 v0, v01667; GFX12-NEXT:    v_frexp_exp_i32_f32_e32 v1, v11668; GFX12-NEXT:    s_setpc_b64 s[30:31]1669;1670; GFX6-GISEL-LABEL: test_frexp_v2f32_v2i32_only_use_exp:1671; GFX6-GISEL:       ; %bb.0:1672; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1673; GFX6-GISEL-NEXT:    v_mov_b32_e32 v3, 0x7f8000001674; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v2, v01675; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, v31676; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v2, vcc1677; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f32_e32 v2, v11678; GFX6-GISEL-NEXT:    v_cmp_lt_f32_e64 vcc, |v1|, v31679; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v2, vcc1680; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]1681  %result = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %a)1682  %result.1 = extractvalue { <2 x float>, <2 x i32> } %result, 11683  ret <2 x i32> %result.11684}1685 1686define { double, i32 } @test_frexp_f64_i32(double %a) {1687; GFX6-SDAG-LABEL: test_frexp_f64_i32:1688; GFX6-SDAG:       ; %bb.0:1689; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1690; GFX6-SDAG-NEXT:    s_mov_b32 s4, 01691; GFX6-SDAG-NEXT:    s_mov_b32 s5, 0x7ff000001692; GFX6-SDAG-NEXT:    v_frexp_mant_f64_e32 v[3:4], v[0:1]1693; GFX6-SDAG-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, s[4:5]1694; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v3, v0, v3, vcc1695; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f64_e32 v0, v[0:1]1696; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc1697; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v2, 0, v0, vcc1698; GFX6-SDAG-NEXT:    v_mov_b32_e32 v0, v31699; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]1700;1701; GFX8-LABEL: test_frexp_f64_i32:1702; GFX8:       ; %bb.0:1703; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1704; GFX8-NEXT:    v_frexp_mant_f64_e32 v[3:4], v[0:1]1705; GFX8-NEXT:    v_frexp_exp_i32_f64_e32 v2, v[0:1]1706; GFX8-NEXT:    v_mov_b32_e32 v0, v31707; GFX8-NEXT:    v_mov_b32_e32 v1, v41708; GFX8-NEXT:    s_setpc_b64 s[30:31]1709;1710; GFX9-LABEL: test_frexp_f64_i32:1711; GFX9:       ; %bb.0:1712; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1713; GFX9-NEXT:    v_frexp_mant_f64_e32 v[3:4], v[0:1]1714; GFX9-NEXT:    v_frexp_exp_i32_f64_e32 v2, v[0:1]1715; GFX9-NEXT:    v_mov_b32_e32 v0, v31716; GFX9-NEXT:    v_mov_b32_e32 v1, v41717; GFX9-NEXT:    s_setpc_b64 s[30:31]1718;1719; GFX11-LABEL: test_frexp_f64_i32:1720; GFX11:       ; %bb.0:1721; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1722; GFX11-NEXT:    v_frexp_mant_f64_e32 v[3:4], v[0:1]1723; GFX11-NEXT:    v_frexp_exp_i32_f64_e32 v2, v[0:1]1724; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)1725; GFX11-NEXT:    v_dual_mov_b32 v0, v3 :: v_dual_mov_b32 v1, v41726; GFX11-NEXT:    s_setpc_b64 s[30:31]1727;1728; GFX12-LABEL: test_frexp_f64_i32:1729; GFX12:       ; %bb.0:1730; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x01731; GFX12-NEXT:    s_wait_expcnt 0x01732; GFX12-NEXT:    s_wait_samplecnt 0x01733; GFX12-NEXT:    s_wait_bvhcnt 0x01734; GFX12-NEXT:    s_wait_kmcnt 0x01735; GFX12-NEXT:    v_frexp_mant_f64_e32 v[3:4], v[0:1]1736; GFX12-NEXT:    v_frexp_exp_i32_f64_e32 v2, v[0:1]1737; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)1738; GFX12-NEXT:    v_dual_mov_b32 v0, v3 :: v_dual_mov_b32 v1, v41739; GFX12-NEXT:    s_setpc_b64 s[30:31]1740;1741; GFX6-GISEL-LABEL: test_frexp_f64_i32:1742; GFX6-GISEL:       ; %bb.0:1743; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1744; GFX6-GISEL-NEXT:    v_mov_b32_e32 v5, 01745; GFX6-GISEL-NEXT:    v_mov_b32_e32 v6, 0x7ff000001746; GFX6-GISEL-NEXT:    v_frexp_mant_f64_e32 v[3:4], v[0:1]1747; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f64_e32 v2, v[0:1]1748; GFX6-GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, v[5:6]1749; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc1750; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v3, vcc1751; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc1752; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]1753  %result = call { double, i32 } @llvm.frexp.f64.i32(double %a)1754  ret { double, i32 } %result1755}1756 1757define double @test_frexp_f64_i32_only_use_fract(double %a) {1758; GFX6-SDAG-LABEL: test_frexp_f64_i32_only_use_fract:1759; GFX6-SDAG:       ; %bb.0:1760; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1761; GFX6-SDAG-NEXT:    s_mov_b32 s4, 01762; GFX6-SDAG-NEXT:    s_mov_b32 s5, 0x7ff000001763; GFX6-SDAG-NEXT:    v_frexp_mant_f64_e32 v[2:3], v[0:1]1764; GFX6-SDAG-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, s[4:5]1765; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc1766; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc1767; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]1768;1769; GFX8-LABEL: test_frexp_f64_i32_only_use_fract:1770; GFX8:       ; %bb.0:1771; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1772; GFX8-NEXT:    v_frexp_mant_f64_e32 v[0:1], v[0:1]1773; GFX8-NEXT:    s_setpc_b64 s[30:31]1774;1775; GFX9-LABEL: test_frexp_f64_i32_only_use_fract:1776; GFX9:       ; %bb.0:1777; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1778; GFX9-NEXT:    v_frexp_mant_f64_e32 v[0:1], v[0:1]1779; GFX9-NEXT:    s_setpc_b64 s[30:31]1780;1781; GFX11-LABEL: test_frexp_f64_i32_only_use_fract:1782; GFX11:       ; %bb.0:1783; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1784; GFX11-NEXT:    v_frexp_mant_f64_e32 v[0:1], v[0:1]1785; GFX11-NEXT:    s_setpc_b64 s[30:31]1786;1787; GFX12-LABEL: test_frexp_f64_i32_only_use_fract:1788; GFX12:       ; %bb.0:1789; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x01790; GFX12-NEXT:    s_wait_expcnt 0x01791; GFX12-NEXT:    s_wait_samplecnt 0x01792; GFX12-NEXT:    s_wait_bvhcnt 0x01793; GFX12-NEXT:    s_wait_kmcnt 0x01794; GFX12-NEXT:    v_frexp_mant_f64_e32 v[0:1], v[0:1]1795; GFX12-NEXT:    s_setpc_b64 s[30:31]1796;1797; GFX6-GISEL-LABEL: test_frexp_f64_i32_only_use_fract:1798; GFX6-GISEL:       ; %bb.0:1799; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1800; GFX6-GISEL-NEXT:    v_mov_b32_e32 v2, 01801; GFX6-GISEL-NEXT:    v_mov_b32_e32 v3, 0x7ff000001802; GFX6-GISEL-NEXT:    v_frexp_mant_f64_e32 v[4:5], v[0:1]1803; GFX6-GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, v[2:3]1804; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc1805; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc1806; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]1807  %result = call { double, i32 } @llvm.frexp.f64.i32(double %a)1808  %result.0 = extractvalue { double, i32 } %result, 01809  ret double %result.01810}1811 1812define i32 @test_frexp_f64_i32_only_use_exp(double %a) {1813; GFX6-SDAG-LABEL: test_frexp_f64_i32_only_use_exp:1814; GFX6-SDAG:       ; %bb.0:1815; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1816; GFX6-SDAG-NEXT:    s_mov_b32 s4, 01817; GFX6-SDAG-NEXT:    s_mov_b32 s5, 0x7ff000001818; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f64_e32 v2, v[0:1]1819; GFX6-SDAG-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, s[4:5]1820; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v2, vcc1821; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]1822;1823; GFX8-LABEL: test_frexp_f64_i32_only_use_exp:1824; GFX8:       ; %bb.0:1825; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1826; GFX8-NEXT:    v_frexp_exp_i32_f64_e32 v0, v[0:1]1827; GFX8-NEXT:    s_setpc_b64 s[30:31]1828;1829; GFX9-LABEL: test_frexp_f64_i32_only_use_exp:1830; GFX9:       ; %bb.0:1831; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1832; GFX9-NEXT:    v_frexp_exp_i32_f64_e32 v0, v[0:1]1833; GFX9-NEXT:    s_setpc_b64 s[30:31]1834;1835; GFX11-LABEL: test_frexp_f64_i32_only_use_exp:1836; GFX11:       ; %bb.0:1837; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1838; GFX11-NEXT:    v_frexp_exp_i32_f64_e32 v0, v[0:1]1839; GFX11-NEXT:    s_setpc_b64 s[30:31]1840;1841; GFX12-LABEL: test_frexp_f64_i32_only_use_exp:1842; GFX12:       ; %bb.0:1843; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x01844; GFX12-NEXT:    s_wait_expcnt 0x01845; GFX12-NEXT:    s_wait_samplecnt 0x01846; GFX12-NEXT:    s_wait_bvhcnt 0x01847; GFX12-NEXT:    s_wait_kmcnt 0x01848; GFX12-NEXT:    v_frexp_exp_i32_f64_e32 v0, v[0:1]1849; GFX12-NEXT:    s_setpc_b64 s[30:31]1850;1851; GFX6-GISEL-LABEL: test_frexp_f64_i32_only_use_exp:1852; GFX6-GISEL:       ; %bb.0:1853; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1854; GFX6-GISEL-NEXT:    v_mov_b32_e32 v2, 01855; GFX6-GISEL-NEXT:    v_mov_b32_e32 v3, 0x7ff000001856; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f64_e32 v4, v[0:1]1857; GFX6-GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, v[2:3]1858; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v4, vcc1859; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]1860  %result = call { double, i32 } @llvm.frexp.f64.i32(double %a)1861  %result.0 = extractvalue { double, i32 } %result, 11862  ret i32 %result.01863}1864 1865define { <2 x double>, <2 x i32> } @test_frexp_v2f64_v2i32(<2 x double> %a) {1866; GFX6-SDAG-LABEL: test_frexp_v2f64_v2i32:1867; GFX6-SDAG:       ; %bb.0:1868; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1869; GFX6-SDAG-NEXT:    s_mov_b32 s4, 01870; GFX6-SDAG-NEXT:    s_mov_b32 s5, 0x7ff000001871; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f64_e32 v4, v[0:1]1872; GFX6-SDAG-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, s[4:5]1873; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f64_e32 v5, v[2:3]1874; GFX6-SDAG-NEXT:    v_frexp_mant_f64_e32 v[6:7], v[0:1]1875; GFX6-SDAG-NEXT:    v_cmp_lt_f64_e64 s[4:5], |v[2:3]|, s[4:5]1876; GFX6-SDAG-NEXT:    v_frexp_mant_f64_e32 v[8:9], v[2:3]1877; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc1878; GFX6-SDAG-NEXT:    v_cndmask_b32_e64 v5, 0, v5, s[4:5]1879; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v6, vcc1880; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v1, v1, v7, vcc1881; GFX6-SDAG-NEXT:    v_cndmask_b32_e64 v2, v2, v8, s[4:5]1882; GFX6-SDAG-NEXT:    v_cndmask_b32_e64 v3, v3, v9, s[4:5]1883; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]1884;1885; GFX8-LABEL: test_frexp_v2f64_v2i32:1886; GFX8:       ; %bb.0:1887; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1888; GFX8-NEXT:    v_frexp_mant_f64_e32 v[8:9], v[0:1]1889; GFX8-NEXT:    v_frexp_mant_f64_e32 v[6:7], v[2:3]1890; GFX8-NEXT:    v_frexp_exp_i32_f64_e32 v4, v[0:1]1891; GFX8-NEXT:    v_frexp_exp_i32_f64_e32 v5, v[2:3]1892; GFX8-NEXT:    v_mov_b32_e32 v0, v81893; GFX8-NEXT:    v_mov_b32_e32 v1, v91894; GFX8-NEXT:    v_mov_b32_e32 v2, v61895; GFX8-NEXT:    v_mov_b32_e32 v3, v71896; GFX8-NEXT:    s_setpc_b64 s[30:31]1897;1898; GFX9-LABEL: test_frexp_v2f64_v2i32:1899; GFX9:       ; %bb.0:1900; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1901; GFX9-NEXT:    v_frexp_mant_f64_e32 v[8:9], v[0:1]1902; GFX9-NEXT:    v_frexp_mant_f64_e32 v[6:7], v[2:3]1903; GFX9-NEXT:    v_frexp_exp_i32_f64_e32 v4, v[0:1]1904; GFX9-NEXT:    v_frexp_exp_i32_f64_e32 v5, v[2:3]1905; GFX9-NEXT:    v_mov_b32_e32 v0, v81906; GFX9-NEXT:    v_mov_b32_e32 v1, v91907; GFX9-NEXT:    v_mov_b32_e32 v2, v61908; GFX9-NEXT:    v_mov_b32_e32 v3, v71909; GFX9-NEXT:    s_setpc_b64 s[30:31]1910;1911; GFX11-LABEL: test_frexp_v2f64_v2i32:1912; GFX11:       ; %bb.0:1913; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1914; GFX11-NEXT:    v_frexp_mant_f64_e32 v[8:9], v[0:1]1915; GFX11-NEXT:    v_frexp_mant_f64_e32 v[6:7], v[2:3]1916; GFX11-NEXT:    v_frexp_exp_i32_f64_e32 v4, v[0:1]1917; GFX11-NEXT:    v_frexp_exp_i32_f64_e32 v5, v[2:3]1918; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1919; GFX11-NEXT:    v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v91920; GFX11-NEXT:    v_dual_mov_b32 v2, v6 :: v_dual_mov_b32 v3, v71921; GFX11-NEXT:    s_setpc_b64 s[30:31]1922;1923; GFX12-LABEL: test_frexp_v2f64_v2i32:1924; GFX12:       ; %bb.0:1925; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x01926; GFX12-NEXT:    s_wait_expcnt 0x01927; GFX12-NEXT:    s_wait_samplecnt 0x01928; GFX12-NEXT:    s_wait_bvhcnt 0x01929; GFX12-NEXT:    s_wait_kmcnt 0x01930; GFX12-NEXT:    v_frexp_mant_f64_e32 v[8:9], v[0:1]1931; GFX12-NEXT:    v_frexp_mant_f64_e32 v[6:7], v[2:3]1932; GFX12-NEXT:    v_frexp_exp_i32_f64_e32 v4, v[0:1]1933; GFX12-NEXT:    v_frexp_exp_i32_f64_e32 v5, v[2:3]1934; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1935; GFX12-NEXT:    v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v91936; GFX12-NEXT:    v_dual_mov_b32 v2, v6 :: v_dual_mov_b32 v3, v71937; GFX12-NEXT:    s_setpc_b64 s[30:31]1938;1939; GFX6-GISEL-LABEL: test_frexp_v2f64_v2i32:1940; GFX6-GISEL:       ; %bb.0:1941; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1942; GFX6-GISEL-NEXT:    v_mov_b32_e32 v7, 01943; GFX6-GISEL-NEXT:    v_mov_b32_e32 v8, 0x7ff000001944; GFX6-GISEL-NEXT:    v_frexp_mant_f64_e32 v[5:6], v[0:1]1945; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f64_e32 v4, v[0:1]1946; GFX6-GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, v[7:8]1947; GFX6-GISEL-NEXT:    v_frexp_mant_f64_e32 v[9:10], v[2:3]1948; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v4, 0, v4, vcc1949; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v5, vcc1950; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc1951; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f64_e32 v5, v[2:3]1952; GFX6-GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, |v[2:3]|, v[7:8]1953; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v5, 0, v5, vcc1954; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v2, v2, v9, vcc1955; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v3, v3, v10, vcc1956; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]1957  %result = call { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double> %a)1958  ret { <2 x double>, <2 x i32> } %result1959}1960 1961define <2 x double> @test_frexp_v2f64_v2i32_only_use_fract(<2 x double> %a) {1962; GFX6-SDAG-LABEL: test_frexp_v2f64_v2i32_only_use_fract:1963; GFX6-SDAG:       ; %bb.0:1964; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1965; GFX6-SDAG-NEXT:    s_mov_b32 s4, 01966; GFX6-SDAG-NEXT:    s_mov_b32 s5, 0x7ff000001967; GFX6-SDAG-NEXT:    v_frexp_mant_f64_e32 v[4:5], v[0:1]1968; GFX6-SDAG-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, s[4:5]1969; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc1970; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc1971; GFX6-SDAG-NEXT:    v_frexp_mant_f64_e32 v[4:5], v[2:3]1972; GFX6-SDAG-NEXT:    v_cmp_lt_f64_e64 vcc, |v[2:3]|, s[4:5]1973; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc1974; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc1975; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]1976;1977; GFX8-LABEL: test_frexp_v2f64_v2i32_only_use_fract:1978; GFX8:       ; %bb.0:1979; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1980; GFX8-NEXT:    v_frexp_mant_f64_e32 v[0:1], v[0:1]1981; GFX8-NEXT:    v_frexp_mant_f64_e32 v[2:3], v[2:3]1982; GFX8-NEXT:    s_setpc_b64 s[30:31]1983;1984; GFX9-LABEL: test_frexp_v2f64_v2i32_only_use_fract:1985; GFX9:       ; %bb.0:1986; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1987; GFX9-NEXT:    v_frexp_mant_f64_e32 v[0:1], v[0:1]1988; GFX9-NEXT:    v_frexp_mant_f64_e32 v[2:3], v[2:3]1989; GFX9-NEXT:    s_setpc_b64 s[30:31]1990;1991; GFX11-LABEL: test_frexp_v2f64_v2i32_only_use_fract:1992; GFX11:       ; %bb.0:1993; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1994; GFX11-NEXT:    v_frexp_mant_f64_e32 v[0:1], v[0:1]1995; GFX11-NEXT:    v_frexp_mant_f64_e32 v[2:3], v[2:3]1996; GFX11-NEXT:    s_setpc_b64 s[30:31]1997;1998; GFX12-LABEL: test_frexp_v2f64_v2i32_only_use_fract:1999; GFX12:       ; %bb.0:2000; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x02001; GFX12-NEXT:    s_wait_expcnt 0x02002; GFX12-NEXT:    s_wait_samplecnt 0x02003; GFX12-NEXT:    s_wait_bvhcnt 0x02004; GFX12-NEXT:    s_wait_kmcnt 0x02005; GFX12-NEXT:    v_frexp_mant_f64_e32 v[0:1], v[0:1]2006; GFX12-NEXT:    v_frexp_mant_f64_e32 v[2:3], v[2:3]2007; GFX12-NEXT:    s_setpc_b64 s[30:31]2008;2009; GFX6-GISEL-LABEL: test_frexp_v2f64_v2i32_only_use_fract:2010; GFX6-GISEL:       ; %bb.0:2011; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2012; GFX6-GISEL-NEXT:    v_mov_b32_e32 v4, 02013; GFX6-GISEL-NEXT:    v_mov_b32_e32 v5, 0x7ff000002014; GFX6-GISEL-NEXT:    v_frexp_mant_f64_e32 v[6:7], v[0:1]2015; GFX6-GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, v[4:5]2016; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, v0, v6, vcc2017; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v1, v1, v7, vcc2018; GFX6-GISEL-NEXT:    v_frexp_mant_f64_e32 v[6:7], v[2:3]2019; GFX6-GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, |v[2:3]|, v[4:5]2020; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v2, v2, v6, vcc2021; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v3, v3, v7, vcc2022; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]2023  %result = call { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double> %a)2024  %result.0 = extractvalue { <2 x double>, <2 x i32> } %result, 02025  ret <2 x double> %result.02026}2027 2028define <2 x i32> @test_frexp_v2f64_v2i32_only_use_exp(<2 x double> %a) {2029; GFX6-SDAG-LABEL: test_frexp_v2f64_v2i32_only_use_exp:2030; GFX6-SDAG:       ; %bb.0:2031; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2032; GFX6-SDAG-NEXT:    s_mov_b32 s4, 02033; GFX6-SDAG-NEXT:    s_mov_b32 s5, 0x7ff000002034; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f64_e32 v4, v[0:1]2035; GFX6-SDAG-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, s[4:5]2036; GFX6-SDAG-NEXT:    v_frexp_exp_i32_f64_e32 v1, v[2:3]2037; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v0, 0, v4, vcc2038; GFX6-SDAG-NEXT:    v_cmp_lt_f64_e64 vcc, |v[2:3]|, s[4:5]2039; GFX6-SDAG-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc2040; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]2041;2042; GFX8-LABEL: test_frexp_v2f64_v2i32_only_use_exp:2043; GFX8:       ; %bb.0:2044; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2045; GFX8-NEXT:    v_frexp_exp_i32_f64_e32 v0, v[0:1]2046; GFX8-NEXT:    v_frexp_exp_i32_f64_e32 v1, v[2:3]2047; GFX8-NEXT:    s_setpc_b64 s[30:31]2048;2049; GFX9-LABEL: test_frexp_v2f64_v2i32_only_use_exp:2050; GFX9:       ; %bb.0:2051; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2052; GFX9-NEXT:    v_frexp_exp_i32_f64_e32 v0, v[0:1]2053; GFX9-NEXT:    v_frexp_exp_i32_f64_e32 v1, v[2:3]2054; GFX9-NEXT:    s_setpc_b64 s[30:31]2055;2056; GFX11-LABEL: test_frexp_v2f64_v2i32_only_use_exp:2057; GFX11:       ; %bb.0:2058; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2059; GFX11-NEXT:    v_frexp_exp_i32_f64_e32 v0, v[0:1]2060; GFX11-NEXT:    v_frexp_exp_i32_f64_e32 v1, v[2:3]2061; GFX11-NEXT:    s_setpc_b64 s[30:31]2062;2063; GFX12-LABEL: test_frexp_v2f64_v2i32_only_use_exp:2064; GFX12:       ; %bb.0:2065; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x02066; GFX12-NEXT:    s_wait_expcnt 0x02067; GFX12-NEXT:    s_wait_samplecnt 0x02068; GFX12-NEXT:    s_wait_bvhcnt 0x02069; GFX12-NEXT:    s_wait_kmcnt 0x02070; GFX12-NEXT:    v_frexp_exp_i32_f64_e32 v0, v[0:1]2071; GFX12-NEXT:    v_frexp_exp_i32_f64_e32 v1, v[2:3]2072; GFX12-NEXT:    s_setpc_b64 s[30:31]2073;2074; GFX6-GISEL-LABEL: test_frexp_v2f64_v2i32_only_use_exp:2075; GFX6-GISEL:       ; %bb.0:2076; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2077; GFX6-GISEL-NEXT:    v_mov_b32_e32 v4, 02078; GFX6-GISEL-NEXT:    v_mov_b32_e32 v5, 0x7ff000002079; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f64_e32 v6, v[0:1]2080; GFX6-GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, |v[0:1]|, v[4:5]2081; GFX6-GISEL-NEXT:    v_frexp_exp_i32_f64_e32 v1, v[2:3]2082; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v0, 0, v6, vcc2083; GFX6-GISEL-NEXT:    v_cmp_lt_f64_e64 vcc, |v[2:3]|, v[4:5]2084; GFX6-GISEL-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc2085; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]2086  %result = call { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double> %a)2087  %result.1 = extractvalue { <2 x double>, <2 x i32> } %result, 12088  ret <2 x i32> %result.12089}2090 2091declare { float, i32 } @llvm.frexp.f32.i32(float) #02092declare { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float>) #02093 2094declare { half, i32 } @llvm.frexp.f16.i32(half) #02095declare { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half>) #02096 2097declare { double, i32 } @llvm.frexp.f64.i32(double) #02098declare { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double>) #02099 2100declare { half, i16 } @llvm.frexp.f16.i16(half) #02101declare { <2 x half>, <2 x i16> } @llvm.frexp.v2f16.v2i16(<2 x half>) #02102 2103attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }2104;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:2105; GCN: {{.*}}2106; GFX11-GISEL: {{.*}}2107; GFX11-SDAG: {{.*}}2108; GFX12-GISEL: {{.*}}2109; GFX12-SDAG: {{.*}}2110; GFX6: {{.*}}2111