diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-05-03 18:08:31 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-05-03 18:08:31 -0700 |
commit | 810af4d9ce5cd2b1c1c5d1b844665610b2ce3f62 (patch) | |
tree | 86b2911c30ad889f22a8274773ba145db6b4baba | |
parent | c9cf387c035f8e48de03846947b2fcb53f8e3106 (diff) |
optimize eliminator transitive dependency calculation
-rw-r--r-- | tools/eliminator/eliminator.coffee | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/tools/eliminator/eliminator.coffee b/tools/eliminator/eliminator.coffee index a4c98930..af7f32f9 100644 --- a/tools/eliminator/eliminator.coffee +++ b/tools/eliminator/eliminator.coffee @@ -180,15 +180,22 @@ class Eliminator # synchronizes @dependsOnAGlobal to the new dependencies. calculateTransitiveDependencies: -> incomplete = true + todo = {} + for element of @dependsOn + todo[element] = 1 while incomplete incomplete = false - for target, sources of @dependsOn + nextTodo = {} + for target of todo + sources = @dependsOn[target] for source of sources for source2 of @dependsOn[source] if not @dependsOn[target][source2] if not @isLocal[target] then @dependsOnAGlobal[source2] = true @dependsOn[target][source2] = true + nextTodo[source2] = 1 incomplete = true + todo = nextTodo return undefined # Analyzes the live ranges of single-def variables. Requires dependencies to |