[multiple changes]
Mon Jul 9 06:41:07 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * emit-rtl.c (adjust_address_nv, replace_equiv_address_nv): New fcns. (operand_subword): Use them. (change_address_1): Renamed from change_address; new arg VALIDATE. * expr.h: Reflect above changes; change_address now macro. * alias.c (canon_rtx): Use replace_equiv_address_nv instead of making MEM. * cselib.c (add_mem_for_addr): Likewise. * expr.c (protect_from_queue, emit_move_insn_1): Likewise. * regmove.c (try_apply_stack_adjustment): Likewise. * reload.c (push_reload, make_memloc): Likewise. * reload1.c (eliminate_regs): Likewise. * simplify-rtx.c (simplify_replace_rtx): Likewise. * caller-save.c (setup_save_areas): Use adjust_address_nv instead of adjust_addess. * combine.c (make_extraction, simplify_shift_const): Likewise. (gen_lowpart_for_combine): Likewise. * cse.c (gen_lowpart_if_possible): Likewise. * function.c (fixup_var_refs_1, purge_addressof_1): Likewise. * expr.c (expand_expr, case COMPONENT_REF): Likewise. * optabs.c (gen_move_insn): Likewise. * reload1.c (alter_reg): Likewise. * simplify-rtx.c (simplify_subreg): Likewise. * stmt.c (expand_anon_union_decl): Likewise. * recog.c (validate_replace_rtx_1): Likewise. (expr.h): Include. * Makefile.in (recog.o): Add $(EXPR_H). * explow.c (stabilize): Call replace_equiv_address. * expr.c (move_by_pieces_1, store_by_pieces_2): Likewise. * final.c (alter_subreg): OFFSET is HOST_WIDE_INT. 2001-07-09 Bo Thorsen <bo@suse.co.uk> * config/i386/unix.h (ASM_OUTPUT_MI_THUNK): Fix x86-64 vtable support. 2001-07-09 Neil Booth <neil@daikokuya.demon.co.uk> * final.c (output_addr_const): Use target opening and closing parentheses. * target-def.h: Define TARGET_ASM_OPEN_PAREN, TARGET_ASM_CLOSE_PAREN defaults, add to TARGET_ASM_OUT. * target.h (struct gcc_target): Add open_paren and close_paren. * doc/md.texi: Update. * doc/tm.texi: Document TARGET_ASM_FUNCTION_END_PROLOGUE, TARGET_ASM_FUNCTION_BEGIN_EPILOGUE, TARGET_ASM_OPEN_PAREN and TARGET_ASM_CLOSE_PAREN. * config/i386/i386.c (TARGET_ASM_OPEN_PAREN, TARGET_ASM_CLOSE_PAREN): Override. * config/pdp11/pdp11.c (TARGET_ASM_OPEN_PAREN, TARGET_ASM_CLOSE_PAREN): Override. * config/1750a/1750a.h (ASM_OPEN_PAREN, ASM_CLOSE_PAREN): Remove. * config/a29k/a29k.h: Similarly. * config/alpha/alpha.h: Similarly. * config/arc/arc.h: Similarly. * config/arm/aof.h: Similarly. * config/arm/aout.h: Similarly. * config/avr/avr.h: Similarly. * config/c4x/c4x.h: Similarly. * config/clipper/clipper.h: Similarly. * config/convex/convex.h: Similarly. * config/d30v/d30v.h: Similarly. * config/dsp16xx/dsp16xx.h: Similarly. * config/elxsi/elxsi.h: Similarly. * config/fr30/fr30.h: Similarly. * config/h8300/h8300.h: Similarly. * config/i370/i370.h: Similarly. * config/i386/i386.h: Similarly. * config/i860/i860.h: Similarly. * config/i960/i960.h: Similarly. * config/ia64/ia64.h: Similarly. * config/m32r/m32r.h: Similarly. * config/m68hc11/m68hc11.h: Similarly. * config/m68k/m68k.h: Similarly. * config/m88k/m88k.h: Similarly. * config/mcore/mcore.h: Similarly. * config/mips/mips.h: Similarly. * config/mn10200/mn10200.h: Similarly. * config/mn10300/mn10300.h: Similarly. * config/ns32k/ns32k.h: Similarly. * config/pa/pa.h: Similarly. * config/pdp11/pdp11.h: Similarly. * config/pj/pj.h: Similarly. * config/romp/romp.h: Similarly. * config/rs6000/rs6000.h: Similarly. * config/sh/sh.h: Similarly. * config/sparc/sparc.h: Similarly. * config/v850/v850.h: Similarly. * config/vax/vax.h: Similarly. * config/we32k/we32k.h: Similarly. 2001-07-09 Joseph S. Myers <jsm28@cam.ac.uk> * doc/c-tree.texi: Document representation of attributes. 2001-07-08 Joseph S. Myers <jsm28@cam.ac.uk> * doc/tm.texi: Update some places for the rename of target to targetm. Fix typo. 2001-07-08 Joseph S. Myers <jsm28@cam.ac.uk> * target.h (struct gcc_target): Add insert_attributes. * target-def.h (TARGET_INSERT_ATTRIBUTES): Define. (TARGET_INITIALIZER): Update. * tree.c, tree.h (default_insert_attributes): New function. Update comments on other default functions to refer to targetm, not target. * doc/tm.texi (INSERT_ATTRIBUTES): Update to document TARGET_INSERT_ATTRIBUTES. (SET_DEFAULT_DECL_ATTRIBUTES): Remove. * c-common.c (decl_attributes): Use targetm.insert_attributes. Don't use PRAGMA_INSERT_ATTRIBUTES. * Makefile.in (c-common.o): Depend on $(TARGET_H). * c-decl.c (start_decl, start_function): Don't call SET_DEFAULT_DECL_ATTRIBUTES. * config/c4x/c4x.h (SET_DEFAULT_DECL_ATTRIBUTES): Don't define. * config/c4x/c4x-protos.h (c4x_set_default_attributes): Don't declare. * config/c4x/c4x.c (TARGET_INSERT_ATTRIBUTES): Define. (c4x_check_attribute): Avoid modifying attribute list itself. (c4x_set_default_attributes): Rename to c4x_insert_attributes. Make static. * config/sh/sh.h (PRAGMA_INSERT_ATTRIBUTES): Don't define. * config/sh/sh-protos.h (sh_pragma_insert_attributes): Don't declare. * config/sh/sh.c (TARGET_INSERT_ATTRIBUTES): Define. (sh_pragma_insert_attributes): Rename to sh_insert_attributes. Make static. * config/v850/v850.h (SET_DEFAULT_DECL_ATTRIBUTES): Don't define. * config/v850/v850-protos.h (v850_set_default_decl_attr): Don't declare. * config/v850/v850.c (TARGET_INSERT_ATTRIBUTES): Define. (v850_set_default_decl_attr): Rename to v850_insert_attributes. Adjust parameters. Make static. 2001-07-08 Joseph S. Myers <jsm28@cam.ac.uk> * c-common.c (decl_attributes): Only take a single attributes parameter. * c-common.h (decl_attributes): Update prototype. * c-decl.c (start_decl, start_function): Only take a single attributes parameter. Update calls to decl_attributes. (finish_struct, finish_enum): Update calls to decl_attributes. (push_parm_decl): Expect unified list of attributes. Update call to decl_attributes. * c-parse.in (fndef, initdcl, notype_initdcl, nested_function, notype_nested_function, component_declarator, component_notype_declarator, label): Update calls to decl_attributes. (absdcl_maybe_attribute, parm, firstparm, myparm): Unify attribute lists that are passed to push_parm_decl. * c-tree.h (start_function, start_decl): Update prototypes. * config/sh/sh-protos.h, config/sh/sh.c (sh_pragma_insert_attributes): Only take a single attributes parameter. * config/sh/sh.h (PRAGMA_INSERT_ATTRIBUTES): Likewise. * doc/tm.texi (INSERT_ATTRIBUTES): Update. * objc/objc-act.c (define_decl, generate_objc_symtab_decl, build_module_descriptor, generate_static_references, generate_strings, build_selector_translation_table, generate_descriptor_table, generate_protocols, generate_ivars_list, generate_dispatch_table, generate_protocol_list, generate_category, generate_shared_structures, really_start_method, add_objc_decls, generate_classref_translation_entry): Update calls to start_decl and start_function. (build_tmp_function_decl, start_method_def): Unify attribute lists that are passed to push_parm_decl. 2001-07-08 Neil Booth <neil@daikokuya.demon.co.uk> * final.c (no_asm_to_stream): New. (final_scan_insn): Use target structures for prologue ends and epilogue starts. * output.h (no_asm_to_stream): New. * target-def.h (TARGET_ASM_FUNCTION_END_PROLOGUE, TARGET_ASM_FUNCTION_BEGIN_EPILOGUE): New. (TARGET_ASM_OUT): Update. * target.h (struct gcc_target): New members function_end_prologue and function_begin_epilogue. * config/1750/1750.h (ASM_OUTPUT_FUNNAM): Delete as unused. * config/alpha/alpha-protos.h (output_end_prologue): Delete. * config/alpha/alpha.c (output_end_prologue): Rename to alpha_output_function_end_prologue. Use in target struct and make static. * config/alpha/alpha.h (FUNCTION_END_PROLOGUE): Delete. * config/ia64/ia64-protos.h (ia64_output_end_prologue): Delete. * config/ia64/ia64.c (ia64_output_end_prologue): Rename to ia64_output_function_end_prologue. Use in target struct and make static. (ia64_function_prologue, ia64_funciton_epilogue): Rename mistyped prototypes. * config/ia64/ia64.h (FUNCTION_END_PROLOGUE): Delete. * config/m88k/m88k-protos.h (m88k_end_prologue, m88k_begin_epilogue): Delete. * config/m88k/m88k.c (m88k_end_prologue, m88k_begin_epilogue): Rename an use in target struct, make static. * config/ia64/ia64.h (FUNCTION_END_PROLOGUE, FUNCTION_BEGIN_EPILOGUE): Delete. 2001-07-08 Richard Henderson <rth@redhat.com> * stmt.c (emit_case_nodes): Convert modes properly in low+high test. 2001-07-08 Richard Henderson <rth@redhat.com> * config/i386/i386.md: Remove constraints strings from define_split and define_peephole2 patterns. (eh_return_si, eh_return_di): Split eh_return_1 for modes. (eh_return): Use them. 2001-07-08 Richard Henderson <rth@redhat.com> * doc/tm.texi (Exception Handling): New subnode of Stack and Calling. Document MD_FALLBACK_FRAME_STATE_FOR. 2001-07-07 Stephane Carrez <Stephane.Carrez@worldnet.fr> * config/m68hc11/m68hc11.c (m68hc11_initial_elimination_offset): Take into account m68hc11_sp_correction for FRAME_POINTER_REGNUM elimination. * config/m68hc11/m68hc11.h (STARTING_FRAME_OFFSET): Use 0. 2001-07-07 Nick Clifton <nickc@cambridge.redhat.com> * config/ia64/sysv4.h (ASM_OUTPUT_LABELREF): Append # to end of the label inside NAME as opposed to just the end of NAME. 2001-07-07 Neil Booth <neil@daikokuya.demon.co.uk> * config/alpha/alpha-protos.h (vms_valid_decl_attribute_p): Delete. * config/alpha/alpha.c (alpha_init_machine_status, alpha_mark_machine_status, alpha_free_machine_status): Delete. (TARGET_VALID_DECL_ATTRIBUTE): Define for VMS. (vms_valid_decl_attribute_p): Make static, conditionally compile. * config/alpha/alpha.h (VALID_MACHINE_DECL_ATTRIBUTE): Delete. 2001-07-06 Stan Shebs <shebs@apple.com> * target.h (targetm): Rename global from "target", so as not to conflict with local variables. * c-decl.c: Ditto. * c-typeck.c: Ditto. * final.c: Ditto. * tree.c: Ditto. * cp/decl.c: Ditto. * cp/decl2.c: Ditto. * cp/typeck.c: Ditto. * 1750a/1750a.c: Ditto. * a29k/a29k.c: Ditto. * arc/arc.c: Ditto. * arm/arm.c: Ditto. * avr/avr.c: Ditto. * clipper/clipper.c: Ditto. * convex/convex.c: Ditto. * d30v/d30v.c: Ditto. * dsp16xx/dsp16xx.c: Ditto. * elxsi/elxsi.c: Ditto. * fr30/fr30.c: Ditto. * h8300/h8300.c: Ditto. * i370/i370.c: Ditto. * i386/i386.c: Ditto. * i860/i860.c: Ditto. * i960/i960.c: Ditto. * ia64/ia64.c: Ditto. * m32r/m32r.c: Ditto. * m68hc11/m68hc11.c: Ditto. * m68k/m68k.c: Ditto. * m88k/m88k.c: Ditto. * mips/mips.c: Ditto. * ns32k/ns32k.c: Ditto. * pa/pa.c: Ditto. * pdp11/pdp11.c: Ditto. * romp/romp.c: Ditto. * rs6000/rs6000.c: Ditto. * sh/sh.c: Ditto. * sparc/sparc.c: Ditto. * vax/vax.c: Ditto. * we32k/we32k.c: Ditto. * doc/tm.texi: Update the manual to match. 2001-07-06 Richard Henderson <rth@redhat.com> * except.h (MUST_USE_SJLJ_EXCEPTIONS): Examine the value of DWARF2_UNWIND_INFO not just whether it is defined. 2001-07-06 Diego Novillo <dnovillo@redhat.com> * combine.c (combine_simplify_rtx): Also recompute 'mode' if the call to simplify_binary_operation returns a new pattern. 2001-07-06 Roman Lechtchinsky <rl@cs.tu-berlin.de> * glimits.h (__SHRT_MAX__): New. (SHRT_MIN, USHRT_MAX): Define in terms of SHRT_MAX. (SHRT_MAX): Define in terms of __SHRT_MAX__. 2001-07-06 Jan van Male <jan.vanmale@fenk.wau.nl> * alias.c (base_alias_check): Cast GET_MODE_UNIT_SIZE to int to avoid warnings. 2001-07-06 Richard Henderson <rth@redhat.com> * bitmap.c (bitmap_release_memory): Move adjacent to the allocation functions. (bitmap_first_set_bit, bitmap_last_set_bit): Streamline knowing the implementation. Binary search for the set bit. (bitmap_union_of_diff): Allocate the temporary on the stack instead of using xmalloc. 2001-07-06 Richard Henderson <rth@redhat.com> * genrecog.c (validate_pattern): Warn for constraints in define_{expand,split,peephole2}. Remove strict_low_part before looking up match_dup. 2001-07-06 DJ Delorie <dj@redhat.com> * doc/gcc.texi (Makefile): Rename to be a more general purpose chapter about various build hints and history. Add section talking about the various types of native and cross builds. 2001-07-06 Neil Booth <neil@daikokuya.demon.co.uk> * Makefile.in (final.o): Depend on target.h. * final.c: Include target.h. (default_function_pro_epilogue): New. (final_start_function): Use target structure for function prologues. (final_end_function): Use target structure for function epilogues. * fold-const.c (real_hex_to_f): Constify s and p. * output.h (default_function_pro_epilogue): New. * real.h (real_hex_to_f): Update prototype. * target-def.h (TARGET_ASM_FUNCTION_PROLOGUE, TARGET_ASM_FUNCTION_EPILOGUE, TARGET_ASM_OUT): New. (TARGET_INITIALIZER): Update. * target.h (gcc_target): Add struct asm_out. * doc/tm.texi: Update. config: Update each arch to use TARGET_ASM_FUNCTION_PROLOGUE and TARGET_ASM_FUNCTION_EPILOGUE. Move macro code to functions in cpu/cpu.c, or rename old functions consistently. Take a HOST_WIDE INT not an int as the SIZE parameter. Remove now redundant macros and prototypes. Make new functions static. * 1750a/1750a.c: Similarly. * 1750a/1750a.h: Similarly. * a29k/a29k-protos.h: Similarly. * a29k/a29k.c: Similarly. * a29k/a29k.h: Similarly. * arc/arc-protos.h: Similarly. * arc/arc.c: Similarly. * arc/arc.h: Similarly. * arm/arm-protos.h: Similarly. * arm/arm.c: Similarly. * arm/arm.h: Similarly. * avr/avr-protos.h: Similarly. * avr/avr.c: Similarly. * avr/avr.h: Similarly. * clipper/clipper-protos.h: Similarly. * clipper/clipper.c: Similarly. * clipper/clipper.h: Similarly. * convex/convex.c: Similarly. * convex/convex.h: Similarly. * d30v/d30v-protos.h: Similarly. * d30v/d30v.c: Similarly. * d30v/d30v.h: Similarly. * d30v/d30v.md: Similarly. * dsp16xx/dsp16xx-protos.h: Similarly. * dsp16xx/dsp16xx.c: Similarly. * dsp16xx/dsp16xx.h: Similarly. * elxsi/elxsi.c: Similarly. * elxsi/elxsi.h: Similarly. * fr30/fr30.c: Similarly. * fr30/fr30.md: Similarly. * h8300/h8300-protos.h: Similarly. * h8300/h8300.c: Similarly. * h8300/h8300.h: Similarly. * i370/i370-protos.h: Similarly. * i370/i370.c: Similarly. * i370/i370.h: Similarly. * i386/i386.c: Similarly. * i386/osf1elf.h: Similarly. * i386/osfrose.h: Similarly. * i860/i860-protos.h: Similarly. * i860/i860.c: Similarly. * i860/i860.h: Similarly. * i960/i960-protos.h: Similarly. * i960/i960.c: Similarly. * i960/i960.h: Similarly. * ia64/ia64-protos.h: Similarly. * ia64/ia64.c: Similarly. * ia64/ia64.h: Similarly. * m32r/m32r-protos.h: Similarly. * m32r/m32r.c: Similarly. * m32r/m32r.h: Similarly. * m68hc11/m68hc11-protos.h: Similarly. * m68hc11/m68hc11.c: Similarly. * m68hc11/m68hc11.h: Similarly. * m68k/crds.h: Similarly. * m68k/dpx2.h: Similarly. * m68k/m68k-protos.h: Similarly. * m68k/m68k.c: Similarly. * m68k/m68k.h: Similarly. * m68k/news.h: Similarly. * m88k/m88k-protos.h: Similarly. * m88k/m88k.c: Similarly. * m88k/m88k.h: Similarly. * mips/mips-protos.h: Similarly. * mips/mips.c: Similarly. * mips/mips.h: Similarly. * ns32k/merlin.h: Similarly. * ns32k/ns32k.c: Similarly. * ns32k/ns32k.h: Similarly. * ns32k/tek6000.h: Similarly. * pa/pa-protos.h: Similarly. * pa/pa.c: Similarly. * pa/pa.h: Similarly. * pdp11/2bsd.h: Similarly. * pdp11/pdp11-protos.h: Similarly. * pdp11/pdp11.c: Similarly. * pdp11/pdp11.h: Similarly. * romp/romp-protos.h: Similarly. * romp/romp.c: Similarly. * romp/romp.h: Similarly. * rs6000/rs6000-protos.h: Similarly. * rs6000/rs6000.c: Similarly. * rs6000/rs6000.h: Similarly. * rs6000/sysv4.h: Similarly. * sh/sh-protos.h: Similarly. * sh/sh.c: Similarly. * sh/sh.h: Similarly. * sparc/sparc-protos.h: Similarly. * sparc/sparc.c: Similarly. * sparc/sparc.h: Similarly. * vax/vax.c: Similarly. * vax/vax.h: Similarly. * vax/vms.h: Similarly. * we32k/we32k.c: Similarly. * we32k/we32k.h: Similarly. Fri Jul 6 11:47:59 2001 Jeffrey A Law (law@cygnus.com) * basic-block.h (first_insn_after_basic_block_note): Declare. * flow.c (first_insn_after_basic_block_note): Define. Moved from... * ssa.c (first_insn_after_basic_block_note): Remove. * ssa-dce.c (find_inherently_necessary): Consider BARRIERs necessary. (ssa_eliminate_dead_code): Properly update the CFG and PHI nodes when we find a dead conditional branch. Insert BARRIERs after any blocks with no successors, but which do not have any BARRIERs. 2001-07-06 Zack Weinberg <zackw@stanford.edu> * varray.c (varray_check_failed): Use internal_error. 2001-07-05 Andrew Haley <aph@redhat.com> * Makefile.in (LIB2_DIVMOD_FUNCS): New. (LIB2FUNCS): Move divmod functions to LIB2_DIVMOD_FUNCS. * mklibgcc.in: Compile LIB2_DIVMOD_FUNCS. 2001-07-02 Jason Merrill <jason_merrill@redhat.com> * dwarf2out.c (mem_loc_descriptor): Only look through a constant pool reference if the target constant is also a SYMBOL_REF. 2001-07-05 Eric Christopher <echristo@redhat.com> * config/mips/mips.h (MASK_MIPS3900): Remove. (MASK_MIPS16,MASK_NO_CHECK_ZERO_DIV,MASK_CHECK_RANGE_DIV, MASK_UNINIT_CONST_IN_RODATA): Change for 3900 mask removal. (TARGET_MIPS3900): Change to use mips_arch. (TARGET_MIPS4000): New. (TARGET_MIPS4100): New. (TARGET_MIPS4300): New. (TARGET_SWITCHES): Change 3900 and 4650 options to NULL. (SUBTARGET_TARGET_OPTIONS): Add -march. Change help text for -mipsX. (GENERATE_BRANCHLIKELY): Move TARGET_MIPS3900. (ISA_HAS_BRANCHLIKELY): To here. (CC1_CPU_SPEC): New. (CC1_SPEC): Use here. Remove 4650 and 3900 options. (mips_arch_string): Declare. (mips_arch): Declare. (TARGET_OPTIONS): Add -march and -mtune. * config/mips/mips.c (mips_arch_string): New. (mips_arch): New. (override_options): Handle -march for codegen and -mtune for scheduling. Use mips_arch. Move tx39 target default here. (mips_parse_cpu): Move error message to override_options. * config/mips/r3900.h (TARGET_DEFAULT): Remove. * config/mips/mips.md: Use TARGET_MIPS4000 and TARGET_MIPS4300. * doc/invoke.texi (Option Summary): Add -march and -mtune entries. (MIPS Options): Ditto. Change mcpu entry to historical text. 2001-07-05 H.J. Lu (hjl@gnu.org) * config/mips/mips.c (mips_parse_cpu): New function to parse -march=*/-mcpu=*. 2001-07-05 Jim Wilson <wilson@redhat.com> * config/ia64/lib1funcs.asm: Revert 2001-07-02 change. * config/ia64/t-ia64: Likewise. (LIB1ASMFUNCS): Update comment. 2001-07-05 David Edelsohn <edelsohn@gnu.org> * doc/install.texi (Install GCC: Binaries): Fix typo. 2001-07-04 Stephane Carrez <Stephane.Carrez@worldnet.fr> * config/m68hc11/m68hc11.md ("*ashlsi3"): Operand 1 can be a memory reference using the stack pointer, adjust it since we push Y temporarily. ("*ashrsi3"): Likewise. ("*lshrsi3"): Likewise. 2001-07-05 Stephane Carrez <Stephane.Carrez@worldnet.fr> * config/m68hc11/m68hc11.h (RETURN_ADDR_RTX): Fix return address when -fomit-frame-pointer is used. 2001-07-05 Jeffrey Oldham <oldham@codesourcery.com> * flow.c: Reverse Jan Hubicka's patch of 02July2001. (try_redirect_by_replacing_jump): Reverse updating properly the count and frequency information. Reverse removing cc0 setter. (forwarder_block_p): Reverse fixing for fallthru blocks. 2001-07-05 DJ Delorie <dj@redhat.com> * gcc.c (TARGET_OPTION_TRANSLATE_TABLE): New. (translate_options): If the above is defined, use it to map given options to new options. * doc/tm.texi: Document it. 2001-07-05 Brad Lucier <lucier@math.purdue.edu> Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at> * doc/invoke.texi (Optimize Options): Document that -fgcse may cause programs using computed gotos to run more slowly. 2001-07-05 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE> * doc/install.texi (Specific): Markup, spelling and typo fixes. Fixed sorting. Consistently require binutils 2.11.2, not prereleases. (Specific, decstation-*): Canonicalize as mips-dec-*. (Specific, i?86-*-sco3.2v5*): Remove make bootstrap requirement, always necessary. (Specific, m68k-altos): Removed reference to README.altos, deleted. (Specific, mips-*): Reword MIPS C compiler requirements. (Specific, powerpc*-*-*): New, mention --with-cpu once. (Specific, sunv5): Removed, obsolete. 2001-07-05 Nathan Sidwell <nathan@codesourcery.com> * dwarf2out.c (output_loc_list): Use an all ones mask for .text asm output and don't rely on long long literals. Reformat some long lines. 2001-07-05 Andreas Jaeger <aj@suse.de> * doc/gcc.texi (GNU/Linux): Remove accidental re-add of GPL section. 2001-07-04 Daniel Berlin <dan@cgsoftware.com> * dwarf2out.c (dwarf2out_define): Update comment. (dwarf2out_undef): Ditto. (dwarf2out_start_source_file): Ditto. (dwarf2out_end_source_file): Ditto. (dwarf2out_finish): Output DW_MACINFO_end_file for primary file, since we never call the start/end debug hook for the primary file. 2001-07-04 Kazu Hirata <kazu@hxi.com> * config/h8300/h8300.c (get_shift_alg): Remove an extra operand from shll. 2001-07-04 Nathan Sidwell <nathan@codesourcery.com> * cppinit.c (remove_dup_dirs): Inform if a system include directory is being reordered. * doc/invoke.texi (Directory Options): GCC warns if you hide a system include. * doc/cpp.texi (Search Paths): Likewise. * doc/gcc.texi (Interoperation): Remove information about -I/usr/include. 2001-07-04 Nathan Sidwell <nathan@codesourcery.com> * varray.h (VARRAY_TOP_GENERIC_PTR): Remove spurious parameter. (VARRAY_TOP_CHAR_PTR): Likewise. 2001-07-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * gcc.c (process_command): Don't assign elements of a const char*. Wed Jul 4 13:40:02 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * emit-rtl.c (change_address): Don't abort if invalid address while reload is in progress. 2001-07-04 Daniel Berlin <dan@cgsoftware.com> * c-lex.c (cb_file_change): Pass line number to debug_start_source_file. (cb_undefine): Pass correct line number to debug_undef. * toplev.c (debug_start_source_file): Add line number to parameters. Pass it along to dwarf2out_start_source_file. (decode_g_option): Stop resetting debug level back to normal when we change debug formats, unless the current level is none. (Before, -g3 -gdwarf-2 would use debug level 2, rather than 3). * toplev.h (debug_start_source_file): Add line number to parameters. * dwarf2out.h (dwarf2out_start_source_file): Add line number to parameters. * dwarf2out.c (dwarf2out_start_source_file): Add line number to parameters. Output debug_macinfo data for starting file if requested. (dwarf2out_end_source_file): Output debug_macinfo data for ending file if requested. (dwarf2out_define): Output debug_macinfo data for defining a macro if requested. (dwarf2out_undef): Output debug_macinfo data for undefining a macro if requested. (DEBUG_MACINFO_SECTION): New. DWARF2 macro info section name. (DEBUG_MACINFO_SECTION_LABEL): New. DWARF2 macro info section label. (macinfo_section_label): New. DWARF2 macro info section label. (dwarf2out_init): If we want macro info, output the start label for the section. (dwarf2out_finish): If we want macro info, add a DW_AT_macro_info attribute to the compilation unit die pointing to the macro info. 2001-07-04 Daniel Berlin <dan@cgsoftware.com> * dwarf2out.c (new_loc_list): Move to inside #ifdef DWARF2_DEBUGGING_INFO. (add_loc_descr_to_loc_list): Ditto. (output_loc_list): Ditto. Also, fix thinko in curr not being initialized. (gen_internal_sym): Ditto. Wed Jul 4 13:40:02 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * emit-rtl.c (replace_equiv_address): New function. * expr.h (replace_equiv_address): New declaration. * explow.c (validize_mem): Call it instead of change_address and also call if -fforce-addr and address is constant. * expr.c: Replace more calls to change_address with adjust_address and/or replace_equiv_address or to validize_mem. * function.c, regmove.c, config/alpha/alpha.c: Likewise. * config/arm/arm.md, config/clipper/clipper.md: Likewise. * config/dsp16xx/dsp16xx.md, config/fr30/fr30.c: Likewise. * config/i370/i370.md, config/i860/i860.md: Likewise. * config/i960/i960.md, config/mips/mips.c: Likewise. * config/mips/mips.md, config/pa/pa.md: Likewise. * config/pdp11/pdp11.md, config/rs6000/rs6000.c: Likewise. * config/rs6000/rs6000.md, config/sh/sh.md: Likewise. 2001-07-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * bitmap.c (bitmap_union_of_diff): Don't use BITMAP_ALLOCA. * bitmap.h (BITMAP_ALLOCA): Don't pass alloca as an argument to a function. 2001-07-04 Joseph S. Myers <jsm28@cam.ac.uk> * doc/include: New directory. * doc/fdl.texi: Move to doc/include/fdl.texi. * doc/texinfo.tex: Move to doc/include/texinfo.tex. * doc/include/funding.texi, doc/include/gpl.texi: New files. * doc/gcc.texi: Use funding.texi and gpl.texi. * Makefile.in ($(docdir)/cpp.info, $(docdir)/gcc.info, $(docdir)/cppinternals.info, cpp.dvi. gcc.dvi. cppinternals.dvi): Update dependencies and use -I $(docdir)/include. 2001-07-04 Anthony Green <green@redhat.com> * config/v850/t-v850 (v850-c.o): Add missing dependencies. 2001-07-04 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at> * doc/install.texi (sparc64-*-*): Remove garbage. Wed Jul 4 09:07:44 2001 Jan van Male <jan.vanmale@fenk.wau.nl> * i386.c (ix86_expand_builtin, case IX86_BUILTIN_SETPS): Fix typo in last change to use adjust_address. 2001-07-04 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at> * doc/install.texi (Specific): Update information for *-*-solaris*. Tue Jul 3 22:33:15 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * explow.c (plus_constant_wide): Reinitialize Y for restart. 2001-07-03 Stan Shebs <shebs@apple.com> * config/darwin.h (SECTION_FUNCTION): Remove WAS_TEXT argument, remove case for flag_no_mach_text_sections. (EXTRA_SECTION_FUNCTIONS): Remove arg from uses of SECTION_FUNCTION. * config/darwin.c (flag_no_mach_text_sections): Remove. * config/darwin-protos.h (darwin_init_pragma): Remove decl. Tue Jul 3 15:35:52 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * explow.c (plus_constant_wide, case PLUS): Call find_constant_term and avoid checking for constant as first operand. * recog.c (find_constant_term_loc): No longer static. (adj_offettable_operand): Delete. * rtl.h (adj_offsettable_operand): Delete declaration. (find_constant_term): Add declaration. * caller-save.c: Replace calls to adj_offsettable_operand with calls to adjust_address. * config/arm/arm.c, config/c4x/c4x.c: Likewise. * config/clipper/clipper.md, config/h8300/h8300.c: Likewise. * config/i386/i386.c, config/i386/i386.md: Likewise. * config/i860/i860.c, config/i960/i960.c: Likewise. * config/i960/i960.md, config/m68hc11/m68hc11.c: Likewise. * config/m68k/m68k.c, config/m68k/m68k.md: Likewise. * config/m88k/m88k.md, config/mcore/mcore.c: Likewise. * config/mips/mips.c, config/mips/mips.md: Likewise. * config/mn10200/mn10200.c, config/mn10300/mn10300.c: Likewise. * config/ns32k/ns32k.c, config/ns32k/ns32k.md: Likewise. * config/pa/pa.c, config/pdp11/pdp11.c: Likewise. * config/pdp11/pdp11.md, config/sh/sh.c, config/v850/v850.c: Likewise. * config/vax/vax.md, config/ns32k/ns32k.c: Likewise. * config/ns32k/ns32k.md: Likewise. 2001-07-03 Zack Weinberg <zackw@stanford.edu> * rtl.c (copy_rtx): Handle 'T' format letter. * gensupport.c (collect_insn_data): Likewise. * print-rtl.c (print_rtx): Print 'T' slots like 's'. 2001-07-03 Nick Clifton <nickc@cambridge.redhat.com> * doc/invoke.texi (Directory Options): Specifiy range for <N> in -B option. Use 'dir' not 'foo' as example directory name. 2001-07-03 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE> * config/i386/sol2.h (ASM_PREFERRED_EH_DATA_FORMAT): Define. Fixes PRs bootstrap/3067, bootstrap/3249, bootstrap/3275. 2001-07-03 Joseph S. Myers <jsm28@cam.ac.uk> * doc/cppinternals.texi: Improve formatting and logical markup. 2001-07-03 Andreas Jaeger <aj@suse.de> * Makefile.in (insn-recog.o): Add dependency on reload.h. * genrecog.c (write_header): Include reload.h for prototypes in insn-recog.c. 2001-07-03 Neil Booth <neil@daikokuya.demon.co.uk> config: * i386/cygwin.h (VALID_MACHINE_DECL_ATTRIBUTE, VALID_MACHINE_TYPE_ATTRIBUTE): Remove. * i386/i386-protos.h (i386_pe_valid_decl_attribute_p, i386_pe_valid_type_attribute_p): Add. * i386/i386.c (TARGET_INITIALIZER): Override for cygwin targets. * i386/winnt.c (i386_valid_decl_attribute_p): Return directly. Mon Jul 2 21:52:19 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * explow.c (plus_constant_wide, case LO_SUM): New case. (plus_constant_for_output_wide): Delete. * rtl.h (plus_constant_for_output): Delete. * alias.c (canon_rtx, init_alias_analysis): Call plus_constant instead of plus_constant_for_output. * recog.c (offsettable_address_p, adj_offsettable_operand): Likewise. * config/darwin.c, config/arm/arm.c, config/m68k/m68k.c: Likewise. * config/m88k/m88k.c, config/mips/mips.c, config/pa/pa.c: Likewise. * config/rs6000/rs6000.c, config/sparc/sparc.c: Likewise. * config/sparc/sparc.md: Likewise. Convert some change_address calls to adjust_address. 2001-07-03 Joseph S. Myers <jsm28@cam.ac.uk> * doc/extend.texi, doc/gcc.texi, doc/invoke.texi, doc/md.texi, doc/rtl.texi, doc/tm.texi: Improve formatting. Improve documentation of -std and -Wwrite-strings. 2001-07-02 Geoffrey Keating <geoffk@redhat.com> * cse.c (canon_hash): Don't register registers in very small register classes, as extending their lifetime might cause reload to fail. Mon Jul 2 23:14:00 CEST 2001 Jan Hubicka <jh@suse.cz> * flow.c (try_redirect_by_replacing_jump): Remove cc0 setter. * flow.c (forwarder_block_p): Fix for fallthru blocks. (try_redirect_by_replacing_jump): Update properly the count and frequency information. Mon Jul 2 14:20:13 2001 Jeffrey A Law (law@cygnus.com) * toplev.c (dump_file_index): Move SSA dumps just after first jump dump. (dump_file): Corresponding changes. (rest_of_compilation): Move SSA path to just after the first jump pass. * doc/gcc.texi (Passes): Update due to movement of SSA path. * doc/invoke.texi: Update dump file #s as they were completely out of date with reality. 2001-07-02 Geoffrey Keating <geoffk@redhat.com> * doc/tm.texi (Frame Layout): Document STACK_PUSH_CODE. * expr.c (emit_move_insn_1): Deal with non-default STACK_PUSH_CODE. * expr.c (emit_single_push_insn): Fix warning. 2001-07-02 Toshiyasu Morita <toshiyasu.morita@hsa.hitachi.com> * expr.c (emit_move_insn_1): Avoid modifying cfun->expr->x_stack_pointer when PUSH_ROUNDING is defined. Mon Jul 2 15:33:31 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * emit-rtl.c (adjust_address): New function. * expr.h (adjust_address): Add declaration. * builtins.c: Replace some calls to change_address with calls to it or to validize_mem. * caller-save.c, dwarf2out.c, except.c, expmed.c, expr.c: Likewise. * function.c, config/a29k/a29k.md, config/alpha/alpha.c: Likewise. * config/arm/arm.c, config/convex/convex.c: Likewise. * config/dsp16xx/dsp16xx.md, config/fr30/fr30.c: Likewise. * config/i386/i386.c, config/i386/i386.md: Likewise. * config/ia64/ia64.c, config/ia64/ia64.md: Likewise. * config/m32r/m32r.c, config/m68k/m68k.md: Likewise. * config/m88k/m88k.c, config/mips/mips.md: Likewise. * config/ns32k/ns32k.c, config/rs6000/rs6000.c: Likewise. * config/sh/sh.c, config/sparc/sparc.md: Likewise. 2001-07-02 Jim Wilson <wilson@redhat.com> * config/ia64/ia64.h: Delete obsolete lib1funcs.asm comment. 2001-07-02 Steve Ellcey <sje@cup.hp.com> * config/ia64/t-ia64: Change LIB1ASMFUNCS to use single underscore. * config/ia64/lib1funcs.asm: Change macro names to match t-ia64. 2001-07-02 Zack Weinberg <zackw@stanford.edu> * cppinit.c (lang_defaults): New table. (set_lang): Just read from lang_defaults into the live options structure. 2001-07-02 Zack Weinberg <zackw@stanford.edu> * Makefile.in (doc): Depend on $(GENERATED_MANPAGES). * doc/.cvsignore: Add gcc.1, cpp.1, gcov.1. * doc/gcc.1, doc/cpp.1, doc/gcov.1: Removed. 2001-07-02 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE> * doc/install.texi: Various spelling and markup fixes. (Installing GCC): Component specific installation instructions are gone. Fix reference. Warn about removing old install dir in the presence of shared libs. (Configuration): Invoke with options target to match configure --help. Consistently refer to gas, gld pathnames. Invert --enable-multilib documentation. Remove references to old compiler versions. Mon Jul 2 12:50:51 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * flow.c (try_simplify_condjump): Fix typo in updating fallthru flags. 2001-07-02 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE> * doc/install.texi (Specific, mips*-sgi-irix4): Split from IRIX 5 section. (Specific, mips*-sgi-irix5): Note IDO download. Reworded MIPS C hints. Use GNU as instead of GAS. Markup fixes. Removed SGI Freeware reference, IRIX 6 only. (Specific, mips*-sgi-irix6): Removed ranlib caveats, obsolete. Note N64 library requirement/workaround. Update O32 hints. Complete list of structure passing bug victims. 2001-07-02 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at> * doc/install.texi: Remove CVS Id. 2001-07-02 Andreas Jaeger <aj@suse.de> * ssa-dce.c (note_inherently_necessary_set): Add unused attribute. (find_inherently_necessary): Remove unused variable. 2001-07-02 Nathan Sidwell <nathan@codesourcery.com> * c-common.h (TDI_inlined): New ast dump phase. (dump_flag_name): New function. * c-dump.c (dump_files): Add inlined phase. (dump_flag_name): Define. * doc/invoke.texi (-fdump-ast-inlined): Document. Mon Jul 2 06:29:36 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * stor-layout.c (layout_decl): Revert change to handling of alignment in packed types. Sun Jul 1 11:53:52 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * c-common.c (decl_attributes, case A_MODE): Don't call layout_decl for FIELD_DECL. 2001-07-01 Geoffrey Keating <geoffk@redhat.com> * doc/tm.texi (FUNCTION_ARG): Document that the last call is special. 2001-07-01 Nathan Sidwell <nathan@codesourcery.com> * tlink.c (recompile_files): Remove COMPILER_PATH and LIBRARY_PATH from the environment. 2001-07-01 Zack Weinberg <zackw@stanford.edu> * c-common.h (enum rid): Add RID_FIRST_AT, RID_LAST_AT, RID_LAST_PQ. Move RID_FIRST_PQ down with the other FIRST/LAST enumerators. (OBJC_IS_AT_KEYWORD, OBJC_IS_PQ_KEYWORD): New macros. * c-parse.in (OBJC_STRING): Kill. (objc_string): Decompose to [objc_string] '@' STRING. (reswords): Take the leading '@' off all the Objective C keywords. (objc_rid_sans_at): Kill. (init_reswords): Don't initialize it. (yylexname): Use OBJC_IS_AT_KEYWORD and OBJC_IS_PQ_KEYWORD. (_yylex): Kill reconsider label. Look ahead one token after an '@'; if we get an identifier, check whether it's an Objective C @-keyword. If so, return the keyword. Otherwise, put back the token and return the '@' as a terminal. * cpplib.c (lex_macro_node): Remove unnecessary check for leading '@' on identifier. Clarify control flow and commentary. Sun Jul 1 11:53:52 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * cse.c (new_label_ref): Variable deleted. (insert): Remove set of new_label_ref. (check_for_label_ref): New function. (cse_basic_block): Don't check new_label_ref; call check_for_label_ref. See ChangeLog.5 for earlier changes. From-SVN: r43861
This commit is contained in:
parent
db42058b0b
commit
f1ec5147f5
|
@ -1520,8 +1520,8 @@ final.o : final.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) flags.h intl.h \
|
|||
xcoffout.h toplev.h reload.h dwarfout.h dwarf2out.h sdbout.h \
|
||||
dbxout.h $(BASIC_BLOCK_H) $(TM_P_H) $(TARGET_H)
|
||||
recog.o : recog.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) function.h $(BASIC_BLOCK_H) \
|
||||
$(REGS_H) $(RECOG_H) hard-reg-set.h flags.h insn-config.h $(INSN_ATTR_H) \
|
||||
real.h toplev.h output.h reload.h $(TM_P_H)
|
||||
$(REGS_H) $(RECOG_H) $(EXPR_H) hard-reg-set.h flags.h insn-config.h \
|
||||
$(INSN_ATTR_H) real.h toplev.h output.h reload.h $(TM_P_H)
|
||||
reg-stack.o : reg-stack.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TREE_H) $(RECOG_H) \
|
||||
$(REGS_H) hard-reg-set.h flags.h insn-config.h toplev.h reload.h \
|
||||
varray.h function.h $(TM_P_H)
|
||||
|
|
11
gcc/alias.c
11
gcc/alias.c
|
@ -972,17 +972,8 @@ canon_rtx (x)
|
|||
MEM alone, but need to return the canonicalized MEM with
|
||||
all the flags with their original values. */
|
||||
else if (GET_CODE (x) == MEM)
|
||||
{
|
||||
rtx addr = canon_rtx (XEXP (x, 0));
|
||||
x = replace_equiv_address_nv (x, canon_rtx (XEXP (x, 0)));
|
||||
|
||||
if (addr != XEXP (x, 0))
|
||||
{
|
||||
rtx new = gen_rtx_MEM (GET_MODE (x), addr);
|
||||
|
||||
MEM_COPY_ATTRIBUTES (new, x);
|
||||
x = new;
|
||||
}
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
|
|
|
@ -332,8 +332,9 @@ setup_save_areas ()
|
|||
/* This should not depend on WORDS_BIG_ENDIAN.
|
||||
The order of words in regs is the same as in memory. */
|
||||
regno_save_mem[i + k][1]
|
||||
= adjust_address (regno_save_mem[i][j], regno_save_mode[i + k][1],
|
||||
k * UNITS_PER_WORD);
|
||||
= adjust_address_nv (regno_save_mem[i][j],
|
||||
regno_save_mode[i + k][1],
|
||||
k * UNITS_PER_WORD);
|
||||
}
|
||||
|
||||
/* Now loop again and set the alias set of any save areas we made to
|
||||
|
|
|
@ -5889,15 +5889,15 @@ make_extraction (mode, inner, pos, pos_rtx, len,
|
|||
|
||||
if (GET_CODE (inner) == MEM)
|
||||
{
|
||||
int offset;
|
||||
HOST_WIDE_INT offset;
|
||||
|
||||
/* POS counts from lsb, but make OFFSET count in memory order. */
|
||||
if (BYTES_BIG_ENDIAN)
|
||||
offset = (GET_MODE_BITSIZE (is_mode) - len - pos) / BITS_PER_UNIT;
|
||||
else
|
||||
offset = pos / BITS_PER_UNIT;
|
||||
|
||||
new = gen_rtx_MEM (tmode, plus_constant (XEXP (inner, 0), offset));
|
||||
MEM_COPY_ATTRIBUTES (new, inner);
|
||||
new = adjust_address_nv (inner, tmode, offset);
|
||||
}
|
||||
else if (GET_CODE (inner) == REG)
|
||||
{
|
||||
|
@ -5905,7 +5905,7 @@ make_extraction (mode, inner, pos, pos_rtx, len,
|
|||
a SUBREG and it would sometimes return a new hard register. */
|
||||
if (tmode != inner_mode)
|
||||
{
|
||||
int final_word = pos / BITS_PER_WORD;
|
||||
HOST_WIDE_INT final_word = pos / BITS_PER_WORD;
|
||||
|
||||
if (WORDS_BIG_ENDIAN
|
||||
&& GET_MODE_SIZE (inner_mode) > UNITS_PER_WORD)
|
||||
|
@ -6125,13 +6125,7 @@ make_extraction (mode, inner, pos, pos_rtx, len,
|
|||
- GET_MODE_SIZE (wanted_inner_mode) - offset);
|
||||
|
||||
if (offset != 0 || inner_mode != wanted_inner_mode)
|
||||
{
|
||||
rtx newmem = gen_rtx_MEM (wanted_inner_mode,
|
||||
plus_constant (XEXP (inner, 0), offset));
|
||||
|
||||
MEM_COPY_ATTRIBUTES (newmem, inner);
|
||||
inner = newmem;
|
||||
}
|
||||
inner = adjust_address_nv (inner, wanted_inner_mode, offset);
|
||||
}
|
||||
|
||||
/* If INNER is not memory, we can always get it into the proper mode. If we
|
||||
|
@ -8976,14 +8970,10 @@ simplify_shift_const (x, code, result_mode, varop, input_count)
|
|||
&& (tmode = mode_for_size (GET_MODE_BITSIZE (mode) - count,
|
||||
MODE_INT, 1)) != BLKmode)
|
||||
{
|
||||
if (BYTES_BIG_ENDIAN)
|
||||
new = gen_rtx_MEM (tmode, XEXP (varop, 0));
|
||||
else
|
||||
new = gen_rtx_MEM (tmode,
|
||||
plus_constant (XEXP (varop, 0),
|
||||
count / BITS_PER_UNIT));
|
||||
new = adjust_address_nv (varop, tmode,
|
||||
BYTES_BIG_ENDIAN ? 0
|
||||
: count / BITS_PER_UNIT);
|
||||
|
||||
MEM_COPY_ATTRIBUTES (new, varop);
|
||||
varop = gen_rtx_fmt_e (code == ASHIFTRT ? SIGN_EXTEND
|
||||
: ZERO_EXTEND, mode, new);
|
||||
count = 0;
|
||||
|
@ -9749,9 +9739,8 @@ gen_lowpart_for_combine (mode, x)
|
|||
offset -= (MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode))
|
||||
- MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x))));
|
||||
}
|
||||
new = gen_rtx_MEM (mode, plus_constant (XEXP (x, 0), offset));
|
||||
MEM_COPY_ATTRIBUTES (new, x);
|
||||
return new;
|
||||
|
||||
return adjust_address_nv (x, mode, offset);
|
||||
}
|
||||
|
||||
/* If X is a comparison operator, rewrite it in a new mode. This
|
||||
|
|
15
gcc/cse.c
15
gcc/cse.c
|
@ -4382,16 +4382,15 @@ gen_lowpart_if_possible (mode, x)
|
|||
offset = (MAX (GET_MODE_SIZE (GET_MODE (x)), UNITS_PER_WORD)
|
||||
- MAX (GET_MODE_SIZE (mode), UNITS_PER_WORD));
|
||||
if (BYTES_BIG_ENDIAN)
|
||||
{
|
||||
/* Adjust the address so that the address-after-the-data is
|
||||
unchanged. */
|
||||
offset -= (MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode))
|
||||
- MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x))));
|
||||
}
|
||||
new = gen_rtx_MEM (mode, plus_constant (XEXP (x, 0), offset));
|
||||
/* Adjust the address so that the address-after-the-data is
|
||||
unchanged. */
|
||||
offset -= (MIN (UNITS_PER_WORD, GET_MODE_SIZE (mode))
|
||||
- MIN (UNITS_PER_WORD, GET_MODE_SIZE (GET_MODE (x))));
|
||||
|
||||
new = adjust_address_nv (x, mode, offset);
|
||||
if (! memory_address_p (mode, XEXP (new, 0)))
|
||||
return 0;
|
||||
MEM_COPY_ATTRIBUTES (new, x);
|
||||
|
||||
return new;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -706,7 +706,6 @@ add_mem_for_addr (addr_elt, mem_elt, x)
|
|||
cselib_val *addr_elt, *mem_elt;
|
||||
rtx x;
|
||||
{
|
||||
rtx new;
|
||||
struct elt_loc_list *l;
|
||||
|
||||
/* Avoid duplicates. */
|
||||
|
@ -715,11 +714,10 @@ add_mem_for_addr (addr_elt, mem_elt, x)
|
|||
&& CSELIB_VAL_PTR (XEXP (l->loc, 0)) == addr_elt)
|
||||
return;
|
||||
|
||||
new = gen_rtx_MEM (GET_MODE (x), addr_elt->u.val_rtx);
|
||||
MEM_COPY_ATTRIBUTES (new, x);
|
||||
|
||||
addr_elt->addr_list = new_elt_list (addr_elt->addr_list, mem_elt);
|
||||
mem_elt->locs = new_elt_loc_list (mem_elt->locs, new);
|
||||
mem_elt->locs
|
||||
= new_elt_loc_list (mem_elt->locs,
|
||||
replace_equiv_address_nv (x, addr_elt->u.val_rtx));
|
||||
}
|
||||
|
||||
/* Subroutine of cselib_lookup. Return a value for X, which is a MEM rtx.
|
||||
|
|
|
@ -1474,23 +1474,18 @@ operand_subword (op, offset, validate_address, mode)
|
|||
/* Form a new MEM at the requested address. */
|
||||
if (GET_CODE (op) == MEM)
|
||||
{
|
||||
rtx addr = plus_constant (XEXP (op, 0), (offset * UNITS_PER_WORD));
|
||||
rtx new;
|
||||
rtx new = adjust_address_nv (op, word_mode, offset * UNITS_PER_WORD);
|
||||
|
||||
if (validate_address)
|
||||
if (! validate_address)
|
||||
return new;
|
||||
|
||||
else if (reload_completed)
|
||||
{
|
||||
if (reload_completed)
|
||||
{
|
||||
if (! strict_memory_address_p (word_mode, addr))
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
addr = memory_address (word_mode, addr);
|
||||
if (! strict_memory_address_p (word_mode, XEXP (new, 0)))
|
||||
return 0;
|
||||
}
|
||||
|
||||
new = gen_rtx_MEM (word_mode, addr);
|
||||
MEM_COPY_ATTRIBUTES (new, op);
|
||||
return new;
|
||||
else
|
||||
return replace_equiv_address (new, XEXP (new, 0));
|
||||
}
|
||||
|
||||
/* Rest can be handled by simplify_subreg. */
|
||||
|
@ -1567,13 +1562,16 @@ reverse_comparison (insn)
|
|||
/* Return a memory reference like MEMREF, but with its mode changed
|
||||
to MODE and its address changed to ADDR.
|
||||
(VOIDmode means don't change the mode.
|
||||
NULL for ADDR means don't change the address.) */
|
||||
NULL for ADDR means don't change the address.)
|
||||
VALIDATE is nonzero if the returned memory location is required to be
|
||||
valid. */
|
||||
|
||||
rtx
|
||||
change_address (memref, mode, addr)
|
||||
change_address_1 (memref, mode, addr, validate)
|
||||
rtx memref;
|
||||
enum machine_mode mode;
|
||||
rtx addr;
|
||||
int validate;
|
||||
{
|
||||
rtx new;
|
||||
|
||||
|
@ -1584,19 +1582,16 @@ change_address (memref, mode, addr)
|
|||
if (addr == 0)
|
||||
addr = XEXP (memref, 0);
|
||||
|
||||
/* If reload is in progress, don't check for validity of the address since we
|
||||
assume the caller knows what they are doing. If reload has completed, the
|
||||
address must be valid. Otherwise, we call memory_address to make it
|
||||
valid. */
|
||||
if (reload_in_progress)
|
||||
;
|
||||
else if (reload_completed)
|
||||
if (validate)
|
||||
{
|
||||
if (! memory_address_p (mode, addr))
|
||||
abort ();
|
||||
if (reload_in_progress || reload_completed)
|
||||
{
|
||||
if (! memory_address_p (mode, addr))
|
||||
abort ();
|
||||
}
|
||||
else
|
||||
addr = memory_address (mode, addr);
|
||||
}
|
||||
else
|
||||
addr = memory_address (mode, addr);
|
||||
|
||||
if (rtx_equal_p (addr, XEXP (memref, 0)) && mode == GET_MODE (memref))
|
||||
return memref;
|
||||
|
@ -1621,6 +1616,20 @@ adjust_address (memref, mode, offset)
|
|||
change_address (memref, mode, plus_constant (XEXP (memref, 0), offset));
|
||||
}
|
||||
|
||||
/* Likewise, but the reference is not required to be valid. */
|
||||
|
||||
rtx
|
||||
adjust_address_nv (memref, mode, offset)
|
||||
rtx memref;
|
||||
enum machine_mode mode;
|
||||
HOST_WIDE_INT offset;
|
||||
{
|
||||
/* For now, this is just a wrapper for change_address, but eventually
|
||||
will do memref tracking. */
|
||||
return change_address_1 (memref, mode,
|
||||
plus_constant (XEXP (memref, 0), offset), 0);
|
||||
}
|
||||
|
||||
/* Return a memory reference like MEMREF, but with its address changed to
|
||||
ADDR. The caller is asserting that the actual piece of memory pointed
|
||||
to is the same, just the form of the address is being changed, such as
|
||||
|
@ -1635,6 +1644,17 @@ replace_equiv_address (memref, addr)
|
|||
will do memref tracking. */
|
||||
return change_address (memref, VOIDmode, addr);
|
||||
}
|
||||
/* Likewise, but the reference is not required to be valid. */
|
||||
|
||||
rtx
|
||||
replace_equiv_address_nv (memref, addr)
|
||||
rtx memref;
|
||||
rtx addr;
|
||||
{
|
||||
/* For now, this is just a wrapper for change_address, but eventually
|
||||
will do memref tracking. */
|
||||
return change_address_1 (memref, VOIDmode, addr, 0);
|
||||
}
|
||||
|
||||
/* Return a newly created CODE_LABEL rtx with a unique label number. */
|
||||
|
||||
|
|
16
gcc/explow.c
16
gcc/explow.c
|
@ -715,21 +715,13 @@ rtx
|
|||
stabilize (x)
|
||||
rtx x;
|
||||
{
|
||||
register rtx addr;
|
||||
|
||||
if (GET_CODE (x) != MEM)
|
||||
if (GET_CODE (x) != MEM
|
||||
|| ! rtx_unstable_p (XEXP (x, 0)))
|
||||
return x;
|
||||
|
||||
addr = XEXP (x, 0);
|
||||
if (rtx_unstable_p (addr))
|
||||
{
|
||||
rtx temp = force_reg (Pmode, copy_all_regs (addr));
|
||||
rtx mem = gen_rtx_MEM (GET_MODE (x), temp);
|
||||
|
||||
MEM_COPY_ATTRIBUTES (mem, x);
|
||||
return mem;
|
||||
}
|
||||
return x;
|
||||
return
|
||||
replace_equiv_address (x, force_reg (Pmode, copy_all_regs (XEXP (x, 0))));
|
||||
}
|
||||
|
||||
/* Copy the value or contents of X to a new temp reg and return that reg. */
|
||||
|
|
49
gcc/expr.c
49
gcc/expr.c
|
@ -384,23 +384,23 @@ protect_from_queue (x, modify)
|
|||
if (code == MEM && GET_MODE (x) != BLKmode
|
||||
&& GET_CODE (XEXP (x, 0)) == QUEUED && !modify)
|
||||
{
|
||||
register rtx y = XEXP (x, 0);
|
||||
register rtx new = gen_rtx_MEM (GET_MODE (x), QUEUED_VAR (y));
|
||||
|
||||
MEM_COPY_ATTRIBUTES (new, x);
|
||||
rtx y = XEXP (x, 0);
|
||||
rtx new = replace_equiv_address_nv (x, QUEUED_VAR (y));
|
||||
|
||||
if (QUEUED_INSN (y))
|
||||
{
|
||||
register rtx temp = gen_reg_rtx (GET_MODE (new));
|
||||
rtx temp = gen_reg_rtx (GET_MODE (x));
|
||||
|
||||
emit_insn_before (gen_move_insn (temp, new),
|
||||
QUEUED_INSN (y));
|
||||
return temp;
|
||||
}
|
||||
|
||||
/* Copy the address into a pseudo, so that the returned value
|
||||
remains correct across calls to emit_queue. */
|
||||
XEXP (new, 0) = copy_to_reg (XEXP (new, 0));
|
||||
return new;
|
||||
return replace_equiv_address (new, copy_to_reg (XEXP (new, 0)));
|
||||
}
|
||||
|
||||
/* Otherwise, recursively protect the subexpressions of all
|
||||
the kinds of rtx's that can contain a QUEUED. */
|
||||
if (code == MEM)
|
||||
|
@ -1577,8 +1577,8 @@ move_by_pieces_1 (genfun, mode, data)
|
|||
{
|
||||
if (data->autinc_to)
|
||||
{
|
||||
to1 = gen_rtx_MEM (mode, data->to_addr);
|
||||
MEM_COPY_ATTRIBUTES (to1, data->to);
|
||||
to1 = replace_equiv_address (data->to, data->to_addr);
|
||||
to1 = adjust_address (to1, mode, 0);
|
||||
}
|
||||
else
|
||||
to1 = adjust_address (data->to, mode, data->offset);
|
||||
|
@ -1586,8 +1586,8 @@ move_by_pieces_1 (genfun, mode, data)
|
|||
|
||||
if (data->autinc_from)
|
||||
{
|
||||
from1 = gen_rtx_MEM (mode, data->from_addr);
|
||||
MEM_COPY_ATTRIBUTES (from1, data->from);
|
||||
from1 = replace_equiv_address (data->from, data->from_addr);
|
||||
from1 = adjust_address (from1, mode, 0);
|
||||
}
|
||||
else
|
||||
from1 = adjust_address (data->from, mode, data->offset);
|
||||
|
@ -2508,8 +2508,8 @@ store_by_pieces_2 (genfun, mode, data)
|
|||
|
||||
if (data->autinc_to)
|
||||
{
|
||||
to1 = gen_rtx_MEM (mode, data->to_addr);
|
||||
MEM_COPY_ATTRIBUTES (to1, data->to);
|
||||
to1 = replace_equiv_address (data->to, data->to_addr);
|
||||
to1 = adjust_address (to1, mode, 0);
|
||||
}
|
||||
else
|
||||
to1 = adjust_address (data->to, mode, data->offset);
|
||||
|
@ -3003,20 +3003,10 @@ emit_move_insn_1 (x, y)
|
|||
is scheduled for replacement. */
|
||||
if (reload_in_progress && GET_CODE (x) == MEM
|
||||
&& (inner = find_replacement (&XEXP (x, 0))) != XEXP (x, 0))
|
||||
{
|
||||
rtx new = gen_rtx_MEM (GET_MODE (x), inner);
|
||||
|
||||
MEM_COPY_ATTRIBUTES (new, x);
|
||||
x = new;
|
||||
}
|
||||
x = replace_equiv_address_nv (x, inner);
|
||||
if (reload_in_progress && GET_CODE (y) == MEM
|
||||
&& (inner = find_replacement (&XEXP (y, 0))) != XEXP (y, 0))
|
||||
{
|
||||
rtx new = gen_rtx_MEM (GET_MODE (y), inner);
|
||||
|
||||
MEM_COPY_ATTRIBUTES (new, y);
|
||||
y = new;
|
||||
}
|
||||
y = replace_equiv_address_nv (y, inner);
|
||||
|
||||
start_sequence ();
|
||||
|
||||
|
@ -7241,14 +7231,7 @@ expand_expr (exp, target, tmode, modifier)
|
|||
/* Get a reference to just this component. */
|
||||
if (modifier == EXPAND_CONST_ADDRESS
|
||||
|| modifier == EXPAND_SUM || modifier == EXPAND_INITIALIZER)
|
||||
{
|
||||
rtx new = gen_rtx_MEM (mode1,
|
||||
plus_constant (XEXP (op0, 0),
|
||||
(bitpos / BITS_PER_UNIT)));
|
||||
|
||||
MEM_COPY_ATTRIBUTES (new, op0);
|
||||
op0 = new;
|
||||
}
|
||||
op0 = adjust_address_nv (op0, mode1, bitpos / BITS_PER_UNIT);
|
||||
else
|
||||
op0 = adjust_address (op0, mode1, bitpos / BITS_PER_UNIT);
|
||||
|
||||
|
|
15
gcc/expr.h
15
gcc/expr.h
|
@ -1147,19 +1147,30 @@ extern rtx memory_address_noforce PARAMS ((enum machine_mode, rtx));
|
|||
/* Return a memory reference like MEMREF, but with its mode changed
|
||||
to MODE and its address changed to ADDR.
|
||||
(VOIDmode means don't change the mode.
|
||||
NULL for ADDR means don't change the address.) */
|
||||
extern rtx change_address PARAMS ((rtx, enum machine_mode, rtx));
|
||||
NULL for ADDR means don't change the address.)
|
||||
VALIDATE is nonzero if the returned memory location is required to be
|
||||
valid. */
|
||||
extern rtx change_address_1 PARAMS ((rtx, enum machine_mode, rtx, int));
|
||||
|
||||
#define change_address(MEMREF, MODE, ADDR) \
|
||||
change_address_1 (MEMREF, MODE, ADDR, 1)
|
||||
|
||||
/* Return a memory reference like MEMREF, but with its mode changed
|
||||
to MODE and its address offset by OFFSET bytes. */
|
||||
extern rtx adjust_address PARAMS ((rtx, enum machine_mode, HOST_WIDE_INT));
|
||||
|
||||
/* Likewise, but the reference is not required to be valid. */
|
||||
extern rtx adjust_address_nv PARAMS ((rtx, enum machine_mode, HOST_WIDE_INT));
|
||||
|
||||
/* Return a memory reference like MEMREF, but with its address changed to
|
||||
ADDR. The caller is asserting that the actual piece of memory pointed
|
||||
to is the same, just the form of the address is being changed, such as
|
||||
by putting something into a register. */
|
||||
extern rtx replace_equiv_address PARAMS ((rtx, rtx));
|
||||
|
||||
/* Likewise, but the reference is not required to be valid. */
|
||||
extern rtx replace_equiv_address_nv PARAMS ((rtx, rtx));
|
||||
|
||||
/* Return a memory reference like MEMREF, but which is known to have a
|
||||
valid address. */
|
||||
extern rtx validize_mem PARAMS ((rtx));
|
||||
|
|
|
@ -3093,7 +3093,7 @@ alter_subreg (x)
|
|||
}
|
||||
else if (GET_CODE (y) == MEM)
|
||||
{
|
||||
register int offset = SUBREG_BYTE (x);
|
||||
HOST_WIDE_INT offset = SUBREG_BYTE (x);
|
||||
|
||||
/* Catch these instead of generating incorrect code. */
|
||||
if ((offset % GET_MODE_SIZE (GET_MODE (x))) != 0)
|
||||
|
|
|
@ -2094,9 +2094,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
|
|||
|
||||
pos %= GET_MODE_BITSIZE (wanted_mode);
|
||||
|
||||
newmem = gen_rtx_MEM (wanted_mode,
|
||||
plus_constant (XEXP (tem, 0), offset));
|
||||
MEM_COPY_ATTRIBUTES (newmem, tem);
|
||||
newmem = adjust_address_nv (tem, wanted_mode, offset);
|
||||
|
||||
/* Make the change and see if the insn remains valid. */
|
||||
INSN_CODE (insn) = -1;
|
||||
|
@ -2284,10 +2282,7 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements)
|
|||
|
||||
pos %= GET_MODE_BITSIZE (wanted_mode);
|
||||
|
||||
newmem = gen_rtx_MEM (wanted_mode,
|
||||
plus_constant (XEXP (tem, 0),
|
||||
offset));
|
||||
MEM_COPY_ATTRIBUTES (newmem, tem);
|
||||
newmem = adjust_address_nv (tem, wanted_mode, offset);
|
||||
|
||||
/* Make the change and see if the insn remains valid. */
|
||||
INSN_CODE (insn) = -1;
|
||||
|
@ -3027,14 +3022,9 @@ purge_addressof_1 (loc, insn, force, store, ht)
|
|||
else if (code == MEM && GET_CODE (XEXP (x, 0)) == ADDRESSOF && ! force)
|
||||
{
|
||||
rtx sub = XEXP (XEXP (x, 0), 0);
|
||||
rtx sub2;
|
||||
|
||||
if (GET_CODE (sub) == MEM)
|
||||
{
|
||||
sub2 = gen_rtx_MEM (GET_MODE (x), copy_rtx (XEXP (sub, 0)));
|
||||
MEM_COPY_ATTRIBUTES (sub2, sub);
|
||||
sub = sub2;
|
||||
}
|
||||
sub = adjust_address_nv (sub, GET_MODE (x), 0);
|
||||
else if (GET_CODE (sub) == REG
|
||||
&& (MEM_VOLATILE_P (x) || GET_MODE (x) == BLKmode))
|
||||
;
|
||||
|
|
|
@ -3846,16 +3846,14 @@ gen_move_insn (x, y)
|
|||
x = gen_lowpart_common (tmode, x1);
|
||||
if (x == 0 && GET_CODE (x1) == MEM)
|
||||
{
|
||||
x = gen_rtx_MEM (tmode, XEXP (x1, 0));
|
||||
MEM_COPY_ATTRIBUTES (x, x1);
|
||||
x = adjust_address_nv (x1, tmode, 0);
|
||||
copy_replacements (x1, x);
|
||||
}
|
||||
|
||||
y = gen_lowpart_common (tmode, y1);
|
||||
if (y == 0 && GET_CODE (y1) == MEM)
|
||||
{
|
||||
y = gen_rtx_MEM (tmode, XEXP (y1, 0));
|
||||
MEM_COPY_ATTRIBUTES (y, y1);
|
||||
y = adjust_address_nv (y1, tmode, 0);
|
||||
copy_replacements (y1, y);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ Boston, MA 02111-1307, USA. */
|
|||
#include "hard-reg-set.h"
|
||||
#include "recog.h"
|
||||
#include "regs.h"
|
||||
#include "expr.h"
|
||||
#include "function.h"
|
||||
#include "flags.h"
|
||||
#include "real.h"
|
||||
|
@ -597,10 +598,7 @@ validate_replace_rtx_1 (loc, from, to, object)
|
|||
|
||||
pos %= GET_MODE_BITSIZE (wanted_mode);
|
||||
|
||||
newmem = gen_rtx_MEM (wanted_mode,
|
||||
plus_constant (XEXP (XEXP (x, 0), 0),
|
||||
offset));
|
||||
MEM_COPY_ATTRIBUTES (newmem, XEXP (x, 0));
|
||||
newmem = adjust_address_nv (XEXP (x, 0), wanted_mode, offset);
|
||||
|
||||
validate_change (object, &XEXP (x, 2), GEN_INT (pos), 1);
|
||||
validate_change (object, &XEXP (x, 0), newmem, 1);
|
||||
|
|
|
@ -2260,14 +2260,11 @@ try_apply_stack_adjustment (insn, memlist, new_adjust, delta)
|
|||
validate_change (insn, &XEXP (SET_SRC (set), 1), GEN_INT (new_adjust), 1);
|
||||
|
||||
for (ml = memlist; ml ; ml = ml->next)
|
||||
{
|
||||
HOST_WIDE_INT c = ml->sp_offset - delta;
|
||||
rtx new = gen_rtx_MEM (GET_MODE (*ml->mem),
|
||||
plus_constant (stack_pointer_rtx, c));
|
||||
|
||||
MEM_COPY_ATTRIBUTES (new, *ml->mem);
|
||||
validate_change (ml->insn, ml->mem, new, 1);
|
||||
}
|
||||
validate_change
|
||||
(ml->insn, ml->mem,
|
||||
replace_equiv_address_nv (*ml->mem,
|
||||
plus_constant (stack_pointer_rtx,
|
||||
ml->sp_offset - delta)), 1);
|
||||
|
||||
if (apply_change_group ())
|
||||
{
|
||||
|
|
32
gcc/reload.c
32
gcc/reload.c
|
@ -893,25 +893,18 @@ push_reload (in, out, inloc, outloc, class,
|
|||
/* If we have a read-write operand with an address side-effect,
|
||||
change either IN or OUT so the side-effect happens only once. */
|
||||
if (in != 0 && out != 0 && GET_CODE (in) == MEM && rtx_equal_p (in, out))
|
||||
{
|
||||
if (GET_CODE (XEXP (in, 0)) == POST_INC
|
||||
|| GET_CODE (XEXP (in, 0)) == POST_DEC
|
||||
|| GET_CODE (XEXP (in, 0)) == POST_MODIFY)
|
||||
{
|
||||
rtx new = gen_rtx_MEM (GET_MODE (in), XEXP (XEXP (in, 0), 0));
|
||||
switch (GET_CODE (XEXP (in, 0)))
|
||||
{
|
||||
case POST_INC: case POST_DEC: case POST_MODIFY:
|
||||
in = replace_equiv_address_nv (in, XEXP (XEXP (in, 0), 0));
|
||||
break;
|
||||
|
||||
MEM_COPY_ATTRIBUTES (new, in);
|
||||
in = new;
|
||||
}
|
||||
if (GET_CODE (XEXP (in, 0)) == PRE_INC
|
||||
|| GET_CODE (XEXP (in, 0)) == PRE_DEC
|
||||
|| GET_CODE (XEXP (in, 0)) == PRE_MODIFY)
|
||||
{
|
||||
rtx new = gen_rtx_MEM (GET_MODE (out), XEXP (XEXP (out, 0), 0));
|
||||
case PRE_INC: case PRE_DEC: case PRE_MODIFY:
|
||||
out = replace_equiv_address_nv (out, XEXP (XEXP (out, 0), 0));
|
||||
break;
|
||||
|
||||
MEM_COPY_ATTRIBUTES (new, out);
|
||||
out = new;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* If we are reloading a (SUBREG constant ...), really reload just the
|
||||
|
@ -4484,9 +4477,8 @@ make_memloc (ad, regno)
|
|||
if (rtx_varies_p (tem, 0))
|
||||
tem = copy_rtx (tem);
|
||||
|
||||
tem = gen_rtx_MEM (GET_MODE (ad), tem);
|
||||
MEM_COPY_ATTRIBUTES (tem, reg_equiv_memory_loc[regno]);
|
||||
return tem;
|
||||
tem = replace_equiv_address_nv (reg_equiv_memory_loc[regno], tem);
|
||||
return adjust_address_nv (tem, GET_MODE (ad), 0);
|
||||
}
|
||||
|
||||
/* Record all reloads needed for handling memory address AD
|
||||
|
|
|
@ -2052,13 +2052,7 @@ alter_reg (i, from_reg)
|
|||
/* If we have any adjustment to make, or if the stack slot is the
|
||||
wrong mode, make a new stack slot. */
|
||||
if (adjust != 0 || GET_MODE (x) != GET_MODE (regno_reg_rtx[i]))
|
||||
{
|
||||
rtx new = gen_rtx_MEM (GET_MODE (regno_reg_rtx[i]),
|
||||
plus_constant (XEXP (x, 0), adjust));
|
||||
|
||||
MEM_COPY_ATTRIBUTES (new, x);
|
||||
x = new;
|
||||
}
|
||||
x = adjust_address_nv (x, GET_MODE (regno_reg_rtx[i]), adjust);
|
||||
|
||||
/* Save the stack slot for later. */
|
||||
reg_equiv_memory_loc[i] = x;
|
||||
|
@ -2572,15 +2566,10 @@ eliminate_regs (x, mem_mode, insn)
|
|||
/* Our only special processing is to pass the mode of the MEM to our
|
||||
recursive call and copy the flags. While we are here, handle this
|
||||
case more efficiently. */
|
||||
new = eliminate_regs (XEXP (x, 0), GET_MODE (x), insn);
|
||||
if (new != XEXP (x, 0))
|
||||
{
|
||||
new = gen_rtx_MEM (GET_MODE (x), new);
|
||||
MEM_COPY_ATTRIBUTES (new, x);
|
||||
return new;
|
||||
}
|
||||
else
|
||||
return x;
|
||||
return
|
||||
replace_equiv_address_nv (x,
|
||||
eliminate_regs (XEXP (x, 0),
|
||||
GET_MODE (x), insn));
|
||||
|
||||
case USE:
|
||||
/* Handle insn_list USE that a call to a pure function may generate. */
|
||||
|
|
|
@ -265,22 +265,10 @@ simplify_replace_rtx (x, old, new)
|
|||
|
||||
default:
|
||||
if (GET_CODE (x) == MEM)
|
||||
{
|
||||
/* We can't use change_address here, since it verifies memory address
|
||||
for corectness. We don't want such check, since we may handle
|
||||
addresses previously incorect (such as ones in push instructions)
|
||||
and it is caller's work to verify whether resulting insn match. */
|
||||
rtx addr = simplify_replace_rtx (XEXP (x, 0), old, new);
|
||||
rtx mem;
|
||||
if (XEXP (x, 0) != addr)
|
||||
{
|
||||
mem = gen_rtx_MEM (GET_MODE (x), addr);
|
||||
MEM_COPY_ATTRIBUTES (mem, x);
|
||||
}
|
||||
else
|
||||
mem = x;
|
||||
return mem;
|
||||
}
|
||||
return
|
||||
replace_equiv_address_nv (x,
|
||||
simplify_replace_rtx (XEXP (x, 0),
|
||||
old, new));
|
||||
|
||||
return x;
|
||||
}
|
||||
|
@ -2415,13 +2403,7 @@ simplify_subreg (outermode, op, innermode, byte)
|
|||
|| (mov_optab->handlers[(int) innermode].insn_code
|
||||
== CODE_FOR_nothing))
|
||||
&& GET_MODE_SIZE (outermode) <= GET_MODE_SIZE (GET_MODE (op)))
|
||||
{
|
||||
rtx new;
|
||||
|
||||
new = gen_rtx_MEM (outermode, plus_constant (XEXP (op, 0), byte));
|
||||
MEM_COPY_ATTRIBUTES (new, op);
|
||||
return new;
|
||||
}
|
||||
return adjust_address_nv (op, outermode, byte);
|
||||
|
||||
/* Handle complex values represented as CONCAT
|
||||
of real and imaginary part. */
|
||||
|
|
|
@ -4112,11 +4112,7 @@ expand_anon_union_decl (decl, cleanup, decl_elts)
|
|||
if (mode == GET_MODE (x))
|
||||
SET_DECL_RTL (decl_elt, x);
|
||||
else
|
||||
{
|
||||
SET_DECL_RTL (decl_elt,
|
||||
gen_rtx_MEM (mode, copy_rtx (XEXP (x, 0))));
|
||||
MEM_COPY_ATTRIBUTES (DECL_RTL (decl_elt), x);
|
||||
}
|
||||
SET_DECL_RTL (decl_elt, adjust_address_nv (x, mode, 0));
|
||||
}
|
||||
else if (GET_CODE (x) == REG)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue