https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94516

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |law at gcc dot gnu.org

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
So, I see there actually two separate undesirable changes.  One is that during
reload_cse_regs_1 because of the cselib.c changes it optimized 3 times:
-(insn 22 21 24 2 (parallel [
-            (set (reg/f:DI 7 sp)
-                (plus:DI (reg/f:DI 7 sp)
-                    (const_int 32 [0x20])))
-            (clobber (reg:CC 17 flags))
-        ]) "pr94516.c":6747:2 186 {*adddi_1}
-     (expr_list:REG_ARGS_SIZE (const_int 0 [0])
-        (nil)))
+(insn 22 21 24 2 (parallel [
+            (set (reg/f:DI 7 sp)
+                (reg/f:DI 40 r12 [84]))
+        ]) "pr94516.c":6747:2 66 {*movdi_internal}
+     (expr_list:REG_ARGS_SIZE (const_int 0 [0])
+        (nil)))
That in itself isn't a wrong-code change, the question is if it is actually
beneficial (maybe for -Os it could).
The second change happens in the reload_cse_move2add
              /* Try to transform (set (REGX) (REGY))
                                  (set (REGX) (PLUS (REGX) (CONST_INT A)))
                                  ...
                                  (set (REGX) (REGY))
                                  (set (REGX) (PLUS (REGX) (CONST_INT B)))
                 to
                                  (set (REGX) (REGY))
                                  (set (REGX) (PLUS (REGX) (CONST_INT A)))
                                  ...
                                  (set (REGX) (plus (REGX) (CONST_INT B-A))) 
*/
transformation, where REGX is sp and REGY is this r12 register that happens to
contain a copy of rsp with REG_ARGS_SIZE of 0 and this one is the wrong-code
one, because it ignores the fact that REGX is used in various other
instructions in between.

Reply via email to