On Fri, Nov 15, 2024 at 10:43:57AM +0100, Filip Kastl wrote:
> Hi,
>
> Andi's greedy bit test finding algorithm was reverted. I found a fix for the
> problem that caused the revert. I made this patch to reintroduce the greedy
> alg into GCC. However I think we should keep the old slow but more powerful
> algorithm so I added a limit on the number of cases of the switch statement
> that decides which of the two algorithms to use.
Do we actually have a case where the DP algorithm is better?
In the bootstrap comparison greedy does produce less or the same clusters
> + k = 0;
> + while (i + k < l)
> + {
> + cluster *end_cluster = clusters[i + k];
> +
> + /* Does value range fit into the BITS_PER_WORD window? */
> + HOST_WIDE_INT w = cluster::get_range (start_cluster->get_low (),
> + end_cluster->get_high ());
> + if (w == 0 || w > BITS_PER_WORD)
> + break;
> +
> + /* Check for max # of targets. */
> + if (targets.elements () == m_max_case_bit_tests
> + && !targets.contains (end_cluster->m_case_bb))
> + break;
> +
> + targets.add (end_cluster->m_case_bb);
> + k++;
> + }
>
> + if (is_beneficial (k, targets.elements ()))
Equivalent to the old test in DP would be k + 1
I'm not sure it makes a lot of difference though.
-Andi