16#include "mlir/IR/Builders.h"
17#include "mlir/IR/DialectImplementation.h"
18#include "llvm/ADT/TypeSwitch.h"
27#define GET_TYPEDEF_CLASSES
28#include "circt/Dialect/RTGTest/IR/RTGTestTypes.cpp.inc"
34bool IntegerRegisterType::isValidContentType(Type type)
const {
35 return llvm::isa<rtg::ImmediateType>(type);
38TypedAttr IntegerRegisterType::parseContentValue(llvm::StringRef valueString,
39 Type contentType)
const {
40 auto immType = dyn_cast<rtg::ImmediateType>(contentType);
45 if (valueString.getAsInteger(0, intValue))
48 if (intValue.getBitWidth() < immType.getWidth()) {
49 intValue = intValue.zext(immType.getWidth());
51 if (!intValue.isIntN(immType.getWidth()))
53 intValue = intValue.trunc(immType.getWidth());
56 return rtg::ImmediateAttr::get(getContext(), intValue);
59std::string IntegerRegisterType::getIntrinsicLabel(Attribute value,
60 llvm::StringRef
id)
const {
61 return "spike.pre.printreg.x" +
63 cast<rtg::RegisterAttrInterface>(value).getClassIndex()) +
67unsigned IntegerRegisterType::getRegisterClassSize() {
return 32; }
69rtg::RegisterAttrInterface
70IntegerRegisterType::getRegisterAttrForClassIndex(MLIRContext *ctx,
74 return RegZeroAttr::get(ctx);
76 return RegRaAttr::get(ctx);
78 return RegSpAttr::get(ctx);
80 return RegGpAttr::get(ctx);
82 return RegTpAttr::get(ctx);
84 return RegT0Attr::get(ctx);
86 return RegT1Attr::get(ctx);
88 return RegT2Attr::get(ctx);
90 return RegS0Attr::get(ctx);
92 return RegS1Attr::get(ctx);
94 return RegA0Attr::get(ctx);
96 return RegA1Attr::get(ctx);
98 return RegA2Attr::get(ctx);
100 return RegA3Attr::get(ctx);
102 return RegA4Attr::get(ctx);
104 return RegA5Attr::get(ctx);
106 return RegA6Attr::get(ctx);
108 return RegA7Attr::get(ctx);
110 return RegS2Attr::get(ctx);
112 return RegS3Attr::get(ctx);
114 return RegS4Attr::get(ctx);
116 return RegS5Attr::get(ctx);
118 return RegS6Attr::get(ctx);
120 return RegS7Attr::get(ctx);
122 return RegS8Attr::get(ctx);
124 return RegS9Attr::get(ctx);
126 return RegS10Attr::get(ctx);
128 return RegS11Attr::get(ctx);
130 return RegT3Attr::get(ctx);
132 return RegT4Attr::get(ctx);
134 return RegT5Attr::get(ctx);
136 return RegT6Attr::get(ctx);
145unsigned FloatRegisterType::getRegisterClassSize() {
return 1; }
147rtg::RegisterAttrInterface
148FloatRegisterType::getRegisterAttrForClassIndex(MLIRContext *ctx,
152 return RegF0Attr::get(ctx);
162void circt::rtgtest::RTGTestDialect::registerTypes() {
164#define GET_TYPEDEF_LIST
165#include "circt/Dialect/RTGTest/IR/RTGTestTypes.cpp.inc"
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.