Home | History | Annotate | Download | only in TableGen
      1 //===- DFAPacketizerEmitter.h - Packetization DFA for a VLIW machine-------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This class parses the Schedule.td file and produces an API that can be used
     11 // to reason about whether an instruction can be added to a packet on a VLIW
     12 // architecture. The class internally generates a deterministic finite
     13 // automaton (DFA) that models all possible mappings of machine instructions
     14 // to functional units as instructions are added to a packet.
     15 //
     16 //===----------------------------------------------------------------------===//
     17 
     18 #include "llvm/ADT/DenseSet.h"
     19 #include "llvm/TableGen/TableGenBackend.h"
     20 #include <map>
     21 #include <string>
     22 
     23 namespace llvm {
     24 //
     25 // class DFAGen: class that generates and prints out the DFA for resource
     26 // tracking.
     27 //
     28 class DFAGen : public TableGenBackend {
     29 private:
     30   std::string TargetName;
     31   //
     32   // allInsnClasses is the set of all possible resources consumed by an
     33   // InstrStage.
     34   //
     35   DenseSet<unsigned> allInsnClasses;
     36   RecordKeeper &Records;
     37 
     38 public:
     39   DFAGen(RecordKeeper &R);
     40 
     41   //
     42   // collectAllInsnClasses: Populate allInsnClasses which is a set of units
     43   // used in each stage.
     44   //
     45   void collectAllInsnClasses(const std::string &Name,
     46                             Record *ItinData,
     47                             unsigned &NStages,
     48                             raw_ostream &OS);
     49 
     50   void run(raw_ostream &OS);
     51 };
     52 }
     53