OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [go/] [gofrontend/] [dataflow.h] - Rev 774

Go to most recent revision | Compare with Previous | Blame | View Log

// dataflow.h -- Go frontend dataflow.    -*- C++ -*-
 
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
 
#ifndef GO_DATAFLOW_H
#define GO_DATAFLOW_H
 
class Expression;
class Named_object;
class Statement;
 
// Dataflow information about the Go program.
 
class Dataflow
{
 public:
  // A variable definition.
  struct Def
  {
    // The statement where the variable is defined.
    Statement* statement;
    // The value to which the variable is set.  This may be NULL.
    Expression* val;
    // Whether this is an initialization of the variable.
    bool is_init;
  };
 
  // A variable reference.
  struct Ref
  {
    // The statement where the variable is referenced.
    Statement* statement;
  };
 
  // A list of defs.
  typedef std::vector<Def> Defs;
 
  // A list of refs.
  typedef std::vector<Ref> Refs;
 
  Dataflow();
 
  // Initialize the dataflow information.
  void
  initialize(Gogo*);
 
  // Add a definition of a variable.  STATEMENT assigns a value to
  // VAR.  VAL is the value if it is known, NULL otherwise.
  void
  add_def(Named_object* var, Expression* val, Statement* statement,
	  bool is_init);
 
  // Add a reference to a variable.  VAR is the variable, and
  // STATEMENT is the statement which refers to it.
  void
  add_ref(Named_object* var, Statement* statement);
 
  // Return the definitions of VAR--the places where it is set.
  const Defs*
  find_defs(Named_object* var) const;
 
  // Return the references to VAR--the places where it is used.
  const Refs*
  find_refs(Named_object* var) const;
 
 private:
  // Order variables in the map.
  struct Compare_vars
  {
    bool
    operator()(const Named_object*, const Named_object*) const;
  };
 
  // Map from variables to a list of defs of the variable.  We use a
  // map rather than a hash table because the order in which we
  // process variables may affect the resulting code.
  typedef std::map<Named_object*, Defs*, Compare_vars> Defmap;
 
  // Map from variables to a list of refs to the vairable.
  typedef std::map<Named_object*, Refs*, Compare_vars> Refmap;
 
  // Variable defs.
  Defmap defs_;
  // Variable refs;
  Refmap refs_;
};
 
 
#endif // !defined(GO_DATAFLOW_H)
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.