https://gcc.gnu.org/g:3da1abf9e6346f0a665a122783dd9c46bb91a1c7
commit 3da1abf9e6346f0a665a122783dd9c46bb91a1c7 Author: Alexandre Oliva <[email protected]> Date: Wed Dec 10 21:18:41 2025 -0300 x86: more lea peephole improvements Diff: --- gcc/config/i386/i386.md | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index b5d838934251..94970592fb0f 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -6494,6 +6494,58 @@ [(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
