Commit Graph

94 Commits

Author SHA1 Message Date
Sebastian Pop 36174c82ee re PR tree-optimization/37686 (Building of CPU2000's bzip2 with peak flags with -mcpu=power4 fails with an ICE.)
2008-10-15  Sebastian Pop  <sebastian.pop@amd.com>

	PR tree-optimization/37686
	* testsuite/gcc.dg/tree-ssa/pr37686.c: New.
	* tree-loop-linear.c (linear_transform_loops): Build a
	loop nest vector.  Pass it to lambda_compute_access_matrices.
	* tree-data-ref.h (struct access_matrix): Store the loop nest
	relative to which it encodes the information.
	(AM_LOOP_NEST_NUM): Renamed AM_LOOP_NEST.
	(am_vector_index_for_loop): Reimplemented: iterate over the
	loop nest for finding the loop index in the access matrix.
	(lambda_compute_access_matrices): Update declaration.
	* lambda-code.c (build_access_matrix): Pass the loop nest and
	record it.
	(lambda_compute_access_matrices): Same.

From-SVN: r141141
2008-10-15 16:13:33 +00:00
Sebastian Pop f8bf925265 backport: configure: Regenerate.
2008-09-02  Sebastian Pop  <sebastian.pop@amd.com>
	    Tobias Grosser  <grosser@fim.uni-passau.de>
	    Jan Sjodin  <jan.sjodin@amd.com>
	    Harsha Jagasia  <harsha.jagasia@amd.com>
	    Dwarakanath Rajagopal  <dwarak.rajagopal@amd.com>
	    Konrad Trifunovic  <konrad.trifunovic@inria.fr>
	    Adrien Eliche  <aeliche@isty.uvsq.fr>

	Merge from graphite branch.
	* configure: Regenerate.
	* Makefile.in: Regenerate.
	* configure.ac (host_libs): Add ppl and cloog.
	Add checks for PPL and CLooG.
	* Makefile.def (ppl, cloog): Added modules and dependences.
	* Makefile.tpl (PPLLIBS, PPLINC, CLOOGLIBS, CLOOGINC): New.
	(HOST_PPLLIBS, HOST_PPLINC, HOST_CLOOGLIBS, HOST_CLOOGINC): New.

gcc/
	* graphite.c: New.
	* graphite.h: New.
	* tree-loop-linear.c (perfect_loop_nest_depth): Export.
	* doc/invoke.texi (-floop-block, -floop-interchange,
	-floop-strip-mine): Document new flags.
	* tree-into-ssa.c (gimple_vec): Moved...
	* tree-loop-distribution.c (rdg_component): Moved...
	* cfgloopmanip.c: Include tree-flow.h.
	(update_dominators_in_loop): New.
	(create_empty_if_region_on_edge): New.
	(create_empty_loop_on_edge): New.
	(loopify): Use update_dominators_in_loop.
	* tree-pass.h (pass_graphite_transforms): Declared.
	* configure: Regenerate.
	* tree-phinodes.c (make_phi_node): Export.
	(add_phi_node_to_bb): New, split from create_phi_node.
	* tree-chrec.c (for_each_scev_op): New.
	* tree-chrec.h (for_each_scev_op): Declared.
	* tree-ssa-loop-ivopts.c (get_phi_with_result): New.
	(remove_statement): Call get_phi_with_result.
	* config.in (HAVE_cloog): Undef.
	* gdbinit.in (pgg): New.
	* timevar.def (TV_GRAPHITE_TRANSFORMS): New.
	* tree-ssa-loop.c (graphite_transforms): New.
	(gate_graphite_transforms): New.
	(pass_graphite_transforms): New.
	* configure.ac (PPLLIBS, PPLINC, CLOOGLIBS, CLOOGINC,
	HAVE_cloog): Defined.
	* tree-vectorizer.c (rename_variables_in_bb): Export.
	* tree-data-ref.c (dr_may_alias_p): Export.
	(stmt_simple_memref_p): New.
	(find_data_references_in_stmt): Export.
	(find_data_references_in_loop): Export.
	(create_rdg_edge_for_ddr): Initialize RDGE_RELATION.
	(create_rdg_edges_for_scalar): Initialize RDGE_RELATION.
	(create_rdg_vertices): Export.
	(build_empty_rdg): New.
	(build_rdg): Call build_empty_rdg.  Free dependence_relations.
	* tree-data-ref.h (rdg_component): ... here.
	(scop_p): New.
	(struct data_reference): Add a field scop.
	(DR_SCOP): New.
	(find_data_references_in_loop): Declared.
	(find_data_references_in_stmt): Declared.
	(create_rdg_vertices): Declared.
	(dr_may_alias_p): Declared.
	(stmt_simple_memref_p): Declared.
	(struct rdg_edge): Add a field ddr_p relation.
	(build_empty_rdg): Declared.
	* lambda.h (lambda_matrix): Declare a VEC of.
	(find_induction_var_from_exit_cond): Declared.
	(lambda_vector_compare): New.
	* common.opt (fgraphite, floop-strip-mine,
	floop-interchange, floop-block): New flags.
	* lambda-code.c (find_induction_var_from_exit_cond): Export.
	* cfgloop.c (is_loop_exit): New.
	* cfgloop.h (is_loop_exit): Declared.
	(create_empty_if_region_on_edge): Declared.
	(create_empty_loop_on_edge): Declared.
	* tree-flow.h (add_phi_node_to_bb): Declared.
	(make_phi_node): Declared.
	(rename_variables_in_bb): Declared.
	(perfect_loop_nest_depth): Declared.
	(graphite_transform_loops): Declared.
	* Makefile.in (cfgloopmanip.o): Depend on TREE_FLOW_H.
	(graphite.o-warn): Add -Wno-error.
	(PPLLIBS, PPLINC, CLOOGLIBS, CLOOGINC): Declared.
	(LIBS): Add GMPLIBS, CLOOGLIBS, PPLLIBS.
	(INCLUDES): Add PPLINC, CLOOGINC.
	(OBJS-common): Add graphite.o.
	(graphite.o): Add rule.
	* gimple.h (gimple_vec): ... here.
	* tree-cfg.c (print_loops): Start printing at ENTRY_BLOCK_PTR.
	* passes.c (init_optimization_passes): Schedule 
	pass_graphite_transforms.

testsuite/

	* gcc.dg/graphite/scop-{0,1,2,3,4,5,6,7,8,9,
	10,11,12,13,14,15,16,17,18}.c: New.
	* gcc.dg/graphite/graphite.exp: New.
	* gcc.dg/graphite/scop-matmult.c: New.
	* gcc.dg/graphite/block-0.c: New.
	* lib/target-supports.exp (check_effective_target_fgraphite): New.
	* gfortran.dg/graphite/block-1.f90: New.
	* gfortran.dg/graphite/scop-{1,2}.f: New.
	* gfortran.dg/graphite/block-{1,3,4}.f90: New.
	* gfortran.dg/graphite/graphite.exp: New.


Co-Authored-By: Adrien Eliche <aeliche@isty.uvsq.fr>
Co-Authored-By: Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
Co-Authored-By: Harsha Jagasia <harsha.jagasia@amd.com>
Co-Authored-By: Jan Sjodin <jan.sjodin@amd.com>
Co-Authored-By: Konrad Trifunovic <konrad.trifunovic@inria.fr>
Co-Authored-By: Tobias Grosser <grosser@fim.uni-passau.de>

From-SVN: r139893
2008-09-02 16:31:04 +00:00
Richard Biener 726a989a8b backport: ChangeLog.tuples: ChangeLog from gimple-tuples-branch.
2008-07-28  Richard Guenther  <rguenther@suse.de>

	Merge from gimple-tuples-branch.

	* ChangeLog.tuples: ChangeLog from gimple-tuples-branch.
	* gimple.def: New file.
	* gsstruct.def: Likewise.
	* gimple-iterator.c: Likewise.
	* gimple-pretty-print.c: Likewise.
	* tree-gimple.c: Removed.  Merged into ...
	* gimple.c: ... here.  New file.
	* tree-gimple.h: Removed.  Merged into ...
	* gimple.h: ... here.  New file.

	* Makefile.in: Add dependencies on GIMPLE_H and tree-iterator.h.
	* configure.ac: Added support for ENABLE_GIMPLE_CHECKING and the
	--enable-checking=gimple flag.
	* config.in: Likewise.
	* configure: Regenerated.

	* tree-ssa-operands.h: Tuplified.
	* tree-vrp.c: Likewise.
	* tree-loop-linear.c: Likewise.
	* tree-into-ssa.c: Likewise.
	* tree-ssa-loop-im.c: Likewise.
	* tree-dump.c: Likewise.
	* tree-complex.c: Likewise.
	* cgraphbuild.c: Likewise.
	* tree-ssa-threadupdate.c: Likewise.
	* tree-ssa-loop-niter.c: Likewise.
	* tree-pretty-print.c: Likewise.
	* tracer.c: Likewise.
	* gengtype.c: Likewise.
	* tree-loop-distribution.c: Likewise.
	* tree-ssa-loop-unswitch.c: Likewise.
	* cgraph.c: Likewise.
	* cgraph.h: Likewise.
	* tree-ssa-loop-manip.c: Likewise.
	* value-prof.c: Likewise.
	* tree-ssa-loop-ch.c: Likewise.
	* tree-tailcall.c: Likewise.
	* value-prof.h: Likewise.
	* tree.c: Likewise.
	* tree.h: Likewise.
	* tree-pass.h: Likewise.
	* ipa-cp.c: Likewise.
	* tree-scalar-evolution.c: Likewise.
	* tree-scalar-evolution.h: Likewise.
	* target.h: Likewise.
	* lambda-mat.c: Likewise.
	* tree-phinodes.c: Likewise.
	* diagnostic.h: Likewise.
	* builtins.c: Likewise.
	* tree-ssa-alias-warnings.c: Likewise.
	* cfghooks.c: Likewise.
	* fold-const.c: Likewise.
	* cfghooks.h: Likewise.
	* omp-low.c: Likewise.
	* tree-ssa-dse.c: Likewise.
	* ipa-reference.c: Likewise.
	* tree-ssa-uncprop.c: Likewise.
	* toplev.c: Likewise.
	* tree-gimple.c: Likewise.
	* tree-gimple.h: Likewise.
	* tree-chrec.c: Likewise.
	* tree-chrec.h: Likewise.
	* tree-ssa-sccvn.c: Likewise.
	* tree-ssa-sccvn.h: Likewise.
	* cgraphunit.c: Likewise.
	* tree-ssa-copyrename.c: Likewise.
	* tree-ssa-ccp.c: Likewise.
	* tree-ssa-loop-ivopts.c: Likewise.
	* tree-nomudflap.c: Likewise.
	* tree-call-cdce.c: Likewise.
	* ipa-pure-const.c: Likewise.
	* c-format.c: Likewise.
	* tree-stdarg.c: Likewise.
	* tree-ssa-math-opts.c: Likewise.
	* tree-ssa-dom.c: Likewise.
	* tree-nrv.c: Likewise.
	* tree-ssa-propagate.c: Likewise.
	* ipa-utils.c: Likewise.
	* tree-ssa-propagate.h: Likewise.
	* tree-ssa-alias.c: Likewise.
	* gimple-low.c: Likewise.
	* tree-ssa-sink.c: Likewise.
	* ipa-inline.c: Likewise.
	* c-semantics.c: Likewise.
	* dwarf2out.c: Likewise.
	* expr.c: Likewise.
	* tree-ssa-loop-ivcanon.c: Likewise.
	* predict.c: Likewise.
	* tree-ssa-loop.c: Likewise.
	* tree-parloops.c: Likewise.
	* tree-ssa-address.c: Likewise.
	* tree-ssa-ifcombine.c: Likewise.
	* matrix-reorg.c: Likewise.
	* c-decl.c: Likewise.
	* tree-eh.c: Likewise.
	* c-pretty-print.c: Likewise.
	* lambda-trans.c: Likewise.
	* function.c: Likewise.
	* langhooks.c: Likewise.
	* ebitmap.h: Likewise.
	* tree-vectorizer.c: Likewise.
	* function.h: Likewise.
	* langhooks.h: Likewise.
	* tree-vectorizer.h: Likewise.
	* ipa-type-escape.c: Likewise.
	* ipa-type-escape.h: Likewise.
	* domwalk.c: Likewise.
	* tree-if-conv.c: Likewise.
	* profile.c: Likewise.
	* domwalk.h: Likewise.
	* tree-data-ref.c: Likewise.
	* tree-data-ref.h: Likewise.
	* tree-flow-inline.h: Likewise.
	* tree-affine.c: Likewise.
	* tree-vect-analyze.c: Likewise.
	* c-typeck.c: Likewise.
	* gimplify.c: Likewise.
	* coretypes.h: Likewise.
	* tree-ssa-phiopt.c: Likewise.
	* calls.c: Likewise.
	* tree-ssa-coalesce.c: Likewise.
	* tree.def: Likewise.
	* tree-dfa.c: Likewise.
	* except.c: Likewise.
	* except.h: Likewise.
	* cfgexpand.c: Likewise.
	* tree-cfgcleanup.c: Likewise.
	* tree-ssa-pre.c: Likewise.
	* tree-ssa-live.c: Likewise.
	* tree-sra.c: Likewise.
	* tree-ssa-live.h: Likewise.
	* tree-predcom.c: Likewise.
	* lambda.h: Likewise.
	* tree-mudflap.c: Likewise.
	* ipa-prop.c: Likewise.
	* print-tree.c: Likewise.
	* tree-ssa-copy.c: Likewise.
	* ipa-prop.h: Likewise.
	* tree-ssa-forwprop.c: Likewise.
	* ggc-page.c: Likewise.
	* c-omp.c: Likewise.
	* tree-ssa-dce.c: Likewise.
	* tree-vect-patterns.c: Likewise.
	* tree-ssa-ter.c: Likewise.
	* tree-nested.c: Likewise.
	* tree-ssa.c: Likewise.
	* lambda-code.c: Likewise.
	* tree-ssa-loop-prefetch.c: Likewise.
	* tree-inline.c: Likewise.
	* tree-inline.h: Likewise.
	* tree-iterator.c: Likewise.
	* tree-optimize.c: Likewise.
	* tree-ssa-phiprop.c: Likewise.
	* tree-vect-transform.c: Likewise.
	* tree-object-size.c: Likewise.
	* tree-outof-ssa.c: Likewise.
	* cfgloop.c: Likewise.
	* system.h: Likewise.
	* tree-profile.c: Likewise.
	* cfgloop.h: Likewise.
	* c-gimplify.c: Likewise.
	* c-common.c: Likewise.
	* tree-vect-generic.c: Likewise.
	* tree-flow.h: Likewise.
	* c-common.h: Likewise.
	* basic-block.h: Likewise.
	* tree-ssa-structalias.c: Likewise.
	* tree-switch-conversion.c: Likewise.
	* tree-ssa-structalias.h: Likewise.
	* tree-cfg.c: Likewise.
	* passes.c: Likewise.
	* ipa-struct-reorg.c: Likewise.
	* ipa-struct-reorg.h: Likewise.
	* tree-ssa-reassoc.c: Likewise.
	* cfgrtl.c: Likewise.
	* varpool.c: Likewise.
	* stmt.c: Likewise.
	* tree-ssanames.c: Likewise.
	* tree-ssa-threadedge.c: Likewise.
	* langhooks-def.h: Likewise.
	* tree-ssa-operands.c: Likewise.
	* config/alpha/alpha.c: Likewise.
	* config/frv/frv.c: Likewise.
	* config/s390/s390.c: Likewise.
	* config/m32c/m32c.c: Likewise.
	* config/m32c/m32c-protos.h: Likewise.
	* config/spu/spu.c: Likewise.
	* config/sparc/sparc.c: Likewise.
	* config/i386/i386.c: Likewise.
	* config/sh/sh.c: Likewise.
	* config/xtensa/xtensa.c: Likewise.
	* config/stormy16/stormy16.c: Likewise.
	* config/ia64/ia64.c: Likewise.
	* config/rs6000/rs6000.c: Likewise.
	* config/pa/pa.c: Likewise.
	* config/mips/mips.c: Likewise.

From-SVN: r138207
2008-07-28 14:33:56 +00:00
Sebastian Pop 4e8d717700 re PR middle-end/36286 (ICE with -ftree-loop-linear and -O1 and above)
2008-05-21  Sebastian Pop  <sebastian.pop@amd.com>

	PR tree-optimization/36286
	PR tree-optimization/36287
	* lambda-code.c (build_access_matrix): Do not use the loop->num
	for computing the number of induction variables: use the loop depth
	instead.

	* testsuite/gcc.dg/tree-ssa/pr36287.c: New.
	* testsuite/gfortran.dg/pr36286.f90: New.

From-SVN: r135741
2008-05-21 23:13:00 +00:00
Jan Sjodin 9f275479a9 tree-loop-linear.c (gather_interchange_stats): Look in the access matrix...
2008-05-20  Jan Sjodin  <jan.sjodin@amd.com>
	    Sebastian Pop  <sebastian.pop@amd.com>

	* tree-loop-linear.c (gather_interchange_stats): Look in the access matrix,
	and never look at the tree representation of the memory accesses.
	(linear_transform_loops): Computes parameters and access matrices.
	* tree-data-ref.c (compute_data_dependences_for_loop): Returns false when fails.
	(access_matrix_get_index_for_parameter): New.
	* tree-data-ref.h (struct access_matrix): New.
	(AM_LOOP_NEST_NUM, 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,
	am_vector_index_for_loop): New.
	(struct data_reference): Add field access_matrix.
	(DR_ACCESS_MATRIX): New.
	(compute_data_dependences_for_loop): Update declaration.
	(lambda_collect_parameters, lambda_compute_access_matrices): Declared.
	* lambda.h (lambda_vector_vec_p): Declared.
	* lambda-code.c: Depend on pointer-set.h.
	(lambda_collect_parameters_from_af, lambda_collect_parameters,
	av_for_af_base, av_for_af, build_access_matrix,
	lambda_compute_access_matrices): New.
	* Makefile.in (lambda-code.o): Depend on pointer-set.h.


Co-Authored-By: Sebastian Pop <sebastian.pop@amd.com>

From-SVN: r135672
2008-05-20 19:11:56 +00:00
Sebastian Pop d49c149d62 lambda-code.c (lambda_transform_legal_p): Handle the case of no dependences in the dependence_relations vector.
2008-01-16  Sebastian Pop  <sebastian.pop@amd.com>

	* lambda-code.c (lambda_transform_legal_p): Handle the case of
	no dependences in the dependence_relations vector.

From-SVN: r131577
2008-01-16 19:26:26 +00:00
Sebastian Pop 64cbaacecb re PR tree-optimization/34017 (ICE in lambda_loopnest_to_gcc_loopnest with -O2 -ftree-loop-linear)
2008-01-09  Sebastian Pop  <sebastian.pop@amd.com>

	PR tree-optimization/34017
	* lambda-code.c (lambda_loopnest_to_gcc_loopnest): Generate code
	also for PHI_NODE expressions.

	* gcc.dg/tree-ssa/pr34017.c: New.

From-SVN: r131435
2008-01-09 21:22:19 +00:00
Sebastian Pop d7d20e1c12 lambda-code.c (lambda_loopnest_to_gcc_loopnest): Fix typo.
2007-12-21  Sebastian Pop  <sebastian.pop@amd.com>
 
	* lambda-code.c (lambda_loopnest_to_gcc_loopnest): Fix typo.

From-SVN: r131123
2007-12-21 19:12:32 +00:00
Sebastian Pop 3615b8c200 re PR tree-optimization/34123 (verify_ssa failed with -ftree-loop-linear)
2007-12-18  Sebastian Pop  <sebastian.pop@amd.com>

	PR tree-optimization/34123
	* lambda-code.c (can_duplicate_iv): New.
	(cannot_convert_modify_to_perfect_nest): New.
	(cannot_convert_bb_to_perfect_nest): New.
	(can_convert_to_perfect_nest): Split up.

	* gcc.dg/tree-ssa/pr34123.c: New test.

From-SVN: r131040
2007-12-18 19:40:35 +00:00
Sebastian Pop 671633e949 re PR tree-optimization/23820 (ICE in lambda_loopnest_to_gcc_loopnest, at lambda-code.c:1982)
2007-10-19  Sebastian Pop  <sebastian.pop@amd.com>

	PR tree-optimization/23820
	PR tree-optimization/24309
	PR tree-optimization/33766
	* testsuite/gcc.dg/tree-ssa/pr23820.c: New.
	* testsuite/gcc.dg/tree-ssa/pr24309.c: New.
	* testsuite/gcc.dg/tree-ssa/pr33766.c: New.
	* testsuite/gcc.dg/tree-ssa/ltrans-3.c: XFAILed.
	* tree-loop-linear.c (perfect_loop_nest_depth): New.
	(linear_transform_loops): Use perfect_loop_nest_depth.
	* lambda-code.c (perfect_nest_p): Outer loops in perfect nests 
	should have a single condition: their exit.

From-SVN: r129494
2007-10-19 19:01:58 +00:00
Sebastian Pop 05023ea487 re PR tree-optimization/33576 (segfault in extract_muldiv for cpu2006 benchmark)
2007-10-03  Sebastian Pop  <sebastian.pop@amd.com>

        PR tree-optimization/33576
        * testsuite/gcc.dg/tree-ssa/pr33576.c: New.
        * tree-loop-linear.c (linear_transform_loops): Call remove_iv.
        * lambda.h (lambda_loopnest_to_gcc_loopnest): New parameter.
        (remove_iv): Declared.
        * lambda-code.c (remove_iv): Not static.
        (lambda_loopnest_to_gcc_loopnest): New parameter remove_ivs.
        Don't remove ivs there, save ivs in the buffer.

From-SVN: r128986
2007-10-03 15:45:10 +00:00
Laurynas Biveinis b9dd78fa1e tree-loop-linear.c: Include obstack.h.
2007-09-06  Laurynas Biveinis  <laurynas.biveinis@gmail.com>

	* tree-loop-linear.c: Include obstack.h.
	(linear_transform_loops): New obstack lambda_obstack.
	Initialize it, pass it to gcc_loopnest_to_lambda_loopnest,
	lambda_loopnest_transform, lambda_loopnest_to_gcc_loopnest calls
	and free afterwards.
	* lambda.h (struct obstack): New forward declaration.
	(lambda_linear_expression_new): New parameter of type struct
	obstack *.
	(lambda_loopnest_new): Likewise.
	(lambda_loopnest_transform): Likewise.
	(lambda_body_vector_new): Likewise.
	(lambda_body_vector_compute_new): Likewise.
	(gcc_loopnest_to_lambda_loopnest): Likewise.
	(lambda_loopnest_to_gcc_loopnest): Likewise.
	* lambda-code.c: Include obstack.h.
	(lambda_lattice_new): New parameter lambda_obstack.  Use it for
	allocation of ret.
	(lambda_body_vector_new): Likewise.
	(lambda_linear_expression_new): Likewise.
	(lambda_lattice_new): Likewise.
	(lambda_loopnest_new): Likewise.  Additionally use obstack to
	allocate LN_LOOPS(ret).
	(lambda_lattice_compute_base): New parameter lambda_obstack.  Pass
	it to lambda_lattice_new.
	(lambda_body_vector_compute_new): New parameter lambda_obstack.
	Pass it to lambda_body_vector_new.
	(lambda_lattice_compute_base): New paramater lambda_obstack.  Pass
	it to lambda_lattice_new.
	(compute_nest_using_fourier_motzkin): New parameter lambda_obstack.
	Pass it to lambda_loopnest_new, lambda_linear_expression_new.
	(lambda_compute_target_space): Likewise.
	(lambda_compute_auxillary_space): New parameter lambda_obstack.
	Pass it to lambda_lattice_compute_base and
	compute_nest_using_fourieer_motzkin.
	(lambda_loopnest_transform): New parameter lambda_obstack.  Pass
	it to lambda_lattice_compute_base, lambda_lattice_auxillary_space
	and lambda_lattice_compute_target_space.
	(gcc_tree_to_linear_expression): Nex parameter lambda_obstack.
	Pass it to lambda_linear_expression_new.
	(gcc_loop_to_lambda_loop): New parameter lambda_obstack.  Pass it
	to gcc_tree_to_linear_expression.
	(gcc_loopnest_to_lambda_loopnest): New parameter lambda_obstack.
	Pass it to gcc_loop_to_lambda_loop and lambda_loopnest_new.
	(lambda_loopnest_to_gcc_loopnest): New parameter lambda_obstack.
	Pass it to lambda_body_vector_new and
	lambda_body_vector_compute_new.
	* Makefile.in (tree-loop-linear.o): Add $(OBSTACK_H) dependency.
	(lambda-code.o): Likewise.

From-SVN: r128219
2007-09-07 01:33:41 +00:00
Nick Clifton 9dcd6f09a3 Change copyright header to refer to version 3 of the GNU General Public License and to point readers at the COPYING3 file and the FSF's license web page.
From-SVN: r126948
2007-07-26 08:37:01 +00:00
Zdenek Dvorak c6540bdeb4 tree-scalar-evolution.c (scev_const_prop): Add arguments to force_gimple_operand_bsi.
* tree-scalar-evolution.c (scev_const_prop): Add arguments to
	force_gimple_operand_bsi.
	* tree-ssa-loop-ivopts.c (rewrite_use_nonlinear_expr,
	rewrite_use_compare): Ditto.
	* tree-ssa-address.c (gimplify_mem_ref_parts, create_mem_ref):
	Ditto.
	* tree-ssa-ifcombine.c (ifcombine_ifandif): Ditto.
	* tree-ssa-loop-prefetch.c (issue_prefetch_ref): Ditto.
	* lambda-code.c (replace_uses_equiv_to_x_with_y): Ditto.
	* tree-profile.c (prepare_instrumented_value,
	tree_gen_interval_profiler, tree_gen_pow2_profiler,
	tree_gen_one_value_profiler, tree_gen_ic_profiler,
	tree_gen_ic_func_profiler, tree_gen_average_profiler,
	tree_gen_ior_profiler): Ditto.
	* tree-ssa-reassoc.c (negate_value): Ditto.
	* matrix-reorg.c (transform_access_sites, transform_allocation_sites):
	Use force_gimple_operand_bsi.
	* tree-vect-transform.c (vect_update_ivs_after_vectorizer): Ditto.
	* tree-if-conv.c (add_to_dst_predicate_list,
	find_phi_replacement_condition): Ditto.
	* gimplify.c (force_gimple_operand_bsi): Add before and m arguments.
	Call mark_symbols_for_renaming for new statements.
	* tree-flow.h (force_gimple_operand_bsi): Declaration changed.

From-SVN: r126500
2007-07-09 23:04:06 +00:00
Jan Sjodin 51c0074eed lambda-code.c (remove_iv): New.
* lambda-code.c (remove_iv): New.
	(lambda_loopnest_to_gcc_loopnest): Use remove_iv.


Co-Authored-By: Sebastian Pop <sebpop@gmail.com>

From-SVN: r125605
2007-06-10 21:00:59 +00:00
Thomas Neumann 45222d4a3d lambda-code.c (struct lambda_lattice_s): Add a name to the struct.
* lambda-code.c (struct lambda_lattice_s): Add a name to the struct.
	(lambda_body_vector_new): Use type safe memory macros.
	(lambda_linear_expression_new): Likewise.
	(lambda_loopnest_new): Likewise.
	(lambda_lattice_new): Likewise.
	(replace_uses_equiv_to_x_with_y): Cast according to the coding
	conventions. Use type safe memory macros.
	* lambda.h (struct lambda_trans_matrix_s): Add a name to the struct.
	(lambda_body_vector_s): Likewise.
	* lambda-mat.c (lambda_matrix_new): Use type safe memory macros.
	* lambda-trans.c (lambda_trans_matrix_new): Likewise.

From-SVN: r125491
2007-06-06 14:33:57 +00:00
Jan Sjodin 69f2880c76 lambda.h (build_linear_expr): New.
* lambda.h (build_linear_expr): New.
	* lambda-code.c (lbv_to_gcc_expression, lle_to_gcc_expression): 
	Use build_linear_expr, call fold and force_gimple_operand.
	(lambda_loopnest_to_gcc_loopnest): Check that there is
	something to insert.
	* testsuite/gcc.dg/tree-ssa/ltrans-6.c: New.


Co-Authored-By: Sebastian Pop <sebpop@gmail.com>

From-SVN: r125355
2007-06-06 06:08:58 +00:00
Zdenek Dvorak 66f97d31f2 cfgloopmanip.c (remove_path, [...]): Change dom_bbs to vector.
* cfgloopmanip.c (remove_path, loopify, duplicate_loop_to_header_edge):
	Change dom_bbs to vector.  Add argument to iterate_fix_dominators call.
	* loop-unroll.c (unroll_loop_runtime_iterations): Ditto.
	* tree-cfg.c (tree_duplicate_sese_region): Change doms to vector.
	Add argument to iterate_fix_dominators call.
	(remove_edge_and_dominated_blocks): Pass vector to bbs_to_fix_dom.
	* gcse.c (hoist_code): Change domby to vector.
	* cfghooks.c (make_forwarder_block): Change doms_to_fix to vector.
	Add argument to iterate_fix_dominators call.
	* loop-doloop.c (doloop_modify): Changed recount_dominator to
	recompute_dominator.
	* lambda-code.c (perfect_nestify): Ditto.
	* cfgloopanal.c: Include graphds.h.
	(struct edge, struct vertex, struct graph, dump_graph, new_graph,
	add_edge, dfs, for_each_edge, free_graph): Moved to graphds.c.
	(mark_irreducible_loops): Use graphds_scc.  Remove argument from
	add_edge call.
	* graphds.c: New file.
	* graphds.h: New file.
	* dominance.c: Include vecprim.h, pointer-set.h and graphds.h.
	(get_dominated_by, get_dominated_by_region): Change return type to
	vector.
	(verify_dominators): Recompute all dominators and compare the results.
	(recount_dominator): Renamed to ...
	(recompute_dominator): ... this.  Do not check that the block is
	dominated by entry.
	(iterate_fix_dominators): Reimplemented.
	(prune_bbs_to_update_dominators, root_of_dom_tree,
	determine_dominators_for_sons): New functions.
	* et-forest.c (et_root): New function.
	* et-forest.h (et_root): Declare.
	* Makefile.in (graphds.o): Add.
	(cfgloopanal.o): Add graphds.h dependency.
	(dominance.o): Add graphds.h, vecprim.h and pointer-set.h dependency.
	* basic-block.h (get_dominated_by, get_dominated_by_region,
	iterate_fix_dominators): Declaration changed.
	(recount_dominator): Renamed to ...
	(recompute_dominator): ... this.
	* tree-ssa-threadupdate.c (thread_block): Free dominance info.
	(thread_through_all_blocks): Do not free dominance info.

From-SVN: r125297
2007-06-03 19:10:44 +00:00
Zdenek Dvorak 1896570321 tree-scalar-evolution.c (scev_const_prop): Do not create labels.
* tree-scalar-evolution.c (scev_const_prop): Do not create labels.
	* tree-ssa-sink.c (statement_sink_location): Return basic block and
	bsi of the location where statements should be inserted.
	(sink_code_in_bb): Take bsi from statement_sink_location.
	* lambda-code.c (lambda_loopnest_to_gcc_loopnest): Use bsi_after_labels
	instead of bsi_start.
	* tree-profile.c (tree_gen_ic_func_profiler): Pass BSI_NEW_STMT to
	bsi_insert_after.
	* tree-cfg.c (bsi_move_after): Pass BSI_NEW_STMT to bsi_insert_after.
	(bsi_move_before): Document inconsistency with bsi_move_after.
	(tree_redirect_edge_and_branch): Do not create labels if not necessary.

From-SVN: r125181
2007-05-30 13:29:51 +00:00
Zdenek Dvorak 9ba025a2c1 tree-loop-linear.c (gather_interchange_stats, [...]): Use loop_depth and loop_outer accessor functions.
* tree-loop-linear.c (gather_interchange_stats, try_interchange_loops):
	Use loop_depth and loop_outer accessor functions.
	* tree-ssa-loop-im.c (outermost_invariant_loop, set_level,
	determine_invariantness_stmt, move_computations_stmt): Ditto.
	* cfgloopmanip.c (fix_bb_placement, fix_loop_placement, remove_path,
	add_loop, loopify, unloop, fix_loop_structure): Ditto.
	* tree-ssa-loop-manip.c (find_uses_to_rename_use): Ditto.
	* tree-scalar-evolution.c (interpret_loop_phi,
	compute_scalar_evolution_in_loop, analyze_scalar_evolution_in_loop,
	instantiate_parameters_1, scev_const_prop): Ditto.
	* cfghooks.c (make_forwarder_block): Ditto.
	* cfgloopanal.c (mark_irreducible_loops, mark_loop_exit_edges): Ditto.
	* modulo-sched.c (loop_canon_p): Ditto.
	* tree-vectorizer.c (slpeel_tree_duplicate_loop_to_edge_cfg,
	slpeel_can_duplicate_loop_p): Ditto.
	* lambda-code.c (invariant_in_loop_and_outer_loops): Ditto.
	* tree-cfg.c (tree_duplicate_sese_region): Ditto.
	* cfgloop.c (flow_loop_dump, flow_loop_nodes_find, rescan_loop_exit,
	cancel_loop, verify_loop_structure): Ditto.
	(flow_loop_nested_p, superloop_at_depth, flow_loop_free,
	add_bb_to_loop, remove_bb_from_loops, find_common_loop): Use the
	superloops vector instead of "pred" array.
	(establish_preds): Take father loop as an argument.  Initialize the
	superloops vector.
	(flow_loop_tree_node_add): Pass father loop to establish_preds.  Do not
	initialize loop->outer.
	(flow_loop_tree_node_remove): Truncate the superloops vector.
	* cfgloop.h (struct loop): Removed field "outer", fields "depth" and
	"pred" merged to "superloops" vector.
	(loop_depth, loop_outer): New.
	(fel_init): Use loop_outer.

From-SVN: r124619
2007-05-11 15:52:01 +00:00
Zdenek Dvorak e604f56c8f re PR tree-optimization/30565 (ICE with -O1 -ftree-pre -ftree-loop-linear)
PR tree-optimization/30565
	* lambda-code.c (perfect_nestify): Fix updating of dominators.

	* gcc.dg/tree-ssa/loop-27.c: New test.

From-SVN: r124378
2007-05-03 13:27:26 +00:00
Zdenek Dvorak a9b77cd1f7 tree-ssa-loop-im.c (determine_invariantness_stmt): Attempt to transform only GIMPLE_MODIFY_STMTs.
* tree-ssa-loop-im.c (determine_invariantness_stmt): Attempt to
	transform only GIMPLE_MODIFY_STMTs.
	* tree-complex.c (expand_complex_operations_1): Ditto.
	(expand_complex_div_wide): Do not create gotos in COND_EXPR branches.
	* tree-ssa-loop-manip.c (build_if_stmt): Removed.
	(tree_transform_and_unroll_loop): Do not create gotos in COND_EXPR
	branches.
	* value-prof.c (tree_divmod_fixed_value, tree_mod_pow2,
	tree_mod_subtract, tree_ic, tree_stringop_fixed_value): Ditto.
	* omp-low.c (expand_parallel_call, expand_omp_for_generic,
	expand_omp_for_static_chunk, expand_omp_for_static_nochunk): Ditto.
	* tree-vectorizer.c (slpeel_make_loop_iterate_ntimes,
	slpeel_add_loop_guard): Ditto.
	* tree-mudflap.c (mf_build_check_statement_for): Ditto.
	* lambda-code.c (perfect_nestify): Ditto.
	* tree-iterator.c (tsi_split_statement_list_before): Fix splitting
	before the first statement.
	* tree-optimize.c (execute_free_datastructures): Fix comments.
	(execute_free_cfg_annotations): Do not call disband_implicit_edges.
	* tree-flow.h (disband_implicit_edges): Declaration removed.
	* tree-cfg.c (make_cond_expr_edges): Remove gotos from COND_EXPR
	branches.
	(cleanup_dead_labels, tree_redirect_edge_and_branch): Handle COND_EXPRs
	without gotos.
	(disband_implicit_edges, has_label_p): Removed.
	(tree_verify_flow_info): Verify that COND_EXPR branches are empty.
	(tree_lv_add_condition_to_bb): Do not create gotos in COND_EXPR
	branches.
	* tree.c (build3_stat): Mark COND_EXPRs used as statements as having
	side effects.
	* tree-pretty-print.c (dump_implicit_edges): Dump implicit edges
	also for COND_EXPRs.
	* cfgexpand.c (label_rtx_for_bb): New function.
	(expand_gimple_cond_expr): Do not expect gotos in COND_EXPR branches.
	Use label_rtx_for_bb to find the labels.
	(expand_gimple_basic_block): Remove RETURN_EXPR at the end of the
	last block.  Detect fallthru edges.

From-SVN: r124214
2007-04-27 08:20:39 +00:00
Zdenek Dvorak fbb0d4f878 re PR middle-end/30835 (ICE with -O2 -ftree-loop-linear)
PR tree-optimization/30835
	* lambda-code.c (can_convert_to_perfect_nest): Check whether
	bb_for_stmt is not NULL before accessing it.

From-SVN: r122866
2007-03-12 21:56:12 +00:00
Mark Mitchell fc8600f9c1 extend.texi: Document optional priority argument to constructors and destructors.
* doc/extend.texi: Document optional priority argument to
	constructors and destructors.
	* tree.c (init_priority_for_decl): Adjust GTY markers.
	(init_ttree): Use priority-info hash functions for
	init_priority_for_decl.
	(tree_map_eq): Rename to ...
	(tree_map_base_eq): ... this.
	(tree_map_marked_p): Rename to ...
	(tree_map_base_marked_p): ... this.
	(tree_map_base_hash): New function.
	(decl_init_priority_lookup): Rework.
	(decl_fini_priority_lookup): New function.
	(decl_priority_info): New function.
	(decl_init_priority_insert): Use it.
	(decl_fini_priority_insert): Likewise.
	(decl_restrict_base_lookup): Adjust for refactoring of tree_map
	hierarchy.
	(decl_restrict_base_insert): Likewise.
	(decl_debug_expr_insert): Likewise.
	(decl_value_expr_lookup): Likewise.
	(decl_value_expr_insert): Likewise.
	* tree.h (priority_type): New type.
	(decl_init_priority_lookup): Use priority_type.
	(decl_fini_priority_lookup): New function.
	(decl_init_priority_insert): Use priority_type.
	(decl_fini_priority_insert): New function.
	(DECL_HAS_INIT_PRIORITY): Tweak comments.
	(DECL_INIT_PRIORITY): Likewise.
	(SET_DECL_INIT_PRIORITY): Add comment.
	(DECL_FINI_PRIORITY): New macro.
	(SET_DECL_FINI_PRIORITY): Likewise.
	(DEFAULT_INIT_PRIORITY): Document.
	(MAX_INIT_PRIORITY): Likewise.
	(MAX_RESERVED_INIT_PRIORITY): Likewise.
	(tree_map_base): New type.
	(tree_map_base_eq): New function.
	(tree_map_base_hash): Likewise.
	(tree_map_base_marked_p): Likewise.
	(tree_map): Inherit from tree_map_base.
	(tree_map_eq): Make it a macro.
	(tree_map_marked_p): Likewise.
	(tree_int_map): Inherit from tree_map_base.
	(tree_int_map_eq): Make it a macro.
	(tree_int_map_hash): Likewise.
	(tree_int_map_marked_p): Likewise.
	(tree_priority_map): New type.
	(tree_priority_map_eq): New macro.
	(tree_priority_map_hash): Likewise.
	(tree_priority_map_marked_p): Likewise.
	* varasm.c (emults_decl): Adjust for refactoring of tree_map
	hierarchy.
	(emutls_common_1): Likewise.
	* lambda-code.c (replace_uses_equiv_to_x_with_y): Likewise.
	* tree-ssa-structalias.c (heapvar_lookup): Adjust for refactoring
	of tree_map hierarchy.
	* tree-cfg.c (move_stmt_r): Likewise.
	(new_label_mapper): Likewise.
	* c-tree.h (c_expand_body): Move to ...
	* c-common.h (c_expand_body): ... here.
	* c-decl.c (c_expand_body): Move to ...
	* c-common.c (c_expand_body): ... here.
	(c_common_attribute_table): Allow 1 argument for the constructor
	and destructor attributes.
	(get_priority): New function.
	(handle_constructor_attribute): Set DECL_INIT_PRIORITY.
	(handle_destructor_attribute): Set DECL_FINI_PRIORITY.

	* cp-tree.h (static_ctors): Remove.
	* cp-tree.h (static_dtors): Likewise.
	* cp-objcp-common.c (decl_shadowed_for_var_lookup): Adjust for
	refactoring of tree_map hierarchy.
	(decl_shadowed_for_var_insert): Likewise.
	* semantics.c (expand_body): Use c_expand_body.
	(expand_or_defer_fn): Don't update static_ctors or static_dtors.
	* decl2.c (static_ctors): Remove.
	(static_dtors): Likewise.
	(generate_ctor_or_dtor_function): Pass NULL_TREE to
	objc_generate_static_init_call.  Do not call static_[cd]tors.
	(generate_ctor_and_dtor_functions_for_priority): Do not check for
	static_[cd]tors.
	(cp_write_global_declarations): Likewise.

	* decl.c (annotate_value): Adjust for refactoring of tree_map
	hierarchy.

	* gcc.dg/initpri1.c: New test.
	* gcc.dg/initpri2.c: Likewise.
	* g++.dg/special/initpri1.C: New test.
	* g++.dg/special/initpri2.C: Likewise.
	* g++.dg/special/conpr-1.C: Use init_priority effective target.
	* g++.dg/special/conpr-2.C: Likewise.
	* g++.dg/special/conpr-3.C: Likewise.
	* g++.dg/special/conpr-4.C: Likewise.
	* g++.dg/special/initp1.C: Likewise.
	* g++.dg/special/ecos.exp: Remove code to detect availability of
	constructor priorities.
	* lib/target-support.exp (target_init_priority): New function.

From-SVN: r122315
2007-02-25 18:47:05 +00:00
Roger Sayle b56b9fe39d function.c (gimplify_parameters): Call build_gimple_modify_stmt instead of calling build2 with a GIMPLE_MODIFY_STMT.
* function.c (gimplify_parameters): Call build_gimple_modify_stmt
	instead of calling build2 with a GIMPLE_MODIFY_STMT.
	* gimple-low.c (lower_function_body, lower_builtin_setjmp):
	Likewise.
	* gimplify.c (build_stack_save_restore, gimplify_return_expr,
	gimplify_decl_expr,  gimplify_self_mod_expr, gimplify_cond_expr,
	gimplify_init_ctor_eval_range, gimple_push_cleanup,
	gimplify_omp_for, gimplify_omp_atomic_pipeline, 
	gimplify_omp_atomic_mutex, gimplify_expr, gimplify_one_sizepos,
	force_gimple_operand): Likewise.
	* ipa-cp.c (constant_val_insert): Likewise.
	* lambda-code.c (lbv_to_gcc_expression, lle_to_gcc_expression,
	lambda_loopnest_to_gcc_loopnest, replace_uses_equiv_to_x_with_y,
	perfect_nestify): Likewise.
	* langhooks.c (lhd_omp_assignment): Likewise.
	* omp-low.c (lower_rec_input_clauses, lower_reduction_clauses,
	lower_copyprivate_clauses, lower_send_clauses,
	lower_send_shared_vars, expand_parallel_call,
	expand_omp_for_generic, expand_omp_for_static_nochunk,
	expand_omp_for_static_chunk, expand_omp_sections,
	lower_omp_single_copy, lower_omp_for_lastprivate,
	lower_omp_parallel, init_tmp_var, save_tmp_var): Likewise.
	* value-prof.c (tree_divmod_fixed_value, tree_mod_pow2,
	tree_mod_subtract, tree_ic, tree_stringop_fixed_value):
	Likewise.

From-SVN: r122120
2007-02-19 02:45:34 +00:00
Zdenek Dvorak 6270df4c21 loop.texi: Document recording of loop exits.
* doc/loop.texi: Document recording of loop exits.
	* cfgloopmanip.c (loopify, duplicate_loop): Use alloc_loop.
	(update_single_exits_after_duplication,
	update_single_exit_for_duplicated_loop,
	update_single_exit_for_duplicated_loops): Removed.
	(duplicate_loop_to_header_edge): Do not call
	update_single_exits_after_duplication and
	update_single_exit_for_duplicated_loops.
	(loop_version): Do not update single_exit information.
	(fix_loop_structure): Use record_loop_exits instead of
	mark_single_exit_loops.
	* tree-ssa-loop-manip.c (tree_transform_and_unroll_loop): Update
	the lists of loop exits.
	* cfghooks.c (redirect_edge_and_branch, redirect_edge_and_branch_force,
	split_edge, merge_blocks): Update the lists of loop exits.
	* modulo-sched.c (sms_schedule): Pass LOOPS_HAVE_RECORDED_EXITS to
	loop_optimizer_init.
	* loop-init.c (loop_optimizer_init): Call record_loop_exits instead
	of mark_single_exit_loops.
	(loop_optimizer_finalize): Call release_recorded_exits.
	* tree-ssa-loop.c (tree_loop_optimizer_init): Pass
	LOOPS_HAVE_RECORDED_EXITS to loop_optimizer_init.
	* tree-vectorizer.c (slpeel_tree_duplicate_loop_to_edge_cfg): Do not
	update single exit information.
	* lambda-code.c (perfect_nestify): Ditto.
	* cfgloop.c (flow_loop_free): Destroy the list of exits of the loop.
	(mark_single_exit_loops): Removed.
	(alloc_loop, loop_exit_hash, loop_exit_eq, loop_exit_free,
	get_exit_descriptions, rescan_loop_exit, record_loop_exits,
	dump_recorded_exit, dump_recorded_exits, release_recorded_exits): New
	functions.
	(get_loop_exit_edges, single_exit): Use recorded exit lists.
	(add_bb_to_loop, remove_bb_from_loops): Update the lists of loop exits.
	(verify_loop_structure): Verify consistency of the exit lists.
	(flow_loops_find): Use alloc_loop.  Initialize exits hash.
	(set_single_exit): Removed.
	* cfgloop.h (struct loop_exit): New function.
	(struct loop): single_exit_ field replaced by exits field.
	(LOOPS_HAVE_MARKED_SINGLE_EXITS): Replaced by LOOPS_HAVE_RECORDED_EXITS.
	(struct loops): Added exits hash.
	(mark_single_exit_loops, set_single_exit): Declaration removed.
	(release_recorded_exits, record_loop_exits, rescan_loop_exit): Declare.

From-SVN: r120728
2007-01-12 17:57:40 +00:00
Diego Novillo 9b3b55a105 * tree-scalar-evolution.c (scev_const_prop):
* tree-phinodes.c (remove_phi_node): Add argument
	RELEASE_LHS_P.  If given, release the SSA name on the LHS of
	the PHI node.
	Update all users.
	* tree-ssa-dce.c: Remove forward declarations for static
	functions.  Re-arrange functions bodies as needed.
	(find_obviously_necessary_stmts): Never mark PHI nodes as
	obviously necessary.

From-SVN: r119740
2006-12-11 12:50:53 -05:00
Aldy Hernandez 07beea0df3 Merge gimple-tuples-branch into mainline.
From-SVN: r119546
2006-12-05 17:26:05 +00:00
Zdenek Dvorak d73be2683d tree-vrp.c (execute_vrp): Do not pass loops structure through arguments.
* tree-vrp.c (execute_vrp): Do not pass loops structure through
	arguments.
	* loop-unswitch.c (unswitch_loops, unswitch_single_loop,
	unswitch_loop): Ditto.
	* tree-loop-linear.c (linear_transform_loops): Ditto.
	* tree-ssa-loop-im.c (determine_lsm, tree_ssa_lim_initialize,
	tree_ssa_lim): Ditto.
	* tree-ssa-loop-niter.c (estimate_numbers_of_iterations,
	free_numbers_of_iterations_estimates): Ditto.
	* tree-ssa-loop-unswitch.c (tree_ssa_unswitch_loops,
	tree_unswitch_single_loop, tree_unswitch_loop): Ditto.
	* cfgloopmanip.c (fix_bb_placement, fix_bb_placements,
	remove_path, add_loop, loopify, unloop, fix_loop_placements,
	place_new_loop, duplicate_loop, duplicate_subloops,
	update_single_exit_for_duplicated_loops, copy_loops_to,
	duplicate_loop_to_header_edge, create_preheaders,
	force_single_succ_latches, loop_version, fix_loop_structure):
	Ditto.
	* tree-ssa-loop-manip.c (tree_duplicate_loop_to_header_edge,
	tree_unroll_loop): Ditto.
	* tree-ssa-loop-ch.c (copy_loop_headers): Ditto.
	* tree-scalar-evolution.c (select_loops_exit_conditions,
	scev_initialize, scev_analysis): Ditto.
	* tree-scalar-evolution.h (scev_initialize): Ditto.
	* cfghooks.c (cfg_hook_duplicate_loop_to_header_edge): Ditto.
	* cfgloopanal.c (mark_irreducible_loops, mark_loop_exit_edges): Ditto.
	* tree-ssa-loop-ivopts.c (tree_ssa_iv_optimize): Ditto.
	* modulo-sched.c (sms_schedule): Ditto.
	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Ditto.
	* loop-init.c (loop_optimizer_init, rtl_move_loop_invariants,
	rtl_unswitch, rtl_unroll_and_peel_loops, rtl_doloop): Ditto.
	* ifcvt.c (if_convert): Ditto.
	* tree-ssa-loop-ivcanon.c (try_unroll_loop_completely,
	canonicalize_loop_induction_variables,
	canonicalize_induction_variables,
	tree_unroll_loops_completely, remove_empty_loops): Ditto.
	* tree-ssa-loop.c (tree_ssa_loop_init, tree_ssa_loop_im,
	tree_ssa_loop_unswitch, tree_vectorize, tree_linear_transform,
	tree_ssa_loop_ivcanon, tree_ssa_empty_loop, tree_ssa_loop_bounds,
	tree_complete_unroll, tree_ssa_loop_prefetch, tree_ssa_loop_ivopts,
	tree_ssa_loop_done): Ditto.
	* predict.c (predict_loops, tree_estimate_probability, estimate_loops,
	estimate_bb_frequencies): Ditto.
	* tree-vectorizer.c (slpeel_tree_duplicate_loop_to_edge_cfg,
	slpeel_tree_peel_loop_to_edge, vectorize_loops): Ditto.
	* loop-unroll.c (unroll_and_peel_loops, peel_loops_completely,
	decide_unrolling_and_peeling, peel_loop_completely,
	unroll_loop_constant_iterations, unroll_loop_runtime_iterations,
	peel_loop_simple, unroll_loop_stupid): Ditto.
	* loop-doloop.c (doloop_optimize_loops): Ditto.
	* tree-cfgcleanup.c (cleanup_tree_cfg_loop): Ditto.
	* loop-invariant.c (move_loop_invariants): Ditto.
	* tree-ssa-dce.c (tree_ssa_dce_loop): Ditto.
	* tree-ssa-loop-prefetch.c (loop_prefetch_arrays,
	tree_ssa_prefetch_arrays): Ditto.
	* lambda-code.c (gcc_loopnest_to_lambda_loopnest, perfect_nestify):
	Ditto.
	* tree-vect-transform.c (vect_do_peeling_for_loop_bound,
	vect_do_peeling_for_alignment, vect_transform_loop): Ditto.
	* cfgloop.c (flow_loops_cfg_dump, flow_loops_dump,
	mark_single_exit_loops, cancel_loop, cancel_loop_tree,
	verify_loop_structure): Ditto.
	* tree-flow.h (vectorize_loops, tree_ssa_lim, tree_ssa_unswitch_loops,
	canonicalize_induction_variables, tree_unroll_loops_completely,
	tree_ssa_prefetch_arrays, remove_empty_loops, tree_ssa_iv_optimize,
	estimate_numbers_of_iterations, free_numbers_of_iterations_estimates,
	tree_duplicate_loop_to_header_edge, tree_ssa_loop_version,
	tree_unroll_loop, linear_transform_loops): Declaration changed.
	* basic-block.h: Remove declaration of struct loops.
	* cfghooks.h (struct cfg_hooks): Change type of
	cfg_hook_duplicate_loop_to_header_edge.
	(cfg_hook_duplicate_loop_to_header_edge): Declaration changed.
	* tree-vectorizer.h (slpeel_tree_peel_loop_to_edge,
	vect_transform_loop): Declaration changed.
	* lambda.h (gcc_loopnest_to_lambda_loopnest): Declaration changed.
	* cfgloop.h (flow_loops_dump, fix_loop_structure,
	mark_irreducible_loops, mark_single_exit_loops, mark_loop_exit_edges,
	cancel_loop_tree, create_preheaders, force_single_succ_latches,
	verify_loop_structure, duplicate_loop, duplicate_loop_to_header_edge,
	loopify, loop_version, remove_path, unswitch_loops,
	unroll_and_peel_loops, doloop_optimize_loops, move_loop_invariants):
	Declaration changed.

From-SVN: r119189
2006-11-25 10:34:13 +00:00
Zdenek Dvorak ac8f6c6903 tree-loop-linear.c (linear_transform_loops): Use single_exit accessor functions.
* tree-loop-linear.c (linear_transform_loops): Use single_exit accessor
	functions.
	* tree-ssa-loop-niter.c (loop_only_exit_p): Ditto.
	* cfgloopmanip.c (update_single_exits_after_duplication,
	update_single_exit_for_duplicated_loop, loop_version): Ditto.
	* tree-scalar-evolution.c (get_loop_exit_condition,
	get_exit_conditions_rec, loop_closed_phi_def,
	number_of_iterations_in_loop, scev_const_prop): Ditto.
	* tree-ssa-loop-ivopts.c (single_dom_exit): Ditto.
	* modulo-sched.c (generate_prolog_epilog, loop_canon_p, sms_schedule):
	Ditto.
	* tree-ssa-loop-ivcanon.c (canonicalize_loop_induction_variables):
	Ditto.
	* tree-vectorizer.c (slpeel_update_phis_for_duplicate_loop,
	slpeel_update_phi_nodes_for_guard1, slpeel_update_phi_nodes_for_guard2,
	slpeel_make_loop_iterate_ntimes,
	slpeel_tree_duplicate_loop_to_edge_cfg, slpeel_can_duplicate_loop_p,
	slpeel_verify_cfg_after_peeling, slpeel_tree_peel_loop_to_edge):
	Ditto.
	* tree-if-conv.c (if_convertible_loop_p): Ditto.
	* tree-vect-analyze.c (vect_analyze_operations, vect_stmt_relevant_p,
	vect_analyze_loop_form): Ditto.
	* lambda-code.c (lambda_loopnest_to_gcc_loopnest, exit_phi_for_loop_p,
	can_convert_to_perfect_nest, perfect_nestify): Ditto.
	* tree-vect-transform.c (vect_create_epilog_for_reduction,
	vect_update_ivs_after_vectorizer, vect_do_peeling_for_loop_bound,
	vect_transform_loop): Ditto.
	* cfgloop.c (mark_single_exit_loops, verify_loop_structure): Ditto.
	(single_exit, set_single_exit): New functions.
	* cfgloop.h (struct loop): Rename single_exit field to single_exit_.
	(single_exit, set_single_exit): Declare.
	* doc/loop.texi: Undocument single_exit field.  Document single_exit
	accessor function.

From-SVN: r119075
2006-11-21 23:54:16 +00:00
Zdenek Dvorak 598ec7bdbe tree-vrp.c (execute_vrp): Do not update current_loops.
* tree-vrp.c (execute_vrp): Do not update current_loops.
	* loop-unswitch.c (unswitch_loop): Do not use loop_split_edge_with.
	* doc/loop.texi: Remove documentation for cancelled functions.
	* tree-ssa-loop-im.c (loop_commit_inserts): Removed.
	(move_computations, determine_lsm): Use bsi_commit_edge_inserts
	instead.
	* cfgloopmanip.c (remove_bbs): Do not update loops explicitly.
	(remove_path): Ensure that in delete_basic_blocks, the loops
	are still allocated.
	(add_loop): Work on valid loop structures.
	(loopify): Modify call of add_loop.
	(mfb_update_loops): Removed.
	(create_preheader): Do not update loops explicitly.
	(force_single_succ_latches, loop_version): Do not use
	loop_split_edge_with.
	(loop_split_edge_with): Removed.
	* tree-ssa-loop-manip.c (create_iv, determine_exit_conditions):
	Do not use bsi_insert_on_edge_immediate_loop.
	(split_loop_exit_edge, tree_unroll_loop): Do not use
	loop_split_edge_with.
	(bsi_insert_on_edge_immediate_loop): Removed.
	* tree-ssa-loop-ch.c (copy_loop_headers): Use current_loops.  Do not
	use loop_split_edge_with.
	* cfghooks.c: Include cfgloop.h.
	(verify_flow_info): Verify that loop_father is filled iff current_loops
	are available.
	(redirect_edge_and_branch_force, split_block, delete_basic_block,
	split_edge, merge_blocks, make_forwarder_block, duplicate_block):
	Update cfg.
	* cfgloopanal.c (mark_irreducible_loops): Work if the function contains
	no loops.
	* modulo-sched.c (generate_prolog_epilog, canon_loop): Do not use
	loop_split_edge_with.
	(sms_schedule): Use current_loops.
	* tree-ssa-dom.c (tree_ssa_dominator_optimize): Use current_loops.
	* loop-init.c (loop_optimizer_init, loop_optimizer_finalize): Set
	current_loops.
	(rtl_loop_init, rtl_loop_done): Do not set current_loops.
	* tree-ssa-sink.c (execute_sink_code): Use current_loops.
	* ifcvt.c (if_convert): Ditto.
	* predict.c (predict_loops): Do not clear current_loops.
	(tree_estimate_probability): Use current_loops.
	(propagate_freq): Receive head of the region to propagate instead of
	loop.
	(estimate_loops_at_level): Do not use shared to_visit bitmap.
	(estimate_loops): New function.  Handle case current_loops == NULL.
	(estimate_bb_frequencies): Do not allocate tovisit.  Use
	estimate_loops.
	* tree-ssa-loop.c (current_loops): Removed.
	(tree_loop_optimizer_init): Do not return loops.
	(tree_ssa_loop_init, tree_ssa_loop_done): Do not set current_loops.
	* tree-vectorizer.c (slpeel_update_phi_nodes_for_guard1,
	slpeel_update_phi_nodes_for_guard2, slpeel_tree_peel_loop_to_edge):
	Do not update loops explicitly.
	* function.h (struct function): Add x_current_loops field.
	(current_loops): New macro.
	* tree-if-conv.c (combine_blocks): Do not update loops explicitly.
	* loop-unroll.c (split_edge_and_insert): New function.
	(unroll_loop_runtime_iterations, analyze_insns_in_loop): Do not
	use loop_split_edge_with.
	* loop-doloop.c (add_test, doloop_modify): Ditto.
	* tree-ssa-pre.c (init_pre, fini_pre): Do not set current_loops.
	* cfglayout.c (copy_bbs): Do not update loops explicitly.
	* lambda-code.c (perfect_nestify): Do not use loop_split_edge_with.
	* tree-vect-transform.c (vect_transform_loop): Do not update loops
	explicitly.
	* cfgloop.c (flow_loops_cfg_dump): Do not dump dfs_order and rc_order.
	(flow_loops_free): Do not free dfs_order and rc_order.
	(flow_loops_find): Do not set dfs_order and rc_order in loops
	structure.  Do not call loops and flow info verification.
	(add_bb_to_loop, remove_bb_from_loops): Check whether the block
	already belongs to some loop.
	* cfgloop.h (struct loops): Remove struct cfg.
	(current_loops, loop_split_edge_with): Declaration removed.
	(loop_optimizer_init, loop_optimizer_finalize): Declaration changed.
	* tree-flow.h (loop_commit_inserts, bsi_insert_on_edge_immediate_loop):
	Declaration removed.
	* Makefile.in (cfghooks.o): Add CFGLOOP_H dependency.
	* basic-block.h (split_edge_and_insert): Declare.
	* tree-cfg.c (remove_bb): Do not update loops explicitly.

From-SVN: r118931
2006-11-17 11:29:17 +00:00
Jakub Jelinek 08700251e5 re PR tree-optimization/29581 (Latent bug in 4.1/4.2/4.3 lambda-code.c)
PR tree-optimization/29581
	* lambda-code.c (replace_uses_equiv_to_x_with_y): Add YINIT,
	REPLACEMENTS, FIRSTBSI arguments.  If initial condition or
	type is different between Y and USE, create a temporary
	variable, initialize it at the beginning of the body bb
	and use it as replacement instead of Y.

	* gcc.dg/pr29581-1.c: New test.
	* gcc.dg/pr29581-2.c: New test.
	* gcc.dg/pr29581-3.c: New test.
	* gcc.dg/pr29581-4.c: New test.
	* gfortran.dg/pr29581.f90: New test.

From-SVN: r118848
2006-11-15 10:35:34 +01:00
Zdenek Dvorak 911b3fdbe3 tree-ssa-loop-prefetch.c (schedule_prefetches): Cleanup and improve comments.
* tree-ssa-loop-prefetch.c (schedule_prefetches): Cleanup and improve
	comments.
	(issue_prefetch_ref): Move assignment to write_p out of loop.
	(determine_unroll_factor): Do not take PARAM_MAX_UNROLL_TIMES and
	SIMULTANEOUS_PREFETCHES into account.
	(loop_prefetch_arrays): Do not pass ahead to determine_unroll_factor.
	* lambda-code.c (lcm): Renamed to ...
	(least_common_multiple): ... and exported.
	* tree-flow.h (least_common_multiple): Declare.

From-SVN: r118730
2006-11-12 20:05:49 +00:00
Sebastian Pop 06ac89d1ca re PR tree-optimization/27745 (ICE in execute_todo with -O2 -ftree-loop-linear)
PR middle-end/27745
	* lambda-code.c (perfect_nestify): Don't copy statements
	in the inner loop: move them to the inner loop header.

From-SVN: r114205
2006-05-29 16:01:16 +00:00
Kazu Hirata 6fc0bb99a7 cfgcleanup.c, [...]: Fix comment typos.
* cfgcleanup.c, cfgexpand.c, cgraphunit.c, config/arm/arm.c,
	config/fr30/fr30.md, config/i386/i386-interix.h,
	config/i386/i386.c, config/i386/i386.md, config/sh/superh.h,
	config/sh/superh64.h, config/v850/v850.c, df-core.c,
	df-problems.c, df.h, except.c, final.c, haifa-sched.c,
	lambda-code.c, libgcc2.h, omp-low.c, optabs.c, predict.c,
	reload.c, tree-flow.h, tree-outof-ssa.c, tree-ssa-dce.c,
	tree-ssa-pre.c, tree-vect-transform.c: Fix comment typos.
	Follow spelling conventions.
	* doc/invoke.texi, doc/rtl.texi, doc/tm.texi: Fix typos.
	Follow spelling conventions.

From-SVN: r114168
2006-05-28 17:46:46 +00:00
Andrew MacLeod f004ab022e re PR c++/26757 (C++ front-end producing two DECLs with the same UID)
2006-05-23  Andrew MacLeod  <amacleod@redhat.com>
	
	PR c++/26757
	* tree-ssa-loop-im.c (determine_invariantness_stmt): Use 
	add_referenced_var instead of add_referenced_tmp_var.
	* tree-complex.c (create_one_component_var): Use add_referenced_var.
	* tree-ssa-loop-manip.c (create_iv, tree_unroll_loop): Use
	add_referenced_var.
	* tree-tailcall.c (adjust_accumulator_values, adjust_return_value,
	tree_optimize_tail_calls_1): Use add_referenced_var.
	* tree-ssa-loop-ivopts.c (create_new_iv): Use add_referenced_var.
	* tree-ssa-alias.c (create_memory_tag, create_global_var, create_sft):
	Use add_referenced_var.
	* tree-if-conv.c (ifc_temp_var): Use add_referenced_var.
	* gimplify.c (force_gimple_operand): Use add_referenced_var.
	* tree-ssa-phiopt.c (conditional_replacement, abs_replacement):
	Use add_referenced_var.
	* tree-dfa.c (struct walk_state): Remove.
	(find_referenced_vars): Remove walk state and vars_found hash table.
	(make_rename_temp): Use add_referenced_var.
	(find_vars_r): Pass less parameters to add_referenced_var.
	(referenced_var_p): New.  Is var in referenced_var hash table.
	(referenced_var_insert): Assert var isn't already in hash table.
	(add_referenced_var): Don't need walk_state parameter.  Add var if it
	isn't already in the hash table.
	(add_referenced_tmp_var): Remove.
	(find_new_referenced_vars_1): Use add_referenced_var.
	* tree-ssa-pre.c (create_expression_by_pieces, 
	insert_into_preds_of_block, insert_extra_phis, realify_fake_stores):
	Use add_referenced_var.
	* tree-vect-patterns.c (vect_pattern_recog_1): Use add_referenced_var.
	* lambda-code.c (lbv_to_gcc_expression, lle_to_gcc_expression,
	lambda_loopnest_to_gcc_loopnest, perfect_nestify): Use 
	add_referenced_var.
	* tree-vect-transform.c (vect_create_addr_base_for_vector_ref,
	vect_create_data_ref_ptr, vect_create_destination_var,
	vect_init_vector, vect_build_loop_niters, 
	vect_generate_tmps_on_preheader, vect_update_ivs_after_vectorizer,
	vect_gen_niters_for_prolog_loop, vect_create_cond_for_align_checks):
	Use add_referenced_var.
	* tree-outof-ssa.c (create_temp): Use add_referenced_var.
	* tree-flow.h (add_referenced_tmp_var): Remove prototype
	(add_referenced_var): Add prototype.
	* tree-ssa-structalias.c (get_constraint_for, 
	intra_create_variable_infos): Use add_referenced_var.

From-SVN: r114018
2006-05-23 14:07:21 +00:00
Sebastian Pop c93c502529 re PR tree-optimization/20256 (Perfect nest transformation not conservative enough)
PR middle-end/20256
	PR middle-end/26435
	* tree-loop-linear.c (linear_transform_loops): Don't test perfect_nest_p.
	Call rewrite_into_loop_closed_ssa only when something changed.
	* lambda.h (gcc_loopnest_to_lambda_loopnest): Update declaration.
	* lambda-code.c (can_convert_to_perfect_nest): Declared.
	(gcc_loopnest_to_lambda_loopnest): Removed need_perfect_nest parameter.
	Test for perfect_nest_p here.  Fix formating.
	(replace_uses_equiv_to_x_with_y): Fix formating.
	(stmt_uses_op): Removed.
	(can_convert_to_perfect_nest): Removed loopivs parameter.
	Complete the test by checking the scalar dependences.
	(perfect_nestify): Remove the test for can_convert_to_perfect_nest.
	Fix formating.

From-SVN: r113862
2006-05-17 14:25:59 +00:00
Andrew MacLeod 6c00f606c1 Implement new immediate use iterators.
2006-04-27  Andrew MacLeod  <amacleod@redhat.com>

	PR tree-optimization/26854
	* tree-vrp.c (remove_range_assertions): Use new Immuse iterator.
	* doc/tree-ssa.texi: Update immuse iterator documentation.
	* tree-ssa-math-opts.c (execute_cse_reciprocals_1): Use new iterator.
	* tree-ssa-dom.c (propagate_rhs_into_lhs): Use new iterator.
	* tree-flow-inline.h (end_safe_imm_use_traverse, end_safe_imm_use_p,
	first_safe_imm_use, next_safe_imm_use): Remove.
	(end_imm_use_stmt_p): New.  Check for end of immuse stmt traversal.
	(end_imm_use_stmt_traverse): New.  Terminate immuse stmt traversal.
	(move_use_after_head): New.  Helper function to sort immuses in a stmt.
	(link_use_stmts_after): New.  Link all immuses in a stmt consescutively.
	(first_imm_use_stmt): New.  Get first stmt in an immuse list.
	(next_imm_use_stmt): New.  Get next stmt in an immuse list.
	(first_imm_use_on_stmt): New.  Get first immuse on a stmt.
	(end_imm_use_on_stmt_p): New.  Check for end of immuses on a stmt.
	(next_imm_use_on_stmt): New.  Move to next immuse on a stmt.
	* tree-ssa-forwprop.c (forward_propagate_addr_expr): Use new iterator.
	* lambda-code.c (lambda_loopnest_to_gcc_loopnest): Use new iterator.
	(perfect_nestify): Use new iterator.
	* tree-vect-transform.c (vect_create_epilog_for_reduction): Use new 
	iterator.
	* tree-flow.h (struct immediate_use_iterator_d): Add comments.
	(next_imm_name): New field in struct immediate_use_iterator_d.
	(FOR_EACH_IMM_USE_SAFE, BREAK_FROM_SAFE_IMM_USE): Remove.
	(FOR_EACH_IMM_USE_STMT, BREAK_FROM_IMM_USE_STMT, 
	FOR_EACH_IMM_USE_ON_STMT): New immediate use iterator macros.
	* tree-cfg.c (replace_uses_by): Use new iterator.
	* tree-ssa-threadedge.c (lhs_of_dominating_assert): Use new iterator.
	* tree-ssa-operands.c (correct_use_link): Remove.
	(finalize_ssa_use_ops): No longer call correct_use_link.

From-SVN: r113321
2006-04-27 20:22:17 +00:00
Kazu Hirata e3df376d22 Makefile.in (tree-into-ssa.o, [...]): Depend on vecprim.h.
* Makefile.in (tree-into-ssa.o, tree-outof-ssa.o,
	tree-ssa-live.o, tree-ssa-alias.o, function.o, df-problems.o,
	global.o, cfglayout.o, lambda-code.o, reg-stack.o,
	build/genextract.o): Depend on vecprim.h.
	* cfglayout.c, df-problems.c, function.c, genextract.c,
	global.c, lambda-code.c, reg-stack.c, tree-into-ssa.c,
	tree-outof-ssa.c, tree-ssa-alias.c, tree-ssa-live.c: Include
	vecprim.h.
	* vecprim.h: New.

From-SVN: r112830
2006-04-10 19:26:18 +00:00
Sebastian Pop ebf78a479a tree-loop-linear.c: Don't include varray.h.
* tree-loop-linear.c: Don't include varray.h.
	(gather_interchange_stats, try_interchange_loops,
	linear_transform_loops): Use VEC instead of VARRAY.
	* lambda-mat.c: Don't include varray.h.
	* tree-chrec.c: Same.
	* lambda-trans.c: Same.
	* tree-vectorizer.c (new_loop_vec_info, destroy_loop_vec_info): Use
	VEC instead of VARRAY.
	* tree-vectorizer.h: Idem.
	* tree-data-ref.c (dump_data_references,
	dump_data_dependence_relations, dump_dist_dir_vectors, dump_ddrs,
	initialize_data_dependence_relation, finalize_ddr_dependent,
	compute_all_dependences, find_data_references_in_loop,
	compute_data_dependences_for_loop, analyze_all_data_dependences,
	free_dependence_relation, free_dependence_relations,
	free_data_refs): Idem.
	* tree-data-ref.h (data_reference_p, subscript_p): New.
	(data_dependence_relation, DDR_SUBSCRIPT, DDR_NUM_SUBSCRIPTS): Use
	VEC instead of VARRAY.
	(DDR_SUBSCRIPTS_VECTOR_INIT): Removed.
	(find_data_references_in_loop, compute_data_dependences_for_loop,
	dump_ddrs, dump_dist_dir_vectors, dump_data_references,
	dump_data_dependence_relations, free_dependence_relations,
	free_data_refs): Adjust declaration.
	(lambda_transform_legal_p): Move declaration here...
	* tree-vect-analyze.c (vect_analyze_data_ref_dependences,
	vect_compute_data_refs_alignment, vect_verify_datarefs_alignment,
	vect_enhance_data_refs_alignment, vect_analyze_data_ref_accesses,
	vect_analyze_data_refs): Use VEC instead of VARRAY.
	* lambda.h (lambda_transform_legal_p): ...from here.
	* lambda-code.c (lambda_transform_legal_p): Use VEC instead of VARRAY.
	* tree-vect-transform.c (vect_update_inits_of_drs): Idem.
	* Makefile.in (tree-loop-linear.o, lambda-mat.o, lambda-trans.o,
	tree-chrec.o): Don't depend on VARRAY_H.

From-SVN: r112437
2006-03-28 04:19:26 +00:00
Daniel Berlin e3e868f62e lambda-code.c (can_convert_to_perfect_nest): Allow any type of
2006-02-27  Daniel Berlin  <dberlin@dberlin.org>

	* lambda-code.c (can_convert_to_perfect_nest): Allow any type of

From-SVN: r111489
2006-02-27 17:38:14 +00:00
Sebastian Pop 0ff4040e02 tree-chrec.c (eq_evolutions_p): New.
* tree-chrec.c (eq_evolutions_p): New.
	* tree-chrec.h (eq_evolutions_p): Declared.
	* tree-data-ref.c: Fix formatting.
	(datadep_stats, dependence_stats): New.
	(gcd): Moved...
	(print_direction_vector): New.
	(dump_data_dependence_relation): Use print_direction_vector.
	(object_analysis, create_data_ref): Handle COMPONENT_REF.
	(compute_subscript_distance): Static.
	(initialize_data_dependence_relation): Static.  Get the number
	of loops surrounding the references from the callers, and initialize
	DDR_SIZE_VECT to nb_loops.  Use both base_addr_differ_p and
	base_object_differ_p analyzers.
	(analyze_ziv_subscript, analyze_siv_subscript_cst_affine, 
	compute_overlap_steps_for_affine_1_2,
	analyze_subscript_affine_affine): Count the classified dependences.
	Print a message when a test failed.
	(can_use_analyze_subscript_affine_affine): New.	
	(analyze_siv_subscript): Compute the data dependences on symbolic
	scevs that verify can_use_analyze_subscript_affine_affine.
	(chrec_steps_divide_constant_p): Returns true, false, or unknown.
	(analyze_miv_subscript): Update use of chrec_steps_divide_constant_p.
	Handle symbolic scevs.
	(analyze_overlapping_iterations): Let symbolic affine scevs to be
	analyzed.
	(subscript_dependence_tester): Moved...
	(build_classic_dist_vector, build_classic_dir_vector): Don't use 
	lambda_vector_clear on newly allocated vectors.  Get nb_loops from
	DDR_SIZE_VECT instead of getting it in parameter.
	(subscript_dependence_tester): ... here.  Take as a parameter 
	loop_nest_depth.  Call build_classic_dist_vector and
	build_classic_dir_vector.
	(compute_affine_dependence): Update subscript_dependence_tester 
	parameters.  Update datadep_stats counters.  Call 
	compute_subscript_distance.
	(compute_self_dependence): Save the dist and dir vectors.  Call 
	compute_subscript_distance.
	(ddr_p, DEF_VEC_P(ddr_p), DEF_VEC_ALLOC_P(ddr_p,heap)): Moved...
	(compute_all_dependences): Reorder parameters as they were before
	conversion to VEC.  Pass nb_loops and loop_nest_depth.  Don't call
	compute_subscript_distance.  Update the use of 
	compute_affine_dependence and initialize_data_dependence_relation.
	(find_data_references_in_loop): Handle COMPONENT_REF.
	(compute_data_dependences_for_loop): Initialize dependence_stats.
	Don't call build_classic_dist_vector and build_classic_dir_vector.
	Update the parameters of initialize_data_dependence_relation and 
	compute_all_dependences.  Print the statistics from datadep_stats.
	(analyze_all_data_dependences): Static.  Not used until the pass for
	checking the data dependences is contributed.
	* tree-data-ref.h (ddr_p, DEF_VEC_P(ddr_p),
	DEF_VEC_ALLOC_P(ddr_p,heap)): ... here.
	(initialize_data_dependence_relation, compute_affine_dependence, 
	analyze_all_data_dependences, compute_subscript_distance): Removed.
	(print_direction_vector): New.
	* lambda.h (gcd): ... here.
	(lambda_vector_gcd): Moved here from gcd_vector.
	* lambda-code.c (gcd, gcd_vector): Removed.
	(lambda_compute_target_space): Use lambda_vector_gcd.  Fix formatting.
	* Makefile.in (tree-vect-patterns.o): Depends on TREE_DATA_REF_H.

From-SVN: r111312
2006-02-20 20:25:54 +00:00
Paolo Bonzini 35771d345f tree-flow-inline.h (bsi_after_labels): Rewrite, return what its name says.
2006-02-02  Paolo Bonzini  <bonzini@gnu.org>

	* tree-flow-inline.h (bsi_after_labels): Rewrite, return
	what its name says.
	* lambda-code.c (perfect_nestify): Use bsi_insert_before on
	bsi_after_labels iterator.
	* tree-if-conv.c (find_phi_replacement_condition,
	replace_phi_with_cond_modify_expr): Likewise.
	* tree-scalar-evolution.c (scev_const_prop): Likewise.
	* tree-ssa-loop-ivopts.c (compute_phi_arg_on_exit): Likewise.

From-SVN: r110514
2006-02-02 13:05:36 +00:00
Daniel Berlin dc006c709d lambda-code.c (can_put_in_inner_loop): Relax restrictions.
2006-01-04  Daniel Berlin  <dberlin@dberlin.org>

	* lambda-code.c (can_put_in_inner_loop): Relax
	restrictions.
	(can_put_after_inner_loop): New function.
	(can_convert_to_perfect_nest): Use can_put_after_inner_loop as well.
	(perfect_nestify): Change to make copies and modify uses.

From-SVN: r109337
2006-01-04 16:34:52 +00:00
Richard Guenther 0d45140575 tree-vrp.c (build_assert_expr_for, [...]): Use buildN instead of build.
2005-12-02  Richard Guenther  <rguenther@suse.de>

	* tree-vrp.c (build_assert_expr_for, process_assert_insertions_for,
	simplify_cond_using_ranges): Use buildN instead of build.
	* tree-tailcall.c (adjust_accumulator_values,
	adjust_return_value): Likewise.
	* tree-sra.c (generate_one_element_ref, generate_copy_inout,
	generate_element_copy, generate_element_zero,
	generate_one_element_init): Likewise.
	* tree-ssa-forwprop.c (forward_propagate_into_cond_1): Likewise.
	* lambda-code.c (gcc_loop_to_lambda_loop, lbv_to_gcc_expression,
	lle_to_gcc_expression, lambda_loopnest_to_gcc_loopnest,
	perfect_nestify): Likewise.

From-SVN: r107894
2005-12-02 14:40:40 +00:00
Sebastian Pop 304afda64b lambda-code.c (lambda_transform_legal_p): Use DDR_NUM_DIST_VECTS for testing whether the data_dependence_relation...
* lambda-code.c (lambda_transform_legal_p): Use DDR_NUM_DIST_VECTS
	for testing whether the data_dependence_relation contains distance
	vectors.  Iterate over all distance vectors of the ddr.
	* lambda.h: Define a vec of lambda_vector pointers.
	* tree-data-ref.c (dump_data_dependence_relation,
	dump_data_dependence_direction): Iterate over all distance and
	direction vectors of the ddr.
	(initialize_data_dependence_relation): Initialize DDR_DIR_VECTS and
	DDR_DIST_VECTS.
	(build_classic_dist_vector, build_classic_dir_vector): Push a set
	of distance/direction vectors instead of a single one.
	* tree-data-ref.h (dir_vects, dist_vects): Replace dir/dist 
	lambda_vectors with a vec of lambda_vectors.
	(DDR_DIR_VECT, DDR_DIST_VECT): Redefined as operations on vec.
	(DDR_DIR_VECTS, DDR_DIST_VECTS, DDR_NUM_DIR_VECTS,
	DDR_NUM_DIST_VECTS): New.
	* tree-loop-linear.c (gather_interchange_stats): Test for the
	existence of distance vectors only after having checked that there
	is a dependence.  Iterate over all distance vectors of the ddr.
	(linear_transform_loops): Use dump_data_dependence_relation.
	* tree-vect-analyze.c (vect_analyze_data_ref_dependence): Test for
	distance vectors using DDR_NUM_DIST_VECTS.  Iterate over all the
	distance vectors of the ddr.

From-SVN: r106530
2005-11-05 16:50:47 +00:00
Sebastian Pop 37b8a73b50 lambda-code.c (lambda_vector_lexico_pos): Moved...
* lambda-code.c (lambda_vector_lexico_pos): Moved...
	* lambda.h (lambda_vector_lexico_pos): ... here.
	* tree-data-ref.c (build_classic_dist_vector): Return false when
	the distance vector is lexicographically negative.

From-SVN: r103392
2005-08-23 08:24:20 +00:00
Kazu Hirata 987b67bc55 builtins.c, [...]: Use fold_buildN instead of fold (buildN (...)).
* builtins.c, c-common.c, c-convert.c, c-decl.c, c-typeck.c,
	convert.c, lambda-code.c, predict.c, tree-cfg.c,
	tree-complex.c, tree-data-ref.c, tree-if-conv.c,
	tree-mudflap.c, tree-scalar-evolution.c, tree-ssa-ccp.c,
	tree-ssa-loop-ivcanon.c, tree-ssa-loop-ivopts.c,
	tree-ssa-loop-manip.c, tree-ssa-phiopt.c, tree-ssa-pre.c,
	tree-vect-analyze.c, tree-vect-transform.c, tree-vectorizer.c,
	tree.c: Use fold_buildN instead of fold (buildN (...)).

From-SVN: r101338
2005-06-26 21:21:34 +00:00
Kelley Cook 366ccddb2b Update FSF address.
From-SVN: r101317
2005-06-25 02:02:01 +00:00
Daniel Berlin e4d693c1c2 lambda-code.c (replace_uses_equiv_to_x_with_y): Verify the step is an INTEGER_CST before calling int_cst_value.
2005-06-11  Daniel Berlin  <dberlin@dberlin.org>

	* lambda-code.c (replace_uses_equiv_to_x_with_y): Verify the step
	is an INTEGER_CST before calling int_cst_value.

From-SVN: r100839
2005-06-11 15:28:35 +00:00