Age | Commit message (Collapse) | Author | Files | Lines |
|
char or unsigned short a)
PR middle-end/29695
* fold-const.c (fold_ternary): Fix A < 0 ? <sign bit of A> : 0
simplification.
* gcc.c-torture/execute/pr29695-1.c: New test.
* gcc.c-torture/execute/pr29695-2.c: New test.
From-SVN: r118497
|
|
2006-09-07 Eric Christopher <echristo@apple.com>
Falk Hueffner <falk@debian.org>
* doc/extend.texi (__builtin_bswap32): Document.
(__builtin_bswap64): Ditto.
* doc/libgcc.texi (bswapsi2): Document.
(bswapdi2): Ditto.
* doc/rtl.texi (bswap): Document.
* optabs.c (expand_unop): Don't widen a bswap.
(init_optabs): Init bswap. Set libfuncs explicitly
for bswapsi2 and bswapdi2.
* optabs.h (OTI_bswap): New.
(bswap_optab): Ditto.
* genopinit.c (optabs): Handle bswap_optab.
* tree.h (tree_index): Add TI_UINT32_TYPE and
TI_UINT64_TYPE.
(uint32_type_node): New.
(uint64_type_node): Ditto.
* tree.c (build_common_tree_nodes_2): Initialize
uint32_type_node and uint64_type_node.
* builtins.c (expand_builtin_bswap): New.
(expand_builtin): Call.
(fold_builtin_bswap): New.
(fold_builtin_1): Call.
* fold-const.c (tree_expr_nonnegative_p): Return true
for bswap.
* builtin-types.def (BT_UINT32): New.
(BT_UINT64): Ditto.
(BT_FN_UINT32_UINT32): Ditto.
(BT_FN_UINT64_UINT64): Ditto.
* builtins.def (BUILT_IN_BSWAP32): New.
(BUILT_IN_BSWAP64): Ditto.
* rtl.def (BSWAP): New.
* genattrtab.c (check_attr_value): New.
* libgcc2.c (__bswapSI2): New.
(__bswapDI2): Ditto.
* libgcc2.h (__bswapSI2): Declare.
(__bswapDI2): Ditto.
* mklibgcc.in (lib2funcs): Add _bswapsi2 and _bswapdi2.
* simplify-rtx.c (simplify_const_unary_operation): Return
0 for BSWAP.
* libgcc-std.ver (__bwapsi2): Add.
(__bswapdi2): Ditto.
* reload1.c (eliminate_regs_1): Add bswap.
(elimination_effects): Ditto.
* config/i386/i386.h (x86_bswap): New.
(TARGET_BSWAP): Use.
* config/i386/i386.c (x86_bswap): Set.
Co-Authored-By: Falk Hueffner <falk@debian.org>
From-SVN: r118361
|
|
(-ffast-math only))
PR middle-end/23470
* tree.h (tree_expr_nonnegative_p): Return "bool" instead of "int".
* fold-const.c (tree_expr_nonnegative_p): Likewise. Consider
pow(x,y) and powi(x,y) to be nonnegative if either x is nonnegative
or y is an even integer.
* gcc.dg/pr23470-1.c: New test case.
From-SVN: r118355
|
|
* fold-const.c (fold_comparison): Fold ~X op ~Y as Y op X.
Fold ~X op C as X op' ~C, where op' is the swapped comparison.
(fold_binary): ~X eq/ne C is now handled in fold_comparison.
Fold -X eq/ne -Y as X eq/ne Y.
* gcc.dg/fold-compare-1.c: New test case.
From-SVN: r118158
|
|
PR tree-optimization/15458
* fold-const.c (fold_binary): Optimize ~X ^ C as X ^ ~C, where C
is a constant.
* gcc.dg/fold-xornot-1.c: New test case.
From-SVN: r118152
|
|
2006-10-28 Richard Guenther <rguenther@suse.de>
* fold-const.c (maybe_canonicalize_comparison): Fix code
to match comment.
From-SVN: r118110
|
|
2006-10-28 Richard Guenther <rguenther@suse.de>
PR middle-end/26899
* fold-const.c (maybe_canonicalize_comparison_1): Helper
for maybe_canonicalize_comparison.
(maybe_canonicalize_comparison): New function for canonicalizing
comparison trees.
(fold_comparison): Call it to canonicalize comparisons with
constants involved.
* gcc.dg/tree-ssa/pr26899.c: New testcase.
From-SVN: r118106
|
|
2006-10-24 Richard Guenther <rguenther@suse.de>
PR middle-end/27132
PR middle-end/23295
* builtins.c (fold_binary): Remove checks for flag_wrapv
and flag_trapv where negate_expr_p covers these cases.
* gcc.dg/pr27132.c: New testcase.
* gcc.dg/pr23295.c: Likewise.
* gcc.dg/tree-ssa/pr23294.c: Adjust patterns.
* g++.dg/tree-ssa/pr19807.C: Likewise.
2006-10-23 Richard Guenther <rguenther@suse.de>
PR middle-end/29548
* fold-const.c (fold_plusminus_mult_expr): Check exact power
of two on the absolute value.
(fold_binary): Fold x * -C to -x * C if x is easily negatable
and negating -C does not overflow.
From-SVN: r117969
|
|
2006-10-21 Richard Guenther <rguenther@suse.de>
PR middle-end/26898
* fold-const.c (fold_comparison): Fold signed comparisons
of the form X +- C1 CMP Y +- C2.
* gcc.dg/torture/pr26898-1.c: New testcase.
* gcc.dg/torture/pr26898-2.c: Likewise.
From-SVN: r117931
|
|
* fold-const.c (add_double): Rename to add_double_with_sign.
Add 'unsigned_p' parameter and take it into account for the overflow.
(mul_double): Rename to mul_double_with_sign.
Add 'unsigned_p' parameter and take it into account for the overflow.
(fold_div_compare): Call add_double_with_sign instead of add_double
and mul_double_with_sign instead of mul_double, passing them the
unsignedness of the type.
* tree.h (add_double): Macroize.
(add_double_with_sign): New prototype.
(mul_double): Macroize.
(mul_double_with_sign): New prototype.
From-SVN: r117887
|
|
2006-08-26 Richard Guenther <rguenther@suse.de>
PR middle-end/28814
* fold-const.c (fold_binary): Fold temporary to correct
type before constructing new comparison.
* gcc.dg/torture/pr28814.c: New testcase.
From-SVN: r116439
|
|
2006-07-07 Richard Guenther <rguenther@suse.de>
PR middle-end/28268
* tree.h (build_one_cst): Declare.
* tree.c (build_one_cst): New function.
* tree-ssa-math-opts.c (get_constant_one): Remove.
(insert_reciprocals): Use build_one_cst.
* fold-const.c (fold_plusminus_mult): Likewise.
* gcc.dg/torture/pr28268.c: New testcase.
From-SVN: r115263
|
|
2006-07-05 Richard Guenther <rguenther@suse.de>
PR tree-optimization/28162
* fold-const.c (fold_binary): For (-A) * (-B) -> A * B
make sure to convert the operands to the correct type.
* gcc.dg/pr28162.c: New testcase.
From-SVN: r115202
|
|
PR middle-end/28151
* fold-const.c (const_binop): Be prepared for self returning zero.
Simplify code handling complex values.
From-SVN: r114992
|
|
* expr.c (expand_expr_real_1) <VECTOR_CST>: For vector constants with
integer modes, attempt to directly construct an integer constant.
* fold-const.c (native_encode_vector): Determine the size of each
element from the vector type instead of the first vector element.
* tree.c (build_constructor_single): Mark a CONSTRUCTOR as constant,
if all of its elements/components are constant.
(build_constructor_from_list): Likewise.
From-SVN: r114815
|
|
2006-06-19 Richard Guenther <rguenther@suse.de>
PR middle-end/28045
* fold-const.c (operand_equal_p): Check if the argument types
have the same precision before stripping NOPs.
* gcc.dg/torture/pr28045.c: New testcase.
From-SVN: r114772
|
|
2006-06-16 Richard Guenther <rguenther@suse.de>
PR middle-end/27116
* fold-const.c (negate_expr_p): Do not introduce undefined
overflow in negating INTEGER_CSTs.
(fold_negate_expr): Rename from negate_expr. Revert last
change for folding BIT_NOT_EXPR. Change semantics to
return NULL_TREE for non-simplified negations. Do not
strip type conversions and unify type handling.
(negate_expr): New function, wrap around fold_negate_expr
but ensure building a tree always. Strip type conversions
here, fold to result type.
(fold_unary): Use fold_negate_expr for folding NEGATE_EXPR.
* gcc.dg/pr15785-1.c: Revert last change.
* gcc.dg/torture/pr27116-2.c: New testcase.
From-SVN: r114723
|
|
something.
2006-06-16 Michael Matz <matz@suse.de>
Richard Guenther <rguenther@suse.de>
* fold-const.c (fold_truthop): Only return new tree node if
we canonicalized something.
Co-Authored-By: Richard Guenther <rguenther@suse.de>
From-SVN: r114713
|
|
2006-06-15 Richard Guenther <rguenther@suse.de>
* fold-const.c (fold_truth_not_expr): Rename from
invert_truthvalue. Give it fold_* semantics to avoid
generating garbage.
(invert_truthvalue): New function. Wrapper around
fold_truth_not_expr.
(optimize_minmax_comparison): Avoid creating garbage.
(fold_unary): Use fold_truth_not_expr for folding
TRUTH_NOT_EXPR.
(fold_ternary): Replace uses of invert_truthvalue with
fold_truth_not_expr where applicable.
* tree.h (fold_truth_not_expr): Prototype.
From-SVN: r114683
|
|
Check for Objective-C++ in deciding certain COND_EXPR
folding.
OKed by Geoff Keating.
From-SVN: r114619
|
|
2006-06-08 Richard Guenther <rguenther@suse.de>
PR middle-end/27116
* fold-const.c (negate_expr_p): We can negate BIT_NOT_EXPR
only, if overflow is defined and not trapping.
(negate_expr): Likewise.
* gcc.dg/torture/pr27116.c: New testcase.
* gcc.dg/pr15785-1.c: Remove test for invalid transformation.
From-SVN: r114483
|
|
gcc:
* tree.h: Declare folding_initializer.
* builtins.c (fold_builtin_constant_p): Give definite answer
if folding inside an initializer.
* fold-const.c: Define folding_initializer.
(START_FOLD_INIT): Save and then set folding_initializer.
(END_FOLD_INIT): Restore folding_initializer.
gcc/testsuite:
* gcc.c-torture/compile/builtin_constant_p.c: New test.
From-SVN: r114358
|
|
simple loop)
2006-06-04 Richard Guenther <rguenther@suse.de>
PR tree-optimization/27039
* fold-const.c (fold_comparison): Handle pointer comparison
again for all comparison codes. Compare offsets in signed
size type.
(fold_binary): Move code from here.
* gcc.dg/tree-ssa/loop-17.c: New testcase.
From-SVN: r114357
|
|
* fold-const.c (fold_unary) <CONJ_EXPR>: Ensure folded expressions
are type correct. Clean-up.
<REALPART_EXPR>: Likewise. Optimize creal(~z) as creal(z).
<IMAGPART_EXPR>: Likewise. Optimize cimag(~z) as -cimag(z).
From-SVN: r114330
|
|
PR tree-optimization/23452
* fold-const.c (fold_mult_zconjz): New subroutine of fold_binary,
to optimize z * conj(z) as realpart(z)^2 + imagpart(z)^2.
(fold_binary) <MULT_EXPR>: Call fold_mult_zconjz for integral
complex values and with -ffast-math for FP complex values.
* gcc.dg/fold-mulconj-1.c: New test case.
From-SVN: r114246
|
|
2006-05-27 Richard Guenther <rguenther@suse.de>
PR middle-end/27773
* fold-const.c (fold_plusminus_mult_expr): Use fold_convert
to produce a constant of value 1 of generic type.
* gcc.dg/torture/pr27773.c: New testcase.
From-SVN: r114158
|
|
2006-05-25 Richard Guenther <rguenther@suse.de>
PR middle-end/27743
* fold-const.c (fold_binary): Do not look at the stripped
op0 for (a OP c1) OP c2 to a OP (c1+c2) shift optimization.
* gcc.dg/torture/pr27743.c: New testcase.
From-SVN: r114112
|
|
gcc/
PR tree-optimization/26622.
* fold-const.c (fold_ternary) <COND_EXPR>: Call fold_convert
on arg1.
gcc/testsuite/
PR tree-optimization/26622.
* gcc.c-torture/compile/pr26622.c: New.
From-SVN: r113956
|
|
PR middle-end/27384
* fold-const.c (size_binop): Move sanity check for arguments to
the beginning of the function.
* g++.dg/other/fold1.C: New test.
From-SVN: r113701
|
|
PR middle-end/27488
* fold-const.c (tree_expr_nonnegative_p): Return early on invalid
expression.
* gcc.dg/fold-nonneg-1.c: New test.
From-SVN: r113699
|
|
(size_t)(char *)size_t_var)
2006-05-11 Richard Guenther <rguenther@suse.de>
PR middle-end/27529
* fold-const.c (fold_unary): Handle intermediate conversion
to a pointer type like intermediate conversion to an integer
type in folding of (T1)(T2)var to var.
Match the code to the comment in the final conversion for
(T1)(T2)var to (T1)var regarding to type precision. Rather
than disallow T1 being of pointer type, assert that both T1
and var are of pointer type or not. Make sure not to fall
over the frontends lazyness wrt array to pointer decay though.
* gcc.dg/tree-ssa/foldcast-1.c: New testcase.
From-SVN: r113692
|
|
2006-05-10 Richard Guenther <rguenther@suse.de>
PR tree-optimization/27302
* fold-const.c (operand_equal_p): For two comparisons,
try comparison of one comparison code swapped if that yields
the same code.
* gcc.dg/torture/pr27302.c: New testcase.
From-SVN: r113670
|
|
2006-05-09 Dirk Mueller <dmueller@suse.de>
Richard Guenther <rguenther@suse.de>
PR middle-end/27498
* fold-const.c (fold_read_from_constant_string): Relax check
for matching types to matching modes.
* gcc.dg/tree-ssa/pr27498.c: New testcase.
Co-Authored-By: Richard Guenther <rguenther@suse.de>
From-SVN: r113651
|
|
equality.
* fold-const.c (range_predecessor): Use operand_equal_p
as the predicate for equality.
(range_successor): Likewise.
From-SVN: r113192
|
|
PR rtl-optimization/26026
* fold-const.c (fold_binary): Optimize div and mod where the divisor
is a known power of two shifted left a variable amount.
From-SVN: r113060
|
|
PR target/26961
* fold-const.c (fold_ternary): When converting "A ? B : C" into either
"A op B" or "A op C", we may need to convert A to the type of B and C.
* gcc.dg/fold-cond-1.c: New test case.
* gcc.dg/pr26961-1.c: Likewise.
From-SVN: r113001
|
|
* cfgcleanup.c, config/dfp-bit.c, expr.c, fold-const.c,
jump.c, mips-tfile.c, omp-low.c, sched-int.h,
tree-ssa-loop-prefetch.c, tree-vrp.c: Fix comment typos.
From-SVN: r112971
|
|
previous check-in.
* fold-const.c (native_encode_vector, native_interpret_real):
Correct obvious mistakes in the previous check-in.
From-SVN: r112930
|
|
representation of an INTEGER_CST...
* fold-const.c (native_encode_expr): New function to encode
the target representation of an INTEGER_CST, REAL_CST, COMPLEX_CST
or VECTOR_CST into a specified buffer.
(native_encode_int): New function.
(native_encode_real): New function.
(native_encode_complex): New function.
(native_encode_vector): New function.
(native_interpret_expr): Inverse of native_encode_expr to convert
a target representation into an INTEGER_CST, REAL_CST etc...
(native_interpret_int): New function.
(native_interpret_real): New function.
(native_interpret_complex): New function.
(native_interpret_vector): New function.
(fold_view_convert_expr): New function to constant fold/evaluate
a VIEW_CONVERT_EXPR of a suitable constant expression.
(fold_unary) <VIEW_CONVERT_EXPR>: Call fold_view_convert_expr.
Change call of build1 to fold_build1 when constructing a
VIEW_CONVERT_EXPR.
* gcc.target/i386/20050113-1.c: Tweak testcase to reflect that casts
of integers to a vector types are now constant expressions in C.
* gcc.dg/vect/vect-fold-1.c: New test case.
From-SVN: r112927
|
|
calculated)
2006-04-05 Richard Guenther <rguenther@suse.de>
PR tree-optimization/26763
* fold-const.c (fold_comparison): Move folding of
PTR + CST CMP PTR + CST ...
(fold_binary): ... here. Fold only for EQ_EXPR and NE_EXPR.
* gcc.dg/torture/pr26763-1.c: New testcase.
* gcc.dg/torture/pr26763-2.c: Likewise.
From-SVN: r112697
|
|
the symmetry related transformations.
* fold-const.c (fold_binary) <BIT_XOR_EXPR>: Fold (X & Y) ^ Y as
the equivalent ~X & Y, and the symmetry related transformations.
(fold_binary) <BIT_AND_EXPR>: Similarly, fold (X ^ Y) & Y as
~X & Y, and symmetry related transforms.
* gcc.dg/fold-andxor-1.c: New test case.
* gcc.dg/fold-xorand-1.c: Likewise.
From-SVN: r112459
|
|
* fold-const.c (fold_unary) <NOP_EXPR>: Fold (T1)(~(T2)X) as
~(T1)X, when T1 and T2 are integer types of the same precision
and (T2)X isn't an extension.
* gcc.dg/fold-convnotconv-1.c: New test case.
From-SVN: r112455
|
|
(BIT_NOT_EXPR) tree with mismatch types)
PR middle-end/22524
* fold-const.c (fold_binary) <MINUS_EXPR>: Call fold_convert to
cast BIT_NOT_EXPR operand to the correct type.
From-SVN: r112438
|
|
PR middle-end/26717
* fold-const.c (fold_binary) [RDIV_EXPR]: Do not optimize A / A
to 1.0 for non-real operands. Implement A / A optimization for
complex operands.
Co-Authored-By: Roger Sayle <roger@eyesopen.com>
From-SVN: r112379
|
|
From-SVN: r112046
|
|
"(c>=low) && (c<=high) into...
* fold-const.c (build_range_check): Make sure to use a valid type to
apply the "(c>=low) && (c<=high) into (c-low>=0) && (c-low<=high-low)"
transformation.
(range_predecessor): New static function.
(range_successor): Likewise.
(merge_ranges): Use them to compute predecessors and successors of
range bounds.
From-SVN: r111866
|
|
2006-03-09 Roger Sayle <roger@eyesopen.com>
Eric Botcazou <ebotcazou@libertysurf.fr>
PR middle-end/26561
* fold-const.c (fold_div_compare): When optimizing X/C1 op C2 as
X op C3, consider whether C3 overflows towards +Inf or -Inf.
* gcc.c-torture/execute/divcmp-5.c: New test case.
Co-Authored-By: Eric Botcazou <ebotcazou@libertysurf.fr>
From-SVN: r111862
|
|
2006-01-23 Andrew Pinski <pinskia@physics.uc.edu>
PR middle-end/26022
Revert:
PR middle-end/24437
* tree-ssa-ccp.c (fold_stmt): Move folding of OBJ_TYPE_REF
with a call expr to ...
* fold-const.c (fold_ternary) <case CALL_EXPR>: Here.
2006-02-28 Andrew Pinski <pinskia@physics.uc.edu>
PR middle-end/26022
* g++.dg/opt/return-slot1.C: New test.
From-SVN: r111602
|
|
C is a single bit, i.e.
* fold-const.c (fold_binary) <EQ_EXPR>: Fold (~X & C) eq/ne 0 as
(X & C) ne/eq 0, where C is a single bit, i.e. a power of two.
Fold both "((X & C) ^ C) eq/ne 0" and "((X ^ C) & C) eq/ne 0"
as (X & C) ne/eq 0.
* gcc.dg/fold-eqandnot-1.c: New test case.
From-SVN: r111471
|
|
* fold-const.c (fold_binary) <BIT_XOR_EXPR>: Fold (X & 1) ^ 1 as
(X & 1) == 0.
<BIT_AND_EXPR>: Fold (X ^ 1) & 1 and ~X & 1 as (X & 1) == 0.
* gcc.dg/fold-even-1.c: New test case.
From-SVN: r111454
|