]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-ssa-math-opts.c (convert_plusminus_to_widen): Restrict handling of signedness...
authorRichard Sandiford <rdsandiford@googlemail.com>
Tue, 20 Dec 2011 21:33:48 +0000 (21:33 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Tue, 20 Dec 2011 21:33:48 +0000 (21:33 +0000)
gcc/
* tree-ssa-math-opts.c (convert_plusminus_to_widen): Restrict
handling of signedness differences to integer types.  Only build
a new optype if type1 isn't correct.

From-SVN: r182554

gcc/ChangeLog
gcc/tree-ssa-math-opts.c

index 9bbfbcbaf3058766c49858e309d7d1be280ebfe3..4b4d10fc5389875a18e45d902953e745500d4d66 100644 (file)
@@ -1,3 +1,9 @@
+2011-12-20  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * tree-ssa-math-opts.c (convert_plusminus_to_widen): Restrict
+       handling of signedness differences to integer types.  Only build
+       a new optype if type1 isn't correct.
+
 2011-12-20  Vladimir Makarov  <vmakarov@redhat.com>
 
        PR target/49865
index 06a4505079fb1b9ac363f7169b5cc491e1f61981..a00541fbdf5471245076a3b88b08d6932e8f5d77 100644 (file)
@@ -2304,10 +2304,13 @@ convert_plusminus_to_widen (gimple_stmt_iterator *gsi, gimple stmt,
   from_mode = TYPE_MODE (type1);
   from_unsigned1 = TYPE_UNSIGNED (type1);
   from_unsigned2 = TYPE_UNSIGNED (type2);
+  optype = type1;
 
   /* There's no such thing as a mixed sign madd yet, so use a wider mode.  */
   if (from_unsigned1 != from_unsigned2)
     {
+      if (!INTEGRAL_TYPE_P (type))
+       return false;
       /* We can use a signed multiply with unsigned types as long as
         there is a wider mode to use, or it is the smaller of the two
         types that is unsigned.  Note that type1 >= type2, always.  */
@@ -2322,6 +2325,8 @@ convert_plusminus_to_widen (gimple_stmt_iterator *gsi, gimple stmt,
        }
 
       from_unsigned1 = from_unsigned2 = false;
+      optype = build_nonstandard_integer_type (GET_MODE_PRECISION (from_mode),
+                                              false);
     }
 
   /* If there was a conversion between the multiply and addition
@@ -2355,7 +2360,6 @@ convert_plusminus_to_widen (gimple_stmt_iterator *gsi, gimple stmt,
   /* Verify that the machine can perform a widening multiply
      accumulate in this mode/signedness combination, otherwise
      this transformation is likely to pessimize code.  */
-  optype = build_nonstandard_integer_type (from_mode, from_unsigned1);
   this_optab = optab_for_tree_code (wmult_code, optype, optab_default);
   handler = find_widening_optab_handler_and_mode (this_optab, to_mode,
                                                  from_mode, 0, &actual_mode);