diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-10-22 08:42:37 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-10-22 08:42:37 +0000 |
commit | 2165588a33dc7d63840774b2aac61be999ef17ae (patch) | |
tree | b44c5fbbe45ceabde1404a524b10797087c153bb /gcc/gimple-fold.h | |
parent | 6e154e02514032b673c74fa03a7412ec69c69ce9 (diff) | |
download | gcc-2165588a33dc7d63840774b2aac61be999ef17ae.tar.gz |
2014-10-22 Richard Biener <rguenther@suse.de>
Prathamesh Kulkarni <bilbotheelffriend@gmail.com>
* Makefile.in (OBJS): Add gimple-match.o and generic-match.o.
(MOSTLYCLEANFILES): Add gimple-match.c and generic-match.c.
(gimple-match.c): Generate by triggering s-match.
(generic-match.c): Likewise.
(s-match): Rule to build gimple-match.c and generic-match.c
by running the genmatch generator program.
(build/hash-table.o): Dependencies to build hash-table.c for the host.
(build/genmatch.o): Dependencies to build genmatch.
(genprog): Add match.
(build/genmatch): Likewise.
(TEXI_GCCINT_FILES): Add match-and-simplify.texi.
* generic-match-head.c: New file.
* gimple-match-head.c: Likewise.
* gimple-match.h: Likewise.
* genmatch.c: Likewise.
* match.pd: Likewise.
* builtins.h (fold_builtin_n): Export.
* builtins.c (fold_builtin_n): Likewise.
* gimple-fold.h (gimple_build): Declare various overloads.
(gimple_simplify): Likewise.
(gimple_convert): Re-implement in terms of gimple_build.
* gimple-fold.c (gimple_convert): Remove.
(gimple_build): New functions.
* doc/match-and-simplify.texi: New file.
* doc/gccint.texi: Add menu item Match and Simplify and include
match-and-simplify.texi.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@216542 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gimple-fold.h')
-rw-r--r-- | gcc/gimple-fold.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/gcc/gimple-fold.h b/gcc/gimple-fold.h index b55a3ef8b3e..93814cad0f1 100644 --- a/gcc/gimple-fold.h +++ b/gcc/gimple-fold.h @@ -45,6 +45,65 @@ extern tree gimple_fold_indirect_ref (tree); extern bool arith_code_with_undefined_signed_overflow (tree_code); extern gimple_seq rewrite_to_defined_overflow (gimple); +/* gimple_build, functionally matching fold_buildN, outputs stmts + 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); +inline tree +gimple_build (gimple_seq *seq, + enum tree_code code, tree type, tree op0) +{ + 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); +inline tree +gimple_build (gimple_seq *seq, + enum tree_code code, tree type, tree op0, tree op1) +{ + 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); +inline tree +gimple_build (gimple_seq *seq, + enum tree_code code, tree type, tree op0, tree op1, tree op2) +{ + 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); +inline tree +gimple_build (gimple_seq *seq, + enum built_in_function fn, tree type, tree arg0) +{ + 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); +inline tree +gimple_build (gimple_seq *seq, + enum built_in_function fn, tree type, tree arg0, tree arg1) +{ + 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); +inline tree +gimple_build (gimple_seq *seq, + enum built_in_function fn, tree type, + tree arg0, tree arg1, tree arg2) +{ + return gimple_build (seq, UNKNOWN_LOCATION, fn, type, arg0, arg1, arg2); +} + extern tree gimple_convert (gimple_seq *, location_t, tree, tree); inline tree gimple_convert (gimple_seq *seq, tree type, tree op) @@ -52,4 +111,18 @@ gimple_convert (gimple_seq *seq, tree type, tree op) return gimple_convert (seq, UNKNOWN_LOCATION, type, op); } +/* In gimple-match.c. */ +extern tree gimple_simplify (enum tree_code, tree, tree, + gimple_seq *, tree (*)(tree)); +extern tree gimple_simplify (enum tree_code, tree, tree, tree, + gimple_seq *, tree (*)(tree)); +extern tree gimple_simplify (enum tree_code, tree, tree, tree, tree, + gimple_seq *, tree (*)(tree)); +extern tree gimple_simplify (enum built_in_function, tree, tree, + gimple_seq *, tree (*)(tree)); +extern tree gimple_simplify (enum built_in_function, tree, tree, tree, + gimple_seq *, tree (*)(tree)); +extern tree gimple_simplify (enum built_in_function, tree, tree, tree, tree, + gimple_seq *, tree (*)(tree)); + #endif /* GCC_GIMPLE_FOLD_H */ |