On Sat, Dec 13, 2025 at 8:18 AM Alexandre Oliva <[email protected]> wrote: > > On Dec 10, 2025, Uros Bizjak <[email protected]> wrote: > > > OK. There are probably more pairs involving insns w/ and w/o clobber, > > but I guess the ones you add are the most relevant. > > Presumably you meant patterns other than the lea ones, because the > following ones, removing clobbers from the first insn of the pair, > didn't yield any hits on x86_64- or i686-linux-gnu bootstraps. The > bootstraps were successful nevertheless (with and without > "gcc_unreachable ();" preparation statements), and I regression-tested > them (along with other patches, without the preparation statements) as > well, so if you think there'd be any use for them, I'd be happy to > contribute a commit message and ChangeLog entry along with them.
Yes, these are the patterns I have had in mind. But thanks to your experiment, I don't think it is worth implementing these. Also, IIRC, there is another peephole2 pattern that converts simple LEAs back to ADDs (by adding clobber if flags reg is dead), so it looks like they are all converted beforehand and picked by your previous peephole2 patterns. So, let's keep things as they are. Thanks, Uros. > diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md > index 7eafdf9ec1b6d..139cddaa41162 100644 > --- a/gcc/config/i386/i386.md > +++ b/gcc/config/i386/i386.md > @@ -6494,6 +6494,58 @@ (define_peephole2 > [(set (match_dup 3) (plus:SWI48 (plus:SWI48 (match_dup 0) > (match_dup 1)) > (match_dup 2)))]) > + > +(define_peephole2 > + [(set (match_operand:SWI48 0 "register_operand") > + (plus:SWI48 (match_dup 0) > + (match_operand 1 "register_operand"))) > + (parallel [(set (match_dup 0) > + (plus:SWI48 (match_dup 0) > + (match_operand 2 "x86_64_immediate_operand"))) > + (clobber (reg:CC FLAGS_REG))])] > + "!TARGET_AVOID_LEA_FOR_ADDR || optimize_function_for_size_p (cfun)" > + [(set (match_dup 0) (plus:SWI48 (plus:SWI48 (match_dup 0) > + (match_dup 1)) > + (match_dup 2)))]) > + > +(define_peephole2 > + [(set (match_operand:SWI48 0 "register_operand") > + (plus:SWI48 (match_dup 0) > + (match_operand 1 "register_operand"))) > + (set (match_dup 0) > + (plus:SWI48 (match_dup 0) > + (match_operand 2 "x86_64_immediate_operand")))] > + "!TARGET_AVOID_LEA_FOR_ADDR || optimize_function_for_size_p (cfun)" > + [(set (match_dup 0) (plus:SWI48 (plus:SWI48 (match_dup 0) > + (match_dup 1)) > + (match_dup 2)))]) > + > +(define_peephole2 > + [(set (match_operand:SWI48 0 "register_operand") > + (plus:SWI48 (match_dup 0) > + (match_operand 1 "register_operand"))) > + (parallel [(set (match_operand:SWI48 3 "register_operand") > + (plus:SWI48 (match_dup 0) > + (match_operand 2 "x86_64_immediate_operand"))) > + (clobber (reg:CC FLAGS_REG))])] > + "(!TARGET_AVOID_LEA_FOR_ADDR || optimize_function_for_size_p (cfun)) > + && peep2_reg_dead_p (2, operands[0])" > + [(set (match_dup 3) (plus:SWI48 (plus:SWI48 (match_dup 0) > + (match_dup 1)) > + (match_dup 2)))]) > + > +(define_peephole2 > + [(set (match_operand:SWI48 0 "register_operand") > + (plus:SWI48 (match_dup 0) > + (match_operand 1 "register_operand"))) > + (set (match_operand:SWI48 3 "register_operand") > + (plus:SWI48 (match_dup 0) > + (match_operand 2 "x86_64_immediate_operand")))] > + "(!TARGET_AVOID_LEA_FOR_ADDR || optimize_function_for_size_p (cfun)) > + && peep2_reg_dead_p (2, operands[0])" > + [(set (match_dup 3) (plus:SWI48 (plus:SWI48 (match_dup 0) > + (match_dup 1)) > + (match_dup 2)))]) > > ;; Add instructions > > > > -- > Alexandre Oliva, happy hacker https://blog.lx.oliva.nom.br/ > Free Software Activist FSFLA co-founder GNU Toolchain Engineer > More tolerance and less prejudice are key for inclusion and diversity. > Excluding neuro-others for not behaving ""normal"" is *not* inclusive!
