summaryrefslogtreecommitdiff
path: root/gcc/ifcvt.c
Commit message (Collapse)AuthorAgeFilesLines
* * gcc.c: Fix comment formatting.kazu2001-08-121-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * gccspec.c: Likewise. * gcov.c: Likewise. * gcse.c: Likewise. * genemit.c: Likewise. * gengenrtl.c: Likewise. * genrecog.c: Likewise. * gensupport.c: Likewise. * ggc-page.c: Likewise. * global.c: Likewise. * graph.c: Likewise. * ifcvt.c: Likewise. * integrate.c: Likewise. * lcm.c: Likewise. * libgcc2.c: Likewise. * loop.c: Likewise. * mbchar.c: Likewise. * optabs.c: Likewise. * predict.c: Likewise. * prefix.c: Likewise. * profile.c: Likewise. * protoize.c: Likewise. * real.c: Likewise. * recog.c: Likewise. * regclass.c: Likewise. * regmove.c: Likewise. * reg-stack.c: Likewise. * reload1.c: Likewise. * resource.c: Likewise. * rtlanal.c: Likewise. * rtl.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44837 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (noce_get_alt_condition): Don't make an auxiliarydj2001-08-031-8/+2
| | | | | | | set from a constant part of the condition. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44602 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (noce_get_alt_condition): If the condition is a comparedj2001-07-281-1/+109
| | | | | | | | against a constant, try to adjust the compare to have the desired constant in it so that min/max optimizations happen more often. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44435 138bc75d-0d04-0410-961f-82ee72b054a4
* * basic-block.h (redirect_edge_and_branch_force,hubicka2001-07-221-48/+38
| | | | | | | | | | | | | | | | | | | | | | | | | redirect_edge_and_branch, block_label, forwarder_block_p): Declare. * flow.c (redirect_edge_and_branch_force, redirect_edge_and_branch, block_label, forwarder_block_p): Make global. (redirect_edge_and_branch_force): Fix copying of lifeness information. (block_label): Handle EXIT_BLOCK_PTR by returning NULL. * ifcvt.c (dead_or_predictable): Take BB as an new destionation instead of label; update CFG after transformation. (find_if_case_1): Update call, use redirect_edge_and_branch_force for finishing the transformation; handle even case where ELSE does not follow THEN. (find_if_case_2): Update call of dead_or_predictable; simplify CFG update. * emit-rtl.c (split_branch_probability): New global variable. (try_split): Take care to set split_branch_probability and create REG_BR_PROB note for new jump insns. * md.texi (define_split): Document new feature. * i386.c (ix86_split_fp_branch): Redistribute branch probability notes. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44249 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (noce_try_store_flag_constants): Correct ordergeoffk2001-07-201-2/+2
| | | | | | | of parameters to trunc_int_for_mode. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44181 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (noce_try_store_flag_constants): Use trunc_int_for_modegeoffk2001-07-191-7/+9
| | | | | | | when negating constants. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44158 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (find_cond_trap): Test for exit block.rth2001-07-151-0/+5
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44009 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (find_cond_trap): New.rth2001-07-141-3/+131
| | | | | | | | | | | (find_if_header): Call it. (merge_if_block): Relax existing jump sanity check. * jump.c (jump_optimize_1): Remove conditional trap handling. * gcc.dg/iftrap-1.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44006 138bc75d-0d04-0410-961f-82ee72b054a4
* * alias.c (set_mem_alias_set): New function.kenner2001-07-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * rtl.h (set_mem_alias_set): Declare it. * builtins.c (expand_builtin_return_addr): Call it instead of using MEM_ALIAS_SET accessor. (expand_builtin_setjmp_setup, expand_builtin_longjmp): Likewise. (get_memory_rtx, expand_builtin_va_arg): Likewise. (expand_builtin_va_copy):Likewise. * caller-save.c (setup_save_areas): Likewise. * calls.c (compute_argument_addresses): Likewise. * explow.c (set_mem_attributes): Likewise. * expr.c (emit_single_push_insn, emit_push_insn): Likewise. (expand_assignment, store_constructor_field, store_field): Likewise. (expand_expr_unaligned): Likewise. * function.c (assign_stack_temp_for_type): Likewise. (put_reg_into_stack, gen_mem_addressof): Likewise. * ifcvt.c (noce_try_cmove_arith): Likewise. * reload1.c (reload, alter_reg): Likewise. * config/alpha/alpha.c (get_aligned_mem): Likewise. (alpha_set_memflags_1, alpha_expand_unaligned_load): Likewise. (alpha_expand_unaligned_store): Likewise (alpha_expand_unaligned_load_words): Likewise. (alpha_expand_unaligned_store_words): Likewise. (alpha_expand_block_clear, alpha_expand_prologue): Likewise. (alpha_expand_epilogue): Likewise. * config/arc/arc.c (arc_setup_incoming_varargs): Likewise. * config/clipper/clipper.c (clipper_builtin_saveregs): Likewise. * config/i386/i386.c (legitimize_pic_address): Likewise. * config/i960/i960.c (setup_incoming_varargs): Likewise. * config/ia64/ia64.c (spill_restore_mem): Likewise. * config/m32r/m32r.c (m32r_setup_incoming_varargs): Likewise. * config/m8k/m88k.c (m88k_builtin_saveregs): Likewise. * config/mips/mips.c (mips_va_arg): Likewise. * config/mn10300/mn10300.c (mn10300_builtin_saveregs): Likewise. * config/pa/pa.c (hppa_builtin_saveregs): Likewise. * config/rs6000/rs6000.c (rs6000_emit_move): Likewise. (setup_incoming_varargs, rs6000_va_arg): Likewise. (rs6000_emit_eh_toc_restore, rs6000_emit_prologue): Likewise. (rs6000_emit_epilogue): Likewise. * config/sh/sh.c (sh_builtin_saveregs): Likewise. * config/sparc/sparc.c (sparc_va_arg): Likewise. * config/v850/v850.c (v850_va_arg): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@43951 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (dead_or_predicable): Fix return value last patch.rth2001-06-141-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@43357 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (cond_exec_get_condition): Use reversed_comparison_code.rth2001-06-131-10/+25
| | | | | | | (cond_exec_process_if_block, dead_or_predicable): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@43336 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (life_data_ok): New.rth2001-06-111-4/+8
| | | | | | | | | (merge_if_block): Use it to determine whether to update global_live_at_end. (if_convert): Set it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@43170 138bc75d-0d04-0410-961f-82ee72b054a4
* * predict.def: New file.hubicka2001-06-091-5/+1
| | | | | | | | | | | | | | | | | | | | | | | | | * predict.h: New file. * predict.c: Include predict.h. (predictor_info): New structure and array. (predict_edge, predict_insn): Rewrite; make global. (predict_edge_def, predict_insn_def): New global functions. (dump_prediction, combine_predictions_for_insns): New static functions. (estimate_probability): Change calls to predict_edge to predict_edge_def and calls to predict_insn to predict_insn_def; combine probabilities. (expected_value_to_br_prob): Behave as predictor. * rtl.h (REG_BR_PRED): Update coment. (invert_br_probabilities): New. * jump.c: Include predict.h (duplicate_loop_exit_test): Drop branch prediction notes. (invert_jump): Use invert_br_probabilities. * Makefile.in: Add dependancy on predict.h for jump and predict pass. * ifcvt.c (dead_or_predicable): Use invert_br_probabilities. * combine.c (distribute_notes): Handle BR_PRED. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@43115 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (merge_if_block): Use any_uncondjump_p, not simplejump_plaw2001-05-101-1/+1
| | | | | | | | | | | to determine if a block has an unconditional jump at its end. * jump.c (jump_optimize_1): When converting a conditional jump to an unconditional jump, build the jump using gen_jump instead of just modify operands in-place. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41939 138bc75d-0d04-0410-961f-82ee72b054a4
* * Makefile.in (ifcvt.o): Depend on toplev.h.ghazi2001-04-111-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * c-semantics.c: Include expr.h. * ifcvt.c: Include toplev.h. * expr.h (rtx_equal_p): Delete prototype. * rtl.h (exact_log2_wide, floor_log2_wide, permalloc, protect_from_queue, gen_jump, gen_beq, gen_bge, gen_ble, eliminate_constant_term, expand_complex_abs, find_single_use, make_tree, init_expr_once, init_optabs, supports_one_only): Likewise. * tree.h (exact_log2_wide, floor_log2_wide, expand_null_return, rest_of_type_compilation, emit_queue, do_pending_stack_adjust, expand_assignment, store_expr, emit_line_note_after, emit_line_note_force, split_specs_attrs, label_rtx): Likewise. * toplev.h (exact_log2_wide, floor_log2_wide): Add prototype. cp: * Make-lang.in (cp/semantics.o): Depend on $(EXPR_H). * semantics.c: Include expr.h. java: * Make-lang.in (java/boehm.o): Depend on toplev.h. * boehm.c: Include toplev.h. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41256 138bc75d-0d04-0410-961f-82ee72b054a4
* 2001-04-03 Jakub Jelinek <jakub@redhat.com>amacleod2001-04-031-4/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | David S. Miller <davem@pierdol.cobaltmicro.com> Andrew MacLeod <amacleod@redhat.com> Use byte offsets in SUBREGs instead of words. * alias.c (nonlocal_mentioned_p): Use subreg_regno function. * caller-save.c (mark_set_regs): Change callers of subreg_hard_regno to pass new argument. (add_stored_regs): Use subreg_regno_offset function. * calls.c (expand_call): For non-paradoxical SUBREG take endianess into account. (precompute_arguments): Use gen_lowpart_SUBREG. * combine.c (try_combine): Replace explicit XEXP with SUBREG_REG. (combine_simplify_rtx): Rework to use SUBREG_BYTE. (simplify_set): Rework to use SUBREG_BYTE. (expand_field_assignment): Use SUBREG_BYTE. (make_extraction): Use SUBREG_BYTE. (if_then_else_cond): Use SUBREG_BYTE. (apply_distributive_law): Use SUBREG_BYTE and fixup subreg comments. (gen_lowpart_for_combine): Compute full byte offset. * cse.c (mention_regs): Use SUBREG_BYTE. (remove_invalid_subreg_refs): Rework to use SUBREG_BYTE. (canon_hash): Use SUBREG_BYTE. (fold_rtx): Pass SUBREG_BYTE div UNITS_PER_WORD to operand_subword. (gen_lowpart_if_possible): Formatting. * dbxout.c (dbxout_symbol_location): Compute SUBREG hard regnos correctly. * dwarf2out.c (is_pseudo_reg): Fixup explicit XEXP into SUBREG_REG (mem_loc_descriptor): Fixup explicit XEXP into SUBREG_REG (loc_descriptor): Fixup explicit XEXP into SUBREG_REG * dwarfout.c (is_pseudo_reg): Fixup explicit XEXP into SUBREG_REG (output_mem_loc_descriptor): Fixup explicit XEXP into SUBREG_REG (output_loc_descriptor): Fixup explicit XEXP into SUBREG_REG * emit-rtl.c (gen_rtx_SUBREG): New function, used to verify certain invariants about SUBREGs the compiler creates. (gen_lowpart_SUBREG): New function. (subreg_hard_regno): New function to get the final register number. (gen_lowpart_common): Use SUBREG_BYTE. (gen_imagpart): Spacing nits. (subreg_realpart_p): Use SUBREG_BYTE. (gen_highpart): Use SUBREG_BYTE. (subreg_lowpart_p): Always compute endian corrected goal offset, even at the byte level, then compare against that. (constant_subword): New function, pulled out all constant cases from operand_subword and changed second argument name to offset. (operand_subword): Detect non REG/SUBREG/CONCAT/MEM cases early and call constant_subword to do the work. Return const0_rtx if looking for a word outside of OP. (operand_subword_force): Change second arg name to offset. * expmed.c (store_bit_field): Use SUBREG_BYTE. (store_split_bit_field): Use SUBREG_BYTE. (extract_bit_field): Use SUBREG_BYTE. (extract_split_bit_field): Use SUBREG_BYTE. (expand_shift): Use SUBREG_BYTE. * expr.c (store_expr, expand_expr): Use gen_lowpart_SUBREG. * final.c (alter_subreg) Use subreg_hard_regno and SUBREG_BYTE. * flow.c (set_noop_p): Use SUBREG_BYTE. (mark_set_1): Remove ALTER_HARD_SUBREG. Use subreg_regno_offset instead. * function.c (fixup_var_refs_1): Fixup explicit XEXP into a SUBREG_REG. (fixup_memory_subreg): Use SUBREG_BYTE and remove byte endian correction code. (optimize_bit_field): Use SUBREG_BYTE. (purge_addressof_1): Use SUBREG_BYTE. (purge_single_hard_subreg_set): Use subreg_regno_offset function. (assign_params): Mark arguments SUBREG_PROMOTED_VAR_P if they are actually promoted by the caller and PROMOTE_FOR_CALLS_ONLY is true. * gengenrtl.c (special_rtx): Add SUBREG. * global.c (mark_reg_store): Use SUBREG_BYTE. (set_preference): Rework to use subreg_regno_offset and SUBREG_BYTE. * ifcvt (noce_emit_move_insn): Use SUBREG_BYTE. * integrate.c (copy_rtx_and_substitute): Use SUBREG_BYTE and make sure final byte offset is congruent to subreg's mode size. (subst_constants): Use SUBREG_BYTE. (mark_stores): Use subreg_regno_offset function. * jump.c (rtx_renumbered_equal_p, true_regnum): Use subreg_regno_offset function and SUBREG_BYTE. * local-alloc.c (combine_regs): Use subreg_regno_offset function. (reg_is_born): Use subreg_hard_regno. * recog.c (valid_replace_rtx_1): Use SUBREG_BYTE and remove byte endian correction code. Don't combine subregs unless resulting offset aligns with type. Fix subreg constant extraction for DImode. Simplify SUBREG of VOIDmode CONST_DOUBLE. (general_operand): Remove dead mode_altering_drug code. (indirect_operand): Use SUBREG_BYTE. (constrain_operands): Use subreg_regno_offset function. * reg-stack.c (get_true_reg): Use subreg_regno_offset function. * regmove.c (regmove_optimize): Use SUBREG_BYTE. (optimize_reg_copy_3): Use gen_lowpart_SUBREG. * regs.h (REG_SIZE): Allow target to override. (REGMODE_NATURAL_SIZE): New macro which target can override. * reload.c (reload_inner_reg_of_subreg): subreg_regno should be used on the entire subreg rtx. (push_reload): Use SUBREG_BYTE in comments and code. (find_dummy_reload): Use subreg_regno_offset. Only adjust offsets for hard registers inside subregs. (operands_match_p): Use subreg_regno_offset. (find_reloads): Use SUBREG_BYTE and only advance offset for subregs containing hard regs. (find_reload_toplev): Use SUBREG_BYTE. Remove byte endian corrections when fixing up MEM subregs. (find_reloads_address_1): Use SUBREG_BYTE, subreg_regno, and subreg_regno_offset where appropriate. (find_reloads_subreg_address): Use SUBREG_BYTE. Remove byte endian corrections when fixing up MEM subregs. (subst_reloads): When combining two subregs, make sure final offset is congruent to subreg's mode size. (find_replacement): Use SUBREG_BYTE and subreg_regno_offset. (refers_to_regno_for_reload_p): Use subreg_regno. (reg_overlap_mentioned_for_reload_p): Use subreg_regno_offset. * reload1.c (eliminate_regs) Use SUBREG_BYTE. Remove byte endian correction code for memory subreg fixups. (forget_old_reload_1): Use subreg_regno_offset. (choose_reload_regs): Use subreg_regno. (emit_input_reload_insns): Use SUBREG_BYTE. (reload_combine_note_store): Use subreg_regno_offset. (move2add_note_store): Use subreg_regno_offset. * resource.c (update_live_status, mark_referenced_resources): Use subreg_regno function. (mark_set_resources): Use subreg_regno function. * rtl.h (SUBREG_WORD): Rename to SUBREG_BYTE. (subreg_regno_offset, subreg_regno): Define prototypes. (subreg_hard_regno, constant_subword, gen_rtx_SUBREG): Newi functions. (gen_lowpart_SUBREG): Add prototype. * rtl.texi (subreg): Update to reflect new byte offset representation. Add mentioning of the effect that BYTES_BIG_ENDIAN has on subregs now. * rtlanal.c (refers_to_regno_p): Use subreg_regno. (reg_overlap_mentioned_p): Use subreg_regno. (replace_regs); Make sure final offset of combined subreg is congruent to size of subreg's mode. (subreg_regno_offset): New function. (subreg_regno): New function. * sched-vis.c (print_value): Change SUBREG_WORD to SUBREG_BYTE. * sdbout.c (sdbout_symbol): Compute offset using alter_subreg. * stmt.c (expand_anon_union_decl): Use gen_lowpart_SUBREG. * tm.texi (ALTER_HARD_SUBREG): Remove, it is now dead. (SUBREG_REGNO_OFFSET): Describe SUBREG_REGNO_OFFSET overrides. * config/a29k/a29k.c (gpc_reg_operand): Use subreg_regno. (a29k_get_reloaded_address): Use SUBREG_BYTE. (print_operand): Use SUBREG_BYTE. * config/alpha/alpha.c (print_operand_address): Use SUBREG_BYTE. * config/arm/arm.c (arm_reload_in_hi): Use SUBREG_BYTE. (arm_reload_out_hi): Use SUBREG_BYTE. * config/d30v/d30v.c (d30v_split_double): Use subreg_regno_offset instead of SUBREG_WORD. (d30v_print_operand_memory_reference): Use subreg_regno_offset. * config/dsp16xx/dsp16xx.md (extendqihi2, zero_extendqihi2): Fix SUBREG creation to use byte offset. * config/h8300/h8300.md (Unnamed HImode zero extraction and 16bit inverted load insns): Fix explicit rtl subregs to use byte offsets. * config/i370/i370.md (cmpstrsi, movstrsi, mulsi3, divsi3, udivsi3, umodsi3): Generate SUBREGs with byte offsets. * config/i860/i860.c (single_insn_src_p): Use SUBREG_BYTE. * config/i860/i860.md (mulsi3_big): Fixup explicit SUBREGs in rtl to use byte offsets. (unnamed fmlow.dd insn): Fixup SUBREGS to use byte offsets. * config/i960/i960.md (extendhisi2): Generate SUBREGs with byte offsets, also make sure it is congruent to SUBREG's mode size. (extendqisi2, extendqihi2, zero_extendhisi2, zero_extendqisi2, unnamed ldob insn): Generate SUBREGs with byte offset. (zero_extendqihi2): SUBREG's are byte offsets. * config/m68hc11/m68hc11.c (m68hc11_gen_lowpart): Use SUBREG_BYTE. (m68hc11_gen_highpart): Use SUBREG_BYTE. * config/m68k/m68k.md (zero_extendhisi2, zero_extendqihi2, zero-extendqisi2): Generate SUBREGs with byte offset. (umulsidi3, mulsidi3, subreghi1ashrdi_const32, subregsi1ashrdi_const32, subreg1lshrdi_const32): Fixup explicit subregs in rtl to use byte offsets. * config/m88k/m88k.md (extendsidi2): fixup subregs to use byte offset. * config/mips/mips.c (mips_move_1word): Use subreg_regno_offset. (mips_move_2words): Use subreg_regno_offset. (mips_secondary_reload_class): Use subreg_regno_offset. * config/mips/mips.md (DImode plus, minus, move, and logical op splits): Fixup explicit subregs in rtl to use byte offsets. * config/mn10200/mn10200.c (print_operand): Use subreg_regno function. * config/mn10300/mn10300.c (print_operand): Use subreg_regno function. * config/ns32k/ns32k.md (udivmoddisi4): Fix explicit subregs in rtl to use byte offsets. * config/pa/pa.c (emit_move_sequence): Use SUBREG_BYTE. * config/pa/pa.md (floatunssisf2, floatunssidf2, mulsi3): fix explicit subregs to use byte offsets. * config/pdp11/pdp11.md (zero_extendhisi2, modhi3, modhi3+1): Fixup explicit subregs in rtl to use byte offsets. * config/romp/romp.c (memory_offset_in_range_p): Use SUBREG_BYTE and remove byte endian correction code. * config/sh/sh.c (output_movedouble): Use subreg_regno. (gen_ashift_hi): Use SUBREG_BYTE. (regs_used): Use subreg_regno_offset. (machine_dependent_reorg): Use subreg_regno_offset. * config/sh/sh.h (INDEX_REGISTER_RTX_P): Use SUBREG_BYTE. * config/sh/sh.md (DImode and DFmode move splits): Use subreg_regno. (movdf_i4): Subregs are byte offsets now. * config/sparc/sparc.c (ultra_find_type): Use SUBREG_BYTE. * config/sparc/sparc.h (ALTER_HARD_SUBREG): Removed. (REGMODE_NATURAL_SIZE): Override. (REG_SIZE): For SUBREG check float mode on SUBREG_REG's mode. * config/sparc/sparc.md (TFmode move splits): Generate SUBREGs with byte offsets. (zero_extendhisi2, zero_extendqidi2_insn, extendhisi2, extendqihi2, sign_extendqihi2_insn, sign_extendqisi2_insn, extendqidi2): Generate SUBREGs with byte offsets, also make sure it is congruent to SUBREG's mode size. (smulsi3_highpart_v8plus): Fix explicit subregs in rtl to use byte offsets. (cmp_siqi_trunc, cmp_siqi_trunc_set, cmp_diqi_trunc, cmp_diqi_trunc_set, lshrdi3_v8plus+1, lshrdi3_v8plus+2, lshrdi3_v8plus+3, lshrdi3_v8plus+4): Use proper SUBREG_BYTE offset for non-paradoxical subregs in patterns. * config/v850/v850.c (print_operand, output_move_double): Use subreg_regno function. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41058 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (noce_emit_move_insn): New.jakub2001-04-021-11/+41
| | | | | | | | | | | | | | (noce_try_store_flag, noce_try_store_flag_constants, noce_try_store_flag_inc, noce_try_store_flag_mask, noce_try_cmove, noce_try_cmove_arith, noce_try_minmax, noce_try_abs): Use it. (noce_process_if_block): Likewise. For STRICT_LOW_PART, take mode from its SUBREG. * gcc.c-torture/compile/20010329-1.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41001 138bc75d-0d04-0410-961f-82ee72b054a4
* IA-64 ABI Exception Handling.rth2001-03-281-10/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40924 138bc75d-0d04-0410-961f-82ee72b054a4
* * cse.c (find_comparison_args): Remove previous change.kenner2001-03-211-0/+8
| | | | | | | | * ifcvt.c (noce_process_if_block): When moving an insn, remove any REG_EQUAL notes. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40715 138bc75d-0d04-0410-961f-82ee72b054a4
* Brad's -ffast-math breakup.rth2001-03-071-3/+3
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40300 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (noce_operand_ok): Handle properly unarry operations.hubicka2001-03-021-1/+2
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40181 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (noce_emit_store_flag, noce_try_store_flag_constants,hubicka2001-02-281-15/+16
| | | | | | | | | | noce_try_store_flag_inc, noce_try_store_flag_mask, noce_try_cmove_arith): Use reversed_comparison_code instead of reverse_comparison and can_reverse_comparison_p. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40119 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (struct noce_if_info): Add test_bb.rth2001-02-251-3/+326
| | | | | | | | | | | (noce_get_alt_condition): New. (noce_try_minmax, noce_try_abs): New. (noce_operand_ok): New. (noce_process_if_block): Use them. * rtlanal.c (may_trap_p): NEG and ABS can never trap. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40060 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (dead_or_predicable): Don't move code if eh regionsrth2001-02-181-0/+9
| | | | | | | would be disrupted. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39843 138bc75d-0d04-0410-961f-82ee72b054a4
* Handle jump insns that are PARALLEL.nickc2000-12-271-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38501 138bc75d-0d04-0410-961f-82ee72b054a4
* While building global lifetime information, keep track of which registers arebernds2000-11-271-2/+3
| | | | | | | | only conditionally set. Use this to force rescans in more cases where they are needed. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37801 138bc75d-0d04-0410-961f-82ee72b054a4
* Michael Matz <matzmich@cs.tu-berlin.de>rth2000-11-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | * dominance.c: New file. * Makefile.in (OBJS): Add dominance.o. * flow.c (compute_flow_dominators): Remove. (compute_immediate_dominators): Remove. (compute_immediate_postdominators): Remove. * basic-block.h: Remove their prototypes. (calculate_dominance_info): Add prototype. * dce.c (eliminate_dead_code): Change calls to above functions. Don't compute dominators but only immediate dominators. * flow.c (flow_loops_find): Change callers. * gcse.c (compute_code_hoist_data): Likewise. * haifa-sched.c (schedule_insns): Likewise. * ifcvt.c (if_convert): Likewise. * ssa.c (convert_to_ssa): Likewise, and only compute immediate dominators. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37449 138bc75d-0d04-0410-961f-82ee72b054a4
* Fix ia64-linux glibc intl/loadmsgcat.c miscompilation.wilson2000-09-121-0/+5
| | | | | | | | * ifcvt.c (noce_process_if_block): If A and B are the same, and no else block, and X has side-effects, then fail. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36373 138bc75d-0d04-0410-961f-82ee72b054a4
* Make sure THEN block has any insns at before testing for indirect jumpmeissner2000-08-201-3/+6
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35813 138bc75d-0d04-0410-961f-82ee72b054a4
* Do not consider a THEN block ending in an indirect jump for conditional ↵meissner2000-08-191-1/+13
| | | | | | compilation; Fix d30v warning git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35812 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (EDGE_COMPLEX): Move definition ...wehle2000-06-141-2/+0
| | | | | | | | | | * basic-block.h (EDGE_COMPLEX): ... here. * loop.c (check_dbra_loop): Specify the register when generating REG_NONNEG notes and don't generate duplicates. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34542 138bc75d-0d04-0410-961f-82ee72b054a4
* Do not handle dead code via conditional execution if special handling is neededmeissner2000-06-131-0/+4
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34512 138bc75d-0d04-0410-961f-82ee72b054a4
* Warning fixes:ghazi2000-06-111-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * bb-reorder.c (build_scope_forest): Initialize variable `curr_scope'. * calls.c (expand_call): Likewise for variables `save_pending_stack_adjust' and `save_stack_pointer_delta'. * i386.c (function_arg_advance, function_arg): Cast to avoid signed/unsigned warnings. * i386.h (MEMORY_MOVE_COST): Likewise. * ifcvt.c (cond_exec_process_if_block): Initialize variables `else_start' and `else_end'. * libgcc2.h (__eh_alloc, __eh_free): Prototype. * regrename.c (rr_replace_reg): Initialize variable `dest_subregno'. ch: * Makefile.in (EXPR_H): New dependency variable. (actions.o, expr.o): Use EXPR_H. (lang.o): Depend on RTL_H and EXPR_H. * lang.c: Include rtl.h and expr.h. (lang_get_alias_set): Mark parameter with ATTRIBUTE_UNUSED. cp: * decl2.c (compare_options): Don't needlessly cast away const-ness. f: * com.c (lang_get_alias_set): Mark parameter with ATTRIBUTE_UNUSED. java: * decl.c (create_primitive_vtable): Prototype. * jcf-write.c (generate_bytecode_insns): Initialize variable `saved_context'. * lang.c (lang_get_alias_set): Mark parameter with ATTRIBUTE_UNUSED. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34490 138bc75d-0d04-0410-961f-82ee72b054a4
* add IFCVT_MODIFY macros for the MD file to tweak the conditional execution ↵meissner2000-06-041-1/+34
| | | | | | support. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34386 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (merge_if_block): Be prepared for JOIN to have north2000-06-011-7/+23
| | | | | | | | | | remaining edges. (find_if_block): Allow THEN with no outgoing edges. * flow.c (merge_blocks_nomove): Remove a barrier not following a jump as well. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34317 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (cond_exec_process_insns): Don't ever ignore clobbers.rth2000-05-311-4/+2
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34316 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (cond_exec_process_if_block): Do nothing if the last insnlaw2000-05-311-0/+10
| | | | | | | | in the block is more than just a simple conditional branch. (noce_process_if_block): Similarly. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34287 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (cond_exec_get_condition): Set test_if to the SET_SRCrearnsha2000-05-261-1/+1
| | | | | | | of get_pc. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34192 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (seq_contains_jump): New.rth2000-05-251-0/+31
| | | | | | | | (noce_try_store_flag_constants): Use it to fail conversion. (noce_try_store_flag_inc, noce_try_store_flag_mask): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34179 138bc75d-0d04-0410-961f-82ee72b054a4
* * combine.c (try_combine): Use any_condjump_p, any_uncondjump_prth2000-05-251-9/+10
| | | | | | | | | | | | | | | | | | | | | | and pc_set at the place of simplejump_p and condjump_p. * cse.c (record_jump_equiv): Likewise. * emit-rtl.c (emit): Likewise. * explow.c (find_next_ref): Likewise. * flow.c (tidy_fallthru_edge): Likewise. (init_propagate_block_info): Likewise. * gcse.c (delete_null_pointer_checks): Likewise. * ifcvt.c (cond_exec_get_condition, noce_get_condition, dead_or_predicable): Likewise. * integrate.c (copy_insn_list): Likewise. * loop.c (scan_loop, verify_dominator, find_and_verify_loops, for_each_insn_in_loop, check_dbra_loop, get_condition, insert_bct, load_mems): Likewise. * resource.c (find_dead_or_set_registers): Likewise. * sibcalls.c (simplejump_p): Likewise. * unroll.c (copy_loop_body, reg_dead_after_loop): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34175 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (if_convert): Update life info globally.aoliva2000-05-241-1/+3
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34119 138bc75d-0d04-0410-961f-82ee72b054a4
* Oops, checked in verify-flow.patch by mistake, revertingaoliva2000-05-201-2/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34063 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (if_convert): Scan and kill dead code.aoliva2000-05-201-2/+4
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34057 138bc75d-0d04-0410-961f-82ee72b054a4
* * cse.c (cse_basic_block): Only call find_reg_note if REG_NOTES not 0.kenner2000-05-191-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * reload.c (find_equiv_reg): Likewise. * alias.c (init_alias_analysis): Likewise. Only call prologue_epilogue_contains on insns. * basic-block.h (REG_SET_TO_HARD_REG_SET): Call new function. * bb-reorder.c (hard-reg-set.h): Include earlier. * haifa-sched.c (hard-reg-set.h): Likewise. * ifcvt.c (hard-reg-set.h): Likewise. * local-alloc.c (hard-reg-set.h): Likewise. * loop.c (hard-reg-set.h): Likewise. * predict.c (hard-reg-set.h): Likewise. * regrename.c (hard-reg-set.h): Likewise. * flow.c (hard-reg-set.h): Likewise. (reg_set_to_hard_reg_set): New function. * bitmap.c (regs.h, basic-block.h): No longer include. (bitmap.h): Now include. * conflict.c (hard-reg-set.h): Include. * profile.c (hard-reg-set.h): Likewise. * print-rtl.c (hard-reg-set.h): Likewise. * sbitmap.c (hard-reg-set.h): Likewise. * toplev.c (hard-reg-set.h): Likewise. * unroll.c (hard-reg-set.h, basic-block.h): Likewise. * hard-reg-set.h (reg_names): Now constant. * regs.h (reg_names): Likewise. * regclass.c (reg_names): Likewise. * loop.h (basic-block.h): No longer include. (bitmap.h): Now include. * reload1.c (order_regs_for_reload): Avoid loop over reg sets. * Makefile.in (LOOP_H, sbitmap.o, profile.o): Reflect above changes. (toplev.o, print-rtl.o, conflict.o, unroll.o, bitmap.o): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34039 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (find_if_case_2): Don't allow THEN to be EXIT.rth2000-05-191-3/+6
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34036 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (cond_exec_process_insns): Drop USE and CLOBBER insnsrth2000-05-161-0/+17
| | | | | | | | that get in the way after reload. (cond_exec_process_if_block): Skip a label heading THEN block. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33923 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (if_convert): Do not free NULL.law2000-05-131-1/+2
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33888 138bc75d-0d04-0410-961f-82ee72b054a4
* * Makefile.in (final.o): Depend on BASIC_BLOCK_H.rth2000-05-121-52/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * final.c (final_end_function): Use app_disable. Rearrange note handling into a switch. Emit deleted labels. (output_asm_label): Generate label strings for deleted labels. * flow.c (tail_recursion_label_list): New. (find_basic_blocks_1): Set label_value_list directly. Collect list of tail recursion labels from call_placeholders. Don't add deleted labels to the label value list. (cleanup_cfg): Use free_EXPR_LIST_list. (flow_delete_insn_chain): Turn non-removable labels into notes. (flow_delete_block): Don't disable deleting the block because of a non-removable label. (tail_recursion_label_p): New. (merge_blocks_move_predecessor_nojumps): Don't disable the merge because of a label. (merge_blocks_move_successor_nojumps): Likewise. Also move a jump table. (merge_blocks): Disable a merge because of tail recursion labels. * ifcvt.c (merge_if_block): Don't disable a merge because of a label. Use a more accurate measure of not merging the join block. (find_if_block): Don't disable conversion because of a label. (find_if_case_1, find_if_case_2): Likewise. * jump.c (duplicate_loop_exit_test): Preserve the kind of list element when copying. (squeeze_notes): Also leave EH notes. (mark_jump_label): Ignore deleted labels. Use an INSN_LIST for REG_LABEL notes. (delete_insn): Preserve LABEL_NAME in NOTE_SOURCE_FILE when deleting a label. * print-rtl.c (print_rtx): Print NOTE_SOURCE_FILE for NOTE_INSN_DELETED_LABEL. Print `[# deleted]' for a label_ref referring to a deleted label. Convert tail handling to a switch. * rtl.def (CODE_LABEL): Rearrange elements to be compatible with NOTE for NOTE_INSN_DELETED_LABEL. (NOTE): Fix commentary. * rtl.h (REG_LABEL): Update commentary wrt INSN_LIST. (REG_CC_SETTER, REG_CC_USER, REG_LIBCALL): Likewise. (CODE_LABEL_NUMBER, LABEL_NAME): Update index. (LABEL_NUSES, LABEL_REFS): Likewise. * unroll.c (copy_loop_body): Don't copy NOTE_INSN_DELETED_LABEL. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33876 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (cond_exec_process_insns): New argument prob_val.rth2000-05-091-9/+35
| | | | | | | | | | Attach it to call insns. (cond_exec_process_if_block): Track probability for true and false branches. (dead_or_predicable): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33791 138bc75d-0d04-0410-961f-82ee72b054a4
* * ifcvt.c (noce_process_if_block): Don't use an insn_b fromrth2000-05-061-1/+2
| | | | | | | test_bb if a or b uses x. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33738 138bc75d-0d04-0410-961f-82ee72b054a4