//
// The LLVM Compiler Infrastructure
//
-// This file was developed by Chris Lattner and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
#ifndef DAGISEL_EMITTER_H
#define DAGISEL_EMITTER_H
-#include "TableGenBackend.h"
-#include "CodeGenTarget.h"
+#include "CodeGenDAGPatterns.h"
+#include <set>
namespace llvm {
-/// InstrSelectorEmitter - The top-level class which coordinates construction
+/// DAGISelEmitter - The top-level class which coordinates construction
/// and emission of the instruction selector.
///
class DAGISelEmitter : public TableGenBackend {
RecordKeeper &Records;
- CodeGenTarget Target;
-
+ CodeGenDAGPatterns CGP;
public:
- DAGISelEmitter(RecordKeeper &R) : Records(R) {}
+ DAGISelEmitter(RecordKeeper &R) : Records(R), CGP(R) {}
// run - Output the isel, returning true on failure.
- void run(std::ostream &OS) {}
+ void run(std::ostream &OS);
+
+
+private:
+ void EmitNodeTransforms(std::ostream &OS);
+ void EmitPredicateFunctions(std::ostream &OS);
+
+ void GenerateCodeForPattern(const PatternToMatch &Pattern,
+ std::vector<std::pair<unsigned, std::string> > &GeneratedCode,
+ std::set<std::string> &GeneratedDecl,
+ std::vector<std::string> &TargetOpcodes,
+ std::vector<std::string> &TargetVTs);
+ void EmitPatterns(std::vector<std::pair<const PatternToMatch*,
+ std::vector<std::pair<unsigned, std::string> > > > &Patterns,
+ unsigned Indent, std::ostream &OS);
+
+ void EmitInstructionSelector(std::ostream &OS);
};
} // End llvm namespace