Andrew Pinski [Wed, 16 Jul 2003 18:45:56 +0000 (18:45 +0000)]
re PR c/10962 (lookup_field is a linear search on a linked list (can be slow if large struct))
2003-07-16 Andrew Pinski <pinskia@physics.uc.edu>
ChangeLog:
PR c/10962
* ggc.h: Add header guards.
* c-decl.c (finish_struct): Sort fields if
number greater than 15 and there are no
anonymous structs/unions.
* c-common.h: Include ggc.h.
(sorted_fields_type): New struct.
(field_decl_cmp): New prototype.
(resort_sorted_fields): New prototype.
(DECL_DECLARES_TYPE_NON_TEMPLATE_P): New macro.
* c-tree.h: (lang_type): Use pointer to sorted_fields_type
as s, removing other fields.
* c-typeck.c (lookup_field): Use s in lang_type.
These were mostly moved from cp/class.c:
* c-common.c (field_decl_cmp): New static function.
(field_decl_cmp): New function.
(resort_sorted_fields): New function.
cp/ChangeLog:
* class.c (field_decl_cmp): Remove.
(resort_field_decl_cmp): Remove.
(resort_sorted_fields): Remove.
(add_fields_to_vec): Rename to ...
(add_fields_to_record_type): this.
(finish_struct_1): Change to be using
sorted_fields_type's fields.
* cp-tree.h (lang_decl): In lang_decl_u3
change sorted_fields to be a pointer to
sorted_fields_type.
(resort_sorted_fields): Remove prototype.
* search.c (lookup_field_1): Change to be using
sorted_fields_type's fields.
* config/mmix/mmix-protos.h: Convert prototypes to ISO C90.
* config/mmix/mmix.c: Convert functions to ISO C90.
(mmix_eh_return_handler_rtx, mmix_output_shifted_value): Tweak
formatting.
(mmix_get_hard_reg_initial_val): Tweak section head comment.
re PR c++/5421 (friends+templates: ICE: expected identifier_node, have template_id_expr in grokfndecl, at cp/decl.c:8835)
PR c++/5421
* decl.c (grokdeclarator): Handle TEMPLATE_ID_EXPR if friend
is a member of other class.
* friend.c (do_friend): Don't build TEMPLATE_DECL if friend
is a specialization of function template.
Jakub Jelinek [Wed, 16 Jul 2003 11:52:55 +0000 (13:52 +0200)]
unwind-dw2.c (MD_FROB_UPDATE_CONTEXT): Define.
* unwind-dw2.c (MD_FROB_UPDATE_CONTEXT): Define.
(uw_update_context_1): Use it.
* config/rs6000/rs6000.c (insn_after_throw): Remove.
(rs6000_aix_emit_builtin_unwind_init): Save $r2 to its location
in parent frame if _Unwind_* called directly instead of through
.plt.
(rs6000_emit_eh_toc_restore): Remove.
(rs6000_emit_prologue): Update stack pointer before doing any saving
if current_function_calls_eh_return. Generate unwind info for $r2.
(rs6000_emit_epilogue): Restore stack pointer after doing all
restoring if current_function_calls_eh_return. Restore $r2.
* config/rs6000/rs6000-protos.h (rs6000_emit_eh_toc_restore): Remove.
* config/rs6000/rs6000.md (eh_return): Remove call to
rs6000_emit_eh_toc_restore.
* config/rs6000/linux64.h (MD_FROB_UPDATE_CONTEXT): Define.
* config/rs6000/aix.h (MD_FROB_UPDATE_CONTEXT): Define.
* gcc.dg/cleanup-8.c: New test.
* gcc.dg/cleanup-9.c: New test.
Danny Smith [Wed, 16 Jul 2003 01:04:10 +0000 (01:04 +0000)]
winnt.c (associated_type): Artificial methods are not affected by the import/export status of their class...
* config/i386/winnt.c (associated_type): Artificial methods are not
affected by the import/export status of their class unless they are
COMDAT.
(i386_pe_dllimport_p): Do not mark artificial methods as dllimport.
Gabriel Dos Reis [Tue, 15 Jul 2003 23:31:52 +0000 (23:31 +0000)]
re PR c++/11531 (ICE on invalid code (returning to void))
PR c++/11531
* diagnostic.c (diagnostic_report_diagnostic): Don't ICE if we're
not recursing on hard error.
(diagnostic_for_decl): Likewise.
* diagnostic.def: Rearrange.
cp/
* typeck.c (check_return_expr): Fix thinko in diagnostic.
* dwarf2out.c (expand_builtin_init_dwarf_reg_sizes):
If DWARF_FRAME_RETURN_COLUMN doesn't have a register mode, use Pmode.
2003-07-15 J"orn Rennecke <joern.rennecke@superh.com>
Richard Henderson <rth@redhat.com>
* unwind-dw2.c (_Unwind_GetGR): Use dwarf_reg_size_table
to decide if to access a _Unwind_Ptr or a _Unwind_Word.
(_Unwind_SetGR): Likewise.
(_Unwind_GetPtr, _Unwind_SetSpColumn): New functions.
(Unwind_SpTmp): New typedef.
(uw_update_context_1): Use _Unwind_SetSpColumn and _Unwind_GetPtr.
(uw_update_context): Use _Unwind_GetPtr.
(init_dwarf_reg_size_table): Move above uw_init_context_1.
(uw_init_context_1): Initialize dwarf_reg_size_table if necessary.
Use _Unwind_SetSpColumn.
(uw_install_context_1): Don't initialize dwarf_reg_size_table.
Use _Unwind_GetPtr.
Co-Authored-By: Richard Henderson <rth@redhat.com>
From-SVN: r69424
re PR target/10795 (ICE in extract_insn, at recog.c:2188)
PR target/10795
* config/i386/i386.c (ix86_expand_carry_flag_compare): Don't
swap comparison operands if doing so would generate an
unrecognizable insn.
Eric Botcazou [Tue, 15 Jul 2003 13:02:21 +0000 (15:02 +0200)]
re PR rtl-optimization/11320 (Scheduler bug)
PR optimization/11320
* sched-int.h (struct deps) [reg_conditional_sets]: New field.
(struct sched_info) [compute_jump_reg_dependencies]: New prototype.
* sched-deps.c (sched_analyze_insn) [JUMP_INSN]: Update call to
current_sched_info->compute_jump_reg_dependencies. Record which
registers are used and which registers are set by the jump.
Clear deps->reg_conditional_sets after a barrier.
Set deps->reg_conditional_sets if the insn is a COND_EXEC.
Clear deps->reg_conditional_sets if the insn is not a COND_EXEC.
(init_deps): Initialize reg_conditional_sets.
(free_deps): Clear reg_conditional_sets.
* sched-ebb.c (compute_jump_reg_dependencies): New prototype.
Mark registers live on entry of the fallthrough block and conditionally
set as set by the jump. Mark registers live on entry of non-fallthrough
blocks as used by the jump.
* sched-rgn.c (compute_jump_reg_dependencies): New prototype.
Mark new parameters as unused.
* config/mips/mips.h (PROCESSOR_R9000): New processor_type.
(TARGET_MIPS9000, TUNE_MIPS9000): New macros.
(GENERATE_MULT3_SI): True for TARGET_MIPS9000.
* config/mips/mips.c (mips_cpu_info_table): Add rm9000 entry.
(mips_rtx_costs): Adjust integer multiplication costs for the rm9000.
(mips_issue_rate): Handle PROCESSOR_R9000.
(mips_use_dfa_pipeline_interface): Likewise.
* config/mips/9000.md: New file.
* config/mips/mips.md: Include it.
(define_attr cpu): Add r9000.
(mulsi3_mult3): Use "mul" for rm9000 code.
Stan Cox [Tue, 15 Jul 2003 08:34:54 +0000 (08:34 +0000)]
mips.h (PROCESSOR_R7000): New processor_type.
* config/mips/mips.h (PROCESSOR_R7000): New processor_type.
(TARGET_MIPS7000, TUNE_MIPS7000): New macros.
(GENERATE_MULT3_SI): True for TARGET_MIPS7000.
* config/mips/mips.c (mips_cpu_info_table): Add rm7000 entry.
(mips_rtx_costs): Adjust integer multiplication costs for the rm7000.
(mips_issue_rate): Handle PROCESSOR_R7000.
(mips_use_dfa_pipeline_interface): Likewise.
* config/mips/7000.md: New file.
* config/mips/mips.md: Include it.
(define_attr cpu): Add r7000.
(mulsi3_mult3): Use "mul" for rm7000 code.
inclhack.def (avoid_bool_define, [...]): Bypass with __cplusplus, not "we must use the C++ compiler's type"
* fixinc/inclhack.def (avoid_bool_define, avoid_bool_type): Bypass
with __cplusplus, not "we must use the C++ compiler's type"
* fixinc/inclhack.def (void_null): Note that Interix needs this.
* fixinc/fixincl.x: Regenerate.
unwind-dw2-fde-darwin.c (live_image_destructor): Get seen_objects and unseen_objects from the global data before calling...
* unwind-dw2-fde-darwin.c (live_image_destructor): Get seen_objects
and unseen_objects from the global data before calling
__deregister_frame_info_bases.
(examine_objects): Insert objects into the seen_objects list,
not unseen_objects.
(_Unwind_Find_FDE): Always unlock the global object lists, even if
we couldn't allocate a data structure to put in it.
objc-act.h (CLASS_SUPER_NAME): Add a little typechecking.
* objc/objc-act.h (CLASS_SUPER_NAME): Add a little typechecking.
(TYPE_PROTOCOL_LIST): Share use of type.context with C frontend.
(SET_TYPE_PROTOCOL_LIST): New.
* objc/objc-act.c (get_static_reference): Use SET_TYPE_PROTOCOL_LIST.
(get_object_reference): Likewise.
mips.c (mips_expand_prologue): Use a single insn to allocate 32768 bytes of stack.
* config/mips/mips.c (mips_expand_prologue): Use a single insn to
allocate 32768 bytes of stack. Use addition rather than subtraction
when a single insn is enough.
* config/mips/mips.md: Remove insns and splitters for subtracting
constants.
(subsi3): Only accept register operands.
(subsi3_internal): Likewise. Use for TARGET_MIPS16 as well.
(subdi3_internal_3, subsi3_internal_2): Likewise.
(casesi): Use expand_binop to subtract the lower bound.
Paolo Carlini [Mon, 14 Jul 2003 18:23:12 +0000 (20:23 +0200)]
Nathan C.
2003-07-14 Paolo Carlini <pcarlini@unitus.it>
Nathan C. Myers <ncm-nospam@cantrip.org>
PR libstdc++/11378
* include/std/std_fstream.h (xsputn): Declare only.
* include/bits/fstream.tcc (xsputn): Define, optimize for the
always_noconv() case: when __n is sufficiently large flush
the buffer and issue a direct write, if possible combining the
two with writev in __basic_file<>::xsputn_2.
* config/io/basic_file_stdio.h (__basic_file<>::xsputn_2):
New, declare.
* config/io/basic_file_stdio.cc (__basic_file<>::xsputn_2):
Define.
* acinclude.m4 (GLIBCXX_CHECK_WRITE): New macro, checking for
the availability of writev in <sys/uio.h>.
* configure.in: Call here.
* acconfig.h: Add undef for the corresponding symbol.
* aclocal.m4: Regenerate.
* configure: Regenerate.
* config.h.in: Regenerate.
* testsuite/27_io/basic_filebuf/setbuf/char/3.cc: Tweak.
* include/std/std_fstream.h (sync): Constify a variable.
Co-Authored-By: Nathan C. Myers <ncm-nospam@cantrip.org>
From-SVN: r69341
ggc-page.c (extra_order_size_table): Insns have 9 slots.
* ggc-page.c (extra_order_size_table): Insns have 9 slots. Regs
don't have 2.
* ggc-page.c (struct globals): Add new fields to keep track of the
total allocated memory and overhead.
(ggc_print_statistics): Print them.
(ggc_alloc): Keep track of the total allocated memory and the
overhead.
Alan Modra [Mon, 14 Jul 2003 05:17:18 +0000 (05:17 +0000)]
tm.texi (BLOCK_REG_PADDING): Describe.
* doc/tm.texi (BLOCK_REG_PADDING): Describe.
* expr.h (struct locate_and_pad_arg_data): Add where_pad.
(emit_group_load, emit_group_store): Adjust declarations.
Remove most occurrences of #ifdef TREE_CODE.
* expr.c (emit_group_load): Add "type" param, and use
BLOCK_REG_PADDING to determine need for a shift. Optimize non-
aligned accesses if !SLOW_UNALIGNED_ACCESS.
(emit_group_store): Likewise.
(emit_push_insn, expand_assignment, store_expr, expand_expr): Adjust
emit_group_load and emit_group_store calls.
* calls.c (store_unaligned_arguments_into_pseudos): Tidy. Use
BLOCK_REG_PADDING to determine whether we need endian_correction.
(load_register_parameters): Localize vars. Handle shifting of
small values to the correct end of regs. Adjust emit_group_load
call.
(expand_call, emit_library_call_value_1): Adjust emit_group_load
and emit_group_store calls.
* function.c (assign_parms): Set mem alignment for stack slots.
Adjust emit_group_store call. Store values at the "wrong" end
of regs to the stack. Use BLOCK_REG_PADDING.
(locate_and_pad_parm): Save where_pad.
(expand_function_end): Adjust emit_group_load call.
* stmt.c (expand_value_return): Adjust emit_group_load call.
* Makefile.in (calls.o): Depend on $(OPTABS_H).
* config/rs6000/linux64.h (TARGET_LITTLE_ENDIAN): Redefine as 0.
(AGGREGATE_PADDING_FIXED, AGGREGATES_PAD_UPWARD_ALWAYS): Define.
(MUST_PASS_IN_STACK): Define.
(BLOCK_REG_PADDING): Define.
* config/rs6000/rs6000.h (struct rs6000_args): Remove orig_nargs.
(PAD_VARARGS_DOWN): Define in terms of FUNCTION_ARG_PADDING.
* config/rs6000/rs6000.c (init_cumulative_args): Don't set orig_nargs.
(function_arg_padding): !AGGREGATE_PADDING_FIXED compatibility code.
Act on AGGREGATES_PAD_UPWARD_ALWAYS.
gthr-win32.c (__GTHREAD_HIDE_WIN32API): Define to 1.
2003-07-13 Aaron W. LaFramboise <awlaframboise@aol.com>
* config/i386/gthr-win32.c (__GTHREAD_HIDE_WIN32API): Define to 1.
(This was previously, erroneously listed as checked in on 2003-06-29)
Makefile.in (LIBCPP_DEPS): Remove coretypes.h and $(TM_H).
* Makefile.in (LIBCPP_DEPS): Remove coretypes.h and $(TM_H).
(hashtable.o, line-map.o, mkdeps.o): Likewise, from dependency
list. Move these all together down by cpplib.
* cpplib.h: Don't refer to MAX_WCHAR_TYPE_SIZE when determining
definition of CPPCHAR_SIGNED_T.