[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