Commit 49b8fe6c by Sebastian Pop Committed by Sebastian Pop

fix pr46851 and pr60340: remove unmaintained omega dependence test

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
parent ca4b5dbd
2015-07-18 Sebastian Pop <s.pop@samsung.com>
PR middle-end/46851
PR middle-end/60340
* Makefile.in: Removed omega.o.
* common.opt: Document flag fcheck-data-deps as deprecated.
* 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.
2015-07-18 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (pushsf splitter): Pass curr_insn to
......
......@@ -1347,7 +1347,6 @@ OBJS = \
mcf.o \
mode-switching.o \
modulo-sched.o \
omega.o \
omp-low.o \
optabs.o \
options-save.o \
......
......@@ -987,7 +987,7 @@ Save registers around function calls
fcheck-data-deps
Common Report Var(flag_check_data_deps)
Compare the results of several data dependence analyzers.
This switch is deprecated; do not use.
fcheck-new
Common Var(flag_check_new)
......
......@@ -385,7 +385,7 @@ Objective-C and Objective-C++ Dialects}.
-fauto-inc-dec -fbranch-probabilities @gol
-fbranch-target-load-optimize -fbranch-target-load-optimize2 @gol
-fbtr-bb-exclusive -fcaller-saves @gol
-fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack @gol
-fcombine-stack-adjustments -fconserve-stack @gol
-fcompare-elim -fcprop-registers -fcrossjumping @gol
-fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules @gol
-fcx-limited-range @gol
......@@ -8812,11 +8812,6 @@ be parallelized. Parallelize all the loops that can be analyzed to
not contain loop carried dependences without checking that it is
profitable to parallelize the loops.
@item -fcheck-data-deps
@opindex fcheck-data-deps
Compare the results of several data dependence analyzers. This option
is used for debugging the data dependence analyzers.
@item -ftree-loop-if-convert
@opindex ftree-loop-if-convert
Attempt to transform conditional jumps in the innermost loops to
......@@ -10475,34 +10470,6 @@ Large expressions slow the analyzer.
Bound on the complexity of the expressions in the scalar evolutions analyzer.
Complex expressions slow the analyzer.
@item omega-max-vars
The maximum number of variables in an Omega constraint system.
The default value is 128.
@item omega-max-geqs
The maximum number of inequalities in an Omega constraint system.
The default value is 256.
@item omega-max-eqs
The maximum number of equalities in an Omega constraint system.
The default value is 128.
@item omega-max-wild-cards
The maximum number of wildcard variables that the Omega solver is
able to insert. The default value is 18.
@item omega-hash-table-size
The size of the hash table in the Omega solver. The default value is
550.
@item omega-max-keys
The maximal number of keys used by the Omega solver. The default
value is 500.
@item omega-eliminate-redundant-constraints
When set to 1, use expensive methods to eliminate all redundant
constraints. The default value is 0.
@item vect-max-version-for-alignment-checks
The maximum number of run-time checks that can be performed when
doing loop versioning for alignment in the vectorizer.
......
......@@ -25,7 +25,6 @@ variable analysis and number of iterations analysis).
* loop-iv:: Induction variables on RTL.
* Number of iterations:: Number of iterations analysis.
* Dependency analysis:: Data dependency analysis.
* Omega:: A solver for linear programming problems.
@end menu
@node Loop representation
......@@ -602,33 +601,3 @@ maximum verbosity the details of a data dependence relations array,
direction vectors for a data dependence relations array, and
@code{dump_data_references} prints the details of the data references
contained in a data reference array.
@node Omega
@section Omega a solver for linear programming problems
@cindex Omega a solver for linear programming problems
The data dependence analysis contains several solvers triggered
sequentially from the less complex ones to the more sophisticated.
For ensuring the consistency of the results of these solvers, a data
dependence check pass has been implemented based on two different
solvers. The second method that has been integrated to GCC is based
on the Omega dependence solver, written in the 1990's by William Pugh
and David Wonnacott. Data dependence tests can be formulated using a
subset of the Presburger arithmetics that can be translated to linear
constraint systems. These linear constraint systems can then be
solved using the Omega solver.
The Omega solver is using Fourier-Motzkin's algorithm for variable
elimination: a linear constraint system containing @code{n} variables
is reduced to a linear constraint system with @code{n-1} variables.
The Omega solver can also be used for solving other problems that can
be expressed under the form of a system of linear equalities and
inequalities. The Omega solver is known to have an exponential worst
case, also known under the name of ``omega nightmare'' in the
literature, but in practice, the omega test is known to be efficient
for the common data dependence tests.
The interface used by the Omega solver for describing the linear
programming problems is described in @file{omega.h}, and the solver is
@code{omega_solve_problem}.
......@@ -38,6 +38,7 @@ along with GCC; see the file COPYING3. If not see
#include "cfghooks.h"
#include "tree.h"
#include "gimple.h"
#include "params.h"
#include "fold-const.h"
#include "gimple-iterator.h"
#include "tree-ssa-loop.h"
......
......@@ -44,6 +44,7 @@ extern "C" {
#include "cfghooks.h"
#include "tree.h"
#include "gimple.h"
#include "params.h"
#include "fold-const.h"
#include "gimple-iterator.h"
#include "tree-ssa-loop.h"
......
......@@ -44,6 +44,7 @@ along with GCC; see the file COPYING3. If not see
#include "cfgloop.h"
#include "tree-data-ref.h"
#include "graphite-poly.h"
#include "params.h"
static isl_union_set *
scop_get_domains (scop_p scop ATTRIBUTE_UNUSED)
......
......@@ -47,6 +47,7 @@ extern "C" {
#include "tree.h"
#include "gimple.h"
#include "ssa.h"
#include "params.h"
#include "fold-const.h"
#include "gimple-iterator.h"
#include "gimplify.h"
......
......@@ -50,6 +50,7 @@ along with GCC; see the file COPYING3. If not see
#include "diagnostic-core.h"
#include "cfgloop.h"
#include "tree-pass.h"
#include "params.h"
#ifdef HAVE_isl
#include "cfghooks.h"
......
This source diff could not be displayed because it is too large. You can view the blob instead.
/* Source code for an implementation of the Omega test, an integer
programming algorithm for dependence analysis, by William Pugh,
appeared in Supercomputing '91 and CACM Aug 92.
This code has no license restrictions, and is considered public
domain.
Changes copyright (C) 2005-2015 Free Software Foundation, Inc.
Contributed by Sebastian Pop <sebastian.pop@inria.fr>
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
#ifndef GCC_OMEGA_H
#define GCC_OMEGA_H
#include "params.h"
#define OMEGA_MAX_VARS PARAM_VALUE (PARAM_OMEGA_MAX_VARS)
#define OMEGA_MAX_GEQS PARAM_VALUE (PARAM_OMEGA_MAX_GEQS)
#define OMEGA_MAX_EQS PARAM_VALUE (PARAM_OMEGA_MAX_EQS)
#define pos_infinity (0x7ffffff)
#define neg_infinity (-0x7ffffff)
/* Results of the Omega solver. */
enum omega_result {
omega_false = 0,
omega_true = 1,
/* Value returned when the solver is unable to determine an
answer. */
omega_unknown = 2,
/* Value used for asking the solver to simplify the system. */
omega_simplify = 3
};
/* Values used for labeling equations. Private (not used outside the
solver). */
enum omega_eqn_color {
omega_black = 0,
omega_red = 1
};
/* Structure for equations. */
typedef struct eqn_d
{
int key;
int touched;
enum omega_eqn_color color;
/* Array of coefficients for the equation. The layout of the data
is as follows: coef[0] is the constant, coef[i] for 1 <= i <=
OMEGA_MAX_VARS, are the coefficients for each dimension. Examples:
the equation 0 = 9 + x + 0y + 5z is encoded as [9 1 0 5], the
inequality 0 <= -8 + x + 2y + 3z is encoded as [-8 1 2 3]. */
int *coef;
} *eqn;
typedef struct omega_pb_d
{
/* The number of variables in the system of equations. */
int num_vars;
/* Safe variables are not eliminated during the Fourier-Motzkin
simplification of the system. Safe variables are all those
variables that are placed at the beginning of the array of
variables: PB->var[1, ..., SAFE_VARS]. PB->var[0] is not used,
as PB->eqs[x]->coef[0] represents the constant of the equation. */
int safe_vars;
/* Number of elements in eqs[]. */
int num_eqs;
/* Number of elements in geqs[]. */
int num_geqs;
/* Number of elements in subs[]. */
int num_subs;
int hash_version;
bool variables_initialized;
bool variables_freed;
/* Index or name of variables. Negative integers are reserved for
wildcard variables. Maps the index of variables in the original
problem to the new index of the variable. The index for a
variable in the coef array of an equation can change as some
variables are eliminated. */
int *var;
int *forwarding_address;
/* Inequalities in the system of constraints. */
eqn geqs;
/* Equations in the system of constraints. */
eqn eqs;
/* A map of substituted variables. */
eqn subs;
} *omega_pb;
extern void omega_initialize (void);
extern omega_pb omega_alloc_problem (int, int);
extern enum omega_result omega_solve_problem (omega_pb, enum omega_result);
extern enum omega_result omega_simplify_problem (omega_pb);
extern enum omega_result omega_simplify_approximate (omega_pb);
extern enum omega_result omega_constrain_variable_sign (omega_pb,
enum omega_eqn_color,
int, int);
extern void debug (omega_pb_d &ref);
extern void debug (omega_pb_d *ptr);
extern void debug_omega_problem (omega_pb);
extern void omega_print_problem (FILE *, omega_pb);
extern void omega_print_red_equations (FILE *, omega_pb);
extern int omega_count_red_equations (omega_pb);
extern void omega_pretty_print_problem (FILE *, omega_pb);
extern void omega_unprotect_variable (omega_pb, int var);
extern void omega_negate_geq (omega_pb, int);
extern void omega_convert_eq_to_geqs (omega_pb, int eq);
extern void omega_print_eqn (FILE *, omega_pb, eqn, bool, int);
extern bool omega_problem_has_red_equations (omega_pb);
extern enum omega_result omega_eliminate_redundant (omega_pb, bool);
extern void omega_eliminate_red (omega_pb, bool);
extern void omega_constrain_variable_value (omega_pb, enum omega_eqn_color,
int, int);
extern bool omega_query_variable (omega_pb, int, int *, int *);
extern int omega_query_variable_signs (omega_pb, int, int, int, int,
int, int, bool *, int *);
extern bool omega_query_variable_bounds (omega_pb, int, int *, int *);
extern void (*omega_when_reduced) (omega_pb);
extern void omega_no_procedure (omega_pb);
/* Return true when variable I in problem PB is a wildcard. */
static inline bool
omega_wildcard_p (omega_pb pb, int i)
{
return (pb->var[i] < 0);
}
/* Return true when variable I in problem PB is a safe variable. */
static inline bool
omega_safe_var_p (omega_pb pb, int i)
{
/* The constant of an equation is not a variable. */
gcc_assert (0 < i);
return (i <= pb->safe_vars);
}
/* Print to FILE equality E from PB. */
static inline void
omega_print_eq (FILE *file, omega_pb pb, eqn e)
{
omega_print_eqn (file, pb, e, false, 0);
}
/* Print to FILE inequality E from PB. */
static inline void
omega_print_geq (FILE *file, omega_pb pb, eqn e)
{
omega_print_eqn (file, pb, e, true, 0);
}
/* Print to FILE inequality E from PB. */
static inline void
omega_print_geq_extra (FILE *file, omega_pb pb, eqn e)
{
omega_print_eqn (file, pb, e, true, 1);
}
/* E1 = E2, make a copy of E2 into E1. Equations contain S variables. */
static inline void
omega_copy_eqn (eqn e1, eqn e2, int s)
{
e1->key = e2->key;
e1->touched = e2->touched;
e1->color = e2->color;
memcpy (e1->coef, e2->coef, (s + 1) * sizeof (int));
}
/* Initialize E = 0. Equation E contains S variables. */
static inline void
omega_init_eqn_zero (eqn e, int s)
{
e->key = 0;
e->touched = 0;
e->color = omega_black;
memset (e->coef, 0, (s + 1) * sizeof (int));
}
/* Allocate N equations with S variables. */
static inline eqn
omega_alloc_eqns (int s, int n)
{
int i;
eqn res = (eqn) (xcalloc (n, sizeof (struct eqn_d)));
for (i = n - 1; i >= 0; i--)
{
res[i].coef = (int *) (xcalloc (OMEGA_MAX_VARS + 1, sizeof (int)));
omega_init_eqn_zero (&res[i], s);
}
return res;
}
/* Free N equations from array EQ. */
static inline void
omega_free_eqns (eqn eq, int n)
{
int i;
for (i = n - 1; i >= 0; i--)
free (eq[i].coef);
free (eq);
}
/* Returns true when E is an inequality with a single variable. */
static inline bool
single_var_geq (eqn e, int nv ATTRIBUTE_UNUSED)
{
return (e->key != 0
&& -OMEGA_MAX_VARS <= e->key && e->key <= OMEGA_MAX_VARS);
}
/* Allocate a new equality with all coefficients 0, and tagged with
COLOR. Return the index of this equality in problem PB. */
static inline int
omega_add_zero_eq (omega_pb pb, enum omega_eqn_color color)
{
int idx = pb->num_eqs++;
gcc_assert (pb->num_eqs <= OMEGA_MAX_EQS);
omega_init_eqn_zero (&pb->eqs[idx], pb->num_vars);
pb->eqs[idx].color = color;
return idx;
}
/* Allocate a new inequality with all coefficients 0, and tagged with
COLOR. Return the index of this inequality in problem PB. */
static inline int
omega_add_zero_geq (omega_pb pb, enum omega_eqn_color color)
{
int idx = pb->num_geqs;
pb->num_geqs++;
gcc_assert (pb->num_geqs <= OMEGA_MAX_GEQS);
omega_init_eqn_zero (&pb->geqs[idx], pb->num_vars);
pb->geqs[idx].touched = 1;
pb->geqs[idx].color = color;
return idx;
}
/* Initialize variables for problem PB. */
static inline void
omega_initialize_variables (omega_pb pb)
{
int i;
for (i = pb->num_vars; i >= 0; i--)
pb->forwarding_address[i] = pb->var[i] = i;
pb->variables_initialized = true;
}
/* Free problem PB. */
static inline void
omega_free_problem (omega_pb pb)
{
free (pb->var);
free (pb->forwarding_address);
omega_free_eqns (pb->geqs, OMEGA_MAX_GEQS);
omega_free_eqns (pb->eqs, OMEGA_MAX_EQS);
omega_free_eqns (pb->subs, OMEGA_MAX_VARS + 1);
free (pb);
}
/* Copy omega problems: P1 = P2. */
static inline void
omega_copy_problem (omega_pb p1, omega_pb p2)
{
int e, i;
p1->num_vars = p2->num_vars;
p1->hash_version = p2->hash_version;
p1->variables_initialized = p2->variables_initialized;
p1->variables_freed = p2->variables_freed;
p1->safe_vars = p2->safe_vars;
p1->num_eqs = p2->num_eqs;
p1->num_subs = p2->num_subs;
p1->num_geqs = p2->num_geqs;
for (e = p2->num_eqs - 1; e >= 0; e--)
omega_copy_eqn (&(p1->eqs[e]), &(p2->eqs[e]), p2->num_vars);
for (e = p2->num_geqs - 1; e >= 0; e--)
omega_copy_eqn (&(p1->geqs[e]), &(p2->geqs[e]), p2->num_vars);
for (e = p2->num_subs - 1; e >= 0; e--)
omega_copy_eqn (&(p1->subs[e]), &(p2->subs[e]), p2->num_vars);
for (i = p2->num_vars; i >= 0; i--)
p1->var[i] = p2->var[i];
for (i = OMEGA_MAX_VARS; i >= 0; i--)
p1->forwarding_address[i] = p2->forwarding_address[i];
}
#endif /* GCC_OMEGA_H */
......@@ -525,41 +525,6 @@ DEFPARAM(PARAM_SCEV_MAX_EXPR_COMPLEXITY,
"Bound on the complexity of the expressions in the scalar evolutions analyzer",
10, 0, 0)
DEFPARAM(PARAM_OMEGA_MAX_VARS,
"omega-max-vars",
"Bound on the number of variables in Omega constraint systems",
128, 0, 0)
DEFPARAM(PARAM_OMEGA_MAX_GEQS,
"omega-max-geqs",
"Bound on the number of inequalities in Omega constraint systems",
256, 0, 0)
DEFPARAM(PARAM_OMEGA_MAX_EQS,
"omega-max-eqs",
"Bound on the number of equalities in Omega constraint systems",
128, 0, 0)
DEFPARAM(PARAM_OMEGA_MAX_WILD_CARDS,
"omega-max-wild-cards",
"Bound on the number of wild cards in Omega constraint systems",
18, 0, 0)
DEFPARAM(PARAM_OMEGA_HASH_TABLE_SIZE,
"omega-hash-table-size",
"Bound on the size of the hash table in Omega constraint systems",
550, 0, 0)
DEFPARAM(PARAM_OMEGA_MAX_KEYS,
"omega-max-keys",
"Bound on the number of keys in Omega constraint systems",
500, 0, 0)
DEFPARAM(PARAM_OMEGA_ELIMINATE_REDUNDANT_CONSTRAINTS,
"omega-eliminate-redundant-constraints",
"When set to 1, use expensive methods to eliminate all redundant constraints",
0, 0, 1)
DEFPARAM(PARAM_VECT_MAX_VERSION_FOR_ALIGNMENT_CHECKS,
"vect-max-version-for-alignment-checks",
"Bound on number of runtime checks inserted by the vectorizer's loop versioning for alignment check",
......
......@@ -233,7 +233,6 @@ along with GCC; see the file COPYING3. If not see
NEXT_PASS (pass_tree_unswitch);
NEXT_PASS (pass_scev_cprop);
NEXT_PASS (pass_record_bounds);
NEXT_PASS (pass_check_data_deps);
NEXT_PASS (pass_loop_distribution);
NEXT_PASS (pass_copy_prop);
NEXT_PASS (pass_graphite);
......
2015-07-18 Sebastian Pop <s.pop@samsung.com>
PR middle-end/46851
PR middle-end/60340
* gcc.dg/tree-ssa/pr42327.c: Removed.
* g++.dg/other/pr35011.C: Removed.
2015-07-17 H.J. Lu <hongjiu.lu@intel.com>
PR target/66906
......
// { dg-do compile }
// { dg-options "-O3 -fcheck-data-deps" }
double foo(const double* p0, const double* p1, const double* q0)
{
double d;
for (; p0 != p1; ++p0, ++q0)
d += *p0 * *q0;
return d;
}
struct A
{
double x[3];
const double* begin() const { return x; }
};
struct B
{
A a0, a1;
double d;
B(const A&);
};
B::B(const A& a) : a0(a), a1(a), d(foo(a0.begin(), a0.begin()+3, a1.begin()))
{}
/* { dg-do compile } */
/* { dg-options "-O1 -fcheck-data-deps" } */
void foo(char *str)
{
while (*str != 0) *str++ = 0;
}
......@@ -22,7 +22,6 @@ along with GCC; see the file COPYING3. If not see
#define GCC_TREE_DATA_REF_H
#include "graphds.h"
#include "omega.h"
#include "tree-chrec.h"
/*
......@@ -301,9 +300,6 @@ extern bool compute_data_dependences_for_loop (struct loop *, bool,
vec<loop_p> *,
vec<data_reference_p> *,
vec<ddr_p> *);
extern bool compute_data_dependences_for_bb (basic_block, bool,
vec<data_reference_p> *,
vec<ddr_p> *);
extern void debug_ddrs (vec<ddr_p> );
extern void dump_data_reference (FILE *, struct data_reference *);
extern void debug (data_reference &ref);
......@@ -343,8 +339,6 @@ extern bool dr_may_alias_p (const struct data_reference *,
const struct data_reference *, bool);
extern bool dr_equal_offsets_p (struct data_reference *,
struct data_reference *);
extern void tree_check_data_deps (void);
/* Return true when the base objects of data references A and B are
the same memory object. */
......
......@@ -286,54 +286,6 @@ make_pass_vectorize (gcc::context *ctxt)
return new pass_vectorize (ctxt);
}
/* Check the correctness of the data dependence analyzers. */
namespace {
const pass_data pass_data_check_data_deps =
{
GIMPLE_PASS, /* type */
"ckdd", /* name */
OPTGROUP_LOOP, /* optinfo_flags */
TV_CHECK_DATA_DEPS, /* tv_id */
( PROP_cfg | PROP_ssa ), /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
0, /* todo_flags_finish */
};
class pass_check_data_deps : public gimple_opt_pass
{
public:
pass_check_data_deps (gcc::context *ctxt)
: gimple_opt_pass (pass_data_check_data_deps, ctxt)
{}
/* opt_pass methods: */
virtual bool gate (function *) { return flag_check_data_deps != 0; }
virtual unsigned int execute (function *);
}; // class pass_check_data_deps
unsigned int
pass_check_data_deps::execute (function *fun)
{
if (number_of_loops (fun) <= 1)
return 0;
tree_check_data_deps ();
return 0;
}
} // anon namespace
gimple_opt_pass *
make_pass_check_data_deps (gcc::context *ctxt)
{
return new pass_check_data_deps (ctxt);
}
/* Propagation of constants using scev. */
namespace {
......
......@@ -57,6 +57,7 @@ along with GCC; see the file COPYING3. If not see
#include "optabs.h"
#include "tree-scalar-evolution.h"
#include "tree-inline.h"
#include "params.h"
static unsigned int tree_ssa_phiopt_worker (bool, bool);
static bool conditional_replacement (basic_block, basic_block,
......
......@@ -63,6 +63,7 @@ along with GCC; see the file COPYING3. If not see
#include "insn-codes.h"
#include "optabs.h"
#include "builtins.h"
#include "params.h"
/* Return true if load- or store-lanes optab OPTAB is implemented for
COUNT vectors of type VECTYPE. NAME is the name of OPTAB. */
......
......@@ -26,6 +26,7 @@ along with GCC; see the file COPYING3. If not see
#include "backend.h"
#include "tree.h"
#include "gimple.h"
#include "params.h"
#include "rtl.h"
#include "ssa.h"
#include "alias.h"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment