aboutsummaryrefslogtreecommitdiff
path: root/gcc/rtlanal.c
AgeCommit message (Collapse)AuthorFilesLines
2001-12-24rtl.h (in_expr_list_p): New declaration.Richard Kenner1-0/+18
* rtl.h (in_expr_list_p): New declaration. * rtlanal.c (in_expr_list_p): New function. * cfgcleanup.c: Reformatting and minor code rearrangement. * cfglayout.c, cfgloop.c, cfgrtl.c: Likewise. From-SVN: r48304
2001-12-22rtl.h (subreg_lsb): Declare.John Wehle1-0/+43
* rtl.h (subreg_lsb): Declare. * rtlanal.c (subreg_lsb): Implement. From-SVN: r48272
2001-12-08* rtlanal.c (get_jump_table_offset): Delete unused variable.Kaveh R. Ghazi1-1/+0
From-SVN: r47791
2001-12-07rtl.h (get_jump_table_offset): Declare.John Wehle1-0/+141
* rtl.h (get_jump_table_offset): Declare. * rtlanal.c (get_jump_table_offset): Implement. From-SVN: r47756
2001-12-04rtl.def (PREFETCH): New rtx code.Janis Johnson1-0/+7
* rtl.def (PREFETCH): New rtx code. * doc/rtl.texi (PREFETCH): Add documentation. * function.c (instantiate_virtual_regs_1): Handle PREFETCH rtx. * rtlanal.c (reg_referenced_p): Ditto. * sched-vis.c (print_exp): Ditto. * ssa-dce.c (find_inherently_necessary): Ditto. From-SVN: r47580
2001-11-11ChangeLog.2, [...]: Fix spelling errors.Joseph Myers1-2/+2
* ChangeLog.2, ChangeLog.3, ChangeLog.4, ChangeLog.5, ChangeLog, cfg.c, cfganal.c, cfgcleanup.c, cfglayout.c, cfgloop.c, cfgrtl.c, collect2.c, combine.c, config.in, configure, configure.in, conflict.c, dwarf2out.c, dwarfout.c, except.c, final.c, flow.c, genattrtab.c, ggc-page.c, jump.c, lcm.c, predict.c, reg-stack.c, reload1.c, rtlanal.c, sched-rgn.c, toplev.c, unwind-dw2-fde.h: Fix spelling errors. From-SVN: r46928
2001-10-28ChangeLog.0, [...]: Fix spelling errors.Joseph Myers1-2/+2
* ChangeLog.0, ChangeLog.1, ChangeLog.2, ChangeLog.3, ChangeLog.4, ChangeLog.5, ChangeLog, ChangeLog.lib, FSFChangeLog.10, ONEWS, c-common.c, caller-save.c, cfg.c, cfgcleanup.c, cfgrtl.c, collect2.c, df.h, diagnostic.h, final.c, gcse.c, gthr.h, haifa-sched.c, jump.c, local-alloc.c, profile.c, protoize.c, regmove.c, reload1.c, rtlanal.c, sched-vis.c, ssa.c, stmt.c, system.h, toplev.c: Fix spelling errors. From-SVN: r46580
2001-10-19Makefile.in (rtlanal.o): Depend on $(TM_P_H).Kaveh R. Ghazi1-0/+1
* Makefile.in (rtlanal.o): Depend on $(TM_P_H). * arm-protos.h (rdata_section, zero_init_section, common_section): Prototype. * arm.h (ASM_OUTPUT_DEF_FROM_DECLS): Const-ify. * avr.h (ASM_OUTPUT_SKIP): Rename macro parameter to avoid traditional mode stringification. * function.c (thread_prologue_and_epilogue_insns): Wrap variable in macros controling its use. * rtlanal.c: Include tm_p.h. * varasm.c (asm_output_aligned_bss): Mark parameter with ATTRIBUTE_UNUSED. (assemble_constant_align, assemble_start_function, assemble_align, assemble_variable, assemble_trampoline_template, output_constant_def_contents): Wrap potentially empty if-stmt body in brackets. From-SVN: r46360
2001-10-11rtlanal.c (noop_move_p): Insns with a REG_RETVAL note should not be ↵John Wehle1-0/+5
considered as a no-op. * rtlanal.c (noop_move_p): Insns with a REG_RETVAL note should not be considered as a no-op. * flow.c (delete_noop_moves): Handle REG_LIBCALL notes. From-SVN: r46174
2001-10-11alias.c: Remove uses of "register" specifier in declarations of arguments ↵Stan Shebs1-56/+56
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-09-14Add missing semicolonNick Clifton1-1/+1
From-SVN: r45597
2001-09-07loop.c (record_giv): Avoid simplifying MULT to ASHIFT.Richard Henderson1-4/+4
* loop.c (record_giv): Avoid simplifying MULT to ASHIFT. (express_from_1): Wrap lines. * rtlanal.c (commutative_operand_precedence): Rename from operand_preference; export. * rtl.h: Declare it. * simplify-rtx.c (simplify_gen_binary): Tidy +/- const_int handling. (simplify_binary_operation): Invoke simplify_plus_minus on (CONST (PLUS ...)) as well. (struct simplify_plus_minus_op_data): New. (simplify_plus_minus_op_data_cmp): New. (simplify_plus_minus): Use them. Avoid infinite recursion with simplify_binary_operation wrt CONST. From-SVN: r45473
2001-08-22Makefile.in, [...]: replace "GNU CC" with "GCC".Lars Brinkhoff1-12/+12
* 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-12gcc.c: Fix comment formatting.Kazu Hirata1-2/+2
* gcc.c: Fix comment formatting. * gccspec.c: Likewise. * gcov.c: Likewise. * gcse.c: Likewise. * genemit.c: Likewise. * gengenrtl.c: Likewise. * genrecog.c: Likewise. * gensupport.c: Likewise. * ggc-page.c: Likewise. * global.c: Likewise. * graph.c: Likewise. * ifcvt.c: Likewise. * integrate.c: Likewise. * lcm.c: Likewise. * libgcc2.c: Likewise. * loop.c: Likewise. * mbchar.c: Likewise. * optabs.c: Likewise. * predict.c: Likewise. * prefix.c: Likewise. * profile.c: Likewise. * protoize.c: Likewise. * real.c: Likewise. * recog.c: Likewise. * regclass.c: Likewise. * regmove.c: Likewise. * reg-stack.c: Likewise. * reload1.c: Likewise. * resource.c: Likewise. * rtlanal.c: Likewise. * rtl.c: Likewise. From-SVN: r44837
2001-08-07rtlanal.c (find_first_parameter_load): Call note_stores only on the ↵Jan Hubicka1-1/+2
instructions. * rtlanal.c (find_first_parameter_load): Call note_stores only on the instructions. From-SVN: r44693
2001-08-03rtlanal.c (find_first_parameter_load): Stop if we reach a CODE_LABEL at ↵Richard Henderson1-3/+7
BOUNDARY. * rtlanal.c (find_first_parameter_load): Stop if we reach a CODE_LABEL at BOUNDARY. From-SVN: r44595
2001-07-29rtlanal.c (parms_set, [...]): Break out from...; handle multiple sets.Jan Hubicka1-0/+74
* rtlanal.c (parms_set, find_first_parameter_load): Break out from...; handle multiple sets. * except.c (sjlj_mark_call_sites): .... here. * gcse.c (insert_insn_end_bb): Use find_first_parameter_load. From-SVN: r44465
2001-07-29Suggested by Richard Henderson and Richard Kenner:Jan Hubicka1-0/+3
* combine.c (recog_for_combine): Use the fake recog only if instruction does not match. * rtl.h (NOOP_MOVE_INSN_CODE): New. * rtlanal.c (noop_move_p): Always return 1 for NOOP_MOVE_INSN_CODE. * combine.c (try_combine): Discover noop jump as direct jump. From-SVN: r44464
2001-07-23basic-block.h (find_sub_basic_block): Declare.Jan Hubicka1-0/+39
* basic-block.h (find_sub_basic_block): Declare. * flow.c (make_edges): New arguments MIN and MAX; (find_sub_basic_blocks): Revamp to use make_edges and purge_dead_edges. (find_basic_blocks): Update call of find_sub_basic_block. * recog.c (split_all_insns): Always expect CFG to be consistent; call find_sub_basic_blocks in case something has changed. * toplev.c (rest_of_compilation): Always call split_all_insns once CFG has been built. * basic-block.h (delete_noop_moves): Declare. * combine.c (combine_instructions): Call it. (recog_for_combine): Tolerate noop moves (distribute_notes): Force refresh when register dies at noop move. * flow.c (delete_noop_moves): Use BB structure; delete JUMP insns too. (life_analysis): Update delete_noop_moves call. (set_noop_p): Move too ... * rtlanal.c (noop_move_p): ... here. * rtl.h (noop_move_p): Declare. * basic-block.h (purge_all_dead_edges, purge_dead_edges): New functions. * toplev.c (rest_of_compilation): Conditionally call purge_all_dead_edges after combine. * gcse.c (cprop_cc0_jump, cprop_insn): New argument "basic_block". (cprop_jump): Likewise; call purge_dead_edges if substitution suceeded. From-SVN: r44267
2001-07-20rtlanal.c (set_noop_p): Return true for noop jumps.Jan Hubicka1-0/+3
* rtlanal.c (set_noop_p): Return true for noop jumps. * expr.c (emit_single_push_insn): Add call to push expander. * expr.h (optab_index): Add OTI_push (push_optab): New constant. * genopinit.c (optabs): Add push_optab. * optabs.c (init_optab): Init push optab. * md.texi (push??1): Document From-SVN: r44210
2001-07-01Trivial whitespace changesRichard Kenner1-2/+2
From-SVN: r43671
2001-06-04rtlanal.c (rtx_unsable_p): ADDRESSOF is stable.Jan Hubicka1-0/+3
* rtlanal.c (rtx_unsable_p): ADDRESSOF is stable. (no_labels_between_p): Short circuit case beg==end. From-SVN: r42867
2001-06-04rtlanal.c (operand_preference): Fix preference for objects.Jan Hubicka1-6/+7
* rtlanal.c (operand_preference): Fix preference for objects. * gcse.c (handle_avail_expr): Be prepared to handle single_set parallels. * combine.c (if_then_else_cond): Use simplify_subreg instead of operand_subword. * integreate.c (sub_constants): Likewise. * emit-rtl.c (constant_subword): Deprecate; remove most of code and use simplify_gen_subreg. Mon Jun 4 19:55:23 CEST 2001 Lars Brinkhoff <lars@nocrew.org> * sibcall.c (skip_copy_to_return_value): recognize the situation when the called function's return value is copied into an intermediate pseudo, and then into the calling functions return value register. From-SVN: r42864
2001-06-04simplify_rtx.c (simplify_subreg): Keep subregs on return values...Jan Hubicka1-34/+3
* simplify_rtx.c (simplify_subreg): Keep subregs on return values, check CLASS_CANNOT_CHANGE_MODE before avoiding subreg on hard reg, in case register wasn't OK previously, accept it now; allow subregs of frame pointer if reload completed and frame pointer is not needed. * combine.c (sombine_simplify_rtx): Fix comment; use subreg_lowpart_offset instead of subreg_lowpart_p (gen_lowpart_for_combine): Use subreg_lowpart_offset. * rtl.h (subreg_lowpart_parts_p): Kill. (subreg_lowpart_offset, subreg_highpart_offset): Declare. * simplify-rtx.c (simplify_subreg): Use subreg_lowpart_offset. * emit-rtl.c (gen_lowpart_SUBREG): Use subreg_lowpart_offset; (gen_lowpart_common): Likewise. (subreg_lowpart_p): Likewise. (subreg_lowpart_parts_p): Kill. (subreg_lowpart_offset, subreg_highpart_offset): New function. * emit-rtl.c (gen_lowpart_common): Use simplify_gen_subreg to simplify SUBREG and REG. (gen_highpart): Use simplify_gen_subreg for all simplifications. * emit-rtl.c (gen_realpart, gen_imagpart): Do not handle CONCAT specially. * rtlanal.c (replace_regs): Use simplify_gen_subreg From-SVN: r42850
2001-05-17integrate.c (copy_rtx_and_substitute): Use simplify_gen_subreg.Jan Hubicka1-0/+47
* integrate.c (copy_rtx_and_substitute): Use simplify_gen_subreg. (simplify_subreg): Handle complex types represented as CONCAT. * recog.c (validate_replace_rtx_1): Properly canonicalize expression * rtl.h (swap_commutative_operands_p): Declare. * rtlanal.c (swap_commutative_operands_p): New. (operand_preference): New static function. * combine.c (combine_simplify_rtx): Use swap_commutative_operands_p. (gen_binary): Likewise. * optabs.c (emit_cmp_and_jump_insns, emit_conditional_move): Likewise. * simplify-rtx.c (simplify_gen_binary, simplify_gen_relational): Likewise. From-SVN: r42224
2001-05-13rtl.h (SYMBOL_REF_WEAK): New macro.Franz Sirl1-4/+2
2001-05-13 Franz Sirl <Franz.Sirl-kernel@lauterbach.com> * rtl.h (SYMBOL_REF_WEAK): New macro. * rtlanal.h (rtx_addr_can_trap): Use it, a weak SYMBOL_REF can trap. * varasm.c (make_decl_rtl): Mark SYMBOL_REF weak if necessary. * rtl.texi (SYMBOL_REF_WEAK): Document it. * gcc.texi: Remove wrong description. From-SVN: r42046
2001-05-02c-lex.c: NULL_PTR -> NULL.Kaveh R. Ghazi1-1/+1
* c-lex.c: NULL_PTR -> NULL. * cse.c: Likewise. * emit-rtl.c: Likewise. * gcse.c: Likewise. * genpeep.c: Likewise. * jump.c: Likewise. * mips-tdump.c: Likewise. * reload1.c: Likewise. * rtlanal.c: Likewise. * stmt.c: Likewise. * stor-layout.c: Likewise. * toplev.c: Likewise. From-SVN: r41761
2001-04-04rtl.h (set_noop_p): Declare.John Wehle1-0/+36
* rtl.h (set_noop_p): Declare. * flow.c (set_noop_p): Move from here ... * rtlanal.c (set_noop_p): ... to here and enhance. * cse.c (delete_trivially_dead_insns): Use it. * gcse.c (hash_scan_set): Likewise. * jump.c (delete_noop_moves): Likewise. * recog.c (split_all_insns): Likewise. From-SVN: r41077
2001-04-03Use byte offsets in SUBREGs instead of words.Jakub Jelinek1-4/+80
2001-04-03 Jakub Jelinek <jakub@redhat.com> David S. Miller <davem@pierdol.cobaltmicro.com> Andrew MacLeod <amacleod@redhat.com> Use byte offsets in SUBREGs instead of words. * alias.c (nonlocal_mentioned_p): Use subreg_regno function. * caller-save.c (mark_set_regs): Change callers of subreg_hard_regno to pass new argument. (add_stored_regs): Use subreg_regno_offset function. * calls.c (expand_call): For non-paradoxical SUBREG take endianess into account. (precompute_arguments): Use gen_lowpart_SUBREG. * combine.c (try_combine): Replace explicit XEXP with SUBREG_REG. (combine_simplify_rtx): Rework to use SUBREG_BYTE. (simplify_set): Rework to use SUBREG_BYTE. (expand_field_assignment): Use SUBREG_BYTE. (make_extraction): Use SUBREG_BYTE. (if_then_else_cond): Use SUBREG_BYTE. (apply_distributive_law): Use SUBREG_BYTE and fixup subreg comments. (gen_lowpart_for_combine): Compute full byte offset. * cse.c (mention_regs): Use SUBREG_BYTE. (remove_invalid_subreg_refs): Rework to use SUBREG_BYTE. (canon_hash): Use SUBREG_BYTE. (fold_rtx): Pass SUBREG_BYTE div UNITS_PER_WORD to operand_subword. (gen_lowpart_if_possible): Formatting. * dbxout.c (dbxout_symbol_location): Compute SUBREG hard regnos correctly. * dwarf2out.c (is_pseudo_reg): Fixup explicit XEXP into SUBREG_REG (mem_loc_descriptor): Fixup explicit XEXP into SUBREG_REG (loc_descriptor): Fixup explicit XEXP into SUBREG_REG * dwarfout.c (is_pseudo_reg): Fixup explicit XEXP into SUBREG_REG (output_mem_loc_descriptor): Fixup explicit XEXP into SUBREG_REG (output_loc_descriptor): Fixup explicit XEXP into SUBREG_REG * emit-rtl.c (gen_rtx_SUBREG): New function, used to verify certain invariants about SUBREGs the compiler creates. (gen_lowpart_SUBREG): New function. (subreg_hard_regno): New function to get the final register number. (gen_lowpart_common): Use SUBREG_BYTE. (gen_imagpart): Spacing nits. (subreg_realpart_p): Use SUBREG_BYTE. (gen_highpart): Use SUBREG_BYTE. (subreg_lowpart_p): Always compute endian corrected goal offset, even at the byte level, then compare against that. (constant_subword): New function, pulled out all constant cases from operand_subword and changed second argument name to offset. (operand_subword): Detect non REG/SUBREG/CONCAT/MEM cases early and call constant_subword to do the work. Return const0_rtx if looking for a word outside of OP. (operand_subword_force): Change second arg name to offset. * expmed.c (store_bit_field): Use SUBREG_BYTE. (store_split_bit_field): Use SUBREG_BYTE. (extract_bit_field): Use SUBREG_BYTE. (extract_split_bit_field): Use SUBREG_BYTE. (expand_shift): Use SUBREG_BYTE. * expr.c (store_expr, expand_expr): Use gen_lowpart_SUBREG. * final.c (alter_subreg) Use subreg_hard_regno and SUBREG_BYTE. * flow.c (set_noop_p): Use SUBREG_BYTE. (mark_set_1): Remove ALTER_HARD_SUBREG. Use subreg_regno_offset instead. * function.c (fixup_var_refs_1): Fixup explicit XEXP into a SUBREG_REG. (fixup_memory_subreg): Use SUBREG_BYTE and remove byte endian correction code. (optimize_bit_field): Use SUBREG_BYTE. (purge_addressof_1): Use SUBREG_BYTE. (purge_single_hard_subreg_set): Use subreg_regno_offset function. (assign_params): Mark arguments SUBREG_PROMOTED_VAR_P if they are actually promoted by the caller and PROMOTE_FOR_CALLS_ONLY is true. * gengenrtl.c (special_rtx): Add SUBREG. * global.c (mark_reg_store): Use SUBREG_BYTE. (set_preference): Rework to use subreg_regno_offset and SUBREG_BYTE. * ifcvt (noce_emit_move_insn): Use SUBREG_BYTE. * integrate.c (copy_rtx_and_substitute): Use SUBREG_BYTE and make sure final byte offset is congruent to subreg's mode size. (subst_constants): Use SUBREG_BYTE. (mark_stores): Use subreg_regno_offset function. * jump.c (rtx_renumbered_equal_p, true_regnum): Use subreg_regno_offset function and SUBREG_BYTE. * local-alloc.c (combine_regs): Use subreg_regno_offset function. (reg_is_born): Use subreg_hard_regno. * recog.c (valid_replace_rtx_1): Use SUBREG_BYTE and remove byte endian correction code. Don't combine subregs unless resulting offset aligns with type. Fix subreg constant extraction for DImode. Simplify SUBREG of VOIDmode CONST_DOUBLE. (general_operand): Remove dead mode_altering_drug code. (indirect_operand): Use SUBREG_BYTE. (constrain_operands): Use subreg_regno_offset function. * reg-stack.c (get_true_reg): Use subreg_regno_offset function. * regmove.c (regmove_optimize): Use SUBREG_BYTE. (optimize_reg_copy_3): Use gen_lowpart_SUBREG. * regs.h (REG_SIZE): Allow target to override. (REGMODE_NATURAL_SIZE): New macro which target can override. * reload.c (reload_inner_reg_of_subreg): subreg_regno should be used on the entire subreg rtx. (push_reload): Use SUBREG_BYTE in comments and code. (find_dummy_reload): Use subreg_regno_offset. Only adjust offsets for hard registers inside subregs. (operands_match_p): Use subreg_regno_offset. (find_reloads): Use SUBREG_BYTE and only advance offset for subregs containing hard regs. (find_reload_toplev): Use SUBREG_BYTE. Remove byte endian corrections when fixing up MEM subregs. (find_reloads_address_1): Use SUBREG_BYTE, subreg_regno, and subreg_regno_offset where appropriate. (find_reloads_subreg_address): Use SUBREG_BYTE. Remove byte endian corrections when fixing up MEM subregs. (subst_reloads): When combining two subregs, make sure final offset is congruent to subreg's mode size. (find_replacement): Use SUBREG_BYTE and subreg_regno_offset. (refers_to_regno_for_reload_p): Use subreg_regno. (reg_overlap_mentioned_for_reload_p): Use subreg_regno_offset. * reload1.c (eliminate_regs) Use SUBREG_BYTE. Remove byte endian correction code for memory subreg fixups. (forget_old_reload_1): Use subreg_regno_offset. (choose_reload_regs): Use subreg_regno. (emit_input_reload_insns): Use SUBREG_BYTE. (reload_combine_note_store): Use subreg_regno_offset. (move2add_note_store): Use subreg_regno_offset. * resource.c (update_live_status, mark_referenced_resources): Use subreg_regno function. (mark_set_resources): Use subreg_regno function. * rtl.h (SUBREG_WORD): Rename to SUBREG_BYTE. (subreg_regno_offset, subreg_regno): Define prototypes. (subreg_hard_regno, constant_subword, gen_rtx_SUBREG): Newi functions. (gen_lowpart_SUBREG): Add prototype. * rtl.texi (subreg): Update to reflect new byte offset representation. Add mentioning of the effect that BYTES_BIG_ENDIAN has on subregs now. * rtlanal.c (refers_to_regno_p): Use subreg_regno. (reg_overlap_mentioned_p): Use subreg_regno. (replace_regs); Make sure final offset of combined subreg is congruent to size of subreg's mode. (subreg_regno_offset): New function. (subreg_regno): New function. * sched-vis.c (print_value): Change SUBREG_WORD to SUBREG_BYTE. * sdbout.c (sdbout_symbol): Compute offset using alter_subreg. * stmt.c (expand_anon_union_decl): Use gen_lowpart_SUBREG. * tm.texi (ALTER_HARD_SUBREG): Remove, it is now dead. (SUBREG_REGNO_OFFSET): Describe SUBREG_REGNO_OFFSET overrides. * config/a29k/a29k.c (gpc_reg_operand): Use subreg_regno. (a29k_get_reloaded_address): Use SUBREG_BYTE. (print_operand): Use SUBREG_BYTE. * config/alpha/alpha.c (print_operand_address): Use SUBREG_BYTE. * config/arm/arm.c (arm_reload_in_hi): Use SUBREG_BYTE. (arm_reload_out_hi): Use SUBREG_BYTE. * config/d30v/d30v.c (d30v_split_double): Use subreg_regno_offset instead of SUBREG_WORD. (d30v_print_operand_memory_reference): Use subreg_regno_offset. * config/dsp16xx/dsp16xx.md (extendqihi2, zero_extendqihi2): Fix SUBREG creation to use byte offset. * config/h8300/h8300.md (Unnamed HImode zero extraction and 16bit inverted load insns): Fix explicit rtl subregs to use byte offsets. * config/i370/i370.md (cmpstrsi, movstrsi, mulsi3, divsi3, udivsi3, umodsi3): Generate SUBREGs with byte offsets. * config/i860/i860.c (single_insn_src_p): Use SUBREG_BYTE. * config/i860/i860.md (mulsi3_big): Fixup explicit SUBREGs in rtl to use byte offsets. (unnamed fmlow.dd insn): Fixup SUBREGS to use byte offsets. * config/i960/i960.md (extendhisi2): Generate SUBREGs with byte offsets, also make sure it is congruent to SUBREG's mode size. (extendqisi2, extendqihi2, zero_extendhisi2, zero_extendqisi2, unnamed ldob insn): Generate SUBREGs with byte offset. (zero_extendqihi2): SUBREG's are byte offsets. * config/m68hc11/m68hc11.c (m68hc11_gen_lowpart): Use SUBREG_BYTE. (m68hc11_gen_highpart): Use SUBREG_BYTE. * config/m68k/m68k.md (zero_extendhisi2, zero_extendqihi2, zero-extendqisi2): Generate SUBREGs with byte offset. (umulsidi3, mulsidi3, subreghi1ashrdi_const32, subregsi1ashrdi_const32, subreg1lshrdi_const32): Fixup explicit subregs in rtl to use byte offsets. * config/m88k/m88k.md (extendsidi2): fixup subregs to use byte offset. * config/mips/mips.c (mips_move_1word): Use subreg_regno_offset. (mips_move_2words): Use subreg_regno_offset. (mips_secondary_reload_class): Use subreg_regno_offset. * config/mips/mips.md (DImode plus, minus, move, and logical op splits): Fixup explicit subregs in rtl to use byte offsets. * config/mn10200/mn10200.c (print_operand): Use subreg_regno function. * config/mn10300/mn10300.c (print_operand): Use subreg_regno function. * config/ns32k/ns32k.md (udivmoddisi4): Fix explicit subregs in rtl to use byte offsets. * config/pa/pa.c (emit_move_sequence): Use SUBREG_BYTE. * config/pa/pa.md (floatunssisf2, floatunssidf2, mulsi3): fix explicit subregs to use byte offsets. * config/pdp11/pdp11.md (zero_extendhisi2, modhi3, modhi3+1): Fixup explicit subregs in rtl to use byte offsets. * config/romp/romp.c (memory_offset_in_range_p): Use SUBREG_BYTE and remove byte endian correction code. * config/sh/sh.c (output_movedouble): Use subreg_regno. (gen_ashift_hi): Use SUBREG_BYTE. (regs_used): Use subreg_regno_offset. (machine_dependent_reorg): Use subreg_regno_offset. * config/sh/sh.h (INDEX_REGISTER_RTX_P): Use SUBREG_BYTE. * config/sh/sh.md (DImode and DFmode move splits): Use subreg_regno. (movdf_i4): Subregs are byte offsets now. * config/sparc/sparc.c (ultra_find_type): Use SUBREG_BYTE. * config/sparc/sparc.h (ALTER_HARD_SUBREG): Removed. (REGMODE_NATURAL_SIZE): Override. (REG_SIZE): For SUBREG check float mode on SUBREG_REG's mode. * config/sparc/sparc.md (TFmode move splits): Generate SUBREGs with byte offsets. (zero_extendhisi2, zero_extendqidi2_insn, extendhisi2, extendqihi2, sign_extendqihi2_insn, sign_extendqisi2_insn, extendqidi2): Generate SUBREGs with byte offsets, also make sure it is congruent to SUBREG's mode size. (smulsi3_highpart_v8plus): Fix explicit subregs in rtl to use byte offsets. (cmp_siqi_trunc, cmp_siqi_trunc_set, cmp_diqi_trunc, cmp_diqi_trunc_set, lshrdi3_v8plus+1, lshrdi3_v8plus+2, lshrdi3_v8plus+3, lshrdi3_v8plus+4): Use proper SUBREG_BYTE offset for non-paradoxical subregs in patterns. * config/v850/v850.c (print_operand, output_move_double): Use subreg_regno function. Co-Authored-By: Andrew MacLeod <amacleod@redhat.com> Co-Authored-By: David S. Miller <davem@pierdol.cobaltmicro.com> From-SVN: r41058
2001-03-27rtlanal.c (rtx_addr_can_trap_p): Virtual registers cannot trap.Richard Henderson1-5/+19
* rtlanal.c (rtx_addr_can_trap_p): Virtual registers cannot trap. Auto-inc addresses trap only if their base register does. From-SVN: r40914
2001-03-08rtlanal.c (rtx_varies_p): Check operand 0 of a LO_SUM unless for_alias is set.John Wehle1-2/+4
* rtlanal.c (rtx_varies_p): Check operand 0 of a LO_SUM unless for_alias is set. From-SVN: r40340
2001-02-25ifcvt.c (struct noce_if_info): Add test_bb.Richard Henderson1-0/+5
* ifcvt.c (struct noce_if_info): Add test_bb. (noce_get_alt_condition): New. (noce_try_minmax, noce_try_abs): New. (noce_operand_ok): New. (noce_process_if_block): Use them. * rtlanal.c (may_trap_p): NEG and ABS can never trap. From-SVN: r40060
2001-02-18Makefile.in (rtlanal.o): Depend on hard-reg-set.h.Jeffrey A Law1-3/+9
* Makefile.in (rtlanal.o): Depend on hard-reg-set.h. ($HOST_PREFIX_1)rtlanal.o: Remove rules for building (mostlyclean): Corresponding changes. * rtlanal.c (hard-reg-set.h): Include. (rtx_unstable_p): Do not treat the argument pointer specially if it is not a fixed register. (rtx_varies_p, rtx_addr_can_trap_p): Similarly. From-SVN: r39860
2001-02-17recog.c (validate_replace_src_1): New.Richard Kenner1-2/+84
* recog.c (validate_replace_src_1): New. (validate_replace_src_data): Likewise. (validate_replace_src): Use note_uses. * rtl.h (note_uses): Declare. * rtlanal.c (note_uses): New. Co-Authored-By: Jan Hubicka <jh@suse.cz> From-SVN: r39804
2001-02-13rtlanal.c (find_reg_equal_equiv_note): New function.Richard Kenner1-0/+17
* rtlanal.c (find_reg_equal_equiv_note): New function. * simplify-rtx.c (simplify_gen_unary, simplify_gen_ternary): New fns. (simplify_gen_relational, simplify_replace_rtx): Likewise. * rtl.h: Add declarations for above functions. From-SVN: r39644
2001-02-08* rtlanal.c (remove_node_from_expr_list): Correctly update PREV.Richard Kenner1-4/+5
From-SVN: r39541
2001-01-19rtl.texi (SET, CLOBBER): Document PARALLEL as SET_DEST possibility.Richard Kenner1-25/+17
* rtl.texi (SET, CLOBBER): Document PARALLEL as SET_DEST possibility. * flow.c (mark_set_1, case PARALLEL): Don't require BLKmode, allow element to be null, and always expect an EXPR_LIST. * rtlanal.c (reg_overlap_mentioned_p, note_stores): Likewise. * sched-deps.c (sched_analyze_1): Likewise. * sched-rgn.c (check_live_1, update_live_1): Likewise. From-SVN: r39141
2001-01-19tweak commentsJason Merrill1-1/+1
From-SVN: r39134
2001-01-18flow.c (mark_set_1, [...]): Now case; rework to allow entry to be EXPR_LIST.Richard Kenner1-50/+34
* flow.c (mark_set_1, case PARALLEL): Now case; rework to allow entry to be EXPR_LIST. * rtlanal.c (reg_overlap_mentioned_p): Allow PARALLEL in SET to be an EXPR_LIST (but not null, which other code doesn't allow). (note_stores): Properly handle PARALLEL in SET. Recursively call for top-level PARALLEL. * sched-deps.c (sched_analyze_1): Handle EXPR_LIST in PARALLEL in SET. * sched-rgn.c (check_live_1, update_live_1): Likewise. From-SVN: r39118
2001-01-14rtlanal.c (computed_jump_p_1): Rename from jmp_uses_reg_or_mem; update all ↵Richard Henderson1-15/+15
call sites. * rtlanal.c (computed_jump_p_1): Rename from jmp_uses_reg_or_mem; update all call sites. Return true for all non-label constants. From-SVN: r39006
2001-01-07rtlanal.c (set_of_1): New static function.Jan Hubicka1-84/+47
* rtlanal.c (set_of_1): New static function. (reg_set_last_1, reg_set_p_1, reg_set_reg, reg_set_flag, reg_set_last_unknown, reg_set_last_value, reg_set_last_first_regno, reg_set_last_last_regno): Remove. (set_of): New global function. (set_of_data): New structure. (reg_set_p, reg_set_last): Revamp for set_of. * rtl.h (set_of): New. From-SVN: r38772
2001-01-07reload.c (subst_reloads): Take INSN argument.Alexandre Oliva1-2/+4
* reload.c (subst_reloads): Take INSN argument. When replacing a LABEL_REF in a JUMP_INSN, add a REG_LABEL note. * reload.h (subst_reloads): Adjust prototype. * reload1.c (reload_as_needed): Pass INSN to subst_reloads. * jump.c (mark_all_labels): Canonicalize any REG_LABEL notes present in JUMP_INSNs and copy them to JUMP_LABEL. * flow.c (find_label_refs, find_basic_blocks_1): Skip JUMP_INSNs and insns with REG_LABELs that are followed by JUMP_INSNs with the same REG_LABEL. * sched-rgn.c (is_cfg_nonregular): Likewise. * rtlanal.c (computed_jump_p): Make it false if a REG_LABEL note is available. * unroll.c (unroll_loop): Look for REG_LABEL notes in JUMP_INSNs too. * rtl.texi (REG_LABEL): Document usage in JUMP_INSNs. From-SVN: r38755
2001-01-01Extra arg for rtx_varies_pBernd Schmidt1-18/+26
From-SVN: r38590
2000-12-21resource.c (mark_set_resources): Use MARK_SRC_DEST for PRE_MODIFY and ↵Michael Hayes1-0/+2
POST_MODIFY cases. * resource.c (mark_set_resources): Use MARK_SRC_DEST for PRE_MODIFY and POST_MODIFY cases. * rtlanal.c (side_effects_p): Handle PRE_MODIFY and POST_MODIFY. From-SVN: r38429
2000-12-21ia64 specific scheduling bitsBernd Schmidt1-3/+2
From-SVN: r38419
2000-12-12Fix for ia64-linux glibc miscompilation of nan tests.Jim Wilson1-1/+9
* rtlanal.c (may_trap_p): Check operand modes of LE, LT, GE, and GT. From-SVN: r38209
2000-10-24rtlanal.c (rtx_unstable_p, [...]): Don't consider pic register stable if ↵Richard Henderson1-5/+22
PIC_OFFSET_TABLE_REG_CALL_CLOBBERED. * rtlanal.c (rtx_unstable_p, rtx_varies_p): Don't consider pic register stable if PIC_OFFSET_TABLE_REG_CALL_CLOBBERED. From-SVN: r37040
2000-10-16rtlanal.c (may_trap_p): Check operand modes of COMPARE.Jakub Jelinek1-0/+11
* rtlanal.c (may_trap_p): Check operand modes of COMPARE. * gcc.dg/20001013-1.c: New test. From-SVN: r36878
2000-10-03rtlanal.c (single_set_1): Do not require USE and CLOBBERs to come last.Jan Hubicka1-84/+38
* rtlanal.c (single_set_1): Do not require USE and CLOBBERs to come last. From-SVN: r36699
2000-10-01rs6000.md (movsi_to_cr): Remove the USE.Geoff Keating1-25/+33
* config/rs6000/rs6000.md (movsi_to_cr): Remove the USE. Calculate the mask value from the individual SET operations. (return_internal_si): Move the USE after the RETURN. (return_internal_di): Likewise. (return_and_restore_fpregs_si): Likewise. (return_and_restore_fpregs_di): Likewise. (return_eh_si): Likewise. (return_eh_di): Likewise. * config/rs6000/rs6000.c (mtcrf_operation): Don't look for, or check, the USE. (rs6000_emit_prologue): Don't emit the USE for movsi_to_cr. Don't generate a PARALLEL around a single operation movsi_to_cr. Generate the RETURN first in any PARALLELs. * rtlanal.c (single_set_1): Use fatal_insn to display the invalid insn. Check for more cases when a USE or CLOBBER occurs before a SET. * Makefile.in: Update dependencies for rtlanal.o. From-SVN: r36683