From 4f36e3e6c9c651af801f1ba7147a3cd89fef93b7 Mon Sep 17 00:00:00 2001 From: Geza Lore Date: Sat, 3 Apr 2021 17:57:06 +0100 Subject: [PATCH] Fix incorrect condition in varNotReferenced (#2873) The intention was to not merge impure assignments, but the actual predicate failed if the assignment was indeed pure. This fix gains 1.5% speed on SweRV EH1. --- src/V3Const.cpp | 2 +- test_regress/t/t_split_var_0.pl | 2 +- test_regress/t/t_split_var_2_trace.pl | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/V3Const.cpp b/src/V3Const.cpp index ee97ffd50..e1b990513 100644 --- a/src/V3Const.cpp +++ b/src/V3Const.cpp @@ -1531,7 +1531,7 @@ private: // Return false if referenced, or tree too deep to be worth it, or side effects if (!nodep) return true; if (level > 2) return false; - if (nodep->isPure()) return false; // For example a $fgetc can't be reordered + if (!nodep->isPure()) return false; // For example a $fgetc can't be reordered if (VN_IS(nodep, NodeVarRef) && VN_CAST(nodep, NodeVarRef)->varp() == varp) return false; return (varNotReferenced(nodep->nextp(), varp, level + 1) && varNotReferenced(nodep->op1p(), varp, level + 1) diff --git a/test_regress/t/t_split_var_0.pl b/test_regress/t/t_split_var_0.pl index 5f07afe64..f04359527 100755 --- a/test_regress/t/t_split_var_0.pl +++ b/test_regress/t/t_split_var_0.pl @@ -22,7 +22,7 @@ execute( check_finished => 1, ); -file_grep($Self->{stats}, qr/SplitVar,\s+Split packed variables\s+(\d+)/i, 13); +file_grep($Self->{stats}, qr/SplitVar,\s+Split packed variables\s+(\d+)/i, 11); file_grep($Self->{stats}, qr/SplitVar,\s+Split unpacked arrays\s+(\d+)/i, 27); ok(1); 1; diff --git a/test_regress/t/t_split_var_2_trace.pl b/test_regress/t/t_split_var_2_trace.pl index c79ed778a..76513de86 100755 --- a/test_regress/t/t_split_var_2_trace.pl +++ b/test_regress/t/t_split_var_2_trace.pl @@ -24,7 +24,7 @@ execute( ); vcd_identical("$Self->{obj_dir}/simx.vcd", $Self->{golden_filename}); -file_grep($Self->{stats}, qr/SplitVar,\s+Split packed variables\s+(\d+)/i, 12); +file_grep($Self->{stats}, qr/SplitVar,\s+Split packed variables\s+(\d+)/i, 10); file_grep($Self->{stats}, qr/SplitVar,\s+Split unpacked arrays\s+(\d+)/i, 27); ok(1);