mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-28 07:05:03 +00:00
ee4fa1977d
CodeGenDAGPatterns, where it can be used in other tablegen backends. This allows the inference to be done for DAGISelEmitter so that it gets accurate mayLoad/mayStore/isSimpleLoad flags. This brings MemOperand functionality back to where it was before 48329. However, it doesn't solve the problem of anonymous patterns which expand to code that does loads or stores. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49123 91177308-0d34-0410-b5e6-96231b3b80d8
55 lines
1.7 KiB
C++
55 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 "TableGenBackend.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
|