https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98348
--- Comment #13 from Hongtao.liu <crazylht at gmail dot com> --- Created attachment 49832 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49832&action=edit gcc11-pr98348_v3.patch 1. Use REAL_VALUE_TO_TARGET_SINGLE/DOUBLE in the "float_vector_all_ones_operands" predicate, it should be cheaper than lower_subreg? 2. Combine failed to match (vec_merge (vector_all_ones_operand) (const0_operand) (knot mask)) even the corresponding pattern exists, peephole2 could be ok for this but abviously not the best solution. IMHO the changes about knot should be functionality ok, and to avoid some potential performance issue, I extraly add some new define_insn_and_splits to negate the comparison code when there's not in the result(Dig the hole deeper and deeper:(). The patch survive regtest and bootstrap on both trunk and rlease/gcc-10 branch.