mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-08 18:31:23 +00:00
200c57e8ea
out, DAGISelEmitter can compute it in its ctor, which simplifies some code. Now we can use CodegenDAGPatterns in other parts of tblgen that want access to dag pattern info, woo! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45636 91177308-0d34-0410-b5e6-96231b3b80d8
54 lines
1.7 KiB
C++
54 lines
1.7 KiB
C++
//===- DAGISelEmitter.h - Generate an instruction selector ------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This tablegen backend emits a DAG instruction selector.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef DAGISEL_EMITTER_H
|
|
#define DAGISEL_EMITTER_H
|
|
|
|
#include "CodeGenDAGPatterns.h"
|
|
#include <set>
|
|
|
|
namespace llvm {
|
|
|
|
/// DAGISelEmitter - The top-level class which coordinates construction
|
|
/// and emission of the instruction selector.
|
|
///
|
|
class DAGISelEmitter : public TableGenBackend {
|
|
RecordKeeper &Records;
|
|
CodegenDAGPatterns CGP;
|
|
public:
|
|
DAGISelEmitter(RecordKeeper &R) : Records(R), CGP(R) {}
|
|
|
|
// run - Output the isel, returning true on failure.
|
|
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
|
|
|
|
#endif
|