yosys-master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
AbcPass Struct Reference
+ Inheritance diagram for AbcPass:
+ Collaboration diagram for AbcPass:

Public Member Functions

 AbcPass ()
 
virtual void help ()
 
virtual void execute (std::vector< std::string > args, RTLIL::Design *design)
 
pre_post_exec_state_t pre_execute ()
 
void post_execute (pre_post_exec_state_t state)
 
void cmd_log_args (const std::vector< std::string > &args)
 
void cmd_error (const std::vector< std::string > &args, size_t argidx, std::string msg)
 
void extra_args (std::vector< std::string > args, size_t argidx, RTLIL::Design *design, bool select=true)
 
virtual void run_register ()
 

Static Public Member Functions

static void call (RTLIL::Design *design, std::string command)
 
static void call (RTLIL::Design *design, std::vector< std::string > args)
 
static void call_on_selection (RTLIL::Design *design, const RTLIL::Selection &selection, std::string command)
 
static void call_on_selection (RTLIL::Design *design, const RTLIL::Selection &selection, std::vector< std::string > args)
 
static void call_on_module (RTLIL::Design *design, RTLIL::Module *module, std::string command)
 
static void call_on_module (RTLIL::Design *design, RTLIL::Module *module, std::vector< std::string > args)
 
static void init_register ()
 
static void done_register ()
 

Data Fields

std::string pass_name
 
std::string short_help
 
int call_counter
 
int64_t runtime_ns
 
Passnext_queued_pass
 

Detailed Description

Definition at line 997 of file abc.cc.

Constructor & Destructor Documentation

AbcPass::AbcPass ( )
inline

Definition at line 998 of file abc.cc.

998 : Pass("abc", "use ABC for technology mapping") { }
Pass(std::string name, std::string short_help="** document me **")
Definition: register.cc:40

Member Function Documentation

void Pass::call ( RTLIL::Design design,
std::string  command 
)
staticinherited

Definition at line 146 of file register.cc.

147 {
148  std::vector<std::string> args;
149 
150  std::string cmd_buf = command;
151  std::string tok = next_token(cmd_buf, " \t\r\n");
152 
153  if (tok.empty() || tok[0] == '#')
154  return;
155 
156  if (tok[0] == '!') {
157  cmd_buf = command.substr(command.find('!') + 1);
158  while (!cmd_buf.empty() && (cmd_buf.back() == ' ' || cmd_buf.back() == '\t' ||
159  cmd_buf.back() == '\r' || cmd_buf.back() == '\n'))
160  cmd_buf.resize(cmd_buf.size()-1);
161  log_header("Shell command: %s\n", cmd_buf.c_str());
162  int retCode = run_command(cmd_buf);
163  if (retCode != 0)
164  log_cmd_error("Shell command returned error code %d.\n", retCode);
165  return;
166  }
167 
168  while (!tok.empty()) {
169  if (tok == "#")
170  break;
171  if (tok.back() == ';') {
172  int num_semikolon = 0;
173  while (!tok.empty() && tok.back() == ';')
174  tok.resize(tok.size()-1), num_semikolon++;
175  if (!tok.empty())
176  args.push_back(tok);
177  call(design, args);
178  args.clear();
179  if (num_semikolon == 2)
180  call(design, "clean");
181  if (num_semikolon == 3)
182  call(design, "clean -purge");
183  } else
184  args.push_back(tok);
185  tok = next_token(cmd_buf, " \t\r\n");
186  }
187 
188  call(design, args);
189 }
static std::string next_token(bool pass_newline=false)
Definition: preproc.cc:96
void log_header(const char *format,...)
Definition: log.cc:188
int run_command(const std::string &command, std::function< void(const std::string &)> process_line)
Definition: yosys.cc:195
void log_cmd_error(const char *format,...)
Definition: log.cc:211
static void call(RTLIL::Design *design, std::string command)
Definition: register.cc:146

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void Pass::call ( RTLIL::Design design,
std::vector< std::string >  args 
)
staticinherited

Definition at line 191 of file register.cc.

192 {
193  if (args.size() == 0 || args[0][0] == '#')
194  return;
195 
196  if (echo_mode) {
197  log("%s", create_prompt(design, 0));
198  for (size_t i = 0; i < args.size(); i++)
199  log("%s%s", i ? " " : "", args[i].c_str());
200  log("\n");
201  }
202 
203  if (pass_register.count(args[0]) == 0)
204  log_cmd_error("No such command: %s (type 'help' for a command overview)\n", args[0].c_str());
205 
206  size_t orig_sel_stack_pos = design->selection_stack.size();
207  auto state = pass_register[args[0]]->pre_execute();
208  pass_register[args[0]]->execute(args, design);
209  pass_register[args[0]]->post_execute(state);
210  while (design->selection_stack.size() > orig_sel_stack_pos)
211  design->selection_stack.pop_back();
212 
213  design->check();
214 }
bool echo_mode
Definition: register.cc:30
std::vector< RTLIL::Selection > selection_stack
Definition: rtlil.h:509
const char * create_prompt(RTLIL::Design *design, int recursion_counter)
Definition: yosys.cc:400
void check()
Definition: rtlil.cc:357
void log_cmd_error(const char *format,...)
Definition: log.cc:211
void log(const char *format,...)
Definition: log.cc:180
std::map< std::string, Pass * > pass_register
Definition: register.cc:35

+ Here is the call graph for this function:

void Pass::call_on_module ( RTLIL::Design design,
RTLIL::Module module,
std::string  command 
)
staticinherited

Definition at line 240 of file register.cc.

241 {
242  std::string backup_selected_active_module = design->selected_active_module;
243  design->selected_active_module = module->name.str();
244  design->selection_stack.push_back(RTLIL::Selection(false));
245  design->selection_stack.back().select(module);
246 
247  Pass::call(design, command);
248 
249  design->selection_stack.pop_back();
250  design->selected_active_module = backup_selected_active_module;
251 }
std::string str() const
Definition: rtlil.h:182
std::vector< RTLIL::Selection > selection_stack
Definition: rtlil.h:509
RTLIL::IdString name
Definition: rtlil.h:599
std::string selected_active_module
Definition: rtlil.h:511
static void call(RTLIL::Design *design, std::string command)
Definition: register.cc:146

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void Pass::call_on_module ( RTLIL::Design design,
RTLIL::Module module,
std::vector< std::string >  args 
)
staticinherited

Definition at line 253 of file register.cc.

254 {
255  std::string backup_selected_active_module = design->selected_active_module;
256  design->selected_active_module = module->name.str();
257  design->selection_stack.push_back(RTLIL::Selection(false));
258  design->selection_stack.back().select(module);
259 
260  Pass::call(design, args);
261 
262  design->selection_stack.pop_back();
263  design->selected_active_module = backup_selected_active_module;
264 }
std::string str() const
Definition: rtlil.h:182
std::vector< RTLIL::Selection > selection_stack
Definition: rtlil.h:509
RTLIL::IdString name
Definition: rtlil.h:599
std::string selected_active_module
Definition: rtlil.h:511
static void call(RTLIL::Design *design, std::string command)
Definition: register.cc:146

+ Here is the call graph for this function:

void Pass::call_on_selection ( RTLIL::Design design,
const RTLIL::Selection selection,
std::string  command 
)
staticinherited

Definition at line 216 of file register.cc.

217 {
218  std::string backup_selected_active_module = design->selected_active_module;
219  design->selected_active_module.clear();
220  design->selection_stack.push_back(selection);
221 
222  Pass::call(design, command);
223 
224  design->selection_stack.pop_back();
225  design->selected_active_module = backup_selected_active_module;
226 }
std::vector< RTLIL::Selection > selection_stack
Definition: rtlil.h:509
std::string selected_active_module
Definition: rtlil.h:511
static void call(RTLIL::Design *design, std::string command)
Definition: register.cc:146

+ Here is the call graph for this function:

void Pass::call_on_selection ( RTLIL::Design design,
const RTLIL::Selection selection,
std::vector< std::string >  args 
)
staticinherited

Definition at line 228 of file register.cc.

229 {
230  std::string backup_selected_active_module = design->selected_active_module;
231  design->selected_active_module.clear();
232  design->selection_stack.push_back(selection);
233 
234  Pass::call(design, args);
235 
236  design->selection_stack.pop_back();
237  design->selected_active_module = backup_selected_active_module;
238 }
std::vector< RTLIL::Selection > selection_stack
Definition: rtlil.h:509
std::string selected_active_module
Definition: rtlil.h:511
static void call(RTLIL::Design *design, std::string command)
Definition: register.cc:146

+ Here is the call graph for this function:

void Pass::cmd_error ( const std::vector< std::string > &  args,
size_t  argidx,
std::string  msg 
)
inherited

Definition at line 110 of file register.cc.

111 {
112  std::string command_text;
113  int error_pos = 0;
114 
115  for (size_t i = 0; i < args.size(); i++) {
116  if (i < argidx)
117  error_pos += args[i].size() + 1;
118  command_text = command_text + (command_text.empty() ? "" : " ") + args[i];
119  }
120 
121  log("\nSyntax error in command `%s':\n", command_text.c_str());
122  help();
123 
124  log_cmd_error("Command syntax error: %s\n> %s\n> %*s^\n",
125  msg.c_str(), command_text.c_str(), error_pos, "");
126 }
virtual void help()
Definition: register.cc:93
void log_cmd_error(const char *format,...)
Definition: log.cc:211
void log(const char *format,...)
Definition: log.cc:180

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void Pass::cmd_log_args ( const std::vector< std::string > &  args)
inherited

Definition at line 100 of file register.cc.

101 {
102  if (args.size() <= 1)
103  return;
104  log("Full command line:");
105  for (size_t i = 0; i < args.size(); i++)
106  log(" %s", args[i].c_str());
107  log("\n");
108 }
void log(const char *format,...)
Definition: log.cc:180

+ Here is the call graph for this function:

void Pass::done_register ( )
staticinherited

Definition at line 62 of file register.cc.

63 {
64  frontend_register.clear();
65  pass_register.clear();
66  backend_register.clear();
68 }
std::map< std::string, Frontend * > frontend_register
Definition: register.cc:34
Pass * first_queued_pass
Definition: register.cc:31
#define log_assert(_assert_expr_)
Definition: log.h:85
#define NULL
std::map< std::string, Pass * > pass_register
Definition: register.cc:35
std::map< std::string, Backend * > backend_register
Definition: register.cc:36

+ Here is the caller graph for this function:

virtual void AbcPass::execute ( std::vector< std::string >  args,
RTLIL::Design design 
)
inlinevirtual

Implements Pass.

Definition at line 1099 of file abc.cc.

1100  {
1101  log_header("Executing ABC pass (technology mapping using ABC).\n");
1102  log_push();
1103 
1104  std::string exe_file = proc_self_dirname() + "yosys-abc";
1105  std::string script_file, liberty_file, constr_file, clk_str, delay_target;
1106  bool fast_mode = false, dff_mode = false, keepff = false, cleanup = true;
1107  int lut_mode = 0;
1108 
1109 #ifdef _WIN32
1110  if (!check_file_exists(exe_file + ".exe") && check_file_exists(proc_self_dirname() + "..\\yosys-abc.exe"))
1111  exe_file = proc_self_dirname() + "..\\yosys-abc";
1112 #endif
1113 
1114  size_t argidx;
1115  char pwd [PATH_MAX];
1116  if (!getcwd(pwd, sizeof(pwd))) {
1117  log_cmd_error("getcwd failed: %s\n", strerror(errno));
1118  log_abort();
1119  }
1120  for (argidx = 1; argidx < args.size(); argidx++) {
1121  std::string arg = args[argidx];
1122  if (arg == "-exe" && argidx+1 < args.size()) {
1123  exe_file = args[++argidx];
1124  continue;
1125  }
1126  if (arg == "-script" && argidx+1 < args.size()) {
1127  script_file = args[++argidx];
1128  if (!script_file.empty() && script_file[0] != '/' && script_file[0] != '+')
1129  script_file = std::string(pwd) + "/" + script_file;
1130  continue;
1131  }
1132  if (arg == "-liberty" && argidx+1 < args.size()) {
1133  liberty_file = args[++argidx];
1134  if (!liberty_file.empty() && liberty_file[0] != '/')
1135  liberty_file = std::string(pwd) + "/" + liberty_file;
1136  continue;
1137  }
1138  if (arg == "-constr" && argidx+1 < args.size()) {
1139  constr_file = args[++argidx];
1140  if (!constr_file.empty() && constr_file[0] != '/')
1141  constr_file = std::string(pwd) + "/" + constr_file;
1142  continue;
1143  }
1144  if (arg == "-D" && argidx+1 < args.size()) {
1145  delay_target = "-D " + args[++argidx];
1146  continue;
1147  }
1148  if (arg == "-lut" && argidx+1 < args.size()) {
1149  lut_mode = atoi(args[++argidx].c_str());
1150  continue;
1151  }
1152  if (arg == "-fast") {
1153  fast_mode = true;
1154  continue;
1155  }
1156  if (arg == "-dff") {
1157  dff_mode = true;
1158  continue;
1159  }
1160  if (arg == "-clk" && argidx+1 < args.size()) {
1161  clk_str = args[++argidx];
1162  continue;
1163  }
1164  if (arg == "-keepff") {
1165  keepff = true;
1166  continue;
1167  }
1168  if (arg == "-nocleanup") {
1169  cleanup = false;
1170  continue;
1171  }
1172  break;
1173  }
1174  extra_args(args, argidx, design);
1175 
1176  if (lut_mode != 0 && !liberty_file.empty())
1177  log_cmd_error("Got -lut and -liberty! This two options are exclusive.\n");
1178  if (!constr_file.empty() && liberty_file.empty())
1179  log_cmd_error("Got -constr but no -liberty!\n");
1180 
1181  for (auto &mod_it : design->modules_)
1182  if (design->selected(mod_it.second)) {
1183  if (mod_it.second->processes.size() > 0)
1184  log("Skipping module %s as it contains processes.\n", mod_it.second->name.c_str());
1185  else
1186  abc_module(design, mod_it.second, script_file, exe_file, liberty_file, constr_file, cleanup, lut_mode, dff_mode, clk_str, keepff, delay_target, fast_mode);
1187  }
1188 
1189  assign_map.clear();
1190  signal_list.clear();
1191  signal_map.clear();
1192 
1193  log_pop();
1194  }
bool selected(T1 *module) const
Definition: rtlil.h:551
void log_header(const char *format,...)
Definition: log.cc:188
void clear()
Definition: sigtools.h:263
void log_pop()
Definition: log.cc:237
#define log_abort()
Definition: log.h:84
SigMap assign_map
Definition: abc.cc:93
std::string proc_self_dirname()
void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std::string script_file, std::string exe_file, std::string liberty_file, std::string constr_file, bool cleanup, int lut_mode, bool dff_mode, std::string clk_str, bool keepff, std::string delay_target, bool fast_mode)
Definition: abc.cc:545
std::vector< gate_t > signal_list
Definition: abc.cc:95
void log_cmd_error(const char *format,...)
Definition: log.cc:211
bool check_file_exists(std::string filename, bool is_exec)
Definition: yosys.cc:302
std::map< RTLIL::SigBit, int > signal_map
Definition: abc.cc:96
std::map< RTLIL::IdString, RTLIL::Module * > modules_
Definition: rtlil.h:507
void log(const char *format,...)
Definition: log.cc:180
void log_push()
Definition: log.cc:232
void extra_args(std::vector< std::string > args, size_t argidx, RTLIL::Design *design, bool select=true)
Definition: register.cc:128

+ Here is the call graph for this function:

void Pass::extra_args ( std::vector< std::string >  args,
size_t  argidx,
RTLIL::Design design,
bool  select = true 
)
inherited

Definition at line 128 of file register.cc.

129 {
130  for (; argidx < args.size(); argidx++)
131  {
132  std::string arg = args[argidx];
133 
134  if (arg.substr(0, 1) == "-")
135  cmd_error(args, argidx, "Unknown option or option in arguments.");
136 
137  if (!select)
138  cmd_error(args, argidx, "Extra argument.");
139 
140  handle_extra_select_args(this, args, argidx, args.size(), design);
141  break;
142  }
143  // cmd_log_args(args);
144 }
void cmd_error(const std::vector< std::string > &args, size_t argidx, std::string msg)
Definition: register.cc:110
void handle_extra_select_args(Pass *pass, std::vector< std::string > args, size_t argidx, size_t args_size, RTLIL::Design *design)
Definition: select.cc:803

+ Here is the call graph for this function:

virtual void AbcPass::help ( )
inlinevirtual

Reimplemented from Pass.

Definition at line 999 of file abc.cc.

1000  {
1001  // |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
1002  log("\n");
1003  log(" abc [options] [selection]\n");
1004  log("\n");
1005  log("This pass uses the ABC tool [1] for technology mapping of yosys's internal gate\n");
1006  log("library to a target architecture.\n");
1007  log("\n");
1008  log(" -exe <command>\n");
1009  log(" use the specified command name instead of \"yosys-abc\" to execute ABC.\n");
1010  log(" This can e.g. be used to call a specific version of ABC or a wrapper.\n");
1011  log("\n");
1012  log(" -script <file>\n");
1013  log(" use the specified ABC script file instead of the default script.\n");
1014  log("\n");
1015  log(" if <file> starts with a plus sign (+), then the rest of the filename\n");
1016  log(" string is interprated as the command string to be passed to ABC. the\n");
1017  log(" leading plus sign is removed and all commas (,) in the string are\n");
1018  log(" replaced with blanks before the string is passed to ABC.\n");
1019  log("\n");
1020  log(" if no -script parameter is given, the following scripts are used:\n");
1021  log("\n");
1022  log(" for -liberty without -constr:\n");
1023  log("%s\n", fold_abc_cmd(ABC_COMMAND_LIB).c_str());
1024  log("\n");
1025  log(" for -liberty with -constr:\n");
1026  log("%s\n", fold_abc_cmd(ABC_COMMAND_CTR).c_str());
1027  log("\n");
1028  log(" for -lut:\n");
1029  log("%s\n", fold_abc_cmd(ABC_COMMAND_LUT).c_str());
1030  log("\n");
1031  log(" otherwise:\n");
1032  log("%s\n", fold_abc_cmd(ABC_COMMAND_DFL).c_str());
1033  log("\n");
1034  log(" -fast\n");
1035  log(" use different default scripts that are slightly faster (at the cost\n");
1036  log(" of output quality):\n");
1037  log("\n");
1038  log(" for -liberty without -constr:\n");
1039  log("%s\n", fold_abc_cmd(ABC_FAST_COMMAND_LIB).c_str());
1040  log("\n");
1041  log(" for -liberty with -constr:\n");
1042  log("%s\n", fold_abc_cmd(ABC_FAST_COMMAND_CTR).c_str());
1043  log("\n");
1044  log(" for -lut:\n");
1045  log("%s\n", fold_abc_cmd(ABC_FAST_COMMAND_LUT).c_str());
1046  log("\n");
1047  log(" otherwise:\n");
1048  log("%s\n", fold_abc_cmd(ABC_FAST_COMMAND_DFL).c_str());
1049  log("\n");
1050  log(" -liberty <file>\n");
1051  log(" generate netlists for the specified cell library (using the liberty\n");
1052  log(" file format).\n");
1053  log("\n");
1054  log(" -constr <file>\n");
1055  log(" pass this file with timing constraints to ABC. use with -liberty.\n");
1056  log("\n");
1057  log(" a constr file contains two lines:\n");
1058  log(" set_driving_cell <cell_name>\n");
1059  log(" set_load <floating_point_number>\n");
1060  log("\n");
1061  log(" the set_driving_cell statement defines which cell type is assumed to\n");
1062  log(" drive the primary inputs and the set_load statement sets the load in\n");
1063  log(" femtofarads for each primary output.\n");
1064  log("\n");
1065  log(" -D <picoseconds>\n");
1066  log(" set delay target. the string {D} in the default scripts above is\n");
1067  log(" replaced by this option when used, and an empty string otherwise.\n");
1068  log("\n");
1069  log(" -lut <width>\n");
1070  log(" generate netlist using luts of (max) the specified width.\n");
1071  log("\n");
1072  log(" -dff\n");
1073  log(" also pass $_DFF_?_ cells through ABC (only one clock domain, if many\n");
1074  log(" clock domains are present in a module, the one with the largest number\n");
1075  log(" of $_DFF_?_ cells in it is used)\n");
1076  log("\n");
1077  log(" -clk [!]<signal-name>\n");
1078  log(" use the specified clock domain. (when this option is used in combination\n");
1079  log(" with -dff, then it falls back to the automatic dection of clock domain\n");
1080  log(" if the specified clock is not found in a module.)\n");
1081  log("\n");
1082  log(" -keepff\n");
1083  log(" set the \"keep\" attribute on flip-flop output wires. (and thus preserve\n");
1084  log(" them, for example for equivialence checking.)\n");
1085  log("\n");
1086  log(" -nocleanup\n");
1087  log(" when this option is used, the temporary files created by this pass\n");
1088  log(" are not removed. this is useful for debugging.\n");
1089  log("\n");
1090  log("When neither -liberty nor -lut is used, the Yosys standard cell library is\n");
1091  log("loaded into ABC before the ABC script is executed.\n");
1092  log("\n");
1093  log("This pass does not operate on modules with unprocessed processes in it.\n");
1094  log("(I.e. the 'proc' pass should be used first to convert processes to netlists.)\n");
1095  log("\n");
1096  log("[1] http://www.eecs.berkeley.edu/~alanmi/abc/\n");
1097  log("\n");
1098  }
#define ABC_FAST_COMMAND_DFL
Definition: abc.cc:40
#define ABC_COMMAND_LIB
Definition: abc.cc:32
#define ABC_COMMAND_CTR
Definition: abc.cc:33
#define ABC_FAST_COMMAND_LUT
Definition: abc.cc:39
std::string fold_abc_cmd(std::string str)
Definition: abc.cc:477
void log(const char *format,...)
Definition: log.cc:180
#define ABC_FAST_COMMAND_CTR
Definition: abc.cc:38
#define ABC_FAST_COMMAND_LIB
Definition: abc.cc:37
#define ABC_COMMAND_DFL
Definition: abc.cc:35
#define ABC_COMMAND_LUT
Definition: abc.cc:34

+ Here is the call graph for this function:

void Pass::init_register ( )
staticinherited

Definition at line 54 of file register.cc.

55 {
56  while (first_queued_pass) {
59  }
60 }
Pass * first_queued_pass
Definition: register.cc:31
Pass * next_queued_pass
Definition: register.h:60
virtual void run_register()
Definition: register.cc:48

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void Pass::post_execute ( Pass::pre_post_exec_state_t  state)
inherited

Definition at line 84 of file register.cc.

85 {
86  int64_t time_ns = PerformanceTimer::query() - state.begin_ns;
87  runtime_ns += time_ns;
88  current_pass = state.parent_pass;
89  if (current_pass)
90  current_pass->runtime_ns -= time_ns;
91 }
static int64_t query()
Definition: log.h:151
int64_t runtime_ns
Definition: register.h:37
Pass * current_pass
Definition: register.cc:32
Pass * parent_pass
Definition: register.h:40
int64_t begin_ns
Definition: register.h:41

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Pass::pre_post_exec_state_t Pass::pre_execute ( )
inherited

Definition at line 74 of file register.cc.

75 {
76  pre_post_exec_state_t state;
77  call_counter++;
78  state.begin_ns = PerformanceTimer::query();
79  state.parent_pass = current_pass;
80  current_pass = this;
81  return state;
82 }
static int64_t query()
Definition: log.h:151
Pass * current_pass
Definition: register.cc:32
int call_counter
Definition: register.h:36

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void Pass::run_register ( )
virtualinherited

Reimplemented in Backend, and Frontend.

Definition at line 48 of file register.cc.

49 {
50  log_assert(pass_register.count(pass_name) == 0);
51  pass_register[pass_name] = this;
52 }
std::string pass_name
Definition: register.h:29
#define log_assert(_assert_expr_)
Definition: log.h:85
std::map< std::string, Pass * > pass_register
Definition: register.cc:35

+ Here is the caller graph for this function:

Field Documentation

int Pass::call_counter
inherited

Definition at line 36 of file register.h.

Pass* Pass::next_queued_pass
inherited

Definition at line 60 of file register.h.

std::string Pass::pass_name
inherited

Definition at line 29 of file register.h.

int64_t Pass::runtime_ns
inherited

Definition at line 37 of file register.h.

std::string Pass::short_help
inherited

Definition at line 29 of file register.h.


The documentation for this struct was generated from the following file: