[Bug rtl-optimization/49472] [4.7 regression] Compiler segfault on valid code

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Jun 21 07:52:00 GMT 2011


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49472

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

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

--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-06-21 07:51:34 UTC ---
--- gcc/simplify-rtx.c.jj    2011-06-08 08:53:15.000000000 +0200
+++ gcc/simplify-rtx.c    2011-06-21 09:46:27.000000000 +0200
@@ -686,13 +686,13 @@ simplify_unary_operation_1 (enum rtx_cod
       return simplify_gen_binary (MINUS, mode, temp, XEXP (op, 1));
     }

-      /* (neg (mult A B)) becomes (mult (neg A) B).
+      /* (neg (mult A B)) becomes (mult A (neg B)).
      This works even for floating-point values.  */
       if (GET_CODE (op) == MULT
       && !HONOR_SIGN_DEPENDENT_ROUNDING (mode))
     {
-      temp = simplify_gen_unary (NEG, mode, XEXP (op, 0), mode);
-      return simplify_gen_binary (MULT, mode, temp, XEXP (op, 1));
+      temp = simplify_gen_unary (NEG, mode, XEXP (op, 1), mode);
+      return simplify_gen_binary (MULT, mode, XEXP (op, 0), temp);
     }

       /* NEG commutes with ASHIFT since it is multiplication.  Only do

stops the moving of the operands around, with this it keeps being called with
the same operands again and again, but still an endless recursion.  Eric, any
preferences where to prevent this from happening?



More information about the Gcc-bugs mailing list