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

Reply via email to