mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-09-01 04:29:57 +00:00
Manage Inits in a FoldingSet. This provides several benefits: - Memory for Inits is properly managed - Duplicate Inits are folded into Flyweights, saving memory - It enforces const-correctness, protecting against certain classes of bugs The above benefits allow Inits to be used in more contexts, which in turn provides more dynamism to TableGen. This enhanced capability will be used by the AVX code generator to a fold common patterns together. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134907 91177308-0d34-0410-b5e6-96231b3b80d8
50 lines
1.4 KiB
C++
50 lines
1.4 KiB
C++
//===- CodeEmitterGen.h - Code Emitter Generator ----------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// FIXME: document
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef CODEMITTERGEN_H
|
|
#define CODEMITTERGEN_H
|
|
|
|
#include "TableGenBackend.h"
|
|
#include <vector>
|
|
#include <string>
|
|
|
|
namespace llvm {
|
|
|
|
class RecordVal;
|
|
class BitsInit;
|
|
class CodeGenTarget;
|
|
|
|
class CodeEmitterGen : public TableGenBackend {
|
|
RecordKeeper &Records;
|
|
public:
|
|
CodeEmitterGen(RecordKeeper &R) : Records(R) {}
|
|
|
|
// run - Output the code emitter
|
|
void run(raw_ostream &o);
|
|
private:
|
|
void emitMachineOpEmitter(raw_ostream &o, const std::string &Namespace);
|
|
void emitGetValueBit(raw_ostream &o, const std::string &Namespace);
|
|
void reverseBits(std::vector<Record*> &Insts);
|
|
int getVariableBit(const std::string &VarName, const BitsInit *BI, int bit);
|
|
std::string getInstructionCase(Record *R, CodeGenTarget &Target);
|
|
void
|
|
AddCodeToMergeInOperand(Record *R, const BitsInit *BI,
|
|
const std::string &VarName, unsigned &NumberedOp,
|
|
std::string &Case, CodeGenTarget &Target);
|
|
|
|
};
|
|
|
|
} // End llvm namespace
|
|
|
|
#endif
|