2950 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=amdgcn -mcpu=hawaii < %s | FileCheck -check-prefixes=CI,CI-SAFE %s3; RUN: llc -mtriple=amdgcn -mcpu=fiji < %s | FileCheck -check-prefixes=VI,VI-SAFE %s4; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-SAFE,GFX11-SAFE-TRUE16 %s5; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 < %s | FileCheck -check-prefixes=GFX11,GFX11-SAFE,GFX11-SAFE-FAKE16 %s6 7; RUN: llc -mtriple=amdgcn -mcpu=hawaii -enable-no-signed-zeros-fp-math < %s | FileCheck -check-prefixes=CI,CI-NSZ %s8; RUN: llc -mtriple=amdgcn -mcpu=fiji -enable-no-signed-zeros-fp-math < %s | FileCheck -check-prefixes=VI,VI-NSZ %s9; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -enable-no-signed-zeros-fp-math < %s | FileCheck -check-prefixes=GFX11,GFX11-NSZ,GFX11-NSZ-TRUE16 %s10; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -enable-no-signed-zeros-fp-math < %s | FileCheck -check-prefixes=GFX11,GFX11-NSZ,GFX11-NSZ-FAKE16 %s11 12define half @add_select_fabs_fabs_f16(i32 %c, half %x, half %y, half %z) {13; CI-LABEL: add_select_fabs_fabs_f16:14; CI: ; %bb.0:15; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)16; CI-NEXT: v_cvt_f16_f32_e32 v1, v117; CI-NEXT: v_cvt_f16_f32_e32 v2, v218; CI-NEXT: v_cvt_f16_f32_e32 v3, v319; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v020; CI-NEXT: v_cvt_f32_f16_e32 v1, v121; CI-NEXT: v_cvt_f32_f16_e32 v2, v222; CI-NEXT: v_cvt_f32_f16_e32 v3, v323; CI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc24; CI-NEXT: v_add_f32_e64 v0, |v0|, v325; CI-NEXT: s_setpc_b64 s[30:31]26;27; VI-LABEL: add_select_fabs_fabs_f16:28; VI: ; %bb.0:29; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)30; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v031; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc32; VI-NEXT: v_add_f16_e64 v0, |v0|, v333; VI-NEXT: s_setpc_b64 s[30:31]34;35; GFX11-SAFE-TRUE16-LABEL: add_select_fabs_fabs_f16:36; GFX11-SAFE-TRUE16: ; %bb.0:37; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)38; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v039; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo40; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)41; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e64 v0.l, |v0.l|, v3.l42; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]43;44; GFX11-SAFE-FAKE16-LABEL: add_select_fabs_fabs_f16:45; GFX11-SAFE-FAKE16: ; %bb.0:46; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)47; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v048; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo49; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)50; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e64 v0, |v0|, v351; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]52;53; GFX11-NSZ-TRUE16-LABEL: add_select_fabs_fabs_f16:54; GFX11-NSZ-TRUE16: ; %bb.0:55; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)56; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v057; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo58; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)59; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e64 v0.l, |v0.l|, v3.l60; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]61;62; GFX11-NSZ-FAKE16-LABEL: add_select_fabs_fabs_f16:63; GFX11-NSZ-FAKE16: ; %bb.0:64; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)65; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v066; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo67; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)68; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e64 v0, |v0|, v369; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]70 %cmp = icmp eq i32 %c, 071 %fabs.x = call half @llvm.fabs.f16(half %x)72 %fabs.y = call half @llvm.fabs.f16(half %y)73 %select = select i1 %cmp, half %fabs.x, half %fabs.y74 %add = fadd half %select, %z75 ret half %add76}77 78define { half, half } @add_select_multi_use_lhs_fabs_fabs_f16(i32 %c, half %x, half %y, half %w, half %z) {79; CI-LABEL: add_select_multi_use_lhs_fabs_fabs_f16:80; CI: ; %bb.0:81; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)82; CI-NEXT: v_cvt_f16_f32_e32 v1, v183; CI-NEXT: v_cvt_f16_f32_e32 v2, v284; CI-NEXT: v_cvt_f16_f32_e32 v4, v485; CI-NEXT: v_cvt_f16_f32_e32 v3, v386; CI-NEXT: v_cvt_f32_f16_e32 v1, v187; CI-NEXT: v_cvt_f32_f16_e32 v2, v288; CI-NEXT: v_cvt_f32_f16_e32 v4, v489; CI-NEXT: v_cvt_f32_f16_e32 v3, v390; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v091; CI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc92; CI-NEXT: v_add_f32_e64 v0, |v0|, v493; CI-NEXT: v_add_f32_e64 v1, |v1|, v394; CI-NEXT: s_setpc_b64 s[30:31]95;96; VI-LABEL: add_select_multi_use_lhs_fabs_fabs_f16:97; VI: ; %bb.0:98; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)99; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0100; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc101; VI-NEXT: v_add_f16_e64 v0, |v0|, v4102; VI-NEXT: v_add_f16_e64 v1, |v1|, v3103; VI-NEXT: s_setpc_b64 s[30:31]104;105; GFX11-SAFE-TRUE16-LABEL: add_select_multi_use_lhs_fabs_fabs_f16:106; GFX11-SAFE-TRUE16: ; %bb.0:107; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)108; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0109; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo110; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e64 v1.l, |v1.l|, v3.l111; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)112; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e64 v0.l, |v0.l|, v4.l113; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]114;115; GFX11-SAFE-FAKE16-LABEL: add_select_multi_use_lhs_fabs_fabs_f16:116; GFX11-SAFE-FAKE16: ; %bb.0:117; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)118; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0119; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo120; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e64 v1, |v1|, v3121; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)122; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e64 v0, |v0|, v4123; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]124;125; GFX11-NSZ-TRUE16-LABEL: add_select_multi_use_lhs_fabs_fabs_f16:126; GFX11-NSZ-TRUE16: ; %bb.0:127; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)128; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0129; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo130; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e64 v1.l, |v1.l|, v3.l131; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)132; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e64 v0.l, |v0.l|, v4.l133; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]134;135; GFX11-NSZ-FAKE16-LABEL: add_select_multi_use_lhs_fabs_fabs_f16:136; GFX11-NSZ-FAKE16: ; %bb.0:137; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)138; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0139; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo140; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e64 v1, |v1|, v3141; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)142; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e64 v0, |v0|, v4143; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]144 %cmp = icmp eq i32 %c, 0145 %fabs.x = call half @llvm.fabs.f16(half %x)146 %fabs.y = call half @llvm.fabs.f16(half %y)147 %select = select i1 %cmp, half %fabs.x, half %fabs.y148 %add0 = fadd half %select, %z149 %add1 = fadd half %fabs.x, %w150 %insert.0 = insertvalue { half, half } poison, half %add0, 0151 %insert.1 = insertvalue { half, half } %insert.0, half %add1, 1152 ret { half, half } %insert.1153}154 155define { half, half } @add_select_multi_store_use_lhs_fabs_fabs_f16(i32 %c, half %x, half %y, half %z) {156; CI-LABEL: add_select_multi_store_use_lhs_fabs_fabs_f16:157; CI: ; %bb.0:158; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)159; CI-NEXT: v_cvt_f16_f32_e32 v1, v1160; CI-NEXT: v_cvt_f16_f32_e32 v2, v2161; CI-NEXT: v_cvt_f16_f32_e32 v3, v3162; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0163; CI-NEXT: v_cvt_f32_f16_e32 v4, v1164; CI-NEXT: v_cvt_f32_f16_e32 v2, v2165; CI-NEXT: v_cvt_f32_f16_e32 v3, v3166; CI-NEXT: v_and_b32_e32 v1, 0x7fffffff, v4167; CI-NEXT: v_cndmask_b32_e32 v0, v2, v4, vcc168; CI-NEXT: v_add_f32_e64 v0, |v0|, v3169; CI-NEXT: s_setpc_b64 s[30:31]170;171; VI-LABEL: add_select_multi_store_use_lhs_fabs_fabs_f16:172; VI: ; %bb.0:173; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)174; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0175; VI-NEXT: v_and_b32_e32 v4, 0x7fff, v1176; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc177; VI-NEXT: v_add_f16_e64 v0, |v0|, v3178; VI-NEXT: v_mov_b32_e32 v1, v4179; VI-NEXT: s_setpc_b64 s[30:31]180;181; GFX11-SAFE-TRUE16-LABEL: add_select_multi_store_use_lhs_fabs_fabs_f16:182; GFX11-SAFE-TRUE16: ; %bb.0:183; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)184; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0185; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo186; GFX11-SAFE-TRUE16-NEXT: v_and_b16 v1.l, 0x7fff, v1.l187; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)188; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e64 v0.l, |v0.l|, v3.l189; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]190;191; GFX11-SAFE-FAKE16-LABEL: add_select_multi_store_use_lhs_fabs_fabs_f16:192; GFX11-SAFE-FAKE16: ; %bb.0:193; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)194; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0195; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo196; GFX11-SAFE-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v1197; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)198; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e64 v0, |v0|, v3199; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]200;201; GFX11-NSZ-TRUE16-LABEL: add_select_multi_store_use_lhs_fabs_fabs_f16:202; GFX11-NSZ-TRUE16: ; %bb.0:203; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)204; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0205; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo206; GFX11-NSZ-TRUE16-NEXT: v_and_b16 v1.l, 0x7fff, v1.l207; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)208; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e64 v0.l, |v0.l|, v3.l209; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]210;211; GFX11-NSZ-FAKE16-LABEL: add_select_multi_store_use_lhs_fabs_fabs_f16:212; GFX11-NSZ-FAKE16: ; %bb.0:213; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)214; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0215; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo216; GFX11-NSZ-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v1217; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)218; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e64 v0, |v0|, v3219; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]220 %cmp = icmp eq i32 %c, 0221 %fabs.x = call half @llvm.fabs.f16(half %x)222 %fabs.y = call half @llvm.fabs.f16(half %y)223 %select = select i1 %cmp, half %fabs.x, half %fabs.y224 %add0 = fadd half %select, %z225 %insert.0 = insertvalue { half, half } poison, half %add0, 0226 %insert.1 = insertvalue { half, half } %insert.0, half %fabs.x, 1227 ret { half, half } %insert.1228}229 230define { half, half } @add_select_multi_use_rhs_fabs_fabs_f16(i32 %c, half %x, half %y, half %z, half %w) {231; CI-LABEL: add_select_multi_use_rhs_fabs_fabs_f16:232; CI: ; %bb.0:233; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)234; CI-NEXT: v_cvt_f16_f32_e32 v1, v1235; CI-NEXT: v_cvt_f16_f32_e32 v2, v2236; CI-NEXT: v_cvt_f16_f32_e32 v3, v3237; CI-NEXT: v_cvt_f16_f32_e32 v4, v4238; CI-NEXT: v_cvt_f32_f16_e32 v1, v1239; CI-NEXT: v_cvt_f32_f16_e32 v2, v2240; CI-NEXT: v_cvt_f32_f16_e32 v3, v3241; CI-NEXT: v_cvt_f32_f16_e32 v4, v4242; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0243; CI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc244; CI-NEXT: v_add_f32_e64 v0, |v0|, v3245; CI-NEXT: v_add_f32_e64 v1, |v2|, v4246; CI-NEXT: s_setpc_b64 s[30:31]247;248; VI-LABEL: add_select_multi_use_rhs_fabs_fabs_f16:249; VI: ; %bb.0:250; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)251; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0252; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc253; VI-NEXT: v_add_f16_e64 v0, |v0|, v3254; VI-NEXT: v_add_f16_e64 v1, |v2|, v4255; VI-NEXT: s_setpc_b64 s[30:31]256;257; GFX11-SAFE-TRUE16-LABEL: add_select_multi_use_rhs_fabs_fabs_f16:258; GFX11-SAFE-TRUE16: ; %bb.0:259; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)260; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0261; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo262; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e64 v1.l, |v2.l|, v4.l263; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)264; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e64 v0.l, |v0.l|, v3.l265; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]266;267; GFX11-SAFE-FAKE16-LABEL: add_select_multi_use_rhs_fabs_fabs_f16:268; GFX11-SAFE-FAKE16: ; %bb.0:269; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)270; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0271; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo272; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e64 v1, |v2|, v4273; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)274; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e64 v0, |v0|, v3275; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]276;277; GFX11-NSZ-TRUE16-LABEL: add_select_multi_use_rhs_fabs_fabs_f16:278; GFX11-NSZ-TRUE16: ; %bb.0:279; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)280; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0281; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo282; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e64 v1.l, |v2.l|, v4.l283; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)284; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e64 v0.l, |v0.l|, v3.l285; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]286;287; GFX11-NSZ-FAKE16-LABEL: add_select_multi_use_rhs_fabs_fabs_f16:288; GFX11-NSZ-FAKE16: ; %bb.0:289; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)290; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0291; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo292; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e64 v1, |v2|, v4293; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)294; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e64 v0, |v0|, v3295; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]296 %cmp = icmp eq i32 %c, 0297 %fabs.x = call half @llvm.fabs.f16(half %x)298 %fabs.y = call half @llvm.fabs.f16(half %y)299 %select = select i1 %cmp, half %fabs.x, half %fabs.y300 %add0 = fadd half %select, %z301 %add1 = fadd half %fabs.y, %w302 %insert.0 = insertvalue { half, half } poison, half %add0, 0303 %insert.1 = insertvalue { half, half } %insert.0, half %add1, 1304 ret { half, half } %insert.1305}306 307define half @add_select_fabs_var_f16(i32 %c, half %x, half %y, half %z) {308; CI-LABEL: add_select_fabs_var_f16:309; CI: ; %bb.0:310; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)311; CI-NEXT: v_cvt_f16_f32_e32 v2, v2312; CI-NEXT: v_cvt_f16_f32_e32 v1, v1313; CI-NEXT: v_cvt_f16_f32_e32 v3, v3314; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0315; CI-NEXT: v_cvt_f32_f16_e32 v2, v2316; CI-NEXT: v_cvt_f32_f16_e64 v1, |v1|317; CI-NEXT: v_cvt_f32_f16_e32 v3, v3318; CI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc319; CI-NEXT: v_add_f32_e32 v0, v0, v3320; CI-NEXT: s_setpc_b64 s[30:31]321;322; VI-LABEL: add_select_fabs_var_f16:323; VI: ; %bb.0:324; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)325; VI-NEXT: v_and_b32_e32 v1, 0x7fff, v1326; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0327; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc328; VI-NEXT: v_add_f16_e32 v0, v0, v3329; VI-NEXT: s_setpc_b64 s[30:31]330;331; GFX11-SAFE-TRUE16-LABEL: add_select_fabs_var_f16:332; GFX11-SAFE-TRUE16: ; %bb.0:333; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)334; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0335; GFX11-SAFE-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v1.l336; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)337; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v0.l, vcc_lo338; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v3.l339; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]340;341; GFX11-SAFE-FAKE16-LABEL: add_select_fabs_var_f16:342; GFX11-SAFE-FAKE16: ; %bb.0:343; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)344; GFX11-SAFE-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v1345; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0346; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)347; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo348; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e32 v0, v0, v3349; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]350;351; GFX11-NSZ-TRUE16-LABEL: add_select_fabs_var_f16:352; GFX11-NSZ-TRUE16: ; %bb.0:353; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)354; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0355; GFX11-NSZ-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v1.l356; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)357; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v0.l, vcc_lo358; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v3.l359; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]360;361; GFX11-NSZ-FAKE16-LABEL: add_select_fabs_var_f16:362; GFX11-NSZ-FAKE16: ; %bb.0:363; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)364; GFX11-NSZ-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v1365; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0366; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)367; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo368; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e32 v0, v0, v3369; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]370 %cmp = icmp eq i32 %c, 0371 %fabs.x = call half @llvm.fabs.f16(half %x)372 %select = select i1 %cmp, half %fabs.x, half %y373 %add = fadd half %select, %z374 ret half %add375}376 377define half @add_select_fabs_negk_f16(i32 %c, half %x, half %y) {378; CI-LABEL: add_select_fabs_negk_f16:379; CI: ; %bb.0:380; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)381; CI-NEXT: v_cvt_f16_f32_e32 v1, v1382; CI-NEXT: v_cvt_f16_f32_e32 v2, v2383; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0384; CI-NEXT: v_cvt_f32_f16_e64 v1, |v1|385; CI-NEXT: v_cvt_f32_f16_e32 v2, v2386; CI-NEXT: v_cndmask_b32_e32 v0, -1.0, v1, vcc387; CI-NEXT: v_add_f32_e32 v0, v0, v2388; CI-NEXT: s_setpc_b64 s[30:31]389;390; VI-LABEL: add_select_fabs_negk_f16:391; VI: ; %bb.0:392; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)393; VI-NEXT: v_and_b32_e32 v1, 0x7fff, v1394; VI-NEXT: v_mov_b32_e32 v3, 0xbc00395; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0396; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc397; VI-NEXT: v_add_f16_e32 v0, v0, v2398; VI-NEXT: s_setpc_b64 s[30:31]399;400; GFX11-SAFE-TRUE16-LABEL: add_select_fabs_negk_f16:401; GFX11-SAFE-TRUE16: ; %bb.0:402; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)403; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0404; GFX11-SAFE-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v1.l405; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)406; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xbc00, v0.l, vcc_lo407; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v2.l408; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]409;410; GFX11-SAFE-FAKE16-LABEL: add_select_fabs_negk_f16:411; GFX11-SAFE-FAKE16: ; %bb.0:412; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)413; GFX11-SAFE-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v1414; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0415; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)416; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xbc00, v1, vcc_lo417; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e32 v0, v0, v2418; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]419;420; GFX11-NSZ-TRUE16-LABEL: add_select_fabs_negk_f16:421; GFX11-NSZ-TRUE16: ; %bb.0:422; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)423; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0424; GFX11-NSZ-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v1.l425; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)426; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xbc00, v0.l, vcc_lo427; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v2.l428; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]429;430; GFX11-NSZ-FAKE16-LABEL: add_select_fabs_negk_f16:431; GFX11-NSZ-FAKE16: ; %bb.0:432; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)433; GFX11-NSZ-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v1434; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0435; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)436; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xbc00, v1, vcc_lo437; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e32 v0, v0, v2438; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]439 %cmp = icmp eq i32 %c, 0440 %fabs = call half @llvm.fabs.f16(half %x)441 %select = select i1 %cmp, half %fabs, half -1.0442 %add = fadd half %select, %y443 ret half %add444}445 446; FIXME: fabs should fold away447define half @add_select_fabs_negk_negk_f16(i32 %c, half %x) {448; CI-LABEL: add_select_fabs_negk_negk_f16:449; CI: ; %bb.0:450; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)451; CI-NEXT: v_cvt_f16_f32_e32 v1, v1452; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0453; CI-NEXT: v_cndmask_b32_e64 v0, -1.0, -2.0, vcc454; CI-NEXT: v_cvt_f32_f16_e32 v1, v1455; CI-NEXT: v_sub_f32_e32 v0, v1, v0456; CI-NEXT: s_setpc_b64 s[30:31]457;458; VI-LABEL: add_select_fabs_negk_negk_f16:459; VI: ; %bb.0:460; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)461; VI-NEXT: v_mov_b32_e32 v2, 0xbc00462; VI-NEXT: v_mov_b32_e32 v3, 0xc000463; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0464; VI-NEXT: v_cndmask_b32_e32 v0, v2, v3, vcc465; VI-NEXT: v_sub_f16_e32 v0, v1, v0466; VI-NEXT: s_setpc_b64 s[30:31]467;468; GFX11-SAFE-TRUE16-LABEL: add_select_fabs_negk_negk_f16:469; GFX11-SAFE-TRUE16: ; %bb.0:470; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)471; GFX11-SAFE-TRUE16-NEXT: v_mov_b16_e32 v2.l, 0xbc00472; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0473; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)474; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, 0xc000, vcc_lo475; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v0.l, v1.l, v0.l476; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]477;478; GFX11-SAFE-FAKE16-LABEL: add_select_fabs_negk_negk_f16:479; GFX11-SAFE-FAKE16: ; %bb.0:480; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)481; GFX11-SAFE-FAKE16-NEXT: v_mov_b32_e32 v2, 0xc000482; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0483; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)484; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xbc00, v2, vcc_lo485; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v0, v1, v0486; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]487;488; GFX11-NSZ-TRUE16-LABEL: add_select_fabs_negk_negk_f16:489; GFX11-NSZ-TRUE16: ; %bb.0:490; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)491; GFX11-NSZ-TRUE16-NEXT: v_mov_b16_e32 v2.l, 0xbc00492; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0493; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)494; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, 0xc000, vcc_lo495; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, v1.l, v0.l496; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]497;498; GFX11-NSZ-FAKE16-LABEL: add_select_fabs_negk_negk_f16:499; GFX11-NSZ-FAKE16: ; %bb.0:500; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)501; GFX11-NSZ-FAKE16-NEXT: v_mov_b32_e32 v2, 0xc000502; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0503; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)504; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xbc00, v2, vcc_lo505; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v0, v1, v0506; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]507 %cmp = icmp eq i32 %c, 0508 %select = select i1 %cmp, half -2.0, half -1.0509 %fabs = call half @llvm.fabs.f16(half %select)510 %add = fadd half %fabs, %x511 ret half %add512}513 514define half @add_select_posk_posk_f16(i32 %c, half %x) {515; CI-LABEL: add_select_posk_posk_f16:516; CI: ; %bb.0:517; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)518; CI-NEXT: v_cvt_f16_f32_e32 v1, v1519; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0520; CI-NEXT: v_cndmask_b32_e64 v0, 1.0, 2.0, vcc521; CI-NEXT: v_cvt_f32_f16_e32 v1, v1522; CI-NEXT: v_add_f32_e32 v0, v0, v1523; CI-NEXT: s_setpc_b64 s[30:31]524;525; VI-LABEL: add_select_posk_posk_f16:526; VI: ; %bb.0:527; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)528; VI-NEXT: v_mov_b32_e32 v2, 0x3c00529; VI-NEXT: v_mov_b32_e32 v3, 0x4000530; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0531; VI-NEXT: v_cndmask_b32_e32 v0, v2, v3, vcc532; VI-NEXT: v_add_f16_e32 v0, v0, v1533; VI-NEXT: s_setpc_b64 s[30:31]534;535; GFX11-SAFE-TRUE16-LABEL: add_select_posk_posk_f16:536; GFX11-SAFE-TRUE16: ; %bb.0:537; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)538; GFX11-SAFE-TRUE16-NEXT: v_mov_b16_e32 v2.l, 0x3c00539; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0540; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)541; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, 0x4000, vcc_lo542; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v1.l543; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]544;545; GFX11-SAFE-FAKE16-LABEL: add_select_posk_posk_f16:546; GFX11-SAFE-FAKE16: ; %bb.0:547; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)548; GFX11-SAFE-FAKE16-NEXT: v_mov_b32_e32 v2, 0x4000549; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0550; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)551; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x3c00, v2, vcc_lo552; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e32 v0, v0, v1553; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]554;555; GFX11-NSZ-TRUE16-LABEL: add_select_posk_posk_f16:556; GFX11-NSZ-TRUE16: ; %bb.0:557; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)558; GFX11-NSZ-TRUE16-NEXT: v_mov_b16_e32 v2.l, 0x3c00559; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0560; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)561; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, 0x4000, vcc_lo562; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v1.l563; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]564;565; GFX11-NSZ-FAKE16-LABEL: add_select_posk_posk_f16:566; GFX11-NSZ-FAKE16: ; %bb.0:567; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)568; GFX11-NSZ-FAKE16-NEXT: v_mov_b32_e32 v2, 0x4000569; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0570; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)571; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x3c00, v2, vcc_lo572; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e32 v0, v0, v1573; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]574 %cmp = icmp eq i32 %c, 0575 %select = select i1 %cmp, half 2.0, half 1.0576 %add = fadd half %select, %x577 ret half %add578}579 580define half @add_select_negk_fabs_f16(i32 %c, half %x, half %y) {581; CI-LABEL: add_select_negk_fabs_f16:582; CI: ; %bb.0:583; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)584; CI-NEXT: v_cvt_f16_f32_e32 v1, v1585; CI-NEXT: v_cvt_f16_f32_e32 v2, v2586; CI-NEXT: v_cmp_ne_u32_e32 vcc, 0, v0587; CI-NEXT: v_cvt_f32_f16_e64 v1, |v1|588; CI-NEXT: v_cvt_f32_f16_e32 v2, v2589; CI-NEXT: v_cndmask_b32_e32 v0, -1.0, v1, vcc590; CI-NEXT: v_add_f32_e32 v0, v0, v2591; CI-NEXT: s_setpc_b64 s[30:31]592;593; VI-LABEL: add_select_negk_fabs_f16:594; VI: ; %bb.0:595; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)596; VI-NEXT: v_and_b32_e32 v1, 0x7fff, v1597; VI-NEXT: v_mov_b32_e32 v3, 0xbc00598; VI-NEXT: v_cmp_ne_u32_e32 vcc, 0, v0599; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc600; VI-NEXT: v_add_f16_e32 v0, v0, v2601; VI-NEXT: s_setpc_b64 s[30:31]602;603; GFX11-SAFE-TRUE16-LABEL: add_select_negk_fabs_f16:604; GFX11-SAFE-TRUE16: ; %bb.0:605; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)606; GFX11-SAFE-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0607; GFX11-SAFE-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v1.l608; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)609; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xbc00, v0.l, vcc_lo610; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v2.l611; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]612;613; GFX11-SAFE-FAKE16-LABEL: add_select_negk_fabs_f16:614; GFX11-SAFE-FAKE16: ; %bb.0:615; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)616; GFX11-SAFE-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v1617; GFX11-SAFE-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0618; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)619; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xbc00, v1, vcc_lo620; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e32 v0, v0, v2621; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]622;623; GFX11-NSZ-TRUE16-LABEL: add_select_negk_fabs_f16:624; GFX11-NSZ-TRUE16: ; %bb.0:625; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)626; GFX11-NSZ-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0627; GFX11-NSZ-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v1.l628; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)629; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xbc00, v0.l, vcc_lo630; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v2.l631; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]632;633; GFX11-NSZ-FAKE16-LABEL: add_select_negk_fabs_f16:634; GFX11-NSZ-FAKE16: ; %bb.0:635; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)636; GFX11-NSZ-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v1637; GFX11-NSZ-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0638; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)639; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xbc00, v1, vcc_lo640; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e32 v0, v0, v2641; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]642 %cmp = icmp eq i32 %c, 0643 %fabs = call half @llvm.fabs.f16(half %x)644 %select = select i1 %cmp, half -1.0, half %fabs645 %add = fadd half %select, %y646 ret half %add647}648 649define half @add_select_negliteralk_fabs_f16(i32 %c, half %x, half %y) {650; CI-LABEL: add_select_negliteralk_fabs_f16:651; CI: ; %bb.0:652; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)653; CI-NEXT: v_cvt_f16_f32_e32 v1, v1654; CI-NEXT: v_cvt_f16_f32_e32 v2, v2655; CI-NEXT: v_mov_b32_e32 v3, 0xc4800000656; CI-NEXT: v_cmp_ne_u32_e32 vcc, 0, v0657; CI-NEXT: v_cvt_f32_f16_e64 v1, |v1|658; CI-NEXT: v_cvt_f32_f16_e32 v2, v2659; CI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc660; CI-NEXT: v_add_f32_e32 v0, v0, v2661; CI-NEXT: s_setpc_b64 s[30:31]662;663; VI-LABEL: add_select_negliteralk_fabs_f16:664; VI: ; %bb.0:665; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)666; VI-NEXT: v_and_b32_e32 v1, 0x7fff, v1667; VI-NEXT: v_mov_b32_e32 v3, 0xe400668; VI-NEXT: v_cmp_ne_u32_e32 vcc, 0, v0669; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc670; VI-NEXT: v_add_f16_e32 v0, v0, v2671; VI-NEXT: s_setpc_b64 s[30:31]672;673; GFX11-SAFE-TRUE16-LABEL: add_select_negliteralk_fabs_f16:674; GFX11-SAFE-TRUE16: ; %bb.0:675; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)676; GFX11-SAFE-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0677; GFX11-SAFE-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v1.l678; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)679; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xe400, v0.l, vcc_lo680; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v2.l681; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]682;683; GFX11-SAFE-FAKE16-LABEL: add_select_negliteralk_fabs_f16:684; GFX11-SAFE-FAKE16: ; %bb.0:685; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)686; GFX11-SAFE-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v1687; GFX11-SAFE-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0688; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)689; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xe400, v1, vcc_lo690; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e32 v0, v0, v2691; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]692;693; GFX11-NSZ-TRUE16-LABEL: add_select_negliteralk_fabs_f16:694; GFX11-NSZ-TRUE16: ; %bb.0:695; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)696; GFX11-NSZ-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0697; GFX11-NSZ-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v1.l698; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)699; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xe400, v0.l, vcc_lo700; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v2.l701; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]702;703; GFX11-NSZ-FAKE16-LABEL: add_select_negliteralk_fabs_f16:704; GFX11-NSZ-FAKE16: ; %bb.0:705; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)706; GFX11-NSZ-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v1707; GFX11-NSZ-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0708; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)709; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xe400, v1, vcc_lo710; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e32 v0, v0, v2711; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]712 %cmp = icmp eq i32 %c, 0713 %fabs = call half @llvm.fabs.f16(half %x)714 %select = select i1 %cmp, half -1024.0, half %fabs715 %add = fadd half %select, %y716 ret half %add717}718 719define half @add_select_fabs_posk_f16(i32 %c, half %x, half %y) {720; CI-LABEL: add_select_fabs_posk_f16:721; CI: ; %bb.0:722; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)723; CI-NEXT: v_cvt_f16_f32_e32 v1, v1724; CI-NEXT: v_cvt_f16_f32_e32 v2, v2725; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0726; CI-NEXT: v_cvt_f32_f16_e32 v1, v1727; CI-NEXT: v_cvt_f32_f16_e32 v2, v2728; CI-NEXT: v_cndmask_b32_e32 v0, 1.0, v1, vcc729; CI-NEXT: v_add_f32_e64 v0, |v0|, v2730; CI-NEXT: s_setpc_b64 s[30:31]731;732; VI-LABEL: add_select_fabs_posk_f16:733; VI: ; %bb.0:734; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)735; VI-NEXT: v_mov_b32_e32 v3, 0x3c00736; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0737; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc738; VI-NEXT: v_add_f16_e64 v0, |v0|, v2739; VI-NEXT: s_setpc_b64 s[30:31]740;741; GFX11-SAFE-TRUE16-LABEL: add_select_fabs_posk_f16:742; GFX11-SAFE-TRUE16: ; %bb.0:743; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)744; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0745; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x3c00, v1.l, vcc_lo746; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)747; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e64 v0.l, |v0.l|, v2.l748; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]749;750; GFX11-SAFE-FAKE16-LABEL: add_select_fabs_posk_f16:751; GFX11-SAFE-FAKE16: ; %bb.0:752; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)753; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0754; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x3c00, v1, vcc_lo755; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)756; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e64 v0, |v0|, v2757; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]758;759; GFX11-NSZ-TRUE16-LABEL: add_select_fabs_posk_f16:760; GFX11-NSZ-TRUE16: ; %bb.0:761; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)762; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0763; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x3c00, v1.l, vcc_lo764; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)765; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e64 v0.l, |v0.l|, v2.l766; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]767;768; GFX11-NSZ-FAKE16-LABEL: add_select_fabs_posk_f16:769; GFX11-NSZ-FAKE16: ; %bb.0:770; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)771; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0772; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x3c00, v1, vcc_lo773; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)774; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e64 v0, |v0|, v2775; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]776 %cmp = icmp eq i32 %c, 0777 %fabs = call half @llvm.fabs.f16(half %x)778 %select = select i1 %cmp, half %fabs, half 1.0779 %add = fadd half %select, %y780 ret half %add781}782 783define half @add_select_posk_fabs_f16(i32 %c, half %x, half %y) {784; CI-LABEL: add_select_posk_fabs_f16:785; CI: ; %bb.0:786; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)787; CI-NEXT: v_cvt_f16_f32_e32 v1, v1788; CI-NEXT: v_cvt_f16_f32_e32 v2, v2789; CI-NEXT: v_cmp_ne_u32_e32 vcc, 0, v0790; CI-NEXT: v_cvt_f32_f16_e32 v1, v1791; CI-NEXT: v_cvt_f32_f16_e32 v2, v2792; CI-NEXT: v_cndmask_b32_e32 v0, 1.0, v1, vcc793; CI-NEXT: v_add_f32_e64 v0, |v0|, v2794; CI-NEXT: s_setpc_b64 s[30:31]795;796; VI-LABEL: add_select_posk_fabs_f16:797; VI: ; %bb.0:798; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)799; VI-NEXT: v_mov_b32_e32 v3, 0x3c00800; VI-NEXT: v_cmp_ne_u32_e32 vcc, 0, v0801; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc802; VI-NEXT: v_add_f16_e64 v0, |v0|, v2803; VI-NEXT: s_setpc_b64 s[30:31]804;805; GFX11-SAFE-TRUE16-LABEL: add_select_posk_fabs_f16:806; GFX11-SAFE-TRUE16: ; %bb.0:807; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)808; GFX11-SAFE-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0809; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x3c00, v1.l, vcc_lo810; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)811; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e64 v0.l, |v0.l|, v2.l812; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]813;814; GFX11-SAFE-FAKE16-LABEL: add_select_posk_fabs_f16:815; GFX11-SAFE-FAKE16: ; %bb.0:816; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)817; GFX11-SAFE-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0818; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x3c00, v1, vcc_lo819; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)820; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e64 v0, |v0|, v2821; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]822;823; GFX11-NSZ-TRUE16-LABEL: add_select_posk_fabs_f16:824; GFX11-NSZ-TRUE16: ; %bb.0:825; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)826; GFX11-NSZ-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0827; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x3c00, v1.l, vcc_lo828; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)829; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e64 v0.l, |v0.l|, v2.l830; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]831;832; GFX11-NSZ-FAKE16-LABEL: add_select_posk_fabs_f16:833; GFX11-NSZ-FAKE16: ; %bb.0:834; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)835; GFX11-NSZ-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v0836; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x3c00, v1, vcc_lo837; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)838; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e64 v0, |v0|, v2839; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]840 %cmp = icmp eq i32 %c, 0841 %fabs = call half @llvm.fabs.f16(half %x)842 %select = select i1 %cmp, half 1.0, half %fabs843 %add = fadd half %select, %y844 ret half %add845}846 847define half @add_select_fneg_fneg_f16(i32 %c, half %x, half %y, half %z) {848; CI-LABEL: add_select_fneg_fneg_f16:849; CI: ; %bb.0:850; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)851; CI-NEXT: v_cvt_f16_f32_e32 v1, v1852; CI-NEXT: v_cvt_f16_f32_e32 v2, v2853; CI-NEXT: v_cvt_f16_f32_e32 v3, v3854; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0855; CI-NEXT: v_cvt_f32_f16_e32 v1, v1856; CI-NEXT: v_cvt_f32_f16_e32 v2, v2857; CI-NEXT: v_cvt_f32_f16_e32 v3, v3858; CI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc859; CI-NEXT: v_sub_f32_e32 v0, v3, v0860; CI-NEXT: s_setpc_b64 s[30:31]861;862; VI-LABEL: add_select_fneg_fneg_f16:863; VI: ; %bb.0:864; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)865; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0866; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc867; VI-NEXT: v_sub_f16_e32 v0, v3, v0868; VI-NEXT: s_setpc_b64 s[30:31]869;870; GFX11-SAFE-TRUE16-LABEL: add_select_fneg_fneg_f16:871; GFX11-SAFE-TRUE16: ; %bb.0:872; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)873; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0874; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo875; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)876; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v0.l, v3.l, v0.l877; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]878;879; GFX11-SAFE-FAKE16-LABEL: add_select_fneg_fneg_f16:880; GFX11-SAFE-FAKE16: ; %bb.0:881; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)882; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0883; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo884; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)885; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v0, v3, v0886; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]887;888; GFX11-NSZ-TRUE16-LABEL: add_select_fneg_fneg_f16:889; GFX11-NSZ-TRUE16: ; %bb.0:890; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)891; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0892; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo893; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)894; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, v3.l, v0.l895; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]896;897; GFX11-NSZ-FAKE16-LABEL: add_select_fneg_fneg_f16:898; GFX11-NSZ-FAKE16: ; %bb.0:899; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)900; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0901; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo902; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)903; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v0, v3, v0904; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]905 %cmp = icmp eq i32 %c, 0906 %fneg.x = fneg half %x907 %fneg.y = fneg half %y908 %select = select i1 %cmp, half %fneg.x, half %fneg.y909 %add = fadd half %select, %z910 ret half %add911}912 913define { half, half } @add_select_multi_use_lhs_fneg_fneg_f16(i32 %c, half %x, half %y, half %z, half %w) {914; CI-LABEL: add_select_multi_use_lhs_fneg_fneg_f16:915; CI: ; %bb.0:916; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)917; CI-NEXT: v_cvt_f16_f32_e32 v1, v1918; CI-NEXT: v_cvt_f16_f32_e32 v2, v2919; CI-NEXT: v_cvt_f16_f32_e32 v3, v3920; CI-NEXT: v_cvt_f16_f32_e32 v4, v4921; CI-NEXT: v_cvt_f32_f16_e32 v1, v1922; CI-NEXT: v_cvt_f32_f16_e32 v2, v2923; CI-NEXT: v_cvt_f32_f16_e32 v3, v3924; CI-NEXT: v_cvt_f32_f16_e32 v4, v4925; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0926; CI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc927; CI-NEXT: v_sub_f32_e32 v0, v3, v0928; CI-NEXT: v_sub_f32_e32 v1, v4, v1929; CI-NEXT: s_setpc_b64 s[30:31]930;931; VI-LABEL: add_select_multi_use_lhs_fneg_fneg_f16:932; VI: ; %bb.0:933; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)934; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0935; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc936; VI-NEXT: v_sub_f16_e32 v0, v3, v0937; VI-NEXT: v_sub_f16_e32 v1, v4, v1938; VI-NEXT: s_setpc_b64 s[30:31]939;940; GFX11-SAFE-TRUE16-LABEL: add_select_multi_use_lhs_fneg_fneg_f16:941; GFX11-SAFE-TRUE16: ; %bb.0:942; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)943; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0944; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo945; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v1.l, v4.l, v1.l946; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)947; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v0.l, v3.l, v0.l948; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]949;950; GFX11-SAFE-FAKE16-LABEL: add_select_multi_use_lhs_fneg_fneg_f16:951; GFX11-SAFE-FAKE16: ; %bb.0:952; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)953; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0954; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo955; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v1, v4, v1956; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)957; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v0, v3, v0958; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]959;960; GFX11-NSZ-TRUE16-LABEL: add_select_multi_use_lhs_fneg_fneg_f16:961; GFX11-NSZ-TRUE16: ; %bb.0:962; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)963; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0964; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo965; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v1.l, v4.l, v1.l966; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)967; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, v3.l, v0.l968; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]969;970; GFX11-NSZ-FAKE16-LABEL: add_select_multi_use_lhs_fneg_fneg_f16:971; GFX11-NSZ-FAKE16: ; %bb.0:972; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)973; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v0974; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo975; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v1, v4, v1976; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)977; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v0, v3, v0978; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]979 %cmp = icmp eq i32 %c, 0980 %fneg.x = fneg half %x981 %fneg.y = fneg half %y982 %select = select i1 %cmp, half %fneg.x, half %fneg.y983 %add0 = fadd half %select, %z984 %add1 = fadd half %fneg.x, %w985 %insert.0 = insertvalue { half, half } poison, half %add0, 0986 %insert.1 = insertvalue { half, half } %insert.0, half %add1, 1987 ret { half, half } %insert.1988}989 990define { half, half } @add_select_multi_store_use_lhs_fneg_fneg_f16(i32 %c, half %x, half %y, half %z) {991; CI-LABEL: add_select_multi_store_use_lhs_fneg_fneg_f16:992; CI: ; %bb.0:993; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)994; CI-NEXT: v_cvt_f16_f32_e32 v1, v1995; CI-NEXT: v_cvt_f16_f32_e32 v2, v2996; CI-NEXT: v_cvt_f16_f32_e32 v3, v3997; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v0998; CI-NEXT: v_cvt_f32_f16_e32 v4, v1999; CI-NEXT: v_cvt_f32_f16_e32 v2, v21000; CI-NEXT: v_cvt_f32_f16_e32 v3, v31001; CI-NEXT: v_cvt_f32_f16_e64 v1, -v11002; CI-NEXT: v_cndmask_b32_e32 v0, v2, v4, vcc1003; CI-NEXT: v_sub_f32_e32 v0, v3, v01004; CI-NEXT: s_setpc_b64 s[30:31]1005;1006; VI-LABEL: add_select_multi_store_use_lhs_fneg_fneg_f16:1007; VI: ; %bb.0:1008; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1009; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01010; VI-NEXT: v_xor_b32_e32 v4, 0x8000, v11011; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc1012; VI-NEXT: v_sub_f16_e32 v0, v3, v01013; VI-NEXT: v_mov_b32_e32 v1, v41014; VI-NEXT: s_setpc_b64 s[30:31]1015;1016; GFX11-SAFE-TRUE16-LABEL: add_select_multi_store_use_lhs_fneg_fneg_f16:1017; GFX11-SAFE-TRUE16: ; %bb.0:1018; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1019; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01020; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo1021; GFX11-SAFE-TRUE16-NEXT: v_xor_b16 v1.l, 0x8000, v1.l1022; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1023; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v0.l, v3.l, v0.l1024; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1025;1026; GFX11-SAFE-FAKE16-LABEL: add_select_multi_store_use_lhs_fneg_fneg_f16:1027; GFX11-SAFE-FAKE16: ; %bb.0:1028; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1029; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01030; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo1031; GFX11-SAFE-FAKE16-NEXT: v_xor_b32_e32 v1, 0x8000, v11032; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1033; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v0, v3, v01034; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1035;1036; GFX11-NSZ-TRUE16-LABEL: add_select_multi_store_use_lhs_fneg_fneg_f16:1037; GFX11-NSZ-TRUE16: ; %bb.0:1038; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1039; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01040; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo1041; GFX11-NSZ-TRUE16-NEXT: v_xor_b16 v1.l, 0x8000, v1.l1042; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1043; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, v3.l, v0.l1044; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]1045;1046; GFX11-NSZ-FAKE16-LABEL: add_select_multi_store_use_lhs_fneg_fneg_f16:1047; GFX11-NSZ-FAKE16: ; %bb.0:1048; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1049; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01050; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo1051; GFX11-NSZ-FAKE16-NEXT: v_xor_b32_e32 v1, 0x8000, v11052; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1053; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v0, v3, v01054; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]1055 %cmp = icmp eq i32 %c, 01056 %fneg.x = fneg half %x1057 %fneg.y = fneg half %y1058 %select = select i1 %cmp, half %fneg.x, half %fneg.y1059 %add0 = fadd half %select, %z1060 %insert.0 = insertvalue { half, half } poison, half %add0, 01061 %insert.1 = insertvalue { half, half } %insert.0, half %fneg.x, 11062 ret { half, half } %insert.11063}1064 1065define { half, half } @add_select_multi_use_rhs_fneg_fneg_f16(i32 %c, half %x, half %y, half %z, half %w) {1066; CI-LABEL: add_select_multi_use_rhs_fneg_fneg_f16:1067; CI: ; %bb.0:1068; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1069; CI-NEXT: v_cvt_f16_f32_e32 v1, v11070; CI-NEXT: v_cvt_f16_f32_e32 v2, v21071; CI-NEXT: v_cvt_f16_f32_e32 v3, v31072; CI-NEXT: v_cvt_f16_f32_e32 v4, v41073; CI-NEXT: v_cvt_f32_f16_e32 v1, v11074; CI-NEXT: v_cvt_f32_f16_e32 v2, v21075; CI-NEXT: v_cvt_f32_f16_e32 v3, v31076; CI-NEXT: v_cvt_f32_f16_e32 v4, v41077; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01078; CI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc1079; CI-NEXT: v_sub_f32_e32 v0, v3, v01080; CI-NEXT: v_sub_f32_e32 v1, v4, v21081; CI-NEXT: s_setpc_b64 s[30:31]1082;1083; VI-LABEL: add_select_multi_use_rhs_fneg_fneg_f16:1084; VI: ; %bb.0:1085; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1086; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01087; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc1088; VI-NEXT: v_sub_f16_e32 v0, v3, v01089; VI-NEXT: v_sub_f16_e32 v1, v4, v21090; VI-NEXT: s_setpc_b64 s[30:31]1091;1092; GFX11-SAFE-TRUE16-LABEL: add_select_multi_use_rhs_fneg_fneg_f16:1093; GFX11-SAFE-TRUE16: ; %bb.0:1094; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1095; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01096; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo1097; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v1.l, v4.l, v2.l1098; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1099; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v0.l, v3.l, v0.l1100; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1101;1102; GFX11-SAFE-FAKE16-LABEL: add_select_multi_use_rhs_fneg_fneg_f16:1103; GFX11-SAFE-FAKE16: ; %bb.0:1104; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1105; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01106; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo1107; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v1, v4, v21108; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1109; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v0, v3, v01110; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1111;1112; GFX11-NSZ-TRUE16-LABEL: add_select_multi_use_rhs_fneg_fneg_f16:1113; GFX11-NSZ-TRUE16: ; %bb.0:1114; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1115; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01116; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v1.l, vcc_lo1117; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v1.l, v4.l, v2.l1118; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1119; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, v3.l, v0.l1120; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]1121;1122; GFX11-NSZ-FAKE16-LABEL: add_select_multi_use_rhs_fneg_fneg_f16:1123; GFX11-NSZ-FAKE16: ; %bb.0:1124; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1125; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01126; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo1127; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v1, v4, v21128; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)1129; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v0, v3, v01130; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]1131 %cmp = icmp eq i32 %c, 01132 %fneg.x = fneg half %x1133 %fneg.y = fneg half %y1134 %select = select i1 %cmp, half %fneg.x, half %fneg.y1135 %add0 = fadd half %select, %z1136 %add1 = fadd half %fneg.y, %w1137 %insert.0 = insertvalue { half, half } poison, half %add0, 01138 %insert.1 = insertvalue { half, half } %insert.0, half %add1, 11139 ret { half, half } %insert.11140}1141 1142define half @add_select_fneg_var_f16(i32 %c, half %x, half %y, half %z) {1143; CI-LABEL: add_select_fneg_var_f16:1144; CI: ; %bb.0:1145; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1146; CI-NEXT: v_cvt_f16_f32_e32 v2, v21147; CI-NEXT: v_cvt_f16_f32_e64 v1, -v11148; CI-NEXT: v_cvt_f16_f32_e32 v3, v31149; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01150; CI-NEXT: v_cvt_f32_f16_e32 v2, v21151; CI-NEXT: v_cvt_f32_f16_e32 v1, v11152; CI-NEXT: v_cvt_f32_f16_e32 v3, v31153; CI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc1154; CI-NEXT: v_add_f32_e32 v0, v0, v31155; CI-NEXT: s_setpc_b64 s[30:31]1156;1157; VI-LABEL: add_select_fneg_var_f16:1158; VI: ; %bb.0:1159; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1160; VI-NEXT: v_xor_b32_e32 v1, 0x8000, v11161; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01162; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc1163; VI-NEXT: v_add_f16_e32 v0, v0, v31164; VI-NEXT: s_setpc_b64 s[30:31]1165;1166; GFX11-SAFE-TRUE16-LABEL: add_select_fneg_var_f16:1167; GFX11-SAFE-TRUE16: ; %bb.0:1168; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1169; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01170; GFX11-SAFE-TRUE16-NEXT: v_xor_b16 v0.l, 0x8000, v1.l1171; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1172; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v0.l, vcc_lo1173; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v3.l1174; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1175;1176; GFX11-SAFE-FAKE16-LABEL: add_select_fneg_var_f16:1177; GFX11-SAFE-FAKE16: ; %bb.0:1178; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1179; GFX11-SAFE-FAKE16-NEXT: v_xor_b32_e32 v1, 0x8000, v11180; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01181; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1182; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo1183; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e32 v0, v0, v31184; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1185;1186; GFX11-NSZ-TRUE16-LABEL: add_select_fneg_var_f16:1187; GFX11-NSZ-TRUE16: ; %bb.0:1188; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1189; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01190; GFX11-NSZ-TRUE16-NEXT: v_xor_b16 v0.l, 0x8000, v1.l1191; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1192; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, v0.l, vcc_lo1193; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v3.l1194; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]1195;1196; GFX11-NSZ-FAKE16-LABEL: add_select_fneg_var_f16:1197; GFX11-NSZ-FAKE16: ; %bb.0:1198; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1199; GFX11-NSZ-FAKE16-NEXT: v_xor_b32_e32 v1, 0x8000, v11200; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01201; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1202; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo1203; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e32 v0, v0, v31204; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]1205 %cmp = icmp eq i32 %c, 01206 %fneg.x = fneg half %x1207 %select = select i1 %cmp, half %fneg.x, half %y1208 %add = fadd half %select, %z1209 ret half %add1210}1211 1212define half @add_select_fneg_negk_f16(i32 %c, half %x, half %y) {1213; CI-LABEL: add_select_fneg_negk_f16:1214; CI: ; %bb.0:1215; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1216; CI-NEXT: v_cvt_f16_f32_e32 v1, v11217; CI-NEXT: v_cvt_f16_f32_e32 v2, v21218; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01219; CI-NEXT: v_cvt_f32_f16_e32 v1, v11220; CI-NEXT: v_cvt_f32_f16_e32 v2, v21221; CI-NEXT: v_cndmask_b32_e32 v0, 1.0, v1, vcc1222; CI-NEXT: v_sub_f32_e32 v0, v2, v01223; CI-NEXT: s_setpc_b64 s[30:31]1224;1225; VI-LABEL: add_select_fneg_negk_f16:1226; VI: ; %bb.0:1227; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1228; VI-NEXT: v_mov_b32_e32 v3, 0x3c001229; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01230; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc1231; VI-NEXT: v_sub_f16_e32 v0, v2, v01232; VI-NEXT: s_setpc_b64 s[30:31]1233;1234; GFX11-SAFE-TRUE16-LABEL: add_select_fneg_negk_f16:1235; GFX11-SAFE-TRUE16: ; %bb.0:1236; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1237; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01238; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x3c00, v1.l, vcc_lo1239; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1240; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v0.l, v2.l, v0.l1241; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1242;1243; GFX11-SAFE-FAKE16-LABEL: add_select_fneg_negk_f16:1244; GFX11-SAFE-FAKE16: ; %bb.0:1245; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1246; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01247; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x3c00, v1, vcc_lo1248; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1249; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v0, v2, v01250; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1251;1252; GFX11-NSZ-TRUE16-LABEL: add_select_fneg_negk_f16:1253; GFX11-NSZ-TRUE16: ; %bb.0:1254; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1255; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01256; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x3c00, v1.l, vcc_lo1257; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1258; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, v2.l, v0.l1259; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]1260;1261; GFX11-NSZ-FAKE16-LABEL: add_select_fneg_negk_f16:1262; GFX11-NSZ-FAKE16: ; %bb.0:1263; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1264; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01265; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x3c00, v1, vcc_lo1266; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1267; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v0, v2, v01268; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]1269 %cmp = icmp eq i32 %c, 01270 %fneg.x = fneg half %x1271 %select = select i1 %cmp, half %fneg.x, half -1.01272 %add = fadd half %select, %y1273 ret half %add1274}1275 1276define half @add_select_fneg_inv2pi_f16(i32 %c, half %x, half %y) {1277; CI-LABEL: add_select_fneg_inv2pi_f16:1278; CI: ; %bb.0:1279; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1280; CI-NEXT: v_cvt_f16_f32_e32 v1, v11281; CI-NEXT: v_cvt_f16_f32_e32 v2, v21282; CI-NEXT: v_mov_b32_e32 v3, 0xbe2300001283; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01284; CI-NEXT: v_cvt_f32_f16_e32 v1, v11285; CI-NEXT: v_cvt_f32_f16_e32 v2, v21286; CI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc1287; CI-NEXT: v_sub_f32_e32 v0, v2, v01288; CI-NEXT: s_setpc_b64 s[30:31]1289;1290; VI-LABEL: add_select_fneg_inv2pi_f16:1291; VI: ; %bb.0:1292; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1293; VI-NEXT: v_mov_b32_e32 v3, 0xb1181294; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01295; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc1296; VI-NEXT: v_sub_f16_e32 v0, v2, v01297; VI-NEXT: s_setpc_b64 s[30:31]1298;1299; GFX11-SAFE-TRUE16-LABEL: add_select_fneg_inv2pi_f16:1300; GFX11-SAFE-TRUE16: ; %bb.0:1301; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1302; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01303; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xb118, v1.l, vcc_lo1304; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1305; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v0.l, v2.l, v0.l1306; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1307;1308; GFX11-SAFE-FAKE16-LABEL: add_select_fneg_inv2pi_f16:1309; GFX11-SAFE-FAKE16: ; %bb.0:1310; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1311; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01312; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xb118, v1, vcc_lo1313; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1314; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v0, v2, v01315; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1316;1317; GFX11-NSZ-TRUE16-LABEL: add_select_fneg_inv2pi_f16:1318; GFX11-NSZ-TRUE16: ; %bb.0:1319; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1320; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01321; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xb118, v1.l, vcc_lo1322; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1323; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, v2.l, v0.l1324; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]1325;1326; GFX11-NSZ-FAKE16-LABEL: add_select_fneg_inv2pi_f16:1327; GFX11-NSZ-FAKE16: ; %bb.0:1328; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1329; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01330; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xb118, v1, vcc_lo1331; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1332; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v0, v2, v01333; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]1334 %cmp = icmp eq i32 %c, 01335 %fneg.x = fneg half %x1336 %select = select i1 %cmp, half %fneg.x, half 0xH31181337 %add = fadd half %select, %y1338 ret half %add1339}1340 1341define half @add_select_fneg_neginv2pi_f16(i32 %c, half %x, half %y) {1342; CI-LABEL: add_select_fneg_neginv2pi_f16:1343; CI: ; %bb.0:1344; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1345; CI-NEXT: v_cvt_f16_f32_e32 v1, v11346; CI-NEXT: v_cvt_f16_f32_e32 v2, v21347; CI-NEXT: v_mov_b32_e32 v3, 0x3e2300001348; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01349; CI-NEXT: v_cvt_f32_f16_e32 v1, v11350; CI-NEXT: v_cvt_f32_f16_e32 v2, v21351; CI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc1352; CI-NEXT: v_sub_f32_e32 v0, v2, v01353; CI-NEXT: s_setpc_b64 s[30:31]1354;1355; VI-LABEL: add_select_fneg_neginv2pi_f16:1356; VI: ; %bb.0:1357; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1358; VI-NEXT: v_mov_b32_e32 v3, 0x31181359; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01360; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc1361; VI-NEXT: v_sub_f16_e32 v0, v2, v01362; VI-NEXT: s_setpc_b64 s[30:31]1363;1364; GFX11-SAFE-TRUE16-LABEL: add_select_fneg_neginv2pi_f16:1365; GFX11-SAFE-TRUE16: ; %bb.0:1366; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1367; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01368; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x3118, v1.l, vcc_lo1369; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1370; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v0.l, v2.l, v0.l1371; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1372;1373; GFX11-SAFE-FAKE16-LABEL: add_select_fneg_neginv2pi_f16:1374; GFX11-SAFE-FAKE16: ; %bb.0:1375; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1376; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01377; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x3118, v1, vcc_lo1378; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1379; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v0, v2, v01380; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1381;1382; GFX11-NSZ-TRUE16-LABEL: add_select_fneg_neginv2pi_f16:1383; GFX11-NSZ-TRUE16: ; %bb.0:1384; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1385; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01386; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x3118, v1.l, vcc_lo1387; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1388; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, v2.l, v0.l1389; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]1390;1391; GFX11-NSZ-FAKE16-LABEL: add_select_fneg_neginv2pi_f16:1392; GFX11-NSZ-FAKE16: ; %bb.0:1393; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1394; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01395; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x3118, v1, vcc_lo1396; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1397; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v0, v2, v01398; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]1399 %cmp = icmp eq i32 %c, 01400 %fneg.x = fneg half %x1401 %select = select i1 %cmp, half %fneg.x, half 0xHB1181402 %add = fadd half %select, %y1403 ret half %add1404}1405 1406define half @add_select_negk_negk_f16(i32 %c, half %x) {1407; CI-LABEL: add_select_negk_negk_f16:1408; CI: ; %bb.0:1409; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1410; CI-NEXT: v_cvt_f16_f32_e32 v1, v11411; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01412; CI-NEXT: v_cndmask_b32_e64 v0, -1.0, -2.0, vcc1413; CI-NEXT: v_cvt_f32_f16_e32 v1, v11414; CI-NEXT: v_add_f32_e32 v0, v0, v11415; CI-NEXT: s_setpc_b64 s[30:31]1416;1417; VI-LABEL: add_select_negk_negk_f16:1418; VI: ; %bb.0:1419; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1420; VI-NEXT: v_mov_b32_e32 v2, 0xbc001421; VI-NEXT: v_mov_b32_e32 v3, 0xc0001422; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01423; VI-NEXT: v_cndmask_b32_e32 v0, v2, v3, vcc1424; VI-NEXT: v_add_f16_e32 v0, v0, v11425; VI-NEXT: s_setpc_b64 s[30:31]1426;1427; GFX11-SAFE-TRUE16-LABEL: add_select_negk_negk_f16:1428; GFX11-SAFE-TRUE16: ; %bb.0:1429; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1430; GFX11-SAFE-TRUE16-NEXT: v_mov_b16_e32 v2.l, 0xbc001431; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01432; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1433; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, 0xc000, vcc_lo1434; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v1.l1435; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1436;1437; GFX11-SAFE-FAKE16-LABEL: add_select_negk_negk_f16:1438; GFX11-SAFE-FAKE16: ; %bb.0:1439; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1440; GFX11-SAFE-FAKE16-NEXT: v_mov_b32_e32 v2, 0xc0001441; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01442; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1443; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xbc00, v2, vcc_lo1444; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e32 v0, v0, v11445; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1446;1447; GFX11-NSZ-TRUE16-LABEL: add_select_negk_negk_f16:1448; GFX11-NSZ-TRUE16: ; %bb.0:1449; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1450; GFX11-NSZ-TRUE16-NEXT: v_mov_b16_e32 v2.l, 0xbc001451; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01452; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1453; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, 0xc000, vcc_lo1454; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v1.l1455; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]1456;1457; GFX11-NSZ-FAKE16-LABEL: add_select_negk_negk_f16:1458; GFX11-NSZ-FAKE16: ; %bb.0:1459; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1460; GFX11-NSZ-FAKE16-NEXT: v_mov_b32_e32 v2, 0xc0001461; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01462; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1463; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xbc00, v2, vcc_lo1464; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e32 v0, v0, v11465; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]1466 %cmp = icmp eq i32 %c, 01467 %select = select i1 %cmp, half -2.0, half -1.01468 %add = fadd half %select, %x1469 ret half %add1470}1471 1472define half @add_select_negliteralk_negliteralk_f16(i32 %c, half %x) {1473; CI-LABEL: add_select_negliteralk_negliteralk_f16:1474; CI: ; %bb.0:1475; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1476; CI-NEXT: v_cvt_f16_f32_e32 v1, v11477; CI-NEXT: v_mov_b32_e32 v2, 0xc58000001478; CI-NEXT: v_mov_b32_e32 v3, 0xc50000001479; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01480; CI-NEXT: v_cvt_f32_f16_e32 v1, v11481; CI-NEXT: v_cndmask_b32_e32 v0, v2, v3, vcc1482; CI-NEXT: v_add_f32_e32 v0, v0, v11483; CI-NEXT: s_setpc_b64 s[30:31]1484;1485; VI-LABEL: add_select_negliteralk_negliteralk_f16:1486; VI: ; %bb.0:1487; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1488; VI-NEXT: v_mov_b32_e32 v2, 0xec001489; VI-NEXT: v_mov_b32_e32 v3, 0xe8001490; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01491; VI-NEXT: v_cndmask_b32_e32 v0, v2, v3, vcc1492; VI-NEXT: v_add_f16_e32 v0, v0, v11493; VI-NEXT: s_setpc_b64 s[30:31]1494;1495; GFX11-SAFE-TRUE16-LABEL: add_select_negliteralk_negliteralk_f16:1496; GFX11-SAFE-TRUE16: ; %bb.0:1497; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1498; GFX11-SAFE-TRUE16-NEXT: v_mov_b16_e32 v2.l, 0xec001499; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01500; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1501; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, 0xe800, vcc_lo1502; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v1.l1503; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1504;1505; GFX11-SAFE-FAKE16-LABEL: add_select_negliteralk_negliteralk_f16:1506; GFX11-SAFE-FAKE16: ; %bb.0:1507; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1508; GFX11-SAFE-FAKE16-NEXT: v_mov_b32_e32 v2, 0xe8001509; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01510; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1511; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xec00, v2, vcc_lo1512; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e32 v0, v0, v11513; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1514;1515; GFX11-NSZ-TRUE16-LABEL: add_select_negliteralk_negliteralk_f16:1516; GFX11-NSZ-TRUE16: ; %bb.0:1517; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1518; GFX11-NSZ-TRUE16-NEXT: v_mov_b16_e32 v2.l, 0xec001519; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01520; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1521; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, 0xe800, vcc_lo1522; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v1.l1523; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]1524;1525; GFX11-NSZ-FAKE16-LABEL: add_select_negliteralk_negliteralk_f16:1526; GFX11-NSZ-FAKE16: ; %bb.0:1527; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1528; GFX11-NSZ-FAKE16-NEXT: v_mov_b32_e32 v2, 0xe8001529; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01530; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1531; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xec00, v2, vcc_lo1532; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e32 v0, v0, v11533; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]1534 %cmp = icmp eq i32 %c, 01535 %select = select i1 %cmp, half -2048.0, half -4096.01536 %add = fadd half %select, %x1537 ret half %add1538}1539 1540define half @add_select_fneg_negk_negk_f16(i32 %c, half %x) {1541; CI-LABEL: add_select_fneg_negk_negk_f16:1542; CI: ; %bb.0:1543; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1544; CI-NEXT: v_cvt_f16_f32_e32 v1, v11545; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01546; CI-NEXT: v_cndmask_b32_e64 v0, -1.0, -2.0, vcc1547; CI-NEXT: v_cvt_f32_f16_e32 v1, v11548; CI-NEXT: v_sub_f32_e32 v0, v1, v01549; CI-NEXT: s_setpc_b64 s[30:31]1550;1551; VI-LABEL: add_select_fneg_negk_negk_f16:1552; VI: ; %bb.0:1553; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1554; VI-NEXT: v_mov_b32_e32 v2, 0xbc001555; VI-NEXT: v_mov_b32_e32 v3, 0xc0001556; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01557; VI-NEXT: v_cndmask_b32_e32 v0, v2, v3, vcc1558; VI-NEXT: v_sub_f16_e32 v0, v1, v01559; VI-NEXT: s_setpc_b64 s[30:31]1560;1561; GFX11-SAFE-TRUE16-LABEL: add_select_fneg_negk_negk_f16:1562; GFX11-SAFE-TRUE16: ; %bb.0:1563; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1564; GFX11-SAFE-TRUE16-NEXT: v_mov_b16_e32 v2.l, 0xbc001565; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01566; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1567; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, 0xc000, vcc_lo1568; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v0.l, v1.l, v0.l1569; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1570;1571; GFX11-SAFE-FAKE16-LABEL: add_select_fneg_negk_negk_f16:1572; GFX11-SAFE-FAKE16: ; %bb.0:1573; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1574; GFX11-SAFE-FAKE16-NEXT: v_mov_b32_e32 v2, 0xc0001575; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01576; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1577; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xbc00, v2, vcc_lo1578; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v0, v1, v01579; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1580;1581; GFX11-NSZ-TRUE16-LABEL: add_select_fneg_negk_negk_f16:1582; GFX11-NSZ-TRUE16: ; %bb.0:1583; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1584; GFX11-NSZ-TRUE16-NEXT: v_mov_b16_e32 v2.l, 0xbc001585; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01586; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1587; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v2.l, 0xc000, vcc_lo1588; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, v1.l, v0.l1589; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]1590;1591; GFX11-NSZ-FAKE16-LABEL: add_select_fneg_negk_negk_f16:1592; GFX11-NSZ-FAKE16: ; %bb.0:1593; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1594; GFX11-NSZ-FAKE16-NEXT: v_mov_b32_e32 v2, 0xc0001595; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01596; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1597; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xbc00, v2, vcc_lo1598; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v0, v1, v01599; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]1600 %cmp = icmp eq i32 %c, 01601 %select = select i1 %cmp, half -2.0, half -1.01602 %fneg.x = fneg half %select1603 %add = fadd half %fneg.x, %x1604 ret half %add1605}1606 1607define half @add_select_negk_fneg_f16(i32 %c, half %x, half %y) {1608; CI-LABEL: add_select_negk_fneg_f16:1609; CI: ; %bb.0:1610; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1611; CI-NEXT: v_cvt_f16_f32_e32 v1, v11612; CI-NEXT: v_cvt_f16_f32_e32 v2, v21613; CI-NEXT: v_cmp_ne_u32_e32 vcc, 0, v01614; CI-NEXT: v_cvt_f32_f16_e32 v1, v11615; CI-NEXT: v_cvt_f32_f16_e32 v2, v21616; CI-NEXT: v_cndmask_b32_e32 v0, 1.0, v1, vcc1617; CI-NEXT: v_sub_f32_e32 v0, v2, v01618; CI-NEXT: s_setpc_b64 s[30:31]1619;1620; VI-LABEL: add_select_negk_fneg_f16:1621; VI: ; %bb.0:1622; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1623; VI-NEXT: v_mov_b32_e32 v3, 0x3c001624; VI-NEXT: v_cmp_ne_u32_e32 vcc, 0, v01625; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc1626; VI-NEXT: v_sub_f16_e32 v0, v2, v01627; VI-NEXT: s_setpc_b64 s[30:31]1628;1629; GFX11-SAFE-TRUE16-LABEL: add_select_negk_fneg_f16:1630; GFX11-SAFE-TRUE16: ; %bb.0:1631; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1632; GFX11-SAFE-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v01633; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x3c00, v1.l, vcc_lo1634; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1635; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v0.l, v2.l, v0.l1636; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1637;1638; GFX11-SAFE-FAKE16-LABEL: add_select_negk_fneg_f16:1639; GFX11-SAFE-FAKE16: ; %bb.0:1640; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1641; GFX11-SAFE-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v01642; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x3c00, v1, vcc_lo1643; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1644; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v0, v2, v01645; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1646;1647; GFX11-NSZ-TRUE16-LABEL: add_select_negk_fneg_f16:1648; GFX11-NSZ-TRUE16: ; %bb.0:1649; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1650; GFX11-NSZ-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v01651; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x3c00, v1.l, vcc_lo1652; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1653; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, v2.l, v0.l1654; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]1655;1656; GFX11-NSZ-FAKE16-LABEL: add_select_negk_fneg_f16:1657; GFX11-NSZ-FAKE16: ; %bb.0:1658; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1659; GFX11-NSZ-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v01660; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x3c00, v1, vcc_lo1661; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1662; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v0, v2, v01663; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]1664 %cmp = icmp eq i32 %c, 01665 %fneg.x = fneg half %x1666 %select = select i1 %cmp, half -1.0, half %fneg.x1667 %add = fadd half %select, %y1668 ret half %add1669}1670 1671define half @add_select_fneg_posk_f16(i32 %c, half %x, half %y) {1672; CI-LABEL: add_select_fneg_posk_f16:1673; CI: ; %bb.0:1674; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1675; CI-NEXT: v_cvt_f16_f32_e32 v1, v11676; CI-NEXT: v_cvt_f16_f32_e32 v2, v21677; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01678; CI-NEXT: v_cvt_f32_f16_e32 v1, v11679; CI-NEXT: v_cvt_f32_f16_e32 v2, v21680; CI-NEXT: v_cndmask_b32_e32 v0, -1.0, v1, vcc1681; CI-NEXT: v_sub_f32_e32 v0, v2, v01682; CI-NEXT: s_setpc_b64 s[30:31]1683;1684; VI-LABEL: add_select_fneg_posk_f16:1685; VI: ; %bb.0:1686; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1687; VI-NEXT: v_mov_b32_e32 v3, 0xbc001688; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01689; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc1690; VI-NEXT: v_sub_f16_e32 v0, v2, v01691; VI-NEXT: s_setpc_b64 s[30:31]1692;1693; GFX11-SAFE-TRUE16-LABEL: add_select_fneg_posk_f16:1694; GFX11-SAFE-TRUE16: ; %bb.0:1695; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1696; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01697; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xbc00, v1.l, vcc_lo1698; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1699; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v0.l, v2.l, v0.l1700; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1701;1702; GFX11-SAFE-FAKE16-LABEL: add_select_fneg_posk_f16:1703; GFX11-SAFE-FAKE16: ; %bb.0:1704; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1705; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01706; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xbc00, v1, vcc_lo1707; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1708; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v0, v2, v01709; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1710;1711; GFX11-NSZ-TRUE16-LABEL: add_select_fneg_posk_f16:1712; GFX11-NSZ-TRUE16: ; %bb.0:1713; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1714; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01715; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xbc00, v1.l, vcc_lo1716; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1717; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, v2.l, v0.l1718; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]1719;1720; GFX11-NSZ-FAKE16-LABEL: add_select_fneg_posk_f16:1721; GFX11-NSZ-FAKE16: ; %bb.0:1722; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1723; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01724; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xbc00, v1, vcc_lo1725; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1726; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v0, v2, v01727; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]1728 %cmp = icmp eq i32 %c, 01729 %fneg.x = fneg half %x1730 %select = select i1 %cmp, half %fneg.x, half 1.01731 %add = fadd half %select, %y1732 ret half %add1733}1734 1735define half @add_select_posk_fneg_f16(i32 %c, half %x, half %y) {1736; CI-LABEL: add_select_posk_fneg_f16:1737; CI: ; %bb.0:1738; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1739; CI-NEXT: v_cvt_f16_f32_e32 v1, v11740; CI-NEXT: v_cvt_f16_f32_e32 v2, v21741; CI-NEXT: v_cmp_ne_u32_e32 vcc, 0, v01742; CI-NEXT: v_cvt_f32_f16_e32 v1, v11743; CI-NEXT: v_cvt_f32_f16_e32 v2, v21744; CI-NEXT: v_cndmask_b32_e32 v0, -1.0, v1, vcc1745; CI-NEXT: v_sub_f32_e32 v0, v2, v01746; CI-NEXT: s_setpc_b64 s[30:31]1747;1748; VI-LABEL: add_select_posk_fneg_f16:1749; VI: ; %bb.0:1750; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1751; VI-NEXT: v_mov_b32_e32 v3, 0xbc001752; VI-NEXT: v_cmp_ne_u32_e32 vcc, 0, v01753; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc1754; VI-NEXT: v_sub_f16_e32 v0, v2, v01755; VI-NEXT: s_setpc_b64 s[30:31]1756;1757; GFX11-SAFE-TRUE16-LABEL: add_select_posk_fneg_f16:1758; GFX11-SAFE-TRUE16: ; %bb.0:1759; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1760; GFX11-SAFE-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v01761; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xbc00, v1.l, vcc_lo1762; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1763; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v0.l, v2.l, v0.l1764; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1765;1766; GFX11-SAFE-FAKE16-LABEL: add_select_posk_fneg_f16:1767; GFX11-SAFE-FAKE16: ; %bb.0:1768; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1769; GFX11-SAFE-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v01770; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xbc00, v1, vcc_lo1771; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1772; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v0, v2, v01773; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1774;1775; GFX11-NSZ-TRUE16-LABEL: add_select_posk_fneg_f16:1776; GFX11-NSZ-TRUE16: ; %bb.0:1777; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1778; GFX11-NSZ-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v01779; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xbc00, v1.l, vcc_lo1780; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1781; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, v2.l, v0.l1782; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]1783;1784; GFX11-NSZ-FAKE16-LABEL: add_select_posk_fneg_f16:1785; GFX11-NSZ-FAKE16: ; %bb.0:1786; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1787; GFX11-NSZ-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v01788; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xbc00, v1, vcc_lo1789; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_1)1790; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v0, v2, v01791; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]1792 %cmp = icmp eq i32 %c, 01793 %fneg.x = fneg half %x1794 %select = select i1 %cmp, half 1.0, half %fneg.x1795 %add = fadd half %select, %y1796 ret half %add1797}1798 1799define half @add_select_negfabs_fabs_f16(i32 %c, half %x, half %y, half %z) {1800; CI-LABEL: add_select_negfabs_fabs_f16:1801; CI: ; %bb.0:1802; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1803; CI-NEXT: v_cvt_f16_f32_e32 v1, v11804; CI-NEXT: v_cvt_f16_f32_e32 v2, v21805; CI-NEXT: v_cvt_f16_f32_e32 v3, v31806; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01807; CI-NEXT: v_cvt_f32_f16_e64 v1, -|v1|1808; CI-NEXT: v_cvt_f32_f16_e64 v2, |v2|1809; CI-NEXT: v_cvt_f32_f16_e32 v3, v31810; CI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc1811; CI-NEXT: v_add_f32_e32 v0, v0, v31812; CI-NEXT: s_setpc_b64 s[30:31]1813;1814; VI-LABEL: add_select_negfabs_fabs_f16:1815; VI: ; %bb.0:1816; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1817; VI-NEXT: v_or_b32_e32 v1, 0x8000, v11818; VI-NEXT: v_and_b32_e32 v2, 0x7fff, v21819; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01820; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc1821; VI-NEXT: v_add_f16_e32 v0, v0, v31822; VI-NEXT: s_setpc_b64 s[30:31]1823;1824; GFX11-SAFE-TRUE16-LABEL: add_select_negfabs_fabs_f16:1825; GFX11-SAFE-TRUE16: ; %bb.0:1826; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1827; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01828; GFX11-SAFE-TRUE16-NEXT: v_or_b16 v0.l, 0x8000, v1.l1829; GFX11-SAFE-TRUE16-NEXT: v_and_b16 v0.h, 0x7fff, v2.l1830; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1831; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v0.h, v0.l, vcc_lo1832; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v3.l1833; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1834;1835; GFX11-SAFE-FAKE16-LABEL: add_select_negfabs_fabs_f16:1836; GFX11-SAFE-FAKE16: ; %bb.0:1837; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1838; GFX11-SAFE-FAKE16-NEXT: v_or_b32_e32 v1, 0x8000, v11839; GFX11-SAFE-FAKE16-NEXT: v_and_b32_e32 v2, 0x7fff, v21840; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01841; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1842; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo1843; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e32 v0, v0, v31844; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1845;1846; GFX11-NSZ-TRUE16-LABEL: add_select_negfabs_fabs_f16:1847; GFX11-NSZ-TRUE16: ; %bb.0:1848; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1849; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01850; GFX11-NSZ-TRUE16-NEXT: v_or_b16 v0.l, 0x8000, v1.l1851; GFX11-NSZ-TRUE16-NEXT: v_and_b16 v0.h, 0x7fff, v2.l1852; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1853; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v0.h, v0.l, vcc_lo1854; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v3.l1855; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]1856;1857; GFX11-NSZ-FAKE16-LABEL: add_select_negfabs_fabs_f16:1858; GFX11-NSZ-FAKE16: ; %bb.0:1859; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1860; GFX11-NSZ-FAKE16-NEXT: v_or_b32_e32 v1, 0x8000, v11861; GFX11-NSZ-FAKE16-NEXT: v_and_b32_e32 v2, 0x7fff, v21862; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01863; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1864; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo1865; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e32 v0, v0, v31866; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]1867 %cmp = icmp eq i32 %c, 01868 %fabs.x = call half @llvm.fabs.f16(half %x)1869 %fneg.fabs.x = fsub half -0.000000e+00, %fabs.x1870 %fabs.y = call half @llvm.fabs.f16(half %y)1871 %select = select i1 %cmp, half %fneg.fabs.x, half %fabs.y1872 %add = fadd half %select, %z1873 ret half %add1874}1875 1876define half @add_select_fabs_negfabs_f16(i32 %c, half %x, half %y, half %z) {1877; CI-LABEL: add_select_fabs_negfabs_f16:1878; CI: ; %bb.0:1879; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1880; CI-NEXT: v_cvt_f16_f32_e32 v1, v11881; CI-NEXT: v_cvt_f16_f32_e32 v2, v21882; CI-NEXT: v_cvt_f16_f32_e32 v3, v31883; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01884; CI-NEXT: v_cvt_f32_f16_e64 v1, |v1|1885; CI-NEXT: v_cvt_f32_f16_e64 v2, -|v2|1886; CI-NEXT: v_cvt_f32_f16_e32 v3, v31887; CI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc1888; CI-NEXT: v_add_f32_e32 v0, v0, v31889; CI-NEXT: s_setpc_b64 s[30:31]1890;1891; VI-LABEL: add_select_fabs_negfabs_f16:1892; VI: ; %bb.0:1893; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1894; VI-NEXT: v_and_b32_e32 v1, 0x7fff, v11895; VI-NEXT: v_or_b32_e32 v2, 0x8000, v21896; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01897; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc1898; VI-NEXT: v_add_f16_e32 v0, v0, v31899; VI-NEXT: s_setpc_b64 s[30:31]1900;1901; GFX11-SAFE-TRUE16-LABEL: add_select_fabs_negfabs_f16:1902; GFX11-SAFE-TRUE16: ; %bb.0:1903; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1904; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01905; GFX11-SAFE-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v1.l1906; GFX11-SAFE-TRUE16-NEXT: v_or_b16 v0.h, 0x8000, v2.l1907; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1908; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v0.h, v0.l, vcc_lo1909; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v3.l1910; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1911;1912; GFX11-SAFE-FAKE16-LABEL: add_select_fabs_negfabs_f16:1913; GFX11-SAFE-FAKE16: ; %bb.0:1914; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1915; GFX11-SAFE-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v11916; GFX11-SAFE-FAKE16-NEXT: v_or_b32_e32 v2, 0x8000, v21917; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01918; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1919; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo1920; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e32 v0, v0, v31921; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1922;1923; GFX11-NSZ-TRUE16-LABEL: add_select_fabs_negfabs_f16:1924; GFX11-NSZ-TRUE16: ; %bb.0:1925; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1926; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01927; GFX11-NSZ-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v1.l1928; GFX11-NSZ-TRUE16-NEXT: v_or_b16 v0.h, 0x8000, v2.l1929; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1930; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v0.h, v0.l, vcc_lo1931; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v3.l1932; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]1933;1934; GFX11-NSZ-FAKE16-LABEL: add_select_fabs_negfabs_f16:1935; GFX11-NSZ-FAKE16: ; %bb.0:1936; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1937; GFX11-NSZ-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v11938; GFX11-NSZ-FAKE16-NEXT: v_or_b32_e32 v2, 0x8000, v21939; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01940; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1941; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo1942; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e32 v0, v0, v31943; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]1944 %cmp = icmp eq i32 %c, 01945 %fabs.x = call half @llvm.fabs.f16(half %x)1946 %fabs.y = call half @llvm.fabs.f16(half %y)1947 %fneg.fabs.y = fsub half -0.000000e+00, %fabs.y1948 %select = select i1 %cmp, half %fabs.x, half %fneg.fabs.y1949 %add = fadd half %select, %z1950 ret half %add1951}1952 1953define half @add_select_neg_fabs_f16(i32 %c, half %x, half %y, half %z) {1954; CI-LABEL: add_select_neg_fabs_f16:1955; CI: ; %bb.0:1956; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1957; CI-NEXT: v_cvt_f16_f32_e64 v1, -v11958; CI-NEXT: v_cvt_f16_f32_e32 v2, v21959; CI-NEXT: v_cvt_f16_f32_e32 v3, v31960; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01961; CI-NEXT: v_cvt_f32_f16_e32 v1, v11962; CI-NEXT: v_cvt_f32_f16_e64 v2, |v2|1963; CI-NEXT: v_cvt_f32_f16_e32 v3, v31964; CI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc1965; CI-NEXT: v_add_f32_e32 v0, v0, v31966; CI-NEXT: s_setpc_b64 s[30:31]1967;1968; VI-LABEL: add_select_neg_fabs_f16:1969; VI: ; %bb.0:1970; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1971; VI-NEXT: v_xor_b32_e32 v1, 0x8000, v11972; VI-NEXT: v_and_b32_e32 v2, 0x7fff, v21973; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v01974; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc1975; VI-NEXT: v_add_f16_e32 v0, v0, v31976; VI-NEXT: s_setpc_b64 s[30:31]1977;1978; GFX11-SAFE-TRUE16-LABEL: add_select_neg_fabs_f16:1979; GFX11-SAFE-TRUE16: ; %bb.0:1980; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1981; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01982; GFX11-SAFE-TRUE16-NEXT: v_xor_b16 v0.l, 0x8000, v1.l1983; GFX11-SAFE-TRUE16-NEXT: v_and_b16 v0.h, 0x7fff, v2.l1984; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)1985; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v0.h, v0.l, vcc_lo1986; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v3.l1987; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]1988;1989; GFX11-SAFE-FAKE16-LABEL: add_select_neg_fabs_f16:1990; GFX11-SAFE-FAKE16: ; %bb.0:1991; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1992; GFX11-SAFE-FAKE16-NEXT: v_xor_b32_e32 v1, 0x8000, v11993; GFX11-SAFE-FAKE16-NEXT: v_and_b32_e32 v2, 0x7fff, v21994; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v01995; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)1996; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo1997; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e32 v0, v0, v31998; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]1999;2000; GFX11-NSZ-TRUE16-LABEL: add_select_neg_fabs_f16:2001; GFX11-NSZ-TRUE16: ; %bb.0:2002; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2003; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02004; GFX11-NSZ-TRUE16-NEXT: v_xor_b16 v0.l, 0x8000, v1.l2005; GFX11-NSZ-TRUE16-NEXT: v_and_b16 v0.h, 0x7fff, v2.l2006; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2007; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v0.h, v0.l, vcc_lo2008; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v3.l2009; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]2010;2011; GFX11-NSZ-FAKE16-LABEL: add_select_neg_fabs_f16:2012; GFX11-NSZ-FAKE16: ; %bb.0:2013; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2014; GFX11-NSZ-FAKE16-NEXT: v_xor_b32_e32 v1, 0x8000, v12015; GFX11-NSZ-FAKE16-NEXT: v_and_b32_e32 v2, 0x7fff, v22016; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02017; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2018; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo2019; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e32 v0, v0, v32020; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]2021 %cmp = icmp eq i32 %c, 02022 %fneg.x = fsub half -0.000000e+00, %x2023 %fabs.y = call half @llvm.fabs.f16(half %y)2024 %select = select i1 %cmp, half %fneg.x, half %fabs.y2025 %add = fadd half %select, %z2026 ret half %add2027}2028 2029define half @add_select_fabs_neg_f16(i32 %c, half %x, half %y, half %z) {2030; CI-LABEL: add_select_fabs_neg_f16:2031; CI: ; %bb.0:2032; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2033; CI-NEXT: v_cvt_f16_f32_e32 v1, v12034; CI-NEXT: v_cvt_f16_f32_e64 v2, -v22035; CI-NEXT: v_cvt_f16_f32_e32 v3, v32036; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02037; CI-NEXT: v_cvt_f32_f16_e64 v1, |v1|2038; CI-NEXT: v_cvt_f32_f16_e32 v2, v22039; CI-NEXT: v_cvt_f32_f16_e32 v3, v32040; CI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc2041; CI-NEXT: v_add_f32_e32 v0, v0, v32042; CI-NEXT: s_setpc_b64 s[30:31]2043;2044; VI-LABEL: add_select_fabs_neg_f16:2045; VI: ; %bb.0:2046; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2047; VI-NEXT: v_and_b32_e32 v1, 0x7fff, v12048; VI-NEXT: v_xor_b32_e32 v2, 0x8000, v22049; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02050; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc2051; VI-NEXT: v_add_f16_e32 v0, v0, v32052; VI-NEXT: s_setpc_b64 s[30:31]2053;2054; GFX11-SAFE-TRUE16-LABEL: add_select_fabs_neg_f16:2055; GFX11-SAFE-TRUE16: ; %bb.0:2056; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2057; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02058; GFX11-SAFE-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v1.l2059; GFX11-SAFE-TRUE16-NEXT: v_xor_b16 v0.h, 0x8000, v2.l2060; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2061; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v0.h, v0.l, vcc_lo2062; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v3.l2063; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]2064;2065; GFX11-SAFE-FAKE16-LABEL: add_select_fabs_neg_f16:2066; GFX11-SAFE-FAKE16: ; %bb.0:2067; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2068; GFX11-SAFE-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v12069; GFX11-SAFE-FAKE16-NEXT: v_xor_b32_e32 v2, 0x8000, v22070; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02071; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2072; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo2073; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e32 v0, v0, v32074; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]2075;2076; GFX11-NSZ-TRUE16-LABEL: add_select_fabs_neg_f16:2077; GFX11-NSZ-TRUE16: ; %bb.0:2078; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2079; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02080; GFX11-NSZ-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v1.l2081; GFX11-NSZ-TRUE16-NEXT: v_xor_b16 v0.h, 0x8000, v2.l2082; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2083; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v0.h, v0.l, vcc_lo2084; GFX11-NSZ-TRUE16-NEXT: v_add_f16_e32 v0.l, v0.l, v3.l2085; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]2086;2087; GFX11-NSZ-FAKE16-LABEL: add_select_fabs_neg_f16:2088; GFX11-NSZ-FAKE16: ; %bb.0:2089; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2090; GFX11-NSZ-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v12091; GFX11-NSZ-FAKE16-NEXT: v_xor_b32_e32 v2, 0x8000, v22092; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02093; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2094; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo2095; GFX11-NSZ-FAKE16-NEXT: v_add_f16_e32 v0, v0, v32096; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]2097 %cmp = icmp eq i32 %c, 02098 %fabs.x = call half @llvm.fabs.f16(half %x)2099 %fneg.y = fsub half -0.000000e+00, %y2100 %select = select i1 %cmp, half %fabs.x, half %fneg.y2101 %add = fadd half %select, %z2102 ret half %add2103}2104 2105define half @add_select_neg_negfabs_f16(i32 %c, half %x, half %y, half %z) {2106; CI-LABEL: add_select_neg_negfabs_f16:2107; CI: ; %bb.0:2108; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2109; CI-NEXT: v_cvt_f16_f32_e32 v1, v12110; CI-NEXT: v_cvt_f16_f32_e32 v2, v22111; CI-NEXT: v_cvt_f16_f32_e32 v3, v32112; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02113; CI-NEXT: v_cvt_f32_f16_e32 v1, v12114; CI-NEXT: v_cvt_f32_f16_e64 v2, |v2|2115; CI-NEXT: v_cvt_f32_f16_e32 v3, v32116; CI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc2117; CI-NEXT: v_sub_f32_e32 v0, v3, v02118; CI-NEXT: s_setpc_b64 s[30:31]2119;2120; VI-LABEL: add_select_neg_negfabs_f16:2121; VI: ; %bb.0:2122; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2123; VI-NEXT: v_and_b32_e32 v2, 0x7fff, v22124; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02125; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc2126; VI-NEXT: v_sub_f16_e32 v0, v3, v02127; VI-NEXT: s_setpc_b64 s[30:31]2128;2129; GFX11-SAFE-TRUE16-LABEL: add_select_neg_negfabs_f16:2130; GFX11-SAFE-TRUE16: ; %bb.0:2131; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2132; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02133; GFX11-SAFE-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v2.l2134; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2135; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v0.l, v1.l, vcc_lo2136; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v0.l, v3.l, v0.l2137; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]2138;2139; GFX11-SAFE-FAKE16-LABEL: add_select_neg_negfabs_f16:2140; GFX11-SAFE-FAKE16: ; %bb.0:2141; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2142; GFX11-SAFE-FAKE16-NEXT: v_and_b32_e32 v2, 0x7fff, v22143; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02144; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2145; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo2146; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v0, v3, v02147; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]2148;2149; GFX11-NSZ-TRUE16-LABEL: add_select_neg_negfabs_f16:2150; GFX11-NSZ-TRUE16: ; %bb.0:2151; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2152; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02153; GFX11-NSZ-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v2.l2154; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2155; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v0.l, v1.l, vcc_lo2156; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, v3.l, v0.l2157; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]2158;2159; GFX11-NSZ-FAKE16-LABEL: add_select_neg_negfabs_f16:2160; GFX11-NSZ-FAKE16: ; %bb.0:2161; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2162; GFX11-NSZ-FAKE16-NEXT: v_and_b32_e32 v2, 0x7fff, v22163; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02164; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2165; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc_lo2166; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v0, v3, v02167; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]2168 %cmp = icmp eq i32 %c, 02169 %fneg.x = fsub half -0.000000e+00, %x2170 %fabs.y = call half @llvm.fabs.f16(half %y)2171 %fneg.fabs.y = fsub half -0.000000e+00, %fabs.y2172 %select = select i1 %cmp, half %fneg.x, half %fneg.fabs.y2173 %add = fadd half %select, %z2174 ret half %add2175}2176 2177define half @add_select_negfabs_neg_f16(i32 %c, half %x, half %y, half %z) {2178; CI-LABEL: add_select_negfabs_neg_f16:2179; CI: ; %bb.0:2180; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2181; CI-NEXT: v_cvt_f16_f32_e32 v2, v22182; CI-NEXT: v_cvt_f16_f32_e32 v1, v12183; CI-NEXT: v_cvt_f16_f32_e32 v3, v32184; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02185; CI-NEXT: v_cvt_f32_f16_e32 v2, v22186; CI-NEXT: v_cvt_f32_f16_e64 v1, |v1|2187; CI-NEXT: v_cvt_f32_f16_e32 v3, v32188; CI-NEXT: v_cndmask_b32_e32 v0, v1, v2, vcc2189; CI-NEXT: v_sub_f32_e32 v0, v3, v02190; CI-NEXT: s_setpc_b64 s[30:31]2191;2192; VI-LABEL: add_select_negfabs_neg_f16:2193; VI: ; %bb.0:2194; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2195; VI-NEXT: v_and_b32_e32 v1, 0x7fff, v12196; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02197; VI-NEXT: v_cndmask_b32_e32 v0, v1, v2, vcc2198; VI-NEXT: v_sub_f16_e32 v0, v3, v02199; VI-NEXT: s_setpc_b64 s[30:31]2200;2201; GFX11-SAFE-TRUE16-LABEL: add_select_negfabs_neg_f16:2202; GFX11-SAFE-TRUE16: ; %bb.0:2203; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2204; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02205; GFX11-SAFE-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v1.l2206; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2207; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, v0.l, v2.l, vcc_lo2208; GFX11-SAFE-TRUE16-NEXT: v_sub_f16_e32 v0.l, v3.l, v0.l2209; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]2210;2211; GFX11-SAFE-FAKE16-LABEL: add_select_negfabs_neg_f16:2212; GFX11-SAFE-FAKE16: ; %bb.0:2213; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2214; GFX11-SAFE-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v12215; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02216; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2217; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, v1, v2, vcc_lo2218; GFX11-SAFE-FAKE16-NEXT: v_sub_f16_e32 v0, v3, v02219; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]2220;2221; GFX11-NSZ-TRUE16-LABEL: add_select_negfabs_neg_f16:2222; GFX11-NSZ-TRUE16: ; %bb.0:2223; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2224; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02225; GFX11-NSZ-TRUE16-NEXT: v_and_b16 v0.l, 0x7fff, v1.l2226; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2227; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, v0.l, v2.l, vcc_lo2228; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, v3.l, v0.l2229; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]2230;2231; GFX11-NSZ-FAKE16-LABEL: add_select_negfabs_neg_f16:2232; GFX11-NSZ-FAKE16: ; %bb.0:2233; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2234; GFX11-NSZ-FAKE16-NEXT: v_and_b32_e32 v1, 0x7fff, v12235; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02236; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2237; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, v1, v2, vcc_lo2238; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v0, v3, v02239; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]2240 %cmp = icmp eq i32 %c, 02241 %fabs.x = call half @llvm.fabs.f16(half %x)2242 %fneg.fabs.x = fsub half -0.000000e+00, %fabs.x2243 %fneg.y = fsub half -0.000000e+00, %y2244 %select = select i1 %cmp, half %fneg.y, half %fneg.fabs.x2245 %add = fadd half %select, %z2246 ret half %add2247}2248 2249define half @mul_select_negfabs_posk_f16(i32 %c, half %x, half %y) {2250; CI-LABEL: mul_select_negfabs_posk_f16:2251; CI: ; %bb.0:2252; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2253; CI-NEXT: v_cvt_f16_f32_e32 v1, v12254; CI-NEXT: v_cvt_f16_f32_e32 v2, v22255; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02256; CI-NEXT: v_cvt_f32_f16_e64 v1, -|v1|2257; CI-NEXT: v_cvt_f32_f16_e32 v2, v22258; CI-NEXT: v_cndmask_b32_e32 v0, 4.0, v1, vcc2259; CI-NEXT: v_mul_f32_e32 v0, v0, v22260; CI-NEXT: s_setpc_b64 s[30:31]2261;2262; VI-LABEL: mul_select_negfabs_posk_f16:2263; VI: ; %bb.0:2264; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2265; VI-NEXT: v_or_b32_e32 v1, 0x8000, v12266; VI-NEXT: v_mov_b32_e32 v3, 0x44002267; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02268; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc2269; VI-NEXT: v_mul_f16_e32 v0, v0, v22270; VI-NEXT: s_setpc_b64 s[30:31]2271;2272; GFX11-SAFE-TRUE16-LABEL: mul_select_negfabs_posk_f16:2273; GFX11-SAFE-TRUE16: ; %bb.0:2274; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2275; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02276; GFX11-SAFE-TRUE16-NEXT: v_or_b16 v0.l, 0x8000, v1.l2277; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2278; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x4400, v0.l, vcc_lo2279; GFX11-SAFE-TRUE16-NEXT: v_mul_f16_e32 v0.l, v0.l, v2.l2280; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]2281;2282; GFX11-SAFE-FAKE16-LABEL: mul_select_negfabs_posk_f16:2283; GFX11-SAFE-FAKE16: ; %bb.0:2284; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2285; GFX11-SAFE-FAKE16-NEXT: v_or_b32_e32 v1, 0x8000, v12286; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02287; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2288; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x4400, v1, vcc_lo2289; GFX11-SAFE-FAKE16-NEXT: v_mul_f16_e32 v0, v0, v22290; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]2291;2292; GFX11-NSZ-TRUE16-LABEL: mul_select_negfabs_posk_f16:2293; GFX11-NSZ-TRUE16: ; %bb.0:2294; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2295; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02296; GFX11-NSZ-TRUE16-NEXT: v_or_b16 v0.l, 0x8000, v1.l2297; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2298; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x4400, v0.l, vcc_lo2299; GFX11-NSZ-TRUE16-NEXT: v_mul_f16_e32 v0.l, v0.l, v2.l2300; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]2301;2302; GFX11-NSZ-FAKE16-LABEL: mul_select_negfabs_posk_f16:2303; GFX11-NSZ-FAKE16: ; %bb.0:2304; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2305; GFX11-NSZ-FAKE16-NEXT: v_or_b32_e32 v1, 0x8000, v12306; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02307; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2308; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x4400, v1, vcc_lo2309; GFX11-NSZ-FAKE16-NEXT: v_mul_f16_e32 v0, v0, v22310; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]2311 %cmp = icmp eq i32 %c, 02312 %fabs.x = call half @llvm.fabs.f16(half %x)2313 %fneg.fabs.x = fsub half -0.000000e+00, %fabs.x2314 %select = select i1 %cmp, half %fneg.fabs.x, half 4.02315 %add = fmul half %select, %y2316 ret half %add2317}2318 2319define half @mul_select_posk_negfabs_f16(i32 %c, half %x, half %y) {2320; CI-LABEL: mul_select_posk_negfabs_f16:2321; CI: ; %bb.0:2322; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2323; CI-NEXT: v_cvt_f16_f32_e32 v1, v12324; CI-NEXT: v_cvt_f16_f32_e32 v2, v22325; CI-NEXT: v_cmp_ne_u32_e32 vcc, 0, v02326; CI-NEXT: v_cvt_f32_f16_e64 v1, -|v1|2327; CI-NEXT: v_cvt_f32_f16_e32 v2, v22328; CI-NEXT: v_cndmask_b32_e32 v0, 4.0, v1, vcc2329; CI-NEXT: v_mul_f32_e32 v0, v0, v22330; CI-NEXT: s_setpc_b64 s[30:31]2331;2332; VI-LABEL: mul_select_posk_negfabs_f16:2333; VI: ; %bb.0:2334; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2335; VI-NEXT: v_or_b32_e32 v1, 0x8000, v12336; VI-NEXT: v_mov_b32_e32 v3, 0x44002337; VI-NEXT: v_cmp_ne_u32_e32 vcc, 0, v02338; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc2339; VI-NEXT: v_mul_f16_e32 v0, v0, v22340; VI-NEXT: s_setpc_b64 s[30:31]2341;2342; GFX11-SAFE-TRUE16-LABEL: mul_select_posk_negfabs_f16:2343; GFX11-SAFE-TRUE16: ; %bb.0:2344; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2345; GFX11-SAFE-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v02346; GFX11-SAFE-TRUE16-NEXT: v_or_b16 v0.l, 0x8000, v1.l2347; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2348; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x4400, v0.l, vcc_lo2349; GFX11-SAFE-TRUE16-NEXT: v_mul_f16_e32 v0.l, v0.l, v2.l2350; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]2351;2352; GFX11-SAFE-FAKE16-LABEL: mul_select_posk_negfabs_f16:2353; GFX11-SAFE-FAKE16: ; %bb.0:2354; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2355; GFX11-SAFE-FAKE16-NEXT: v_or_b32_e32 v1, 0x8000, v12356; GFX11-SAFE-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v02357; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2358; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x4400, v1, vcc_lo2359; GFX11-SAFE-FAKE16-NEXT: v_mul_f16_e32 v0, v0, v22360; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]2361;2362; GFX11-NSZ-TRUE16-LABEL: mul_select_posk_negfabs_f16:2363; GFX11-NSZ-TRUE16: ; %bb.0:2364; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2365; GFX11-NSZ-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v02366; GFX11-NSZ-TRUE16-NEXT: v_or_b16 v0.l, 0x8000, v1.l2367; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2368; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x4400, v0.l, vcc_lo2369; GFX11-NSZ-TRUE16-NEXT: v_mul_f16_e32 v0.l, v0.l, v2.l2370; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]2371;2372; GFX11-NSZ-FAKE16-LABEL: mul_select_posk_negfabs_f16:2373; GFX11-NSZ-FAKE16: ; %bb.0:2374; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2375; GFX11-NSZ-FAKE16-NEXT: v_or_b32_e32 v1, 0x8000, v12376; GFX11-NSZ-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v02377; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2378; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x4400, v1, vcc_lo2379; GFX11-NSZ-FAKE16-NEXT: v_mul_f16_e32 v0, v0, v22380; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]2381 %cmp = icmp eq i32 %c, 02382 %fabs.x = call half @llvm.fabs.f16(half %x)2383 %fneg.fabs.x = fsub half -0.000000e+00, %fabs.x2384 %select = select i1 %cmp, half 4.0, half %fneg.fabs.x2385 %add = fmul half %select, %y2386 ret half %add2387}2388 2389define half @mul_select_negfabs_negk_f16(i32 %c, half %x, half %y) {2390; CI-LABEL: mul_select_negfabs_negk_f16:2391; CI: ; %bb.0:2392; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2393; CI-NEXT: v_cvt_f16_f32_e32 v1, v12394; CI-NEXT: v_cvt_f16_f32_e32 v2, v22395; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02396; CI-NEXT: v_cvt_f32_f16_e64 v1, -|v1|2397; CI-NEXT: v_cvt_f32_f16_e32 v2, v22398; CI-NEXT: v_cndmask_b32_e32 v0, -4.0, v1, vcc2399; CI-NEXT: v_mul_f32_e32 v0, v0, v22400; CI-NEXT: s_setpc_b64 s[30:31]2401;2402; VI-LABEL: mul_select_negfabs_negk_f16:2403; VI: ; %bb.0:2404; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2405; VI-NEXT: v_or_b32_e32 v1, 0x8000, v12406; VI-NEXT: v_mov_b32_e32 v3, 0xc4002407; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02408; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc2409; VI-NEXT: v_mul_f16_e32 v0, v0, v22410; VI-NEXT: s_setpc_b64 s[30:31]2411;2412; GFX11-SAFE-TRUE16-LABEL: mul_select_negfabs_negk_f16:2413; GFX11-SAFE-TRUE16: ; %bb.0:2414; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2415; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02416; GFX11-SAFE-TRUE16-NEXT: v_or_b16 v0.l, 0x8000, v1.l2417; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2418; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xc400, v0.l, vcc_lo2419; GFX11-SAFE-TRUE16-NEXT: v_mul_f16_e32 v0.l, v0.l, v2.l2420; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]2421;2422; GFX11-SAFE-FAKE16-LABEL: mul_select_negfabs_negk_f16:2423; GFX11-SAFE-FAKE16: ; %bb.0:2424; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2425; GFX11-SAFE-FAKE16-NEXT: v_or_b32_e32 v1, 0x8000, v12426; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02427; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2428; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xc400, v1, vcc_lo2429; GFX11-SAFE-FAKE16-NEXT: v_mul_f16_e32 v0, v0, v22430; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]2431;2432; GFX11-NSZ-TRUE16-LABEL: mul_select_negfabs_negk_f16:2433; GFX11-NSZ-TRUE16: ; %bb.0:2434; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2435; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02436; GFX11-NSZ-TRUE16-NEXT: v_or_b16 v0.l, 0x8000, v1.l2437; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2438; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xc400, v0.l, vcc_lo2439; GFX11-NSZ-TRUE16-NEXT: v_mul_f16_e32 v0.l, v0.l, v2.l2440; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]2441;2442; GFX11-NSZ-FAKE16-LABEL: mul_select_negfabs_negk_f16:2443; GFX11-NSZ-FAKE16: ; %bb.0:2444; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2445; GFX11-NSZ-FAKE16-NEXT: v_or_b32_e32 v1, 0x8000, v12446; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02447; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2448; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xc400, v1, vcc_lo2449; GFX11-NSZ-FAKE16-NEXT: v_mul_f16_e32 v0, v0, v22450; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]2451 %cmp = icmp eq i32 %c, 02452 %fabs.x = call half @llvm.fabs.f16(half %x)2453 %fneg.fabs.x = fsub half -0.000000e+00, %fabs.x2454 %select = select i1 %cmp, half %fneg.fabs.x, half -4.02455 %add = fmul half %select, %y2456 ret half %add2457}2458 2459define half @mul_select_negk_negfabs_f16(i32 %c, half %x, half %y) {2460; CI-LABEL: mul_select_negk_negfabs_f16:2461; CI: ; %bb.0:2462; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2463; CI-NEXT: v_cvt_f16_f32_e32 v1, v12464; CI-NEXT: v_cvt_f16_f32_e32 v2, v22465; CI-NEXT: v_cmp_ne_u32_e32 vcc, 0, v02466; CI-NEXT: v_cvt_f32_f16_e64 v1, -|v1|2467; CI-NEXT: v_cvt_f32_f16_e32 v2, v22468; CI-NEXT: v_cndmask_b32_e32 v0, -4.0, v1, vcc2469; CI-NEXT: v_mul_f32_e32 v0, v0, v22470; CI-NEXT: s_setpc_b64 s[30:31]2471;2472; VI-LABEL: mul_select_negk_negfabs_f16:2473; VI: ; %bb.0:2474; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2475; VI-NEXT: v_or_b32_e32 v1, 0x8000, v12476; VI-NEXT: v_mov_b32_e32 v3, 0xc4002477; VI-NEXT: v_cmp_ne_u32_e32 vcc, 0, v02478; VI-NEXT: v_cndmask_b32_e32 v0, v3, v1, vcc2479; VI-NEXT: v_mul_f16_e32 v0, v0, v22480; VI-NEXT: s_setpc_b64 s[30:31]2481;2482; GFX11-SAFE-TRUE16-LABEL: mul_select_negk_negfabs_f16:2483; GFX11-SAFE-TRUE16: ; %bb.0:2484; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2485; GFX11-SAFE-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v02486; GFX11-SAFE-TRUE16-NEXT: v_or_b16 v0.l, 0x8000, v1.l2487; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2488; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xc400, v0.l, vcc_lo2489; GFX11-SAFE-TRUE16-NEXT: v_mul_f16_e32 v0.l, v0.l, v2.l2490; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]2491;2492; GFX11-SAFE-FAKE16-LABEL: mul_select_negk_negfabs_f16:2493; GFX11-SAFE-FAKE16: ; %bb.0:2494; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2495; GFX11-SAFE-FAKE16-NEXT: v_or_b32_e32 v1, 0x8000, v12496; GFX11-SAFE-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v02497; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2498; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xc400, v1, vcc_lo2499; GFX11-SAFE-FAKE16-NEXT: v_mul_f16_e32 v0, v0, v22500; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]2501;2502; GFX11-NSZ-TRUE16-LABEL: mul_select_negk_negfabs_f16:2503; GFX11-NSZ-TRUE16: ; %bb.0:2504; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2505; GFX11-NSZ-TRUE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v02506; GFX11-NSZ-TRUE16-NEXT: v_or_b16 v0.l, 0x8000, v1.l2507; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)2508; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0xc400, v0.l, vcc_lo2509; GFX11-NSZ-TRUE16-NEXT: v_mul_f16_e32 v0.l, v0.l, v2.l2510; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]2511;2512; GFX11-NSZ-FAKE16-LABEL: mul_select_negk_negfabs_f16:2513; GFX11-NSZ-FAKE16: ; %bb.0:2514; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2515; GFX11-NSZ-FAKE16-NEXT: v_or_b32_e32 v1, 0x8000, v12516; GFX11-NSZ-FAKE16-NEXT: v_cmp_ne_u32_e32 vcc_lo, 0, v02517; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2518; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0xc400, v1, vcc_lo2519; GFX11-NSZ-FAKE16-NEXT: v_mul_f16_e32 v0, v0, v22520; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]2521 %cmp = icmp eq i32 %c, 02522 %fabs.x = call half @llvm.fabs.f16(half %x)2523 %fneg.fabs.x = fsub half -0.000000e+00, %fabs.x2524 %select = select i1 %cmp, half -4.0, half %fneg.fabs.x2525 %add = fmul half %select, %y2526 ret half %add2527}2528 2529; --------------------------------------------------------------------------------2530; Don't fold if fneg can fold into the source2531; --------------------------------------------------------------------------------2532 2533define half @select_fneg_posk_src_add_f16(i32 %c, half %x, half %y) {2534; CI-SAFE-LABEL: select_fneg_posk_src_add_f16:2535; CI-SAFE: ; %bb.0:2536; CI-SAFE-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2537; CI-SAFE-NEXT: v_cvt_f16_f32_e32 v1, v12538; CI-SAFE-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02539; CI-SAFE-NEXT: v_cvt_f32_f16_e32 v1, v12540; CI-SAFE-NEXT: v_add_f32_e32 v1, 4.0, v12541; CI-SAFE-NEXT: v_cndmask_b32_e64 v0, 2.0, -v1, vcc2542; CI-SAFE-NEXT: s_setpc_b64 s[30:31]2543;2544; VI-SAFE-LABEL: select_fneg_posk_src_add_f16:2545; VI-SAFE: ; %bb.0:2546; VI-SAFE-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2547; VI-SAFE-NEXT: v_add_f16_e32 v1, 4.0, v12548; VI-SAFE-NEXT: v_xor_b32_e32 v1, 0x8000, v12549; VI-SAFE-NEXT: v_mov_b32_e32 v2, 0x40002550; VI-SAFE-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02551; VI-SAFE-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc2552; VI-SAFE-NEXT: s_setpc_b64 s[30:31]2553;2554; GFX11-SAFE-TRUE16-LABEL: select_fneg_posk_src_add_f16:2555; GFX11-SAFE-TRUE16: ; %bb.0:2556; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2557; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e32 v1.l, 4.0, v1.l2558; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02559; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2560; GFX11-SAFE-TRUE16-NEXT: v_xor_b16 v0.l, 0x8000, v1.l2561; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x4000, v0.l, vcc_lo2562; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]2563;2564; GFX11-SAFE-FAKE16-LABEL: select_fneg_posk_src_add_f16:2565; GFX11-SAFE-FAKE16: ; %bb.0:2566; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2567; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e32 v1, 4.0, v12568; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02569; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2570; GFX11-SAFE-FAKE16-NEXT: v_xor_b32_e32 v1, 0x8000, v12571; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x4000, v1, vcc_lo2572; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]2573;2574; CI-NSZ-LABEL: select_fneg_posk_src_add_f16:2575; CI-NSZ: ; %bb.0:2576; CI-NSZ-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2577; CI-NSZ-NEXT: v_cvt_f16_f32_e32 v1, v12578; CI-NSZ-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02579; CI-NSZ-NEXT: v_cvt_f32_f16_e32 v1, v12580; CI-NSZ-NEXT: v_sub_f32_e32 v1, -4.0, v12581; CI-NSZ-NEXT: v_cndmask_b32_e32 v0, 2.0, v1, vcc2582; CI-NSZ-NEXT: s_setpc_b64 s[30:31]2583;2584; VI-NSZ-LABEL: select_fneg_posk_src_add_f16:2585; VI-NSZ: ; %bb.0:2586; VI-NSZ-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2587; VI-NSZ-NEXT: v_sub_f16_e32 v1, -4.0, v12588; VI-NSZ-NEXT: v_mov_b32_e32 v2, 0x40002589; VI-NSZ-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02590; VI-NSZ-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc2591; VI-NSZ-NEXT: s_setpc_b64 s[30:31]2592;2593; GFX11-NSZ-TRUE16-LABEL: select_fneg_posk_src_add_f16:2594; GFX11-NSZ-TRUE16: ; %bb.0:2595; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2596; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02597; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, -4.0, v1.l2598; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2599; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x4000, v0.l, vcc_lo2600; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]2601;2602; GFX11-NSZ-FAKE16-LABEL: select_fneg_posk_src_add_f16:2603; GFX11-NSZ-FAKE16: ; %bb.0:2604; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2605; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v1, -4.0, v12606; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02607; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)2608; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x4000, v1, vcc_lo2609; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]2610 %cmp = icmp eq i32 %c, 02611 %add = fadd half %x, 4.02612 %fneg = fneg half %add2613 %select = select i1 %cmp, half %fneg, half 2.02614 ret half %select2615}2616 2617define half @select_fneg_posk_src_sub_f16(i32 %c, half %x) {2618; CI-SAFE-LABEL: select_fneg_posk_src_sub_f16:2619; CI-SAFE: ; %bb.0:2620; CI-SAFE-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2621; CI-SAFE-NEXT: v_cvt_f16_f32_e32 v1, v12622; CI-SAFE-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02623; CI-SAFE-NEXT: v_cvt_f32_f16_e32 v1, v12624; CI-SAFE-NEXT: v_add_f32_e32 v1, -4.0, v12625; CI-SAFE-NEXT: v_cndmask_b32_e64 v0, 2.0, -v1, vcc2626; CI-SAFE-NEXT: s_setpc_b64 s[30:31]2627;2628; VI-SAFE-LABEL: select_fneg_posk_src_sub_f16:2629; VI-SAFE: ; %bb.0:2630; VI-SAFE-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2631; VI-SAFE-NEXT: v_add_f16_e32 v1, -4.0, v12632; VI-SAFE-NEXT: v_xor_b32_e32 v1, 0x8000, v12633; VI-SAFE-NEXT: v_mov_b32_e32 v2, 0x40002634; VI-SAFE-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02635; VI-SAFE-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc2636; VI-SAFE-NEXT: s_setpc_b64 s[30:31]2637;2638; GFX11-SAFE-TRUE16-LABEL: select_fneg_posk_src_sub_f16:2639; GFX11-SAFE-TRUE16: ; %bb.0:2640; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2641; GFX11-SAFE-TRUE16-NEXT: v_add_f16_e32 v1.l, -4.0, v1.l2642; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02643; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2644; GFX11-SAFE-TRUE16-NEXT: v_xor_b16 v0.l, 0x8000, v1.l2645; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x4000, v0.l, vcc_lo2646; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]2647;2648; GFX11-SAFE-FAKE16-LABEL: select_fneg_posk_src_sub_f16:2649; GFX11-SAFE-FAKE16: ; %bb.0:2650; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2651; GFX11-SAFE-FAKE16-NEXT: v_add_f16_e32 v1, -4.0, v12652; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02653; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2654; GFX11-SAFE-FAKE16-NEXT: v_xor_b32_e32 v1, 0x8000, v12655; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x4000, v1, vcc_lo2656; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]2657;2658; CI-NSZ-LABEL: select_fneg_posk_src_sub_f16:2659; CI-NSZ: ; %bb.0:2660; CI-NSZ-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2661; CI-NSZ-NEXT: v_cvt_f16_f32_e32 v1, v12662; CI-NSZ-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02663; CI-NSZ-NEXT: v_cvt_f32_f16_e32 v1, v12664; CI-NSZ-NEXT: v_sub_f32_e32 v1, 4.0, v12665; CI-NSZ-NEXT: v_cndmask_b32_e32 v0, 2.0, v1, vcc2666; CI-NSZ-NEXT: s_setpc_b64 s[30:31]2667;2668; VI-NSZ-LABEL: select_fneg_posk_src_sub_f16:2669; VI-NSZ: ; %bb.0:2670; VI-NSZ-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2671; VI-NSZ-NEXT: v_sub_f16_e32 v1, 4.0, v12672; VI-NSZ-NEXT: v_mov_b32_e32 v2, 0x40002673; VI-NSZ-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02674; VI-NSZ-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc2675; VI-NSZ-NEXT: s_setpc_b64 s[30:31]2676;2677; GFX11-NSZ-TRUE16-LABEL: select_fneg_posk_src_sub_f16:2678; GFX11-NSZ-TRUE16: ; %bb.0:2679; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2680; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02681; GFX11-NSZ-TRUE16-NEXT: v_sub_f16_e32 v0.l, 4.0, v1.l2682; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2683; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x4000, v0.l, vcc_lo2684; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]2685;2686; GFX11-NSZ-FAKE16-LABEL: select_fneg_posk_src_sub_f16:2687; GFX11-NSZ-FAKE16: ; %bb.0:2688; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2689; GFX11-NSZ-FAKE16-NEXT: v_sub_f16_e32 v1, 4.0, v12690; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02691; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)2692; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x4000, v1, vcc_lo2693; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]2694 %cmp = icmp eq i32 %c, 02695 %add = fsub half %x, 4.02696 %fneg = fneg half %add2697 %select = select i1 %cmp, half %fneg, half 2.02698 ret half %select2699}2700 2701define half @select_fneg_posk_src_mul_f16(i32 %c, half %x) {2702; CI-LABEL: select_fneg_posk_src_mul_f16:2703; CI: ; %bb.0:2704; CI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2705; CI-NEXT: v_cvt_f16_f32_e32 v1, v12706; CI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02707; CI-NEXT: v_cvt_f32_f16_e32 v1, v12708; CI-NEXT: v_mul_f32_e32 v1, -4.0, v12709; CI-NEXT: v_cndmask_b32_e32 v0, 2.0, v1, vcc2710; CI-NEXT: s_setpc_b64 s[30:31]2711;2712; VI-LABEL: select_fneg_posk_src_mul_f16:2713; VI: ; %bb.0:2714; VI-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2715; VI-NEXT: v_mul_f16_e32 v1, -4.0, v12716; VI-NEXT: v_mov_b32_e32 v2, 0x40002717; VI-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02718; VI-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc2719; VI-NEXT: s_setpc_b64 s[30:31]2720;2721; GFX11-SAFE-TRUE16-LABEL: select_fneg_posk_src_mul_f16:2722; GFX11-SAFE-TRUE16: ; %bb.0:2723; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2724; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02725; GFX11-SAFE-TRUE16-NEXT: v_mul_f16_e32 v0.l, -4.0, v1.l2726; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2727; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x4000, v0.l, vcc_lo2728; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]2729;2730; GFX11-SAFE-FAKE16-LABEL: select_fneg_posk_src_mul_f16:2731; GFX11-SAFE-FAKE16: ; %bb.0:2732; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2733; GFX11-SAFE-FAKE16-NEXT: v_mul_f16_e32 v1, -4.0, v12734; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02735; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)2736; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x4000, v1, vcc_lo2737; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]2738;2739; GFX11-NSZ-TRUE16-LABEL: select_fneg_posk_src_mul_f16:2740; GFX11-NSZ-TRUE16: ; %bb.0:2741; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2742; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02743; GFX11-NSZ-TRUE16-NEXT: v_mul_f16_e32 v0.l, -4.0, v1.l2744; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2745; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x4000, v0.l, vcc_lo2746; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]2747;2748; GFX11-NSZ-FAKE16-LABEL: select_fneg_posk_src_mul_f16:2749; GFX11-NSZ-FAKE16: ; %bb.0:2750; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2751; GFX11-NSZ-FAKE16-NEXT: v_mul_f16_e32 v1, -4.0, v12752; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02753; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)2754; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x4000, v1, vcc_lo2755; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]2756 %cmp = icmp eq i32 %c, 02757 %mul = fmul half %x, 4.02758 %fneg = fneg half %mul2759 %select = select i1 %cmp, half %fneg, half 2.02760 ret half %select2761}2762 2763define half @select_fneg_posk_src_fma_f16(i32 %c, half %x, half %z) {2764; CI-SAFE-LABEL: select_fneg_posk_src_fma_f16:2765; CI-SAFE: ; %bb.0:2766; CI-SAFE-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2767; CI-SAFE-NEXT: v_cvt_f16_f32_e32 v2, v22768; CI-SAFE-NEXT: v_cvt_f16_f32_e32 v1, v12769; CI-SAFE-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02770; CI-SAFE-NEXT: v_cvt_f32_f16_e32 v2, v22771; CI-SAFE-NEXT: v_cvt_f32_f16_e32 v1, v12772; CI-SAFE-NEXT: v_fma_f32 v1, v1, 4.0, v22773; CI-SAFE-NEXT: v_cndmask_b32_e64 v0, 2.0, -v1, vcc2774; CI-SAFE-NEXT: s_setpc_b64 s[30:31]2775;2776; VI-SAFE-LABEL: select_fneg_posk_src_fma_f16:2777; VI-SAFE: ; %bb.0:2778; VI-SAFE-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2779; VI-SAFE-NEXT: v_fma_f16 v1, v1, 4.0, v22780; VI-SAFE-NEXT: v_xor_b32_e32 v1, 0x8000, v12781; VI-SAFE-NEXT: v_mov_b32_e32 v2, 0x40002782; VI-SAFE-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02783; VI-SAFE-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc2784; VI-SAFE-NEXT: s_setpc_b64 s[30:31]2785;2786; GFX11-SAFE-TRUE16-LABEL: select_fneg_posk_src_fma_f16:2787; GFX11-SAFE-TRUE16: ; %bb.0:2788; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2789; GFX11-SAFE-TRUE16-NEXT: v_fmac_f16_e32 v2.l, 4.0, v1.l2790; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02791; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2792; GFX11-SAFE-TRUE16-NEXT: v_xor_b16 v0.l, 0x8000, v2.l2793; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x4000, v0.l, vcc_lo2794; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]2795;2796; GFX11-SAFE-FAKE16-LABEL: select_fneg_posk_src_fma_f16:2797; GFX11-SAFE-FAKE16: ; %bb.0:2798; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2799; GFX11-SAFE-FAKE16-NEXT: v_fmac_f16_e32 v2, 4.0, v12800; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02801; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2802; GFX11-SAFE-FAKE16-NEXT: v_xor_b32_e32 v1, 0x8000, v22803; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x4000, v1, vcc_lo2804; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]2805;2806; CI-NSZ-LABEL: select_fneg_posk_src_fma_f16:2807; CI-NSZ: ; %bb.0:2808; CI-NSZ-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2809; CI-NSZ-NEXT: v_cvt_f16_f32_e32 v2, v22810; CI-NSZ-NEXT: v_cvt_f16_f32_e32 v1, v12811; CI-NSZ-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02812; CI-NSZ-NEXT: v_cvt_f32_f16_e32 v2, v22813; CI-NSZ-NEXT: v_cvt_f32_f16_e32 v1, v12814; CI-NSZ-NEXT: v_fma_f32 v1, v1, -4.0, -v22815; CI-NSZ-NEXT: v_cndmask_b32_e32 v0, 2.0, v1, vcc2816; CI-NSZ-NEXT: s_setpc_b64 s[30:31]2817;2818; VI-NSZ-LABEL: select_fneg_posk_src_fma_f16:2819; VI-NSZ: ; %bb.0:2820; VI-NSZ-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2821; VI-NSZ-NEXT: v_fma_f16 v1, v1, -4.0, -v22822; VI-NSZ-NEXT: v_mov_b32_e32 v2, 0x40002823; VI-NSZ-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02824; VI-NSZ-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc2825; VI-NSZ-NEXT: s_setpc_b64 s[30:31]2826;2827; GFX11-NSZ-TRUE16-LABEL: select_fneg_posk_src_fma_f16:2828; GFX11-NSZ-TRUE16: ; %bb.0:2829; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2830; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02831; GFX11-NSZ-TRUE16-NEXT: v_fma_f16 v0.l, v1.l, -4.0, -v2.l2832; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2833; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x4000, v0.l, vcc_lo2834; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]2835;2836; GFX11-NSZ-FAKE16-LABEL: select_fneg_posk_src_fma_f16:2837; GFX11-NSZ-FAKE16: ; %bb.0:2838; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2839; GFX11-NSZ-FAKE16-NEXT: v_fma_f16 v1, v1, -4.0, -v22840; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02841; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)2842; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x4000, v1, vcc_lo2843; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]2844 %cmp = icmp eq i32 %c, 02845 %fma = call half @llvm.fma.f16(half %x, half 4.0, half %z)2846 %fneg = fneg half %fma2847 %select = select i1 %cmp, half %fneg, half 2.02848 ret half %select2849}2850 2851define half @select_fneg_posk_src_fmad_f16(i32 %c, half %x, half %z) {2852; CI-SAFE-LABEL: select_fneg_posk_src_fmad_f16:2853; CI-SAFE: ; %bb.0:2854; CI-SAFE-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2855; CI-SAFE-NEXT: v_cvt_f16_f32_e32 v1, v12856; CI-SAFE-NEXT: v_cvt_f16_f32_e32 v2, v22857; CI-SAFE-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02858; CI-SAFE-NEXT: v_cvt_f32_f16_e32 v1, v12859; CI-SAFE-NEXT: v_cvt_f32_f16_e32 v2, v22860; CI-SAFE-NEXT: v_mul_f32_e32 v1, 4.0, v12861; CI-SAFE-NEXT: v_add_f32_e32 v1, v1, v22862; CI-SAFE-NEXT: v_cndmask_b32_e64 v0, 2.0, -v1, vcc2863; CI-SAFE-NEXT: s_setpc_b64 s[30:31]2864;2865; VI-SAFE-LABEL: select_fneg_posk_src_fmad_f16:2866; VI-SAFE: ; %bb.0:2867; VI-SAFE-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2868; VI-SAFE-NEXT: v_fma_f16 v1, v1, 4.0, v22869; VI-SAFE-NEXT: v_xor_b32_e32 v1, 0x8000, v12870; VI-SAFE-NEXT: v_mov_b32_e32 v2, 0x40002871; VI-SAFE-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02872; VI-SAFE-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc2873; VI-SAFE-NEXT: s_setpc_b64 s[30:31]2874;2875; GFX11-SAFE-TRUE16-LABEL: select_fneg_posk_src_fmad_f16:2876; GFX11-SAFE-TRUE16: ; %bb.0:2877; GFX11-SAFE-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2878; GFX11-SAFE-TRUE16-NEXT: v_fmac_f16_e32 v2.l, 4.0, v1.l2879; GFX11-SAFE-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02880; GFX11-SAFE-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2881; GFX11-SAFE-TRUE16-NEXT: v_xor_b16 v0.l, 0x8000, v2.l2882; GFX11-SAFE-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x4000, v0.l, vcc_lo2883; GFX11-SAFE-TRUE16-NEXT: s_setpc_b64 s[30:31]2884;2885; GFX11-SAFE-FAKE16-LABEL: select_fneg_posk_src_fmad_f16:2886; GFX11-SAFE-FAKE16: ; %bb.0:2887; GFX11-SAFE-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2888; GFX11-SAFE-FAKE16-NEXT: v_fmac_f16_e32 v2, 4.0, v12889; GFX11-SAFE-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02890; GFX11-SAFE-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)2891; GFX11-SAFE-FAKE16-NEXT: v_xor_b32_e32 v1, 0x8000, v22892; GFX11-SAFE-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x4000, v1, vcc_lo2893; GFX11-SAFE-FAKE16-NEXT: s_setpc_b64 s[30:31]2894;2895; CI-NSZ-LABEL: select_fneg_posk_src_fmad_f16:2896; CI-NSZ: ; %bb.0:2897; CI-NSZ-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2898; CI-NSZ-NEXT: v_cvt_f16_f32_e32 v1, v12899; CI-NSZ-NEXT: v_cvt_f16_f32_e32 v2, v22900; CI-NSZ-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02901; CI-NSZ-NEXT: v_cvt_f32_f16_e32 v1, v12902; CI-NSZ-NEXT: v_cvt_f32_f16_e32 v2, v22903; CI-NSZ-NEXT: v_mul_f32_e32 v1, -4.0, v12904; CI-NSZ-NEXT: v_sub_f32_e32 v1, v1, v22905; CI-NSZ-NEXT: v_cndmask_b32_e32 v0, 2.0, v1, vcc2906; CI-NSZ-NEXT: s_setpc_b64 s[30:31]2907;2908; VI-NSZ-LABEL: select_fneg_posk_src_fmad_f16:2909; VI-NSZ: ; %bb.0:2910; VI-NSZ-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2911; VI-NSZ-NEXT: v_fma_f16 v1, v1, -4.0, -v22912; VI-NSZ-NEXT: v_mov_b32_e32 v2, 0x40002913; VI-NSZ-NEXT: v_cmp_eq_u32_e32 vcc, 0, v02914; VI-NSZ-NEXT: v_cndmask_b32_e32 v0, v2, v1, vcc2915; VI-NSZ-NEXT: s_setpc_b64 s[30:31]2916;2917; GFX11-NSZ-TRUE16-LABEL: select_fneg_posk_src_fmad_f16:2918; GFX11-NSZ-TRUE16: ; %bb.0:2919; GFX11-NSZ-TRUE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2920; GFX11-NSZ-TRUE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02921; GFX11-NSZ-TRUE16-NEXT: v_fma_f16 v0.l, v1.l, -4.0, -v2.l2922; GFX11-NSZ-TRUE16-NEXT: s_delay_alu instid0(VALU_DEP_1)2923; GFX11-NSZ-TRUE16-NEXT: v_cndmask_b16 v0.l, 0x4000, v0.l, vcc_lo2924; GFX11-NSZ-TRUE16-NEXT: s_setpc_b64 s[30:31]2925;2926; GFX11-NSZ-FAKE16-LABEL: select_fneg_posk_src_fmad_f16:2927; GFX11-NSZ-FAKE16: ; %bb.0:2928; GFX11-NSZ-FAKE16-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2929; GFX11-NSZ-FAKE16-NEXT: v_fma_f16 v1, v1, -4.0, -v22930; GFX11-NSZ-FAKE16-NEXT: v_cmp_eq_u32_e32 vcc_lo, 0, v02931; GFX11-NSZ-FAKE16-NEXT: s_delay_alu instid0(VALU_DEP_2)2932; GFX11-NSZ-FAKE16-NEXT: v_cndmask_b32_e32 v0, 0x4000, v1, vcc_lo2933; GFX11-NSZ-FAKE16-NEXT: s_setpc_b64 s[30:31]2934 %cmp = icmp eq i32 %c, 02935 %fmad = call half @llvm.fmuladd.f16(half %x, half 4.0, half %z)2936 %fneg = fneg half %fmad2937 %select = select i1 %cmp, half %fneg, half 2.02938 ret half %select2939}2940 2941declare half @llvm.fabs.f16(half) #02942declare half @llvm.fma.f16(half, half, half) #02943declare half @llvm.fmuladd.f16(half, half, half) #02944 2945attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }2946;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:2947; GFX11: {{.*}}2948; GFX11-NSZ: {{.*}}2949; GFX11-SAFE: {{.*}}2950