2014-12-16 Richard Biener <rguenther@suse.de>
* genmatch.c (parser::parser): Initialize capture_ids.
(parser::parse_pattern): Properly allocate capture_ids before
using them. Set capture_ids to zero when its lifetime is
supposed to finish.
(parser::parse_simplify): Allocate capture_ids only if
required.
From-SVN: r218786
2014-12-02 Richard Biener <rguenther@suse.de>
Prathamesh Kulkarni <bilbotheelffriend@gmail.com>
* genmatch.c: Include hash-set.h.
(fatal_at): Add source_location overload.
(parser::record_operlist): New method.
(parser::push_simplify): Likewise.
(parser::oper_lists_set): New member.
(parser::oper_lists): Likewise.
(parser::parse_operation): Record seen operator list references.
(parser::parse_c_expr): Likewise.
(parser::parse_simplify): Init oper_lists_set and oper_lists
and use push_simplify.
(parser::parser): Init oper_lists_set and oper_lists.
Co-Authored-By: Prathamesh Kulkarni <bilbotheelffriend@gmail.com>
From-SVN: r218261
2014-11-28 Richard Biener <rguenther@suse.de>
PR middle-end/64084
* genmatch.c (dt_node::gen_kids_1): New function, split out
from dt_node::gen_kids.
(decision_tree::cmp_node): DT_TRUE are generally not equal.
(decision_tree::find_node): Treat DT_TRUE as barrier for
node CSE on the same level.
(dt_node::append_node): Do not keep DT_TRUE last.
(dt_node::gen_kids): Emit code after each DT_TRUE node seen.
* gcc.dg/tree-ssa/ssa-ccp-34.c: New testcase.
* gcc.dg/tree-ssa/forwprop-31.c: Likewise.
From-SVN: r218141
2014-11-14 Richard Biener <rguenther@suse.de>
* genmatch.c (add_operator): Allow CONSTRUCTOR.
(dt_node::gen_kids): Handle CONSTRUCTOR not as GENERIC.
(parser::parse_op): Allow to iterate over predicates.
From-SVN: r217541
2014-11-12 Richard Biener <rguenther@suse.de>
Merge from match-and-simplify branch
2014-11-04 Prathamesh Kulkarni <bilbotheelffriend@gmail.com>
* genmatch.c (user_id): Add new member is_oper_list.
(user_id::user_id): Add new default argument.
(parser::parse_operator_list): New function.
(parser::parse_for): Allow operator-list.
(parser::parse_pattern): Call parser::parse_operator_list.
(parser::parse_operation): Reject operator-list.
* match-builtin.pd: Define operator lists POWs, CBRTs and SQRTs.
2014-10-31 Prathamesh Kulkarni <bilbotheelffriend@gmail.com>
* genmatch.c (parser::parse_c_expr): Mark user-defined ops as used.
2014-10-30 Prathamesh Kulkarni <bilbotheelffriend@gmail.com>
* genmatch.c (parser::parse_op): Check if predicate is used in
result operand.
2014-10-29 Prathamesh Kulkarni <bilbotheelffriend@gmail.com>
* genmatch.c (parser::parse_for): Make sure to have a valid
token to report errors at.
2014-10-28 Prathamesh Kulkarni <bilbotheelffriend@gmail.com>
* genmatch.c (parser): Add new member parsing_match_operand.
(parser::parse_operation): Check for conditional convert in result
operand.
(parser::parse_expr): Check for commutative operator in result operand.
Check for :type in match operand.
(parser::parse_simplify): Set/unset parsing_match_operand.
(parser::parser): Initialize parsing_match_operand.
2014-10-28 Richard Biener <rguenther@suse.de>
* genmatch.c (parser::parse_for): Properly check for already
defined operators.
2014-10-28 Prathamesh Kulkarni <bilbotheelffriend@gmail.com>
* genmatch.c (error_cb): Adjust for printing warnings.
(warning_at): New function.
(user_id): Add new member used.
(get_operator): Mark user_id as used.
(parse_for): Warn for unused operators.
From-SVN: r217422
2014-11-12 Richard Biener <rguenther@suse.de>
* genmatch.c (::gen_transform): Add capture_info and
expand_compares arguments.
(struct expr): Add is_generic flag.
(lower_cond): New functions lowering [VEC_]COND_EXPR
conditions to a GENERIC and a GIMPLE variant.
(lower): Call lower_cond.
(cmp_operand): Also compare the is_generic flag.
(capture_info::cinfo): Add cond_expr_cond_p flag.
(capture_info::capture_info): Pass down whether the
expression argument is a COND_EXPR condition.
(capture_info::walk_match): Likewise, mark captures
capturing COND_EXPR conditions with cond_expr_cond_p.
(expr::gen_transform): Pass down whether we need to
expand compares from COND_EXPR conditions.
(capture::gen_transform): Expand compares substituted
from COND_EXPR conditions into non-COND_EXPR conditions.
(dt_operand::gen_gimple_expr): Handle explicitely marked
GENERIC expressions as generic.
(dt_simplify::gen): Pass whether we need to expand
conditions to gen_transform. Handle capture results
which are from COND_EXPR conditions.
(main): Pass gimple flag down to lower.
From-SVN: r217416
2014-11-12 Richard Biener <rguenther@suse.de>
PR bootstrap/63819
* hash-table.h: Include ggc.h also for generator programs.
* genmatch.c (ggc_internal_cleared_alloc): Properly define
using MEM_STAT_DECL instead of CXX_MEM_STAT_INFO.
From-SVN: r217410
2014-10-31 Richard Biener <rguenther@suse.de>
* genmatch.c (expr::gen_transform): Use NOP_EXPRs instead of
CONVERT_EXPRs in generated code.
(dt_simplify::gen): Likewise.
From-SVN: r216977
2014-10-30 Richard Biener <rguenther@suse.de>
* genmatch.c: Remove <map>, <utility> and <string> includes.
Include ggc.h and hash-map.h.
(ggc_internal_cleared_alloc): Provide stub definition.
(ggc_free): Likewise.
(struct capture_id_map_hasher): New traits for hash_map.
(cid_map_t): New typedef.
(everywhere else): Replace std::map use with cid_map_t.
* hash-map.h (hash_map::elements): New member function.
* Makefile.in (build/genmatch.o): Add $(HASH_TABLE_H),
hash-map.h and $(GGC_H) as dependency.
From-SVN: r216940
2014-10-24 Richard Biener <rguenther@suse.de>
* genmatch.c (expr::gen_transform): Use fold_buildN_loc
and build_call_expr_loc.
(dt_simplify::gen): Drop non_lvalue for GIMPLE, use
non_lvalue_loc to build it for GENERIC.
(decision_tree::gen_generic): Add location argument to
generic_simplify prototype.
(capture_info): New class.
(capture_info::capture_info): New constructor.
(capture_info::walk_match): New method.
(capture_info::walk_result): New method.
(capture_info::walk_c_expr): New method.
(dt_simplify::gen): Handle preserving side-effects for
GENERIC code generation.
(decision_tree::gen_generic): Do not reject operands
with TREE_SIDE_EFFECTS.
* generic-match.h: New file.
* generic-match-head.c: Include generic-match.h, not gimple-match.h.
* match.pd: Add some constant folding patterns from fold-const.c.
* fold-const.c: Include generic-match.h.
(fold_unary_loc): Dispatch to generic_simplify.
(fold_ternary_loc): Likewise.
(fold_binary_loc): Likewise. Remove patterns now implemented
by generic_simplify.
* gimple-fold.c (replace_stmt_with_simplification): New function.
(fold_stmt_1): Add valueize parameter, dispatch to gimple_simplify.
(no_follow_ssa_edges): New function.
(fold_stmt): New overload with valueization hook. Use
no_follow_ssa_edges for the overload without hook.
(fold_stmt_inplace): Likewise.
* gimple-fold.h (no_follow_ssa_edges): Declare.
From-SVN: r216631