summaryrefslogtreecommitdiff
path: root/gcc/alias.c
Commit message (Collapse)AuthorAgeFilesLines
* * tree.def (ARRAY_RANGE_REF): New code.kenner2001-06-041-1/+2
| | | | | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@42848 138bc75d-0d04-0410-961f-82ee72b054a4
* 2001-04-09 Andrew MacLeod <amacleod@redhat.com>amacleod2001-04-091-2/+59
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Jeff Law <law@cygnus.com> * alias.c (get_addr): Externalize. (canon_true_dependence): New function. Behaves like true_dependance except it already assumes a MEM has been canonicalized. * flags.h (flag_gcse_lm, flag_gcse_sm): New optimization flags. * gcse.c (struct ls_expr): Add load/store expressions structure. (modify_mem_list, canon_modify_mem_list): New variable. (gcse_main): Initialize & finalize alias analysis. Use enhanced load motion and store motion if requested. (alloc_gcse_mem): Allocate space for modify_mem_list array. (free_gcse_mem): Free the modify_mem_list array. (oprs_unchanged_p): Use load_killed_in_block_p. (gcse_mems_conflict_p, gcse_mem_operand): New variables. (mems_conflict_for_gcse_p): New function. Don't kill loads with stores to themselves if its in the load/store expression list. (load_killed_in_block_p): New function. (canon_list_insert): New Function. (record_last_mem_set_info): Keep a list of all instructions which can modify memory for each basic block. (compute_hash_table, reset_opr_set_tables): Clear modify_mem_list. (oprs_not_set_p): Use load_killed_in_block_p. (mark_call, mark_set, mark_clobber): Use record_last_mem_set_info. (expr_killed_p): Use load_killed_in_block_p. (compute_transp): Do not pessimize memory references. (pre_edge_insert): Update stores for a load motion expression. (one_pre_gcse_pass): Check loads/stores for extra load motion. (ldst_entry): Find or create a ldst_expr structure. (free_ldst_entry): Free memory for an individual item. (free_ldst_mems): Free entire load/store expression list. (print_ldst_list): Print debug info. (find_rtx_in_ldst): Try to find an rtx expression in the ldst list. (enumerate_ldsts): Assign integer values to each entry in list. (first_ls_expr): First expression in the list. (next_ls_expr): Next expression in the list. (simple_mem): Check if expression qualifies for ld/st expression list. (invalidate_any_buried_refs): Remove from expression list if its used in some other way we dont understand. (compute_ld_motion_mems): Find all potential enhanced load motion expression. (trim_ld_motion_mems): Remove any expressions which are invalid. (update_ld_motion_stores): Copy store values to registers for loads which have been moved. (regvec, st_antloc, num_store): New global statics. (reg_set_info): Marks registers as set. (store_ops_ok): Verfies registers expressions are valid in a block. (find_moveable_store): Look for moveable stores in a pattern. (compute_store_table): Find stores in a function worth moving, maybe. (load_kills_store): Check dependance of a load and store. (find_loads): Find any loads in a pattern. (store_killed_in_insn): Check if a store is killed in an insn. (store_killed_after): Check is store killed after an insn in a block. (store_killed_before): Check is store killed before an insn in a block. (build_store_vectors): Generate the antic and avail vectors. (insert_insn_start_bb): Insert at the start of a BB, update BLOCK_HEAD. (insert_store): Add a store to an edge. (replace_store_insn): Replace a store with a SET insn. (delete_store): Delete a store insn. (free_store_memory): Free memory. (store_motion): Perform store motion. * invoke.texi: Add documentation for -fcse-lm and -fgcse-sm. * rtl.h (get_addr, canon_true_dependence): Add prototypes. * toplev.c (flag_gcse_lm, flag_gcse_sm): New Variables. (f_options): Add gcse-lm and gcse-sm. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41207 138bc75d-0d04-0410-961f-82ee72b054a4
* 2001-04-03 Jakub Jelinek <jakub@redhat.com>amacleod2001-04-031-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41058 138bc75d-0d04-0410-961f-82ee72b054a4
* * mkconfig.sh: Include insn-flags.h.rth2001-03-221-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Makefile.in (CONFIG_H): Include insn-flags.h. (lots of objects): Remove insn-codes.h and insn-flags.h. * alias.c, bb-reorder.c, calls.c, do-loop.c, flow.c, haifa-sched.c, integrate.c, jump.c, loop.c, predict.c, profile.c, reg-stack.c, regmove.c, reorg.c, a29k/a29k.c, alpha/alpha.c, arc/arc.c, arm/arm.c, avr/avr.c, clipper/clipper.c, convex/convex.c, d30v/d30v.c, dsp16xx/dsp16xx.c, fr30/fr30.c, h8300/h8300.c, i370/i370.c, i386/i386.c, i860/i860.c, ia64/ia64.c, m32r/m32r.c, m68hc11/m68hc11.c, m68k/m68k.c, m88k/m88k.c, mcore/mcore.c, mn10200/mn10200.c, mn10300/mn10300.c, ns32k/ns32k.c, pa/pa.c, pdp11/pdp11.c, pj/pj.c, romp/romp.c, rs6000/rs6000.c, sh/sh.c, sparc/sparc.c, v850/v850.c, vax/vax.c: Don't include insn-flags.h. * diagnostic.c, expr.h, reload.c, toplev.c: Don't include insn-codes.h. * builtins.c, combine.c, except.c, explow.c, expmed.c, expr.c, final.c, function.c, optabs.c, recog.c, reload1.c, stmt.c, c4x/c4x.c, i960/i960.c, mips/mips.c: Don't include insn-codes.h or insn-flags.h. * genemit.c, genopinit.c, genoutput.c: Don't include insn-codes.h or insn-flags.h in the generated code. * genflags.c (gen_proto): Use "struct rtx_def *" instead of "rtx". (main): Forward declare struct rtx_def. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40754 138bc75d-0d04-0410-961f-82ee72b054a4
* Use only nonvarying rtxs as known valuesbernds2001-03-151-2/+2
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40505 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (handled_component_p, can_address_p): New functions.kenner2001-03-141-29/+57
| | | | | | | (get_alias_set): Use them. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40449 138bc75d-0d04-0410-961f-82ee72b054a4
* Fix typokenner2001-03-121-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40426 138bc75d-0d04-0410-961f-82ee72b054a4
* * flow.c (insn_dead_p): Don't consider two memrefs equivalentkenner2001-03-121-0/+6
| | | | | | | | | unless anti_dependence says they are. * alias.c (objects_must_conflict): If neither has a type specified, they must conflict. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40420 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (objects_must_conflict_p): Read-only slots may notrth2001-01-261-9/+12
| | | | | | | conflict despite having the same type. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39285 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (rtx_equal_for_memref_p, case ADDRESSOF): Don't assumekenner2001-01-191-2/+2
| | | | | | | | | args are REG. * expr.c (store_constructor): Don't look at MEM_ALIAS_SET unless MEM. * function.c (assign_parms): Use INTVAL for a CONST_INT. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39139 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (find_base_value): Recognize TRUNCATE.amylaar2001-01-191-1/+20
| | | | | | | | (record_set): In PLUS case, invalidate if other summand is also a base value. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39128 138bc75d-0d04-0410-961f-82ee72b054a4
* Partially undo a previous patchbernds2001-01-111-18/+17
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38908 138bc75d-0d04-0410-961f-82ee72b054a4
* Improve alias analysis for ia64bernds2001-01-031-25/+53
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38660 138bc75d-0d04-0410-961f-82ee72b054a4
* Extra arg for rtx_varies_pbernds2001-01-011-5/+5
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38590 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (alias_sets_conflict_p): New function.kenner2000-12-301-25/+86
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | (mems_in_disjoint_alias_sets_p): Use it. (readonly_fields_p): Moved from expr.c; check for record type. (objects_must_conflict_p): New function. * calls.c (expand_call): Use assign_temp as much as possible, use readonly variant if assigned once, and don't set memory attributes. (emit_library_call_value_1, store_one_arg): Likewise. * integrate.c (expand_inline_function): Likewise. * stmt.c (expand_asm_operands, expand_return): Likewise. * expr.c (copy_blkmode_from_reg, store_constructor): Likewise. (store_field, save_noncopied_parts, expand_expr): Likewise. (expand_expr_unaligned): Likewise. (readonly_fields_p): Moved to alias.c. (safe_from_p): Rework handling of SAVE_EXPR. MEMs ony conflict if alias sets conflict; likewise for INDIRECT_REF. * function.c (struct temp_slot): Delete field ALIAS_SET; add TYPE. (assign_stack_for_temp): Use objects_must_confict_p. Set all memory attributes from type, if specified. (mark_temp_slot): Mark TYPE field. * tree.h (alias_sets_conflict_p, readonly_fields_p): New decls. (objects_must_conflict_p): Likewise. * stmt.c (expand_decl): Don't use assign_stack_temp in error case. (add_case_node): No need to copy nodes anymore. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38559 138bc75d-0d04-0410-961f-82ee72b054a4
* Fix ia64-linux glibc miscompilation reported by H.J. Lu.wilson2000-12-151-1/+5
| | | | | | | | | * alias.c (get_alias_set): Call record_component_aliases for COMPLEX_TYPE. (record_component_aliases): Handle COMPLEX_TYPE. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38264 138bc75d-0d04-0410-961f-82ee72b054a4
* * function.h (emit_status): Delete member regno_pointer_flag andlaw2000-11-301-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | rename regno_pointer_flag_length to regno_pointer_align_length. Delete define for REGNO_POINTER_FLAG. * integrate.h (inline_remap): Delete member regno_pointer_flag. Add member x_regno_reg_rtx. * rtl.h (rtx_def): Use frame_related bit to indicate register is a pointer in REG expressions. Define REG_POINTER macro. * alias.c (find_base_value, find_base_term): Use REG_POINTER instead of REGNO_POINTER_FLAG. * combine.c (nonzero_bits, num_sign_bit_copies): Likewise. * emit-rtl.c (gen_reg_rtx): Use regno_pointer_align_length instead of regno_pointer_flag_length. Remove code which refers to regno_pointer_flag. (mark_reg_pointer): Use REG_POINTER. (free_emit_status): Remove code which refers to regno_pointer_flag. (init_emit, mark_emit_status): Likewise. * flow.c (dump_flow_info): Likewise. * function.c (preserve_temp_slots): Likewise. * integrate.c (expand_inline_function, copy_rtx_and_substitute): Use x_regno_reg_rtx instead of regno_pointer_flag for function pointer determination in map. * loop.c (strength_reduce, maybe_eliminate_biv_1): Use REG_POINTER. * predict.c (estimate_probability): Likewise. * regclass.c (record_address_regs, reg_scan_mark_refs): Likewise. * unroll.c (unroll_loop): Use x_regno_reg_rtx instead of regno_pointer_flag for function pointer determination in map. * convex.h (RTX_COSTS): Don't test regno_pointer_flag and use REG_POINTER. * pa.c (hppa_legitimize_address, emit_move_sequence, basereg_operand): Use REG_POINTER. (restore_unscaled_index_insn_codes): Revise comment. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37863 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (mems_in_disjoint_alias_sets_p): Do use alias sets injsm282000-11-191-9/+0
| | | | | | | stdarg and varargs functions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37572 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (init_alias_analysis), calls.c (expand_call,jsm282000-11-071-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 (). git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37303 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c: Include basic-block.h.wehle2000-10-251-0/+97
| | | | | | | | | (loop_p): New function. (mark_constant_function): Use it. * Makefile.in (alias.o): Update dependencies. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37044 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c: (mark_constant_function): Don't check pure functions.wehle2000-10-201-16/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Initialize and end alias analysis. (nonlocal_mentioned_p): Rename from nonlocal_reference_p. Don't make a special exception for recursion. Handle UNSPEC_VOLATILE. Don't assume ASM_OPERANDS is non-local unless it's volatile. * local-alloc.c (equivalence): New structure. (reg_equiv): Define. (contains_replace_regs): Remove array and use field in reg_equiv. (memref_referenced_p): Likewise. (no_equiv): Likewise. (update_equiv_regs): Likewise. (equiv_init_varies_p, equiv_init_movable_p): New functions. (update_equiv_regs): Use them. Use rtx_varies_p instead of function_invariant_p. Process insns from end to beginning. Allow a REG_EQUIV insn within the same loop as a use to be moved, also allow it to be moved out of a loop. Update REG_DEAD notes when substituting into an insn. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36957 138bc75d-0d04-0410-961f-82ee72b054a4
* Remove obstacks.mmitchel2000-10-131-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36856 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (true_dependence): Allow non-unchanging read to conflictkenner2000-09-171-1/+4
| | | | | | | with unchanging write. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36476 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (memrefs_conflict_p): An ADDRESSOF doesn'twehle2000-09-141-2/+11
| | | | | | | conflict with frame_pointer_rtx. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36401 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (find_base_term): Use frame_pointer_rtxwehle2000-09-131-1/+1
| | | | | | | | | | | when handling an ADDRESSOF. * cse.c (canon_hash): Handle USE of BLKmode memory. (cse_insn): Outgoing arguments for a libcall don't affect any recorded expressions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36384 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (memrefs_conflict_p): An ADDRESSOF does conflict, sorry.geoffk2000-09-111-2/+2
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36317 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (find_base_term): Handle ADDRESSOF.wehle2000-09-101-0/+6
| | | | | | | (memrefs_conflict_p): An ADDRESSOF doesn't conflict. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36300 138bc75d-0d04-0410-961f-82ee72b054a4
* * i386.c (ix86_find_base_term): New.wehle2000-08-251-11/+22
| | | | | | | | | | | | | | | | | * i386-protos.h (ix86_find_base_term): Prototype. * i386.h (FIND_BASE_TERM): Define. * alias.c (find_base_term): Use it. * tm.texi (FIND_BASE_TERM): Document it. * alias.c (true_dependence, write_dependence_p): Unchanging memory can't conflict with non-unchanging memory. * alias.c (memrefs_conflict_p): A BLKmode reference to a symbol (or CONST_INT address) always conflicts with a reference to another symbol. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35985 138bc75d-0d04-0410-961f-82ee72b054a4
* * rtlanal.c (rtx_unstable_p): The pic register is stablewehle2000-08-231-14/+13
| | | | | | | | | | | | | | | | | | | | (within one function) and the actual rtx should be used when checking the registers. (rtx_addr_can_trap_p): Pic memory addresses can't trap. * alias.c (true_dependence, write_dependence_p): Fix bug in previous patch. * i386.c (ix86_GOT_alias_set): New. (legitimize_pic_address): Use it. * rtlanal.c (rtx_unstable_p): An unchanging MEM is only stable if its address is stable. (rtx_varies_p): An unchanging MEM can't vary if its address doesn't vary. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35900 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (init_alias_analysis): Do not registerrth2000-08-221-9/+0
| | | | | | | | struct_value_incoming_rtx or static_chain_rtx as pointing to stack memory. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35873 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (true_dependence, write_dependence_p): A readwehle2000-08-181-2/+20
| | | | | | | | | | involving a label_ref or the constant pool doesn't create a dependency. * rtl.h (unchanging): Improve documentation. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35771 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (mark_constant_function): Use INSN_P.law2000-08-041-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (init_alias_analysis): Likewise. * combine.c (combine_instructions): Use INSN_P. (can_combine_p): Likewise. (try_combine): Likewise. (distribute_notes): Likewise. (distribute_links): Likewise. * cse.c (cse_around_loop): Use INSN_P. (invalidate_skipped_block): Likewise. (cse_set_around_loop): Likewise. (cse_end_of_basic_block): Likewise. (delete_trivially_dead_insns): Likewise. * emit-rtl.c (unshare_all_rtl_again): Use INSN_P. (unshare_all_rtl_1): Likewise. (next_cc0_user): Likewise. (try_split make_insn_raw): Likewise. (remove_unnecessary_notes): Likewise. * final.c (shorten_branches): Use INSN_P. (leaf_renumber_regs): Likewise. (leaf_renumber_regs_insn): Likewise. * flow.c (find_label_refs): Use INSN_P. (verify_wide_reg): Likewise. (notice_stack_pointer_modification): Likewise. (count_or_remove_death_notes): Likewise. (verify_flow_info): Likewise. (clear_log_links): Likewise. * function.c (fixup_var_refs_insns): Use INSN_P. (compute_insns_for_mem): Likewise. * gcse.c (alloc_gcse_mem): Use INSN_P. (compute_sets): Likewise. (compute_hash_table): Likewise. (classic_gcse): Likewise. (cprop): Likewise. (insert_insn_end_bb): Likewise. (delete_null_pointer_checks_1): Likewise. * global.c (expand_preferences): Use INSN_P. (build_insn_chain): Likewise. * graph.c (node_data): Use INSN_P. * haifa-sched.c (priority): Use INSN_P. (rm_line_notes): Likewise. (rm_other_notes): Likewise. (find_insn_reg_weight): Likewise. (init_target_units): Likewise. (schedule_block): Likewise. (compute_block_forward_dependences): Likewise. (debug_dependencies): Likewise. (set_priorities): Likewise. * integrate.c (function_cannot_inline_p): Use INSN_P. (save_parm_insns): Likewise. (copy_insn_list): Likewise. * jump.c (mark_all_labels): Use INSN_P. (never_reached_warning): Likewise. * lcm.c (optimize_mode_switching): Use INSN_P. * local-alloc.c (validate_equiv_mem): Use INSN_P. (memref_used_between_p): Likewise. (update_equiv_regs): Likewise. (block_alloc): Likewise. (no_conflict_p): Likewise. * loop.c (scan_loop): Use INSN_P. (find_and_verify_loops): Likewise. (count_loop_regs_set): Likewise. (loop_reg_used_before_p): Likewise. (strength_reduce): Likewise. (recombine_givs): Likewise. (check_dbra_loop): Likewise. (load_mems): Likewise. (try_copy_prop): Likewise. * print-rtl.c (print_rtx): Use INSN_P. * recog.c (find_single_use): Use INSN_P. * reg-stack.c (stack_regs_mentioned): Use INSN_P. (next_flags_user): Likewise. (swap_rtx_condition): Likewise. * regmove.c (mark_flags_life_zones): Use INSN_P. (optimize_reg_copy_1): Likewise. (optimize_reg_copy_2): Likewise. (optimize_reg_copy_3): Likewise. (reg_is_remote_constant_p): Likewise. (fixup_match_2): Likewise. (regmove_optimize): Likewise. (fixup_match_1): Likewise. * regrename.c (build_def_use): Use INSN_P. (replace_reg_in_block): Likewise. (consider_use): Likewise. * reload.c (find_equiv_reg): Use INSN_P. * reload1.c (reload): Use INSN_P. (maybe_fix_stack_asms): Likewise. (calculate_needs_all_insns): Likewise. (reload_as_needed): Likewise. (emit_output_reload_insns): Likewise. (delete_address_reloads_1): Likewise. (reload_cse_regs_1): Likewise. (reload_combine): Likewise. (reload_cse_move2add): Likewise. * reorg.c (redundant_insn): Use INSN_P. (dbr_schedule): Likewise. * resource.c (find_dead_or_set_registers): Use INSN_P. (mark_target_live_regs): Likewise. * rtlanal.c (reg_used_between_p): Use INSN_P. (reg_referenced_between_p): Likewise. (reg_set_between_p): Likewise. (reg_set_p): Likewise. (single_set): Likewise. (multiple_sets): Likewise. (find_last_value): Likewise. (reg_set_last): Likewise. (find_reg_note): Likewise. (find_regno_note): Likewise. * sibcall.c (sequence_uses_addressof): Use INSN_P. * simplify-rtx.c (cselib_process_insn): Use INSN_P. * ssa.c (find_evaluations): Use INSN_P. (rename_block): Likewise. (rename_equivalent_regs): Likewise. * unroll.c (loop_find_equiv_value): Use INSN_P. (set_dominates_use): Likewise. * varasm.c (mark_constant_pool): Use INSN_P. (mark_constants): Likewise. * config/alpha/alpha.c (alpha_does_function_need_gp): Use INSN_P. (alphaev4_next_group): Likewise. (alphaev5_next_group): Likewise. * config/c4x/c4x.c (c4x_process_after_reload): Use INSN_P. (c4x_rptb_rpts_p): Likewise. * config/mips/mips.c (mips16_optimize_gp): Use INSN_P. * config/rs6000/rs6000.c (uses_TOC): Use INSN_P. (rs6000_adjust_priority): Likewise. * config/sh/sh.c (sh_loop_align): Use INSN_P. (machine_dependent_reorg): Likewise. (split_branches): Likewise. * config/tahoe/tahoe.c (tahoe_cmp_check): Use INSN_P. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35494 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (init_alias_analysis): Do not calllaw2000-07-031-1/+6
| | | | | | | prologue_epilogue_contains until after reload has completed. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34838 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (fixed_scalar_and_varying_struct_p): Don't examinegeoffk2000-06-231-0/+3
| | | | | | | | | struct vs. scalar-ness when -fno-strict-aliasing. and a test case to test it, gcc.dg/20000623-1.c. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34668 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (get_alias_set): If compnent is addressable, use aliaskenner2000-06-051-11/+32
| | | | | | | | | | | | | set of component. * c-decl.c (init_decl_processing): Don't call record_component_aliases. (grokdeclarator): Likewise. * c-typeck.c (common_type): Likewise. * cp/decl.c (init_decl_processing): Don't call record_component_aliases. * cp/tree.c (build_cplus_array_type_1): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34400 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (record_component_aliases): Don't inspectmmitchel2000-06-041-1/+1
| | | | | | | DECL_NONADDRESSABLE_P of non-FIELD_DECL components of structures. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34389 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (record_alias_subset): Initialize has_zero_child in therth2000-06-031-1/+1
| | | | | | | superset. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34380 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (struct alias_set_entry): New field has_zero_child.kenner2000-06-031-24/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (mem_in_disjoint_alias_sets_p): Return 0 if set in either ase. (get_alias_set): If language-dependent routine set TYPE_ALIAS_SET, do nothing. Call record_component_aliases for aggregate types. (record_alias_subset): Set has_zero_child. (record_component_aliases, case ARRAY_TYPE): Do nothing if TYPE_NONALIASES_COMPONENT. (record_component_aliases, case RECORD_TYPE): Test DECL_NONADDRESSABLE_P. * c-decl.c (grokdeclarator): Set DECL_NONADDRESSABLE_P instead of TREE_ADDRESSABLE. * calls.c (initialize_argument_information): Only test TYPE_TRANSPARENT_UNION for UNION_TYPE. * function.c (assign_parms): Likewise. * integrate.c (function_cannot_inline_p): Likewise. * stor-layout.c (finish_record_layout): Don't call record_component_aliases. * tree.h (struct tree_int_cst): Use struct tree_common. (struct tree_real_cst, struct tree_string): Likewise. (struct tree_complex, struct tree_identifier): Likewise. (struct tree_list, struct tree_vec, struct tree_exp): Likewise. (struct tree_block, struct tree_type, struct tree_decl): Likewise. (TYPE_TRANSPARENT_UNION): Use UNION_TYPE_CHECK. (TYPE_NONALIASES_COMPONENT): New macro. (TYPE_AMBIENT_BOUNDEDNESS): Use FUNCTION_TYPE_CHECK. (DECL_NONADDRESSABLE_P): New macro. (struct tree_decl): Reorder bits for clarity of how many left; add non_adressable. * cp/cp-tree.h: Use struct tree_common instead of a char array. * cp/decl.c (grokdeclarator): Set DECL_NONADDRESSABLE_P instead of TREE_ADDRESSABLE. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34373 138bc75d-0d04-0410-961f-82ee72b054a4
* gcc/rth2000-06-031-10/+4
| | | | | | | | | | | | | | | | | | | | | | | | * alias.c (lang_get_alias_set): Remove. (get_alias_set): Call it directly, not indirectly. * c-common.c (lang_get_alias_set): Rename from c_get_alias_set. * c-common.h (c_get_alias_set): Don't declare. * c-decl.c (init_decl_processing): Don't set lang_get_alias_set. * expr.h (lang_get_alias_set): Declare as function, not pointer. gcc/ch/ * lang.c (lang_get_alias_set): New. gcc/cp/ * decl.c (init_decl_processing): Don't set lang_get_alias_set. gcc/f/ * com.c (lang_get_alias_set): New. gcc/java/ * lang.c (lang_get_alias_set): New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34368 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (get_alias_set): Don't call language-specific routine morekenner2000-06-011-34/+40
| | | | | | | | | | | than is needed and clean up code a bit. * c-common.c (c_get_alias_set): All references whose type is char get alias set 0, but character types need not. * varasm.c (make_function_rtl): Don't call set_mem_attributes. (make_decl_rtl): Don't call it for FUNCTION_DECL. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34341 138bc75d-0d04-0410-961f-82ee72b054a4
* * Makefile.in (c-decl.o): Depend on rtl.h and expr.h.kenner2000-05-311-16/+210
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * alias.c (struct alias_entry): alias_set is HOST_WIDE_INT. (REG_BASE_VALUE): Remove unneeded cast to unsigned. (get_alias_set_entry): ALIAS_SET arg is HOST_WIDE_INT. (find_base_decl): New function, from c_find_base_decl in c-common.c. (new_alias_set): Moved from tree.c; return is HOST_WIDE_INT. (get_alias_set): Likewise. Major rework to do more things and allow language-specific code to just handle special-cases. (record_alias_subset): Args are HOST_WIDE_INT. (record_component_alias): Local vars are HOST_WIDE_INT. Don't handle COMPLEX_EXPR. (get_varargs_alias_set): Moved from builtins.c. (get_frame_alias_set): New function. * builtins.c (expand_builtin_return_address): Use frame alias set. (expand_builtin_setjmp, expand_builtin_longjmp): Use alias set for setjmp buffer. (get_memory_rtx): Rework to use set_mem_attributes. (get_varargs_alias_set): Deleted from here. * c-common.c (c_apply_type_quals_to_decl): Alias sets now HOST_WIDE_INT. (c_find_base_decl): Deleted from here. (c_get_alias_set): Remove many cases and rework to just handle C-specific cases. * c-common.h (c_get_alias_set): Returns HOST_WIDE_INT. * c-decl.c (rtl.h, expr.h): Now included. (init_decl_processing): Call record_component_aliases on array types. (grokdeclarator): Likewise. Set TREE_ADDRESSABLE for all fields that are not bitfields. * c-typeck.c (common_type): Call record_component_aliases for array. * caller-save.c (setup_save_areas): Rework register loop for unsigned. Set all save areas to the frame alias set. * calls.c (initialie_argument_information): Call set_mem_attributes. (compute_argument_addresses, expand_call): Likewise. * explow.c (set_mem_attributes): New function. (stabilize): Use MEM_COPY_ATTRIBUTES and force_reg. * expr.c (struct move_by_pieces): Remove {to,from}_{struct,readonly}. LEN and OFFSET now HOST_WIDE_INT. (clear_by_pieces): Similar changes. (move_by_pieces): LEN now HOST_WIDE_INT; don't set deleted fields. (move_by_pieces_ninsns): Now returns unsigned HOST_WIDE_INT. (move_by_pieces_1): Don't use deleted fields, use MEM_COPY_ATTRIBUTES. (clear_by_pieces_1): Likewise. (emit_push_insn): Call set_mem_attributes. (expand_expr, case INDIRECT_REF): Likewise. (expand_expr, case VAR_DECL): Call change_address. * expr.h (ADD_PARM_SIZE, SUB_PARM_SIZE): Use host_integerp and tree_low_cst. (get_varargs_alias_set, get_frame_alias_set): New decls. (record_base_value, record_alias_subset, lang_get_alias_set): Likewise. (new_alias_set, set_mem_attributes): Likewse. * function.c (struct temp_slot): ALIAS_SET is HOST_WIDE_INT. (assign_stack_temp_for_type): Likewise. Can split slot even if alias set since can copy. Set MEM_ALIAS_SET and MEM_SET_IN_STRUCT_P. (assign_temp): Use host_integerp and tree_low_cst. (put_var_into_stack): Properly handle SAVE_EXPR. (put_addressof_into_stack): Likewise. (assign_parms): Call set_mem_attributes. Delete #if 0 code. (fix_lexical_address): Put reference to chain into frame alias set. (expand_function_start): Call set_mem_attributes. * integrate.c (expand_inline_function): Likewise. * recog.c (adj_offsettable_operand): Use MEM_COPY_ATTRIBUTES. * regmove.c (try_apply_stack_adjustment): Likewise. * reload.c (push_reload, make_memloc): Likewise. * reload1.c (alter_reg): Make alias sets for spilled pseudos. * rtl.def (MEM): Update comment. * rtl.h (MEM_ALIAS_SET): Now uses XCWINT. (move_by_pieces): Change length to HOST_WIDE_INT. (record_base_value, record_alias_subset): Delete from here. * stmt.c (expand_decl): Call set_mem_attributes. * stor-layout.c (finish_record_layout): Call record_component_aliases.i * toplev.c (compile_file): Call init_alias_once earlier. * tree.c (lang_get_alias_set, get_alias_set, new_alias_set): Deleted from here: now in alias.c. * tree.h (struct tree_type): alias_set is HOST_WIDE_INT. (struct tree_decl): Likewise. (get_alias_set, new_alias_set, lang_get_alias_set): Deleted from here. * varasm.c (make_function_rtl, make_decl_rtl): Call set_mem_attributes. (output_constant_def, force_const_mem): Likewise. * cp/Makefile.in (decl.o): Include ../expr.h. * cp/decl.c (expr.h): Include. (init_decl_processing): Call record_component_aliases for arrays. (grokdeclarator): Likewise. Set TREE_ADDRESSABLE for fields that aren't bitfields. * cp/tree.c (build_cplus_array_type_1): Call record_component_aliases. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34305 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (record_component_aliases): New function.kenner2000-05-221-2/+43
| | | | | | | | | * tree.h: Clean up some declarations and comments. (record_component_aliases): New declaration. * tree.c (get_alias_set): If type and has alias set, use it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34078 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c: Clarify some comments.kenner2000-05-201-32/+32
| | | | | | | | (record_base_value): REGNO is unsigned. * rtl.h (record_base_value): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34051 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (aliases_everything_p): Don't special-case QImode here.kenner2000-05-201-12/+6
| | | | | | | | | * c-common.c (c_get_alias_set): Do it here. Handle BIT_FIELD_REF by getting alias info for arg. Use POINTER_TYPE_P. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34050 138bc75d-0d04-0410-961f-82ee72b054a4
* * cse.c (cse_basic_block): Only call find_reg_note if REG_NOTES not 0.kenner2000-05-191-5/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * reload.c (find_equiv_reg): Likewise. * alias.c (init_alias_analysis): Likewise. Only call prologue_epilogue_contains on insns. * basic-block.h (REG_SET_TO_HARD_REG_SET): Call new function. * bb-reorder.c (hard-reg-set.h): Include earlier. * haifa-sched.c (hard-reg-set.h): Likewise. * ifcvt.c (hard-reg-set.h): Likewise. * local-alloc.c (hard-reg-set.h): Likewise. * loop.c (hard-reg-set.h): Likewise. * predict.c (hard-reg-set.h): Likewise. * regrename.c (hard-reg-set.h): Likewise. * flow.c (hard-reg-set.h): Likewise. (reg_set_to_hard_reg_set): New function. * bitmap.c (regs.h, basic-block.h): No longer include. (bitmap.h): Now include. * conflict.c (hard-reg-set.h): Include. * profile.c (hard-reg-set.h): Likewise. * print-rtl.c (hard-reg-set.h): Likewise. * sbitmap.c (hard-reg-set.h): Likewise. * toplev.c (hard-reg-set.h): Likewise. * unroll.c (hard-reg-set.h, basic-block.h): Likewise. * hard-reg-set.h (reg_names): Now constant. * regs.h (reg_names): Likewise. * regclass.c (reg_names): Likewise. * loop.h (basic-block.h): No longer include. (bitmap.h): Now include. * reload1.c (order_regs_for_reload): Avoid loop over reg sets. * Makefile.in (LOOP_H, sbitmap.o, profile.o): Reflect above changes. (toplev.o, print-rtl.o, conflict.o, unroll.o, bitmap.o): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34039 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (nonlocal_reference_p): Minor reformatting.kenner2000-05-091-1/+2
| | | | | | | | | | | * reload.c (find_equiv_reg): Simplify logic for CALL_INSN_FUNCTION_USAGE since can't have SUBREG or pseudos and some some reformatting. * reload1.c (reload_combine): Don't assume everything in CALL_INSN_FUNCTION_USAGE is a REG and clean up code a bit. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33797 138bc75d-0d04-0410-961f-82ee72b054a4
* * rtl.h (MEM_COPY_ATTRIBUTES): Also copy RTX_UNCHANGING_P andkenner2000-05-041-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | MEM_ALIAS_SET. * alias.c (canon_rtx): Don't copy RTX_UNCHANGING_P or MEM_ALIAS_SET when calling MEM_COPY_ATTRIBUTES. * emit-rtl.c (operand_subword, change_address): Likewise. * explow.c (stabilize): Likewise. * expr.c (protect_from_queue, emit_move_insn_1): Likewise. * integrate.c (copy_rtx_and_substitute): Likewise. * combine.c (combine_simplify_rtx): Don't copy RTX_UNCHANGING_P when calling MEM_COPY_ATTRIBUTES. (make_extraction, simplify_shift_const, gen_lowpart_for_combine): Likewise. * cse.c (gen_lowpart_if_possible): Likewise. * function.c (fixup_var_refs_1, purge_addressof_1): Likewise. * optabs.c (gen_move_insn): Likewise. * recog.c (validate_replace_rtx_1): Likewise. * simplify-rtx.c (add_mem_for_addr): Likewise. * stmt.c (expand_anon_union_decl): Likewise. * config/arm/arm.md: Likewise. * config/h8300/h7300.c (fix_bit_operand): Likewise. * config/m88k/m88k.c (legitimize_address, block_move_loop): Likewise. (block_move_no_loop, block_move_sequence): Likewise. * config/rs6000/rs6000.c (expand_block_move_mem): Likewise. * config/alpha/alpha.c (get_aligned_mem): Likewise. Clear MEM_ALIAS_SET. * final.c (alter_subreg): Don't copy MEM_ALIAS_SET when calling MEM_COPY_ATTRIBUTES. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33665 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (nonlocal_reference_p): Take a care forhubicka2000-04-131-4/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | CALL_INSNS's fusage field. * calls.c (ECF_PURE): New flag. (emit_call_1): Handle ECF_PURE calls. (initialize_argument_information): Unset ECF_PURE flag too. (precompute_arguments): Precompute for ECF_PURE too. (expand_call): Handle ECF_PURE calls too. (emit_library_call_value_1): Rename no_queue argument to fn_type, accept value of 2 as pure function. (emit_library_call_value, emit_library_call): Rename no_queue argument to fn_type. * optabs.c (prepare_cmp_insn): Pass fn_type 2 to memcmp call. * tree.h (DECL_IS_PURE): New macro. (struct tree_decl): Add pure_flag. * c-common.c (enum attrs): Add attribute "pure". (init_attributes): Initialize attribute "pure" (decl_attributes): Handle attribute "pure". * extend.texi (Attribute "pure"): Document. * calls.c (expand_call): Add (mem:BLK (scratch)) to "equal from" in pure function. (flags_from_decl_or_type): Support attribute "pure". git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33138 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (canon_rtx): Make it global.mmitchel2000-03-311-19/+32
| | | | | | | | | | | | (rtx_equal_for_memref_p): CONST_INT equality is now pointer equality. * cse.c (struct table_elt): Add canon_exp. (insert): Clear it. (invalidate): Canonicalize expressions only once. * rtl.h (canon_rtx): Declare. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32845 138bc75d-0d04-0410-961f-82ee72b054a4
* * Makefile.in (emit-rtl.o): Depend on HASHTAB_H.mmitchel2000-03-311-2/+7
| | | | | | | | | | | | | | | | | | | | | | | | * alias.c (reg_known_value): Add comments. (init_alias_analysis): Likewise. * cse.c (exp_equiv_p): CONST_INTs are equal iff they have the same address. (cse_basic_block): Fix typo in comment. * emit-rtl.c: Include hashtab.h. (const_int_htab): New variable. (const_int_htab_hash): New function. (const_int_htab_eq): Likewise. (rtx_htab_mark_1): Likewise. (rtx_htab_mark): Likewise. (gen_rtx_CONST_INT): Cache all CONST_INTs. (unshare_all_rtx): Fix formatting. (init_emit_once): Initialize const_int_htab. * rtl.c (rtx_equal_p): CONST_INTs are equal iff they have the same address. * rtl.texi: Document the fact that all CONST_INTs with the same value are shared. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32844 138bc75d-0d04-0410-961f-82ee72b054a4