Skip to content

Commit

Permalink
Merge pull request #4595 from YosysHQ/emil/internal_stats-astnode
Browse files Browse the repository at this point in the history
internal_stats: astnode (sizeof)
  • Loading branch information
povik authored Sep 11, 2024
2 parents 6937241 + 1372c47 commit 3457270
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 0 deletions.
4 changes: 4 additions & 0 deletions frontends/ast/ast.cc
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ namespace AST {
std::string current_filename;
void (*set_line_num)(int) = NULL;
int (*get_line_num)() = NULL;
unsigned long long astnodes = 0;
unsigned long long astnode_count() { return astnodes; }
}

// instantiate global variables (private API)
Expand Down Expand Up @@ -204,6 +206,7 @@ AstNode::AstNode(AstNodeType type, AstNode *child1, AstNode *child2, AstNode *ch
static unsigned int hashidx_count = 123456789;
hashidx_count = mkhash_xorshift(hashidx_count);
hashidx_ = hashidx_count;
astnodes++;

this->type = type;
filename = current_filename;
Expand Down Expand Up @@ -292,6 +295,7 @@ void AstNode::delete_children()
// AstNode destructor
AstNode::~AstNode()
{
astnodes--;
delete_children();
}

Expand Down
3 changes: 3 additions & 0 deletions frontends/ast/ast.h
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,9 @@ namespace AST
extern void (*set_line_num)(int);
extern int (*get_line_num)();

// for stats
unsigned long long astnode_count();

// set set_line_num and get_line_num to internal dummy functions (done by simplify() and AstModule::derive
// to control the filename and linenum properties of new nodes not generated by a frontend parser)
void use_internal_line_num();
Expand Down
3 changes: 3 additions & 0 deletions passes/cmds/internal_stats.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "kernel/celltypes.h"
#include "passes/techmap/libparse.h"
#include "kernel/cost.h"
#include "frontends/ast/ast.h"
#include "libs/json11/json11.hpp"

#if defined(__APPLE__) && defined(__MACH__)
Expand Down Expand Up @@ -105,6 +106,8 @@ struct InternalStatsPass : public Pass {
if (auto mem = current_mem_bytes()) {
log(" \"memory_now\": %s,\n", std::to_string(*mem).c_str());
}
auto ast_bytes = AST::astnode_count() * (unsigned long long) sizeof(AST::AstNode);
log(" \"memory_ast\": %s,\n", std::to_string(ast_bytes).c_str());
}

// stats go here
Expand Down

0 comments on commit 3457270

Please sign in to comment.