systemverilog-plugin: Rename plugin's simplify to simplify_sv
Signed-off-by: Magdalena Andrys <mandrys@antmicro.com>
diff --git a/systemverilog-plugin/UhdmAst.cc b/systemverilog-plugin/UhdmAst.cc
index e52d75d..e2f173d 100644
--- a/systemverilog-plugin/UhdmAst.cc
+++ b/systemverilog-plugin/UhdmAst.cc
@@ -137,7 +137,7 @@
node->children.clear();
}
-static void simplify(AST::AstNode *current_node, AST::AstNode *parent_node);
+static void simplify_sv(AST::AstNode *current_node, AST::AstNode *parent_node);
static void sanitize_symbol_name(std::string &name)
{
@@ -276,22 +276,22 @@
if (ranges[i]->children.size() == 1) {
ranges[i]->children.push_back(ranges[i]->children[0]->clone());
}
- simplify(ranges[i], wire_node);
- while (ranges[i]->simplify(true, false, false, 1, -1, false, false)) {
+ simplify_sv(ranges[i], wire_node);
+ while (simplify(ranges[i], true, false, false, 1, -1, false, false)) {
}
// this workaround case, where yosys doesn't follow id2ast and simplifies it to resolve constant
if (ranges[i]->children[0]->id2ast) {
- simplify(ranges[i]->children[0]->id2ast, ranges[i]->children[0]);
- while (ranges[i]->children[0]->id2ast->simplify(true, false, false, 1, -1, false, false)) {
+ simplify_sv(ranges[i]->children[0]->id2ast, ranges[i]->children[0]);
+ while (simplify(ranges[i]->children[0]->id2ast, true, false, false, 1, -1, false, false)) {
}
}
if (ranges[i]->children[1]->id2ast) {
- simplify(ranges[i]->children[1]->id2ast, ranges[i]->children[1]);
- while (ranges[i]->children[1]->id2ast->simplify(true, false, false, 1, -1, false, false)) {
+ simplify_sv(ranges[i]->children[1]->id2ast, ranges[i]->children[1]);
+ while (simplify(ranges[i]->children[1]->id2ast, true, false, false, 1, -1, false, false)) {
}
}
- simplify(ranges[i], wire_node);
- while (ranges[i]->simplify(true, false, false, 1, -1, false, false)) {
+ simplify_sv(ranges[i], wire_node);
+ while (simplify(ranges[i], true, false, false, 1, -1, false, false)) {
}
log_assert(ranges[i]->children[0]->type == AST::AST_CONSTANT);
log_assert(ranges[i]->children[1]->type == AST::AST_CONSTANT);
@@ -1064,7 +1064,10 @@
current_node->children[0] = AST::AstNode::mkconst_str(preformatted_string);
}
-static void simplify(AST::AstNode *current_node, AST::AstNode *parent_node)
+// A wrapper for Yosys simplify function.
+// Simplifies AST constructs specific to this plugin to a form understandable by Yosys' simplify and then calls the latter if necessary.
+// Since simplify from Yosys has been forked to this codebase, all new code should be added there instead.
+static void simplify_sv(AST::AstNode *current_node, AST::AstNode *parent_node)
{
auto dot_it = std::find_if(current_node->children.begin(), current_node->children.end(),
[](auto c) { return c->type == static_cast<int>(AST::Extended::AST_DOT); });
@@ -1084,7 +1087,7 @@
log_error("Multirange in AST_DOT is currently unsupported\n");
dot->type = AST::AST_IDENTIFIER;
- simplify(dot, nullptr);
+ simplify_sv(dot, nullptr);
AST::AstNode *range_const = parent_node->children[0]->children[0];
prefix_node = new AST::AstNode(AST::AST_PREFIX, range_const->clone(), dot->clone());
break;
@@ -1107,7 +1110,7 @@
} else {
auto wire_node = AST_INTERNAL::current_scope[current_node->str];
// make sure wire_node is already simplified
- simplify(wire_node, nullptr);
+ simplify_sv(wire_node, nullptr);
expanded = convert_dot(wire_node, current_node, dot);
}
}
@@ -1120,7 +1123,7 @@
}
// First simplify children
for (size_t i = 0; i < current_node->children.size(); i++) {
- simplify(current_node->children[i], current_node);
+ simplify_sv(current_node->children[i], current_node);
}
switch (current_node->type) {
case AST::AST_TYPEDEF:
@@ -1147,7 +1150,7 @@
// if a wire is simplified multiple times, its ranges may be added multiple times and be redundant as a result
if (!wire_node->attributes.count(UhdmAst::is_simplified_wire())) {
- simplify(wire_node, nullptr);
+ simplify_sv(wire_node, nullptr);
}
const int packed_ranges_size =
wire_node->attributes.count(UhdmAst::packed_ranges()) ? wire_node->attributes[UhdmAst::packed_ranges()]->children.size() : 0;
@@ -1860,7 +1863,7 @@
if (pair.second->type == AST::AST_PACKAGE) {
check_memories(pair.second);
setup_current_scope(shared.top_nodes, pair.second);
- simplify(pair.second, nullptr);
+ simplify_sv(pair.second, nullptr);
clear_current_scope();
}
}
@@ -1875,7 +1878,7 @@
else {
check_memories(pair.second);
setup_current_scope(shared.top_nodes, pair.second);
- simplify(pair.second, nullptr);
+ simplify_sv(pair.second, nullptr);
clear_current_scope();
current_node->children.push_back(pair.second);
}
@@ -1907,28 +1910,28 @@
});
}
// first apply custom simplification step if needed
- simplify(parameter, module_node);
+ simplify_sv(parameter, module_node);
// workaround for yosys sometimes not simplifying parameters children
// parameters can have 2 children:
// first child should be parameter value
// second child should be parameter range (optional)
log_assert(!parameter->children.empty());
- simplify(parameter->children[0], parameter);
- while (parameter->children[0]->simplify(true, false, false, 1, -1, false, false)) {
+ simplify_sv(parameter->children[0], parameter);
+ while (simplify(parameter->children[0], true, false, false, 1, -1, false, false)) {
}
// follow id2ast as yosys doesn't do it by default
if (parameter->children[0]->id2ast) {
- simplify(parameter->children[0]->id2ast, parameter);
- while (parameter->children[0]->id2ast->simplify(true, false, false, 1, -1, false, false)) {
+ simplify_sv(parameter->children[0]->id2ast, parameter);
+ while (simplify(parameter->children[0]->id2ast, true, false, false, 1, -1, false, false)) {
}
}
if (parameter->children.size() > 1) {
- simplify(parameter->children[1], parameter);
- while (parameter->children[1]->simplify(true, false, false, 1, -1, false, false)) {
+ simplify_sv(parameter->children[1], parameter);
+ while (simplify(parameter->children[1], true, false, false, 1, -1, false, false)) {
}
if (parameter->children[1]->id2ast) {
- simplify(parameter->children[1]->id2ast, parameter);
- while (parameter->children[1]->id2ast->simplify(true, false, false, 1, -1, false, false)) {
+ simplify_sv(parameter->children[1]->id2ast, parameter);
+ while (simplify(parameter->children[1]->id2ast, true, false, false, 1, -1, false, false)) {
}
}
}