18 using namespace circt;
19 using namespace firrtl;
22 struct CreateCompanionAssumePass
23 :
public CreateCompanionAssumeBase<CreateCompanionAssumePass> {
24 void runOnOperation()
override {
26 getOperation().walk([&](firrtl::AssertOp assertOp) {
28 builder.setInsertionPointAfter(assertOp);
29 auto guards = assertOp->getAttrOfType<ArrayAttr>(
"guards");
31 bool isUnrOnlyAssert =
false;
35 isUnrOnlyAssert = llvm::any_of(guards, [](Attribute attr) {
36 StringAttr strAttr = dyn_cast<StringAttr>(attr);
37 return strAttr && strAttr.getValue() ==
"USE_UNR_ONLY_CONSTRAINTS";
45 assume =
builder.create<firrtl::UnclockedAssumeIntrinsicOp>(
46 assertOp.getLoc(), assertOp.getPredicate(), assertOp.getEnable(),
47 emptyMessage, ValueRange{}, assertOp.getName());
50 assume =
builder.create<firrtl::AssumeOp>(
51 assertOp.getLoc(), assertOp.getClock(), assertOp.getPredicate(),
52 assertOp.getEnable(), emptyMessage, ValueRange{},
57 SmallVector<Attribute> newGuards{
58 builder.getStringAttr(
"USE_PROPERTY_AS_CONSTRAINT")};
60 newGuards.append(guards.begin(), guards.end());
61 assume->setAttr(
"guards",
builder.getArrayAttr(newGuards));
69 return std::make_unique<CreateCompanionAssumePass>();
Direction get(bool isOutput)
Returns an output direction if isOutput is true, otherwise returns an input direction.
std::unique_ptr< mlir::Pass > createCreateCompanionAssume()
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.