https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114829
Bug ID: 114829 Summary: No fcsel produced for f16 Product: gcc Version: 14.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: enhancement Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Target Milestone: --- Take: ``` void foo (int a, _Float16 b1, _Float16 b2, _Float16 *b) { *b = a ? b1 : b2; } ``` This should produce: ``` foo: cmp w0, #0 fcsel h0, h1, h0, eq str h0, [x1] ret ``` Or : ``` foo: cmp w0, #0 fcsel s0, s1, s0, eq str h0, [x1] ret ``` Depending on if we have fp16 enabled or not. Right now GCC produces branches instead. Noticed while working on PR 98477 since *cmov<mode>_insn pattern uses GPF iterator and not GPF_F16.