aboutsummaryrefslogtreecommitdiff
path: root/gcc/combine.c
AgeCommit message (Collapse)AuthorFilesLines
2011-06-14dumping cleanup phase 1 -- Removing TODO_dump_funcDavid Li1-1/+0
From-SVN: r175051
2011-06-06re PR rtl-optimization/49145 (ICE in simplify_const_unary_operation, at ↵Richard Sandiford1-1/+14
simplify-rtx.c:1322) gcc/ PR rtl-optimization/49145 * combine.c (make_compound_operation): Handle ZERO_EXTEND specially. gcc/testsuite/ PR rtl-optimization/49145 From Ryan Mansfield * gcc.c-torture/compile/pr49145.c: New test. From-SVN: r174718
2011-05-08combine.c (simplify_comparison): Abstract out parts into...Chung-Lin Tang1-217/+268
2011-05-08 Chung-Lin Tang <cltang@codesourcery.com> * combine.c (simplify_comparison): Abstract out parts into... (simplify_compare_const): ... new function. (try_combine): Generalize parallel arithmetic/compare combining to call simplify_compare_const() and CANONICALIZE_COMPARE(). From-SVN: r173552
2011-05-04re PR debug/47994 (-fcompare-debug failure with -O2 -fpeel-loops ↵Alexandre Oliva1-3/+3
-fno-rerun-cse-after-loop -fno-tree-loop-optimize -fno-web) PR debug/47994 PR debug/47919 * combine.c (try_combine): Skip debug insns at m_split tests. From-SVN: r173351
2011-04-25combine.c (combine_simplify_rtx): Avoid mis-simplifying conditionals for ↵Maxim Kuvyrkov1-1/+4
STORE_FLAG_VALUE==-1 case. * combine.c (combine_simplify_rtx): Avoid mis-simplifying conditionals for STORE_FLAG_VALUE==-1 case. Co-Authored-By: Eric Botcazou <ebotcazou@adacore.com> From-SVN: r172930
2011-04-15combine.c (subst, [...]): Add new argument, use it to track processing of ↵Maxim Kuvyrkov1-28/+42
conditionals. * combine.c (subst, combine_simlify_rtx): Add new argument, use it to track processing of conditionals. Update all callers. (try_combine, simplify_if_then_else): Update. From-SVN: r172486
2011-04-12combine.c (update_cfg_for_uncondjump): Instead of testing at_end assert it ↵Jakub Jelinek1-5/+6
is always true. * combine.c (update_cfg_for_uncondjump): Instead of testing at_end assert it is always true. (try_combine): Don't call update_cfg_for_uncondjump for noop non-jump moves. From-SVN: r172329
2011-04-12re PR rtl-optimization/48549 (Combiner ICE with -g)Jakub Jelinek1-4/+11
PR rtl-optimization/48549 * combine.c (propagate_for_debug): Also stop after BB_END of this_basic_block. Process LAST and just stop processing after it. (combine_instructions): If last_combined_insn has been deleted, set last_combined_insn to its PREV_INSN. * g++.dg/opt/pr48549.C: New test. From-SVN: r172311
2011-04-08combine.c (combine_validate_cost): Adjust comments.Eric Botcazou1-13/+15
* combine.c (combine_validate_cost): Adjust comments. Set registered cost of I0 to zero at the end, if any. From-SVN: r172216
2011-04-07re PR debug/48343 (ICE compiling i586 ↵Jakub Jelinek1-26/+48
linux-2.6.38/drivers/staging/wlan-ng/p80211wep.c: in form_sum, at reload.c:5338) PR debug/48343 * combine.c (combine_instructions): Add last_combined_insn, update it if insn is after it, pass it to all try_combine calls. (try_combine): Add last_combined_insn parameter, pass it instead of i3 to propagate_for_debug. * gcc.dg/torture/pr48343.c: New test. From-SVN: r172108
2011-04-05re PR bootstrap/48469 (bootstrap failure)Nathan Froyd1-0/+2
PR bootstrap/48469 * combine.c (combine_instructions): #ifdef AUTO_INC_DEC links declaration. From-SVN: r171998
2011-04-05fix compilation on AUTO_INC_DEC targetsNathan Froyd1-9/+14
fix compilation on AUTO_INC_DEC targets * combine.c (combine_instructions) [AUTO_INC_DEC]: Declare links as an rtx. (try_combine) [AUTO_INC_DEC]: Declare a local link rtx. From-SVN: r171995
2011-04-05combine.c: Include obstack.h.Nathan Froyd1-125/+133
* combine.c: Include obstack.h. (struct insn_link): Define. (uid_log_links): Adjust type. (FOR_EACH_LOG_LINK): New macro. (insn_link_obstack): Declare. (alloc_insn_link): Define. (create_log_links): Call it. Use FOR_EACH_LOG_LINK and adjust type of link variables. (find_single_use, insn_a_feeds_b, combine_instructions): Likewise. (try_combine, record_promoted_values, distribute_notes): Likewise. (distribute_links): Likewise. Tweak prototype. (clear_log_links): Delete. (adjust_for_new_dest): Call alloc_insn_link. * Makefile.in (combine.o): Depend on $(OBSTACK_H). From-SVN: r171993
2011-04-03* combine.c (try_combine): Remove useless local variable.Eric Botcazou1-16/+6
From-SVN: r171901
2011-03-22combine.c (simplify_set): Try harder to find the best CC mode when ↵Eric Botcazou1-1/+15
simplifying a nested COMPARE on the RHS. * combine.c (simplify_set): Try harder to find the best CC mode when simplifying a nested COMPARE on the RHS. From-SVN: r171304
2011-03-18combine.c (try_combine): Do simplification only call of subst() on i2 even ↵Chung-Lin Tang1-6/+4
when i1 is present. 2011-03-18 Chung-Lin Tang <cltang@codesourcery.com> * combine.c (try_combine): Do simplification only call of subst() on i2 even when i1 is present. Update comments. testsuite/ * gcc.target/arm/unsigned-extend-1.c: New. From-SVN: r171138
2011-03-17Revert the last change on cant_combine_insn_p.H.J. Lu1-6/+0
2011-03-17 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * combine.c (cant_combine_insn_p): Don't check zero/sign extended hard registers. From-SVN: r171125
2011-03-17Check zero/sign extended hard registers.H.J. Lu1-0/+6
gcc/ 2011-03-17 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * combine.c (cant_combine_insn_p): Check zero/sign extended hard registers. gcc/testsuite/ 2011-03-17 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * gcc.dg/torture/pr47725.c: New. From-SVN: r171124
2011-02-15Revert cant_combine_insn_p change.H.J. Lu1-6/+0
gcc/ 2011-02-15 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * combine.c (cant_combine_insn_p): Revert the last change. gcc/testsuite/ 2011-02-15 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * gcc.dg/torture/pr47725.c: Removed. From-SVN: r170197
2011-02-15Check zero/sign extended hard registers.H.J. Lu1-0/+6
gcc/ 2011-02-15 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * combine.c (cant_combine_insn_p): Check zero/sign extended hard registers. gcc/testsuite/ 2011-02-15 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * gcc.dg/torture/pr47725.c: New. From-SVN: r170179
2011-02-10re PR target/47665 (ICE in trunc_int_for_mode)Jakub Jelinek1-1/+2
PR target/47665 * combine.c (make_compound_operation): Only change shifts into multiplication for SCALAR_INT_MODE_P. * gcc.target/i386/pr47665.c: New test. From-SVN: r170000
2011-02-06invoke.texi: Remove reference to compiler internals from user documentation.Steven Bosscher1-4/+0
* doc/invoke.texi: Remove reference to compiler internals from user documentation. * reg-notes.def: Remove REG_VALUE_PROFILE. * combine.c (distribute_notes): Do not handle REG_VALUE_PROFILE. From-SVN: r169861
2011-01-26re PR rtl-optimization/46878 (V850 ICE in in maybe_add_or_update_dep_1, at ↵DJ Delorie1-1/+7
sched-deps.c:854) PR rtl-optimization/46878 * combine.c (insn_a_feeds_b): Check for the implicit cc0 setter/user dependency as well. * gcc.dg/pr46878-1.c: New test. From-SVN: r169307
2011-01-03re PR rtl-optimization/47157 (ICE: in calc_dfs_tree, at dominance.c:395 with -O)Jakub Jelinek1-2/+11
PR rtl-optimization/47157 * combine.c (try_combine): If undobuf.other_insn becomes (set (pc) (pc)) jump, call update_cfg_for_uncondjump on it and set *new_direct_jump_p too. * gcc.c-torture/compile/pr47157.c: New test. From-SVN: r168439
2010-11-30hwint.c: New.Joseph Myers1-1/+0
* hwint.c: New. Extracted from toplev.c. * hwint.h (clz_hwi, ctz_hwi, ffs_hwi, exact_log2, floor_log2): Move from toplev.h. * toplev.c (clz_hwi, ctz_hwi, ffs_hwi, exact_log2, floor_log2): Move to hwint.c. * toplev.h (clz_hwi, ctz_hwi, ffs_hwi, exact_log2, floor_log2): Move to hwint.h. * builtins.c, combine.c, config/i386/winnt.c, double-int.c, explow.c, expmed.c, fold-const.c, ggc-page.c, ggc-zone.c, ifcvt.c, ipa-struct-reorg.c, ira-color.c, matrix-reorg.c, omp-low.c, real.c, recog.c, reload.c, rtlanal.c, simplify-rtx.c, stor-layout.c, tree-dfa.c, tree-ssa-alias.c, tree-ssa-loop-niter.c, tree-vect-data-refs.c, tree-vect-loop-manip.c, tree-vect-loop.c, tree-vect-stmts.c, tree-vrp.c: Don't include toplev.h. * genattrtab.c, genconditions.c, genemit.c, genextract.c, genoutput.c, genpeep.c, genpreds.c, genrecog.c: Don't include toplev.h in generated output. * Makefile.in (OBJS-common): Add hwint.o. Dependencies for above files changed to remove toplev.h. (hwint.o): New. (insn-attrtab.o, insn-emit.o, insn-extract.o, insn-output.o, insn-peep.o, insn-preds.o, insn-recog.o): Don't depend on toplev.h. * config/i386/t-cygming (winnt.o): Don't depend on toplev.h. * config/i386/t-interix (winnt.o): Don't depend on toplev.h. fortran: * trans-common.c: Don't include toplev.h. java: * boehm.c: Don't include toplev.h. * Make-lang.in (java/boehm.o): Don't depend on toplev.h. lto: * lto-object.c: Don't include toplev.h. * Make-lang.in (lto/lto-object.o): Don't depend on toplev.h. From-SVN: r167301
2010-11-25re PR middle-end/46637 (SIGSEGV in if_then_else_cond - too deep recursion)Jakub Jelinek1-2/+4
PR middle-end/46637 * combine.c (try_combine): When substing i2dest for i2src, pass 1 as last argument even if i0_feeds_i1_n && i1_feeds_i2_n && i0dest_in_i0src. * gcc.c-torture/compile/pr46637.c: New test. From-SVN: r167148
2010-11-17re PR rtl-optimization/46440 (ICE: in rtl_verify_flow_info, at cfgrtl.c:2165 ↵Jakub Jelinek1-1/+19
with -fstack-protector-all -fno-tree-dominator-opts -fno-tree-fre) PR rtl-optimization/46440 * combine.c (update_cfg_for_uncondjump): When changing an indirect jump into unconditional jump, remove BARRIERs from bb's footer. * gcc.dg/pr46440.c: New test. From-SVN: r166867
2010-11-16re PR rtl-optimization/46490 (ACATS c460007 fails at -O2 or above)Eric Botcazou1-3/+3
PR rtl-optimization/46490 * combine.c (expand_compound_operation): Fix thinko. From-SVN: r166830
2010-11-03combine.c (try_combine): Fix formatting issues, improve comments and fix a ↵Eric Botcazou1-19/+29
pasto. * combine.c (try_combine): Fix formatting issues, improve comments and fix a pasto. From-SVN: r166263
2010-11-03re PR rtl-optimization/46034 (internal compiler error: segmentation fault)Jakub Jelinek1-4/+9
PR rtl-optimization/46034 PR rtl-optimization/46212 PR rtl-optimization/46248 * combine.c (try_combine): If added_sets_2 where i0dest_in_i0src and i0 feeds i1 and i1 feeds i2 or i0 feeds i2, make a copy of i1src before i0dest -> i0src substitution and pass 1 instead of 0 as last argument to subst on i2pat. * gcc.c-torture/compile/pr46034.c: New test. * gcc.c-torture/compile/pr46248.c: New test. * gcc.dg/pr46212.c: New test. From-SVN: r166231
2010-10-28combine.c (set_nonzero_bits_and_sign_copies): Use unsigned arithmetics in ↵Eric Botcazou1-110/+112
masking operations. * combine.c (set_nonzero_bits_and_sign_copies): Use unsigned arithmetics in masking operations. (contains_muldiv): Likewise. (try_combine): Likewise. (find_split_point): Likewise. (combine_simplify_rtx): Likewise. (simplify_if_then_else): Likewise. (simplify_set): Likewise. (expand_compound_operation): Likewise. (expand_field_assignment): Likewise. (make_extraction): Likewise. (extract_left_shift): Likewise. (make_compound_operation): Likewise. (force_to_mode): Likewise. (make_field_assignment): Likewise. (reg_nonzero_bits_for_combine): Likewise. (simplify_shift_const_1): Likewise. (simplify_comparison): Likewise. From-SVN: r166027
2010-10-25combine.c (try_combine): If insns need to be kept around...Jie Zhang1-0/+12
* combine.c (try_combine): If insns need to be kept around, check that they can be copied in the merged instruction. testsuite/ g++.dg/opt/combine.c: New test. From-SVN: r165911
2010-10-19re PR rtl-optimization/45966 (Incorrect combiner transformation.)Bernd Schmidt1-0/+2
PR rtl-optimization/45966 * combine.c (try_combine): If added_sets_2, deal with the case where i0 feeds i1 and i1 feeds i2. From-SVN: r165674
2010-10-06re PR rtl-optimization/45394 (gnat fails to build on s390, trunk 20100918)Eric Botcazou1-59/+37
PR rtl-optimization/45394 * combine.c (cleanup_auto_inc_dec): Remove AFTER parameter and adjust. (struct rtx_subst_pair): Remove AFTER field. (propagate_for_debug_subst): Adjust call to cleanup_auto_inc_dec. (propagate_for_debug): Remove MOVE parameter and adjust. (try_combine): In the special case where I2 is a PARALLEL, combine only destinations of SETs and set I2SRC to the I2 source. Adjust calls to propagate_for_debug throughout. * reload1.c (eliminate_regs_1) <ASM_OPERANDS>: Do not abort for debug insns. From-SVN: r165030
2010-09-29optc-gen.awk: Generate global_options initializer instead of individual ↵Joseph Myers1-3/+3
variables. gcc: * optc-gen.awk: Generate global_options initializer instead of individual variables. Add x_ prefix to names of structure members. * opth-gen.awk: Generate gcc_options structure. Add x_ prefix to names of structure members. * doc/tm.texi.in (HARD_FRAME_POINTER_IS_FRAME_POINTER, HARD_FRAME_POINTER_IS_ARG_POINTER): Document. * doc/tm.texi: Regenerate. * alias.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER * builtins.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER. * c-parser.c (disable_extension_diagnostics, restore_extension_diagnostics): Update names of cpp_options members. * combine.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER * common.opt (fcompare-debug-second): Don't use Var. * config/alpha/alpha.h (target_flags): Remove. * config/arm/arm.h (HARD_FRAME_POINTER_IS_FRAME_POINTER, HARD_FRAME_POINTER_IS_ARG_POINTER): Define. * config/bfin/bfin.h (target_flags): Remove. * config/cris/cris.h (target_flags): Remove. * config/i386/i386-c.c (ix86_pragma_target_parse): Update names of cl_target_option members. * config/i386/i386.c (ix86_force_align_arg_pointer): Remove. (ix86_function_specific_print, ix86_valid_target_attribute_tree, ix86_can_inline_p): Update names of cl_target_option members. * config/i386/i386.h (ix86_isa_flags): Remove. * config/lm32/lm32.h (target_flags): Remove. * config/mcore/mcore.h (mcore_stack_increment): Remove. * config/mcore/mcore.md (addsi3): Remove extern declaration of flag_omit_frame_pointer. * config/mep/mep.h (target_flags): Remove. * config/mips/mips.h (HARD_FRAME_POINTER_IS_FRAME_POINTER, HARD_FRAME_POINTER_IS_ARG_POINTER): Define. * config/mmix/mmix.h (target_flags): Remove. * config/rs6000/rs6000.h (rs6000_xilinx_fpu, flag_pic, flag_expensive_optimizations): Remove. * config/s390/s390.h (flag_pic): Remove. * config/score/score-conv.h (target_flags): Remove. * config/sh/sh.h (sh_fixed_range_str): Remove. * config/spu/spu.h (target_flags, spu_fixed_range_string): Remove. * dbxout.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER * df-scan.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER. * diagnostic.c (diagnostic_initialize): Update names of diagnostic_context members. * diagnostic.h (diagnostic_context): Rename inhibit_warnings and warn_system_headers. (diagnostic_report_warnings_p): Update for new names. * dwarf2out.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER * emit-rtl.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER and HARD_FRAME_POINTER_IS_ARG_POINTER. * flags.h (flag_compare_debug): Declare. * ira.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER * opts.c (flag_compare_debug): Define. (common_handle_option): Update names of diagnostic_context members. Handle -fcompare-debug-second. (fast_math_flags_struct_set_p): Update names of cl_optimization members. * reginfo.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER. * regrename.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER. * reload.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER. * reload1.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER. * resource.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER. * rtl.h (HARD_FRAME_POINTER_IS_FRAME_POINTER, HARD_FRAME_POINTER_IS_ARG_POINTER): Define and use. * sel-sched.c: Use HARD_FRAME_POINTER_IS_FRAME_POINTER * stmt.c: Use HARD_FRAME_POINTER_IS_ARG_POINTER. gcc/c-family: * c-common.c (c_cpp_error): Update names of diagnostic_context members. * c-cppbuiltin.c (c_cpp_builtins_optimize_pragma): Update names of cl_optimization members. * c-opts.c (warning_as_error_callback, c_common_handle_option, sanitize_cpp_opts, finish_options): Update names of cpp_options members. gcc/fortran: * cpp.c (cpp_define_builtins): Update names of gfc_option_t members. (gfc_cpp_post_options): Update names of cpp_options members. (cb_cpp_error): Update names of diagnostic_context members. * f95-lang.c (gfc_init_builtin_functions): Update names of gfc_option_t members. * gfortran.h (gfc_option_t): Rename warn_conversion and flag_openmp. * intrinsic.c (gfc_convert_type_warn): Update names of gfc_option_t members. * options.c (gfc_init_options, gfc_post_options, set_Wall, gfc_handle_option): Update names of gfc_option_t members. * parse.c (next_free, next_fixed): Update names of gfc_option_t members. * scanner.c (pedantic): Remove extern declaration. (skip_free_comments, skip_fixed_comments, include_line): Update names of gfc_option_t members. * trans-decl.c (gfc_generate_function_code): Update names of gfc_option_t members. gcc/java: * java-tree.h (flag_filelist_file, flag_assert, flag_jni, flag_force_classes_archive_check, flag_redundant, flag_newer, flag_use_divide_subroutine, flag_use_atomic_builtins, flag_use_boehm_gc, flag_hash_synchronization, flag_check_references, flag_optimize_sci, flag_indirect_classes, flag_indirect_dispatch, flag_store_check, flag_reduced_reflection): Remove. * jcf-dump.c (flag_newer): Remove. * jcf.h (quiet_flag): Remove. * parse.h (quiet_flag): Remove. libcpp: * include/cpplib.h (cpp_options): Rename warn_deprecated, warn_traditional, warn_long_long and pedantic. * directives.c (directive_diagnostics, _cpp_handle_directive): Update names of cpp_options members. * expr.c (cpp_classify_number, eval_token): Update names of cpp_options members. * init.c (cpp_create_reader, post_options): Update names of cpp_options members. * internal.h (CPP_PEDANTIC, CPP_WTRADITIONAL): Update names of cpp_options members. * macro.c (parse_params): Update names of cpp_options members. From-SVN: r164723
2010-09-20re PR rtl-optimization/45695 (-O1 wrong-code by cmove)Jakub Jelinek1-52/+24
PR rtl-optimization/45695 * combine.c (try_combine): When splitting a two set pattern, make sure the pattern which will be put into i2 doesn't use REGs or MEMs set by insns in between i2 and i3. * gcc.c-torture/execute/pr45695.c: New test. From-SVN: r164431
2010-09-13re PR rtl-optimization/45617 (optimize bit shift+compare at RTL level)Jakub Jelinek1-13/+26
PR rtl-optimization/45617 * combine.c (simplify_comparison): Optimize (X >> N) {>,>=,<,<=} C even if low N bits of X aren't known to be zero. * gcc.target/i386/pr45617.c: New test. From-SVN: r164257
2010-09-06combine.c (try_combine): Set subst_low_luid to i0.Andreas Krebbel1-1/+1
2010-09-06 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * combine.c (try_combine): Set subst_low_luid to i0. 2010-09-06 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * gcc.dg/20100906-1.c: New testcase. From-SVN: r163917
2010-09-02target.def (class_likely_spilled_p): New hook.Anatoly Sokolov1-7/+7
* target.def (class_likely_spilled_p): New hook. * doc/tm.texi.in (TARGET_CLASS_LIKELY_SPILLED_P): Document. * doc/tm.texi: Regenerate. * targhooks.c (default_class_likely_spilled_p): New function. * targhooks.h (default_class_likely_spilled_p): Declare. * regs.h (CLASS_LIKELY_SPILLED_P): Remove. * combine.c: (cant_combine_insn_p, likely_spilled_retval_p): Use TARGET_CLASS_LIKELY_SPILLED_P target hook. Use HARD_REGISTER_P macro. Use fixed_reg_set instead of fixed_regs. * cse.c (hash_rtx_cb): Use TARGET_CLASS_LIKELY_SPILLED_P target hook. * calls.c (avoid_likely_spilled_reg): Ditto. * ira-conflicts.c: (ira_build_conflicts): Ditto. * ira.c (update_equiv_regs): Ditto. * mode-switching.c (create_pre_exit): Ditto. * regmove.c (find_matches): Ditto. (regclass_compatible_p): Use TARGET_CLASS_LIKELY_SPILLED_P target hook. * reload.c (SMALL_REGISTER_CLASS_P): Remove macro. (small_register_class_p): New inline function. (push_secondary_reload, find_reusable_reload, find_reloads): Use small_register_class_p instead of SMALL_REGISTER_CLASS_P. * config/i386/i386.h (CLASS_LIKELY_SPILLED_P): Remove. * config/i386/i386.c (ix86_class_likely_spilled_p): New. (TARGET_CLASS_LIKELY_SPILLED_P): Define. From-SVN: r163779
2010-08-25re PR rtl-optimization/44858 (likely integer wrong code bug)Jakub Jelinek1-1/+52
PR rtl-optimization/44858 * combine.c (try_combine): If recog_for_combine added CLOBBERs to newi2pat, make sure they don't affect newpat. * gcc.c-torture/execute/pr44858.c: New test. From-SVN: r163552
2010-08-25re PR rtl-optimization/45400 (XBMC AudioEngine Compilation C++ Internal ↵Jakub Jelinek1-1/+3
Compiler Error /w Optimization) PR rtl-optimization/45400 * combine.c (simplify_shift_const_1) <case SUBREG>: Only use SUBREG_REG if both modes are of MODE_INT class. * g++.dg/other/i386-8.C: New test. From-SVN: r163551
2010-08-25combine.c (find_split_point): Undo canonicalization of multiply-add to ↵Bernd Schmidt1-0/+17
(minus x (mult)) when... * combine.c (find_split_point): Undo canonicalization of multiply-add to (minus x (mult)) when it seems likely that this will increase the chances of a split. * gcc.target/i386/combine-mul.c: New test. From-SVN: r163547
2010-08-25re PR middle-end/45355 (FAIL: gcc.c-torture/compile/pr43164.c)Bernd Schmidt1-1/+1
PR middle-end/45355 * combine.c (try_combine): Use reg_overlap_mentioned_p rather than dead_or_set_p when computing i0_feeds_i2_n. From-SVN: r163546
2010-08-20vec.h (FOR_EACH_VEC_ELT): Define.Nathan Froyd1-1/+1
gcc/ * vec.h (FOR_EACH_VEC_ELT): Define. * c-decl.c: Use it. * cfgloop.c: Likewise. * cfgloopmanip.c: Likewise. * cgraph.c: Likewise. * cgraphunit.c: Likewise. * combine.c: Likewise. * config/bfin/bfin.c: Likewise. * config/mips/mips.c: Likewise. * config/rs6000/rs6000.c: Likewise. * dbxout.c: Likewise. * df-scan.c: Likewise. * dominance.c: Likewise. * dse.c: Likewise. * dwarf2out.c: Likewise. * except.c: Likewise. * expr.c: Likewise. * function.c: Likewise. * gcse.c: Likewise. * genattr.c: Likewise. * ggc-common.c: Likewise. * gimplify.c: Likewise. * graphite-blocking.c: Likewise. * graphite-clast-to-gimple.c: Likewise. * graphite-dependences.c: Likewise. * graphite-interchange.c: Likewise. * graphite-poly.c: Likewise. * graphite-scop-detection.c: Likewise. * graphite-sese-to-poly.c: Likewise. * graphite.c: Likewise. * haifa-sched.c: Likewise. * ifcvt.c: Likewise. * implicit-zee.c: Likewise. * ipa-prop.c: Likewise. * ipa-struct-reorg.c: Likewise. * ipa.c: Likewise. * ira-build.c: Likewise. * ira-color.c: Likewise. * ira-emit.c: Likewise. * lambda-code.c: Likewise. * loop-invariant.c: Likewise. * loop-unroll.c: Likewise. * lower-subreg.c: Likewise. * lto-cgraph.c: Likewise. * lto-opts.c: Likewise. * lto-streamer-in.c: Likewise. * lto-streamer-out.c: Likewise. * lto-streamer.c: Likewise. * lto-symtab.c: Likewise. * matrix-reorg.c: Likewise. * opts.c: Likewise. * predict.c: Likewise. * print-tree.c: Likewise. * sdbout.c: Likewise. * sel-sched-dump.c: Likewise. * sel-sched-ir.c: Likewise. * sel-sched.c: Likewise. * sese.c: Likewise. * stor-layout.c: Likewise. * tree-cfg.c: Likewise. * tree-cfgcleanup.c: Likewise. * tree-chrec.c: Likewise. * tree-data-ref.c: Likewise. * tree-emutls.c: Likewise. * tree-inline.c: Likewise. * tree-into-ssa.c: Likewise. * tree-loop-distribution.c: Likewise. * tree-loop-linear.c: Likewise. * tree-mudflap.c: Likewise. * tree-outof-ssa.c: Likewise. * tree-parloops.c: Likewise. * tree-predcom.c: Likewise. * tree-pretty-print.c: Likewise. * tree-scalar-evolution.c: Likewise. * tree-ssa-live.c: Likewise. * tree-ssa-loop-im.c: Likewise. * tree-ssa-loop-ivcanon.c: Likewise. * tree-ssa-loop-ivopts.c: Likewise. * tree-ssa-loop-manip.c: Likewise. * tree-ssa-loop-niter.c: Likewise. * tree-ssa-loop-prefetch.c: Likewise. * tree-ssa-phiprop.c: Likewise. * tree-ssa-pre.c: Likewise. * tree-ssa-reassoc.c: Likewise. * tree-ssa-sccvn.c: Likewise. * tree-ssa-structalias.c: Likewise. * tree-ssa.c: Likewise. * tree-vect-data-refs.c: Likewise. * tree-vect-loop-manip.c: Likewise. * tree-vect-loop.c: Likewise. * tree-vect-patterns.c: Likewise. * tree-vect-slp.c: Likewise. * tree-vect-stmts.c: Likewise. * tree-vrp.c: Likewise. * tree.c: Likewise. * value-prof.c: Likewise. * var-tracking.c: Likewise. * varasm.c: Likewise. * vmsdbgout.c: Likewise. gcc/ada/ * gcc-interface/decl.c: Use FOR_EACH_VEC_ELT. * gcc-interface/trans.c: Likewise. * gcc-interface/utils.c: Likewise. gcc/c-family/ * c-common.c: Use FOR_EACH_VEC_ELT. * c-gimplify.c: Likewise. * c-pragma.c: Likewise. gcc/cp/ * call.c: Use FOR_EACH_VEC_ELT. * class.c: Likewise. * decl.c: Likewise. * decl2.c: Likewise. * error.c: Likewise. * except.c: Likewise. * mangle.c: Likewise. * method.c: Likewise. * name-lookup.c: Likewise. * parser.c: Likewise. * pt.c: Likewise. * repo.c: Likewise. * semantics.c: Likewise. * typeck2.c: Likewise. gcc/fortran/ * trans-openmp.c: Use FOR_EACH_VEC_ELT. gcc/java/ * class.c: Use FOR_EACH_VEC_ELT. * expr.c: Likewise. * jcf-parse.c: Likewise. * resource.c: Likewise. gcc/lto/ * lto.c: Use FOR_EACH_VEC_ELT. From-SVN: r163401
2010-08-19re PR bootstrap/45350 (Failed to bootstrap on Linux/ia64)Bernd Schmidt1-3/+3
PR bootstrap/45350 * combine.c (try_combine): Initialize i1_is_used and i2_is_used. Fix a comment. From-SVN: r163389
2010-08-19re PR tree-optimization/42172 (inefficient bit fields assignments)Bernd Schmidt1-147/+442
PR target/42172 * combine.c (combine_validate_cost): New arg I0. All callers changed. Take its cost into account if nonnull. (insn_a_feeds_b): New static function. (combine_instructions): Look for four-insn combinations. (can_combine_p): New args PRED2, SUCC2. All callers changed. Take them into account when computing all_adjacent and looking for other uses. (combinable_i3pat): New args I0DEST, I0_NOT_IN_SRC. All callers changed. Treat them like I1DEST and I1_NOT_IN_SRC. (try_combine): New arg I0. Handle four-insn combinations. (distribute_notes): New arg ELIM_I0. All callers changed. Treat it like ELIM_I1. From-SVN: r163383
2010-08-10re PR middle-end/45182 (Failed to build SPEC CPU 2000/2006)Bernd Schmidt1-5/+7
PR middle-end/45182 * combine.c (make_compound_operation): Don't try to convert shifts into multiplications for modes that aren't SCALAR_INT_MODE_P. PR middle-end/45182 * gcc.c-torture/compile/pr45182.c: New test. From-SVN: r163057
2010-08-05Replace exact_log2(x & -x) in favor of more direct computation.Richard Henderson1-1/+1
* toplev.h (ctz_hwi, clz_hwi, ffs_hwi): New. (floor_log2): Use clz_hwi. (exact_log2): Use ctz_hwi. * toplev.c (ctz_hwi, clz_hwi, ffs_hwi): New. * builtins.c (fold_builtin_bitop): Use them. * simplify-rtx.c (simplify_const_unary_operation): Likewise. * combine.c (get_pos_from_mask): Use ctz_hwi. * double-int.c (double_int_ctz): Likewise. * explow.c (force_reg): Likewise. * tree.h (SET_DECL_OFFSET_ALIGN): Use ffs_hwi. From-SVN: r162920
2010-08-03simplify-rtx.c (simplify_binary_operation_1): Try to simplify away NEG as ↵Bernd Schmidt1-3/+70
operand of a MULT by merging it with the other operand. * simplify-rtx.c (simplify_binary_operation_1): Try to simplify away NEG as operand of a MULT by merging it with the other operand. * combine.c (make_compound_operation): Use trunc_int_for_mode when generating a MULT with constant. Canonicalize PLUS and MINUS involving MULT. * config/arm/constraints.md (M): Examine only 32 bits of a HOST_WIDE_INT. * config/arm/predicates.md (power_of_two_operand): Likewise. From-SVN: r162849
2010-07-30re PR debug/45055 (another -fcompare-debug failure with uninitialised read ↵Jakub Jelinek1-23/+0
in walk_gimple_stmt) PR debug/45055 PR rtl-optimization/45137 * rtl.h (prev_nonnote_nondebug_insn, next_nonnote_nondebug_insn): New prototypes. * emit-rtl.c (prev_nonnote_nondebug_insn, next_nonnote_nondebug_insn): New functions. * combine.c (next_nonnote_nondebug_insn): Removed. * ifcvt.c (noce_process_if_block): Use prev_nonnote_nondebug_insn. * haifa-sched.c (queue_to_ready): Use next_nonnote_nondebug_insn. * sched-deps.c (sched_analyze_insn): Likewise. (fixup_sched_groups, deps_start_bb): Use prev_nonnote_nondebug_insn. * rtlanal.c (canonicalize_condition): Likewise. * postreload.c (reload_combine_recognize_pattern): Likewise. (reload_cse_move2add): Use next_nonnote_nondebug_insn. * gcc.dg/pr45055.c: New test. From-SVN: r162714