Commit Graph

823 Commits

Author SHA1 Message Date
Richard Guenther
8a29ce604b fold-const.c (fold_indirect_ref_1): Avoid removing NOP_EXPRs with type qualifiers like const.
2005-05-11  Richard Guenther  <rguenth@gcc.gnu.org>

	* fold-const.c (fold_indirect_ref_1): Avoid removing
	NOP_EXPRs with type qualifiers like const.

From-SVN: r99566
2005-05-11 07:43:33 +00:00
Gabor Loki
8c9004573a re PR c++/17913 (ICE jumping into statement expression)
2005-05-10  Gabor Loki <loki@gcc.gnu.org>

	PR c/17913
	* c-typeck.c (build_conditional_expr): Remove reducing cond_expr.
	* fold-const.c (fold): Expand the condition of reducing cond_expr.
	(contains_label_1, contains_label_p): New functions for checking
	labels in a sub-tree.

testsuite:
2005-05-10  Gabor Loki <loki@gcc.gnu.org>

	PR c/17913
	* gcc.c-torture/compile/pr17913.c: Computed jump test for PR17913

From-SVN: r99514
2005-05-10 13:47:05 +00:00
Andrew Pinski
a7e1c9287c [multiple changes]
2004-05-03  Andrew Pinski  <pinskia@physics.uc.edu>

        PR middle-end/15618
        * fold-const.c (fold_widened_comparison): Treat BOOLEAN_TYPE
        the same as INTEGER_TYPE.
        (fold_binary): Fold "bool_var != 0" to bool_var.
        Fold "bool_var == 1" to bool_var.
2005-05-03  Andrew Pinski  <pinskia@physics.uc.edu>

        PR middle-end/15618
        * gcc.dg/tree-ssa/bool-[1-9].c: New tests.

From-SVN: r99207
2005-05-03 18:52:06 -07:00
Richard Guenther
49d766869a fold-const.c (fold_binary): Use build_fold_addr_expr for address calculation and INDIRECT_REF handling.
2005-04-27  Richard Guenther  <rguenth@gcc.gnu.org>

	* fold-const.c (fold_binary): Use build_fold_addr_expr
	for address calculation and INDIRECT_REF handling.

From-SVN: r98877
2005-04-27 19:39:08 +00:00
Richard Guenther
70a390bbb6 re PR tree-optimization/17598 (an extra addition when comparing address of &a->b and &c->b.)
2004-04-26  Richard Guenther  <rguenth@gcc.gnu.org>

	PR tree-optimization/17598
	* fold-const.c (fold_binary): Fold comparisons of addresses
	of COMPONENT_REFs which reference the same field to
	comparisons of the addresses of the base objects.

	* gcc.dg/tree-ssa/pr17598.c: New testcase.

From-SVN: r98775
2005-04-26 16:35:31 +00:00
Kazu Hirata
cb4819f012 re PR tree-optimization/21047 (ASSERT_EXPR handling in fold never triggers.)
PR tree-optimization/21047
	* fold-const.c (fold_binary): Abort on ASSERT_EXPR.
	(fold): Don't handle ASSERT_EXPR.

From-SVN: r98770
2005-04-26 15:16:51 +00:00
Richard Guenther
75cf42ccff re PR middle-end/21082 (&a[b] - &a[c] is not folded to b - c)
2005-04-23  Richard Guenther  <rguenth@gcc.gnu.org>

	PR middle-end/21082
	* fold-const.c: Fold &a[i]-&a[j] to i-j.

	* g++.dg/tree-ssa/pr21082.C: New testcase.

From-SVN: r98636
2005-04-23 21:34:40 +00:00
DJ Delorie
d4ee4d2525 diagnostic.c (warning): Accept parameter to classify warning option.
* diagnostic.c (warning): Accept parameter to classify warning option.
(warning0): New, for when a pointer to an error() like function is needed.
* errors.c (warning): Likewise.
* errors.h (warning, warning0): Adjust prototypes.
* toplev.h (warning, warning0): Likewise.

* attribs.c, builtins.c, c-common.c, c-decl.c, c-format.c,
c-gimplify.c, c-lex.c, c-objc-common.c, c-opts.c, c-parser.c,
c-pragma.c, c-typeck.c, calls.c, cgraph.c, coverage.c, emit-rtl.c,
fold-const.c, fortran/trans-decl.c, function.c, gcse.c,
genautomata.c, haifa-sched.c, opts.c, passes.c, regclass.c,
reload1.c, stmt.c, stor-layout.c, toplev.c, tree-cfg.c,
tree-dump.c, tree-inline.c, tree-mudflap.c, tree-optimize.c,
tree-ssa.c, tree.c, varasm.c: Adjust warning() callers.

* config/alpha/alpha.c, config/arc/arc.c, config/arm/arm.c,
config/avr/avr.c, config/bfin/bfin.c, config/c4x/c4x-c.c,
config/c4x/c4x.c, config/cris/cris.c, config/darwin-c.c,
config/darwin.c, config/darwin.h, config/h8300/h8300.c,
config/i386/cygming.h, config/i386/djgpp.h, config/i386/i386.c,
config/i386/winnt.c, config/ia64/ia64-c.c, config/ia64/ia64.c,
config/ip2k/ip2k.c, config/m32r/m32r.c, config/m68hc11/m68hc11.c,
config/m68k/m68k.c, config/mcore/mcore.c, config/mips/mips.c,
config/mmix/mmix.c, config/ns32k/ns32k.c, config/pa/pa-hpux11.h,
config/pa/pa.c, config/rs6000/aix43.h, config/rs6000/aix51.h,
config/rs6000/aix52.h, config/rs6000/darwin.h,
config/rs6000/rs6000-c.c, config/rs6000/rs6000.c,
config/s390/s390.c, config/sh/sh.c, config/sh/sh.h,
config/sh/symbian.c, config/sol2-c.c, config/sol2.c,
config/stormy16/stormy16.c, config/v850/v850-c.c,
config/v850/v850.c, config/xtensa/xtensa.c: Adjust warning()
callers.

* ada/misc.c: Adjust warning() callers.

* cp/call.c, cp/class.c, cp/cvt.c, cp/decl.c, cp/decl2.c,
cp/except.c, cp/friend.c, cp/init.c, cp/lex.c, cp/mangle.c,
cp/method.c, cp/name-lookup.c, cp/parser.c, cp/repo.c, cp/rtti.c,
cp/tree.c, cp/typeck.c, cp/typeck2.c: Adjust warning() callers.

* fortran/trans-decl.c: Adjust warning() callers.

* java/class.c, java/decl.c, java/expr.c, java/jcf-io.c,
java/jcf-parse.c, java/jv-scan.c, java/parse.y: Adjust warning()
callers.

* objc/objc-act.c: Adjust warning() callers.

* treelang/parse.y: Adjust warning() callers.

From-SVN: r98633
2005-04-23 17:29:07 -04:00
Kazu Hirata
721425b6ad re PR tree-optimization/21088 (VRP passes fold the type of operands of a comparison)
PR tree-optimization/21088
	* fold-const.c (fold_unary, fold_binary, fold_ternary):
	Export.
	* tree-vrp.c (compare_values): Use fold_binary to compare
	pointers.  Use boolean_type_node as the type of a comparison
	expression being folded.
	* tree.h: Add prototypes for fold_unary, fold_binary,
	fold_ternary.

From-SVN: r98600
2005-04-23 02:01:53 +00:00
Kazu Hirata
a94400fda3 re PR tree-optimization/14846 ([tree-ssa] don't use a shift in A & CST_POWER_OF_2 == 0 until very late in tree-ssa optimizations)
PR tree-optimization/14846
	* fold-const.c (fold_single_bit_test_into_sign_test): New,
	split out from ...
	(fold_single_bit_test): ... here.
	(fold_binary): Call fold_single_bit_test_into_sign_test
	instead of fold_single_bit_test.

From-SVN: r98482
2005-04-21 00:39:22 +00:00
James A. Morrison
f242e7690e fold-const.c (fold_binary): Fold ~(X ^ Y) to ~X ^ Y or X ^ ~Y if ~X or ~Y simplify.
2005-04-19  James A. Morrison  <phython@gcc.gnu.org>

	* fold-const.c (fold_binary): Fold ~(X ^ Y) to ~X ^ Y or X ^ ~Y if
	~X or ~Y simplify.

From-SVN: r98435
2005-04-20 04:32:41 +00:00
James A. Morrison
33ab624554 fold-const (fold_binary): Fold ~X ^ ~ Y to X ^ Y.
2005-04-19  James A. Morrison  <phython@gcc.gnu.org>

	* fold-const (fold_binary):  Fold ~X ^ ~ Y to X ^ Y.

From-SVN: r98434
2005-04-20 02:31:26 +00:00
James A. Morrison
a3885f5477 re PR middle-end/21085 (Virtual memory exhausted with g++)
2005-04-18  James A. Morrison  <phython@gcc.gnu.org>

        PR tree-optimization/21085
        * fold-const (fold_binary): Don't change X % -C to X % C if C has
        overflowed.

From-SVN: r98365
2005-04-19 02:36:04 +00:00
James A. Morrison
0eeb03e6fb re PR tree-optimization/20922 (missed always false conditional)
2005-04-18  James A. Morrison  <phython@gcc.gnu.org>

        PR tree-optimization/20922
        * fold-const.c (fold_binary): Fold X - c > X and X + c < X to false.
        Fold X + c >= X and fold X - c <= X to true.

From-SVN: r98321
2005-04-18 15:18:21 +00:00
Kazu Hirata
10dcf22182 re PR middle-end/21024 (fold generates a comparison of two operands whose types do not match)
PR middle-end/21024
	* builtins.c (expand_builtin_strcat): Convert the result of
	strlen to the right type.
	* fold-const.c (fold_binary) <PLUS_EXPR>: Use fold_convert to
	avoid creating type mismatches.
	<GE_EXPR>: Pass op0 and op1 to fold_build2 to avoid creating
	type mismatches.

From-SVN: r98244
2005-04-17 01:38:24 +00:00
Roger Sayle
41704a387e fold-const.c (fold_binary_to_constant): Delete obsolete comment.
* fold-const.c (fold_binary_to_constant): Delete obsolete comment.
	(fold_unary_to_constant): Likewise.

Co-Authored-By: Steven Bosscher <stevenb@suse.de>

From-SVN: r98233
2005-04-16 14:07:28 +00:00
Roger Sayle
054632e8ab fold-const.c (fold_relational_hi_lo): Delete function and prototype.
* fold-const.c (fold_relational_hi_lo): Delete function and prototype.
	(fold_binary): Update comment mentioning fold_relational_hi_lo.
	(fold_binary_to_constant): Simplify using fold_binary.
	(fold_unary_to_constant): Likewise, simplify using fold_unary.

From-SVN: r98220
2005-04-16 01:59:11 +00:00
Andrew Pinski
6405f32f73 fold-const.c (fold_binary_op_with_conditional_arg): use fold_buildN instead of "fold (buildN" in some non obvious places.
2005-04-11  Andrew Pinski  <pinskia@physics.uc.edu>

        * fold-const.c (fold_binary_op_with_conditional_arg):
        use fold_buildN instead of "fold (buildN" in some
        non obvious places.
        (fold_unary): Likewise.
        (fold_binary): Likewise.

From-SVN: r97980
2005-04-11 12:00:46 -07:00
Uros Bizjak
f94b16611c * builtins.def (BUILT_IN_LCEIL, BUILT_IN_LCEILF, BUILT_IN_LCEILL)
(BUILT_IN_LLCEIL, BUILT_IN_LLCEILF, BUILT_IN_LLCEILL): New.
	* optabs.h (enum optab_index): Add new OTI_lceil.
	(lceil_optab): Define corresponding macro.
	* optabs.c (init_optabs): Initialize lceil_optab.
	* genopinit.c (optabs): Implement lceil_optab using lceilsi2
	and lceildi2 patterns.

	* builtins.c (expand_builtin_int_roundingfn): Handle
	BUILT_IN_LCEIL{,F,L} and BUILT_IN_LLCEIL{,F,L}.
	(fold_builtin_int_roundingfn): Handle BUILT_IN_LCEIL{,F,L} and
	BUILT_IN_LLCEIL{,F,L}.
	(fold_builtin_1): Fold BUILT_IN_LCEIL{,F,L} and
	BUILT_IN_LLCEIL{,F,L} using fold_builtin_int_roundingfn.
	(mathfn_built_in): Handle BUILT_IN LCEIL and BUILT_IN_LLCEIL.
	(expand_builtin): Expand BUILT_IN_LCEIL{,F,L} and
	BUILT_IN_LLCEIL{,F,L} using expand_builtin_int_roundingfn.

	* convert.c (convert_to_integer): Convert (long int)ceil{,f,l},
	into lceil built-in function and (long long int)ceil{,f,l} into
	llceil built-in function.
	* fold-const.c (tree_expr_nonnegative_p): Add BUILT_IN_LCEIL and
	BUILT_IN_LLCEIL.
testsuite:

	* gcc.dg/builtins-53.c: Also check (int)ceil* and
	(long long int)ceil*.

From-SVN: r97964
2005-04-11 08:16:39 +02:00
Uros Bizjak
d8b42d069e * builtins.def (BUILT_IN_LFLOOR, BUILT_IN_LFLOORF, BUILT_IN_LFLOORL)
(BUILT_IN_LLFLOOR, BUILT_IN_LLFLOORF, BUILT_IN_LLFLOORL): New.
	* optabs.h (enum optab_index): Add new OTI_lfloor.
	(lfloor_optab): Define corresponding macro.
	* optabs.c (init_optabs): Initialize lfloor_optab.
	* genopinit.c (optabs): Implement lfloor_optab using lfloorsi2
	and lfloordi2 patterns.

	* builtins.c (expand_builtin_int_roundingfn): New prototype.
	(expand_builtin_int_roundingfn): New function.
	(fold_builtin_int_roundingfn): New prototype.
	(fold_builtin_int_roundingfn): New function, renamed from
	fold_builtin_lround.
	Handle BUILT_IN_LROUND{,F,L}, BUILT_IN_LLROUND{,F,L} and
	BUILT_IN_LFLOOR{,F,L}, BUILT_IN_LLFLOOR{,F,L}.
	(fold_builtin_1): Fold BUILT_IN_LFLOOR{,F,L} and
	BUILT_IN_LLFLOOR{,F,L} using fold_builtin_int_roundingfn.
	(mathfn_built_in): Handle BUILT_IN LFLOOR and BUILT_IN_LLFLOOR.
	(expand_builtin): Expand BUILT_IN_LFLOOR{,F,L} and
	BUILT_IN_LLFLOOR{,F,L} using expand_builtin_int_roundingfn.

	* convert.c (convert_to_integer): Convert (long int)floor{,f,l},
	into lfloor built-in function and (long long int)floor{,f,l} into
	llfloor built-in function.
	* fold-const.c (tree_expr_nonnegative_p): Add BUILT_IN_LFLOOR and
	BUILT_IN_LLFLOOR.

testsuite:

	* gcc.dg/builtins-53.c: New test.

From-SVN: r97886
2005-04-09 07:31:46 +02:00
Diego Novillo
0bca51f080 backport: copy-prop, incremental SSA updating of FUD chains and newly exposed symbols.
Merge from tree-cleanup-branch: VRP, store CCP, store
	    copy-prop, incremental SSA updating of FUD chains and
	    newly exposed symbols.

	* Makefile.in (tree-ssa-copy.o): Depend on tree-ssa-propagate.h.
	(OBJS-common): Add tree-vrp.o.
	(tree-vrp.o): New rule.
	* basic-block.h (nearest_common_dominator_for_set): Declare.
	* common.opt (ftree-store-ccp): New flag.
	(ftree-copy-prop): New flag.
	(ftree-vrp): New flag.
	(ftree-store-copy-prop): New flag.
	* dominance.c (nearest_common_dominator_for_set): New.
	* domwalk.c (walk_dominator_tree): Only traverse
	statements in blocks marked in walk_data->interesting_blocks.
	* domwalk.h (struct dom_walk_data): Add field interesting_blocks.
	* fold-const.c (fold): Handle ASSERT_EXPR.
	* opts.c (decode_options): Set flag_tree_copy_prop at -O1.
	Set flag_tree_store_ccp, flag_tree_store_copy_prop and
	flag_tree_vrp at -O2.
	* timevar.def (TV_TREE_VRP): Define.
	(TV_TREE_COPY_PROP): Define.
	(TV_TREE_STORE_COPY_PROP): Define.
	(TV_TREE_SSA_INCREMENTAL): Define.
	(TV_TREE_STORE_CCP): Define.
	* tree-cfg.c (tree_can_merge_blocks_p): Remove reference
	to kill_redundant_phi_nodes from comment.
	(verify_expr): Handle ASSERT_EXPR.
	* tree-dfa.c (mark_new_vars_to_rename): Remove second
	argument.  Update all users.
	(mark_call_clobbered_vars_to_rename): Remove.  Update all
	users.
	* tree-flow-inline.h (unmodifiable_var_p): New.
	* tree-flow.h (enum value_range_type): Declare.
	(struct value_range_def): Declare.
	(value_range): Declare.
	(remove_all_phi_nodes_for): Remove.  Update all users.
	(find_phi_node_for): Declare.
	(add_type_alias): Declare.
	(count_uses_and_derefs): Declare.
	(kill_redundant_phi_nodes): Remove.
	(rewrite_into_ssa): Remove.
	(rewrite_def_def_chains): Remove.
	(update_ssa, register_new_name_mapping, create_new_def_for,
	need_ssa_update_p, name_registered_for_update_p,
	release_ssa_name_after_update_ssa, dump_repl_tbl,
	debug_repl_tbl, dump_names_replaced_by,
	debug_names_replaced_by, mark_sym_for_renaming,
	mark_set_for_renaming, get_current_def, set_current_def,
	get_value_range, dump_value_range, debug_value_range,
	dump_all_value_ranges, debug_all_value_ranges,
	expr_computes_nonzero, loop_depth_of_name,
	unmodifiable_var_p): Declare.
	* tree-gimple.c (is_gimple_formal_tmp_rhs): Handle
	ASSERT_EXPR.
	* tree-into-ssa.c (block_defs_stack): Update comment.
	(old_ssa_names, new_ssa_names, old_virtual_ssa_names,
	syms_to_rename, names_to_release, repl_tbl,
	need_to_initialize_update_ssa_p, need_to_update_vops_p,
	need_to_replace_names_p): New locals.
	(NAME_SETS_GROWTH_FACTOR): Define.
	(struct repl_map_d): Declare.
	(struct mark_def_sites_global_data): Add field
	interesting_blocks.
	(enum rewrite_mode): Declare.
	(REGISTER_DEFS_IN_THIS_STMT): Define.
	(compute_global_livein): Use last_basic_block instead of
	n_basic_blocks.
	(set_def_block): Remove last argument.  Update all callers.
	(prepare_use_operand_for_rename): Remove.  Update all callers.
	(prepare_def_operand_for_rename): Remove.  Update all callers.
	(symbol_marked_for_renaming): New.
	(is_old_name): New.
	(is_new_name): New.
	(repl_map_hash): New.
	(repl_map_eq): New.
	(repl_map_free): New.
	(names_replaced_by): New.
	(add_to_repl_tbl): New.
	(add_new_name_mapping): New.
	(mark_def_sites): Assume that all the operands in the
	statement are in normal form.
	(find_idf): Assert that the block in the stack is valid.
	(get_default_def_for): New.
	(insert_phi_nodes_for): Add new argument 'update_p'.
	Add documentation.
	If update_p is true, add a new mapping between the LHS of
	each new PHI and the name that it replaces.
	(insert_phi_nodes_1): Only call find_idf if needed.
	(get_reaching_def): Call get_default_def_for.
	(rewrite_operand): Remove.
	(rewrite_stmt): Do nothing if REGISTER_DEFS_IN_THIS_STMT
	and REWRITE_THIS_STMT are false.
	Assume that all the operands in the statement are in
	normal form.
	(rewrite_add_phi_arguments): Don't use PHI_REWRITTEN.
	(rewrite_virtual_phi_arguments): Remove.
	(invalidate_name_tags): Remove.
	(register_new_update_single, register_new_update_set,
	rewrite_update_init_block, replace_use,
	rewrite_update_fini_block, rewrite_update_stmt,
	rewrite_update_phi_arguments): New.
	rewrite_blocks): Remove argument 'fix_virtual_phis'.
	Add arguments 'entry', 'what' and 'blocks'.
	Initialize the dominator walker according to 'what' and
	'blocks'.
	Start the dominator walk at 'entry'.
	(mark_def_site_blocks): Add argument 'interesting_blocks'.
	Use it to configure the dominator walker.
	(rewrite_into_ssa): Remove argument 'all'.
	Make internal.
	(rewrite_all_into_ssa): Remove.
	(rewrite_def_def_chains): Remove.
	(mark_def_interesting, mark_use_interesting,
	prepare_phi_args_for_update, prepare_block_for_update,
	prepare_def_site_for, prepare_def_sites,
	dump_names_replaced_by, debug_names_replaced_by,
	dump_repl_tbl, debug_repl_tbl, init_update_ssa,
	delete_update_ssa, create_new_def_for,
	register_new_name_mapping, mark_sym_for_renaming,
	mark_set_for_renaming, need_ssa_update_p,
	name_registered_for_update_p, ssa_names_to_replace,
	release_ssa_name_after_update_ssa,
	insert_updated_phi_nodes_for, update_ssa): New.
	* tree-loop-linear.c (linear_transform_loops): Call
	update_ssa instead of rewrite_into_ssa.
	* tree-optimize.c (vars_to_rename): Remove.
	Update all users.
	(init_tree_optimization_passes): Replace
	pass_redundant_phi with pass_copy_prop.
	Add pass_vrp.
	Replace pass_ccp with pass_store_ccp.
	Add pass_store_copy_prop after pass_store_ccp.
	(execute_todo): If the TODO_ flags don't include updating
	the SSA form, assert that it does not need to be updated.
	Call update_ssa instead of rewrite_into_ssa and
	rewrite_def_def_chains.
	If TODO_verify_loops is set, call verify_loop_closed_ssa.
	(tree_rest_of_compilation):
	* tree-pass.h (TODO_dump_func, TODO_ggc_collect,
	TODO_verify_ssa, TODO_verify_flow, TODO_verify_stmts,
	TODO_cleanup_cfg): Renumber.
	(TODO_verify_loops, TODO_update_ssa,
	TODO_update_ssa_no_phi, TODO_update_ssa_full_phi,
	TODO_update_ssa_only_virtuals): Define.
	(pass_copy_prop, pass_store_ccp, pass_store_copy_prop, pass_vrp):
	Declare.
	* tree-phinodes.c (make_phi_node): Update documentation.
	(remove_all_phi_nodes_for): Remove.
	(find_phi_node_for): New.
	* tree-pretty-print.c (dump_generic_node): Handle ASSERT_EXPR.
	* tree-scalar-evolution.c (follow_ssa_edge_in_rhs): Likewise.
	(interpret_rhs_modify_expr): Likewise.
	* tree-sra.c (decide_instantiations): Mark all symbols in
	SRA_CANDIDATES for renaming.
	(mark_all_v_defs_1): Rename from mark_all_v_defs.
	(mark_all_v_defs): New function.  Update all users to call it
	with the whole list of scalarized statements, not just the
	first one.
	* tree-ssa-alias.c (count_ptr_derefs): Make extern.
	(compute_flow_insensitive_aliasing): If the tag is
	unmodifiable and the variable isn't or vice-versa, don't
	make them alias of each other.
	(setup_pointers_and_addressables): If the type tag for
	VAR is about to change, mark the old one for renaming.
	(add_type_alias): New.
	* tree-ssa-ccp.c: Document SSA-CCP and STORE-CCP.
	(ccp_lattice_t): Rename from latticevalue.
	(value): Remove.  Update all users.
	(const_val): New local variable.
	(do_store_ccp): New local variable.
	(dump_lattice_value): Handle UNINITIALIZED.
	(debug_lattice_value): New.
	(get_default_value): Re-write.
	(set_lattice_value): Re-write.
	(def_to_varying): Remove.  Update all users.
	(likely_value): Return VARYING for statements that make
	stores when STORE_CCP is false.
	Return VARYING for any statement other than MODIFY_EXPR,
	COND_EXPR and SWITCH_EXPR.
	(ccp_initialize): Re-write.
	(replace_uses_in, replace_vuse_in, substitute_and_fold):
	Move to tree-ssa-propagate.c.
	(ccp_lattice_meet): Handle memory stores when
	DO_STORE_CCP is true.
	(ccp_visit_phi_node): Likewise.
	(ccp_fold): Likewise.
	(evaluate_stmt): Likewise.
	(visit_assignment): Likewise.
	(ccp_visit_stmt): Likewise.
	(execute_ssa_ccp): Add argument 'store_ccp'.  Copy it
	into DO_STORE_CCP.
	(do_ssa_ccp): New.
	(pass_ccp): Use it.
	(do_ssa_store_ccp): New.
	(gate_store_ccp): New.
	(pass_store_ccp): Declare.
	* tree-ssa-copy.c: Include tree-ssa-propagate.h.
	(may_propagate_copy): Reformat.
	Don't abort if ORIG is a virtual and DEST isn't.
	If NEW does not have alias information but DEST does,
	copy it.
	(copy_of, cached_last_copy_of, do_store_copy_prop, enum
	copy_prop_kind, which_copy_prop): Declare.
	(stmt_may_generate_copy, get_copy_of_val,
	get_last_copy_of, set_copy_of_val, dump_copy_of,
	copy_prop_visit_assignment, copy_prop_visit_cond_stmt,
	copy_prop_visit_stmt, copy_prop_visit_phi_node,
	init_copy_prop, fini_copy_prop, execute_copy_prop,
	gate_copy_prop, do_copy_prop, gate_store_copy_prop,
	store_copy_prop): New.
	(pass_copy_prop, pass_store_copy_prop): Declare.
	* tree-ssa-dom.c (struct opt_stats_d): Add fields
	'num_const_prop' and 'num_copy_prop'.
	(cprop_operand): Update them.
	(dump_dominator_optimization_stats): Dump them.
	(tree_ssa_dominator_optimize): Call update_ssa instead of
	rewrite_into_ssa.
	(loop_depth_of_name): Declare extern.
	(simplify_cond_and_lookup_avail_expr): Guard against NULL
	values for LOW or HIGH.
	(cprop_into_successor_phis): Only propagate if NEW != ORIG.
	(record_equivalences_from_stmt): Call expr_computes_nonzero.
	(cprop_operand): Only propagate if VAL != OP.
	* tree-ssa-dse.c (dse_optimize_stmt): Mark symbols in removed
	statement for renaming.
	* tree-ssa-loop-im.c (move_computations): Call update_ssa.
	* tree-ssa-loop-ivopts.c (rewrite_address_base): Call
	add_type_alias if necessary.
	Call mark_new_vars_to_rename.
	(tree_ssa_iv_optimize): If new symbols need to be renamed,
	mark every statement updated, call update_ssa and
	rewrite_into_loop_closed_ssa.
	* tree-ssa-loop-manip.c (add_exit_phis): Do not remove DEF_BB
	from LIVEIN if VAR is a virtual.
	* tree-ssa-loop.c (tree_loop_optimizer_init): Call update_ssa.
	* tree-ssa-operands.c (get_expr_operands): Handle ASSERT_EXPR.
	(get_call_expr_operands): Reformat statement.
	(add_stmt_operand): Don't create V_MAY_DEFs for read-only
	symbols.
	* tree-ssa-propagate.c (ssa_prop_init): Initialize
	SSA_NAME_VALUE for every name.
	(first_vdef, stmt_makes_single_load, stmt_makes_single_store,
	get_value_loaded_by): New.
	(replace_uses_in, replace_vuses_in, replace_phi_args_in,
	substitute_and_fold): Move from tree-ssa-ccp.c.
	* tree-ssa-propagate.h (struct prop_value_d, prop_value_t,
	first_vdef, stmt_makes_single_load, stmt_makes_single_store,
	get_value_loaded_by, replace_uses_in, substitute_and_fold):
	Declare.
	* tree-ssa.c (verify_use): Fix error message.
	(propagate_into_addr, replace_immediate_uses, get_eq_name,
	check_phi_redundancy, kill_redundant_phi_nodes,
	pass_redundant_phi): Remove.  Update all users.
	* tree-vect-transform.c (vect_create_data_ref_ptr): Call
	add_type_alias, if necessary.
	* tree-vectorizer.h (struct _stmt_vect_info): Update
	documentation for field 'memtag'.
	* tree-vrp.c: New file.
	* tree.def (ASSERT_EXPR): Define.
	* tree.h (ASSERT_EXPR_VAR): Define.
	(ASSERT_EXPR_COND): Define.
	(SSA_NAME_VALUE_RANGE): Define.
	(struct tree_ssa_name): Add field 'value_range'.
	(PHI_REWRITTEN): Remove.
	(struct tree_phi_node): Remove field 'rewritten'.
	* doc/invoke.texi (-fdump-tree-storeccp, -ftree-copy-prop,
	-ftree-store-copy-prop): Document.
	* doc/tree-ssa.texi: Remove broken link to McCAT's compiler.
	Document usage of update_ssa.

testsuite/ChangeLog

	* g++.dg/tree-ssa/pr18178.C: New test.
	* gcc.c-torture/execute/20030216-1.x: Ignore at -O1.
	* gcc.c-torture/execute/20041019-1.c: New test.
	* gcc.dg/tree-ssa/20041008-1.c: New test.
	* gcc.dg/tree-ssa/ssa-ccp-12.c: New test.
	* gcc.dg/tree-ssa/20030731-2.c: Update to use -fdump-tree-store_ccp.
	* gcc.dg/tree-ssa/20030917-1.c: Likewise.
	* gcc.dg/tree-ssa/20030917-3.c: Likewise.
	* gcc.dg/tree-ssa/20040721-1.c: Likewise.
	* gcc.dg/tree-ssa/ssa-ccp-1.c: Likewise.
	* gcc.dg/tree-ssa/ssa-ccp-2.c: Likewise.
	* gcc.dg/tree-ssa/ssa-ccp-3.c: Likewise.
	* gcc.dg/tree-ssa/ssa-ccp-7.c: Likewise.
	* gcc.dg/tree-ssa/ssa-ccp-9.c: Likewise.

From-SVN: r97884
2005-04-08 21:37:54 -04:00
Roger Sayle
acaa3bf7a1 i386.md (*truncdfsf2_i387_1): New pattern.
* config/i386/i386.md (*truncdfsf2_i387_1): New pattern.

	* fold-const.c (maybe_lvalue_p): Delete orphaned comment.

From-SVN: r97594
2005-04-05 01:38:56 +00:00
Jakub Jelinek
4b8d544bc6 re PR rtl-optimization/16104 (ICE in reload_cse_simplify_operands, at postreload.c:378 with SSE2 code on -O2)
PR rtl-optimization/16104
	* fold-const.c (fold_unary): Fix folding of vector conversions.

	* gcc.c-torture/execute/20050316-1.c: New test.

From-SVN: r97529
2005-04-04 10:50:35 +02:00
Roger Sayle
283da5df2d re PR c++/19199 (Wrong warning about returning a reference to a temporary)
2005-04-03  Roger Sayle  <roger@eyesopen.com>
	    Alexandre Oliva  <aoliva@redhat.com>

	PR c++/19199
	* fold-const.c (non_lvalue): Split tests into...
	(maybe_lvalue_p): New function.
	(fold_cond_expr_with_comparison): Preserve lvalue-ness for the
	C++ front-end prior to lowering into gimple form.

	* g++.dg/expr/lval2.C: New.

	* expr2.C: Fixed.

From-SVN: r97522
2005-04-04 05:02:10 +00:00
Kazu Hirata
830113fd7b * bb-reorder.c, fold-const.c, varasm.c: Fix comment typos.
From-SVN: r97395
2005-04-01 14:36:37 +00:00
Pat Haugen
a10d70babd re PR tree-optimization/20470 (Branching sequence generated for ABS(x-y))
2005-03-25  Pat Haugen  <pthaugen@us.ibm.com>

        PR tree-optimization/20470
        * fold-const.c (fold_cond_expr_with_comparison): Recognize/fold
        ABS(x-y).

From-SVN: r97062
2005-03-25 15:08:30 -05:00
Kazu Hirata
7f20a5b73d fold-const.c: Convert uses of fold (build (...)) to fold_buildN.
* fold-const.c: Convert uses of fold (build (...)) to
	fold_buildN.

From-SVN: r97046
2005-03-25 16:49:32 +00:00
Kazu Hirata
ba199a5345 fold-const.c (fold_build1, [...]): New.
* fold-const.c (fold_build1, fold_build2, fold_build3): New.
	* tree.h: Add corresponding prototypes.

From-SVN: r96881
2005-03-22 17:36:37 +00:00
Kazu Hirata
7cf572596f fold-const.c (fold_ternary): Take decomposed arguments of CALL_EXPR.
* fold-const.c (fold_ternary): Take decomposed arguments of
	CALL_EXPR.
	(fold): Update a call to fold_ternary.

From-SVN: r96880
2005-03-22 17:32:22 +00:00
Kazu Hirata
7107fa7ca5 fold-const.c (fold_unary, [...]): Update comments about arguments.
* fold-const.c (fold_unary, fold_binary): Update comments
	about arguments.

From-SVN: r96855
2005-03-22 06:01:05 +00:00
Kazu Hirata
49d1af8985 builtins.c (fold_builtin): Take decomposed arguments of CALL_EXPR.
* builtins.c (fold_builtin): Take decomposed arguments of
	CALL_EXPR.
	* fold-const.c (fold_ternary): Update a call to fold_builtin.
	* gimplify.c (gimplify_call_expr): Likewise.
	* tree-ssa-ccp.c (ccp_fold, ccp_fold_builtin): Likewise.
	* tree.h: Update the prototype of fold_builtin.

From-SVN: r96800
2005-03-21 14:35:08 +00:00
Roger Sayle
90ec750dbf re PR middle-end/20539 (ICE in simplify_subreg, at simplify-rtx.c:3674)
PR middle-end/20539
	* fold-const.c (fold_binary): Fix type mismatch between
	TRUTH_{AND,OR,XOR}_EXPR nodes an their operands' types.
	(fold_binary) <TRUTH_XOR_EXPR>: Avoid calling invert_truthvalue
	for non-truth-valued expressions.

	* c-common.c (c_common_truthvalue_conversion): Handle ERROR_MARK
	and FUNCTION_DECL in the main switch.
	<TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR, TRUTH_AND_EXPR, TRUTH_OR_EXPR,
	TRUTH_XOR_EXPR>: When changing the result type of these tree nodes,
	we also need to convert their operands to match.
	<TRUTH_NOT_EXPR>: Likewise.

	* gcc.c-torture/compile/pr13066-1.c: New test case.
	* gcc.c-torture/compile/pr20539-1.c: Likewise.
	* g++.dg/opt/pr13066-1.C: Likewise.

From-SVN: r96777
2005-03-21 03:30:08 +00:00
John David Anglin
6c6d9d33ef re PR middle-end/20493 (Bootstrap failure because of aliased symbols)
PR middle-end/20493
	* fold-const.c (fold_widened_comparison): Don't optimize casts of
	function pointers on targets that require function pointer
	canonicalization.
	(fold_sign_changed_comparison): Likewise.

From-SVN: r96733
2005-03-19 16:45:59 +00:00
Roger Sayle
0ebfd2c928 re PR tree-optimization/17454 (ICE with --enable-checking=fold)
PR tree-optimization/17454
	* tree.c (tree_size): Add case for TREE_BINFO.
	* fold-const.c (fold_checksum_tree): Only clear the overloaded
	field TYPE_CACHED_VALUES if TYPE_CACHED_VALUES_P is set.

From-SVN: r96548
2005-03-16 02:20:05 +00:00
Roger Sayle
362cb1bb1f re PR middle-end/19331 (Inefficient code generated for bitfield assignment)
PR middle-end/19331
	* tree.c (get_unwidened): Treat CONVERT_EXPR and NOP_EXPR identically.
	* fold-const.c (fold_sign_changed_comparison): Likewise.
	(fold_binary): Optimize comparisons against widened operands if
	the extension is represented by a CONVERT_EXPR, same as a NOP_EXPR.

From-SVN: r96397
2005-03-13 22:34:03 +00:00
Jeff Law
cbefb99c99 re PR tree-optimization/15784 (fold misses binary optimization)
PR tree-optimization/15784
        * fold-const.c (fold): Fold ~A + 1 to -A.  Fold -A - 1
        and -1 - A to ~A.


        * stmt.c (expand_case): Don't change index_type.  Convert minval
        to the proper type.

From-SVN: r96289
2005-03-10 21:52:42 -07:00
James A. Morrison
694d73e165 re PR tree-optimization/20130 (Fold a * -1 - 1 into ~a;)
2005-03-11  James A. Morrison  <phython@gcc.gnu.org>

       PR tree-optimization/20130
       * fold-const.c (fold): Fold x * -1 into -x.

From-SVN: r96283
2005-03-11 03:18:56 +00:00
Kaveh R. Ghazi
d3592adfe0 * fold-const.c (fold_unary_to_constant): Add FIX_ROUND_EXPR case.
From-SVN: r96204
2005-03-09 20:09:08 +00:00
Kazu Hirata
fbaa905cda fold-const.c (fold_unary, [...]): Take decomposed arguments, code, type, op0, and op1 in case of fold_binary.
* fold-const.c (fold_unary, fold_binary): Take decomposed
	arguments, code, type, op0, and op1 in case of fold_binary.
	(fold): Update calls to fold_unary and fold_binary.

From-SVN: r96202
2005-03-09 19:21:11 +00:00
Kazu Hirata
62ab45cc12 fold-const.c (fold_unary, [...]): Return NULL_TREE when a given tree is not simplified.
* fold-const.c (fold_unary, fold_binary, fold_ternary): Return
	NULL_TREE when a given tree is not simplified.
	(fold): Return the original tree when any of the functions
	mentioned above NULL_TREE.

From-SVN: r96201
2005-03-09 19:18:15 +00:00
Kazu Hirata
5758c0f1f7 * fold-const.c (int_const_binop): Remove no_overflow.
From-SVN: r96165
2005-03-09 07:09:48 +00:00
David Edelsohn
92db3ec9db fold-const.c (fold_binary_op_with_conditional_arg): Fix typo ordering ops from earlier change.
* fold-const.c (fold_binary_op_with_conditional_arg): Fix typo
        ordering ops from earlier change.

From-SVN: r96046
2005-03-07 16:24:21 -05:00
Kazu Hirata
1eaea40908 fold-const.c (fold_binary): Unroll the very first "for" loop.
* fold-const.c (fold_binary): Unroll the very first "for"
	loop.

From-SVN: r96003
2005-03-07 03:23:13 +00:00
Kazu Hirata
209eaaffeb * fold-const.c (fold_binary): Remove handling of RANGE_EXPR.
From-SVN: r96002
2005-03-07 03:20:54 +00:00
Kazu Hirata
c1a408fd50 * fold-const.c (fold_unary): Use build1 instead of copy_node.
From-SVN: r95989
2005-03-06 20:14:16 +00:00
Kazu Hirata
e9da788c50 fold-const.c (fold_binary_op_with_conditional_arg): Take decomposed arguments code, type, op0, and op1 instead of t.
* fold-const.c (fold_binary_op_with_conditional_arg): Take
	decomposed arguments code, type, op0, and op1 instead of t.
	(fold_binary): Update a call to fold_range_test.

From-SVN: r95978
2005-03-06 17:23:03 +00:00
Kazu Hirata
e1f04615c7 fold-const.c (fold_range_test): Take decomposed arguments code, type, op0, and op1 instead of t.
* fold-const.c (fold_range_test): Take decomposed arguments
	code, type, op0, and op1 instead of t.
	(fold_binary): Update a call to fold_range_test.

From-SVN: r95977
2005-03-06 17:20:42 +00:00
Kazu Hirata
d7e5b287a0 fold-const.c (optimize_minmax_comparison): Take decomposed arguments code, type, op0, and op1 instead of t.
* fold-const.c (optimize_minmax_comparison): Take decomposed
	arguments code, type, op0, and op1 instead of t.
	(fold_binary): Update a call to optimize_minmax_comparison.

From-SVN: r95971
2005-03-06 14:19:45 +00:00
Kazu Hirata
c933f71e3d * fold-const.c (fold_binary): Use code instead of t.
From-SVN: r95970
2005-03-06 14:18:08 +00:00
Kazu Hirata
7104730324 fold-const.c (fold_binary): Avoid directly using the original expression t as much as possible.
* fold-const.c (fold_binary): Avoid directly using the original
	expression t as much as possible.

From-SVN: r95962
2005-03-06 02:25:03 +00:00
Kazu Hirata
75505450f6 * fold-const.c (fold): Remove handling of binary expressions.
From-SVN: r95961
2005-03-06 00:42:56 +00:00
Kazu Hirata
0aee475150 fold-const.c (fold_binary): New.
* fold-const.c (fold_binary): New.
	(fold): Call fold_binary on binary expressions.

From-SVN: r95938
2005-03-05 18:09:17 +00:00
Kazu Hirata
3ea2c2646e fold-const.c (fold_ternary): Unroll the "for" loop to extract operands.
* fold-const.c (fold_ternary): Unroll the "for" loop to
	extract operands.

From-SVN: r95895
2005-03-04 19:59:45 +00:00
Andrew Pinski
935167332d revert: re PR tree-optimization/15784 (fold misses binary optimization)
2005-03-04  Andrew Pinski  <pinskia@physics.uc.edu>

        Revert for now:
        2005-03-03  James A. Morrison  <phython@gcc.gnu.org>
        PR tree-optimization/15784
        * fold-const.c (fold): Fold ~A + 1 to -1.  Fold -A - 1
        and -1 - A to ~A.

From-SVN: r95880
2005-03-03 22:24:09 -08:00
Kazu Hirata
9bdae6af0e fold-const.c (fold_ternary): New.
* fold-const.c (fold_ternary): New.
	(fold): Call fold_ternary on ternary expressions.  Remove
	handling of ternary expressions.

From-SVN: r95871
2005-03-04 02:50:36 +00:00
James A. Morrison
8d06c80914 re PR tree-optimization/15784 (fold misses binary optimization)
2005-03-03  James A. Morrison  <phython@gcc.gnu.org>

        PR tree-optimization/15784
        * fold-const.c (fold): Fold ~A + 1 to -1.  Fold -A - 1
        and -1 - A to ~A.

From-SVN: r95870
2005-03-04 02:48:30 +00:00
Kazu Hirata
4b58fc4d28 fold-const.c (fold_unary): Avoid directly using the original expression t as much as possible.
* fold-const.c (fold_unary): Avoid directly using the original
	expression t as much as possible.

From-SVN: r95837
2005-03-03 17:30:12 +00:00
Kazu Hirata
af85b8e458 * fold-const.c (fold): Remove handling of unary expressions.
From-SVN: r95836
2005-03-03 17:27:54 +00:00
Kazu Hirata
659d8efa54 fold-const.c (fold_unary): New.
* fold-const.c (fold_unary): New.
	(fold): Call fold_unary on unary expressions.

From-SVN: r95783
2005-03-02 16:07:47 +00:00
Richard Henderson
a0d2281e2d re PR middle-end/19953 (Special-case real + complex arithmetic operation (-ffast-math))
PR middle-end/19953
        * builtins.c (fold_builtin_complex_mul, fold_builtin_complex_div): New.
        (fold_builtin_1): Call them.
        * fold-const.c (fold_complex_mult_parts): Split out from ...
        (fold_complex_mult): ... here.  Fix typo in both imaginary case.
        (fold_complex_div_parts, fold_complex_div): New.
        (fold): Use them.
        * tree.h (fold_complex_mult_parts, fold_complex_div_parts): Declare.

From-SVN: r95511
2005-02-24 12:00:09 -08:00
Roger Sayle
0a9c6fdf03 fold-const.c (constant_boolean_node): Always create values of the specified type...
* fold-const.c (constant_boolean_node): Always create values of
	the specified type, don't bother calling truthvalue_conversion.

From-SVN: r95237
2005-02-18 21:44:18 +00:00
Andrew Pinski
0d56ab3348 re PR middle-end/20030 (Broken arguments access)
2005-02-18  Andrew Pinski  <pinskia@physics.uc.edu>

        PR middle-end/20030
        * fold-const.c (fold_indirect_ref_1): Use the correct index for zero access,
        the lower bound of the array type if it exists.

From-SVN: r95226
2005-02-18 06:31:50 -08:00
James A. Morrison
9ace7f9e63 fold-const.c (invert_truthvalue): <INTEGER_CST>: Call constant_boolean_node.
2005-02-16  James A. Morrison  <phython@gcc.gnu.org>

        * fold-const.c (invert_truthvalue): <INTEGER_CST>: Call
        constant_boolean_node.

From-SVN: r95146
2005-02-17 03:03:32 +00:00
Jakub Jelinek
8940b3b2a7 re PR middle-end/19857 (alignment check of SSE constant fails in simple test program)
PR middle-end/19857
	* fold-const.c (fold): Don't optimize (T)(x & cst) to
	(T)x & (T)cst if (T)cst overflows.
	* convert.c (convert_to_integer) <case POINTER_TYPE>: Pass
	TYPE_UNSIGNED (type) as type_for_size's UNSIGNEDP argument.

	* gcc.dg/tree-ssa/20050215-1.c: New test.
	* gcc.c-torture/execute/20050215-1.c: New test.

From-SVN: r95106
2005-02-16 14:54:30 +01:00
James A. Morrison
40f84775b3 fold-const.c (fold): Fold -(~A) to A + 1.
2005-02-15  James A. Morrison  <phython@gcc.gnu.org>

        * fold-const.c (fold): Fold -(~A) to A + 1.  Fold ~(-A) to A - 1.
        Fold ~(A - 1) and ~(A + -1) to -A.

From-SVN: r95074
2005-02-15 21:58:21 +00:00
Jason Merrill
6a720599bb re-apply fold_indirect_ref patch
From-SVN: r95024
2005-02-14 11:07:16 -05:00
James A. Morrison
623049aa3c re PR tree-optimization/19944 (cris-elf testsuite failures: gcc.dg/pr15784-1.c, gcc.dg/pr15784-2.c)
2005-02-13  James A. Morrison  <phython@gcc.gnu.org>

       PR tree-optimization/19944
       * fold-const.c (fold): Re-add ABS_EXPR folding.

From-SVN: r95002
2005-02-14 02:27:18 +00:00
Jason Merrill
6b708a6bcd temporarily revert last changes
From-SVN: r94987
2005-02-13 12:10:47 -05:00
Jason Merrill
38116e3d1d re PR libmudflap/19319 (Mudflap produce many violations on simple, correct c++ program)
PR mudflap/19319
        * gimplify.c (gimplify_modify_expr_rhs) [CALL_EXPR]: Make return
        slot explicit.

        PR c++/16405
        * fold-const.c (fold_indirect_ref_1): Split out from...
        (build_fold_indirect_ref): Here.
        (fold_indirect_ref): New fn.
        * tree.h: Declare it.
        * gimplify.c (gimplify_compound_lval): Call fold_indirect_ref.
        (gimplify_modify_expr_rhs): Likewise.
        (gimplify_expr): Likewise.

From-SVN: r94979
2005-02-13 01:43:58 -05:00
James A. Morrison
60a8fb5ea9 re PR tree-optimization/14303 ([tree-ssa] gcc.c-torture/execute/20020720-1.c is not fully folded)
2005-02-13  James A. Morrison  <phython@gcc.gnu.org>

       PR tree-optimization/14303
       PR tree-optimization/15784
       * fold-const.c (fold): Fold ABS_EXPR<x> >= 0 to true, when possible.
       Fold ABS_EXPR<x> < 0 to false.  Fold ABS_EXPR<x> == 0 to x == 0 and
       ABS_EXPR<x> != 0 to x != 0.

From-SVN: r94977
2005-02-13 06:21:35 +00:00
Richard Henderson
7e7e470f9b tree-complex.c (expand_complex_libcall): New.
* tree-complex.c (expand_complex_libcall): New.
        (expand_complex_multiplication): Use it for c99 compliance.
        (expand_complex_division): Likewise.
        * fold-const.c (fold_complex_add, fold_complex_mult): New.
        (fold): Call them.
        * builtins.c (built_in_names): Remove const.
        * tree.c (build_common_builtin_nodes): Build complex arithmetic
        builtins.
        * tree.h (BUILT_IN_COMPLEX_MUL_MIN, BUILT_IN_COMPLEX_MUL_MAX): New.
        (BUILT_IN_COMPLEX_DIV_MIN, BUILT_IN_COMPLEX_DIV_MAX): New.
        (built_in_names): Remove const.
        * c-common.c (c_common_type_for_mode): Handle complex modes.
        * flags.h, toplev.c (flag_complex_method): Rename from
        flag_complex_divide_method.
        * libgcc2.c (__divsc3, __divdc3, __divxc3, __divtc3,
        __mulsc3, __muldc3, __mulxc3, __multc3): New.
        * libgcc2.h: Declare them.
        * libgcc-std.ver: Export them.
        * mklibgcc.in (lib2funcs): Build them.

From-SVN: r94909
2005-02-11 16:26:57 -08:00
Jakub Jelinek
97e9692bfb re PR middle-end/19858 (ICE on simple SSE code)
PR middle-end/19858
	* fold-const.c (make_bit_field_ref): If bitpos == 0 and bitsize
	is number of inner's bits, avoid creating a BIT_FIELD_REF.

	* gcc.c-torture/compile/20050210-1.c: New test.

From-SVN: r94892
2005-02-11 22:08:44 +01:00
Roger Sayle
e3bb43c0fe fold-const.c (fold_strip_sign_ops): New function to simplify a floating point expression ignoring the sign of the...
* fold-const.c (fold_strip_sign_ops): New function to simplify a
	floating point expression ignoring the sign of the result.
	(fold) <ABS_EXPR>: Use it to simplify fabs(x).
	(fold) <MULT_EXPR>: Use it to simplify x*x.
	* tree.h (fold_strip_sign_ops): Prototype here.
	* builtins.c (fold_builtin_copysign): Take an additional FNDECL
	argument.  Use fold_strip_sign_ops to simplify the first argument.
	(fold_builtin_pow):  Use fold_strip_sign_ops to simplify the
	first argument when the second argument is an even integer
	constant, but only with -funsafe_math_optimizations.
	(fold_builtin_1): Update call to fold_builtin_copysign.

	* gcc.dg/builtins-48.c: New test case.
	* gcc.dg/builtins-49.c: New test case.
	* gcc.dg/builtins-50.c: New test case.
	* gcc.dg/builtins-51.c: New test case.

From-SVN: r94779
2005-02-09 21:56:35 +00:00
Richard Guenther
0c6c135bb3 fold-const.c (try_move_mult_to_index): Remove redundant type argument.
2005-02-09  Richard Guenther  <rguenth@gcc.gnu.org>

	* fold-const.c (try_move_mult_to_index): Remove redundant
	type argument.  Create ADDR_EXPR with correct type.
	(fold): Update callers of try_move_mult_to_index.  Convert
	result to the appropriate type.

	* g++.dg/tree-ssa/tmmti.C: New testcase.

From-SVN: r94767
2005-02-09 18:15:40 +00:00
Roger Sayle
762297d941 re PR middle-end/19405 (18_support/numeric_limits.cc fails on ppc-darwin (long doubles))
PR middle-end/19405
	* real.h (REAL_MODE_FORMAT_COMPOSITE_P): New macro.
	* fold-const.c (const_binop): Avoid constant folding floating
	point operations in modes that use composite representations.
	* simplify-rtx.c (simplify_binary_operation): Likewise.

From-SVN: r94653
2005-02-03 06:44:35 +00:00
Jeff Law
dc5d4efbce fold-const.c (fold, [...]): Do not lose side effects when optimizing 0 % X.
* fold-const.c (fold, case CEIL_MOD_EXPR): Do not lose side
	effects when optimizing 0 % X.  Do not try to optimize X % 0.

	* gcc.c-torture/execute/20050131-1.c: New test.
	* gcc.dg/wcaselabel.c: New test.

From-SVN: r94516
2005-01-31 20:48:52 -07:00
Dale Johannesen
3b70b82ab9 re PR middle-end/19650 (miscompiling of array acess of (int)(a==2))
2005-01-31  Roger Sayle  <roger@eyesopen.com>
	    Dale Johannesen  <dalej@apple.com>

	PR middle-end/19650
	* fold-const.c (fold_binary_op_with_conditional_arg):
	Make types match original operands, before STRIP_NOPS.

From-SVN: r94485
2005-01-31 18:00:52 +00:00
Richard Guenther
020d90eeaf re PR tree-optimization/15791 (fold misses that two ADDR_EXPR of an arrary obvious not equal)
2005-01-29  Richard Guenther <richard.guenther@uni-tuebingen.de>

	PR tree-optimization/15791
	* fold-const.c (extract_array_ref): New function.
	(fold): Fold comparisons between &a[i] and &a[j] or
	semantically equivalent trees.

	* gcc.dg/tree-ssa/pr15791-1.c: New testcase.
	* gcc.dg/tree-ssa/pr15791-2.c: Likewise.
	* gcc.dg/tree-ssa/pr15791-3.c: Likewise.
	* gcc.dg/tree-ssa/pr15791-4.c: Likewise.
	* gcc.dg/tree-ssa/pr15791-5.c: Likewise.
	* g++.dg/tree-ssa/pr15791-1.C: Likewise.
	* g++.dg/tree-ssa/pr15791-2.C: Likewise.
	* g++.dg/tree-ssa/pr15791-3.C: Likewise.
	* g++.dg/tree-ssa/pr15791-4.C: Likewise.
	* g++.dg/tree-ssa/pr15791-5.C: Likewise.

From-SVN: r94414
2005-01-29 19:25:17 +00:00
Jeff Law
139c978a44 fold-const.c (fold, [...]): Optimize 0 % X.
* fold-const.c (fold, case CEIL_MOD_EXPR): Optimize 0 % X.
        (case FLOOR_MOD_EXPR, ROUND_MOD_EXPR, TRUNC_MOD_EXPR): Similarly.

From-SVN: r94376
2005-01-28 09:35:46 -07:00
Kazu Hirata
35fd3193de alias.c, [...]: Fix comment typos.
* alias.c, c-common.h, c-incpath.c, c-incpath.h, expr.c,
	fold-const.c, gimplify.c, params.h, tree-data-ref.c,
	tree-if-conv.c, tree-nested.c, tree-outof-ssa.c,
	tree-ssa-dom.c, tree-vectorizer.c, tree.def, config/darwin.c,
	config/freebsd-spec.h, config/arm/arm.h,
	config/h8300/h8300.md, config/i386/i386.md,
	config/i386/predicates.md, config/i386/sse.md,
	config/ia64/ia64.c, config/ip2k/ip2k.c, config/s390/s390.c,
	config/vax/vax.md: Fix comment typos.  Follow spelling
	conventions.

From-SVN: r94112
2005-01-23 15:05:49 +00:00
Roger Sayle
d284eb28eb re PR rtl-optimization/576 (gcc performs invalid optimization with float operations when different rounding mode.)
PR rtl-optimization/576
	* real.c (real_arithmetic): Change return type from void to bool
	to return an indication that the result may be inexact.
	* real.h (real_arithmeric): Update prototype.
	* fold-const.c (const_binop):  Don't constant fold floating
	point expressions when the user specifies -frounding-math and
	the result may depend upon the run-time rounding mode.
	(fold_convert_const_real_from_real): Clean-up.
	(fold_initializer): Ignore flag_rounding_math for initializers.
	* simplify-rtx.c (simplify_binary_operation): Likewise, don't
	constant fold FP operations with flag_rounding_math if the
	result may depend upon the run-time rounding mode.

From-SVN: r94020
2005-01-21 17:54:26 +00:00
Eric Botcazou
8c96cd51c7 calls.c (expand_call): Check DECL_BUILT_IN_CLASS before accessing DECL_FUNCTION_CODE.
* calls.c (expand_call): Check DECL_BUILT_IN_CLASS before
	accessing DECL_FUNCTION_CODE.
	* dojump.c (do_jump): Likewise.
	* gimplify.c (gimplify_call_expr): Likewise.
	* predict.c (expr_expected_value): Likewise.
	(strip_builtin_expect): Likewise.
	* tree-inline.c (estimate_num_insns_1): Likewise.
	* tree-ssa-loop-im.c (stmt_cost): Likewise
	* fold-const.c (fold): Test for BUILT_IN_NORMAL.
	(tree_expr_nonnegative_p): Likewise.

From-SVN: r93864
2005-01-18 23:06:59 +00:00
Kazu Hirata
ad616de14c basic-block.h, [...]: Update copyright.
* basic-block.h, c-common.c, c-cppbuiltin.c, c-lang.c,
	c-tree.h, cfgbuild.c, cgraph.c, cgraph.h, collect2.c,
	combine.c, config.gcc, coverage.h, cse.c, cselib.c,
	defaults.h, df.c, dwarf2asm.c, dwarf2out.c, explow.c, expr.c,
	flow.c, fold-const.c, gcse.c, ggc-page.c, gimple-low.c,
	gimplify.c, ifcvt.c, langhooks-def.h, lcm.c, optabs.h,
	output.h, postreload-gcse.c, postreload.c, recog.c,
	resource.c, rtl.def, rtlanal.c, sched-deps.c, sched-rgn.c,
	targhooks.h, toplev.c, tree-data-ref.c, tree-eh.c,
	tree-flow.h, tree-loop-linear.c, tree-mudflap.h, tree-nrv.c,
	tree-optimize.c, tree-outof-ssa.c, tree-pass.h,
	tree-scalar-evolution.c, tree-ssa-copy.c, tree-ssa-dce.c,
	tree-ssa-dse.c, tree-ssa-loop-ivopts.c, tree-ssa-operands.c,
	tree-ssa-pre.c, tree-ssa.c, tree-vectorizer.c, tree.def,
	unwind-dw2-fde-darwin.c, var-tracking.c: Update copyright.

From-SVN: r93827
2005-01-18 11:36:31 +00:00
Jakub Jelinek
75b9aa9f27 re PR tree-optimization/19060 (Miscompiling of if and "long long")
PR tree-optimization/19060
	* tree-ssa-dom.c (extract_range_from_cond) <case LT_EXPR, GT_EXPR>:
	Return 0 if op1 <= TYPE_MIN_VALUE () resp. op1 >= TYPE_MAX_VALUE ().
	(simplify_cond_and_lookup_avail_expr): Add assert for dummy == 0
	and handle extract_range_from_cond returning false.
	* fold-const.c (fold): Optimize comparisons with min/max even for
	width > HOST_BITS_PER_WIDE_INT.

	* gcc.c-torture/execute/20050104-1.c: New test.

From-SVN: r93692
2005-01-15 10:46:10 +01:00
Falk Hueffner
351bae3d7d fold-const.c (fold): Also handle EXACT_DIV_EXPR when folding X/C1 cmpop C2.
* fold-const.c (fold): Also handle EXACT_DIV_EXPR when folding
	X/C1 cmpop C2.

From-SVN: r93121
2005-01-09 23:27:07 +01:00
Jakub Jelinek
2a0958c5f6 re PR tree-optimization/19283 (Bad code generated in final_cleanup)
PR tree-optimization/19283
	* fold-const.c (fold_widened_comparison): Return NULL if shorter_type
	is not shorter than the original type.

	* gcc.c-torture/execute/20050106-1.c: New test.

From-SVN: r93043
2005-01-07 10:08:10 +01:00
Roger Sayle
e3523f56d2 fold-const.c (fold_single_bit_test): Delete unreachable handling of TRUTH_NOT_EXPR.
* fold-const.c (fold_single_bit_test): Delete unreachable handling
	of TRUTH_NOT_EXPR.
	(fold): Don't call fold_single_bit_test with a TRUTH_NOT_EXPR, as
	all the cases handled by it are inverted by invert_truthvalue.

From-SVN: r92909
2005-01-04 21:42:52 +00:00
Richard Henderson
c756af7901 fold-const.c (force_fit_type): Cope with types larger than 2 HWI.
* fold-const.c (force_fit_type): Cope with types larger than 2 HWI.
        (fold_convert_const_int_from_int, fold_convert_const_int_from_real,
        fold_convert_const_real_from_real): Split out from ...
        (fold_convert_const): ... here.

From-SVN: r92890
2005-01-04 02:11:22 -08:00
Andrew Pinski
0e256a822b fold-const.c (fold_build_cleanup_point_expr): For a RETURN_EXPR...
2004-12-28  Andrew Pinski  <pinskia@physics.uc.edu>

        * fold-const.c (fold_build_cleanup_point_expr): For a RETURN_EXPR,
        we only need a cleanup point expression when the expression on the
        left hand side of the MODIFIY_EXPR inside the return has side
        effects.

From-SVN: r92672
2004-12-28 07:56:51 -08:00
Eric Botcazou
2614034eea re PR middle-end/17746 (ICE when building the Ada RTS)
PR middle-end/17746
	* expr.c (get_inner_reference): Add 'keep_aligning' parameter.
	Break on aligning VIEW_CONVERT_EXPR nodes on STRICT_ALIGNMENT
	platforms only if keep_aligning is true.
	(expand_assignment): Adjust call to get_inner_reference.
	(expand_expr_addr_expr_1): Likewise.
	(expand_expr_real_1): Likewise.
	* dojump.c (do_jump): Likewise.
	* dwarf2out.c (loc_descriptor_from_tree_1): Likewise.
	* fold-const.c (optimize_bit_field_compare): Likewise.
	(decode_field_reference): Likewise.
	(split_address_to_core_and_offset): Likewise.
	* tree-ssa-loop-ivopts.c (split_address_cost): Likewise.
	* expr.h (get_inner_reference): Adjust prototype.

ada/
	* trans.c (Attribute_to_gnu): Adjust call to get_inner_reference.
	* utils2.c (build_unary_op): Likewise.

From-SVN: r92549
2004-12-23 13:02:33 +00:00
Richard Henderson
2931700801 fold-const.c (multiple_of_p): Handle BIT_AND_EXPR when BOTTOM is a power of two.
* fold-const.c (multiple_of_p): Handle BIT_AND_EXPR when
        BOTTOM is a power of two.

From-SVN: r92358
2004-12-18 11:03:49 -08:00
Jakub Jelinek
2a1a3cd51f fold-const.c (fold_single_bit_test): If flag_syntax_only, pretend LOAD_EXTEND_OP is not defined.
* fold-const.c (fold_single_bit_test): If flag_syntax_only, pretend
	LOAD_EXTEND_OP is not defined.
	(fold): Likewise.  If flag_syntax_only, don't depend on BITS_PER_WORD.

From-SVN: r92150
2004-12-14 18:59:36 +01:00
Roger Sayle
ec7e2228d1 re PR middle-end/18921 (wrong code with operator "?")
PR middle-end/18921
	* fold-const.c (fold_unwidened_comparison): Use omit_one_operand
	instead of constant_boolean_node as arg0 may have side-effects.

	* gcc.dg/pr18921-1.c: New test case.

From-SVN: r92030
2004-12-11 13:46:37 +00:00
Kazu Hirata
54e4aedb7e c-common.c, [...]: Replace uses of first_rtl_op with TREE_CODE_LENGTH.
gcc/
	* c-common.c, expr.c, fold-const.c, print-tree.c,
	tree-gimple.c, tree-inline.c, tree-pretty-print.c,
	tree-ssa-loop-im.c, tree-ssa-loop-ivopts.c: Replace uses of
	first_rtl_op with TREE_CODE_LENGTH.
	* tree.c (first_rtl_op): Remove.
	Replace uses of first_rtl_op with TREE_CODE_LENGTH.
	* tree.h: Remove the prototype for first_rtl_op.

gcc/cp/
	* pt.c: Replace a use of first_rtl_op with TREE_CODE_LENGTH.

From-SVN: r91818
2004-12-07 21:23:10 +00:00
Eric Christopher
62f4e23f08 fold-const.c (fold_widened_comparison): Make sure that we're passing an INTEGER_TYPE to int_fits_type_p.
2004-11-30  Eric Christopher  <echristo@redhat.com>

	* fold-const.c (fold_widened_comparison): Make sure that we're
	passing an INTEGER_TYPE to int_fits_type_p.
	(fold): Clean up comment.

From-SVN: r91539
2004-11-30 20:33:34 +00:00
Richard Henderson
afe849213e expr.c (get_inner_reference): Handle REAL/IMAGPART_EXPR.
* expr.c (get_inner_reference): Handle REAL/IMAGPART_EXPR.
        (handled_component_p): Likewise.
        * alias.c (can_address_p): Reformat and simplify.  Handle
        REAL/IMAGPART_EXPR.  Do not disable addressability based on
        alias set zero.
        * fold-const.c (build_fold_addr_expr_with_type): Remove duplicate
        check for REAL/IMAGPART_EXPR.
        * gimplify.c (gimplify_compound_lval): Likewise.
        * tree-cfg.c (verify_expr): Likewise.
        * tree-gimple.c (is_gimple_addressable, get_base_address): Likewise.
        * tree-nested.c (build_addr, convert_nonlocal_reference): Likewise.
        (convert_local_reference): Likewise.
        * tree-ssa-loop-ivopts.c (prepare_decl_rtl): Likewise.

From-SVN: r91511
2004-11-29 19:52:37 -08:00
Kazu Hirata
38318b7342 * fold-const.c: Fix a comment typo.
From-SVN: r91393
2004-11-27 20:54:33 +00:00
Jakub Jelinek
47d42ce271 fold-const.c (extract_muldiv_1): If ctype is unsigned and type signed...
* fold-const.c (extract_muldiv_1) <case ABS_EXPR>: If ctype is
	unsigned and type signed, build ABS_EXPR with signed_type (ctype)
	and only afterwards convert to ctype.

	* gcc.c-torture/execute/20041126-1.c: New test.

From-SVN: r91373
2004-11-27 11:13:56 +01:00
Richard Kenner
624b15fa3f fold-const.c (operand_equal_p): Remove kludge allowing ARG0 and ARG1 to be null...
* fold-const.c (operand_equal_p): Remove kludge allowing ARG0 and
	ARG1 to be null; instead define OP_SAME and OP_SAME_NULL and use them.

From-SVN: r91170
2004-11-24 10:57:08 -05:00
Roger Sayle
b52d5eaa44 fold-const.c (nondestructive_fold_binary_to_constant): Rename to fold_binary_to_constant.
* fold-const.c (nondestructive_fold_binary_to_constant): Rename
	to fold_binary_to_constant.
	(nondestructive_fold_unary_to_constant): Likewise, rename to
	fold_unary_to_constant.
	(fold_relational_hi_lo): Update call to fold_binary_to_constant.
	* tree.h (nondestructive_fold_binary_to_constant): Update prototype.
	(nondestructive_fold_unary_to_constant): Likewise.
	* tree-ssa-ccp.c (ccp_fold): Update calls to fold_unary_to_constant
	and fold_binary_to_constant.
	* tree-ssa-loop-niter.c (EXEC_BINARY, EXEC_UNARY): Delete macros.
	(inverse, number_of_iterations_cond): Replace uses of EXEC_BINARY
	and EXEC_UNARY with calls to fold_*nary_to_constant.
	* tree-ssa-loop-ivopts.c (EXEC_BINARY, EXEC_UNARY): Delete macros.
	(idx_find_step): Replace uses of EXEC_BINARY with calls to
	fold_binary_to_constant.

From-SVN: r91063
2004-11-23 01:27:42 +00:00