gimple-fold.h (gimple_build): Remove optional valueize arguments.
authorRichard Biener <rguenther@suse.de>
Mon, 20 Apr 2015 13:23:59 +0000 (13:23 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 20 Apr 2015 13:23:59 +0000 (13:23 +0000)
2015-04-20  Richard Biener  <rguenther@suse.de>

* gimple-fold.h (gimple_build): Remove optional valueize arguments.
* gimple-fold.c (gimple_build_valueize): New function.
(gimple_build): Always use gimple_build_valueize as valueize hook.

From-SVN: r222231

gcc/ChangeLog
gcc/gimple-fold.c
gcc/gimple-fold.h

index 3628a438b0fa8b6a113bc1eb96d027e7e3905e13..09d11ff4f015b5e9d492c9be64596a339d774892 100644 (file)
@@ -1,3 +1,9 @@
+2015-04-20  Richard Biener  <rguenther@suse.de>
+
+       * gimple-fold.h (gimple_build): Remove optional valueize arguments.
+       * gimple-fold.c (gimple_build_valueize): New function.
+       (gimple_build): Always use gimple_build_valueize as valueize hook.
+
 2015-04-20  Alan Lawrence  <alan.lawrence@arm.com>
 
        PR target/64134
index 9458f96545243dcba1224d32515d8526fc875e14..d607e8fe0badd35dbf7c7a9f5d65beae41034db1 100644 (file)
@@ -6078,18 +6078,28 @@ rewrite_to_defined_overflow (gimple stmt)
 }
 
 
+/* The valueization hook we use for the gimple_build API simplification.
+   This makes us match fold_buildN behavior by only combining with
+   statements in the sequence(s) we are currently building.  */
+
+static tree
+gimple_build_valueize (tree op)
+{
+  if (gimple_bb (SSA_NAME_DEF_STMT (op)) == NULL)
+    return op;
+  return NULL_TREE;
+}
+
 /* Build the expression CODE OP0 of type TYPE with location LOC,
-   simplifying it first if possible using VALUEIZE if not NULL.
-   OP0 is expected to be valueized already.  Returns the built
+   simplifying it first if possible.  Returns the built
    expression value and appends statements possibly defining it
    to SEQ.  */
 
 tree
 gimple_build (gimple_seq *seq, location_t loc,
-             enum tree_code code, tree type, tree op0,
-             tree (*valueize)(tree))
+             enum tree_code code, tree type, tree op0)
 {
-  tree res = gimple_simplify (code, type, op0, seq, valueize);
+  tree res = gimple_simplify (code, type, op0, seq, gimple_build_valueize);
   if (!res)
     {
       if (gimple_in_ssa_p (cfun))
@@ -6110,17 +6120,15 @@ gimple_build (gimple_seq *seq, location_t loc,
 }
 
 /* Build the expression OP0 CODE OP1 of type TYPE with location LOC,
-   simplifying it first if possible using VALUEIZE if not NULL.
-   OP0 and OP1 are expected to be valueized already.  Returns the built
+   simplifying it first if possible.  Returns the built
    expression value and appends statements possibly defining it
    to SEQ.  */
 
 tree
 gimple_build (gimple_seq *seq, location_t loc,
-             enum tree_code code, tree type, tree op0, tree op1,
-             tree (*valueize)(tree))
+             enum tree_code code, tree type, tree op0, tree op1)
 {
-  tree res = gimple_simplify (code, type, op0, op1, seq, valueize);
+  tree res = gimple_simplify (code, type, op0, op1, seq, gimple_build_valueize);
   if (!res)
     {
       if (gimple_in_ssa_p (cfun))
@@ -6135,18 +6143,16 @@ gimple_build (gimple_seq *seq, location_t loc,
 }
 
 /* Build the expression (CODE OP0 OP1 OP2) of type TYPE with location LOC,
-   simplifying it first if possible using VALUEIZE if not NULL.
-   OP0, OP1 and OP2 are expected to be valueized already.  Returns the built
+   simplifying it first if possible.  Returns the built
    expression value and appends statements possibly defining it
    to SEQ.  */
 
 tree
 gimple_build (gimple_seq *seq, location_t loc,
-             enum tree_code code, tree type, tree op0, tree op1, tree op2,
-             tree (*valueize)(tree))
+             enum tree_code code, tree type, tree op0, tree op1, tree op2)
 {
   tree res = gimple_simplify (code, type, op0, op1, op2,
-                             seq, valueize);
+                             seq, gimple_build_valueize);
   if (!res)
     {
       if (gimple_in_ssa_p (cfun))
@@ -6167,17 +6173,15 @@ gimple_build (gimple_seq *seq, location_t loc,
 
 /* Build the call FN (ARG0) with a result of type TYPE
    (or no result if TYPE is void) with location LOC,
-   simplifying it first if possible using VALUEIZE if not NULL.
-   ARG0 is expected to be valueized already.  Returns the built
+   simplifying it first if possible.  Returns the built
    expression value (or NULL_TREE if TYPE is void) and appends
    statements possibly defining it to SEQ.  */
 
 tree
 gimple_build (gimple_seq *seq, location_t loc,
-             enum built_in_function fn, tree type, tree arg0,
-             tree (*valueize)(tree))
+             enum built_in_function fn, tree type, tree arg0)
 {
-  tree res = gimple_simplify (fn, type, arg0, seq, valueize);
+  tree res = gimple_simplify (fn, type, arg0, seq, gimple_build_valueize);
   if (!res)
     {
       tree decl = builtin_decl_implicit (fn);
@@ -6198,17 +6202,15 @@ gimple_build (gimple_seq *seq, location_t loc,
 
 /* Build the call FN (ARG0, ARG1) with a result of type TYPE
    (or no result if TYPE is void) with location LOC,
-   simplifying it first if possible using VALUEIZE if not NULL.
-   ARG0 is expected to be valueized already.  Returns the built
+   simplifying it first if possible.  Returns the built
    expression value (or NULL_TREE if TYPE is void) and appends
    statements possibly defining it to SEQ.  */
 
 tree
 gimple_build (gimple_seq *seq, location_t loc,
-             enum built_in_function fn, tree type, tree arg0, tree arg1,
-             tree (*valueize)(tree))
+             enum built_in_function fn, tree type, tree arg0, tree arg1)
 {
-  tree res = gimple_simplify (fn, type, arg0, arg1, seq, valueize);
+  tree res = gimple_simplify (fn, type, arg0, arg1, seq, gimple_build_valueize);
   if (!res)
     {
       tree decl = builtin_decl_implicit (fn);
@@ -6229,18 +6231,17 @@ gimple_build (gimple_seq *seq, location_t loc,
 
 /* Build the call FN (ARG0, ARG1, ARG2) with a result of type TYPE
    (or no result if TYPE is void) with location LOC,
-   simplifying it first if possible using VALUEIZE if not NULL.
-   ARG0 is expected to be valueized already.  Returns the built
+   simplifying it first if possible.  Returns the built
    expression value (or NULL_TREE if TYPE is void) and appends
    statements possibly defining it to SEQ.  */
 
 tree
 gimple_build (gimple_seq *seq, location_t loc,
              enum built_in_function fn, tree type,
-             tree arg0, tree arg1, tree arg2,
-             tree (*valueize)(tree))
+             tree arg0, tree arg1, tree arg2)
 {
-  tree res = gimple_simplify (fn, type, arg0, arg1, arg2, seq, valueize);
+  tree res = gimple_simplify (fn, type, arg0, arg1, arg2,
+                             seq, gimple_build_valueize);
   if (!res)
     {
       tree decl = builtin_decl_implicit (fn);
index 5eb5446073737cbcb6d047c371ec336466237331..1204c8a82423bdaf301d6fe8a3ce844a41d0e369 100644 (file)
@@ -57,8 +57,7 @@ extern gimple_seq rewrite_to_defined_overflow (gimple);
    int the provided sequence, matching and simplifying them on-the-fly.
    Supposed to replace force_gimple_operand (fold_buildN (...), ...).  */
 extern tree gimple_build (gimple_seq *, location_t,
-                         enum tree_code, tree, tree,
-                         tree (*valueize) (tree) = NULL);
+                         enum tree_code, tree, tree);
 inline tree
 gimple_build (gimple_seq *seq,
              enum tree_code code, tree type, tree op0)
@@ -66,8 +65,7 @@ gimple_build (gimple_seq *seq,
   return gimple_build (seq, UNKNOWN_LOCATION, code, type, op0);
 }
 extern tree gimple_build (gimple_seq *, location_t,
-                         enum tree_code, tree, tree, tree,
-                         tree (*valueize) (tree) = NULL);
+                         enum tree_code, tree, tree, tree);
 inline tree
 gimple_build (gimple_seq *seq,
              enum tree_code code, tree type, tree op0, tree op1)
@@ -75,8 +73,7 @@ gimple_build (gimple_seq *seq,
   return gimple_build (seq, UNKNOWN_LOCATION, code, type, op0, op1);
 }
 extern tree gimple_build (gimple_seq *, location_t,
-                         enum tree_code, tree, tree, tree, tree,
-                         tree (*valueize) (tree) = NULL);
+                         enum tree_code, tree, tree, tree, tree);
 inline tree
 gimple_build (gimple_seq *seq,
              enum tree_code code, tree type, tree op0, tree op1, tree op2)
@@ -84,8 +81,7 @@ gimple_build (gimple_seq *seq,
   return gimple_build (seq, UNKNOWN_LOCATION, code, type, op0, op1, op2);
 }
 extern tree gimple_build (gimple_seq *, location_t,
-                         enum built_in_function, tree, tree,
-                         tree (*valueize) (tree) = NULL);
+                         enum built_in_function, tree, tree);
 inline tree
 gimple_build (gimple_seq *seq,
              enum built_in_function fn, tree type, tree arg0)
@@ -93,8 +89,7 @@ gimple_build (gimple_seq *seq,
   return gimple_build (seq, UNKNOWN_LOCATION, fn, type, arg0);
 }
 extern tree gimple_build (gimple_seq *, location_t,
-                         enum built_in_function, tree, tree, tree,
-                         tree (*valueize) (tree) = NULL);
+                         enum built_in_function, tree, tree, tree);
 inline tree
 gimple_build (gimple_seq *seq,
              enum built_in_function fn, tree type, tree arg0, tree arg1)
@@ -102,8 +97,7 @@ gimple_build (gimple_seq *seq,
   return gimple_build (seq, UNKNOWN_LOCATION, fn, type, arg0, arg1);
 }
 extern tree gimple_build (gimple_seq *, location_t,
-                         enum built_in_function, tree, tree, tree, tree,
-                         tree (*valueize) (tree) = NULL);
+                         enum built_in_function, tree, tree, tree, tree);
 inline tree
 gimple_build (gimple_seq *seq,
              enum built_in_function fn, tree type,