Commit Graph

937 Commits

Author SHA1 Message Date
Diego Novillo
227858d1e9 [multiple changes]
2005-06-01  Diego Novillo  <dnovillo@redhat.com>

	PR 14341, PR 21332, PR 20701, PR 21029, PR 21086, PR 21090
	PR 21289, PR 21348, PR 21367, PR 21368, PR 21458.
	* fold-const.c (invert_tree_comparison): Make extern.
	* tree-flow.h (enum value_range_type): Move to tree-ssa-propagate.
	(struct value_range_def): Limewise.
	(get_value_range): Remove.
	(dump_value_range): Remove.
	(dump_all_value_ranges): Remove.
	(debug_all_value_ranges): Remove.
	(vrp_evaluate_conditional): Declare.
	* tree-ssa-propagate.c (struct prop_stats_d): Add field
	num_pred_folded.
	(substitute_and_fold): Add argument use_ranges_p.
	Update all callers.
	If use_ranges_p is true, call fold_predicate_in to fold
	predicates using range information.
	Ignore ASSERT_EXPRs.
	Change debugging output to only show statements that have been
	folded.
	(replace_phi_args_in): Move debugging output code from
	substitute and fold.
	(fold_predicate_in): New local function.
	* tree-ssa-propagate.h (enum value_range_type): Move from
	tree-flow.h.
	(struct value_range_d): Likewise.
	Add field 'equiv'.
	(value_range_t): Rename from value_range.
	* tree-vrp.c (found_in_subgraph): Rename from found.
	(get_opposite_operand): Remove.
	(struct assert_locus_d): Declare.
	(assert_locus_t): Declare.
	(need_assert_for): Declare.
	(asserts_for): Declare.
	(blocks_visited): Declare.
	(vr_value): Declare.
	(set_value_range): Add argument 'equiv'.
	Don't drop to VARYING ranges that cover all values in the
	type.
	Make deep copy of equivalence set 'equiv'.
	(copy_value_range): New local function.
	(set_value_range_to_undefined): New local function.
	(compare_values): Return -2 if either value has overflowed.
	(range_includes_zero_p): New local function.
	(extract_range_from_assert): Flip the predicate code if the
	name being asserted is on the RHS of the predicate.
	Avoid creating unnecessary symbolic ranges if the comparison
	includes another name with a known numeric range.
	Update the equivalnce set of the new range when asserting
	EQ_EXPR predicates.
	(extract_range_from_ssa_name): Update the equivalence set of
	the new range with VAR.
	(extract_range_from_binary_expr): Also handle TRUTH_*_EXPR.
	If -fwrapv is used, set the resulting range to VARYING if the
	operation overflows.  Otherwise, use TYPE_MIN_VALUE and
	TYPE_MAX_VALUE to represent -INF and +INF.
	Fix handling of *_DIV_EXPR.
	(extract_range_from_unary_expr): Handle MINUS_EXPR and
	ABS_EXPR properly by switching the range around if necessary.
	(extract_range_from_comparison): New local function.
	(extract_range_from_expr): Call it.
	(adjust_range_with_scev): Do not adjust the range if using
	wrapping arithmetic (-fwrapv).
	(dump_value_range): Also show equivalence set.
	Show -INF and +INF for TYPE_MIN_VALUE and TYPE_MAX_VALUE.
	(build_assert_expr_for): Also build ASSERT_EXPR for EQ_EXPR.
	(infer_value_range): Change return value to bool.
	Add arguments 'comp_code_p' and 'val_p'.
	Do not attempt to infer ranges from statements that may throw.
	Store the comparison code in comp_code_p.
	Store the other operand to be used in the predicate in val_p.
	(dump_asserts_for): New.
	(debug_asserts_for): New.
	(dump_all_asserts): New.
	(debug_all_asserts): New.
	(register_new_assert_for): New.
	(register_edge_assert_for): New.
	(find_conditional_asserts): New.
	(find_assert_locations): New.
	(process_assert_insertions_for): New.
	(process_assert_insertions): New.
	(insert_range_assertions): Initialize found_in_subgraph,
	blocks_visited, need_assert_for and asserts_for.
	Call find_assert_locations and process_assert_insertions.
	(remove_range_assertions): Add more documentation.
	(vrp_initialize): Change return type to void.
	Do not try to guess if running VRP is worth it.
	(compare_name_with_value): New.
	(compare_names): New.
	(vrp_evaluate_conditional): Add argument 'use_equiv_p'.  If
	use_equiv_p is true, call compare_names and
	compare_name_with_value to compare all the ranges for every
	name in the equivalence set of the predicate operands.
	Update all callers.
	(vrp_meet): Try harder not to derive a VARYING range.
	If two values meet, the resulting equivalence set is the
	intersection of the two equivalence sets.
	(vrp_visit_phi_node): Call copy_value_range to get the current
	range information of the LHS.
	(vrp_finalize): Create a value vector representing all the
	names that ended up with exactly one value in their range.
	Call substitute_and_fold.
	(execute_vrp): Document equivalence sets in ranges.
	* tree.h (SSA_NAME_VALUE_RANGE): Remove.
	(struct tree_ssa_name): Remove field value_range.
	(invert_tree_comparison): Declare.

testsuite/ChangeLog

2005-06-01  Diego Novillo  <dnovillo@redhat.com>

	PR 14341, PR 21332, PR 20701, PR 21086, PR 21090
	PR 21289, PR 21348, PR 21367, PR 21368, PR 21458.
	* gcc.dg/tree-ssa/pr14341.c: New test.
	* gcc.dg/tree-ssa/pr14841.c: New test.
	* gcc.dg/tree-ssa/pr20701.c: New test.
	* gcc.dg/tree-ssa/pr21086.c: New test.
	* gcc.dg/tree-ssa/pr21090.c: New test.
	* gcc.dg/tree-ssa/pr21332.c: New test.
	* gcc.dg/tree-ssa/pr21458.c: New test.
	* gcc.dg/tree-ssa/pr21658.c: New test.
	* gcc.dg/tree-ssa/vrp01.c: New test.
	* gcc.dg/tree-ssa/vrp02.c: New test.
	* gcc.dg/tree-ssa/vrp03.c: New test.
	* gcc.dg/tree-ssa/vrp04.c: New test.
	* gcc.dg/tree-ssa/vrp05.c: New test.
	* gcc.dg/tree-ssa/vrp06.c: New test.
	* gcc.dg/tree-ssa/vrp07.c: New test.
	* gcc.dg/tree-ssa/vrp08.c: New test.
	* gcc.dg/tree-ssa/vrp09.c: New test.
	* gcc.dg/tree-ssa/vrp10.c: New test.
	* gcc.dg/tree-ssa/vrp11.c: New test.
	* gcc.dg/tree-ssa/vrp12.c: New test.
	* gcc.dg/tree-ssa/vrp13.c: New test.

2005-06-01  Alexandre Oliva  <aoliva@redhat.com>

	PR 21029
	* gcc.dg/tree-ssa/pr21029.c: New test.

From-SVN: r100478
2005-06-01 22:57:15 -04:00
Richard Guenther
3bedcc8967 stmt.c (expand_case): Use build_int_cst.
2005-06-01  Richard Guenther  <rguenth@gcc.gnu.org>

	* stmt.c (expand_case): Use build_int_cst.
	(node_has_low_bound): Likewise, and correct type mismatch.
	(node_has_high_bound): Likewise.
	* fold-const.c (fold_binary): Ensure we build trees
	with the correct types - undo what STRIP_NOPS possibly did.

From-SVN: r100459
2005-06-01 18:51:12 +00:00
Richard Guenther
095ecc24ec tree.h (fold_indirect_ref_1): Export from fold-const.c.
2005-06-01  Richard Guenther  <rguenth@gcc.gnu.org>

	* tree.h (fold_indirect_ref_1): Export from fold-const.c.
	* fold-const.c (fold_indirect_ref_1): No longer static.
	* tree-inline.c (copy_body_r): Use fold_indirect_ref_1 for
	folding, if possible.

From-SVN: r100458
2005-06-01 18:43:02 +00:00
Jakub Jelinek
dcd25113c6 * fold-const.c (fold_ternary): Optimize BIT_FIELD_REF of VECTOR_CST.
From-SVN: r100442
2005-06-01 12:13:36 +02:00
Richard Guenther
d699d76aa7 fold-const.c (fold_binary): Fix types in strlen vs.
2005-06-01  Richard Guenther  <rguenth@gcc.gnu.org>

	* fold-const.c (fold_binary): Fix types in strlen vs.
	zero comparison folding.

From-SVN: r100436
2005-06-01 09:34:15 +00:00
Andrew Pinski
d763bb1005 [multiple changes]
2005-05-31  Andrew pinski  <pinskia@physics.uc.edu>

        PR middle-end/20931
        * g++.dg/opt/pr20931.C: New test.

2005-05-31  Andrew Pinski  <pinskia@physics.uc.edu>

        PR middle-end/20931
        PR middle-end/20946
        * fold-const.c (fold_checksum_tree): Copy types also if
        TYPE_CONTAINS_PLACEHOLDER_INTERNAL is set.
        Don't call fold_checksum_tree for TREE_LIST's TREE_CHAIN
        first.
        Tail recurse TREE_LIST's TREE_CHAIN.

From-SVN: r100397
2005-05-31 09:40:09 -07:00
Jeff Law
4ea73bfac3 fold-const.c (extract_array_ref): Handle more cases, do some useful canonicalization of the base.
* fold-const.c (extract_array_ref): Handle more cases,
        do some useful canonicalization of the base.
        (fold_binary): Explicitly deal with arrays of zero-sized
        structures during folding of &a[i] == &a[j].

        * gcc.dg/tree-ssa/foldaddr-1.c: New test.

From-SVN: r100391
2005-05-31 08:33:29 -06:00
Richard Guenther
30d2e94365 [multiple changes]
2005-05-18  Richard Guenther  <rguenth@gcc.gnu.org>

        * tree-inline.c (copy_body_r): Manually fold *& to deal
        with ADDR_EXPRs with mismatched types for now.

2005-05-17  Richard Guenther  <rguenth@gcc.gnu.org>

        * gimplify.c (fold_indirect_ref_rhs): New function.
        (gimplify_modify_expr_rhs): Use it instead of pessimistic
        fold_indirect_ref.

2005-05-15  Richard Guenther  <rguenth@gcc.gnu.org>

        * fold-const.c (fold_indirect_ref_1): Add type argument;
        make sure the resulting expression is of this type.
        (build_fold_indirect_ref, fold_indirect_ref): Adjust callers.

From-SVN: r100267
2005-05-27 11:23:30 -06:00
Roger Sayle
c10166c437 re PR middle-end/21709 (ICE on compile-time complex NaN)
PR middle-end/21709
	* fold-const.c (const_binop): Check for division by zero during
	complex division.

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

From-SVN: r100188
2005-05-26 05:51:22 +00:00
Paolo Bonzini
f8912a553a Makefile.in: Add tree-ssa-math-opts.c.
gcc:
2005-05-17  Paolo Bonzini  <bonzini@gnu.org>

	* Makefile.in: Add tree-ssa-math-opts.c.
	* expr.c (expand_expr_real_1) <case RDIV_EXPR>: Never emit as a*(1/b).
	* fold-const.c (distribute_real_division): New.
	(fold_binary) <case PLUS_EXPR, case MINUS_EXPR>: Use it.
	* tree-pass.h (pass_cse_reciprocals): New.
	* tree-optimize.c (init_tree_optimization_passes): Run it.
	* tree-ssa-math-opts.c: New file.
	* doc/passes.texi: Document the new pass.

gcc/testsuite:
2005-05-17  Paolo Bonzini  <bonzini@gnu.org>

	* gcc.dg/fold-div-1.c, gcc.dg/recip-1.c, gcc.dg/recip-2.c: New.

From-SVN: r99826
2005-05-17 09:55:44 +00:00
Richard Guenther
6033ae2aeb revert: fold-const.c (fold_indirect_ref_1): Avoid removing NOP_EXPRs with type qualifiers like const.
2005-05-14  Richard Guenther  <rguenth@gcc.gnu.org>

 	Revert
 	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: r99699
2005-05-14 15:42:01 +00:00
Richard Guenther
03b0db0a4e fold-const.c (div_if_zero_remainder): New function.
2005-05-14  Richard Guenther  <rguenth@gcc.gnu.org>

	* fold-const.c (div_if_zero_remainder): New function.
	(try_move_mult_to_index): Use it.

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

From-SVN: r99694
2005-05-14 12:53:20 +00:00
Kazu Hirata
9d6aab7ef8 * fold-const.c, libgcov.c: Fix comment typos.
From-SVN: r99582
2005-05-11 15:21:28 +00:00
Richard Guenther
c554294001 re PR middle-end/19807 (fold does not fold &a[4]-1)
2005-05-11  Richard Guenther  <rguenth@gcc.gnu.org>

	PR middle-end/19807
	PR tree-optimization/19639
	* fold-const.c (try_move_mult_to_index): Handle INTEGER_CST
	and generic summands for char* as s * delta, too, folding &a[i]
	CODE x to &a[i CODE x/s].  Use tree_int_cst_equal
	for comparison of steps.  Convert types for index addition.
	(fold_binary): Adjust the callers to always dispatch to
	try_move_mult_to_index.
	* tree-ssa-propagate.c (set_rhs): Avoid setting rhs to
	expr with non-gimple ARRAY_REF offset.

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

From-SVN: r99568
2005-05-11 08:14:44 +00:00
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
Zdenek Dvorak
1d481ba83c re PR tree-optimization/18529 (When the lower bound of a loop is non-constant we cannot find the number of iterations)
PR tree-optimization/18529
	* fold-const.c (fold_to_nonsharp_ineq_using_bound): New function.
	(simple_operand_p): Use STRIP_NOPS.  Consider SSA names simple.
	(fold): Call fold_to_nonsharp_ineq_using_bound.
	* tree-ssa-loop-niter.c (simplify_replace_tree): New function.
	(number_of_iterations_cond): Fold the expressions before futher
	processing.
	(tree_simplify_using_condition): Handle case when cond or expr is
	an EQ_EXPR specially.

From-SVN: r91031
2004-11-22 21:33:47 +00:00
Nathan Sidwell
b8610a5376 re PR rtl-optimization/17107 (Opportunity to improve code generated for complex logical expression)
PR target/17107
	* fold-const.c (RANGE_TEST_NON_SHORT_CIRCUIT): Rename to ...
	(LOGICAL_OP_NON_SHORT_CIRCUIT): ... here.
	(fold_range_test): Adjust.
	(fold_truthop): Use it.
	* config/rs6000/rs6000.h (RANGE_TEST_NON_SHORT_CIRCUIT): Rename to ...
	(LOGICAL_OP_NON_SHORT_CIRCUIT): ... here.

From-SVN: r90857
2004-11-18 12:09:43 +00:00
Zdenek Dvorak
18522563e0 re PR tree-optimization/18431 (Code for arrays and pointers are not the same)
PR tree-optimization/18431
	* fold-const.c (associate_trees): Do not produce x + 0.
	(fold_widened_comparison, fold_sign_changed_comparison): New functions.
	(fold): Use them.
	* tree-ssa-loop-niter.c (upper_bound_in_type, lower_bound_in_type):
	Moved ...
	* tree.c (upper_bound_in_type, lower_bound_in_type): Here.
	* tree.h (upper_bound_in_type, lower_bound_in_type): Declare.

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

From-SVN: r90646
2004-11-15 00:18:37 +00:00
Zdenek Dvorak
7299dbfbf1 tree-ssa-loop-ivopts.c (get_address_cost): Add address elements in right order.
* tree-ssa-loop-ivopts.c (get_address_cost): Add address elements in
	right order.
	(force_var_cost): Determine cost of addition and multiplication more
	precisely.
	(get_computation_cost_at): Add cost for computing address elements to
	the final cost.

	* fold-const.c (fold): Attempt to use ptr_difference_const whenever
	one of the arguments of MINUS_EXPR is an address.
	(split_address_to_core_and_offset): New function.
	(ptr_difference_const): Handle case when one of the operands is a
	pointer.
	* tree-ssa-loop-ivopts.c (determine_base_object): Fold &*addr.
	(ptr_difference_cost): Pass addresses instead of objects to
	ptr_difference_const.

From-SVN: r90451
2004-11-10 20:49:55 +00:00
Kazu Hirata
49995c8ed1 fold-const.c (pedantic_non_lvalue): Make it static.
* fold-const.c (pedantic_non_lvalue): Make it static.
	* tree.h: Remove the corresponding prototype.

From-SVN: r90352
2004-11-09 17:36:26 +00:00
Kazu Hirata
703201ea4e fold-const.c (non_lvalue): Don't construct NON_LVALUE_EXPR if we are in GIMPLE.
* fold-const.c (non_lvalue): Don't construct NON_LVALUE_EXPR
	if we are in GIMPLE.

From-SVN: r90187
2004-11-06 19:16:59 +00:00
Zdenek Dvorak
a63c0d1329 fold-const.c (fold): Reassociate also (x - mult) + mult and (mult - x) + mult.
* fold-const.c (fold): Reassociate also (x - mult) + mult and
	(mult - x) + mult.  Cast operands of expression after applying
	distributive law to the correct types.  Apply distributive law
	to a * c - b * c for all non-float types.

From-SVN: r90000
2004-11-02 21:31:20 +00:00
Zdenek Dvorak
38b0dcb81e re PR tree-optimization/18048 (mgrid loop performance regression with ivopts (register pressure))
PR tree-optimization/18048
	* fold-const.c (try_move_mult_to_index): New function.
	(fold): Use try_move_mult_to_index.
	* tree-ssa-loop-ivopts.c (try_add_cand_for): Prefer common candidates.
	* tree-ssa-loop-niter.c (number_of_iterations_cond): Produce
	an all-ones unsigned constant without extra bits.
	* tree.c (build_low_bits_mask): New function.
	* tree.h (build_low_bits_mask): Declare.

From-SVN: r89708
2004-10-27 20:27:20 +00:00
Andrew Pinski
0ad28ddea6 re PR c++/17554 (crashes in on kopete build (KDE's kdenetwork))
2004-10-10  Andrew Pinski  <pinskia@physics.uc.edu>

        PR c++/17554
        part of c++/17657
        middle-end/17703
        * semantics.c (maybe_cleanup_point_expr): Call
        fold_build_cleanup_point_expr.
        (maybe_cleanup_point_expr_void): New function.
        (add_decl_expr): Call maybe_cleanup_point_expr_void.
        (finish_expr_stmt): Likewise.
        (finish_return_stmt): Likewise.
        (finish_for_expr): Likewise.
        (finish_asm_stmt): Likewise.
        * typeck.c (condition_conversion): Call
        fold_build_cleanup_point_expr.

2004-10-10  Andrew Pinski  <pinskia@physics.uc.edu>

        PR middle-end/17703
        part of PR c++/17657
        * fold-const.c (fold_build_cleanup_point_expr): New function.
        * tree.h (fold_build_cleanup_point_expr): Prototype.

2004-10-10  Andrew Pinski  <pinskia@physics.uc.edu>

        PR c++/17554
        * g++.dg/init/for3.C: New test.

        PR c++/17657
        * g++.dg/opt/switch2.C: New test.

        PR middle-end/17703
        * g++.dg/warn/Wreturn-2.C: New test.

From-SVN: r88869
2004-10-10 20:42:09 -07:00
Roger Sayle
d2e74f6fd5 re PR middle-end/17894 (div/compare folding incorrect)
PR middle-end/17894
	* fold-const.c (fold_div_compare): When optimizing X/C1 op C2, the
	relational comparison operator op needs to be swapped/reversed when
	C1 is negative.  i.e. X/-10 < 1 becomes X >= -9, not X < -9.

	* gcc.c-torture/execute/divcmp-4.c: New test case.

From-SVN: r88818
2004-10-09 15:48:24 +00:00
Kazu Hirata
24109c9f28 fold-const.c (fold): When seeing if D & ~C != 0 to fold (A & C) == D into 0, fold ~C.
* fold-const.c (fold) [EQ_EXPR]: When seeing if D & ~C != 0 to
	fold (A & C) == D into 0, fold ~C.  Similarly, for the case
	where | is used instead of &.

	* testsuite/gcc.dg/tree-ssa/20041002-1.c: New.

From-SVN: r88449
2004-10-03 15:31:54 +00:00
Eric Christopher
3e6688a77f fold-const.c (tree_swap_operands_p): Remove duplicated code.
2004-09-29  Eric Christopher  <echristo@redhat.com>

	* fold-const.c (tree_swap_operands_p): Remove duplicated code.

From-SVN: r88299
2004-09-29 19:47:32 +00:00
Kazu Hirata
ea4b78487c c-typeck.c, [...]: Fix comment formatting.
* c-typeck.c, defaults.h, dwarf.h, dwarf2out.c, fold-const.c,
	gthr-dce.h, gthr-posix.h, gthr-solaris.h, gthr-win32.h,
	lambda-code.c, lambda-mat.c, libgcc2.c, stmt.c,
	tree-ssa-pre.c, tree-vn.c, tree.h: Fix comment formatting.

From-SVN: r88102
2004-09-25 14:36:40 +00:00
Dorit Naishlos
7ccf35ed17 tree.def (ALIGN_INDIRECT_REF, [...]): New tree-codes.
2004-09-23  Dorit Naishlos <dorit@il.ibm.com>

        * tree.def (ALIGN_INDIRECT_REF, MISALIGNED_INDIRECT_REF):
        New tree-codes.
        * tree.h (REF_ORIGINAL): Consider ALIGN_INDIRECT_REF and
        MISALIGNED_INDIRECT_REF.
        * alias.c (get_alias_set, nonoverlapping_memrefs_p): Likewise.
        * emit-rtl.c (mem_expr_equal_p, set_mem_attributes_minus_bitpos):
        Likewise.
        * expr.c (safe_from_p, expand_expr_real_1, rewrite_address_base)
        (find_interesting_uses_address): Likewise.
        * fold-const.c (non_lvalue, operand_equal_p): Likewise.
        (build_fold_addr_expr_with_type): Likewise.
        * gimplify.c (gimplify_addr_expr, gimplify_expr): Likewise.
        * print-rtl.c (print_mem_expr): Likewise.
        * tree-dump.c (dequeue_and_dump): Likewise.
        * tree-eh.c (tree_could_trap_p): Likewise.
        * tree-gimple.c (is_gimple_addressable, get_base_address): Likewise.
        * tree-pretty-print.c (op_prio, op_symbol, dump_generic_node): Likewise.
        * tree-ssa-alias.c (find_ptr_dereference, ptr_is_dereferenced_by):
        Likewise.
        * tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Likewise.
        * tree-ssa-dom.c (record_equivalences_from_stmt): Likewise.
        * tree-ssa-loop-im.c (for_each_index, is_call_clobbered_ref): Likewise.
        * tree-ssa-loop-ivopts.c (find_interesting_uses_address): Likewise.
        (add_address_candidates, rewrite_address_base): Likewise.
        * tree-ssa-operands.c (get_expr_operands, get_indirect_ref_operands):
        Likewise.
        * tree.c (staticp, build1_stat): Likewise.

        * tree.def (REALIGN_LOAD_EXPR, REALIGN_STORE_EXPR): New tree-codes.
        * tree-pretty-print.c (dump_generic_node): Consider REALIGN_LOAD_EXPR.
        * tree-ssa-operands.c (get_expr_operands): Likewise.
        * expr.c (expand_expr_real_1): Likewise.

        * optabs.h (vec_realign_store_optab, vec_realign_load_optab): New
        optabs.
        (OTI_vec_realign_store, OTI_vec_realign_load): New optab_index values
        for the new optabs.
        (expand_ternary_op): New function.
        * genopinit.c (optabs): Handle the new optabs.
        * optabs.c (optab_for_tree_code): Add cases for the new tree-codes.
        (init_optabs): Initialize vec_realign_load_optab.
        (expand_ternary_op): New functions.

        * target-def.h (TARGET_VECTORIZE): New member for struct gcc_target.
        (TARGET_VECTORIZE_MISALIGNED_MEM_OK): New member for targetm.vectorize.
        (TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD): Likewise.
        (TARGET_VECTORIZE_BUILTIN_MASK_FOR_STORE): Likewise.
        * target.h (struct vectorize): New member for struct gcc_target.
        (misaligned_mem_ok): New member for targetm.vectorize.
        (builtin_mask_for_load): Likewise.
        (builtin_mask_for_store): Likewise.
        * targethooks.c (default_vect_misaligned_mem_ok): New function.
        * targethooks.h (default_vect_misaligned_mem_ok): New function.

        * config/rs6000/altivec.md (build_vector_mask_for_load): New
        define_expand.
        (vec_realign_load_v4si, vec_realign_load_v4sf, vec_realign_load_v8hi)
        (vec_realign_load_v16qi): New define_insn.
        * config/rs6000/rs6000.h (ALTIVEC_BUILTIN_MASK_FOR_LOAD):
        (ALTIVEC_BUILTIN_MASK_FOR_STORE): New target builtins.
        * config/rs6000/rs6000.c (altivec_builtin_mask_for_load):
        (altivec_builtin_mask_for_store): New variables.
        (rs6000_builtin_mask_for_load): New function. Implements
        TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD.
        (rs6000_builtin_mask_for_store): New function. Implements
        TARGET_VECTORIZE_BUILTIN_MASK_FOR_STORE.
        (rs6000_expand_builtin): Expand the target builtins
        builtin_mask_for_load and builtin_mask_for_store.
        (altivec_init_builtins): Initialize the new target builtins.
        * config/i386/i386.c (ix86_misaligned_mem_ok): New function.
        Implements the target hook TARGET_VECTORIZE_MISALIGNED_MEM_OK.

        * tree-vectorizer.c (vect_create_data_ref): Renamed to
        vect_create_data_ref_ptr. Returns a pointer instead of an array-ref.
        (vect_create_addr_base_for_vector_ref): Additional argument (offset).
        (vectorizable_store): Call vect_create_data_ref_ptr with additional
        arguments, and create an indirect_ref with its return value data_ref.
        Check aligned_access_p.
        (vectorizable_load): Handle misaligned loads, using software-pipelined
        scheme with REALIGN_LOAD_EXPR and ALIGN_INDIRECT_REF if
        vec_realign_load_optab is supported, or using a scheme without
        software-pipelining with MISALIGNED_INDIRECT_REF if the target hook
        misaligned_mem_ok is supported.

        (vect_finish_stmt_generation): Typo.
        (vect_enhance_data_refs_alignment): Rename loop_vinfo to loop_info.
        (vect_analyze_data_refs_alignment): Don't fail vectorization in the
        presence of misaligned loads.
        (vect_analyze_data_ref_access): Add check for constant init.
        (vect_get_symbl_and_dr): Remove duplicate line.
        * tree-vectorizer.h (DR_MISALIGNMENT): Add comment.

From-SVN: r87948
2004-09-23 14:34:35 +00:00
Diego Novillo
6a97296a06 fold-const.c (fold): Avoid non INTEGER_TYPEs when widening operands in an integer comparison.
* fold-const.c (fold): Avoid non INTEGER_TYPEs when widening
	operands in an integer comparison.
	* tree-cfg.c (find_taken_edge): Call fold() to determine
	whether the predicate is known.

From-SVN: r87855
2004-09-22 07:40:12 -04:00
Jeffrey D. Oldham
6615c44615 alias.c (find_base_decl): Remove unreachable case '3' block.
2004-09-17  Jeffrey D. Oldham  <oldham@codesourcery.com>
	    Zack Weinberg  <zack@codesourcery.com>

	* alias.c (find_base_decl): Remove unreachable case '3' block.
	* expr.c (safe_from_p): Abort if passed a type.
	* tree-gimple.c (recalculate_side_effects): Abort if passed
	anything other than an expression.
	* tree-ssa-pre.c (phi_translate): Return expr immediately if
	is_gimple_min_invariant is true for it.  Reorder cases for clarity.
	Abort on un-handled tree classes.
	(valid_in_set): Likewise.
	* tree.c (tree_code_class_strings): New static data.

	* tree.h (enum tree_code_class): New.
	(tree_code_class_strings): Declare.
	(TREE_CODE_CLASS_STRING, EXCEPTIONAL_CLASS_P, CONSTANT_CLASS_P)
	(REFERENCE_CLASS_P, COMPARISON_CLASS_P, UNARY_CLASS_P, BINARY_CLASS_P)
	(STATEMENT_CLASS_P, EXPRESSION_CLASS_P, IS_TYPE_OR_DECL_P): New macros.
	(TYPE_P, DECL_P, IS_NON_TYPE_CODE_CLASS, IS_EXPR_CODE_CLASS)
	(checking macros, EXPR_LOCATION, SET_EXPR_LOCATION, EXPR_LOCUS): Update.

	* tree.def, c-common.def, objc/objc-tree.def: Use
	tree_code_class enumeration constants instead of code letters.

	* alias.c, builtins.c, c-common.c, c-format.c, c-lang.c, c-pragma.c
	* c-typeck.c, cgraphunit.c, convert.c, dbxout.c, dwarf2out.c
	* emit-rtl.c expr.c, fold-const.c, gimplify.c, lambda-code.c
	* langhooks.c, langhooks.h, predict.c, print-tree.c, reload1.c, stmt.c
	* tree-browser.c, tree-cfg.c, tree-chrec.c, tree-complex.c, tree-dfa.c
	* tree-dump.c, tree-eh.c, tree-gimple.c, tree-inline.c, tree-nested.c
	* tree-outof-ssa.c, tree-pretty-print.c, tree-sra.c, tree-ssa-ccp.c
	* tree-ssa-dce.c, tree-ssa-dom.c, tree-ssa-forwprop.c, tree-ssa-live.c
	* tree-ssa-loop-im.c, tree-ssa-loop-ivopts.c, tree-ssa-operands.c
	* tree-ssa-phiopt.c, tree-ssa-pre.c, tree-ssa-propagate.c
	* tree-ssa.c, tree-ssanames.c, tree-tailcall.c, tree.c, varasm.c
	* config/sol2-c.c, config/arm/arm.c, config/i386/winnt.c
	* config/pa/pa.c, config/pa/pa.h, config/sh/sh.c, objc/objc-lang.c
	Update to match.

	* LANGUAGES: Add note about change.

ada:
	* ada-tree.def: Use tree_code_class enumeration constants
	instead of code letters.
	* ada-tree.h, decl.c, misc.c, trans.c, utils.c, utils2.c:
	Update for new tree-class enumeration constants.

cp:
	* cp-tree.def: Use tree_code_class enumeration constants
	instead of code letters.
	* call.c, class.c, cp-gimplify.c, cp-lang.c, cxx-pretty-print.c
	* mangle.c, pt.c, semantics.c, tree.c, typeck.c:
	Update for new tree-class enumeration constants.

fortran:
	* f95-lang.c, trans-expr.c, trans.c: Update for new tree-class
	enumeration constants.

java:
	* java-tree.def: Use tree_code_class enumeration constants
	instead of code letters.
	* java-gimplify.c, jcf-write.c, lang.c, parse.y: Update for
	new tree-class enumeration constants.

treelang:
	* treetree.c: Update for new tree-class enumeration constants.

From-SVN: r87675
2004-09-17 21:55:02 +00:00
Zdenek Dvorak
2f4675b482 fold-const.c (fold): Fold difference of addresses.
* fold-const.c (fold): Fold difference of addresses.
	(ptr_difference_const): Moved from tree-ssa-loop-ivopts, based on
	get_inner_reference.
	* tree-ssa-loop-ivopts.c (peel_address): Removed.
	(ptr_difference_const): Moved to fold-const.c.
	(split_address_cost): Use get_inner_reference instead of peel_address.
	(ptr_difference_cost): Change type of diff to HOST_WIDE_INT.
	* tree.h (ptr_difference_const): Export.

	* tree-ssa-loop-ivopts.c (dump_iv, dump_use, dump_cand): Add induction
	variable type to the dump.  Fix indentation.
	(idx_find_step): Handle nonconstant array_ref_element_size and
	array_ref_low_bound.
	(idx_record_use): Handle array_ref_element_size and
	array_ref_low_bound.
	(find_interesting_uses_stmt): Handle memory = nontrivial_expression
	statements correctly.
	(get_computation_at, iv_value): Do not unshare expressions here.
	(rewrite_use_outer): Unshare the expression before it is emitted
	to code.
	* tree-ssa-loop-niter.c (unsigned_type_for, signed_type_for):
	Moved to tree.c.
	* tree.c (unsigned_type_for, signed_type_for): Moved from
	tree-ssa-loop-niter.c.  Use langhooks.
	* tree.h (signed_type_for): Export.

From-SVN: r87601
2004-09-16 14:58:01 +00:00
Joseph Myers
971801fff6 attribs.c, [...]: Use %<, %> and %q for quoting in diagnostics going through pretty-print.c.
gcc:
	* attribs.c, builtins.c, c-format.c, c-pch.c, coverage.c,
	except.c, fold-const.c, function.c, langhooks.c, params.c,
	reload.c, reload1.c, stmt.c, stor-layout.c, toplev.c, tree-cfg.c,
	tree-dump.c, tree-mudflap.c, tree.c, varasm.c: Use %<, %> and %q
	for quoting in diagnostics going through pretty-print.c.  Use ''
	for quoting in other diagnostic text.
	* langhooks.c: Include intl.h.  Mark text locating diagnostics for
	translation.
	* Makefile.in (langhooks.o): Update dependencies.
	* pretty-print.h (pp_printf): Mark as accepting GCC diagnostic
	formats.

gcc/testsuite:
	* g++.dg/ext/member-attr.C, g++.dg/warn/deprecated.C,
	gcc.dg/deprecated.c, gcc.dg/noreturn-1.c, gcc.dg/noreturn-4.c:
	Update expected messages.

libmudflap:
	* testsuite/libmudflap.c/pass35-frag.c: Update expected message.

From-SVN: r87563
2004-09-15 21:48:10 +01:00
Kazu Hirata
8e3c61c577 cgraph.h, [...]: Fix comment typos.
* cgraph.h, cgraphunit.c, fold-const.c, lambda-mat.c,
	lambda.h, profile.c, tree-optimize.c, tree-sra.c, vec.h: Fix
	comment typos.  Follow spelling conventions.

From-SVN: r87490
2004-09-14 12:21:44 +00:00
Daniel Jacobowitz
b919325985 fold-const.c (fold_checksum_tree): Ignore TYPE_CACHED_VALUES.
* fold-const.c (fold_checksum_tree): Ignore TYPE_CACHED_VALUES.
	Only use TYPE_BINFO for aggregates.

From-SVN: r87457
2004-09-13 23:25:45 +00:00
Richard Henderson
373c0e7f04 re PR c++/16254 (ICE in lower_stmt, at gimple-low.c:205)
PR c++/16254
        * fold-const.c (fold) <case CLEANUP_POINT_EXPR>: Remove.
        * tree.c, tree.h (has_cleanups): Remove.
cp/
        * semantics.c (maybe_cleanup_point_expr): Don't call fold.
        * typeck.c (condition_conversion): Likewise.

From-SVN: r87407
2004-09-12 14:36:50 -07:00
Steven Bosscher
05cf561db4 re PR c++/17412 (tree check failure in fold-const)
PR c++/17412
	* fold-const.c (fold): Do not try to fold the operand of a
	CLEANUP_POINT_EXPR if that operand does itself not have any
	operands.
testsuite/
	* g++.dg/parse/break-in-for.C: New test.

	PR middle-end/17417
	* langhooks.c (lhd_decl_printable_name): Make sure that this
	function is called with is a decl node that has an identifier.
	* tree-pretty-print.c (dump_function_name): New function to
	wrap PRINT_FUNCTION_NAME and dump_decl_name.
	(print_call_name): Use it.

From-SVN: r87363
2004-09-11 19:48:58 +00:00
Roger Sayle
3ae472c234 re PR middle-end/17024 (ICE in fold_cond_expr_with_comparison, at fold-const.c:4324)
PR middle-end/17024
	* fold-const.c (fold_cond_expr_with_comparison): Handle unordered
	floating point comparison operators.  Change aborts to gcc_asserts.

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

From-SVN: r87339
2004-09-11 03:21:22 +00:00
Roger Sayle
049e524f68 re PR middle-end/17055 (ICE while folding int/float vectors)
PR middle-end/17055
	* fold-const.c (build_zero_vector): New function to construct a
	vector (either floating point or integer) of zeros.
	(fold_convert): Internally, enable conversions of integer zero
	to arbitrary vector types, using the new build_zero_vector.

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

From-SVN: r87272
2004-09-10 02:39:18 +00:00
Nathan Sidwell
0bccc606b3 final.c (shorten_branches, [...]): Use gcc_assert and gcc_unreachable.
* final.c (shorten_branches, final, get_insn_template,
	output_alternate_entry_point, final_scan_insn, alter_subreg,
	alter_cond, output_operand, asm_fprintf, final_forward_branch_p,
	leaf_renumber_regs_insn): Use gcc_assert and gcc_unreachable.
	* fix-header.c (lookup_std_proto): Likewise.
	* flow.c (first_insn_after_basic_block_note, verify_wide_reg,
	verify_local_live_at_start, update_life_info, mark_reg,
	calculate_global_regs_live, allocate_reg_life_data,
	init_propagate_block_info, mark_set_regs, flush_reg_cond_reg_1,
	ior_reg_cond, not_reg_cond, and_reg_cond, elim_reg_cond,
	attempt_auto_inc, mark_used_reg, mark_used_regs): Likewise.
	* fold-const.c (force_fit_type, div_and_round_double,
	may_negate_without_overflow_p, int_const_binop, const_binop,
	size_binop, size_diffop, fold_convert_const, fold_convert,
	invert_tree_comparison, swap_tree_comparison,
	comparison_to_compcode, compcode_to_comparison, invert_truthvalue,
	range_binop, make_range, fold_cond_expr_with_comparison,
	fold_div_compare, fold, fold_checksum_tree, fold_negate_const,
	fold_abs_const, fold_not_const, fold_relational_const, round_up,
	round_down): Likewise.
	* function.c (find_function_data, assign_stack_temp_for_type,
	instantiate_virtual_regs_lossage, aggregate_value_p,
	assign_parm_find_entry_rtl, assign_parm_setup_block,
	expand_function_start, expand_function_end, keep_stack_depressed,
	handle_epilogue_set, thread_prologue_and_epilogue_insns): Likewise.

From-SVN: r87192
2004-09-08 15:44:46 +00:00
Kazu Hirata
8c27b7d4d1 c-common.c, [...]: Fix comment formatting.
* c-common.c, c-decl.c, combine.c, defaults.h, fold-const.c,
	gimplify.c, gthr-nks.h, hooks.c, lambda-code.c, lambda-mat.c,
	stor-layout.c, target.h, tree-cfg.c, tree-chrec.c,
	tree-if-conv.c, tree-inline.c, tree-into-ssa.c,
	tree-mudflap.c, tree-optimize.c, tree-scalar-evolution.c,
	tree-ssa-alias.c, tree-ssa-ccp.c, tree-ssa-dce.c,
	tree-ssa-pre.c, tree-vectorizer.c, tree-vectorizer.h, tree.h,
	vec.h: Fix comment formatting.

From-SVN: r87105
2004-09-05 16:05:06 +00:00
Richard Kenner
40b32ef83f revert: fold-const.c (operand_equal_p): Remove code to allow null ARG0/1.
Revert:
	* fold-const.c (operand_equal_p): Remove code to allow null ARG0/1.
	Define locals macros OP_SAME and OP_SAME_WITH_NULL and use throughout.

From-SVN: r87089
2004-09-04 15:17:52 -04:00
Richard Kenner
a60749f509 fold-const.c (operand_equal_p): Remove code to allow null ARG0/1.
* fold-const.c (operand_equal_p): Remove code to allow null ARG0/1.
	Define locals macros OP_SAME and OP_SAME_WITH_NULL and use throughout.

From-SVN: r87082
2004-09-04 08:35:41 -04:00
Richard Henderson
9969aaf67e re PR middle-end/17258 (gcc.c-torture/compile/20030224-1.c:16: internal compiler error: in expand_expr_addr_expr, at expr.c:6157)
PR middle-end/17258
        * calls.c (initialize_argument_information): Tighten pass-through
        conditions for pass-by-reference.  Remove dead TARGET_EXPR code.
        Use build_fold_addr_expr.
        (emit_library_call_value_1): Use build_fold_addr_expr.  Remove code
        that assumes ADDR_EXPR allocates stack space.
        * fold-const.c (build_fold_addr_expr_with_type): Look through
        WITH_SIZE_EXPR.

From-SVN: r86957
2004-09-01 23:47:01 -07:00
Jakub Jelinek
266bff3a21 fold-const.c (operand_equal_p): Require equal sign also for FIX_{CEIL,TRUNC,FLOOR,ROUND}_EXPR.
* fold-const.c (operand_equal_p): Require equal sign also for
	FIX_{CEIL,TRUNC,FLOOR,ROUND}_EXPR.

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

From-SVN: r86906
2004-09-01 18:33:06 +02:00
Richard Henderson
88f1975682 fold-const.c (tree_expr_nonzero_p): Use get_base_address before assuming an ADDR_EXPR is non-null.
* fold-const.c (tree_expr_nonzero_p): Use get_base_address before
        assuming an ADDR_EXPR is non-null.
cp/
        * class.c (fixed_type_or_null): Use get_base_address before
        assuming an ADDR_EXPR is non-null.

From-SVN: r86788
2004-08-30 11:16:31 -07:00
Nathan Sidwell
ce552f75de tree.h (size_int_type): Remove.
* tree.h (size_int_type): Remove.
	* fold-const.c: Do not #include gt-fold-const.h.
	(size_htab_hash, size_htab_eq): Remove.
	(size_int_kind): Use build_int_cst.
	(new_const, size_htab): Remove.
	(size_int_type): Remove.
	(round_up): Use build_int_cst.
	(round_down): Likewise. Remove spurious constant build.

	* ada/utils2.c (build_allocator): Use ssize_int.

	* cp/class.c (build_vtbl_initializer): Use ssize_int.
	* cp/decl.c (complete_array_type): Likewise.
	* cp/method.c (finish_thunk): Likewise.
	* cp/search.c (get_dynamic_base_type): Likewise.

From-SVN: r86667
2004-08-27 16:45:20 +00:00
Nathan Sidwell
7d60be94d6 tree.h (build_int_cst): New, sign extended constant.
* tree.h  (build_int_cst): New, sign extended constant.
	(build_int_cstu): New, zero extended constant.
	(build_int_cst_wide): Renamed from build_int_cst.
	* tree.c (build_int_cst, build_int_cstu): New.
	(build_int_cst_wide): Renamed from build_int_cst.
	(make_vector_type, build_common_tree_nodes,
	build_common_tree_nodes_2): Adjust build_int_cst calls.
	* builtins.c (expand_builtin_prefetch, expand_builtin_strstr,
	expand_builtin_strpbrk, expand_builtin_fputs,
	build_string_literal, expand_builtin_printf,
	expand_builtin_sprintf, fold_builtin_classify_type,
	fold_builtin_lround, fold_builtin_bitop, fold_builtin_isascii,
	fold_builtin_toascii, fold_builtin_isdigit,
	simplify_builtin_strstr, simplify_builtin_strpbrk,
	fold_builtin_fputs, simplify_builtin_sprintf): Likewise.
	* c-common.c (start_fname_decls, fix_string_type, shorten_compare,
	DEF_ATTR_INT): Likewise.
	* c-decl.c (complete_array_type, check_bitfield_type_and_width):
	Likewise.
	* c-lex.c (interpret_integer, lex_charconst): Likewise.
	* c-parse.in (primary) <TYPES_COMPATIBLE_P> Likewise.
	* c-pretty-print.c (pp_c_integer_constant): Likewise.
	* c-typeck.c (really_start_incremental_init, push_init_level,
	set_nonincremental_init_from_string): Likewise.
	* calls.c (load_register_parameters): Likewise.
	convert.c (convert_to_pointer): Likewise.
	coverage.c (coverage_counter_alloc, tree_coverage_counter_ref,
	build_fn_info_type, build_fn_info_value, build_ctr_info_value,
	build_gcov_info): Likewise.
	* except.c (init_eh, assign_filter_values): Likewise.
	* expmed.c (store_fixed_bit_field, extract_bit_field,
	extract_fixed_bit_field, extract_split_bit_field, expand_shift,
	expand_mult_const, expand_mult_highpart_adjust, extract_high_half,
	expand_sdiv_pow2, expand_divmod, make_tree): Likewise.
	* expr.c (convert_move, emit_group_load, emit_group_store,
	expand_assignment, store_constructor, store_field,
	expand_expr_real_1, reduce_to_bit_field_precision): Likewise.
	fold-const.c (force_fit_type, int_const_binop, fold_convert_const,
	invert_truthvalue, optimize_bit_field_compare,
	decode_field_reference, all_ones_mask_p, constant_boolean_node,
	fold_div_compare, fold, fold_read_from_constant_string,
	fold_negate_const, fold_abs_const, fold_not_const, round_up,
	round_down): Likewise.
	* function.c (assign_parm_setup_block): Likewise.
	* stmt.c (shift_return_value, expand_case, estimate_case_costs):
	Likewise.
	* stor-layout.c (layout_type, initialize_sizetypes,
	set_min_and_max_values_for_integral_type): Likewise.
	* tree-chrec.c (chrec_fold_multiply_poly_poly,
	reset_evolution_in_loop): Likewise.
	* tree-chrec.h (build_polynomial_chrec): Likewise.
	* tree-complex.c (build_replicated_const): Likewise.
	* tree-eh.c (honor_protect_cleanup_actions,
	lower_try_finally_onedest, lower_try_finally_copy,
	lower_try_finally_switch): Likewise.
	* tree-mudflap.c (mf_build_string, mx_register_decls,
	mudflap_register_call, mudflap_enqueue_constant): Likewise.
	* tree-nested.c (get_trampoline_type, get_nl_goto_field): Likewise.
	* tree-pretty-print.c (dump_generic_node): Likewise.
	* tree-ssa-ccp.c (widen_bitfield, maybe_fold_offset_to_array_ref):
	Likewise.
	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Likewise.
	* tree-ssa-loop-niter.c (number_of_iterations_cond,
	loop_niter_by_eval, upper_bound_in_type, lower_bound_in_type):
	Likewise.
	* tree-ssa-loop-ivcanon.c (create_canonical_iv,
	canonicalize_loop_induction_variables): Likewise.
	* tree-vectorizer.c (vect_create_index_for_array_ref,
	vect_transform_loop_bound, vect_compute_data_ref_alignment):
	Likewise.

	* config/alpha/alpha.c (alpha_initialize_trampoline, alpha_va_start,
	alpha_gimplify_va_arg_1): Likewise.
	* config/arm/arm.c (arm_get_cookie_size): Likewise.
	* config/c4x/c4x.c (c4x_gimplify_va_arg_expr): Likewise.
	* config/i386/i386.c (ix86_va_start, ix86_gimplify_va_arg): Likewise.
	* config/ia64/ia64.c (ia64_gimplify_va_arg): Likewise.
	* config/mips/mips.c (mips_build_builtin_va_list, mips_va_start,
	mips_gimplify_va_arg_expr): Likewise.
	* config/pa/pa.c (hppa_gimplify_va_arg_expr): Likewise.
	* config/rs6000/rs6000.c (rs6000_va_start, rs6000_gimplify_va_arg,
	add_compiler_branch_island): Likewise.
	* config/s390/s390.c (s390_va_start): Likewise.
	* config/sh/sh.c (sh_va_start): Likewise.
	* config/stormy16/stormy16.c (xstormy16_expand_builtin_va_start):
	Likewise.
	* config/xtensa/xtensa.c (xtensa_va_start,
	xtensa_gimplify_va_arg_expr): Likewise.

	* objc/objc-act.c (build_objc_string_object,
	build_objc_symtab_template, init_def_list, init_objc_symtab,
	init_module_descriptor, generate_static_references,
	build_selector_translation_table, get_proto_encoding,
	build_typed_selector_reference, build_selector_reference,
	build_next_objc_exception_stuff,
	build_method_prototype_list_template, generate_descriptor_table,
	generate_protocols, build_protocol_initializer,
	build_ivar_list_template, build_method_list_template,
	build_ivar_list_initializer, generate_ivars_list,
	generate_dispatch_table, generate_protocol_list,
	build_category_initializer, build_shared_structure_initializer,
	generate_shared_structures, handle_impent,
	generate_objc_image_info): Likewise.

2004-04-25  Paolo Bonzini  <bonzini@gnu.org>

	* cfglayout.c (duplicate_insn_chain): Remove references to
	NOTE_INSN_LOOP_VTOP and NOTE_INSN_LOOP_CONT.
	* cfgloop.h (struct loop): Remove fields vtop, cont and cont_dominator.
	* cfgrtl.c (rtl_delete_block): Remove handling of NOTE_INSN_LOOP_CONT.
	* final.c (final_scan_insn): Remove references to NOTE_INSN_LOOP_VTOP
	and NOTE_INSN_LOOP_CONT.
	* insn-notes.def (NOTE_INSN_LOOP_VTOP, NOTE_INSN_LOOP_CONT): Remove.
	* jump.c (squeeze_notes): Remove references to NOTE_INSN_LOOP_VTOP
	and NOTE_INSN_LOOP_CONT.
	* loop.c (scan_loops, find_and_verify_loops, for_each_insn_in_loop,
	check_dbra_loop, loop_dump_aux): Remove references to removed notes
	and fields.
	* reorg.c (mostly_true_jump): Do not rely on NOTE_INSN_LOOP_VTOPs.
	* unroll.c (unroll_loop, copy_loop_body, loop_iterations): Remove
	references to removed notes and fields.
	(subtract_reg_term, ujump_to_loop_cont): Remove.

From-SVN: r86544
2004-08-25 09:52:54 +00:00
Zdenek Dvorak
82b85a85c8 tree-ssa-loop-ivcanon.c: New file.
* tree-ssa-loop-ivcanon.c: New file.
	* tree-ssa-loop-manip.c (create_iv): New function.
	* Makefile.in (tree-ssa-loop-ivcanon.o): Add.
	(tree-ssa-loop.o, tree-ssa-loop-manip.o): Add SCEV_H dependency.
	* cfgloop.c (mark_single_exit_loops): New function.
	(verify_loop_structure): Verify single-exit loops.
	* cfgloop.h (struct loop): Add single_exit field.
	(LOOPS_HAVE_MARKED_SINGLE_EXITS): New constant.
	(mark_single_exit_loops): Declare.
	(tree_num_loop_insns): Declare.
	* cfgloopmanip.c (update_single_exits_after_duplication): New function.
	(duplicate_loop_to_header_edge): Use it.
	* common.opt (fivcanon): New flag.
	* timevar.def (TV_TREE_LOOP_IVCANON, TV_COMPLETE_UNROLL): New timevars.
	* tree-cfg.c (tree_find_edge_insert_loc): Return newly created block.
	(bsi_commit_edge_inserts_1): Pass null to tree_find_edge_insert_loc.
	(bsi_insert_on_edge_immediate): New function.
	* tree-flow.h (bsi_insert_on_edge_immediate,
	canonicalize_induction_variables, tree_unroll_loops_completely,
	create_iv): Declare.
	* tree-optimize.c (init_tree_optimization_passes): Add
	pass_iv_canon and pass_complete_unroll.
	* tree-pass.h (pass_iv_canon, pass_complete_unroll): Declare.
	* tree-scalar-evolution.c (get_loop_exit_condition,
	get_exit_conditions_rec, number_of_iterations_in_loop,
	scev_initialize): Use single_exit information.
	* tree-ssa-loop-niter.c (number_of_iterations_cond): Record
	missing assumptions.
	(loop_niter_by_eval):  Return number of iterations as unsigned
	int.
	* tree-ssa-loop.c (tree_ssa_loop_init): Mark single exit loops.
	(tree_ssa_loop_ivcanon, gate_tree_ssa_loop_ivcanon, pass_iv_canon,
	tree_complete_unroll, gate_tree_complete_unroll, pass_complete_unroll):
	New passes.
	(tree_ssa_loop_done): Call free_numbers_of_iterations_estimates.
	* tree-ssanames.c (make_ssa_name): Allow creating ssa name before
	the defining statement is ready.
	* tree-vectorizer.c (vect_create_iv_simple): Removed.
	(vect_create_index_for_array_ref, vect_transform_loop_bound):
	Use create_iv.
	(vect_transform_loop_bound): Use single_exit information.
	(vect_analyze_loop_form): Cleanup bogus tests.
	(vectorize_loops): Do not call flow_loop_scan.
	* tree.h (may_negate_without_overflow_p): Declare.
	* fold-const.c (may_negate_without_overflow_p): Split out from ...
	(negate_expr_p): ... this function.
	(tree_expr_nonzero_p): Handle overflowed constants correctly.
	* doc/invoke.texi (-fivcanon): Document.
	* doc/passes.texi: Document canonical induction variable creation.

	* gcc.dg/tree-ssa/loop-1.c: New test.

From-SVN: r86516
2004-08-24 20:48:23 +00:00
Nathan Sidwell
be88a6281e tree.h (enum size_type_kind): Remove USIZETYPE, UBITSIZETYPE.
* tree.h (enum size_type_kind): Remove USIZETYPE, UBITSIZETYPE.
	(usize_type, ubitsizetype): Remove.
	* stor-layout.c (set_sizetype): Don't initialize usizetype,
	ubitsizetype.
	* fold-const.c (size_diffop): TYPE can never be ubitsizetype.

From-SVN: r86422
2004-08-23 08:47:08 +00:00
Andrew Pinski
efd610a684 fold-const.c (rtl_expr_nonnegative_p): Delete.
2004-08-22  Andrew Pinski  <pinskia@physics.uc.edu>

        * fold-const.c (rtl_expr_nonnegative_p): Delete.
        * tree.h (rtl_expr_nonnegative_p): Remove.

From-SVN: r86381
2004-08-22 10:29:51 -07:00
Nathan Sidwell
0a936b12eb fold-const.c (round_up, round_down): Use build_int_cst.
* fold-const.c (round_up, round_down): Use build_int_cst.
	Optimize common case.

From-SVN: r86329
2004-08-20 16:09:00 +00:00
Nathan Sidwell
fabead0613 fold-const.c (int_const_binop): Don't generate non-overflowing size-types specially.
* fold-const.c (int_const_binop): Don't generate non-overflowing
	size-types specially.
	(fold_convert_const): Likewise.

From-SVN: r86321
2004-08-20 14:28:28 +00:00
Nathan Sidwell
89b0433e3a tree.h (TYPE_CACHED_VALUES_P): New.
* tree.h (TYPE_CACHED_VALUES_P): New.
	(TYPE_CACHED_VALUES): New.
	(TYPE_ORIG_SIZE_TYPE): Adjust.
	* tree.def (INTEGER_CST): Update documentation.
	* tree.c: Inlcude params.h.
	(build_int_cst): Cache small values.
	(build_type_copy): Do not copy the value cache.
	* c-common.c (c_common_nodes_and_builtins): Add comment, remove
	unneeded zeroing.
	* c-typeck.c (build_c_cast): Add comment about OVERFLOW setting.
	* expmed.c (const_mult_add_overflow_p): Clear type copy's value
	cache.
	* fold-const.c (force_fit_type): Copy value when setting
	overflows.
	(int_const_binop): Likewise.
	* stor-layout.c: Include params.h
	(set_sizetype): Create values cache.
	(fixup_unsigned_type): Set UNSIGNED_P before caching any values.
	* params.def (PARAM_INTEGER_SHARE_LIMIT): New.
	* params.h (INTEGER_SHARE_LIMIT): New.
	* Makefile.in (tree.o, stor-layout.o): Depend on PARAMS_H.

	* cp/decl.c (finish_enum): Do not copy value node early, copy
	later.
	* cp/lex.c (cxx_init): Force null_node to be unique.

	* java/parse.h (JAVA_RADIX10_FLAG): Rename to ...
	(JAVA_NOT_RADIX10_FLAG): ... here.  Invert meaning.
	* java/lex.c (do_java_lex): Adjust.
	(error_if_numeric_overflow): Likewise.

From-SVN: r86247
2004-08-19 10:36:07 +00:00
Paolo Bonzini
62fc1d7d18 re PR middle-end/17036 (ICE: (A >> N) & 1 ? (1 << N) : 0 where A of type unsigned int)
gcc/ChangeLog:
2004-08-17  Paolo Bonzini  <bonzini@gnu.org>

	PR middle-end/17036
	* fold-const.c (fold): Check for integer operand when
	folding (A >> N) & 1 ? (1 << N) : 0.  Fix from Andrew
	Pinski  <pinskia@physics.uc.edu>.

gcc/testsuite/ChangeLog:
2004-08-17  Paolo Bonzini  <bonzini@gnu.org>

	* gcc.dg/pr17036-1.c: New test.

From-SVN: r86112
2004-08-17 07:40:22 +00:00
Nathan Sidwell
4a90aeeb51 tree.h (build_int_cst): New.
.:	* tree.h (build_int_cst): New.
	(build_int_2): Remove.
	* tree.c (build_int_2): Remove.
	(build_int_cst): New.
	(make_vector_type, build_common_tree_nodes,
	build_common_tree_nodes_2): Use build_int_cst.
	* builtins.c (expand_builtin_prefetch, expand_builtin_strstr,
	expand_builtin_strpbrk, expand_builtin_fputs,
	build_string_literal, expand_builtin_printf,
	expand_builtin_sprintf, fold_builtin_lround, fold_builtin_bitop,
	fold_builtin_bitop, fold_builtin_isascii, fold_builtin_toascii,
	fold_builtin_isdigit, simplify_builtin_strstr,
	simplify_builtin_strpbrk, fold_builtin_fputs,
	simplify_builtin_sprintf): Use build_int_cst.
	* c-common.c (start_fname_decls, fix_string_type,
	c_common_nodes_and_builtins, c_init_attributes,
	shorten_compare): Likewise.
	* c-decl.c (complete_array_type,
	check_bitfield_type_and_width): Likewise.
	* c-lex.c (interpret_integer, lex_charconst): Likewise.
	* c-parse.in (primary): <TYPES_COMPATIBLE_P> Likewise.
	* c-pretty-print.c (pp_c_integer_constant): Likewise.
	* c-typeck.c (really_start_incremental_init, push_init_level,
	set_nonincremental_init_from_string): Likewise.
	* calls.c (load_register_parameters): Likewise.
	* convert.c (convert_to_pointer): Likewise.
	* coverage.c (coverage_counter_alloc, tree_coverage_counter_ref,
	build_fn_info_type, build_ctr_info_value, build_gcov_info):
	Likewise.
	* except.c (init_eh, assign_filter_values, assign_filter_values):
	Likewise.
	* expmed.c (store_fixed_bit_field, extract_bit_field,
	extract_fixed_bit_field, extract_split_bit_field, expand_shift,
	expand_mult_const, expand_mult_highpart_adjust, extract_high_half,
	expand_sdiv_pow2, expand_divmod, make_tree): Likewise.
	* expr.c (convert_move, emit_group_load, emit_group_store,
	expand_assignment, store_constructor, store_field,
	expand_expr_real_1, reduce_to_bit_field_precision): Likewise.
	* fold-const.c (force_fit_type, int_const_binop, fold_convert_const,
	invert_truthvalue, optimize_bit_field_compare,
	decode_field_reference, all_ones_mask_p, constant_boolean_node,
	fold_div_compare, fold, fold_read_from_constant_string,
	fold_negate_const, fold_abs_const, fold_not_const): Likewise.
	* function.c (assign_parm_setup_block): Likewise.
	* stmt.c (shift_return_value, expand_end_case_type,
	estimate_case_costs): Likewise.
	* stor-layout.c (layout_type, initialize_sizetypes,
	set_min_and_max_values_for_integral_type): Likewise.
	* tree-chrec.c (chrec_fold_multiply_poly_poly,
	reset_evolution_in_loop): Likewise.
	* tree-chrec.h (build_polynomial_chrec): Likewise.
	* tree-complex.c (build_replicated_const): Likewise.
	* tree-eh.c (honor_protect_cleanup_actions,
	lower_try_finally_onedest, lower_try_finally_copy,
	lower_try_finally_switch): Likewise.
	* tree-mudflap.c (mf_build_string, mx_register_decls,
	mudflap_register_call, mudflap_enqueue_constant): Likewise.
	* tree-nested.c (get_trampoline_type, get_nl_goto_field): Likewise.
	* tree-pretty-print.c (dump_generic_node): Likewise.
	* tree-ssa-ccp.c (widen_bitfield, maybe_fold_offset_to_array_ref):
	Likewise.
	* tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Likewise.
	* tree-ssa-loop-niter.c (number_of_iterations_cond,
	loop_niter_by_eval, upper_bound_in_type, lower_bound_in_type):
	Likewise.

	* config/alpha/alpha.c (alpha_initialize_trampoline,
	alpha_va_start, alpha_gimplify_va_arg_1): Use build_int_cst.
	* config/arm/arm.c (arm_get_cookie_size): Likewise.
	* config/c4x/c4x.c (c4x_gimplify_va_arg_expr): Likewise.
	* config/i386/i386.c (ix86_va_start, ix86_gimplify_va_arg): Likewise.
	* config/i860/i860.c (i860_va_start): Likewise.
	* config/ia64/ia64.c (ia64_gimplify_va_arg): Likewise.
	* config/mips/mips.c (mips_build_builtin_va_list, mips_va_start,
	mips_gimplify_va_arg_expr): Likewise.
	* config/pa/pa.c (hppa_gimplify_va_arg_expr): Likewise.
	* config/rs6000/rs6000.c (rs6000_va_start, rs6000_gimplify_va_arg,
	add_compiler_branch_island): Likewise.
	* config/s390/s390.c (s390_va_start): Likewise.
	* config/sh/sh.c (sh_va_start): Likewise.
	* config/stormy16/stormy16.c (xstormy16_expand_builtin_va_start):
	Likewise.
	* config/xtensa/xtensa.c (xtensa_va_start,
	xtensa_gimplify_va_arg_expr): Likewise.

	* objc/objc-act.c (build_objc_string_object,
	build_objc_symtab_template, init_def_list, init_objc_symtab,
	init_module_descriptor, generate_static_references,
	build_selector_translation_table, get_proto_encoding,
	build_typed_selector_reference, build_selector_reference,
	build_next_objc_exception_stuff,
	build_method_prototype_list_template, generate_descriptor_table,
	generate_protocols, build_protocol_initializer,
	build_ivar_list_template, build_method_list_template,
	build_ivar_list_initializer, generate_ivars_list,
	generate_dispatch_table, generate_protocol_list,
	build_category_initializer, build_shared_structure_initializer,
	generate_shared_structures, handle_impent,
	generate_objc_image_info): Use build_int_cst.
ada:
	* cuintp.c (UI_To_gnu): Use build_int_cst..
	* trans.c (Exception_Handler_to_gnu_sjlj, gnat_to_gnu): Likewise.
	* utils.c (init_gigi_decls): Likewise.
	* utils2.c (build_call_raise): Likewise.
cp:
	* call.c (convert_class_to_reference,
	build_user_type_conversion_1, convert_like_real,
	build_java_interface_fn_ref, build_special_member_call): Use
	build_int_cst.
	* class.c (build_vtbl_initializer): Likewise.
	* cp-gimplify.c (cp_gimplify_expr): Likewise.
	* cvt.c (cp_convert_to_pointer): Likewise.
	* decl.c (cxx_init_decl_processing, complete_array_type): Likewise.
	* decl2.c (start_static_initialization_or_destruction,
	generate_ctor_or_dtor_function): Likewise.
	* except.c (build_throw): Likewise.
	* lex.c (cxx_init): Likewise.
	* mangle.c (write_integer_cst): Likewise.
	* rtti.c (build_headof, get_tinfo_decl_dynamic,
	build_dynamic_cast_1, ptr_initializer, ptm_initializer,
	get_pseudo_ti_init): Likewise.
	* search.c (get_dynamic_cast_base_type): Likewise.
	* tree.c (build_shared_int_cst): Likewise.
fortran:
	* trans-array.c (gfc_trans_array_constructor_value): Use
	build_int_cst.
	* trans-const.c (gfc_build_string_const,
	gfc_init_constants, gfc_conv_mpz_to_tree,
	gfc_conv_constant_to_tree): Likewise.
	* trans-decl.c (gfc_get_symbol_decl): Likewise.
	* trans-intrinsic.c (gfc_conv_intrinsic_ibits,
	gfc_conv_intrinsic_len, prepare_arg_info): Likewise.
	* trans-io.c (add_case, set_error_locus, build_dt,
	transfer_expr): Likewise.
	* trans-stmt.c (gfc_trans_label_assign, gfc_trans_pause,
	gfc_trans_stop, gfc_trans_character_select): Likewise.
	* trans-types.c (gfc_init_types, gfc_get_dtype): Likewise.
	* trans.c (gfc_trans_runtime_check): Likewise.
java:
	* boehm.c (get_boehm_type_descriptor): Use build_int_cst.
	* class.c (build_utf8_ref, build_static_field_ref,
	make_field_value, make_method_value, get_dispatch_table,
	make_class_data, emit_symbol_table, emit_catch_table): Likewise.
	* constants.c (get_tag_node,  build_ref_from_constant_pool,
	build_constants_constructor): Likewise.
	* decl.c (java_init_decl_processing): Likewise.
	* expr.c (build_java_array_length_access, build_newarray,
	expand_java_multianewarray, expand_java_pushc, expand_iinc,
	build_java_binop, build_field_ref, expand_java_add_case,
	expand_java_call, build_known_method_ref, build_invokevirtual,
	build_invokeinterface, build_jni_stub): Likewise.
	* java-gimplify.c (java_gimplify_new_array_init): Likewise.
	* jcf-parse.c (get_constant): Likewise.
	* lex.c (do_java_lex): Likewise.
	* parse.y (patch_binop, patch_unaryop, patch_cast,
	build_null_of_type, patch_newarray): Likewise.
	* resource.c (compile_resource_data): Likewise.
	* typeck.c (build_prim_array_type): Likewise.

From-SVN: r86022
2004-08-15 15:45:33 +00:00
Richard Henderson
159319544b stor-layout.c (round_up, round_down): Move ...
* stor-layout.c (round_up, round_down): Move ...
        * fold-const.c (round_up, round_down): ... here.  Use
        multiple_of_p to avoid any arithmetic at all.

From-SVN: r85848
2004-08-11 21:01:04 -07:00
Nathan Sidwell
ca7a3bd7d5 tree.h (force_fit_type): Return a tree, take three flags.
* tree.h (force_fit_type): Return a tree, take three flags.
	* fold-const.c (force_fit_type): Set TREE_OVERFLOW and
	TREE_CONSTANT_OVERFLOW here.
	(int_const_binop, const_binop): Adjust.
	(size_int_type): Do sign extension here.
	(fold_convert_const, optimize_bit_field_compare,
	decode_field_reference, all_ones_mask_p, fold_div_compare, fold,
	fold_negate_const, fold_abs_const, fold_not_const): Adjust.
	* tree.c (size_in_bytes, int_fits_type_p): Adjust.

	* cp/cvt.c (cp_convert_to_pointer): Adjust force_fit_type call.

	* java/jcf-parse.c (get_constant): Adjust force_fit_type call.
	* java/lex.h (SET_LVAL_NODE_TYPE): Remove.
	* java/lex.c (java_perform_atof): Use SET_LVAL_NODE directly.
	(do_java_lex): Likewise. Adjust force_fit_type call.

From-SVN: r85599
2004-08-05 09:03:42 +00:00
Roger Sayle
a0fac73d2b re PR middle-end/16790 (Integer down cast ignored in larger expression)
PR middle-end/16790
	* fold-const.c (extract_muldiv_1) <NOP_EXPR>: Disallow local
	truncations, not just global truncations.

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

From-SVN: r85506
2004-08-03 21:24:32 +00:00
Roger Sayle
3159762032 fold-const.c (fold): The transformation "X % -Y" -> "X % Y" is only valid for TRUNC_MOD_EXPR.
* fold-const.c (fold) <TRUNC_MOD_EXPR>: The transformation "X % -Y"
	-> "X % Y" is only valid for TRUNC_MOD_EXPR.

From-SVN: r85443
2004-08-02 17:11:42 +00:00
Eric Christopher
9f63daea37 c-common.c (c_common_unsafe_for_reeval): Delete.
2004-07-28  Eric Christopher  <echristo@redhat.com>

	* c-common.c (c_common_unsafe_for_reeval): Delete.
	* c-lang.c (LANG_HOOKS_UNSAFE_FOR_REEVAL): Delete use.
	* c-pretty-print.c (pp_c_expression): Delete UNSAVE_EXPR case.
	* calls.c (fix_unsafe_tree): Delete.
	(expand_call): Delete code which used above.
	* dojump.c (do_jump): Delete UNSAVE_EXPR case.
	* expr.c (expand_expr_real_1): Ditto.
	* fold-const.c (non_lvalue): Ditto.
	* langhooks-def.h (LANG_HOOKS_UNSAFE_FOR_REEVAL): Delete.
	(lhd_unsafe_for_reeval): Ditto.
	* langhooks.c (lhd_unsafe_for_reeval): Ditto.
	* langhooks.h (unsafe_for_reeval): Ditto.
	(unsave_expr_now): Adjust comment.
	* tree-inline.c (copy_body_r): Delete UNSAVE_EXPR bits.
	(estimate_num_insns_1): Ditto.
	* tree-pretty-print.c (dump_generic_node): Ditto.
	* tree.c (expr_align): Ditto.
	(unsave_expr): Delete.
	(unsafe_for_reeval): Ditto.
	* tree.h (unsafe_for_reeval, unsave_expr): Ditto.
	* tree.def (UNSAVE_EXPR): Delete.
	* objc/objc-lang.c (LANG_HOOKS_UNSAFE_FOR_REEVAL): Delete.

2004-07-28  Eric Christopher  <echristo@redhat.com>

	* cp-lang.c (LANG_HOOKS_UNSAFE_FOR_REEVAL): Delete.

2004-07-28  Eric Christopher  <echristo@redhat.com>

	* lang.c (LANG_HOOKS_UNSAFE_FOR_REEVAL): Delete.
	(java_unsafe_for_reeval): Ditto.

From-SVN: r85276
2004-07-28 23:44:56 +00:00
Roger Sayle
e9ea8bd58e fold-const.c (constant_boolean_node): Make extern.
* fold-const.c (constant_boolean_node): Make extern.
	(make_range): Wrap long lines.
	(fold_cond_expr_with_comparison): Remove unnecessary call to
	pedantic_non_lvalue.  Add missing calls to fold_convert.
	(fold_truthop): Add missing calls to fold_convert.
	(fold): Likewise.
	* tree.h (constant_boolean_node): Add prototype here.
	* builtins.c (expand_builtin_strncmp): Add missing calls to
	fold_convert.
	* tree-ssa-dom.c (record_equivalences_from_incoming_edge):
	Call fold_convert and constant_boolean_node to correct types.
	* tree-ssa-forwprop.c (substitute_single_use_vars): Add
	missing call to fold_convert to correct types.

From-SVN: r85169
2004-07-25 23:26:59 +00:00
Joseph Myers
9e629a806d re PR c/7284 (incorrectly simplifies leftshift followed by signed power-of-2 division)
PR c/7284
	* fold-const.c (extract_muldiv_1): Do not treat signed left shift
	as multiplication.

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

From-SVN: r85059
2004-07-22 21:33:34 +01:00
Paolo Bonzini
3a021db299 c-common.c (vector_types_convertible_p): Use vector types' TYPE_SIZE and TREE_TYPE instead of their mode.
2004-07-21  Paolo Bonzini  <bonzini@gnu.org>

	* c-common.c (vector_types_convertible_p): Use vector types'
	TYPE_SIZE and TREE_TYPE instead of their mode.
	* convert.c (convert_to_integer): Likewise.
	(convert_to_vector): Likewise.
	* fold-const.c (fold_convert): Likewise.
	* varasm.c (output_constant): Likewise.
	* expr.c (store_constructor): Split ARRAY_TYPE and VECTOR_TYPE.
	Allow a VECTOR_TYPE initializer to be made of several vectors.
	For ARRAY_TYPEs and VECTOR_TYPES, simplify a bit the handling
	of cleared and need_to_clear, and use fold_convert.
	* c-typeck.c (build_binary_op): Do not use RDIV_EXPR for
	integer vectors.

cp/ChangeLog:
2004-07-21  Paolo Bonzini  <bonzini@gnu.org>

	* c-typeck.c (build_binary_op): Do not use RDIV_EXPR for
	integer vectors.

From-SVN: r85002
2004-07-21 08:57:07 +00:00
Richard Kenner
462fdcce48 fold-const.c (operand_equal_p): Temporarily support NULL args.
* fold-const.c (operand_equal_p): Temporarily support NULL args.
	(operand_equal_p, case ARRAY_REF): Compare args 2 and 3.
	(operand_equal_p, case COMPONENT_REF): Likewise, for arg 2.

From-SVN: r84990
2004-07-20 21:21:11 -04:00
Zack Weinberg
3e95a7cbf5 rtl.h (plus_constant): Delete.
* rtl.h (plus_constant): Delete.
	(plus_constant_wide): Rename to plus_constant.
	(plus_constant_for_output_wide): Delete vestigial prototype.
	(GEN_INT): Remove unnecessary cast.
	* tree.h (build_int_2, size_int_type): Delete.
	(build_int_2_wide): Rename to build_int_2.
	(size_int_wide): Rename to size_int_kind.
	(size_int_type_wide): Rename to size_int_type.
	(size_int, ssize_int, bitsize_int, sbitsize_int): Use size_int_kind.
	Remove unnecessary cast.
	* tree.c (build_int_2_wide): Rename build_int_2; update comment.
	* explow.c (plus_constant_wide): Rename plus_constant; update comment.
	* fold-const.c (size_int_wide): Rename size_int_kind. Use size_int_type.
	(size_int_type_wide): Rename size_int_type.
	(int_const_binop): Use size_int_type.
	* c-lex.c (interpret_integer): Use build_int_2.
	* final.c (split_double): Remove unnecessary casts.
	* tree-ssa-ccp.c (maybe_fold_offset_to_array_ref): Use build_int_2.

From-SVN: r84976
2004-07-20 23:02:36 +00:00
Roger Sayle
adb8e07e68 fold-const.c (tree_expr_nonzero_p): Add function prototype.
* fold-const.c (tree_expr_nonzero_p): Add function prototype.
	(fold) <EQ_EXPR>: Move tree_expr_nonzero_p optimization from
	fold_relational_const to here, i.e. "(x | 5) == 0" -> false.
	(fold) (UNEQ_EXPR>: Add optimizations for unordered comparisons
	of the form "x op x" where op is UNLE, UNGE, UNEQ or LTGT.
	(fold_relational_const): Tidy up handling of floating point
	comparisons by calling real_compare.  Remove tree_expr_nonzero_p
	transformation; fold_relational_const assumes constant operands.

From-SVN: r84916
2004-07-19 12:45:44 +00:00
Roger Sayle
df23e6bbfa fold-const.c (fold): Canonicalize X + -C as X - C for floating point additions...
* fold-const.c (fold) <PLUS_EXPR>: Canonicalize X + -C as X - C for
	floating point additions, to keep real immediate constant positive.
	<MINUS_EXPR>:  For floating point subtractions, only transform X - -C
	into X + C, and leave positive real constants as X - C.

From-SVN: r84535
2004-07-11 21:56:37 +00:00
Roger Sayle
9675412fd9 builtins.c (fold_builtin_fputs): Don't bother converting the return type to integer_type_node...
* builtins.c (fold_builtin_fputs): Don't bother converting the
	return type to integer_type_node, as we've already checked that
	the result will be ignored.

	* tree-eh.c (tree_could_trap_p): Add support for -ftrapv such
	that signed addition, subtraction, multiplication, division,
	remainder, negation and absolute value may potentially trap.

	* fold-const.c (fold_ignored_result): New function to strip
	non-side-effecting tree nodes from an expression whose result
	is ignored.
	(fold_convert): Call fold_ignored_result when casting a value
	to VOID_TYPE.
	(omit_one_operand):  Call fold_ignored_result on the "omitted"
	operand when building a COMPOUND_EXPR.
	(pedantic_omit_one_operand): Likewise.
	* tree.h (fold_ignored_result): Prototype here.
	* tree-ssa-ccp.c (ccp_fold_builtin): Call fold_ignored_result
	when we're going to ignore the result.

From-SVN: r84525
2004-07-11 18:14:48 +00:00
Joseph Myers
fae1b38dc8 re PR tree-optimization/16437 (New c-torture failures after bitfield patch)
PR tree-optimization/16437
	* c-common.c (shorten_compare): Don't mark result of conversion to
	narrower signed type as overflowing.
	* fold-const.c (decode_field_reference): Determine whether
	signedness comes from outer type using precision rather than size.

testsuite:
	* gcc.c-torture/execute/bitfld-4.c: New test.

From-SVN: r84498
2004-07-11 10:45:39 +01:00
Roger Sayle
a32e70c34d builtins.c (fold_builtin_strcpy): Merge functionality from simplify_builtin_strcpy.
* builtins.c (fold_builtin_strcpy): Merge functionality from
	simplify_builtin_strcpy.  Add additional len argument.  No longer
	static.  Remove function prototype.
	(fold_builtin_strncpy): Likewise integrate functionality from
	simplify_builtin_strncpy.  Add additional slen argument.  No
	longer static.  Remove function prototype.
	(simplify_builtin_strcy, simplify_builtin_strncpy): Delete.
	(simplify_builtin_fputs): Rename to fold_builtin_fputs.  Change
	types of "ignore" and "unlocked" parameters to bool.
	(fold_builtin_1):  Add additional ignore argument.  Call renamed
	fold_builtin_fputs to simplify GCC "fputs" and "fputs_unlocked"
	builtins.  Update arguments to fold_builtin_strncpy and
	fold_builtin_strcpy.  Add function prototype.
	(fold_builtin): Add additional Boolean ignore argument to pass
	to fold_builtin_1.
	(simplify_builtin): Call fold_builtin_fputs, fold_builtin_strcpy
	and fold_builtin_strncpy instead of simplify_builtin_fputs,
	simplify_builtin_strcpy and simplify_builtin_strncpy respectively.

	* expr.h (simplify_builtin_fputs, simplify_builtin_strcpy,
	simplify_builtin_strncpy): Delete function prototypes.
	* tree.h (fold_builtin_fputs, fold_builtin_strcpy,
	fold_builtin_strncpy): Add function prototypes here.
	(fold_builtin): Update function prototype with new "bool ignore".

	* tree-ssa-ccp.c (ccp_fold): Update call to fold_builtin.
	(ccp_fold_builtin):  Update call to fold_builtin.  Call
	fold_builtin_fputs, fold_builtin_strcpy and fold_builtin_strncpy
	instead of simplify_builtin_fputs, simplify_builtin_strcpy and
	simplify_builtin_strncpy respectively.
	* fold-const.c (fold): Update call to fold_builtin.

From-SVN: r84302
2004-07-08 17:40:22 +00:00
Richard Henderson
ac45df5dba except.c (expand_eh_region_start, [...]): Remove.
* except.c (expand_eh_region_start, expand_eh_region_end,
	expand_eh_handler, expand_eh_region_end_cleanup,
	expand_start_all_catch, expand_start_catch, expand_end_catch,
	expand_end_all_catch, expand_eh_region_end_allowed,
	expand_eh_region_end_must_not_throw, expand_eh_region_end_throw,
	expand_eh_region_end_fixup): Remove.
	* stmt.c (struct nesting): Remove stack_level, innermost_stack_block,
	cleanups, outer_cleanups, label_chain, exception_region.
	(struct goto_fixup): Remove stack_level, cleanup_list_list.
	(struct label_chain): Remove.
	(struct stmt_status): Remove x_stack_block_stack.
	(stack_block_stack, expand_goto_internal, expand_fixup, expand_fixups,
	fixup_gotos, save_stack_pointer, expand_decl_cleanup,
	expand_decl_cleanup_eh, expand_cleanups, start_cleanup_deferral,
	end_cleanup_deferral, last_cleanup_this_contour,
	containing_blocks_have_cleanups_or_stack_level,
	any_pending_cleanups): Remove.
	(expand_null_return_1): Take no arguments.
	(expand_label, expand_naked_return, expand_return,
	expand_start_bindings_and_block, expand_end_bindings, expand_decl,
	expand_anon_union_decl, expand_start_case, pushcase, pushcase_range,
	expand_end_case_type): Don't use any of them.
	* calls.c (expand_call): Likewise.
	* dojump.c (do_jump): Likewise.
	* function.c (expand_function_end): Likewise.
	* expr.c (store_expr, expand_expr_real_1): Likewise.
	(safe_from_p): Don't handle WITH_CLEANUP_EXPR, CLEANUP_POINT_EXPR.
	(expand_expr_real_1): Don't handle WITH_CLEANUP_EXPR,
	CLEANUP_POINT_EXPR, TARGET_EXPR, TRY_CATCH_EXPR, CATCH_EXPR,
	EH_FILTER_EXPR, TRY_FINALLY_EXPR, GOTO_SUBROUTINE_EXPR.
	* fold-const.c (fold_checksum_tree): Use first_rtl_op.
	* gengtype.c (adjust_field_tree_exp): Remove rtl op handling.
	* gimplify.c (gimplify_cleanup_point_expr): Renumber operands
	for WITH_CLEANUP_EXPR.
	(gimple_push_cleanup): Likewise.
	* integrate.c (copy_decl_for_inlining): Don't DECL_TOO_LATE.
	* print-tree.c (print_node): Likewise.
	* tree-pretty-print.c (dump_generic_node): Remove GOTO_SUBROUTINE_EXPR.
	* tree.c (first_rtl_op): Always just TREE_CODE_LENGTH.
	(has_cleanups): Remove GOTO_SUBROUTINE_EXPR.
	* tree.def (WITH_CLEANUP_EXPR): Remove op1 and op2.
	(GOTO_SUBROUTINE_EXPR): Remove.
	* tree.h (WITH_CLEANUP_EXPR_RTL): Remove.
	(DECL_TOO_LATE): Remove.
	* except.h, tree.h: Update decls.
ada/
	* trans.c (gnat_to_gnu <N_Handled_Sequence_Of_Statements>): Update
	commentary.
cp/
	* cp-tree.h (expand_eh_spec_block): Remove.
java/
	* expr.c (case_identity, get_primitive_array_vtable,
	java_expand_expr, emit_init_test_initialization): Remove.
	* java-tree.h (java_expand_expr): Remove.
	* lang.c (LANG_HOOKS_EXPAND_EXPR): Remove.

From-SVN: r84275
2004-07-08 00:46:07 -07:00
Andrew Pinski
5f7b215606 re PR tree-optimization/15777 (Fold does not always fold sub trees)
2004-07-07  Andrew Pinski  <apinski@apple.com>

        PR tree-optimization/15777
        * fold-const.c (fold_single_bit_test): Fold the x^1 expression.

From-SVN: r84231
2004-07-07 14:28:01 -07:00
Andrew Pinski
3a18db48e9 expr.c (expand_expr_real_1): Fix formating.
* expr.c (expand_expr_real_1): Fix formating.
	BUFFER_REF and IN_EXPR are dead.
	* fold-const.c (non_lvalue): BUFFER_REF is dead.
	* tree-inline.c (estimate_num_insns_1): Likewise.
	* tree-pretty-print.c (dump_generic_node): BUFFER_REF,
	IN_EXPR, SET_LE_EXPR, and CARD_EXPR are dead.
	* tree.def (BUFFER_REF, IN_EXPR, SET_LE_EXPR, CARD_EXPR): Kill.
cp/ChangeLog:
	* class.c (instantiate_type): BUFFER_REF is dead.
	* lex.c (init_operators): IN_EXPR is dead.

From-SVN: r84230
2004-07-07 14:26:31 -07:00
Roger Sayle
ab0e8f666d fold-const.c (fold): Optimize unsigned modulus by a power of two into a bit-wise AND, i.e.
* fold-const.c (fold) <TRUNC_MOD_EXPR>: Optimize unsigned modulus
	by a power of two into a bit-wise AND, i.e. "X % C" as "X & (C-1)".
	Normalize "X % C" as "X % -C" for signed modulus and negative C.
	Optimize "X % -Y" as "X % Y" for signed modulus.
	<EQ_EXPR>: Recursively call "fold" when transforming "(X % Y) == 0"
	into "((unsigned) X % Y) == 0".

From-SVN: r84122
2004-07-05 16:44:17 +00:00
Richard Henderson
82c8274320 c-decl.c (grokdeclarator): Don't frob current_function_decl around variable_size.
* c-decl.c (grokdeclarator): Don't frob current_function_decl
        around variable_size.
        (set_decl_nonlocal): Remove.
        (store_parm_decls): Add stmts for pending sizes.
        * calls.c (calls_function, calls_function_1): Remove.
        (precompute_arguments): Don't call it.
        * cfgexpand.c (set_save_expr_context): Remove.
        (tree_expand_cfg): Don't call it.
        * dwarf2out.c (add_bound_info): Don't handle SAVE_EXPR.
        (dwarf2out_finish): Likewise.
        * expr.c (emit_block_move): Adjust addresses to BLKmode.
        (store_constructor): Don't pre-evaluate SAVE_EXPR.
        (safe_from_p): Don't queue SAVE_EXPRs.
        (expand_expr_real_1 <case SAVE_EXPR>): Rewrite to expect,
        or build plain VAR_DECLs.
        * fold-const.c (twoval_comparison_p): Don't look at SAVE_EXPR_RTL.
        (fold): Likewise.
        (fold_checksum_tree): Don't special-case SAVE_EXPR.
        * function.c (free_after_compilation): Don't clear x_save_expr_regs.
        (put_var_into_stack): Don't handle SAVE_EXPR.
        (gen_mem_addressof): Likewise.
        * function.h (struct function): Remove x_save_expr_regs.
        (save_expr_regs): Remove.
        * gengtype.c (adjust_field_tree_exp): Don't special-case SAVE_EXPR.
        * print-tree.c (print_node): Don't dump SAVE_EXPR_NOPLACEHOLDER.
        * stor-layout.c (variable_size): Don't set it.
        (force_type_save_exprs, force_type_save_exprs_1): Remove.
        * tree-inline.c (remap_save_expr): Remove fn argument.  Update
        all callers.  Don't set SAVE_EXPR_CONTEXT.
        * tree-inline.h (remap_save_expr): Update decl.
        * tree.c (save_expr): Update build size.
        (first_rtl_op): Don't handle SAVE_EXPR.
        (unsave_expr_1, contains_placeholder_p): Likewise.
        (decl_function_context): Likewise.
        * tree.def (SAVE_EXPR): Remove args 1 and 2.
        * tree.h (SAVE_EXPR_CONTEXT, SAVE_EXPR_RTL): Remove.
        (SAVE_EXPR_NOPLACEHOLDER, SAVE_EXPR_PERSISTENT_P): Remove.
cp/
        * tree.c (cp_unsave_r): Update remap_save_expr call.
java/
        * jcf-write.c (generate_bytecode_insns <case SAVE_EXPR>): Rewrite.

From-SVN: r84036
2004-07-02 17:15:50 -07:00
Richard Henderson
4dfa034295 tree.def (RTL_EXPR): Remove.
* tree.def (RTL_EXPR): Remove.
        * c-typeck.c (lvalue_p): Don't handle it.
        * expr.c (safe_from_p): Likewise.
        (expand_expr_real_1): Likewise.
        * fold-const.c (non_lvalue, operand_equal_p, fold): Likewise.
        (fold_checksum_tree, tree_expr_nonnegative_p): Likewise.
        * gengtype.c (adjust_field_tree_exp): Likewise.
        * stmt.c (warn_if_unused_value): Likewise.
        * tree-gimple.c (recalculate_side_effects): Likewise.
        * tree-pretty-print.c (dump_generic_node): Likewise.
        * tree.c (make_node_stat, first_rtl_op, unsave_expr_1): Likewise.
        (unsafe_for_reeval, stabilize_reference, build1_stat): Likewise.
        * tree.h (RTL_EXPR_SEQUENCE, RTL_EXPR_RTL, RTL_EXPR_ALT_RTL): Remove.

        * stmt.c (struct stmt_status): Remove x_last_expr_type,
        x_last_expr_value, x_last_expr_alt_rtl, x_expr_stmts_for_value.
        (last_expr_type, last_expr_value, last_expr_alt_rtl): Remove.
        (expand_expr_stmt): Merge with expand_expr_stmt_value.  Remove
        all the bits that tracked last_expr.
        (expand_end_bindings): Don't track last_expr.
        (expand_start_stmt_expr, expand_end_stmt_expr): Remove.
        (clear_last_expr): Remove.
        (expand_asm): Don't call it.
        (expand_asm_operands, expand_end_cond): Likewise.
        (expand_naked_return, expand_null_return_1): Likewise.
        * c-typeck.c (c_begin_compound_stmt): Likewise.
        * cfgexpand.c (expand_block): Use expand_expr_stmt.
        * expr.c (expand_expr_real_1): Likewise.
        * tree.h: Update prototypes.

        * function.h (struct sequence_stack): Remove sequence_rtl_expr.
        (struct emit_status): Remove sequence_rtl_expr.
        (struct function): Remove x_rtl_expr_chain.
        (seq_rtl_expr, rtl_expr_chain): Remove.
        * function.c (struct temp_slot): Remove rtl_expr.
        (assign_stack_temp_for_type): Don't set it.
        (free_temp_slots, pop_temp_slots): Don't check it.
        (free_after_compilation): Don't clear x_rtl_expr_chain.
        (fixup_var_refs): Don't search it.
        (preserve_rtl_expr_result, free_temps_for_rtl_expr): Remove.
        * emit-rtl.c (start_sequence): Don't use sequence_rtl_expr
        or seq_rtl_expr.
        (push_topmost_sequence): Likewise.
        (end_sequence, init_emit): Likewise.
        (start_sequence_for_rtl_expr): Remove.
        * expmed.c (make_tree): Build a VAR_DECL instead of an RTL_EXPR.
        * rtl.h (preserve_rtl_expr_result): Remove.

ada/
        * trans.c (gnat_stabilize_reference): Don't handle RTL_EXPR.
        * utils.c (max_size): Likewise.

cp/
        * class.c (fixed_type_or_null): Don't handle RTL_EXPR.
        * method.c (synthesize_method): Don't clear_last_expr.
        * name-lookup.c (maybe_push_cleanup_level): Likewise.

From-SVN: r84009
2004-07-01 18:15:43 -07:00
Richard Henderson
497be9785f tree.def (REALPART_EXPR, [...]): Change class to 'r'.
* tree.def (REALPART_EXPR, IMAGPART_EXPR): Change class to 'r'.
        * fold-const.c (operand_equal_p <case 'r'>): Add REALPART_EXPR,
        IMAGPART_EXPR.
        * tree-dump.c (dequeue_and_dump): Handle REALPART_EXPR and
        IMAGPART_EXPR explicitly.
        * tree-inline.c (estimate_num_insns_1): Don't handle REALPART_EXPR
        and IMAGPART_EXPR specially.
        * tree.c (build1_stat): Copy TREE_THIS_VOLATILE into class 'r'.

From-SVN: r83825
2004-06-28 15:26:24 -07:00
Paolo Bonzini
2851dd684b fold-const.c (fold_cond_expr_with_comparison): Add ARG1 parameter.
2004-06-28  Paolo Bonzini  <bonzini@gnu.org>

	* fold-const.c (fold_cond_expr_with_comparison): Add ARG1
	parameter.  Use it instead of ARG00 to produce the result.

From-SVN: r83768
2004-06-28 10:16:00 +00:00
Roger Sayle
64b663f8bd fold-const.c (fold): Optimize ~X|X and X|~X as -1.
* fold-const.c (fold) <BIT_IOR_EXPR>: Optimize ~X|X and X|~X as -1.
	<BIT_XOR_EXPR>: Optimize ~X|X and X|~X as -1.
	<BIT_AND_EXPR>: Optimize ~X&X and X&~X as 0.
	<TRUTH_AND_EXPR, TRUTH_ANDIF_EXPR>: Optimize !X&&X and X&&!X as false.
        <TRUTH_OR_EXPR, TRUTH_ORIF_EXPR>: Optimize !X||X and !X||X as true.
	<TRUTH_XOR_EXPR>: Optimize !X^X and X^X! as true.  Now that
	TRUTH_XOR_EXPR is a commutative tree code, don't test whether arg0
	is a constant.

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

From-SVN: r83733
2004-06-27 15:23:46 +00:00
Kazu Hirata
61ada8ae18 c-typeck.c, [...]: Fix comment typos.
* c-typeck.c, cfgexpand.c, ddg.c, ddg.h, df.c, fold-const.c,
	gcov.c, gimplify.c, modulo-sched.c, passes.c, tree-cfg.c,
	tree-mudflap.c, tree-nrv.c, tree-outof-ssa.c, tree-ssa-dom.c,
	tree-ssa-dse.c, tree-ssa-operands.c, tree-ssa-pre.c,
	tree-tailcall.c: Fix comment typos.  Follow spelling
	conventions.

From-SVN: r83703
2004-06-26 05:03:55 +00:00
Richard Kenner
0c3b8d135d fold-const.c (fold_addr_expr_with_type): Look through all valid LHS modifiers to find a base to mark addressable.
* fold-const.c (fold_addr_expr_with_type): Look through all
	valid LHS modifiers to find a base to mark addressable.

From-SVN: r83628
2004-06-24 21:28:34 -04:00
Andrew Pinski
b713a445f2 re PR middle-end/15988 (ICE in fold_convert with pointer-to-member-function)
2004-06-23  Andrew Pinski  <apinski@apple.com>

        PR middle-end/15988
        * fold-const.c (fold_convert): Types which are compatible
        can be converted with only a NOP_EXPR.

2004-06-23  Andrew Pinski  <apinski@apple.com>

        PR middle-end/15988
        * g++.dg/opt/ptrmem4.C: New test.

From-SVN: r83585
2004-06-23 23:51:56 -07:00
Eric Christopher
d182275449 fold-const.c (make_range): Cleanup type checking through function.
2004-06-23  Eric Christopher  <echristo@redhat.com>

	* fold-const.c (make_range): Cleanup type checking through function.
	Remove orig_type. Replace with checks to exp_type and arg0_type.
	Clarify comment when converting from unsigned to signed.

From-SVN: r83576
2004-06-24 02:00:25 +00:00
Richard Henderson
0f59171d71 tree.def (VTABLE_REF): Remove.
* tree.def (VTABLE_REF): Remove.
        (OBJ_TYPE_REF): New.
        (TRY_CATCH_EXPR, TRY_FINALLY_EXPR): Set type 's'.
        * expr.c (expand_expr_real_1): Replace VTABLE_REF with OBJ_TYPE_REF.
        * fold-const.c (non_lvalue): Likewise.
        * gimplify.c (gimplify_expr): Likewise.
        (gimplify_call_expr): Use is_gimple_call_addr.
        * langhooks-def.h (LANG_HOOKS_FOLD_OBJ_TYPE_REF): New.
        * langhooks.h (fold_obj_type_ref): New.
        * tree-gimple.c (is_gimple_call_addr): New.
        * tree-gimple.h (is_gimple_call_addr): Declare.
        * tree-inline.c (inlinable_function_p): Fix merge error.
        (estimate_num_insns_1): Replace VTABLE_REF with OBJ_TYPE_REF.
        * tree-pretty-print.c (dump_generic_node): Likewise.
        (print_call_name): Handle OBJ_TYPE_REF.
        * tree-ssa-ccp.c (fold_stmt): Fold OBJ_TYPE_REF.
        * tree-ssa-operands.c (get_expr_operands): Handle OBJ_TYPE_REF.
        * tree.h (OBJ_TYPE_REF_EXPR): New.
        (OBJ_TYPE_REF_OBJECT, OBJ_TYPE_REF_TOKEN): New.
        * doc/c-tree.texi (VTABLE_REF): Remove.
        * objc/objc-act.c (build_objc_method_call): Build an OBJ_TYPE_REF.
cp/
        * class.c (build_vfn_ref): Take a pointer not object.  Build
        an OBJ_TYPE_REF.
        (cp_fold_obj_type_ref): New.
        * call.c (build_over_call): Update build_vfn_ref call.
        * cp-lang.c (LANG_HOOKS_FOLD_OBJ_TYPE_REF): New.
        * cp-tree.h (cp_fold_obj_type_ref): Declare.
testsuite/
        * g++.dg/opt/devirt1.C: New.

From-SVN: r83531
2004-06-22 17:26:04 -07:00
Richard Kenner
44de5aeb00 alias.c (adjust_offset_for_component_ref): Use component_ref_field_offset.
* alias.c (adjust_offset_for_component_ref): Use
	component_ref_field_offset.
	* c-decl.c (build_array_declarator): Add news args for ARRAY_REF.
	* c-gimplify.c (gimplify_expr_stmt): Use alloc_stmt_list.
	(gimplify_decl_stmt): Call gimplify_type_sizes for type.
	For decl, call gimplify_one_sizepos and use statement list.
	(gimplify_compound_literal_expr): New arg PRE_P.
	Add statement to PRE_P list and return DECL.
	(c_gimplify_expr, case COMPOUND_LITERAL_EXPR): Add arg to
	gimplify_compound_literal_expr.
	* c-tree.h (getdecls): Deleted.
	* c-typeck.c (build_component_ref): Add operand for COMPONENT_REF.
	(build_array_ref): Add two operands for ARRAY_REF.
	(build_unary_op): Set TREE_INVARIANT and TREE_CONSTANT for
	COMPOUND_LITERAL_EXPR.
	* coverage.c (tree_coverage_counter_ref): Add new operands
	for ARRAY_REF.
	* emit-rtl.c (component_ref_for_mem_expr): Add new operand
	for COMPONENT_REF.
	(set_mem_attributes_minus_bitpos): Use array_ref_low_bound
	and array_ref_element_size.
	(widen_memory_access):Use component_ref_field_offset.
	* explow.c (update_nonlocal_goto_save_area): Add two operands
	for ARRAY_REF.
	* expr.c (array_ref_element_size, array_ref_low_bound): New functions.
	(component_ref_field_offset): Likewise.
	(get_inner_reference): Use them.
	(expand_expr_real_1, case ARRAY_REF): Use array_ref_low_bound.
	* fold-const.c (fold, case EQ_EXPR): Properly handle DECL_SIZE.
	(fold_read_from_constant_string): Use array_ref_low_bound.
	Verify that result is a character type.
	(build_fold_indirect_ref): Add two operands for ARRAY_REF.
	* function.c (expand_function_start): Likewise.
	* gimple-low.c (expand_var_p): Delete duplicated line.
	* gimplify.c: Add static decls for local functions.
	(cgraph.h): Now included.
	(create_tmp_var): Remove check for ARRAY_TYPE.
	(copy_if_shared_r): Look at bounds and sizes of types.
	(build_and_jump): Return alloc_stmt_list instead of build_empty_stmt.
	(gimplify_exit_expr, shortcut_cond_expr): Likewise.
	(gimplify_save_expr, gimple_push_cleanup): Likewise.
	(gimplify_init_constructor): Likewise.
	WANT_VALUE now bool.
	If empty list with no result wanted, return GS_UNHANDLED.
	Add additional operands for ARRAY_REF and COMPONENT_REF.
	(canonicalize_component_ref): Convert to &array[L].
	(gimplify_array_ref_to_plus): Use array_ref_element_size and
	array_ref_lower_bound.
	(build_addr_expr_with_type, build_addr_expr): New functions.
	(gimplify_compound_lval): WANT_LVALUE now bool.
	Major rework to allow handle_component_p and initialize and
	gimplify new operands for ARRAY_REF, ARRAY_RANGE_REF, and
	COMPONENT_REF.
	(gimplify_array_ref): Deleted.
	(gimplify_self_mod_expr): WANT_VALUE now bool.
	(gimplify_modify_expr): Gimplify to_p and from_p later.
	Factor out code into gimplify_modify_expr_rhs and call twice.
	Move variable-size code earlier and handle PLACEHOLDER_EXPR.
	(gimplify_modify_expr_rhs, gimplify_variable_sized_compare): New fns.
	(gimplify_addr_expr, case VIEW_CONVERT_EXPR): New case.
	(gimplify_expr, case ARRAY_REF): Delete special case.
	Instead handle like COMPONENT_REF; also do ARRAY_RANGE_REF,
	IMAGPART, and REALPART the same way.
	(gimplify_expr, case VIEW_CONVERT_EXPR): New case.
	(gimplify_expr): Call gimplify_variable_sized_compare if applicable.
	Call alloc_stmt_list instead of build_empty_stmt.
	Deal with _REF that's volatile.
	(gimplify_type_sizes, gimplify_one_sizepos): New functions.
	(unshare_body, unvisit_body): New functions.
	(gimplify_body): Call them.
	* stmt.c (expand_stack_alloc): Don't expand TYPE_MAX_VALUE.
	* stor-layout.c (get_pending_sizes): Don't change SAVE_EXPR_CONTEXT.
	* tree-alias-common.c (get_alias_var): Also skip ARRAY_RANGE_REF.
	* tree-cfg.c (tree_node_can_be_shared): Treat ARRAY_RANGE_REF
	like ARRAY_REF.
	(verify_expr, case ADDR_EXPR): Use handled_component_p.
	* tree-dfa.c (get_virtual_var): Likewise.
	* tree-dump.c (dequeue_and_dump, case COMPONENT_REF, ARRAY_REF):
	New cases to dump new operands; likewise for ARRAY_RANGE_REF.
	* tree-eh.c (tree_could_trap, case ARRAY_RANGE_REF): Like ARRAY_REF.
	* tree-gimple.c (is_gimple_addr_expr_arg): Add ARRAY_RANGE_REF
	and INDIRECT_REF.
	(get_base_address): Use handled_component_p.
	* tree-gimple.h (gimplify_type_sizes, gimplify_one_sizepos): New.
	* tree-line.c (walk_tree): Walk more things for types and decls.
	* tree-mudflap.c (mf_build_check_statement_for): Add new operands
	for ARRAY_REF and COMPONENT_REF.
	(mx_xform_derefs_1): Clean up usage of decl sizes.
	* tree-nested.c (build_addr): Use handled_component_p.
	(walk_stmts, case CATCH_EXPR): Add missing "break".
	(get_static_chain, get_frame_field): Add new operand for COMPONENT_REF.
	(finalize_nesting_tree_1): Likewise.
	(convert_nonlocal_reference, case ARRAY_RANGE_REF): Like ARRAY_REF
	and process additional operands.
	(convert_local_reference): Likewise.
	* tree-outof-ssa.c (discover_nonconstant_array_refs_r): Treat
	ARRAY_RANGE_REF similarly to ARRAY_REF.
	* tree-pretty-print.c (dump_generic_node, case QUAL_UNION_TYPE): Handle
	like RECORD_TYPE.
	(dump_generic_node, case COMPONENT_REF): Print offset operand.
	(dump_generic_node, case ARRAY_RANGE_REF): Treat like ARRAY_REF
	and print lower bound and element size for both.
	(op_prio, case ARRAY_RANGE_REF): Like ARRAY_REF.
	* tree-sra.c (csc_build_component_ref): Add new operand.
	(scalarize_call_expr): Use get_base_address.
	* tree-ssa-ccp.c (widen_bitfield): Clean up size handling.
	(maybe_fold_offset_to_array_ref): Rework to handle input having an
	ARRAY_REF, refine handling of lower bound, and add new operands
	for ARRAY_REF.
	(maybe_fold_to_component_ref): Add new operand for COMPONENT_REF.
	(maybe_fold_stmt_indirect): Only fold *&B to B if types match.
	(maybe_fold_stmt_addition): Only handle constant lower bound.
	* tree-ssa-operands.c (get_expr_operands): Minor rearrangements.
	Treat ARRAY_REF and ARRAY_RANGE_REF the same; look at extra operands.
	Look at new offset operand of COMPONENT_REF.
	* tree-ssa.c (set_is_used): Use handled_component_p.
	* tree.c (substitute_in_expr, case COMPONENT_REF): Add new operand.
	(stabilize_reference, case COMPONENT_REF): Likewise.
	(stabilize_reference, case ARRAY_RANGE_REF, ARRAY_REF): Similarly.
	(recompute_tree_invariant_for_addr_expr): Completely rework to
	be more precise.  Also set TREE_SIDE_EFFECTS.
	(build1_stat, case ARRAY_EXPR): Don't handle TREE_SIDE_EFFECTS here.
	(build2_stat, build3_stat, build4_stat): For references,
	propagate TREE_THIS_VOLATILE.
	(get_unwidened): Add new operand for COMPONENT_REF.
	(get_narrower): Likewise; use host_integerp for DECL_SIZE.
	* tree.def (COMPONENT_REF): Add new operand.
	(ARRAY_REF, ARRAY_RANGE_REF): Add two new operands.
	* tree.h (array_ref_element_size, array_ref_low_bound): New decls.
	(component_ref_field_offset): Likewise.
	* config/alpha/alpha.c (alpha_va_start): Add new op for COMPONENT_REF.
	(alpha_gimplify_va_arg): Likewise.
	* config/i386/i386.c (ix86_va_start, ix86_gimplify_va_arg): Likewise.
	* config/i860/i860.c (i860_va_start, i860_va_arg): Likewise.
	* config/iq2000/iq2000.c (iq2000_va_arg): Likewise.
	* config/mips/mips.c (mips_va_start, mips_va_arg): Likewise.
	* config/rs6000/rs6000.c (rs6000_va_start, rs6000_gimplify_va_arg):
	Likewise.
	* config/s390/s390.c (s390_va_start, s390_gimplify_va_arg): Likewise.
	* config/sh/sh.c (sh_va_start, sh_va_arg): Likewise.
	* config/stormy16/stormy16.c (xstormy1_expand_builin_va_start):
	Likewise.
	(xstormy16_expand_builtin_va_arg): Likewise.
	* config/xtensa/xtensa.c (xtensa_va_start, xtensa_va_arg): Likewise.

	* cp/call.c (build_vfield_ref): Add new operand for COMPONENT_REF.
	(build_new_method_call): Likewise.
	* cp/decl.c (local_variable_p_walkfn): Don't walk into types.
	* cp/decl2.c (grok_array_decl): Add new operands for ARRAY_REF.
	(build_anon_union_vars): Add new operand for COMPONENT_REF.
	* cp/init.c (buld_new): Add new operand for ARRAY_REF.
	* cp/method.c (do_build_copy_constructor): New op for COMPONENT_REF.
	(do_build_assign_ref): Likewise.
	* cp/parser.c (cp_parser_direct_new_declarator): Add new operands
	for ARRAY_REF.
	(cp_parser_direct_declarator): Likewise.
	* cp/pt.c (tsubst): Likewise.
	(tsubst_copy, tsubst_copy_and_build): Likewise; also add new operand
 	for COMPONENT_REF.
	* cp/semantics.c (finish_non_static_data_member): Add new operand
	for COMPONENT_REF.
	* cp/typeck.c (build_class_member_access_expr): Likewise.
	(build_class_member_access_expr, finish_class_member_access_expr):
	Likewise.
	(build_ptrmemfunc_access_expr): Likewise.
	(build_array_ref): Add new operands for ARRAY_REF.
	* cp/typeck2.c (split_nonconstant_init_1): Likewise; COMPONENT_REF too.
	* cp/tree.c (count_trees_r, no_linkage_helper): Don't walk in types.

	* fortran/f95-lang.c (LANG_HOOKS_GIMPLE_BEFORE_INLINING): Deleted.
	* fortran/trans-array.c (gfc_conv_descriptor_data): Add operand
	for COMPONENT_REF.
	(gfc_conv_descriptor_offset, gfc_conv_descriptor_dtype): Likewise.
	(gfc_conv_descriptor_dimension, gfc_conv_descriptor_stride): Likewise.
	(gfc_conv_descriptor_lbound, gfc_conv_descriptor_ubound): Likewise.
	* fortran/trans-common.c (create_common): Likewise.
	* fortran/trans-expr.c (gfc_conv_component_ref): Likewise.
	* fortran/trans-io.c (set_parameter_value): Likewise.
	(set_parameter_ref, set_string, set_flag, io_result): Likewise.
	(transfer_expr): Likewise.
	* fortran/trans-decl.c (gfc_trans_auto_character_variable):
	Set up to get DECL_SIZE and DECL_SIZE_UNIT gimplified.
	(gfc_simplify_function): New function.
	(gfc_generate_function-code): Properly handle nested functions.
	* fortran/trans.c (gfc_build_array_ref): Add two new operands
	for ARRAY_REF.

	* java/class.c (build_class_ref): Add new operand for COMPONENT_REF.
	(build_static_field_ref): Likewise and add new operands for ARRAY_REF.
	* java/constants.c (build_ref_from_constant_pool): Likewise.
	* java/expr.c (build_java_array_length_access): Likewise.
	(build_get_class, build_field_ref, build_known_method_ref): Likewise.
	(invoke_build_dtable, build_invokevirtual): Likewise.
	(build_invokeinterface, java_expand_expr): Likewise.
	(emit_init_test_initialization): Likewise.
	* java/java-gimplify.c (java_gimplify_new_array_init): Likewise.
	* java/parse.y (make_qualifed_name, build_array_ref): Likewise.

	* objc/ojbc-act.c (generate_static_references): Add additional
	operands to ARRAY_REF.
	(generate_strings, build_method_prototype_list_template): Likewise.
	(generate_protocol_list): Likewise.

From-SVN: r83474
2004-06-21 23:07:05 -04:00
Roger Sayle
54d581a26e fold-const.c (operand_equal_p): Pass flags in recursive calls for binary and relational operations.
* fold-const.c (operand_equal_p): Pass flags in recursive calls for
	binary and relational operations.  Add support for TRUTH_ANDIF_EXPR,
	TRUTH_ORIF_EXPR, TRUTH_AND_EXPR, TRUTH_OR_EXPR and TRUTH_XOR_EXPR.
	* tree.c (commutative_tree_code): Also list UNORDERED_EXPR,
	ORDERED_EXPR, UNEQ_EXPR, LTGT_EXPR, TRUTH_AND_EXPR, TRUTH_OR_EXPR
	and TRUTH_XOR_EXPR.

From-SVN: r83433
2004-06-21 12:59:58 +00:00
Richard Henderson
3a5b9284da c-common.c (verify_sequence_points): Export.
* c-common.c (verify_sequence_points): Export.
        (c_expand_expr_stmt): Move to c-typeck.c.
        * c-common.h (c_expand_expr_stmt): Remove.
        (verify_sequence_points): Declare.
        * c-mudflap.c (mflang_flush_calls): Use c_finish_expr_stmt.
        * c-parse.in (for_init_stmt, stmt): Likewise.
        * c-tree.h (c_finish_expr_stmt): Declare.
        (c_tree_expr_nonnegative_p): Remove.
        * c-typeck.c (c_tree_expr_nonnegative_p): Remove.
        (build_conditional_expr, build_binary_op): Use tree_expr_nonnegative_p.
        (emit_side_effect_warnings): New.
        (c_finish_expr_stmt): Rename from c_expand_expr_stmt.  Use it.
        (c_finish_stmt_expr): Work without EXPR_STMT.  Handle eh regions.
        Use emit_side_effect_warnings.
        (push_cleanup): Copy STATEMENT_LIST_STMT_EXPR.
        * fold-const.c (tree_expr_nonnegative_p): Handle TARGET_EXPR.
        * gimplify.c (gimplify_modify_expr): Don't discard TARGET_EXPR
        with void initializer.
        (gimplify_target_expr): Handle void BIND_EXPR initializer.
        * tree-inline.c (estimate_num_insns_1): Fix type lookup for
        INIT_EXPR and MODIFY_EXPR.
        * objc/objc-act.c (build_module_descriptor): Use add_stmt
        instead of c_expand_expr_stmt.
cp/
        * semantics.c (finish_expr_stmt): Call verify_sequence_points.
testsuite/
        * gcc.dg/tree-ssa/20030714-1.c: Rename variables to avoid
        merging && to BIT_FIELD_REF.

From-SVN: r83429
2004-06-21 02:15:29 -07:00
Paolo Bonzini
2c486ea78c fold-const.c (fold_cond_expr_with_comparison): New function, extracted from fold.
2004-06-21  Paolo Bonzini  <bonzini@gnu.org>

	* fold-const.c (fold_cond_expr_with_comparison):
	New function, extracted from fold.
	(fold): Extract code to fold A op B ? A : C, use
	it to fold A op B ? C : A.  Really optimize
	A & N ? N : 0 where N is a power of two.  Avoid
	relying on canonicalization and recursion for
	foldings of COND_EXPR to happen.

From-SVN: r83428
2004-06-21 08:34:12 +00:00
Roger Sayle
ee8db92b39 fold-const.c (fold): Add constant folding for unordered comparison tree nodes.
* fold-const.c (fold) <UNORDERED_EXPR, ORDERED_EXPR, UNLT_EXPR,
	UNLE_EXPR, UNGT_EXPR, UNGE_EXPR, UNEQ_EXPR, LTGT_EXPR>: Add
	constant folding for unordered comparison tree nodes.  If both
	operands are real constants, call fold_relational_const.  If either
	operand is a NaN, evaluate the other for side-effects and return a
	constant.  Optimize (double)float1 CMP (double)float2 into the
	equivalent float1 CMP float2.
	(nondestructive_fold_binary_to_constant) <UNORDERED_EXPR,
	ORDERED_EXPR, UNLT_EXPR, UNLE_EXPR, UNGT_EXPR, UNGE_EXPR, UNEQ_EXPR,
	LTGT_EXPR>: Call fold_relational_const for constant operands.
	(fold_relational_const): Add support for unordered comparison tree
	nodes.  Don't constant fold "ordered" floating point comparisons
	against NaN if when flag_trapping_math is set.

	* gcc.dg/unordered-2.c: New test case.
	* gcc.dg/unordered-3.c: New test case.

From-SVN: r83379
2004-06-19 00:17:33 +00:00
Jakub Jelinek
e1af829942 fold-const.c (build_range_check): If !in_p and recursive call fails, exit immediately.
* fold-const.c (build_range_check): If !in_p and recursive call
	fails, exit immediately.  If high - low overflows and etype is
	a signed type, retry with unsigned etype.
	(merge_ranges): If !in0_p and !in1_p, handle even range2 adjacent
	to range1 at TYPE_MAX_VALUE and TYPE_MIN_VALUE.

	* gcc.dg/range-test-1.c: New test.
	* g++.dg/opt/range-test-1.C: New test.

From-SVN: r83369
2004-06-19 01:15:59 +02:00
Roger Sayle
9bb80bb2de fold-const.c (constant_boolean_node): Handle boolean_type_node directly...
* fold-const.c (constant_boolean_node): Handle boolean_type_node
	directly, return either boolean_true_node or boolean_false_node.

From-SVN: r83338
2004-06-18 03:35:29 +00:00
Roger Sayle
1382f0f09d * fold-const.c (fold_relational_const): Use constant_boolean_node.
From-SVN: r83307
2004-06-17 20:19:57 +00:00
Jeff Law
fd660b1bee fold-const.c (swap_tree_comparison): No longer static.
* fold-const.c (swap_tree_comparison): No longer static.
        (tree_swap_operands_p): Similarly.  Return true if both operands
        are SSA_NAMEs and the first operand has a higher version number than
        the second operand.
        * tree.h (swap_tree_comparison): Prototype.
        (tree_swap_operands_p): Prototype.
        * tree-ssa-operands.c (get_expr_operands): For commutative
        operators and relational comparisons, canonicalize the
        order of the operands.

        * gcc.dg/tree-ssa/20040615-1.c: New test.
        * gcc.dg/tree-ssa/20030824-1.c: Update expected output to
        be less sensitive to operand ordering.
        * gcc.dg/tree-ssa/20030824-2.c: Likewise.

From-SVN: r83224
2004-06-15 23:09:41 -06:00
Richard Henderson
325c369115 c-common.c (lang_gimplify_stmt): Remove next_p argument.
* c-common.c (lang_gimplify_stmt): Remove next_p argument.
	(if_elt, if_stack, if_stack_space, c_expand_start_cond, c_finish_then,
	c_expand_end_cond, c_expand_start_else, c_finish_else, c_begin_if_stmt,
	c_begin_while_stmt, c_finish_while_stmt_cond): Move to c-typeck.c.
	(finish_fname_decls, fname_decl): Use statement_lists.
	(c_expand_expr_stmt): Don't set last_expr_type.
	(c_type_hash): Fix indentation.
	(c_safe_from_p): Don't follow TREE_CHAIN.
	(c_tree_chain_matters_p): Remove.
	* c-common.def (SCOPE_STMT): Remove.
	(CLEANUP_STMT): Redefine to contain its own body.
	* c-common.h (struct stmt_tree_s): Remove x_last_stmt,
	x_last_expr_type, x_last_expr_filename, x_scope_stmt_stack.
	Add x_cur_stmt_list.
	(last_tree, last_expr_type, last_expr_filename, RECHAIN_STMTS): Remove.
	(cur_stmt_list): New.
	(STATEMENT_LIST_STMT_EXPR): New.
	(SCOPE_BEGIN_P, SCOPE_END_P, SCOPE_STMT_BLOCK, SCOPE_NULLIFIED_P,
	SCOPE_NO_CLEANUPS_P, SCOPE_PARTIAL_P, NEW_FOR_SCOPE_P): Remove.
	(CLEANUP_BODY): New.
	(CLEANUP_DECL): Move to operand 2.
	(c_common_stmt_codes): Remove SCOPE_STMT.
	(COMPOUND_STMT_NO_SCOPE, COMPOUND_STMT_BODY_BLOCK): Remove.
	* c-decl.c (c_scope_stmt_stack, current_scope_stmt_stack): Remove.
	(c_push_function_context, c_pop_function_context): Don't save it.
	(finish_decl): Set TREE_USED on the decl for a cleanup.
	Use push_cleanup.
	(store_parm_decls): Use statement lists.
	(finish_function): Remove compstmt rule workaround.  Use statement
	lists.  Call finish_fname_decls after finalizing the body.
	(c_begin_compound_stmt): Move to c-typeck.c.
	* c-dump.c (c_dump_tree): Remove SCOPE_STMT.
	* c-gimplify.c (gimplify_cleanup_stmt, gimplify_cleanup_stmts): New.
	(c_genericize): Invoke them.
	(c_gimplify_stmt): Don't look through TREE_CHAIN.  Kill SCOPE_STMT.
	(c_build_bind_expr): Export.
	(gimplify_block, gimplify_cleanup): Remove.
	(gimplify_condition): Use gimplify_stmt.
	(gimplify_for_stmt): Remove FOR_INIT_STMT chaining hack.
	(gimplify_if_stmt): Remove recursion hack.
	(c_gimplify_expr): Remove STMT_EXPR handling.
	(stmt_expr_last_stmt, gimplify_stmt_expr): Remove.
	(is_last_stmt_of_scope): Remove.
	* c-lang.c (LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P): Remove.
	* c-mudflap.c (mflang_flush_calls): Use c_begin_compound_stmt,
	c_end_compound_stmt.
	* c-objc-common.c (build_cdtor): Likewise.
	* c-parse.in (primary): Use c_finish_stmt_expr.
	(push_scope, pop_scope): Remove.
	(c99_block_start, compstmt_start): Use c_begin_compound_stmt.
	(c99_block_end, compstmt): Use c_end_compound_stmt.
	(c99_block_lineno_labeled_stmt): Likewise.
	(compstmt_primary_start): Use c_begin_stmt_expr.
	(simple_if, select_or_iter_stmt): Update calls to stmt builders.
	(do_stmt_start): Fill in body directly.
	(lineno_stmt): Avoid setting lineno on constants.
	* c-pretty-print.c (pp_c_statement): Handle STATEMENT_LIST.
	Remove SCOPE_STMT.
	* c-semantics.c (begin_stmt_tree): Remove.
	(push_stmt_list, re_push_stmt_list, pop_stmt_list): New.
	(add_stmt): Use statement lists.
	(add_scope_stmt, finish_stmt_tree): Remove.
	(push_cleanup): New.
	* c-tree.h: Move some decls from c-common.h.
	* c-typeck.c (c_tree_expr_nonnegative_p): Simplify for statement lists.
	(do_case, c_finish_case): Likewise.
	(c_finish_then): Take body for then as argument.
	(c_finish_else): Similarly.
	(c_begin_for_stmt, c_finish_for_stmt_init, c_finish_for_stmt_cond,
	c_finish_for_stmt_incr, c_finish_for_stmt): New.
	(c_begin_stmt_expr, c_finish_stmt_expr): New.
	(c_begin_compound_stmt): Do scope management.
	(c_end_compound_stmt): New.
	* fold-const.c (tree_expr_nonnegative_p): Fix BIND_EXPR.
	* gimplify.c (voidify_wrapper_expr): Accept temporary argument.
	Look through exception handling constructs.
	(gimplify_bind_expr): Accept temporary argument.
	(gimplify_target_expr): Special case BIND_EXPR bodies.
	(gimplify_expr): Handle fallback == fb_none like a statement.
	* langhooks-def.h (LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P): Kill.
	* langhooks.c (lhd_tree_inlining_tree_chain_matters_p): Remove.
	* langhooks.h (tree_chain_matters_p): Remove.
	* stub-objc.c (objc_clear_super_receiver): New.
	* tree-gimple.h (voidify_wrapper_expr): Update decl.
	(append_to_statement_list, append_to_statement_list_force): Move
	to tree-iterator.h.
	* tree-inline.c (expand_call_inline): Update call.
	(clone_body): Use statement lists.
	(walk_tree): Don't check tree_chain_matters_p.
	(copy_tree_r): Likewise.
	* tree-iterator.c (alloc_stmt_list): Clear lang bits.
	(tsi_link_before, tsi_link_after): Set TREE_SIDE_EFFECTS properly.
	* tree-iterator.h (append_to_statement_list,
	append_to_statement_list_force): Moved from tree-gimple.h.
	* tree-pretty-print.c (dump_generic_node): Clean up TARGET_EXPR dump.
	* objc/objc-act.c (build_module_descriptor): Use c_begin_compound_stmt.
	(objc_enter_block): Likewise.
	(objc_exit_block): Use c_end_compound_stmt.
	(objc_build_try_enter_fragment): Add #error and comment for
	rewriting for OBJCPLUS.
	(objc_build_extract_fragment, objc_build_try_epilogue,
	objc_build_catch_stmt, objc_build_finally_prologue,
	objc_build_finally_epilogue): Update for C statement builders.
	* objc/objc-lang.c (LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P):
	Remove.
cp/
	* call.c (initialize_reference): Don't build CLEANUP_STMT here.
	* cp-gimplify.c (cp_gimplify_stmt): Remove next_p argument.
	(genericize_try_block): Use gimplify_stmt.
	(genericize_catch_block, genericize_eh_spec_block): Likewise.
	(cp_gimplify_init_expr): Remove STMT_EXPR special case.
	(gimplify_must_not_throw_expr): Update voidify_wrapper_expr call.
	* cp-lang.c (LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P): Remove.
	(cp_tree_chain_matters_p): Remove.
	* cp-tree.h (COMPOUND_STMT_TRY_BLOCK): New.
	(COMPOUND_STMT_BODY_BLOCK): New.
	(STATEMENT_LIST_NO_SCOPE, STATEMENT_LIST_TRY_BLOCK): New.
	(EXPR_STMT_STMT_EXPR_RESULT): New.
	(building_stmt_tree): Check cur_stmt_list.
	(tf_stmt_expr_cmpd, tf_stmt_expr_body): Remove.
	(BCS_NO_SCOPE, BCS_TRY_BLOCK, BCS_FN_BODY): New.
	* decl.c (poplevel): Use pop_stmt_list for minding cleanups.
	(cp_finish_decl): Use push_cleanup.
	(start_function, finish_function): Use statement lists.
	(finish_stmt): Do nothing.
	* except.c (begin_eh_spec_block): Use statement lists.
	(check_handlers_1, check_handlers): Likewise.
	* init.c (construct_virtual_base): Don't add extra compound stmts.
	(build_vec_init): Likewise.
	* name-lookup.c (maybe_push_cleanup_level): Use statement lists.
	* name-lookup.h (struct cp_binding_level): Add statement_list.
	* parser.c (cp_parser_statement): Take the STMT_EXPR node, not a bool.
	(cp_parser_labeled_statement, cp_parser_expression_statement,
	cp_parser_statement_seq_opt): Likewise.
	(cp_parser_compound_statement): Likewise.  Take bool for try block.
	(cp_parser_selection_statement): Tidy if processing.
	(cp_parser_already_scoped_statement): Rewrite to do what it says.
	* pt.c (tsubst_copy): Move STMT_EXPR to tsubst_expr.
	(tsubst_expr): Rewrite STMT_EXPR processing.  Handle STATEMENT_LIST.
	Mind COMPOUND_STMT_TRY_BLOCK, EXPR_STMT_STMT_EXPR_RESULT.
	* semantics.c (do_poplevel, do_pushlevel): Use statement lists.
	(finish_cond): New, rewritten from FINISH_COND.
	(simplify_loop_decl_cond): New.
	(finish_expr_stmt): Avoid nested EXPR_STMTs.
	(begin_if_stmt, finish_if_stmt_cond, finish_then_clause,
	begin_else_clause, finish_else_clause, finish_if_stmt,
	begin_while_stmt, finish_while_stmt_cond, finish_while_stmt,
	begin_do_stmt, finish_do_body, begin_for_stmt, finish_for_init_stmt,
	finish_for_cond, finish_for_stmt, begin_switch_stmt,
	finish_switch_cond, finish_switch_stmt, begin_try_block,
	finish_try_block, finish_cleanup_try_block, finish_function_try_block,
	finish_handler_sequence, finish_function_handler_sequence,
	begin_handler, finish_handler_parms, finish_handler,
	begin_stmt_expr, finish_stmt_expr_expr, finish_stmt_expr): Rewrite
	using statement lists.
	(begin_compound_stmt): Replace has_no_scope argument with flags.
	Update all callers.  Use statement lists.
	(finish_compound_stmt): Likewise.
	(finish_decl_cleanup, finish_eh_cleanup): Use push_cleanup.
	(current_scope_stmt_stack): Remove.
	(simplify_aggr_init_expr): Don't muck with TREE_CHAIN.
	* typeck2.c (split_nonconstant_init_1, split_nonconstant_init):
	Rewrite with statement lists.
testsuite/
	* g++.dg/ext/stmtexpr1.C: XFAIL.
	* gcc.dg/20030612-1.c: XFAIL.

From-SVN: r83221
2004-06-15 18:21:38 -07:00
Paolo Bonzini
3dd8069d49 fold-const.c (operand_equal_p): Update comment.
2004-06-15  Paolo Bonzini  <bonzini@gnu.org>

	* fold-const.c (operand_equal_p): Update comment.

From-SVN: r83173
2004-06-15 10:27:30 +00:00
Andrew Pinski
a40de696ac fold-const.c (fold_checksum_tree <case 't'>): Only look at TREE_VALUES if the EXPR is an ENUMERAL_TYPE.
2004-06-13  Andrew Pinski  <pinskia@physics.uc.edu>

        * fold-const.c (fold_checksum_tree <case 't'>): Only
        look at TREE_VALUES if the EXPR is an ENUMERAL_TYPE.
        Only look at TYPE_MIN_VALUE and TYPE_MAX_VALUE if
        EXPR is an INTEGERAL_TYPE or a scalar float type.

From-SVN: r83068
2004-06-13 15:15:51 -07:00
Roger Sayle
08039bd80b fold-const.c (omit_two_operands): New function.
* fold-const.c (omit_two_operands): New function.
	* tree.h (omit_two_operands): Prototype here.
	* builtins.c (fold_builtin_unordered_cmp): New function to lower
	C99 unordered comparison builtins to the appropriate tree nodes.
	(fold_builtin_1): Use fold_builtin_unordered_cmp to lower
	BUILT_IN_ISGREATER, BUILT_IN_ISGREATEREQUAL, BUILT_IN_ISLESS,
	BUILT_IN_ISLESSEQUAL and BUILT_IN_ISLESSGREATER.  Manually lower
	BUILT_IN_ISUNORDERED comparisons to an UNORDERED_EXPR tree node.
	(simplify_builtin_memcmp, simplify_builtin_strncmp,
	simplify_builtin_strncat, simplify_builtin_strspn): Use the new
	omit_two_operands function to build the required COMPOUND_EXPRs.

From-SVN: r83040
2004-06-12 19:41:51 +00:00
Jeff Law
3100d64725 fold-const.c (fold_inf_compare): Avoid creating non-gimple code when we are in gimple form.
* fold-const.c (fold_inf_compare): Avoid creating non-gimple
        code when we are in gimple form.


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

From-SVN: r82958
2004-06-10 21:22:30 -06:00
Roger Sayle
9655d83b75 fold-const.c (fold_abs_const): Make extern.
* fold-const.c (fold_abs_const): Make extern.
	* tree.h (fold_abs_const): Prototype here.
	* builtins.c (fold_builtin_fabs): New function to transform
	fabs, fabsf and fabsl builtins into ABS_EXPR tree nodes.
	(fold_builtin_abs): New function to transform abs, labs, llabs
	and imaxabs builtins into ABS_EXPR tree nodes.
	(expand_builtin): Fall back to a function call for abs, labs,
	llabs and imaxabs builtins that survive constant folding.
	(fold_builtin_1): Call fold_builtin_fabs for FABS, FABSF and
	FABSL, and fold_builtin_abs for ABS, LABS, LLABS and IMAXABS.

From-SVN: r82916
2004-06-10 13:29:34 +00:00
Roger Sayle
a653e758f6 fold-const.c (fold_not_const): New function.
* fold-const.c (fold_not_const): New function.
	(fold) <ABS_EXPR>: Don't bother testing wins.
	(fold) <BIT_NOT_EXPR>: Call fold_not_const.
	(nondestructive_fold_unary_to_constant) <BIT_NOT_EXPR>: Likewise.

From-SVN: r82868
2004-06-10 00:02:48 +00:00