Commit Graph

937 Commits

Author SHA1 Message Date
Roger Sayle
350f4ea897 fold-const.c (fold): Rewrite optimization to transform "foo++ == const" into "++foo == const+incr".
* fold-const.c (fold) <EQ_EXPR>: Rewrite optimization to transform
	"foo++ == const" into "++foo == const+incr".

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

From-SVN: r79064
2004-03-07 14:45:42 +00:00
Kaveh R. Ghazi
82b4201fd5 tree.h (BUILTIN_EXP10_P, [...]): New macros.
* tree.h (BUILTIN_EXP10_P, BUILTIN_EXPONENT_P, BUILTIN_SQRT_P,
	BUILTIN_CBRT_P, BUILTIN_ROOT_P): New macros.

	* builtins.c (fold_builtin_logarithm, fold_builtin): Use new
	macros.
	* fold-const.c (fold_mathfn_compare, fold): Likewise.

From-SVN: r79023
2004-03-06 17:47:58 +00:00
Jeff Law
9bf793f935 fold-const.c (fold): An equality comparison of a non-weak object against zero has a known result.
* fold-const.c (fold): An equality comparison of a non-weak object
	against zero has a known result.  Similarly an equality comparison
	of the address of two non-weak, unaliased symbols has a known result.

	* ggc-page.c (struct page_entry): New field PREV.
	(ggc_alloc): Update PREV field appropriately.
	(sweep_pages): Likewise.
	(ggc_free): Likewise.  Use PREV field rather than loop to
	improve ggc_free performance.

cp/
	* init.c (build_vec_delete_1): Convert 2nd argument to NE_EXPR to
	the proper type.

From-SVN: r78713
2004-03-01 12:18:01 -07:00
Eric Botcazou
68a1a5da2b fold-const.c (fold): Strip NOPs that change the signedness for RSHIFT too.
* fold-const.c (fold): Strip NOPs that change the signedness
	for RSHIFT too.  Expand comment.

From-SVN: r78603
2004-02-28 07:33:10 +00:00
Eric Botcazou
288dc1eae2 fold-const.c (fold): Revert 2004-02-25 change.
* fold-const.c (fold): Revert 2004-02-25 change.  Use the original
	operands to build a tree with swapped operands.
	* expr.c (expand_expr_real) <MAX_EXPR>: Consistently use the
	'unsignedp' predicate to specify the signedness.

Co-Authored-By: Roger Sayle <roger@eyesopen.com>

From-SVN: r78558
2004-02-27 08:11:34 +00:00
Kazu Hirata
a110561799 c-decl.c, [...]: Fix comment typos and formatting.
* c-decl.c, c-ppoutput.c, combine.c, cppfiles.c, dwarf2out.c,
	expr.c, fold-const.c, gcc.c, haifa-sched.c, loop-iv.c,
	params.def, read-rtl.c, rtl.c, rtlanal.c, toplev.c: Fix
	comment typos and formatting.  Follow spelling conventions.

From-SVN: r78555
2004-02-27 07:09:43 +00:00
Eric Botcazou
81fbecace5 fold-const.c (fold): Treat MAX_EXPR and MIN_EXPR like comparisons with regard to signedness.
* fold-const.c (fold): Treat MAX_EXPR and MIN_EXPR like
	comparisons with regard to signedness.

From-SVN: r78441
2004-02-25 18:15:52 +00:00
Kazu Hirata
bee07d3f4f combine.c (SHIFT_COUNT_TRUNCATED): Remove.
* combine.c (SHIFT_COUNT_TRUNCATED): Remove.
	* defaults.h (SHIFT_COUNT_TRUNCATED): Provide the default.
	* expmed.c: Assume SHIFT_COUNT_TRUNCATED is always defined.
	* fold-const.c: Likewise.
	* simplify-rtx.c: Likewise.

From-SVN: r78230
2004-02-21 18:41:48 +00:00
Jeff Law
f46e5baad6 fold-const.c (invert_truthvalue): Do not call invert_tree_comparison for unordered comparison codes.
* fold-const.c (invert_truthvalue): Do not call invert_tree_comparison
        for unordered comparison codes.

From-SVN: r78103
2004-02-19 09:57:52 -07:00
Richard Henderson
875427f0e6 * fold-const.c (operand_equal_p): Fix VECTOR_CST comparison.
From-SVN: r77883
2004-02-16 03:59:49 -08:00
Paolo Bonzini
31cc608177 re PR middle-end/14092 (fold strips conversion from pointer to integer)
PR c/14092
* gcc.dg/pr14092-1.c: New testcase.
* fold-const.c (fold) <NEGATE_EXPR>: Convert result of
negate_expr back to the original type.

From-SVN: r77602
2004-02-10 13:41:16 +00:00
Roger Sayle
b83c403610 fold-const.c (fold): Use the original type conversion tree code rather than call fold_convert...
* fold-const.c (fold) <NOP_EXPR>: Use the original type conversion
	tree code rather than call fold_convert, which doesn't specify a
	default floating point to integer conversion.

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

From-SVN: r77535
2004-02-09 14:00:36 +00:00
Roger Sayle
088414c122 re PR middle-end/13696 (enum not useable as array index?)
PR middle-end/13696
	* fold-const.c (fold_convert): New function to provide type
	conversion to the middle-end without using convert.
	(negate_expr, associate_trees, size_diffop, omit_one_operand,
	operand_equal_for_comparison_p, pedantic_omit_one_operand,
	invert_truthvalue, optimize_bit_field_compare, range_binop,
	decode_field_reference, make_range, build_range_check, unextend,
	fold_truthop, extract_muldiv_1, fold_mathfn_compare,
	fold_binary_op_with_conditional_arg, fold_inf_compare,
	fold_single_bit_test, fold, multiple_of_p): Replace all calls to
	convert with calls to fold_convert.

	* g++.dg/opt/fold1.C: New test case.

From-SVN: r77464
2004-02-07 18:57:35 +00:00
Roger Sayle
dfb36f9be2 fold-const.c (negate_expr_p, [...]): Optimize -(A+B) into either (-A)-B or (-B)-A...
* fold-const.c (negate_expr_p, negate_expr): Optimize -(A+B) into
	either (-A)-B or (-B)-A, if A or B is easily negated respectively.
	(fold) <MINUS_EXPR>: Optimize (A*C) - (B*C) -> (A-B)*C for both
	integer types and floating point with unsafe_math_optimizations.
	Add similar optimization for (A*C1) - (A*C2) -> A*(C1-C2).
	Optimize A - B as A + (-B), if B is easily negated.

From-SVN: r77453
2004-02-07 15:35:40 +00:00
Jeff Law
3168cb9927 tree.c (commutative_tree_code, [...]): New functions.
* tree.c (commutative_tree_code, associative_tree_code): New
	functions.
	(iterative_hash_expr): Use commutative_tree_code.
	* tree.h (commutative_tree_code, associative_tree_code): Declare.
	* fold-const.c (operand_equal_p): Use commutative_tree_code
	rather than inlining the commutativity check.
	(fold): Likewise.

Co-Authored-By: Roger Sayle <roger@eyesopen.com>

From-SVN: r77152
2004-02-03 03:03:43 +00:00
Eric Botcazou
0a944ef648 fold-const.c (fold_binary_op_with_conditional_arg): Only build a COMPOUND_EXPR if 'arg' is really a SAVE_EXPR.
* fold-const.c (fold_binary_op_with_conditional_arg): Only
	build a COMPOUND_EXPR if 'arg' is really a SAVE_EXPR.

Co-Authored-By: Olivier Hainque <hainque@act-europe.fr>

From-SVN: r76434
2004-01-23 16:52:07 +00:00
Roger Sayle
fdb33708b4 fold-const.c (fold_convert): Rename to fold_convert_const.
* fold-const.c (fold_convert): Rename to fold_convert_const.
	(fold_convert_const): Change arguments to take a tree_code,
	a type and the operand/expression to be converted.  Return
	NULL_TREE if no simplification is possible.  Add support for
	FIX_CEIL_EXPR and FIX_FLOOR_EXPR in addition to FIX_TRUNC_EXPR.
	(fold): Handle FIX_CEIL_EXPR and FIX_FLOOR_EXPR.
	Adjust call to fold_convert to match new fold_convert_const.
	Avoid modifying the tree passed to fold in-place.

From-SVN: r76237
2004-01-20 22:59:59 +00:00
Joseph Myers
53cd18ec8e c-decl.c (c_init_decl_processing): Set pedantic_lvalues to true unconditionally.
* c-decl.c (c_init_decl_processing): Set pedantic_lvalues to
	true unconditionally.
	* c-typeck.c (unary_complex_lvalue, pedantic_lvalue_warning):
	Remove.
	(build_unary_op, build_modify_expr): Don't handle extended
	lvalues.
	(build_component_ref, build_conditional_expr): Call non_lvalue
	instead of pedantic_non_lvalue.
	(build_c_cast): Don't condition use of non_lvalue on pedantic.
	* fold-const.c (fold): Don't check pedantic directly for
	COMPOUND_EXPR.  Ensure that results for COMPOUND_EXPR are
	passed to pedantic_non_lvalue.
	* doc/extend.texi: Remove documentation of extended lvalues.

testsuite:
	* gcc.c-torture/compile/981022-1.c: Remove.
	* gcc.dg/array-5.c: Remove XFAIL.
	* gcc.dg/sequence-pt-1.c: Remove test using extended lvalues.
	* gcc.dg/cast-lvalue-1.c, gcc.dg/compound-lvalue-1.c,
	gcc.dg/cond-lvalue-1.c: Update.
	* gcc.dg/cast-lvalue-2.c: New test.

From-SVN: r76192
2004-01-20 01:38:27 +00:00
Kazu Hirata
e0a21ab90e c-common.h: Fix comment formatting.
* c-common.h: Fix comment formatting.
	* c-cppbuiltin.c: Likewise.
	* c-pragma.c: Likewise.
	* calls.c: Likewise.
	* collect2.c: Likewise.
	* cppcharset.c: Likewise.
	* cpptrad.c: Likewise.
	* dbxout.c: Likewise.
	* defaults.h: Likewise.
	* dwarf2out.c: Likewise.
	* fold-const.c: Likewise.
	* genautomata.c: Likewise.
	* genconditions.c: Likewise.
	* genflags.c: Likewise.
	* gengtype.c: Likewise.
	* integrate.c: Likewise.
	* loop.c: Likewise.
	* predict.c: Likewise.
	* sdbout.c: Likewise.

From-SVN: r75957
2004-01-16 01:44:06 +00:00
Kazu Hirata
5d3cc25206 alias.c: Fix comment typos.
* alias.c: Fix comment typos.
	* builtins.c: Likewise.
	* cfg.c: Likewise.
	* df.c: Likewise.
	* dominance.c: Likewise.
	* dwarf2out.c: Likewise.
	* emit-rtl.c: Likewise.
	* expr.c: Likewise.
	* final.c: Likewise.
	* fold-const.c: Likewise.
	* gcse.c: Likewise.
	* genattrtab.c: Likewise.
	* genrecog.c: Likewise.
	* gensupport.c: Likewise.
	* ggc-zone.c: Likewise.
	* integrate.c: Likewise.
	* local-alloc.c: Likewise.
	* loop.c: Likewise.
	* recog.c: Likewise.
	* regmove.c: Likewise.
	* reg-stack.c: Likewise.
	* reorg.c: Likewise.
	* rtlanal.c: Likewise.
	* rtl.h: Likewise.
	* sched-ebb.c: Likewise.
	* simplify-rtx.c: Likewise.
	* toplev.c: Likewise.
	* varasm.c: Likewise.

From-SVN: r75475
2004-01-06 16:51:21 +00:00
Roger Sayle
8bc6369b8b fold-const.c (fold): Don't require strict type equality...
* fold-const.c (fold) <COND_EXPR>: Don't require strict type
	equality, instead just prevent replacing a COND_EXPR of non-void
	type by one of its operands of void type.

From-SVN: r75239
2003-12-30 17:21:54 +00:00
Roger Sayle
b66906a8ff re PR fortran/12632 ([g77 only] -fbounds-check ICE)
PR fortran/12632
	* fold-const.c (fold) <COND_EXPR>: Don't fold a constant condition,
	if the type of the selected branch doesn't match its' parent.

	* com.c (ffecom_subscript_check_): Take as an extra argument the
	(possibly NULL) decl of the array.  Don't create unnecessary tree
	nodes if the array index is known to be safe at compile-time.
	If the array index is unsafe, force the array decl into memory to
	avoid RTL expansion problems.
	(ffecom_array_ref_): Update calls to ffecom_subscript_check_.
	(ffecom_char_args_x_): Likewise.

	* g77.dg/12632.f: New test case.

From-SVN: r75203
2003-12-29 16:16:39 +00:00
Kazu Hirata
020036b90e expr.c (check_max_integer_computation_mode): Remove.
* expr.c (check_max_integer_computation_mode): Remove.
	* dojump.c (do_jump): Don't use MAX_INTEGER_COMPUTATION_MODE.
	* fold-const.c (fold): Likewise.
	* system.h (MAX_INTEGER_COMPUTATION_MODE): Poison.
	* doc/tm.texi (MAX_INTEGER_COMPUTATION_MODE): Remove.

From-SVN: r74868
2003-12-20 01:40:41 +00:00
Jan Hubicka
0ba646fe67 fold-const.c (fold): Do not return early when optimizing COMPONENT_REF and constant.
* fold-const.c (fold):  Do not return early when optimizing COMPONENT_REF
	and constant.

From-SVN: r73870
2003-11-24 00:50:31 +00:00
Roger Sayle
41ba7ed74c re PR middle-end/11968 (Array reference is incorrectly computed for POINTERS_EXTEND_UNSIGNED)
PR middle-end/11968
	* expr.c (expand_expr <MULT_EXPR>): Remove inappropriate and
	confusing comment; distributivity isn't handled in expand_expr.
	* fold-const.c (extract_muldiv_1 <PLUS_EXPR>):  Allow overflow
	in distributivity, if wrap-around semantics are specified with
	-fwrapv.

From-SVN: r73166
2003-11-01 00:59:53 +00:00
Richard Henderson
e7824b3ed5 fold-const.c (fold_single_bit_test): Convert the input to the operational intermediate type.
* fold-const.c (fold_single_bit_test): Convert the input to the
        operational intermediate type.

From-SVN: r73077
2003-10-29 18:26:29 -08:00
Gábor Lóki
a352244f95 fold-const.c (tree_swap_operands_p): disables some features when optimizing for size.
2003-10-15  G�bor L�ki  <alga@rgai.hu>

	* fold-const.c (tree_swap_operands_p): disables
	some features when optimizing for size.

From-SVN: r72538
2003-10-15 22:32:27 +00:00
Roger Sayle
05d362b88d fold-const.c (negate_mathfn_p): New function to determine whether a built-in mathematical function is sign...
* fold-const.c (negate_mathfn_p): New function to determine whether
	a built-in mathematical function is sign preserving, f(-x) == -f(x).
	Add support for BUILT_IN_ASIN, BUILT_IN_ASINF and BUILT_IN_ASINL.
	(tree_swap_operands_p): Change API to take an additional argument
	indicating that the swapped operands evaluate in reverse order.
	Canonicalize VAR_DECLs and PARM_DECLs last if we can, i.e. neither
	operand side-effects or we don't care about flag_evaluation_order.
	(reorder_operands_p): New function to check whether its safe to
	evaluate the given operands in reverse order.
	(negate_expr_p):  We can always negate integer constants unless
	we honor -ftrapv and the signed type would overflow.  Only allow
	-(A-B) into B-A if reorder_operands_p says that its OK.  Allow
	negation of COMPLEX_CST if both real and imaginary parts can be
	negated.  Allow negation through floating point extensions and
	sign-preserving built-in functions.
	(negate_expr):  Move the code to negate integers from "fold" to
	here.  Always negate integer constants unless we honor -ftrapv
	and the signed type would overflow.  Always negate real constants
	unless we honor -ftrapping-math.  Only convert -(A-B) into B-A
	if allowed by reorder_operands_p.  Add support for COMPLEX_CST.
	Optimize negation through floating point extensions and
	sign-preserving built-in functions (as defined by negate_mathfn_p).
	(fold): Adjust calls to tree_swap_operands_p.
	(fold <NEGATE_EXPR>): Move the remaining negation optimizations
	to negate_expr_p/negate_expr.
	(fold <MINUS_EXPR>): Use reorder_operands_p to check whether we're
	allowed to convert (-A) - B into (-B) - A.

From-SVN: r72381
2003-10-11 21:15:08 +00:00
Kazu Hirata
368ebcd6ff fold-const.c: Follow spelling conventions.
* fold-const.c: Follow spelling conventions.
	* function.c: Likewise.
	* config/c4x/c4x.h: Likewise.
	* config/c4x/c4x.md: Likewise.
	* config/frv/frv.md: Likewise.
	* config/rs6000/aix.h: Likewise.
	* config/rs6000/linux64.h: Likewise.
	* config/xtensa/xtensa.c: Likewise.

From-SVN: r72111
2003-10-05 13:34:45 +00:00
Roger Sayle
875eda9c34 PR optimization/9325, PR java/6391
PR optimization/9325, PR java/6391
	* fold-const.c (fold_convert): For floating point to integer
	conversions, return the maximum/minimum representable integer
	value if the real constant overflows the destination type.
	* tree.c (real_value_from_int_cst): Allow the type to be NULL,
	meaning don't truncate the result to a floating point mode.
	Simplify the logic by calling real_from_integer directly.
	* simplify-rtx.c (simplify_unary_operation):  Implement the
	same semantics for folding floating point to integer conversions
	in RTL.

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

From-SVN: r72079
2003-10-03 21:33:57 +00:00
Richard Kenner
1358cdc5fe fold-const.c (make_range): When handling unsigned, don't reverse range if high bound is zero.
* fold-const.c (make_range): When handling unsigned, don't reverse
	range if high bound is zero.

From-SVN: r71991
2003-10-01 16:48:57 -04:00
Kazu Hirata
518723777f fold-const.c (fold): Fold (A & ~B) - (A & B) into (A ^ B) - B for any B.
* fold-const.c (fold): Fold (A & ~B) - (A & B) into
	(A ^ B) - B for any B.

From-SVN: r71953
2003-09-30 21:07:41 +00:00
Richard Kenner
3ec278de0b Remove extra comma in comment.
From-SVN: r71912
2003-09-29 13:41:47 -04:00
Kazu Hirata
38b35623d3 fold-const.c (fold): Fold (A & ~B) - (A & B) into (A ^ B) - B, where B is any power of 2 minus 1.
* fold-const.c (fold): Fold (A & ~B) - (A & B) into
	(A ^ B) - B, where B is any power of 2 minus 1.

From-SVN: r71910
2003-09-29 17:35:11 +00:00
Roger Sayle
d8becd5571 re PR bootstrap/12358 (Bootstrap comparison failure!)
PR bootstrap/12358
	* fold-const.c (tree_swap_operands_p): Only reorder operands when
	one of the operands is constant.

From-SVN: r71749
2003-09-25 02:12:13 +00:00
Roger Sayle
96123432ff tree.def (FFS_EXPR, [...]): Delete unused tree codes.
* tree.def (FFS_EXPR, CLZ_EXPR, CTZ_EXPR, POPCOUNT_EXPR,
	PARITY_EXPR): Delete unused tree codes.
	* c-common.c (c_common_truthvalue_conversion): Delete references
	to FFS_EXPR and POPCOUNT_EXPR.
	* c-pretty-print.c (pp_c_postfix_expression): Remove FFS_EXPR.
	(pp_c_expression): Likewise.
	* expr.c (expand_expr): Delete RTL expansion of FFS_EXPR, CLZ_EXPR,
	CTZ_EXPR, POPCOUNT_EXPR and PARITY_EXPR.
	* fold-const.c (tree_expr_nonnegative_p): Remove FFS_EXPR, CLZ_EXPR,
	CTZ_EXPR, POPCOUNT_EXPR and PARITY_EXPR.  Add support for calls to
	BUILT_IN_FFS, BUILT_IN_PARITY and BUILT_IN_POPCOUNT and their long
	and long long variants.

	* cp/lex.c (init_operators): Remove operator_name_info for FFS_EXPR.
	* cp/class.c (instantiate_type): Remove FFS_EXPR case.

	* f/com.c (ffecom_overlap_): Remove FFS_EXPR case.
	(ffecom_tree_canonize_ref_): Likewise.
	(ffe_truthvalue_conversion): Likewise.

	* java/expr.c (java_truthvalue_conversion): Remove FFS_EXPR case.
	* java/check-init.c (check_init): Likewise.

From-SVN: r71525
2003-09-18 15:06:02 +00:00
Roger Sayle
37af03cba8 fold-const.c (tree_swap_operands_p): New function to determine the prefered ordering of operands.
* fold-const.c (tree_swap_operands_p): New function to determine
	the prefered ordering of operands.
	(fold): Numerous clean-ups.  Use tree_swap_operands_p when swapping
	operands to commutative, comparison or ternary operators.  Replace
	uses of TREE_SET_CODE with recursive call to fold.  Remove duplicate
	transformation of A ? B : C into !A ? C : B.

From-SVN: r71438
2003-09-16 17:08:50 +00:00
Kazu Hirata
83a00410f5 alias.c: Follow spelling conventions.
* alias.c: Follow spelling conventions.
	* cpphash.h: Likewise.
	* fold-const.c: Likewise.
	* cp/ChangeLog: Likewise.
	* cp/parser.c: Likewise.

From-SVN: r71382
2003-09-14 14:49:08 +00:00
Kaveh R. Ghazi
f7657db990 builtins.c (real_dconstp, [...]): New, split out from fold_builtin.
* builtins.c (real_dconstp, fold_builtin_logarithm,
	fold_builtin_exponent): New, split out from fold_builtin.  Also
	generalize to add log2, log10, exp2 and exp10/pow10 equivalents.
	* emit-rtl.c (dconst3, dconst10, dconstthird): New.
	(init_emit_once): Initialize new dconsts, use ARRAY_SIZE in lieu
	of hardcoded array size.
	* fold-const.c (fold): Add cases for exp2, exp10 and pow10.
	(tree_expr_nonnegative_p): Likewise.
	* real.h (dconst3, dconst10, dconstthird): New.

testsuite:
	* gcc.dg/torture/builtin-explog-1.c: New testcase.

From-SVN: r71252
2003-09-09 22:10:32 +00:00
Roger Sayle
fae111c115 * fold-const.c (operand_equal_p): Clarify documentation.
From-SVN: r71214
2003-09-08 18:57:32 +00:00
Josef Zlomek
31934da71a c-typeck.c (build_binary_op): Kill BIT_ANDTC_EXPR.
* c-typeck.c (build_binary_op): Kill BIT_ANDTC_EXPR.
	* convert.c (convert_to_integer): Kill BIT_ANDTC_EXPR.
	* fold-const.c (int_const_binop): Kill BIT_ANDTC_EXPR.
	(fold): Kill BIT_ANDTC_EXPR and label bit_and.
	* tree.def (BIT_ANDTC_EXPR): Kill.

	* error.c (dump_expr): Kill BIT_ANDTC_EXPR.
	* lex.c (init_operators): Kill BIT_ANDTC_EXPR.
	* pt.c (tsubst_copy): Kill BIT_ANDTC_EXPR.
	* typeck.c (build_binary_op): Kill BIT_ANDTC_EXPR.
	(tsubst_copy_and_build): Kill BIT_ANDTC_EXPR.

	* com.c (ffecom_overlap_): Kill BIT_ANDTC_EXPR.
	(ffecom_tree_canonize_ref_): Kill BIT_ANDTC_EXPR.

From-SVN: r70972
2003-09-01 05:06:25 +00:00
Roger Sayle
00229de405 re PR middle-end/12002 (internal compiler error: in gen_lowpart, at emit-rtl.c:1374)
PR middle-end/12002
	* tree.h (SCALAR_FLOAT_TYPE_P, COMPLEX_FLOAT_TYPE_P): New macros.
	(FLOAT_TYPE_P): Define in terms of these two new macros.
	* fold-const.c (fold <PLUS_EXPR>): Don't convert x+x into x*2.0
	for complex floating point types.

	* g77.f-torture/compile/12002.f: New test case.

From-SVN: r70821
2003-08-26 21:44:46 +00:00
Roger Sayle
e32329336b fold-const.c (fold <MULT_EXPR>): Optimize (C1/X)*C2 into (C1*C2)/X when unsafe math optimizations are allowed.
* fold-const.c (fold <MULT_EXPR>): Optimize (C1/X)*C2 into
	(C1*C2)/X when unsafe math optimizations are allowed.
	(fold <RDIV_EXPR>): Optimize C1/(X*C2) into (C1/C2)/X with unsafe
	math optimizations.  Minor code clean-ups.  Recursively call
	fold when constructing sub-expressions.

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

From-SVN: r70807
2003-08-26 13:26:31 +00:00
Kazu Hirata
beb235f896 c-decl.c: Fix comment formatting.
* c-decl.c: Fix comment formatting.
	* cfgrtl.c: Likewise.
	* combine.c: Likewise.
	* convert.c: Likewise.
	* dominance.c: Likewise.
	* dwarf2out.c: Likewise.
	* dwarfout.c: Likewise.
	* expmed.c: Likewise.
	* fold-const.c: Likewise.
	* gcov.c: Likewise.
	* genattrtab.c: Likewise.
	* ggc-common.c: Likewise.
	* mips-tfile.c: Likewise.
	* regmove.c: Likewise.

From-SVN: r70677
2003-08-22 06:45:14 +00:00
Josef Zlomek
ed6f90f7ff fold-const.c (fold): Fix bug in (A & C) == D where D & ~C != 0 and similarly in (A | C) == D where C...
* fold-const.c (fold): Fix bug in (A & C) == D where D & ~C != 0
	and similarly in (A | C) == D where C & ~D != 0.

From-SVN: r70637
2003-08-21 05:47:43 +00:00
Roger Sayle
2cf099a553 re PR middle-end/11984 (ICE with -ffast_math: expected integer_cst, have real_cst)
PR middle-end/11984
	* fold-const.c (fold <PLUS_EXPR>): Check for integer constant
	operands before calling tree_int_cst_lt when performing associative
	transformations.

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

From-SVN: r70618
2003-08-20 21:55:01 +00:00
Jason Merrill
68ad9159aa tree.h (IS_EXPR_CODE_CLASS): Also include 'r' and 's'.
* tree.h (IS_EXPR_CODE_CLASS): Also include 'r' and 's'.
        (EXPR_CHECK): Don't check for 'r' or 's' if we're
        checking IS_EXPR_CODE_CLASS.
        * calls.c (calls_function_1): Likewise.
        * fold-const.c (fold): Likewise.
        * tree.c (iterative_hash_expr): Likewise.
        * tree-inline.c (walk_tree, copy_tree_r): Likewise.

From-SVN: r70617
2003-08-20 17:46:48 -04:00
Jason Merrill
2f5030259c builtins.c (expand_builtin_mathfn): Use get_callee_fndecl.
* builtins.c (expand_builtin_mathfn): Use get_callee_fndecl.
        (expand_builtin_mathfn2, expand_builtin, builtin_mathfn_code,
        fold_trunc_transparent_mathfn, fold_builtin): Likewise.
        * dojump.c (do_jump): Likewise.
        * fold-const.c (operand_equal_p, fold): Likewise.
        (tree_expr_nonnegative_p): Likewise.

From-SVN: r70611
2003-08-20 15:27:49 -04:00
Kazu Hirata
a98ebe2e37 builtins.c: Fix comment typos.
* builtins.c: Fix comment typos.
	* c-common.c: Likewise.
	* c-decl.c: Likewise.
	* c-pretty-print.c: Likewise.
	* cfgbuild.c: Likewise.
	* cfglayout.c: Likewise.
	* cfgloopanal.c: Likewise.
	* cgraphunit.c: Likewise.
	* cppfiles.c: Likewise.
	* dwarfout.c: Likewise.
	* expr.c: Likewise.
	* fold-const.c: Likewise.
	* gcse.c: Likewise.
	* ggc-page.c: Likewise.
	* haifa-sched.c: Likewise.
	* pretty-print.c: Likewise.
	* tree.c: Likewise.
	* tree.h: Likewise.
	* value-prof.c: Likewise.

From-SVN: r70583
2003-08-19 23:22:00 +00:00
Roger Sayle
8ab49fef1f fold-const.c (negate_expr_p): MULT_EXPRs and RDIV_EXPRs are easy to negate if either operand is easy to negate...
* fold-const.c (negate_expr_p): MULT_EXPRs and RDIV_EXPRs are easy
	to negate if either operand is easy to negate, if we don't care
	about sign-dependent rounding.
	(negate_expr): Make the logic to negate a REAL_CST explicit.
	Attempt to negate a MULT_EXPR or RDIV_EXPR by negating an operand
	that's easy to negate, if we don't honor sign-dependent rounding.
	(fold <MULT_EXPR>): Optimize -A * B as A * -B if B is easy to
	negate, and the symmetric A * -B as -A * B if A is easy to negate.
	(fold <RDIV_EXPR>): Likewise, optimize -A/B and C/-D as A/-B and
	-C/D if B and C are cheap to negate.  Add an explicit rule to
	optimize X/-1.0 as -X when we don't care about signaling NaNs.

From-SVN: r70455
2003-08-14 20:53:26 +00:00
Roger Sayle
af7b5c1c00 fold-const.c (fold): Optimize any associative floating point operator with...
* fold-const.c (fold): Optimize any associative floating point
	operator with -funsafe-math-optimizations, not just MULT_EXPR.

From-SVN: r70348
2003-08-12 01:43:31 +00:00
Roger Sayle
02a1994cba re PR middle-end/11771 (Segfault with simple double arithmetics)
PR middle-end/11771
	* fold-const.c (negate_expr_p <MINUS_EXPR>): Change to match the
	logic in negate_expr, i.e. we don't invert (A-B) for floating
	point types unless flag_unsafe_math_optimizations.

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

From-SVN: r70159
2003-08-04 23:46:34 +00:00
Roger Sayle
f2593a6649 fold-const.c (fold <PLUS_EXPR>): Transform x+x into x*2.0.
* fold-const.c (fold <PLUS_EXPR>): Transform x+x into x*2.0.
	Optimize x*c+x and x+x*c into x*(c+1) and x*c1+x*c2 into x*(c1+c2)
	for floating point expressions with -ffast-math.
	(fold <MULT_EXPR>): Don't transform x*2.0 into x+x.
	* expmed.c (expand_mult): Wrap long line.  Expand x*2.0 as x+x.

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

From-SVN: r70158
2003-08-04 23:42:48 +00:00
Roger Sayle
2598550fa6 fold-const.c (fold <MULT_EXPR>): Optimize both x*pow(x,c) and pow(x,c)*x as pow(x,c+1) for constant values c.
* fold-const.c (fold <MULT_EXPR>): Optimize both x*pow(x,c) and
	pow(x,c)*x as pow(x,c+1) for constant values c.  Optimize x*x
	as pow(x,2.0) when the latter will be expanded back into x*x.
	(fold <RDIV_EXPR>): Optimize pow(x,c)/x as pow(x,c-1).
	* builtins.c (expand_builtin_pow): Ignore flag_errno_math as
	pow can never set errno when used with an integer exponent.
	Always use expand_powi when exponent is -1, 0, 1 or 2.
	(fold_builtin): Don't rewrite pow(x,2.0) as x*x nor pow(x,-2.0)
	as 1.0/(x*x).  This avoids unbounded recursion as we now prefer
	the pow forms of these expressions.

	* gcc.dg/builtins-27.c: New test case.

From-SVN: r70030
2003-08-01 00:36:53 +00:00
Zdenek Dvorak
b7de586461 * fold-const.c (fold): Fold some comparisons of bit operations.
From-SVN: r70009
2003-07-31 18:29:34 +00:00
Jakub Jelinek
5dfa45d043 configure.in (--enable-checking): Add fold category.
* configure.in (--enable-checking): Add fold category.
	(ENABLE_FOLD_CHECKING): Define if requested.
	* configure: Rebuilt.
	* config.in: Rebuilt.
	* doc/install.texi: Document it.
	* fold-const.c: Include md5.h.
	[ENABLE_FOLD_CHECKING] (fold): Define to fold_1.
	[ENABLE_FOLD_CHECKING] (fold, fold_checksum_tree, fold_check_failed,
	print_fold_checksum): New functions.

	* fold-const.c (fold): Never modify argument passed to fold, instead
	change a copy and return it.
	* convert.c (convert_to_integer): Likewise.
testsuite/
	* gcc.c-torture/compile/20030725-1.c: New test.

From-SVN: r69886
2003-07-28 17:42:24 +02:00
Mark Mitchell
a5ac359a6d fold-const.c (force_fit_type): Handle OFFSET_TYPE.
* fold-const.c (force_fit_type): Handle OFFSET_TYPE.
	* varasam.c (output_constant): Likewise.

2003-07-22  Mark Mitchell  <mark@codesourcery.com>

	Eliminate use of POINTER_TYPE for pointers-to-members.
	* call.c (standard_conversion): Rework pointer-to-member handling.
	Add comments.
	(add_builtin_candidate): Likewise.
	(resolve_scoped_fn_name): Remove.
	(build_conditional_expr): Rework pointer-to-member handling.
	(compare_ics): Likewise.
	* class.c (check_field_decls): Use TYPE_PTR_P.
	* cp-lang.c (cp_var_mod_type_p): Rework pointer-to-member
	handling.
	* cp-tree.h (SCALAR_TYPE_P): Use TYPE_PTR_TO_MEMBER_P.
	(TYPE_PTRMEM_P): Add comment.
	(TYPE_PTR_P): Simplify.
	(TYPE_PTROB_P): Correct definition.
	(TYPE_PTR_TO_MEMBER_P): New macro.
	(TYPE_PTRMEM_CLASS_TYPE): Adjust.
	(TYPE_PTRMEM_POINTED_TO_TYPE): Likewise.
	(resolved_scoped_fn_name): Remove declaration.
	(build_offset_ref): Change prototype.
	(resolve_offset_ref): Remove.
	(comp_target_types): Remove.
	* cvt.c (cp_convert_to_pointer): Rework pointer-to-member
	handling.
	(convert_to_reference): Use can_convert.
	(ocp_convert): Improve error handling.  Rework pointer-to-member
	handling.
	(perform_qualification_conversions): Rework pointer-to-member
	handling.
	* decl.c (build_ptrmem_type): Handle functions too.
	(create_array_type_for_decl): Remove OFFSET_TYPE error message.
	(grokdeclarator): Use OFFSET_TYPE for pointers to data members.
	(grokparms): Remove OFFSET_TYPE error message.
	* dump.c (cp_dump_tree): Rework pointer-to-member handling.
	* error.c (dump_type_prefix): Likewise.
	* expr.c (cplus_expand_constant): Use build_nop.
	* init.c (build_offset_ref): Add address_p parameter.  Fold in
	necessary bits from resolve_offset_ref.
	(resolve_offset_ref): Remove.
	* parser.c (cp_parser_postfix_expression): Remove special case
	code for OFFSET_TYPE.
	* pt.c (convert_nontype_argument): Rework pointer-to-member
	handling.
	(convert_template_argument): Likewise.
	(unify): Likewise.
	(invalid_nontype_parm_type_p): Likewise.
	(dependent_type_p_r): Likewise.
	* rtti.c (get_tinfo_decl): Remove OFFSET_TYPE special case.
	(target_incomplete_p_): Rework pointer-to-member
	handling.
	(get_pseudo_ti_init): Likewise.
	(get_pseudo_ti_desc): Likewise.
	* semantics.c (finish_qualified_id_expr): Adjust call to
	build_offset_ref.  Remove use of resolve_offset_ref.
	* tree.c (pod_type_p): Use TYPE_PTR_TO_MEMBER_P.
	* typeck.c (target_type): Use TYPE_PTRMEM_P.
	(type_unknown_p): Remove obsolete code about the time before
	non-dependent expressions were handled correctly.
	(qualify_type_recursive): Remove.
	(composite_pointer_type_r): New function.
	(composite_pointer_type): Use it.
	(merge_types): Remove dead comments.
	(comp_cv_target_types): Remove.
	(comp_target_types): Likewise.
	(comp_target_parms): Likewise.
	(cxx_sizeof_or_alignof_type): Remove OFFSET_TYPE error.
	(build_indirect_ref): Use TYPE_PTR_TO_MEMBER_P.
	(build_binary_op): Do not use of comp_target_types.
	(pointer_diff): Remove OFFSET_TYPE case.
	(build_unary_op): Adjust pointer-to-member handling.
	(unary_complex_lvalue): Likewise.
	(check_for_casting_away_constness): Add description parameter.
	(build_static_cast): Pass it.
	(build_reinterpret_cast): Use check_for_casting_away_constness.
	(build_const_cast): Adjust pointer-to-member handling.
	(build_c_cast): Likewise.
	(convert_for_assignment): Remove OFFSET_TYPE error message.
	(comp_ptr_ttypes_real): Adjust pointer-to-member handling.
	(comp_ptr_ttypes_reinterpret): Remove.
	(casts_away_constness_r): Adjust pointer-to-member handling.
	(casts_away_constness): Liekwise.
	(strip_all_pointer_quals): Remove.
	* typeck2.c (digest_init): Adjust pointer-to-member handling.
	(build_m_component_ref): Likewise.

From-SVN: r69691
2003-07-22 23:30:22 +00:00
Kazu Hirata
938d968ed3 alias.c: Fix comment formatting.
* alias.c: Fix comment formatting.
	* c-common.c: Likewise.
	* c-decl.c: Likewise.
	* c-opts.c: Likewise.
	* combine.c: Likewise.
	* cpplib.c: Likewise.
	* diagnostic.c: Likewise.
	* dojump.c: Likewise.
	* final.c: Likewise.
	* fold-const.c: Likewise.
	* gcc.c: Likewise.
	* gcse.c: Likewise.
	* ggc-page.c: Likewise.
	* jump.c: Likewise.
	* loop.c: Likewise.
	* mips-tfile.c: Likewise.
	* recog.c: Likewise.
	* regclass.c: Likewise.
	* regmove.c: Likewise.
	* tree.c: Likewise.
	* tree.h: Likewise.

From-SVN: r69689
2003-07-22 23:15:30 +00:00
Kaveh R. Ghazi
703ad42b4b alias.c [...]: Remove unnecessary casts.
* alias.c alloc-pool.c bitmap.c bitmap.h bt-load.c builtins.c
	c-common.c c-decl.c c-incpath.c c-lex.c c-opts.c c-parse.in
	c-pragma.c c-typeck.c calls.c cfg.c cfganal.c cfgloop.c cfgrtl.c
	collect2.c combine.c conflict.c coverage.c cppexp.c cppfiles.c
	cpphash.c cppinit.c cpplex.c cpplib.c cppmacro.c cppspec.c
	cpptrad.c cse.c cselib.c dbxout.c defaults.h df.c dominance.c
	dwarf2out.c dwarfout.c emit-rtl.c except.c expmed.c expr.c final.c
	fix-header.c flow.c fold-const.c function.c gcc.c gccspec.c gcov.c
	gcse.c genattr.c genattrtab.c genautomata.c genconditions.c
	genemit.c genextract.c genoutput.c genrecog.c gensupport.c
	ggc-page.c ggc-simple.c global.c graph.c haifa-sched.c hashtable.c
	integrate.c jump.c langhooks.c lcm.c line-map.c local-alloc.c
	loop.c mips-tdump.c mips-tfile.c mkdeps.c optabs.c params.c
	postreload.c prefix.c print-tree.c protoize.c ra-build.c
	ra-colorize.c ra-rewrite.c ra.c recog.c reg-stack.c regclass.c
	regmove.c regrename.c reload.c reload1.c reorg.c resource.c
	sbitmap.c sched-deps.c sched-rgn.c sched-vis.c sdbout.c
	simplify-rtx.c ssa-ccp.c ssa.c stmt.c stor-layout.c timevar.c
	tlink.c toplev.c tree-dump.c tree.c unroll.c unwind-dw2-fde.c
	varasm.c varray.c vmsdbgout.c xcoffout.c: Remove unnecessary
	casts.

From-SVN: r69587
2003-07-19 14:47:15 +00:00
Roger Sayle
3e4093b64f fold-const.c (const_binop): Avoid performing the FP operation at compile-time...
* fold-const.c (const_binop): Avoid performing the FP operation at
	compile-time, if either operand is NaN and we honor signaling NaNs,
	or if we're dividing by zero and either flag_trapping_math is set
	or the desired mode doesn't support infinities.
	(fold_initializer): New function to fold an expression ignoring any
	potential run-time exceptions or traps.
	* tree.h (fold_initializer): Prototype here.
	* c-typeck.c (build_binary_op): Move to the end of the file so
	that intializer_stack is in scope.  If constructing an initializer,
	i.e. when initializer_stack is not NULL, use fold_initializer to
	fold expressions.
	* simplify-rtx.c (simplify_binary_operation): Likewise, avoid
	performing FP operations at compile-time, if they would raise an
	exception at run-time.

From-SVN: r69533
2003-07-18 00:26:51 +00:00
Kazu Hirata
c87d821bd4 re PR c/11449 (ICE in invert_truthvalue called on AND operation)
PR c/11449
	* fold-const.c (sign_bit_p): Return EXP if VAL is the sign bit
	of HOST_WIDE_INT.
	(fold_single_bit_test): If sign_bit_p() fails, assume that the
	bit being tested is not a sign bit.

	PR c/11449
	* gcc.c-torture/compile/20030707-1.c: New.
	* config/h8300/h8300.md (a peephole2): New.

From-SVN: r69184
2003-07-10 12:40:10 +00:00
Andreas Jaeger
75040a044e * fold-const.c: Properly wrap prototypes.
From-SVN: r69170
2003-07-10 06:44:05 +02:00
Mark Mitchell
d17811fd1a fold-const.c (make_range): Do not access operand 1 for a zero-operand operator.
* fold-const.c (make_range): Do not access operand 1 for a
	zero-operand operator.

2003-07-08  Mark Mitchell  <mark@codesourcery.com>

	* cp-tree.def (NON_DEPENDENT_EXPR): New node.
	* cp-tree.h (build_call_from_tree): Remove.
	(build_member_call): Likewise.
	(dependent_template_arg_p): Remove.
	(any_dependent_template_arguments_p): New function.
	(dependent_template_id_p): Likewise.
	(any_type_dependent_arguments_p): Likewise.
	(build_non_dependent_expr): Likewise.
	(build_non_dependent_args): Likewise.
	(build_x_compound_expr): Adjust prototype.
	* call.c (build_new_method_call): Handle non-dependent expressions
	correctly.
	* decl2.c (grok_array_decl): Likewise.
	(build_offset_ref_call_from_tree): Likewise.
	(build_call_from_tree): Remove.
	* error.c (dump_decl): Handle NON_DEPENDENT_EXPR.
	(dump_expr): Likewise.
	* init.c (build_member_call): Remove.
	* mangle.c (write_expression): Update handling for template-ids.
	* parser.c (cp_parser_primary_expression): Use
	any_dependent_template_arguments_p.  Update constant-expression
	handling.
	(cp_parser_postfix_expression): Use
	any_type_dependent_arguments_p.  Simplify call processing.
	(cp_parser_unary_expression): Simplify.
	(cp_parser_expression): Adjust for changes to
	build_x_compound_expr.
	(cp_parser_template_argument): Implement standard-conforming
	parsing of non-type template arguments.
	(cp_parser_direct_declarator): Use
	cp_parser_fold_non_dependent_expr.
	(cp_parser_fold_non_dependent_expr): New function.
	(cp_parser_next_token_ends_template_argument_p): Likewise.
	* pt.c (convert_template_argument): Do not call
	maybe_fold_nontype_arg.
	(tsubst_baselink): Likewise.
	(tsubst_copy_and_build): Share common code.  Make sizeof/alignof
	processing work correctly for non-dependent expressions.  Adjust
	handling of COMPOUND_EXPR.  Simplify call processing.
	(value_dependent_expression_p): Deal with functional casts and
	sizeof/alignof correctly.
	(type_dependent_expression_p): Handle overloaded functions.
	(any_type_dependent_arguments_p): New function.
	(any_dependent_template_arguments_p): Likewise.
	(dependent_template_p): Treat SCOPE_REFs as dependent.
	(dependent_template_id_p): Simplify.
	(build_non_dependent_expr): New function.
	(build_non_dependent_args): Likewise.
	* semantics.c (finish_stmt_expr): Don't make dependent
	statement-expresions have void type.
	(finish_call_expr): Handle non-dependent expressions
	correctly.
	* tree.c (lvalue_p_1): Treat NON_DEPENDENT_EXPRs as lvalues.
	* typeck.c (cxx_sizeof_or_alignof_type): Give the expression
	type size_t, even in templates.
	(expr_sizeof): Likewise.
	(finish_class_member_access_expr): Handle non-dependent expressions
	correctly.
	(build_x_indirect_ref): Likewise.
	(build_x_binary_op): Likewise.
	(build_x_unary_op): Likewise.
	(build_x_conditional_expr): Likewise.
	(build_x_compound_expr): Likewise.
	* typeck2.c (build_x_arrow): Likewise.

2003-07-08  Mark Mitchell  <mark@codesourcery.com>

	* g++.dg/abi/mangle17.C: Make sure template expressions are
	dependent.
	* g++.dg/abi/mangle4.C: Mark erroneous casts.
	* g++.dg/debug/debug7.C: Mark erronous new-declarator.
	* g++.dg/opt/stack1.C: Remove erroneous code.
	* g++.dg/parse/template7.C: New test.
	* g++.dg/template/dependent-expr1.C: Mark erroneous code.
	* g++.old-deja/g++.pt/crash4.C: Likewise.

2003-07-09  Mark Mitchell  <mark@codesourcery.com>

	* gcj/array.h (JvPrimClass): Don't parenthesize the output.

From-SVN: r69130
2003-07-09 08:48:08 +00:00
Andreas Jaeger
5671bf2771 genextract.c: Convert remaining prototypes to ISO C90.
2003-07-07  Andreas Jaeger  <aj@suse.de>

	* genextract.c: Convert remaining prototypes to ISO C90.

	* cpplex.c (_cpp_free_buff): Convert prototype to ISO C90.
	* fold-const.c (fold_single_bit_test): Likewise.
	* diagnostic.c (default_diagnostic_finalizer): Likewise.
	* cfgrtl.c (rtl_redirect_edge_and_branch): Likewise.

	* gengtype.c (write_array): Generate ISO C90 prototypes.

	* genflags.c (gen_proto): Generate ISO C90 prototypes.


For cp:
2003-07-07  Andreas Jaeger  <aj@suse.de>

	* friend.c: Convert to ISO C90 prototypes.

	* Make-lang.in ($(srcdir)/cp/cfns.h): Use ANSI-C as output
	language.
	* cfns.h: Regenerate.

	* typeck.c: Convert remaining prototypes to ISO C90.
	* search.c: Likewise.

	* decl2.c (build_expr_from_tree): Convert prototype to ISO C90.
	* semantics.c (expand_or_defer_fn): Likewise
	* mangle.c (discriminator_for_string_literal): Likewise.
	* g++spec.c (lang_specific_driver): Likewise.

	* search.c (lookup_base_r): Remove unused variable.

From-SVN: r69050
2003-07-07 21:11:59 +02:00
Jeff Law
60cd4daea2 expr.c (do_store_flag): Pass in the correct result type when calling fold_single_bit_test.
* expr.c (do_store_flag): Pass in the correct result type
        when calling fold_single_bit_test.
        * fold-const.c (fold_single_bit_test): Use result_type for the
        result when folding a sign bit test.

From-SVN: r68940
2003-07-04 16:00:19 -06:00
Roger Sayle
0a9530a9d7 real.c (real_trunc, [...]): New functions to implement trunc, floor and ceil respectively.
* real.c (real_trunc, real_floor, real_ceil): New functions
	to implement trunc, floor and ceil respectively.
	* real.h (real_trunc, real_floor, real_ceil): Prototype here.
	* builtins.c (integer_valued_real_p): New function to test if
	a floating point expression has an integer valued result.
	(fold_trunc_transparent_mathfn): Optimize foo(foo(x)) as
	foo(x) where foo is an integer rounding function.  Similarly,
	optimize foo(bar(x)) as bar(x), and foo((double)(int)x) as
	(double)(int)x when both foo and bar are integer rounding
	functions and we don't need to honor errno.
	(fold_builtin_trunc, fold_builtin_floor, fold_builtin_ceil):
	New functions to fold trunc, floor and ceil.
	(fold_builtin): Use fold_builtin_trunc to fold BUILT_IN_TRUNC*,
	fold_builtin_floor to fold BUILT_IN_FLOOR* and fold_builtin_ceil
	to fold BUILT_IN_CEIL*.
	* fold-const.c (tree_expr_nonnegative_p): Handle FLOAT_EXPR and
	the remaining integer rounding functions.

	* gcc.dg/builtins-25.c: New testcase.
	* gcc.dg/builtins-26.c: New testcase.

From-SVN: r68903
2003-07-03 21:38:55 +00:00
Roger Sayle
a11c61d20b re PR target/10700 (ICE in copy_to_mode_reg on 64-bit targets)
PR target/10700
	* fold-const.c (extract_muldiv_1): There's nothing that can be done
	if the expression is a SAVE_EXPR.

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

From-SVN: r68877
2003-07-03 13:08:10 +00:00
Jeff Law
7960bf2230 expr.c (do_store_flag): Remove special case folding for single bit tests.
* expr.c (do_store_flag): Remove special case folding for
	single bit tests.  Instead call back into the commonized folder
	routine.
	* fold-const.c (fold_single_bit_test): New function, mostly
	extracted from do_store_flag, with an additional case extracted
	from fold.
	(fold): Call fold_single_bit_test appropriately.
	* tree.h (fold_single_bit_test): Prototype.

From-SVN: r68867
2003-07-02 23:42:57 -06:00
Eric Botcazou
1a8c4ca62d re PR rtl-optimization/11210 (optimizer drops conditional with typecast from signed to unsigned char)
PR optimization/11210
	* expr.c (handled_component_p) [NOP_EXPR]: Add ??? note
	about the behaviour with regard to bitfields.
	* fold-const (decode_field_reference): Record outermost type in
	case the expression is a NOP. Strip all NOPs. Set the signedness
	to that of the outermost type (if any) when the bitsize is equal
	to the size of the type.

From-SVN: r68823
2003-07-02 07:41:07 +00:00
Andreas Jaeger
fa8db1f7c4 fold-const.c: Convert prototypes to ISO C90.
* fold-const.c: Convert prototypes to ISO C90.
	* function.c: Likewise.
	* function.h: Likewise.

From-SVN: r68778
2003-07-01 18:20:39 +02:00
Kazu Hirata
e0bb17a83f basic-block.h: Fix comment typos.
* basic-block.h: Fix comment typos.
	* bb-reorder.c: Likewise.
	* c-format.c: Likewise.
	* cfgcleanup.c: Likewise.
	* cfghooks.h: Likewise.
	* cfgloop.c: Likewise.
	* cfgloopmanip.c: Likewise.
	* cfgrtl.c: Likewise.
	* cgraph.h: Likewise.
	* cgraphunit.c: Likewise.
	* combine.c: Likewise.
	* convert.c: Likewise.
	* dbxout.c: Likewise.
	* df.c: Likewise.
	* df.h: Likewise.
	* diagnostic.c: Likewise.
	* dwarf2out.c: Likewise.
	* et-forest.h: Likewise.
	* flow.c: Likewise.
	* fold-const.c: Likewise.
	* function.h: Likewise.
	* gcov-io.h: Likewise.
	* gcov.c: Likewise.
	* gcse.c: Likewise.
	* genautomata.c: Likewise.
	* ggc-common.c: Likewise.
	* ggc-page.c: Likewise.
	* loop-unroll.c: Likewise.
	* loop-unswitch.c: Likewise.
	* loop.c: Likewise.
	* mips-tfile.c: Likewise.
	* optabs.c: Likewise.
	* ra-build.c: Likewise.
	* ra-colorize.c: Likewise.
	* ra-rewrite.c: Likewise.
	* ra.h: Likewise.
	* regmove.c: Likewise.
	* reload.c: Likewise.
	* rtlanal.c: Likewise.
	* sched-ebb.c: Likewise.
	* sched-int.h: Likewise.
	* sched-vis.c: Likewise.
	* sreal.c: Likewise.
	* ssa-ccp.c: Likewise.
	* ssa.c: Likewise.
	* toplev.c: Likewise.
	* tree-inline.c: Likewise.
	* value-prof.c: Likewise.
	* value-prof.h: Likewise.

From-SVN: r68770
2003-07-01 12:18:01 +00:00
Kazu Hirata
f9da506452 alloc-pool.c: Fix comment formatting.
* alloc-pool.c: Fix comment formatting.
	* bitmap.c: Likewise.
	* bitmap.h: Likewise.
	* bt-load.c: Likewise.
	* builtins.c: Likewise.
	* caller-save.c: Likewise.
	* cfganal.c: Likewise.
	* cfgrtl.c: Likewise.
	* collect2.c: Likewise.
	* cse.c: Likewise.
	* df.c: Likewise.
	* diagnostic.c: Likewise.
	* dwarf2out.c: Likewise.
	* dwarfout.c: Likewise.
	* expmed.c: Likewise.
	* final.c: Likewise.
	* flags.h: Likewise.
	* fold-const.c: Likewise.
	* gcc.c: Likewise.
	* gcov-io.h: Likewise.
	* gcov.c: Likewise.
	* genattrtab.c: Likewise.
	* genautomata.c: Likewise.
	* libgcov.c: Likewise.
	* mips-tfile.c: Likewise.
	* optabs.c: Likewise.
	* prefix.c: Likewise.
	* rtlanal.c: Likewise.
	* stmt.c: Likewise.
	* stor-layout.c: Likewise.
	* toplev.c: Likewise.
	* varasm.c: Likewise.
	* vmsdbgout.c: Likewise.

From-SVN: r68672
2003-06-29 13:53:12 +00:00
Eric Botcazou
df7fb8f968 re PR rtl-optimization/11210 (optimizer drops conditional with typecast from signed to unsigned char)
PR optimization/11210
	* fold-const (decode_field_reference): Revert 2003-06-26 patch.

From-SVN: r68662
2003-06-29 08:31:52 +00:00
Eric Botcazou
6dc208a1ed re PR rtl-optimization/11210 (optimizer drops conditional with typecast from signed to unsigned char)
PR optimization/11210
	* fold-const (decode_field_reference): Strip only NOPs that
	don't affect the sign.

From-SVN: r68524
2003-06-26 10:37:35 +00:00
Kazu Hirata
71c0e7fc96 basic-block.h: Fix comment formatting.
* basic-block.h: Fix comment formatting.
	* bt-load.c: Likewise.
	* builtins.c: Likewise.
	* c-common.c: Likewise.
	* c-common.h: Likewise.
	* c-format.c: Likewise.
	* coverage.c: Likewise.
	* cpplib.h: Likewise.
	* cpppch.c: Likewise.
	* dbxout.c: Likewise.
	* diagnostic.c: Likewise.
	* dwarf2out.c: Likewise.
	* expr.c: Likewise.
	* fold-const.c: Likewise.
	* function.c: Likewise.
	* gcc.c: Likewise.
	* gcov-io.c: Likewise.
	* gcov-io.h: Likewise.
	* gcov.c: Likewise.
	* profile.c: Likewise.
	* real.h: Likewise.
	* sched-deps.c: Likewise.

From-SVN: r68369
2003-06-23 15:27:37 +00:00
Kaveh R. Ghazi
fad205ffba decl.c, [...]: Don't use the PTR macro.
cp:
	* cp/decl.c, cp/pt.c, cp/search.c, cp/tree.c: Don't use the PTR
	macro.

gcc:
	* bitmap.c, builtins.c, c-incpath.c, cgraph.c, config/frv/frv.c,
	config/mips/mips.c, cppfiles.c, cpphash.c, cppinit.c, cpplib.c,
	dwarf2out.c, dwarfout.c, except.c, expr.c, expr.h, fold-const.c,
	function.c, gcc.c, genoutput.c, gensupport.c, global.c,
	haifa-sched.c, hashtable.c, ifcvt.c, integrate.c, local-alloc.c,
	loop.c, mips-tdump.c, mips-tfile.c, mkdeps.c, protoize.c,
	read-rtl.c, recog.h, reload1.c, sbitmap.c, ssa-dce.c,
	stringpool.c, tlink.c, tree.c, varasm.c, varray.c: Don't use
	the PTR macro.

From-SVN: r68043
2003-06-16 21:41:10 +00:00
Roger Sayle
21c43754a6 fold-const.c (operand_equal_p): Consider two calls to "const" functions with identical non-volatile arguments...
* fold-const.c (operand_equal_p): Consider two calls to "const"
	functions with identical non-volatile arguments to be equal.
	Consider the FUNCTION_DECL for the "__builtin_foo" form of a
	built-in function to be equal to the "foo" form.

Co-Authored-By: Jeff Law <law@redhat.com>

From-SVN: r68011
2003-06-16 12:42:48 +00:00
Kazu Hirata
e15bb5c692 builtins.c: Fix comment typos.
* builtins.c: Fix comment typos.
	* fold-const.c: Likewise.

From-SVN: r67907
2003-06-13 17:30:53 +00:00
Matt Kraai
e2cca9be4e fold-const.c (tree_expr_nonnegative_p): Fix misspelling of "least".
* fold-const.c (tree_expr_nonnegative_p): Fix misspelling
	of "least".

From-SVN: r67877
2003-06-13 04:35:29 +00:00
Roger Sayle
96f26e4161 re PR middle-end/168 (Spurious signed/unsigned comparison warning)
PR middle-end/168
	* fold-const.c (tree_expr_nonnegative_p):  Handle addition
	and multiplication of zero extensions, floating point division,
	and integer<->fp, fp<->fp and zero extension conversions.
	The built-in ceil and floor functions preserve signedness.

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

From-SVN: r67850
2003-06-12 20:33:02 +00:00
Roger Sayle
f7df23be90 fold-const.c (tree_expr_nonnegative_p): Add support for floating point constants, addition and multiplication.
* fold-const.c (tree_expr_nonnegative_p): Add support for
	floating point constants, addition and multiplication.

	* gcc.dg/builtins-21.c: New test case.

From-SVN: r67828
2003-06-12 12:53:01 +00:00
Roger Sayle
9f0a7f9dcc builtins.c (fold_builtin): Optimize cos(-x) as cos(x).
* builtins.c (fold_builtin): Optimize cos(-x) as cos(x).
	* fold-const.c (fold <NEGATE_EXPR>): Convert -f(x) into f(-x)
	when x is easily negated and f is sin, tan or atan.
	(fold <MULT_EXPR>): Optimize tan(x)*cos(x) and cos(x)*tan(x) as
	sin(x) with flag_unsafe_math_optimizations.
	(fold <RDIV_EXPR>): With flag_unsafe_math_optimizations fold
	sin(x)/cos(x) as tan(x) and cos(x)/sin(x) as 1.0/tan(x).

	* gcc.dg/builtins-20.c: New test case.

From-SVN: r67701
2003-06-10 13:05:54 +00:00
Roger Sayle
8936c82f1e fold-const.c (fold <EQ_EXPR>): Don't fold x == x only if x is a floating point type *and* we currently honor NaNs.
* fold-const.c (fold <EQ_EXPR>):  Don't fold x == x only if x
	is a floating point type *and* we currently honor NaNs.
	(fold <NE_EXPR>): Likewise.

From-SVN: r67700
2003-06-10 13:00:17 +00:00
Jason Merrill
1bfedcc8fb * fold-const.c (operand_equal_p): Handle ADDR_EXPR and TRUTH_NOT_EXPR.
From-SVN: r67683
2003-06-09 18:42:33 -04:00
Kazu Hirata
2859471c39 * fold-const.c (fold): Fix a comment typo.
From-SVN: r67664
2003-06-09 15:07:36 +00:00
Roger Sayle
07bae5ad21 fold-const.c (fold <ABS_EXPR>): Re-fold the result of folding fabs(-x) into fabs(x).
* fold-const.c (fold <ABS_EXPR>):  Re-fold the result of folding
	fabs(-x) into fabs(x).  Use tree_expr_nonnegative_p to determine
	when the ABS_EXPR (fabs or abs) is not required.
  	(tree_expr_nonnegative_p): Move the logic that sqrt and exp are
	always nonnegative from fold to here.  Additionally, cabs and fabs
	are always non-negative, and pow and atan are non-negative if
	their first argument is non-negative.

	* builtins.c (fold_builtin_cabs): New function to fold cabs{,f,l}.
	Evaluate cabs of a constant at compile-time.  Convert cabs of a
	non-complex argument into fabs.  Convert cabs(z) into
	sqrt(z.r*z.r + z.i*z.i) at the tree-level with -ffast-math or
	-funsafe-math-optimizations or -ffast-math.
	(fold_builtin): Convert BUILT_IN_FABS{,F,L} into an ABS_EXPR.
	Fold BUILT_IN_CABS{,F,L} using fold_builtin_cabs.

	* gcc.dg/builtins-2.c: Add some more tests.
	* gcc.dg/builtins-18.c: New test case.
	* gcc.dg/builtins-19.c: New test case.

From-SVN: r67541
2003-06-06 12:36:26 +00:00
Roger Sayle
4fa26a6079 flags.h (flag_wrapv): New flag controlling overflow semantics.
* flags.h (flag_wrapv): New flag controlling overflow semantics.
	* toplev.c (flag_wrapv): Declare the variable with default false.
	(lang_independent_options): New option "-fwrapv" to set the above.

	* fold-const.c (extract_muldiv_1): Disable optimization of (2*x)/2
	as x, when signed arithmetic overflow wraps around.
	(fold): Optimize "-A - B" as "-B - A" if overflow wraps around.
	* loop.c (basic_induction_var): Ignore BIVs that rely on undefined
	overflow when flag_wrapv is true.

	* java/lang.c (java_init_options): Prescribe wrap-around two's
	complement arithmetic overflow by setting flag_wrapv.

	* doc/invoke.texi: Document new -fwrapv command line option.
	* doc/c-tree.texi: Mention that the overflow semantics of
	NEGATE_EXPR, PLUS_EXPR, MINUS_EXPR and MULT_EXPR is dependent
	upon both flag_wrapv and flag_trapv.

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

	* libjava.lang/Overflow.java: New test.
	* libjava.lang/Overflow.out: New file.

From-SVN: r67270
2003-05-31 13:23:32 +00:00
Richard Kenner
7a6cdb44fd tree.h (contains_placeholder_p): Now returns bool.
* tree.h (contains_placeholder_p): Now returns bool.
	(CONTAINS_PLACEHOLDER_P): New macro.
	(type_contains_placeholder_p): New function.
	* tree.c (save_expr): Remove code avoiding folding COMPONENT_REF.
	(contains_placeholder_p): Now returns bool.
	Rework to use CONTAINS_PLACEHOLDER_P macro.
	(type_contains_placeholder_p): New function.
	* fold-const.c (fold, case COMPONENT_REF): Don't fold if
	type_contains_placeholder_p.
	(fold_range_test, fold_mathfn_compare, fold_inf_compare, fold):
	Use CONTAINS_PLACEHOLDER_P macro.
	* builtins.c (fold_builtin): Likewise.
	* calls.c (initialize_argument_information): Likewise.
	* emit-rtl.c (set_mem_attributes_minus_bitpos): Likewise.
	* explow.c (expr_size): Likewise.
	* expr.c (store_constructor, get_inner_reference): Likewise.
	* function.c (assign_parms): Likewise.
	* stor-layout.c (variable_size): Likewise.

From-SVN: r67189
2003-05-27 14:44:57 -04:00
Roger Sayle
18c2511ccb real.c (real_maxval): New function to return the largest finite value representable in a given mode (i.e.
* real.c (real_maxval): New function to return the largest finite
	value representable in a given mode (i.e. FLT_MAX and DBL_MAX).
	* real.h (real_maxval): Prototype here.
	* fold-const.c (fold_inf_compare): Transform comparisons against
	+-Infinity into comparisons against DBL_MAX (or equivalent).

	* gcc.c-torture/execute/ieee/inf-2.c: New test case.

From-SVN: r67112
2003-05-23 03:46:53 +00:00
David Edelsohn
85e50b6ba8 fold-const.c (fold_range_test): Use RANGE_TEST_NON_SHORT_CIRCUIT macro defaulting to original BRANCH_COST heuristic.
* fold-const.c (fold_range_test): Use RANGE_TEST_NON_SHORT_CIRCUIT
        macro defaulting to original BRANCH_COST heuristic.
        * doc/tm.texi (RANGE_TEST_NON_SHORT_CIRCUIT): Document.

        * config/rs6000/rs6000.h (RANGE_TEST_NON_SHORT_CIRCUIT): Define.

From-SVN: r65942
2003-04-22 11:01:18 -04:00
Olivier Hainque
3cd58fd7ce fold-const.c (fold, [...]): Restore a number of conversions required for type consistency and previously...
* fold-const.c (fold, case PLUS_EXPR and case MULT_EXPR): Restore
	a number of conversions required for type consistency and previously
	stripped off by STRIP_NOPS.

From-SVN: r65913
2003-04-21 18:27:49 -04:00
Richard Kenner
63f60ecb14 Revert hunks not part of last patch.
From-SVN: r65908
2003-04-21 17:35:44 -04:00
Richard Kenner
26b84487c7 fold-const.c (extract_muldiv, [...]): Detect case when conversion overflows.
* fold-const.c (extract_muldiv, case CONVERT_EXPR): Detect case
	when conversion overflows.

From-SVN: r65900
2003-04-21 16:58:05 -04:00
Olivier Hainque
a9ecacf6c4 tree.c (skip_simple_arithmetics_at, [...]): New functions.
* tree.c (skip_simple_arithmetics_at, saved_expr_p): New functions.
        (save_expr): Replace loop by call to skip_simple_arithmetics_at.
        * tree.h: Add prototypes for the two new functions.
        * fold-const.c (fold_binary_op_with_conditional_arg): Replace test
        updates introduced in the previous revision by call to saved_expr_p.
        * stor-layout.c (put_pending_size): Use skip_simple_arithmetics_at.

From-SVN: r65702
2003-04-16 17:33:19 -04:00
Olivier Hainque
cbcafd35b7 * fold-const.c (fold): Reorder tests for conditional expressions.
From-SVN: r65590
2003-04-14 17:09:44 -04:00
Roger Sayle
15d4fd9863 fold-const.c (fold): Transform (c1 - x) cmp c2...
* fold-const.c (fold):  Transform (c1 - x) cmp c2, where cmp is a
	comparison operation and c1/c2 are floating point constants into
	x swap(cmp) (c1 - c2).

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

From-SVN: r65584
2003-04-14 20:16:58 +00:00
Roger Sayle
5fce2c6539 fold-const.c (fold): Use "fold" following build in more places.
* fold-const.c (fold):  Use "fold" following build in more places.
	Optimize sqrt(x)*sqrt(x) as x, pow(x,y)*pow(z,y) as pow(x*z,y),
	pow(x,y)*pow(x,z) as pow(x,y+z) and x/pow(y,z) as x*pow(y,-z).

	* gcc.dg/builtins-11.c: New test case.

From-SVN: r65387
2003-04-08 23:28:28 +00:00
Roger Sayle
9ddae796cd fold-const.c (fold_inf_compare): New function to simplify FP comparisons against +Infinity or -Infinity.
* fold-const.c (fold_inf_compare):  New function to simplify FP
	comparisons against +Infinity or -Infinity.
	(fold):  Optimize floating point comparisons against Infs and NaNs.

	* gcc.c-torture/execute/ieee/fp-cmp-6.c: New test case.
	* gcc.c-torture/execute/ieee/fp-cmp-7.c: New test case.

From-SVN: r64945
2003-03-28 02:41:14 +00:00
Mark Mitchell
068d2c9db6 re PR c/8224 (Incorrect joining of signed and unsigned division)
PR c/8224
	* fold-const.c (extract_muldiv_1): Don't pass through type conversions
	when signedness changes for division or modulus.

	PR c/8224
	* gcc.dg/20030323-1.c: New test.

From-SVN: r64760
2003-03-23 22:57:26 +00:00
Richard Henderson
4bddea4c01 fold-const.c (extract_muldiv_1): Revert changing order of operands in case MULT_EXPR of 2003-02-16 patch.
* fold-const.c (extract_muldiv_1): Revert changing order of
        operands in case MULT_EXPR of 2003-02-16 patch.

From-SVN: r64632
2003-03-20 16:03:24 -08:00
Roger Sayle
c876997fea fold-const.c (fold_mathfn_compare): New function to simplify comparisons against built-in math functions.
* fold-const.c (fold_mathfn_compare): New function to simplify
	comparisons against built-in math functions.  Fold comparisons
	of sqrt against constants.
	(fold): Call fold_mathfn_compare when appropriate.

	* gcc.dg/builtins-6.c: New test case.

From-SVN: r64619
2003-03-20 17:48:26 +00:00
Kazu Hirata
015c318662 * fold-const.c (fold): Fold A - (A & B) into ~B & A.
From-SVN: r64615
2003-03-20 16:10:36 +00:00
Roger Sayle
c0a47a6126 fold-const.c (omit_one_operand): No longer static.
* fold-const.c (omit_one_operand): No longer static.
	* tree.h (omit_one_operand): Prototype here.
	(div_and_round_double): Keep fold-const.c prototypes together.
	* builtins.c (builtin_mathfn_code): Handle binary built-in
	funtions, such as "pow" and "atan2".
	(fold_builtin): Optimize both pow(x,0.0) and pow(1.0,y) to 1.0.
	Simplify optimizations using "type" the builtin's return type.

	* gcc.dg/builtins-5.c: New test case.

From-SVN: r63273
2003-02-22 04:16:18 +00:00
Roger Sayle
3bc400cdc1 fold-const.c (fold_real_zero_addition_p): Don't fold a zero addition in the presence of signaling NaNs.
* fold-const.c (fold_real_zero_addition_p): Don't fold a zero
	addition in the presence of signaling NaNs.

From-SVN: r63133
2003-02-19 22:59:33 +00:00
Roger Sayle
080ea642c0 fold-const.c (negate_expr_p): New function to determine whether an expression can be negated cheaply.
* fold-const.c (negate_expr_p): New function to determine whether
	an expression can be negated cheaply.
	(fold) [MINUS_EXPR]: Use it to determine whether to transform
	-A - B into -B - A for floating point types.

From-SVN: r63059
2003-02-18 19:37:01 +00:00
Arend Bayer
cdd4b0d464 fold-const.c (extract_muldiv_1): Rename from extract_muldiv; rearrange mult arguments for less recursion.
* fold-const.c (extract_muldiv_1): Rename from extract_muldiv;
        rearrange mult arguments for less recursion.
        (extract_muldiv): New.  Prevent runaway recursion.

Co-Authored-By: Richard Henderson <rth@redhat.com>

From-SVN: r62963
2003-02-16 00:24:25 -08:00
Richard Henderson
7dba8395e2 defaults.h (CLZ_DEFINED_VALUE_AT_ZERO): New.
* defaults.h (CLZ_DEFINED_VALUE_AT_ZERO): New.
        (CTZ_DEFINED_VALUE_AT_ZERO): New.
        * doc/rtl.texi, doc/tm.texi: Document them.

        * combine.c (nonzero_bits) [CLZ, CTZ]: Handle the definedness
        of the value at zero properly.
        * fold-const.c (tree_expr_nonnegative_p): Likewise.
        * simplify-rtx.c (simplify_unary_operation): Likewise.

        * config/alpha/alpha.h (CLZ_DEFINED_VALUE_AT_ZERO): New.
        (CTZ_DEFINED_VALUE_AT_ZERO): New.

        * config/arm/arm.c (TARGET_INIT_BUILTINS): Remove.
        (TARGET_EXPAND_BUILTIN): Remove.
        (def_builtin, arm_init_builtins, arm_expand_builtin): Remove.
        * config/arm/arm.h (CLZ_DEFINED_VALUE_AT_ZERO): New.
        (enum arm_builtins): Remove.
        * config/arm/arm.md (UNSPEC_CLZ): Remove.
        (clzsi2): Rename from clz; use clz instead of unspec.
        (ctzsi2): New.
        * config/arm/arm-protos.h: Update.

From-SVN: r62453
2003-02-05 14:37:54 -08:00
Richard Henderson
2928cd7aac [multiple changes]
2003-02-01  Richard Henderson  <rth@redhat.com>

	* optabs.c (expand_unop): Use word_mode for outmode of bit scaners.
	* libgcc2.c (__ffsdi2, __clzsi2, __clzdi2, __ctzsi2, __ctzdi2,
	__popcountsi2, __popcountdi2, __paritysi2 __paritydi2): Change
	return type to Wtype.

	* libgcc-std.ver (GCC_3.4): Fix inheritance.

	* config/i386/i386.md (ffssi2): Use nonimmediate_operand for
	expander input constraint.

2003-02-01  Falk Hueffner  <falk.hueffner@student.uni-tuebingen.de>

        * optabs.h (optab_index): Add OTI_clz, OTI_ctz, OTI_popcount and
        OTI_parity.
        (clz_optab, ctz_optab, popcount_optab, parity_optab): New.
        * optabs.c (widen_clz, expand_parity): New.
        (expand_unop): Handle clz and parity.  Hardcode SImode as outmode
        for libcalls to clz, ctz, popcount, and parity.
        (init_optabs): Init clz_optab, ctz_optab, popcount_optab and
        parity_optab, and set up libfunc handlers.
        * libgcc2.c (__clzsi2, __clzdi2, __ctzsi2, __ctzdi2,
        __popcountsi2, __popcountdi2, __paritysi2 __paritydi2,
        __popcount_tab): New.
        * libgcc2.h: Declare them.
        * libgcc-std.ver (GCC_3.4): Add new functions from libgcc2.c.
        * genopinit.c (optabs): Add clz_optab, ctz_optab, popcount_optab
        and parity_optab.
        * builtin-types.def (BT_FN_INT_LONG, BT_FN_INT_LONGLONG): New.
        * builtins.def (BUILT_IN_CLZ, BUILT_IN_CTZ, BUILT_IN_POPCOUNT,
        BUILT_IN_PARITY, BUILT_IN_FFSL, BUILT_IN_CLZL, BUILT_IN_CTZL,
        BUILT_IN_POPCOUNTL, BUILT_IN_PARITYL, BUILT_IN_FFSLL,
        BUILT_IN_CLZLL, BUILT_IN_CTZLL, BUILT_IN_POPCOUNTLL,
        BUILT_IN_PARITYLL): New.
        * builtins.c (expand_builtin_unop): Rename from expand_builtin_ffs
        and add optab argument.
        (expand_builtin): Expand BUILT_IN_{FFS,CLZ,POPCOUNT,PARITY}*.
        * tree.def (CLZ_EXPR, CTZ_EXPR, POPCOUNT_EXPR, PARITY_EXPR): New.
        * expr.c (expand_expr): Handle them.
        * fold-const.c (tree_expr_nonnegative_p): Likewise.
        * rtl.def (CLZ, CTZ, POPCOUNT, PARITY): New.
        * reload1.c (eliminate_regs): Handle them.
        (elimination_effects): Likewise.
        * function.c (instantiate_virtual_regs_1): Likewise
        * genattrtab.c (check_attr_value): Likewise.
        * simplify-rtx.c (simplify_unary_operation): Likewise.
        * c-common.c (c_common_truthvalue_conversion): Handle POPCOUNT_EXPR.
        * combine.c (combine_simplify_rtx): Handle POPCOUNT and PARITY.
        (nonzero_bits): Handle CLZ, CTZ, POPCOUNT and PARITY.
        * config/alpha/alpha.md (clzdi2, ctzdi2, popcountdi2): New.
        * config/arm/arm.c (arm_init_builtins): Rename __builtin_clz to
        __builtin_arm_clz.
        * Makefile.in (LIB2FUNCS_1, LIB2FUNCS_2): Move...
        * mklibgcc.in (lib2funcs): ...here and merge.  Add new members.
        * doc/extend.texi (Other Builtins): Add new builtins.
        * doc/md.texi (Standard Names): Add new patterns.

From-SVN: r62252
2003-02-01 11:00:02 -08:00
Jan Hubicka
b1a6f8db64 re PR rtl-optimization/9258 (ICE in compensate_edge, at reg-stack.c:2589)
PR f/9258
	* global.c (struct allocno): Add no_stack_reg.
	(global_conflicts): Set no_stack_reg.
	(find_reg): Use it.

	* convert.c (convert_to_real): Fold - and abs only when profitable.
	* fold-const.c (fold): Fold truncates in - and abs.

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

	* gcc.dg/i386-fpcvt-1.c: New test.
	* gcc.dg/i386-fpcvt-2.c: New test.

From-SVN: r61329
2003-01-15 12:43:35 +00:00
Jan Hubicka
77f9af81d2 convert.c (strip_float_extensions): Look for narrowest type handling FP constants.
* convert.c (strip_float_extensions):  Look for narrowest type handling
	FP constants.

	* fold-const.c (fold):  Fold (double)float1 CMP (double)float2 into
	float1 CMP float2.
	* convert.c (strip_float_extensions): Make global.
	* tree.h (strip_float_extensions): Declare.

	* gcc.dg/i386-fpcvt-1.c: New test.
	* gcc.dg/i386-fpcvt-2.c: New test.

From-SVN: r61279
2003-01-14 13:03:47 +00:00
Geoffrey Keating
17211ab553 Merge from pch-branch.
From-SVN: r61136
2003-01-10 02:22:34 +00:00
Jason Merrill
4e8dca1c3a fold-const.c (fold): Avoid NOP_EXPRs better.
* fold-const.c (fold) [COND_EXPR]: Avoid NOP_EXPRs better.

        * integrate.c (copy_decl_for_inlining): Don't clear the rtl for
        static/external decls.
cp/
        * call.c (build_conditional_expr): Stabilize lvalues properly.
        * cvt.c (ocp_convert): Don't build NOP_EXPRs of class type.
        * tree.c (lvalue_p_1): Don't allow sloppy NOP_EXPRs as lvalues.
        Don't allow CALL_EXPR or VA_ARG_EXPR, either.

        * call.c (convert_like_real): Call decl_constant_value for an
        IDENTITY_CONV even if there are no more conversions.

        * cvt.c (build_up_reference): Don't push unnamed temps.

        * decl2.c (do_namespace_alias): Namespace aliases are DECL_EXTERNAL.

        * dump.c (cp_dump_tree): Don't try to dump class-specific fields
        for a backend struct.

        * except.c (wrap_cleanups_r, build_throw): Make
        MUST_NOT_THROW_EXPRs void.
        * init.c (expand_default_init): Update to handle MUST_NOT_THROW_EXPR.

        * init.c (build_vec_delete_1): Pre-evaluate the base address.

        * init.c (get_temp_regvar): Simplify logic.

        * tree.c (cp_copy_res_decl_for_inlining): Only do debug tweaks if
        our replacement is a decl.

From-SVN: r60851
2003-01-03 15:04:38 -05:00
Zack Weinberg
4977bab6ed Merge basic-improvements-branch to trunk
From-SVN: r60174
2002-12-16 18:23:00 +00:00
Christian Ehrhardt
b77f37445e re PR c/8639 (simple integer arithmetic expression broken)
PR c/8639
        * fold-const.c (extract_muldiv): Don't propagate division unless
        both arguments are multiples of C.
	* gcc.c-torture/execute/20021119-1.c: New.

From-SVN: r59466
2002-11-25 11:04:57 -08:00
Andrew Haley
5c7cd6636d fold-const.c (fold): Don't transform (a0 op compound(a1,a2)) to (compound(a1,a0 op a2)) if...
2002-11-05  Andrew Haley  <aph@redhat.com>

        * fold-const.c (fold): Don't transform (a0 op compound(a1,a2))
        to (compound(a1,a0 op a2)) if a0 or a1 have side effects.

From-SVN: r58822
2002-11-05 14:32:24 +00:00
Roger Sayle
9402f6fb74 fold-const.c (fold_binary_op_with_conditional_arg): Improve handling of cases where one or both branches of the conditional have...
* fold-const.c (fold_binary_op_with_conditional_arg):  Improve
	handling of cases where one or both branches of the conditional
	have void type, i.e. throw an exception or don't return.
	(fold): Only apply (and undo) type conversion to the non-void
	branches of a COND_EXPR.

	* f/com.c (ffecom_subscript_check_): Cast the failure branch
	of the bounds check COND_EXPR to void, to indicate noreturn.
	(ffe_truthvalue_conversion): Only apply truth value conversion
	to the non-void branches of a COND_EXPR.

From-SVN: r58661
2002-10-30 23:07:48 +00:00
Nathan Sidwell
8fe734a3fe re PR c++/7209 (Faulty array dereferencing)
PR c++/7209
	* fold_const.c (fold_binary_op_with_conditional_arg): Always
	build compound_expr if we used save_expr.
testsuite:
	* g++.dg/expr/cond1.C: New test.

From-SVN: r58405
2002-10-22 08:56:49 +00:00
Kaveh R. Ghazi
7bdfd72e8d decl.c (typename_hash): Use htab_hash_pointer.
cp:
	* decl.c (typename_hash): Use htab_hash_pointer.

gcc:
	* fold-const.c (size_htab_hash): Use htab_hash_pointer.
	* function.c (insns_for_mem_hash): Likewise.
	* varasm.c (STRHASH): Likewise.

java:
	* class.c (JAVA_TREEHASHHASH_H): Use htab_hash_pointer.

From-SVN: r58036
2002-10-11 01:28:28 +00:00
Kazu Hirata
cc2902df52 dbxout.c: Follow spelling conventions.
* dbxout.c: Follow spelling conventions.
	* defaults.h: Likewise.
	* df.c: Likewise.
	* diagnostic.h: Likewise.
	* doloop.c: Likewise.
	* dwarf2out.c: Likewise.
	* dwarfout.c: Likewise.
	* emit-rtl.c: Likewise.
	* except.c: Likewise.
	* explow.c: Likewise.
	* expmed.c: Likewise.
	* expr.c: Likewise.
	* expr.h: Likewise.
	* flags.h: Likewise.
	* flow.c: Likewise.
	* fold-const.c: Likewise.
	* function.c: Likewise.
	* function.h: Likewise.
	* gcc.c: Likewise.
	* gcov-io.h: Likewise.
	* gcov.c: Likewise.
	* gcse.c: Likewise.
	* genattrtab.c: Likewise.
	* genconfig.c: Likewise.
	* genrecog.c: Likewise.
	* ggc-page.c: Likewise.
	* ggc.h: Likewise.
	* global.c: Likewise.
	* gthr-win32.h: Likewise.
	* integrate.c: Likewise.
	* jump.c: Likewise.
	* langhooks.c: Likewise.
	* langhooks.h: Likewise.
	* line-map.h: Likewise.
	* local-alloc.c: Likewise.
	* longlong.h: Likewise.
	* loop.c: Likewise.
	* loop.h: Likewise.

From-SVN: r57406
2002-09-22 14:09:34 +00:00
Richard Henderson
efdc7e19ca real.c, real.h: Rewrite from scratch.
gcc/
	* real.c, real.h: Rewrite from scratch.

	* Makefile.in (simplify-rtx.o): Depend on TREE_H.
	(paranoia): New target.
	* builtins.c (fold_builtin_inf): Use new real.h interface.
	* c-common.c (builtin_define_with_hex_fp_value): Likewise.
	* c-lex.c (interpret_float): Likewise.
	* emit-rtl.c (gen_lowpart_common): Likewise.
	* optabs.c (expand_float): Use real_2expN.
	* config/ia64/ia64.md (divsi3, udivsi3): Likewise.
	* defaults.h (INTEL_EXTENDED_IEEE_FORMAT): New.
	(FLOAT_WORDS_BIG_ENDIAN): New.
	* cse.c (find_comparison_args): Don't pass FLOAT_STORE_FLAG_VALUE
	directly to REAL_VALUE_NEGATIVE.
	* loop.c (canonicalize_condition): Likewise.
	* simplify-rtx.c: Include tree.h.
	(simplify_unary_operation): Don't handle FIX and UNSIGNED_FIX
	with floating-point result modes.
	* toplev.c (backend_init): Call init_real_once.

	* fold-const.c (force_fit_type): Don't call CHECK_FLOAT_VALUE.
	* tree.c (build_real): Likewise.
	* config/alpha/alpha.c, config/vax/vax.c (float_strings,
	float_values, inited_float_values, check_float_value): Remove.
	* config/alpha/alpha.h, config/m68hc11/m68hc11.h,
	config/m88k/m88k.h, config/vax/vax.h (CHECK_FLOAT_VALUE): Remove.
	* doc/tm.texi (CHECK_FLOAT_VALUE): Remove.

gcc/f/
	* target.c (ffetarget_real1): Don't pass FFETARGET_ATOF_
	directly to ffetarget_make_real1.
	(ffetarget_real2): Similarly.
	* target.h (ffetarget_cvt_r1_to_rv_, ffetarget_cvt_rv_to_r2_,
	ffetarget_cvt_r2_to_rv_): Use new real.h interface and simplify.

gcc/java/
	* jcf-parse.c (get_constant): Runtime check for IEEE format;
	use new real.h interface.
	* jcf-write.c (find_constant_index): Use new real.h interface.
	* lex.c (IS_ZERO): Use REAL_VALUES_EQUAL.

contrib/
	* paranoia.cc: New file.

From-SVN: r57198
2002-09-16 09:36:39 -07:00
Hartmut Penner
4f968d9388 fold-const.c (make_range): Only narrow to signed range if the signed range is smaller than the unsigned range.
* fold-const.c (make_range): Only narrow to signed range if
        the signed range is smaller than the unsigned range.

	* gcc.c-torture/execute/20020911-1.c: New.

From-SVN: r57050
2002-09-11 23:49:26 -07:00
Tom Tromey
57ce46bb22 For PR java/6005 and PR java/7611:
* fold-const.c (fold_truthop): Use can_use_bit_fields_p.
	(fold): Likewise.
	* langhooks.c (lhd_can_use_bit_fields_p): New function.
	* langhooks-def.h (lhd_can_use_bit_fields_p): Declare.
	(LANG_HOOKS_CAN_USE_BIT_FIELDS_P): New define.
	(LANG_HOOKS_INITIALIZER): Use it.
	* langhooks.h (struct lang_hooks) [can_use_bit_fields_p]: New
	field.

From-SVN: r56498
2002-08-22 00:42:40 +00:00
Jakub Jelinek
1bed5ee327 fold-const.c (associate_trees): Only optimize NEGATE_EXPR in one of the operands into MINUS_EXPR if...
* fold-const.c (associate_trees): Only optimize NEGATE_EXPR in one
	of the operands into MINUS_EXPR if code is PLUS_EXPR.

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

From-SVN: r56058
2002-08-05 21:26:27 +02:00
Kazu Hirata
68e82b8334 fold-const.c: Fix comment typos.
* fold-const.c: Fix comment typos.
	* gcse.c: Likewise.
	* reload1.c: Likewise.

From-SVN: r55876
2002-07-30 16:42:05 +00:00
Roger Sayle
52bfebf091 Makefile.in: rtlanal.o now depends upon real.h.
* Makefile.in: rtlanal.o now depends upon real.h.

	* flags.h [flag_signaling_nans]: New flag.
	[HONOR_SNANS]: New macro.

	* toplev.c [flag_signaling_nans]: Initialize to false.
        (f_options): Add processing for "-fsignaling-nans".
	(set_fast_math_flags): Clear flag_signaling_nans with -ffast-math.
	(process_options): flag_signaling_nans implies flag_trapping_math.

	* c-common.c (cb_register_builtins): Define __SUPPORT_SNAN__
	when -fsignaling-nans.  First step to implementing WG14's N965.

	* fold-const.c (fold) [MULT_EXPR]: Conditionalize transforming
	1.0 * x into x, and -1.0 * x into -x on !HONOR_SNANS.
	[RDIV_EXPR]: Conditionalize x/1.0 into x on !HONOR_SNANS.

	* simplify-rtx.c (simplify_relational_operation): Conditionalize
	transforming abs(x) < 0.0 into false on !HONOR_SNANS.

	* rtlanal.c: #include real.c for TARGET_FLOAT_FORMAT definitions
	required by HONOR_SNANS.  (may_trap_p): Floating point DIV, MOD,
	UDIV, UMOD, GE, GT, LE, LT and COMPARE may always trap with
	-fsignaling_nans.  EQ and NE only trap for flag_signaling_nans
	not flag_trapping_math (i.e. HONOR_SNANS but not HONOR_NANS).

	* doc/invoke.texi: Document new -fsignaling-nans compiler option.

From-SVN: r55804
2002-07-28 02:11:05 +00:00
Roger Sayle
6bfa5aac87 re PR rtl-optimization/4046 (redundant conditional branch)
PR opt/4046
	* fold-const.c (fold) [COND_EXPR]: Simplify A ? 0 : 1 to !A,
	A ? B : 0 to A && B and A ? B : 1 into !A || B if both A and
	B are truth values.

From-SVN: r55153
2002-07-01 20:59:00 +00:00
Aaron Lehmann
7bfb14f14f fold-cont.c: Remove unused CHARMASK.
2002-06-28  Aaron Lehmann  <aaronl@vitelus.com>

        * fold-cont.c: Remove unused CHARMASK.

From-SVN: r55106
2002-06-29 21:14:21 +00:00
Roger Sayle
8dcb27ed86 fold-const.c (comparison_to_compcode): New function to convert an comparison TREE CODE into a bit-based representation.
* fold-const.c (comparison_to_compcode): New function to convert
	an comparison TREE CODE into a bit-based representation.
	(compcode_to_comparison): New function to convert from this bit
	based representation back to a comparison TREE CODE.
	(fold_truthop): Simplify (x<y) && (x==y) and related composite
	comparisons.

	* gcc.c-tortuture/execute/compare-1.c: New test case.
	* gcc.c-tortuture/execute/compare-2.c: New test case.
	* gcc.c-tortuture/execute/compare-3.c: New test case.

From-SVN: r54647
2002-06-15 16:55:24 +00:00
Eric Botcazou
43e4a9d870 convert.c (convert_to_integer): Don't pass the truncation down when the target type is signed.
* convert.c (convert_to_integer) [LSHIFT_EXPR]: Don't pass
	the truncation down when the target type is signed.
	[trunc1]: Use unsigned arithmetic for LSHIFT_EXPR.
	* fold-const.c (extract_muldiv) [NOP_EXPR]: Don't pass through
	the conversion if the target type is a smaller type.

From-SVN: r54627
2002-06-14 17:40:49 -07:00
Richard Henderson
fa4a5557dd fold-const.c (fold): Move X>=C / X<C transfomation earlier.
* fold-const.c (fold) [compare ops]: Move X>=C / X<C transfomation
        earlier.  Re-factor comparisons vs extrema.

From-SVN: r54626
2002-06-14 17:06:18 -07:00
Tom Tromey
0797e4720f For PR java/6520:
* fold-const.c (fold_convert): Don't modify existing tree's type.

From-SVN: r54529
2002-06-11 22:36:53 +00:00
Roger Sayle
437f1df1af fold-const.c (fold): Place both integer and real constants last in comparisons.
* fold-const.c (fold) [EQ_EXPR]:  Place both integer and real
	constants last in comparisons.  Optimize (x+1.0)>0.0 into the
	equivalent x > -1.0 when -ffast-math.

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

From-SVN: r54356
2002-06-07 23:42:53 +00:00
Geoffrey Keating
e2500fedef Merge from pch-branch up to tag pch-commit-20020603.
From-SVN: r54232
2002-06-04 07:11:05 +00:00
Roger Sayle
378393da61 tree.c (real_minus_onep): New function to test for -1.0.
* tree.c (real_minus_onep): New function to test for -1.0.
	* fold-const.c (fold) [MULT_EXPR]:  Optimize -1.0*x into -x.

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

From-SVN: r54149
2002-06-01 16:56:08 +00:00
Roger Sayle
01c58f2670 fold-const.c (fold_truthop): Transform "a || b" into "(a|b) != 0" and "!p && !q" into "(p|q) == 0" under...
* fold-const.c (fold_truthop): Transform "a || b" into "(a|b) != 0"
	and "!p && !q" into "(p|q) == 0" under suitable conditions.

From-SVN: r54148
2002-06-01 16:51:00 +00:00
Zack Weinberg
11ad4784f3 tree.h: Forward-declare struct realvaluetype.
* tree.h: Forward-declare struct realvaluetype.
	(struct tree_real_cst): Point to the REAL_VALUE_TYPE, do not
	contain it.
	(TREE_REAL_CST_PTR): New accessor.
	(TREE_REAL_CST): Update.
	* real.h: Include machmode.h.
	(realvaluetype): Make it struct realvaluetype, not a typedef.
	(build_real): Prototype here.

	* tree.c: Include real.h.
	(build_real): Allocate the REAL_VALUE_TYPE as a separate
	object in GC memory, set TREE_REAL_CST_PTR to point to it.
	(build_real_from_int_cst): Use build_real.
	* ggc-common.c (ggc_mark_trees): Mark TREE_REAL_CST_PTR of a
	REAL_CST.

	* builtins.c, c-common.c, c-lex.c, dwarf2out.c, expr.c,
	fold-const.c, print-tree.c, real.c, cp/mangle.c, cp/tree.c,
	f/bld.c, f/com.c, f/expr.c, f/target.c, java/decl.c,
	java/jcf-parse.c, java/parse.y, java/typeck.c: Include real.h.
	* Makefile.in, cp/Make-lang.in, f/Make-lang.in,
	java/Make-lang.in: Update dependency lists.

From-SVN: r53959
2002-05-28 17:33:14 +00:00
Andrew Haley
57f851a378 fold-const.c (fold): Don't convert (T)(x & c) into (T)x & (T)c if T is a boolean type.
2002-05-24  Andrew Haley  <aph@redhat.com>

        * fold-const.c (fold): Don't convert (T)(x & c) into (T)x & (T)c
        if T is a boolean type.

From-SVN: r53929
2002-05-27 14:40:38 +00:00
Kazu Hirata
dd3f010165 final.c: Fix formatting.
* final.c: Fix formatting.
	* fix-header.c: Likewise.
	* flow.c: Likewise.
	* fold-const.c: Likewise.
	* function.c: Likewise.

From-SVN: r53563
2002-05-17 18:07:01 +00:00
Richard Henderson
033afd1106 [multiple changes]
2002-05-15  Jakub Jelinek  <jakub@redhat.com>

        * fold-const.c (fold): Fix a typo.

2002-05-15  Eric Botcazou  <ebotcazou@multimania.com>

        * fold-const.c (fold) [LT_EXPR]: Move the transformation of a
        comparison against the highest or lowest integer value before
        the 'X >= CST to X > (CST - 1)' and 'X < CST to X <= (CST - 1)'
        transformation and that of an unsigned comparison against 0
        right after.

From-SVN: r53493
2002-05-15 13:39:55 -07:00
Roger Sayle
dbfb1116b3 fold-const.c (build_range_check): Optimize (c>=1) && (c<=127) into the equivalent (signed char)c > 0.
* fold-const.c (build_range_check): Optimize (c>=1) && (c<=127)
	into the equivalent (signed char)c > 0.

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

From-SVN: r53373
2002-05-10 22:24:13 +00:00
Roger Sayle
1f77b5da98 re PR rtl-optimization/3995 (i386 optimisation: joining tests)
PR opt/3995
	* fold-const.c (sign_bit_p): New function.
	(fold) [EQ_EXPR]: Use this to convert (A & C) == 0 into A >= 0 and
        (A & C) != 0 into A < 0, when constant C is the sign bit of A's type.
	Reapply fold when converting (A & C) == C into (A & C) != 0.
	(fold_binary_op_with_conditional_arg): Fix typo in comment.

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

From-SVN: r53241
2002-05-06 22:59:38 +00:00
Roger Sayle
0316d49bf1 fold-const.c (lshift-double): Cast the high word to an unsigned HOST_WIDE_INT when...
* fold-const.c (lshift-double): Cast the high word to an unsigned
	HOST_WIDE_INT when extracting sign bit to avoid compiler warning.
	(div_and_round_double): Cast carry to a signed HOST_WIDE_INT to
	avoid compiler warning.  (fold): Remove redundant code from
	BIT_AND_EXPR as integer operands are canonicalized to be arg1.

From-SVN: r53228
2002-05-06 16:59:18 +00:00
Eric Botcazou
cff2779594 fold-const.c (split_tree): Add MINUS_LITP parameter; separate added literals from substracted literals.
* fold-const.c (split_tree): Add MINUS_LITP parameter; separate
        added literals from substracted literals.
        (associate_trees): Don't convert MINUS_EXPR into PLUS_EXPR.
        (fold) [associate]: Preserve MINUS_EXPR if needed.

	* gcc.c-torture/execute/20020423-1.c: New.

From-SVN: r52695
2002-04-23 16:31:07 -07:00
David S. Miller
2f82dbf865 sparc.h (BRANCH_COST): Define.
2002-04-18  David S. Miller  <davem@redhat.com>

	* config/sparc/sparc.h (BRANCH_COST): Define.

	* fold-const.c (BRANCH_COST): Don't provide default here, expr.h
	does it.

From-SVN: r52500
2002-04-18 16:37:15 -07:00
Jakub Jelinek
a32db60568 fold-const.c (fold): Use (*lang_hooks.types.unsigned_type) instead of unsigned_type.
* fold-const.c (fold): Use (*lang_hooks.types.unsigned_type)
	instead of unsigned_type.

From-SVN: r52474
2002-04-18 17:17:47 +02:00
Roger Sayle
58c2956cc7 fold-const.c (fold): Convert (T)(x&c) into ((T)x&(T)c) for integer constant c (if...
* fold-const.c (fold) [NOP_EXPR]: Convert (T)(x&c) into ((T)x&(T)c)
	for integer constant c (if x has unsigned type or sign bit is not
	set in c).  This folds the zero/sign extension into the bit-wise and
	operation.

	* gcc.c-torture/compile/20020415-1.c: New.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>

From-SVN: r52465
2002-04-18 12:39:41 +02:00
Neil Booth
78ef5b895f c-common.c (truthvalue_conversion): Rename, update.
* c-common.c (truthvalue_conversion): Rename, update.
	* c-common.h (c_common_truthvalue_conversion): New.
	* c-convert.c (convert): Update.
	* c-lang.c (LANG_HOOKS_TRUTHVALUE_CONVERSION): Redefine.
	* c-parse.in (expr_no_commas, if_prefix, select_or_iter_stmt): Update.
	* c-typeck.c (build_binary_op, build_unary_op,
	build_conditional_expr): Update.
	* fold-const.c (constant_boolean_node, fold): Use langhook.
	* langhooks-def.h (LANGHOOK_INITIALIZER): Update.
	* langhooks.h (struct lang_hooks): New hook.
	* stmt.c (expand_decl_cleanup): Use langhook.
	* tree.h (truthvalue_conversion): Remove.
ada:
	* gigi.h (truthvalue_conversion): Rename.
	* misc.c (LANG_HOOKS_TRUTHVALUE_CONVERSION): Redefine.
	* trans.c (tree_transform): Update.
	* utils2.c (truthvalue_conversion): Rename, update.
	(build_binary_op, build_unary_op): Update.
cp:
	* cp-lang.c (LANG_HOOKS_TRUTHVALUE_CONVERSION): Redefine.
	* cvt.c: Update comment.
	* init.c (expand_cleanup_for_base): Update.
	* semantics.c (finish_parenthesized_expr): Update.
	* typeck.c (cp_truthvalue_conversion): Update.
f:
	* com.c (LANG_HOOKS_TRUTHVALUE_CONVERSION): Redefine.
	(truthvalue_conversion): Rename.  Update.  Make static.
	(ffecom_truth_value): Update.
java:
	* expr.c (truthvalue_conversion): Rename.  Update.
	(expand_compare): Update.
	* java-tree.h (java_truthvalue_conversion): New.
	* lang.c (LANG_HOOKS_TRUTHVALUE_CONVERSION): Redefine.
objc:
	* objc-lang.c (LANG_HOOKS_TRUTHVALUE_CONVERSION): Redefine.

From-SVN: r51880
2002-04-04 22:19:58 +00:00
Neil Booth
ceef8ce4b4 c-common.c (unsigned_conversion_warning, [...]): Use new hooks.
* c-common.c (unsigned_conversion_warning, convert_and_check,
	unsigned_type, signed_type, shorten_compare,
	c_common_get_alias_set, c_common_nodes_and_builtins): Use new hooks.
	(unsigned_type, signed_type, signed_or_unsigned_type): Rename.
	* c-common.h (unsigned_type, signed_type, signed_or_unsigned_type):
	New.
	* c-decl.c (grokdeclarator): Update.
	* c-format.c (check_format_types): Update.
	* c-lang.c (LANG_HOOKS_SIGNED_TYPE, LANG_HOOKS_UNSIGNED_TYPE,
	LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE): New.
	* c-typeck.c (build_binary_op, convert_for_assignment): Update.
	* convert.c (convert_to_integer): Use new hooks.
	* expmed.c (make_tree): Use new hooks.
	* expr.c (store_expr): Use new hooks.
	* fold-const.c (operand_equal_for_comparison_p, build_range_check,
	all_ones_mask_p, unextend, fold): Use new hooks.
	* langhooks.h (struct lang_hooks_for_types): New hooks.
	* tree.h (signed_or_unsigned_type, signed_type,
	unsigned_type): Remove.
ada:
	* gigi.h (unsigned_type, signed_type, signed_or_unsigned_type):
	Rename.
	* misc.c (LANG_HOOKS_SIGNED_TYPE, LANG_HOOKS_UNSIGNED_TYPE,
	LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE): New.
	* trans.c (tree_transform, convert_with_check): Update.
	* utils.c (unsigned_type, signed_type, signed_or_unsigned_type):
	Rename.
cp:
	* cp-lang.c (LANG_HOOKS_SIGNED_TYPE, LANG_HOOKS_UNSIGNED_TYPE,
	LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE): New.
	* decl.c (grokdeclarator): Update.
	* mangle.c (write_integer_cst): Update.
	* typeck.c (build_binary_op): Update.
f:
	* com.c (LANG_HOOKS_SIGNED_TYPE, LANG_HOOKS_UNSIGNED_TYPE,
	LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE): New.
	(unsigned_type, signed_type, signed_or_unsigned_type): Rename.
java:
	* expr.c (build_java_binop): Update.
	* java-tree.h (java_signed_type, java_unsigned_type,
	java_signed_or_unsigned_type): Update.
	* lang.c (LANG_HOOKS_SIGNED_TYPE, LANG_HOOKS_UNSIGNED_TYPE,
	LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE): New.
	* parse.y (patch_binop): Update.
	* typeck.c (signed_or_unsigned_type, unsigned_type,
	signed_type): Update.
objc:
	* objc-lang.c (LANG_HOOKS_SIGNED_TYPE, LANG_HOOKS_UNSIGNED_TYPE,
	LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE): New.

From-SVN: r51684
2002-04-01 08:46:10 +00:00
Neil Booth
b0c4822985 Makefile.in (convert.o, [...]): Update.
* Makefile.in (convert.o, calls.o, expmed.o): Update.
	* attribs.c (handle_mode_attribute, handle_vector_size_attribute):
	Use new hooks.
	* builtin-types.def (BT_PTRMODE): Update.
	* c-common.c (type_for_size): Rename c_common_type_for_size.
	(type_for_mode): Similarly.
	(shorten_compare, pointer_int_sum, c_common_nodes_and_builtins):
	Use new hook.
	* c-bommon.h (c_common_type_for_size, c_common_type_for_mode): New.
	* c-decl.c (finish_enum, build_enumerator): Use new hooks.
	* c-lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE):
	Redefine.
	* c-typeck.c (common_type, comptypes, default_conversion):
	Use new hooks.
	* calls.c: Include langhooks.h.
	(emit_library_call_value_1): Use new hooks.  Avoid redundant
	calls.
	* convert.c: Include langhooks.h
	(convert_to_pointer, convert_to_integer): Use new hooks.
	* except.c (init_eh): Similarly.
	* expmed.c: Include langhooks.h.
	(expand_mult_add): Use new hooks.
	* expr.c (store_expr, store_constructor, expand_expr, do_jump,
	try_casesi): Similarly.
	* fold-const.c (optimize_bit_field_compare, make_range,
	decode_field_reference, fold_truthop, fold): Similarly.
	* function.c (assign_stack_local_1, assign_stack_temp_for_type,
	put_var_into_stack): Similarly.
	* langhooks-def.h (LANG_HOOKS_TYPE_FOR_MODE,
	LANG_HOOKS_TYPE_FOR_SIZE): New.
	(LANG_HOOKS_TYPES_INITIALIZER): Update.
	* langhooks.h (lang_hooks_for_types): New hooks.
	* stmt.c (expand_decl_cleanup, emit_case_nodes): Use new hooks.
	* tree.c (get_unwidened, get_narrower): Similarly.
	* tree.h (type_for_mode, type_for_size): Remove.
	* varasm.c (force_const_mem): Use new hooks.
ada:
	* gigi.h (type_for_size, type_for_mode): Rename.
	* misc.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE):
	Redefine.
	* trans.c (tree_transform): Update.
	* utils.c (gnat_init_decl_processing, init_gigi_decls,
	builtin_function, float_type_for_size, signed_or_unsigned_type,
	build_vms_descriptor, unchecked_convert): Update.
	(type_for_mode, type_for_size): Rename.
	* utils2.c (nonbinary_modular_operation): Update.
cp:
	* cp-lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE):
	Redefine.
	* cvt.c (cp_convert_to_pointer, type_promotes_to): Use new hooks.
	* decl.c (finish_enum): Similarly.
	* error.c (dump_type): Similarly.
	* lex.c (cxx_init): Similarly.
	* mangle.c (write_builtin_type): Similarly.
	* typeck.c (comptypes): Similarly.
f:
	* com.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE):
	Redefine.
	(type_for_mode, type_for_size): Rename.
	(signed_or_unsigned_type, signed_type, truthvalue_conversion,
	unsigned_type):	Use new hooks.
java:
	* Make-lang.in (builtins.o): Update.
	* boehm.c (get_boehm_type_descriptor): Update.
	* builtins.c: Include langhooks.h.
	* decl.c (java_init_decl_processing): Update.
	* java-tree.h (java_type_for_mode, java_type_for_size): New.
	* lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIaZE):
	Redefine.
	* typeck.c (type_for_mode, type_for_size): Update.
objc:
	* objc-act.c (handle_impent): Update.
	* objc-lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIaZE):
	Redefine.

From-SVN: r51571
2002-03-29 21:46:27 +00:00
Zack Weinberg
15e5ad7698 toplev.c: Don't include setjmp.h.
* toplev.c: Don't include setjmp.h.  Kill float_handler_set,
	float_handled, float_handler, float_signal, set_float_handler,
	and do_float_handler.  Set handler for SIGFPE to crash_signal.
	* toplev.h: Don't prototype do_float_handler.

	* c-lex.c: Fold parse_float into lex_number.  Make warning
	about portability of hex float constants more informative, and
	don't issue it on top of a syntax error.
	* fold-const.c: Fold const_binop_1 and fold_convert_1 into
	their callers.
	* real.h: Define REAL_VALUE_ABS here...
	* simplify-rtx.c: ... not here.  Fold check_fold_consts,
	simplify_unary_real, simplify_binary_real, and
	simplify_binary_is2orm1 into their callers.
	* tree.c: Fold build_real_from_int_cst_1 into caller.

	* doc/tm.texi: Document REAL_VALUE_ABS and REAL_VALUE_NEGATIVE.

	* tsystem.h: Include float.h here...
	* libgcc2.c: ... not here.

java:
	* lex.c: Change java_perform_atof to take normal parameters
	instead of a pointer to a parameter block.  Call it directly
	from java_lex.

testsuite:
	* gcc.dg/c90-hexfloat-1.c: Adjust error regexps.

From-SVN: r51336
2002-03-25 20:52:28 +00:00
Zack Weinberg
b216cd4ae3 real.h: Don't define REAL_INFINITY or REAL_IS_NOT_DOUBLE.
* real.h: Don't define REAL_INFINITY or REAL_IS_NOT_DOUBLE.
	Always make REAL_VALUE_TYPE a struct containing an array of
	HOST_WIDE_INT, not a double.  Tidy up the code deciding how
	big it is.  Don't declare or use union real_extract.

	* emit-rtl.c (init_emit_once), varasm.c (immed_real_const_1,
	decode_rtx_const, output_constant_pool), config/a29k/a29k.c
	(print_operand), config/arm/arm.c (output_move_double),
	config/arm/arm.md (consttable_4, consttable_8),
	config/romp/romp.c (output_fpops), config/s390/s390.h
	(ASM_OUTPUT_SPECIAL_POOL_ENTRY), config/xtensa/xtensa.c
	(xtensa_output_literal): Don't use union real_extract.

	* config/dsp16xx/dsp16xx.c (print_operand), config/i860/i860.c
	(sfmode_constant_to_ulong), config/ns32k/merlin.h
	(PRINT_OPERAND), config/ns32k/ns32k.c (print_operand),
	config/pdp11/pdp11.h (PRINT_OPERAND), config/we32k/we32k.h
	(PRINT_OPERAND): Don't use local version of union
	real_extract.

	* config/convex/convex.c (check_float_value), config/vax/vax.c
	(vax_float_literal), config/m88k/m88k.md (divdf3),
	config/dsp16xx/dsp16xx.md (fixuns_trunchfhi2),
	config/pdp11/pdp11.c (output_move_quad): Don't do host
	arithmetic on target floating point quantities.

	* config/a29k/a29k.md, config/dsp16xx/dsp16xx.c
	(output_dsp16xx_float_const): Don't test HOST_FLOAT_FORMAT.

	* fold-const.c (fold), simplify-rtx.c (simplify_binary_real):
	Use MODE_HAS_INFINITIES rather than #ifdef REAL_INFINITY.

	* real.c (earith): Test INFINITY rather than REAL_INFINITY;
	NANS implies INFINITY, so can drop #ifdef NANS inside #ifndef
	INFINITY.
	* print-rtl.c (print_rtx): Disable code which needs
	floating-point emulator.
	* libgcc2.c: Include float.h and use DBL_MANT_DIG,
	FLT_MANT_DIG, to define DF_SIZE and SF_SIZE, rather than
	depending on HOST_FLOAT_FORMAT to be defined properly.

	* ch/grant.c, cp/error.c: Always use REAL_VALUE_TO_DECIMAL;
	don't test REAL_IS_NOT_DOUBLE.

	* config/1750a/1750a.c (get_double, float_label): Delete.
	(print_operand): Delete huge commented-out chunk.  Use
	REAL_VALUE_TO_DECIMAL.
	* config/1750a/1750a-protos.h: Delete prototypes of deleted
	functions.
	* config/convex/convex.h: Always set TARGET_FLOAT_FORMAT to
	IEEE_FLOAT_FORMAT.
	* config/i370/i370.h (PRINT_OPERAND [TARGET_HLASM version]):
	Use REAL_VALUE_TO_DECIMAL as ELF version does.
	* config/m88k/m88k.c (real_power_of_2_operand,
	legitimize_operand): Take the REAL_VALUE_TYPE and/or union
	real_extract out of the union; run the input through
	REAL_VALUE_TO_TARGET_DOUBLE, then plug the pair of longwords
	from that into the union.
	* config/pdp11/pdp11.c (output_move_double): Rearrange
	parentheses to make automatic indenter happy.

	* doc/tm.texi (Cross-compilation): Rename node to "Floating
	Point" and rewrite to describe current situation.  Also adjust
	documentation of REAL_VALUE_TO_TARGET_SINGLE and friends to
	match code.
	* doc/rtl.texi: Adjust cross reference.

From-SVN: r51210
2002-03-23 01:10:56 +00:00
Neil Booth
43577e6bd7 Makefile.in (fold-const.o, [...]): Update.
* Makefile.in (fold-const.o, stor-layout.o, stmt.o,
	sdbout.o, profile.o): Update.
	* c-common.c (c_common_nodes_and_builtins): Use pushdecl
	langhook.
	* c-common.h (gettags): Move here from tree.h.
	* c-tree.h (pushdecl, pushlevel, poplevel, set_block,
	insert_block, getdecls, kept_level_p, global_bindings_p): New.
	* dbxout.c (dbxout_init): Use getdecls langhook.
	* expr.c (expand_expr): Use insert_block langhook.
	* fold-const.c: Include langhooks.h.
	(fold_range_test, fold_binary_op_with_conditional_arg,
	fold): Use global_bindings_p langhook.
	* integrate.c (expand_inline_function): Use insert_block langhook.
	* langhooks-def.h (LANG_HOOKS_DECLS, LANG_HOOKS_PUSHLEVEL,
	LANG_HOOKS_POPLEVEL, LANG_HOOKS_GLOBAL_BINDINGS_P,
	LANG_HOOKS_INSERT_BLOCK, LANG_HOOKS_SET_BLOCK, LANG_HOOKS_PUSHDECL,
	LANG_HOOKS_GETDECLS): New.
	(LANG_HOOKS_INITIALIZER): Update.
	* langhooks.c (lhd_clear_binding_stack): Use global_bindings_p
	langhook.
	* langhooks.h (struct lang_hooks_for_decls): New.
	(struct lang_hooks): Update.
	* profile.c: Include langhooks.h.
	(output_func_start_profiler): Use new langhooks.
	* sdbout.c: Include langhooks.h.
	(sdbout_init, sdbout_finish): Use getdecls langhook.
	* stmt.c: Include langhooks.h.
	(expand_fixup, fixup_gotos): Use new langhooks.
	* stor-layout.c: Include langhooks.h.
	(variable_size): Use global_bindings_p langhook.
	* toplev.c (compile_file): Use getdecls langhook.
	* tree-inline.c (remap_block): Use insert_block langhook.
	* tree.h (pushdecl, pushlevel, poplevel, set_block, gettags,
	insert_block, getdecls, kept_level_p, global_bindings_p): Remove.
cp:
	* cp-tree.h (pushdecl, pushlevel, poplevel, set_block,
	insert_block, getdecls, global_bindings_p): New.
java:
	* cp-tree.h (pushdecl, pushlevel, poplevel, set_block,
	insert_block, getdecls, kept_level_p, global_bindings_p): New.
f:
	* cp-tree.h (pushdecl, pushlevel, poplevel, set_block,
	insert_block, getdecls, global_bindings_p): New.

From-SVN: r51136
2002-03-21 18:39:29 +00:00
David Edelsohn
0c2fdcdf7f * fold-const.c (fold): Delete #if 0 ARRAY_REF case.
From-SVN: r51061
2002-03-19 21:37:21 -05:00
Richard Sandiford
71925bc04f defaults.h (MODE_HAS_NANS, [...]): New.
* defaults.h (MODE_HAS_NANS, MODE_HAS_INFINITIES): New.
	(MODE_HAS_SIGNED_ZEROS, MODE_HAS_SIGN_DEPENDENT_ROUNDING): New.
	* flags.h (HONOR_NANS, HONOR_INFINITIES, HONOR_SIGNED_ZEROS): New.
	(HONOR_SIGN_DEPENDENT_ROUNDING): New.
	* builtins.c (expand_builtin_mathfn): Use HONOR_NANS.
	* c-common.c (truthvalue_conversion): Reduce x - y != 0 to x != y
	unless x and y could be infinite.
	(expand_unordered_cmp): New, mostly split from expand_tree_builtin.
	Check that the common type of both arguments is a real, even for
	targets without unordered comparisons.  Allow an integer argument
	to be compared against a real.
	(expand_tree_builtin): Use expand_unordered_cmp.
	* combine.c (combine_simplify_rtx): Use the new HONOR_... macros.
	* cse.c (fold_rtx): Likewise.  Fix indentation.
	* fold-const.c (fold_real_zero_addition_p): New.
	(fold): Use it, and the new HONOR_... macros.
	* ifcvt.c (noce_try_minmax): Use the new HONOR_... macros.
	* jump.c (reversed_comparison_code_parts): After searching for
	the true comparison mode, use HONOR_NANS to decide whether it
	can be safely reversed.
	(reverse_condition_maybe_unordered): Remove IEEE check.
	* simplify-rtx.c (simplify_binary_operation): Use the new macros
	to decide which simplifications are valid.  Allow the following
	simplifications for IEEE: (-a + b) to (b - a), (a + -b) to (a - b),
	and (a - -b) to (a + b).
	(simplify_relational_operation): Use HONOR_NANS.
	* doc/tm.texi: Document the MODE_HAS_... macros.

From-SVN: r50401
2002-03-07 11:37:16 +00:00
Zack Weinberg
ba31d94ee6 emit-rtl.c, [...]: Remove all #ifndef REAL_ARITHMETIC blocks...
* emit-rtl.c, final.c, fold-const.c, gengenrtl.c, optabs.c,
	print-tree.c, real.c, real.h, recog.c, rtl.c, simplify-rtx.c,
	tree.c, config/m68k/m68k.c, f/com.c, f/target.h, java/expr.c,
	java/jcf-parse.c, java/lex.c:
	Remove all #ifndef REAL_ARITHMETIC blocks, make all #ifdef
	REAL_ARITHMETIC blocks unconditional.  Delete some further
	#ifdef blocks predicated on REAL_ARITHMETIC.
	* flags.h, toplev.c: Delete remaining references to
	flag_pretend_float.

	* doc/invoke.texi: Remove documentation of -fpretend-float.
	* doc/tm.texi: Describe the various REAL_* macros as provided by
	real.h, not by the target configuration files.

	* config/alpha/alpha.h, config/alpha/unicosmk.h, config/arm/arm.h,
	config/avr/avr.h, config/c4x/c4x.h, config/convex/convex.h,
	config/cris/cris.h, config/d30v/d30v.h, config/dsp16xx/dsp16xx.h,
	config/h8300/h8300.h, config/i370/i370.h, config/i386/i386.h,
	config/i386/osf1elf.h, config/i960/i960.h, config/ia64/ia64.h,
	config/m32r/m32r.h, config/m68hc11/m68hc11.h, config/m68k/dpx2.h,
	config/m68k/linux-aout.h, config/m68k/linux.h, config/m68k/m68k.h,
	config/m68k/sun3.h, config/m68k/vxm68k.h, config/mcore/mcore.h,
	config/mips/mips.h, config/mmix/mmix.h, config/mn10200/mn10200.h,
	config/mn10300/mn10300.h, config/pa/pa.h, config/pj/pj.h,
	config/rs6000/rs6000.h, config/s390/s390.h, config/sh/sh.h,
	config/sparc/freebsd.h, config/sparc/linux.h, config/sparc/linux64.h,
	config/sparc/sol2.h, config/sparc/sparc.h, config/sparc/vxsim.h,
	config/stormy16/stormy16.h, config/v850/v850.h, config/vax/vax.h,
	config/xtensa/xtensa.h:
	Do not define, undefine, or mention in comments any of
	REAL_ARITHMETIC, REAL_VALUE_ATOF, REAL_VALUE_HTOF,
	REAL_VALUE_ISNAN, REAL_VALUE_ISINF,
	REAL_VALUE_TO_TARGET_SINGLE, REAL_VALUE_TO_TARGET_DOUBLE,
	REAL_VALUE_TO_TARGET_LONG_DOUBLE, REAL_VALUE_TO_DECIMAL,
	REAL_VALUE_TYPE, REAL_VALUES_EQUAL, REAL_VALUES_LESS,
	REAL_VALUE_LDEXP, REAL_VALUE_FIX, REAL_VALUE_UNSIGNED_FIX,
	REAL_VALUE_RNDZINT, REAL_VALUE_UNSIGNED_RNDZINT,
	REAL_INFINITY, REAL_VALUE_NEGATE, REAL_VALUE_TRUNCATE,
	REAL_VALUE_TO_INT, or REAL_VALUE_FROM_INT.

From-SVN: r50263
2002-03-03 21:10:09 +00:00
Richard Sandiford
54fec3d54a * fold-const.c (fold): Fix typo in comments.
From-SVN: r49960
2002-02-22 11:50:47 +00:00
Aldy Hernandez
69ef87e2bc i386.md ("mmx_uavgv8qi3"): Use const_vector.
2002-02-19  Aldy Hernandez  <aldyh@redhat.com>

	* config/i386/i386.md ("mmx_uavgv8qi3"): Use const_vector.
	("mmx_uavgv4hi3"): Same.
	("pmulhrwv4hi3"): Same.

	* tree-inline.c (walk_tree): Handle vectors.

	* c-common.c (constant_expression_warning): Handle vectors.
	(overflow_warning): Same.

	* sched-deps.c (sched_analyze_2): Handle vectors.

	* rtlanal.c (rtx_unstable_p): Handle vectors.
	(rtx_varies_p): Same.
	(count_occurrences): Same.
	(regs_set_between_p): Same.
	(modified_between_p): Same.
	(modified_in_p): Same.
	(volatile_insn_p): Same.
	(volatile_refs_p): Same.
	(side_effects_p): Same.
	(may_trap_p): Same.
	(inequality_comparisons_p): Same.
	(replace_regs): Same.
	(computed_jump_p_1): Same.

	* rtl.c (DEF_MACHMODE): Change all definitions to accept 8th
	argument.
	(inner_mode_array): New.
	(copy_rtx): Handle vectors.
	(copy_most_rtx): Same.
	(rtx_equal_p): Same.
	(get_mode_alignment): Adjust for vectors.

	* resource.c (mark_referenced_resources): Handle vectors.
	(mark_set_resources): Same.

	* reload1.c (eliminate_regs): Handle vectors.
	(elimination_effects): Same.
	(scan_paradoxical_subregs): Same.

	* reload.c (subst_reg_equivs): Handle vectors.

	* regrename.c (scan_rtx): Handle vectors.

	* regclass.c (reg_scan_mark_refs): Handle vectors.

	* recog.c (find_single_use_1): Handle vectors.

	* local-alloc.c (equiv_init_varies_p): Handle vectors.
	(contains_replace_regs): Same.
	(memref_referenced_p): Same.

	* integrate.c (copy_rtx_and_substitute): Handle vectors.
	(subst_constants): Same.

	* genattrtab.c (attr_copy_rtx): Handle vectors.
	(encode_units_mask): Same.
	(clear_struct_flag): Same.
	(count_sub_rtxs): Same.

	* gcse.c (want_to_gcse_p): Handle vectors.
	(oprs_unchanged_p): Same.
	(hash_expr_1): Same.
	(oprs_not_set_p): Same.
	(expr_killed_p): Same.
	(compute_transp): Same.
	(store_ops_ok): Same.

	* function.c (purge_addressof_1): Do not allow paradoxical subregs
	of vectors.
	(fixup_var_refs_1): Same.
	(instantiate_virtual_regs_1): Same.

	* fold-const.c (operand_equal_p): Handle vectors.
	(fold): Same.
	(rtl_expr_nonnegative_p): Same.

	* flow.c (mark_used_regs): Handle vectors.

	* df.c (df_uses_record): Handle vectors.

	* cselib.c (cselib_subst_to_values): Handle vectors.
	(cselib_mem_conflict_p): Same.
	(hash_rtx): Same.

	* cse.c (canon_reg): Handle vectors.
	(fold_rt): Same.
	(cse_process_notes): Same.
	(count_reg_usage): Same.
	(canon_hash): Same.

	* alias.c (nonlocal_mentioned_p): Add case for CONST_VECTOR.

	* combine.c (mark_used_regs_combine): Add case for CONST_VECTOR.

	* emit-rtl.c (init_emit_once): Generate const0_rtx for vectors.
	(gen_rtx): Handle CONST_VECTOR.
	(gen_const_vector_0): New.
	(copy_rtx_if_shared): CONST_VECTORs can be shared.
	(reset_used_flags): Same.
	(copy_insn_1): Same.
	(initializer_constant_valid_p): Handle VECTOR_CST.

	* doc/c-tree.texi (Expression trees): Document VECTOR_CST.

	* doc/rtl.texi (Constants): Document const_vector.
	(CONST0_RTX): Update for vectors.
	(RTL sharing): Same.

	* print-tree.c (print_node): Add case for VECTOR_CST.

	* tree.h (TREE_VECTOR_CST_ELTS): New.
	(struct tree_vector): New.
	(union tree_node): Add vector node.
	(build_vector): Add prototype.

	* tree.def (VECTOR_CST): New.

	* tree.c (build_vector): New.

	* expmed.c (make_tree): Handle CONST_VECTOR.

	* rtl.h (CONSTANT_P): CONST_VECTORs are constants too.
	(CONST_VECTOR_ELT): New.
	(CONST_VECTOR_NUNITS): New.

	* machmode.h (GET_MODE_INNER): New.
	(DEF_MACHMODE): Accept 8th arg.

	* machmode.def: Add 8th argument for vector inner mode.
	Add inner vector modes for vectors.

	* rtl.def (VEC_CONST): Remove.
	(CONST_VECTOR): New.

	* expr.c (clear_storage): Allow vectors.
	(is_zeros_p): Handle VECTOR_CST.

	* varasm.c (output_constant_pool): Handle vectors.
	(rtx_const): Add veclo and vechi fields.
	(kind): Add RTX_VECTOR.
	(decode_rtx_const): Add case for vector.

	* config/rs6000/rs6000-protos.h: Add zero_constant.

	* config/rs6000/rs6000.c (rs6000_emit_move): Handle vector
	constants.  Force easy vector constants into memory.
	(easy_vector_constant): New.
	(emit_easy_vector_constant): New.
	(rs6000_legitimize_reload_address): Do not generate bad reloads on
	darwin.

	* config/rs6000/rs6000.md ("altivec_lvx"): Reflect what
	instruction does.
	("altivec_lvxl"): Same.
	(altivec_lvebx): Same.
	(altivec_lvehx): Same.
	(altivec_lvewx): Same.
	("*movv4si_const0"): New.
	("*movv4sf_const0"): New.
	("*movv8hi_const0"): New.
	("*movv16qi_const0"): New.

From-SVN: r49853
2002-02-19 02:53:41 +00:00
Richard Henderson
f3077311c4 fold-const.c (fold): Change UINT_MAX test to check vs precision rather than TYPE_MAX_VALUE.
* fold-const.c (fold): Change UINT_MAX test to check vs precision
        rather than TYPE_MAX_VALUE.  Fix indentation and a bogus negation.

From-SVN: r49174
2002-01-23 23:36:18 -08:00
Roger Sayle
d8086cbb53 re PR rtl-optimization/3640 (small lost optimization of "x==0 || x==1")
PR opt/3640
        * fold-const.c (fold): Optimize unsigned comparisons against
        UINT_MAX (and similar unsigned constants).

From-SVN: r49096
2002-01-22 13:35:34 -08:00
Zack Weinberg
a094954eba c-typeck.c (error_init, [...]): Call gettext on argument before printing.
* c-typeck.c (error_init, pedwarn_init, warning_init): Call
	gettext on argument before printing.

	* fold-const.c (negate_expr): Always call fold on new
	NEGATE_EXPR.

From-SVN: r48087
2001-12-17 04:19:08 +00:00
Kaveh R. Ghazi
faf318664d c-lex.c (lex_number): Use ISXDIGIT/hex_value.
* c-lex.c (lex_number): Use ISXDIGIT/hex_value.
	* vax/xm-vms.h (FILE_NAME_NONDIRECTORY): Use ISUPPER/TOLOWER.
	* fold-const.c (real_hex_to_f): Use hex_value.
	* real.c (asctoeg): Use hex_value & ISXDIGIT.
	* toplev.c (toplev_main): Call hex_init.
	* tradcpp.c (main): Call hex_init.

From-SVN: r48068
2001-12-16 13:58:07 +00:00
Joseph Myers
b0287a9034 c-typeck.c, [...]: Use "built-in" and "bit-field" spellings in messages.
* c-typeck.c, config/i386/i386.h, config/mcore/mcore.h,
	config/ns32k/ns32k.h, config/rs6000/sysv4.h, fold-const.c,
	toplev.c, cppinit.c, cppmacro.c, gcc.c: Use "built-in" and
	"bit-field" spellings in messages.
	* po/gcc.pot: Regenerate.

ch:
	* expr.c: Use "built-in" spelling in messages.

From-SVN: r48048
2001-12-15 20:31:07 +00:00
Joseph Myers
d6a7951f20 ChangeLog.2, [...]: Fix spelling errors.
* ChangeLog.2, ChangeLog.3, ChangeLog.5, ChangeLog, alias.c,
	cfgbuild.c, expmed.c, expr.c, final.c, flow.c, fold-const.c,
	function.c, config/alpha/alpha.md, config/alpha/vms-ld.c,
	config/arm/arm.c, config/arm/arm.h, config/c4x/libgcc.S,
	config/i370/i370.c, config/i386/i386.c,
	config/i386/i386-interix.h, config/i386/i386.md,
	config/i386/i386.h, config/i386/netbsd-elf.h, config/ia64/ia64.c,
	config/m32r/m32r-protos.h, config/mcore/mcore.h,
	config/rs6000/rs6000.h, config/sparc/linux64.h,
	config/sparc/sparc.c, config/v850/v850-protos.h,
	config/cris/cris.h, config/s390/s390.md, config/elfos.h: Fix
	spelling errors.

From-SVN: r47815
2001-12-09 20:13:19 +00:00
Richard Kenner
ed239f5a43 tree.def (VIEW_CONVERT_EXPR): New tree code.
* tree.def (VIEW_CONVERT_EXPR): New tree code.
	* tree.h (handled_component_p): New declaration.
	* alias.c (handled_component_p): Move function from here ...
	* expr.c (handled_component_p): ... to here and non longer static.
	(is_zeros_p, case VIEW_CONVERT_EXPR): New case.
	(store_field): Remove unneeded MEM_COPY_ATTRIBUTES call.
	(get_inner_reference): Handle VIEW_CONVERT_EXPR.
	(expand_expr, case VAR_DECL): Clean up handling of re-layout case.
	(expand_expr, case VIEW_CONVERT_EXPR): New case.
	(expand_expr, cse ADDR_EXPR): No need to copy if already
	BIGGEST_ALIGNMENT.
	* fold-const.c (fold, case VIEW_CONVERT_EXPR): New case.
	* varasm.c (initializer_constant_value_p, case VIEW_CONVERT_EXPR): New.
	(output_constant): Handle VIEW_CONVERT_EXPR.
	* dwarf2out.c (loc-descriptor_from_tree, add_bound_info):
	Add new case for VIEW_CONVERT_EXPR.

From-SVN: r47179
2001-11-19 15:38:07 -05:00
Richard Kenner
a06ef755a3 alias.c (nonoverlapping_memrefs): Use REGNO_PTR_FRAME_P.
* alias.c (nonoverlapping_memrefs): Use REGNO_PTR_FRAME_P.
	* emit-rtl.c (change_address): Fix typo in default alignment.
	(adjust_address_1): Use mode of NEW, not MODE, when setting size.
	* expr.c (highest_pow2_factor, case WITH_RECORD_EXPR): New case.
	* rtl.h (REGNO_PTR_FRAME_P): New macro.

	* expr.c (store_field): Pass tree instead of max size; callers changed.
	Change handling of alignment.
	Only copy to_rtx if is TARGET.
	(expand_expr_unaligned): Delete; callers now use expand_expr.
	(emit_cmp_insn): No longer take ALIGN parm; all callers changed.
	(expand_assignment): Change handling of alignment.
	Only copy to_rtx if was original.
	(get_inner_reference): No longer return alginment; callers changed.
	(expand_expr, case COMPONENT_REF): Change handling of alignment.
	(expand_expr, case ADDR_EXPR): Make copy if not sufficiently aligned.
	(compare_from_rtx): Delete ALIGN parm; all callers changed.
	(do_compare_rtx_and_jump): Likewise.
	* expr.h: Reflect above changes.
	* tree.h: Likewise.
	* dwarf2out.c (loc_descriptor_from_tree): Remove ALIGN parameter
	to get_inner_reference.
	* except.c: Remove ALIGN parameter in call to emit_cmp_and_jump_insns.
	* explow.c: Likewise.
	* loop.c: Likewise.
	* optabs.c: Likewise.
	(prepare_cmp_insn): Now static; remove ALIGN parm.  Callers changed.
	(emit_cmp_and_jump_insns): Remove ALIGN parm; all callers changed.
	* fold-const.c: Remove PALIGN in calls to get_inner_reference.
	* function.c (assign_stack_temp_for_type): No longer static.
	* optabs.h (emit_cmp_insn): Remove ALIGN parm.
	(prepare_cmp_insn): Delete declaration.
	* rtl.h (assign_stack_temp_for_type): Add declaration.
	* config/d30v/d30v.c: Reflect above changes.
	* config/i860/i860.c, config/ia64/ia64.c: Likewise.
	* config/rs6000/rs6000.c, config/sh/sh.c: Likewise.
	* ada/trans.c, ada/utils2.c: Remove PALIGN parameter to
	get_inner_reference.

From-SVN: r47075
2001-11-15 18:44:58 -05:00
Roger Sayle
d59b3b679c * fold-const.c (fold): Optimize strlen comparisons against zero.
From-SVN: r47029
2001-11-14 15:36:24 -08:00
John Wehle
11b161d069 fold-const.c (lshift_double): Honor PREC.
* fold-const.c (lshift_double): Honor PREC.
	(rshift_double): Likewise.

From-SVN: r46872
2001-11-09 05:27:51 +00:00
Joseph Myers
f5143c46a9 ChangeLog.2, [...]: Fix spelling errors.
* ChangeLog.2, ChangeLog.4, ChangeLog.5, ChangeLog,
	FSFChangeLog.10, FSFChangeLog.11, alias.c, attribs.c,
	caller-save.c, calls.c, cfg.c, cfganal.c, cfgcleanup.c, cfgrtl.c,
	cppmacro.c, fold-const.c, ifcvt.c, local-alloc.c, profile.c,
	sched-int.h, toplev.c, config/alpha/alpha.c,
	config/alpha/alpha.md, config/c4x/c4x.h, config/cris/cris.h,
	config/cris/cris.md, config/i370/i370.md, config/i386/i386.c,
	config/i386/i386.h, config/i386/i386.md, config/i386/xm-djgpp.h,
	config/ia64/ia64.c, config/m68hc11/m68hc11.c, config/m68k/m68k.md,
	config/mcore/mcore.h, config/mmix/mmix.c, config/ns32k/ns32k.h,
	config/ns32k/ns32k.md, config/rs6000/rs6000.c,
	config/rs6000/sysv4.h, config/sh/sh.md: Fix spelling errors.

From-SVN: r46760
2001-11-04 02:51:28 +00:00
Kaveh R. Ghazi
0df6c2c74e c-format.c (maybe_read_dollar_number): Use safe-ctype macros and/or fold extra calls into fewer ones.
* c-format.c (maybe_read_dollar_number): Use safe-ctype macros
	and/or fold extra calls into fewer ones.
	* collect2.c (dump_file): Likewise.
	* cppexp.c (parse_number): Likewise.
	* cpplex.c (_cpp_lex_direct): Likewise.
	* final.c (output_asm_insn, asm_fprintf): Likewise.
	* fix-header.c (inf_scan_ident, main): Likewise.
	* fixinc/fixfixes.c (char_macro_use_fix, char_macro_def_fix):
	Likewise.
	* fold-const.c (real_hex_to_f): Likewise.
	* gen-protos.c (parse_fn_proto): Likewise.
	* genattrtab.c (check_attr_test, check_attr_value): Likewise.
	* genrecog.c (change_state, write_action): Likewise.
	* gensupport.c (shift_output_template): Likewise.
	* local-alloc.c (requires_inout): Likewise.
	* mips-tfile.c (IS_ASM_IDENT): Likewise.
	* protoize.c (is_id_char, main): Likewise.
	* real.c (asctoeg): Likewise.
	* recog.c (asm_operand_ok): Likewise.
	* reload.c (find_reloads): Likewise.
	* scan.c (scan_identget_token): Likewise.
	* sched-vis.c (print_value): Likewise.
	* stringpool.c (ggc_alloc_string): Likewise.
	* toplev.c (read_integral_parameter, decode_g_option): Likewise.
	* tradcif.y (parse_number, yylex, parse_escape): Likewise.
	* tradcpp.c (rescan): Likewise.
	* tree.c (clean_symbol_name): Likewise.
	* varasm.c (decode_reg_name): Likewise.

	* alpha.h (ASM_OUTPUT_ASCII): Likewise.
	* darwin.c (name_needs_quotes, func_name_maybe_scoped): Likewise.
	* dsp16xx.h (ASM_OUTPUT_ASCII): Likewise.
	* m88k.c (output_ascii): Likewise.
	* m88k.h (OVERRIDE_OPTIONS): Likewise.
	* mcore.h (REG_CLASS_FROM_LETTER): Likewise.
	* ns32k/encore.h (ASM_OUTPUT_ASCII): Likewise.
	* sh.h (REG_CLASS_FROM_LETTER): Likewise.

cp:
	* xref.c (GNU_xref_member): Use safe-ctype macros and/or fold
	extra calls into fewer ones.

f:
	* bad.c (ffebad_finish): Use safe-ctype macros and/or fold extra
	calls into fewer ones.
	* implic.c (ffeimplic_lookup_): Likewise.
	* intdoc.c (dumpimp): Likewise.
	* intrin.c (ffeintrin_init_0): Likewise.
	* lex.c (ffelex_backslash_, ffelex_cfebackslash_, ffelex_hash_):
	Likewise.
	* lex.h (ffelex_is_firstnamechar): Likewise.
	* target.c (ffetarget_integerhex): Likewise.

java:
	* gjavah.c (jni_print_char, decode_signature_piece): Use
	safe-ctype macros and/or fold extra calls into fewer ones.
	* lex.c (java_read_unicode, java_lex): Likewise.
	* lex.h (JAVA_START_CHAR_P, JAVA_PART_CHAR_P, JAVA_ASCII_DIGIT,
	JAVA_ASCII_HEXDIGIT, JAVA_ASCII_LETTER): Likewise.
	* mangle_name.c (append_unicode_mangled_name,
	unicode_mangling_length): Likewise.

From-SVN: r46397
2001-10-21 21:32:15 +00:00
Stan Shebs
b36948478c alias.c: Remove uses of "register" specifier in declarations of arguments and local...
2001-10-10  Stan Shebs  <shebs@apple.com>

        * alias.c: Remove uses of "register" specifier in declarations
        of arguments and local variables.
        * c-common.c: Ditto.
        * c-convert.c: Ditto.
        * c-decl.c: Ditto.
        * c-format.c: Ditto.
        * c-semantics.c: Ditto.
        * c-typeck.c: Ditto.
        * caller-save.c: Ditto.
        * calls.c: Ditto.
        * cfg.c: Ditto.
        * cfgbuild.c: Ditto.
        * cfgrtl.c: Ditto.
        * collect2.c: Ditto.
        * combine.c: Ditto.
        * convert.c: Ditto.
        * cppexp.c: Ditto.
        * cppfiles.c: Ditto.
        * cse.c: Ditto.
        * dbxout.c: Ditto.
        * defaults.h: Ditto.
        * df.c: Ditto.
        * dwarf2out.c: Ditto.
        * dwarfout.c: Ditto.
        * emit-rtl.c: Ditto.
        * explow.c: Ditto.
        * expmed.c: Ditto.
        * expr.c: Ditto.
        * final.c: Ditto.
        * fix-header.c: Ditto.
        * floatlib.c: Ditto.
        * flow.c: Ditto.
        * fold-const.c: Ditto.
        * function.c: Ditto.
        * gcc.c: Ditto.
        * gcse.c: Ditto.
        * gen-protos.c: Ditto.
        * genattrtab.c: Ditto.
        * gencheck.c: Ditto.
        * genconfig.c: Ditto.
        * genemit.c: Ditto.
        * genextract.c: Ditto.
        * genflags.c: Ditto.
        * gengenrtl.c: Ditto.
        * genoutput.c: Ditto.
        * genpeep.c: Ditto.
        * genrecog.c: Ditto.
        * gensupport.c: Ditto.
        * global.c: Ditto.
        * gmon.c: Ditto.
        * graph.c: Ditto.
        * haifa-sched.c: Ditto.
        * hard-reg-set.h: Ditto.
        * hash.c: Ditto.
        * integrate.c: Ditto.
        * jump.c: Ditto.
        * lists.c: Ditto.
        * local-alloc.c: Ditto.
        * loop.c: Ditto.
        * mips-tdump.c: Ditto.
        * mips-tfile.c: Ditto.
        * optabs.c: Ditto.
        * prefix.c: Ditto.
        * print-rtl.c: Ditto.
        * read-rtl.c: Ditto.
        * real.c: Ditto.
        * recog.c: Ditto.
        * reg-stack.c: Ditto.
        * regclass.c: Ditto.
        * regmove.c: Ditto.
        * reload.c: Ditto.
        * reload1.c: Ditto.
        * reorg.c: Ditto.
        * resource.c: Ditto.
        * rtl.c: Ditto.
        * rtlanal.c: Ditto.
        * scan.c: Ditto.
        * sched-deps.c: Ditto.
        * sched-rgn.c: Ditto.
        * sdbout.c: Ditto.
        * simplify-rtx.c: Ditto.
        * stmt.c: Ditto.
        * stor-layout.c: Ditto.
        * toplev.c: Ditto.
        * tradcif.y: Ditto.
        * tradcpp.c: Ditto.
        * tree.c: Ditto.
        * unroll.c: Ditto.
        * varasm.c: Ditto.
        * xcoffout.c: Ditto.

From-SVN: r46173
2001-10-11 03:16:15 +00:00
Kazu Hirata
6d2f888735 calls.c: Fix formatting.
* calls.c: Fix formatting.
	* c-decl.c: Likewise.
	* cfgcleanup.c: Likewise.
	* combine.c: Likewise.
	* cppfiles.c: Likewise.
	* cpplib.c: Likewise.
	* cppmacro.c: Likewise.
	* crtstuff.c: Likewise.
	* cse.c: Likewise.
	* dwarf2out.c: Likewise.
	* expmed.c: Likewise.
	* expr.c: Likewise.
	* fold-const.c: Likewise.
	* function.c: Likewise.
	* gcse.c: Likewise.
	* genattrtab.c: Likewise.
	* ggc-page.c: Likewise.
	* integrate.c: Likewise.
	* libgcc2.c: Likewise.
	* loop.c: Likewise.
	* optabs.c: Likewise.
	* profile.c: Likewise.
	* protoize.c: Likewise.
	* real.c: Likewise.
	* recog.c: Likewise.
	* reload1.c: Likewise.
	* reload.c: Likewise.
	* reorg.c: Likewise.
	* resource.c: Likewise.
	* sched-rgn.c: Likewise.
	* sdbout.c: Likewise.
	* stmt.c: Likewise.
	* toplev.c: Likewise.
	* varasm.c: Likewise.

From-SVN: r46145
2001-10-10 11:33:39 +00:00
Kazu Hirata
4fe9b91c45 c-common.c: Fix comment typos.
* c-common.c: Fix comment typos.
	* cfgrtl.c: Likewise.
	* collect2.c: Likewise.
	* cpplex.c: Likewise.
	* doloop.c: Likewise.
	* dwarf2out.c: Likewise.
	* dwarfout.c: Likewise.
	* expr.c: Likewise.
	* fold-const.c: Likewise.
	* gcc.c: Likewise.
	* gcov.c: Likewise.
	* gcse.c: Likewise.
	* global.c: Likewise.
	* ifcvt.c: Likewise.
	* loop.c: Likewise.
	* optabs.c: Likewise.
	* protoize.c: Likewise.
	* regclass.c: Likewise.
	* reorg.c: Likewise.
	* rtl.h: Likewise.
	* stmt.c: Likewise.
	* tree.h: Likewise.
	* doc/cpp.texi: Likewise.
	* doc/c-tree.texi: Likewise.
	* doc/extend.texi: Likewise.
	* doc/invoke.texi: Likewise.
	* doc/objc.texi: Likewise.
	* doc/tm.texi: Likewise.

From-SVN: r46114
2001-10-09 06:03:16 +00:00
Richard Kenner
0629440fd8 fold-const.c (extract_muldiv, [...]): Only adjust code for division, not modulus.
* fold-const.c (extract_muldiv, case PLUS_EXPR): Only adjust
	code for division, not modulus.

From-SVN: r45763
2001-09-23 18:50:40 -04:00
Richard Kenner
4c160717ca fold-const.c (hashtab.h): Include.
* fold-const.c (hashtab.h): Include.
	(int_const_binop): Remove FORSIZE arg and compute from type; all
	callers changed.
	Call size_int_type_wide for all single-word constants.
	(size_htab_hash, size_htab_eq): New functions.
	(size_int_type_wide): Rework to use hash table.
	* ggc-common.c (hashtab.h): Include.
	(struct d_htab_root): New struct.
	(d_htab_roots): New variable.
	(ggc_add_deletable_htab, ggc_htab_delete): New functions
	(ggc_mark_roots): Handle deletable htabs.
	* ggc-page.c (ggc_marked_p): New function.
	* ggc-simple.c (ggc_marked_p): Likewise.
	* ggc.h: Reformatting throughout.
	(ggc_marked_p, ggc_add_deletable_htab): New declarations.
	* tree.c (init_obstacks): Make type_hash_table a deletable root.
	(type_hash_add): Allocate struct type_hash from GC memory.
	(mark_hash_entry, mark_type_hash): Deleted.
	(type_hash_marked_p, type_hash_mark): New functions.
	* Makefile.in (ggc-common.o, fold-const.o): Include hashtab.h.

From-SVN: r45710
2001-09-20 11:12:54 -04:00
Richard Henderson
4a063bec6e c-common.c (signed_or_unsigned_type): Handle machine mode types which have no corresponding C type.
* c-common.c (signed_or_unsigned_type): Handle machine mode types
        which have no corresponding C type.
        * fold_const.c (target_isinf,target_isnan,target_negative): Update
        the representation of 64-bit doubles to work with 64-bit ints.

From-SVN: r45479
2001-09-07 15:14:43 -07:00
Kaveh R. Ghazi
ada1133554 fold-const.c (tree_expr_nonnegative_p): Handle *_DIV_EXPR, *_MOD_EXPR, SAVE_EXPR and NON_LVALUE_EXPR.
* fold-const.c (tree_expr_nonnegative_p): Handle *_DIV_EXPR,
	*_MOD_EXPR, SAVE_EXPR and NON_LVALUE_EXPR.

testsuite:
	* gcc.dg/compare5.c: New testcase.

From-SVN: r45148
2001-08-24 12:18:45 +00:00
Lars Brinkhoff
1322177dbd Makefile.in, [...]: replace "GNU CC" with "GCC".
* Makefile.in, alias.c, basic-block.h, bb-reorder.c, bitmap.c,
	bitmap.h, builtin-types.def, builtins.c, builtins.def,
	c-aux-info.c, c-common.c, c-common.def, c-common.h,
	c-convert.c, c-decl.c, c-dump.c, c-dump.h, c-errors.c,
	c-format.c, c-lang.c, c-lex.c, c-lex.h, c-parse.in,
	c-pragma.c, c-pragma.h, c-semantics.c, c-tree.h, c-typeck.c,
	caller-save.c, calls.c, collect2.c, collect2.h, combine.c,
	conditions.h, config.gcc, configure.frag, configure.in,
	conflict.c, convert.c, convert.h, cppspec.c, crtstuff.c,
	cse.c, cselib.c, cselib.h, dbxout.c, dbxout.h, defaults.h,
	dependence.c, df.c, df.h, diagnostic.c, diagnostic.h,
	doloop.c, dominance.c, dwarf.h, dwarf2.h, dwarf2asm.c,
	dwarf2asm.h, dwarf2out.c, dwarf2out.h, dwarfout.c,
	emit-rtl.c, errors.c, errors.h, except.c, except.h,
	exgettext, explow.c, expmed.c, expr.c, expr.h, final.c,
	fixproto, flags.h, flow.c, fold-const.c, fp-test.c,
	function.c, function.h, gbl-ctors.h, gcc.c, gcc.h, gcc.hlp,
	gccspec.c, gcov-io.h, gcse.c, genattr.c, genattrtab.c,
	gencheck.c, gencodes.c, genconfig.c, genemit.c,
	genextract.c, genflags.c, gengenrtl.c, genmultilib,
	genopinit.c, genoutput.c, genpeep.c, genrecog.c,
	gensupport.c, gensupport.h, ggc-callbacks.c, ggc-common.c,
	ggc-none.c, ggc-page.c, ggc-simple.c, ggc.h, global.c,
	graph.c, graph.h, gthr-aix.h, gthr-dce.h, gthr-posix.h,
	gthr-rtems.h, gthr-single.h, gthr-solaris.h, gthr-vxworks.h,
	gthr-win32.h, gthr.h, haifa-sched.c, halfpic.c, halfpic.h,
	hard-reg-set.h, hwint.h, ifcvt.c, input.h, insn-addr.h,
	integrate.c, integrate.h, jump.c, lcm.c, libgcc2.c,
	libgcc2.h, lists.c, local-alloc.c, loop.c, loop.h,
	machmode.def, machmode.h, main.c, mbchar.c, mbchar.h,
	mips-tdump.c, mips-tfile.c, mklibgcc.in, mkmap-flat.awk,
	mkmap-symver.awk, optabs.c, output.h, params.c, params.def,
	params.h, predict.c, predict.def, predict.h, prefix.c,
	prefix.h, print-rtl.c, print-tree.c, profile.c, protoize.c,
	read-rtl.c, real.c, real.h, recog.c, recog.h, reg-stack.c,
	regclass.c, regmove.c, regrename.c, regs.h, reload.c,
	reload.h, reload1.c, reorg.c, resource.c, resource.h, rtl.c,
	rtl.def, rtl.h, rtlanal.c, sbitmap.c, sbitmap.h,
	sched-deps.c, sched-ebb.c, sched-int.h, sched-rgn.c,
	sched-vis.c, sdbout.c, sdbout.h, sibcall.c, simplify-rtx.c,
	ssa-ccp.c, ssa-dce.c, ssa.c, ssa.h, stmt.c, stor-layout.c,
	stringpool.c, system.h, timevar.c, timevar.def, timevar.h,
	tlink.c, toplev.c, toplev.h, tree.c, tree.def, tree.h,
	tsystem.h, unroll.c, unwind-dw2-fde.c, unwind-dw2-fde.h,
	unwind-dw2.c, unwind-pe.h, unwind-sjlj.c, unwind.h,
	unwind.inc, varasm.c, varray.c, varray.h, xcoffout.c,
	xcoffout.h: replace "GNU CC" with "GCC".

From-SVN: r45105
2001-08-22 14:35:51 +00:00
Zack Weinberg
94aca34298 toplev.c (set_float_handler): Make static.
* toplev.c (set_float_handler): Make static.
	* toplev.h: Don't prototype set_float_handler.

	* simplify-rtx.c: Don't include setjmp.h.
	(simplify_unary_real, simplify_binary_real, simplify_binary_is2orm1):
	New functions.
	(simplify_unary_operation, simplify_binary_operation): Use them,
	via do_float_handler.

	* fold-const.c: Don't include setjmp.h.
	(exact_real_inverse_1): New function.
	(exact_real_inverse): Use it, via do_float_handler.

	* varasm.c: Don't include setjmp.h.
	(assemble_real_1): New function.
	(assemble_real): Use it, via do_float_handler.
	Call internal_error if we get a trap here.

	* c-parse.in, cse.c, cselib.c, ch/lex.c, config/i386/i386.c,
	config/pj/pj.c, config/s390/s390.c: Don't include setjmp.h.

	* java/lex.h: Don't include setjmp.h.  Don't define
	SET_FLOAT_HANDLER or prototype set_float_handler.

From-SVN: r44815
2001-08-12 01:56:10 +00:00
Kazu Hirata
30f7a3786c dbxout.c: Fix comment formatting.
* dbxout.c: Fix comment formatting.
	* dependence.c: Likewise.
	* df.c: Likewise.
	* diagnostic.c: Likewise.
	* dominance.c: Likewise.
	* doprint.c: Likewise.
	* dwarf2out.c: Likewise.
	* dwarfout.c: Likewise.
	* emit-rtl.c: Likewise.
	* except.c: Likewise.
	* explow.c: Likewise.
	* expmed.c: Likewise.
	* expr.c: Likewise.
	* flow.c: Likewise.
	* fold-const.c: Likewise.
	* function.c: Likewise.

From-SVN: r44729
2001-08-08 22:06:48 +00:00
Richard Henderson
1f2f8b29b1 fold-const.c (fold): Test vs FLOAT_TYPE_P instead of INTEGRAL_TYPE_P when...
* fold-const.c (fold): Test vs FLOAT_TYPE_P instead of
        INTEGRAL_TYPE_P when folding comparisons with operand_equal_p
        arguments.

From-SVN: r44255
2001-07-22 23:00:06 -07:00
Jan Hubicka
bc8d3f9122 integrate.c (copy_insn_list): handle NOTE_INSN_DELETED_LABEL, as if it were CODE_LABEL.
* integrate.c (copy_insn_list): handle
	NOTE_INSN_DELETED_LABEL, as if it were CODE_LABEL.
	(copy_rtx_and_substitute): Likewise; behave to NOTE_INSN_DELETED_LABEL
	identically as to CODE_LABEL.

	* fold-const (fold): Convert A/B/C to A/(B*C) and
	A/(B/C) to (A/B)*C

	* except.c (connect_post_landing_pads): Delete the RESX insns.

From-SVN: r44193
2001-07-20 11:30:13 +00:00
Neil Booth
08c148a85c Makefile.in (final.o): Depend on target.h.
* Makefile.in (final.o): Depend on target.h.
	* final.c: Include target.h.
	(default_function_pro_epilogue): New.
	(final_start_function): Use target structure for function prologues.
	(final_end_function): Use target structure for function epilogues.
	* fold-const.c (real_hex_to_f): Constify s and p.
	* output.h (default_function_pro_epilogue): New.
	* real.h (real_hex_to_f): Update prototype.
	* target-def.h (TARGET_ASM_FUNCTION_PROLOGUE,
	TARGET_ASM_FUNCTION_EPILOGUE, TARGET_ASM_OUT): New.
	(TARGET_INITIALIZER): Update.
	* target.h (gcc_target): Add struct asm_out.
	* doc/tm.texi: Update.

config:
	Update each arch to use TARGET_ASM_FUNCTION_PROLOGUE and
	TARGET_ASM_FUNCTION_EPILOGUE.  Move macro code to functions
	in cpu/cpu.c, or rename old functions consistently.  Take
	a HOST_WIDE INT not an int as the SIZE parameter.  Remove now
	redundant macros and prototypes.  Make new functions static.

	* 1750a/1750a.c: Similarly.
	* 1750a/1750a.h: Similarly.
	* a29k/a29k-protos.h: Similarly.
	* a29k/a29k.c: Similarly.
	* a29k/a29k.h: Similarly.
	* arc/arc-protos.h: Similarly.
	* arc/arc.c: Similarly.
	* arc/arc.h: Similarly.
	* arm/arm-protos.h: Similarly.
	* arm/arm.c: Similarly.
	* arm/arm.h: Similarly.
	* avr/avr-protos.h: Similarly.
	* avr/avr.c: Similarly.
	* avr/avr.h: Similarly.
	* clipper/clipper-protos.h: Similarly.
	* clipper/clipper.c: Similarly.
	* clipper/clipper.h: Similarly.
	* convex/convex.c: Similarly.
	* convex/convex.h: Similarly.
	* d30v/d30v-protos.h: Similarly.
	* d30v/d30v.c: Similarly.
	* d30v/d30v.h: Similarly.
	* d30v/d30v.md: Similarly.
	* dsp16xx/dsp16xx-protos.h: Similarly.
	* dsp16xx/dsp16xx.c: Similarly.
	* dsp16xx/dsp16xx.h: Similarly.
	* elxsi/elxsi.c: Similarly.
	* elxsi/elxsi.h: Similarly.
	* fr30/fr30.c: Similarly.
	* fr30/fr30.md: Similarly.
	* h8300/h8300-protos.h: Similarly.
	* h8300/h8300.c: Similarly.
	* h8300/h8300.h: Similarly.
	* i370/i370-protos.h: Similarly.
	* i370/i370.c: Similarly.
	* i370/i370.h: Similarly.
	* i386/i386.c: Similarly.
	* i386/osf1elf.h: Similarly.
	* i386/osfrose.h: Similarly.
	* i860/i860-protos.h: Similarly.
	* i860/i860.c: Similarly.
	* i860/i860.h: Similarly.
	* i960/i960-protos.h: Similarly.
	* i960/i960.c: Similarly.
	* i960/i960.h: Similarly.
	* ia64/ia64-protos.h: Similarly.
	* ia64/ia64.c: Similarly.
	* ia64/ia64.h: Similarly.
	* m32r/m32r-protos.h: Similarly.
	* m32r/m32r.c: Similarly.
	* m32r/m32r.h: Similarly.
	* m68hc11/m68hc11-protos.h: Similarly.
	* m68hc11/m68hc11.c: Similarly.
	* m68hc11/m68hc11.h: Similarly.
	* m68k/crds.h: Similarly.
	* m68k/dpx2.h: Similarly.
	* m68k/m68k-protos.h: Similarly.
	* m68k/m68k.c: Similarly.
	* m68k/m68k.h: Similarly.
	* m68k/news.h: Similarly.
	* m88k/m88k-protos.h: Similarly.
	* m88k/m88k.c: Similarly.
	* m88k/m88k.h: Similarly.
	* mips/mips-protos.h: Similarly.
	* mips/mips.c: Similarly.
	* mips/mips.h: Similarly.
	* ns32k/merlin.h: Similarly.
	* ns32k/ns32k.c: Similarly.
	* ns32k/ns32k.h: Similarly.
	* ns32k/tek6000.h: Similarly.
	* pa/pa-protos.h: Similarly.
	* pa/pa.c: Similarly.
	* pa/pa.h: Similarly.
	* pdp11/2bsd.h: Similarly.
	* pdp11/pdp11-protos.h: Similarly.
	* pdp11/pdp11.c: Similarly.
	* pdp11/pdp11.h: Similarly.
	* romp/romp-protos.h: Similarly.
	* romp/romp.c: Similarly.
	* romp/romp.h: Similarly.
	* rs6000/rs6000-protos.h: Similarly.
	* rs6000/rs6000.c: Similarly.
	* rs6000/rs6000.h: Similarly.
	* rs6000/sysv4.h: Similarly.
	* sh/sh-protos.h: Similarly.
	* sh/sh.c: Similarly.
	* sh/sh.h: Similarly.
	* sparc/sparc-protos.h: Similarly.
	* sparc/sparc.c: Similarly.
	* sparc/sparc.h: Similarly.
	* vax/vax.c: Similarly.
	* vax/vax.h: Similarly.
	* vax/vms.h: Similarly.
	* we32k/we32k.c: Similarly.
	* we32k/we32k.h: Similarly.

From-SVN: r43817
2001-07-06 18:40:17 +00:00
Richard Kenner
b4e3fabb4d tree.def (ARRAY_RANGE_REF): New code.
* tree.def (ARRAY_RANGE_REF): New code.
	* alias.c (handled_component_p, can_address_p): Handle it.
	* dwarf2out.c (loc_descriptor_from_tree): Likewise.
	* explow.c (set_mem_attributes): Likewise.
	* expr.c (expand_assignment, get_inner_reference): Likewise.
	(expand_expr, expand_expr_unaligned, do_jump): Likewise.
	* fold-const.c (operand_equal_p): Likewise.
	* tree.c (staticp, stabilize_reference): Likewise.
	* varasm.c (decode_addr_const): Likewise.

From-SVN: r42848
2001-06-04 09:21:38 -04:00
Kaveh R. Ghazi
88e3805d76 fold-const.c (tree_expr_nonnegative_p): Detect more non-negative cases.
* fold-const.c (tree_expr_nonnegative_p): Detect more
	non-negative cases.

testsuite:
	* g++.old-deja/g++.warn/compare1.C: New test.
	* gcc.dg/compare4.c: New test.

From-SVN: r42365
2001-05-21 01:21:23 +00:00
Kaveh R. Ghazi
6496a589df bitmap.c: Change NULL_PTR to NULL or "(rtx*)0".
* bitmap.c: Change NULL_PTR to NULL or "(rtx*)0".
	* c-common.c: Likewise.
	* c-decl.c: Likewise.
	* combine.c: Likewise.
	* rs6000.c: Likewise.
	* except.c: Likewise.
	* explow.c: Likewise.
	* expr.c: Likewise.
	* fold-const.c: Likewise.
	* function.c: Likewise.
	* gcc.c: Likewise.
	* gcse.c: Likewise.
	* integrate.c: Likewise.
	* loop.c: Likewise.
	* objc/objc-act.c: Likewise.
	* recog.c: Likewise.
	* reg-stack.c: Likewise.
	* reload.c: Likewise.
	* reload1.c: Likewise.
	* simplify-rtx.c: Likewise.
	* stmt.c: Likewise.
	* varasm.c: Likewise.

From-SVN: r41722
2001-05-01 12:11:35 +00:00
Geoffrey Keating
dea8be3e9f fold-const.c (fold): Use first_rtl_op rather than TREE_CODE_LENGTH when...
* fold-const.c (fold): Use first_rtl_op rather than
	TREE_CODE_LENGTH when looping over parameters of a tree.
	Correct strange grouping in test for evaluated SAVE_EXPR.

From-SVN: r41437
2001-04-20 01:34:01 +00:00
Jakub Jelinek
d791ea1e0a fold-const.c (fold): Before optimizing unsigned comparison with 0x7fffffffU...
* fold-const.c (fold): Before optimizing unsigned comparison with
	0x7fffffffU, make sure arg0 is integral type.

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

From-SVN: r41000
2001-04-02 10:08:22 +02:00
Mark Mitchell
68e568c28e cse.c (find_comparison_args): Update documentation.
* cse.c (find_comparison_args): Update documentation.  Fix
	mishandling of COMPARE operations.

	* tree.def (ABS_EXPR): Add documentation.
	* fold-const.c (fold): Improve folding of ABS_EXPRs.

From-SVN: r40630
2001-03-19 18:53:04 +00:00
Brad Lucier
de6c597958 Brad's -ffast-math breakup.
From-SVN: r40300
2001-03-07 11:29:41 -08:00
Zack Weinberg
d6edb99e92 xm-lynx.h, [...]: Do not define TRUE or FALSE.
* config/xm-lynx.h, config/xm-std32.h, config/a29k/xm-a29k.h,
	config/a29k/xm-unix.h, config/alpha/xm-alpha.h,
	config/arc/xm-arc.h, config/arm/xm-arm.h, config/c4x/xm-c4x.h,
	config/clipper/xm-clix.h, config/convex/xm-convex.h,
	config/d30v/xm-d30v.h, config/dsp16xx/xm-dsp16xx.h,
	config/elxsi/xm-elxsi.h, config/fr30/xm-fr30.h,
	config/h8300/xm-h8300.h, config/i370/xm-i370.h,
	config/i370/xm-linux.h, config/i370/xm-mvs.h,
	config/i370/xm-oe.h, config/i386/xm-aix.h,
	config/i386/xm-i386.h, config/i386/xm-osf.h,
	config/i860/xm-i860.h, config/i960/xm-i960.h,
	config/ia64/xm-ia64.h, config/m32r/xm-m32r.h,
	config/m68k/xm-m68k.h, config/m88k/xm-m88k.h,
	config/mcore/xm-mcore.h, config/mips/xm-mips.h,
	config/mn10200/xm-mn10200.h, config/mn10300/xm-mn10300.h,
	config/ns32k/xm-ns32k.h, config/pa/xm-linux.h,
	config/pa/xm-pa.h, config/pa/xm-pa64hpux.h,
	config/pa/xm-pahpux.h, config/pa/xm-papro.h,
	config/pj/xm-pj.h, config/romp/xm-romp.h,
	config/rs6000/xm-beos.h, config/rs6000/xm-rs6000.h,
	config/rs6000/xm-sysv4.h, config/sh/xm-sh.h,
	config/sparc/xm-sparc.h, config/sparc/xm-sysv4.h,
	config/v850/xm-v850.h, config/vax/xm-vax.h,
	config/vax/xm-vms.h, config/we32k/xm-we32k.h:
	Do not define TRUE or FALSE.

	* config/i386/xm-aix.h, config/i386/xm-osf.h: Delete; made
	empty by above change.
	* config.gcc: Remove references to these files.

	* configure.in: Detect stdbool.h.
	* configure, config.in: Regenerate.
	* system.h: Include stddef.h here if available.  Set
	HAVE__BOOL based on GCC_VERSION and __STDC_VERSION__.  Then
	set up a sensible boolean type at the very end.

	* combine.c, cse.c, expr.c, fold-const.c, gensupport.c,
	f/com.c, config/mcore/mcore.c:
	Rename variables named 'true' and/or 'false'.

	* hash.h: Delete 'boolean' typedef and related #undefs.
	* f/proj.h: Delete 'bool' type.  Don't include stddef.h here.

	* function.c, ggc-common.c, hash.h, hash.c, tlink.c, cp/decl.c,
	java/class.c, java/decl.c, java/java-tree.h:
	Replace all uses of 'boolean' with 'bool'.

From-SVN: r40176
2001-03-02 01:51:02 +00:00
Richard Kenner
ac50176d22 fold-const.c (fold_convert): Don't call size_int_type_wide if input overflows.
* fold-const.c (fold_convert): Don't call size_int_type_wide if
	input overflows.

From-SVN: r40012
2001-02-23 16:05:41 -05:00
Jakub Jelinek
fba2c0cdbc fold-const.c (extract_muldiv): If not MULT_EXPR, check if either operand is divisible by C.
* fold-const.c (extract_muldiv) [case PLUS_EXPR]: If not MULT_EXPR,
	check if either operand is divisible by C.
	(multiple_of_p): Handle LSHIFT_EXPR with small constant shift.
	If type is signed, consider negative numbers as well.

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

From-SVN: r39996
2001-02-23 13:28:07 +01:00
Mark Mitchell
68626d4f0e fold-const.c (fold_binary_op_with_conditional_arg): New function, split out from ...
* fold-const.c (fold_binary_op_with_conditional_arg): New
	function, split out from ...
	(fold): ... here.
	* tree.def (COND_EXPR): Document the use of VOID_TYPE for
	conditional arms that throw exceptions.

From-SVN: r39822
2001-02-18 06:53:19 +00:00
Jakub Jelinek
fe375cf108 stor-layout.c (is_pending_size, [...]): New functions.
* stor-layout.c (is_pending_size, put_pending_size): New functions.
	(variable_size): Call put_pending_size.
	* tree.h (is_pending_size, put_pending_size): Add prototypes.
	* fold-const.c (extract_muldiv): If SAVE_EXPR is on the pending
	sizes list, put newly created SAVE_EXPR there as well.

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

	* config/ia64/ia64.c (last_group): Only 2 entries are needed.
	(errata_find_address_regs): load_group has only 2 entries.
	(errata_emit_nops): Likewise.  shladd is not problematic.
	Clear last_group if nop was emitted.
	(fixup_errata): load_group has only 2 entries.
	Optimize.

From-SVN: r39663
2001-02-14 08:57:49 +01:00
Richard Henderson
1796dff4e3 fold-const.c (split_tree): Don't assume a constant isn't splittable.
* fold-const.c (split_tree): Don't assume a constant isn't splittable.
        (fold): Don't assume a constant isn't foldable.
        * tree.c (build): Set TREE_CONSTANT for an expression with no
        side-effects and constant operands.
        (build1): Likewise.

From-SVN: r39585
2001-02-11 09:56:39 -08:00
Joseph Myers
32812a4033 fold-const.c (fold): When folding a CONJ_EXPR of a COMPLEX_CST...
* fold-const.c (fold): When folding a CONJ_EXPR of a COMPLEX_CST,
	use TREE_REALPART and TREE_IMAGPART instead of TREE_OPERAND.

testsuite:
	* gcc.c-torture/compile/20001222-1.x: Remove.

From-SVN: r38696
2001-01-05 00:03:35 +00:00
Mark Mitchell
55560b9da4 * fold-const.c (fold_convert): Fix typo.
From-SVN: r38640
2001-01-03 00:13:33 +00:00
Kaveh R. Ghazi
9d2dc7da92 fold-const.c (tree_expr_nonnegative_p): Treat truth values as non-negative.
* fold-const.c (tree_expr_nonnegative_p): Treat truth values as
	non-negative.

testsuite:
	* gcc.dg/compare3.c: New test.

From-SVN: r38374
2000-12-19 01:17:20 +00:00
Richard Kenner
72bd1f9e60 fold-const.c (fold, [...]): Always return tree of proper type.
* fold-const.c (fold, case CONVERT_EXPR): Always return tree of
	proper type.

From-SVN: r37757
2000-11-26 10:04:25 -05:00
Bernd Schmidt
7cf5c9e1a0 Fix crash in fold_range_test
From-SVN: r37712
2000-11-24 17:45:04 +00:00
Bernd Schmidt
235cfbc40f Overhaul sequence point warnings (again)
From-SVN: r37706
2000-11-24 11:49:46 +00:00
Richard Henderson
30355eaac8 fold-const.c (fold): Compare TYPE_MAIN_VARIANT rather than the types themselves to discover type...
* fold-const.c (fold): Compare TYPE_MAIN_VARIANT rather than
        the types themselves to discover type equivalence.

From-SVN: r37354
2000-11-09 16:12:01 -08:00
Joseph Myers
961192e1dd alias.c [...] (init_alias_analysis, [...]): Use memset () instead of bzero ().
* alias.c (init_alias_analysis), calls.c (expand_call,
	emit_library_call_value_1), combine.c (init_reg_last_arrays),
	cse.c (new_basic_block), dbxout.c (dbxout_type), diagnostic.c
	(init_output_buffer, set_diagnostic_context), dwarf2out.c
	(equate_decl_number_to_die, build_abbrev_table), emit-rtl.c
	(init_emit_once), fold-const.c (mul_double, div_and_round_double),
	function.c (assign_parms), gcse.c (compute_can_copy,
	alloc_gcse_mem, alloc_reg_set_mem, record_one_set,
	compute_hash_table, compute_set_hash_table,
	compute_expr_hash_table), genattrtab.c (optimize_attrs), global.c
	(global_alloc, global_conflicts), haifa-sched.c (compute_trg_info,
	clear_units, schedule_block), integrate.c (initialize_for_inline,
	expand_inline_function), jump.c (thread_jumps), local-alloc.c
	(local_alloc), loop.c (combine_movables, count_loop_regs_set,
	load_mems_and_recount_loop_regs_set), print-tree.c (debug_tree),
	regclass.c (init_reg_sets, init_reg_sets_1, regclass,
	record_reg_classes, allocate_reg_info), reload.c
	(get_secondary_mem, remove_address_replacements, find_reloads),
	reload1.c (reload, set_initial_label_offsets, finish_spills,
	reload_as_needed, choose_reload_regs_init,
	reload_cse_simplify_operands), reorg.c (dbr_schedule), sbitmap.c
	(sbitmap_zero), simplify-rtx.c (simplify_plus_minus), ssa.c
	(rename_registers), stmt.c (expand_end_case), unroll.c
	(unroll_loop), varray.c (varray_grow), objc/objc-act.c: Use memset
	() instead of bzero ().

ch:
	* actions.c (check_missing_cases), typeck.c (build_chill_slice,
	build_chill_cast): Use memset () instead of bzero ().

cp:
	* class.c (duplicate_tag_error, build_vtbl_initializer), decl.c
	(push_binding_level), error.c (cp_tree_printer), pt.c
	(process_partial_specialization, tsubst_template_arg_vector),
	search.c (lookup_member): Use memset () instead of bzero ().

java:
	* expr.c (note_instructions), jcf-io.c (find_class), jcf-parse.c
	(init_outgoing_cpool), lex.c (java_init_lex): Use memset ()
	instead of bzero ().

From-SVN: r37303
2000-11-07 22:50:06 +00:00
Zack Weinberg
0e9295cf74 builtins.c (expand_builtin_strlen): Remove unused mode argument.
* builtins.c (expand_builtin_strlen): Remove unused mode
	argument.
	* gcc.c (process_command): Remove unused variable.
	* fold-const.c: Include expr.h.
	* recog.c: Include reload.h.
	* Makefile.in (recog.o, fold-const.o): Update deps.
cp:
	* decl.c: Include tm_p.h.

From-SVN: r37237
2000-11-03 22:24:21 +00:00
Bernd Schmidt
b0b3afb2f3 Constant folding for builtins
From-SVN: r37191
2000-11-01 17:02:45 +00:00
Joseph Myers
526aba2811 toplev.c, [...]: Change comments mentioning C9X to refer to C99 instead.
* toplev.c, flags.h, fold-const.c, real.c, rtl.c,
	fixinc/inclhack.def: Change comments mentioning C9X to refer to
	C99 instead.

From-SVN: r37127
2000-10-29 19:34:53 +00:00
Richard Kenner
4447513857 fold-const.c (force_fit_type): Unsigned values can overflow if they are sizetype.
* fold-const.c (force_fit_type): Unsigned values can overflow
	if they are sizetype.
	(int_const_binop): Don't use cache if overflows.
	* cp/typeck.c (dubious_conversion_warning): Suppress if
	TYPE_IS_SIZETYPE.

From-SVN: r36970
2000-10-20 13:51:52 -04:00
Mark Mitchell
1f8f4a0b31 Remove obstacks.
* Makefile.in (ggc-callbacks.o): Remove target.
	(flow.o): Depend on GGC_H.
	* alias.c (init_alias_analysis):
	Remove ggc_p conditionals.
	(end_alias_analysis): Likewise.
	* basic-block.h (init_flow): New function.
	(allocate_reg_life_data): Declare.
	* bb-reorder.c	(function_obstack): Replace with ...
	(flow_obstack): ... new variable.
	(fixup_reorder_chain): Use it.
	* c-decl.c (ggc_p): Remove.
	(caller-save.c): Don't call oballoc/obfree.
	* combine.c (struct
	undobuf): Remove storage.
	(try_combine): Don't call oballoc.
	(undo_all): Don't call obfree.
	* cse.c (insert): Use xmalloc, not
	oballoc.
	(cse_main): Adjust accordingly.
	* dwarf2out.c (save_rtx): Remove
	obstack code.
	(dwarf2out_init): Remove ggc_p conditionals.
	* emit-rtl.c (rtl_obstack): Remove.
	(gen_rtx_CONST_INT): Remove ggc_p conditionals.
	(make_insn_raw): Likewise.
	(emit_insn_before): Likewise.
	(emit_insn_after): Likewise.
	(emit_insn): Likewise.
	(gen_sequence): Likewise.
	(copy_insn_1): Remove handling of `b' RTL components.
	(init_emit_once): Remove ggc_p conditionals.
	* except.c (create_rethrow_ref): Don't fool with obstacks.
	(add_partial_entry): Likewise.
	(call_get_eh_context): Likewise.
	(begin_protect_partials): Likewise.
	(protect_with_terminate): Likewise.
	* explow.c
	(plus_constant_wide): Likewise.
	* expr.c (init_expr_once):
	Likewise.
	(emit_block_move): Likewise.
	(clear_storage): Likewise.
	(expand_expr): Likewise.
	* flow.c (function_obstack): Remove.
	(flow_obstack): New variable.
	(flow_firstobj): Likewise.
	(create_base_block): Use the flow_obstack.
	(split_block): Likewise.
	(split_edge): Likewise.
	(calculate_global_regs_live): Likewise.
	(allocate_bb_life_data): Make it static.  Likewiwse.
	(init_flow): New function.
	(size_int_type_wide): Remove ggc_p conditionals.
	* function.c
	(push_function_context_to): Don't call save_tree_status.
	(pop_function_context_from): Or restore_tree_status.
	(assign_stack_local_1): Don't call push_obstacks.
	(find_fixup_replacement): Use xmalloc.
	(fixup_var_refs_insns): Free the storage.
	(insns_for_mem_walk): Don't mess with obstacks.
	(instantiate_decls): Likewise.
	(trampoline_address): Likewise.
	(expand_function_end): Likewise.
	* function.h (sturct function):
	Remove obstack-related variables.
	(save_tree_status): Don't declare.
	(restore_tree_status): Likewise.
	* gcse.c (compute_can_copy):
	Don't call oballoc/obfree.
	* genattrtab.c (operate_exp): Remove
	ggc_p conditionals.
	(simplify_cond): Likewise.
	(simplify_test_exp): Don't mess with obstacks.
	(optimize_attrs): Likewise.
	* gengenrtl.c (gendef): Don't include
	ggc_p conditionals.
	* ggc-callbacks.c (ggc_p): Remove.
	* ggc-none.c (ggc_p): Remove.
	* ggc.h (ggc_p): Don't declare.
	* integrate.c (save_for_inline): Don't mess with obstacks.
	(integrate_decl_tree): Likewise.
	(output_inline_function): Likewise.
	* lists.c
	(init_EXPR_INSN_LIST_cache): Likewise.
	* loop.c (temp_obstack):
	Remove.
	(rtl_obstack): Likewise.
	(init_loop): Don't mess with obstacks.
	(reg_address_cost): Free BIVs and GIVs.
	(check_insns_for_bivs): Use xmalloc, not oballoc.
	(find_mem_givs): Likewise.
	(record_biv): Likewise.
	(general_induction_var): Likewise.
	(product_cheap_p): Likewse.
	* optabs.c (init_one_libfunc): Remove
	ggc_p conditional.
	* print-tree.c (debug_tree): Don't use
	oballoc/obfree.
	(print_node): Likewise.
	* profile.c (output_func_start_profiler):
	Remove call to temporary_allocation.
	* reload1.c
	(eliminate_regs_in_insn): Don't mess with obstacks.
	* resource.c
	(mark_target_live_regs): Use xmalloc.
	(free_resource_info): Free the memory.
	* rtl.c (rtl_obstack):
	Remove.
	(rtvec_alloc): Don't mess with obstacks.
	(rtx_alloc): Likewise.
	(rtx_free): Remove.
	(copy_rtx): Don't handle `b' cases.
	(read_rtx): Use a local rtl_obstack.
	* rtl.h (oballoc): Remove.
	(obfree): Likewise.
	(pop_obstacks): Likewise.
	(push_obstacks): Likewise.
	(allocate_bb_life_data): Likewise.
	(allocate_reg_life_data): Likewise.
	(rtx_free): Likewise.
	* sdbout.c (sdbout_queue_anonymous_type):
	Use tree_cons, not saveable_tree_cons.
	* simplify-rtx.c
	(cselib_init): Don't mess with obstacks.
	* stmt.c
	(mark_block_nesting): Mark the label_chain.
	(epxand_label): Use ggc_alloc, not oballoc.
	(clear_last_expr): Don't mess with obstacks.
	(expand_decl_cleanup): Likewise.
	(expand_dcc_cleanup): Likewise.
	(expand_dhc_cleanup): Likewise.
	(expand_anon_union_decl): Likewise.
	(add_case_node): Use xmalloc, not oballoc.
	(free_case_nodes): New function.
	(expand_end_case): Call it.
	* stor-layout.c (layout_type): Don't
	mess with obstacks.
	(layout_type): Likewise.
	* toplev.c (wrapup_global_declarations):
	Likewise.
	(compile_file): Remove ggc_p conditionals.
	(rest_of_compilation): Call init_flow.  Remove ggc_p conditionals.
	(decode_f_option): Remove ggc_p conditionals.
	* tree.c
	(function_maybepermanent_obstack): Remove.
	(maybepermanent_obstack): Likewise.
	(function_obstack): Likewise.
	(tmeporary_obstack): Likewise.
	(momentary_obstack): Likewise.
	(temp_decl_obstack): Likewise.
	(saveable_obstack): Likewise.
	(rtl_obstack): Likewise.
	(current_obstack): Likewise.
	(expression_obstack): Likewise.
	(struct obstack_stack): Likewise.
	(obstack_stack): Likewise.
	(obstack_stack_obstack): Likewise.
	(maybepermanent_firstobj): Likewise.
	(temporary_firstobj): Likewise.
	(momentary_firstobj): Likewise.
	(temp_decl_firstobj): Likewise.
	(momentary_function_firstobj): Likewise.
	(all_types_permanent): Likewise.
	(struct momentary_level): Likewise.
	(momentary_stack): Likewise.
	(init_obstacks): Remove initialization of removed obstacks.
	(save_tree_status): Remove.
	(restore_tree_status): Likewise.
	(temporary_allocation): Liekwise.
	(end_temporary_allocation): Liekwise.
	(resume_temporary_allocation): Likewise.
	(saveable_allocation): Likewise.
	(push_obstacks): Likewise.
	(push_obstacks_nochange): Likewise.
	(pop_obstacks): Likewise.
	(allocation_temporary_p): Likewise.
	(permanent_allocation): Likewise.
	(preserve_data): Likewise.
	(preserve_initializer): Likewise.
	(rtl_in_current_obstack): Likewise.
	(rtl_in_saveable_obstack): Likewise.
	(oballoc): Likewise.
	(obfree): Likewise.
	(savealloc): Likewise.
	(expralloc): Likewise.
	(print_obstack_name): Likewise.
	(debug_obstack): Likewise.
	(object_permanent_p): Likewise.
	(push_momentary): Likewise.
	(perserve_momentary): Likewise.
	(clear_momentary): Likewise.
	(pop_momentary): Likewise.
	(pop_momentary_nofree): Likewise.
	(suspend_momentary): Likewise.
	(resume_momentary): Likewise.
	(make_node): Don't set TREE_PERMANENT.
	(copy_node): Remove ggc_p conditionals.  Don't set TYPE_OBSTACK.
	Don't set TREE_PERMANENT.
	(get_identifier): Remove ggc_p conditionals.
	(build_string): Likewise.
	(make_tree_vec): Likewise.
	(build_decl_list): Remove.
	(build_expr_list): Likewise.
	(tree_cons): Remove ggc_p conditionals.
	(decl_tree_cons): Remove.
	(expr_tree_cons): Likewise.
	(perm_tree_cons): Likewise.
	(temp_tree_cons): Likewise.
	(saveable_tree_cons): Likewise.
	(build1): Remove ggc_p conditionals.
	(build_parse_node): Likewise.
	(build_type_attribute_variant): Don't mess with obstacks.
	(build_type_copy): Likewise.
	(type_hash_canon): Likewise.
	(build_pointer_type): Likewise.
	(build_reference_type): Likewise.
	(build_index_type): Likewise.
	(build_range_type): Likewise.
	(dump_tree_statistics): Don't print obstack information.
	* tree.h
	(struct tree_common): Remove permanent_flag.
	(TREE_PERMANENT): Remove.
	(TREE_SET_PERMANENT): Likewise.
	(TYPE_OBSTACK): Likewise.
	(struct tree_type): Remove obstack.
	(oballoc): Remove.
	(savealloc): Likewise.
	(build_decl_list): Likewise.
	(build_expr_list): Likewise.
	(perm_tree_cons): Likewise.
	(temp_tree_cons): Likewise.
	(saveable_tree_cons): Likewise.
	(decl_tree_cons): Likewise.
	(expr_tree_cons): Likewise.
	(suspend_momentary): Likewise.
	(allocation_temporary_p): Likewise.
	(resume_momentary): Likewise.
	(push_obstacks_nochange): Likewise.
	(permanent_allocation): Likewise.
	(push_momentary): Likewise.
	(clear_momentary): Likewise.
	(pop_momentary): Likewise.
	(end_temporary_allocation): Likewise.
	(pop_obstacks): Likewise.
	(push_obstacks): Likewise.
	(pop_momentary_nofree): LIkewise.
	(preserve_momentary): Likewise.
	(saveable_allocation): Likewise.
	(temporary_allocation): Likewise.
	(resume_temporary_allocation): Likewise.
	(perserve_initializer): Likewise.
	(debug_obstack): Likewise.
	(rtl_in_current_obstack): Likewise.
	(rtl_in_saveable_obstack): Likewise.
	(obfree): Likewise.
	* varasm.c (current_obstack): Remove.
	(saveable_obstack): Remove.
	(rtl_obstack): Remove.
	(immed_double_const): Don't mess with obstacks.
	(immed_real_cons): Likewise.
	(output_constant_def): Likewise.
	(init_varasm_status): Use xcalloc.
	(mark_pool_constant): Mark the pool constant itself.
	(free_varasm_status): Free memory.
	(decode_rtx_const): Call bzero directly, rather than expanding it
	inline.
	(record_rtx_const): Don't mess with obstacks.
	(force_const_mem): Likewise.
	* config/arm/arm.c (arm_encode_call_attribute): Remove ggc_p
	conditionals.
	(aof_pic_entry): Likewise.
	* config/ia64/ia64.c (ia64_encode_section_info): Likewise.
	* config/m32r/m32r.c (m32r_encode_section_info): Likewise.
	* config/pa/pa.c (saveable_obstack): Remove.
	(rtl_obstack): Likewise.
	(current_obstack): Likewise.
	(output_call): Don't mess with obstacks.
	(hppa_encode_label): Remove ggc_p conditionals.
	* config/romp/romp.c (get_symref): Don't mess with obstacks.
	* config/rs6000/rs6000.c (output_toc): Remove ggc_p conditional.
	(rs6000_encode_section_info): Likewise.
	* config/sh/sh.c (get_fpscr_rtx): Likewise.

From-SVN: r36856
2000-10-13 06:26:46 +00:00
Richard Kenner
b8fbe62c82 fold-const.c (fold, [...]): Perform negation in proper type.a
* fold-const.c (fold, case MINUS_EXPR, case EQ_EXPR): Perform
	negation in proper type.a

From-SVN: r36726
2000-10-05 09:35:07 -04:00
Greg McGary
b6a1cbaeb1 optabs.c (init_optabs): Initialize fixtab...
* optabs.c (init_optabs): Initialize fixtab, fixtrunctab, floattab,
	and extendtab within their proper array boundaries.
	* emit-rtl.c (init_emit_once): Pass `const_tiny_rtx' with bounds
	for the entire array.

	* config/arm/arm.c (arm_override_options): Use ARRAY_SIZE.
	* config/alpha/alpha.c (alpha_lookup_xfloating_lib_func): Likewise.
	* config/avr/avr.c (order_regs_for_local_alloc): Likewise.
	* config/fr30/fr30.c (fr30_print_operand): Likewise.
	* config/i386/dgux.c (output_options): Likewise.
	* config/i386/dgux.h (ASM_FILE_START): Likewise.
	* config/m88k/m88k.c (output_options): Likewise.
	* config/m88k/m88k.h (ASM_FILE_START): Likewise.
	* config/mcore/mcore.c (mcore_output_inline_const_forced,
	layout_mcore_frame, handle_structs_in_regs): Likewise.
	* config/mips/mips.c (output_block_move): Likewise.
	* config/rs6000/rs6000.c (rs6000_override_options,
	rs6000_file_start): Likewise.
	* config/sparc/sparc.c (sparc_add_gc_roots): Likewise.
	* fixinc/fixfixes.c (FIX_TABLE_CT): Likewise.
	* fixinc/fixtests.c (TEST_TABLE_CT): Likewise.
	* builtins.c (expand_builtin_setjmp): Likewise.
	* expr.c (safe_from_p): Likewise.
	* flow.c (life_analysis): Likewise.
	* fold-const.c (size_int_type_wide): Likewise.
	* gcc.c (translate_options, init_spec, set_spec, main): Likewise.
	* genattrtab.c (make_length_attrs): Likewise.
	* genopinit.c (gen_insn): Likewise.
	* genrecog.c (NUM_KNOWN_PREDS, NUM_SPECIAL_MODE_PREDS): Likewise.
	* global.c (global_alloc): Likewise.
	* local-alloc.c (find_free_reg): Likewise.
	* mips-tdump.c (print_symbol): Likewise.
	* mips-tfile.c (parse_def, parse_input): Likewise.
	* reload1.c (NUM_ELIMINABLE_REGS): Likewise.
	* stmt.c (expand_nl_goto_receiver): Likewise.
	* stor-layout.c (set_sizetype): Likewise.
	* varasm.c (decode_reg_name): Likewise.
	* toplev.c (decode_f_option, decode_W_option,
	set_target_switch, print_switch_values): Likewise.
	(NUM_ELEM): Remove macro.
	(display_help, main): s/NUM_ELEM/ARRAY_SIZE/

From-SVN: r35949
2000-08-24 20:31:35 +00:00
Richard Kenner
7393c6422b calls.c (ECF_SP_DEPRESSED): New macro.
* calls.c (ECF_SP_DEPRESSED): New macro.
	(calls_function_1): Treat calling sp-depressed function as alloca.
	(emit_call_1): Don't adjust SP if calling sp-depressed function.
	(expand_call): Set ECF_SP_DEPRESSED if TYPE_RETURNS_STACK_DEPRESSED.
	If sp-depressed, ensure block saves and restores SP.
	* fold-const.c (extract_muldiv): Only check TYPE_IS_SIZETYPE
	for INTEGER_TYPE.
	* function.c (keep_stack_depressed): New function.
	(thread_prologue_and_epilogue_insns): Call it.
	* print-tree.c (print_node): Use HOST_WIDE_INT_PRINT_UNSIGNED
	to print DECL_OFFSET_ALIGN.
	Print no-force-blk and transparent-union flags properly.
	* stmt.c (expand_goto_internal): Don't restore stack if last block
	and function returns with sp depressed.
	(fixup_gotos): Likewise.
	(save_stack_pointer): New function, from code in expand_decl.
	(expand_decl): Call new function.
	* tree.h (TYPE_IS_SIZETYPE): Call INTEGER_TYPE_CHECK.
	(TYPE_RETURNS_STACK_DEPRESSED): New macro.
	(save_stack_pointer): New declaration.

From-SVN: r35734
2000-08-15 21:15:37 -04:00
Zack Weinberg
a36556a837 [multiple changes]
2000-08-04  Andreas Schwab  <schwab@suse.de>

	* cppmain.c (cb_def_pragma): Skip the first two tokens from the
	token list, which are always `#' and `pragma'.

2000-08-04  Zack Weinberg  <zack@wolery.cumb.org>

	* tree.c (tree_expr_nonnegative_p): Move to...
	* fold-const.c: ... here.  Also handle BIND_EXPR and RTL_EXPR.
	(rtl_expr_nonnegative_p): New.
	* tree.h: Add prototype for rtl_expr_nonnegative_p.

	* real.h (CONST_DOUBLE_LOW, CONST_DOUBLE_HIGH, CONST_DOUBLE_MEM,
	CONST_DOUBLE_CHAIN: Move to...
	* rtl.h: ...here.  Use XCINT/XCEXP.

	* Makefile.in: Remove toplev.o from OBJS.  Add rule to make
	libbackend.a; add libbackend.a to STAGESTUFF.  Add BACKEND
	variable.  Use BACKEND when linking cc1, not OBJS.  Add BACKEND
	to VOL_FILES.

	* objc/Make-lang.in (cc1obj): Link with $(BACKEND).

ch:
	* Make-lang.in (cc1chill): Depend on $(BACKEND), not stamp-objlist.
	* Makefile.in (cc1chill): Link with $(BACKEND).  Define BACKEND,
	eliminate C_OBJS (was commented out), OBJS, OBJDEPS.
cp:
        * Make-lang.in (cc1plus): Depend on $(BACKEND), not stamp-objlist.
        * Makefile.in: Add C_OBJS, BACKEND; delete OBJS, OBJDEPS.
        (cc1plus): Link with $(BACKEND) and $(C_OBJS).
f:
	* Make-lang.in (f771): Depend on $(BACKEND), not stamp-objlist.
	* Makefile.in: Add BACKEND; delete OBJS, OBJDEPS.
	(f771): Link with $(BACKEND).
java:
	* Make-lang.in (jc1, jv-scan): Depend on $(BACKEND), not stamp-objlist.
	* Makefile.in: Add BACKEND; delete OBJS, OBJDEPS.
	(jc1): Link with $(BACKEND).
	(jv-scan): Depend on version.o, not all of $(OBJS) or $(BACKEND).

From-SVN: r35501
2000-08-05 00:50:02 +00:00
Kazu Hirata
b6cc0a7290 * fold-const.c: Fix formatting.
From-SVN: r35425
2000-08-02 09:28:44 -06:00
Kazu Hirata
f42ef510b3 * fold-const.c: Fix comment typos.
From-SVN: r35072
2000-07-17 02:24:48 -06:00
Richard Henderson
eff9c80d3e fold-const.c (extract_muldiv): Don't optimize past an unsigned cast around an expression.
* fold-const.c (extract_muldiv): Don't optimize past an unsigned
        cast around an expression.  Tidy other unsigned tests.

From-SVN: r35049
2000-07-15 10:22:26 -07:00
Michael Meissner
4d06bcc527 Fix (<cond> ? FOO++ : BAR++) == 2 from misoptimizing FOO++ into ++FOO without bumping up the comparison value
From-SVN: r35046
2000-07-15 14:58:53 +00:00
Toon Moene
12644a9a40 fold-const.c (extract_muldiv): Check whether c divides op1 exactly if operation is not multiplication.
2000-07-08  Toon Moene  <toon@moene.indiv.nluug.nl>

	* fold-const.c (extract_muldiv) case PLUS_EXPR, MINUS_EXPR:
	Check whether c divides op1 exactly if operation is not
	multiplication.

From-SVN: r34928
2000-07-08 22:29:17 +00:00
Kazu Hirata
fba5638f78 * fold-const.c (fold): Fix a comment typo.
From-SVN: r34899
2000-07-07 07:09:17 -06:00
Jason Merrill
792a328b3b remove redundant parents
From-SVN: r34823
2000-07-01 22:52:26 -04:00
Jason Merrill
a7833bec2c fold-const.c (fold, [...]): Elide conversion between cv-qualified versions of types.
* fold-const.c (fold, case COND_EXPR): Elide conversion between
        cv-qualified versions of types.

From-SVN: r34416
2000-06-05 20:15:37 -04:00
Richard Kenner
efd5878344 tree.h (TREE_CODE_LENGTH): New macro.
* tree.h (TREE_CODE_LENGTH): New macro.
	* c-common.c (c_find_base_decl): Use it.
	* expr.c (safe_from_p): Likewise.
	* print-tree.c (print_node): Likewise.
	* tree.c (make_node, copy_node, get_identifier): Likewie.
	(first_rtl_op, contains_placeholder_p, substitute_in_expr): Likewise.
	(build, build_nt, build_parse_node, simple_cst_equal): Likewise.
	* fold-const.c (make_range): Likewise.
	(fold): Likewise; also use first_rtl_op.
	* c-iterate.c (collect_iterators): Use first_rtl_op.
	* calls.c (calls_function_1): Likewise; also rename TYPE to CLASS.
	Use IS_EXPR_CODE_CLASS.
	(preexpand_calls): Likewise.
	* ggc-common.c (ggc_mark_trees): Rework to use first_rtl_op
	and TREE_CODE_LENGTH.
	* stmt.c (warn_if_unused_value): If no operands, no unused value.
	* ch/lang.c (deep_const_expr): Use first_rtl_op.
	* ch/satisfy.c (satisfy): Use TREE_CODE_LENGTH.
	* cp/method.c (mangle_expression): Use TREE_CODE_LENGTH.
	* cp/tree.c (break_out_calls, build_min_nt): Use TREE_CODE_LENGTH.
	(built_min, cp_tree_equal): Likewise.

From-SVN: r34295
2000-05-31 07:55:53 -04:00
Nick Clifton
d08230fe7d (extract_muldiv): When constructing a multiplier/divisor...
(extract_muldiv): When constructing a multiplier/divisor, do not expect
const_binop to correctly determine if overflow has occured, so check explicitly.

From-SVN: r34135
2000-05-24 18:24:06 +00:00
Alexandre Oliva
c2b63960be fold-const.c (make_range): Handle degenerated intervals.
* fold-const.c (make_range): Handle degenerated intervals.
Fixes c-torture/execute/991221-1.c

From-SVN: r34045
2000-05-20 10:28:17 +00:00
Jason Merrill
f9e158c377 simplify-rtx.c (simplify_ternary_operation): Cast to unsigned.
* simplify-rtx.c (simplify_ternary_operation): Cast to unsigned.
        * stor-layout.c (place_field): Likewise.
        * integrate.h (struct inline_remap): Make regno_pointer_align unsigned.
        * expr.c (store_expr): Make align unsigned.
        * explow.c (plus_constant_wide): Make low words unsigned.
        * expmed.c (choose_multiplier): Likewise.
        * fold-const.c (fold):  Likewise.
        * tree.h (build_int_2): Likewise.
        * tree.c (build_int_2_wide, tree_int_cst_msb): Likewise.
        * emit-rtl.c (gen_reg_rtx): Add cast to unsigned char*.
        (init_emit): Change cast to unsigned char*.
        * varasm.c (compare_constant_1): Add cast to char*.
        * gcse.c (delete_null_pointer_checks): Change cast to unsigned int*.
        * reload1.c (reload): Likewise.

        * rtl.h (MEM_SET_IN_STRUCT_P): Use do { } while (0).

From-SVN: r33684
2000-05-04 17:15:05 -04:00
Jim Wilson
13393c8ae7 Fix for ia64-linux misoptimization.
* fold-const.c (extract_muldiv, case MAX_EXPR): Don't allow signedness
	change.

From-SVN: r33643
2000-05-03 13:04:31 -07:00
Dave Pitts
5f6d382330 Makefile.in ($(srcdir)/c-parse.y: c-parse.in): Enclose the whole message in quotes.
* Makefile.in ($(srcdir)/c-parse.y: c-parse.in): Enclose the whole
        message in quotes. Otherwise, IBM's make program treats the '#' as the
        start of a comment and ignores the remainder of the line.

        * c-lex.c (yylex): Change for EBCDIC, lower case characters preceed
        upper case.
        * cccp.c (initialize_char_syntax): Allow for holes in EBCDIC.
        * cexp.y (initialize_random_junk): Likewise.
        * cppfiles.c (find_include_file): Cast alloca return value.
        * cppinit.c (initialize_standard_includes): Likewise.
        * cpplib.c (cpp_define, cpp_undef): Likewise.
        * defaults.h (ASM_OUTPUT_ASCII): Use ISPRINT.
        * final.c (output_asm_insn): Allow for holes in EBCDIC.
        * fold-const.c (CHARMASK): New.
        (real_hex_to_f): Use it.
        * real.c (CHARMASK): New.
        (etoasc, asctoeg): Use it.
        (asctoeg): EBCDIC lower case characters preceed upper case.

From-SVN: r33192
2000-04-16 17:54:25 -07:00
Richard Henderson
23cdce68cf fold-const.c (extract_muldiv): Don't distribute and widen multiply across plus for non-sizetype unsigned types.
* fold-const.c (extract_muldiv): Don't distribute and widen
        multiply across plus for non-sizetype unsigned types.

From-SVN: r33151
2000-04-14 10:45:17 -07:00
Richard Kenner
13eb1f7f0d expr.c (store_constructor): SIZE now signed.
* expr.c (store_constructor): SIZE now signed.
	For EXPR_SIZE, don't evaluate size; just needed if constant.
	* fold-const.c (fold): Fix a number of cases when folded tree is
	wrong type.
	* function.c (flush_addressof): Reenable.
	* tree.h (flush_addressof): Likewise.
	* toplev.c (independent_decode_option): Look at strings_processed.
	* config/alpha/alpha.h (MINIMUM_ATOMIC_ALIGNMENT): Cast to unsigned.

From-SVN: r32783
2000-03-28 12:01:49 -05:00
Richard Kenner
770ae6cc71 * Rework fields used to describe positions of bitfields and
modify sizes to be unsigned and use HOST_WIDE_INT.
	* alias.c (reg_known_value_size): Now unsigned.
	* c-typeck.c (build_unary_op, case ADDR_EXPR): Use byte_position.
	(really_start_incremental_init): Use bitsize_zero_node.
	(push_init_level, pop_init_level, output_init_element): Likewise.
	Use bitsize_unit_node and bitsize_one_node.
	(output_pending_init_elements, process_init_element): Likewise.
	* combine.c (combine_max_regno, reg_sign_bit_copies): Now unsigned.
	(make_extraction): Position and length HOST_WIDE_INT and unsigned
	HOST_WIDE_INT, respectively.
	(get_pos_from_mask): Passed in value is unsigned HOST_WIDE_INT.
	(num_sign_bit_copies): Returns unsigned.
	BITWIDTH now unsigned; rework arithmetic.
	Remove recursive call from arg to MAX.
	(combine_instructions, init_reg_last_arrays): NREGS now unsigned.
	(setup_incoming_promotions, can_combine_p, try_combine, simplify_set):
	REGNO now unsigned.
	(set_nonzero_bit_and_sign_copies): NUM now unsigned.
	(find_split_point, expand_compound_operation, make_extraction): LEN
	now unsigned HOST_WIDE_INT, POS now HOST_WIDE_INT.
	(make_field_assignment): Likewise.
	(combine_simplify_rtx): Add cast.
	(expand_compound_operation): MODEWIDTH now unsigned; rework arithmetic.
	(force_to_mode): WIDTH now unsigned; add cast.
	(if_then_else_cond): SIZE now unsigned.
	(nonzero_bits): MODE_WIDTH, RESULT_WIDTH, and WIDTH now unsigned.
	(extended_count): Now returns unsigned.
	(simplify_shift_const): COUNT unsigned; arg is now INPUT_COUNT.
	Add SIGNED_COUNT variable; MODE_WORDS and FIRST_COUNT now unsigned.
	(simplify_comparison): MODE_WIDTH now unsigned.
	(update_table_tick): REGNO and ENDREGNO now unsigned; new var R.
	(mark_used_regs_combine): Likewise; rework arithmetic.
	(record_value_for_reg): REGNO, ENDREGNO, and I now unsigned.
	(record_dead_and_set_regs, reg_dead_at_p, distribute_notes): Likewise.
	(record_promoted_value): REGNO now unsigned.
	(get_last_value_validate): REGNO, ENDREGNO, and J now unsigned.
	(get_last_value): REGNO now unsigned.
	(use_crosses_set_p): REGNO and ENDREGNO now unsigned.
	(reg_dead_regno, reg_dead_endregno): Now unsigned.
	(remove_death): Arg REGNO now unsigned.
	(move_deaths):  REGNO, DEADREGNO, DEADEND, OUREND, and I now unsigned.
	(reg_bitfield_target_p): REGNO, REGNO, ENDREGNO, and ENDTREGNO
	now unsigned.
	* convert.c (convert_to_integer): INPREC and OUTPREC now unsigned.
	* cse.c (struct qty_table_elem): FIRST_REG and LAST_REG now unsigned.
	(struct cse_reg_info): REGNO now unsigned.
	(cached_regno): Now unsigned.
	(REGNO_QTY_VALID_P): Add cast.
	(make_new_qty, make_regs_eqv, delete_reg_eqiv): Regno args unsigned.
	(remove_invalid_regs): Likewise.
	(remove_invalid_subreg_refs): Likewise; arg WORD also unsigned
	as are variables END and I.
	(get_cse_reg_info, insert): Likewise.
	(mention_regs, invalidate_for_call): REGNO, ENDREGNO, and I unsigned.
	(canon_hash): Likewise.
	(insert_regs, lookup_for_remove): REGNO now unsigned.
	(invalidate): REGNO, ENDREGNO, TREGNO, and TENDREGNO now unsigned.
	New variable RN.
	* dbxout.c (dbxout_parms, dbxout_reg_parms): Don't check for REGNO < 0.
	* dwarf2out.c (dwarf2ou_frame_debug_expr): Remove cast.
	* emit-rtl.c (subreg_realpart_p): Add cast.
	(operand_subword): Arg I is now unsigned as is var PARTWORDS.
	(operand_subword_force): Arg I is now unsigned.
	* except.c (eh_regs): Variable I is now unsigned.
	* explow.c (hard_function_value): BYTES is unsigned HOST_WIDE_INT.
	* expmed.c (store_fixed_bit_field): Position is HOST_WIDE_INT;
	length is unsigned HOST_WIDE_INT; likewise for internal variables.
	(store_split_bit_field, extract_fixed_bit_field): Likewise.
	(extract_split_bit_field, store_bit_field, extract_bit_field):
	Likewise.
	* expr.c (store_constructor_fields, store_constructor, store_field):
	Positions are HOST_WIDE_INT and lengths are unsigned HOST_WIDE_INT.
	(expand_assignment, expand_expr, expand_expr_unaligned): Likewise.
	(do_jump): Likewise.
	(move_by_pieces, move_by_pieces_ninsns, clear_by_pieces):
	MAX_SIZE is now unsigned.
	(emit_group_load): BYTEPOS is HOST_WIDE_INT; BYTELEN is unsigned.
	(emit_group_store): Likewise.
	(emit_move_insn): I now unsigned.
	(store_constructor): Use host_integerp, tree_low_cst, and
	bitsize_unit_node.
	(get_inner_reference): Return bitpos and bitsize as HOST_WIDE_INT.
	Rework all calculations to use trees and new fields.
	* expr.h (promoted_input_arg): Regno now unsigned.
	(store_bit_field, extract_bit_field): Adjust types of pos and size.
	(mark_seen_cases): Arg is HOST_WIDE_INT.
	* flow.c (verify_wide_reg_1): REGNO now unsigned.
	* fold-const.c (decode_field_reference): Size and pos HOST_WIDE_INT;
	precisions and alignments are unsigned.
	(optimize_bit_field_compare, fold_truthop): Likewise.
	(int_const_binop): Adjust threshold for size_int_type_wide call.
	(fold_convert): Likewise.
	(size_int_type_wide): Make table larger and fix thinko that only
	had half of table used.
	(all_ones_mask_p, fold): Precisions are unsigned.
	* function.c (put_reg_info_stack): REGNO is unsigned.
	(instantiate_decl): Size is HOST_WIDE_INT.
	(instantiate_virtual_regs): I is unsigned.
	(assign_parms): REGNO, REGNOI, and REGNOR are unsigned.
	(promoted_input_arg): REGNO is unsigned.
	* function.h (struct function): x_max_parm_reg is now unsigned.
	* gcse.c (max_gcse_regno): Now unsigned.
	(struct null_pointer_info): min_reg and max_reg now unsigned.
	(lookup_set, next_set): REGNO arg now unsigned.
	(compute_hash_table): REGNO and I now unsigned.
	(handle_avail_expr): regnum_for_replacing now unsigned.
	(cprop_insn): REGNO now unsigned.
	(delete_null_pointer_checks_1): BLOCK_REG now pointer to unsigned.
	* ggc-common.c (ggc_mark_tree_children, case FIELD_DECL): New case.
	* global.c (set_preference): SRC_REGNO, DEST_REGNO, and I now unsigned.
	* hard-reg-set.h (reg_class_size): Now unsigned.
	* integrate.c (mark_stores): LAST_REG and I now unsigned; new UREGNO.
	* jump.c (mark_modified_reg): I now unsigned; add cast.
	(rtx_equal_for_thread_p): Add cast.
	* loop.c (max_reg_before_loop): Now unsigned.
	(struct_movable): REGNO now unsigned.
	(try_copy_prop): REGNO arg unsigned.
	(regs_match_p): XN and YN now unsigned.
	(consec_sets_invariant_p, maybe_eliminate_biv): REGNO now unsigned.
	(strength_reduce): Likewise; NREGS also unsigned.
	(first_increment_giv, last_increment_giv unsigned): Now unsigned.
	* loop.h (struct iv_class): REGNO now unsigned.
	(max_reg_before_loop, first_increment_giv, last_increment_giv):
	Now unsigned.
	* machmode.h (mode_size, mode_unit_size): Now unsigned.
	(mode_for_size, smallest_mode_for_size): Pass size as unsigned.
	* optabs.c (expand_binop): I and NWORDS now unsigned.
	(expand_unop): I now unsigned.
	* print-tree.c (print_node): Don't print DECL_FIELD_BITPOS, but do
	print DECL_FIELD_OFFSET and DECL_FIELD_BIT_OFFSET.
	* real.c (significand_size): Now returns unsigned.
	* real.h (significand_size): Likewise.
	* regclass.c (reg_class_size): Now unsigned.
	(choose_hard_reg_mode): Both operands now unsigned.
	(record_reg_classes): REGNO and NR now unsigned.
	(reg_scan): NREGS now unsigned.
	(reg_scan_update): old_max_regno now unsigned.
	(reg_scan_mark_refs): Arg MIN_REGNO and var REGNO now unsigned.
	* reload.c (find_valid_class): BEST_SIZE now unsigned.
	(find_dummy_reload): REGNO, NWORDS, and	I now unsigned.
	(hard_reg_set_here_p): Args BEG_REGNO and END_REGNO now unsigned.
	Likewise for variable R.
	(refers_to_regno_for_reload_p): Args REGNO and END_REGNO now unsigned,
	as are variables INNER_REGNO and INNER_ENDREGNO; add new variable R.
	(find_equiv_reg): Add casts.
	(regno_clobbered_p): Arg REGNO now unsigned.
	* reload.h (struct reload): NREGS now unsigned.
	(refers_to_regno_for_reload_p): Regno args are unsigned.
	(regno_clobbered_p): Likewise.
	* reload1.c (reg_max_ref_width, spill_stack_slot_width): Now unsigned.
	(compute_use_by_pseudos): REGNO now unsigned.
	(find_reg): I and J now unsigned, new variable K, and change loop
	variables accordingly; THIS_NREGS now unsigned.
	(alter_reg): INHERENT_SIZE and TOTAL_SIZE now unsigned.
	(spill_hard_reg): REGNO arg now unsigned; add casts.
	(forget_old_reloads_1): REGNO, NR, and I now unsigned.
	(mark_reload_reg_in_use): Arg REGNO and vars NREGS and I now unsigned.
	(clear_reload_reg_in_use): Arg REGNO and vars NREGS, START_REGNO,
	END_REGNO, CONFLICT_START, and CONFLICT_END now unsigned.
	(reload_reg_free_p, reload_reg_reaches_end_p): Arg REGNO now unsigned.
	(choose_reload_regs): MAX_GROUP_SIZE now unsigned.
	(emit_reload_insns): REGNO now unsigned.
	(reload_cse_move2add): Add cast.
	(move2add_note_store): REGNO and I now unsigned; new variable ENDREGNO
	and rework loop.
	* resource.c (mark_referenced_resources, mark_set_resources): New
	variable R; REGNO and LAST_REGNO now unsigned.
	(mark_target_live_regs): J and REGNO now unsigned.
	* rtl.c (mode_size, mode_unit_size): Now unsigned.
	* rtl.h (union rtunion_def): New field rtuint.
	(XCUINT): New macro.
	(ADDRESSOF_REGNO, REGNO, SUBREG_WORD): New XCUINT.
	(operand_subword, operand_subword_force): Word number is unsigned.
	(choose_hard_reg_mode): Operands are unsigned.
	(refers_to-regno_p, dead_or_set_regno_p): Regno arg is unsigned.
	(find_regno_note, find_regno_fusage, replace_regs): Likewise.
	(regno_use_in, combine_instructions, remove_death): Likewise.
	(reg_scan, reg_scan_update): Likewise.
	(extended_count): Return is unsigned.
	* rtlanal.c (refers_to_regno_p): Args REGNO and ENDREGNO and vars I,
	INNER_REGNO, and INNER_ENDREGNO now unsigned; new variable X_REGNO.
	(reg_overlap_mentioned_p): REGNO and ENDREGNO now unsigned.
	(reg_set_last_first_regno, reg_set_last_last_regno): Now unsigned.
	(reg_reg_last_1): FIRS and LAST now unsigned.
	(dead_or_set_p): REGNO, LAST_REGNO, and I now unsigned.
	(dead_or_set_regno_p): Arg TEST_REGNO and vars REGNO and ENDREGNO
	now unsigned.
	(find_regno_note, regno_use_in): Arg REGNO now unsigned.
	(find_regno_fusage): Likewise; also var REGNOTE now unsigned.
	(find_reg_fusage): Variables REGNO, END_REGNO, and I now unsigned.
	(replace_regs): Arg NREGS now unsigned.
	* sdbout.c (sdbout_parms, sdbout_reg_parms): Don't check REGNO < 0.
	* simplify-rtx.c (simplify_unary_operation): WIDTH now unsigned.
	(simplify_binary_operation): Likewise.
	(cselib_invalidate_regno): Arg REGNO and variables ENDREGNO, I, and
	THIS_LAST now unsigned.
	(cselib_record_set): Add cast.
	* ssa.c (ssa_max_reg_num): Now unsigned.
	(rename_block): REGNO now unsigned.
	* stmt.c (expand_return): Bit positions unsigned HOST_WIDE_INT;
	sizes now unsigned.
	(all_cases_count): Just return -1 not -2.
	COUNT, MINVAL, and LASTVAL now HOST_WIDE_INT.
	Rework tests to use trees whenever possible.
	Use host_integerp and tree_low_cst.
	(mark_seen_cases): COUNT arg now HOST_WIDE_INT;
	Likewise variable NEXT_NODE_OFFSET; XLO now unsigned.
	(check_for_full_enumeration_handing): BYTES_NEEDED, I to HOST_WIDE_INT.
	* stor-layout.c (mode_for_size): SIZE arg now unsigned.
	(smallest_mode_for_size): Likewise.
	(layout_decl): Simplify handing of a specified DECL_SIZE_UNIT.
	KNOWN_ALIGN is now an alignment, so simplify code.
	Don't turn off DECL_BIT_FIELD if field is BLKmode, but not type.
	(start_record_layout): Renamed from new_record_layout_info.
	Update to new fields.
	(debug_rli, normalize_rli, rli_size_unit_so_far, rli_size_so_far):
	New functions.
	(place_union_field): Renamed from layout_union_field.
	Update to use new fields in rli.
	(place_field): Renamed from layout_field.
	Major rewrite to use new fields in rli; pass alignment to layout_decl.
	(finalize_record_size): Rework to use new fields in rli and handle
	union.
	(compute_record_mode): Rework to simplify and to use new DECL fields.
	(finalize_type_size): Make rounding more consistent.
	(finish_union_layout): Deleted.
	(layout_type, case VOID_TYPE): Don't set TYPE_SIZE_UNIT either.
	(layout_type, case RECORD_TYPE): Call new function names.
	(initialize_sizetypes): Set TYPE_IS_SIZETYPE.
	(set_sizetype): Set TYPE_IS_SIZETYPE earlier.
	(get_best_mode): UNIT is now unsigned; remove casts.
	* tree.c (bit_position): Compute from new fields.
	(byte_position, int_byte_position): New functions.
	(print_type_hash_statistics): Cast to remove warning.
	(build_range_type): Use host_integerp and tree_low_cst to try to hash.
	(build_index_type): Likewise; make subtype of sizetype.
	(build_index_2_type): Pass sizetype to build_range_type.
	(build_common_tree_nodes): Use size_int and bitsize_int to
	initialize nodes; add bitsize_{zero,one,unit}_node.
	* tree.h (DECL_FIELD_CONTEXT): Use FIELD_DECL_CHECK.
	(DECL_BIT_FIELD_TYPE, DECL_QUALIFIER, DECL_FCONTEXT): Likewise.
	(DECL_PACKED, DECL_BIT_FIELD): Likewise.
	(DECL_FIELD_BITPOS): Deleted.
	(DECL_FIELD_OFFSET, DECL_FIELD_BIT_OFFSET): New fields.
	(DECL_RESULT, DECL_SAVED_INSNS): Use FUNCTION_DECL_CHECK.
	(DECL_FRAME_SIZE, DECL_FUNCTION_CODE, DECL_NO_STATIC_CHAIN): Likewise.
	(DECL_INLINE, DECL_BUILT_IN_NONANSI, DECL_IS_MALLOC): Likewise.
	(DECL_BUILT_IN_CLASS, DECL_STATIC_CONSTRUCTOR): Likewise.
	(DECL_STATIC_DESTRUCTOR, DECL_NO_CHECK_MEMORY_USAGE): Likewise.
	(DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT, DECL_NO_LIMIT_STACK) Likewise.
	(DECL_ORIGINAL_TYPE, TYPE_DECL_SUPPRESS_DEBUG): Use TYPE_DECL_CHECK.
	(DECL_ARG_TYPE_AS_WRITEN, DECL_ARG_TYPE): Use PARM_DECL_CHECK.
	(DECL_INCOMING_RTL, DECL_TRANSPARENT_UNION): Likewise.
	(DECL_ALIGN): Adjust to new field in union.
	(DECL_OFFSET_ALIGN): New field.
	(DECL_ERROR_ISSUED, DECL_TOO_LATE): Use LABEL_DECL_CHECK.
	(DECL_IN_TEXT_SECTION): Use VAR_DECL_CHECK.
	(union tree_decl): Add struct for both aligns.
	(enum tree_index): Add TI_BITSIZE_{ZERO,ONE,UNIT}.
	(bitsize_zero_node, bitsize_one_node, bitsize_unit_node): Added.
	(struct record_layout_info): Rework fields to have offset
	alignment and byte and bit position.
	(start_record_layout, place_field): Renamed from old names.
	(rli_size_so_far, rli_size_unit_so_far, normalize_rli): New decls.
	(byte_position, int_byte_position): Likewise.
	(get_inner_reference): Change types of position and length.
	* unroll.c (unroll_loop): New variable R; use for some loops.
	MAX_LOCAL_REGNUM and MAXREGNUM now unsigned.
	(calculate_giv_inc): Arg REGNO now unsigned.
	(copy_loop_body): REGNO and SRC_REGNO now unsigned.
	* varasm.c (assemble_variable): Clean up handling of size using
	host_integerp and tree_low_cst.
	(decode_addr_const): Use byte, not bit, position.
	(output_constructor): bitpos and offsets are HOST_WIDE_INT;
	use tree_low_cst and int_bit_position.
	* objc/objc-act.c (build_ivar_list_initializer): Use byte_position.
	* ch/actions.c (check_missing_cases): BYTES_NEEDED is HOST_WIDE_INT.
	* ch/typeck.c (expand_constant_to_buffer): Use int_byte_position.
	(extract_constant_from_buffer): Likewise.
	* cp/class.c (build_vbase_pointer_fields): layout_field now
	place_field.
	(get_vfield_offset): Use byte_position.
	(set_rtti_entry): Set OFFSET to ssizetype zero.
	(get_binfo_offset_as_int): Deleted.
	(dfs_record_base_offsets): Use tree_low_cst.
	(dfs_search_base_offsets): Likewise.
	(layout_nonempty_base_or_field): Reflect changes in RLI format
	and call byte_position.
	(layout_empty_base): Convert offset to ssizetype.
	(build_base_field): use rli_size_unit_so_far.
	(dfs_propagate_binfo_offsets): Do computation in proper type.
	(layout_virtual_bases): Pass ssizetype to propagate_binfo_offsets.
	(layout_class_type): Reflect changes in RLI names and fields.
	(finish_struct_1): Set DECL_FIELD_OFFSET.
	* cp/dump.c (dequeue_and_dump): Call bit_position.
	* cp/expr.c (cplus_expand_constant): Use byte_position.
	* cp/rtti.c (expand_class_desc): Use bitsize_one_node.
	* cp/typeck.c (build_component_addr): Use byte_position and don't
	special case for zero offset.
	* f/com.c (ffecom_tree_canonize_ptr_): Use bitsize_zero_node.
	(ffecom_tree_canonize_ref_): Likewise.
	* java/class.c (make_field_value): Use byte_position.
	* java/expr.c (JAVA_ARRAY_LENGTH_OFFSET): Use byte_position.
	(java_array_data_offset): Likewise.
	* java/java-tree.h (MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC): Add case to
	bzero call.

From-SVN: r32742
2000-03-25 13:34:13 -05:00
Theodore Papadopoulo
2f939d9406 builtin.c (get_pointer_alignment): Use DECL_P and TYPE_P macros.
* builtin.c (get_pointer_alignment): Use DECL_P and TYPE_P macros.
	* c-common.c (decl_attributes,check_format_info,truthvalue_conversion,
	  c_get_alias_set): Likewise.
	* c-decl.c (duplicate_decls): Likewise.
	* c-typeck.c (default_conversion,build_unary_op): Likewise.
	* calls.c (initialize_argument_information): Likewise.
	* dwarf2out.c (decl_class_context,add_abstract_origin_attribute):
	Likewise.
	* dwarfout.c (decl_class_context,output_type): Likewise.
	* expr.c (get_inner_reference): Likewise.
	* fold-const.c (simple_operand_p,fold): Likewise.
	* function.c (aggregate_value_p): Likewise.
	* stmt.c (expand_asm_operands): Likewise.
	* varasm.c (named_section): Likewise.

	* call.c (check_dtor_name,build_new_method_call): Likewise.
	* decl.c (push_class_binding,poplevel,pushtag,lookup_namespace_name,
	make_typename_type,check_initializer,cp_finish_decl,xref_tag): Likewise.
	* decl2.c (grokfield,build_expr_from_tree,build_expr_from_tree,
	decl_namespace,arg_assoc_template_arg,arg_assoc,
	validate_nonmember_using_decl,do_class_using_decl): Likewise.
	* error.c (dump_template_argument,dump_expr,cp_file_of,cp_line_of,
	args_to_string): Likewise.
	* friend.c (is_friend): Likewise.
	* lex.c (note_got_semicolon,note_list_got_semicolon,is_global): Likewise.
	* method.c (build_overload_nested_name,build_overload_value,
	build_qualified_name,build_qualified_name,hack_identifier): Likewise.
	* parse.y (typename_sub,typename_sub1): Likewise.
	* pt.c (push_inline_template_parms_recursive,check_template_shadow,
	process_partial_specialization,convert_template_argument,
	template_args_equal,add_pending_template,lookup_template_class,
	for_each_template_parm_r,maybe_fold_nontype_arg,
	tsubst,instantiate_template,type_unification_real,unify,
	instantiate_pending_templates,set_mangled_name_for_template_decl):
	Likewise.
	* repo.c (repo_get_id,repo_template_used): Likewise.
	* search.c (lookup_field_1): Likewise.
	* tree.c (walk_tree,get_type_decl,cp_tree_equal,member_p): Likewise.
	* xref.c (classname): Likewise.

From-SVN: r32698
2000-03-23 00:41:05 +00:00
Richard Henderson
8e1ca0982c fold-const.c (extract_muldiv): Apply type check for defined overflow to multiply as well as divide.
* fold-const.c (extract_muldiv): Apply type check for defined
        overflow to multiply as well as divide.

From-SVN: r32636
2000-03-19 03:37:39 -08:00
Richard Kenner
c9869b75ee fold-const.c (fold): Fix a few cases when the returned result is not of the same type as the input.
* fold-const.c (fold): Fix a few cases when the returned result
	is not of the same type as the input.

From-SVN: r32597
2000-03-16 18:45:28 -05:00
Richard Kenner
05bccae2ef tree.h (INT_CST_LT, [...]): Remove unneeded casts.
* tree.h (INT_CST_LT, INT_CST_LT_UNSIGNED): Remove unneeded casts.
	(struct tree_int_cst): int_cst_low is now unsigned HOST_WIDE_INT.
	(attribute_hash_list, type_hash_canon): hashcode is now unsigned.
	(type_hash_lookup, type_hash_add, type_hash_list): Likewise.
	(min_precision): Result is unsignd.
	(add_double, neg_double, mul_double): Low word is unsigned.
	(lshift_double, rshift_double, lrotate_double): Likewise.
	(rrotate_double, div_and_round_double): Likewise.
	(tree_floor_log2, compare_tree_int): New functions.
	(preserve_rtl_expr_temps): New declaration.
	* c-common.c (declare_hidden_char_array): Use compare_tree_int.
	(decl_attributes): Use tree_log2 to find alignment.
	Check for TREE_INT_CST_HIGH for format args.
	(min_precision): Now unsigned.
	Use tree_floor_log2.
	(truthvalue_conversion): Delete long-disabled code.
	* c-decl.c (finish_struct): Clean up tests on field width.
	(finish_function): Use compare_tree_int.
	* c-pragma.c (handle_pragma_token): Use tree_log2 for alignment.
	* c-typeck.c (comptypes): Use tree_int_cst_equal.
	(default_conversion, digest_init): Use compare_tree_int.
	(build_binary_op): Use integer_all_onesp and compare_tree_int.
	Fix type errors in forming masks.
	* calls.c (initialize_argument_information): Use compare_tree_int.
	* dbxout.c (dbxout_type): Cast TREE_INT_CST_LOW to HOST_WIDE_INT.
	* except.c (expand_eh_region_start_tree): Use compare_tree_int.
	* expr.c (is_zeros_p, case INTEGER_CST): Use integer_zerop.
	(store_field): Use compare_tree_int.
	(expand_expr, case CONSTRUCTOR): Use TYPE_SIZE_UNIT.
	(expand_expr, case ARRAY_REF): Use compare_tree_int.
	(do_jump, case BIT_AND_EXPR): Use tree_floor_log2.
	(do_store_flag): Use compare_tree_int.
	* fold-const.c (encode, decode): Low part is always unsigned.
	(force_fit_type, add_double, neg_double, mul_double): Likewise.
	(lshift_double, rshift_double, lrotate_double): Likewise.
	(rrotate_double, div_and_round_double, int_const_binop): Likewise.
	(fold_convert): Use compare_tree_int.
	(operand_equal_p, case INTEGER_CST): Use tree_int_cst_equal.
	(invert_truthvalue, case INTEGER_CST): Likewise.
	(fold): Use compare_tree_int; add casts for unsigned TREE_INT_CST_LOW.
	* mkdeps.c (deps_dummy_targets): Make I unsigned.
	* rtl.h (add_double, neg_double, mul_double): Low words are unsigned.
	(lshift_double, rshift_double, lrotate_double, rrotate_double):
	Likewise.
	* stmt.c (expand_decl): Use compare_tree_int and mode_for_size_tree.
	(expand_end_case): Use compare_tree_int.
	(estimate_case_costs): Cast TREE_INT_CST_LOW to HOST_WIDE_INT.
	* stor-layout.c (mode_for_size_tree): Use compare_tree_int.
	(layout_decl): Likewise.
	(layout_record, layout_union): Make sizes unsigned.
	(layout_type, case VOID_TYPE): TYPE_SIZE must be bitsizetype.
	(layout_type, case QUAL_UNION_TYPE): Use compare_tree_int.
	* tree.c (struct type_hash): hashcode is unsigned.
	(build_type_attribute_variant, type_hash_list): Likewise.
	(type_hash_lookup, type_hash_add, type_hash_canon): Likewise.
	(attribute_hash_list, build_array_type, build_method_type): Likewise.
	(build_complex_type): Likewise.
	(real_value_from_int_cst): Remove unneeded casts.
	(integer_all_onesp): Add casts.
	(tree_floor_log2, compare_tree_int): New functions.
	(build_index_type): Use tree_int_cst_sgn.
	* varasm.c (assemble_variable): Use compare_tree_int.
	* ch/actions.c (chill_convert_for_assignment): INDEX is unsigned
	HOST_WIDE_INT.
	* ch/ch-tree.h (DECL_NESTING_LEVEL): Use TREE_INT_CST_HIGH
	since unsigned.
	* ch/except.c (chill_handle_on_labels): ALTERNATIVE is unsigned.
	Use compare_tree_int.
	(expand_goto_except_cleanup): Likewise.
	* cp/class.c (dfs_modify_vtables): I is now unsigned.
	(check_bitfield_decl): Use tree_int_cst_sgn and compare_tree_int.
	(build_base_field): Add casts of TREE_INT_CST_LOW to HOST_WIDE_INT.
	* cp/error.c (dump_expr): Cast TREE_INT_CST_HIGH to unsigned.
	* cp/init.c (build_vec_init): Cast TREE_INT_CST_LOW to HOST_WIDE_INT.
	* cp/method.c (build_overload_int): Cast TREE_INT_CST_HIGH to unsigned.
	* cp/typeck.c (build_binary_op, case TRUNC_DIV_EXPR):
	Call integer_all_onesp.
	* cp/typeck2.c (process_init_constructor): Use compare_tree_int.
	* f/com.c (ffecom_f2c_set_lio_code_): Use compare_tree_int.
	(ffecom_sym_transform_, ffecom_transform_common_): Likewise.
	(ffecom_transform_equiv_): Likewise.
	* java/decl.c (emit_init_test_initialization): Mark KEY as unused.
	* java/expr.c (build_newarray): Cast TREE_INT_CST_LOW to HOST_WIDE_INT.
	(build_anewarray): Likewise.
	* java/parse.y (patch_newarray): Likewise.
	* java/parse.c: Regenerated.

From-SVN: r32383
2000-03-07 06:41:32 -05:00
Richard Kenner
21318741bb c-common.c (c_common_nodes_and_builtins): Make sizetype_endlink reference the language-equivalent of sizetype.
* c-common.c (c_common_nodes_and_builtins): Make sizetype_endlink
	reference the language-equivalent of sizetype.
	* c-typeck.c (comptypes): Treat sizetype like its language equivalent.
	* fold-const.c (size_binop, size_diffop): Put back checks.
	* gcse.c (dump_hash_table): Fix minor error in last change.
	* stor-layout.c (set_sizetype): Set TYPE_DOMAIN of sizetype.
	Clear TYPE_{NEXT,MAIN}_VARIANT and TYPE_{POINTER,REFERENCE}_to of
	all sizetypes.
	* cp/typeck.c (comptypes): Treat sizetype like its language equivalent.

From-SVN: r32291
2000-03-02 13:29:56 -05:00
Mark Mitchell
38769add25 fold-const.c (size_binop): Don't asert inputs are the same and have TYPE_IS_SIZETYPE set.
* fold-const.c (size_binop): Don't asert inputs are the same and
	have TYPE_IS_SIZETYPE set.
	(size_diffop): Likewise.

From-SVN: r32273
2000-03-01 00:54:49 +00:00
Richard Kenner
fed3cef0db builtins.c (c_strlen): Use size_diffop and return ssizetype value.
* builtins.c (c_strlen): Use size_diffop and return ssizetype value.
	(expand_builtin_strcpy): Pass correct type to size_binop.
	(expand_builtin_strcmp): Likewise.
	Clean up conditional structure.
	* c-decl.c (init_decl_processing): Don't call set_sizetype twice.
	(complete_array_type): Don't use size_binop for MAXINDEX.
	* c-typeck.c (c_sizeof): Use size_one_node and TYPE_SIZE_UNIT.
	(c_sizeof_nowarn, c_size_in_bytes): Likewise.
	(c_alignof): Use size_one_node.
	(build_unary_op): Pass arg of proper type to size_binop.
	(really_start_incremental_init, push_init_level): Use sizetype for
	constructor{,_bit,_unfilled}_index.
	(pop_init_label, output_init_element): Likewise.
	(output_pending_init_elements, process_init_element): Likewise.
	* calls.c (compute_argument_block_size): Field VAR is ssizetype.
	* expr.c (store_expr): Use size_int.
	(store_constructor): Use proper types for size_binop args.
	(get_inner_reference, expand_expr, case ARRAY_REF): Likewise.
	(expand_expr_unaligned): Likewise.
	(string_contant): Return object of sizetype.
	* expr.h (SUB_PARM_SIZE): Call size_diffop and pass proper types.
	(ARGS_SIZE_RTX): Call ARGS_SIZE_TREE.
	(ARGS_SIZE_TREE): Pass proper types to size_binop.
	* fold-const.c (int_const_binop): Refine when size_int is called.
	(fold_convert): Likewise.
	(size_int_wide): Rework to take KIND as arg, only take low order
	bits, handle new sizetype_tab datatype, and chain entries in
	size_table.
	(size_int_type_wide): New function.
	(size_binop): Validate types of arguments.
	(ssize_binop): Deleted.
	(size_diffop): New function.
	(extract_muldiv): Only fold division into multiplication for sizetypes.
	* function.c (assign_parms): Use size_diffop and make sure
	VAR field is of ssizetype; also pass proper type to size_binop.
	(locate_and_pad_parm, pad_to_arg_alignment): Likewise.
	(round_down): Deleted from here.
	* store-layout.c (sizetype_tab): Now an array.
	(sizetype_set, early_root_list): New variables.
	(variable_size): Use size_one_node.
	(round_up): Pass proper type to size_binop.
	(round_down): Moved to here and corrected as above.
	(layout_record): Pass proper arg types to size_binop.
	(layout_type): Likewise.
	If sizetype_set is zero, record the type just laid out.
	(make_unsigned_type): Don't call set_sizetype;
	(make_signed_type): Likewise; also, call fixup_signed_type.
	(initialize_sizetypes): New function.
	(set_sizetype): Make copy of types, set TYPE_IS_SIZETYPE, and
	set name of bitsizetype to "bit_size_type".
	Fix up type of sizes of all types made before call.
	* tm.texi (ROUND_TYPE_SIZE_UNIT): New macro.
	* tree.c (fix_sizetype): Deleted.
	(build_common_tree_nodes): Call initialize_sizetypes.
	(build_common_tree_nodes_2): Don't call fix_sizetype.
	* tree.h (TYPE_IS_SIZETYPE): New macro.
	(initialize_sizetype): New declaration.
	(enum size_type_kind): New type.
	(struct sizetype_tab): Deleted.
	(sizetype_tab): Now array; adjust sizetype macros.
	(size_diffop, size_int_type_wide): New functions.
	(size_int_wide): Change number of args and type; access macros changed.
	(ssize_int, sbitsize_int): New macros.
	* config/i960/i960.h (ROUND_TYPE_SIZE): Use size_int.
	(ROUND_TYPE_SIZE_UNIT): New macro.
	* ch/actions.c (chill_convert_for_assignment): Don't use size_binop
	for things that aren't sizes.
	(expand_varying_length_assignment): Likewise.
	* ch/convert.c (digest_array_tuple, convert): Likewise.
	* ch/typeck.c (build_chill_slice, smash_dummy_type): Likewise.
	(build_chill_slice_with_range): Likewise.
	(build_chill_slice_with_length): Likewise.
	(build_array_from_set): Adjust types for size_binop.
	* ch/expr.c (build_concat_expr, build_chill_repetition_op): Likewise.
	(build_chill_sizeof): Use TYPE_SIZE_UNIT.
	* ch/tree.c (build_string_type): Pass proper type to size_binop.
	* cp/class.c (dfs_build_vtable_offset_vtbl_entries): Don't use
	size_binop on things that are not sizes; ssize_binop deleted.
	Call size_diffop when appropriate.
	(dfs_build_vcall_offset_vtbl_entries): Likewise.
	(build_primary_vtable, build_secondary_vtable): Likewise.
	(dfs_set_offset_for_unshared_vbases, dfs_modify_vtables): Likewise.
	Variable I is HOST_WIDE_INT.
	(get_vfield_offset): Pass proper types to size_binop.
	(size_extra_vtbl_entries, layout_virtual_bases): Likewise.
	(finish_struct_1): Likewise.
	(skip_rtti_stuff): Arg N is now pointer to signed.
	(layout_class_type): Use size_zero_node.
	* cp/cp-tree.h (skip_rtti_stuff): Arg N is pointer to signed.
	* cp/cvt.c (cp_convert_to_pointer): Pass proper types to size_binop.
	* cp/decl.c (complete_arry_type): Pass proper types to size_binop.
	(xref_basetypes): BINFO_OFFSET is sizetype.
	* cp/error.c (dump_expr): Don't use size_binop non-sizes.
	* cp/expr.c (cplus_expand_constant): Pass proper types to size_binop.
	* cp/init.c (construct_virtual_bases): Fix type error.
	(build_vec_delete_1): Pass proper type to size_binop and don't
	fold result.
	* cp/lex.c (cp_make_lang_type): BINFO_OFFSET is sizetype.
	* cp/rtti.c (get_base_offset): Pass proper type to size_binop.
	* cp/search.c (dfs_find_vbases): Fix type error.
	(expand_upcast_fixups): Arg to skip_rtti_stuff is pointer to signed.
	(dfs_get_vbase_types): BINFO_OFFSET is sizetype.
	* cp/tree.c (debug_binfo): Variable N is signed.
	Use HOST_WIDE_INT_PRINT_DEC.
	* cp/typeck.c (comptypes): sizetype is same as equivalent integer type.
	(c_sizeof, c_sizeof_nowarn, expr_sizeof): Use TYPE_SIZE_UNIT,
	size_one_node and size_zero_node.
	(c_alignof): Use size_one_node.
	(build_component_addr): Pass proper types to size_binop.
	(expand_ptrmemfunc_cst): Don't use size_binop on non-sizes.
	* f/com.c (ffecom_arrayref_): Convert args to size_binop to proper
	type.
	(ffecom_tree_canonize_ptr_): Don't use size_binop for non-sizes.
	(ffecom_tree_canonize_ref_): Likewise.
	(type_for_mode): Handle TImode.
	* f/ste.c (ffeste_io_dofio_, ffeste_io_douio_): Use TYPE_SIZE_UNIT.
	(ffeste_io_ciclist_): Likewise.
	* java/expr.c (build_java_ret): Pass proper type to size_binop.

From-SVN: r32225
2000-02-27 16:39:40 -05:00
Richard Kenner
06ceef4e7b c-common.c (decl_attributes): Set DECL_SIZE_UNIT.
* c-common.c (decl_attributes): Set DECL_SIZE_UNIT.
	* c-decl.c (duplicate_decls, finish_enum): Likewise.
	(finish_decl): Remove -Wlarger-than code from here.
	* flags.h (id_clash_len): Now int.
	(larger_than_size): Now HOST_WIDE_INT.
	* fold-const.c (size_int_wide): No more HIGH parm; NUMBER is signed.
	Clean up checking to see if in table.
	(make_bit_field_ref): Remove extra parm to bitsize_int.
	* ggc-common.c (ggc_mark_tree_children): Mark DECL_SIZE_UNIT.
	* print-tree.c (print_node): Print DECL_SIZE_UNIT and TYPE_SIZE_UNIT.
	* stmt.c (expand_decl): Use DECL_SIZE_UNIT for stack checking size
	and for computing size of decl.
	* stor-layout.c (layout_decl): Set DECL_SIZE_UNIT.
	Move -Wlarger-than code to here.
	(layout_record): Remove extra arg to bitsize_int.
	Set TYPE_BINFO_SIZE_UNIT.
	(layout_union): Remove extra arg to bitsize_int.
	Use proper type for size of QUAL_UNION.
	(layout_type): Remove extra arg to bitsize_int.
	* toplev.c (id_clash_len): Now int.
	(larger_than_size): Now HOST_WIDE_INT.
	(decode_W_option): Clean up id-clash and larger-than- cases.
	* tree.c (get_identifier, maybe_get_identifier): Remove unneeded casts.
	(expr_align, case FUNCTION_DECL): DECL_ALIGN is not defined.
	* tree.h (BINFO_SIZE_UNIT, TYPE_BINFO_SIZE_UNIT, DECL_SIZE_UNIT): New.
	(struct tree_decl): New field size_unit.
	(size_int_wide): No HIGH operand; NUMBER is now signed.
	(size_int_2): Deleted.
	(size_int, bitsize_int): Don't use it and rework args.
	* varasm.c (assemble_variable, output_constructor): Use DECL_SIZE_UNIT.
	* ch/decl.c (layout_enum): Set DECL_SIZE_UNIT.
	* ch/satisfy.c (safe_satisfy_decl): Likewise.
	* cp/class.c (build_primary_vtable, layout_vtable_decl): Likewise.
	(avoid_overlap, build_base_field): Likewise.
	(build_base_field, build_base_fields, is_empty_class):
	Test DECL_SIZE with integer_zero.
	(layout_class_type): Set CLASSTYPE_SIZE_UNIT.
	* cp/cp-tree.h (struct lang_type): New field size_unit.
	(CLASSTYPE_SIZE_UNIT): New macro.
	* cp/decl.c (init_decl_processing): Set DECL_SIZE_UNIT.
	(cp_finish_decl): Delete -Wlarger-than processing.
	* cp/optimize.c (remap_decl): Walk DECL_SIZE_UNIT.
	* cp/pt.c (tsubst_decl): Set DECL_SIZE_UNIT.
	* cp/tree.c (make_binfo): binfo vector is one entry longer.
	(walk_tree): Walk DECL_SIZE_UNIT.
	* f/com.c (ffecom_sym_transform): Use DECL_SIZE_UNIT.
	(ffecom_transform_common_, ffecom_transform_equiv_): Likewise.
	(duplicate_decls): Likewise.
	(ffecom_tree_canonize_ptr_): Delete extra arg to bitsize_int.
	(finish_decl): Delete -Wlarger-than processing.
	* java/class.c (build_class_ref, push_super_field): Set DECL_SIZE_UNIT.
	* java/constants.c (build_constants_constructor): Likewise.

From-SVN: r32068
2000-02-19 20:11:00 -05:00
Richard Kenner
729a212576 combine.c (make_extraction, [...]): Avoid warning on mixed-signedness conditionals.
* combine.c (make_extraction, force_to_mode): Avoid warning on
	mixed-signedness conditionals.
	(make_field_assignment, nonzero_bits): Likewise.
	* expmed.c (store_fixed_bit_field): ALIGN arg now unsigned.
	(store_split_bit_field, extract_split_bit_field): Likewise.
	(extract_fixed_bit_field, store_bit_field,
	* expr.c: Change alignment to be unsigned everywhere.
	(move_by_pieces, store_constructor_field, store_constructor):
	Alignment parm is unsigned.
	(emit_block_move, emit_group_load, emit_group_store): Likewise.
	(clear_storage, emit_push_insn, compare_from_rtx): Likewise.
	(do_compare_rtx_and_jump): Likewise.
	(move_by_pieces_ninsns, clear_by_pieces): Likewise.
	Compare align with GET_MODE_ALIGNMENT.
	(expand_expr_unaligned): Pointer to alignment is pointer to unsigned.
	(get_inner_reference): Likewise.
	(copy_blkmode_from_reg, emit_push_insn): Remove unneeded casts.
	(expand_assignment): Local vars for alignment now unsigned.
	(store_constructor, store_field, expand_expr, do_jump): Likewise.
	(do_compare_and_jump): Likewise.
	(store_field): Call new function expr_align.
	* expr.h (emit_block_move, emit_group_load, emit_group_store):
	Alignment arg now unsigned.
	(clear_storage, emit_push_insn, compare_from_rtx): Likewise.
	(do_compare_rtx_and_jump, store_bit_field): Likewise.
	(extract_bit_field): Likewise.
	* fold-const.c (add_double): Add cast to eliminate signedness warning.
	* machmode.h (GET_MODE_ALIGNMENT): Result is unsigned.
	(get_best_mode): Alignment arg is unsigned.
	* rtl.h (move_by_pieces): Likewise.
	* store-layout.c (maximum_field_alignment, set_alignment):
	Now unsigned.
	(layout_decl): Alignment arg is now unsigned.
	Remove unneeded casts.
	(layout_record, layout_union, layout_type): Remove unneeded casts.
	Local alignment variables now unsigned.
	(get_best_mode): Alignment arg now unsigned.
	* tree.c (expr_align): New function.
	* tree.h (expr_align): Likewise.
	(maximum_field_alignment, set_alignment): Now unsigned.
	(get_inner_reference): Alignment argument is now pointer to unsigned.
	* varasm.c (assemble_variable): Add cast to eliminate warning.

From-SVN: r31904
2000-02-10 17:05:40 -05:00
Kaveh R. Ghazi
962f1324bd calls.c (emit_call_1): Mark parameter with ATTRIBUTE_UNUSED.
* calls.c (emit_call_1): Mark parameter with ATTRIBUTE_UNUSED.

        * except.c (eh_regs): Likewise.

        * final.c (output_operand): Likewise.

        * fold-const.c (target_isinf, target_isnan): Likewise.

From-SVN: r31490
2000-01-18 22:45:16 +00:00
Kaveh R. Ghazi
711d877c9e eh-common.h: PROTO -> PARAMS.
* eh-common.h: PROTO -> PARAMS.
	* emit-rtl.c: Likewise.
	* errors.c: Likewise.
	* errors.h: Likewise.
	* except.c: Likewise.
	* except.h: Likewise.
	* explow.c: Likewise.
	* expmed.c: Likewise.
	* expr.c: Likewise.
	* expr.h: Likewise.
	* final.c: Likewise.
	* fix-header.c: Likewise.
	* flow.c: Likewise.
	* fold-const.c: Likewise.
	* function.c: Likewise.
	* function.h: Likewise.
	* gcc.c: Likewise.
	* gcov-io.h: Likewise.
	* gcov.c: Likewise.
	* gcse.c: Likewise.

From-SVN: r31419
2000-01-14 17:14:43 +00:00
Kaveh R. Ghazi
7bdb32b97e Makefile.in (optabs.o): Depend on real.h
* Makefile.in (optabs.o): Depend on real.h
	(resource.o): Depend on insn-attr.h

	* builtins.c (result_vector): Wrap prototype in macro conditions
	governing definition and use.

	* c-common.c: Include tm_p.h.

	* c-lex.c: Likewise.

	* elfos.h: Constify a char*.

	* final.c (align_fuzz): Wrap prototype in macro HAVE_ATTR_length.
	(get_attr_length, shorten_branches, profile_after_prologue): Mark
	parameter with ATTRIBUTE_UNUSED.

	* fold-const.c (exact_real_inverse): Wrap variable `i' in
	CHECK_FLOAT_VALUE.

	* haifa-sched.c (schedule_insns): Mark parameter with
	ATTRIBUTE_UNUSED.

	* optabs.c: Include real.h.

	* real.h (ereal_atof): Add prototype arguments.

	* resource.c: Include insn-attr.h.

	* sdbout.c (sdbout_queue_anonymous_type,
	sdbout_dequeue_anonymous_types): Wrap in macro
	SDB_ALLOW_FORWARD_REFERENCES.
	(sdbout_init, sdbout_start_new_source_file): Mark parameter with
	ATTRIBUTE_UNUSED.

	* stmt.c (expand_return): Wrap variable `op0' in macro HAVE_return.

	* stupid.c: Include tm_p.h.

	* tree.c (real_value_from_int_cst): Mark parameter with
	ATTRIBUTE_UNUSED.

cp:
	* lex.c: Include tm_p.h.

ch:
	* lex.c: Include tm_p.h.

From-SVN: r31308
2000-01-10 23:48:03 +00:00
John Wehle
cb0a34c469 fold-const.c (lshift_double, [...]): Handle shifting by 2 * HOST_BITS_PER_WIDE_INT correctly.
* fold-const.c (lshift_double, rshift_double): Handle
	shifting by 2 * HOST_BITS_PER_WIDE_INT correctly.

From-SVN: r31289
2000-01-09 06:03:45 +00:00
Matt Austern
a47ce296b7 fold-const.c (real_hex_to_f): Remove duplicate declaration of expon.
* fold-const.c (real_hex_to_f): Remove duplicate declaration of
	expon.

From-SVN: r31273
2000-01-07 16:37:04 +00:00
J"orn Rennecke
c565a6b7cb * fold-const.c (make_range): Don't try to reverse an unbounded range.
From-SVN: r31197
2000-01-04 01:36:51 -07:00
Kaveh R. Ghazi
9d0878fd43 cse.c (free_element, [...]): Remove unused prototypes.
* cse.c (free_element, get_element): Remove unused prototypes.

	* fold-const.c (extract_muldiv): Initialize variables `op0' and
	`op1'.

	* jump.c (invert_exp): Add explicit braces to avoid ambiguous
	`else' clauses.

From-SVN: r31123
1999-12-29 21:18:46 +00:00
Martin v. Löwis
7114581090 fold-const.c (operand_equal_p): Use memcmp to compare string constants.
* fold-const.c (operand_equal_p): Use memcmp to compare string
	constants.

From-SVN: r31097
1999-12-27 11:35:07 +00:00
Richard Kenner
1d691c5344 * fold-const.c (fold_truthop): Properly check for FP RHS.
From-SVN: r31091
1999-12-26 07:43:28 -05:00
Jeffrey A Law
f0bd6b8ed8 fold-const.c (real_hex_to_f): Remove unused "isldouble" variable.
* fold-const.c (real_hex_to_f): Remove unused "isldouble" variable.
        Remove redundant initialization of "frexpon" and "expon".

From-SVN: r31043
1999-12-20 23:02:59 -07:00
Richard Kenner
f49a78fcf7 Fix typo in last change
From-SVN: r31019
1999-12-18 21:01:51 -05:00
Richard Kenner
d4b60170fd alias.c: Minor reformatting.
* alias.c: Minor reformatting.
	* flow.c: Likewise.
	* regs.h: Likewise.
	* stor-layout.c: Likewise.
	* fold-const.c: Likewise.
 	(OVERFLOW_SUM_SIGN): Renamed from overflow_sum_sign.
	(struct cb_args, const_binop_1, const_binop): Pass type of arg,
	not arg itself.
	(size_int_wide): Cache nodes even if garbage collecting.
	(twoval_comparison_p): Reenable SAVE_EXPR case if operand
	of SAVE_EXPR has no side effects.
	* cse.c: Move a comment.
	* tree.c: Minor reformatting.
	(int_size_in_bytes): Return -1 if constant overflows.
	* reload.c (combine_reloads): Do nothing if no output reload

From-SVN: r31017
1999-12-18 16:33:23 -05:00
Richard Kenner
5826cacf19 fold-const.c (optimize_bit_field_compare): Only use one mode for both RHS and LHS in non-constant case.
* fold-const.c (optimize_bit_field_compare): Only use one mode
	for both RHS and LHS in non-constant case.

From-SVN: r30800
1999-12-06 12:28:18 -05:00
Richard Kenner
f9011d0459 Install proper change
From-SVN: r30715
1999-11-29 18:02:14 -05:00
Richard Kenner
59adecfa8c fold-const.c (extract_muldiv, [...]): Reverse operation if C is negative.
* fold-const.c (extract_muldiv, case {MIN,MAX}_EXPR): Reverse
	operation if C is negative.
	(extract_muldiv, case SAVE_EXPR): Supresss if arg has side effects.
	(extract_muldiv, case {PLUS,MINUS}_EXPR): Don't apply distributive
	law for some divisions if constant is negative and change other
	divisions to the opposite rounding.

From-SVN: r30714
1999-11-29 17:56:39 -05:00
Bernd Schmidt
b901ec947a Delete unused vars.
From-SVN: r30706
1999-11-29 17:35:07 +00:00
Bernd Schmidt
7762d54ea8 Add missing return types
From-SVN: r30705
1999-11-29 14:48:30 +00:00
Richard Kenner
1baa375fea fold-const.c (negate_expr, [...]): New.
* fold-const.c (negate_expr, associate_trees, extract_muldiv): New.
	(split_tree): Completely rework to make more general.
	(make_range, fold): Call negate_expr.
	(fold, case NEGATE_EXPR): Simplify -(a-b) is -ffast-math.
	(fold, associate): Call new split_tree and associate_trees.
	(fold, case MULT_EXPR, case *_{DIV,MOD}_EXPR): Call extract_muldiv.

From-SVN: r30673
1999-11-27 08:50:13 -05:00
Richard Kenner
14a774a9d2 [multiple changes]
Fri Oct 29 15:25:07 1999  Arnaud Charlet  <charlet@ACT-Europe.FR>

	* gcov.c (DIR_SEPARATOR): Provide default.
	(output_data): Add test for MS-DOS format absolute filename.
	(fancy_abort): Correct program name.
	(open_files): Open all files in binary mode.
	* libgcc2.c (__bb_exit_func): Likewise.

	* profile.c (init_branch_prob): Specify binary when opening files.

	* flags.h (flag_unwind_tables): New decl.
	* toplev.c (flag_unwind_table): New definition.
	(f_options): Add -funwind-tables.
	(decode_g_option): Clarify warning when unknown -g option is given.
	(rest_of_compilation): If inside an inlined external function,
	pretend we are just being declared.

	* dwarf2out.c (dwarf2out_do_frame): Check -funwind_tables.
	(dwarf2out_frame_finish): Likewise.

Fri Oct 29 06:32:44 1999  Geoffrey Keating  <geoffk@cygnus.com>

	* flow.c (propagate_block): When the last reference to a label
 	before an ADDR_VEC is deleted because the reference is a dead
 	store, delete the ADDR_VEC.

Fri Oct 29 07:44:26 1999  Vasco Pedro  <vp@di.fct.unl.pt>

	* fold-const.c (merge_ranges): In not in0, but in1, handle
	upper bounds equal like subset case.

Thu Oct 28 19:22:24 1999  Douglas Rupp <rupp@gnat.com>

	* dbxout.c (dbxout_parms): Generate a second stabs line for parameters
	passed in a register but moved to the stack.

Thu Oct 28 19:12:57 1999  Sam Tardieu  <tardieu@act-europe.fr>

	* gcc.c (pass_exit_codes, greatest_status): New variables.
	(struct option_map): Add entry for "--pass-exit-codes".
	(execute): Update greatest_status if error.
	(display_help): Add documentation for -pass-exit-codes.
	(process_command): Handle -pass-exit-codes.
	(main): Look at pass_exit_codes and greatest_status on call to exit.

Thu Oct 28 18:06:50 1999  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* reload.c (find_reloads): Refine test for no input reload
	case to not includes reloads emitted after insn.

	* function.c (find_temp_slots_from_address): Handle sum involving
	a register that points to a temp slot.
	(update_temp_slot_address): Make recursive call if both old and
	new are PLUS with a common operand.
	* calls.c (expand_call): Mark temp slot for result as having
	address taken.

	* rtlanal.c (reg_referenced_p, case IF_THEN_ELSE): New case.

	* gcc.c (process_command): Add standard_exec_prefix with "GCC"
	component as well as "BINUTILS".

	* integrate.h (copy_rtx_and_substitute): New arg, FOR_LHS.
	* integrate.c (copy_rtx_and_substitute): Likewise.
	(expand_inline_function, integrate_parm_decls, integrate_decl_tree):
	All callers changed.
	* unroll.c (inital_reg_note_copy, copy_loop_body): Likewise.

	* dbxout.c (dbxout_type, case INTEGER_TYPE_NODE): If can use
	gdb extensions, write size of type; also be more consistent
	in using references when this is a subtype.

	* pa.md (extv, extzv, insv): Use define_expand to reject constant
	that is out of range.

	* loop.c (unknown_constant_address_altered): New variable.
	(prescan_loop): Initialize it.
	(note_addr_stored): Set it for RTX_UNCHANGING_P MEM.
	(invariant_p, case MEM): Remove handling for volatile and readony;
	check new variable if readonly.
	(check_dbra_loop): Chdeck unknown_constant_address_altered.

	* cse.c (canon_hash, case MEM): Do not record if BLKmode.
	(addr_affects_sp_p): Removed from note_mem_written and only
	define #ifdef AUTO_INC_DEC.

	* alpha.c (input_operand, case ADDRESSOF): Treat as REG.

	* regclass.c (record_reg_classes): Properly handle register move
	directions.

	* varasm.c (initializer_constant_valid_p, case MINUS_EXPR):
	Don't think valid if both operands are invalid.
	(struct constant_descriptor): New field RTL.
	(mark_const_hash_entry): Mark it.
	(record_constant{,_rtx}): Initialize it.
	(output_constant_def): Allocate RTL in permanent obstack and
	save in table.
	({record,compare}_constant_1): Modes must match for
	CONSTRUCTOR of ARRAY_TYPE.

	* c-common.h (initializer_constant_valid_p): Delete decl from here.
	* output.h (initializer_constant_valid_p): Move decl to here.
	* c-common.c (initializer_constant_valid_p): Delete function from here.
	* varasm.c (initializer_constant_valid_p): Move function to here.

	* tree.h (STRIP_SIGN_NOPS): New macro.
	* fold-const.c (optimize_minmax_comparison): New function.
	(invert_truthvalue, case WITH_RECORD_EXPR): New case.
	(fold): Use STRIP_SIGN_NOPS instead of STRIP_TYPE_NOPS.
	(fold, case EQ_EXPR): Call optimize_minmax_comparison and add
	cases with ABS_EXPR, NEGATE_EXPR, PLUS_EXPR, MINUS_EXPR, and
	widening conversions.
	(fold, case LE_EXPR): Rework changing unsigned to signed comparisons
	to look at size of mode, not precision of type; also add missing cases.
	(optimize_bit_field_compare, decode_field_reference): Don't try to
	optimize COMPONENT_REF of a PLACEHOLDER_EXPR.

	* dwarf2out.c (ctype.h): Include.
	(dwarf2out_set_demangle_name_func): New function.
	(size_of_line_info): Deleted.
	(output_line_info): Compute size of line info table from difference
	of labels.
	(base_type_die, add_name_attribute): Call demangle function, if any.
	(field_byte_offset): Use bits per word for variable length fields.
	(gen_array_type_die): Add array name.
	(gen_subprogram_die): Ignore DECL_INLINE if -fno-inline.
	(dwarf2out_add_library_unit_info): New function.

	* explow.c (set_stack_check_libfunc): New function.
	(stack_check_libfunc): New static variable.
	(probe_stack_range): Allow front-end to set up a libfunc to call.

	* combine.c (simplify_comparison): When making comparison in wider
	mode, check for having commuted an AND and a SUBREG.
	(contains_muldiv): New function.
	(try_combine): Call it when dividing a PARALLEL.
	(simplify_rtx, case TRUNCATE): Don't remove for umulsi3_highpart.
	(simplify_comparison, case ASHIFTRT): Recognize sign-extension of
	a PLUS.
	(record_value_for_reg): If TEM is a binary operation with two CLOBBERs,
	use one of the CLOBBERs instead.
	(if_then_else_cond): If comparing against zero, just return thing
	being compared.

	* optabs.c (expand_abs): If machine has MAX, ABS (x) is MAX (x, -x).
	Don't generate shifts and subtract if have conditional arithmetic.

	* rtl.h (delete_barrier): New declaration.
	* jump.c (jump_optimize): Set up to handle conditional call.
	In conditional arithmetic case, handle CALL_INSN followed by a BARRIER.
	(delete_barrier): New function.

	* rtl.c (read_rtx): Call fatal if bad RTL code; check for bad mode.

	* recog.c (nonmemory_operand): Accept ADDRESSOF.

	* tree.c (build_type_attribute_variant): Push to obstack of
	ttype around type_hash_canon call.

	* expr.c (placeholder_list): Move decl to file scope.
	(expand_expr): Don't force access to volatile just because its
	address is taken.
	If ignoring reference operations, just expand the operands.
	(expand_expr, case COMPONENT_REF): Propagate
	EXPAND_CONST_ADDRESS to recursive call when expanding inner.
	Refine test for using bitfield operations vs pointer punning.
	(expand_expr, case CONVERT_EXPR): If converting to
	BLKmode UNION_TYPE from BLKmode, just return inner object.
	Use proper mode in store_field call.
	Properly set sizes of object to store and total size in store_field
	call for convert to union.
	(expand_expr, case ARRAY_REF): If OP0 is in a register, put it in
	memory (like for ADDR_EXPR).  Also, don't put constant in register if
	we'll want it in memory.
	(readonly_fields_p): New function.
	(expand_expr, case INDIRECT_REF): Call it if LHS.
	(expand_assignment): Handle a RESULT_DECL where
	DECL_RTL is a PARALLEL.
	(do_jump, case WITH_RECORD_EXPR): New case.
	(get_inner_reference): Always go inside a CONVERT_EXPR
	and NOP_EXPR if both modes are the same.
	(store_field): Use bitfield operations if size of bitsize is not same
	as size of RHS's type.
	Check for bitpos not a multiple of alignment in BLKmode case.
	Do block move in largest possible alignment.
	(store_constructor): Set BITSIZE to -1 for variable size and properly
 	in case of array of BLKmode.
	(expand_expr_unaligned): New function.
	(do_compare_and_jump): Call it.

	* mips/iris5.h (SWITCHES_NEED_SPACES): New macro.
	* collect2.c (main): Only allow -ofoo if SWITCHES_NEED_SPACES
	does not include 'o'.

	* function.c (instantiate_virtual_regs_1, case SET): Handle case where
	both SET_DEST and SET_SRC reference a virtual register.
	(gen_mem_addressof): Copy RTX_UNCHANGING_P from new REG to old REG.

	* integrate.c (expand_inline_function): Handle case of setting
	virtual stack vars register (from built in setjmp); when parameter
	lives in memory, expand virtual_{stack_vars,incoming_args}_rtx early.
	(subst_constant): Add new parm, MEMONLY.
	(expand_inline_function, integrate_parm_decls): Pass new parm.
	(integrate_decl_tree): Likewise.
	(copy_rtx_and_substitute, case MEM): Do copy RTX_UNCHANGING_P.
	(try_constants): Call subst_constants twice, with MEMONLY 0 and 1.
	(copy_rtx_and_substitute, case SET): Add explicit calls to
	copy_rtx_and_substitute for both sides.

	* stmt.c (expand_asm_operands): Don't use TREE_STRING_LENGTH for
	constraints.
	(pushcase{,_range}): Convert to NOMINAL_TYPE after checking for
	within INDEX_TYPE, instead of before.
	(fixup_gotos): Use f->target_rtl, not the next insn,
	since latter may be from a later fixup.
	(expand_value_return): Correctly convert VAL when promoting function
	return; support RETURN_REG being a PARALLEL.
	(expand_return): When checking for result in regs and having
	cleanup, consider PARALLEL in DECL_RTL as being in regs.

From-SVN: r30299
1999-10-31 20:11:22 -05:00
Jeffrey A Law
0d19c2a139 fold-const.c (fold): Fix thinko when optimizing comparisons against -0.0.
* fold-const.c (fold): Fix thinko when optimizing comparisons
        against -0.0.

From-SVN: r30282
1999-10-30 22:22:46 -06:00
Jim Kingdon
a36335da46 * fold-const.c (fold): Fix comment.
From-SVN: r30174
1999-10-25 22:27:50 -06:00
Alasdair Baird
2af3e5fb95 * fold-const.c (fold): Fix thinko in x+(-0) -> x transformation.
From-SVN: r30077
1999-10-19 01:26:59 -06:00
Jan Hubicka
ccc5fd95b2 fold-const.c (fold): Convert (or (not arg0) (not arg1)) to (not (and (arg0) (arg1))).
* fold-const.c (fold): Convert (or (not arg0) (not arg1))
        to (not (and (arg0) (arg1))). Similary for and.

From-SVN: r30001
1999-10-14 23:46:35 -06:00
Jan Hubicka
79e8185c9c fold-const.c (fold): Move bit_rotate code to the EXPR_PLUS case, falltrought to assocate code.
* fold-const.c (fold): Move bit_rotate code to the EXPR_PLUS case,
        falltrought to assocate code.
        Convert XOR to OR in code like (a&c1)^(a&c2) where c1 and c2 don't have
        bits in common.

        * combine.c (simplify_logical): Convert XOR to IOR if operands have
        no bits in common; remove XOR to ROTATE conversion.

From-SVN: r29998
1999-10-14 22:50:09 -06:00
Jeffrey A Law
104140890a fold-const.c (fold): Handle more simplifications allowed by IEEE.
* fold-const.c (fold): Handle more simplifications allowed by IEEE.

Co-Authored-By: Sylvian Pion <Sylvain.Pion@sophia.inria.fr>

From-SVN: r29994
1999-10-14 19:40:28 -06:00
Jeffrey A Law
03e0a65f6e * fold-const.c (fold): Detect rotates built from BIT_XOR_EXPRs.
From-SVN: r29966
1999-10-14 02:54:16 -06:00
Jeffrey A Law
8d02813512 Revert this change. Gavin's patch to operand_equal_p is a better fix.
* fold-const.c (fold_range_test): Do not try to fold the range
         test if the rhs or lhs has side effects.

From-SVN: r29526
1999-09-20 11:12:03 -06:00
Bernd Schmidt
6baf1cc8f8 Make it possible to prototype port-specific functions (and convert i386 to use this)
From-SVN: r29514
1999-09-20 10:00:03 +00:00
Gavin Romig-Koch
05ca599071 * fold-const.c (operand_equal_p): Pay attention to side effects.
From-SVN: r29483
1999-09-17 19:06:50 +00:00
Kaveh R. Ghazi
92a438d13c system.h (CTYPE_CONV, [...]): New macros.
* system.h (CTYPE_CONV, TOUPPER, TOLOWER): New macros.  Use
	CTYPE_CONV in all ctype macros.

	* cccp.c (initialize_char_syntax): Use uppercase ctype macro
	from system.h.

	* cexp.y (initialize_random_junk): Likewise.

	* c4x.c (c4x_interrupt_function_p, c4x_handle_pragma): Likewise.

	* i370.c (handle_pragma): Likewise.

	* i370.h (ASM_OUTPUT_LABELREF, ASM_OUTPUT_ASCII): Likewise.

	* v850.c (override_options): Likewise.

	* doprint.c (_doprnt): Likewise.

	* fixinc/fixincl.c (main, quoted_file_exists, extract_quoted_files):
	Likewise.

	* fixinc/server.c (load_data): Likewise.

	* fold-const.c (real_hex_to_f): Likewise.

	* genattr.c (write_upcase, gen_attr): Likewise.

	* genattrtab.c (convert_const_symbol_ref, evaluate_eq_attr,
	write_upcase): Likewise.

	* genemit.c (print_code): Likewise.

	* genopinit.c (gen_insn): Likewise.

	* genpeep.c (print_code): Likewise.

	* genrecog.c (print_code): Likewise.

	* optabs.c (init_libfuncs): Likewise.

ch:

	* lex.c (maybe_downcase, getlc, handle_generic_pragma,
	check_newline): Likewise.

f:

	* bad.c (ffebad_finish): Likewise.

	* fini.c (main): Likewise.

	* intrin.c (ffeintrin_init_0): Likewise.

	* lex.c (ffelex_hash_): Likewise.

	* src.c (ffesrc_init_1): Likewise.

From-SVN: r29463
1999-09-16 22:20:44 +00:00
Jeff Law
c5c7673583 Merge in gcc2-ss-010999
From-SVN: r29150
1999-09-06 23:49:18 -06:00
Richard Henderson
a3770a8130 Makefile.in (ggc-simple.o): Depend on varray.h.
* Makefile.in (ggc-simple.o): Depend on varray.h.
	(rtl.o): Depend on ggc.h.
	(genattrtab.o): Depend on ggc.h.
	(print-tree.o): Likewise.
	(fold-const.o): Likewise.
	* emit-rtl.c (sequence_element_free_list): Remove, and all references.
	(make_insn_raw): Don't cache insns when GC'ing.
	(emit_insn_before): Likewise.
	(emit_insn_after): Likewise.
	(emit_insn): Likewise.
	(start_sequence): Use xmalloc to allocate the sequence_stack.
	(end_sequence): Add free to free it.
	(gen_sequence): Don't cache insns when GC'ing.
	(clear_emit_caches): Don't use sequence_element_free_list.
	(init_emit): Use xcalloc, not xmalloc+bzero.
	* fold-const.c (size_int_wide): Kill the cache, when GC'ing.
	* function.c (pop_function_context_from): Use free to free the
	fixup_var_refs_queue.
	(put_reg_into_stack): Allocate it with xmalloc.
	* genattrtab.c: Include ggc.h.
	(operate_exp): Don't use obstack_free when GC'ing.
	(simplify_cond): Likewise.
	(simplify_text_exp): Likewise.
	(optimize_attrs): Likewise.
	* gengentrtl.c (gendef): Use ggc_alloc_rtx to allocate RTL, when
	GC'ing.
	(gencode): Generate a #include for ggc.h.
	* ggc-callbacks.c (ggc_p): Define it to zero.
	* ggc-none.c (ggc_p): Likewise.
	* ggc-simple.c: Include varray.h.
	(ggc_mark_tree_varray): New function.
	(ggc_add_tree_varray_root): Likewise.
	(ggc_mark_tree_varray_ptr): Likewise.
	* ggc.h (ggc_p): Declare.
	(varray_head_tag): Likewise.
	(ggc_add_tree_varray_root): Declare.
	* print-tree.c (print_node): Don't check for TREE_PERMANENT
	inconsistencies when GC'ing.
	* rtl.c: Include ggc.h.
	(rtvec_alloc): Use ggc_alloc_rtvec when GC'ing.
	(rtx_alloc): Use ggc_alloc_rtx when GC'ing.
	(rtx_free): Don't call obstack_free when GC'ing.
	* toplev.c (rest_of_compilation): Call ggc_collect after every
	pass, if GC'ing.
	* tree.c (push_obstacks): Do nothing, if GC'ing.
	(pop_obstacks_nochange): Likewise.
	(pop_obstacks): Likewise.
	(make_node): Use ggc_alloc_tree when GC'ing.
	(copy_node): Likewise.
	(get_identifier): Use ggc_alloc_string when GC'ing.
	(build_string): Likewise.
	(make_tree_vec): Use ggc_alloc_tree when GC'ing.
	(tree_cons): Likewise.
	(build1): Likewise.
	(type_hash_canon): Don't call obstack_free when GC'ing.

Co-Authored-By: Bernd Schmidt <bernds@cygnus.co.uk>
Co-Authored-By: Mark Mitchell <mark@codesourcery.com>

From-SVN: r29125
1999-09-05 16:08:20 +00:00
Jeffrey A Law
a8c6125952 fold-const.c (fold_range_test): Do not try to fold the range test if the rhs or lhs has side effects.
* fold-const.c (fold_range_test): Do not try to fold the range
	test if the rhs or lhs has side effects.

From-SVN: r29058
1999-09-02 03:37:20 -06:00
Zack Weinberg
e89a9554e3 c-typeck.c (c_expand_start_case): Return immediately if exp is an ERROR_MARK.
1999-08-27 00:27 -0700  Zack Weinberg  <zack@bitmover.com>

	* c-typeck.c (c_expand_start_case): Return immediately if exp
	is an ERROR_MARK.
	* fold-const.c (operand_equal_p): Return immediately if arg1
	or arg0 are ERROR_MARKs.
	* stor-layout.c (layout_type [case RECORD_TYPE]): Ignore
	fields of type ERROR_MARK when calculating if the record can
	go in a register.

From-SVN: r28923
1999-08-27 07:37:16 +00:00
Richard Henderson
abe4f192b7 fold-const.c (fold): Reassociate (+ (+ (* a b) c) (* d e)) as (+ (+ (* a b) (* d e)) c).
* fold-const.c (fold): Reassociate (+ (+ (* a b) c) (* d e))
        as (+ (+ (* a b) (* d e)) c).  Factor a common power-of-two
        multiplicand out of (+ (* a b) (* c d)).

From-SVN: r28829
1999-08-24 15:37:34 -07:00
Mark Mitchell
9c922ec705 Revert this change:
* fold-const.c (fold): STRIP_NOPS when deciding whether or not
	something is a candidate for optimize_bit_field_compare.

From-SVN: r27318
1999-06-02 15:42:19 +00:00
Andreas Schwab
2bd21a021e fold-const.c (fold_truthop): Make the field reference unsigned when converting a single bit compare.
h
        * fold-const.c (fold_truthop): Make the field reference unsigned
        when converting a single bit compare.

From-SVN: r27202
1999-05-26 20:33:58 -06:00
Mark Mitchell
b7f2c1fc1b fold-const.c (fold): STRIP_NOPS when deciding whether or not something is a candidate for...
* fold-const.c (fold): STRIP_NOPS when deciding whether or not
	something is a candidate for optimize_bit_field_compare.

From-SVN: r27169
1999-05-26 09:50:08 +00:00
Andreas Schwab
71a874cd5e fold-const.c (fold_truthop): When converting a one-bit comparison don't sign extend the constant.
* fold-const.c (fold_truthop): When converting a one-bit
        comparison don't sign extend the constant.

From-SVN: r26962
1999-05-16 19:24:24 -06:00
Toshiyasu Morita
07444f1d90 fold-const.c (make_range): Always initialize arg0 and arg1.
* fold-const.c (make_range): Always initialize arg0 and arg1.
        (fold): Simlarly for alt0 and alt1.
        * function.c (fixup_var_refs_insns): Initialize insn_list.
        (instantiate_virtual_regs_1): Initialize offset.
        * optabs.c (expand_binop): Initialize carry_in, carry_out, op0_xhigh
        and op1_xhigh.
        * stmt.c (expand_end_case): Initialize minval and maxval.

From-SVN: r26632
1999-04-25 18:15:54 -06:00
Charles M. Hannum
11a86c5688 fold-const.c (fold_truthop): Optimize bitfield references with different masks as long as their size and bit...
* fold-const.c (fold_truthop): Optimize bitfield references with
        different masks as long as their size and bit position are the same.

From-SVN: r26006
1999-03-26 15:46:33 -07:00
Charles M. Hannum
bd910dcf7a fold-const.c (fold_truthop): Build a type for both the lhs and rhs and use it appropriately.
* fold-const.c (fold_truthop): Build a type for both the lhs and
        rhs and use it appropriately.

From-SVN: r26005
1999-03-26 15:23:02 -07:00
Charles M. Hannum
97ea717682 fold-const.c (fold_truthop): Mask the lhs and rhs after merging adjacent bitfield references.
* fold-const.c (fold_truthop): Mask the lhs and rhs after merging
        adjacent bitfield references.

From-SVN: r26004
1999-03-26 14:52:14 -07:00
Charles M. Hannum
1424137450 fold-const.c (fold_truthop): Verify that the lhs and rhs are in the same bit position when...
* fold-const.c (fold_truthop): Verify that the lhs and rhs are
       in the same bit position when optimizing bitfield references
       which have the same mask.

From-SVN: r25993
1999-03-25 18:08:54 -07:00
Richard Earnshaw
cc33944a7a fold-const.c (make_range): If orig_type is unset, set it as soon as we know the type.
* fold-const.c (make_range): If orig_type is unset, set it as soon
        as we know the type.  Remove now unnecessary set of orig_type for
        conversions.

Co-Authored-By: Jeffrey A Law <law@cygnus.com>

From-SVN: r25959
1999-03-24 15:48:37 -07:00
Geoff Keating
a9d9c1084d * fold-const.c (fold): Recognise a rotate by an unsigned amount.
From-SVN: r25937
1999-03-23 17:39:44 -07:00
Kaveh R. Ghazi
a4d3481dce fold-const.c (exact_real_inverse): Move variable `float_error' into the scope where it is used.
* fold-const.c (exact_real_inverse): Move variable `float_error'
        into the scope where it is used.
        (const_binop_1): New static function.
        (cb_args): New struct.
        (const_binop): Use them in call to `do_float_handler'.
        (fold_convert_1): New static function.
        (fc_args): New struct.
        (fold_convert): Use them in call to `do_float_handler'.

From-SVN: r25776
1999-03-15 05:30:02 +00:00
Nathan Sidwell
d7b3ea38e0 fold-const.c (range_binop): Take account of the bounded nature of fixed length arithmetic when...
h
	* fold-const.c (range_binop): Take account of the bounded nature
	of fixed length arithmetic when comparing unbounded ranges.

From-SVN: r25146
1999-02-10 17:10:47 -07:00
Zack Weinberg
e45ed4de44 Remove trigraph in comment
From-SVN: r24881
1999-01-27 07:28:14 +00:00
Jeffrey A Law
ab87f8c8d1 Merge in gcc2 snapshot 19980929. See gcc/ChangeLog and gcc/FSFChangeLog for
details.

From-SVN: r24879
1999-01-26 18:43:17 -07:00
Jeffrey A Law
ac4d524db2 fold-const.c (lshift_double): Mark 'prec' arguments as possibly unused.
* fold-const.c (lshift_double): Mark 'prec' arguments as possibly
        unused.

From-SVN: r24830
1999-01-22 18:57:51 -07:00
Ulrich Drepper
6f4d72224e c-common.c (declare_function_name): Declare predefinied variable `__func__'.
* c-common.c (declare_function_name): Declare predefinied variable
        `__func__'.
        * c-decl.c (flag_isoc9x): Set to 1 by default.
        (c_decode_option): Handle -std= option.  Remove -flang-isoc9x.
        (grokdeclarator): Always emit warning about implicit int for ISO C 9x.
        * c-parse.in: Allow constructors in ISO C 9x.
        Rewrite designator list handling.
        Allow [*] parameters.
        Don't warn about comma at end of enum definition for ISO C 9x.
        * cccp.c (c9x): New variable.
        (rest_extension): New variable.
        (print_help): Document new -std= option.
        (main): Recognize -std= option.  Set c9x appropriately.
        (create_definition): Recognize ISO C 9x vararg macros.
        * gcc.c (default_compilers): Adjust specs for -std options.
        (option_map): Add --std.
        (display_help): Document -std.
        * toplev.c (documented_lang_options): Add -std and remove
        -flang-isoc9x.
        * c-lex.c (yylex): Recognize hex FP constants and call REAL_VALUE_ATOF
        or REAL_VALUE_HTOF based on base of the constants.
        * fold-const.c (real_hex_to_f): New function.  Replacement function
        for hex FP conversion if REAL_ARITHMETIC is not defined.
        * real.c (asctoeg): Add handling of hex FP constants.
        * real.h: Define REAL_VALUE_HTOF if necessary using ereal_atof or
        real_hex_to_f.

Co-Authored-By: Richard Henderson <rth@cygnus.com>
Co-Authored-By: Stephen L Moshier <moshier@world.std.com>

From-SVN: r24049
1998-12-01 13:05:17 -08:00
Kaveh R. Ghazi
c84e271261 Warning fixes:
* Makefile.in (gencheck.o): Depend on gansidecl.h.
	* c-common.c (print_char_table): Add missing initializers.
	(scan_char_table): Likewise.
	(time_char_table): Likewise.
	* c-decl.c (c_decode_option): Mark parameter `argc' with
	ATTRIBUTE_UNUSED.
	(declare_parm_level): Mark parameter `definition_flag' with
	ATTRIBUTE_UNUSED.
	* c-lex.c (readescape): Use `(unsigned)1' in shift.
	(yylex): Likewise.  Cast `sizeof' to an (int) when comparing
	against one.
	* calls.c (store_one_arg): Remove unused parameter `fndecl'.  All
	callers changed.
	(emit_call_1): Mark parameters `fndecl' and `funtype' with
	ATTRIBUTE_UNUSED.
	(expand_call): Cast result of MIN() to (unsigned int) when
	comparing against an unsigned value.
	* cccp.c (pcfinclude): Remove unused parameter `limit'.  All
	callers changed.
	(make_definition): Remove unused parameter `op'.  All callers
	changed.
	(create_definition): Cast REST_EXTENSION_LENGTH to (long) when
	comparing against the result of pointer arithmetic.
	* config/mips/mips.h (FUNCTION_ARG_BOUNDARY): Cast to (unsigned)
	when comparing against one.
	* dwarf2out.c (dwarf2out_frame_debug): Cast REGNO() and
 	HARD_FRAME_POINTER_REGNUM to (unsigned) when comparing against
 	one.
	(output_die): Move variable `i' into the scope in which it is
	used.  Change its type to `unsigned'.
	(output_die): Cast the result of `strlen' to (int) when passing it
	to ASM_OUTPUT_ASCII().
	(output_pubnames): Likewise.
	(output_line_info): Likewise.
	* emit-rtl.c (global_rtl): Add missing initializers.
	* explow.c (promote_mode): Mark parameter `for_call' with
	ATTRIBUTE_UNUSED.
	* expmed.c (expand_shift): Cast the result of GET_MODE_BITSIZE to
 	`unsigned HOST_WIDE_INT' when comparing against one.
	(synth_mult): Change type of variable `cost' to int.
	(emit_store_flag): Use `(unsigned HOST_WIDE_INT) 1' in shift.
	* expr.c (copy_blkmode_from_reg): Cast BITS_PER_WORD to (unsigned)
	when comparing against one.
	(get_inner_reference): Change variable `alignment' to unsigned.
	(expand_expr): Cast the result of GET_MODE_ALIGNMENT to (unsigned
	int) when comparing against one.
	(expand_builtin_setjmp): Change type of variable `i' to size_t.
	* fold-const.c (div_and_round_double): Cast BASE to
	(HOST_WIDE_INT) when comparing against one.
	* gencheck.c: Include gansidecl.h.
	(main): Mark parameter `argv' with ATTRIBUTE_UNUSED.
	* optabs.c (gen_cond_trap): Mark parameters `code', `op2' and
	`tcode' with ATTRIBUTE_UNUSED.
	* real.c (edivm): Cast constant value to (unsigned long) in
	expression compared against an unsigned value.
	* stmt.c (expand_return): Cast BITS_PER_WORD to (unsigned) when
	comparing against one.
	(expand_end_case): Cast CASE_VALUES_THRESHOLD to (unsigned int)
	when comparing against one.
	* stor-layout.c (mode_for_size): Cast MAX_FIXED_MODE_SIZE to
	(unsigned int) when comparing against one.  Likewise for
	GET_MODE_BITSIZE.
	(smallest_mode_for_size): Likewise.
	(save_storage_status): Mark parameter `p' with ATTRIBUTE_UNUSED.
	(restore_storage_status): Likewise.
	* toplev.c (debug_args): Add missing initializer.
	(f_options): Spelling correction.  Add missing initializers.
	(documented_lang_options): Likewise.
	(debug_end_source_file): Mark parameter `lineno' with
	ATTRIBUTE_UNUSED.
	* tree.c (valid_machine_attribute): Mark parameters `attr_args',
	`decl' and `type' with ATTRIBUTE_UNUSED.
	* varasm.c (decode_reg_name): Cast `sizeof' expression to (int)
	when comparing against one.
	(assemble_variable): Mark parameter `top_level' with
	ATTRIBUTE_UNUSED.
	(assemble_external_libcall): Mark parameter `fun' with
	ATTRIBUTE_UNUSED.
	(output_constant_pool): Mark parameters `fnname' and `fndecl' with
	ATTRIBUTE_UNUSED.

From-SVN: r23054
1998-10-13 15:25:25 +00:00
Richard Henderson
899f1ed698 fold-const.c (fold): Yet another COND_EXPR bug...
* fold-const.c (fold): Yet another COND_EXPR bug: when folding
        to an ABS expr, convert an unsigned input to signed.

From-SVN: r22503
1998-09-20 05:37:58 -07:00
Jeffrey A Law
c479c2acdf * fold-const.c (fold): Fix another type in COND_EXPR handling code.
From-SVN: r22499
1998-09-20 05:16:12 -06:00
Michael Tiemann
a58bd5080a fold-const.c (fold): Fix typo in COND_EXPR handling code.
* fold-const.c (fold): Fix typo in COND_EXPR handling code.
        (invert_truthvalue): Enable truthvalue inversion for
        floating-point operands if -ffast-math.

From-SVN: r22488
1998-09-19 17:27:02 -06:00
Kaveh R. Ghazi
efe3eb65d1 Makefile.in (cplus-dep.o): Use cplus-dem.c from libiberty.
* Makefile.in (cplus-dep.o): Use cplus-dem.c from libiberty.
        * cplus-dem.c: Delete.
        * Makefile.in (fold-const.o): depend on $(RTL_H).
        * fold-const.c: Include rtl.h to get the prototype for
        `set_identifier_local_value'.
        * loop.c (express_from_1): Remove unused variable `tmp'.
        (combine_givs): cast the first argument of bzero to char *.
        * toplev.c (display_help): Remove unused variable `looking_for_start'.

Co-Authored-By: Jeffrey A Law <law@cygnus.com>

From-SVN: r21785
1998-08-17 05:39:32 -06:00
Jason Merrill
ff59bfe6b2 expr.c (safe_from_p): Change code to ERROR_MARK only when not accessing nodes.
* expr.c (safe_from_p): Change code to ERROR_MARK only when not
	accessing nodes.
	* toplev.c (display_help): Add braces to shut up warnings.
	* fold-const.c (non_lvalue): Don't deal with null pointer
	constants here.
	(fold, case COMPOUND_EXPR): Wrap a constant 0 in a NOP_EXPR.

From-SVN: r21698
1998-08-13 12:12:55 -04:00
Richard Henderson
45f97e2e08 loop.h (struct induction): Add no_const_addval.
* loop.h (struct induction): Add no_const_addval.
        * loop.c (the_movables, reg_address_cost): New variables.
        (init_loop): Init reg_address_cost.
        (loop_optimize): Call end_alias_analysis.
        (scan_loop): Init the_movables.
        (record_giv): Init induction->no_const_addval.
        (basic_induction_var) [PLUS]: Use rtx_equal_p instead of ==.
        [REG]: Rearrange loop search test to catch more cases.
        (general_induction_var): Return success not benefit; take an extra
        argument for that.  Change all callers.
        (simplify_giv_expr) [PLUS]: Always combine invariants.  Use sge_plus.
        [MULT]: Use rtx_equal_p instead of ==.  Combine simple invariants.
        [default]: Search the_movables for additional combinations.
        (sge_plus_constant, sge_plus): New functions.
        (express_from_1): New function.
        (express_from): Always define.  Rewrite using express_from_1.
        (combine_givs_p): Handle more cases.  Ignore address cost.
        (cmp_combine_givs_stats): New function.
        (combine_givs_used_once, combine_givs_benefit_from): New functions.
        (combine_givs): Rewrite to do best-fit combination.
        * fold-const.c (operand_equal_p): Handle RTL_EXPR.
        (fold): Do a complete (A*C)+(B*C) association check.

From-SVN: r21263
1998-07-17 07:46:06 -07:00
Jeff Law
9ec36da574 * Merge from gcc2 June 9, 1998 snapshot. See ChangeLog.13 for
details.

From-SVN: r20808
1998-06-29 15:40:49 -06:00
Mark Mitchell
30d68b865b fold-const.c (make_range): Don't go looking at TREE_OPERANDs of nodes that are not expressions.
* fold-const.c (make_range): Don't go looking at TREE_OPERANDs of
	nodes that are not expressions.

From-SVN: r20728
1998-06-25 17:28:11 +00:00
Andreas Schwab
f0b8d9aab4 c-common.c (truthvalue_conversion): Protect side effects in the expression when splitting a complex value.
* c-common.c (truthvalue_conversion): Protect side effects in the
	expression when splitting a complex value.
	* fold-const.c (fold): Likewise.

From-SVN: r20580
1998-06-19 01:46:50 +00:00
Jeffrey A Law
7d12cee1f1 * fold-const.c (make_range): Do not widen the type of the expression.
From-SVN: r20545
1998-06-17 11:54:27 -06:00
Jeffrey A Law
dbecbbe48a expr.c (check_max_integer_computation_mode): New function.
* expr.c (check_max_integer_computation_mode): New function.
        (expand_expr): Avoid integer computations in modes wider than
        MAX_INTEGER_COMPUTATION_MODE.
        * fold-const.c (fold): Likewise.
        * tree.h (check_max_integer_computation_mode): Declare.
        * tm.texi (MAX_INTEGER_COMPUTATION_MODE): Document it.

From-SVN: r20538
1998-06-17 05:44:02 -06:00
Richard Henderson
77a45a2ea4 fold-const.c (fold): Revert last change.
* fold-const.c (fold): Revert last change.  It breaks constant
        expressions somehow.

From-SVN: r20441
1998-06-12 02:34:00 -07:00
Richard Henderson
ac1fdb22b8 fold-const.c (fold): Even with otherwise constant trees...
* fold-const.c (fold): Even with otherwise constant trees, look for
        opportunities to combine integer constants.

From-SVN: r20392
1998-06-09 15:05:49 -07:00
Kaveh R. Ghazi
83e0821b60 Some fixes for KNR compilers:
* gencheck.c: Remove redundant stdio.h include.  Add a definition
        of xmalloc for when we are forced to link with alloca.o.
        * reload1.c (reload_reg_free_for_value_p): Use `(unsigned)1'
        instead of `1U'.
        * fold-const.c (constant_boolean_node): Make definition static to
        match the prototype.

From-SVN: r20261
1998-06-06 09:25:16 +00:00
Andreas Schwab
df0e526f2d fold-const.c (fold, [...]): When folding VAR++ == CONST or VAR-- == CONST construct a proper mask if...
* fold-const.c (fold, case EQ_EXPR): When folding VAR++ == CONST
        or VAR-- == CONST construct a proper mask if VAR is a bitfield.
        Cope with CONST being out of range for the bitfield.

From-SVN: r20198
1998-06-02 15:53:37 -06:00
Jason Merrill
697073d938 fold-const.c (ssize_binop): New fn.
* fold-const.c (ssize_binop): New fn.
	* tree.h: Declare it.

From-SVN: r19963
1998-05-22 16:58:14 -04:00
Mark Mitchell
f628873f1f fold-const.c (constant_boolean_node): New function.
* fold-const.c (constant_boolean_node): New function.
	(fold): Use it.

From-SVN: r19775
1998-05-15 07:19:38 +00:00
Jeff Law
38e012594e typo typo fixes fixes
From-SVN: r19601
1998-05-06 15:09:07 -06:00
Robert Lipe
10f0ad3d49 toplev.h: New file.
Wed May  6 06:35:38 1998  Robert Lipe  <robertl@dgii.com>
        * toplev.h: New file.   Protypes for functions in toplev.c.
        * tree.h, rtl.h: Deleted protos for functions in toplev.c.
        * c-common.c, c-convert.c, c-decl.c, c-iterate.c, c-lex.c,
        c-parse.in, c-parse.y, c-pragma.c, c-typeck.c, calls.c,
        convert.c, dwarf2out.c, except.c, expr.c, final.c, fold-const.c,
        function.c, hash.c, profile.c, real.c, reg-stack.c, regclass.c,
        reload.c, reload1.c, stmt.c, stor-layout.c, tlink.c, tree.c,
        varasm.c: include it.

From-SVN: r19564
1998-05-06 04:54:01 +00:00
Jeff Law
f5963e6170 * Check in merge from gcc2. See ChangeLog.12 for details.
From-SVN: r19553
1998-05-05 17:18:02 -06:00
Jeffrey A Law
4f242db399 * fold-const.c (fold_convert): Fix typo.
From-SVN: r19409
1998-04-25 10:17:08 -06:00
Richard Henderson
896cced482 tree.h (sizetype_tab[2], [...]): Merge all of these into a single struct, with additional [us]sizetype entries.
* tree.h (sizetype_tab[2], sbitsizetype, ubitsizetype): Merge all
of these into a single struct, with additional [us]sizetype entries.
* stor-layout.c (set_sizetype): Initialize [us]sizetype.
* fold-const.c (size_int_wide): Don't rely on sizetype_tab being
an array.

From-SVN: r18994
1998-04-04 09:46:06 -08:00
Jeff Law
e5e809f419 * Check in merge from gcc2. See ChangeLog.11 and ChangeLog.12
for details.

        * haifa-sched.c: Mirror recent changes from gcc2.

From-SVN: r18984
1998-04-04 06:32:39 -07:00
Jeffrey A Law
4e86caed7d fold-const.c (optimze_bit_field_compare): Initialize rnbitpos, rnbitsize, rnmode and rinner.
* fold-const.c optimze_bit_field_compare): Initialize rnbitpos,
        rnbitsize, rnmode and rinner.
        (make_range): Initialize type.
        (fold): Initialize arg0, arg1 and varop.
        * function.c (instantiate_virtual_regs_1): Initialize offset, regnoi
        and regnor.
        (expand_function_start): Initialize last_ptr.
        * stor-layout.c (layout_record): Initialize desired_align.
        (get_best_mode): Initialize unit.
        * tree.c (copy_node): Initialize length.

From-SVN: r18943
1998-04-01 16:35:51 -07:00
Mark Mitchell
c651e1e085 varasm.c (make_decl_rtl): Update the DECL_ASSEMBLER_NAME for a entity in a local scope.
* varasm.c (make_decl_rtl): Update the DECL_ASSEMBLER_NAME for a
	entity in a local scope.
	* fold-const.c (fold): Call truthvalue_conversion for values which
	are folded to boolean type.

From-SVN: r18929
1998-04-01 13:45:40 +00:00
Philippe De Muyter
ba3ad5e002 fold-const.c (fold): Replace sign-extension of a zero extended value by a single zero extension.
* fold-const.c (fold): Replace sign-extension of a zero extended
        value by a single zero extension.

From-SVN: r18713
1998-03-19 12:27:18 -07:00
Richard Kenner
52de9b6cff fold-const.c (operand_equal_for_comparison_p): See if equal when nop conversions are removed.
Wed Mar 18 13:46:07 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
        * fold-const.c (operand_equal_for_comparison_p): See if equal
        when nop conversions are removed.

From-SVN: r18672
1998-03-18 05:45:28 -08:00
Jeffrey A Law
de153e8290 * fold-const.c (fold_range_test): Always return a value.
From-SVN: r18343
1998-03-01 10:04:14 -07:00
Kaveh R. Ghazi
2fde567ece fold-const.c: Include "system.h" to get stdlib.h and stdio.h.
* fold-const.c: Include "system.h" to get stdlib.h and stdio.h.
        (lshift_double): Add parentheses around + or - inside shift.
        (rshift_double): Likewise.
        (size_int_wide): Explicitly set type of `bit_p' to `int'.
        * Makefile.in (fold-const.o): Depend on system.h.

From-SVN: r18057
1998-02-17 15:43:25 -07:00
Jason Merrill
b7f6588dd2 tree.c (first_rtl_op): New fn.
* tree.c (first_rtl_op): New fn.
	(unsave_expr_now): Use it.
	* print-tree.c (print_node): Likewise.
	* tree.c (has_cleanups): New fn.
	* fold-const.c (fold, case CLEANUP_POINT_EXPR): Use it.  Be more
	conservative about pushing the cleanup point down.
	* tree.h: Declare them.

From-SVN: r18023
1998-02-15 23:52:31 -05:00
Jeffrey A Law
29a820586a varasm.c (output_constant_pool): Bring back 'done' label inside an appropriate #ifdef.
* varasm.c (output_constant_pool): Bring back 'done' label inside
        an appropriate #ifdef.
        * bitmap.c (bitmap_element_allocate): Wrap variable 'i' in an
        appropriate #ifdef.
        (bitmap_copy, bitmap_operation): Likewise.
        * combine.c (combinable_i3pat): Similarly for 'src'.
        * function.c (fixup_var_refs_1): Similarly for 'outerdest'.
        (locate_and_pad_parm): Similarly for 'reg_parm_stack_space'.
        * regclass.c (copy_cost): Similarly for 'secondary_class'.
        * reload.c (make_memloc): Simliarly for 'i'.
        (find_reloads_address_1): Similarly for 'link'.
        * reload1.c (reload): Similarly for 'previous_frame_pointer_needed'.
        (emit_reload_insns): Similarly for 'second_reloadreg'.
        * unroll.c (iteration_info): Similarly for 'v'.
        * caller-save.c (insert_save_restore): Remove unused variable 'i'.
        * calls.c (expand_call): Similarly for 'i'.
        (emit_library_call, emit_library_call_value): Similarly for 'mode'.
        * fold-const.c (strip_compund_expr): Similarly for 'type'.
        * function.c (fixup_var_refs_1): Similarly  for 'width'.
        (fixup_memory_subreg): Similarly for 'saved'.
        (locate_and_pad_parm): Similarly for 'boundary_in_bytes.'
        (setjmp_protect): Similarly for 'sub'.
        (thread_prologue_and_epilogue_insns): Similarly for 'insn'.
        * loop.c (record_giv): Similarly for 'p'.
        (combine_givs): Similarly for 'temp_iv'.
        (indirect_jump_in_function_p): Similarly for 'is_indirect_jump'.
        * recog.c (validate_replace_rtx_1): Similarly for 'width'.
        * tree.c (get_set_constructor_bytes): Similarly for 'vals'.
        * unroll.c (unroll_loop): Similarly for 'copy'.
        (iteration_info): Similarly for 'b'.
        * varasm.c (assemble_string): Similarly for 'i'.
        * i386.h (LEGITIMIZE_ADDRESS): Similarly for 'orig_x'.

From-SVN: r17973
1998-02-13 18:13:58 -07:00
J"orn Rennecke
f8dac6eb3f expr.c (get_inner_reference): Use sbitsizetype for type sizes.
* expr.c (get_inner_reference): Use sbitsizetype for type sizes.
        * fold-const.c (size_int): Replace with
        (size_int_wide).
        (make_bit_field_ref): Use bitsize_int for bit position.
        * stor-layout.c (sizetype): Delete.
        (sizetype_tab, sbitsizetype, ubitsizetype): Declare.
        (layout_record, layout_union, layout_type):
        Use bitsize_int for bit size.
        (set_sizetype): New function.
        (make_signed_type, make_unsigned_type): Use it.
        * c-decl.c (init_decl_processing): Likewise.
        * tree.h (size_int): Don't delcare, #define.
        (size_int_wide, sizetype_tab, sbitsize, ubitsize): Declare.
        (set_sizetype): Declare.
        (bitsize_int, size_int_2, BITS_PER_UNIT_LOG, sizetype, bitsizetype):
        Define.
        * c-typeck.c (c_sizeof, c_sizeof_nowarn, c_size_in_bytes):
        Convert result to sizetype.
        (really_start_incremental_init, push_init_level):
        Set type of constructor_bit_index to sbitsizetype.
        (push_init_level): Use unsigned arithmetic to determine padding.
        (output_init_element): Likewise.

From-SVN: r17577
1998-02-01 04:47:59 -07:00
Kaveh R. Ghazi
1d300e19b6 bitmap.c (bitmap_clear): Ensure `inline' is at the beginning of the declaration.
* bitmap.c (bitmap_clear): Ensure `inline' is at the beginning
        of the declaration.
        * c-decl.c (finish_decl): Use parentheses around && within ||.
        * rtl.c: Include stdlib.h.
        (read_skip_spaces): Add parentheses around assignments used as
        truth values.
        (read_rtx): Initialize list_rtx.
        * cppexp.c (parse_number): Use || when operands are truth values.
        * alias.c (find_base_value): Add default case.
        (memrefs_conflict): Likewise.
        * combine.c (sets_function_arg_p): Likewise.
        * genemit.c (gen_exp): Likewise.
        * local-alloc.c (contains_replace_regs): Likewise.
        * rtlanal.c (jmp_uses_reg_or_mem): Likewise.
        * fold-const.c (fold_convert): Use "&&" for truth values.
        (fold): Add default case.
        * sdbout.c (sdbout_field_types): Fix typo in declaration.
        (sdbout_one_type): Add default case.
        * alpha.c (alpha_sa_mask): Prototype only if OPEN_VMS.
        (some_operand): Add default case.
        (input_operand): Likewise.
        (signed_comparison_operator): Likewise.
        (divmod_operator): Likewise.
        (alpha_set_memflags_1): Likewise.
        * reload1.c (reload_cse_simplify_operands): Ensure function
        always returns a value.
        * scan-decls.c (scan_decls): Likewise.
        * c-lex.c (skip_white_space): Fix typo in declaraion.
        * c-typeck.c (comp_target_types): Add parentheses around assignment
        used as truth value.
        (print_spelling): Likewise.
        (constructor_implicit, constructor_result): Remove unused variables.
        * collect2.c (scan_library): Protect prototype with
        #ifdef SCAN_LIBRARIES.
        * emit-rtl.c (find_line_note): Fix typo in declaration.
        * final.c (asm_insn_count): Protect prototype with
        #ifdef HAVE_ATTR_length.
        * flow.c (find_auto_inc): Protect prototype with #ifdef AUTO_INC_DEC.
        (try_pre_increment_1, try_pre_increment): Likewise.
        * regclass.c (auto_inc_dec_reg_p): Protect prototype with
        #ifdef FORBIDDEN_INC_DEC_CLASSES.  Make return type explicit.
        * gcov-io.h (__store_long, __write_long, __read_long): Fix
        unsigned/signed comparisons.
        * gcov.c (read_files): Remove unused "first_type" variable.
        (scan _for_source_files): Initialize s_ptr.
        (function_summary): Eliminate "%lf" formatting, use %ld for
        longs.
        (output_data): Initialize branch_probs and last_line_num.
        Eliminate "%lf" formatting, use "%ld" for longs.

Co-Authored-By: Jeffrey A Law <law@cygnus.com>

From-SVN: r17158
1997-12-20 04:31:54 -07:00
Richard Henderson
e1ee5cdcbf tree.c (build_range_type): Allow creation of ranges with no maximum.
* tree.c (build_range_type): Allow creation of ranges with no maximum.
	* dbxout.c (dbxout_range_type): Handle missing TYPE_MAX_VALUE.
	* dwarf2out.c (add_subscript_info): Likewise.
	* dwarfout.c (subscript_data_attribute, byte_size_attribute): Likewise.
	* sdbout.c (plain_type_1): Likewise.
	* stmt.c (pushcase_range, all_cases_count, node_has_high_bound):
	Likewise.
	* fold-const.c (int_const_binop, fold_convert, make_range, fold):
	Likewise.

From-SVN: r17142
1997-12-18 16:20:19 -07:00
Jeff Law
b472527b0f Another handful of gcc-2.8 changes (will it ever go out the door?).
See ChangeLog.11 for details.

From-SVN: r17040
1997-12-11 09:26:05 -07:00
Jeff Law
956d69504d Merge from gcc-2.8
From-SVN: r16987
1997-12-06 17:31:01 -07:00
J"orn Rennecke
9f29ca789b * fold-const.c (fold_truthop): Fix bug in last change.
From-SVN: r16473
1997-11-14 00:38:08 +00:00
Paul Eggert
41c9120baf patch from paul eggert to fix -0.0/0.0 confusion that breaks glibc
* real.h (REAL_VALUES_IDENTICAL): New macro.
	* expr.c (is_zeros_p): Don't consider -0.0 to be all zeros.
	* fold-const.c (operand_equal_p): Don't consider -0.0 to be
	identical to 0.0.
	* tree.c (simple_cst_equal): Don't consider -0.0 to have the
	same tree structure as 0.0.
	* varasm.c (immed_real_const_1): Use new REAL_VALUES_IDENTICAL
	macro instead of doing it by hand.

From-SVN: r16472
1997-11-13 16:07:27 -08:00
J"orn Rennecke
5a6b336594 fold-const.c (fold_truthop): When changing a one-bit comparison against zero into a comparison against mask...
* fold-const.c (fold_truthop): When changing a one-bit comparison
	against zero into a comparison against mask, do a proper sign
	extension.

From-SVN: r16448
1997-11-13 00:09:37 +00:00
Jeff Law
e9a25f70a0 Update mainline egcs to gcc2 snapshot 971021.
From-SVN: r16278
1997-11-02 14:19:36 -07:00
Toon Moene
750e83485a fold-const.c (fold): For ((a * C1) / C3) or (((a * C1) + C2) / C3) optimizations...
* fold-const.c (fold): For ((a * C1) / C3) or (((a * C1) + C2) / C3)
        optimizations, look inside dividend to determine if the expression
        can be simplified by using EXACT_DIV_EXPR.

From-SVN: r16216
1997-10-28 12:02:23 -07:00
Toon Moene
91585c63e4 fold-const (fold): Also simplify FLOOR_DIV_EXPR to EXACT_DIV_EXPR if...
* fold-const (fold): Also simplify FLOOR_DIV_EXPR to EXACT_DIV_EXPR
        if the dividend is a multiple of the divisor.

From-SVN: r16181
1997-10-26 10:05:24 -07:00
Jeff Law
ce2157a1a9 fold-const.c (make_range): Correctly handle cases of converting from unsigned to signed type.
* fold-const.c (make_range): Correctly handle cases of converting
        from unsigned to signed type.

        * fold-const.c (merge_ranges): Make sure that if one range is subset
        of another, it will always be the second range.  Correct (+,-) case to
        account for this.

Brought over from gcc2; fixes sparc bug.

From-SVN: r15678
1997-09-23 12:35:51 -06:00
Jeffrey A Law
63e7fe9ba4 pa.md (reload_peepholes): Make sure operand is a REG before examining REGNO.
* pa.md (reload_peepholes): Make sure operand is a REG before
        examining REGNO.  Allow general registers too.
Fixes sporatic c-torture failure.

Remove last change to fold-const.c and c-decl.c

From-SVN: r15000
1997-08-29 16:14:07 -06:00
Doug Evans
3dedc65a1f c-decl.c (grokdeclarator): If array index or size calculations overflow, issue an error.
* c-decl.c (grokdeclarator): If array index or size calculations
        overflow, issue an error.
        * fold-const.c (int_const_binop): New static function.
        (const_binop, size_binop): Call it.
Brought over from the fsf.

From-SVN: r14967
1997-08-27 10:58:02 -06:00
Jeff Law
39dfb55a01 version.c: Bump for new snapshot.
* version.c: Bump for new snapshot.

        * local-alloc.c (update_equiv_regs): All the target to reject
        promotion of some REG_EQUAL to REG_EQUIV notes.
        * pa.h (DONT_RECORD_EQUIVALENCE): Define.
Fixes some c-torture failures, also improves generated code.

        * pa.c (secondary_reload_class): (mem (mem ... )) does not need
        secondary reloads.
Fixes 094.fpppp/twldrv.f abort.

        * pa.c (hppa_builtin_saveregs): Emit a blockage insn after the
        store of the argument registers.
Fixes c-torture failure.

        * fold-const.c (multiple_of_p): New function.
        (fold): Turn some cases of *_DIV_EXPR into EXACT_DIV_EXPR.
One of the performance patches from the g77 folks.

From-SVN: r14915
1997-08-25 09:00:44 -06:00
Richard Kenner
f0eebf28c4 (fold_range_test, fold): Avoid making SAVE_EXPR if at top level.
From-SVN: r14541
1997-07-27 19:35:53 -04:00
Doug Evans
0da6f3db7d Document force_fit_type as an entry point in the file.
From-SVN: r14324
1997-06-26 17:07:38 +00:00
Jason Merrill
88a5cdb87f x
From-SVN: r14210
1997-06-09 23:41:21 +00:00
Richard Kenner
96f06cb6dd (fold, truth_andor): Disable optimization for side effects on RHS.
From-SVN: r14047
1997-05-08 13:20:18 -04:00
Richard Kenner
3c9b009121 (operand_equal_p): Constants are not equal if there has been an overflow.
From-SVN: r13949
1997-04-20 21:27:07 -04:00
Richard Kenner
e80c9ccb75 (fold): Don't assume a nonexplicit constant cannot equal an explicit one.
From-SVN: r13650
1997-02-15 18:49:22 -05:00
Richard Kenner
580ceef20e (const_binop): Don't call size_int if low < 0.
From-SVN: r13617
1997-02-07 13:10:26 -05:00
Richard Kenner
8e3df5dce2 (fold): Don't make COND_EXPR when both expr and one part are comparisons.
From-SVN: r13553
1997-01-27 09:05:06 -05:00
Richard Kenner
c7cfe938eb (operand_equal_p): Rework to consider two expressions that have embedded identical SAVE_EXPRs as equivalent...
(operand_equal_p): Rework to consider two expressions that have
embedded identical SAVE_EXPRs as equivalent; also handle some more
cases.

From-SVN: r13385
1997-01-06 08:00:51 -05:00
Richard Kenner
380ff34aab (const_binop): Rework to only make constants in one place; always use size_int if small enough and of sizetype.
(const_binop): Rework to only make constants in
one place; always use size_int if small enough and of sizetype.
(size_int): Call force_fit_type.
(fold): Avoid ever changing type of input tree.

From-SVN: r13377
1997-01-04 22:27:13 -05:00
Richard Kenner
d4fcc6365e (merge_ranges): In (+,-) case, if lower bounds are the same the result
is always false.

From-SVN: r13236
1996-12-07 17:54:59 -05:00
Richard Kenner
23bd99ae34 (optimize_bit_field_compare, decode_field_reference): Pass new arg to
get_inner_reference.

From-SVN: r13188
1996-11-16 06:19:25 -05:00
Jim Wilson
cf85c69b0e (unextend): Rewrite type conversions to avoid overflow.
From-SVN: r13165
1996-11-15 10:20:53 -08:00
Richard Kenner
80906567f4 (operand_equal_p): Do real comparison with REAL_VALUES_EQUAL.
(make_range): Properly decide when to get TREE_TYPE of arg0.
Handle EXP being an INTEGER_CST at end.
(fold_range_test): Handle return of 0 from make_range.
(fold, case TRUTH_AND_EXPR): Handle first arg of 0.
(fold, case TRUTH_OR_EXPR): Handle first arg of 1.

From-SVN: r13163
1996-11-15 12:48:28 -05:00
Richard Kenner
4e644c93e0 (range_binop): Set SNG1 to zero if ARG1 is a not a lower or upper
bound.

From-SVN: r13161
1996-11-15 06:37:48 -05:00
Jim Wilson
405862dd6c (merge_ranges): In (+,-) case, treat subset specially
if lower bounds are the same.

From-SVN: r13127
1996-11-12 10:19:42 -08:00
Richard Kenner
9898deac71 (const_binop, case *_DIV_EXPR): Don't do special sizetype case if a
constant overflows.

From-SVN: r13106
1996-11-07 07:40:26 -05:00
Richard Kenner
0e1c7fc777 (make_range): Don't merge unsigned case with range containing upper bound;
instead merge just with zero and convert a range with no upper bound to
opposite one with no lower bound.
(merge_ranges): In (+,-) case, don't treat subset specially if the upper
bounds are the same; fix typo in others case here.

From-SVN: r13090
1996-11-01 09:49:54 -05:00
Jeff Law
3c00684e55 fold-const.c (make_range, [...]): Correct normalization of an unsigned range that wraps around zero.
* fold-const.c (make_range, case PLUS_EXPR): Correct
        normalization of an unsigned range that wraps around zero.

From-SVN: r13089
1996-10-31 20:10:33 -07:00
Richard Kenner
27bae8e571 (range_binop): Strip NOPs from result and verify it's an INTEGER_CST.
(make_range, case BIT_NOT_EXPR): Fix typo in constant for PLUS_EXPR.

From-SVN: r13079
1996-10-30 16:16:41 -05:00
Jeff Law
5df8a1f298 * fold-const.c (merge_ranges): Fix thinko/typo.
From-SVN: r13042
1996-10-27 15:17:12 -07:00
Jim Wilson
5a9d82a6df (make_range, case PLUS_EXPR): Normalize an unsigned
range that wraps around 0.

From-SVN: r13030
1996-10-24 12:08:23 -07:00
Richard Kenner
7f423031c0 (make_range, comparison cases): When making range for unsigned to
merge in, use full range.

From-SVN: r13027
1996-10-24 09:10:37 -04:00
Richard Kenner
39647dcba5 (exact_real_inverse): Likewise, if no REAL_ARITHMETIC.
(fold, case RDIV_EXPR): Turn divide by constant into multiplication by the
reciprocal, if optimizing and result is exact.

From-SVN: r13004
1996-10-23 10:20:45 -04:00
Doug Evans
239c95d346 fold-const.c (make_range): Handle NULL operand 0 (like in BIND_EXPRs).
* fold-const.c (make_range): Handle NULL operand 0
	(like in BIND_EXPRs).

From-SVN: r12957
1996-10-12 04:06:11 +00:00
Richard Kenner
ebde8a2754 (range_test): Function deleted.
(range_binop, make_range, build_range_check): New functions.
(merge_ranges, fold_range_test): Likewise.
(fold_truthop): No longer call range_test.
(fold, case TRUTH_{AND,OR}{,IF}_EXPR): Call fold_range_test.

From-SVN: r12921
1996-10-09 05:48:36 -04:00
Richard Kenner
214d5b845f (const_binop): Add new arg, TYPE, to call to build_complex.
(fold, case CONJ_EXPR, COMPLEX_EXPR): Likewise.

From-SVN: r12865
1996-09-29 19:03:36 -04:00
Richard Kenner
903cb4d6f2 Fix error in comments.
From-SVN: r12773
1996-09-22 12:12:10 -04:00
Mike Stump
0f41302f47 formatting tweaks
From-SVN: r12390
1996-07-03 22:07:53 +00:00
Richard Kenner
5fd7f37d2e (fold): Don't do anything with evaluated SAVE_EXPR.
From-SVN: r12185
1996-06-06 18:21:16 -04:00
Richard Kenner
30eca39133 (fold, case EQ_EXPR): When folding VAR++ = CONST, mask the new const
if VAR is a bitfield reference; also for VAR--.

From-SVN: r11976
1996-05-16 18:53:14 -04:00
Jason Merrill
3ffcb234e7 (fold): Don't call convert to recreate tree nodes
we already have.

From-SVN: r11908
1996-04-30 21:27:32 +00:00
Richard Kenner
700ad580a6 (range_test): Don't convert hi_cst or lo_cst to unsigned when folding
signed range tests.

From-SVN: r11768
1996-04-14 18:49:18 -04:00
Richard Kenner
7cb6a121f2 (fold_convert): Add new arg to REAL_VALUE_FROM_INT.
From-SVN: r11766
1996-04-14 08:55:37 -04:00
Richard Kenner
65d8b1ce9f (fold, case BIT_IOR_EXPR): Recognize rotates with variable count.
From-SVN: r11614
1996-03-25 18:48:05 -05:00
Richard Kenner
d011fbf978 (fold, case *_DIV_EXPR): Ignore SAVE_EXPR if has RTL.
From-SVN: r11400
1996-03-02 08:04:30 -05:00
Richard Kenner
15c577a80f (left_shift_overflows): Remove; unused.
From-SVN: r11021
1996-01-16 08:56:11 -05:00
Richard Kenner
36102b210e (const_binop): Strip NOPS from both args.
From-SVN: r11019
1996-01-16 08:42:19 -05:00
Richard Kenner
a377ff85d0 (fold_convert): When converting a NaN to another type, change the type
of the node before returning it.

From-SVN: r10863
1995-12-26 21:52:06 -05:00
Richard Kenner
0c9cabe7d4 (fold): Don't record overflow when negating unsigned constants.
From-SVN: r10779
1995-12-16 08:30:58 -05:00
Richard Kenner
10fa1ee296 (div_and_round_double): Change carry', quo_est', and `scale' from
plain int to `unsigned HOST_WIDE_INT'.

From-SVN: r10367
1995-09-15 18:26:36 -04:00
Richard Kenner
023c7f6348 (size_binop): Don't pass 1 to NOTRUNC.
From-SVN: r10306
1995-09-03 09:03:38 -04:00
Richard Kenner
410d3f5de9 (fold, case CONVERT_EXPR): Don't merge conversions if outer is to
handle a type with differing precision.

From-SVN: r10145
1995-07-18 19:02:49 -04:00
Richard Kenner
d4453ee5ef (decode_field_reference): New parm PAND_MASK.
(unextend): New parm MASK.
(fold_truthop): Pass new parms to decode_field_reference and unextend.

From-SVN: r10098
1995-07-01 10:12:02 -04:00
Richard Kenner
2dfd595d54 (fold_truthop): Commute unextend and convert on l_const and r_const.
From-SVN: r10065
1995-06-27 19:09:37 -04:00
Richard Kenner
a35311b035 Update FSF address.
From-SVN: r9961
1995-06-15 07:52:21 -04:00
Richard Kenner
21403f14b2 (fold): When converting a COND_EXPR to an ABS_EXPR, get the types
right for ABS_EXPR to work.

From-SVN: r9939
1995-06-13 18:32:39 -04:00
Richard Kenner
3d1877b127 (lshift_double): Replace &' with %' to fix typo.
(lshift_double, rshift_double): Truncate shift count only if
SHIFT_COUNT_TRUNCATED.  Remove unnecessary `count >= prec' test.

From-SVN: r9917
1995-06-09 19:29:17 -04:00
Richard Kenner
25216284b0 (fold): When folding `<' type nodes, make true_value and false_value
have correct types.

From-SVN: r9899
1995-06-07 17:17:08 -04:00
Jason Merrill
1180eb1042 *** empty log message ***
From-SVN: r9801
1995-05-24 19:41:29 +00:00
Richard Kenner
a25ee33216 (invert_truthvalue, case CLEANUP_POINT_EXPR): New case.
From-SVN: r9735
1995-05-17 17:44:45 -04:00
Richard Kenner
9faa82d8c0 Fix typos in comments.
From-SVN: r9712
1995-05-16 08:39:54 -04:00
Richard Kenner
7cd5f0b28f (const_binop): Don't pass OVERFLOW to force_fit_type if type is
unsigned.

From-SVN: r9694
1995-05-15 19:01:31 -04:00
Jason Merrill
0982a4b872 *** empty log message ***
From-SVN: r9623
1995-05-11 19:25:36 +00:00
Mike Stump
a69e1f6afc small tweak
From-SVN: r9566
1995-05-02 21:54:39 +00:00
Mike Stump
122977b9df fold-const.c (fold): Ensure that we don't alter the expression's type when folding CLEANUP_POINT_EXPRs.
* fold-const.c (fold): Ensure that we don't alter the expression's
        type when folding CLEANUP_POINT_EXPRs.

From-SVN: r9563
1995-05-02 19:39:17 +00:00
Richard Kenner
4d39710e8e ([lr]rotate_double): Replace; old versions were bogus.
(fold, shift and rotate): Don't call tree_int_cst_sgn on non-integer.
(fold, case LROTATE_EXPR): If constant count, convert to RROTATE_EXPR.
(fold, case RROTATE_EXPR): Sometimes commute logical op with rotate.
Delete pair of counteracting shifts.

From-SVN: r9425
1995-04-21 08:03:23 -04:00
Richard Kenner
a07a2d17c5 (size_int): Arg is unsigned HOST_WIDE_INT.
From-SVN: r9406
1995-04-18 06:19:35 -04:00
Richard Kenner
a7a0564039 (force_fit_type): Always propagate OVERFLOW.
From-SVN: r9138
1995-03-08 17:49:48 -05:00
Richard Kenner
021035770a (decode_field_reference): Don't check TREE_CODE of EXP; let get_inner_reference decide if have reference.
(decode_field_reference): Don't check TREE_CODE of EXP; let
get_inner_reference decide if have reference.
Allow no bit reference if have AND_MASK.
(all_ones_mask_p): Use tree_int_cst_equal, not operand_equal_p.
(unextend): New function.
(fold_truthop): For constant cases, use new function, rework
conversion, and warn if comparison can never be true.

From-SVN: r9099
1995-03-01 06:48:17 -05:00
Jason Merrill
56c98e5b32 Support CLEANUP_POINT_EXPRs.
From-SVN: r9034
1995-02-22 17:35:09 +00:00
Richard Kenner
cd7ece6611 (fold): Don't modify tree with newly-allocated nodes; instead make new
tree in those cases.

From-SVN: r8901
1995-02-10 14:54:54 -05:00
Jason Merrill
e9866da310 (pedantic_non_lvalue): Check pedantic_lvalues instead of pedantic.
From-SVN: r8765
1995-01-17 21:43:40 +00:00
Richard Kenner
3a96b5ebb4 (fold, case COND_EXPR): Properly swap args 1 and 2.
Strip nops from ARG2, just like ARG1.
Make {MIN,MAX}_EXPR properly when type of result different than args.

From-SVN: r8745
1995-01-13 19:16:09 -05:00
Richard Kenner
7f0b305c5a (fold): Avoid infinite recursion caused by last change.
From-SVN: r8730
1995-01-10 05:49:13 -05:00
Richard Kenner
7e13907585 (fold, case CONVERT_EXPR): Don't remove an integer conversion when outer is FP unless it doesn't change signedness...
(fold, case CONVERT_EXPR): Don't remove an integer conversion when
outer is FP unless it doesn't change signedness; rework code in this
area to be clearer.

From-SVN: r8724
1995-01-07 08:51:14 -05:00
Richard Kenner
4ab3cb6597 (pedantic_omit_one_operand): New function.
(fold, case COND_EXPR): Use it instead of calling pedantic_non_lvalue on the
result of omit_one_operand.

From-SVN: r8641
1994-12-10 16:05:49 -05:00
Doug Evans
68c6b3a925 (fold): Call real_zerop for real constants.
From-SVN: r8634
1994-12-09 21:06:03 +00:00
Richard Kenner
db40b434fa (fold_truthop): Delete BIT_AND_EXPR of constants with masks.
From-SVN: r8592
1994-11-30 19:02:39 -05:00
Richard Kenner
e33745253e (fold_convert): Don't fold conversion if it would produce constant
larger than we can support.

From-SVN: r8551
1994-11-22 17:40:46 -05:00
Ian Lance Taylor
f76b9db287 Check target endianness at run time, not compile time
From-SVN: r8470
1994-11-16 21:10:09 +00:00
Richard Kenner
e1f56f62a0 (fold): If moved conversion into COND_EXPR, leave it there if it is an integral conversion to word or narrower.
(fold): If moved conversion into COND_EXPR, leave it there if it is an
integral conversion to word or narrower.
(fold, case NOP_EXPR): Ignore conversion to same type as operand.
(fold, case COND_EXPR): Make third operand the simplest.

From-SVN: r8467
1994-11-16 07:55:26 -05:00
Jason Merrill
3ac4f0e6d0 (fold, COMPONENT_REF): Don't die if the CONSTRUCTOR
doesn't initialize the field we want.

From-SVN: r8223
1994-10-05 23:08:12 +00:00
Jason Merrill
e082358bff (fold): Handle COMPONENT_REFs involving CONSTRUCTORs.
From-SVN: r8095
1994-09-20 00:32:29 +00:00
Richard Kenner
7106180777 Fix typo.
From-SVN: r7840
1994-07-30 19:01:48 -04:00
Richard Kenner
474636f3e8 (fold_truthop): Apply masks to constants.
From-SVN: r7839
1994-07-30 18:18:55 -04:00
Jim Wilson
59d9021293 (fold): Don't fold X-X to 0 if X is floating point
and !flag_fast_math.

From-SVN: r7786
1994-07-21 14:46:32 -07:00
Richard Kenner
6d9f1f5f63 (decode_field_reference): Merge operand of a BIT_AND_EXPR with the
mask made from the description of the field.

From-SVN: r7766
1994-07-13 14:44:38 -04:00
Richard Kenner
8f03b1af61 Remove last change.
From-SVN: r7764
1994-07-13 08:40:00 -04:00
Richard Kenner
78221d63e7 (fold, case MULT_EXPR): If arg is an unsigned CEIL_DIV_EXPR, convert
to TRUNC_DIV_EXPR of a PLUS_EXPR in some cases.

From-SVN: r7744
1994-07-12 12:39:17 -04:00
Torbjorn Granlund
dbb5b3cec9 (div_and_round_double): Make it globally accessible.
From-SVN: r7594
1994-06-29 00:20:58 +00:00
Torbjorn Granlund
e627f0b601 Revert last patch: (fold, case *_DIV_EXPR): Optimize (x / C << y)...
From-SVN: r7475
1994-06-15 02:29:07 +00:00
Torbjorn Granlund
37bdb7e314 (encode, decode): Use 4 HOST_WIDE_INTs for encoded value with HOST_BITS_PER_WIDE_INT/2 bits in each.
(encode, decode): Use 4 HOST_WIDE_INTs for encoded
value with HOST_BITS_PER_WIDE_INT/2 bits in each.
(LOWPART, HIGHPART): New macros.
(BASE): Move definition outside of div_and_round_double.
(add_double, mul_double, lshift_double, rshift_double): Rewrite.
(lrotate_double): Use LOWPART, HIGHPART, and BASE.
(rrotate_double): Likewise.
(div_and_round_double): Major changes to code for general case.
Now it actually produces non-garbage results for large operands.
(div_and_round_double): Simplify condition for special code used when
divisor < BASE.
(const_binop): Delete special cases for multiplying by 0, 1, 2, 4, 8.
(fold, case *_DIV_EXPR): Don't try to optimize for overflow.

From-SVN: r7473
1994-06-15 02:23:14 +00:00
Richard Kenner
4c9a05bc55 Cast pointer operands to bzero, bcopy, and bcmp to (char *).
From-SVN: r7472
1994-06-14 18:19:28 -04:00
Richard Kenner
4b8a006289 (fold-convert): Use assignment, instead of initializing, aggregate
local variable REAL_VALUE_TYPE.

From-SVN: r7146
1994-04-25 06:33:38 -04:00
Richard Kenner
5f61007448 (const_binop): If arg is NaN, just return it
(const_binop): If arg is NaN, just return it
(fold_convert): Handle NaN in real->int and real->real cases.

From-SVN: r7072
1994-04-18 15:41:06 -04:00
Richard Kenner
4c64b88406 (fold): Avoid exponential work when simplifying conditional
expressions; don't recurse twice if ARG1 is constant.

From-SVN: r7010
1994-04-09 16:05:15 -04:00
Richard Kenner
34b1b41f3b Fix typo in comment of last change.
From-SVN: r7000
1994-04-08 18:35:23 -04:00
Richard Kenner
e92d30482e (fold, case GT_EXPR): Simplify X < (1 << Y) into X >> Y == 0.
From-SVN: r6999
1994-04-08 18:18:08 -04:00
Richard Kenner
b5f3b6b60b (strip_compound_expr): New function.
(fold): Call it; avoid exponential work when simplifying binary op over
a COND_EXPR.

From-SVN: r6921
1994-03-30 16:59:47 -05:00
Richard Kenner
3122945e76 (fold, case *_DIV_EXPR): Correct result when product of constants
overflows.

From-SVN: r6900
1994-03-25 16:12:56 -05:00
Richard Kenner
79c844cdca (const_binop): Avoid initialized aggregate local variables, for
antique compilers.

From-SVN: r6821
1994-03-19 06:25:26 -05:00
Richard Kenner
e9aaa5a553 (fold, associate): If -ffast-math, associate FP mults.
(fold, case RDIV_EXPR): Split case; ignore division by 1.
If -ffast-math, convert to multply by reciprocal.
(fold, case *_DIV_EXPR): Simplify A/C1/C2.

From-SVN: r6780
1994-03-14 06:18:52 -05:00
Richard Kenner
d0cb4c6591 (fold): Call tree_int_cst_sgn.
(fold, case *_DIV_EXPR): Add missing conversion.

From-SVN: r6779
1994-03-14 05:11:28 -05:00
Richard Kenner
649ff3b44f (force_fit_value): Operate on REAL_CST as well.
(real_value_truncate): Don't use its own handler.
(const_binop): Set overflow on FP error and call force_fit_type.
(fold_convert): Likewise.

From-SVN: r6768
1994-03-13 08:30:50 -05:00
Richard Kenner
b9b5c1b376 (fold, case MULT_EXPR): Simplify MULT_EXPR of an EXACT_DIV_EXPR with
the same divisor as our multiplicand.

From-SVN: r6734
1994-03-09 16:50:25 -05:00
Richard Kenner
58633be8f3 (const_binop, COMPLEX_TYPE, case RDIV_EXPR): If complex integer, use
TRUNC_DIV_EXPR for inner division.

From-SVN: r6468
1994-02-02 15:14:18 -05:00
Richard Kenner
7a75868d8e (operand_equal_for_comparison_p): Declare correct_width as unsigned.
From-SVN: r6447
1994-01-31 18:40:54 -05:00
Richard Kenner
e9b5e15f60 (fold, truth_andor): Don't apply distributive law when it would change evaluation order.
(fold, truth_andor): Don't apply distributive law when it would change
evaluation order.
Clean up code a bit to improve flow.

From-SVN: r6381
1994-01-11 19:14:18 -05:00
Richard Kenner
61f275ffe7 (truth_value_p): New function.
(fold): Use it to see when we should make a TRUTH_{AND,OR}_EXPR.
(fold, case TRUTH_{AND,OR,ANDIF,ORIF}_EXPR): Use distributive law on
expressions such as (A && B) || (A && C).

From-SVN: r6352
1994-01-03 07:59:59 -05:00
Richard Kenner
996c63d336 (fold, case PLUS_EXPR): Add a missing test of flag_fast_math.
From-SVN: r6341
1993-12-29 18:04:48 -05:00
Richard Kenner
fab446b8c3 (fold): Simplify more FP ops if -ffast-math.
From-SVN: r6335
1993-12-27 08:48:58 -05:00
Richard Kenner
95aa28ae18 (fold...
(fold, case EQ_EXPR, NE_EXPR): If COMPLEX_TYPE and at least one arg is
a COMPLEX_EXPR, split into a logical operation on the real and
imaginary parts.

From-SVN: r6313
1993-12-25 08:52:25 -05:00
Richard Kenner
aae678414b (fold, case *_{DIV,MOD}_EXPR): When using distributive law, take care
when C2 is negative.

From-SVN: r6194
1993-12-08 05:46:16 -05:00
Richard Stallman
2315a5db38 (twoval_comparison_p): Do nothing for SAVE_EXPR, at least for now.
From-SVN: r6090
1993-11-15 00:25:53 +00:00
Richard Stallman
dfa90b4271 (invert_truthvalue): Handle SAVE_EXPR.
From-SVN: r5797
1993-10-19 02:50:50 +00:00
Richard Kenner
9f5e873c8f (optimize_bit_field_compare, decode_field_reference): Don't do
anything if get_inner_reference returned its argument.

From-SVN: r5773
1993-10-13 15:14:21 -04:00
Richard Kenner
cc5edac673 (fold, case PLUS_EXPR, MINUS_EXPR): Properly handle case when ARG1
splits and VARSIGN is -1.

From-SVN: r5537
1993-09-30 05:53:43 -04:00
Per Bothner
efc1a4d9b4 (invert_truthvalue): Allow arbitrary BOOLEAN_TYPE arguments.
From-SVN: r5351
1993-09-17 21:43:29 -07:00
Richard Kenner
ac27d58987 (fold): Don't try to process an RTL_EXPR.
From-SVN: r5274
1993-09-07 14:32:05 -04:00
Richard Kenner
35e66bd1d9 (twoval_comparison_p): Add new arg, SAVE_P; all callers changed.
(fold, case EQ_EXPR): If SAVE_P is true after call to twoval_comparison_p
call save_expr on the expression we make.

From-SVN: r5194
1993-08-23 18:33:11 -04:00
Richard Kenner
2df46b06a2 (fold): Handle EQ_EXPR and NE_EXPR where both args are comparisons or
BIT_AND_EXPR with constant 1.

From-SVN: r5186
1993-08-19 08:28:38 -04:00
Richard Kenner
79bf94d3ea (fold...
(fold, case EQ_EXPR): Re-enable converting signed MOD operations to
unsigned when inside comparisons against zero, but only when the
second operand of the MOD is an integral power of two.

From-SVN: r5166
1993-08-16 18:47:39 -04:00