Merge pull request #1001 from CAS-Atlantic/simulation_mem_leak_stage_num_children
Simulation mem leak - num_children in stage struct
diff --git a/ODIN_II/SRC/read_blif.cpp b/ODIN_II/SRC/read_blif.cpp
index 9807d05..849a888 100644
--- a/ODIN_II/SRC/read_blif.cpp
+++ b/ODIN_II/SRC/read_blif.cpp
@@ -1785,6 +1785,7 @@
free_hard_block_ports(model->input_ports);
free_hard_block_ports(model->output_ports);
+ vtr::free(model->name);
vtr::free(model);
}
diff --git a/ODIN_II/SRC/simulate_blif.cpp b/ODIN_II/SRC/simulate_blif.cpp
index b334418..e7f5113 100644
--- a/ODIN_II/SRC/simulate_blif.cpp
+++ b/ODIN_II/SRC/simulate_blif.cpp
@@ -3380,6 +3380,8 @@
vtr::free(l->lines[l->count]->name);
if(l->lines[l->count]->pins)
vtr::free(l->lines[l->count]->pins);
+ if(l->lines[l->count]->pin_numbers)
+ vtr::free(l->lines[l->count]->pin_numbers);
vtr::free(l->lines[l->count]);
}
}
diff --git a/vpr/src/base/SetupVPR.cpp b/vpr/src/base/SetupVPR.cpp
index 5c74449..2bd4384 100644
--- a/vpr/src/base/SetupVPR.cpp
+++ b/vpr/src/base/SetupVPR.cpp
@@ -486,6 +486,8 @@
PlacerOpts->write_placement_delay_lookup = Options.write_placement_delay_lookup;
PlacerOpts->read_placement_delay_lookup = Options.read_placement_delay_lookup;
+
+ PlacerOpts->allowed_tiles_for_delay_model = Options.allowed_tiles_for_delay_model;
}
static void SetupAnalysisOpts(const t_options& Options, t_analysis_opts& analysis_opts) {
diff --git a/vpr/src/base/read_options.cpp b/vpr/src/base/read_options.cpp
index 576eb62..6166ab1 100644
--- a/vpr/src/base/read_options.cpp
+++ b/vpr/src/base/read_options.cpp
@@ -1384,6 +1384,14 @@
.default_value("")
.show_in(argparse::ShowIn::HELP_ONLY);
+ place_timing_grp.add_argument(args.allowed_tiles_for_delay_model, "--allowed_tiles_for_delay_model")
+ .help(
+ "Names of allowed tile types that can be sampled during delay "
+ "modelling. Default is to allow all tiles. Can be used to "
+ "exclude specialized tiles from placer delay sampling.")
+ .default_value("")
+ .show_in(argparse::ShowIn::HELP_ONLY);
+
auto& route_grp = parser.add_argument_group("routing options");
route_grp.add_argument(args.max_router_iterations, "--max_router_iterations")
diff --git a/vpr/src/base/read_options.h b/vpr/src/base/read_options.h
index 55142a5..d1f45e5 100644
--- a/vpr/src/base/read_options.h
+++ b/vpr/src/base/read_options.h
@@ -115,6 +115,7 @@
argparse::ArgValue<std::string> post_place_timing_report_file;
argparse::ArgValue<PlaceDelayModelType> place_delay_model;
argparse::ArgValue<e_reducer> place_delay_model_reducer;
+ argparse::ArgValue<std::string> allowed_tiles_for_delay_model;
/* Router Options */
argparse::ArgValue<int> max_router_iterations;
diff --git a/vpr/src/base/vpr_types.h b/vpr/src/base/vpr_types.h
index 01dca22..1eb4ffb 100644
--- a/vpr/src/base/vpr_types.h
+++ b/vpr/src/base/vpr_types.h
@@ -808,6 +808,12 @@
std::string write_placement_delay_lookup;
std::string read_placement_delay_lookup;
+
+ // Tile types that should be used during delay sampling.
+ //
+ // Useful for excluding tiles that have abnormal delay behavior, e.g.
+ // clock tree elements like PLL's, global/local clock buffers, etc.
+ std::string allowed_tiles_for_delay_model;
};
/* All the parameters controlling the router's operation are in this *
diff --git a/vpr/src/place/timing_place_lookup.cpp b/vpr/src/place/timing_place_lookup.cpp
index 0254225..c3c4fac 100644
--- a/vpr/src/place/timing_place_lookup.cpp
+++ b/vpr/src/place/timing_place_lookup.cpp
@@ -87,7 +87,8 @@
int end_x,
int end_y,
const t_router_opts& router_opts,
- bool measure_directconnect);
+ bool measure_directconnect,
+ const std::set<std::string>& allowed_types);
static vtr::Matrix<float> compute_delta_delays(
const RouterDelayProfiler& route_profiler,
@@ -351,7 +352,8 @@
int end_x,
int end_y,
const t_router_opts& router_opts,
- bool measure_directconnect) {
+ bool measure_directconnect,
+ const std::set<std::string>& allowed_types) {
int delta_x, delta_y;
int sink_x, sink_y;
@@ -368,7 +370,9 @@
bool src_or_target_empty = (src_type == device_ctx.EMPTY_TYPE
|| sink_type == device_ctx.EMPTY_TYPE);
- if (src_or_target_empty) {
+ bool is_allowed_type = allowed_types.empty() || allowed_types.find(src_type->name) != allowed_types.end();
+
+ if (src_or_target_empty || !is_allowed_type) {
if (matrix[delta_x][delta_y].empty()) {
//Only set empty target if we don't already have a valid delta delay
matrix[delta_x][delta_y].push_back(EMPTY_DELTA);
@@ -427,6 +431,14 @@
size_t high_x = std::max(grid.width() - longest_length, mid_x);
size_t high_y = std::max(grid.height() - longest_length, mid_y);
+ std::set<std::string> allowed_types;
+ if (!placer_opts.allowed_tiles_for_delay_model.empty()) {
+ auto allowed_types_vector = vtr::split(placer_opts.allowed_tiles_for_delay_model, ",");
+ for (const auto& type : allowed_types_vector) {
+ allowed_types.insert(type);
+ }
+ }
+
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + | | +
// + A | B | C +
@@ -462,6 +474,9 @@
auto type = grid[x][y].type;
if (type != device_ctx.EMPTY_TYPE) {
+ if (!allowed_types.empty() && allowed_types.find(std::string(type->name)) == allowed_types.end()) {
+ continue;
+ }
src_type = type;
break;
}
@@ -480,7 +495,7 @@
x, y,
grid.width() - 1, grid.height() - 1,
router_opts,
- measure_directconnect);
+ measure_directconnect, allowed_types);
//Find the lowest x location on the bottom edge with a non-empty block
src_type = nullptr;
@@ -489,6 +504,9 @@
auto type = grid[x][y].type;
if (type != device_ctx.EMPTY_TYPE) {
+ if (!allowed_types.empty() && allowed_types.find(std::string(type->name)) == allowed_types.end()) {
+ continue;
+ }
src_type = type;
break;
}
@@ -506,7 +524,7 @@
x, y,
grid.width() - 1, grid.height() - 1,
router_opts,
- measure_directconnect);
+ measure_directconnect, allowed_types);
//Since the other delta delay values may have suffered from edge effects,
//we recalculate deltas within regions B, C, E, F
@@ -518,7 +536,7 @@
low_x, low_y,
grid.width() - 1, grid.height() - 1,
router_opts,
- measure_directconnect);
+ measure_directconnect, allowed_types);
//Since the other delta delay values may have suffered from edge effects,
//we recalculate deltas within regions D, E, G, H
@@ -530,7 +548,7 @@
0, 0,
high_x, high_y,
router_opts,
- measure_directconnect);
+ measure_directconnect, allowed_types);
//Since the other delta delay values may have suffered from edge effects,
//we recalculate deltas within regions A, B, D, E
@@ -542,7 +560,7 @@
0, low_y,
high_x, grid.height() - 1,
router_opts,
- measure_directconnect);
+ measure_directconnect, allowed_types);
//Since the other delta delay values may have suffered from edge effects,
//we recalculate deltas within regions E, F, H, I
@@ -554,7 +572,7 @@
low_x, 0,
grid.width() - 1, high_y,
router_opts,
- measure_directconnect);
+ measure_directconnect, allowed_types);
vtr::Matrix<float> delta_delays({grid.width(), grid.height()});
for (size_t dx = 0; dx < sampled_delta_delays.dim_size(0); ++dx) {
diff --git a/vpr/valgrind.supp b/vpr/valgrind.supp
new file mode 100644
index 0000000..6bd7272
--- /dev/null
+++ b/vpr/valgrind.supp
@@ -0,0 +1,711 @@
+#
+# Valgrind suppression file for EZGL
+#
+
+#pango
+{
+ libpango
+ Memcheck:Leak
+ ...
+ obj:/usr/lib*/libpango*
+}
+
+#GTK
+{
+ g_type_register
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_type_register_*
+ ...
+ fun:_dl_init
+ ...
+}
+
+{
+ g_quark_from_static_string
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_quark_from_static_string
+ ...
+ fun:_dl_init
+ ...
+}
+
+{
+ g_main_thread
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_main*
+ ...
+ fun:start_thread
+ fun:clone
+}
+
+{
+ g_closure
+ Memcheck:Leak
+ match-leak-kinds:possible
+ fun:*alloc
+ ...
+ fun:g_cclosure_new
+ fun:g_signal_connect_data
+ ...
+}
+
+#
+{
+ g_object
+ Memcheck:Leak
+ match-leak-kinds:possible
+ ...
+ fun:g_object_new
+ ...
+}
+
+{
+ g_type_register_static
+ Memcheck:Leak
+ match-leak-kinds:possible
+ ...
+ fun:g_type_register_static
+ ...
+}
+
+{
+ g_signal_connect_closure
+ Memcheck:Leak
+ match-leak-kinds:possible
+ ...
+ fun:g_signal_connect_closure
+ fun:gtk_*group*
+ ...
+}
+
+{
+ gtk_module_init
+ Memcheck:Leak
+
+ fun:*alloc
+ ...
+ fun:gtk_module_init
+ ...
+}
+
+{
+ g_closure_invoke
+ Memcheck:Leak
+
+ fun:*alloc
+ ...
+ fun:g_closure_invoke
+ ...
+}
+
+{
+ gtk_style_context_set_state
+ Memcheck:Leak
+
+ fun:*alloc
+ ...
+ fun:gtk_style_context_set_state
+ ...
+}
+
+#
+{
+ call_init
+ Memcheck:Leak
+
+ fun:*alloc
+ ...
+ fun:call_init
+ fun:_dl_init
+ ...
+}
+
+{
+ XML_ParseBuffer
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:XML_ParseBuffer
+ ...
+}
+
+{
+ FcConfigParseAndLoad
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:FcConfigParseAndLoad
+ ...
+}
+
+#
+{
+ g_objectv
+ Memcheck:Leak
+
+ ...
+ fun:g_object_newv
+ ...
+}
+
+{
+ g_type_add_interface_static
+ Memcheck:Leak
+ match-leak-kinds:possible
+ ...
+ fun:g_type_add_interface_static
+ ...
+}
+
+{
+ gtk_container_get_children
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:gtk_container_get_children
+ ...
+}
+
+{
+ cairo_select_font_face
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:cairo_select_font_face
+ ...
+}
+
+{
+ libfontconfig
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ obj:*libfontconfig.so.*
+ ...
+}
+
+{
+ X11_XGetDefault
+ Memcheck:Leak
+ fun:realloc
+ obj:*libX11.so.6.3.0
+ obj:*libX11.so.6.3.0
+ obj:*libX11.so.6.3.0
+ fun:_XlcCreateLC
+ fun:_XlcDefaultLoader
+ fun:_XOpenLC
+ fun:_XrmInitParseInfo
+ obj:*libX11.so.6.3.0
+ fun:XrmGetStringDatabase
+ obj:*libX11.so.6.3.0
+ fun:XGetDefault
+}
+
+{
+ XInternAtom_via_event_loop
+ Memcheck:Leak
+ fun:*alloc
+ fun:_XEnq
+ obj:*libX11.so.6.3.0
+ fun:_XReply
+ fun:XInternAtom
+ ...
+}
+
+{
+ cairo_deep_*alloc
+ Memcheck:Leak
+ fun:*alloc
+ obj:*libcairo.*
+ ...
+}
+
+#openmp
+{
+ GOMP_parallel
+ Memcheck:Leak
+
+ fun:*alloc
+ fun:allocate_dtv
+ fun:_dl_allocate_tls
+ fun:allocate_stack
+ fun:pthread_create@@GLIBC_2.2.5
+ ...
+}
+
+
+#GTK engines
+{
+ engines
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ obj:/usr/lib*/gtk*/*/engines*
+ ...
+ obj:/usr/lib*/libgtk*
+}
+
+#nvidia
+{
+ libGL
+ Memcheck:Leak
+ ...
+ obj:/usr/lib*/libGL.so*
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_socket_create_source
+ ...
+ fun:g_main_context_dispatch
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_type_class_ref
+ ...
+ fun:gtk_init_check
+ fun:gtk_init
+ obj:*libgtk-3*
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_markup_parse_context_parse
+ obj:*libgtk-3*
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_socket_new
+ obj:*libgio-2*
+ fun:g_socket_client_connect
+ obj:*libgio-2*
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:atk_add_focus_tracker
+ obj:*libgtk-3*
+ ...
+ fun:gtk_parse_args
+ fun:gtk_init_check
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:m*alloc
+ ...
+ fun:g_bus_get_sync
+ ...
+ fun:g_application_register
+ obj:*libgio-2*
+ fun:g_application_run
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ obj:*libgtk-3*
+ fun:g_closure_invoke
+ ...
+ fun:g_signal_emit_valist
+ fun:g_signal_emit
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_simple_async_result_complete
+ ...
+ fun:g_main_context_dispatch
+ ...
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_type_class_ref
+ ...
+ fun:atk_add_focus_tracker
+ obj:*libgtk-3*
+ ...
+ fun:g_option_context_parse
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ fun:atk_add_focus_tracker
+ obj:*libgtk-3*
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_dbus_proxy_new_sync
+ obj:*libgtk-3*
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_signal_new
+ ...
+ obj:*libgobject-2*
+ fun:g_type_class_ref
+ fun:g_object_new_valist
+ fun:g_initable_new_valist
+ fun:g_initable_new
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_signal_new
+ obj:*libgtk-3*
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ ...
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_signal_new
+ obj:*libgtk-3*
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ ...
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+
+ fun:*alloc
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ fun:atk_add_focus_tracker
+ obj:*libgtk-3*
+ ...
+ fun:g_option_context_parse
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+
+ fun:*alloc
+ ...
+ fun:g_signal_new_class_handler
+ obj:*libgtk-3*
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ ...
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_signal_connect_data
+ obj:*libgtk-3*
+ ...
+ fun:gtk_widget_show
+ obj:*libgtk-3*
+ ...
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_type_class_ref
+ fun:g_object_new_valist
+ fun:g_initable_new_valist
+ fun:g_initable_new
+ fun:gvfs_dbus_mount_tracker_proxy_new_for_bus_sync
+ ...
+ fun:g_type_create_instance
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ fun:g_*alloc
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ ...
+ fun:g_markup_parse_context_parse
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ ...
+ fun:g_option_context_parse
+ fun:gtk_parse_args
+ fun:gtk_init_check
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_type_class_ref
+ fun:atk_bridge_adaptor_init
+ obj:*libgtk-3*
+ ...
+ fun:g_option_context_parse
+ fun:gtk_parse_args
+ fun:gtk_init_check
+ fun:gtk_init
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_signal_new
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ fun:atk_add_focus_tracker
+ obj:*libgtk-3*
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+
+ fun:*alloc
+ ...
+ fun:g_signal_new
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_signal_new
+ ...
+ fun:g_initable_new
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_signal_new
+ obj:*libgtk-3*
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ ...
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_signal_new
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ ...
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_signal_new
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ ...
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_signal_new
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ ...
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_signal_new
+ ...
+ fun:g_type_class_ref
+ obj:*libgio-2.0.so.0.4002.0
+ ...
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_signal_new_class_handler
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ ...
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_signal_connect_data
+ ...
+ fun:gtk_widget_show
+ obj:*libgtk-3*
+ ...
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_initable_new
+ ...
+ fun:g_type_create_instance
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ ...
+ fun:g_markup_parse_context_parse
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:malloc
+ ...
+ fun:g_type_class_ref
+ obj:*libgtk-3*
+ ...
+ fun:gtk_init_check
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:malloc
+ ...
+ fun:atk_bridge_adaptor_init
+ obj:*libgtk-3*
+ ...
+ fun:gtk_init
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_application_register
+ obj:*libgio-2*
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_thread_new
+ obj:*libgio-2*
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ fun:*alloc
+ ...
+ fun:g_thread_pool_push
+ ...
+ fun:g_bus_get
+ fun:g_bus_watch_name
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ match-leak-kinds: possible
+ fun:*alloc
+ ...
+ fun:g_param_spec_enum
+ ...
+ fun:g_bus_get_sync
+ obj:*libgio-*
+ fun:g_application_register
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ match-leak-kinds: possible
+ fun:*alloc
+ fun:g_realloc
+ ...
+ fun:gtk_button_set_image_position
+ fun:g_object_setv
+ ...
+ obj:*libgtk-3*
+}
+{
+ <insert_a_suppression_name_here>
+ Memcheck:Leak
+ match-leak-kinds: possible
+ fun:*alloc
+ ...
+ fun:gtk_cell_renderer_render
+ ...
+ obj:*libgtk-3*
+}
\ No newline at end of file
diff --git a/vtr_flow/scripts/run_vtr_flow.pl b/vtr_flow/scripts/run_vtr_flow.pl
index ba384cd..b298769 100755
--- a/vtr_flow/scripts/run_vtr_flow.pl
+++ b/vtr_flow/scripts/run_vtr_flow.pl
@@ -109,7 +109,7 @@
my $limit_memory_usage = -1;
my $timeout = 14 * 24 * 60 * 60; # 14 day execution timeout
my $valgrind = 0;
-my @valgrind_args = ("--leak-check=full", "--errors-for-leak-kinds=none", "--error-exitcode=1", "--track-origins=yes");
+my @valgrind_args = ("--leak-check=full", "--suppressions=$vtr_flow_path/../vpr/valgrind.supp", "--error-exitcode=1", "--errors-for-leak-kinds=none", "--track-origins=yes", "--log-file=valgrind.log","--error-limit=no");
my $abc_quote_addition = 0;
my @forwarded_vpr_args; # VPR arguments that pass through the script
my $verify_rr_graph = 0;