summaryrefslogtreecommitdiff
path: root/gcc/simplify-rtx.c
Commit message (Collapse)AuthorAgeFilesLines
* PR optimization/10817sayle2003-11-021-11/+27
| | | | | | | | | | | | | | | | * ifcvt.c (noce_emit_move_insn): Improve documentation comment. (noce_try_move): New function to optimize an if-the-else into an unconditional move, i.e. "if (a!=b) x=a; else x=b" into "x=a". (noce_process_if_block): Attempt simplification with noce_try_move. * simplify-rtx.c (simplify_ternary_operation): Some minor fixes and improvements to the optimizations of IF_THEN_ELSE expressions. (simplify_subreg): Silence signed/unsigned comparison warning. * gcc.c-torture/compile/20031102-1.c: New test case. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@73200 138bc75d-0d04-0410-961f-82ee72b054a4
* * simplify-rtx.c (simplify_replace_rtx): Avoid allocating duplicatesayle2003-10-261-47/+50
| | | | | | | | RTL nodes. If an operator's operands are unchanged, return the original argument unchanged. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72941 138bc75d-0d04-0410-961f-82ee72b054a4
* PR optimization/12260sayle2003-10-111-1/+31
| | | | | | | | | | | | | | | * simplify-rtx.c (simplify_unary_operation): Simplify all unary operations through CONST nodes. Optimize (neg (plus X C)) as (minus -C X) for constant values C. (simplify_binary_operation): Optimize (minus (neg X) C) as (minus -C X) for constant values C. (simplify_plus_minus): Avoid creating (neg (const (plus X C)), instead create (minus -C X). * gcc.c-torture/compile/20031011-2.c: New test case. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72379 138bc75d-0d04-0410-961f-82ee72b054a4
* * c-pretty-print.c: Fix comment typos.kazu2003-10-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | * c-pretty-print.h: Likewise. * calls.c: Likewise. * cfgloopmanip.c: Likewise. * cgraphunit.c: Likewise. * cppfiles.c: Likewise. * final.c: Likewise. * function.c: Likewise. * gcov-io.h: Likewise. * gcse.c: Likewise. * genoutput.c: Likewise. * loop.c: Likewise. * postreload.c: Likewise. * reg-stack.c: Likewise. * regmove.c: Likewise. * sched-int.h: Likewise. * sched-rgn.c: Likewise. * simplify-rtx.c: Likewise. * tree-inline.c: Likewise. * config/m68hc11/m68hc11.h: Likewise. * config/mmix/mmix.c: Likewise. * config/mn10300/mn10300.md: Likewise. * config/sh/sh.h: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72118 138bc75d-0d04-0410-961f-82ee72b054a4
* PR optimization/9325, PR java/6391sayle2003-10-031-7/+87
| | | | | | | | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72079 138bc75d-0d04-0410-961f-82ee72b054a4
* * simplify-rtx.c (simplify_unary_operation): Only transformsayle2003-09-181-0/+1
| | | | | | | | (not (eq X Y)) into (ne X Y) when mode is BImode or STORE_FLAG_VALUE is -1. RTL "not" is a bit-wise not, "~", not a logical not "!". git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71532 138bc75d-0d04-0410-961f-82ee72b054a4
* PR bootstrap/12269sayle2003-09-161-45/+52
| | | | | | | | | | | | | | | | | | | | | | | | * simplify-rtx.c (simplify_gen_relational): Allow the cmp_mode argument to be VOIDmode, taking the mode of the comparison from the operands. Only call simplify_relational_operation if we know the mode of the comparison. Honor FLOAT_STORE_FLAG_VALUE if comparison has a floating point result. Ensure that the result is always of the specified mode. (simplify_replace_rtx): Simplify call to simplify_gen_relational. (simplify_unary_operation): Ensure the correct mode and cmp_mode are always passed to simplify_gen_relational. Simplify NOT of comparison operator in any mode, not just BImode. (simplify_ternary_operation): Correct tests on the return value of simplify_relational_operation to use const_true_rtx, not const1_rtx. Abort if it ever returns a non-constant result. * cfgloopanal.c (count_strange_loop_iterations): Use the function simplify_relational_operation, not simplify_gen_relational, if we're only interested in constant comparisons and will ignore non-constant results. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71439 138bc75d-0d04-0410-961f-82ee72b054a4
* * combine.c (combine_simplify_rtx): Move several NOT and NEGsayle2003-09-111-2/+106
| | | | | | | | | optimizations from here... * simplify-rtx.c (simplify_unary_operation): to here. Recursively simplify expressions using simplify_gen_*ary instead of gen_rtx_*. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71300 138bc75d-0d04-0410-961f-82ee72b054a4
* PR optimization/11700.sayle2003-09-041-3/+5
| | | | | | | | | | | * simplify-rtx.c (simplify_subreg): Check that the subreg offset of a hard register is representable before trying to simplify it using subreg_hard_regno. * gcc.c-torture/compile/20030903-1.c: New test case. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71046 138bc75d-0d04-0410-961f-82ee72b054a4
* * builtins.c (fold_builtin_bitop): New function to perform constantsayle2003-08-261-11/+10
| | | | | | | | | | | | | folding of ffs, clz, ctz, popcount and parity builtin functions and their long and long long variants (such as ffsl and ffsll). (fold_builtin): fold_builtin_bitop when appropriate. * simplify-rtx.c (simplify_unary_operation): Honor both CLZ_DEFINED_VALUE_AT_ZERO and CTZ_DEFINED_VALUE_AT_ZERO when evaluating clz and ctz at compile-time, for operands wider than HOST_WIDE_INT. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@70806 138bc75d-0d04-0410-961f-82ee72b054a4
* * builtin-attrs.def: Fix comment formatting.kazu2003-08-221-1/+1
| | | | | | | | | | | | * c-pretty-print.c: Likewise. * diagnostic.h: Likewise. * langhooks.h: Likewise. * recog.c: Likewise. * simplify-rtx.c: Likewise. * tree.def: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@70676 138bc75d-0d04-0410-961f-82ee72b054a4
* * c-common.c: Fix comment formatting.kazu2003-08-191-6/+6
| | | | | | | | | | | | | | | | * c-common.h: Likewise. * c-decl.c: Likewise. * cppinit.c: Likewise. * cpplib.h: Likewise. * emit-rtl.c: Likewise. * input.h: Likewise. * line-map.h: Likewise. * opts.c: Likewise. * opts.h: Likewise. * simplify-rtx.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@70577 138bc75d-0d04-0410-961f-82ee72b054a4
* * simplify-rtx.c (associative_constant_p): New function to testsayle2003-08-171-6/+118
| | | | | | | | | | | | | whether an RTX expression is an immediate constant. (simplify_associative_operation): New function to perform some reassociation optimizations of associative binary expressions. (simplify_binary_operation): Use simplify_associative_operation to simplify PLUS, MULT, AND, IOR, XOR, SMIN, SMAX, UMIN and UMAX. Floating point expressions are only reassociated when unsafe math optimizations are permitted. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@70521 138bc75d-0d04-0410-961f-82ee72b054a4
* * simplify-rtx.c (simplify_binary_operation): Replace calls tosayle2003-08-121-16/+13
| | | | | | | | | gen_rtx_NEG and gen_rtx_NOT with calls to simplify_gen_unary, and calls to gen_rtx_PLUS, gen_rtx_MULT, gen_rtx_LSHIFTRT, gen_rtx_ASHIFT and gen_rtx_AND with calls to simplify_gen_binary. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@70350 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c alloc-pool.c bitmap.c bitmap.h bt-load.c builtins.cghazi2003-07-191-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69587 138bc75d-0d04-0410-961f-82ee72b054a4
* * simplify-rtx.c (simplify_rtx): Use simplify_gen_binary to swapsayle2003-07-181-8/+2
| | | | | | | commutative operands instead of modifying the RTL in-place. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69539 138bc75d-0d04-0410-961f-82ee72b054a4
* * fold-const.c (const_binop): Avoid performing the FP operation atsayle2003-07-181-2/+6
| | | | | | | | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69533 138bc75d-0d04-0410-961f-82ee72b054a4
* * simplify-rtx.c (simplify_replace_rtx): Convert constant comparisonssayle2003-07-161-12/+46
| | | | | | | | to MODE_FLOAT constants if FLOAT_STORE_FLAG_VALUE is defined. (simplify_rtx): Likewise. Simplify (lo_sum (high X) X) as X. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69475 138bc75d-0d04-0410-961f-82ee72b054a4
* * sbitmap.c: Convert prototypes to ISO C90.aj2003-07-061-70/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * sbitmap.h: Likewise. * scan-decls.c: Likewise. * scan.c: Likewise. * sched-deps.c: Likewise. * sched-ebb.c: Likewise. * sched-int.h: Likewise. * sched-rgn.c: Likewise. * sched-vis.c: Likewise. * sibcall.c: Likewise. * simplify-rtx.c: Likewise. * sreal.c: Likewise. * sreal.h: Likewise. * ssa-ccp.c: Likewise. * ssa-dce.c: Likewise. * ssa.c: Likewise. * ssa.h: Likewise. * stack.h: Likewise. * stmt.c: Likewise. * stor-layout.c: Likewise. * stringpool.c: Likewise. * target.h: Likewise. * timevar.c: Likewise. * timevar.h: Likewise. * tlink.c: Likewise. * tracer.c: Likewise. * tree-inline.c: Likewise. * tree-inline.h: Likewise. * tree.c: Likewise. * tree.h: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69002 138bc75d-0d04-0410-961f-82ee72b054a4
* * bt-load.c: Fix comment typos.kazu2003-07-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * c-incpath.c: Likewise. * cfg.c: Likewise. * cfgcleanup.c: Likewise. * cfgloop.h: Likewise. * cfgloopmanip.c: Likewise. * cfgrtl.c: Likewise. * diagnostic.h: Likewise. * dwarfout.c: Likewise. * emit-rtl.c: Likewise. * et-forest.c: Likewise. * et-forest.h: Likewise. * expr.c: Likewise. * gcse.c: Likewise. * genattr.c: Likewise. * jump.c: Likewise. * langhooks.h: Likewise. * local-alloc.c: Likewise. * loop-unroll.c: Likewise. * loop-unswitch.c: Likewise. * ra-build.c: Likewise. * regclass.c: Likewise. * regmove.c: Likewise. * rtl.def: Likewise. * rtlanal.c: Likewise. * sched-ebb.c: Likewise. * sched-rgn.c: Likewise. * simplify-rtx.c: Likewise. * ssa.c: Likewise. * tracer.c: Likewise. * tree.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@68975 138bc75d-0d04-0410-961f-82ee72b054a4
* PR optimization/11381ebotcazou2003-07-031-2/+4
| | | | | | | | | * simplify-rtx.c (simplify_relational_operation): Check that two equal operands have no side-effects before simplifying the comparison. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@68869 138bc75d-0d04-0410-961f-82ee72b054a4
* 2003-06-16 Aldy Hernandez <aldyh@redhat.com>aldyh2003-06-171-1/+5
| | | | | | | | | | * simplify-rtx.c (simplify_subreg): Do not over-extend vector constants. * testsuite/gcc.c-torture/execute/simd-4.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@68047 138bc75d-0d04-0410-961f-82ee72b054a4
* 2003-06-16 Richard Henderson <rth@redhat.com>aldyh2003-06-161-1/+1
| | | | | | | | * simplify-rtx.c (simplify_subreg): Use GET_MODE_SIZE instead of GET_MODE_UNIT_SIZE when simplifying constant vectors. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@68038 138bc75d-0d04-0410-961f-82ee72b054a4
* 2003-06-13 Aldy Hernandez <aldyh@redhat.com>aldyh2003-06-131-2/+1
| | | | | | | | | | | * c-common.c (handle_mode_attribute): Use VECTOR_MODE_P macro. * simplify-rtx.c (simplify_subreg): Same. * emit-rtl.c (gen_lowpart_common): Same. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@67911 138bc75d-0d04-0410-961f-82ee72b054a4
* * simplify-rtx.c (simplify_relational_operation): Add case forgeoffk2003-05-031-1/+12
| | | | | | | ! (fabs(x) < 0.0). git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@66440 138bc75d-0d04-0410-961f-82ee72b054a4
* * simplify-rtx.c: Fix formatting.kazu2003-04-051-24/+24
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65275 138bc75d-0d04-0410-961f-82ee72b054a4
* * simplify-rtx (simplify_binary_operation): Don't abort forrth2003-03-161-0/+7
| | | | | | | SS_PLUS, US_PLUS, SS_MINUS, US_MINUS. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@64452 138bc75d-0d04-0410-961f-82ee72b054a4
* * combine.c (combine_simplify_rtx, simplfy_comparison): Use CC0_P.sayle2003-02-261-5/+1
| | | | | | | | | | | * cse.c (invalidate_skipped_set): Likewise. * integrate.c (subst_constants): Likewise. * jump.c (reversed_comparison_code_parts): Likewise. * loop.c (canonicalize_condition): Likewise. * simplify-rtx.c (simplify_relational_operation): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@63446 138bc75d-0d04-0410-961f-82ee72b054a4
* * simplify-rtx.c (simplify_binary_operation): Simplify ~y whenkazu2003-02-141-4/+10
| | | | | | | (x - (x & y)) is found. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@62906 138bc75d-0d04-0410-961f-82ee72b054a4
* * simplify-rtx.c (simplify_unary_operation,hubicka2003-02-091-12/+184
| | | | | | | | simplify_binary_operation): Deal with vector modes (simplify_ternary_operation): Deal with no-op VEC_MERGE. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@62610 138bc75d-0d04-0410-961f-82ee72b054a4
* * i386.md (ahi?v*3): Set third operand type to TImode.hubicka2003-02-091-1/+70
| | | | | | | | | | | | | | | | | * i386.c (ix86_expand_binop_builtin): Extend operand when needed. * simplify-rtx.c (simplify_subreg): Fix conversion from vector into integer mode. * rtl.def (VEC_MERGE, VEC_SELECT, VEC_CONCAT, VEC_DUPLICATE): Change code so they are arithmetic expressions now. * simplify-rtx.c (simplify_unary_operation, simplify_binary_operation, simplify_ternary_operation): Deal with VEC_* expressions. * i386.md (vmaskcmp, pinsrw, movd patterns): Fix RTL representation. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@62600 138bc75d-0d04-0410-961f-82ee72b054a4
* * defaults.h (CLZ_DEFINED_VALUE_AT_ZERO): New.rth2003-02-051-4/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | (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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@62453 138bc75d-0d04-0410-961f-82ee72b054a4
* * hooks.c (hook_rtx_rtx_identity): Generic hook function thatsayle2003-02-031-3/+27
| | | | | | | | | | | | | | | | | | | | | | | takes a single rtx and returns it unmodified. * hooks.h (hook_rtx_rtx_identity): Prototype here. * target.h (struct gcc_target): Add "delegitimize_address" field to target structure. * target-def.h (TARGET_DELEGITIMIZE_ADDRESS): Provide default for delegitimize_address target using hook_rtx_rtx_identity. (TARGET_INITIALIZER): Initialize delegitimize_address field using TARGET_DELEGITIMIZE_ADDRESS macro. * simplify-rtx.c (avoid_constant_pool_reference): Handle float extensions of constant pool references. Use delegitimize_address to undo the obfuscation of "-fpic". * Makefile.in (simplify-rtx.o): Add dependency on target.h. * config/i386/i386.c (TARGET_DELEGITIMIZE_ADDRESS): Define as i386_simplify_dwarf_addr. (ix86_find_base_term): Simplify using i386_simplify_dwarf_addr. (maybe_get_pool_constant): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@62336 138bc75d-0d04-0410-961f-82ee72b054a4
* 2003-02-01 Richard Henderson <rth@redhat.com>rth2003-02-011-2/+75
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@62252 138bc75d-0d04-0410-961f-82ee72b054a4
* * loop.c (emit_prefetch_instructions): Do conversion at right place inhubicka2003-01-311-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | RTL chain. * combine.c (simplify_set): Reverse order of ragumetns to REG_CANNOT_CHANGE_MODE_P * df.c (df_def_record_1): Likewise. * recog.c (register_operand): Likewise. * simplify-rtx.c (simplify_subreg): Likewise. * hard-reg-set.h (REG_CANNOT_CHANGE_MODE_P): Update use of CANNOT_CHANGE_MODE_CLASS. * regclass.c (cannot_change_mode_set_regs, invalid_mode_change_p): Likewise. * reload.c (push_reload): Likewise. * alpha.h (CANNOT_CHANGE_MODE_CLASS): Update definition. * ia64.h (CANNOT_CHANGE_MODE_CLASS): Update definition. * mips.h (CANNOT_CHANGE_MODE_CLASS): Update definition. * mips-protos.h (mips_cannot_change_mode_class): Update prototype. * mips.c (mips_cannot_change_mode_class): Update. * pa64-regs.h (CANNOT_CHANGE_MODE_CLASS): Update definition. * rs6000.h (CANNOT_CHANGE_MODE_CLASS): Update definition. * s390.h (CANNOT_CHANGE_MODE_CLASS): Update definition. * sh.h (CANNOT_CHANGE_MODE_CLASS): Update definition. * sh-protos.h (sh_cannot_change_mode_class): Update prototype. * sh.c (sh_cannot_change_mode_class): Update. * i386.h (CANNOT_CHANGE_MODE_CLASS): New. * tm.texi (CANNOT_CHANGE_MODE_CLASS): Update documentation. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@62212 138bc75d-0d04-0410-961f-82ee72b054a4
* * emit-rtl.c (reg_attrs_htab): New static variable.hubicka2003-01-241-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (reg_attrs_htab_hash, reg_attrs_htab_eq, get_reg_attrs): New static functions. (reg_rtx): Do not maintain regno_decl. (gen_rtx_REG_offset, set_reg_attrs_from_mem, set_delc_rtx, set_mem_attrs_from_reg): New global function. (init_emit): Do not initialize regno_decl. (init_emit_once): initialize reg_attrs_htab. * final.c (alter_subreg): Do not replace REG by SUBREG. (gen_mem_expr_from_op): Improve output. (output_asm_operands): Likewise. * function.c (assign_params): Do not set REGNO_DECL. * function.h (struct function): Kill regno_decl. (REGNO_DECL): Kill. * gengtype.c (adjust_field_rtx_def): Handle new field of reg. * print_rtl.c (print_rtx): Output REG information. * regclass.c (reg_scan_mark_refs): Update attrs. * reload1.c (alter_reg): Likewise. * simplify_rtx.c (simplify_subreg): Likewise. * stmt.c (expand_decl): Likewise. * rtl.def (REG): Add new field. * rtl.h (struct reg_attrs): New. (rtunion_def): At rtreg. (X0MEMATTR): Add checking. (X0REGATTR, REG_ATTRS, REG_EXPR, REG_OFFSET): New macro. (set_reg_attrs_from_mem, set_mem_attrs_from_reg, gen_rtx_REG_offset): Declare. * tree.h (SET_DECL_RTL): Call set_decl_rtl. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@61741 138bc75d-0d04-0410-961f-82ee72b054a4
* PR optimization/8423sayle2003-01-231-2/+6
| | | | | | | | | | | | | | | | | | | | * cse.c (fold_rtx): Only eliminate a CONSTANT_P_RTX to 1 when its argument is constant, or 0 if !flag_gcse. * simplify-rtx.c (simplify_rtx): Convert CONSTANT_P_RTX to 1 if it's argument is constant. * gcse.c (want_to_gcse_p): Ignore CONSTANT_P_RTX nodes. (hash_scan_set): Don't record CONSTANT_P_RTX expressions. (do_local_cprop): Don't propagate CONSTANT_P_RTX constants. * builtins.c (purge_builtin_constant_p): New function to force instantiation of any remaining CONSTANT_P_RTX nodes. * rtl.h (purge_builtin_constant_p): Prototype here. * toplev.c (rest_of_compilation): Invoke purge_builtin_constant_p pass after GCSE and before loop. (flag_gcse): No longer static. * flags.h (flag_gcse): Prototype here. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@61642 138bc75d-0d04-0410-961f-82ee72b054a4
* * regmove.c: Fix comment typos.kazu2002-12-241-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * reload.c: Likewise. * reload1.c: Likewise. * resource.c: Likewise. * rtl.def: Likewise. * rtl.h: Likewise. * rtlanal.c: Likewise. * sched-deps.c: Likewise. * sched-rgn.c: Likewise. * sibcall.c: Likewise. * simplify-rtx.c: Likewise. * ssa-ccp.c: Likewise. * ssa.c: Likewise. * stmt.c: Likewise. * stor-layout.c: Likewise. * system.h: Likewise. * tlink.c: Likewise. * toplev.c: Likewise. * tracer.c: Likewise. * tree-inline.c: Likewise. * tree.c: Likewise. * tree.h: Likewise. * unroll.c: Likewise. * varasm.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@60473 138bc75d-0d04-0410-961f-82ee72b054a4
* Merge basic-improvements-branch to trunkzack2002-12-161-55/+11
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@60174 138bc75d-0d04-0410-961f-82ee72b054a4
* 2002-11-04 Aldy Hernandez <aldyh@redhat.com>aldyh2002-11-041-7/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * hard-reg-set.h (REG_CANNOT_CHANGE_MODE_P): New. * config/rs6000/rs6000.h (CLASS_CANNOT_CHANGE_MODE_P): Remove. (CLASS_CANNOT_CHANGE_MODE): Remove. (CANNOT_CHANGE_MODE_CLASS): New. * config/alpha/alpha.h: Same. * config/ia64/ia64.h: Same. * config/mips/mips.h: Same. * config/s390/s390.h: Same. * config/sh/sh.h: Same. * config/pa/pa64-regs.h: Same. * config/sh/sh-protos.h (sh_cannot_change_mode_class): Add prototype. * config/sh/sh.c (sh_cannot_change_mode_class): New. * config/mips/mips-protos.h (mips_cannot_change_mode_class): Add prototype. * config/mips/mips.c (mips_cannot_change_mode_class): New. * doc/tm.texi (Register Classes): Remove CLASS_CANNOT_CHANGE_MODE and CLASS_CANNOT_CHANGE_MODE_P. Document CANNOT_CHANGE_MODE_CLASS. * reload.c (push_reload): Use CANNOT_CHANGE_MODE_CLASS. (push_reload): Same. * simplify-rtx.c (simplify_subreg): Same. * reload1.c (choose_reload_regs): Same. * recog.c (register_operand): Same. * regrename.c (mode_change_ok): Change to use new CANNOT_CHANGE_MODE_CLASS infrastructure. * regclass.c (cannot_change_mode_set_regs): New. Declare subregs_of_mode. (regclass): Use subregs_of_mode. Remove references to reg_changes_mode. (init_reg_sets_1): Remove class_can_change_mode and reg_changes_mode code. (invalid_mode_change_p): New. (dump_regclass): Use invalid_mode_change_p instead of class_can_change_mode. (regclass): Same. (record_operand_costs): Do not set reg_changes_mode. * local-alloc.c (struct qty): Remove changes_mode field. (alloc_qty): Remove changes_mode initialization. (update_qty_class): Remove set of changes_mode. (find_free_reg): Use subregs_of_mode. * global.c (find_reg): Use subregs_of_mode info. * rtl.h (cannot_change_mode_set_regs): New prototype. (invalid_mode_change_p): Same. (REG_CANNOT_CHANGE_MODE_P): New macro. * flow.c (mark_used_regs): Calculate subregs_of_mode. Remove REG_CHANGES_MODE. (life_analysis): Clear subregs_of_mode. * combine.c (subst): Pass class to CLASS_CANNOT_CHANGE_MODE_P. Remove use of CLASS_CANNOT_CHANGE_MODE. (simplify_set): Same. (gen_lowpart_for_combine): Calculate subregs_of_mode. Remove REG_CHANGES_MODE. * regs.h: Add extern for subregs_of_mode; Include hard-reg-set and basic-block. (REG_CHANGES_MODE): Delete. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58794 138bc75d-0d04-0410-961f-82ee72b054a4
* * i386.h (CONST_DOUBLE_OK_FOR_LETTER_P): Remove 'H'hubicka2002-10-291-1/+4
| | | | | | | | | | | | | | | | | | | * i386.md (movsf*, movdf*): Use 'C' instead of 'H' * md.texi (machine dependent constraints): Document 'C' * simplify-rtx.c (simplify_subreg): Fix const_int->vector subregging. * i386.c (ix86_expand_vector_move): Fix. * i386.c (ix86_expand_builtin): Use sse2_maskmovdqu_rex64. * i386.md (sse2_maskmovdqu_rex64): New pattern PR target/8322 * xmmintrin.h (_mm_stream_pi, _mm_stream_pd): Fix cast. (ix86_init_mmx_sse_builtins): Fix type. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58631 138bc75d-0d04-0410-961f-82ee72b054a4
* PR opt/8165rth2002-10-141-2/+15
| | | | | | | | * gcse.c (adjust_libcall_notes): Revert last change. * simplify-rtx.c (simplify_replace_rtx): Handle LO_SUM. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58130 138bc75d-0d04-0410-961f-82ee72b054a4
* PR target/8087sayle2002-10-081-0/+3
| | | | | | | | * simplify-rtx.c (avoid_constant_pool_reference): Allow constant pool references that are constructed using LO_SUM. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@57942 138bc75d-0d04-0410-961f-82ee72b054a4
* * LANGUAGES: Follow spelling conventions.kazu2002-09-271-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * rtl.def: Likewise. * sbitmap.c: Likewise. * sched-int.h: Likewise. * sched-rgn.c: Likewise. * sibcall.c: Likewise. * simplify-rtx.c: Likewise. * ssa.c: Likewise. * stab.def: Likewise. * stmt.c: Likewise. * stor-layout.c: Likewise. * target.h: Likewise. * timevar.c: Likewise. * toplev.c: Likewise. * tree-dump.c: Likewise. * tree-inline.c: Likewise. * tree.c: Likewise. * tree.def: Likewise. * tree.h: Likewise. * unroll.c: Likewise. * varasm.c: Likewise. * vmsdbgout.c: Likewise. * treelang/treelang.texi: Likewise. * treelang/treetree.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@57587 138bc75d-0d04-0410-961f-82ee72b054a4
* * real.c (do_fix_trunc): New.rth2002-09-171-4/+16
| | | | | | | | | (real_arithmetic): Call it. * simplify-rtx.c (simplify_unary_operation): Handle FIX with a floating-point result mode. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@57223 138bc75d-0d04-0410-961f-82ee72b054a4
* gcc/rth2002-09-161-3/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@57198 138bc75d-0d04-0410-961f-82ee72b054a4
* * ChangeLog: Follow spelling conventions.kazu2002-09-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * ChangeLog.0: Likewise. * ChangeLog.1: Likewise. * ChangeLog.2: Likewise. * ChangeLog.4: Likewise. * ChangeLog.6: Likewise. * config.gcc: Likewise. * dwarfout.c: Likewise. * reload1.c: Likewise. * simplify-rtx.c: Likewise. * unwind-sjlj.c: Likewise. * config/avr/avr.h: Likewise. * config/d30v/d30v.h: Likewise. * config/frv/frv.c: Likewise. * config/frv/frv.h: Likewise. * config/ip2k/ip2k.h: Likewise. * config/m88k/m88k-move.sh: Likewise. * config/stormy16/stormy16.c: Likewise. * config/stormy16/stormy16.h: Likewise. * doc/extend.texi: Likewise. * doc/interface.texi: Likewise. * doc/invoke.texi: Likewise. * doc/md.texi: Likewise. * doc/rtl.texi: Likewise. * doc/tm.texi: Likewise. * doc/trouble.texi: Likewise. * ginclude/float.h: Likewise. * treelang/treelang.texi: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@57179 138bc75d-0d04-0410-961f-82ee72b054a4
* 2002-08-02 Toon Moene <toon@moene.indiv.nluug.nl>toon2002-08-021-6/+6
| | | | | | | | | | * simplify-rtx.c (simplify_binary_operation): x * 1 is allowed when not honoring signalling NaNs. (simplify_ternary_operation): a == b has a definite value when not honoring NaNs. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55980 138bc75d-0d04-0410-961f-82ee72b054a4
* * df.c (df_insn_table_realloc): Change parameter to unsigned.ghazi2002-08-021-1/+1
| | | | | | | | | * optabs.c (expand_binop): Make variable unsigned. * simplify-rtx.c (simplify_subreg): Likewise. * unroll.c (unroll_loop): Cast to avoid signed/unsigned warnings. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55960 138bc75d-0d04-0410-961f-82ee72b054a4
* * Makefile.in: rtlanal.o now depends upon real.h.sayle2002-07-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55804 138bc75d-0d04-0410-961f-82ee72b054a4