mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-10 01:55:08 +00:00
Avoid dependency between TableGen and CodeGen
Duplicate a few common definitions between DFAPacketizer.cpp and DFAPacketizerEmitter.cpp to avoid including files from CodeGen in TableGen. llvm-svn: 253820
This commit is contained in:
parent
0fd11526e2
commit
6753f33388
@ -27,7 +27,6 @@
|
||||
#define LLVM_CODEGEN_DFAPACKETIZER_H
|
||||
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/CodeGen/DFAPacketizerDefs.h"
|
||||
#include "llvm/CodeGen/MachineBasicBlock.h"
|
||||
#include <map>
|
||||
|
||||
@ -41,6 +40,34 @@ class InstrItineraryData;
|
||||
class DefaultVLIWScheduler;
|
||||
class SUnit;
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// Definitions shared between DFAPacketizer.cpp and DFAPacketizerEmitter.cpp
|
||||
|
||||
// DFA_MAX_RESTERMS * DFA_MAX_RESOURCES must fit within sizeof DFAInput.
|
||||
// This is verified in DFAPacketizer.cpp:DFAPacketizer::DFAPacketizer.
|
||||
//
|
||||
// e.g. terms x resource bit combinations that fit in uint32_t:
|
||||
// 4 terms x 8 bits = 32 bits
|
||||
// 3 terms x 10 bits = 30 bits
|
||||
// 2 terms x 16 bits = 32 bits
|
||||
//
|
||||
// e.g. terms x resource bit combinations that fit in uint64_t:
|
||||
// 8 terms x 8 bits = 64 bits
|
||||
// 7 terms x 9 bits = 63 bits
|
||||
// 6 terms x 10 bits = 60 bits
|
||||
// 5 terms x 12 bits = 60 bits
|
||||
// 4 terms x 16 bits = 64 bits <--- current
|
||||
// 3 terms x 21 bits = 63 bits
|
||||
// 2 terms x 32 bits = 64 bits
|
||||
//
|
||||
#define DFA_MAX_RESTERMS 4 // The max # of AND'ed resource terms.
|
||||
#define DFA_MAX_RESOURCES 16 // The max # of resource bits in one term.
|
||||
|
||||
typedef uint64_t DFAInput;
|
||||
typedef int64_t DFAStateInput;
|
||||
#define DFA_TBLTYPE "int64_t" // For generating DFAStateInputTable.
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
class DFAPacketizer {
|
||||
private:
|
||||
typedef std::pair<unsigned, DFAInput> UnsignPair;
|
||||
@ -69,9 +96,7 @@ public:
|
||||
DFAInput getInsnInput(unsigned InsnClass);
|
||||
|
||||
// getInsnInput - Return the DFAInput for an instruction class input vector.
|
||||
static DFAInput getInsnInput(const std::vector<unsigned> &InsnClass) {
|
||||
return getDFAInsnInput(InsnClass);
|
||||
}
|
||||
static DFAInput getInsnInput(const std::vector<unsigned> &InsnClass);
|
||||
|
||||
// canReserveResources - Check if the resources occupied by a MCInstrDesc
|
||||
// are available in the current state.
|
||||
|
@ -1,63 +0,0 @@
|
||||
//=- llvm/CodeGen/DFAPacketizerDefs.h - DFA Packetizer for VLIW ---*- C++ -*-=//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Common definitions used by TableGen and the DFAPacketizer in CodeGen.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_CODEGEN_DFAPACKETIZERDEFS_H
|
||||
#define LLVM_CODEGEN_DFAPACKETIZERDEFS_H
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace llvm {
|
||||
|
||||
// DFA_MAX_RESTERMS * DFA_MAX_RESOURCES must fit within sizeof DFAInput.
|
||||
// This is verified in DFAPacketizer.cpp:DFAPacketizer::DFAPacketizer.
|
||||
//
|
||||
// e.g. terms x resource bit combinations that fit in uint32_t:
|
||||
// 4 terms x 8 bits = 32 bits
|
||||
// 3 terms x 10 bits = 30 bits
|
||||
// 2 terms x 16 bits = 32 bits
|
||||
//
|
||||
// e.g. terms x resource bit combinations that fit in uint64_t:
|
||||
// 8 terms x 8 bits = 64 bits
|
||||
// 7 terms x 9 bits = 63 bits
|
||||
// 6 terms x 10 bits = 60 bits
|
||||
// 5 terms x 12 bits = 60 bits
|
||||
// 4 terms x 16 bits = 64 bits <--- current
|
||||
// 3 terms x 21 bits = 63 bits
|
||||
// 2 terms x 32 bits = 64 bits
|
||||
//
|
||||
#define DFA_MAX_RESTERMS 4 // The max # of AND'ed resource terms.
|
||||
#define DFA_MAX_RESOURCES 16 // The max # of resource bits in one term.
|
||||
|
||||
typedef uint64_t DFAInput;
|
||||
typedef int64_t DFAStateInput;
|
||||
#define DFA_TBLTYPE "int64_t" // For generating DFAStateInputTable.
|
||||
|
||||
namespace {
|
||||
DFAInput addDFAFuncUnits(DFAInput Inp, unsigned FuncUnits) {
|
||||
return (Inp << DFA_MAX_RESOURCES) | FuncUnits;
|
||||
}
|
||||
|
||||
/// Return the DFAInput for an instruction class input vector.
|
||||
/// This function is used in both DFAPacketizer.cpp and in
|
||||
/// DFAPacketizerEmitter.cpp.
|
||||
DFAInput getDFAInsnInput(const std::vector<unsigned> &InsnClass) {
|
||||
DFAInput InsnInput = 0;
|
||||
assert ((InsnClass.size() <= DFA_MAX_RESTERMS) &&
|
||||
"Exceeded maximum number of DFA terms");
|
||||
for (auto U : InsnClass)
|
||||
InsnInput = addDFAFuncUnits(InsnInput, U);
|
||||
return InsnInput;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
@ -31,6 +31,28 @@
|
||||
#include "llvm/Target/TargetInstrInfo.h"
|
||||
using namespace llvm;
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// Definitions shared between DFAPacketizer.cpp and DFAPacketizerEmitter.cpp
|
||||
|
||||
namespace {
|
||||
DFAInput addDFAFuncUnits(DFAInput Inp, unsigned FuncUnits) {
|
||||
return (Inp << DFA_MAX_RESOURCES) | FuncUnits;
|
||||
}
|
||||
|
||||
/// Return the DFAInput for an instruction class input vector.
|
||||
/// This function is used in both DFAPacketizer.cpp and in
|
||||
/// DFAPacketizerEmitter.cpp.
|
||||
DFAInput getDFAInsnInput(const std::vector<unsigned> &InsnClass) {
|
||||
DFAInput InsnInput = 0;
|
||||
assert ((InsnClass.size() <= DFA_MAX_RESTERMS) &&
|
||||
"Exceeded maximum number of DFA terms");
|
||||
for (auto U : InsnClass)
|
||||
InsnInput = addDFAFuncUnits(InsnInput, U);
|
||||
return InsnInput;
|
||||
}
|
||||
}
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
DFAPacketizer::DFAPacketizer(const InstrItineraryData *I,
|
||||
const DFAStateInput (*SIT)[2],
|
||||
const unsigned *SET):
|
||||
@ -82,6 +104,11 @@ DFAInput DFAPacketizer::getInsnInput(unsigned InsnClass) {
|
||||
return InsnInput;
|
||||
}
|
||||
|
||||
// getInsnInput - Return the DFAInput for an instruction class input vector.
|
||||
DFAInput DFAPacketizer::getInsnInput(const std::vector<unsigned> &InsnClass) {
|
||||
return getDFAInsnInput(InsnClass);
|
||||
}
|
||||
|
||||
// canReserveResources - Check if the resources occupied by a MCInstrDesc
|
||||
// are available in the current state.
|
||||
bool DFAPacketizer::canReserveResources(const llvm::MCInstrDesc *MID) {
|
||||
|
@ -21,7 +21,6 @@
|
||||
#include "llvm/ADT/DenseSet.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/CodeGen/DFAPacketizerDefs.h"
|
||||
#include "llvm/TableGen/Record.h"
|
||||
#include "llvm/TableGen/TableGenBackend.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
@ -31,6 +30,52 @@
|
||||
#include <queue>
|
||||
using namespace llvm;
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// Definitions shared between DFAPacketizer.cpp and DFAPacketizerEmitter.cpp
|
||||
|
||||
// DFA_MAX_RESTERMS * DFA_MAX_RESOURCES must fit within sizeof DFAInput.
|
||||
// This is verified in DFAPacketizer.cpp:DFAPacketizer::DFAPacketizer.
|
||||
//
|
||||
// e.g. terms x resource bit combinations that fit in uint32_t:
|
||||
// 4 terms x 8 bits = 32 bits
|
||||
// 3 terms x 10 bits = 30 bits
|
||||
// 2 terms x 16 bits = 32 bits
|
||||
//
|
||||
// e.g. terms x resource bit combinations that fit in uint64_t:
|
||||
// 8 terms x 8 bits = 64 bits
|
||||
// 7 terms x 9 bits = 63 bits
|
||||
// 6 terms x 10 bits = 60 bits
|
||||
// 5 terms x 12 bits = 60 bits
|
||||
// 4 terms x 16 bits = 64 bits <--- current
|
||||
// 3 terms x 21 bits = 63 bits
|
||||
// 2 terms x 32 bits = 64 bits
|
||||
//
|
||||
#define DFA_MAX_RESTERMS 4 // The max # of AND'ed resource terms.
|
||||
#define DFA_MAX_RESOURCES 16 // The max # of resource bits in one term.
|
||||
|
||||
typedef uint64_t DFAInput;
|
||||
typedef int64_t DFAStateInput;
|
||||
#define DFA_TBLTYPE "int64_t" // For generating DFAStateInputTable.
|
||||
|
||||
namespace {
|
||||
DFAInput addDFAFuncUnits(DFAInput Inp, unsigned FuncUnits) {
|
||||
return (Inp << DFA_MAX_RESOURCES) | FuncUnits;
|
||||
}
|
||||
|
||||
/// Return the DFAInput for an instruction class input vector.
|
||||
/// This function is used in both DFAPacketizer.cpp and in
|
||||
/// DFAPacketizerEmitter.cpp.
|
||||
DFAInput getDFAInsnInput(const std::vector<unsigned> &InsnClass) {
|
||||
DFAInput InsnInput = 0;
|
||||
assert ((InsnClass.size() <= DFA_MAX_RESTERMS) &&
|
||||
"Exceeded maximum number of DFA terms");
|
||||
for (auto U : InsnClass)
|
||||
InsnInput = addDFAFuncUnits(InsnInput, U);
|
||||
return InsnInput;
|
||||
}
|
||||
}
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
#ifndef NDEBUG
|
||||
// To enable debugging, run llvm-tblgen with: "-debug-only dfa-emitter".
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user