diff --git a/basis/compiler/cfg/write-barrier/write-barrier-tests.factor b/basis/compiler/cfg/write-barrier/write-barrier-tests.factor index 136324ba47..b11ffa8716 100644 --- a/basis/compiler/cfg/write-barrier/write-barrier-tests.factor +++ b/basis/compiler/cfg/write-barrier/write-barrier-tests.factor @@ -91,3 +91,64 @@ IN: compiler.cfg.write-barrier.tests T{ ##write-barrier-imm f 1 } } write-barriers-step ] unit-test + +! ##copy instructions +[ + V{ + T{ ##copy f 2 1 } + T{ ##set-slot-imm f 3 1 } + T{ ##write-barrier-imm f 2 } + } +] [ + V{ + T{ ##copy f 2 1 } + T{ ##set-slot-imm f 3 1 } + T{ ##write-barrier-imm f 2 } + } write-barriers-step +] unit-test + +[ + V{ + T{ ##copy f 2 1 } + T{ ##set-slot-imm f 3 2 } + T{ ##write-barrier-imm f 1 } + } +] [ + V{ + T{ ##copy f 2 1 } + T{ ##set-slot-imm f 3 2 } + T{ ##write-barrier-imm f 1 } + } write-barriers-step +] unit-test + +[ + V{ + T{ ##copy f 2 1 } + T{ ##copy f 3 2 } + T{ ##set-slot-imm f 3 1 } + T{ ##write-barrier-imm f 2 } + } +] [ + V{ + T{ ##copy f 2 1 } + T{ ##copy f 3 2 } + T{ ##set-slot-imm f 3 1 } + T{ ##write-barrier-imm f 2 } + } write-barriers-step +] unit-test + +[ + V{ + T{ ##copy f 2 1 } + T{ ##copy f 3 2 } + T{ ##set-slot-imm f 4 1 } + T{ ##write-barrier-imm f 3 } + } +] [ + V{ + T{ ##copy f 2 1 } + T{ ##copy f 3 2 } + T{ ##set-slot-imm f 4 1 } + T{ ##write-barrier-imm f 3 } + } write-barriers-step +] unit-test diff --git a/basis/compiler/cfg/write-barrier/write-barrier.factor b/basis/compiler/cfg/write-barrier/write-barrier.factor index 95562eadca..6f8e437aa9 100644 --- a/basis/compiler/cfg/write-barrier/write-barrier.factor +++ b/basis/compiler/cfg/write-barrier/write-barrier.factor @@ -50,7 +50,7 @@ M: gc-map-insn eliminate-write-barrier fresh-allocations get clear-assoc ; M: ##copy eliminate-write-barrier - [ src>> ] [ dst>> ] bi copies get set-at t ; + [ src>> resolve-copy ] [ dst>> ] bi copies get set-at t ; M: insn eliminate-write-barrier drop t ;