1289 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-TRUE16 %s6; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GCN,GFX11,GFX11-SDAG-FAKE16 %s7 8; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,GFX6,GFX6-GISEL %s9; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GCN,GFX8,GFX8-GISEL %s10; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9,GFX9-GISEL %s11; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GCN,GFX11,GFX11-GISEL-TRUE16 %s12; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GCN,GFX11,GFX11-GISEL-FAKE16 %s13 14define float @test_ldexp_f32_i32(ptr addrspace(1) %out, float %a, i32 %b) {15; GFX6-LABEL: test_ldexp_f32_i32:16; GFX6: ; %bb.0:17; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)18; GFX6-NEXT: v_ldexp_f32_e32 v0, v2, v319; GFX6-NEXT: s_setpc_b64 s[30:31]20;21; GFX8-LABEL: test_ldexp_f32_i32:22; GFX8: ; %bb.0:23; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)24; GFX8-NEXT: v_ldexp_f32 v0, v2, v325; GFX8-NEXT: s_setpc_b64 s[30:31]26;27; GFX9-LABEL: test_ldexp_f32_i32:28; GFX9: ; %bb.0:29; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)30; GFX9-NEXT: v_ldexp_f32 v0, v2, v331; GFX9-NEXT: s_setpc_b64 s[30:31]32;33; GFX11-LABEL: test_ldexp_f32_i32:34; GFX11: ; %bb.0:35; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)36; GFX11-NEXT: v_ldexp_f32 v0, v2, v337; GFX11-NEXT: s_setpc_b64 s[30:31]38 %result = call float @llvm.ldexp.f32.i32(float %a, i32 %b)39 ret float %result40}41 42define <2 x float> @test_ldexp_v2f32_v2i32(ptr addrspace(1) %out, <2 x float> %a, <2 x i32> %b) {43; GFX6-LABEL: test_ldexp_v2f32_v2i32:44; GFX6: ; %bb.0:45; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)46; GFX6-NEXT: v_ldexp_f32_e32 v0, v2, v447; GFX6-NEXT: v_ldexp_f32_e32 v1, v3, v548; GFX6-NEXT: s_setpc_b64 s[30:31]49;50; GFX8-LABEL: test_ldexp_v2f32_v2i32:51; GFX8: ; %bb.0:52; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)53; GFX8-NEXT: v_ldexp_f32 v0, v2, v454; GFX8-NEXT: v_ldexp_f32 v1, v3, v555; GFX8-NEXT: s_setpc_b64 s[30:31]56;57; GFX9-LABEL: test_ldexp_v2f32_v2i32:58; GFX9: ; %bb.0:59; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)60; GFX9-NEXT: v_ldexp_f32 v0, v2, v461; GFX9-NEXT: v_ldexp_f32 v1, v3, v562; GFX9-NEXT: s_setpc_b64 s[30:31]63;64; GFX11-LABEL: test_ldexp_v2f32_v2i32:65; GFX11: ; %bb.0:66; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)67; GFX11-NEXT: v_ldexp_f32 v0, v2, v468; GFX11-NEXT: v_ldexp_f32 v1, v3, v569; GFX11-NEXT: s_setpc_b64 s[30:31]70 %result = call <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> %a, <2 x i32> %b)71 ret <2 x float> %result72}73 74define <3 x float> @test_ldexp_v3f32_v3i32(ptr addrspace(1) %out, <3 x float> %a, <3 x i32> %b) {75; GFX6-LABEL: test_ldexp_v3f32_v3i32:76; GFX6: ; %bb.0:77; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)78; GFX6-NEXT: v_ldexp_f32_e32 v0, v2, v579; GFX6-NEXT: v_ldexp_f32_e32 v1, v3, v680; GFX6-NEXT: v_ldexp_f32_e32 v2, v4, v781; GFX6-NEXT: s_setpc_b64 s[30:31]82;83; GFX8-LABEL: test_ldexp_v3f32_v3i32:84; GFX8: ; %bb.0:85; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)86; GFX8-NEXT: v_ldexp_f32 v0, v2, v587; GFX8-NEXT: v_ldexp_f32 v1, v3, v688; GFX8-NEXT: v_ldexp_f32 v2, v4, v789; GFX8-NEXT: s_setpc_b64 s[30:31]90;91; GFX9-LABEL: test_ldexp_v3f32_v3i32:92; GFX9: ; %bb.0:93; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)94; GFX9-NEXT: v_ldexp_f32 v0, v2, v595; GFX9-NEXT: v_ldexp_f32 v1, v3, v696; GFX9-NEXT: v_ldexp_f32 v2, v4, v797; GFX9-NEXT: s_setpc_b64 s[30:31]98;99; GFX11-LABEL: test_ldexp_v3f32_v3i32:100; GFX11: ; %bb.0:101; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)102; GFX11-NEXT: v_ldexp_f32 v0, v2, v5103; GFX11-NEXT: v_ldexp_f32 v1, v3, v6104; GFX11-NEXT: v_ldexp_f32 v2, v4, v7105; GFX11-NEXT: s_setpc_b64 s[30:31]106 %result = call <3 x float> @llvm.ldexp.v3f32.v3i32(<3 x float> %a, <3 x i32> %b)107 ret <3 x float> %result108}109 110define <4 x float> @test_ldexp_v4f32_v4i32(ptr addrspace(1) %out, <4 x float> %a, <4 x i32> %b) {111; GFX6-LABEL: test_ldexp_v4f32_v4i32:112; GFX6: ; %bb.0:113; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)114; GFX6-NEXT: v_ldexp_f32_e32 v0, v2, v6115; GFX6-NEXT: v_ldexp_f32_e32 v1, v3, v7116; GFX6-NEXT: v_ldexp_f32_e32 v2, v4, v8117; GFX6-NEXT: v_ldexp_f32_e32 v3, v5, v9118; GFX6-NEXT: s_setpc_b64 s[30:31]119;120; GFX8-LABEL: test_ldexp_v4f32_v4i32:121; GFX8: ; %bb.0:122; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)123; GFX8-NEXT: v_ldexp_f32 v0, v2, v6124; GFX8-NEXT: v_ldexp_f32 v1, v3, v7125; GFX8-NEXT: v_ldexp_f32 v2, v4, v8126; GFX8-NEXT: v_ldexp_f32 v3, v5, v9127; GFX8-NEXT: s_setpc_b64 s[30:31]128;129; GFX9-LABEL: test_ldexp_v4f32_v4i32:130; GFX9: ; %bb.0:131; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)132; GFX9-NEXT: v_ldexp_f32 v0, v2, v6133; GFX9-NEXT: v_ldexp_f32 v1, v3, v7134; GFX9-NEXT: v_ldexp_f32 v2, v4, v8135; GFX9-NEXT: v_ldexp_f32 v3, v5, v9136; GFX9-NEXT: s_setpc_b64 s[30:31]137;138; GFX11-LABEL: test_ldexp_v4f32_v4i32:139; GFX11: ; %bb.0:140; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)141; GFX11-NEXT: v_ldexp_f32 v0, v2, v6142; GFX11-NEXT: v_ldexp_f32 v1, v3, v7143; GFX11-NEXT: v_ldexp_f32 v2, v4, v8144; GFX11-NEXT: v_ldexp_f32 v3, v5, v9145; GFX11-NEXT: s_setpc_b64 s[30:31]146 %result = call <4 x float> @llvm.ldexp.v4f32.v4i32(<4 x float> %a, <4 x i32> %b)147 ret <4 x float> %result148}149 150define double @test_ldexp_f64_i32(double %a, i32 %b) {151; GCN-LABEL: test_ldexp_f64_i32:152; GCN: ; %bb.0:153; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)154; GCN-NEXT: v_ldexp_f64 v[0:1], v[0:1], v2155; GCN-NEXT: s_setpc_b64 s[30:31]156 %result = call double @llvm.ldexp.f64.i32(double %a, i32 %b)157 ret double %result158}159 160define <2 x double> @test_ldexp_v2f64_v2i32(<2 x double> %a, <2 x i32> %b) {161; GCN-LABEL: test_ldexp_v2f64_v2i32:162; GCN: ; %bb.0:163; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)164; GCN-NEXT: v_ldexp_f64 v[0:1], v[0:1], v4165; GCN-NEXT: v_ldexp_f64 v[2:3], v[2:3], v5166; GCN-NEXT: s_setpc_b64 s[30:31]167 %result = call <2 x double> @llvm.ldexp.v2f64.v2i32(<2 x double> %a, <2 x i32> %b)168 ret <2 x double> %result169}170 171; Broken for DAG172; define float @test_ldexp_f32_i16(float %a, i16 %b) {173; %result = call float @llvm.ldexp.f32.i16(float %a, i16 %b)174; ret float %result175; }176 177; FIXME: Should be able to truncate to i32178; define float @test_ldexp_f32_i64(float %a, i64 %b) {179; %result = call float @llvm.ldexp.f32.i64(float %a, i64 %b)180; ret float %result181; }182 183; define <2 x float> @test_ldexp_v2f32_v2i16(<2 x float> %a, <2 x i16> %b) {184; %result = call <2 x float> @llvm.ldexp.v2f32.v2i16(<2 x float> %a, <2 x i16> %b)185; ret <2 x float> %result186; }187 188; FIXME: Should be able to truncate to i32189; define <2 x float> @test_ldexp_v2f32_v2i64(<2 x float> %a, <2 x i64> %b) {190; %result = call <2 x float> @llvm.ldexp.v2f32.v2i64(<2 x float> %a, <2 x i64> %b)191; ret <2 x float> %result192; }193 194define half @test_ldexp_f16_i8(half %a, i8 %b) {195; GFX6-SDAG-LABEL: test_ldexp_f16_i8:196; GFX6-SDAG: ; %bb.0:197; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)198; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0199; GFX6-SDAG-NEXT: v_bfe_i32 v1, v1, 0, 8200; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0201; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v1202; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]203;204; GFX8-SDAG-LABEL: test_ldexp_f16_i8:205; GFX8-SDAG: ; %bb.0:206; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)207; GFX8-SDAG-NEXT: v_ldexp_f16_sdwa v0, v0, sext(v1) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0208; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]209;210; GFX9-SDAG-LABEL: test_ldexp_f16_i8:211; GFX9-SDAG: ; %bb.0:212; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)213; GFX9-SDAG-NEXT: v_ldexp_f16_sdwa v0, v0, sext(v1) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0214; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]215;216; GFX11-SDAG-TRUE16-LABEL: test_ldexp_f16_i8:217; GFX11-SDAG-TRUE16: ; %bb.0:218; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)219; GFX11-SDAG-TRUE16-NEXT: v_bfe_i32 v1, v1, 0, 8220; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)221; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v1.l222; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]223;224; GFX11-SDAG-FAKE16-LABEL: test_ldexp_f16_i8:225; GFX11-SDAG-FAKE16: ; %bb.0:226; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)227; GFX11-SDAG-FAKE16-NEXT: v_bfe_i32 v1, v1, 0, 8228; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)229; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v1230; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]231;232; GFX6-GISEL-LABEL: test_ldexp_f16_i8:233; GFX6-GISEL: ; %bb.0:234; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)235; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0236; GFX6-GISEL-NEXT: v_bfe_i32 v1, v1, 0, 8237; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v1238; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0239; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]240;241; GFX8-GISEL-LABEL: test_ldexp_f16_i8:242; GFX8-GISEL: ; %bb.0:243; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)244; GFX8-GISEL-NEXT: v_bfe_i32 v1, v1, 0, 8245; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 0xffff8000246; GFX8-GISEL-NEXT: v_mov_b32_e32 v3, 0x7fff247; GFX8-GISEL-NEXT: v_med3_i32 v1, v1, v2, v3248; GFX8-GISEL-NEXT: v_ldexp_f16_e32 v0, v0, v1249; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]250;251; GFX9-GISEL-LABEL: test_ldexp_f16_i8:252; GFX9-GISEL: ; %bb.0:253; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)254; GFX9-GISEL-NEXT: v_bfe_i32 v1, v1, 0, 8255; GFX9-GISEL-NEXT: v_mov_b32_e32 v2, 0xffff8000256; GFX9-GISEL-NEXT: v_mov_b32_e32 v3, 0x7fff257; GFX9-GISEL-NEXT: v_med3_i32 v1, v1, v2, v3258; GFX9-GISEL-NEXT: v_ldexp_f16_e32 v0, v0, v1259; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]260;261; GFX11-GISEL-TRUE16-LABEL: test_ldexp_f16_i8:262; GFX11-GISEL-TRUE16: ; %bb.0:263; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)264; GFX11-GISEL-TRUE16-NEXT: v_bfe_i32 v1, v1, 0, 8265; GFX11-GISEL-TRUE16-NEXT: v_mov_b32_e32 v2, 0x7fff266; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)267; GFX11-GISEL-TRUE16-NEXT: v_med3_i32 v1, 0xffff8000, v1, v2268; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v1.l269; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]270;271; GFX11-GISEL-FAKE16-LABEL: test_ldexp_f16_i8:272; GFX11-GISEL-FAKE16: ; %bb.0:273; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)274; GFX11-GISEL-FAKE16-NEXT: v_bfe_i32 v1, v1, 0, 8275; GFX11-GISEL-FAKE16-NEXT: v_mov_b32_e32 v2, 0x7fff276; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)277; GFX11-GISEL-FAKE16-NEXT: v_med3_i32 v1, 0xffff8000, v1, v2278; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v1279; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]280 %result = call half @llvm.ldexp.f16.i8(half %a, i8 %b)281 ret half %result282}283 284define half @test_ldexp_f16_i16(half %a, i16 %b) {285; GFX6-SDAG-LABEL: test_ldexp_f16_i16:286; GFX6-SDAG: ; %bb.0:287; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)288; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0289; GFX6-SDAG-NEXT: v_bfe_i32 v1, v1, 0, 16290; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0291; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v1292; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]293;294; GFX8-LABEL: test_ldexp_f16_i16:295; GFX8: ; %bb.0:296; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)297; GFX8-NEXT: v_ldexp_f16_e32 v0, v0, v1298; GFX8-NEXT: s_setpc_b64 s[30:31]299;300; GFX9-LABEL: test_ldexp_f16_i16:301; GFX9: ; %bb.0:302; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)303; GFX9-NEXT: v_ldexp_f16_e32 v0, v0, v1304; GFX9-NEXT: s_setpc_b64 s[30:31]305;306; GFX11-SDAG-TRUE16-LABEL: test_ldexp_f16_i16:307; GFX11-SDAG-TRUE16: ; %bb.0:308; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)309; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v1.l310; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]311;312; GFX11-SDAG-FAKE16-LABEL: test_ldexp_f16_i16:313; GFX11-SDAG-FAKE16: ; %bb.0:314; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)315; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v1316; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]317;318; GFX6-GISEL-LABEL: test_ldexp_f16_i16:319; GFX6-GISEL: ; %bb.0:320; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)321; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0322; GFX6-GISEL-NEXT: v_bfe_i32 v1, v1, 0, 16323; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v1324; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0325; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]326;327; GFX11-GISEL-TRUE16-LABEL: test_ldexp_f16_i16:328; GFX11-GISEL-TRUE16: ; %bb.0:329; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)330; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v1.l331; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]332;333; GFX11-GISEL-FAKE16-LABEL: test_ldexp_f16_i16:334; GFX11-GISEL-FAKE16: ; %bb.0:335; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)336; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v1337; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]338 %result = call half @llvm.ldexp.f16.i16(half %a, i16 %b)339 ret half %result340}341 342define half @test_ldexp_f16_i32(half %a, i32 %b) {343; GFX6-SDAG-LABEL: test_ldexp_f16_i32:344; GFX6-SDAG: ; %bb.0:345; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)346; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0347; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0348; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v1349; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]350;351; GFX8-SDAG-LABEL: test_ldexp_f16_i32:352; GFX8-SDAG: ; %bb.0:353; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)354; GFX8-SDAG-NEXT: s_movk_i32 s4, 0x8000355; GFX8-SDAG-NEXT: v_mov_b32_e32 v2, 0x7fff356; GFX8-SDAG-NEXT: v_med3_i32 v1, v1, s4, v2357; GFX8-SDAG-NEXT: v_ldexp_f16_e32 v0, v0, v1358; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]359;360; GFX9-SDAG-LABEL: test_ldexp_f16_i32:361; GFX9-SDAG: ; %bb.0:362; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)363; GFX9-SDAG-NEXT: s_movk_i32 s4, 0x8000364; GFX9-SDAG-NEXT: v_mov_b32_e32 v2, 0x7fff365; GFX9-SDAG-NEXT: v_med3_i32 v1, v1, s4, v2366; GFX9-SDAG-NEXT: v_ldexp_f16_e32 v0, v0, v1367; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]368;369; GFX11-SDAG-TRUE16-LABEL: test_ldexp_f16_i32:370; GFX11-SDAG-TRUE16: ; %bb.0:371; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)372; GFX11-SDAG-TRUE16-NEXT: s_movk_i32 s0, 0x8000373; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)374; GFX11-SDAG-TRUE16-NEXT: v_med3_i32 v1, v1, s0, 0x7fff375; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v1.l376; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]377;378; GFX11-SDAG-FAKE16-LABEL: test_ldexp_f16_i32:379; GFX11-SDAG-FAKE16: ; %bb.0:380; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)381; GFX11-SDAG-FAKE16-NEXT: s_movk_i32 s0, 0x8000382; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)383; GFX11-SDAG-FAKE16-NEXT: v_med3_i32 v1, v1, s0, 0x7fff384; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v1385; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]386;387; GFX6-GISEL-LABEL: test_ldexp_f16_i32:388; GFX6-GISEL: ; %bb.0:389; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)390; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0391; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v1392; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0393; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]394;395; GFX8-GISEL-LABEL: test_ldexp_f16_i32:396; GFX8-GISEL: ; %bb.0:397; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)398; GFX8-GISEL-NEXT: v_mov_b32_e32 v2, 0xffff8000399; GFX8-GISEL-NEXT: v_mov_b32_e32 v3, 0x7fff400; GFX8-GISEL-NEXT: v_med3_i32 v1, v1, v2, v3401; GFX8-GISEL-NEXT: v_ldexp_f16_e32 v0, v0, v1402; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]403;404; GFX9-GISEL-LABEL: test_ldexp_f16_i32:405; GFX9-GISEL: ; %bb.0:406; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)407; GFX9-GISEL-NEXT: v_mov_b32_e32 v2, 0xffff8000408; GFX9-GISEL-NEXT: v_mov_b32_e32 v3, 0x7fff409; GFX9-GISEL-NEXT: v_med3_i32 v1, v1, v2, v3410; GFX9-GISEL-NEXT: v_ldexp_f16_e32 v0, v0, v1411; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]412;413; GFX11-GISEL-TRUE16-LABEL: test_ldexp_f16_i32:414; GFX11-GISEL-TRUE16: ; %bb.0:415; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)416; GFX11-GISEL-TRUE16-NEXT: v_mov_b32_e32 v2, 0x7fff417; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)418; GFX11-GISEL-TRUE16-NEXT: v_med3_i32 v1, 0xffff8000, v1, v2419; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v1.l420; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]421;422; GFX11-GISEL-FAKE16-LABEL: test_ldexp_f16_i32:423; GFX11-GISEL-FAKE16: ; %bb.0:424; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)425; GFX11-GISEL-FAKE16-NEXT: v_mov_b32_e32 v2, 0x7fff426; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)427; GFX11-GISEL-FAKE16-NEXT: v_med3_i32 v1, 0xffff8000, v1, v2428; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v1429; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]430 %result = call half @llvm.ldexp.f16.i32(half %a, i32 %b)431 ret half %result432}433 434define <2 x half> @test_ldexp_v2f16_v2i32(<2 x half> %a, <2 x i32> %b) {435; GFX6-SDAG-LABEL: test_ldexp_v2f16_v2i32:436; GFX6-SDAG: ; %bb.0:437; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)438; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0439; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1440; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0441; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1442; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v2443; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v1, v1, v3444; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]445;446; GFX8-SDAG-LABEL: test_ldexp_v2f16_v2i32:447; GFX8-SDAG: ; %bb.0:448; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)449; GFX8-SDAG-NEXT: s_movk_i32 s4, 0x8000450; GFX8-SDAG-NEXT: v_mov_b32_e32 v3, 0x7fff451; GFX8-SDAG-NEXT: v_med3_i32 v2, v2, s4, v3452; GFX8-SDAG-NEXT: v_med3_i32 v1, v1, s4, v3453; GFX8-SDAG-NEXT: v_ldexp_f16_sdwa v2, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD454; GFX8-SDAG-NEXT: v_ldexp_f16_e32 v0, v0, v1455; GFX8-SDAG-NEXT: v_or_b32_e32 v0, v0, v2456; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]457;458; GFX9-SDAG-LABEL: test_ldexp_v2f16_v2i32:459; GFX9-SDAG: ; %bb.0:460; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)461; GFX9-SDAG-NEXT: s_movk_i32 s4, 0x8000462; GFX9-SDAG-NEXT: v_mov_b32_e32 v3, 0x7fff463; GFX9-SDAG-NEXT: v_med3_i32 v2, v2, s4, v3464; GFX9-SDAG-NEXT: v_med3_i32 v1, v1, s4, v3465; GFX9-SDAG-NEXT: v_ldexp_f16_sdwa v2, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD466; GFX9-SDAG-NEXT: v_ldexp_f16_e32 v0, v0, v1467; GFX9-SDAG-NEXT: v_pack_b32_f16 v0, v0, v2468; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]469;470; GFX11-SDAG-TRUE16-LABEL: test_ldexp_v2f16_v2i32:471; GFX11-SDAG-TRUE16: ; %bb.0:472; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)473; GFX11-SDAG-TRUE16-NEXT: s_movk_i32 s0, 0x8000474; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)475; GFX11-SDAG-TRUE16-NEXT: v_med3_i32 v1, v1, s0, 0x7fff476; GFX11-SDAG-TRUE16-NEXT: v_med3_i32 v2, v2, s0, 0x7fff477; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v1.l478; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)479; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.h, v0.h, v2.l480; GFX11-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h481; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]482;483; GFX11-SDAG-FAKE16-LABEL: test_ldexp_v2f16_v2i32:484; GFX11-SDAG-FAKE16: ; %bb.0:485; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)486; GFX11-SDAG-FAKE16-NEXT: s_movk_i32 s0, 0x8000487; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v0488; GFX11-SDAG-FAKE16-NEXT: v_med3_i32 v2, v2, s0, 0x7fff489; GFX11-SDAG-FAKE16-NEXT: v_med3_i32 v1, v1, s0, 0x7fff490; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)491; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v2, v3, v2492; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v1493; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)494; GFX11-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v2495; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]496;497; GFX6-GISEL-LABEL: test_ldexp_v2f16_v2i32:498; GFX6-GISEL: ; %bb.0:499; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)500; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0501; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v1502; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v2503; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v1, v1, v3504; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0505; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v1506; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]507;508; GFX8-GISEL-LABEL: test_ldexp_v2f16_v2i32:509; GFX8-GISEL: ; %bb.0:510; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)511; GFX8-GISEL-NEXT: v_mov_b32_e32 v3, 0xffff8000512; GFX8-GISEL-NEXT: v_mov_b32_e32 v4, 0x7fff513; GFX8-GISEL-NEXT: v_med3_i32 v1, v1, v3, v4514; GFX8-GISEL-NEXT: v_med3_i32 v2, v2, v3, v4515; GFX8-GISEL-NEXT: v_ldexp_f16_e32 v1, v0, v1516; GFX8-GISEL-NEXT: v_ldexp_f16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD517; GFX8-GISEL-NEXT: v_or_b32_e32 v0, v1, v0518; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]519;520; GFX9-GISEL-LABEL: test_ldexp_v2f16_v2i32:521; GFX9-GISEL: ; %bb.0:522; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)523; GFX9-GISEL-NEXT: v_mov_b32_e32 v3, 0xffff8000524; GFX9-GISEL-NEXT: v_mov_b32_e32 v4, 0x7fff525; GFX9-GISEL-NEXT: v_med3_i32 v1, v1, v3, v4526; GFX9-GISEL-NEXT: v_med3_i32 v2, v2, v3, v4527; GFX9-GISEL-NEXT: v_ldexp_f16_e32 v1, v0, v1528; GFX9-GISEL-NEXT: v_ldexp_f16_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD529; GFX9-GISEL-NEXT: v_lshl_or_b32 v0, v0, 16, v1530; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]531;532; GFX11-GISEL-TRUE16-LABEL: test_ldexp_v2f16_v2i32:533; GFX11-GISEL-TRUE16: ; %bb.0:534; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)535; GFX11-GISEL-TRUE16-NEXT: v_mov_b32_e32 v3, 0x7fff536; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)537; GFX11-GISEL-TRUE16-NEXT: v_med3_i32 v1, 0xffff8000, v1, v3538; GFX11-GISEL-TRUE16-NEXT: v_med3_i32 v2, 0xffff8000, v2, v3539; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v1.l540; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)541; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.h, v0.h, v2.l542; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]543;544; GFX11-GISEL-FAKE16-LABEL: test_ldexp_v2f16_v2i32:545; GFX11-GISEL-FAKE16: ; %bb.0:546; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)547; GFX11-GISEL-FAKE16-NEXT: v_mov_b32_e32 v3, 0x7fff548; GFX11-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v4, 16, v0549; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)550; GFX11-GISEL-FAKE16-NEXT: v_med3_i32 v1, 0xffff8000, v1, v3551; GFX11-GISEL-FAKE16-NEXT: v_med3_i32 v2, 0xffff8000, v2, v3552; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v1553; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)554; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v1, v4, v2555; GFX11-GISEL-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0556; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)557; GFX11-GISEL-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0558; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]559 %result = call <2 x half> @llvm.ldexp.v2f16.v2i32(<2 x half> %a, <2 x i32> %b)560 ret <2 x half> %result561}562 563define <2 x half> @test_ldexp_v2f16_v2i16(<2 x half> %a, <2 x i16> %b) {564; GFX6-SDAG-LABEL: test_ldexp_v2f16_v2i16:565; GFX6-SDAG: ; %bb.0:566; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)567; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0568; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1569; GFX6-SDAG-NEXT: v_bfe_i32 v3, v3, 0, 16570; GFX6-SDAG-NEXT: v_bfe_i32 v2, v2, 0, 16571; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0572; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1573; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v2574; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v1, v1, v3575; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]576;577; GFX8-SDAG-LABEL: test_ldexp_v2f16_v2i16:578; GFX8-SDAG: ; %bb.0:579; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)580; GFX8-SDAG-NEXT: v_ldexp_f16_sdwa v2, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1581; GFX8-SDAG-NEXT: v_ldexp_f16_e32 v0, v0, v1582; GFX8-SDAG-NEXT: v_or_b32_e32 v0, v0, v2583; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]584;585; GFX9-SDAG-LABEL: test_ldexp_v2f16_v2i16:586; GFX9-SDAG: ; %bb.0:587; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)588; GFX9-SDAG-NEXT: v_ldexp_f16_sdwa v2, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1589; GFX9-SDAG-NEXT: v_ldexp_f16_e32 v0, v0, v1590; GFX9-SDAG-NEXT: v_pack_b32_f16 v0, v0, v2591; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]592;593; GFX11-SDAG-TRUE16-LABEL: test_ldexp_v2f16_v2i16:594; GFX11-SDAG-TRUE16: ; %bb.0:595; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)596; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.h, v0.h, v1.h597; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v1.l598; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)599; GFX11-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h600; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]601;602; GFX11-SDAG-FAKE16-LABEL: test_ldexp_v2f16_v2i16:603; GFX11-SDAG-FAKE16: ; %bb.0:604; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)605; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v1606; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v0607; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v1608; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)609; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v2, v3, v2610; GFX11-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v2611; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]612;613; GFX6-GISEL-LABEL: test_ldexp_v2f16_v2i16:614; GFX6-GISEL: ; %bb.0:615; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)616; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0617; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v1618; GFX6-GISEL-NEXT: v_bfe_i32 v2, v2, 0, 16619; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v2620; GFX6-GISEL-NEXT: v_bfe_i32 v2, v3, 0, 16621; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v1, v1, v2622; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0623; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v1624; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]625;626; GFX8-GISEL-LABEL: test_ldexp_v2f16_v2i16:627; GFX8-GISEL: ; %bb.0:628; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)629; GFX8-GISEL-NEXT: v_ldexp_f16_e32 v2, v0, v1630; GFX8-GISEL-NEXT: v_ldexp_f16_sdwa v0, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1631; GFX8-GISEL-NEXT: v_or_b32_e32 v0, v2, v0632; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]633;634; GFX9-GISEL-LABEL: test_ldexp_v2f16_v2i16:635; GFX9-GISEL: ; %bb.0:636; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)637; GFX9-GISEL-NEXT: v_ldexp_f16_e32 v2, v0, v1638; GFX9-GISEL-NEXT: v_ldexp_f16_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1639; GFX9-GISEL-NEXT: v_lshl_or_b32 v0, v0, 16, v2640; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]641;642; GFX11-GISEL-TRUE16-LABEL: test_ldexp_v2f16_v2i16:643; GFX11-GISEL-TRUE16: ; %bb.0:644; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)645; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v1.l646; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.h, v0.h, v1.h647; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]648;649; GFX11-GISEL-FAKE16-LABEL: test_ldexp_v2f16_v2i16:650; GFX11-GISEL-FAKE16: ; %bb.0:651; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)652; GFX11-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v2, 16, v0653; GFX11-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v1654; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v1655; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)656; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v1, v2, v3657; GFX11-GISEL-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0658; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)659; GFX11-GISEL-FAKE16-NEXT: v_lshl_or_b32 v0, v1, 16, v0660; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]661 %result = call <2 x half> @llvm.ldexp.v2f16.v2i16(<2 x half> %a, <2 x i16> %b)662 ret <2 x half> %result663}664 665define <3 x half> @test_ldexp_v3f16_v3i32(<3 x half> %a, <3 x i32> %b) {666; GFX6-SDAG-LABEL: test_ldexp_v3f16_v3i32:667; GFX6-SDAG: ; %bb.0:668; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)669; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0670; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1671; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v2672; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0673; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1674; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v2675; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v3676; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v1, v1, v4677; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v2, v2, v5678; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]679;680; GFX8-SDAG-LABEL: test_ldexp_v3f16_v3i32:681; GFX8-SDAG: ; %bb.0:682; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)683; GFX8-SDAG-NEXT: s_movk_i32 s4, 0x8000684; GFX8-SDAG-NEXT: v_mov_b32_e32 v5, 0x7fff685; GFX8-SDAG-NEXT: v_med3_i32 v2, v2, s4, v5686; GFX8-SDAG-NEXT: v_med3_i32 v3, v3, s4, v5687; GFX8-SDAG-NEXT: v_med3_i32 v4, v4, s4, v5688; GFX8-SDAG-NEXT: v_ldexp_f16_e32 v2, v0, v2689; GFX8-SDAG-NEXT: v_ldexp_f16_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD690; GFX8-SDAG-NEXT: v_ldexp_f16_e32 v1, v1, v4691; GFX8-SDAG-NEXT: v_or_b32_e32 v0, v2, v0692; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]693;694; GFX9-SDAG-LABEL: test_ldexp_v3f16_v3i32:695; GFX9-SDAG: ; %bb.0:696; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)697; GFX9-SDAG-NEXT: s_movk_i32 s4, 0x8000698; GFX9-SDAG-NEXT: v_mov_b32_e32 v5, 0x7fff699; GFX9-SDAG-NEXT: v_med3_i32 v3, v3, s4, v5700; GFX9-SDAG-NEXT: v_med3_i32 v2, v2, s4, v5701; GFX9-SDAG-NEXT: v_med3_i32 v4, v4, s4, v5702; GFX9-SDAG-NEXT: v_ldexp_f16_sdwa v3, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD703; GFX9-SDAG-NEXT: v_ldexp_f16_e32 v0, v0, v2704; GFX9-SDAG-NEXT: v_ldexp_f16_e32 v1, v1, v4705; GFX9-SDAG-NEXT: v_pack_b32_f16 v0, v0, v3706; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]707;708; GFX11-SDAG-TRUE16-LABEL: test_ldexp_v3f16_v3i32:709; GFX11-SDAG-TRUE16: ; %bb.0:710; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)711; GFX11-SDAG-TRUE16-NEXT: s_movk_i32 s0, 0x8000712; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)713; GFX11-SDAG-TRUE16-NEXT: v_med3_i32 v2, v2, s0, 0x7fff714; GFX11-SDAG-TRUE16-NEXT: v_med3_i32 v3, v3, s0, 0x7fff715; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v2.l716; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)717; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.h, v0.h, v3.l718; GFX11-SDAG-TRUE16-NEXT: v_med3_i32 v2, v4, s0, 0x7fff719; GFX11-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h720; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)721; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v1.l, v1.l, v2.l722; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]723;724; GFX11-SDAG-FAKE16-LABEL: test_ldexp_v3f16_v3i32:725; GFX11-SDAG-FAKE16: ; %bb.0:726; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)727; GFX11-SDAG-FAKE16-NEXT: s_movk_i32 s0, 0x8000728; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v5, 16, v0729; GFX11-SDAG-FAKE16-NEXT: v_med3_i32 v3, v3, s0, 0x7fff730; GFX11-SDAG-FAKE16-NEXT: v_med3_i32 v2, v2, s0, 0x7fff731; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)732; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v3, v5, v3733; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v2734; GFX11-SDAG-FAKE16-NEXT: v_med3_i32 v2, v4, s0, 0x7fff735; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)736; GFX11-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v3737; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v1, v1, v2738; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]739;740; GFX6-GISEL-LABEL: test_ldexp_v3f16_v3i32:741; GFX6-GISEL: ; %bb.0:742; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)743; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0744; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v1745; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v2, v2746; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v3747; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v1, v1, v4748; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v2, v2, v5749; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0750; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v1751; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v2, v2752; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]753;754; GFX8-GISEL-LABEL: test_ldexp_v3f16_v3i32:755; GFX8-GISEL: ; %bb.0:756; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)757; GFX8-GISEL-NEXT: v_mov_b32_e32 v5, 0xffff8000758; GFX8-GISEL-NEXT: v_mov_b32_e32 v6, 0x7fff759; GFX8-GISEL-NEXT: v_med3_i32 v2, v2, v5, v6760; GFX8-GISEL-NEXT: v_med3_i32 v3, v3, v5, v6761; GFX8-GISEL-NEXT: v_ldexp_f16_e32 v2, v0, v2762; GFX8-GISEL-NEXT: v_ldexp_f16_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD763; GFX8-GISEL-NEXT: v_med3_i32 v3, v4, v5, v6764; GFX8-GISEL-NEXT: v_ldexp_f16_e32 v1, v1, v3765; GFX8-GISEL-NEXT: v_or_b32_e32 v0, v2, v0766; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]767;768; GFX9-GISEL-LABEL: test_ldexp_v3f16_v3i32:769; GFX9-GISEL: ; %bb.0:770; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)771; GFX9-GISEL-NEXT: v_mov_b32_e32 v5, 0xffff8000772; GFX9-GISEL-NEXT: v_mov_b32_e32 v6, 0x7fff773; GFX9-GISEL-NEXT: v_med3_i32 v2, v2, v5, v6774; GFX9-GISEL-NEXT: v_med3_i32 v3, v3, v5, v6775; GFX9-GISEL-NEXT: v_ldexp_f16_e32 v2, v0, v2776; GFX9-GISEL-NEXT: v_ldexp_f16_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD777; GFX9-GISEL-NEXT: v_med3_i32 v3, v4, v5, v6778; GFX9-GISEL-NEXT: v_ldexp_f16_e32 v1, v1, v3779; GFX9-GISEL-NEXT: v_lshl_or_b32 v0, v0, 16, v2780; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]781;782; GFX11-GISEL-TRUE16-LABEL: test_ldexp_v3f16_v3i32:783; GFX11-GISEL-TRUE16: ; %bb.0:784; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)785; GFX11-GISEL-TRUE16-NEXT: v_mov_b32_e32 v5, 0x7fff786; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)787; GFX11-GISEL-TRUE16-NEXT: v_med3_i32 v2, 0xffff8000, v2, v5788; GFX11-GISEL-TRUE16-NEXT: v_med3_i32 v3, 0xffff8000, v3, v5789; GFX11-GISEL-TRUE16-NEXT: v_med3_i32 v4, 0xffff8000, v4, v5790; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v2.l791; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)792; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.h, v0.h, v3.l793; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v1.l, v1.l, v4.l794; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]795;796; GFX11-GISEL-FAKE16-LABEL: test_ldexp_v3f16_v3i32:797; GFX11-GISEL-FAKE16: ; %bb.0:798; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)799; GFX11-GISEL-FAKE16-NEXT: v_mov_b32_e32 v5, 0x7fff800; GFX11-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v6, 16, v0801; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)802; GFX11-GISEL-FAKE16-NEXT: v_med3_i32 v2, 0xffff8000, v2, v5803; GFX11-GISEL-FAKE16-NEXT: v_med3_i32 v3, 0xffff8000, v3, v5804; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v2805; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)806; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v2, v6, v3807; GFX11-GISEL-FAKE16-NEXT: v_med3_i32 v3, 0xffff8000, v4, v5808; GFX11-GISEL-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0809; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)810; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v1, v1, v3811; GFX11-GISEL-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0812; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]813 %result = call <3 x half> @llvm.ldexp.v3f16.v3i32(<3 x half> %a, <3 x i32> %b)814 ret <3 x half> %result815}816 817define <3 x half> @test_ldexp_v3f16_v3i16(<3 x half> %a, <3 x i16> %b) {818; GFX6-SDAG-LABEL: test_ldexp_v3f16_v3i16:819; GFX6-SDAG: ; %bb.0:820; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)821; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v2822; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0823; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1824; GFX6-SDAG-NEXT: v_bfe_i32 v5, v5, 0, 16825; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v2826; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0827; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1828; GFX6-SDAG-NEXT: v_bfe_i32 v4, v4, 0, 16829; GFX6-SDAG-NEXT: v_bfe_i32 v3, v3, 0, 16830; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v3831; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v1, v1, v4832; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v2, v2, v5833; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]834;835; GFX8-SDAG-LABEL: test_ldexp_v3f16_v3i16:836; GFX8-SDAG: ; %bb.0:837; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)838; GFX8-SDAG-NEXT: v_ldexp_f16_sdwa v4, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1839; GFX8-SDAG-NEXT: v_ldexp_f16_e32 v0, v0, v2840; GFX8-SDAG-NEXT: v_ldexp_f16_e32 v1, v1, v3841; GFX8-SDAG-NEXT: v_or_b32_e32 v0, v0, v4842; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]843;844; GFX9-SDAG-LABEL: test_ldexp_v3f16_v3i16:845; GFX9-SDAG: ; %bb.0:846; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)847; GFX9-SDAG-NEXT: v_ldexp_f16_sdwa v4, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1848; GFX9-SDAG-NEXT: v_ldexp_f16_e32 v0, v0, v2849; GFX9-SDAG-NEXT: v_ldexp_f16_e32 v1, v1, v3850; GFX9-SDAG-NEXT: v_pack_b32_f16 v0, v0, v4851; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]852;853; GFX11-SDAG-TRUE16-LABEL: test_ldexp_v3f16_v3i16:854; GFX11-SDAG-TRUE16: ; %bb.0:855; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)856; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.h, v0.h, v2.h857; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v2.l858; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v1.l, v1.l, v3.l859; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)860; GFX11-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h861; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]862;863; GFX11-SDAG-FAKE16-LABEL: test_ldexp_v3f16_v3i16:864; GFX11-SDAG-FAKE16: ; %bb.0:865; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)866; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v4, 16, v2867; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v5, 16, v0868; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v2869; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v1, v1, v3870; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)871; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v2, v5, v4872; GFX11-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v2873; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]874;875; GFX6-GISEL-LABEL: test_ldexp_v3f16_v3i16:876; GFX6-GISEL: ; %bb.0:877; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)878; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v0879; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v1880; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v2, v2881; GFX6-GISEL-NEXT: v_bfe_i32 v3, v3, 0, 16882; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v3883; GFX6-GISEL-NEXT: v_bfe_i32 v3, v4, 0, 16884; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v1, v1, v3885; GFX6-GISEL-NEXT: v_bfe_i32 v3, v5, 0, 16886; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v2, v2, v3887; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v0888; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v1889; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v2, v2890; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]891;892; GFX8-GISEL-LABEL: test_ldexp_v3f16_v3i16:893; GFX8-GISEL: ; %bb.0:894; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)895; GFX8-GISEL-NEXT: v_ldexp_f16_e32 v4, v0, v2896; GFX8-GISEL-NEXT: v_ldexp_f16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1897; GFX8-GISEL-NEXT: v_ldexp_f16_e32 v1, v1, v3898; GFX8-GISEL-NEXT: v_or_b32_e32 v0, v4, v0899; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]900;901; GFX9-GISEL-LABEL: test_ldexp_v3f16_v3i16:902; GFX9-GISEL: ; %bb.0:903; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)904; GFX9-GISEL-NEXT: v_ldexp_f16_e32 v4, v0, v2905; GFX9-GISEL-NEXT: v_ldexp_f16_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1906; GFX9-GISEL-NEXT: v_ldexp_f16_e32 v1, v1, v3907; GFX9-GISEL-NEXT: v_lshl_or_b32 v0, v0, 16, v4908; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]909;910; GFX11-GISEL-TRUE16-LABEL: test_ldexp_v3f16_v3i16:911; GFX11-GISEL-TRUE16: ; %bb.0:912; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)913; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v2.l914; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.h, v0.h, v2.h915; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v1.l, v1.l, v3.l916; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]917;918; GFX11-GISEL-FAKE16-LABEL: test_ldexp_v3f16_v3i16:919; GFX11-GISEL-FAKE16: ; %bb.0:920; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)921; GFX11-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v4, 16, v0922; GFX11-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v5, 16, v2923; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v2924; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v1, v1, v3925; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)926; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v2, v4, v5927; GFX11-GISEL-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v0928; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)929; GFX11-GISEL-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v0930; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]931 %result = call <3 x half> @llvm.ldexp.v3f16.v3i16(<3 x half> %a, <3 x i16> %b)932 ret <3 x half> %result933}934 935define <4 x half> @test_ldexp_v4f16_v4i32(<4 x half> %a, <4 x i32> %b) {936; GFX6-SDAG-LABEL: test_ldexp_v4f16_v4i32:937; GFX6-SDAG: ; %bb.0:938; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)939; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v0940; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v1941; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v2942; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v3, v3943; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v0944; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v1945; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v2946; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v3, v3947; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v4948; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v1, v1, v5949; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v2, v2, v6950; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v3, v3, v7951; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]952;953; GFX8-SDAG-LABEL: test_ldexp_v4f16_v4i32:954; GFX8-SDAG: ; %bb.0:955; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)956; GFX8-SDAG-NEXT: s_movk_i32 s4, 0x8000957; GFX8-SDAG-NEXT: v_mov_b32_e32 v6, 0x7fff958; GFX8-SDAG-NEXT: v_med3_i32 v4, v4, s4, v6959; GFX8-SDAG-NEXT: v_med3_i32 v5, v5, s4, v6960; GFX8-SDAG-NEXT: v_med3_i32 v2, v2, s4, v6961; GFX8-SDAG-NEXT: v_med3_i32 v3, v3, s4, v6962; GFX8-SDAG-NEXT: v_ldexp_f16_e32 v4, v1, v4963; GFX8-SDAG-NEXT: v_ldexp_f16_sdwa v1, v1, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD964; GFX8-SDAG-NEXT: v_ldexp_f16_e32 v2, v0, v2965; GFX8-SDAG-NEXT: v_ldexp_f16_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD966; GFX8-SDAG-NEXT: v_or_b32_e32 v0, v2, v0967; GFX8-SDAG-NEXT: v_or_b32_e32 v1, v4, v1968; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]969;970; GFX9-SDAG-LABEL: test_ldexp_v4f16_v4i32:971; GFX9-SDAG: ; %bb.0:972; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)973; GFX9-SDAG-NEXT: s_movk_i32 s4, 0x8000974; GFX9-SDAG-NEXT: v_mov_b32_e32 v6, 0x7fff975; GFX9-SDAG-NEXT: v_med3_i32 v5, v5, s4, v6976; GFX9-SDAG-NEXT: v_med3_i32 v4, v4, s4, v6977; GFX9-SDAG-NEXT: v_med3_i32 v3, v3, s4, v6978; GFX9-SDAG-NEXT: v_med3_i32 v2, v2, s4, v6979; GFX9-SDAG-NEXT: v_ldexp_f16_sdwa v5, v1, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD980; GFX9-SDAG-NEXT: v_ldexp_f16_e32 v1, v1, v4981; GFX9-SDAG-NEXT: v_ldexp_f16_sdwa v3, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD982; GFX9-SDAG-NEXT: v_ldexp_f16_e32 v0, v0, v2983; GFX9-SDAG-NEXT: v_pack_b32_f16 v0, v0, v3984; GFX9-SDAG-NEXT: v_pack_b32_f16 v1, v1, v5985; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]986;987; GFX11-SDAG-TRUE16-LABEL: test_ldexp_v4f16_v4i32:988; GFX11-SDAG-TRUE16: ; %bb.0:989; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)990; GFX11-SDAG-TRUE16-NEXT: s_movk_i32 s0, 0x8000991; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)992; GFX11-SDAG-TRUE16-NEXT: v_med3_i32 v4, v4, s0, 0x7fff993; GFX11-SDAG-TRUE16-NEXT: v_med3_i32 v2, v2, s0, 0x7fff994; GFX11-SDAG-TRUE16-NEXT: v_med3_i32 v3, v3, s0, 0x7fff995; GFX11-SDAG-TRUE16-NEXT: v_med3_i32 v5, v5, s0, 0x7fff996; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v1.l, v1.l, v4.l997; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)998; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v2.l999; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.h, v0.h, v3.l1000; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)1001; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v1.h, v1.h, v5.l1002; GFX11-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h1003; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1004; GFX11-SDAG-TRUE16-NEXT: v_pack_b32_f16 v1, v1.l, v1.h1005; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]1006;1007; GFX11-SDAG-FAKE16-LABEL: test_ldexp_v4f16_v4i32:1008; GFX11-SDAG-FAKE16: ; %bb.0:1009; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1010; GFX11-SDAG-FAKE16-NEXT: s_movk_i32 s0, 0x80001011; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v6, 16, v11012; GFX11-SDAG-FAKE16-NEXT: v_med3_i32 v5, v5, s0, 0x7fff1013; GFX11-SDAG-FAKE16-NEXT: v_med3_i32 v3, v3, s0, 0x7fff1014; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v7, 16, v01015; GFX11-SDAG-FAKE16-NEXT: v_med3_i32 v2, v2, s0, 0x7fff1016; GFX11-SDAG-FAKE16-NEXT: v_med3_i32 v4, v4, s0, 0x7fff1017; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v5, v6, v51018; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1019; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v3, v7, v31020; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v21021; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)1022; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v1, v1, v41023; GFX11-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v31024; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1025; GFX11-SDAG-FAKE16-NEXT: v_pack_b32_f16 v1, v1, v51026; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]1027;1028; GFX6-GISEL-LABEL: test_ldexp_v4f16_v4i32:1029; GFX6-GISEL: ; %bb.0:1030; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1031; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v01032; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v11033; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v2, v21034; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v3, v31035; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v41036; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v1, v1, v51037; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v2, v2, v61038; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v3, v3, v71039; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v01040; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v11041; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v2, v21042; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v3, v31043; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]1044;1045; GFX8-GISEL-LABEL: test_ldexp_v4f16_v4i32:1046; GFX8-GISEL: ; %bb.0:1047; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1048; GFX8-GISEL-NEXT: v_mov_b32_e32 v6, 0xffff80001049; GFX8-GISEL-NEXT: v_mov_b32_e32 v7, 0x7fff1050; GFX8-GISEL-NEXT: v_med3_i32 v2, v2, v6, v71051; GFX8-GISEL-NEXT: v_med3_i32 v3, v3, v6, v71052; GFX8-GISEL-NEXT: v_ldexp_f16_e32 v2, v0, v21053; GFX8-GISEL-NEXT: v_ldexp_f16_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD1054; GFX8-GISEL-NEXT: v_med3_i32 v3, v4, v6, v71055; GFX8-GISEL-NEXT: v_med3_i32 v4, v5, v6, v71056; GFX8-GISEL-NEXT: v_ldexp_f16_e32 v3, v1, v31057; GFX8-GISEL-NEXT: v_ldexp_f16_sdwa v1, v1, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD1058; GFX8-GISEL-NEXT: v_or_b32_e32 v0, v2, v01059; GFX8-GISEL-NEXT: v_or_b32_e32 v1, v3, v11060; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]1061;1062; GFX9-GISEL-LABEL: test_ldexp_v4f16_v4i32:1063; GFX9-GISEL: ; %bb.0:1064; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1065; GFX9-GISEL-NEXT: v_mov_b32_e32 v6, 0xffff80001066; GFX9-GISEL-NEXT: v_mov_b32_e32 v7, 0x7fff1067; GFX9-GISEL-NEXT: v_med3_i32 v2, v2, v6, v71068; GFX9-GISEL-NEXT: v_med3_i32 v3, v3, v6, v71069; GFX9-GISEL-NEXT: v_ldexp_f16_e32 v2, v0, v21070; GFX9-GISEL-NEXT: v_ldexp_f16_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD1071; GFX9-GISEL-NEXT: v_med3_i32 v3, v4, v6, v71072; GFX9-GISEL-NEXT: v_med3_i32 v4, v5, v6, v71073; GFX9-GISEL-NEXT: v_ldexp_f16_e32 v3, v1, v31074; GFX9-GISEL-NEXT: v_ldexp_f16_sdwa v1, v1, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD1075; GFX9-GISEL-NEXT: v_lshl_or_b32 v0, v0, 16, v21076; GFX9-GISEL-NEXT: v_lshl_or_b32 v1, v1, 16, v31077; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]1078;1079; GFX11-GISEL-TRUE16-LABEL: test_ldexp_v4f16_v4i32:1080; GFX11-GISEL-TRUE16: ; %bb.0:1081; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1082; GFX11-GISEL-TRUE16-NEXT: v_mov_b32_e32 v6, 0x7fff1083; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)1084; GFX11-GISEL-TRUE16-NEXT: v_med3_i32 v2, 0xffff8000, v2, v61085; GFX11-GISEL-TRUE16-NEXT: v_med3_i32 v3, 0xffff8000, v3, v61086; GFX11-GISEL-TRUE16-NEXT: v_med3_i32 v4, 0xffff8000, v4, v61087; GFX11-GISEL-TRUE16-NEXT: v_med3_i32 v5, 0xffff8000, v5, v61088; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v2.l1089; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1090; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.h, v0.h, v3.l1091; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v1.l, v1.l, v4.l1092; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)1093; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v1.h, v1.h, v5.l1094; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]1095;1096; GFX11-GISEL-FAKE16-LABEL: test_ldexp_v4f16_v4i32:1097; GFX11-GISEL-FAKE16: ; %bb.0:1098; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1099; GFX11-GISEL-FAKE16-NEXT: v_mov_b32_e32 v6, 0x7fff1100; GFX11-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v7, 16, v01101; GFX11-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v8, 16, v11102; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_4)1103; GFX11-GISEL-FAKE16-NEXT: v_med3_i32 v2, 0xffff8000, v2, v61104; GFX11-GISEL-FAKE16-NEXT: v_med3_i32 v4, 0xffff8000, v4, v61105; GFX11-GISEL-FAKE16-NEXT: v_med3_i32 v3, 0xffff8000, v3, v61106; GFX11-GISEL-FAKE16-NEXT: v_med3_i32 v5, 0xffff8000, v5, v61107; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v21108; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1109; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v1, v1, v41110; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v2, v7, v31111; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1112; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v3, v8, v51113; GFX11-GISEL-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v01114; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)1115; GFX11-GISEL-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v11116; GFX11-GISEL-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v01117; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1118; GFX11-GISEL-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v11119; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]1120 %result = call <4 x half> @llvm.ldexp.v4f16.v4i32(<4 x half> %a, <4 x i32> %b)1121 ret <4 x half> %result1122}1123 1124define <4 x half> @test_ldexp_v4f16_v4i16(<4 x half> %a, <4 x i16> %b) {1125; GFX6-SDAG-LABEL: test_ldexp_v4f16_v4i16:1126; GFX6-SDAG: ; %bb.0:1127; GFX6-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1128; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v3, v31129; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v2, v21130; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v0, v01131; GFX6-SDAG-NEXT: v_cvt_f16_f32_e32 v1, v11132; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v3, v31133; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v2, v21134; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v0, v01135; GFX6-SDAG-NEXT: v_cvt_f32_f16_e32 v1, v11136; GFX6-SDAG-NEXT: v_bfe_i32 v7, v7, 0, 161137; GFX6-SDAG-NEXT: v_bfe_i32 v6, v6, 0, 161138; GFX6-SDAG-NEXT: v_bfe_i32 v5, v5, 0, 161139; GFX6-SDAG-NEXT: v_bfe_i32 v4, v4, 0, 161140; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v0, v0, v41141; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v1, v1, v51142; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v2, v2, v61143; GFX6-SDAG-NEXT: v_ldexp_f32_e32 v3, v3, v71144; GFX6-SDAG-NEXT: s_setpc_b64 s[30:31]1145;1146; GFX8-SDAG-LABEL: test_ldexp_v4f16_v4i16:1147; GFX8-SDAG: ; %bb.0:1148; GFX8-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1149; GFX8-SDAG-NEXT: v_ldexp_f16_sdwa v4, v1, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_11150; GFX8-SDAG-NEXT: v_ldexp_f16_sdwa v5, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_11151; GFX8-SDAG-NEXT: v_ldexp_f16_e32 v1, v1, v31152; GFX8-SDAG-NEXT: v_ldexp_f16_e32 v0, v0, v21153; GFX8-SDAG-NEXT: v_or_b32_e32 v0, v0, v51154; GFX8-SDAG-NEXT: v_or_b32_e32 v1, v1, v41155; GFX8-SDAG-NEXT: s_setpc_b64 s[30:31]1156;1157; GFX9-SDAG-LABEL: test_ldexp_v4f16_v4i16:1158; GFX9-SDAG: ; %bb.0:1159; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1160; GFX9-SDAG-NEXT: v_ldexp_f16_sdwa v4, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_11161; GFX9-SDAG-NEXT: v_ldexp_f16_sdwa v5, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_11162; GFX9-SDAG-NEXT: v_ldexp_f16_e32 v1, v1, v31163; GFX9-SDAG-NEXT: v_ldexp_f16_e32 v0, v0, v21164; GFX9-SDAG-NEXT: v_pack_b32_f16 v0, v0, v51165; GFX9-SDAG-NEXT: v_pack_b32_f16 v1, v1, v41166; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]1167;1168; GFX11-SDAG-TRUE16-LABEL: test_ldexp_v4f16_v4i16:1169; GFX11-SDAG-TRUE16: ; %bb.0:1170; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1171; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v1.h, v1.h, v3.h1172; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.h, v0.h, v2.h1173; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v2.l1174; GFX11-SDAG-TRUE16-NEXT: v_ldexp_f16_e32 v1.l, v1.l, v3.l1175; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)1176; GFX11-SDAG-TRUE16-NEXT: v_pack_b32_f16 v0, v0.l, v0.h1177; GFX11-SDAG-TRUE16-NEXT: v_pack_b32_f16 v1, v1.l, v1.h1178; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]1179;1180; GFX11-SDAG-FAKE16-LABEL: test_ldexp_v4f16_v4i16:1181; GFX11-SDAG-FAKE16: ; %bb.0:1182; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1183; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v4, 16, v31184; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v5, 16, v21185; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v6, 16, v01186; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v7, 16, v11187; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v1, v1, v31188; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v21189; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1190; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v2, v6, v51191; GFX11-SDAG-FAKE16-NEXT: v_ldexp_f16_e32 v3, v7, v41192; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)1193; GFX11-SDAG-FAKE16-NEXT: v_pack_b32_f16 v0, v0, v21194; GFX11-SDAG-FAKE16-NEXT: v_pack_b32_f16 v1, v1, v31195; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]1196;1197; GFX6-GISEL-LABEL: test_ldexp_v4f16_v4i16:1198; GFX6-GISEL: ; %bb.0:1199; GFX6-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1200; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v0, v01201; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v1, v11202; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v2, v21203; GFX6-GISEL-NEXT: v_bfe_i32 v4, v4, 0, 161204; GFX6-GISEL-NEXT: v_cvt_f32_f16_e32 v3, v31205; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v0, v0, v41206; GFX6-GISEL-NEXT: v_bfe_i32 v4, v5, 0, 161207; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v1, v1, v41208; GFX6-GISEL-NEXT: v_bfe_i32 v4, v6, 0, 161209; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v2, v2, v41210; GFX6-GISEL-NEXT: v_bfe_i32 v4, v7, 0, 161211; GFX6-GISEL-NEXT: v_ldexp_f32_e32 v3, v3, v41212; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v0, v01213; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v1, v11214; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v2, v21215; GFX6-GISEL-NEXT: v_cvt_f16_f32_e32 v3, v31216; GFX6-GISEL-NEXT: s_setpc_b64 s[30:31]1217;1218; GFX8-GISEL-LABEL: test_ldexp_v4f16_v4i16:1219; GFX8-GISEL: ; %bb.0:1220; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1221; GFX8-GISEL-NEXT: v_ldexp_f16_e32 v4, v0, v21222; GFX8-GISEL-NEXT: v_ldexp_f16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_11223; GFX8-GISEL-NEXT: v_ldexp_f16_e32 v2, v1, v31224; GFX8-GISEL-NEXT: v_ldexp_f16_sdwa v1, v1, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_11225; GFX8-GISEL-NEXT: v_or_b32_e32 v0, v4, v01226; GFX8-GISEL-NEXT: v_or_b32_e32 v1, v2, v11227; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]1228;1229; GFX9-GISEL-LABEL: test_ldexp_v4f16_v4i16:1230; GFX9-GISEL: ; %bb.0:1231; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1232; GFX9-GISEL-NEXT: v_ldexp_f16_e32 v4, v0, v21233; GFX9-GISEL-NEXT: v_ldexp_f16_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_11234; GFX9-GISEL-NEXT: v_ldexp_f16_e32 v2, v1, v31235; GFX9-GISEL-NEXT: v_ldexp_f16_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_11236; GFX9-GISEL-NEXT: v_lshl_or_b32 v0, v0, 16, v41237; GFX9-GISEL-NEXT: v_lshl_or_b32 v1, v1, 16, v21238; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]1239;1240; GFX11-GISEL-TRUE16-LABEL: test_ldexp_v4f16_v4i16:1241; GFX11-GISEL-TRUE16: ; %bb.0:1242; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1243; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.l, v0.l, v2.l1244; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v0.h, v0.h, v2.h1245; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v1.l, v1.l, v3.l1246; GFX11-GISEL-TRUE16-NEXT: v_ldexp_f16_e32 v1.h, v1.h, v3.h1247; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]1248;1249; GFX11-GISEL-FAKE16-LABEL: test_ldexp_v4f16_v4i16:1250; GFX11-GISEL-FAKE16: ; %bb.0:1251; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1252; GFX11-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v4, 16, v01253; GFX11-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v5, 16, v11254; GFX11-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v6, 16, v21255; GFX11-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v7, 16, v31256; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v0, v0, v21257; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v1, v1, v31258; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1259; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v2, v4, v61260; GFX11-GISEL-FAKE16-NEXT: v_ldexp_f16_e32 v3, v5, v71261; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)1262; GFX11-GISEL-FAKE16-NEXT: v_and_b32_e32 v0, 0xffff, v01263; GFX11-GISEL-FAKE16-NEXT: v_and_b32_e32 v1, 0xffff, v11264; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)1265; GFX11-GISEL-FAKE16-NEXT: v_lshl_or_b32 v0, v2, 16, v01266; GFX11-GISEL-FAKE16-NEXT: v_lshl_or_b32 v1, v3, 16, v11267; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]1268 %result = call <4 x half> @llvm.ldexp.v4f16.v4i16(<4 x half> %a, <4 x i16> %b)1269 ret <4 x half> %result1270}1271 1272declare float @llvm.ldexp.f32.i32(float, i32) #01273declare float @llvm.ldexp.f32.i16(float, i16) #01274declare float @llvm.ldexp.f32.i64(float, i64) #01275declare half @llvm.ldexp.f16.i8(half, i8) #01276declare half @llvm.ldexp.f16.i16(half, i16) #01277declare half @llvm.ldexp.f16.i32(half, i32) #01278declare <2 x half> @llvm.ldexp.v2f16.v2i16(<2 x half>, <2 x i16>) #01279declare <2 x half> @llvm.ldexp.v2f16.v2i32(<2 x half>, <2 x i32>) #01280declare <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float>, <2 x i32>) #01281declare <2 x float> @llvm.ldexp.v2f32.v2i16(<2 x float>, <2 x i16>) #01282declare <2 x float> @llvm.ldexp.v2f32.v2i64(<2 x float>, <2 x i64>) #01283declare <3 x float> @llvm.ldexp.v3f32.v3i32(<3 x float>, <3 x i32>) #01284declare <4 x float> @llvm.ldexp.v4f32.v4i32(<4 x float>, <4 x i32>) #01285declare double @llvm.ldexp.f64.i32(double, i32) #01286declare <2 x double> @llvm.ldexp.v2f64.v2i32(<2 x double>, <2 x i32>) #01287 1288attributes #0 = { nounwind readnone }1289