aboutsummaryrefslogtreecommitdiff
path: root/gcc/stmt.c
AgeCommit message (Collapse)AuthorFilesLines
2000-04-06final.c (final): Use xcalloc to allocate line_note_exists.Mark Mitchell1-1/+2
* final.c (final): Use xcalloc to allocate line_note_exists. * function.c (free_after_compilation): Free the temp_slots. (assign_stack_temp_for_type): Use xmalloc to allocate temp_slots. (combine_temp_slot): Free temp_slots when they get combined. (purge_addressof): Fix typo in comment. * stmt.c (mark_goto_fixup): Mark the fixup itself. (expand_fixup): Allocate the fixup with ggc_alloc_obj. * ggc.h: Include varray.h. (ggc_pending_trees): Declare. (ggc_mark_tree_children): Remove declaration. (ggc_mark_tree): Just push unmarked trees on ggc_pending_trees. * ggc-common.c (ggc_pending_trees): New variable. (ggc_mark_roots): Call ggc_mark_trees. (ggc_mark_tree_children): Rename to ggc_mark_trees. Process all the ggc_pending_trees. * Makefile.in (GGC_H): New variable. Use it throughout in place of ggc.h. * Makefile.in (GGC_H): New variable. Use it throughout in place of ggc.h. * call.c: Don't include obstack.h. Include ggc.h. (obstack_chunk_alloc): Don't define. (obstack_chunk_free): Likewise. (add_candidate): Allocate the z_candidate with ggc_alloc_obj. * decl.c (push_switch): Use xmalloc to allocate the cp_switch. (pop_switch): Free it. * decl2.c (grokclassfn): Set TREE_READONLY for PARM_DECLs. * dump.c (dequeue_and_dump): Don't try to print the bit_position if we don't have a DECL_FIELD_OFFSET. * Makefile.in (GGC_H): Add varray.h. From-SVN: r32956
2000-03-30calls.c (expand_call): Pass bit alignment to mark_reg_pointer.Richard Kenner1-2/+2
* calls.c (expand_call): Pass bit alignment to mark_reg_pointer. * explow.c (memory_address, allocate_dynamic_stack_space): Likewise. * function.c (assign_parms): Likewise. * integrate.c (expand_inline_function): Likewise. * stmt.c (expand_decl): Likewise. (copy_rtx_and_substitute): Likewise. * expr.c (expand_expr, expand_expr_unaligned): Likewise. (clear_by_pieces): Fix error in last change. * emit-rtl.c (init_emit): Set known registers alignment in bits. * function.h (regno_pointer_align): Now unsigned. * config/arm/arm.c (alignable_memory_operand): REGNO_POINTER_ALIGN is in bits. * config/i386/i386.c (aligned_operand): Likewise. * config/sparc/sparc.c (mem_min_alignment): Likewise. * config/alpha/alpha.c (aligned_memory_operand): Likewise. (unaligned_memory_operand): Likewise. (alpha_expand_block_move, alpha_expand_block_clear): Likewise. Also make alignments and sizes unsigned and some whitespace cleanup. (alpha_va_start): Do nothing if VALIST's type is error_mark_node. From-SVN: r32829
2000-03-30builtins.c (get_pointer_alignment): Use host_integerp & tree_low_cst.Richard Kenner1-6/+4
* builtins.c (get_pointer_alignment): Use host_integerp & tree_low_cst. (expand_builtin_apply): Pass alignment to emit_block_move in bits. (expand_builtin_memcpy, expand_builtin_va_copy): Likewise. (expand_builtin_memset): Likewise, but to clear_storage. * calls.c (save_fixed_argument_area): Likewise, to move_by_pieces. (restore_fixed_argument_area): Likewise. (store_unaligned_arguments_into_pseudos): Likewise, to store_bit_field. (load_register_parameters): Likewise, to emit_group_load. (expand_call): Likewise, to emit_group_store and emit_block_move. (emit_library_call_value_1): Likewise, to emit_block_move. (store_one_arg): Likewise, and to emit_push_insn. * expmed.c (extract_bit_field): Alignment is in bits, not bytes. (extract_fixed_bit_field, extract_split_bit_field): Likewise. * expr.c (move_by_pieces, move_by_pieces_ninsns): Likewise. (emit_block_move, emit_group_load, emit_group_store): Likewise. (clear_by_pieces, clear_storage, emit_push_insn): Likewise. (expand_assigment, store_expr, store_constructor_field): Likewise. (expand_expr_unaligned, do_jump, do_compare_and_jump): Likewise. (store_constructor, store_field, get_inner_reference): Likewise. Use host_integerp and tree_low_cst; sizes and positions HOST_WIDE_INT. (expand_expr, case COMPONENT_REF): Likewise. (copy_blkmode_from_regs): Use UNSIGNED_HOST_WIDE_INT for sizes and positions; reindent code. * expr.h (emit_cmp_insn, emit_cmp_and_jump_insns): Alignment unsigned. * function.c (purge_addressof_1): Pass bit align to store_bit_field. (assign_parms): Likewise to emit_group_store. * optbas.c (prepare_cmp_insn): Alignment is in bits. (emit_cmp_and_jump_insns, emit_cmp_insn): Likewise, and also unsigned. * stmt.c (expand_value_return): Pass align in bits to emit_group_load. (expand_return): Likewise to {extract,store}_bit_field. * stor-layout.c (get_mode_alignment): Minor cleanup. * config/rs6000/rs6000.h (SLOW_UNALIGNED_ACCESS): Align is in bits. * config/sh/sh.h (MOVE_BY_PIECES_P): Likewise. * ch/expr.c (chill_expand_expr): Pass bit alignment to emit_block_move. From-SVN: r32827
2000-03-29* stmt.c (stmt_loop_nest_empty): Fix thinko in last change.Jeffrey A Law1-1/+1
From-SVN: r32820
2000-03-29* stmt.c (stmt_loop_nest_empty): Allow cfun->stmt to be NULL.Jeffrey A Law1-1/+4
From-SVN: r32806
2000-03-29flags.h (flag_optimize_sibling_calls): Declare.Jan Hubicka1-1/+1
* flags.h (flag_optimize_sibling_calls): Declare. * calls.c (expand_call): Fail sibcall when !flag_optimize_sibling_calls * invoke.texi (flag_optimize_sibling_calls): Document. * toplev.c (flag_optimize_sibling_calls): New global variable. (f_options): Add flag_optimize_sibling_calls. (rest_of_compilation): Conditionize optimize_sibling_and_tail_recursive_calls by flag_optimize_sibling_calls. (main): Set flag_optimize_sibling_calls for -O2. * stmt.c (expand_return): Conditionize tail recursion by flag_optimize_sibling_calls. From-SVN: r32802
2000-03-26calls.c (expand_call): Pass parms not original exp to optimize_tail_recursion.Richard Henderson1-25/+18
* calls.c (expand_call): Pass parms not original exp to optimize_tail_recursion. Mind return value instead of looking for a barrier. * stmt.c (optimize_tail_recursion): Take parameter list, not entire call_expr. Move checks for call_expr and current_function_decl ... (expand_return): ... here. From-SVN: r32758
2000-03-25* Rework fields used to describe positions of bitfields andRichard Kenner1-62/+54
modify sizes to be unsigned and use HOST_WIDE_INT. * alias.c (reg_known_value_size): Now unsigned. * c-typeck.c (build_unary_op, case ADDR_EXPR): Use byte_position. (really_start_incremental_init): Use bitsize_zero_node. (push_init_level, pop_init_level, output_init_element): Likewise. Use bitsize_unit_node and bitsize_one_node. (output_pending_init_elements, process_init_element): Likewise. * combine.c (combine_max_regno, reg_sign_bit_copies): Now unsigned. (make_extraction): Position and length HOST_WIDE_INT and unsigned HOST_WIDE_INT, respectively. (get_pos_from_mask): Passed in value is unsigned HOST_WIDE_INT. (num_sign_bit_copies): Returns unsigned. BITWIDTH now unsigned; rework arithmetic. Remove recursive call from arg to MAX. (combine_instructions, init_reg_last_arrays): NREGS now unsigned. (setup_incoming_promotions, can_combine_p, try_combine, simplify_set): REGNO now unsigned. (set_nonzero_bit_and_sign_copies): NUM now unsigned. (find_split_point, expand_compound_operation, make_extraction): LEN now unsigned HOST_WIDE_INT, POS now HOST_WIDE_INT. (make_field_assignment): Likewise. (combine_simplify_rtx): Add cast. (expand_compound_operation): MODEWIDTH now unsigned; rework arithmetic. (force_to_mode): WIDTH now unsigned; add cast. (if_then_else_cond): SIZE now unsigned. (nonzero_bits): MODE_WIDTH, RESULT_WIDTH, and WIDTH now unsigned. (extended_count): Now returns unsigned. (simplify_shift_const): COUNT unsigned; arg is now INPUT_COUNT. Add SIGNED_COUNT variable; MODE_WORDS and FIRST_COUNT now unsigned. (simplify_comparison): MODE_WIDTH now unsigned. (update_table_tick): REGNO and ENDREGNO now unsigned; new var R. (mark_used_regs_combine): Likewise; rework arithmetic. (record_value_for_reg): REGNO, ENDREGNO, and I now unsigned. (record_dead_and_set_regs, reg_dead_at_p, distribute_notes): Likewise. (record_promoted_value): REGNO now unsigned. (get_last_value_validate): REGNO, ENDREGNO, and J now unsigned. (get_last_value): REGNO now unsigned. (use_crosses_set_p): REGNO and ENDREGNO now unsigned. (reg_dead_regno, reg_dead_endregno): Now unsigned. (remove_death): Arg REGNO now unsigned. (move_deaths): REGNO, DEADREGNO, DEADEND, OUREND, and I now unsigned. (reg_bitfield_target_p): REGNO, REGNO, ENDREGNO, and ENDTREGNO now unsigned. * convert.c (convert_to_integer): INPREC and OUTPREC now unsigned. * cse.c (struct qty_table_elem): FIRST_REG and LAST_REG now unsigned. (struct cse_reg_info): REGNO now unsigned. (cached_regno): Now unsigned. (REGNO_QTY_VALID_P): Add cast. (make_new_qty, make_regs_eqv, delete_reg_eqiv): Regno args unsigned. (remove_invalid_regs): Likewise. (remove_invalid_subreg_refs): Likewise; arg WORD also unsigned as are variables END and I. (get_cse_reg_info, insert): Likewise. (mention_regs, invalidate_for_call): REGNO, ENDREGNO, and I unsigned. (canon_hash): Likewise. (insert_regs, lookup_for_remove): REGNO now unsigned. (invalidate): REGNO, ENDREGNO, TREGNO, and TENDREGNO now unsigned. New variable RN. * dbxout.c (dbxout_parms, dbxout_reg_parms): Don't check for REGNO < 0. * dwarf2out.c (dwarf2ou_frame_debug_expr): Remove cast. * emit-rtl.c (subreg_realpart_p): Add cast. (operand_subword): Arg I is now unsigned as is var PARTWORDS. (operand_subword_force): Arg I is now unsigned. * except.c (eh_regs): Variable I is now unsigned. * explow.c (hard_function_value): BYTES is unsigned HOST_WIDE_INT. * expmed.c (store_fixed_bit_field): Position is HOST_WIDE_INT; length is unsigned HOST_WIDE_INT; likewise for internal variables. (store_split_bit_field, extract_fixed_bit_field): Likewise. (extract_split_bit_field, store_bit_field, extract_bit_field): Likewise. * expr.c (store_constructor_fields, store_constructor, store_field): Positions are HOST_WIDE_INT and lengths are unsigned HOST_WIDE_INT. (expand_assignment, expand_expr, expand_expr_unaligned): Likewise. (do_jump): Likewise. (move_by_pieces, move_by_pieces_ninsns, clear_by_pieces): MAX_SIZE is now unsigned. (emit_group_load): BYTEPOS is HOST_WIDE_INT; BYTELEN is unsigned. (emit_group_store): Likewise. (emit_move_insn): I now unsigned. (store_constructor): Use host_integerp, tree_low_cst, and bitsize_unit_node. (get_inner_reference): Return bitpos and bitsize as HOST_WIDE_INT. Rework all calculations to use trees and new fields. * expr.h (promoted_input_arg): Regno now unsigned. (store_bit_field, extract_bit_field): Adjust types of pos and size. (mark_seen_cases): Arg is HOST_WIDE_INT. * flow.c (verify_wide_reg_1): REGNO now unsigned. * fold-const.c (decode_field_reference): Size and pos HOST_WIDE_INT; precisions and alignments are unsigned. (optimize_bit_field_compare, fold_truthop): Likewise. (int_const_binop): Adjust threshold for size_int_type_wide call. (fold_convert): Likewise. (size_int_type_wide): Make table larger and fix thinko that only had half of table used. (all_ones_mask_p, fold): Precisions are unsigned. * function.c (put_reg_info_stack): REGNO is unsigned. (instantiate_decl): Size is HOST_WIDE_INT. (instantiate_virtual_regs): I is unsigned. (assign_parms): REGNO, REGNOI, and REGNOR are unsigned. (promoted_input_arg): REGNO is unsigned. * function.h (struct function): x_max_parm_reg is now unsigned. * gcse.c (max_gcse_regno): Now unsigned. (struct null_pointer_info): min_reg and max_reg now unsigned. (lookup_set, next_set): REGNO arg now unsigned. (compute_hash_table): REGNO and I now unsigned. (handle_avail_expr): regnum_for_replacing now unsigned. (cprop_insn): REGNO now unsigned. (delete_null_pointer_checks_1): BLOCK_REG now pointer to unsigned. * ggc-common.c (ggc_mark_tree_children, case FIELD_DECL): New case. * global.c (set_preference): SRC_REGNO, DEST_REGNO, and I now unsigned. * hard-reg-set.h (reg_class_size): Now unsigned. * integrate.c (mark_stores): LAST_REG and I now unsigned; new UREGNO. * jump.c (mark_modified_reg): I now unsigned; add cast. (rtx_equal_for_thread_p): Add cast. * loop.c (max_reg_before_loop): Now unsigned. (struct_movable): REGNO now unsigned. (try_copy_prop): REGNO arg unsigned. (regs_match_p): XN and YN now unsigned. (consec_sets_invariant_p, maybe_eliminate_biv): REGNO now unsigned. (strength_reduce): Likewise; NREGS also unsigned. (first_increment_giv, last_increment_giv unsigned): Now unsigned. * loop.h (struct iv_class): REGNO now unsigned. (max_reg_before_loop, first_increment_giv, last_increment_giv): Now unsigned. * machmode.h (mode_size, mode_unit_size): Now unsigned. (mode_for_size, smallest_mode_for_size): Pass size as unsigned. * optabs.c (expand_binop): I and NWORDS now unsigned. (expand_unop): I now unsigned. * print-tree.c (print_node): Don't print DECL_FIELD_BITPOS, but do print DECL_FIELD_OFFSET and DECL_FIELD_BIT_OFFSET. * real.c (significand_size): Now returns unsigned. * real.h (significand_size): Likewise. * regclass.c (reg_class_size): Now unsigned. (choose_hard_reg_mode): Both operands now unsigned. (record_reg_classes): REGNO and NR now unsigned. (reg_scan): NREGS now unsigned. (reg_scan_update): old_max_regno now unsigned. (reg_scan_mark_refs): Arg MIN_REGNO and var REGNO now unsigned. * reload.c (find_valid_class): BEST_SIZE now unsigned. (find_dummy_reload): REGNO, NWORDS, and I now unsigned. (hard_reg_set_here_p): Args BEG_REGNO and END_REGNO now unsigned. Likewise for variable R. (refers_to_regno_for_reload_p): Args REGNO and END_REGNO now unsigned, as are variables INNER_REGNO and INNER_ENDREGNO; add new variable R. (find_equiv_reg): Add casts. (regno_clobbered_p): Arg REGNO now unsigned. * reload.h (struct reload): NREGS now unsigned. (refers_to_regno_for_reload_p): Regno args are unsigned. (regno_clobbered_p): Likewise. * reload1.c (reg_max_ref_width, spill_stack_slot_width): Now unsigned. (compute_use_by_pseudos): REGNO now unsigned. (find_reg): I and J now unsigned, new variable K, and change loop variables accordingly; THIS_NREGS now unsigned. (alter_reg): INHERENT_SIZE and TOTAL_SIZE now unsigned. (spill_hard_reg): REGNO arg now unsigned; add casts. (forget_old_reloads_1): REGNO, NR, and I now unsigned. (mark_reload_reg_in_use): Arg REGNO and vars NREGS and I now unsigned. (clear_reload_reg_in_use): Arg REGNO and vars NREGS, START_REGNO, END_REGNO, CONFLICT_START, and CONFLICT_END now unsigned. (reload_reg_free_p, reload_reg_reaches_end_p): Arg REGNO now unsigned. (choose_reload_regs): MAX_GROUP_SIZE now unsigned. (emit_reload_insns): REGNO now unsigned. (reload_cse_move2add): Add cast. (move2add_note_store): REGNO and I now unsigned; new variable ENDREGNO and rework loop. * resource.c (mark_referenced_resources, mark_set_resources): New variable R; REGNO and LAST_REGNO now unsigned. (mark_target_live_regs): J and REGNO now unsigned. * rtl.c (mode_size, mode_unit_size): Now unsigned. * rtl.h (union rtunion_def): New field rtuint. (XCUINT): New macro. (ADDRESSOF_REGNO, REGNO, SUBREG_WORD): New XCUINT. (operand_subword, operand_subword_force): Word number is unsigned. (choose_hard_reg_mode): Operands are unsigned. (refers_to-regno_p, dead_or_set_regno_p): Regno arg is unsigned. (find_regno_note, find_regno_fusage, replace_regs): Likewise. (regno_use_in, combine_instructions, remove_death): Likewise. (reg_scan, reg_scan_update): Likewise. (extended_count): Return is unsigned. * rtlanal.c (refers_to_regno_p): Args REGNO and ENDREGNO and vars I, INNER_REGNO, and INNER_ENDREGNO now unsigned; new variable X_REGNO. (reg_overlap_mentioned_p): REGNO and ENDREGNO now unsigned. (reg_set_last_first_regno, reg_set_last_last_regno): Now unsigned. (reg_reg_last_1): FIRS and LAST now unsigned. (dead_or_set_p): REGNO, LAST_REGNO, and I now unsigned. (dead_or_set_regno_p): Arg TEST_REGNO and vars REGNO and ENDREGNO now unsigned. (find_regno_note, regno_use_in): Arg REGNO now unsigned. (find_regno_fusage): Likewise; also var REGNOTE now unsigned. (find_reg_fusage): Variables REGNO, END_REGNO, and I now unsigned. (replace_regs): Arg NREGS now unsigned. * sdbout.c (sdbout_parms, sdbout_reg_parms): Don't check REGNO < 0. * simplify-rtx.c (simplify_unary_operation): WIDTH now unsigned. (simplify_binary_operation): Likewise. (cselib_invalidate_regno): Arg REGNO and variables ENDREGNO, I, and THIS_LAST now unsigned. (cselib_record_set): Add cast. * ssa.c (ssa_max_reg_num): Now unsigned. (rename_block): REGNO now unsigned. * stmt.c (expand_return): Bit positions unsigned HOST_WIDE_INT; sizes now unsigned. (all_cases_count): Just return -1 not -2. COUNT, MINVAL, and LASTVAL now HOST_WIDE_INT. Rework tests to use trees whenever possible. Use host_integerp and tree_low_cst. (mark_seen_cases): COUNT arg now HOST_WIDE_INT; Likewise variable NEXT_NODE_OFFSET; XLO now unsigned. (check_for_full_enumeration_handing): BYTES_NEEDED, I to HOST_WIDE_INT. * stor-layout.c (mode_for_size): SIZE arg now unsigned. (smallest_mode_for_size): Likewise. (layout_decl): Simplify handing of a specified DECL_SIZE_UNIT. KNOWN_ALIGN is now an alignment, so simplify code. Don't turn off DECL_BIT_FIELD if field is BLKmode, but not type. (start_record_layout): Renamed from new_record_layout_info. Update to new fields. (debug_rli, normalize_rli, rli_size_unit_so_far, rli_size_so_far): New functions. (place_union_field): Renamed from layout_union_field. Update to use new fields in rli. (place_field): Renamed from layout_field. Major rewrite to use new fields in rli; pass alignment to layout_decl. (finalize_record_size): Rework to use new fields in rli and handle union. (compute_record_mode): Rework to simplify and to use new DECL fields. (finalize_type_size): Make rounding more consistent. (finish_union_layout): Deleted. (layout_type, case VOID_TYPE): Don't set TYPE_SIZE_UNIT either. (layout_type, case RECORD_TYPE): Call new function names. (initialize_sizetypes): Set TYPE_IS_SIZETYPE. (set_sizetype): Set TYPE_IS_SIZETYPE earlier. (get_best_mode): UNIT is now unsigned; remove casts. * tree.c (bit_position): Compute from new fields. (byte_position, int_byte_position): New functions. (print_type_hash_statistics): Cast to remove warning. (build_range_type): Use host_integerp and tree_low_cst to try to hash. (build_index_type): Likewise; make subtype of sizetype. (build_index_2_type): Pass sizetype to build_range_type. (build_common_tree_nodes): Use size_int and bitsize_int to initialize nodes; add bitsize_{zero,one,unit}_node. * tree.h (DECL_FIELD_CONTEXT): Use FIELD_DECL_CHECK. (DECL_BIT_FIELD_TYPE, DECL_QUALIFIER, DECL_FCONTEXT): Likewise. (DECL_PACKED, DECL_BIT_FIELD): Likewise. (DECL_FIELD_BITPOS): Deleted. (DECL_FIELD_OFFSET, DECL_FIELD_BIT_OFFSET): New fields. (DECL_RESULT, DECL_SAVED_INSNS): Use FUNCTION_DECL_CHECK. (DECL_FRAME_SIZE, DECL_FUNCTION_CODE, DECL_NO_STATIC_CHAIN): Likewise. (DECL_INLINE, DECL_BUILT_IN_NONANSI, DECL_IS_MALLOC): Likewise. (DECL_BUILT_IN_CLASS, DECL_STATIC_CONSTRUCTOR): Likewise. (DECL_STATIC_DESTRUCTOR, DECL_NO_CHECK_MEMORY_USAGE): Likewise. (DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT, DECL_NO_LIMIT_STACK) Likewise. (DECL_ORIGINAL_TYPE, TYPE_DECL_SUPPRESS_DEBUG): Use TYPE_DECL_CHECK. (DECL_ARG_TYPE_AS_WRITEN, DECL_ARG_TYPE): Use PARM_DECL_CHECK. (DECL_INCOMING_RTL, DECL_TRANSPARENT_UNION): Likewise. (DECL_ALIGN): Adjust to new field in union. (DECL_OFFSET_ALIGN): New field. (DECL_ERROR_ISSUED, DECL_TOO_LATE): Use LABEL_DECL_CHECK. (DECL_IN_TEXT_SECTION): Use VAR_DECL_CHECK. (union tree_decl): Add struct for both aligns. (enum tree_index): Add TI_BITSIZE_{ZERO,ONE,UNIT}. (bitsize_zero_node, bitsize_one_node, bitsize_unit_node): Added. (struct record_layout_info): Rework fields to have offset alignment and byte and bit position. (start_record_layout, place_field): Renamed from old names. (rli_size_so_far, rli_size_unit_so_far, normalize_rli): New decls. (byte_position, int_byte_position): Likewise. (get_inner_reference): Change types of position and length. * unroll.c (unroll_loop): New variable R; use for some loops. MAX_LOCAL_REGNUM and MAXREGNUM now unsigned. (calculate_giv_inc): Arg REGNO now unsigned. (copy_loop_body): REGNO and SRC_REGNO now unsigned. * varasm.c (assemble_variable): Clean up handling of size using host_integerp and tree_low_cst. (decode_addr_const): Use byte, not bit, position. (output_constructor): bitpos and offsets are HOST_WIDE_INT; use tree_low_cst and int_bit_position. * objc/objc-act.c (build_ivar_list_initializer): Use byte_position. * ch/actions.c (check_missing_cases): BYTES_NEEDED is HOST_WIDE_INT. * ch/typeck.c (expand_constant_to_buffer): Use int_byte_position. (extract_constant_from_buffer): Likewise. * cp/class.c (build_vbase_pointer_fields): layout_field now place_field. (get_vfield_offset): Use byte_position. (set_rtti_entry): Set OFFSET to ssizetype zero. (get_binfo_offset_as_int): Deleted. (dfs_record_base_offsets): Use tree_low_cst. (dfs_search_base_offsets): Likewise. (layout_nonempty_base_or_field): Reflect changes in RLI format and call byte_position. (layout_empty_base): Convert offset to ssizetype. (build_base_field): use rli_size_unit_so_far. (dfs_propagate_binfo_offsets): Do computation in proper type. (layout_virtual_bases): Pass ssizetype to propagate_binfo_offsets. (layout_class_type): Reflect changes in RLI names and fields. (finish_struct_1): Set DECL_FIELD_OFFSET. * cp/dump.c (dequeue_and_dump): Call bit_position. * cp/expr.c (cplus_expand_constant): Use byte_position. * cp/rtti.c (expand_class_desc): Use bitsize_one_node. * cp/typeck.c (build_component_addr): Use byte_position and don't special case for zero offset. * f/com.c (ffecom_tree_canonize_ptr_): Use bitsize_zero_node. (ffecom_tree_canonize_ref_): Likewise. * java/class.c (make_field_value): Use byte_position. * java/expr.c (JAVA_ARRAY_LENGTH_OFFSET): Use byte_position. (java_array_data_offset): Likewise. * java/java-tree.h (MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC): Add case to bzero call. From-SVN: r32742
2000-03-22* stmt.c (expand_asm_operands): Don't promote the temporary.Richard Henderson1-1/+1
From-SVN: r32699
2000-03-23builtin.c (get_pointer_alignment): Use DECL_P and TYPE_P macros.Theodore Papadopoulo1-2/+2
* builtin.c (get_pointer_alignment): Use DECL_P and TYPE_P macros. * c-common.c (decl_attributes,check_format_info,truthvalue_conversion, c_get_alias_set): Likewise. * c-decl.c (duplicate_decls): Likewise. * c-typeck.c (default_conversion,build_unary_op): Likewise. * calls.c (initialize_argument_information): Likewise. * dwarf2out.c (decl_class_context,add_abstract_origin_attribute): Likewise. * dwarfout.c (decl_class_context,output_type): Likewise. * expr.c (get_inner_reference): Likewise. * fold-const.c (simple_operand_p,fold): Likewise. * function.c (aggregate_value_p): Likewise. * stmt.c (expand_asm_operands): Likewise. * varasm.c (named_section): Likewise. * call.c (check_dtor_name,build_new_method_call): Likewise. * decl.c (push_class_binding,poplevel,pushtag,lookup_namespace_name, make_typename_type,check_initializer,cp_finish_decl,xref_tag): Likewise. * decl2.c (grokfield,build_expr_from_tree,build_expr_from_tree, decl_namespace,arg_assoc_template_arg,arg_assoc, validate_nonmember_using_decl,do_class_using_decl): Likewise. * error.c (dump_template_argument,dump_expr,cp_file_of,cp_line_of, args_to_string): Likewise. * friend.c (is_friend): Likewise. * lex.c (note_got_semicolon,note_list_got_semicolon,is_global): Likewise. * method.c (build_overload_nested_name,build_overload_value, build_qualified_name,build_qualified_name,hack_identifier): Likewise. * parse.y (typename_sub,typename_sub1): Likewise. * pt.c (push_inline_template_parms_recursive,check_template_shadow, process_partial_specialization,convert_template_argument, template_args_equal,add_pending_template,lookup_template_class, for_each_template_parm_r,maybe_fold_nontype_arg, tsubst,instantiate_template,type_unification_real,unify, instantiate_pending_templates,set_mangled_name_for_template_decl): Likewise. * repo.c (repo_get_id,repo_template_used): Likewise. * search.c (lookup_field_1): Likewise. * tree.c (walk_tree,get_type_decl,cp_tree_equal,member_p): Likewise. * xref.c (classname): Likewise. From-SVN: r32698
2000-03-19emit-rtl.c (remove_unncessary_notes): Check that all NOTE_INSN_BLOCK_BEG and ↵Mark Mitchell1-16/+0
NOTE_INSN_BLOCK_END notes have an... * emit-rtl.c (remove_unncessary_notes): Check that all NOTE_INSN_BLOCK_BEG and NOTE_INSN_BLOCK_END notes have an associated NOTE_BLOCK. * function.h (identify_blocks): Update comments. (reorder_blocks): Declare. * function.c (identify_blocks): Don't take paramters. (reorder_blocks): Don't take parameters. * loop.h (find_loop_tree_blocks): Remove. (unroll_block_trees): Likewise. * loop.c (loop_optimize): Don't call find_loop_tree_blocks. Use reorder_blocks instead of unroll_block_trees.h * sibcall.c (optimize_sibling_and_tail_recursive_calls): Likewise. * stmt.c (find_loop_tree_blocks): Remove. (unroll_block_trees): Likewise. * toplev.c (rest_of_compilation): Don't call find_loop_tree_blocks in whole-function mode. * tree.h (reorder_blocks): Remove declaration. From-SVN: r32632
2000-03-13Fix recently introduced error in expand_end_case.Bernd Schmidt1-0/+3
From-SVN: r32511
2000-03-07tree.h (INT_CST_LT, [...]): Remove unneeded casts.Richard Kenner1-12/+9
* tree.h (INT_CST_LT, INT_CST_LT_UNSIGNED): Remove unneeded casts. (struct tree_int_cst): int_cst_low is now unsigned HOST_WIDE_INT. (attribute_hash_list, type_hash_canon): hashcode is now unsigned. (type_hash_lookup, type_hash_add, type_hash_list): Likewise. (min_precision): Result is unsignd. (add_double, neg_double, mul_double): Low word is unsigned. (lshift_double, rshift_double, lrotate_double): Likewise. (rrotate_double, div_and_round_double): Likewise. (tree_floor_log2, compare_tree_int): New functions. (preserve_rtl_expr_temps): New declaration. * c-common.c (declare_hidden_char_array): Use compare_tree_int. (decl_attributes): Use tree_log2 to find alignment. Check for TREE_INT_CST_HIGH for format args. (min_precision): Now unsigned. Use tree_floor_log2. (truthvalue_conversion): Delete long-disabled code. * c-decl.c (finish_struct): Clean up tests on field width. (finish_function): Use compare_tree_int. * c-pragma.c (handle_pragma_token): Use tree_log2 for alignment. * c-typeck.c (comptypes): Use tree_int_cst_equal. (default_conversion, digest_init): Use compare_tree_int. (build_binary_op): Use integer_all_onesp and compare_tree_int. Fix type errors in forming masks. * calls.c (initialize_argument_information): Use compare_tree_int. * dbxout.c (dbxout_type): Cast TREE_INT_CST_LOW to HOST_WIDE_INT. * except.c (expand_eh_region_start_tree): Use compare_tree_int. * expr.c (is_zeros_p, case INTEGER_CST): Use integer_zerop. (store_field): Use compare_tree_int. (expand_expr, case CONSTRUCTOR): Use TYPE_SIZE_UNIT. (expand_expr, case ARRAY_REF): Use compare_tree_int. (do_jump, case BIT_AND_EXPR): Use tree_floor_log2. (do_store_flag): Use compare_tree_int. * fold-const.c (encode, decode): Low part is always unsigned. (force_fit_type, add_double, neg_double, mul_double): Likewise. (lshift_double, rshift_double, lrotate_double): Likewise. (rrotate_double, div_and_round_double, int_const_binop): Likewise. (fold_convert): Use compare_tree_int. (operand_equal_p, case INTEGER_CST): Use tree_int_cst_equal. (invert_truthvalue, case INTEGER_CST): Likewise. (fold): Use compare_tree_int; add casts for unsigned TREE_INT_CST_LOW. * mkdeps.c (deps_dummy_targets): Make I unsigned. * rtl.h (add_double, neg_double, mul_double): Low words are unsigned. (lshift_double, rshift_double, lrotate_double, rrotate_double): Likewise. * stmt.c (expand_decl): Use compare_tree_int and mode_for_size_tree. (expand_end_case): Use compare_tree_int. (estimate_case_costs): Cast TREE_INT_CST_LOW to HOST_WIDE_INT. * stor-layout.c (mode_for_size_tree): Use compare_tree_int. (layout_decl): Likewise. (layout_record, layout_union): Make sizes unsigned. (layout_type, case VOID_TYPE): TYPE_SIZE must be bitsizetype. (layout_type, case QUAL_UNION_TYPE): Use compare_tree_int. * tree.c (struct type_hash): hashcode is unsigned. (build_type_attribute_variant, type_hash_list): Likewise. (type_hash_lookup, type_hash_add, type_hash_canon): Likewise. (attribute_hash_list, build_array_type, build_method_type): Likewise. (build_complex_type): Likewise. (real_value_from_int_cst): Remove unneeded casts. (integer_all_onesp): Add casts. (tree_floor_log2, compare_tree_int): New functions. (build_index_type): Use tree_int_cst_sgn. * varasm.c (assemble_variable): Use compare_tree_int. * ch/actions.c (chill_convert_for_assignment): INDEX is unsigned HOST_WIDE_INT. * ch/ch-tree.h (DECL_NESTING_LEVEL): Use TREE_INT_CST_HIGH since unsigned. * ch/except.c (chill_handle_on_labels): ALTERNATIVE is unsigned. Use compare_tree_int. (expand_goto_except_cleanup): Likewise. * cp/class.c (dfs_modify_vtables): I is now unsigned. (check_bitfield_decl): Use tree_int_cst_sgn and compare_tree_int. (build_base_field): Add casts of TREE_INT_CST_LOW to HOST_WIDE_INT. * cp/error.c (dump_expr): Cast TREE_INT_CST_HIGH to unsigned. * cp/init.c (build_vec_init): Cast TREE_INT_CST_LOW to HOST_WIDE_INT. * cp/method.c (build_overload_int): Cast TREE_INT_CST_HIGH to unsigned. * cp/typeck.c (build_binary_op, case TRUNC_DIV_EXPR): Call integer_all_onesp. * cp/typeck2.c (process_init_constructor): Use compare_tree_int. * f/com.c (ffecom_f2c_set_lio_code_): Use compare_tree_int. (ffecom_sym_transform_, ffecom_transform_common_): Likewise. (ffecom_transform_equiv_): Likewise. * java/decl.c (emit_init_test_initialization): Mark KEY as unused. * java/expr.c (build_newarray): Cast TREE_INT_CST_LOW to HOST_WIDE_INT. (build_anewarray): Likewise. * java/parse.y (patch_newarray): Likewise. * java/parse.c: Regenerated. From-SVN: r32383
2000-03-05Revert this patch:Mark Mitchell1-1/+1
2000-03-04 Mark Mitchell <mark@codesourcery.com> From-SVN: r32343
2000-03-05function.h (struct sequence_stack): Remove rtl_expr.Mark Mitchell1-1/+1
* function.h (struct sequence_stack): Remove rtl_expr. (struct emit_staus): Likewise. (seq_rtl_expr): Remove. * tree.h (free_temps_for_rtl_expr): Don't declare. (start_sequence_for_rtl_expr): Likewise. * rtl.h (preserve_rtl_expr_result): Likewise. * emit-rtl.c (start_sequence): Don't set sequence_rtl_expr. (start_sequence_for_rtl_expr): Remove. (push_topmost_sequence): Don't save sequence_rtl_expr. (pop_topmost_sequence): Remove comment about not restoring it. (end_sequence): Don't set seq_rtl_expr. (init_emit): Don't initialize it. (mark_sequence_stack): Don't mark it. (mark_emit_status): Likewise. * except.c (protect_with_terminate): Use start_sequence_for_rtl_expr, not start_sequence. * expr.c (expand_expr, case RTL_EXPR): Don't call preserve_rtl_expr_result or free_temps_for_rtl_expr. (assign_stack_temp_for_type): Don't set rtl_expr. (preserve_rtl_expr_result): Remove. (free_temps_for_rtl_expr): Likewise. (pop_temp_slots): Likewise. (mark_temp_slot): Don't mark the rtl_expr. * stmt.c (expand_start_stmt_expr): Use start_sequence, not start_sequence_for_rtl_expr. From-SVN: r32333
2000-03-04stmt.c (is_body_block): Move...Jason Merrill1-0/+30
* stmt.c (is_body_block): Move... * dwarfout.c, dwarf2out.c: ...from here. * tree.h: Declare it. * emit-rtl.c (remove_unncessary_notes): Don't remove the body block. * final.c (final_start_function): Do call remove_unnecessary_notes when scheduling. From-SVN: r32324
2000-02-21defaults.h (ASM_OUTPUT_ASCII): Constify a char*.Kaveh R. Ghazi1-5/+5
* defaults.h (ASM_OUTPUT_ASCII): Constify a char*. * flow.c (get_common_dest, chain_reorder_blocks, make_reorder_chain, fixup_reorder_chain, skip_insns_between_block): Add static prototypes. (life_analysis): Wrap variable `i' with macro ELIMINABLE_REGS. * haifa-sched.c (rank_for_schedule): Don't cast away const-ness. * integrate.c (compare_blocks, find_block): Likewise. * rtl.c (fatal_with_file_and_line): Add ATTRIBUTE_PRINTF_2. * rtl.h (set_file_and_line_for_stmt): Constify a char*. * stmt.c (stmt_status, set_file_and_line_for_stmt, expand_asm_operands): Likewise. From-SVN: r32094
2000-02-19c-common.c (decl_attributes): Set DECL_SIZE_UNIT.Richard Kenner1-9/+7
* c-common.c (decl_attributes): Set DECL_SIZE_UNIT. * c-decl.c (duplicate_decls, finish_enum): Likewise. (finish_decl): Remove -Wlarger-than code from here. * flags.h (id_clash_len): Now int. (larger_than_size): Now HOST_WIDE_INT. * fold-const.c (size_int_wide): No more HIGH parm; NUMBER is signed. Clean up checking to see if in table. (make_bit_field_ref): Remove extra parm to bitsize_int. * ggc-common.c (ggc_mark_tree_children): Mark DECL_SIZE_UNIT. * print-tree.c (print_node): Print DECL_SIZE_UNIT and TYPE_SIZE_UNIT. * stmt.c (expand_decl): Use DECL_SIZE_UNIT for stack checking size and for computing size of decl. * stor-layout.c (layout_decl): Set DECL_SIZE_UNIT. Move -Wlarger-than code to here. (layout_record): Remove extra arg to bitsize_int. Set TYPE_BINFO_SIZE_UNIT. (layout_union): Remove extra arg to bitsize_int. Use proper type for size of QUAL_UNION. (layout_type): Remove extra arg to bitsize_int. * toplev.c (id_clash_len): Now int. (larger_than_size): Now HOST_WIDE_INT. (decode_W_option): Clean up id-clash and larger-than- cases. * tree.c (get_identifier, maybe_get_identifier): Remove unneeded casts. (expr_align, case FUNCTION_DECL): DECL_ALIGN is not defined. * tree.h (BINFO_SIZE_UNIT, TYPE_BINFO_SIZE_UNIT, DECL_SIZE_UNIT): New. (struct tree_decl): New field size_unit. (size_int_wide): No HIGH operand; NUMBER is now signed. (size_int_2): Deleted. (size_int, bitsize_int): Don't use it and rework args. * varasm.c (assemble_variable, output_constructor): Use DECL_SIZE_UNIT. * ch/decl.c (layout_enum): Set DECL_SIZE_UNIT. * ch/satisfy.c (safe_satisfy_decl): Likewise. * cp/class.c (build_primary_vtable, layout_vtable_decl): Likewise. (avoid_overlap, build_base_field): Likewise. (build_base_field, build_base_fields, is_empty_class): Test DECL_SIZE with integer_zero. (layout_class_type): Set CLASSTYPE_SIZE_UNIT. * cp/cp-tree.h (struct lang_type): New field size_unit. (CLASSTYPE_SIZE_UNIT): New macro. * cp/decl.c (init_decl_processing): Set DECL_SIZE_UNIT. (cp_finish_decl): Delete -Wlarger-than processing. * cp/optimize.c (remap_decl): Walk DECL_SIZE_UNIT. * cp/pt.c (tsubst_decl): Set DECL_SIZE_UNIT. * cp/tree.c (make_binfo): binfo vector is one entry longer. (walk_tree): Walk DECL_SIZE_UNIT. * f/com.c (ffecom_sym_transform): Use DECL_SIZE_UNIT. (ffecom_transform_common_, ffecom_transform_equiv_): Likewise. (duplicate_decls): Likewise. (ffecom_tree_canonize_ptr_): Delete extra arg to bitsize_int. (finish_decl): Delete -Wlarger-than processing. * java/class.c (build_class_ref, push_super_field): Set DECL_SIZE_UNIT. * java/constants.c (build_constants_constructor): Likewise. From-SVN: r32070
2000-02-17stmt.c (set_file_and_line_for_stmt): Don't crash if cfun->stmt isn't set.Mark Mitchell1-2/+8
* stmt.c (set_file_and_line_for_stmt): Don't crash if cfun->stmt isn't set. From-SVN: r32041
2000-02-10flow.c (mark_regs_live_at_end): Delete unused variables.Kaveh R. Ghazi1-1/+0
* flow.c (mark_regs_live_at_end): Delete unused variables. * ggc-page.c (ggc_page_print_statistics): bzero -> memset. * integrate.c (copy_rtx_and_substitute): Wrap variable `alignment' in macro FRAME_GROWS_DOWNWARD. * stmt.c (expand_end_bindings): Delete unused variable. * unroll.c (iteration_info): Mark parameter `loop' with ATTRIBUTE_UNUSED. From-SVN: r31895
2000-02-08* stmt.c (expand_decl): Do set RTX_UNCHANGING_P for TREE_READONLY.Richard Kenner1-7/+1
From-SVN: r31856
2000-02-04function.c (diddle_return_value): Rework to use a callback function.Richard Henderson1-3/+1
* function.c (diddle_return_value): Rework to use a callback function. Use current_function_return_rtx if it's been set up. (do_clobber_return_reg, clobber_return_register): New. (do_use_return_reg, use_return_register): New. (expand_function_end): Use them. * stmt.c (expand_null_return): Likewise. * function.h: Declare them. * flow.c (mark_regs_live_at_end): Use diddle_return_value. (mark_reg): Change arguments as appropriate for callback. * integrate.c (expand_inline_function): Revert 19 Jan change. From-SVN: r31791
2000-01-19stupid.c: Die die die.Richard Henderson1-19/+1
* stupid.c: Die die die. * Makefile.in (OBJS): Remove stupid.o. (stupid.o): Likewise. * except.c (emit_eh_context): Don't emit USEs for stupid. * explow.c (probe_stack_range): Likewise. * flags.h (obey_regdecls): Remove. * flow.c (find_basic_blocks): Don't run try_merge_blocks when not optimizing. (life_analysis): Limit data collection when not optimizing. (mark_regs_live_at_end): Always mark the return value registers. (mark_used_regs): Remove dummy RETURN case. (print_rtl_with_bb): Don't consult obey_regdecls. * function.c (use_variable, use_variable_after): Remove. (assign_parms): Consult optimize not obey_regdecls. (expand_function_start): Don't emit USEs for stupid. (expand_function_end): Likewise. * global.c (build_insn_chain): Export. * integrate.c (expand_inline_function): Kill return-value USE handling code. * jump.c (jump_optimize_1): Do simple jump optimizations and dead code elimination. (calculate_can_reach_end): Remove check_deleted argument. (delete_insn): Patch out insns even when not optimizing. * local-alloc.c (block_alloc): Don't do tying when not optimizing. * rtl.h (use_variable, use_variable_after): Remove declarations. (build_insn_chain): Declare. * stmt.c (expand_value_return): Don't emit USEs for stupid. (expand_end_bindings): Likewise. (expand_decl): Likewise. Consult optimize not obey_regdecls. * toplev.c (obey_regdecls): Remove. (rest_of_compilation): Don't set it. Kill stupid in favour of flow1, local-alloc, and reload. (main): Don't set obey_regdecls. * config/nextstep.c (handle_pragma): Likewise. * alpha/alpha.md (allocate_stack): Don't emit USEs for stupid. * arm/arm.h (CONDITIONAL_REGISTER_USAGE): Don't fix reg 0 for stupid. From-SVN: r31499
2000-01-17reload.c: PROTO -> PARAMS.Kaveh R. Ghazi1-30/+30
* reload.c: PROTO -> PARAMS. * reload.h: Likewise. * reload1.c: Likewise. * reorg.c: Likewise. * resource.h: Likewise. * rtl.c: Likewise. * rtl.h: Likewise. * rtlanal.c: Likewise. * sbitmap.h: Likewise. * sdbout.c: Likewise. * stack.h: Likewise. * stmt.c: Likewise. * system.h: Likewise. From-SVN: r31461
2000-01-11Update copyrights for last checkin.Kaveh Ghazi1-1/+1
From-SVN: r31309
2000-01-10Makefile.in (optabs.o): Depend on real.hKaveh R. Ghazi1-0/+2
* Makefile.in (optabs.o): Depend on real.h (resource.o): Depend on insn-attr.h * builtins.c (result_vector): Wrap prototype in macro conditions governing definition and use. * c-common.c: Include tm_p.h. * c-lex.c: Likewise. * elfos.h: Constify a char*. * final.c (align_fuzz): Wrap prototype in macro HAVE_ATTR_length. (get_attr_length, shorten_branches, profile_after_prologue): Mark parameter with ATTRIBUTE_UNUSED. * fold-const.c (exact_real_inverse): Wrap variable `i' in CHECK_FLOAT_VALUE. * haifa-sched.c (schedule_insns): Mark parameter with ATTRIBUTE_UNUSED. * optabs.c: Include real.h. * real.h (ereal_atof): Add prototype arguments. * resource.c: Include insn-attr.h. * sdbout.c (sdbout_queue_anonymous_type, sdbout_dequeue_anonymous_types): Wrap in macro SDB_ALLOW_FORWARD_REFERENCES. (sdbout_init, sdbout_start_new_source_file): Mark parameter with ATTRIBUTE_UNUSED. * stmt.c (expand_return): Wrap variable `op0' in macro HAVE_return. * stupid.c: Include tm_p.h. * tree.c (real_value_from_int_cst): Mark parameter with ATTRIBUTE_UNUSED. cp: * lex.c: Include tm_p.h. ch: * lex.c: Include tm_p.h. From-SVN: r31308
1999-12-20current_function -> cfunBernd Schmidt1-29/+25
From-SVN: r31033
1999-12-16Makefile.in (INTREGRATE_H): Rename to INTEGRATE_H.Mark Mitchell1-12/+38
* Makefile.in (INTREGRATE_H): Rename to INTEGRATE_H. * function.c (insert_block_after_note): Remove. (retrofit_block): Likewise. (identify_blocks): Fix indentation. (reorder_blocks): Don't NULL out NOTE_SOURCE_FILE for a NOTE_INSN_BLOCK_BEG or NOTE_INSN_BLOCK_END. * function.h (insert_block_after_note): Remove prototype. (retrofit_block): Likewise. * integrate.c (expand_inline_function): Don't call find_loop_tree_blocks. Use expand_start_bindings_and_block, not just expand_start_bindings. Use the block_map to remap old NOTE_BLOCKs to new ones. (integrate_decl_tree): Keep track of remapped blocks. * integrate.h (struct inline_remap): Add block_map. * stmt.c (expand_fixup): Don't try to retrofit_blocks. Just set NOTE_BLOCK on the notes. (expand_start_bindings): Rename to ... (expand_start_bindings_and_block): Add parameter. Set NOTE_BLOCK. (expand_end_bindings): Set NOTE_BLOCK. * toplev.c (rest_of_compilation): In function-at-a-time-mode, reconstruct the BLOCK tree. * tree.h (expand_start_bindings): Macroize. Call ... (expand_start_bindings_and_block): New function. * optimize.c (struct inline_data): Remove scope_stmt. (remap_block): Don't use insert_block_after_note. Don't update scope_stmt. (expand_call_inline): Don't update scope_stmt. (optimize_function): Don't initialize scope_stmt. * semantics.c (expand_stmt): Set NOTE_BLOCK for newly emitted NOTE_INSN_BLOCK_BEG/NOTE_INSN_BLOCK_END notes. From-SVN: r30982
1999-12-15* stmt.c (expand_decl): Expand upper bound of a dynamic array.Jason Merrill1-0/+6
From-SVN: r30962
1999-12-12except.h (struct eh_queue): Add `next' pointer.Mark Mitchell1-0/+4
* except.h (struct eh_queue): Add `next' pointer. (struct eh_status): Make x_ehqueue a pointer. (push_ehqueue): Declare. (pop_ehqueue): Likewise. * except.c (expand_eh_region_end): Adjust now that ehqueue is a pointer. (expand_fixup_region_end): Likewise. (expand_leftover_cleanups): Likewise. (push_ehqueue): Define. (pop_ehqueue): Likewise. (emit_cleanup_handler): Use push_ehqueue and pop_ehqueue rather than doing it inline. (expand_start_all_catch): Adjust now that ehqueue is a pointer. (mark_eh_queue): Mark all level of the queue. (mark_eh_status): Adjust now that ehqueue is a pointer. (init_eh_for_function): Allocate ehqueue. (free_eh_status): Free it. * stmt.c (expand_cleanups): Save the ehqueue around the cleanup expansion for a fixup. From-SVN: r30874
1999-12-05* stmt.c (expand_fixup): Fix typo in comment.Mark Mitchell1-1/+1
From-SVN: r30775
1999-11-12Fix another gcc2 merge problem: fix switch statement ISO C conformancs bugJim Wilson1-7/+7
Fix another gcc2 merge problem: fix switch statement ISO C conformancs bug * stmt.c (pushcase, pushcase_range): Partially revert Oct 28 change. From-SVN: r30515
1999-11-04bitmap.h (BITMAP_XFREE): New.Richard Henderson1-1/+2
* bitmap.h (BITMAP_XFREE): New. * flow.c (life_analysis): Use it. (life_analysis_1): Free blocks. * combine.c (undo_commit): New. (try_combine): Use it. Don't zap undobuf.undos. (combine_instructions): Don't zap undobuf.undos; free the undobuf.frees list. * local-alloc.c (local_alloc): Free qty_phys_num_sugg. * stmt.c (cost_table_): New. (estimate_case_costs): Use it instead of xmalloc. * toplev.c (compile_file): Reuse dumpname memory instead of strdup'ing it. From-SVN: r30404
1999-11-04function.c (diddle_return_value): New.Richard Henderson1-20/+8
* function.c (diddle_return_value): New. (expand_function_end): Use it. * stmt.c (expand_null_return): Likewise. (expand_value_return): Likewise. * reg-stack.c (subst_stack_regs_pat): Handle clobbers at top-level. * reload1.c (reload): Don't remove return value clobbers. From-SVN: r30401
1999-11-01stmt.c (expand_value_return): Fix typo in this change:Mark Mitchell1-1/+1
* stmt.c (expand_value_return): Fix typo in this change: Thu Oct 28 18:06:50 1999 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> (expand_value_return): Correctly convert VAL when promoting function return; support RETURN_REG being a PARALLEL. From-SVN: r30308
1999-10-31[multiple changes]Richard Kenner1-41/+56
Fri Oct 29 15:25:07 1999 Arnaud Charlet <charlet@ACT-Europe.FR> * gcov.c (DIR_SEPARATOR): Provide default. (output_data): Add test for MS-DOS format absolute filename. (fancy_abort): Correct program name. (open_files): Open all files in binary mode. * libgcc2.c (__bb_exit_func): Likewise. * profile.c (init_branch_prob): Specify binary when opening files. * flags.h (flag_unwind_tables): New decl. * toplev.c (flag_unwind_table): New definition. (f_options): Add -funwind-tables. (decode_g_option): Clarify warning when unknown -g option is given. (rest_of_compilation): If inside an inlined external function, pretend we are just being declared. * dwarf2out.c (dwarf2out_do_frame): Check -funwind_tables. (dwarf2out_frame_finish): Likewise. Fri Oct 29 06:32:44 1999 Geoffrey Keating <geoffk@cygnus.com> * flow.c (propagate_block): When the last reference to a label before an ADDR_VEC is deleted because the reference is a dead store, delete the ADDR_VEC. Fri Oct 29 07:44:26 1999 Vasco Pedro <vp@di.fct.unl.pt> * fold-const.c (merge_ranges): In not in0, but in1, handle upper bounds equal like subset case. Thu Oct 28 19:22:24 1999 Douglas Rupp <rupp@gnat.com> * dbxout.c (dbxout_parms): Generate a second stabs line for parameters passed in a register but moved to the stack. Thu Oct 28 19:12:57 1999 Sam Tardieu <tardieu@act-europe.fr> * gcc.c (pass_exit_codes, greatest_status): New variables. (struct option_map): Add entry for "--pass-exit-codes". (execute): Update greatest_status if error. (display_help): Add documentation for -pass-exit-codes. (process_command): Handle -pass-exit-codes. (main): Look at pass_exit_codes and greatest_status on call to exit. Thu Oct 28 18:06:50 1999 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * reload.c (find_reloads): Refine test for no input reload case to not includes reloads emitted after insn. * function.c (find_temp_slots_from_address): Handle sum involving a register that points to a temp slot. (update_temp_slot_address): Make recursive call if both old and new are PLUS with a common operand. * calls.c (expand_call): Mark temp slot for result as having address taken. * rtlanal.c (reg_referenced_p, case IF_THEN_ELSE): New case. * gcc.c (process_command): Add standard_exec_prefix with "GCC" component as well as "BINUTILS". * integrate.h (copy_rtx_and_substitute): New arg, FOR_LHS. * integrate.c (copy_rtx_and_substitute): Likewise. (expand_inline_function, integrate_parm_decls, integrate_decl_tree): All callers changed. * unroll.c (inital_reg_note_copy, copy_loop_body): Likewise. * dbxout.c (dbxout_type, case INTEGER_TYPE_NODE): If can use gdb extensions, write size of type; also be more consistent in using references when this is a subtype. * pa.md (extv, extzv, insv): Use define_expand to reject constant that is out of range. * loop.c (unknown_constant_address_altered): New variable. (prescan_loop): Initialize it. (note_addr_stored): Set it for RTX_UNCHANGING_P MEM. (invariant_p, case MEM): Remove handling for volatile and readony; check new variable if readonly. (check_dbra_loop): Chdeck unknown_constant_address_altered. * cse.c (canon_hash, case MEM): Do not record if BLKmode. (addr_affects_sp_p): Removed from note_mem_written and only define #ifdef AUTO_INC_DEC. * alpha.c (input_operand, case ADDRESSOF): Treat as REG. * regclass.c (record_reg_classes): Properly handle register move directions. * varasm.c (initializer_constant_valid_p, case MINUS_EXPR): Don't think valid if both operands are invalid. (struct constant_descriptor): New field RTL. (mark_const_hash_entry): Mark it. (record_constant{,_rtx}): Initialize it. (output_constant_def): Allocate RTL in permanent obstack and save in table. ({record,compare}_constant_1): Modes must match for CONSTRUCTOR of ARRAY_TYPE. * c-common.h (initializer_constant_valid_p): Delete decl from here. * output.h (initializer_constant_valid_p): Move decl to here. * c-common.c (initializer_constant_valid_p): Delete function from here. * varasm.c (initializer_constant_valid_p): Move function to here. * tree.h (STRIP_SIGN_NOPS): New macro. * fold-const.c (optimize_minmax_comparison): New function. (invert_truthvalue, case WITH_RECORD_EXPR): New case. (fold): Use STRIP_SIGN_NOPS instead of STRIP_TYPE_NOPS. (fold, case EQ_EXPR): Call optimize_minmax_comparison and add cases with ABS_EXPR, NEGATE_EXPR, PLUS_EXPR, MINUS_EXPR, and widening conversions. (fold, case LE_EXPR): Rework changing unsigned to signed comparisons to look at size of mode, not precision of type; also add missing cases. (optimize_bit_field_compare, decode_field_reference): Don't try to optimize COMPONENT_REF of a PLACEHOLDER_EXPR. * dwarf2out.c (ctype.h): Include. (dwarf2out_set_demangle_name_func): New function. (size_of_line_info): Deleted. (output_line_info): Compute size of line info table from difference of labels. (base_type_die, add_name_attribute): Call demangle function, if any. (field_byte_offset): Use bits per word for variable length fields. (gen_array_type_die): Add array name. (gen_subprogram_die): Ignore DECL_INLINE if -fno-inline. (dwarf2out_add_library_unit_info): New function. * explow.c (set_stack_check_libfunc): New function. (stack_check_libfunc): New static variable. (probe_stack_range): Allow front-end to set up a libfunc to call. * combine.c (simplify_comparison): When making comparison in wider mode, check for having commuted an AND and a SUBREG. (contains_muldiv): New function. (try_combine): Call it when dividing a PARALLEL. (simplify_rtx, case TRUNCATE): Don't remove for umulsi3_highpart. (simplify_comparison, case ASHIFTRT): Recognize sign-extension of a PLUS. (record_value_for_reg): If TEM is a binary operation with two CLOBBERs, use one of the CLOBBERs instead. (if_then_else_cond): If comparing against zero, just return thing being compared. * optabs.c (expand_abs): If machine has MAX, ABS (x) is MAX (x, -x). Don't generate shifts and subtract if have conditional arithmetic. * rtl.h (delete_barrier): New declaration. * jump.c (jump_optimize): Set up to handle conditional call. In conditional arithmetic case, handle CALL_INSN followed by a BARRIER. (delete_barrier): New function. * rtl.c (read_rtx): Call fatal if bad RTL code; check for bad mode. * recog.c (nonmemory_operand): Accept ADDRESSOF. * tree.c (build_type_attribute_variant): Push to obstack of ttype around type_hash_canon call. * expr.c (placeholder_list): Move decl to file scope. (expand_expr): Don't force access to volatile just because its address is taken. If ignoring reference operations, just expand the operands. (expand_expr, case COMPONENT_REF): Propagate EXPAND_CONST_ADDRESS to recursive call when expanding inner. Refine test for using bitfield operations vs pointer punning. (expand_expr, case CONVERT_EXPR): If converting to BLKmode UNION_TYPE from BLKmode, just return inner object. Use proper mode in store_field call. Properly set sizes of object to store and total size in store_field call for convert to union. (expand_expr, case ARRAY_REF): If OP0 is in a register, put it in memory (like for ADDR_EXPR). Also, don't put constant in register if we'll want it in memory. (readonly_fields_p): New function. (expand_expr, case INDIRECT_REF): Call it if LHS. (expand_assignment): Handle a RESULT_DECL where DECL_RTL is a PARALLEL. (do_jump, case WITH_RECORD_EXPR): New case. (get_inner_reference): Always go inside a CONVERT_EXPR and NOP_EXPR if both modes are the same. (store_field): Use bitfield operations if size of bitsize is not same as size of RHS's type. Check for bitpos not a multiple of alignment in BLKmode case. Do block move in largest possible alignment. (store_constructor): Set BITSIZE to -1 for variable size and properly in case of array of BLKmode. (expand_expr_unaligned): New function. (do_compare_and_jump): Call it. * mips/iris5.h (SWITCHES_NEED_SPACES): New macro. * collect2.c (main): Only allow -ofoo if SWITCHES_NEED_SPACES does not include 'o'. * function.c (instantiate_virtual_regs_1, case SET): Handle case where both SET_DEST and SET_SRC reference a virtual register. (gen_mem_addressof): Copy RTX_UNCHANGING_P from new REG to old REG. * integrate.c (expand_inline_function): Handle case of setting virtual stack vars register (from built in setjmp); when parameter lives in memory, expand virtual_{stack_vars,incoming_args}_rtx early. (subst_constant): Add new parm, MEMONLY. (expand_inline_function, integrate_parm_decls): Pass new parm. (integrate_decl_tree): Likewise. (copy_rtx_and_substitute, case MEM): Do copy RTX_UNCHANGING_P. (try_constants): Call subst_constants twice, with MEMONLY 0 and 1. (copy_rtx_and_substitute, case SET): Add explicit calls to copy_rtx_and_substitute for both sides. * stmt.c (expand_asm_operands): Don't use TREE_STRING_LENGTH for constraints. (pushcase{,_range}): Convert to NOMINAL_TYPE after checking for within INDEX_TYPE, instead of before. (fixup_gotos): Use f->target_rtl, not the next insn, since latter may be from a later fixup. (expand_value_return): Correctly convert VAL when promoting function return; support RETURN_REG being a PARALLEL. (expand_return): When checking for result in regs and having cleanup, consider PARALLEL in DECL_RTL as being in regs. From-SVN: r30299
1999-10-29except.c (free_eh_nesting_info): Free the info itself.Mark Mitchell1-2/+2
* except.c (free_eh_nesting_info): Free the info itself. * function.c (free_after_compilation): Don't free NULL. * gcse.c (alloc_pre_mem): Free the temp_bitmap, too. (pre_edge_insert): Free inserted. * stmt.c (free_stmt_status): Don't free NULL. From-SVN: r30255
1999-10-26c-typeck.c (build_function_call): Check that the built-in function is of ↵Jeffrey A Law1-0/+1
class BUILT_IN_NORMAL before trying to... * c-typeck.c (build_function_call): Check that the built-in function is of class BUILT_IN_NORMAL before trying to recongize it as BUILT_IN_ABS. * calls.c (calls_function_1): Similarly for BUILT_IN_ALLOCA. * stmt.c (expand_end_cae): Similarly for BUILT_IN_CLASSIFY_TYPE. * call.c (build_over_call): Check that the built-in function is of class BUILT_IN_NORMAL before trying to recongize it as BUILT_IN_ABS. * typeck.c (build_function_call_real): Similarly. From-SVN: r30208
1999-10-26tree.h (BLOCK_TYPE_TAGS): Remove.Mark Mitchell1-21/+2
* tree.h (BLOCK_TYPE_TAGS): Remove. (BLOCK_END_NOTE): Likewise. (BLOCK_LIVE_RANGE_FLAG): Likewise. (BLOCK_LIVE_RANGE_START): Likewise. (BLOCK_LIVE_RANGE_END): Likewise. (tree_block): Remove live_range_flag, live_range_var_flag, and type_tags. Remove end_note, live_range_start, and live_range_end. (remember_end_note): Remove prototype. * tree.c (build_block): Don't set BLOCK_TYPE_TAGS. * c-decl.c (poplevel): Don't set BLOCK_TYPE_TAGS or call remember_end_note. * ggc-common.c (ggc_mark_tree_children): Don't mark BLOCK_TYPE_TAGS or BLOCK_END_NOTE. * integrate.c (adjust_copied_decl_tree): Remove. * print-tree.c (print_node): Don't print BLOCK_TYPE_TAGS. * stmt.c (last_block_end_note): Remove. (init_stmt): Don't add a GC root for it. (expand_fixup): Don't set it. (remember_end_note): Remove. (expand_end_bindings): Don't set last_block_end_note. * ch-tree.h (remember_end_note): Remove prototype. * decl.c (poplevel): Don't call remember_end_note. * decl.c (poplevel): Don't set BLOCK_TYPE_TAGS. Don't call remember_end_note. * com.c (poplevel): Don't call remember_end_note. * decl.c (poplevel): Don't set BLOCK_TYPE_TAGS or call remember_end_note. From-SVN: r30188
1999-10-04stmt.c (expand_anon_union_decl): When any of the elements of the union is ↵Mark Mitchell1-5/+13
addressable, so is the entire union. * stmt.c (expand_anon_union_decl): When any of the elements of the union is addressable, so is the entire union. From-SVN: r29816
1999-10-03print-tree.c (print_node, indent_to): Remove redundant prototypes.Kaveh R. Ghazi1-2/+3
* print-tree.c (print_node, indent_to): Remove redundant prototypes. * profile.c (instrument_arcs, output_gcov_string, tablejump_entry_p): Add static prototypes. (output_gcov_string): Constify a char*. * regmove.c (replacement_quality, fixup_match_2): Add static prototypes. * resource.h (reg_dead_p): Add extern prototype. * rtl.c (trim_filename): Add static prototype. * scan-decls.c (skip_to_closing_brace): Likewise. * stmt.c (expand_decl_cleanup_no_eh): Hide definition. (expand_end_case): Initialize variable `range'. (emit_case_nodes): Remove unused prototype `rtx_fn'. * varasm.c (asm_emit_uninitialised): Add static prototype. (asm_emit_uninitialised, assemble_variable): Mark parameter with ATTRIBUTE_UNUSED. From-SVN: r29784
1999-09-24stmt.c (expand_start_bindings): Don't allow cleanup isntructions to disappear.Mark Mitchell1-0/+7
* stmt.c (expand_start_bindings): Don't allow cleanup isntructions to disappear. From-SVN: r29644
1999-09-22Various fixes for problems discovered stress-testing GC.Alex Samuel1-6/+17
* config/i386/i386.c (pic_label_name): Change to char pointer. (global_offset_table): New variable. (load_pic_register): Fill global_offset_table if it hasn't already been done. Allocate pic_label_name dynamically. * ggc.h (empty_string): New variable. * ggc-simple.c (empty_string): Likewise. (init_ggc): Allocate empty_string and add as root. * stmt.c (digit_strings): New variable. (init_stmt): Add last_block_end_note as root. Allocate and initialize digit_strings. (expand_asm_operands): Use empty_string and digit_string instead of string constants. * profile.c (init_arc_profiler): Allocate with ggc_alloc_string instead of xmalloc. (output_func_start_profiler): Likewise. * c-typeck.c (digest_init): Check if init is error_mark_node. From-SVN: r29575
1999-09-21stmt.c (any_pending_cleanups): Don't crash when current_function->stmt is unset.Richard Earnshaw1-1/+2
* stmt.c (any_pending_cleanups): Don't crash when current_function->stmt is unset. From-SVN: r29541
1999-09-20Make it possible to prototype port-specific functions (and convert i386 to ↵Bernd Schmidt1-0/+1
use this) From-SVN: r29514
1999-09-17functiion.h (struct function): Add x_whole_function_mode_p.Mark Mitchell1-2/+13
* functiion.h (struct function): Add x_whole_function_mode_p. (retrofit_block): Declare. * function.c (retrofit_block): New function. (identify_blocks): Add assertions. Allow an incomplete set of block notes if we're still generating code for the function. * integrate.c: Include loop.h. (expand_inline_function): Call find_loop_tree_blocks to map block notes to blocks when in whole-function mode. Use retrofit_block to insert new BLOCKs for the inlined function, rather than insert_block. * stmt.c (expand_fixup): Likewise. Don't use pushlevel/polevel. * Makefile.in (integrate.o): Depend on loop.h. From-SVN: r29487
1999-09-17tree.h (warn_about_unused_variables): Declare.Mark Mitchell1-7/+22
* tree.h (warn_about_unused_variables): Declare. * stmt.c (warn_about_unused_variables): New function, split out from ... (expand_end_bindings): Here. From-SVN: r29486
1999-09-17stmt.c (preserve_subexpressions_p): Don't crash when current_function->stmt ↵Mark Mitchell1-1/+2
is unset. * stmt.c (preserve_subexpressions_p): Don't crash when current_function->stmt is unset. From-SVN: r29485
1999-09-17stmt.c (expand_start_bindings): Allow callers to pass a flag indicating that ↵Mark Mitchell1-6/+21
no NOTE_INSN_BLOCK_BEG note is... * stmt.c (expand_start_bindings): Allow callers to pass a flag indicating that no NOTE_INSN_BLOCK_BEG note is required. (expand_start_target_temps): Use it. * except.c (expand_eh_region_start_for_decl): Likewise. * expr.c (expand_expr): Likewise. From-SVN: r29484
1999-09-15emit-rtl.c (free_emit_status): Don't check DECL_DEFER_OUTPUT.Richard Henderson1-5/+4
* emit-rtl.c (free_emit_status): Don't check DECL_DEFER_OUTPUT. Free the struct. (mark_emit_status): Renamed from mark_emit_state. * except.c (mark_eh_status): Renamed from mark_eh_state. Check not null before marking. (free_eh_status): New. * expr.c (mark_expr_status, free_expr_status): New. * function.c (free_machine_status): New. (free_after_parsing): New. (free_after_compilation): Move bits to free_after_parsing; call free_eh_status, free_expr_status; zero the marked members of the function state. (prepare_function_start): No can_garbage_collect. Call init_eh_for_function. (expand_dummy_function_end): Free up current_function state. (mark_function_status): Renamed from mark_function_state. (mark_function_chain): No can_garbage_collect. Call mark_expr_status. * function.h (struct function): No can_garbage_collect. (free_machine_status, free_after_parsing): Declare. (free_eh_status, free_expr_status): Declare. * ggc.h (mark_expr_status): Declare. * stmt.c (free_stmt_status): Free the struct. (mark_stmt_status): Renamed from mark_stmt_state. (init_stmt): Don't call init_eh. (init_stmt_for_function): Don't call init_eh_for_function. * toplev.c (compile_file): Call init_eh. (rest_of_compilation): Free basic block info before ggc_collect. Call free_after_parsing; conditionally call free_after_compilation. * varasm.c (mark_varasm_status): Renamed from mark_varasm_state. Check not null before marking. From-SVN: r29448