Patchwork [commit] Fix PR50318 - ICE optimizing widening multiply-and-accumulate

login
register
mail settings
Submitter Andrew Stubbs
Date Sept. 8, 2011, 7:51 p.m.
Message ID <4E691CC1.1000307@codesourcery.com>
Download mbox | patch
Permalink /patch/113933/
State New
Headers show

Comments

Andrew Stubbs - Sept. 8, 2011, 7:51 p.m.
This patch fixes PR50318 in which the compiler fails with a bad gimple 
expression.

The problem was caused by a cut-and-paste error. I don't understand why 
it wasn't caught in testing, but it's fixed now.

Committed as obvious.

Andrew

Patch

2011-09-08  Andrew Stubbs  <ams@codesourcery.com>

	PR tree-optimization/50318

	gcc/
	* tree-ssa-math-opts.c (convert_plusminus_to_widen): Correct
	typo in use of mult_rhs1 and mult_rhs2.

	gcc/testsuite/
	* gcc.target/arm/pr50318-1.c: New file.

--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr50318-1.c
@@ -0,0 +1,11 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-require-effective-target arm_dsp } */
+
+long long test (unsigned int sec, unsigned long long nsecs)
+{
+   return (long long)(long)sec * 1000000000L + (long long)(unsigned
+   long)nsecs;
+}
+
+/* { dg-final { scan-assembler "umlal" } } */
--- a/gcc/tree-ssa-math-opts.c
+++ b/gcc/tree-ssa-math-opts.c
@@ -2386,9 +2386,9 @@  convert_plusminus_to_widen (gimple_stmt_iterator *gsi, gimple stmt,
 
   /* Handle constants.  */
   if (TREE_CODE (mult_rhs1) == INTEGER_CST)
-    rhs1 = fold_convert (type1, mult_rhs1);
+    mult_rhs1 = fold_convert (type1, mult_rhs1);
   if (TREE_CODE (mult_rhs2) == INTEGER_CST)
-    rhs2 = fold_convert (type2, mult_rhs2);
+    mult_rhs2 = fold_convert (type2, mult_rhs2);
 
   gimple_assign_set_rhs_with_ops_1 (gsi, wmult_code, mult_rhs1, mult_rhs2,
 				    add_rhs);