795 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck %s -check-prefixes=GFX9,GFX9-SDAG3; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck %s -check-prefixes=GFX9,GFX9-GISEL4; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck %s -check-prefixes=GFX10,GFX10-SDAG5; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1010 < %s | FileCheck %s -check-prefixes=GFX10,GFX10-GISEL6; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck %s -check-prefixes=GFX11-SDAG-TRUE167; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck %s -check-prefixes=GFX11-SDAG-FAKE168; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck %s -check-prefixes=GFX11-GISEL-TRUE169; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck %s -check-prefixes=GFX11-GISEL-FAKE1610; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 < %s | FileCheck %s -check-prefixes=GFX12-SDAG-TRUE1611; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 < %s | FileCheck %s -check-prefixes=GFX12-SDAG-FAKE1612; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 < %s | FileCheck %s -check-prefixes=GFX12-GISEL-TRUE1613; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 < %s | FileCheck %s -check-prefixes=GFX12-GISEL-FAKE1614 15declare half @llvm.fma.f16(half, half, half)16declare half @llvm.maxnum.f16(half, half)17 18define half @test_fma(half %x, half %y, half %z) {19; GFX9-LABEL: test_fma:20; GFX9: ; %bb.0:21; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)22; GFX9-NEXT: v_fma_f16 v0, v0, v1, v223; GFX9-NEXT: s_setpc_b64 s[30:31]24;25; GFX10-LABEL: test_fma:26; GFX10: ; %bb.0:27; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)28; GFX10-NEXT: v_fma_f16 v0, v0, v1, v229; GFX10-NEXT: s_setpc_b64 s[30:31]30;31; GFX11-SDAG-TRUE16-LABEL: test_fma:32; GFX11-SDAG-TRUE16: ; %bb.0:33; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)34; GFX11-SDAG-TRUE16-NEXT: v_fma_f16 v0.l, v0.l, v1.l, v2.l35; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]36;37; GFX11-SDAG-FAKE16-LABEL: test_fma:38; GFX11-SDAG-FAKE16: ; %bb.0:39; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)40; GFX11-SDAG-FAKE16-NEXT: v_fma_f16 v0, v0, v1, v241; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]42;43; GFX11-GISEL-TRUE16-LABEL: test_fma:44; GFX11-GISEL-TRUE16: ; %bb.0:45; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)46; GFX11-GISEL-TRUE16-NEXT: v_fmac_f16_e32 v2.l, v0.l, v1.l47; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)48; GFX11-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, v249; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]50;51; GFX11-GISEL-FAKE16-LABEL: test_fma:52; GFX11-GISEL-FAKE16: ; %bb.0:53; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)54; GFX11-GISEL-FAKE16-NEXT: v_fma_f16 v0, v0, v1, v255; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]56;57; GFX12-SDAG-TRUE16-LABEL: test_fma:58; GFX12-SDAG-TRUE16: ; %bb.0:59; GFX12-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x060; GFX12-SDAG-TRUE16-NEXT: s_wait_expcnt 0x061; GFX12-SDAG-TRUE16-NEXT: s_wait_samplecnt 0x062; GFX12-SDAG-TRUE16-NEXT: s_wait_bvhcnt 0x063; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x064; GFX12-SDAG-TRUE16-NEXT: v_fma_f16 v0.l, v0.l, v1.l, v2.l65; GFX12-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]66;67; GFX12-SDAG-FAKE16-LABEL: test_fma:68; GFX12-SDAG-FAKE16: ; %bb.0:69; GFX12-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x070; GFX12-SDAG-FAKE16-NEXT: s_wait_expcnt 0x071; GFX12-SDAG-FAKE16-NEXT: s_wait_samplecnt 0x072; GFX12-SDAG-FAKE16-NEXT: s_wait_bvhcnt 0x073; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x074; GFX12-SDAG-FAKE16-NEXT: v_fma_f16 v0, v0, v1, v275; GFX12-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]76;77; GFX12-GISEL-TRUE16-LABEL: test_fma:78; GFX12-GISEL-TRUE16: ; %bb.0:79; GFX12-GISEL-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x080; GFX12-GISEL-TRUE16-NEXT: s_wait_expcnt 0x081; GFX12-GISEL-TRUE16-NEXT: s_wait_samplecnt 0x082; GFX12-GISEL-TRUE16-NEXT: s_wait_bvhcnt 0x083; GFX12-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x084; GFX12-GISEL-TRUE16-NEXT: v_fmac_f16_e32 v2.l, v0.l, v1.l85; GFX12-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)86; GFX12-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, v287; GFX12-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]88;89; GFX12-GISEL-FAKE16-LABEL: test_fma:90; GFX12-GISEL-FAKE16: ; %bb.0:91; GFX12-GISEL-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x092; GFX12-GISEL-FAKE16-NEXT: s_wait_expcnt 0x093; GFX12-GISEL-FAKE16-NEXT: s_wait_samplecnt 0x094; GFX12-GISEL-FAKE16-NEXT: s_wait_bvhcnt 0x095; GFX12-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x096; GFX12-GISEL-FAKE16-NEXT: v_fma_f16 v0, v0, v1, v297; GFX12-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]98 %r = call half @llvm.fma.f16(half %x, half %y, half %z)99 ret half %r100}101 102; GFX10+ has v_fmac_f16.103define half @test_fmac(half %x, half %y, half %z) {104; GFX9-LABEL: test_fmac:105; GFX9: ; %bb.0:106; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)107; GFX9-NEXT: v_fma_f16 v0, v1, v2, v0108; GFX9-NEXT: s_setpc_b64 s[30:31]109;110; GFX10-LABEL: test_fmac:111; GFX10: ; %bb.0:112; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)113; GFX10-NEXT: v_fmac_f16_e32 v0, v1, v2114; GFX10-NEXT: s_setpc_b64 s[30:31]115;116; GFX11-SDAG-TRUE16-LABEL: test_fmac:117; GFX11-SDAG-TRUE16: ; %bb.0:118; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)119; GFX11-SDAG-TRUE16-NEXT: v_fmac_f16_e32 v0.l, v1.l, v2.l120; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]121;122; GFX11-SDAG-FAKE16-LABEL: test_fmac:123; GFX11-SDAG-FAKE16: ; %bb.0:124; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)125; GFX11-SDAG-FAKE16-NEXT: v_fmac_f16_e32 v0, v1, v2126; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]127;128; GFX11-GISEL-TRUE16-LABEL: test_fmac:129; GFX11-GISEL-TRUE16: ; %bb.0:130; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)131; GFX11-GISEL-TRUE16-NEXT: v_fmac_f16_e32 v0.l, v1.l, v2.l132; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]133;134; GFX11-GISEL-FAKE16-LABEL: test_fmac:135; GFX11-GISEL-FAKE16: ; %bb.0:136; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)137; GFX11-GISEL-FAKE16-NEXT: v_fmac_f16_e32 v0, v1, v2138; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]139;140; GFX12-SDAG-TRUE16-LABEL: test_fmac:141; GFX12-SDAG-TRUE16: ; %bb.0:142; GFX12-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0143; GFX12-SDAG-TRUE16-NEXT: s_wait_expcnt 0x0144; GFX12-SDAG-TRUE16-NEXT: s_wait_samplecnt 0x0145; GFX12-SDAG-TRUE16-NEXT: s_wait_bvhcnt 0x0146; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0147; GFX12-SDAG-TRUE16-NEXT: v_fmac_f16_e32 v0.l, v1.l, v2.l148; GFX12-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]149;150; GFX12-SDAG-FAKE16-LABEL: test_fmac:151; GFX12-SDAG-FAKE16: ; %bb.0:152; GFX12-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0153; GFX12-SDAG-FAKE16-NEXT: s_wait_expcnt 0x0154; GFX12-SDAG-FAKE16-NEXT: s_wait_samplecnt 0x0155; GFX12-SDAG-FAKE16-NEXT: s_wait_bvhcnt 0x0156; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0157; GFX12-SDAG-FAKE16-NEXT: v_fmac_f16_e32 v0, v1, v2158; GFX12-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]159;160; GFX12-GISEL-TRUE16-LABEL: test_fmac:161; GFX12-GISEL-TRUE16: ; %bb.0:162; GFX12-GISEL-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0163; GFX12-GISEL-TRUE16-NEXT: s_wait_expcnt 0x0164; GFX12-GISEL-TRUE16-NEXT: s_wait_samplecnt 0x0165; GFX12-GISEL-TRUE16-NEXT: s_wait_bvhcnt 0x0166; GFX12-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x0167; GFX12-GISEL-TRUE16-NEXT: v_fmac_f16_e32 v0.l, v1.l, v2.l168; GFX12-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]169;170; GFX12-GISEL-FAKE16-LABEL: test_fmac:171; GFX12-GISEL-FAKE16: ; %bb.0:172; GFX12-GISEL-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0173; GFX12-GISEL-FAKE16-NEXT: s_wait_expcnt 0x0174; GFX12-GISEL-FAKE16-NEXT: s_wait_samplecnt 0x0175; GFX12-GISEL-FAKE16-NEXT: s_wait_bvhcnt 0x0176; GFX12-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x0177; GFX12-GISEL-FAKE16-NEXT: v_fmac_f16_e32 v0, v1, v2178; GFX12-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]179 %r = call half @llvm.fma.f16(half %y, half %z, half %x)180 ret half %r181}182 183; GFX10+ has v_fmaak_f16.184define half @test_fmaak(half %x, half %y, half %z) {185; GFX9-SDAG-LABEL: test_fmaak:186; GFX9-SDAG: ; %bb.0:187; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)188; GFX9-SDAG-NEXT: s_movk_i32 s4, 0x4200189; GFX9-SDAG-NEXT: v_fma_f16 v0, v0, v1, s4190; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]191;192; GFX9-GISEL-LABEL: test_fmaak:193; GFX9-GISEL: ; %bb.0:194; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)195; GFX9-GISEL-NEXT: v_mov_b32_e32 v2, 0x4200196; GFX9-GISEL-NEXT: v_fma_f16 v0, v0, v1, v2197; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]198;199; GFX10-LABEL: test_fmaak:200; GFX10: ; %bb.0:201; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)202; GFX10-NEXT: v_fmaak_f16 v0, v0, v1, 0x4200203; GFX10-NEXT: s_setpc_b64 s[30:31]204;205; GFX11-SDAG-TRUE16-LABEL: test_fmaak:206; GFX11-SDAG-TRUE16: ; %bb.0:207; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)208; GFX11-SDAG-TRUE16-NEXT: v_fmaak_f16 v0.l, v0.l, v1.l, 0x4200209; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]210;211; GFX11-SDAG-FAKE16-LABEL: test_fmaak:212; GFX11-SDAG-FAKE16: ; %bb.0:213; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)214; GFX11-SDAG-FAKE16-NEXT: v_fmaak_f16 v0, v0, v1, 0x4200215; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]216;217; GFX11-GISEL-TRUE16-LABEL: test_fmaak:218; GFX11-GISEL-TRUE16: ; %bb.0:219; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)220; GFX11-GISEL-TRUE16-NEXT: v_fmaak_f16 v0.l, v0.l, v1.l, 0x4200221; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]222;223; GFX11-GISEL-FAKE16-LABEL: test_fmaak:224; GFX11-GISEL-FAKE16: ; %bb.0:225; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)226; GFX11-GISEL-FAKE16-NEXT: v_fmaak_f16 v0, v0, v1, 0x4200227; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]228;229; GFX12-SDAG-TRUE16-LABEL: test_fmaak:230; GFX12-SDAG-TRUE16: ; %bb.0:231; GFX12-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0232; GFX12-SDAG-TRUE16-NEXT: s_wait_expcnt 0x0233; GFX12-SDAG-TRUE16-NEXT: s_wait_samplecnt 0x0234; GFX12-SDAG-TRUE16-NEXT: s_wait_bvhcnt 0x0235; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0236; GFX12-SDAG-TRUE16-NEXT: v_fmaak_f16 v0.l, v0.l, v1.l, 0x4200237; GFX12-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]238;239; GFX12-SDAG-FAKE16-LABEL: test_fmaak:240; GFX12-SDAG-FAKE16: ; %bb.0:241; GFX12-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0242; GFX12-SDAG-FAKE16-NEXT: s_wait_expcnt 0x0243; GFX12-SDAG-FAKE16-NEXT: s_wait_samplecnt 0x0244; GFX12-SDAG-FAKE16-NEXT: s_wait_bvhcnt 0x0245; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0246; GFX12-SDAG-FAKE16-NEXT: v_fmaak_f16 v0, v0, v1, 0x4200247; GFX12-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]248;249; GFX12-GISEL-TRUE16-LABEL: test_fmaak:250; GFX12-GISEL-TRUE16: ; %bb.0:251; GFX12-GISEL-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0252; GFX12-GISEL-TRUE16-NEXT: s_wait_expcnt 0x0253; GFX12-GISEL-TRUE16-NEXT: s_wait_samplecnt 0x0254; GFX12-GISEL-TRUE16-NEXT: s_wait_bvhcnt 0x0255; GFX12-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x0256; GFX12-GISEL-TRUE16-NEXT: v_fmaak_f16 v0.l, v0.l, v1.l, 0x4200257; GFX12-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]258;259; GFX12-GISEL-FAKE16-LABEL: test_fmaak:260; GFX12-GISEL-FAKE16: ; %bb.0:261; GFX12-GISEL-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0262; GFX12-GISEL-FAKE16-NEXT: s_wait_expcnt 0x0263; GFX12-GISEL-FAKE16-NEXT: s_wait_samplecnt 0x0264; GFX12-GISEL-FAKE16-NEXT: s_wait_bvhcnt 0x0265; GFX12-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x0266; GFX12-GISEL-FAKE16-NEXT: v_fmaak_f16 v0, v0, v1, 0x4200267; GFX12-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]268 %r = call half @llvm.fma.f16(half %x, half %y, half 0xH4200)269 ret half %r270}271 272; GFX10+ has v_fmamk_f16.273define half @test_fmamk(half %x, half %y, half %z) {274; GFX9-SDAG-LABEL: test_fmamk:275; GFX9-SDAG: ; %bb.0:276; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)277; GFX9-SDAG-NEXT: s_movk_i32 s4, 0x4200278; GFX9-SDAG-NEXT: v_fma_f16 v0, v0, s4, v2279; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]280;281; GFX9-GISEL-LABEL: test_fmamk:282; GFX9-GISEL: ; %bb.0:283; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)284; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, 0x4200285; GFX9-GISEL-NEXT: v_fma_f16 v0, v0, v1, v2286; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]287;288; GFX10-LABEL: test_fmamk:289; GFX10: ; %bb.0:290; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)291; GFX10-NEXT: v_fmamk_f16 v0, v0, 0x4200, v2292; GFX10-NEXT: s_setpc_b64 s[30:31]293;294; GFX11-SDAG-TRUE16-LABEL: test_fmamk:295; GFX11-SDAG-TRUE16: ; %bb.0:296; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)297; GFX11-SDAG-TRUE16-NEXT: v_fmamk_f16 v0.l, v0.l, 0x4200, v2.l298; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]299;300; GFX11-SDAG-FAKE16-LABEL: test_fmamk:301; GFX11-SDAG-FAKE16: ; %bb.0:302; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)303; GFX11-SDAG-FAKE16-NEXT: v_fmamk_f16 v0, v0, 0x4200, v2304; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]305;306; GFX11-GISEL-TRUE16-LABEL: test_fmamk:307; GFX11-GISEL-TRUE16: ; %bb.0:308; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)309; GFX11-GISEL-TRUE16-NEXT: v_fmac_f16_e32 v2.l, 0x4200, v0.l310; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)311; GFX11-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, v2312; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]313;314; GFX11-GISEL-FAKE16-LABEL: test_fmamk:315; GFX11-GISEL-FAKE16: ; %bb.0:316; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)317; GFX11-GISEL-FAKE16-NEXT: v_fmamk_f16 v0, v0, 0x4200, v2318; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]319;320; GFX12-SDAG-TRUE16-LABEL: test_fmamk:321; GFX12-SDAG-TRUE16: ; %bb.0:322; GFX12-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0323; GFX12-SDAG-TRUE16-NEXT: s_wait_expcnt 0x0324; GFX12-SDAG-TRUE16-NEXT: s_wait_samplecnt 0x0325; GFX12-SDAG-TRUE16-NEXT: s_wait_bvhcnt 0x0326; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0327; GFX12-SDAG-TRUE16-NEXT: v_fmamk_f16 v0.l, v0.l, 0x4200, v2.l328; GFX12-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]329;330; GFX12-SDAG-FAKE16-LABEL: test_fmamk:331; GFX12-SDAG-FAKE16: ; %bb.0:332; GFX12-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0333; GFX12-SDAG-FAKE16-NEXT: s_wait_expcnt 0x0334; GFX12-SDAG-FAKE16-NEXT: s_wait_samplecnt 0x0335; GFX12-SDAG-FAKE16-NEXT: s_wait_bvhcnt 0x0336; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0337; GFX12-SDAG-FAKE16-NEXT: v_fmamk_f16 v0, v0, 0x4200, v2338; GFX12-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]339;340; GFX12-GISEL-TRUE16-LABEL: test_fmamk:341; GFX12-GISEL-TRUE16: ; %bb.0:342; GFX12-GISEL-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0343; GFX12-GISEL-TRUE16-NEXT: s_wait_expcnt 0x0344; GFX12-GISEL-TRUE16-NEXT: s_wait_samplecnt 0x0345; GFX12-GISEL-TRUE16-NEXT: s_wait_bvhcnt 0x0346; GFX12-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x0347; GFX12-GISEL-TRUE16-NEXT: v_fmac_f16_e32 v2.l, 0x4200, v0.l348; GFX12-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)349; GFX12-GISEL-TRUE16-NEXT: v_mov_b32_e32 v0, v2350; GFX12-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]351;352; GFX12-GISEL-FAKE16-LABEL: test_fmamk:353; GFX12-GISEL-FAKE16: ; %bb.0:354; GFX12-GISEL-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0355; GFX12-GISEL-FAKE16-NEXT: s_wait_expcnt 0x0356; GFX12-GISEL-FAKE16-NEXT: s_wait_samplecnt 0x0357; GFX12-GISEL-FAKE16-NEXT: s_wait_bvhcnt 0x0358; GFX12-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x0359; GFX12-GISEL-FAKE16-NEXT: v_fmamk_f16 v0, v0, 0x4200, v2360; GFX12-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]361 %r = call half @llvm.fma.f16(half %x, half 0xH4200, half %z)362 ret half %r363}364 365; Regression test for a crash caused by D139469.366define i32 @test_D139469_f16(half %arg) {367; GFX9-SDAG-LABEL: test_D139469_f16:368; GFX9-SDAG: ; %bb.0: ; %bb369; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)370; GFX9-SDAG-NEXT: s_movk_i32 s4, 0x291e371; GFX9-SDAG-NEXT: v_mov_b32_e32 v2, 0x211e372; GFX9-SDAG-NEXT: v_mul_f16_e32 v1, 0x291e, v0373; GFX9-SDAG-NEXT: v_fma_f16 v0, v0, s4, v2374; GFX9-SDAG-NEXT: v_min_f16_e32 v0, v1, v0375; GFX9-SDAG-NEXT: v_cmp_gt_f16_e32 vcc, 0, v0376; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc377; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]378;379; GFX9-GISEL-LABEL: test_D139469_f16:380; GFX9-GISEL: ; %bb.0: ; %bb381; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)382; GFX9-GISEL-NEXT: v_mul_f16_e32 v2, 0x291e, v0383; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, 0x291e384; GFX9-GISEL-NEXT: v_cmp_gt_f16_e32 vcc, 0, v2385; GFX9-GISEL-NEXT: v_mov_b32_e32 v2, 0x211e386; GFX9-GISEL-NEXT: v_fma_f16 v0, v0, v1, v2387; GFX9-GISEL-NEXT: v_cmp_gt_f16_e64 s[4:5], 0, v0388; GFX9-GISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5]389; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]390; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]391;392; GFX10-SDAG-LABEL: test_D139469_f16:393; GFX10-SDAG: ; %bb.0: ; %bb394; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)395; GFX10-SDAG-NEXT: s_movk_i32 s4, 0x291e396; GFX10-SDAG-NEXT: v_mul_f16_e32 v1, 0x291e, v0397; GFX10-SDAG-NEXT: v_fmaak_f16 v0, s4, v0, 0x211e398; GFX10-SDAG-NEXT: v_min_f16_e32 v0, v1, v0399; GFX10-SDAG-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v0400; GFX10-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo401; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]402;403; GFX10-GISEL-LABEL: test_D139469_f16:404; GFX10-GISEL: ; %bb.0: ; %bb405; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)406; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 0x211e407; GFX10-GISEL-NEXT: v_mul_f16_e32 v2, 0x291e, v0408; GFX10-GISEL-NEXT: v_fmac_f16_e32 v1, 0x291e, v0409; GFX10-GISEL-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v2410; GFX10-GISEL-NEXT: v_cmp_gt_f16_e64 s4, 0, v1411; GFX10-GISEL-NEXT: s_or_b32 s4, vcc_lo, s4412; GFX10-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s4413; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]414;415; GFX11-SDAG-TRUE16-LABEL: test_D139469_f16:416; GFX11-SDAG-TRUE16: ; %bb.0: ; %bb417; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)418; GFX11-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 0x211e419; GFX11-SDAG-TRUE16-NEXT: v_mul_f16_e32 v1.l, 0x291e, v0.l420; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)421; GFX11-SDAG-TRUE16-NEXT: v_fmac_f16_e32 v0.h, 0x291e, v0.l422; GFX11-SDAG-TRUE16-NEXT: v_min_f16_e32 v0.l, v1.l, v0.h423; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)424; GFX11-SDAG-TRUE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v0.l425; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo426; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]427;428; GFX11-SDAG-FAKE16-LABEL: test_D139469_f16:429; GFX11-SDAG-FAKE16: ; %bb.0: ; %bb430; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)431; GFX11-SDAG-FAKE16-NEXT: v_mov_b32_e32 v1, 0x211e432; GFX11-SDAG-FAKE16-NEXT: v_mul_f16_e32 v2, 0x291e, v0433; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)434; GFX11-SDAG-FAKE16-NEXT: v_fmac_f16_e32 v1, 0x291e, v0435; GFX11-SDAG-FAKE16-NEXT: v_min_f16_e32 v0, v2, v1436; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)437; GFX11-SDAG-FAKE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v0438; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo439; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]440;441; GFX11-GISEL-TRUE16-LABEL: test_D139469_f16:442; GFX11-GISEL-TRUE16: ; %bb.0: ; %bb443; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)444; GFX11-GISEL-TRUE16-NEXT: v_mov_b16_e32 v0.h, 0x211e445; GFX11-GISEL-TRUE16-NEXT: v_mul_f16_e32 v1.l, 0x291e, v0.l446; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)447; GFX11-GISEL-TRUE16-NEXT: v_fmac_f16_e32 v0.h, 0x291e, v0.l448; GFX11-GISEL-TRUE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v1.l449; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)450; GFX11-GISEL-TRUE16-NEXT: v_cmp_gt_f16_e64 s0, 0, v0.h451; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s0, vcc_lo, s0452; GFX11-GISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0453; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]454;455; GFX11-GISEL-FAKE16-LABEL: test_D139469_f16:456; GFX11-GISEL-FAKE16: ; %bb.0: ; %bb457; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)458; GFX11-GISEL-FAKE16-NEXT: v_mov_b32_e32 v1, 0x211e459; GFX11-GISEL-FAKE16-NEXT: v_mul_f16_e32 v2, 0x291e, v0460; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)461; GFX11-GISEL-FAKE16-NEXT: v_fmac_f16_e32 v1, 0x291e, v0462; GFX11-GISEL-FAKE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v2463; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)464; GFX11-GISEL-FAKE16-NEXT: v_cmp_gt_f16_e64 s0, 0, v1465; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s0, vcc_lo, s0466; GFX11-GISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0467; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]468;469; GFX12-SDAG-TRUE16-LABEL: test_D139469_f16:470; GFX12-SDAG-TRUE16: ; %bb.0: ; %bb471; GFX12-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0472; GFX12-SDAG-TRUE16-NEXT: s_wait_expcnt 0x0473; GFX12-SDAG-TRUE16-NEXT: s_wait_samplecnt 0x0474; GFX12-SDAG-TRUE16-NEXT: s_wait_bvhcnt 0x0475; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0476; GFX12-SDAG-TRUE16-NEXT: v_mov_b16_e32 v0.h, 0x211e477; GFX12-SDAG-TRUE16-NEXT: v_mul_f16_e32 v1.l, 0x291e, v0.l478; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)479; GFX12-SDAG-TRUE16-NEXT: v_fmac_f16_e32 v0.h, 0x291e, v0.l480; GFX12-SDAG-TRUE16-NEXT: v_min_num_f16_e32 v0.l, v1.l, v0.h481; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)482; GFX12-SDAG-TRUE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v0.l483; GFX12-SDAG-TRUE16-NEXT: s_wait_alu depctr_va_vcc(0)484; GFX12-SDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo485; GFX12-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]486;487; GFX12-SDAG-FAKE16-LABEL: test_D139469_f16:488; GFX12-SDAG-FAKE16: ; %bb.0: ; %bb489; GFX12-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0490; GFX12-SDAG-FAKE16-NEXT: s_wait_expcnt 0x0491; GFX12-SDAG-FAKE16-NEXT: s_wait_samplecnt 0x0492; GFX12-SDAG-FAKE16-NEXT: s_wait_bvhcnt 0x0493; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0494; GFX12-SDAG-FAKE16-NEXT: v_mov_b32_e32 v1, 0x211e495; GFX12-SDAG-FAKE16-NEXT: v_mul_f16_e32 v2, 0x291e, v0496; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)497; GFX12-SDAG-FAKE16-NEXT: v_fmac_f16_e32 v1, 0x291e, v0498; GFX12-SDAG-FAKE16-NEXT: v_min_num_f16_e32 v0, v2, v1499; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)500; GFX12-SDAG-FAKE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v0501; GFX12-SDAG-FAKE16-NEXT: s_wait_alu depctr_va_vcc(0)502; GFX12-SDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo503; GFX12-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]504;505; GFX12-GISEL-TRUE16-LABEL: test_D139469_f16:506; GFX12-GISEL-TRUE16: ; %bb.0: ; %bb507; GFX12-GISEL-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0508; GFX12-GISEL-TRUE16-NEXT: s_wait_expcnt 0x0509; GFX12-GISEL-TRUE16-NEXT: s_wait_samplecnt 0x0510; GFX12-GISEL-TRUE16-NEXT: s_wait_bvhcnt 0x0511; GFX12-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x0512; GFX12-GISEL-TRUE16-NEXT: v_mov_b16_e32 v0.h, 0x211e513; GFX12-GISEL-TRUE16-NEXT: v_mul_f16_e32 v1.l, 0x291e, v0.l514; GFX12-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)515; GFX12-GISEL-TRUE16-NEXT: v_fmac_f16_e32 v0.h, 0x291e, v0.l516; GFX12-GISEL-TRUE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v1.l517; GFX12-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)518; GFX12-GISEL-TRUE16-NEXT: v_cmp_gt_f16_e64 s0, 0, v0.h519; GFX12-GISEL-TRUE16-NEXT: s_or_b32 s0, vcc_lo, s0520; GFX12-GISEL-TRUE16-NEXT: s_wait_alu depctr_sa_sdst(0)521; GFX12-GISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0522; GFX12-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]523;524; GFX12-GISEL-FAKE16-LABEL: test_D139469_f16:525; GFX12-GISEL-FAKE16: ; %bb.0: ; %bb526; GFX12-GISEL-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0527; GFX12-GISEL-FAKE16-NEXT: s_wait_expcnt 0x0528; GFX12-GISEL-FAKE16-NEXT: s_wait_samplecnt 0x0529; GFX12-GISEL-FAKE16-NEXT: s_wait_bvhcnt 0x0530; GFX12-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x0531; GFX12-GISEL-FAKE16-NEXT: v_mov_b32_e32 v1, 0x211e532; GFX12-GISEL-FAKE16-NEXT: v_mul_f16_e32 v2, 0x291e, v0533; GFX12-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)534; GFX12-GISEL-FAKE16-NEXT: v_fmac_f16_e32 v1, 0x291e, v0535; GFX12-GISEL-FAKE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v2536; GFX12-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)537; GFX12-GISEL-FAKE16-NEXT: v_cmp_gt_f16_e64 s0, 0, v1538; GFX12-GISEL-FAKE16-NEXT: s_or_b32 s0, vcc_lo, s0539; GFX12-GISEL-FAKE16-NEXT: s_wait_alu depctr_sa_sdst(0)540; GFX12-GISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0541; GFX12-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]542bb:543 %i = fmul contract half %arg, 0xH291E544 %i1 = fcmp olt half %i, 0xH0000545 %i2 = fadd contract half %i, 0xH211E546 %i3 = fcmp olt half %i2, 0xH0000547 %i4 = or i1 %i1, %i3548 %i5 = zext i1 %i4 to i32549 ret i32 %i5550}551 552define <2 x i32> @test_D139469_v2f16(<2 x half> %arg) {553; GFX9-SDAG-LABEL: test_D139469_v2f16:554; GFX9-SDAG: ; %bb.0: ; %bb555; GFX9-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)556; GFX9-SDAG-NEXT: s_movk_i32 s4, 0x291e557; GFX9-SDAG-NEXT: v_mov_b32_e32 v2, 0x211e558; GFX9-SDAG-NEXT: v_pk_mul_f16 v1, v0, s4 op_sel_hi:[1,0]559; GFX9-SDAG-NEXT: v_pk_fma_f16 v0, v0, s4, v2 op_sel_hi:[1,0,0]560; GFX9-SDAG-NEXT: v_pk_min_f16 v1, v1, v0561; GFX9-SDAG-NEXT: v_mov_b32_e32 v2, 0562; GFX9-SDAG-NEXT: v_cmp_gt_f16_e32 vcc, 0, v1563; GFX9-SDAG-NEXT: v_cmp_lt_f16_sdwa s[4:5], v1, v2 src0_sel:WORD_1 src1_sel:DWORD564; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc565; GFX9-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, s[4:5]566; GFX9-SDAG-NEXT: s_setpc_b64 s[30:31]567;568; GFX9-GISEL-LABEL: test_D139469_v2f16:569; GFX9-GISEL: ; %bb.0: ; %bb570; GFX9-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)571; GFX9-GISEL-NEXT: v_mov_b32_e32 v1, 0x291e291e572; GFX9-GISEL-NEXT: v_pk_mul_f16 v2, v0, v1573; GFX9-GISEL-NEXT: v_mov_b32_e32 v3, 0574; GFX9-GISEL-NEXT: v_cmp_gt_f16_e32 vcc, 0, v2575; GFX9-GISEL-NEXT: v_cmp_lt_f16_sdwa s[6:7], v2, v3 src0_sel:WORD_1 src1_sel:DWORD576; GFX9-GISEL-NEXT: v_mov_b32_e32 v2, 0x211e211e577; GFX9-GISEL-NEXT: v_pk_fma_f16 v0, v0, v1, v2578; GFX9-GISEL-NEXT: v_cmp_gt_f16_e64 s[4:5], 0, v0579; GFX9-GISEL-NEXT: v_cmp_lt_f16_sdwa s[8:9], v0, v3 src0_sel:WORD_1 src1_sel:DWORD580; GFX9-GISEL-NEXT: s_or_b64 s[4:5], vcc, s[4:5]581; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s[4:5]582; GFX9-GISEL-NEXT: s_or_b64 s[4:5], s[6:7], s[8:9]583; GFX9-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s[4:5]584; GFX9-GISEL-NEXT: s_setpc_b64 s[30:31]585;586; GFX10-SDAG-LABEL: test_D139469_v2f16:587; GFX10-SDAG: ; %bb.0: ; %bb588; GFX10-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)589; GFX10-SDAG-NEXT: s_movk_i32 s4, 0x211e590; GFX10-SDAG-NEXT: v_pk_mul_f16 v1, 0x291e, v0 op_sel_hi:[0,1]591; GFX10-SDAG-NEXT: v_pk_fma_f16 v0, 0x291e, v0, s4 op_sel_hi:[0,1,0]592; GFX10-SDAG-NEXT: v_mov_b32_e32 v2, 0593; GFX10-SDAG-NEXT: v_pk_min_f16 v1, v1, v0594; GFX10-SDAG-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v1595; GFX10-SDAG-NEXT: v_cmp_lt_f16_sdwa s4, v1, v2 src0_sel:WORD_1 src1_sel:DWORD596; GFX10-SDAG-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo597; GFX10-SDAG-NEXT: v_cndmask_b32_e64 v1, 0, 1, s4598; GFX10-SDAG-NEXT: s_setpc_b64 s[30:31]599;600; GFX10-GISEL-LABEL: test_D139469_v2f16:601; GFX10-GISEL: ; %bb.0: ; %bb602; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)603; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 0x211e211e604; GFX10-GISEL-NEXT: v_pk_mul_f16 v2, 0x291e291e, v0605; GFX10-GISEL-NEXT: v_pk_fma_f16 v0, 0x291e291e, v0, v1606; GFX10-GISEL-NEXT: v_mov_b32_e32 v1, 0607; GFX10-GISEL-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v2608; GFX10-GISEL-NEXT: v_cmp_gt_f16_e64 s4, 0, v0609; GFX10-GISEL-NEXT: v_cmp_lt_f16_sdwa s5, v2, v1 src0_sel:WORD_1 src1_sel:DWORD610; GFX10-GISEL-NEXT: v_cmp_lt_f16_sdwa s6, v0, v1 src0_sel:WORD_1 src1_sel:DWORD611; GFX10-GISEL-NEXT: s_or_b32 s4, vcc_lo, s4612; GFX10-GISEL-NEXT: v_cndmask_b32_e64 v0, 0, 1, s4613; GFX10-GISEL-NEXT: s_or_b32 s4, s5, s6614; GFX10-GISEL-NEXT: v_cndmask_b32_e64 v1, 0, 1, s4615; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]616;617; GFX11-SDAG-TRUE16-LABEL: test_D139469_v2f16:618; GFX11-SDAG-TRUE16: ; %bb.0: ; %bb619; GFX11-SDAG-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)620; GFX11-SDAG-TRUE16-NEXT: s_movk_i32 s0, 0x211e621; GFX11-SDAG-TRUE16-NEXT: v_pk_mul_f16 v1, 0x291e, v0 op_sel_hi:[0,1]622; GFX11-SDAG-TRUE16-NEXT: v_pk_fma_f16 v0, 0x291e, v0, s0 op_sel_hi:[0,1,0]623; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)624; GFX11-SDAG-TRUE16-NEXT: v_pk_min_f16 v1, v1, v0625; GFX11-SDAG-TRUE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v1.l626; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo627; GFX11-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)628; GFX11-SDAG-TRUE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v1.h629; GFX11-SDAG-TRUE16-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo630; GFX11-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]631;632; GFX11-SDAG-FAKE16-LABEL: test_D139469_v2f16:633; GFX11-SDAG-FAKE16: ; %bb.0: ; %bb634; GFX11-SDAG-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)635; GFX11-SDAG-FAKE16-NEXT: s_movk_i32 s0, 0x211e636; GFX11-SDAG-FAKE16-NEXT: v_pk_mul_f16 v1, 0x291e, v0 op_sel_hi:[0,1]637; GFX11-SDAG-FAKE16-NEXT: v_pk_fma_f16 v0, 0x291e, v0, s0 op_sel_hi:[0,1,0]638; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)639; GFX11-SDAG-FAKE16-NEXT: v_pk_min_f16 v0, v1, v0640; GFX11-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v0641; GFX11-SDAG-FAKE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v0642; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo643; GFX11-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)644; GFX11-SDAG-FAKE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v1645; GFX11-SDAG-FAKE16-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo646; GFX11-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]647;648; GFX11-GISEL-TRUE16-LABEL: test_D139469_v2f16:649; GFX11-GISEL-TRUE16: ; %bb.0: ; %bb650; GFX11-GISEL-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)651; GFX11-GISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x211e211e652; GFX11-GISEL-TRUE16-NEXT: v_pk_mul_f16 v2, 0x291e291e, v0653; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)654; GFX11-GISEL-TRUE16-NEXT: v_pk_fma_f16 v0, 0x291e291e, v0, v1655; GFX11-GISEL-TRUE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v2.l656; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)657; GFX11-GISEL-TRUE16-NEXT: v_cmp_gt_f16_e64 s1, 0, v2.h658; GFX11-GISEL-TRUE16-NEXT: v_cmp_gt_f16_e64 s0, 0, v0.l659; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)660; GFX11-GISEL-TRUE16-NEXT: v_cmp_gt_f16_e64 s2, 0, v0.h661; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s0, vcc_lo, s0662; GFX11-GISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0663; GFX11-GISEL-TRUE16-NEXT: s_or_b32 s0, s1, s2664; GFX11-GISEL-TRUE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)665; GFX11-GISEL-TRUE16-NEXT: v_cndmask_b32_e64 v1, 0, 1, s0666; GFX11-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]667;668; GFX11-GISEL-FAKE16-LABEL: test_D139469_v2f16:669; GFX11-GISEL-FAKE16: ; %bb.0: ; %bb670; GFX11-GISEL-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)671; GFX11-GISEL-FAKE16-NEXT: v_mov_b32_e32 v1, 0x211e211e672; GFX11-GISEL-FAKE16-NEXT: v_pk_mul_f16 v2, 0x291e291e, v0673; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)674; GFX11-GISEL-FAKE16-NEXT: v_pk_fma_f16 v0, 0x291e291e, v0, v1675; GFX11-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v2676; GFX11-GISEL-FAKE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v2677; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)678; GFX11-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v0679; GFX11-GISEL-FAKE16-NEXT: v_cmp_gt_f16_e64 s0, 0, v0680; GFX11-GISEL-FAKE16-NEXT: v_cmp_gt_f16_e64 s1, 0, v1681; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)682; GFX11-GISEL-FAKE16-NEXT: v_cmp_gt_f16_e64 s2, 0, v3683; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s0, vcc_lo, s0684; GFX11-GISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0685; GFX11-GISEL-FAKE16-NEXT: s_or_b32 s0, s1, s2686; GFX11-GISEL-FAKE16-NEXT: s_delay_alu instid0(SALU_CYCLE_1)687; GFX11-GISEL-FAKE16-NEXT: v_cndmask_b32_e64 v1, 0, 1, s0688; GFX11-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]689;690; GFX12-SDAG-TRUE16-LABEL: test_D139469_v2f16:691; GFX12-SDAG-TRUE16: ; %bb.0: ; %bb692; GFX12-SDAG-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0693; GFX12-SDAG-TRUE16-NEXT: s_wait_expcnt 0x0694; GFX12-SDAG-TRUE16-NEXT: s_wait_samplecnt 0x0695; GFX12-SDAG-TRUE16-NEXT: s_wait_bvhcnt 0x0696; GFX12-SDAG-TRUE16-NEXT: s_wait_kmcnt 0x0697; GFX12-SDAG-TRUE16-NEXT: s_movk_i32 s0, 0x211e698; GFX12-SDAG-TRUE16-NEXT: v_pk_mul_f16 v1, 0x291e, v0 op_sel_hi:[0,1]699; GFX12-SDAG-TRUE16-NEXT: s_wait_alu depctr_sa_sdst(0)700; GFX12-SDAG-TRUE16-NEXT: v_pk_fma_f16 v0, 0x291e, v0, s0 op_sel_hi:[0,1,0]701; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)702; GFX12-SDAG-TRUE16-NEXT: v_pk_min_num_f16 v1, v1, v0703; GFX12-SDAG-TRUE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v1.l704; GFX12-SDAG-TRUE16-NEXT: s_wait_alu depctr_va_vcc(0)705; GFX12-SDAG-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo706; GFX12-SDAG-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3)707; GFX12-SDAG-TRUE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v1.h708; GFX12-SDAG-TRUE16-NEXT: s_wait_alu depctr_va_vcc(0)709; GFX12-SDAG-TRUE16-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo710; GFX12-SDAG-TRUE16-NEXT: s_setpc_b64 s[30:31]711;712; GFX12-SDAG-FAKE16-LABEL: test_D139469_v2f16:713; GFX12-SDAG-FAKE16: ; %bb.0: ; %bb714; GFX12-SDAG-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0715; GFX12-SDAG-FAKE16-NEXT: s_wait_expcnt 0x0716; GFX12-SDAG-FAKE16-NEXT: s_wait_samplecnt 0x0717; GFX12-SDAG-FAKE16-NEXT: s_wait_bvhcnt 0x0718; GFX12-SDAG-FAKE16-NEXT: s_wait_kmcnt 0x0719; GFX12-SDAG-FAKE16-NEXT: s_movk_i32 s0, 0x211e720; GFX12-SDAG-FAKE16-NEXT: v_pk_mul_f16 v1, 0x291e, v0 op_sel_hi:[0,1]721; GFX12-SDAG-FAKE16-NEXT: s_wait_alu depctr_sa_sdst(0)722; GFX12-SDAG-FAKE16-NEXT: v_pk_fma_f16 v0, 0x291e, v0, s0 op_sel_hi:[0,1,0]723; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)724; GFX12-SDAG-FAKE16-NEXT: v_pk_min_num_f16 v0, v1, v0725; GFX12-SDAG-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v0726; GFX12-SDAG-FAKE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v0727; GFX12-SDAG-FAKE16-NEXT: s_wait_alu depctr_va_vcc(0)728; GFX12-SDAG-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, vcc_lo729; GFX12-SDAG-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)730; GFX12-SDAG-FAKE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v1731; GFX12-SDAG-FAKE16-NEXT: s_wait_alu depctr_va_vcc(0)732; GFX12-SDAG-FAKE16-NEXT: v_cndmask_b32_e64 v1, 0, 1, vcc_lo733; GFX12-SDAG-FAKE16-NEXT: s_setpc_b64 s[30:31]734;735; GFX12-GISEL-TRUE16-LABEL: test_D139469_v2f16:736; GFX12-GISEL-TRUE16: ; %bb.0: ; %bb737; GFX12-GISEL-TRUE16-NEXT: s_wait_loadcnt_dscnt 0x0738; GFX12-GISEL-TRUE16-NEXT: s_wait_expcnt 0x0739; GFX12-GISEL-TRUE16-NEXT: s_wait_samplecnt 0x0740; GFX12-GISEL-TRUE16-NEXT: s_wait_bvhcnt 0x0741; GFX12-GISEL-TRUE16-NEXT: s_wait_kmcnt 0x0742; GFX12-GISEL-TRUE16-NEXT: v_mov_b32_e32 v1, 0x211e211e743; GFX12-GISEL-TRUE16-NEXT: v_pk_mul_f16 v2, 0x291e291e, v0744; GFX12-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)745; GFX12-GISEL-TRUE16-NEXT: v_pk_fma_f16 v0, 0x291e291e, v0, v1746; GFX12-GISEL-TRUE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v2.l747; GFX12-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)748; GFX12-GISEL-TRUE16-NEXT: v_cmp_gt_f16_e64 s1, 0, v2.h749; GFX12-GISEL-TRUE16-NEXT: v_cmp_gt_f16_e64 s0, 0, v0.l750; GFX12-GISEL-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_4)751; GFX12-GISEL-TRUE16-NEXT: v_cmp_gt_f16_e64 s2, 0, v0.h752; GFX12-GISEL-TRUE16-NEXT: s_or_b32 s0, vcc_lo, s0753; GFX12-GISEL-TRUE16-NEXT: s_wait_alu depctr_sa_sdst(0)754; GFX12-GISEL-TRUE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0755; GFX12-GISEL-TRUE16-NEXT: s_or_b32 s0, s1, s2756; GFX12-GISEL-TRUE16-NEXT: s_wait_alu depctr_sa_sdst(0)757; GFX12-GISEL-TRUE16-NEXT: v_cndmask_b32_e64 v1, 0, 1, s0758; GFX12-GISEL-TRUE16-NEXT: s_setpc_b64 s[30:31]759;760; GFX12-GISEL-FAKE16-LABEL: test_D139469_v2f16:761; GFX12-GISEL-FAKE16: ; %bb.0: ; %bb762; GFX12-GISEL-FAKE16-NEXT: s_wait_loadcnt_dscnt 0x0763; GFX12-GISEL-FAKE16-NEXT: s_wait_expcnt 0x0764; GFX12-GISEL-FAKE16-NEXT: s_wait_samplecnt 0x0765; GFX12-GISEL-FAKE16-NEXT: s_wait_bvhcnt 0x0766; GFX12-GISEL-FAKE16-NEXT: s_wait_kmcnt 0x0767; GFX12-GISEL-FAKE16-NEXT: v_mov_b32_e32 v1, 0x211e211e768; GFX12-GISEL-FAKE16-NEXT: v_pk_mul_f16 v2, 0x291e291e, v0769; GFX12-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)770; GFX12-GISEL-FAKE16-NEXT: v_pk_fma_f16 v0, 0x291e291e, v0, v1771; GFX12-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v1, 16, v2772; GFX12-GISEL-FAKE16-NEXT: v_cmp_gt_f16_e32 vcc_lo, 0, v2773; GFX12-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)774; GFX12-GISEL-FAKE16-NEXT: v_lshrrev_b32_e32 v3, 16, v0775; GFX12-GISEL-FAKE16-NEXT: v_cmp_gt_f16_e64 s0, 0, v0776; GFX12-GISEL-FAKE16-NEXT: v_cmp_gt_f16_e64 s1, 0, v1777; GFX12-GISEL-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_3)778; GFX12-GISEL-FAKE16-NEXT: v_cmp_gt_f16_e64 s2, 0, v3779; GFX12-GISEL-FAKE16-NEXT: s_or_b32 s0, vcc_lo, s0780; GFX12-GISEL-FAKE16-NEXT: s_wait_alu depctr_sa_sdst(0)781; GFX12-GISEL-FAKE16-NEXT: v_cndmask_b32_e64 v0, 0, 1, s0782; GFX12-GISEL-FAKE16-NEXT: s_or_b32 s0, s1, s2783; GFX12-GISEL-FAKE16-NEXT: s_wait_alu depctr_sa_sdst(0)784; GFX12-GISEL-FAKE16-NEXT: v_cndmask_b32_e64 v1, 0, 1, s0785; GFX12-GISEL-FAKE16-NEXT: s_setpc_b64 s[30:31]786bb:787 %i = fmul contract <2 x half> %arg, <half 0xH291E, half 0xH291E>788 %i1 = fcmp olt <2 x half> %i, <half 0xH0000, half 0xH0000>789 %i2 = fadd contract <2 x half> %i, <half 0xH211E, half 0xH211E>790 %i3 = fcmp olt <2 x half> %i2, <half 0xH0000, half 0xH0000>791 %i4 = or <2 x i1> %i1, %i3792 %i5 = zext <2 x i1> %i4 to <2 x i32>793 ret <2 x i32> %i5794}795