diff --git a/basis/compiler/cfg/two-operand/two-operand-tests.factor b/basis/compiler/cfg/two-operand/two-operand-tests.factor index 2bc20cee1a..2e26151d04 100644 --- a/basis/compiler/cfg/two-operand/two-operand-tests.factor +++ b/basis/compiler/cfg/two-operand/two-operand-tests.factor @@ -35,3 +35,18 @@ compiler.cfg.registers cpu.architecture namespaces tools.test ; T{ ##sub-float f 1 2 3 } } (convert-two-operand) ] unit-test + +[ + V{ + T{ ##copy f 1 2 double-float-rep } + T{ ##mul-float f 1 1 1 } + } +] [ + H{ + { 1 double-float-rep } + { 2 double-float-rep } + } clone representations set + { + T{ ##mul-float f 1 2 2 } + } (convert-two-operand) +] unit-test diff --git a/basis/compiler/cfg/two-operand/two-operand.factor b/basis/compiler/cfg/two-operand/two-operand.factor index 41e5cb77d8..1705355842 100644 --- a/basis/compiler/cfg/two-operand/two-operand.factor +++ b/basis/compiler/cfg/two-operand/two-operand.factor @@ -48,8 +48,10 @@ GENERIC: convert-two-operand* ( insn -- ) M: two-operand-insn convert-two-operand* [ [ dst>> ] [ src1>> ] bi emit-copy ] - [ dup dst>> >>src1 , ] - bi ; + [ + dup [ src1>> ] [ src2>> ] bi = [ dup dst>> >>src2 ] when + dup dst>> >>src1 , + ] bi ; M: ##not convert-two-operand* [ [ dst>> ] [ src>> ] bi emit-copy ]