From e90ce0865ce747e0cb5a772773267ee7ffb70217 Mon Sep 17 00:00:00 2001 From: Alex Vondrak Date: Mon, 31 Dec 2012 10:30:17 -0800 Subject: [PATCH] compiler.cfg.ssa.destruction.leaders: break off leader-map to resolve circular dependencies (oops) --- .../cfg/linear-scan/assignment/assignment.factor | 2 +- .../cfg/linear-scan/linear-scan-tests.factor | 2 +- .../live-intervals/live-intervals.factor | 2 +- basis/compiler/cfg/liveness/liveness.factor | 4 +--- .../cfg/parallel-copy/parallel-copy.factor | 4 ++-- .../cfg/ssa/destruction/destruction.factor | 5 +---- .../cfg/ssa/destruction/leaders/authors.txt | 1 + .../cfg/ssa/destruction/leaders/leaders.factor | 15 +++++++++++++++ 8 files changed, 23 insertions(+), 12 deletions(-) create mode 100644 basis/compiler/cfg/ssa/destruction/leaders/authors.txt create mode 100644 basis/compiler/cfg/ssa/destruction/leaders/leaders.factor diff --git a/basis/compiler/cfg/linear-scan/assignment/assignment.factor b/basis/compiler/cfg/linear-scan/assignment/assignment.factor index 49c492cb31..85eaf37f95 100644 --- a/basis/compiler/cfg/linear-scan/assignment/assignment.factor +++ b/basis/compiler/cfg/linear-scan/assignment/assignment.factor @@ -9,7 +9,7 @@ compiler.cfg.liveness compiler.cfg.registers compiler.cfg.instructions compiler.cfg.linearization -compiler.cfg.ssa.destruction +compiler.cfg.ssa.destruction.leaders compiler.cfg.renaming.functor compiler.cfg.linear-scan.allocation compiler.cfg.linear-scan.allocation.state diff --git a/basis/compiler/cfg/linear-scan/linear-scan-tests.factor b/basis/compiler/cfg/linear-scan/linear-scan-tests.factor index c5534a3040..ee4842dbf3 100644 --- a/basis/compiler/cfg/linear-scan/linear-scan-tests.factor +++ b/basis/compiler/cfg/linear-scan/linear-scan-tests.factor @@ -11,7 +11,7 @@ compiler.cfg.rpo compiler.cfg.debugger compiler.cfg.def-use compiler.cfg.comparisons -compiler.cfg.ssa.destruction +compiler.cfg.ssa.destruction.leaders compiler.cfg.linear-scan compiler.cfg.linear-scan.numbering compiler.cfg.linear-scan.live-intervals diff --git a/basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor b/basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor index a514a6738e..c240463a6a 100644 --- a/basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor +++ b/basis/compiler/cfg/linear-scan/live-intervals/live-intervals.factor @@ -7,7 +7,7 @@ compiler.cfg.registers compiler.cfg.def-use compiler.cfg.liveness compiler.cfg.linearization -compiler.cfg.ssa.destruction +compiler.cfg.ssa.destruction.leaders compiler.cfg cpu.architecture ; IN: compiler.cfg.linear-scan.live-intervals diff --git a/basis/compiler/cfg/liveness/liveness.factor b/basis/compiler/cfg/liveness/liveness.factor index dd3b2676e0..7a03a77b94 100644 --- a/basis/compiler/cfg/liveness/liveness.factor +++ b/basis/compiler/cfg/liveness/liveness.factor @@ -3,7 +3,7 @@ USING: arrays kernel accessors assocs fry locals combinators deques dlists namespaces sequences sets compiler.cfg compiler.cfg.def-use compiler.cfg.instructions -compiler.cfg.registers compiler.cfg.ssa.destruction +compiler.cfg.registers compiler.cfg.ssa.destruction.leaders compiler.cfg.utilities compiler.cfg.predecessors compiler.cfg.rpo cpu.architecture ; FROM: namespaces => set ; @@ -55,8 +55,6 @@ GENERIC: visit-insn ( live-set insn -- live-set ) ! representations) that would get lost if we just used the ! leaders for everything. -: ?leader ( vreg -- vreg' ) [ leader ] keep or ; inline - : kill-defs ( live-set insn -- live-set ) defs-vregs [ ?leader '[ drop ?leader _ eq? not ] assoc-filter! diff --git a/basis/compiler/cfg/parallel-copy/parallel-copy.factor b/basis/compiler/cfg/parallel-copy/parallel-copy.factor index e0ab6ddb62..d2dcc02b6c 100644 --- a/basis/compiler/cfg/parallel-copy/parallel-copy.factor +++ b/basis/compiler/cfg/parallel-copy/parallel-copy.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: assocs cpu.architecture compiler.cfg.registers -compiler.cfg.instructions compiler.cfg.ssa.destruction deques -dlists fry kernel locals namespaces sequences hashtables ; +compiler.cfg.instructions compiler.cfg.ssa.destruction.leaders +deques dlists fry kernel locals namespaces sequences hashtables ; FROM: sets => conjoin ; IN: compiler.cfg.parallel-copy diff --git a/basis/compiler/cfg/ssa/destruction/destruction.factor b/basis/compiler/cfg/ssa/destruction/destruction.factor index 0d1f5d968f..07c551552b 100644 --- a/basis/compiler/cfg/ssa/destruction/destruction.factor +++ b/basis/compiler/cfg/ssa/destruction/destruction.factor @@ -11,6 +11,7 @@ compiler.cfg.dominance compiler.cfg.instructions compiler.cfg.liveness compiler.cfg.ssa.cssa +compiler.cfg.ssa.destruction.leaders compiler.cfg.ssa.interference compiler.cfg.ssa.interference.live-ranges compiler.cfg.parallel-copy @@ -33,10 +34,6 @@ IN: compiler.cfg.ssa.destruction ! compiler.cfg.liveness, so the linear scan register allocator ! does not need to compute liveness again. -SYMBOL: leader-map - -: leader ( vreg -- vreg' ) leader-map get compress-path ; - ! Maps leaders to equivalence class elements. SYMBOL: class-element-map diff --git a/basis/compiler/cfg/ssa/destruction/leaders/authors.txt b/basis/compiler/cfg/ssa/destruction/leaders/authors.txt new file mode 100644 index 0000000000..424d9aa409 --- /dev/null +++ b/basis/compiler/cfg/ssa/destruction/leaders/authors.txt @@ -0,0 +1 @@ +Alex Vondrak diff --git a/basis/compiler/cfg/ssa/destruction/leaders/leaders.factor b/basis/compiler/cfg/ssa/destruction/leaders/leaders.factor new file mode 100644 index 0000000000..eec392a2bb --- /dev/null +++ b/basis/compiler/cfg/ssa/destruction/leaders/leaders.factor @@ -0,0 +1,15 @@ +! Copyright (C) 2012 Alex Vondrak. +! See http://factorcode.org/license.txt for BSD license. +USING: compiler.utilities kernel namespaces ; +IN: compiler.cfg.ssa.destruction.leaders + +! A map from vregs to canonical representatives due to +! coalescing done by SSA destruction. Used by liveness +! analysis and the register allocator, so we can use the +! original SSA names to get certain info (reaching definitions, +! representations). +SYMBOL: leader-map + +: leader ( vreg -- vreg' ) leader-map get compress-path ; + +: ?leader ( vreg -- vreg' ) [ leader ] keep or ; inline