Merge branch 'master' of git://factorcode.org/git/factor

db4
Doug Coleman 2009-11-03 18:41:23 -06:00
commit 82ae52e109
3 changed files with 48 additions and 22 deletions

View File

@ -11,6 +11,10 @@ GENERIC: defs-vreg ( insn -- vreg/f )
GENERIC: temp-vregs ( insn -- seq )
GENERIC: uses-vregs ( insn -- seq )
M: insn defs-vreg drop f ;
M: insn temp-vregs drop { } ;
M: insn uses-vregs drop { } ;
M: ##phi uses-vregs inputs>> values ;
<PRIVATE
@ -24,19 +28,25 @@ M: ##phi uses-vregs inputs>> values ;
} case ;
: define-defs-vreg-method ( insn -- )
[ \ defs-vreg create-method ]
[ insn-def-slot [ name>> reader-word 1quotation ] [ [ drop f ] ] if* ] bi
define ;
dup insn-def-slot dup [
[ \ defs-vreg create-method ]
[ name>> reader-word 1quotation ] bi*
define
] [ 2drop ] if ;
: define-uses-vregs-method ( insn -- )
[ \ uses-vregs create-method ]
[ insn-use-slots [ name>> ] map slot-array-quot ] bi
define ;
dup insn-use-slots [ drop ] [
[ \ uses-vregs create-method ]
[ [ name>> ] map slot-array-quot ] bi*
define
] if-empty ;
: define-temp-vregs-method ( insn -- )
[ \ temp-vregs create-method ]
[ insn-temp-slots [ name>> ] map slot-array-quot ] bi
define ;
dup insn-temp-slots [ drop ] [
[ \ temp-vregs create-method ]
[ [ name>> ] map slot-array-quot ] bi*
define
] if-empty ;
PRIVATE>

View File

@ -20,15 +20,19 @@ WHERE
GENERIC: rename-insn-defs ( insn -- )
insn-classes get [
M: insn rename-insn-defs drop ;
insn-classes get [ insn-def-slot ] filter [
[ \ rename-insn-defs create-method-in ]
[ insn-def-slot dup [ name>> 1array ] when DEF-QUOT slot-change-quot ] bi
[ insn-def-slot name>> 1array DEF-QUOT slot-change-quot ] bi
define
] each
GENERIC: rename-insn-uses ( insn -- )
insn-classes get { ##phi } diff [
M: insn rename-insn-uses drop ;
insn-classes get { ##phi } diff [ insn-use-slots empty? not ] filter [
[ \ rename-insn-uses create-method-in ]
[ insn-use-slots [ name>> ] map USE-QUOT slot-change-quot ] bi
define
@ -39,7 +43,9 @@ M: ##phi rename-insn-uses
GENERIC: rename-insn-temps ( insn -- )
insn-classes get [
M: insn rename-insn-temps drop ;
insn-classes get [ insn-temp-slots empty? not ] filter [
[ \ rename-insn-temps create-method-in ]
[ insn-temp-slots [ name>> ] map TEMP-QUOT slot-change-quot ] bi
define

View File

@ -11,6 +11,10 @@ GENERIC: defs-vreg-rep ( insn -- rep/f )
GENERIC: temp-vreg-reps ( insn -- reps )
GENERIC: uses-vreg-reps ( insn -- reps )
M: insn defs-vreg-rep drop f ;
M: insn temp-vreg-reps drop { } ;
M: insn uses-vreg-reps drop { } ;
<PRIVATE
: rep-getter-quot ( rep -- quot )
@ -21,9 +25,11 @@ GENERIC: uses-vreg-reps ( insn -- reps )
} case ;
: define-defs-vreg-rep-method ( insn -- )
[ \ defs-vreg-rep create-method ]
[ insn-def-slot [ rep>> rep-getter-quot ] [ [ drop f ] ] if* ]
bi define ;
dup insn-def-slot dup [
[ \ defs-vreg-rep create-method ]
[ rep>> rep-getter-quot ]
bi* define
] [ 2drop ] if ;
: reps-getter-quot ( reps -- quot )
dup [ rep>> { f scalar-rep } member-eq? not ] all? [
@ -38,14 +44,18 @@ GENERIC: uses-vreg-reps ( insn -- reps )
] if ;
: define-uses-vreg-reps-method ( insn -- )
[ \ uses-vreg-reps create-method ]
[ insn-use-slots reps-getter-quot ]
bi define ;
dup insn-use-slots [ drop ] [
[ \ uses-vreg-reps create-method ]
[ reps-getter-quot ]
bi* define
] if-empty ;
: define-temp-vreg-reps-method ( insn -- )
[ \ temp-vreg-reps create-method ]
[ insn-temp-slots reps-getter-quot ]
bi define ;
dup insn-temp-slots [ drop ] [
[ \ temp-vreg-reps create-method ]
[ reps-getter-quot ]
bi* define
] if-empty ;
PRIVATE>