diff --git a/src/map/if/acd/ac_decomposition.hpp b/src/map/if/acd/ac_decomposition.hpp index 3c72b792f..7cd6d9613 100644 --- a/src/map/if/acd/ac_decomposition.hpp +++ b/src/map/if/acd/ac_decomposition.hpp @@ -111,6 +111,12 @@ public: uint32_t late_arriving = __builtin_popcount( delay_profile ); + /* relax maximum number of free set variables if a function has more variables */ + if ( num_vars > ps.max_free_set_vars + ps.lut_size ) + { + ps.max_free_set_vars = num_vars - ps.lut_size; + } + /* return a high cost if too many late arriving variables */ if ( late_arriving > ps.lut_size - 1 || late_arriving > ps.max_free_set_vars ) { @@ -1444,7 +1450,7 @@ private: std::vector> support_minimization_encodings; uint32_t num_vars; - ac_decomposition_params const& ps; + ac_decomposition_params ps; ac_decomposition_stats* pst; std::array permutations; };