aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Stubbs <ams@codesourcery.com>2011-08-19 15:01:41 +0000
committerAndrew Stubbs <ams@gcc.gnu.org>2011-08-19 15:01:41 +0000
commit75161d2ca5a9a3c94e5c2ce6365046693a964368 (patch)
tree9b1018774c7a62489a737ecc1f5a3e86d81f5bef
parent6a228c2c0e38da47c08d70a90f41301b1278357a (diff)
downloadgcc-75161d2ca5a9a3c94e5c2ce6365046693a964368.zip
gcc-75161d2ca5a9a3c94e5c2ce6365046693a964368.tar.gz
gcc-75161d2ca5a9a3c94e5c2ce6365046693a964368.tar.bz2
tree-ssa-math-opts.c (convert_plusminus_to_widen): Convert add_rhs to the correct type.
2011-08-19 Andrew Stubbs <ams@codesourcery.com> gcc/ * tree-ssa-math-opts.c (convert_plusminus_to_widen): Convert add_rhs to the correct type. gcc/testsuite/ * gcc.target/arm/wmul-10.c: New file. From-SVN: r177909
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/arm/wmul-10.c12
-rw-r--r--gcc/tree-ssa-math-opts.c4
4 files changed, 25 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 648c3b1..ed79f12 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2011-08-19 Andrew Stubbs <ams@codesourcery.com>
+ * tree-ssa-math-opts.c (convert_plusminus_to_widen): Convert add_rhs
+ to the correct type.
+
+2011-08-19 Andrew Stubbs <ams@codesourcery.com>
+
* tree-ssa-math-opts.c (convert_mult_to_widen): Better handle
unsigned inputs of different modes.
(convert_plusminus_to_widen): Likewise.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2f65d2e..a711cc3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2011-08-19 Andrew Stubbs <ams@codesourcery.com>
+ * gcc.target/arm/wmul-10.c: New file.
+
+2011-08-19 Andrew Stubbs <ams@codesourcery.com>
+
* gcc.target/arm/wmul-9.c: New file.
* gcc.target/arm/wmul-bitfield-2.c: New file.
diff --git a/gcc/testsuite/gcc.target/arm/wmul-10.c b/gcc/testsuite/gcc.target/arm/wmul-10.c
new file mode 100644
index 0000000..5ffd169
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/wmul-10.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-require-effective-target arm_dsp } */
+
+
+unsigned long long
+foo (unsigned short a, unsigned short *b, unsigned short *c)
+{
+ return (unsigned)a + (unsigned long long)*b * (unsigned long long)*c;
+}
+
+/* { dg-final { scan-assembler "umlal" } } */
diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c
index 5ba31b5..73206ad 100644
--- a/gcc/tree-ssa-math-opts.c
+++ b/gcc/tree-ssa-math-opts.c
@@ -2369,6 +2369,10 @@ convert_plusminus_to_widen (gimple_stmt_iterator *gsi, gimple stmt,
mult_rhs2 = build_and_insert_cast (gsi, loc, tmp, mult_rhs2);
}
+ if (!useless_type_conversion_p (type, TREE_TYPE (add_rhs)))
+ add_rhs = build_and_insert_cast (gsi, loc, create_tmp_var (type, NULL),
+ add_rhs);
+
gimple_assign_set_rhs_with_ops_1 (gsi, wmult_code, mult_rhs1, mult_rhs2,
add_rhs);
update_stmt (gsi_stmt (*gsi));