Doing constant folding on ##neg and ##not in value numbering
parent
eb31589092
commit
2db25b937e
basis/compiler/cfg/value-numbering
|
@ -1,4 +1,4 @@
|
|||
! Copyright (C) 2008, 2009 Slava Pestov, Doug Coleman.
|
||||
! Copyright (C) 2008, 2009 Slava Pestov, Doug Coleman, Daniel Ehrenberg.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors combinators combinators.short-circuit arrays
|
||||
fry kernel layouts math namespaces sequences cpu.architecture
|
||||
|
@ -242,6 +242,28 @@ M: ##shl-imm constant-fold* drop shift ;
|
|||
[ [ src1>> vreg>constant ] [ src2>> ] [ ] tri constant-fold* ] bi
|
||||
\ ##load-immediate new-insn ; inline
|
||||
|
||||
: unary-constant-fold? ( insn -- ? )
|
||||
src>> vreg>expr constant-expr? ; inline
|
||||
|
||||
GENERIC: unary-constant-fold* ( x insn -- y )
|
||||
|
||||
M: ##not unary-constant-fold* drop bitnot ;
|
||||
M: ##neg unary-constant-fold* drop neg ;
|
||||
|
||||
: unary-constant-fold ( insn -- insn' )
|
||||
[ dst>> ]
|
||||
[ [ src>> vreg>constant ] [ ] bi unary-constant-fold* ] bi
|
||||
\ ##load-immediate new-insn ; inline
|
||||
|
||||
: maybe-unary-constant-fold ( insn -- insn' )
|
||||
dup unary-constant-fold? [ unary-constant-fold ] [ drop f ] if ;
|
||||
|
||||
M: ##neg rewrite
|
||||
maybe-unary-constant-fold ;
|
||||
|
||||
M: ##not rewrite
|
||||
maybe-unary-constant-fold ;
|
||||
|
||||
: reassociate ( insn op -- insn )
|
||||
[
|
||||
{
|
||||
|
|
|
@ -983,6 +983,34 @@ cell 8 = [
|
|||
] unit-test
|
||||
] when
|
||||
|
||||
[
|
||||
{
|
||||
T{ ##peek f 0 D 0 }
|
||||
T{ ##load-immediate f 1 1 }
|
||||
T{ ##load-immediate f 2 -1 }
|
||||
}
|
||||
] [
|
||||
{
|
||||
T{ ##peek f 0 D 0 }
|
||||
T{ ##load-immediate f 1 1 }
|
||||
T{ ##neg f 2 1 }
|
||||
} value-numbering-step
|
||||
] unit-test
|
||||
|
||||
[
|
||||
{
|
||||
T{ ##peek f 0 D 0 }
|
||||
T{ ##load-immediate f 1 1 }
|
||||
T{ ##load-immediate f 2 -2 }
|
||||
}
|
||||
] [
|
||||
{
|
||||
T{ ##peek f 0 D 0 }
|
||||
T{ ##load-immediate f 1 1 }
|
||||
T{ ##not f 2 1 }
|
||||
} value-numbering-step
|
||||
] unit-test
|
||||
|
||||
! Displaced alien optimizations
|
||||
3 vreg-counter set-global
|
||||
|
||||
|
|
Loading…
Reference in New Issue