aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPrathamesh Kulkarni <prathamesh.kulkarni@linaro.org>2017-02-19 09:06:30 +0000
committerPrathamesh Kulkarni <prathamesh3492@gcc.gnu.org>2017-02-19 09:06:30 +0000
commiteab1f16915926a935c4dcfce3f1026c5e80100ff (patch)
tree926b977b27bc8148dc5410521269f1781a49ddf0 /gcc
parent593bf80a532ab99841fe758991f98e0d8b99ae67 (diff)
downloadgcc-eab1f16915926a935c4dcfce3f1026c5e80100ff.zip
gcc-eab1f16915926a935c4dcfce3f1026c5e80100ff.tar.gz
gcc-eab1f16915926a935c4dcfce3f1026c5e80100ff.tar.bz2
gimple-pretty-print.c (dump_ternary_rhs): Adjust gimple dump format for FMA_EXPR.
2017-02-19 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> * gimple-pretty-print.c (dump_ternary_rhs): Adjust gimple dump format for FMA_EXPR. c/ * gimple-parser.c (c_parser_gimple_postfix_expression): Handle FMA_EXPR. testsuite/ * gcc.dg/gimplefe-26.c: New test. From-SVN: r245570
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/c/ChangeLog5
-rw-r--r--gcc/c/gimple-parser.c22
-rw-r--r--gcc/gimple-pretty-print.c23
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/gimplefe-26.c16
6 files changed, 70 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 86a4938..4b7bc56 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2017-02-19 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+
+ * gimple-pretty-print.c (dump_ternary_rhs): Adjust gimple dump format
+ for FMA_EXPR.
+
2017-02-18 Jakub Jelinek <jakub@redhat.com>
* final.c (last_columnnum, override_columnnum): New variables.
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index 2a198ef..0626973 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,8 @@
+2017-02-19 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+
+ * gimple-parser.c (c_parser_gimple_postfix_expression): Handle
+ FMA_EXPR.
+
2017-02-16 Jakub Jelinek <jakub@redhat.com>
PR c++/79512
diff --git a/gcc/c/gimple-parser.c b/gcc/c/gimple-parser.c
index d959877..31d0a08 100644
--- a/gcc/c/gimple-parser.c
+++ b/gcc/c/gimple-parser.c
@@ -856,6 +856,28 @@ c_parser_gimple_postfix_expression (c_parser *parser)
expr.value = fold_convert (type, val);
return expr;
}
+ else if (strcmp (IDENTIFIER_POINTER (id), "__FMA") == 0)
+ {
+ c_parser_consume_token (parser);
+ auto_vec<tree> args;
+
+ if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
+ {
+ c_parser_gimple_expr_list (parser, &args);
+ c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
+ "expected %<)%>");
+ }
+ if (args.length () != 3)
+ {
+ error_at (loc, "invalid number of operands to __FMA");
+ expr.value = error_mark_node;
+ return expr;
+ }
+ expr.value = build3_loc (loc, FMA_EXPR, TREE_TYPE (args[0]),
+ args[0], args[1], args[2]);
+ return expr;
+ }
+
/* SSA name. */
unsigned version, ver_offset;
if (! lookup_name (id)
diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c
index 0033e97..a7a5d00 100644
--- a/gcc/gimple-pretty-print.c
+++ b/gcc/gimple-pretty-print.c
@@ -453,11 +453,24 @@ dump_ternary_rhs (pretty_printer *buffer, gassign *gs, int spc, int flags)
break;
case FMA_EXPR:
- dump_generic_node (buffer, gimple_assign_rhs1 (gs), spc, flags, false);
- pp_string (buffer, " * ");
- dump_generic_node (buffer, gimple_assign_rhs2 (gs), spc, flags, false);
- pp_string (buffer, " + ");
- dump_generic_node (buffer, gimple_assign_rhs3 (gs), spc, flags, false);
+ if (flags & TDF_GIMPLE)
+ {
+ pp_string (buffer, "__FMA (");
+ dump_generic_node (buffer, gimple_assign_rhs1 (gs), spc, flags, false);
+ pp_comma (buffer);
+ dump_generic_node (buffer, gimple_assign_rhs2 (gs), spc, flags, false);
+ pp_comma (buffer);
+ dump_generic_node (buffer, gimple_assign_rhs3 (gs), spc, flags, false);
+ pp_right_paren (buffer);
+ }
+ else
+ {
+ dump_generic_node (buffer, gimple_assign_rhs1 (gs), spc, flags, false);
+ pp_string (buffer, " * ");
+ dump_generic_node (buffer, gimple_assign_rhs2 (gs), spc, flags, false);
+ pp_string (buffer, " + ");
+ dump_generic_node (buffer, gimple_assign_rhs3 (gs), spc, flags, false);
+ }
break;
case DOT_PROD_EXPR:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d67721a..97f392a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2017-02-19 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
+
+ * gcc.dg/gimplefe-26.c: New test.
+
2017-02-18 John David Anglin <danglin@gcc.gnu.org>
* g++.dg/tls/thread_local-order2.C: xfail on hppa*-*-hpux*.
diff --git a/gcc/testsuite/gcc.dg/gimplefe-26.c b/gcc/testsuite/gcc.dg/gimplefe-26.c
new file mode 100644
index 0000000..55a4624
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/gimplefe-26.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fgimple -fdump-tree-ssa-gimple" } */
+
+#define foo(type, num) \
+type __GIMPLE () foo_##num (type a, type b, type c) \
+{ \
+ type t0; \
+ t0_1 = __FMA (a, b, c); \
+ return t0_1; \
+}
+
+foo(float, 1)
+foo(double, 2)
+foo(long double, 3)
+
+/* { dg-final { scan-tree-dump-times "__FMA" 3 "ssa" } } */