1. 04 Oct, 2018 1 commit
    • Report vectorization problems via a new opt_problem class · f4ebbd24
      This is v3 of the patch; previous versions were:
        v2: https://gcc.gnu.org/ml/gcc-patches/2018-07/msg00446.html
        v1: https://gcc.gnu.org/ml/gcc-patches/2018-06/msg01462.html
      
      This patch introduces a class opt_problem, along with wrapper
      classes for bool (opt_result) and for pointers (e.g. opt_loop_vec_info
      for loop_vec_info).
      
      opt_problem instances are created when an optimization problem
      is encountered, but only if dump_enabled_p.  They are manually
      propagated up the callstack, and are manually reported at the
      "top level" of an optimization if dumping is enabled, to give the user
      a concise summary of the problem *after* the failure is reported.
      In particular, the location of the problematic statement is
      captured and emitted, rather than just the loop's location.
      
      For example:
      
      no-vfa-vect-102.c:24:3: missed: couldn't vectorize loop
      no-vfa-vect-102.c:27:7: missed: statement clobbers memory: __asm__ __volatile__("" :  :  : "memory");
      
      Changed in v3:
      * This version bootstraps and passes regression testing (on
        x86_64-pc-linux-gnu).
      * added selftests, to exercise the opt_problem machinery
      * removed the "bool to opt_result" ctor, so that attempts to
        use e.g. return a bool from an opt_result-returning function
        will fail at compile time
      * use formatted printing within opt_problem ctor to replace the
        various dump_printf_loc calls
      * dropped i18n
      * changed the sense of vect_analyze_data_ref_dependence's return
        value (see the ChangeLog)
      * add MSG_PRIORITY_REEMITTED, so that -fopt-info can show the
        messages, without them messing up the counts in scan-tree-dump-times
        in DejaGnu tests
      
      gcc/ChangeLog:
      	* Makefile.in (OBJS): Add opt-problem.o.
      	* dump-context.h: Include "selftest.h.
      	(selftest::temp_dump_context): New forward decl.
      	(class dump_context): Make friend of class
      	selftest::temp_dump_context.
      	(dump_context::dump_loc_immediate): New decl.
      	(class dump_pretty_printer): Move here from dumpfile.c.
      	(class temp_dump_context): Move to namespace selftest.
      	(temp_dump_context::temp_dump_context): Add param
      	"forcibly_enable_dumping".
      	(selftest::verify_dumped_text):
      	(ASSERT_DUMPED_TEXT_EQ): Move here from dumpfile.c.
      	(selftest::verify_item):
      	(ASSERT_IS_TEXT): Move here from dumpfile.c.
      	(ASSERT_IS_TREE): Likewise.
      	(ASSERT_IS_GIMPLE): Likewise.
      	* dumpfile.c (dump_context::dump_loc): Move immediate dumping
      	to...
      	(dump_context::dump_loc_immediate): ...this new function.
      	(class dump_pretty_printer): Move to dump-context.h.
      	(dump_switch_p_1): Don't enable MSG_PRIORITY_REEMITTED.
      	(opt_info_switch_p_1): Enable MSG_PRIORITY_REEMITTED.
      	(temp_dump_context::temp_dump_context): Move to "selftest"
      	namespace.  Add param "forcibly_enable_dumping", and use it to
      	conditionalize the use of m_pp;
      	(selftest::verify_dumped_text): Make non-static.
      	(ASSERT_DUMPED_TEXT_EQ): Move to dump-context.h.
      	(selftest::verify_item): Make non-static.
      	(ASSERT_IS_TEXT): Move to dump-context.h.
      	(ASSERT_IS_TREE): Likewise.
      	(ASSERT_IS_GIMPLE): Likewise.
      	(selftest::test_capture_of_dump_calls): Pass "true" for new
      	param of temp_dump_context.
      	* dumpfile.h (enum dump_flag): Add MSG_PRIORITY_REEMITTED, adding
      	it to MSG_ALL_PRIORITIES.  Update values of TDF_COMPARE_DEBUG and
      	TDF_COMPARE_DEBUG.
      	* opt-problem.cc: New file.
      	* opt-problem.h: New file.
      	* optinfo-emit-json.cc
      	(selftest::test_building_json_from_dump_calls): Pass "true" for
      	new param of temp_dump_context.
      	* optinfo.cc (optinfo_kind_to_dump_flag): New function.
      	(optinfo::emit_for_opt_problem): New function.
      	(optinfo::emit): Clarity which emit_item is used.
      	* optinfo.h (optinfo::get_dump_location): New accessor.
      	(optinfo::emit_for_opt_problem): New decl.
      	(optinfo::emit): Make const.
      	* selftest-run-tests.c (selftest::run_tests): Call
      	selftest::opt_problem_cc_tests.
      	* selftest.h (selftest::opt_problem_cc_tests): New decl.
      	* tree-data-ref.c (dr_analyze_innermost): Convert return type from
      	bool to opt_result, converting fprintf messages to
      	opt_result::failure_at calls.  Add "stmt" param for use by the
      	failure_at calls.
      	(create_data_ref): Pass "stmt" to the dr_analyze_innermost call.
      	(runtime_alias_check_p): Convert return type from bool to
      	opt_result, converting dump_printf calls to
      	opt_result::failure_at, using the statement DDR_A for their
      	location.
      	(find_data_references_in_stmt): Convert return type from bool to
      	opt_result, converting "return false" to opt_result::failure_at
      	with a new message.
      	* tree-data-ref.h: Include "opt-problem.h".
      	(dr_analyze_innermost): Convert return type from bool to opt_result,
      	and add a const gimple * param.
      	(find_data_references_in_stmt): Convert return type from bool to
      	opt_result.
      	(runtime_alias_check_p): Likewise.
      	* tree-predcom.c (find_looparound_phi): Pass "init_stmt" to
      	dr_analyze_innermost.
      	* tree-vect-data-refs.c (vect_mark_for_runtime_alias_test):
      	Convert return type from bool to opt_result, adding a message for
      	the PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS zero case.
      	(vect_analyze_data_ref_dependence): Convert return type from bool
      	to opt_result.  Change sense of return type from "false"
      	effectively meaning "no problems" to "false" meaning a problem,
      	so that "return false" becomes "return opt_result::success".
      	Convert "return true" calls to opt_result::failure_at, using
      	the location of statement A rather than vect_location.
      	(vect_analyze_data_ref_dependences): Convert return type from bool
      	to opt_result.
      	(verify_data_ref_alignment): Likewise, converting dump_printf_loc
      	calls to opt_result::failure_at, using the stmt location rather
      	than vect_location.
      	(vect_verify_datarefs_alignment): Convert return type from bool
      	to opt_result.
      	(vect_enhance_data_refs_alignment): Likewise.  Split local "stat"
      	into multiple more-tightly-scoped copies.
      	(vect_analyze_data_refs_alignment): Convert return type from bool
      	to opt_result.
      	(vect_analyze_data_ref_accesses): Likewise, converting a
      	"return false" to a "return opt_result::failure_at", adding a
      	new message.
      	(vect_prune_runtime_alias_test_list): Convert return type from
      	bool to opt_result, converting dump_printf_loc to
      	opt_result::failure_at.  Add a %G to show the pertinent statement,
      	and use the stmt's location rather than vect_location.
      	(vect_find_stmt_data_reference): Convert return type from
      	bool to opt_result, converting dump_printf_loc to
      	opt_result::failure_at, using stmt's location.
      	(vect_analyze_data_refs):  Convert return type from bool to
      	opt_result.  Convert "return false" to "return
      	opt_result::failure_at", adding messages as needed.
      	* tree-vect-loop.c (vect_determine_vf_for_stmt_1): Convert return
      	type from bool to opt_result.
      	(vect_determine_vf_for_stmt): Likewise.
      	(vect_determine_vectorization_factor): Likewise, converting
      	dump_printf_loc to opt_result::failure_at, using location of phi
      	rather than vect_location.
      	(vect_analyze_loop_form_1): Convert return type from bool to
      	opt_result, converting dump_printf_loc calls, retaining the use of
      	vect_location.
      	(vect_analyze_loop_form): Convert return type from loop_vec_info
      	to opt_loop_vec_info.
      	(vect_analyze_loop_operations): Convert return type from bool to
      	opt_result, converting dump_printf_loc calls, using the location
      	of phi/stmt rather than vect_location where available.  Convert
      	various "return false" to "return opt_result::failure_at" with
      	"unsupported phi" messages.
      	(vect_get_datarefs_in_loop): Convert return type from bool to
      	opt_result.  Add a message for the
      	PARAM_LOOP_MAX_DATAREFS_FOR_DATADEPS failure.
      	(vect_analyze_loop_2): Convert return type from bool to
      	opt_result.  Ensure "ok" is set to a opt_result::failure_at before
      	each "goto again;", adding new messages where needed.
      	Add "unsupported grouped {store|load}" messages.
      	(vect_analyze_loop): Convert return type from loop_vec_info to
      	opt_loop_vec_info.
      	* tree-vect-slp.c (vect_analyze_slp): Convert return type from
      	bool to opt_result.
      	* tree-vect-stmts.c (process_use): Likewise, converting
      	dump_printf_loc call and using stmt location, rather than
      	vect_location.
      	(vect_mark_stmts_to_be_vectorized): Likeise.
      	(vect_analyze_stmt): Likewise, adding a %G.
      	(vect_get_vector_types_for_stmt): Convert return type from bool to
      	opt_result, converting dump_printf_loc calls and using stmt
      	location, rather than vect_location.
      	(vect_get_mask_type_for_stmt): Convert return type from tree to
      	opt_tree, converting dump_printf_loc calls and using stmt location.
      	* tree-vectorizer.c: Include "opt-problem.h.
      	(try_vectorize_loop_1): Flag "Analyzing loop at" dump message as
      	MSG_PRIORITY_INTERNALS.  Convert local "loop_vinfo" from
      	loop_vec_info to opt_loop_vec_info.  If if fails, and dumping is
      	enabled, use it to report at the top level "couldn't vectorize
      	loop" followed by the problem.
      	* tree-vectorizer.h (opt_loop_vec_info): New typedef.
      	(vect_mark_stmts_to_be_vectorized): Convert return type from bool
      	to opt_result.
      	(vect_analyze_stmt): Likewise.
      	(vect_get_vector_types_for_stmt): Likewise.
      	(tree vect_get_mask_type_for_stmt): Likewise.
      	(vect_analyze_data_ref_dependences): Likewise.
      	(vect_enhance_data_refs_alignment): Likewise.
      	(vect_analyze_data_refs_alignment): Likewise.
      	(vect_verify_datarefs_alignment): Likewise.
      	(vect_analyze_data_ref_accesses): Likewise.
      	(vect_prune_runtime_alias_test_list): Likewise.
      	(vect_find_stmt_data_reference): Likewise.
      	(vect_analyze_data_refs): Likewise.
      	(vect_analyze_loop): Convert return type from loop_vec_info to
      	opt_loop_vec_info.
      	(vect_analyze_loop_form): Likewise.
      	(vect_analyze_slp): Convert return type from bool to opt_result.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/vect/nodump-vect-opt-info-2.c: New test.
      	* gcc.dg/vect/vect-alias-check-4.c: Add "-fopt-info-vec-all" to
      	dg-additional-options.  Add dg-message and dg-missed directives
      	to verify that -fopt-info messages are written at the correct
      	locations.
      
      From-SVN: r264852
      David Malcolm committed
  2. 24 Mar, 2018 1 commit
    • Use SCEV information when aligning for vectorisation (PR 84005) · a199d5e7
      This PR is another regression caused by the removal of the simple_iv
      check in dr_analyze_innermost for BB analysis.  Without splitting out
      the step, we weren't able to find an underlying object whose alignment
      could be increased.
      
      As with PR81635, I think the simple_iv was only handling one special
      case of something that ought to be more general.  The more general
      thing here is that if the address can be analysed as a scalar
      evolution, and if all updates preserve alignment N, it's possible
      to align the address to N by increasing the alignment of the base
      object to N.  That applies also to outer loops, and to both loop
      and BB analysis.
      
      I wasn't sure where the new functions ought to live, but tree-data-ref.c
      seemed OK since (a) that already does scev analysis on addresses and
      (b) you'd want to use dr_analyze_innermost first if you were analysing
      a reference.
      
      2018-03-24  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	PR tree-optimization/84005
      	* tree-data-ref.h (get_base_for_alignment): Declare.
      	* tree-data-ref.c (get_base_for_alignment_1): New function.
      	(get_base_for_alignment): Likewise.
      	* tree-vect-data-refs.c (vect_compute_data_ref_alignment): Use
      	get_base_for_alignment to find a suitable base object, instead
      	of always using drb->base_address.
      
      gcc/testsuite/
      	PR tree-optimization/84005
      	* gcc.dg/vect/bb-slp-1.c: Make sure there is no message about
      	failing to force the alignment.
      
      From-SVN: r258833
      Richard Sandiford committed
  3. 13 Jan, 2018 1 commit
    • Support for aliasing with variable strides · a57776a1
      This patch adds runtime alias checks for loops with variable strides,
      so that we can vectorise them even without a restrict qualifier.
      There are several parts to doing this:
      
      1) For accesses like:
      
           x[i * n] += 1;
      
         we need to check whether n (and thus the DR_STEP) is nonzero.
         vect_analyze_data_ref_dependence records values that need to be
         checked in this way, then prune_runtime_alias_test_list records a
         bounds check on DR_STEP being outside the range [0, 0].
      
      2) For accesses like:
      
           x[i * n] = x[i * n + 1] + 1;
      
         we simply need to test whether abs (n) >= 2.
         prune_runtime_alias_test_list looks for cases like this and tries
         to guess whether it is better to use this kind of check or a check
         for non-overlapping ranges.  (We could do an OR of the two conditions
         at runtime, but that isn't implemented yet.)
      
      3) Checks for overlapping ranges need to cope with variable strides.
         At present the "length" of each segment in a range check is
         represented as an offset from the base that lies outside the
         touched range, in the same direction as DR_STEP.  The length
         can therefore be negative and is sometimes conservative.
      
         With variable steps it's easier to reaon about if we split
         this into two:
      
           seg_len:
             distance travelled from the first iteration of interest
             to the last, e.g. DR_STEP * (VF - 1)
      
           access_size:
             the number of bytes accessed in each iteration
      
         with access_size always being a positive constant and seg_len
         possibly being variable.  We can then combine alias checks
         for two accesses that are a constant number of bytes apart by
         adjusting the access size to account for the gap.  This leaves
         the segment length unchanged, which allows the check to be combined
         with further accesses.
      
         When seg_len is positive, the runtime alias check has the form:
      
              base_a >= base_b + seg_len_b + access_size_b
           || base_b >= base_a + seg_len_a + access_size_a
      
         In many accesses the base will be aligned to the access size, which
         allows us to skip the addition:
      
              base_a > base_b + seg_len_b
           || base_b > base_a + seg_len_a
      
         A similar saving is possible with "negative" lengths.
      
         The patch therefore tracks the alignment in addition to seg_len
         and access_size.
      
      2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree-vectorizer.h (vec_lower_bound): New structure.
      	(_loop_vec_info): Add check_nonzero and lower_bounds.
      	(LOOP_VINFO_CHECK_NONZERO): New macro.
      	(LOOP_VINFO_LOWER_BOUNDS): Likewise.
      	(LOOP_REQUIRES_VERSIONING_FOR_ALIAS): Check lower_bounds too.
      	* tree-data-ref.h (dr_with_seg_len): Add access_size and align
      	fields.  Make seg_len the distance travelled, not including the
      	access size.
      	(dr_direction_indicator): Declare.
      	(dr_zero_step_indicator): Likewise.
      	(dr_known_forward_stride_p): Likewise.
      	* tree-data-ref.c: Include stringpool.h, tree-vrp.h and
      	tree-ssanames.h.
      	(runtime_alias_check_p): Allow runtime alias checks with
      	variable strides.
      	(operator ==): Compare access_size and align.
      	(prune_runtime_alias_test_list): Rework for new distinction between
      	the access_size and seg_len.
      	(create_intersect_range_checks_index): Likewise.  Cope with polynomial
      	segment lengths.
      	(get_segment_min_max): New function.
      	(create_intersect_range_checks): Use it.
      	(dr_step_indicator): New function.
      	(dr_direction_indicator): Likewise.
      	(dr_zero_step_indicator): Likewise.
      	(dr_known_forward_stride_p): Likewise.
      	* tree-loop-distribution.c (data_ref_segment_size): Return
      	DR_STEP * (niters - 1).
      	(compute_alias_check_pairs): Update call to the dr_with_seg_len
      	constructor.
      	* tree-vect-data-refs.c (vect_check_nonzero_value): New function.
      	(vect_preserves_scalar_order_p): New function, split out from...
      	(vect_analyze_data_ref_dependence): ...here.  Check for zero steps.
      	(vect_vfa_segment_size): Return DR_STEP * (length_factor - 1).
      	(vect_vfa_access_size): New function.
      	(vect_vfa_align): Likewise.
      	(vect_compile_time_alias): Take access_size_a and access_b arguments.
      	(dump_lower_bound): New function.
      	(vect_check_lower_bound): Likewise.
      	(vect_small_gap_p): Likewise.
      	(vectorizable_with_step_bound_p): Likewise.
      	(vect_prune_runtime_alias_test_list): Ignore cross-iteration
      	depencies if the vectorization factor is 1.  Convert the checks
      	for nonzero steps into checks on the bounds of DR_STEP.  Try using
      	a bunds check for variable steps if the minimum required step is
      	relatively small. Update calls to the dr_with_seg_len
      	constructor and to vect_compile_time_alias.
      	* tree-vect-loop-manip.c (vect_create_cond_for_lower_bounds): New
      	function.
      	(vect_loop_versioning): Call it.
      	* tree-vect-loop.c (vect_analyze_loop_2): Clear LOOP_VINFO_LOWER_BOUNDS
      	when retrying.
      	(vect_estimate_min_profitable_iters): Account for any bounds checks.
      
      gcc/testsuite/
      	* gcc.dg/vect/bb-slp-cond-1.c: Expect loop vectorization rather
      	than SLP vectorization.
      	* gcc.dg/vect/vect-alias-check-10.c: New test.
      	* gcc.dg/vect/vect-alias-check-11.c: Likewise.
      	* gcc.dg/vect/vect-alias-check-12.c: Likewise.
      	* gcc.dg/vect/vect-alias-check-8.c: Likewise.
      	* gcc.dg/vect/vect-alias-check-9.c: Likewise.
      	* gcc.target/aarch64/sve/strided_load_8.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_1.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_1.h: Likewise.
      	* gcc.target/aarch64/sve/var_stride_1_run.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_2.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_2_run.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_3.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_3_run.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_4.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_4_run.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_5.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_5_run.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_6.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_6_run.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_7.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_7_run.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_8.c: Likewise.
      	* gcc.target/aarch64/sve/var_stride_8_run.c: Likewise.
      	* gfortran.dg/vect/vect-alias-check-1.F90: Likewise.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r256644
      Richard Sandiford committed
  4. 03 Jan, 2018 1 commit
  5. 21 Dec, 2017 1 commit
    • poly_int: prune_runtime_alias_test_list · 079b4a9c
      This patch makes prune_runtime_alias_test_list take the iteration
      factor as a poly_int and tracks polynomial offsets internally
      as well.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree-data-ref.h (prune_runtime_alias_test_list): Take the
      	factor as a poly_uint64 rather than an unsigned HOST_WIDE_INT.
      	* tree-data-ref.c (prune_runtime_alias_test_list): Likewise.
      	Track polynomial offsets.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255936
      Richard Sandiford committed
  6. 13 Oct, 2017 1 commit
    • re PR tree-optimization/82451 ([GRAPHITE] codegen error in get_rename_from_scev) · a68f286c
      2017-10-13  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/82451
      	Revert
      	2017-10-02  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/82355
      	* graphite-isl-ast-to-gimple.c (build_iv_mapping): Also build
      	a mapping for the enclosing loop but avoid generating one for
      	the loop tree root.
      	(copy_bb_and_scalar_dependences): Remove premature codegen
      	error on PHIs in blocks duplicated into multiple places.
      	* graphite-scop-detection.c
      	(scop_detection::stmt_has_simple_data_refs_p): For a loop not
      	in the region use it as loop and nest to analyze the DR in.
      	(try_generate_gimple_bb): Likewise.
      	* graphite-sese-to-poly.c (extract_affine_chrec): Adjust.
      	(add_loop_constraints): For blocks in a loop not in the region
      	create a dimension with a single iteration.
      	* sese.h (gbb_loop_at_index): Remove assert.
      
      	* cfgloop.c (loop_preheader_edge): For the loop tree root
      	return the single successor of the entry block.
      	* graphite-isl-ast-to-gimple.c (graphite_regenerate_ast_isl):
      	Reset the SCEV hashtable and niters.
      	* graphite-scop-detection.c
      	(scop_detection::graphite_can_represent_scev): Add SCOP parameter,
      	assert that we only have POLYNOMIAL_CHREC that vary in loops
      	contained in the region.
      	(scop_detection::graphite_can_represent_expr): Adjust.
      	(scop_detection::stmt_has_simple_data_refs_p): For loops
      	not in the region set loop to NULL.  The nest is now the
      	entry edge to the region.
      	(try_generate_gimple_bb): Likewise.
      	* sese.c (scalar_evolution_in_region): Adjust for
      	instantiate_scev change.
      	* tree-data-ref.h (graphite_find_data_references_in_stmt):
      	Make nest parameter the edge into the region.
      	(create_data_ref): Likewise.
      	* tree-data-ref.c (dr_analyze_indices): Make nest parameter an
      	entry edge into a region and adjust instantiate_scev calls.
      	(create_data_ref): Likewise.
      	(graphite_find_data_references_in_stmt): Likewise.
      	(find_data_references_in_stmt): Pass the loop preheader edge
      	from the nest argument.
      	* tree-scalar-evolution.h (instantiate_scev): Make instantiate_below
      	parameter the edge into the region.
      	(instantiate_parameters): Use the loop preheader edge as entry.
      	* tree-scalar-evolution.c (analyze_scalar_evolution): Handle
      	NULL loop.
      	(get_instantiated_value_entry): Make instantiate_below parameter
      	the edge into the region.
      	(instantiate_scev_name): Likewise.  Adjust dominance checks,
      	when we cannot use loop-based instantiation instantiate by
      	walking use-def chains.
      	(instantiate_scev_poly): Adjust.
      	(instantiate_scev_binary): Likewise.
      	(instantiate_scev_convert): Likewise.
      	(instantiate_scev_not): Likewise.
      	(instantiate_array_ref): Remove.
      	(instantiate_scev_3): Likewise.
      	(instantiate_scev_2): Likewise.
      	(instantiate_scev_1): Likewise.
      	(instantiate_scev_r): Do not blindly handle N-operand trees.
      	Do not instantiate array-refs.  Handle all constants and invariants.
      	(instantiate_scev): Make instantiate_below parameter
      	the edge into the region.
      	(resolve_mixers): Use the loop preheader edge for the region
      	parameter to instantiate_scev_r.
      	* tree-ssa-loop-prefetch.c (determine_loop_nest_reuse): Adjust.
      
      	* gcc.dg/graphite/pr82451.c: New testcase.
      	* gfortran.dg/graphite/id-27.f90: Likewise.
      	* gfortran.dg/graphite/pr82451.f: Likewise.
      
      From-SVN: r253707
      Richard Biener committed
  7. 04 Aug, 2017 3 commits
    • Pool alignment information for common bases · 62c8a2cf
      This patch is a follow-on to the fix for PR81136.  The testcase for that
      PR shows that we can (correctly) calculate different base alignments
      for two data_references but still tell that their misalignments wrt the
      vector size are equal.  This is because we calculate the base alignments
      for each dr individually, without looking at the other drs, and in
      general the alignment we calculate is only guaranteed if the dr's DR_REF
      actually occurs.
      
      This is working as designed, but it does expose a missed opportunity.
      We know that if a vectorised loop is reached, all statements in that
      loop execute at least once, so it should be safe to pool the alignment
      information for all the statements we're vectorising.  The only catch is
      that DR_REFs for masked loads and stores only occur if the mask value is
      nonzero.  For example, in:
      
          struct s __attribute__((aligned(32))) {
            int misaligner;
            int array[N];
          };
      
          int *ptr;
          for (int i = 0; i < n; ++i)
            ptr[i] = c[i] ? ((struct s *) (ptr - 1))->array[i] : 0;
      
      we can only guarantee that ptr points to a "struct s" if at least
      one c[i] is true.
      
      This patch adds a DR_IS_CONDITIONAL_IN_STMT flag to record whether
      the DR_REF is guaranteed to occur every time that the statement
      executes to completion.  It then pools the alignment information
      for references that aren't conditional in this sense.
      
      2017-08-04  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	PR tree-optimization/81136
      	* tree-vectorizer.h: Include tree-hash-traits.h.
      	(vec_base_alignments): New typedef.
      	(vec_info): Add a base_alignments field.
      	(vect_record_base_alignments): Declare.
      	* tree-data-ref.h (data_reference): Add an is_conditional_in_stmt
      	field.
      	(DR_IS_CONDITIONAL_IN_STMT): New macro.
      	(create_data_ref): Add an is_conditional_in_stmt argument.
      	* tree-data-ref.c (create_data_ref): Likewise.  Use it to initialize
      	the is_conditional_in_stmt field.
      	(data_ref_loc): Add an is_conditional_in_stmt field.
      	(get_references_in_stmt): Set the is_conditional_in_stmt field.
      	(find_data_references_in_stmt): Update call to create_data_ref.
      	(graphite_find_data_references_in_stmt): Likewise.
      	* tree-ssa-loop-prefetch.c (determine_loop_nest_reuse): Likewise.
      	* tree-vect-data-refs.c (vect_analyze_data_refs): Likewise.
      	(vect_record_base_alignment): New function.
      	(vect_record_base_alignments): Likewise.
      	(vect_compute_data_ref_alignment): Adjust base_addr and aligned_to
      	for nested statements even if we fail to compute a misalignment.
      	Use pooled base alignments for unconditional references.
      	(vect_find_same_alignment_drs): Compare base addresses instead
      	of base objects.
      	(vect_analyze_data_refs_alignment): Call vect_record_base_alignments.
      	* tree-vect-slp.c (vect_slp_analyze_bb_1): Likewise.
      
      gcc/testsuite/
      	PR tree-optimization/81136
      	* gcc.dg/vect/pr81136.c: Add scan test.
      
      From-SVN: r250870
      Richard Sandiford committed
    • Use base inequality for some vector alias checks · 9adee305
      This patch checks whether two data references x and y cannot
      partially overlap and so are independent whenever &x != &y.
      We can then use this in the vectoriser to optimise alias checks.
      
      gcc/
      2016-08-04  Richard Sandiford  <richard.sandiford@linaro.org>
      
      	* hash-traits.h (pair_hash): New struct.
      	* tree-data-ref.h (data_dependence_relation): Add object_a and
      	object_b fields.
      	(DDR_OBJECT_A, DDR_OBJECT_B): New macros.
      	* tree-data-ref.c (initialize_data_dependence_relation): Initialize
      	DDR_OBJECT_A and DDR_OBJECT_B.
      	* tree-vectorizer.h (vec_object_pair): New type.
      	(_loop_vec_info): Add a check_unequal_addrs field.
      	(LOOP_VINFO_CHECK_UNEQUAL_ADDRS): New macro.
      	(LOOP_REQUIRES_VERSIONING_FOR_ALIAS): Return true if there is an
      	entry in check_unequal_addrs.  Check comp_alias_ddrs instead of
      	may_alias_ddrs.
      	* tree-vect-loop.c (destroy_loop_vec_info): Release
      	LOOP_VINFO_CHECK_UNEQUAL_ADDRS.
      	(vect_analyze_loop_2): Likewise, when restarting.
      	(vect_estimate_min_profitable_iters): Estimate the cost of
      	LOOP_VINFO_CHECK_UNEQUAL_ADDRS.
      	* tree-vect-data-refs.c: Include tree-hash-traits.h.
      	(vect_prune_runtime_alias_test_list): Try to handle conflicts
      	using LOOP_VINFO_CHECK_UNEQUAL_ADDRS, if the data dependence allows.
      	Count such tests in the final summary.
      	* tree-vect-loop-manip.c (chain_cond_expr): New function.
      	(vect_create_cond_for_align_checks): Use it.
      	(vect_create_cond_for_unequal_addrs): New function.
      	(vect_loop_versioning): Call it.
      
      gcc/testsuite/
      	* gcc.dg/vect/vect-alias-check-6.c: New test.
      
      From-SVN: r250868
      Richard Sandiford committed
    • Handle data dependence relations with different bases · dfbddbeb
      This patch tries to calculate conservatively-correct distance
      vectors for two references whose base addresses are not the same.
      It sets a new flag DDR_COULD_BE_INDEPENDENT_P if the dependence
      isn't guaranteed to occur.
      
      The motivating example is:
      
        struct s { int x[8]; };
        void
        f (struct s *a, struct s *b)
        {
          for (int i = 0; i < 8; ++i)
            a->x[i] += b->x[i];
        }
      
      in which the "a" and "b" accesses are either independent or have a
      dependence distance of 0 (assuming -fstrict-aliasing).  Neither case
      prevents vectorisation, so we can vectorise without an alias check.
      
      I'd originally wanted to do the same thing for arrays as well, e.g.:
      
        void
        f (int a[][8], struct b[][8])
        {
          for (int i = 0; i < 8; ++i)
            a[0][i] += b[0][i];
        }
      
      I think this is valid because C11 6.7.6.2/6 says:
      
        For two array types to be compatible, both shall have compatible
        element types, and if both size specifiers are present, and are
        integer constant expressions, then both size specifiers shall have
        the same constant value.
      
      So if we access an array through an int (*)[8], it must have type X[8]
      or X[], where X is compatible with int.  It doesn't seem possible in
      either case for "a[0]" and "b[0]" to overlap when "a != b".
      
      However, as the comment above "if (same_base_p)" explains, GCC is more
      forgiving: it supports arbitrary overlap of arrays and allows arrays to
      be accessed with different dimensionality.  There are examples of this
      in PR50067.  The patch therefore only handles references that end in a
      structure field access.
      
      There are two ways of handling these dependences in the vectoriser:
      use them to limit VF, or check at runtime as before.  I've gone for
      the approach of checking at runtime if we can, to avoid limiting VF
      unnecessarily, but falling back to a VF cap when runtime checks aren't
      allowed.
      
      The patch tests whether we queued an alias check with a dependence
      distance of X and then picked a VF <= X, in which case it's safe to
      drop the alias check.  Since vect_prune_runtime_alias_check_list
      can be called twice with different VF for the same loop, it's no
      longer safe to clear may_alias_ddrs on exit.  Instead we should use
      comp_alias_ddrs to check whether versioning is necessary.
      
      2017-08-04  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* tree-data-ref.h (subscript): Add access_fn field.
      	(data_dependence_relation): Add could_be_independent_p.
      	(SUB_ACCESS_FN, DDR_COULD_BE_INDEPENDENT_P): New macros.
      	(same_access_functions): Move to tree-data-ref.c.
      	* tree-data-ref.c (ref_contains_union_access_p): New function.
      	(access_fn_component_p): Likewise.
      	(access_fn_components_comparable_p): Likewise.
      	(dr_analyze_indices): Add a reference to access_fn_component_p.
      	(dump_data_dependence_relation): Use SUB_ACCESS_FN instead of
      	DR_ACCESS_FN.
      	(constant_access_functions): Likewise.
      	(add_other_self_distances): Likewise.
      	(same_access_functions): Likewise.  (Moved from tree-data-ref.h.)
      	(initialize_data_dependence_relation): Use XCNEW and remove
      	explicit zeroing of DDR_REVERSED_P.  Look for a subsequence
      	of access functions that have the same type.  Allow the
      	subsequence to end with different bases in some circumstances.
      	Record the chosen access functions in SUB_ACCESS_FN.
      	(build_classic_dist_vector_1): Replace ddr_a and ddr_b with
      	a_index and b_index.  Use SUB_ACCESS_FN instead of DR_ACCESS_FN.
      	(subscript_dependence_tester_1): Likewise dra and drb.
      	(build_classic_dist_vector): Update calls accordingly.
      	(subscript_dependence_tester): Likewise.
      	* tree-ssa-loop-prefetch.c (determine_loop_nest_reuse): Check
      	DDR_COULD_BE_INDEPENDENT_P.
      	* tree-vectorizer.h (LOOP_REQUIRES_VERSIONING_FOR_ALIAS): Test
      	comp_alias_ddrs instead of may_alias_ddrs.
      	* tree-vect-data-refs.c (vect_analyze_possibly_independent_ddr):
      	New function.
      	(vect_analyze_data_ref_dependence): Use it if
      	DDR_COULD_BE_INDEPENDENT_P, but fall back to using the recorded
      	distance vectors if that fails.
      	(dependence_distance_ge_vf): New function.
      	(vect_prune_runtime_alias_test_list): Use it.  Don't clear
      	LOOP_VINFO_MAY_ALIAS_DDRS.
      
      gcc/testsuite/
      	* gcc.dg/vect/vect-alias-check-3.c: New test.
      	* gcc.dg/vect/vect-alias-check-4.c: Likewise.
      	* gcc.dg/vect/vect-alias-check-5.c: Likewise.
      
      From-SVN: r250867
      Richard Sandiford committed
  8. 03 Jul, 2017 5 commits
    • Add a helper for getting the overall alignment of a DR · 25f68d90
      This combines the information from previous patches to give a guaranteed
      alignment for the DR as a whole.  This should be a bit safer than using
      base_element_aligned, since that only really took the base into account
      (not the init or offset).
      
      2017-07-03  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* tree-data-ref.h (dr_alignment): Declare.
      	* tree-data-ref.c (dr_alignment): New function.
      	* tree-vectorizer.h (dataref_aux): Remove base_element_aligned.
      	* tree-vect-data-refs.c (vect_compute_data_ref_alignment): Don't
      	set it.
      	* tree-vect-stmts.c (vectorizable_store): Use dr_alignment.
      
      From-SVN: r249917
      Richard Sandiford committed
    • Add DR_BASE_ALIGNMENT and DR_BASE_MISALIGNMENT · bb642979
      This patch records the base alignment and misalignment in
      innermost_loop_behavior, to avoid the second-guessing that was
      previously done in vect_compute_data_ref_alignment.  It also makes
      vect_analyze_data_refs use dr_analyze_innermost, instead of having an
      almost-copy of the same code.
      
      I wasn't sure whether the alignments should be measured in bits
      (for consistency with most other interfaces) or in bytes (for consistency
      with DR_ALIGNED_TO, now DR_OFFSET_ALIGNMENT, and with *_ptr_info_alignment).
      I went for bytes because:
      
      - I think in practice most consumers are going to want bytes.
        E.g. using bytes avoids having to mix TYPE_ALIGN and TYPE_ALIGN_UNIT
        in vect_compute_data_ref_alignment.
      
      - It means that any bit-level paranoia is dealt with when building
        the innermost_loop_behavior and doesn't get pushed down to consumers.
      
      2017-07-03  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* tree-data-ref.h (innermost_loop_behavior): Add base_alignment
      	and base_misalignment fields.
      	(DR_BASE_ALIGNMENT, DR_BASE_MISALIGNMENT): New macros.
      	* tree-data-ref.c: Include builtins.h.
      	(dr_analyze_innermost): Set up the new innmost_loop_behavior fields.
      	* tree-vectorizer.h (STMT_VINFO_DR_BASE_ALIGNMENT): New macro.
      	(STMT_VINFO_DR_BASE_MISALIGNMENT): Likewise.
      	* tree-vect-data-refs.c: Include tree-cfg.h.
      	(vect_compute_data_ref_alignment): Use the new innermost_loop_behavior
      	fields instead of calculating an alignment here.
      	(vect_analyze_data_refs): Use dr_analyze_innermost.  Dump the new
      	innermost_loop_behavior fields.
      
      From-SVN: r249916
      Richard Sandiford committed
    • Add DR_STEP_ALIGNMENT · 832b4117
      A later patch adds base alignment information to innermost_loop_behavior.
      After that, the only remaining piece of alignment information that wasn't
      immediately obvious was the step alignment.  Adding that allows a minor
      simplification to vect_compute_data_ref_alignment, and also potentially
      improves the handling of variable strides for outer loop vectorisation.
      A later patch will also use it to give the alignment of the DR as a whole.
      
      2017-07-03  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* tree-data-ref.h (innermost_loop_behavior): Add a step_alignment
      	field.
      	(DR_STEP_ALIGNMENT): New macro.
      	* tree-vectorizer.h (STMT_VINFO_DR_STEP_ALIGNMENT): Likewise.
      	* tree-data-ref.c (dr_analyze_innermost): Initalize step_alignment.
      	(create_data_ref): Print it.
      	* tree-vect-stmts.c (vectorizable_load): Use the step alignment
      	to tell whether the step preserves vector (mis)alignment.
      	* tree-vect-data-refs.c (vect_compute_data_ref_alignment): Likewise.
      	Move the check for an integer step and generalise to all INTEGER_CST.
      	(vect_analyze_data_refs): Set DR_STEP_ALIGNMENT when setting DR_STEP.
      	Print the outer step alignment.
      
      From-SVN: r249915
      Richard Sandiford committed
    • Rename DR_ALIGNED_TO to DR_OFFSET_ALIGNMENT · e054a185
      This patch renames DR_ALIGNED_TO to DR_OFFSET_ALIGNMENT, to avoid
      confusion with the upcoming DR_BASE_ALIGNMENT.  Nothing needed the
      value as a tree, and the value is clipped to BIGGEST_ALIGNMENT
      (maybe it should be MAX_OFILE_ALIGNMENT?) so we might as well use
      an unsigned int instead.
      
      2017-07-03  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* tree-data-ref.h (innermost_loop_behavior): Replace aligned_to
      	with offset_alignment.
      	(DR_ALIGNED_TO): Delete.
      	(DR_OFFSET_ALIGNMENT): New macro.
      	* tree-vectorizer.h (STMT_VINFO_DR_ALIGNED_TO): Delete.
      	(STMT_VINFO_DR_OFFSET_ALIGNMENT): New macro.
      	* tree-data-ref.c (dr_analyze_innermost): Update after above changes.
      	(create_data_ref): Likewise.
      	* tree-vect-data-refs.c (vect_compute_data_ref_alignment): Likewise.
      	(vect_analyze_data_refs): Likewise.
      	* tree-if-conv.c (if_convertible_loop_p_1): Use memset before
      	creating dummy innermost behavior.
      
      From-SVN: r249914
      Richard Sandiford committed
    • Make dr_analyze_innermost operate on innermost_loop_behavior · abbe3756
      This means that callers to dr_analyze_innermost don't need a full
      data_reference and don't need to fill in any fields beforehand.
      
      2017-07-03  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* tree-data-ref.h (dr_analyze_innermost): Replace the dr argument
      	with a "innermost_loop_behavior *" and refeence tree.
      	* tree-data-ref.c (dr_analyze_innermost): Likewise.
      	(create_data_ref): Update call accordingly.
      	* tree-predcom.c (find_looparound_phi): Likewise.
      
      From-SVN: r249913
      Richard Sandiford committed
  9. 07 Jun, 2017 1 commit
    • tree-vect-data-refs.c (vect_mark_for_runtime_alias_test): Factor out code… · 6355150f
      tree-vect-data-refs.c (vect_mark_for_runtime_alias_test): Factor out code checking if runtime alias check is possible to below ...
      
      	* tree-vect-data-refs.c (vect_mark_for_runtime_alias_test): Factor
      	out code checking if runtime alias check is possible to below ...
      	Call the new function.
      	* tree-data-ref.c (runtime_alias_check_p): ... to new function.
      	* tree-data-ref.h (runtime_alias_check_p): New decalaration.
      
      From-SVN: r248962
      Bin Cheng committed
  10. 31 May, 2017 1 commit
    • * tree-vect-loop-manip.c (create_intersect_range_checks_index) · 9cbd2d97
      	(create_intersect_range_checks): Move from ...
      	* tree-data-ref.c (create_intersect_range_checks_index)
      	(create_intersect_range_checks): ... to here.
      	(create_runtime_alias_checks): New function factored from ...
      	* tree-vect-loop-manip.c (vect_create_cond_for_alias_checks): ...
      	here.  Call above function.
      	* tree-data-ref.h (create_runtime_alias_checks): New function.
      
      From-SVN: r248726
      Bin Cheng committed
  11. 26 May, 2017 2 commits
    • tree-vect-data-refs.c (Operator==, [...]): Move from ... · 8d44cf72
      	* tree-vect-data-refs.c (Operator==, comp_dr_with_seg_len_pair):
      	Move from ...
      	* tree-data-ref.c (Operator==, comp_dr_with_seg_len_pair): To here.
      	* tree-vect-data-refs.c (vect_prune_runtime_alias_test_list): Factor
      	out code pruning runtime alias checks.
      	* tree-data-ref.c (prune_runtime_alias_test_list): New function
      	factored out from above.
      	* tree-vectorizer.h (struct dr_with_seg_len, dr_with_seg_len_pair_t):
      	Move from ...
      	* tree-data-ref.h (struct dr_with_seg_len, dr_with_seg_len_pair_t):
      	... to here.
      	(prune_runtime_alias_test_list): New decalaration.
      
      From-SVN: r248511
      Bin Cheng committed
    • tree-vect-data-refs.c (compare_tree): Rename and move ... · 2c8f03ad
      	* tree-vect-data-refs.c (compare_tree): Rename and move ...
      	* tree-data-ref.c (data_ref_compare_tree): ... to here.
      	* tree-data-ref.h (data_ref_compare_tree): New decalaration.
      	* tree-vect-data-refs.c (dr_group_sort_cmp): Update uses.
      	(operator==, comp_dr_with_seg_len_pair): Ditto.
      	(vect_prune_runtime_alias_test_list): Ditto.
      
      From-SVN: r248510
      Bin Cheng committed
  12. 03 May, 2017 1 commit
    • Wrap tree-data-ref.h macro arguments · 45d93414
      gcc/
      2016-05-03  Richard Sandiford  <richard.sandiford@linaro.org>
      
      	* tree-data-ref.h (SUB_CONFLICTS_IN_A): Wrap SUB argument in brackets.
      	(SUB_CONFLICTS_IN_B, SUB_LAST_CONFLICT, SUB_DISTANCE): Likewise.
      	(DDR_A): Wrap DDR argument in brackets.
      	(DDR_B, DDR_AFFINE_P, DDR_ARE_DEPENDENT, DDR_SUBSCRIPTS): Likewise.
      	(DDR_LOOP_NEST, DDR_INNER_LOOP, DDR_SELF_REFERENCE): Likewise.
      	(DDR_REVERSED_P): Likewise.
      
      From-SVN: r247539
      Richard Sandiford committed
  13. 01 Jan, 2017 1 commit
  14. 20 Apr, 2016 1 commit
    • re PR tree-optimization/56625 (After if-conversion vectorizer doesn't recognize similar loads) · fad08d12
      	PR tree-optimization/56625
      	PR tree-optimization/69489
      	* tree-data-ref.h (DR_INNERMOST): New macro.
      	* tree-if-conv.c (innermost_loop_behavior_hash): New class for
      	hashing struct innermost_loop_behavior.
      	(ref_DR_map): Remove.
      	(innermost_DR_map): New map.
      	(baseref_DR_map): Revise comment.
      	(hash_memrefs_baserefs_and_store_DRs_read_written_info): Store DR
      	to innermost_DR_map accroding to its innermost loop behavior.
      	(ifcvt_memrefs_wont_trap): Get DR from innermost_DR_map according
      	to its innermost loop behavior.
      	(if_convertible_loop_p_1): Remove intialization for ref_DR_map.
      	Add initialization for innermost_DR_map.  Record memory reference
      	in DR_BASE_ADDRESS if the reference is compound one or it doesn't
      	have innermost loop behavior.
      	(if_convertible_loop_p): Remove release for ref_DR_map.  Release
      	innermost_DR_map.
      
      	gcc/testsuite/ChangeLog
      	PR tree-optimization/56625
      	PR tree-optimization/69489
      	* gcc.dg/vect/pr56625.c: New test.
      	* gcc.dg/tree-ssa/ifc-pr69489-1.c: New test.
      
      From-SVN: r235289
      Bin Cheng committed
  15. 04 Jan, 2016 1 commit
  16. 06 Oct, 2015 2 commits
    • move dr->alias_set to a helper structure · 09fefdad
      2015-10-06  Aditya Kumar  <aditya.k7@samsung.com>
                      Sebastian Pop  <s.pop@samsung.com>
      
                      * graphite-poly.c (new_scop): Initialize drs.
                      * graphite-poly.h (struct dr_info): New.
                      (struct scop): Add drs.
                      * graphite-sese-to-poly.c (pdr_add_alias_set): Use dr_info.
                      (pdr_add_memory_accesses): Same.
                      (build_poly_dr): Same.
                      (build_alias_set): Same.
                      (build_scop_drs): Same.
                      (build_pbb_drs): Remove.
                      * tree-data-ref.c (create_data_ref): Do not initialize alias_set.
                      * tree-data-ref.h (data_reference): Remove alias_set.
      
      Co-Authored-By: Sebastian Pop <s.pop@samsung.com>
      
      From-SVN: r228545
      Aditya Kumar committed
    • remove unused struct base_alias_pair · 790befae
      2015-10-06  Aditya Kumar  <aditya.k7@samsung.com>
                      Sebastian Pop  <s.pop@samsung.com>
      
                      * graphite-poly.c (free_data_refs_aux): Remove.
                      (free_gimple_poly_bb): Do not call free_data_refs_aux.
                      * graphite-poly.h (struct base_alias_pair): Remove.
                      * graphite-sese-to-poly.c (pdr_add_alias_set): Remove all uses of
                      base_alias_pair and dr->aux.
                      (build_alias_set): Same.
                      * tree-data-ref.c (create_data_ref): Initialize alias_set.
                      * tree-data-ref.h (data_reference): Add alias_set.
      
      Co-Authored-By: Sebastian Pop <s.pop@samsung.com>
      
      From-SVN: r228544
      Aditya Kumar committed
  17. 20 Sep, 2015 1 commit
    • switch from gimple to gimple* · 355fe088
      This renames the gimple_statement_base struct to gimple removes the
      typedef of gimple_statement_base * to gimple, and then adjusts all of
      the places that use the type.
      
      gcc/ChangeLog:
      
      2015-09-19  Trevor Saunders  <tbsaunde@tbsaunde.org>
      
      	* coretypes.h (gimple): Change typedef to be a forward
      	declaration.
      	* gimple.h (gimple_statement_base): rename to gimple.
      	* (all functions and types using gimple): Adjust.
      	* *.[ch]: Likewise.
      
      gcc/cp/ChangeLog:
      
      2015-09-19  Trevor Saunders  <tbsaunde@tbsaunde.org>
      
      	* cp-gimplify.c (gimplify_must_not_throw_expr): Adjust.
      
      From-SVN: r227941
      Trevor Saunders committed
  18. 08 Sep, 2015 1 commit
    • Remove limit_scops · 74032f47
      This patch removes graphite-scop-detection.c:limit_scops function and fix
      related issues arising because of that. The functionality limit_scop was added
      as an intermediate step to discard the loops which graphite could not
      handle. Removing limit_scop required handling of different cases of loops and
      surrounding code.  The scop is now larger so most test cases required 'number of
      scops detected' to be fixed. By increasing the size of scop we can now optimize
      loops which are 'siblings' of each other. This could enable loop fusion on a
      number of loops. Since in the graphite framework we mostly want to opimize
      loop-nests/adjacent-loops, we now discard scops with less than 2 loops. We
      also discard scops without any data references.
      
      Essentially:
       - Remove limite_scops.
       - Only select scops when there are at least two loops (loop nest or, side by side).
       - Discard loops without data-refs.
       - Fix test cases.
      
      Passes bootstrap and reg-test.
      
      gcc/ChangeLog:
      
      2015-09-02  Aditya Kumar  <hiraditya@msn.com>
                  Sebastian Pop  <s.pop@samsung.com>
      
              * graphite-isl-ast-to-gimple.c (gcc_expression_from_isl_ast_expr_id):
              Return the parameter if it was saved in corresponding
              parameter_rename_map of the region.
              (copy_def): Copy def from sese region to the newly created region.
              (copy_internal_parameters): Copy all the internal parameters defined
              within a region to the newly created region.
              (graphite_regenerate_ast_isl): Copy parameters to the new region before
              translating isl to gimple.
              * graphite-scop-detection.c (graphite_can_represent_loop): Bail out if
                the loop-nest does not have any data-references.
              (build_graphite_scops): Create a scop only when there is at least one
              loop inside it.
              (contains_only_close_phi_nodes): Deleted.
              (print_graphite_scop_statistics): Deleted
              (print_graphite_statistics): Deleted
              (limit_scops): Deleted.
              (build_scops): Removed call to limit_scops.
              * sese.c (new_sese): Construct.
              (free_sese): Destruct.
              (sese_add_exit_phis_edge): update_stmt after exit phi edge has been
              added.
              (set_rename): Pass sese region so that parameters inside the region can
              be added to its parameter_rename_map.
              (rename_uses): Pass sese region.
              (graphite_copy_stmts_from_block): Do not copy parameters that have been
              generated in the header of the scop. For each SSA_NAME in the
              parameter_rename_map rename its usage.
              (invariant_in_sese_p_rec): Return false if tree t is defined outside
              sese region.
              (scalar_evolution_in_region): If the tree t is invariant just return t.
              * sese.h: Added a parameter renamne map (parameter_rename_map_t) to
                struct sese to keep track of all the parameters which need renaming.
              * tree-data-ref.c (loop_nest_has_data_refs): Check if a loop nest has
                any data-refs.
              * tree-data-ref.h: Declaration of loop_nest_has_data_refs.
      
      gcc/testsuite/ChangeLog:
      
      2015-09-02  Aditya Kumar  <hiraditya@msn.com>
                  Sebastian Pop  <s.pop@samsung.com>
      
              * gcc.dg/graphite/block-0.c: Modifed test case to match current output.
              * gcc.dg/graphite/block-1.c: Same.
              * gcc.dg/graphite/block-5.c: Same.
              * gcc.dg/graphite/block-6.c: Same.
              * gcc.dg/graphite/interchange-1.c: Same.
              * gcc.dg/graphite/interchange-10.c: Same.
              * gcc.dg/graphite/interchange-11.c: Same.
              * gcc.dg/graphite/interchange-13.c: Same.
              * gcc.dg/graphite/interchange-14.c: Same.
              * gcc.dg/graphite/interchange-3.c: Same.
              * gcc.dg/graphite/interchange-4.c: Same.
              * gcc.dg/graphite/interchange-7.c: Same.
              * gcc.dg/graphite/interchange-8.c: Same.
              * gcc.dg/graphite/interchange-9.c: Same.
              * gcc.dg/graphite/isl-codegen-loop-dumping.c: Same.
              * gcc.dg/graphite/pr35356-1.c (foo): Same.
              * gcc.dg/graphite/pr37485.c: Same.
              * gcc.dg/graphite/scop-0.c (int toto): Same.
              * gcc.dg/graphite/scop-1.c: Same.
              * gcc.dg/graphite/scop-10.c: Same.
              * gcc.dg/graphite/scop-11.c: Same.
              * gcc.dg/graphite/scop-12.c: Same.
              * gcc.dg/graphite/scop-13.c: Same.
              * gcc.dg/graphite/scop-16.c: Same.
              * gcc.dg/graphite/scop-17.c: Same.
              * gcc.dg/graphite/scop-18.c: Same.
              * gcc.dg/graphite/scop-2.c: Same.
              * gcc.dg/graphite/scop-21.c (int test): Same.
              * gcc.dg/graphite/scop-22.c (void foo): Same.
              * gcc.dg/graphite/scop-4.c: Same.
              * gcc.dg/graphite/scop-5.c: Same.
              * gcc.dg/graphite/scop-6.c: Same.
              * gcc.dg/graphite/scop-7.c: Same.
              * gcc.dg/graphite/scop-8.c: Same.
              * gcc.dg/graphite/scop-9.c: Same.
              * gcc.dg/graphite/scop-mvt.c (void mvt): Introduced dependency so that
                data-refs remain inside the inner loop.
              * gcc.dg/graphite/uns-block-1.c: Modifed test case to match o/p.
              * gcc.dg/graphite/uns-interchange-14.c: Same.
              * gcc.dg/graphite/uns-interchange-9.c: Same.
              * gfortran.dg/graphite/interchange-3.f90
      
      libgomp/ChangeLog:
      
      2015-09-04  Aditya Kumar  <hiraditya@msn.com>
                  Sebastian Pop  <s.pop@samsung.com>
      
              * testsuite/libgomp.graphite/bounds.c (int foo): Modifed test case to
                match o/p.
              * testsuite/libgomp.graphite/force-parallel-1.c (void parloop): Same.
              * testsuite/libgomp.graphite/force-parallel-4.c: Same.
              * testsuite/libgomp.graphite/force-parallel-5.c: Same.
              * testsuite/libgomp.graphite/force-parallel-7.c: Same.
              * testsuite/libgomp.graphite/force-parallel-8.c: Same.
      
      Co-Authored-By: Sebastian Pop <s.pop@samsung.com>
      
      From-SVN: r227567
      Aditya Kumar committed
  19. 18 Jul, 2015 1 commit
    • fix pr46851 and pr60340: remove unmaintained omega dependence test · 49b8fe6c
      Regstrapped on amd64-linux.
      
      2015-07-18  Sebastian Pop  <s.pop@samsung.com>
      
      	PR middle-end/46851
      	PR middle-end/60340
      	* Makefile.in: Removed omega.o.
      	* common.opt: Remove flag fcheck-data-deps.
      	* doc/invoke.texi: Remove documentation for fcheck-data-deps and
      	its associated params: omega-max-vars, omega-max-geqs,
      	omega-max-eqs, omega-max-wild-cards, omega-hash-table-size,
      	omega-max-keys, omega-eliminate-redundant-constraints.
      	* doc/loop.texi: Remove all the section on Omega.
      	* graphite-blocking.c: Include missing params.h: it used to be
      	included through tree-data-ref.h and omega.h.
      	* graphite-isl-ast-to-gimple.c: Same.
      	* graphite-optimize-isl.c: Same.
      	* graphite-sese-to-poly.c: Same.
      	* graphite.c: Same.
      	* omega.c: Remove.
      	* omega.h: Remove.
      	* params.def: Removed PARAM_OMEGA_MAX_VARS, PARAM_OMEGA_MAX_GEQS,
      	PARAM_OMEGA_MAX_EQS, PARAM_OMEGA_MAX_WILD_CARDS,
      	PARAM_OMEGA_HASH_TABLE_SIZE, PARAM_OMEGA_MAX_KEYS, and
      	PARAM_OMEGA_ELIMINATE_REDUNDANT_CONSTRAINTS.
      	* passes.def: Remove pass_check_data_deps.
      	* tree-data-ref.c (dump_affine_function): Declare DEBUG_FUNCTION.
      	(dump_conflict_function): Same.
      	(dump_subscript): Same.
      	(print_direction_vector): Same.
      	(print_dir_vectors): Same.
      	(print_lambda_vector): Same.
      	(print_dist_vectors): Same.
      	(dump_data_dependence_relation): Same.
      	(dump_data_dependence_relations): Same.
      	(dump_dist_dir_vectors): Same.
      	(dump_ddrs): Same.
      	(init_omega_eq_with_af): Removed.
      	(omega_extract_distance_vectors): Removed.
      	(omega_setup_subscript): Removed.
      	(init_omega_for_ddr_1): Removed.
      	(init_omega_for_ddr): Removed.
      	(ddr_consistent_p): Removed.
      	(compute_affine_dependence): Do not use omega to check data
      	dependences.
      	(compute_data_dependences_for_bb): Removed.
      	(analyze_all_data_dependences): Removed.
      	(tree_check_data_deps): Removed.
      	* tree-data-ref.h: Do not include omega.h.
      	(compute_data_dependences_for_bb): Removed.
      	(tree_check_data_deps): Removed.
      	* tree-ssa-loop.c (pass_check_data_deps): Removed.
      	(make_pass_check_data_deps): Removed.
      	* tree-ssa-phiopt.c: Include params.h.
      	* tree-vect-data-refs.c: Same.
      	* tree-vect-slp.c: Same.
      
      testsuite/
      	* gcc.dg/tree-ssa/pr42327.c: Removed.
      	* g++.dg/other/pr35011.C: Removed.
      
      From-SVN: r225979
      Sebastian Pop committed
  20. 27 May, 2015 1 commit
    • re PR tree-optimization/66272 (wrong code at -O3 on x86_64-linux-gnu) · f3ae4add
      2015-05-27  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/66272
      	Revert parts of
      	2014-08-15  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/62031
      	* tree-data-ref.c (dr_analyze_indices): Do not set
      	DR_UNCONSTRAINED_BASE.
      	(dr_may_alias_p): All indirect accesses have to go the
      	formerly DR_UNCONSTRAINED_BASE path.
      	* tree-data-ref.h (struct indices): Remove
      	unconstrained_base member.
      	(DR_UNCONSTRAINED_BASE): Remove.
      
      	* gcc.dg/torture/pr66272.c: New testcase.
      
      From-SVN: r223759
      Richard Biener committed
  21. 18 Mar, 2015 1 commit
    • tree-data-ref.h (struct access_matrix): Remove. · 6f4f1a50
      2015-03-18  Richard Biener  <rguenther@suse.de>
      
      	* tree-data-ref.h (struct access_matrix): Remove.
      	(AM_LOOP_NEST, AM_NB_INDUCTION_VARS, AM_PARAMETERS, AM_MATRIX,
      	AM_NB_PARAMETERS, AM_CONST_COLUMN_INDEX, AM_NB_COLUMNS,
      	AM_GET_SUBSCRIPT_ACCESS_VECTOR, AM_GET_ACCESS_MATRIX_ELEMENT): Likewise.
      	(am_vector_index_for_loop): Likewise.
      	(struct data_reference): Remove access_matrix member.
      	(DR_ACCESS_MATRIX): Remove.
      	(lambda_vector_new): Add comment.
      	(lambda_matrix_new): Use XOBNEWVEC.
      
      From-SVN: r221488
      Richard Biener committed
  22. 05 Jan, 2015 1 commit
  23. 15 Aug, 2014 1 commit
  24. 17 May, 2014 2 commits
    • use templates instead of gengtype for typed allocation functions · 766090c2
      gcc/ChangeLog:
      
      	* alias.c (record_alias_subset): Adjust.
      	* bitmap.c (bitmap_element_allocate): Likewise.
      	(bitmap_gc_alloc_stat): Likewise.
      	* cfg.c (init_flow): Likewise.
      	(alloc_block): Likewise.
      	(unchecked_make_edge): Likewise.
      	* cfgloop.c (alloc_loop): Likewise.
      	(flow_loops_find): Likewise.
      	(rescan_loop_exit): Likewise.
      	* cfgrtl.c (init_rtl_bb_info): Likewise.
      	* cgraph.c (insert_new_cgraph_node_version): Likewise.
      	(cgraph_allocate_node): Likewise.
      	(cgraph_create_edge_1): Likewise.
      	(cgraph_allocate_init_indirect_info): Likewise.
      	* cgraphclones.c (cgraph_clone_edge): Likewise.
      	* cgraphunit.c (add_asm_node): Likewise.
      	(init_lowered_empty_function): Likewise.
      	* config/aarch64/aarch64.c (aarch64_init_machine_status):
      	Likewise.
      	* config/alpha/alpha.c (alpha_init_machine_status): Likewise.
      	(alpha_use_linkage): Likewise.
      	* config/arc/arc.c (arc_init_machine_status): Likewise.
      	* config/arm/arm.c (arm_init_machine_status): Likewise.
      	* config/avr/avr.c (avr_init_machine_status): Likewise.
      	* config/bfin/bfin.c (bfin_init_machine_status): Likewise.
      	* config/c6x/c6x.c (c6x_init_machine_status): Likewise.
      	* config/cris/cris.c (cris_init_machine_status): Likewise.
      	* config/darwin.c (machopic_indirection_name): Likewise.
      	(darwin_build_constant_cfstring): Likewise.
      	(darwin_enter_string_into_cfstring_table): Likewise.
      	* config/epiphany/epiphany.c (epiphany_init_machine_status):
      	* Likewise.
      	* config/frv/frv.c (frv_init_machine_status): Likewise.
      	* config/i386/i386.c (get_dllimport_decl): Likewise.
      	(ix86_init_machine_status): Likewise.
      	(assign_386_stack_local): Likewise.
      	* config/i386/winnt.c (i386_pe_record_external_function):
      	Likewise.
      	(i386_pe_maybe_record_exported_symbol): Likewise.
      	(i386_pe_record_stub): Likewise.
      	* config/ia64/ia64.c (ia64_init_machine_status): Likewise.
      	* config/iq2000/iq2000.c (iq2000_init_machine_status): Likewise.
      	* config/m32c/m32c.c (m32c_init_machine_status): Likewise.
      	(m32c_note_pragma_address): Likewise.
      	* config/mep/mep.c (mep_init_machine_status): Likewise.
      	(mep_note_pragma_flag): Likewise.
      	* config/mips/mips.c (mflip_mips16_use_mips16_p): Likewise.
      	(mips16_local_alias): Likewise.
      	(mips_init_machine_status): Likewise.
      	* config/mmix/mmix.c (mmix_init_machine_status): Likewise.
      	* config/moxie/moxie.c (moxie_init_machine_status): Likewise.
      	* config/msp430/msp430.c (msp430_init_machine_status): Likewise.
      	* config/nds32/nds32.c (nds32_init_machine_status): Likewise.
      	* config/nios2/nios2.c (nios2_init_machine_status): Likewise.
      	* config/pa/pa.c (pa_init_machine_status): Likewise.
      	(pa_get_deferred_plabel): Likewise.
      	* config/rl78/rl78.c (rl78_init_machine_status): Likewise.
      	* config/rs6000/rs6000.c (builtin_function_type): Likewise.
      	(rs6000_init_machine_status): Likewise.
      	(output_toc): Likewise.
      	* config/s390/s390.c (s390_init_machine_status): Likewise.
      	* config/score/score.c (score_output_external): Likewise.
      	* config/sparc/sparc.c (sparc_init_machine_status): Likewise.
      	* config/spu/spu.c (spu_init_machine_status): Likewise.
      	* config/tilegx/tilegx.c (tilegx_init_machine_status): Likewise.
      	* config/tilepro/tilepro.c (tilepro_init_machine_status):
      	* Likewise.
      	* config/xtensa/xtensa.c (xtensa_init_machine_status): Likewise.
      	* coverage.c (coverage_end_function): Likewise.
      	* dbxout.c (dbxout_init): Likewise.
      	* doc/gty.texi: Don't mention variable_size attribute.
      	* dwarf2cfi.c (new_cfi): Adjust.
      	(new_cfi_row): Likewise.
      	(copy_cfi_row): Likewise.
      	(create_cie_data): Likewise.
      	* dwarf2out.c (dwarf2out_alloc_current_fde): Likewise.
      	(new_loc_descr): Likewise.
      	(find_AT_string_in_table): Likewise.
      	(add_addr_table_entry): Likewise.
      	(new_die): Likewise.
      	(add_var_loc_to_decl): Likewise.
      	(clone_die): Likewise.
      	(clone_as_declaration): Likewise.
      	(break_out_comdat_types): Likewise.
      	(new_loc_list): Likewise.
      	(add_loc_descr_to_each): Likewise.
      	(add_location_or_const_value_attribute): Likewise.
      	(add_linkage_name): Likewise.
      	(lookup_filename): Likewise.
      	(dwarf2out_var_location): Likewise.
      	(new_line_info_table): Likewise.
      	(dwarf2out_init): Likewise.
      	(mem_loc_descriptor): Likewise.
      	(loc_descriptor): Likewise.
      	(add_const_value_attribute): Likewise.
      	(tree_add_const_value_attribute): Likewise.
      	(comp_dir_string): Likewise.
      	(dwarf2out_vms_debug_main_pointer): Likewise.
      	(string_cst_pool_decl): Likewise.
      	* emit-rtl.c (set_mem_attrs): Likewise.
      	(get_reg_attrs): Likewise.
      	(start_sequence): Likewise.
      	(init_emit): Likewise.
      	(init_emit_regs): Likewise.
      	* except.c (init_eh_for_function): Likewise.
      	(gen_eh_region): Likewise.
      	(gen_eh_region_catch): Likewise.
      	(gen_eh_landing_pad): Likewise.
      	(add_call_site): Likewise.
      	* function.c (add_frame_space): Likewise.
      	(insert_temp_slot_address): Likewise.
      	(assign_stack_temp_for_type): Likewise.
      	(get_hard_reg_initial_val): Likewise.
      	(allocate_struct_function): Likewise.
      	(prepare_function_start): Likewise.
      	(types_used_by_var_decl_insert): Likewise.
      	* gengtype.c (variable_size_p): Remove function.
      	(enum alloc_quantity): Remove enum.
      	(write_typed_alloc_def): Remove function.
      	(write_typed_struct_alloc_def): Likewise.
      	(write_typed_typedef_alloc_def): Likewise.
      	(write_typed_alloc_defns): Likewise.
      	(main): Adjust.
      	* ggc-common.c (ggc_cleared_alloc_htab_ignore_args): Adjust.
      	(ggc_cleared_alloc_ptr_array_two_args): Likewise.
      	* ggc.h (ggc_alloc): new function.
      	(ggc_cleared_alloc): Likewise.
      	(ggc_vec_alloc): Template on type of vector element, and remove
      	element size argument.
      	(ggc_cleared_vec_alloc): Likewise.
      	* gimple.c (gimple_build_omp_for): Adjust.
      	(gimple_copy): Likewise.
      	* ipa-cp.c (get_replacement_map): Likewise.
      	(find_aggregate_values_for_callers_subset): Likewise.
      	(known_aggs_to_agg_replacement_list): Likewise.
      	* ipa-devirt.c (get_odr_type): Likewise.
      	* ipa-prop.c (ipa_node_duplication_hook): Likewise.
      	(read_agg_replacement_chain): Likewise.
      	* loop-iv.c (get_simple_loop_desc): Likewise.
      	* lto-cgraph.c (input_node_opt_summary): Likewise.
      	* lto-section-in.c (lto_new_in_decl_state): Likewise.
      	* lto-streamer-in.c (lto_input_eh_catch_list): Likewise.
      	(input_eh_region): Likewise.
      	(input_eh_lp): Likewise.
      	(input_cfg): Likewise.
      	* optabs.c (set_optab_libfunc): Likewise.
      	(init_tree_optimization_optabs): Likewise.
      	(set_conv_libfunc): Likewise.
      	* passes.c (do_per_function_toporder): Likewise.
      	* rtl.h: Don't use variable_size gty attribute.
      	* sese.c (if_region_set_false_region): Adjust.
      	* stringpool.c (gt_pch_save_stringpool): Likewise.
      	* target-globals.c (save_target_globals): Likewise.
      	* toplev.c (general_init): Likewise.
      	* trans-mem.c (record_tm_replacement): Likewise.
      	(split_bb_make_tm_edge): Likewise.
      	* tree-cfg.c (move_sese_region_to_fn): Likewise.
      	* tree-data-ref.h (lambda_vector_new): Likewise.
      	* tree-eh.c (add_stmt_to_eh_lp_fn): Likewise.
      	* tree-iterator.c (tsi_link_before): Likewise.
      	(tsi_link_after): Likewise.
      	* tree-scalar-evolution.c (new_scev_info_str): Likewise.
      	* tree-ssa-loop-niter.c (record_estimate): Likewise.
      	* tree-ssa-operands.c (ssa_operand_alloc): Likewise.
      	* tree-ssa-operands.h: Don't use variable_size gty attribute.
      	* tree-ssa.c (init_tree_ssa): Adjust.
      	* tree-ssanames.c (set_range_info): Likewise.
      	(get_ptr_info): Likewise.
      	(duplicate_ssa_name_ptr_info): Likewise.
      	(duplicate_ssa_name_range_info): Likewise.
      	* tree-streamer-in.c (unpack_ts_real_cst_value_fields): Likewise.
      	(unpack_ts_fixed_cst_value_fields): Likewise.
      	* tree.c (build_fixed): Likewise.
      	(build_real): Likewise.
      	(build_string): Likewise.
      	(decl_priority_info): Likewise.
      	(decl_debug_expr_insert): Likewise.
      	(decl_value_expr_insert): Likewise.
      	(decl_debug_args_insert): Likewise.
      	(type_hash_add): Likewise.
      	(build_omp_clause): Likewise.
      	* ubsan.c (decl_for_type_insert): Likewise.
      	* varasm.c (get_unnamed_section): Likewise.
      	(get_noswitch_section): Likewise.
      	(get_section): Likewise.
      	(get_block_for_section): Likewise.
      	(create_block_symbol): Likewise.
      	(build_constant_desc): Likewise.
      	(create_constant_pool): Likewise.
      	(force_const_mem): Likewise.
      	(record_tm_clone_pair): Likewise.
      	* varpool.c (varpool_create_empty_node): Likewise.
      
      gcc/c/ChangeLog:
      
      	* c-decl.c (finish_struct): Adjust.
      	(finish_enum): Likewise.
      	(bind): Adjust.
      	(record_inline_static): Likewise.
      	(push_scope): Likewise.
      	(make_label): Likewise.
      	(lookup_label_for_goto): Likewise.
      	(finish_struct): Likewise.
      	(finish_enum): Likewise.
      	(store_parm_decls): Likewise.
      	(c_push_function_context): Likewise.
      	* c-lang.h: Remove usage of variable_size gty attribute.
      	* c-parser.c (c_parse_init): Adjust.
      	(c_parse_file): Likewise.
      
      gcc/java/ChangeLog:
      
      	* class.c (add_method_1): Adjust.
      	(java_treetreehash_new): Likewise.
      	* constants.c (set_constant_entry): Likewise.
      	(cpool_for_class): Likewise.
      	* decl.c (make_binding_level): Likewise.
      	(java_dup_lang_specific_decl): Likewise.
      	* expr.c (add_type_assertion): Likewise.
      	* java-tree.h (MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC): Likewise.
      	(lang_decl): don't use variable_size gty attribute.
      	(MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC): Adjust.
      	(lang_type): Don't use variable_size gty attribute.
      	* jcf-parse.c (java_parse_file): Adjust.
      	(process_zip_dir): Likewise.
      	* jcf.h: Remove usage of variable_size gty attribute.
      	* jcf-reader.c (jcf_parse_constant_pool): Adjust.
      	(jcf_parse_bootstrap_methods): Likewise.
      
      gcc/objc/ChangeLog:
      
      	* objc-act.c (objc_build_string_object): Adjust.
      	(continue_class): Likewise.
      	* objc-act.h (ALLOC_OBJC_TYPE_LANG_SPECIFIC): Likewise.
      	* objc-map.c (objc_map_alloc_ggc): Likewise.
      	(objc_map_private_resize): Likewise.
      	* objc-next-runtime-abi-02.c (objc_next_runtime_abi_02_init):
      	Likewise.
      	(hash_name_enter): Likewise.
      
      gcc/cp/ChangeLog:
      
      	* class.c (sorted_fields_type_new): Adjust.
      	* cp-cilkplus.c (cilk_install_body_with_frame_cleanup): Likewise.
      	* cp-objcp-common.c (decl_shadowed_for_var_insert): Likewise.
      	* cp-tree.h: Remove usage of variable_size gty attribute.
      	* decl.c (make_label_decl): Adjust.
      	(check_goto): Likewise.
      	(start_preparsed_function): Likewise.
      	(save_function_data): Likewise.
      	* lex.c (init_reswords): Likewise.
      	(retrofit_lang_decl): Likewise.
      	(cxx_dup_lang_specific_decl): Likewise.
      	(copy_lang_type): Likewise.
      	(cxx_make_type): Likewise.
      	* name-lookup.c (binding_entry_make): Likewise.
      	(binding_table_construct): Likewise.
      	(binding_table_new): Likewise.
      	(cxx_binding_make): Likewise.
      	(pushdecl_maybe_friend_1): Likewise.
      	(begin_scope): Likewise.
      	(push_to_top_level): Likewise.
      	* parser.c (cp_lexer_alloc): Likewise.
      	(cp_lexer_new_from_tokens): Likewise.
      	(cp_token_cache_new): Likewise.
      	(cp_parser_context_new): Likewise.
      	(cp_parser_new): Likewise.
      	(cp_parser_nested_name_specifier_opt): Likewise.
      	(cp_parser_template_id): Likewise.
      	* pt.c (maybe_process_partial_specialization): Likewise.
      	(register_specialization): Likewise.
      	(add_pending_template): Likewise.
      	(lookup_template_class_1): Likewise.
      	(push_tinst_level): Likewise.
      	* semantics.c (register_constexpr_fundef): Likewise.
      	(cxx_eval_call_expression): Likewise.
      	* typeck2.c (abstract_virtuals_error_sfinae): Likewise.
      
      gcc/fortran/ChangeLog:
      
      	* f95-lang.c (pushlevel): Adjust.
      	* trans-decl.c (gfc_allocate_lang_decl): Adjust.
      	(gfc_find_module): Likewise.
      	* trans-types.c (gfc_get_nodesc_array_type): Likewise.
      	(gfc_get_array_type_bounds): Likewise.
      	(gfc_nonrestricted_type): Likewise.
      	* trans.h: Don't use variable_size gty attribute.
      
      gcc/ada/ChangeLog:
      
      	* gcc-interface/ada-tree.h: Remove usage of variable_size gty
      	annotation.
      	* gcc-interface/decl.c (annotate_value): Adjust.
      	* gcc-interface/trans.c (Attribute_to_gnu): Likewise.
      	(push_range_check_info): Likewise.
      	(Loop_Statement_to_gnu): Likewise.
      	(Subprogram_Body_to_gnu): Likewise.
      	(Compilation_Unit_to_gnu): Likewise.
      	(start_stmt_group): Likewise.
      	* gcc-interface/utils.c (init_gnat_utils): Likewise.
      	(gnat_pushlevel): Likewise.
      	(maybe_pad_type): Likewise.
      
      gcc/go/ChangeLog:
      
      	* go-lang.c (struct GTY): Don't use variable_size gty attribute.
      
      gcc/c-family/ChangeLog:
      
      	* c-common.h (sorted_fields_type): Remove variable_size GTY attribute.
      	* c-pragma.c (push_alignment): Adjust.
      	(handle_pragma_push_options): Likewise.
      
      gcc/lto/ChangeLog:
      
      	* lto-tree.h: Don't use variable_size gty attribute.
      	* lto.c (lto_read_in_decl_state): Adjust.
      	(create_subid_section_table): Likewise.
      	(lto_flatten_files): Likewise.
      	(read_cgraph_and_symbols): Likewise.
      
      gcc/objcp/ChangeLog:
      
      	* objcp-decl.h: Adjust.
      
      From-SVN: r210566
      Trevor Saunders committed
    • rm a bunch of _stat allocation functions · 231120e5
      Now that we can use c++ default arguments there's no reason to use
      functions and wrapper macros.
      
      gcc/ChangeLog:
      
      	* dwarf2out.c (tree_add_const_value_attribute): Call
      	ggc_internal_cleared_alloc instead of ggc_alloc_cleared_atomic.
      	* gengtype.c (write_typed_alloc_def): Call ggc_internal_<x>alloc
      	instead of ggc_internal_<x>alloc_stat.
      	* ggc-common.c (ggc_internal_cleared_alloc): Drop _stat suffix.
      	(ggc_realloc): Likewise.
      	* ggc-none.c (ggc_internal_alloc): Likewise.
      	(ggc_internal_cleared_alloc): Likewise.
      	* ggc-page.c: Likewise.
      	* ggc.h (ggc_internal_alloc_stat): Likewise.
      	(ggc_internal_alloc): Remove macro.
      	(ggc_internal_cleared_alloc_stat): Drop _stat suffix.
      	(ggc_internal_cleared_alloc): Remove macro.
      	(GGC_RESIZEVEC): Adjust.
      	(ggc_resizevar): Remove macro.
      	(ggc_internal_vec_alloc_stat): Drop _stat suffix.
      	(ggc_internal_cleared_vec_alloc_stat): Likewise.
      	(ggc_internal_vec_cleared_alloc): Remove macro.
      	(ggc_alloc_atomic_stat): Drop _stat suffix.
      	(ggc_alloc_atomic): Remove macro.
      	(ggc_alloc_cleared_atomic): Remove macro.
      	(ggc_alloc_string_stat): Drop _stat suffix.
      	(ggc_alloc_string): Remove macro.
      	(ggc_alloc_rtx_def_stat): Adjust.
      	(ggc_alloc_tree_node_stat): Likewise.
      	(ggc_alloc_cleared_tree_node_stat): Likewise.
      	(ggc_alloc_cleared_gimple_statement_stat): Likewise.
      	(ggc_alloc_cleared_simd_clone_stat): Likewise.
      	* gimple.c (gimple_build_omp_for): Likewise.
      	(gimple_copy): Likewise.
      	* stringpool.c (ggc_alloc_string_stat): Drop _stat suffix.
      	* toplev.c (realloc_for_line_map): Adjust.
      	* tree-data-ref.h (lambda_vector_new): Likewise.
      	* tree-phinodes.c (allocate_phi_node): Likewise.
      	* tree.c (grow_tree_vec_stat): Likewise.
      	* vec.h (va_gc::reserve): Adjust.
      
      gcc/java/ChangeLog:
      
      	* constants.c (set_constant_entry): Adjust.
      
      From-SVN: r210565
      Trevor Saunders committed
  25. 28 Jan, 2014 1 commit
  26. 02 Jan, 2014 1 commit
  27. 10 Dec, 2013 1 commit
    • cgraph.h (cgraph_node_set_iterator, [...]): Remove typedef. · 84562394
      	* gcc/cgraph.h (cgraph_node_set_iterator, varpool_node_set_iterator):
      	Remove typedef.
      	(cgraph_inline_failed_enum, cgraph_inline_failed_t): Remove typedef and
      	rename to cgraph_inline_failed_t.
      	* gcc/tree-ssa-alias.h (ao_ref_s, ao_ref): Remove typedef and rename
      	to ao_ref.
      	* gcc/reload.h (reg_equivs_s, reg_equivs_t): Remove typedef and rename
      	to reg_equivs_t.
      	* gcc/conditions.h (CC_STATUS): Remove typedef.
      	* gcc/bitmap.h (bitmap_obstack): Remove typedef.
      	(bitmap_element_def, bitmap_element): Remove typedef and rename to
      	bitmap_element.
      	(bitmap_head_def, bitmap_head): Remove typedef and rename to
      	bitmap_head.
      	(bitmap_iterator): Remove typedef.
      	* gcc/target.h (cumulative_args_t, print_switch_type,
      	secondary_reload_info): Remove typedef.
      	* gcc/dwarf2out.h (dw_cfi_oprnd_struct, dw_cfi_oprnd): Remove
      	dw_cfi_oprnd_struct alias.
      	(dw_cfi_struct, dw_cfi_node): Remove typedef and rename to dw_cfi_node.
      	(dw_fde_struct, dw_fde_node): Remove typedef and rename to dw_fde_node.
      	(cfa_loc, dw_cfa_location): Remove typedef and rename to
      	dw_cfa_location.
      	(dw_vec_struct, dw_vec_const): Remove typedef and rename to
      	dw_vec_const.
      	(dw_val_struct, dw_val_node): Remove typedef and rename to dw_val_node.
      	(dw_loc_descr_struct, dw_loc_descr_node): Remove typedef and rename to
      	dw_loc_descr_node.
      	* gcc/params.h (param_info, compiler_param): Remove typedef.
      	* gcc/opts.h (cl_deferred_param): Remove typedef.
      	* gcc/sreal.h (sreal): Remove typedef.
      	* gcc/ddg.h (dep_type, dep_data_type): Remove typedef.
      	* gcc/graphite-clast-to-gimple.h (cloog_prog_clast, bb_pbb_def): Remove
      	typedef.
      	* gcc/lto-streamer.h (lto_decl_stream_e_t, lto_encoder_entry,
      	lto_symtab_encoder_iterator, res_pair): Remove typedef.
      	* gcc/tree-affine.h (affine_tree_combination, aff_tree): Remove typedef
      	and rename to aff_tree.
      	* gcc/sched-int.h (region): Remove typedef.
      	* gcc/diagnostic.h (diagnostic_info,
      	diagnostic_classification_change_t): Remove typedef.
      	* gcc/tree-ssa-loop.h (affine_iv_d): Remove typedef and rename to
      	affine_iv.
      	* gcc/sbitmap.h (sbitmap_iterator): Remove typedef.
      	* gcc/ssa-iterators.h (immediate_use_iterator_d, imm_use_iterator):
      	Remove typedef and rename to imm_use_iterator.
      	(ssa_operand_iterator_d, ssa_op_iter): Remove typedef and rename to
      	ssa_op_iter.
      	* gcc/ggc-internal.h (ggc_statistics): Remove typedef.
      	* gcc/cselib.h (cselib_val_struct, cselib_val): Remove typedef and
      	rename to cselib_val.
      	* gcc/tree-core.h (alias_pair): Remove typedef.
      	(constructor_elt_d, constructor_elt): Remove typedef and rename to
      	constructor_elt.
      	(ssa_use_operand_d, ssa_use_operand_t): Remove typedef and rename to
      	ssa_use_operand_t.
      	* gcc/graphite-sese-to-poly.h (base_alias_pair): Remove typedef.
      	* gcc/tree-data-ref.h (conflict_function): Remove typedef.
      	* gcc/tree-inline.h (copy_body_data): Remove typedef.
      	* gcc/ipa-inline.h (condition, size_time_entry, inline_param_summary_t,
      	edge_growth_cache_entry): Remove typedef.
      	* gcc/regrename.h (operand_rr_info, insn_rr_info): Remove typedef.
      	* gcc/gimple-iterator.h (gimple_stmt_iterator_d, gimple_stmt_iterator):
      	Remove typedef and rename to gimple_stmt_iterator.
      	* gcc/basic-block.h (ce_if_block, ce_if_block_t): Remove typedef and
      	rename to ce_if_block.
      	(edge_iterator): Remove typedef.
      	* gcc/ipa-prop.h (ipa_agg_jf_item, ipa_agg_jf_item_t): Remove typedef
      	and rename to ipa_agg_jf_item.
      	(ipa_agg_jump_function_t, ipa_param_descriptor_t, ipa_node_params_t,
      	ipa_parm_adjustment_t): Remove typedef.
      	(ipa_jump_func, ipa_jump_func_t): Remove typedef and rename to
      	ipa_jump_func.
      	(ipa_edge_args, ipa_edge_args_t): Remove typedef and rename to
      	ipa_edge_args.
      	* gcc/gcov-io.h (gcov_bucket_type): Remove typedef.
      	(gcov_working_set_info, gcov_working_set_t): Remove typedef and rename
      	to gcov_working_set_t.
      	* gcc/ira-int.h (minmax_set_iterator, ira_allocno_iterator,
      	ira_object_iterator, ira_allocno_object_iterator, ira_pref_iterator,
      	ira_copy_iterator, ira_object_conflict_iterator): Remove typedef.
      	* gcc/tree-iterator.h (tree_stmt_iterator): Remove typedef.
      	* gcc/rtl.h (addr_diff_vec_flags, mem_attrs, reg_attrs,
      	replace_label_data): Remove typedef.
      	(rtunion_def, rtunion): Remove typedef and rename to rtunion.
      	* gcc/hard-reg-set.h (hard_reg_set_iterator): Remove typedef.
      	* gcc/sel-sched-ir.h (_list_iterator, sel_global_bb_info_def,
      	sel_region_bb_info_def, succ_iterator): Remove typedef.
      	(deps_where_def, deps_where_t): Remove typedef and rename to
      	deps_where_t.
      	* gcc/coretypes.h: Adapt forward declarations.
      	* gcc/tree-scalar-evolution.h: Likewise.
      	* gcc/tree-ssa-address.h: Likewise.
      	* gcc/tree-ssa-operands.h: Likewise.
      	* gcc/function.h: Likewise.
      	* gcc/config/frv/frv-protos.h: Likewise.
      	* gcc/targhooks.h: Likewise.
      	* gcc/basic_block.h: Likewise.
      	* gcc/rtl.def: Adapt documentation.
      	* gcc/doc/tm.texi: Likewise.
      	* gcc/ipa-cp.c: Adapt uses.
      	* gcc/bitmap.c: Likewise.
      	* gcc/dwarf2out.c: Likewise.
      	* gcc/target.def: Likewise.
      	* gcc/ipa-inline-analysis.c: Likewise.
      	* gcc/dwarf2cfi.c: Likewise.
      	* gcc/tree-ssa-loop-ivopts.c: Likewise.
      	* gcc/lto-cgraph.c: Likewise.
      	* gcc/config/frv/frv.c: Likewise.
      	* gcc/ifcvt.c: Likewise.
      	* gcc/ipa-prop.c: Likewise.
      
      From-SVN: r205863
      Oleg Endo committed
  28. 09 Oct, 2013 1 commit
    • tree-flow.h: Remove all remaining prototypes... · c1bf2a39
      
      	* tree-flow.h: Remove all remaining prototypes, enums and structs that
      	are not related to tree-cfg.c.
      	* tree-ssa-address.h: New file.  Relocate prototypes.
      	* tree-ssa-address.c: (struct mem_address): Relocate from tree-flow.h.
      	(addr_for_mem_ref): New.  Combine call to get_address_description and
      	return addr_for_mem_ref.
      	* expr.c (expand_expr_real_1): Use new addr_for_mem_ref routine.
      	* tree-ssa-live.h: Adjust prototypes.
      	* passes.c: Include tree-ssa-live.h.
      	* gimple-pretty-print.h (gimple_dump_bb): Add prototype.
      	* graphite.c (graphite_transform_loops): Make static.
      	(graphite_transforms, gate_graphite_transforms, pass_data_graphite,
      	make_pass_graphite, pass_data_graphite_transforms, 
      	make_pass_graphite_transforms): Relocate here from tree-ssa-loop.c.
      	* ipa-pure-const.c (warn_function_noreturn): Make static.
      	(execute_warn_function_noreturn, gate_warn_function_noreturn,
      	class pass_warn_function_noreturn, make_pass_warn_function_noreturn):
      	Relocate from tree-cfg.c
      	* tree-cfg.c (tree_node_can_be_shared, gimple_empty_block_p): Make
      	static.
      	(execute_warn_function_noreturn, gate_warn_function_noreturn,
      	class pass_warn_function_noreturn, make_pass_warn_function_noreturn):
      	Move to ipa-pure-const.c.
      	(execute_fixup_cfg, class pass_fixup_cfg, make_pass_fixup_cfg): Relocate
      	from tree-optimize.c.
      	* tree-optimize.c (execute_fixup_cfg, class pass_fixup_cfg,
      	make_pass_fixup_cfg): Move to tree-cfg.c.
      	* tree-chrec.h: (enum ev_direction): Relocate here from tree-flow.h.
      	Relocate some prototypes.
      	* tree-data-ref.h (tree_check_data_deps) Add prototype.
      	* tree-dump.c (dump_function_to_file): Remove prototype.
      	Add tree-flow.h to the include file.
      	* tree-dump.h: Remove prototype.
      	* tree-parloops.h: New File.  Add prototypes.
      	* tree-parloops.c (gate_tree_parallelize_loops, tree_parallelize_loops,
      	pass_data_parallelize_loops,  make_pass_parallelize_loops): Relocate
      	from tree-ssa-loop.c.
      	* tree-predcom.c (run_tree_predictive_commoning,
      	gate_tree_predictive_commoning, pass_data_predcom, make_pass_predcom):
      	Relocate here from tree-ssa-loop.c.
      	* tree-ssa-dom.c (tree_ssa_dominator_optimize) Don't call 
      	ssa_name_values.release ().
      	* tree-ssa-threadedge.h: New File.  Relocate prototypes here.
      	(ssa_name_values): Relocate from tree-flow.h.
      	* tree-ssa.h: Include tree-ssa-threadedge.h and tree-ssa-address.h.
      	* tree-ssa-loop.c (run_tree_predictive_commoning,
      	gate_tree_predictive_commoning, pass_data_predcom, make_pass_predcom,
      	graphite_transforms, gate_graphite_transforms, pass_data_graphite,
      	make_pass_graphite, pass_data_graphite_transforms,
      	make_pass_graphite_transforms, gate_tree_parallelize_loops,
      	tree_parallelize_loops, pass_data_parallelize_loops,
      	make_pass_parallelize_loops): Move to other files.
      	* tree-vectorizer.h (lpeel_tree_duplicate_loop_to_edge_cfg): Prototype
      	moved here.
      	* tree.h: Remove prototypes from tree-address.c.
      
      From-SVN: r203320
      Andrew MacLeod committed
  29. 28 Sep, 2013 1 commit
    • alloc-pool.c, [...]: Add missing whitespace before "(". · c3284718
      gcc/
      	* alloc-pool.c, asan.c, auto-inc-dec.c, basic-block.h, bb-reorder.c,
      	bitmap.c, bitmap.h, bt-load.c, builtins.c, calls.c, cfgcleanup.c,
      	cfgexpand.c, cfghooks.c, cfgloop.c, cfgloopmanip.c, cfgrtl.c, cgraph.c,
      	cgraph.h, cgraphbuild.c, cgraphclones.c, cgraphunit.c, collect2.c,
      	combine-stack-adj.c, combine.c, compare-elim.c, context.c, context.h,
      	cprop.c, cse.c, cselib.c, dbxout.c, dce.c, defaults.h, df-core.c,
      	df-problems.c, df-scan.c, df.h, diagnostic.c, double-int.c, dse.c,
      	dumpfile.c, dwarf2asm.c, dwarf2cfi.c, dwarf2out.c, emit-rtl.c,
      	errors.c, except.c, expmed.c, expr.c, file-find.c, final.c,
      	fixed-value.c, fold-const.c, function.c, fwprop.c, gcc-ar.c, gcc.c,
      	gcov-io.c, gcov-io.h, gcov.c, gcse.c, genattr-common.c, genattr.c,
      	genattrtab.c, genautomata.c, genconfig.c, genemit.c, genextract.c,
      	genflags.c, gengenrtl.c, gengtype-state.c, gengtype.c, genmodes.c,
      	genopinit.c, genoutput.c, genpeep.c, genpreds.c, genrecog.c,
      	gensupport.c, ggc-common.c, ggc-page.c, gimple-fold.c, gimple-low.c,
      	gimple-pretty-print.c, gimple-ssa-strength-reduction.c, gimple.c,
      	gimple.h, godump.c, graphite-clast-to-gimple.c,
      	graphite-optimize-isl.c, graphite-poly.h, graphite-sese-to-poly.c,
      	graphite.c, haifa-sched.c, hash-table.c, hash-table.h, hwint.c,
      	hwint.h, ifcvt.c, incpath.c, init-regs.c, input.h, intl.c, intl.h,
      	ipa-cp.c, ipa-devirt.c, ipa-inline-analysis.c, ipa-inline.c,
      	ipa-profile.c, ipa-pure-const.c, ipa-reference.c, ipa-split.c,
      	ipa-utils.c, ipa.c, ira-build.c, ira.c, jump.c, loop-doloop.c,
      	loop-init.c, loop-invariant.c, loop-iv.c, lower-subreg.c, lto-cgraph.c,
      	lto-streamer-in.c, lto-streamer-out.c, lto-wrapper.c, mcf.c,
      	mode-switching.c, modulo-sched.c, omp-low.c, optabs.c, opts.c,
      	pass_manager.h, passes.c, plugin.c, postreload-gcse.c, postreload.c,
      	predict.c, prefix.c, pretty-print.c, print-rtl.c, print-tree.c,
      	profile.c, read-md.c, real.c, real.h, recog.c, ree.c, reg-stack.c,
      	regcprop.c, reginfo.c, regmove.c, regrename.c, regs.h, regstat.c,
      	reload1.c, reorg.c, rtl.c, rtl.h, rtlanal.c, sbitmap.c, sched-rgn.c,
      	sdbout.c, sel-sched-ir.c, sel-sched.c, sparseset.c, stack-ptr-mod.c,
      	statistics.c, stmt.c, stor-layout.c, store-motion.c, streamer-hooks.h,
      	system.h, target-hooks-macros.h, targhooks.c, targhooks.h, toplev.c,
      	tracer.c, trans-mem.c, tree-browser.c, tree-call-cdce.c, tree-cfg.c,
      	tree-cfgcleanup.c, tree-complex.c, tree-data-ref.c, tree-data-ref.h,
      	tree-eh.c, tree-emutls.c, tree-flow.h, tree-if-conv.c, tree-into-ssa.c,
      	tree-iterator.c, tree-loop-distribution.c, tree-mudflap.c,
      	tree-nested.c, tree-nomudflap.c, tree-nrv.c, tree-object-size.c,
      	tree-optimize.c, tree-pass.h, tree-pretty-print.c, tree-profile.c,
      	tree-scalar-evolution.c, tree-sra.c, tree-ssa-ccp.c,
      	tree-ssa-coalesce.c, tree-ssa-copy.c, tree-ssa-copyrename.c,
      	tree-ssa-dce.c, tree-ssa-dom.c, tree-ssa-dse.c, tree-ssa-forwprop.c,
      	tree-ssa-ifcombine.c, tree-ssa-live.c, tree-ssa-loop-ch.c,
      	tree-ssa-loop-im.c, tree-ssa-loop-ivopts.c, tree-ssa-loop-prefetch.c,
      	tree-ssa-loop.c, tree-ssa-math-opts.c, tree-ssa-operands.c,
      	tree-ssa-phiopt.c, tree-ssa-phiprop.c, tree-ssa-pre.c,
      	tree-ssa-reassoc.c, tree-ssa-sink.c, tree-ssa-strlen.c,
      	tree-ssa-structalias.c, tree-ssa-threadedge.c, tree-ssa-threadupdate.c,
      	tree-ssa-uncprop.c, tree-ssa-uninit.c, tree-ssa.c, tree-ssanames.c,
      	tree-stdarg.c, tree-switch-conversion.c, tree-tailcall.c,
      	tree-vect-data-refs.c, tree-vect-generic.c, tree-vect-loop-manip.c,
      	tree-vect-stmts.c, tree-vectorizer.c, tree-vectorizer.h, tree-vrp.c,
      	tree.c, tree.h, tsan.c, tsystem.h, value-prof.c, var-tracking.c,
      	varasm.c, vec.h, vmsdbgout.c, vtable-verify.c, web.c: Add missing
      	whitespace before "(".
      
      From-SVN: r203004
      Richard Sandiford committed
  30. 13 Sep, 2013 1 commit
    • tree-data-ref.h (known_dependences_p): Move here ... · 2fd5894f
      2013-09-13  Richard Biener  <rguenther@suse.de>
      
      	* tree-data-ref.h (known_dependences_p): Move here ...
      	* tree-loop-distribution.c (known_dependences_p): ... from here.
      	(dump_rdg_component, debug_rdg_component): Remove.
      	(dump_rdg): Adjust.
      	(generate_loops_for_partition): Use gimple_uid instead of
      	relying on matching stmt visit order.
      	(rdg_build_partitions): Take starting stmt vector.
      	(ldist_gen): Merge into ...
      	(distribute_loop): ... this function.  Do not compute starting
      	vertices vector.
      	* tree-cfg.c (gimple_duplicate_bb): Copy UID for PHIs.
      
      From-SVN: r202561
      Richard Biener committed
  31. 11 Sep, 2013 1 commit
    • tree-data-ref.c (dump_rdg_vertex, [...]): Move ... · 80ab0b19
      2013-09-11  Richard Biener  <rguenther@suse.de>
      
      	* tree-data-ref.c (dump_rdg_vertex, debug_rdg_vertex,
      	dump_rdg_component, debug_rdg_component, dump_rdg, debug_rdg,
      	dot_rdg_1, dot_rdg, rdg_vertex_for_stmt, create_rdg_edge_for_ddr,
      	create_rdg_edges_for_scalar, create_rdg_edges, create_rdg_vertices,
      	stmts_from_loop, known_dependences_p, build_empty_rdg,
      	build_rdg, free_rdg, rdg_defs_used_in_other_loops_p): Move ...
      	* tree-loop-distribution.c: ... here.
      	* tree-data-ref.h (struct rdg_vertex, RDGV_STMT, RDGV_DATAREFS,
      	RDGV_HAS_MEM_WRITE, RDGV_HAS_MEM_READS, RDG_STMT, RDG_DATAREFS,
      	RDG_MEM_WRITE_STMT, RDG_MEM_READS_STMT, enum rdg_dep_type,
      	struct rdg_edge, RDGE_TYPE, RDGE_LEVEL, RDGE_RELATION): Move ...
      	* tree-loop-distribution.c: ... here.
      	* tree-loop-distribution.c: Include gimple-pretty-print.h.
      	(struct partition_s): Add loops member.
      	(partition_alloc, partition_free, rdg_flag_uses, rdg_flag_vertex,
      	rdg_flag_vertex_and_dependent, rdg_flag_loop_exits,
      	build_rdg_partition_for_component, rdg_build_partitions): Adjust.
      
      From-SVN: r202492
      Richard Biener committed