Skip to content

Commit 37192d0

Browse files
committed
Add bdd_negation_union to avoid union blow-up (fixes macro.ex 4s slowdown)
1 parent 8ce5957 commit 37192d0

1 file changed

Lines changed: 5 additions & 1 deletion

File tree

lib/elixir/lib/module/types/descr.ex

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5879,7 +5879,7 @@ defmodule Module.Types.Descr do
58795879
end
58805880

58815881
{:eq, _, {lit, c2, u2, _d2}} ->
5882-
{lit, bdd_negation(bdd_union(c2, u2)), :bdd_bot, :bdd_bot}
5882+
{lit, bdd_negation_union(c2, u2), :bdd_bot, :bdd_bot}
58835883

58845884
{:eq, {lit, _c1, u1, d1}, _} ->
58855885
{lit, :bdd_bot, :bdd_bot, bdd_union(d1, u1)}
@@ -5901,6 +5901,10 @@ defmodule Module.Types.Descr do
59015901
defp bdd_difference_union(i, u1, u2),
59025902
do: bdd_difference(i, bdd_union(u1, u2))
59035903

5904+
defp bdd_negation_union(u1, u2) do
5905+
bdd_intersection(bdd_negation(u1), bdd_negation(u2))
5906+
end
5907+
59045908
## Optimize differences
59055909

59065910
defp bdd_difference(bdd_leaf(_, _) = a1, bdd_leaf(_, _) = a2, leaf_compare) do

0 commit comments

Comments
 (0)