! Redundant load elimination
{
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##slot-imm f 1 0 1 0 }
T{ ##copy f 2 1 any-rep }
}
} [
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##slot-imm f 1 0 1 0 }
T{ ##slot-imm f 2 0 1 0 }
} test-alias-analysis
! Store-load forwarding
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##set-slot-imm f 1 0 1 0 }
T{ ##copy f 2 1 any-rep }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##set-slot-imm f 1 0 1 0 }
T{ ##slot-imm f 2 0 1 0 }
} test-alias-analysis
! Dead store elimination
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
T{ ##set-slot-imm f 2 0 1 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
T{ ##set-slot-imm f 1 0 1 0 }
T{ ##set-slot-imm f 2 0 1 0 }
} test-alias-analysis
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
- T{ ##peek f 3 D 3 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
+ T{ ##peek f 3 D: 3 }
T{ ##set-slot-imm f 3 0 1 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
- T{ ##peek f 3 D 3 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
+ T{ ##peek f 3 D: 3 }
T{ ##set-slot-imm f 1 0 1 0 }
T{ ##set-slot-imm f 2 0 1 0 }
T{ ##set-slot-imm f 3 0 1 0 }
! Redundant store elimination
{
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##slot-imm f 1 0 1 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##slot-imm f 1 0 1 0 }
T{ ##set-slot-imm f 1 0 1 0 }
} test-alias-analysis
{
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##slot-imm f 1 0 1 0 }
T{ ##copy f 2 1 any-rep }
}
} [
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##slot-imm f 1 0 1 0 }
T{ ##copy f 2 1 any-rep }
T{ ##set-slot-imm f 2 0 1 0 }
! Not a redundant load
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##slot-imm f 1 0 1 0 }
T{ ##set-slot-imm f 0 1 1 0 }
T{ ##slot-imm f 2 0 1 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##slot-imm f 1 0 1 0 }
T{ ##set-slot-imm f 0 1 1 0 }
T{ ##slot-imm f 2 0 1 0 }
! Not a redundant store
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
- T{ ##peek f 3 D 3 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
+ T{ ##peek f 3 D: 3 }
T{ ##set-slot-imm f 2 1 1 0 }
T{ ##slot-imm f 4 0 1 0 }
T{ ##set-slot-imm f 3 1 1 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
- T{ ##peek f 3 D 3 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
+ T{ ##peek f 3 D: 3 }
T{ ##set-slot-imm f 2 1 1 0 }
T{ ##slot-imm f 4 0 1 0 }
T{ ##set-slot-imm f 3 1 1 0 }
! There's a redundant load, but not a redundant store
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
- T{ ##peek f 3 D 3 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
+ T{ ##peek f 3 D: 3 }
T{ ##slot-imm f 4 0 1 0 }
T{ ##set-slot-imm f 2 0 1 0 }
T{ ##slot f 5 0 3 0 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
- T{ ##peek f 3 D 3 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
+ T{ ##peek f 3 D: 3 }
T{ ##slot-imm f 4 0 1 0 }
T{ ##set-slot-imm f 2 0 1 0 }
T{ ##slot f 5 0 3 0 0 }
! Redundant load elimination
{
V{
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
- T{ ##peek f 3 D 3 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
+ T{ ##peek f 3 D: 3 }
T{ ##allot f 4 16 array }
T{ ##set-slot-imm f 3 4 1 0 }
T{ ##set-slot-imm f 2 1 1 0 }
}
} [
V{
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
- T{ ##peek f 3 D 3 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
+ T{ ##peek f 3 D: 3 }
T{ ##allot f 4 16 array }
T{ ##set-slot-imm f 3 4 1 0 }
T{ ##set-slot-imm f 2 1 1 0 }
! Redundant store elimination
{
V{
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
- T{ ##peek f 3 D 3 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
+ T{ ##peek f 3 D: 3 }
T{ ##allot f 4 16 array }
T{ ##slot-imm f 5 1 1 0 }
T{ ##set-slot-imm f 3 4 1 0 }
}
} [
V{
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
- T{ ##peek f 3 D 3 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
+ T{ ##peek f 3 D: 3 }
T{ ##allot f 4 16 array }
T{ ##set-slot-imm f 1 4 1 0 }
T{ ##slot-imm f 5 1 1 0 }
! can now alias the new ac
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
- T{ ##peek f 3 D 3 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
+ T{ ##peek f 3 D: 3 }
T{ ##allot f 4 16 array }
T{ ##set-slot-imm f 0 4 1 0 }
T{ ##set-slot-imm f 4 2 1 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
- T{ ##peek f 3 D 3 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
+ T{ ##peek f 3 D: 3 }
T{ ##allot f 4 16 array }
T{ ##set-slot-imm f 0 4 1 0 }
T{ ##set-slot-imm f 4 2 1 0 }
! Compares between objects which cannot alias are eliminated
{
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##allot f 1 16 array }
T{ ##load-reference f 2 f }
}
} [
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##allot f 1 16 array }
T{ ##compare f 2 0 1 cc= }
} test-alias-analysis
! instructions which can call back into Factor code
{
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##slot-imm f 1 0 1 0 }
T{ ##alien-invoke f { } { } { } { } 0 0 "free" }
T{ ##slot-imm f 2 0 1 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##slot-imm f 1 0 1 0 }
T{ ##alien-invoke f { } { } { } { } 0 0 "free" }
T{ ##slot-imm f 2 0 1 0 }
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##set-slot-imm f 1 0 1 0 }
T{ ##alien-invoke f { } { } { } { } 0 0 "free" }
T{ ##slot-imm f 2 0 1 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##set-slot-imm f 1 0 1 0 }
T{ ##alien-invoke f { } { } { } { } 0 0 "free" }
T{ ##slot-imm f 2 0 1 0 }
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
T{ ##set-slot-imm f 1 0 1 0 }
T{ ##alien-invoke f { } { } { } { } 0 0 "free" }
T{ ##set-slot-imm f 2 0 1 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
T{ ##set-slot-imm f 1 0 1 0 }
T{ ##alien-invoke f { } { } { } { } 0 0 "free" }
T{ ##set-slot-imm f 2 0 1 0 }
{
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##slot-imm f 1 0 1 0 }
T{ ##alien-invoke f { } { } { } { } 0 0 "free" }
T{ ##set-slot-imm f 1 0 1 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##slot-imm f 1 0 1 0 }
T{ ##alien-invoke f { } { } { } { } 0 0 "free" }
T{ ##set-slot-imm f 1 0 1 0 }
{
V{
T{ ##allot f 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 1 D: 1 }
T{ ##set-slot-imm f 1 0 1 0 }
T{ ##alien-invoke f { } { } { } { } 0 0 "free" }
T{ ##copy f 2 1 any-rep }
} [
V{
T{ ##allot f 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 1 D: 1 }
T{ ##set-slot-imm f 1 0 1 0 }
T{ ##alien-invoke f { } { } { } { } 0 0 "free" }
T{ ##slot-imm f 2 0 1 0 }
{
V{
T{ ##allot f 0 }
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
T{ ##set-slot-imm f 1 0 1 0 }
T{ ##alien-invoke f { } { } { } { } 0 0 "free" }
T{ ##set-slot-imm f 2 0 1 0 }
} [
V{
T{ ##allot f 0 }
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
T{ ##set-slot-imm f 1 0 1 0 }
T{ ##alien-invoke f { } { } { } { } 0 0 "free" }
T{ ##set-slot-imm f 2 0 1 0 }
! make-input-map
{
- { { 37 D 2 } { 81 D 1 } { 92 D 0 } }
+ { { 37 D: 2 } { 81 D: 1 } { 92 D: 0 } }
} [
T{ #shuffle { in-d { 37 81 92 } } } make-input-map
] unit-test
{
{ { 1 1 } { 0 0 } }
- H{ { D -1 4 } { D 0 4 } }
+ H{ { D: -1 4 } { D: 0 4 } }
} [
- 4 D 0 replace-loc
+ 4 D: 0 replace-loc
T{ #shuffle
{ mapping { { 2 4 } { 3 4 } } }
{ in-d V{ 4 } }
! store-shuffle
{
- H{ { D 2 1 } }
+ H{ { D: 2 1 } }
} [
T{ #shuffle { in-d { 7 3 0 } } { out-d { 55 } } { mapping { { 55 3 } } } }
emit-node replaces get
] cfg-unit-test
{
- H{ { D -1 1 } { D 0 1 } }
+ H{ { D: -1 1 } { D: 0 1 } }
} [
T{ #shuffle
{ in-d { 7 } }
} 0 test-bb
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##branch }
} 1 test-bb
V{
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 1 D: 1 }
T{ ##branch }
} 2 test-bb
V{
T{ ##copy f 6 4 any-rep }
- T{ ##replace f 3 D 0 }
- T{ ##replace f 5 D 1 }
- T{ ##replace f 6 D 2 }
+ T{ ##replace f 3 D: 0 }
+ T{ ##replace f 5 D: 1 }
+ T{ ##replace f 6 D: 2 }
T{ ##branch }
} 5 test-bb
{
V{
- T{ ##replace f 0 D 0 }
- T{ ##replace f 4 D 1 }
- T{ ##replace f 4 D 2 }
+ T{ ##replace f 0 D: 0 }
+ T{ ##replace f 4 D: 1 }
+ T{ ##replace f 4 D: 2 }
T{ ##branch }
}
} [ 5 get instructions>> ] unit-test
} 0 test-bb
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##branch }
} 1 test-bb
} 2 test-bb
V{
- T{ ##replace f 2 D 1 }
+ T{ ##replace f 2 D: 1 }
T{ ##branch }
} 3 test-bb
{
V{
- T{ ##replace f 0 D 1 }
+ T{ ##replace f 0 D: 1 }
T{ ##branch }
}
} [ 3 get instructions>> ] unit-test
T{ ##load-integer { dst 1 } { val 8 } }
T{ ##load-integer { dst 2 } { val 16 } }
T{ ##add { dst 3 } { src1 1 } { src2 2 } }
- T{ ##replace { src 3 } { loc D 0 } }
+ T{ ##replace { src 3 } { loc D: 0 } }
} } [ V{
T{ ##load-integer { dst 1 } { val 8 } }
T{ ##load-integer { dst 2 } { val 16 } }
T{ ##add { dst 3 } { src1 1 } { src2 2 } }
- T{ ##replace { src 3 } { loc D 0 } }
+ T{ ##replace { src 3 } { loc D: 0 } }
} test-dce ] unit-test
{ V{ } } [ V{
T{ ##load-integer { dst 3 } { val 8 } }
T{ ##allot { dst 1 } { temp 2 } }
T{ ##set-slot-imm { obj 1 } { src 3 } }
- T{ ##replace { src 1 } { loc D 0 } }
+ T{ ##replace { src 1 } { loc D: 0 } }
} } [ V{
T{ ##load-integer { dst 3 } { val 8 } }
T{ ##allot { dst 1 } { temp 2 } }
T{ ##set-slot-imm { obj 1 } { src 3 } }
- T{ ##replace { src 1 } { loc D 0 } }
+ T{ ##replace { src 1 } { loc D: 0 } }
} test-dce ] unit-test
{ V{
T{ ##allot { dst 1 } { temp 2 } }
- T{ ##replace { src 1 } { loc D 0 } }
+ T{ ##replace { src 1 } { loc D: 0 } }
} } [ V{
T{ ##allot { dst 1 } { temp 2 } }
- T{ ##replace { src 1 } { loc D 0 } }
+ T{ ##replace { src 1 } { loc D: 0 } }
} test-dce ] unit-test
{ V{
T{ ##allot { dst 1 } { temp 2 } }
- T{ ##replace { src 1 } { loc D 0 } }
+ T{ ##replace { src 1 } { loc D: 0 } }
T{ ##load-integer { dst 3 } { val 8 } }
T{ ##set-slot-imm { obj 1 } { src 3 } }
} } [ V{
T{ ##allot { dst 1 } { temp 2 } }
- T{ ##replace { src 1 } { loc D 0 } }
+ T{ ##replace { src 1 } { loc D: 0 } }
T{ ##load-integer { dst 3 } { val 8 } }
T{ ##set-slot-imm { obj 1 } { src 3 } }
} test-dce ] unit-test
! Prettyprinting
: pprint-loc ( loc word -- ) <block pprint-word n>> pprint* block> ;
-M: ds-loc pprint* \ D pprint-loc ;
+M: ds-loc pprint* \ D: pprint-loc ;
-M: rs-loc pprint* \ R pprint-loc ;
+M: rs-loc pprint* \ R: pprint-loc ;
: resolve-phis ( bb -- )
[
{ $examples
{ $example
"USING: compiler.cfg.def-use compiler.cfg.instructions compiler.cfg.registers prettyprint ;"
- "T{ ##peek f 37 D 0 0 } defs-vregs ."
+ "T{ ##peek f 37 D: 0 0 } defs-vregs ."
"{ 37 }"
}
} ;
{ $examples
{ $example
"USING: compiler.cfg.def-use compiler.cfg.instructions compiler.cfg.registers prettyprint ;"
- "T{ ##replace f 37 D 1 6 } uses-vregs ."
+ "T{ ##replace f 37 D: 1 6 } uses-vregs ."
"{ 37 }"
}
} ;
! compute-insns
{
- T{ ##peek f 123 D 0 f }
+ T{ ##peek f 123 D: 0 f }
} [
- { T{ ##peek f 123 D 0 } } 0 insns>block block>cfg compute-insns
+ { T{ ##peek f 123 D: 0 } } 0 insns>block block>cfg compute-insns
123 insn-of
] unit-test
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 0 }
- T{ ##peek f 2 D 0 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 0 }
+ T{ ##peek f 2 D: 0 }
} 1 test-bb
V{
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} 2 test-bb
1 2 edge
V{
- T{ ##replace f 0 D 0 }
+ T{ ##replace f 0 D: 0 }
} 3 test-bb
2 3 edge
V{ } 4 test-bb
V{
T{ ##inc f 3 }
- T{ ##replace f 0 D 1 }
+ T{ ##replace f 0 D: 1 }
} 0 test-bb
V{
} 0 test-bb
V{
- T{ ##peek f 2 D 0 }
- T{ ##inc { loc D 3 } }
+ T{ ##peek f 2 D: 0 }
+ T{ ##inc { loc D: 3 } }
T{ ##branch }
} 1 test-bb
} 3 test-bb
V{
- T{ ##replace f 2 D 1 }
+ T{ ##replace f 2 D: 1 }
T{ ##branch }
} 4 test-bb
'[ _ ^^compare-integer ] binary-op ;
: emit-no-overflow-case ( dst -- final-bb )
- [ D -2 inc-stack ds-push ] with-branch ;
+ [ D: -2 inc-stack ds-push ] with-branch ;
: emit-overflow-case ( word -- final-bb )
[
CONSTANT: [quaternary]
[
ds-drop
- D 3 peek-loc
- D 2 peek-loc
- D 1 peek-loc
- D 0 peek-loc
+ D: 3 peek-loc
+ D: 2 peek-loc
+ D: 1 peek-loc
+ D: 0 peek-loc
-4 <ds-loc> inc-stack
]
H{ { 37 RAX } } pending-interval-assoc set
H{ { 37 int-rep } } representations set
H{ { 37 37 } } leader-map set
- T{ ##peek f 37 D 0 0 } [ assign-insn-defs ] keep
+ T{ ##peek f 37 D: 0 0 } [ assign-insn-defs ] keep
] unit-test
! assign-registers
{ } [
- V{ T{ ##inc { loc D 3 } { insn# 7 } } } 0 insns>block block>cfg { }
+ V{ T{ ##inc { loc D: 3 } { insn# 7 } } } 0 insns>block block>cfg { }
assign-registers
] unit-test
V{ T{ ##inc { loc T{ ds-loc { n 3 } } } { insn# 7 } } }
} [
{ } init-assignment
- V{ T{ ##inc { loc D 3 } { insn# 7 } } } 0 insns>block
+ V{ T{ ##inc { loc D: 3 } { insn# 7 } } } 0 insns>block
[ assign-registers-in-block ] keep instructions>>
] unit-test
! live range
V{
T{ ##load-integer f 1 0 }
- T{ ##replace-imm f D 0 "hi" }
+ T{ ##replace-imm f D: 0 "hi" }
T{ ##branch }
} 0 test-bb
! kill-defs
{ H{ } } [
- H{ } dup T{ ##peek f 37 D 0 0 } kill-defs
+ H{ } dup T{ ##peek f 37 D: 0 0 } kill-defs
] unit-test
{ H{ { 3 3 } } } [
H{ { 37 99 } { 99 99 } { 2 99 } } leader-map set
- H{ { 37 37 } { 3 3 } } dup T{ ##peek f 2 D 0 0 } kill-defs
+ H{ { 37 37 } { 3 3 } } dup T{ ##peek f 2 D: 0 0 } kill-defs
] unit-test
! liveness-step
cpu x86.64? [
{ f } [
H{ } base-pointers set
- H{ { 123 T{ ##peek { dst RCX } { loc D 1 } { insn# 6 } } } } insns set
+ H{ { 123 T{ ##peek { dst RCX } { loc D: 1 } { insn# 6 } } } } insns set
123 lookup-base-pointer
] unit-test
] when
! lookup-base-pointer*
{ f } [
- 456 T{ ##peek f 123 D 0 } lookup-base-pointer*
+ 456 T{ ##peek f 123 D: 0 } lookup-base-pointer*
] unit-test
! transfer-liveness
{
H{ { 37 37 } }
} [
- H{ } clone dup { T{ ##replace f 37 D 1 6 } T{ ##peek f 37 D 0 0 } }
+ H{ } clone dup { T{ ##replace f 37 D: 1 6 } T{ ##peek f 37 D: 0 0 } }
transfer-liveness
] unit-test
! visit-insn
{ H{ } } [
- H{ } clone [ T{ ##peek f 0 D 0 } visit-insn ] keep
+ H{ } clone [ T{ ##peek f 0 D: 0 } visit-insn ] keep
] unit-test
{ H{ { 48 48 } { 37 37 } } } [
H{ { 48 tagged-rep } } representations set
- H{ { 48 48 } } clone [ T{ ##replace f 37 D 1 6 } visit-insn ] keep
+ H{ { 48 48 } } clone [ T{ ##replace f 37 D: 1 6 } visit-insn ] keep
] unit-test
{
! Sanity check...
V{
- T{ ##peek f 0 D 0 }
- T{ ##replace f 0 D 0 }
- T{ ##replace f 1 D 1 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##replace f 0 D: 0 }
+ T{ ##replace f 1 D: 1 }
+ T{ ##peek f 1 D: 1 }
T{ ##branch }
} 1 test-bb
V{
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
T{ ##branch }
} 2 test-bb
V{
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
T{ ##return }
} 3 test-bb
! Tricky case; defs must be killed before uses
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##branch }
} 1 test-bb
} 0 test-bb
V{
- T{ ##inc { loc R 2 } }
- T{ ##inc { loc D -2 } }
- T{ ##peek f 21 D -1 }
- T{ ##peek f 22 D -2 }
- T{ ##replace f 21 R 0 }
- T{ ##replace f 22 R 1 }
+ T{ ##inc { loc R: 2 } }
+ T{ ##inc { loc D: -2 } }
+ T{ ##peek f 21 D: -1 }
+ T{ ##peek f 22 D: -2 }
+ T{ ##replace f 21 R: 0 }
+ T{ ##replace f 22 R: 1 }
T{ ##branch }
} 1 test-bb
} 2 test-bb
V{
- T{ ##inc { loc R -1 } }
- T{ ##inc { loc D 1 } }
- T{ ##peek f 25 R -1 }
- T{ ##replace f 25 D 0 }
+ T{ ##inc { loc R: -1 } }
+ T{ ##inc { loc D: 1 } }
+ T{ ##peek f 25 R: -1 }
+ T{ ##replace f 25 D: 0 }
T{ ##branch }
} 3 test-bb
} 4 test-bb
V{
- T{ ##inc f R -1 }
- T{ ##inc f D 2 }
- T{ ##peek f 27 R -1 }
- T{ ##peek f 28 D 2 }
- T{ ##peek f 29 D 3 }
+ T{ ##inc f R: -1 }
+ T{ ##inc f D: 2 }
+ T{ ##peek f 27 R: -1 }
+ T{ ##peek f 28 D: 2 }
+ T{ ##peek f 29 D: 3 }
T{ ##load-integer f 30 1 }
T{ ##load-integer f 31 0 }
T{ ##compare-imm-branch f 27 f cc/= }
} 5 test-bb
V{
- T{ ##inc f D -1 }
+ T{ ##inc f D: -1 }
T{ ##branch }
} 6 test-bb
V{
- T{ ##inc f D -1 }
+ T{ ##inc f D: -1 }
T{ ##branch }
} 7 test-bb
V{
T{ ##phi f 36 H{ { 6 30 } { 7 31 } } }
- T{ ##inc f D -2 }
+ T{ ##inc f D: -2 }
T{ ##unbox f 37 29 "alien_offset" int-rep }
T{ ##unbox f 38 28 "to_double" double-rep }
T{ ##unbox f 39 36 "to_cell" int-rep }
T{ ##alien-invoke f V{ } V{ { 37 int-rep 0 } { 38 double-rep 4 } { 39 int-rep 12 } } { { 40 int-rep EAX } } { } 0 16 "CFRunLoopRunInMode" f T{ gc-map } }
T{ ##box f 41 40 "from_signed_cell" int-rep T{ gc-map } }
- T{ ##replace f 41 D 0 }
+ T{ ##replace f 41 D: 0 }
T{ ##branch }
} 8 test-bb
} 5 test-bb
V{
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
T{ ##branch }
} 6 test-bb
} 0 test-bb
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##tagged>integer f 1 0 }
T{ ##call-gc f T{ gc-map } }
- T{ ##replace f 0 D 0 }
+ T{ ##replace f 0 D: 0 }
T{ ##call-gc f T{ gc-map } }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
T{ ##branch }
} 1 test-bb
TUPLE: rs-loc < loc ;
C: <rs-loc> rs-loc
-SYNTAX: D scan-number <ds-loc> suffix! ;
-SYNTAX: R scan-number <rs-loc> suffix! ;
+SYNTAX: D: scan-number <ds-loc> suffix! ;
+SYNTAX: R: scan-number <rs-loc> suffix! ;
} 0 test-bb
V{
- T{ ##peek f 2 D 0 }
+ T{ ##peek f 2 D: 0 }
T{ ##load-integer f 0 0 }
T{ ##branch }
} 1 test-bb
} 0 test-bb
V{
- T{ ##peek f 1 D 0 }
- T{ ##peek f 2 D 1 }
+ T{ ##peek f 1 D: 0 }
+ T{ ##peek f 2 D: 1 }
T{ ##add-float f 3 1 2 }
- T{ ##replace f 3 D 0 }
- T{ ##replace f 3 D 1 }
- T{ ##replace f 3 D 2 }
+ T{ ##replace f 3 D: 0 }
+ T{ ##replace f 3 D: 1 }
+ T{ ##replace f 3 D: 2 }
T{ ##branch }
} 1 test-bb
} 0 test-bb
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##branch }
} 1 test-bb
V{
T{ ##add-float f 2 1 1 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
T{ ##epilogue }
T{ ##return }
} 2 test-bb
V{
T{ ##add-float f 3 1 1 }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
T{ ##epilogue }
T{ ##return }
} 3 test-bb
{
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##branch }
}
} [ 1 get instructions>> ] unit-test
} 0 test-bb
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##branch }
} 1 test-bb
V{
- T{ ##replace f 1 R 0 }
+ T{ ##replace f 1 R: 0 }
T{ ##epilogue }
T{ ##return }
} 2 test-bb
V{
T{ ##mul f 2 1 1 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
T{ ##branch }
} 3 test-bb
{
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##branch }
}
} [ 1 get instructions>> ] unit-test
} 0 test-bb
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##branch }
} 1 test-bb
V{
T{ ##add f 2 1 1 }
T{ ##mul f 3 1 1 }
- T{ ##replace f 2 D 0 }
- T{ ##replace f 3 D 1 }
+ T{ ##replace f 2 D: 0 }
+ T{ ##replace f 3 D: 1 }
T{ ##branch }
} 3 test-bb
{
V{
- T{ ##peek f 4 D 0 }
+ T{ ##peek f 4 D: 0 }
T{ ##sar-imm f 1 4 $[ tag-bits get ] }
T{ ##branch }
}
} 0 test-bb
V{
- T{ ##peek f 1 D 0 }
- T{ ##peek f 2 D 0 }
+ T{ ##peek f 1 D: 0 }
+ T{ ##peek f 2 D: 0 }
T{ ##vector>scalar f 3 2 int-4-rep }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
T{ ##branch }
} 1 test-bb
V{
T{ ##phi f 3 H{ { 1 1 } { 2 2 } } }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
T{ ##branch }
} 3 test-bb
} 0 test-bb
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##add f 2 0 1 }
T{ ##branch }
} 1 test-bb
V{
T{ ##phi f 4 H{ { 1 2 } { 2 3 } } }
- T{ ##replace f 4 D 0 }
+ T{ ##replace f 4 D: 0 }
T{ ##branch }
} 3 test-bb
} 0 test-bb
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##load-reference f 2 0.5 }
T{ ##add-float f 3 1 2 }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
T{ ##branch }
} 1 test-bb
} 0 test-bb
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##compare-imm-branch f 1 2 cc= }
} 1 test-bb
V{
T{ ##phi f 4 H{ { 2 2 } { 3 3 } } }
- T{ ##peek f 5 D 0 }
+ T{ ##peek f 5 D: 0 }
T{ ##add-float f 6 4 5 }
- T{ ##replace f 6 D 0 }
+ T{ ##replace f 6 D: 0 }
} 4 test-bb
V{
{ f } [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 1 }
T{ ##add-float f 3 0 0 }
T{ ##store-memory-imm f 3 2 0 float-rep f }
T{ ##store-memory-imm f 3 2 4 float-rep f }
T{ ##mul-float f 4 0 0 }
- T{ ##replace f 4 D 0 }
+ T{ ##replace f 4 D: 0 }
} test-peephole
[ ##single>double-float? ] any?
] unit-test
{
V{
T{ ##load-tagged f 1 $[ 100 tag-fixnum ] }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
}
} [
V{
T{ ##load-integer f 1 100 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
} test-peephole
] unit-test
{
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##sar-imm f 2 1 1 }
T{ ##add f 4 2 2 }
T{ ##shl-imm f 3 4 $[ tag-bits get ] }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
}
} [
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##shl-imm f 2 1 3 }
T{ ##add f 3 2 2 }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
} test-peephole
] unit-test
{
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##shl-imm f 2 1 $[ 10 tag-bits get - ] }
T{ ##add f 4 2 2 }
T{ ##shl-imm f 3 4 $[ tag-bits get ] }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
}
} [
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##shl-imm f 2 1 10 }
T{ ##add f 3 2 2 }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
} test-peephole
] unit-test
{
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##copy f 2 1 int-rep }
T{ ##add f 5 2 2 }
T{ ##shl-imm f 3 5 $[ tag-bits get ] }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
}
} [
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##shl-imm f 2 1 $[ tag-bits get ] }
T{ ##add f 3 2 2 }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
} test-peephole
] unit-test
V{
T{ ##load-integer f 1 100 }
T{ ##shl-imm f 2 1 $[ 3 tag-bits get + ] }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
V{
T{ ##load-integer f 1 100 }
T{ ##shl-imm f 2 1 3 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} test-peephole
] unit-test
! need to be tagged
{
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##shl-imm f 1 0 3 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##shl-imm f 1 0 3 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
} test-peephole
] unit-test
! Peephole optimization if input to ##sar-imm is tagged
{
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##sar-imm f 7 1 $[ 3 tag-bits get + ] }
T{ ##shl-imm f 2 7 $[ tag-bits get ] }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##sar-imm f 2 1 3 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} test-peephole
] unit-test
T{ ##load-integer f 1 100 }
T{ ##sar-imm f 7 1 3 }
T{ ##shl-imm f 2 7 $[ tag-bits get ] }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
V{
T{ ##load-integer f 1 100 }
T{ ##sar-imm f 2 1 3 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} test-peephole
] unit-test
! need to be tagged
{
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##sar-imm f 1 0 $[ 3 tag-bits get + ] }
T{ ##load-integer f 3 100 }
T{ ##load-integer f 4 100 }
}
} [
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##sar-imm f 1 0 3 }
T{ ##load-integer f 3 100 }
T{ ##load-integer f 4 100 }
T{ ##load-integer f 3 100 }
T{ ##add f 7 2 3 }
T{ ##shl-imm f 4 7 $[ tag-bits get ] }
- T{ ##replace f 4 D 0 }
+ T{ ##replace f 4 D: 0 }
}
} [
V{
T{ ##sar-imm f 2 1 3 }
T{ ##load-integer f 3 100 }
T{ ##add f 4 2 3 }
- T{ ##replace f 4 D 0 }
+ T{ ##replace f 4 D: 0 }
} test-peephole
] unit-test
! Tag/untag elimination
{
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##add-imm f 2 1 $[ 100 tag-fixnum ] }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##add-imm f 2 1 100 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} test-peephole
] unit-test
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##add f 2 0 1 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##add f 2 0 1 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} test-peephole
] unit-test
[
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##sar-imm f 5 0 $[ tag-bits get ] }
T{ ##add-imm f 6 5 $[ 30 2^ ] }
T{ ##shl-imm f 2 6 $[ tag-bits get ] }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
] [
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##add-imm f 2 0 $[ 30 2^ ] }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} test-peephole
] unit-test
T{ ##load-integer f 0 100 }
T{ ##mul-imm f 7 0 $[ 30 2^ ] }
T{ ##shl-imm f 1 7 $[ tag-bits get ] }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
}
] [
V{
T{ ##load-integer f 0 100 }
T{ ##mul-imm f 1 0 $[ 30 2^ ] }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
} test-peephole
] unit-test
] when
! Tag/untag elimination for ##mul-imm
{
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##mul-imm f 1 0 100 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##mul-imm f 1 0 100 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
} test-peephole
] unit-test
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##sar-imm f 5 1 $[ tag-bits get ] }
T{ ##add-imm f 2 5 30 }
T{ ##mul-imm f 3 2 $[ 100 tag-fixnum ] }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##add-imm f 2 1 30 }
T{ ##mul-imm f 3 2 100 }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
} test-peephole
] unit-test
! Tag/untag elimination for ##compare-integer and ##test
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##test f 2 0 1 cc= }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##test f 2 0 1 cc= }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} test-peephole
] unit-test
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##compare-integer f 2 0 1 cc= }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##compare-integer f 2 0 1 cc= }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} test-peephole
] unit-test
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##compare-integer-branch f 0 1 cc= }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##compare-integer-branch f 0 1 cc= }
} test-peephole
] unit-test
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##test-branch f 0 1 cc= }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##test-branch f 0 1 cc= }
} test-peephole
] unit-test
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##compare-integer-imm-branch f 0 $[ 10 tag-fixnum ] cc= }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##compare-integer-imm-branch f 0 10 cc= }
} test-peephole
] unit-test
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##test-imm-branch f 0 $[ 10 tag-fixnum ] cc= }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##test-imm-branch f 0 10 cc= }
} test-peephole
] unit-test
! Tag/untag elimination for ##neg
{
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##neg f 1 0 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##neg f 1 0 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
} test-peephole
] unit-test
{
V{
- T{ ##peek { dst 0 } { loc D 0 } }
- T{ ##peek { dst 1 } { loc D 1 } }
+ T{ ##peek { dst 0 } { loc D: 0 } }
+ T{ ##peek { dst 1 } { loc D: 1 } }
T{ ##sar-imm { dst 5 } { src1 0 } { src2 4 } }
T{ ##sar-imm { dst 6 } { src1 1 } { src2 4 } }
T{ ##mul { dst 2 } { src1 5 } { src2 6 } }
T{ ##mul-imm { dst 3 } { src1 2 } { src2 -16 } }
- T{ ##replace { src 3 } { loc D 0 } }
+ T{ ##replace { src 3 } { loc D: 0 } }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##mul f 2 0 1 }
T{ ##neg f 3 2 }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
} test-peephole
] unit-test
{
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##not f 3 0 }
T{ ##xor-imm f 1 3 $[ tag-mask get ] }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
}
} [
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##not f 1 0 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
} test-peephole
] unit-test
4 vreg-counter set-global
V{
- T{ ##inc f D 3 }
+ T{ ##inc f D: 3 }
T{ ##box f 4 3 "from_signed_4" int-rep
T{ gc-map { scrub-d B{ 0 0 0 } } { scrub-r B{ } } { gc-roots { } } }
}
{
V{
- T{ ##inc f D 3 }
+ T{ ##inc f D: 3 }
T{ ##save-context f 5 6 }
T{ ##box f 4 3 "from_signed_4" int-rep
T{ gc-map { scrub-d B{ 0 0 0 } } { scrub-r B{ } } { gc-roots { } } }
} 2 test-bb
V{
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
T{ ##return }
} 3 test-bb
{
V{
T{ ##phi f 6 H{ { 1 4 } { 2 5 } } }
- T{ ##replace f 6 D 0 }
+ T{ ##replace f 6 D: 0 }
T{ ##return }
}
} [
V{ } 0 test-bb
V{ } 1 test-bb
-V{ T{ ##peek f 0 D 0 } } 2 test-bb
-V{ T{ ##peek f 0 D 0 } } 3 test-bb
-V{ T{ ##replace f 0 D 0 } } 4 test-bb
+V{ T{ ##peek f 0 D: 0 } } 2 test-bb
+V{ T{ ##peek f 0 D: 0 } } 3 test-bb
+V{ T{ ##replace f 0 D: 0 } } 4 test-bb
V{ } 5 test-bb
V{ } 6 test-bb
{
V{
T{ ##phi f 3 H{ { 2 1 } { 3 2 } } }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
}
} [
4 get instructions>>
[ [ <test-vreg-info> ] map ] bi@ sets-interfere? ;
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 2 D 0 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 2 D: 0 }
T{ ##copy f 1 0 }
T{ ##copy f 3 2 }
T{ ##branch }
} 0 test-bb
V{
- T{ ##peek f 4 D 0 }
- T{ ##peek f 5 D 0 }
- T{ ##replace f 3 D 0 }
- T{ ##peek f 6 D 0 }
- T{ ##replace f 5 D 0 }
+ T{ ##peek f 4 D: 0 }
+ T{ ##peek f 5 D: 0 }
+ T{ ##replace f 3 D: 0 }
+ T{ ##peek f 6 D: 0 }
+ T{ ##replace f 5 D: 0 }
T{ ##return }
} 1 test-bb
V{
- T{ ##inc f D -3 }
- T{ ##peek f 12 D -2 }
- T{ ##peek f 23 D -1 }
+ T{ ##inc f D: -3 }
+ T{ ##peek f 12 D: -2 }
+ T{ ##peek f 23 D: -1 }
T{ ##sar-imm f 13 23 4 }
- T{ ##peek f 24 D -3 }
+ T{ ##peek f 24 D: -3 }
T{ ##sar-imm f 14 24 4 }
T{ ##mul f 15 13 13 }
T{ ##mul f 16 15 15 }
} 0 test-bb
V{
- T{ ##inc f D 2 }
- T{ ##peek f 32 D 2 }
+ T{ ##inc f D: 2 }
+ T{ ##peek f 32 D: 2 }
T{ ##load-reference f 33 ##check-nursery-branch }
T{ ##load-integer f 34 11 }
T{ ##tagged>integer f 35 32 }
} 2 test-bb
V{
- T{ ##inc f D -2 }
+ T{ ##inc f D: -2 }
T{ ##slot-imm f 57 48 11 2 }
T{ ##compare f 58 33 57 cc= 20 }
- T{ ##replace f 58 D 0 }
+ T{ ##replace f 58 D: 0 }
T{ ##branch f }
} 3 test-bb
} 4 test-bb
V{
- T{ ##inc f D -2 }
- T{ ##replace-imm f f D 0 }
+ T{ ##inc f D: -2 }
+ T{ ##replace-imm f f D: 0 }
T{ ##branch f }
} 5 test-bb
} 6 test-bb
V{
- T{ ##inc f D -2 }
- T{ ##replace-imm f f D 0 }
+ T{ ##inc f D: -2 }
+ T{ ##replace-imm f f D: 0 }
T{ ##branch f }
} 7 test-bb
} 2 test-bb
V{
- T{ ##inc f D 1 }
+ T{ ##inc f D: 1 }
T{ ##load-reference f 37 T{ bab } }
T{ ##load-reference f 38 { gfg 1 1 tuple 57438726 gfg 7785907 } }
T{ ##allot f 40 12 tuple 4 }
T{ ##set-slot-imm f 38 40 1 7 }
T{ ##set-slot-imm f 37 40 2 7 }
- T{ ##replace f 40 D 0 }
+ T{ ##replace f 40 D: 0 }
T{ ##branch }
} 3 test-bb
} 4 test-bb
V{
- T{ ##inc f R 1 }
- T{ ##inc f D 1 }
- T{ ##peek f 43 D 1 }
- T{ ##peek f 44 D 2 }
+ T{ ##inc f R: 1 }
+ T{ ##inc f D: 1 }
+ T{ ##peek f 43 D: 1 }
+ T{ ##peek f 44 D: 2 }
T{ ##tagged>integer f 45 43 }
T{ ##and-imm f 46 45 15 }
T{ ##compare-integer-imm-branch f 46 7 cc= }
} 5 test-bb
V{
- T{ ##inc f D 1 }
+ T{ ##inc f D: 1 }
T{ ##slot-imm f 58 43 1 7 }
T{ ##slot-imm f 60 58 7 2 }
T{ ##compare-imm-branch f 60 bab cc= }
} 7 test-bb
V{
- T{ ##inc f R -1 }
- T{ ##inc f D -1 }
+ T{ ##inc f R: -1 }
+ T{ ##inc f D: -1 }
T{ ##set-slot-imm f 43 44 2 7 }
T{ ##write-barrier-imm f 44 2 7 34 35 }
T{ ##branch }
} 9 test-bb
V{
- T{ ##inc f D 1 }
- T{ ##replace f 44 R 0 }
- T{ ##replace-imm f bab D 0 }
+ T{ ##inc f D: 1 }
+ T{ ##replace f 44 R: 0 }
+ T{ ##replace-imm f bab D: 0 }
T{ ##branch }
} 10 test-bb
} 12 test-bb
V{
- T{ ##inc f D -1 }
+ T{ ##inc f D: -1 }
T{ ##branch }
} 13 test-bb
V{
- T{ ##inc f D 1 }
- T{ ##replace f 44 R 0 }
- T{ ##replace-imm f bab D 0 }
+ T{ ##inc f D: 1 }
+ T{ ##replace f 44 R: 0 }
+ T{ ##replace-imm f bab D: 0 }
T{ ##branch }
} 14 test-bb
V{
- T{ ##inc f D 1 }
- T{ ##peek f 31 D 1 }
+ T{ ##inc f D: 1 }
+ T{ ##peek f 31 D: 1 }
T{ ##sar-imm f 16 31 4 }
T{ ##load-integer f 17 0 }
T{ ##copy f 33 17 int-rep }
} 3 test-bb
V{
- T{ ##inc f D -2 }
+ T{ ##inc f D: -2 }
T{ ##branch f }
} 4 test-bb
ARTICLE: "compiler.cfg.stacks.clearing" "Uninitialized stack location clearing"
"A compiler pass that inserts " { $link ##replace-imm } " instructions front of unsafe " { $link ##peek } " instructions in the " { $link cfg } ". Consider the following sequence of instructions."
{ $code
- "##inc D 2"
- "##peek RCX D 2"
+ "##inc D: 2"
+ "##peek RCX D: 2"
}
"The ##peek can cause a stack underflow and then there will be two uninitialized locations on the data stack that can't be traced. To counteract that, this pass modifies the instruction sequence so that it becomes:"
{ $code
- "##inc D 2"
- "##replace-imm 17 D 0"
- "##replace-imm 17 D 1"
- "##peek RCX D 2"
+ "##inc D: 2"
+ "##replace-imm 17 D: 0"
+ "##replace-imm 17 D: 1"
+ "##peek RCX D: 2"
} ;
HELP: dangerous-insn?
{ $examples
{ $example
"USING: compiler.cfg.instructions compiler.cfg.registers compiler.cfg.stacks.clearing prettyprint ;"
- "{ { 0 { } } { 0 { } } } T{ ##peek { loc D 0 } } dangerous-insn? ."
+ "{ { 0 { } } { 0 { } } } T{ ##peek { loc D: 0 } } dangerous-insn? ."
"t"
}
{ $example
"USING: compiler.cfg.instructions compiler.cfg.registers compiler.cfg.stacks.clearing prettyprint ;"
- "{ { 0 { } } { 2 { } } } T{ ##peek { loc R 0 } } dangerous-insn? ."
+ "{ { 0 { } } { 2 { } } } T{ ##peek { loc R: 0 } } dangerous-insn? ."
"f"
}
} ;
! clear-uninitialized
{
V{
- T{ ##inc { loc D 2 } { insn# 0 } }
+ T{ ##inc { loc D: 2 } { insn# 0 } }
T{ ##clear { loc T{ ds-loc { n 1 } } } }
T{ ##clear { loc T{ ds-loc } } }
- T{ ##peek { loc D 2 } { insn# 1 } }
+ T{ ##peek { loc D: 2 } { insn# 1 } }
}
} [
- { T{ ##inc f D 2 } T{ ##peek f f D 2 } } insns>cfg
+ { T{ ##inc f D: 2 } T{ ##peek f f D: 2 } } insns>cfg
dup clear-uninitialized cfg>insns
] unit-test
{
t f t
} [
- { { 0 { } } { 0 { } } } T{ ##peek { loc D 0 } } dangerous-insn?
- { { 1 { } } { 0 { } } } T{ ##peek { loc D 0 } } dangerous-insn?
- { { 2 { 0 1 } } { 0 { } } } T{ ##peek { loc D 2 } } dangerous-insn?
+ { { 0 { } } { 0 { } } } T{ ##peek { loc D: 0 } } dangerous-insn?
+ { { 1 { } } { 0 { } } } T{ ##peek { loc D: 0 } } dangerous-insn?
+ { { 2 { 0 1 } } { 0 { } } } T{ ##peek { loc D: 2 } } dangerous-insn?
] unit-test
! state>clears
begin-stack-analysis
3 4 T{ basic-block }
[ record-stack-heights ]
- [ D 1 swap untranslate-loc ]
- [ R 1 swap untranslate-loc ] tri
+ [ D: 1 swap untranslate-loc ]
+ [ R: 1 swap untranslate-loc ] tri
] unit-test
{ $examples
{ $example
"USING: compiler.cfg.stacks.local compiler.cfg.registers compiler.cfg.debugger namespaces prettyprint ;"
- "D 7 { { 3 0 } { 0 0 } } translate-local-loc ."
- "D 4"
+ "D: 7 { { 3 0 } { 0 0 } } translate-local-loc ."
+ "D: 4"
}
}
{ $see-also height-state } ;
{ $example
"USING: compiler.cfg.stacks.local prettyprint ;"
"{ { 0 4 } { 0 -2 } } height-state>insns ."
- "{ T{ ##inc { loc D 4 } } T{ ##inc { loc R -2 } } }"
+ "{ T{ ##inc { loc D: 4 } } T{ ##inc { loc R: -2 } } }"
}
} ;
! loc>vreg
{ 1 } [
- D 0 loc>vreg
+ D: 0 loc>vreg
] cfg-unit-test
! stack-changes
T{ ##copy { dst 2 } { src 26 } { rep any-rep } }
}
} [
- { { D 0 25 } { R 0 26 } } replaces>copy-insns
+ { { D: 0 25 } { R: 0 26 } } replaces>copy-insns
] cfg-unit-test
! replace-loc
{ 80 } [
- 80 D 77 replace-loc
- D 77 peek-loc
+ 80 D: 77 replace-loc
+ D: 77 peek-loc
] cfg-unit-test
! end-local-analysis
] cfg-unit-test
{
- { D 3 }
+ { D: 3 }
} [
V{ } 137 insns>block
[ 0 0 rot record-stack-heights ]
- [ [ 3 D 3 replace-loc "eh" , end-local-analysis ] V{ } make drop ]
+ [ [ 3 D: 3 replace-loc "eh" , end-local-analysis ] V{ } make drop ]
[ replace-sets get at ] tri
] cfg-unit-test
{
H{ { T{ ds-loc { n 3 } } 7 } }
} [
- D 0 loc>vreg D 2 loc>vreg 2drop
- 2 D 2 replace-loc 7 D 3 replace-loc
+ D: 0 loc>vreg D: 2 loc>vreg 2drop
+ 2 D: 2 replace-loc 7 D: 3 replace-loc
replaces get remove-redundant-replaces
] cfg-unit-test
"eh"
}
} [
- 3 D 0 replace-loc [
+ 3 D: 0 replace-loc [
"eh" ,
replaces get height-state get emit-changes
] V{ } make
compute-local-kill-set sets:cardinality
] unit-test
-{ HS{ R -4 } } [
+{ HS{ R: -4 } } [
V{ } 0 insns>block 4 4 pick record-stack-heights
{ { 8 0 } { 3 0 } } height-state set
compute-local-kill-set
] unit-test
-{ HS{ D -1 D -2 } } [
+{ HS{ D: -1 D: -2 } } [
V{ } 0 insns>block [ 2 0 rot record-stack-heights ] keep
{ { 0 0 } { 0 0 } } height-state set
compute-local-kill-set
] cfg-unit-test
! translate-local-loc
-{ D 2 } [
- D 3 { { 1 2 } { 3 4 } } translate-local-loc
+{ D: 2 } [
+ D: 3 { { 1 2 } { 3 4 } } translate-local-loc
] unit-test
! height-state
{
{ { 3 3 } { 0 0 } }
} [
- D 3 inc-stack height-state get
+ D: 3 inc-stack height-state get
] cfg-unit-test
{
{ { 5 3 } { 0 0 } }
} [
{ { 2 0 } { 0 0 } } height-state set
- D 3 inc-stack height-state get
+ D: 3 inc-stack height-state get
] cfg-unit-test
{
- { T{ ##inc { loc D 4 } } T{ ##inc { loc R -2 } } }
+ { T{ ##inc { loc D: 4 } } T{ ##inc { loc R: -2 } } }
} [
{ { 0 4 } { 0 -2 } } height-state>insns
] unit-test
-{ H{ { D -1 40 } } } [
- D 1 inc-stack 40 D 0 replace-loc replaces get
+{ H{ { D: -1 40 } } } [
+ D: 1 inc-stack 40 D: 0 replace-loc replaces get
] cfg-unit-test
{
{ { 0 { } } { 0 { } } }
} [
- { { 3 { 0 } } { 0 { } } } T{ ##inc { loc D -3 } } visit-insn
+ { { 3 { 0 } } { 0 { } } } T{ ##inc { loc D: -3 } } visit-insn
] unit-test
{
{ { 3 { 0 1 2 } } { 0 { } } }
} [
- { { 0 { } } { 0 { } } } T{ ##inc { loc D 3 } } visit-insn
+ { { 0 { } } { 0 { } } } T{ ##inc { loc D: 3 } } visit-insn
] unit-test
! visit-insn ##call
{
{ { 3 { 0 } } { 0 { } } }
} [
- { { 3 { 0 } } { 0 { } } } T{ ##peek { dst 1 } { loc D 1 } } visit-insn
+ { { 3 { 0 } } { 0 { } } } T{ ##peek { dst 1 } { loc D: 1 } } visit-insn
] unit-test
! After a ##peek that can cause a stack underflow, it is certain that
{ { 0 { } } { 2 { } } }
{ { 2 { } } { 0 { } } }
} [
- { { 0 { } } { 2 { 0 1 } } } T{ ##peek { dst 1 } { loc R 2 } } visit-insn
- { { 2 { 0 1 } } { 0 { } } } T{ ##peek { dst 1 } { loc D 2 } } visit-insn
+ { { 0 { } } { 2 { 0 1 } } } T{ ##peek { dst 1 } { loc R: 2 } } visit-insn
+ { { 2 { 0 1 } } { 0 { } } } T{ ##peek { dst 1 } { loc D: 2 } } visit-insn
] unit-test
! If the ##peek can't cause a stack underflow, then we don't have the
! same guarantees.
[
- { { 3 { 0 1 2 } } { 0 { } } } T{ ##peek { dst 1 } { loc D 0 } } visit-insn
+ { { 3 { 0 1 2 } } { 0 { } } } T{ ##peek { dst 1 } { loc D: 0 } } visit-insn
] [ vacant-peek? ] must-fail-with
: following-stack-state ( insns -- state )
}
} [
{
- T{ ##inc f D 2 }
- T{ ##peek f f D 2 }
- T{ ##inc f D 0 }
+ T{ ##inc f D: 2 }
+ T{ ##peek f f D: 2 }
+ T{ ##inc f D: 0 }
} insns>cfg trace-stack-state2
] unit-test
}
} [
V{
- T{ ##inc f D 3 }
- T{ ##peek { loc D 3 } }
+ T{ ##inc f D: 3 }
+ T{ ##peek { loc D: 3 } }
T{ ##branch }
}
insns>cfg trace-stack-state2
: cfg1 ( -- cfg )
V{
- T{ ##inc f D 1 }
- T{ ##replace { src 10 } { loc D 0 } }
+ T{ ##inc f D: 1 }
+ T{ ##replace { src 10 } { loc D: 0 } }
} 0 insns>block
V{
- T{ ##peek { dst 37 } { loc D 0 } }
- T{ ##inc f D -1 }
+ T{ ##peek { dst 37 } { loc D: 0 } }
+ T{ ##inc f D: -1 }
} 1 insns>block
1vector >>successors block>cfg ;
{ 0 V{ T{ ##safepoint } T{ ##prologue } T{ ##branch } } }
{
1 V{
- T{ ##inc f D 2 }
- T{ ##replace { src 0 } { loc D 1 } }
- T{ ##replace { src 0 } { loc D 0 } }
+ T{ ##inc f D: 2 }
+ T{ ##replace { src 0 } { loc D: 1 } }
+ T{ ##replace { src 0 } { loc D: 0 } }
}
}
{
}
{
3 V{
- T{ ##peek { dst 0 } { loc D 0 } }
- T{ ##peek { dst 0 } { loc D 1 } }
- T{ ##inc f D 2 }
- T{ ##replace { src 0 } { loc D 2 } }
- T{ ##replace { src 0 } { loc D 3 } }
- T{ ##replace { src 0 } { loc D 1 } }
+ T{ ##peek { dst 0 } { loc D: 0 } }
+ T{ ##peek { dst 0 } { loc D: 1 } }
+ T{ ##inc f D: 2 }
+ T{ ##replace { src 0 } { loc D: 2 } }
+ T{ ##replace { src 0 } { loc D: 3 } }
+ T{ ##replace { src 0 } { loc D: 1 } }
}
}
{
8 V{
- T{ ##peek { dst 0 } { loc D 2 } }
- T{ ##peek { dst 0 } { loc D 1 } }
- T{ ##inc f D 3 }
- T{ ##replace { src 0 } { loc D 0 } }
- T{ ##replace { src 0 } { loc D 1 } }
- T{ ##replace { src 0 } { loc D 2 } }
- T{ ##replace { src 0 } { loc D 3 } }
+ T{ ##peek { dst 0 } { loc D: 2 } }
+ T{ ##peek { dst 0 } { loc D: 1 } }
+ T{ ##inc f D: 3 }
+ T{ ##replace { src 0 } { loc D: 0 } }
+ T{ ##replace { src 0 } { loc D: 1 } }
+ T{ ##replace { src 0 } { loc D: 2 } }
+ T{ ##replace { src 0 } { loc D: 3 } }
}
}
{
10 V{
- T{ ##inc f D -3 }
- T{ ##peek { dst 0 } { loc D 0 } }
+ T{ ##inc f D: -3 }
+ T{ ##peek { dst 0 } { loc D: 0 } }
T{ ##alien-invoke { gc-map T{ gc-map { scrub-d { } } } } }
}
}
{ 0 V{ } }
{
1 V{
- T{ ##inc f D 3 }
- T{ ##replace { src 0 } { loc D 2 } }
- T{ ##replace { src 0 } { loc D 0 } }
- T{ ##replace { src 0 } { loc D 1 } }
+ T{ ##inc f D: 3 }
+ T{ ##replace { src 0 } { loc D: 2 } }
+ T{ ##replace { src 0 } { loc D: 0 } }
+ T{ ##replace { src 0 } { loc D: 1 } }
}
}
{
}
{
3 V{
- T{ ##peek { dst 0 } { loc D 1 } }
- T{ ##peek { dst 0 } { loc D 0 } }
- T{ ##inc f D 1 }
- T{ ##inc f R 1 }
- T{ ##replace { src 0 } { loc R 0 } }
+ T{ ##peek { dst 0 } { loc D: 1 } }
+ T{ ##peek { dst 0 } { loc D: 0 } }
+ T{ ##inc f D: 1 }
+ T{ ##inc f R: 1 }
+ T{ ##replace { src 0 } { loc R: 0 } }
}
}
{
}
{
5 V{
- T{ ##inc f D -2 }
- T{ ##inc f R 5 }
- T{ ##replace { src 0 } { loc R 3 } }
- T{ ##replace { src 0 } { loc D 0 } }
- T{ ##replace { src 0 } { loc R 4 } }
- T{ ##replace { src 0 } { loc R 2 } }
- T{ ##replace { src 0 } { loc R 1 } }
- T{ ##replace { src 0 } { loc R 0 } }
+ T{ ##inc f D: -2 }
+ T{ ##inc f R: 5 }
+ T{ ##replace { src 0 } { loc R: 3 } }
+ T{ ##replace { src 0 } { loc D: 0 } }
+ T{ ##replace { src 0 } { loc R: 4 } }
+ T{ ##replace { src 0 } { loc R: 2 } }
+ T{ ##replace { src 0 } { loc R: 1 } }
+ T{ ##replace { src 0 } { loc R: 0 } }
}
}
{
}
{
7 V{
- T{ ##peek { dst 0 } { loc D 0 } }
- T{ ##peek { dst 0 } { loc R 3 } }
- T{ ##peek { dst 0 } { loc R 2 } }
- T{ ##peek { dst 0 } { loc R 1 } }
- T{ ##peek { dst 0 } { loc R 0 } }
- T{ ##peek { dst 0 } { loc R 4 } }
- T{ ##inc f D 2 }
- T{ ##inc f R -5 }
+ T{ ##peek { dst 0 } { loc D: 0 } }
+ T{ ##peek { dst 0 } { loc R: 3 } }
+ T{ ##peek { dst 0 } { loc R: 2 } }
+ T{ ##peek { dst 0 } { loc R: 1 } }
+ T{ ##peek { dst 0 } { loc R: 0 } }
+ T{ ##peek { dst 0 } { loc R: 4 } }
+ T{ ##inc f D: 2 }
+ T{ ##inc f R: -5 }
}
}
{ 8 V{ } }
}
{
12 V{
- T{ ##peek { dst 0 } { loc R 0 } }
- T{ ##inc f D -3 }
- T{ ##inc f D 1 }
- T{ ##inc f R -1 }
- T{ ##replace { src 0 } { loc D 0 } }
+ T{ ##peek { dst 0 } { loc R: 0 } }
+ T{ ##inc f D: -3 }
+ T{ ##inc f D: 1 }
+ T{ ##inc f R: -1 }
+ T{ ##replace { src 0 } { loc D: 0 } }
}
}
{
{ 25 { { 2 { } } { 6 { } } } }
{ 26 { { 4 { 0 1 } } { 6 { } } } }
{ 27 { { 4 { 0 1 } } { 1 { } } } }
- ! gc-map here scrubbing D 0 and D 1
+ ! gc-map here scrubbing D: 0 and D: 1
{ 28 { { 4 { 0 1 } } { 1 { } } } }
{ 29 { { 4 { 0 1 } } { 1 { } } } }
{ 30 { { 1 { } } { 1 { } } } }
{ 0 V{ } }
{
1 V{
- T{ ##peek { loc D 0 } }
- T{ ##peek { loc D 1 } }
- T{ ##inc { loc D -1 } }
+ T{ ##peek { loc D: 0 } }
+ T{ ##peek { loc D: 1 } }
+ T{ ##inc { loc D: -1 } }
}
}
{
2 V{
- T{ ##inc { loc D -1 } }
- T{ ##replace { loc D 1 } }
- T{ ##replace { loc D 0 } }
- T{ ##inc { loc D 1 } }
- T{ ##replace { loc D 0 } }
+ T{ ##inc { loc D: -1 } }
+ T{ ##replace { loc D: 1 } }
+ T{ ##replace { loc D: 0 } }
+ T{ ##inc { loc D: 1 } }
+ T{ ##replace { loc D: 0 } }
}
}
{ 3 V{ T{ ##call } } }
{ 4 V{ } }
{ 5 V{ T{ ##call } } }
- { 6 V{ T{ ##peek { loc D 0 } } } }
+ { 6 V{ T{ ##peek { loc D: 0 } } } }
{ 7 V{ } }
{
8 V{
- T{ ##replace { loc D 2 } }
- T{ ##replace { loc D 1 } }
- T{ ##replace { loc D 0 } }
+ T{ ##replace { loc D: 2 } }
+ T{ ##replace { loc D: 1 } }
+ T{ ##replace { loc D: 0 } }
}
}
{ 9 V{ T{ ##call } } }
{
10 V{
- T{ ##inc { loc D 1 } }
- T{ ##replace { loc D 0 } }
+ T{ ##inc { loc D: 1 } }
+ T{ ##replace { loc D: 0 } }
}
}
{ 11 V{ T{ ##call } } }
{ 12 V{ } }
{ 13 V{ T{ ##call } } }
- { 14 V{ T{ ##peek { loc D 0 } } } }
+ { 14 V{ T{ ##peek { loc D: 0 } } } }
{ 15 V{ } }
{
16 V{
- T{ ##inc { loc D 1 } }
- T{ ##replace { loc D 0 } }
+ T{ ##inc { loc D: 1 } }
+ T{ ##replace { loc D: 0 } }
}
}
{ 17 V{ T{ ##call } } }
{
18 V{
- T{ ##peek { loc D 2 } }
- T{ ##peek { loc D 1 } }
- T{ ##peek { loc D 0 } }
- T{ ##inc { loc D 1 } }
+ T{ ##peek { loc D: 2 } }
+ T{ ##peek { loc D: 1 } }
+ T{ ##peek { loc D: 0 } }
+ T{ ##inc { loc D: 1 } }
}
}
{ 19 V{ } }
{ 20 V{ } }
{
21 V{
- T{ ##inc { loc D -3 } }
- T{ ##replace { loc D 0 } }
+ T{ ##inc { loc D: -3 } }
+ T{ ##replace { loc D: 0 } }
}
}
{ 22 V{ T{ ##call } } }
{ 24 V{ T{ ##call } } }
{
25 V{
- T{ ##peek { loc D 0 } }
- T{ ##inc { loc D 3 } }
+ T{ ##peek { loc D: 0 } }
+ T{ ##inc { loc D: 3 } }
}
}
{ 26 V{ } }
{ 31 V{ } }
{
32 V{
- T{ ##inc { loc D -4 } }
- T{ ##inc { loc D 1 } }
- T{ ##replace { loc D 0 } }
+ T{ ##inc { loc D: -4 } }
+ T{ ##inc { loc D: 1 } }
+ T{ ##replace { loc D: 0 } }
}
}
{ 33 V{ } }
{ 22 { { -1 { } } { 0 { } } } }
{ 23 { { -1 { } } { 0 { } } } }
{ 24 { { -1 { } } { 0 { } } } }
- ! gc-map here scrubbing D 0, D 1 and D 2
+ ! gc-map here scrubbing D: 0, D: 1 and D: 2
{ 25 { { 2 { 0 1 2 } } { 0 { } } } }
{ 26 { { 2 { 0 1 2 } } { 0 { } } } }
{ 27 { { -2 { } } { 0 { } } } }
{
{ { 1 { 0 } } { 0 { } } }
-} [ V{ T{ ##inc f D 1 } } following-stack-state ] unit-test
+} [ V{ T{ ##inc f D: 1 } } following-stack-state ] unit-test
{
{ { 0 { } } { 1 { 0 } } }
-} [ V{ T{ ##inc f R 1 } } following-stack-state ] unit-test
+} [ V{ T{ ##inc f R: 1 } } following-stack-state ] unit-test
! Here the peek refers to a parameter of the word.
{
{ { 0 { } } { 0 { } } }
} [
V{
- T{ ##peek { loc D 25 } }
+ T{ ##peek { loc D: 25 } }
} following-stack-state
] unit-test
{ { 0 { } } { 0 { } } }
} [
V{
- T{ ##replace { src 10 } { loc D 0 } }
- T{ ##replace { src 10 } { loc D 1 } }
- T{ ##replace { src 10 } { loc D 2 } }
+ T{ ##replace { src 10 } { loc D: 0 } }
+ T{ ##replace { src 10 } { loc D: 1 } }
+ T{ ##replace { src 10 } { loc D: 2 } }
} following-stack-state
] unit-test
{ { 1 { } } { 0 { } } }
} [
V{
- T{ ##replace { src 10 } { loc D 0 } }
- T{ ##inc f D 1 }
- T{ ##replace { src 10 } { loc D 0 } }
+ T{ ##replace { src 10 } { loc D: 0 } }
+ T{ ##inc f D: 1 }
+ T{ ##replace { src 10 } { loc D: 0 } }
} following-stack-state
] unit-test
{ { 0 { } } { 0 { } } }
} [
V{
- T{ ##replace { src 10 } { loc D 0 } }
- T{ ##inc f D 1 }
- T{ ##replace { src 10 } { loc D 0 } }
- T{ ##inc f D -1 }
+ T{ ##replace { src 10 } { loc D: 0 } }
+ T{ ##inc f D: 1 }
+ T{ ##replace { src 10 } { loc D: 0 } }
+ T{ ##inc f D: -1 }
} following-stack-state
] unit-test
{ { 0 { } } { 0 { } } }
} [
V{
- T{ ##inc f D 1 }
- T{ ##replace { src 10 } { loc D 0 } }
- T{ ##inc f D -1 }
+ T{ ##inc f D: 1 }
+ T{ ##replace { src 10 } { loc D: 0 } }
+ T{ ##inc f D: -1 }
} following-stack-state
] unit-test
{ { -1 { } } { 0 { } } }
} [
V{
- T{ ##replace { src 10 } { loc D 0 } }
- T{ ##inc f D -1 }
+ T{ ##replace { src 10 } { loc D: 0 } }
+ T{ ##inc f D: -1 }
T{ ##call }
} following-stack-state
] unit-test
! Should not be ok because the value wasn't initialized when gc ran.
[
V{
- T{ ##inc f D 1 }
+ T{ ##inc f D: 1 }
T{ ##alien-invoke { gc-map T{ gc-map { scrub-d { } } } } }
- T{ ##peek { loc D 0 } }
+ T{ ##peek { loc D: 0 } }
} following-stack-state
] [ vacant-peek? ] must-fail-with
[
V{
- T{ ##inc f D 1 }
- T{ ##peek { loc D 0 } }
+ T{ ##inc f D: 1 }
+ T{ ##peek { loc D: 0 } }
} following-stack-state
] [ vacant-peek? ] must-fail-with
[
V{
- T{ ##inc f R 1 }
- T{ ##peek { loc R 0 } }
+ T{ ##inc f R: 1 }
+ T{ ##peek { loc R: 0 } }
} following-stack-state
] [ vacant-peek? ] must-fail-with
IN: compiler.cfg.stacks.tests
{
- H{ { D 1 4 } { D 2 3 } { D 0 5 } }
+ H{ { D: 1 4 } { D: 2 3 } { D: 0 5 } }
{ { 0 0 } { 0 0 } }
} [
{ 3 4 5 } ds-loc store-vregs
] cfg-unit-test
! stack-locs
-{ { D 4 D 3 D 2 D 1 D 0 } } [
+{ { D: 4 D: 3 D: 2 D: 1 D: 0 } } [
ds-loc 5 stack-locs >array
] unit-test
over length stack-locs [ replace-loc ] 2each ;
! Utility
-: ds-drop ( -- ) D -1 inc-stack ;
+: ds-drop ( -- ) D: -1 inc-stack ;
-: ds-peek ( -- vreg ) D 0 peek-loc ;
+: ds-peek ( -- vreg ) D: 0 peek-loc ;
: ds-pop ( -- vreg ) ds-peek ds-drop ;
: ds-push ( vreg -- )
- D 1 inc-stack D 0 replace-loc ;
+ D: 1 inc-stack D: 0 replace-loc ;
: (2inputs) ( -- vreg1 vreg2 )
2 ds-loc (load-vregs) first2 ;
ARTICLE: "compiler.cfg.stacks.vacant" "Uninitialized/overinitialized stack location analysis"
"Consider the following sequence of instructions:"
{ $code
- "##inc D 2"
+ "##inc D: 2"
"..."
"##allot"
- "##replace ... D 0"
- "##replace ... D 1"
+ "##replace ... D: 0"
+ "##replace ... D: 1"
}
"The GC check runs before stack locations 0 and 1 have been initialized, and so the GC needs to scrub them so that they don't get traced. This is achieved by computing uninitialized locations with a dataflow analysis, and recording the information in GC maps. The call_frame_slot_visitor object in vm/slot_visitor.hpp reads this information from GC maps and performs the scrubbing." ;
[
{
T{ ##load-integer f 0 10 }
- T{ ##replace-imm f 10 D 0 }
+ T{ ##replace-imm f 10 D: 0 }
}
] [
{
T{ ##load-integer f 0 10 }
- T{ ##replace f 0 D 0 }
+ T{ ##replace f 0 D: 0 }
} value-numbering-step
] unit-test
[
{
T{ ##load-reference f 0 f }
- T{ ##replace-imm f f D 0 }
+ T{ ##replace-imm f f D: 0 }
}
] [
{
T{ ##load-reference f 0 f }
- T{ ##replace f 0 D 0 }
+ T{ ##replace f 0 D: 0 }
} value-numbering-step
] unit-test
] when
[
{
T{ ##load-reference f 0 + }
- T{ ##replace-imm f + D 0 }
+ T{ ##replace-imm f + D: 0 }
}
] [
{
T{ ##load-reference f 0 + }
- T{ ##replace f 0 D 0 }
+ T{ ##replace f 0 D: 0 }
} value-numbering-step
] unit-test
] when
[
{
T{ ##load-integer f 0 10,000,000,000 }
- T{ ##replace f 0 D 0 }
+ T{ ##replace f 0 D: 0 }
}
] [
{
T{ ##load-integer f 0 10,000,000,000 }
- T{ ##replace f 0 D 0 }
+ T{ ##replace f 0 D: 0 }
} value-numbering-step
] unit-test
[
{
T{ ##load-integer f 0 0x7fffffff }
- T{ ##replace f 0 D 0 }
+ T{ ##replace f 0 D: 0 }
}
] [
{
T{ ##load-integer f 0 0x7fffffff }
- T{ ##replace f 0 D 0 }
+ T{ ##replace f 0 D: 0 }
} value-numbering-step
] unit-test
] when
! Double compare elimination
{
{
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
T{ ##compare f 4 2 1 cc= }
T{ ##copy f 6 4 any-rep }
- T{ ##replace f 6 D 0 }
+ T{ ##replace f 6 D: 0 }
}
} [
{
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
T{ ##compare f 4 2 1 cc= }
T{ ##compare-imm f 6 4 f cc/= }
- T{ ##replace f 6 D 0 }
+ T{ ##replace f 6 D: 0 }
} value-numbering-step trim-temps
] unit-test
{
{
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 1 D: 1 }
T{ ##compare-imm f 2 1 16 cc= }
T{ ##copy f 3 2 any-rep }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
}
} [
{
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 1 D: 1 }
T{ ##compare-imm f 2 1 16 cc= }
T{ ##compare-imm f 3 2 f cc/= }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
} value-numbering-step trim-temps
] unit-test
{
{
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
T{ ##compare-integer f 4 2 1 cc> }
T{ ##copy f 6 4 any-rep }
- T{ ##replace f 6 D 0 }
+ T{ ##replace f 6 D: 0 }
}
} [
{
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
T{ ##compare-integer f 4 2 1 cc> }
T{ ##compare-imm f 6 4 f cc/= }
- T{ ##replace f 6 D 0 }
+ T{ ##replace f 6 D: 0 }
} value-numbering-step trim-temps
] unit-test
{
{
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
T{ ##compare-integer f 4 2 1 cc<= }
T{ ##compare-integer f 6 2 1 cc/<= }
- T{ ##replace f 6 D 0 }
+ T{ ##replace f 6 D: 0 }
}
} [
{
- T{ ##peek f 1 D 1 }
- T{ ##peek f 2 D 2 }
+ T{ ##peek f 1 D: 1 }
+ T{ ##peek f 2 D: 2 }
T{ ##compare-integer f 4 2 1 cc<= }
T{ ##compare-imm f 6 4 f cc= }
- T{ ##replace f 6 D 0 }
+ T{ ##replace f 6 D: 0 }
} value-numbering-step trim-temps
] unit-test
{
{
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 1 D: 1 }
T{ ##compare-integer-imm f 2 1 100 cc<= }
T{ ##compare-integer-imm f 3 1 100 cc/<= }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
}
} [
{
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 1 D: 1 }
T{ ##compare-integer-imm f 2 1 100 cc<= }
T{ ##compare-imm f 3 2 f cc= }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
} value-numbering-step trim-temps
] unit-test
{
{
- T{ ##peek f 8 D 0 }
- T{ ##peek f 9 D -1 }
+ T{ ##peek f 8 D: 0 }
+ T{ ##peek f 9 D: -1 }
T{ ##compare-float-unordered f 12 8 9 cc< }
T{ ##compare-float-unordered f 14 8 9 cc/< }
- T{ ##replace f 14 D 0 }
+ T{ ##replace f 14 D: 0 }
}
} [
{
- T{ ##peek f 8 D 0 }
- T{ ##peek f 9 D -1 }
+ T{ ##peek f 8 D: 0 }
+ T{ ##peek f 9 D: -1 }
T{ ##compare-float-unordered f 12 8 9 cc< }
T{ ##compare-imm f 14 12 f cc= }
- T{ ##replace f 14 D 0 }
+ T{ ##replace f 14 D: 0 }
} value-numbering-step trim-temps
] unit-test
{
{
- T{ ##peek f 29 D -1 }
- T{ ##peek f 30 D -2 }
+ T{ ##peek f 29 D: -1 }
+ T{ ##peek f 30 D: -2 }
T{ ##compare f 33 29 30 cc= }
T{ ##compare-branch f 29 30 cc= }
}
} [
{
- T{ ##peek f 29 D -1 }
- T{ ##peek f 30 D -2 }
+ T{ ##peek f 29 D: -1 }
+ T{ ##peek f 30 D: -2 }
T{ ##compare f 33 29 30 cc= }
T{ ##compare-imm-branch f 33 f cc/= }
} value-numbering-step trim-temps
{
{
- T{ ##peek f 29 D -1 }
- T{ ##peek f 30 D -2 }
+ T{ ##peek f 29 D: -1 }
+ T{ ##peek f 30 D: -2 }
T{ ##compare-integer f 33 29 30 cc<= }
T{ ##compare-integer-branch f 29 30 cc<= }
}
} [
{
- T{ ##peek f 29 D -1 }
- T{ ##peek f 30 D -2 }
+ T{ ##peek f 29 D: -1 }
+ T{ ##peek f 30 D: -2 }
T{ ##compare-integer f 33 29 30 cc<= }
T{ ##compare-imm-branch f 33 f cc/= }
} value-numbering-step trim-temps
{
{
- T{ ##peek f 29 D -1 }
- T{ ##peek f 30 D -2 }
+ T{ ##peek f 29 D: -1 }
+ T{ ##peek f 30 D: -2 }
T{ ##test f 33 29 30 cc= }
T{ ##test-branch f 29 30 cc= }
}
} [
{
- T{ ##peek f 29 D -1 }
- T{ ##peek f 30 D -2 }
+ T{ ##peek f 29 D: -1 }
+ T{ ##peek f 30 D: -2 }
T{ ##test f 33 29 30 cc= }
T{ ##compare-imm-branch f 33 f cc/= }
} value-numbering-step trim-temps
{
{
- T{ ##peek f 29 D -1 }
+ T{ ##peek f 29 D: -1 }
T{ ##test-imm f 33 29 30 cc= }
T{ ##test-imm-branch f 29 30 cc= }
}
} [
{
- T{ ##peek f 29 D -1 }
+ T{ ##peek f 29 D: -1 }
T{ ##test-imm f 33 29 30 cc= }
T{ ##compare-imm-branch f 33 f cc/= }
} value-numbering-step trim-temps
{
{
- T{ ##peek f 1 D -1 }
+ T{ ##peek f 1 D: -1 }
T{ ##test-vector f 2 1 f float-4-rep vcc-any }
T{ ##test-vector-branch f 1 f float-4-rep vcc-any }
}
} [
{
- T{ ##peek f 1 D -1 }
+ T{ ##peek f 1 D: -1 }
T{ ##test-vector f 2 1 f float-4-rep vcc-any }
T{ ##compare-imm-branch f 2 f cc/= }
} value-numbering-step trim-temps
cpu x86.32? [
[
{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##compare-imm f 2 1 + cc= }
T{ ##compare-imm-branch f 1 + cc= }
}
] [
{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##compare-imm f 2 1 + cc= }
T{ ##compare-imm-branch f 2 f cc/= }
} value-numbering-step trim-temps
! Immediate operand fusion
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##add-imm f 2 0 100 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##add f 2 0 1 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##add-imm f 2 0 100 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##add f 2 1 0 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##add-imm f 2 0 -100 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##sub f 2 0 1 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##sub f 1 0 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##mul-imm f 2 0 100 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##mul f 2 0 1 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##mul-imm f 2 0 100 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##mul f 2 1 0 }
} value-numbering-step
{
{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##shl-imm f 2 1 3 }
}
} [
{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##mul-imm f 2 1 8 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 -1 }
T{ ##neg f 2 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 -1 }
T{ ##mul f 2 0 1 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 -1 }
T{ ##neg f 2 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 -1 }
T{ ##mul f 2 1 0 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 0 }
T{ ##neg f 2 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 0 }
T{ ##sub f 2 1 0 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 0 }
T{ ##neg f 2 0 }
T{ ##copy f 3 0 any-rep }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 0 }
T{ ##sub f 2 1 0 }
T{ ##sub f 3 1 2 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##neg f 1 0 }
T{ ##copy f 2 0 any-rep }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##neg f 1 0 }
T{ ##neg f 2 1 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##not f 1 0 }
T{ ##copy f 2 0 any-rep }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##not f 1 0 }
T{ ##not f 2 1 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##and-imm f 2 0 100 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##and f 2 0 1 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##and-imm f 2 0 100 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##and f 2 1 0 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##or-imm f 2 0 100 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##or f 2 0 1 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##or-imm f 2 0 100 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##or f 2 1 0 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##xor-imm f 2 0 100 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##xor f 2 0 1 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##xor-imm f 2 0 100 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##xor f 2 1 0 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##compare-imm f 2 0 100 cc= }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##compare f 2 0 1 cc= }
} value-numbering-step trim-temps
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##compare-integer-imm f 2 0 100 cc<= }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##compare-integer f 2 0 1 cc<= }
} value-numbering-step trim-temps
cpu x86.32? [
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 + }
T{ ##compare-imm f 2 0 + cc= }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 + }
T{ ##compare f 2 0 1 cc= }
} value-numbering-step trim-temps
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 + }
T{ ##compare-imm-branch f 0 + cc= }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 + }
T{ ##compare-branch f 0 1 cc= }
} value-numbering-step trim-temps
cpu x86.32? [
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 3.5 }
T{ ##compare f 2 0 1 cc= }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 3.5 }
T{ ##compare f 2 0 1 cc= }
} value-numbering-step trim-temps
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 3.5 }
T{ ##compare-branch f 0 1 cc= }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 3.5 }
T{ ##compare-branch f 0 1 cc= }
} value-numbering-step trim-temps
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##compare-integer-imm f 2 0 100 cc>= }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##compare-integer f 2 1 0 cc<= }
} value-numbering-step trim-temps
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##compare-integer-imm-branch f 0 100 cc<= }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##compare-integer-branch f 0 1 cc<= }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##compare-integer-imm-branch f 0 100 cc>= }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##compare-integer-branch f 1 0 cc<= }
} value-numbering-step trim-temps
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 f }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer f 1 0 0 cc< }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##copy f 1 0 any-rep }
T{ ##load-reference f 2 f }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##copy f 1 0 any-rep }
T{ ##compare-integer f 2 0 1 cc< }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 t }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer f 1 0 0 cc<= }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 f }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer f 1 0 0 cc> }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 t }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer f 1 0 0 cc>= }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 f }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer f 1 0 0 cc/= }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 t }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer f 1 0 0 cc= }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 t }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare f 1 0 0 cc= }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 f }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare f 1 0 0 cc/= }
} value-numbering-step
] unit-test
! Rewriting a ##test of an ##and into a ##test
{
{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##and f 2 0 1 }
T{ ##test f 3 0 1 cc= }
}
} [
{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##and f 2 0 1 }
T{ ##test f 3 2 2 cc= }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##and-imm f 2 0 12 }
T{ ##test-imm f 3 0 12 cc= }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##and-imm f 2 0 12 }
T{ ##test f 3 2 2 cc= }
} value-numbering-step
! Rewriting ##test into ##test-imm
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 10 }
T{ ##test-imm f 2 0 10 cc= }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 10 }
T{ ##test f 2 0 1 cc= }
} value-numbering-step trim-temps
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 10 }
T{ ##test-imm f 2 0 10 cc= }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 10 }
T{ ##test f 2 1 0 cc= }
} value-numbering-step trim-temps
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 10 }
T{ ##test-imm-branch f 0 10 cc= }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 10 }
T{ ##test-branch f 0 1 cc= }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 10 }
T{ ##test-imm-branch f 0 10 cc= }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 10 }
T{ ##test-branch f 1 0 cc= }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 10 }
T{ ##test-imm-branch f 0 10 cc= }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 10 }
T{ ##test-branch f 1 0 cc= }
} value-numbering-step
cpu x86.64? [
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100000000000 }
T{ ##test f 2 1 0 cc= }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100000000000 }
T{ ##test f 2 1 0 cc= }
} value-numbering-step
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100000000000 }
T{ ##test-branch f 1 0 cc= }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100000000000 }
T{ ##test-branch f 1 0 cc= }
} value-numbering-step
cpu x86? [
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##test f 1 0 0 cc= }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-imm f 1 0 0 cc= }
} value-numbering-step
] unit-test
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##test f 1 0 0 cc/= }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-imm f 1 0 0 cc/= }
} value-numbering-step
] unit-test
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-imm f 1 0 0 cc<= }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-imm f 1 0 0 cc<= }
} value-numbering-step
] unit-test
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##test-branch f 0 0 cc= }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-imm-branch f 0 0 cc= }
} value-numbering-step
] unit-test
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##test-branch f 0 0 cc/= }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-imm-branch f 0 0 cc/= }
} value-numbering-step
] unit-test
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-imm-branch f 0 0 cc<= }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-imm-branch f 0 0 cc<= }
} value-numbering-step
] unit-test
! Reassociation
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##add-imm f 2 0 100 }
T{ ##load-integer f 3 50 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##add f 2 0 1 }
T{ ##load-integer f 3 50 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##add-imm f 2 0 100 }
T{ ##load-integer f 3 50 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##add f 2 1 0 }
T{ ##load-integer f 3 50 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##add-imm f 2 0 100 }
T{ ##load-integer f 3 50 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##add f 2 0 1 }
T{ ##load-integer f 3 50 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##add-imm f 2 0 -100 }
T{ ##load-integer f 3 50 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##sub f 2 0 1 }
T{ ##load-integer f 3 50 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##mul-imm f 2 0 100 }
T{ ##load-integer f 3 50 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##mul f 2 0 1 }
T{ ##load-integer f 3 50 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##mul-imm f 2 0 100 }
T{ ##load-integer f 3 50 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##mul f 2 1 0 }
T{ ##load-integer f 3 50 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##and-imm f 2 0 100 }
T{ ##load-integer f 3 50 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##and f 2 0 1 }
T{ ##load-integer f 3 50 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##and-imm f 2 0 100 }
T{ ##load-integer f 3 50 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##and f 2 1 0 }
T{ ##load-integer f 3 50 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##or-imm f 2 0 100 }
T{ ##load-integer f 3 50 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##or f 2 0 1 }
T{ ##load-integer f 3 50 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##or-imm f 2 0 100 }
T{ ##load-integer f 3 50 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##or f 2 1 0 }
T{ ##load-integer f 3 50 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##xor-imm f 2 0 100 }
T{ ##load-integer f 3 50 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##xor f 2 0 1 }
T{ ##load-integer f 3 50 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##xor-imm f 2 0 100 }
T{ ##load-integer f 3 50 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 100 }
T{ ##xor f 2 1 0 }
T{ ##load-integer f 3 50 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##shl-imm f 1 0 10 }
T{ ##shl-imm f 2 0 21 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##shl-imm f 1 0 10 }
T{ ##shl-imm f 2 1 11 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##shl-imm f 1 0 10 }
T{ ##shl-imm f 2 1 $[ cell-bits 1 - ] }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##shl-imm f 1 0 10 }
T{ ##shl-imm f 2 1 $[ cell-bits 1 - ] }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##sar-imm f 1 0 10 }
T{ ##sar-imm f 2 0 21 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##sar-imm f 1 0 10 }
T{ ##sar-imm f 2 1 11 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##sar-imm f 1 0 10 }
T{ ##sar-imm f 2 1 $[ cell-bits 1 - ] }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##sar-imm f 1 0 10 }
T{ ##sar-imm f 2 1 $[ cell-bits 1 - ] }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##shr-imm f 1 0 10 }
T{ ##shr-imm f 2 0 21 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##shr-imm f 1 0 10 }
T{ ##shr-imm f 2 1 11 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##shr-imm f 1 0 10 }
T{ ##shr-imm f 2 1 $[ cell-bits 1 - ] }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##shr-imm f 1 0 10 }
T{ ##shr-imm f 2 1 $[ cell-bits 1 - ] }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##shr-imm f 1 0 10 }
T{ ##sar-imm f 2 1 11 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##shr-imm f 1 0 10 }
T{ ##sar-imm f 2 1 11 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##add-imm f 1 0 10 }
T{ ##shl-imm f 3 0 2 }
T{ ##add-imm f 2 3 40 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##add-imm f 1 0 10 }
T{ ##shl-imm f 2 1 2 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##add-imm f 1 0 10 }
T{ ##mul-imm f 4 0 3 }
T{ ##add-imm f 2 4 30 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##add-imm f 1 0 10 }
T{ ##mul-imm f 2 1 3 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##add-imm f 1 0 -10 }
T{ ##shl-imm f 5 0 2 }
T{ ##add-imm f 2 5 -40 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##sub-imm f 1 0 10 }
T{ ##shl-imm f 2 1 2 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##add-imm f 1 0 -10 }
T{ ##mul-imm f 6 0 3 }
T{ ##add-imm f 2 6 -30 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##sub-imm f 1 0 10 }
T{ ##mul-imm f 2 1 3 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
! Simplification
{
{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##copy f 3 0 any-rep }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##add-imm f 3 0 0 }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##copy f 3 0 any-rep }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##or-imm f 3 0 0 }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##copy f 3 0 any-rep }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##xor-imm f 3 0 0 }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##and-imm f 1 0 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##copy f 1 0 any-rep }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##and-imm f 1 0 -1 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##copy f 1 0 any-rep }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##and f 1 0 0 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##copy f 1 0 any-rep }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##or-imm f 1 0 0 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 -1 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##or-imm f 1 0 -1 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##copy f 1 0 any-rep }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##or f 1 0 0 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##copy f 1 0 any-rep }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##xor-imm f 1 0 0 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##not f 1 0 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##xor-imm f 1 0 -1 }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##xor f 1 0 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##copy f 2 0 any-rep }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##mul-imm f 2 0 1 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##copy f 2 0 any-rep }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##shl-imm f 2 0 0 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##copy f 2 0 any-rep }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##shr-imm f 2 0 0 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##copy f 2 0 any-rep }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##sar-imm f 2 0 0 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
! Constant folding
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 1 }
T{ ##load-integer f 2 3 }
T{ ##load-integer f 3 4 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 1 }
T{ ##load-integer f 2 3 }
T{ ##add f 3 1 2 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 1 }
T{ ##load-integer f 2 3 }
T{ ##load-integer f 3 -2 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 1 }
T{ ##load-integer f 2 3 }
T{ ##sub f 3 1 2 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 2 }
T{ ##load-integer f 2 3 }
T{ ##load-integer f 3 6 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 2 }
T{ ##load-integer f 2 3 }
T{ ##mul f 3 1 2 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 2 }
T{ ##load-integer f 2 1 }
T{ ##load-integer f 3 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 2 }
T{ ##load-integer f 2 1 }
T{ ##and f 3 1 2 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 2 }
T{ ##load-integer f 2 1 }
T{ ##load-integer f 3 3 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 2 }
T{ ##load-integer f 2 1 }
T{ ##or f 3 1 2 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 2 }
T{ ##load-integer f 2 3 }
T{ ##load-integer f 3 1 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 2 }
T{ ##load-integer f 2 3 }
T{ ##xor f 3 1 2 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 1 }
T{ ##load-integer f 3 8 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 1 }
T{ ##shl-imm f 3 1 3 }
} value-numbering-step
cell 8 = [
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 -1 }
T{ ##load-integer f 3 0xffffffffffff }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 -1 }
T{ ##shr-imm f 3 1 16 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 -8 }
T{ ##load-integer f 3 -4 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 -8 }
T{ ##sar-imm f 3 1 1 }
} value-numbering-step
cell 8 = [
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 65536 }
T{ ##load-integer f 2 140737488355328 }
T{ ##add f 3 0 2 }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 65536 }
T{ ##shl-imm f 2 1 31 }
T{ ##add f 3 0 2 }
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 2 140737488355328 }
T{ ##add f 3 0 2 }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 2 140737488355328 }
T{ ##add f 3 0 2 }
} value-numbering-step
cpu ppc? [
[
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 2 2147483647 }
T{ ##add-imm f 3 0 2147483647 }
T{ ##add-imm f 4 3 2147483647 }
}
] [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 2 2147483647 }
T{ ##add f 3 0 2 }
T{ ##add f 4 3 2 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 1 }
T{ ##load-integer f 2 -1 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 1 }
T{ ##neg f 2 1 }
} value-numbering-step
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 1 }
T{ ##load-integer f 2 -2 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 1 1 }
T{ ##not f 2 1 }
} value-numbering-step
! Alien boxing and unboxing
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##box-alien f 1 0 }
T{ ##copy f 2 0 any-rep }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##box-alien f 1 0 }
T{ ##unbox-alien f 2 1 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##box-alien f 1 0 }
T{ ##copy f 2 0 any-rep }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##box-alien f 1 0 }
T{ ##unbox-any-c-ptr f 2 1 }
- T{ ##replace f 2 D 0 }
+ T{ ##replace f 2 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 2 0 }
T{ ##copy f 1 0 any-rep }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 2 0 }
T{ ##box-displaced-alien f 1 2 0 c-ptr }
- T{ ##replace f 1 D 0 }
+ T{ ##replace f 1 D: 0 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 2 16 }
T{ ##box-displaced-alien f 1 2 0 c-ptr }
T{ ##unbox-any-c-ptr f 4 0 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 2 16 }
T{ ##box-displaced-alien f 1 2 0 c-ptr }
T{ ##unbox-any-c-ptr f 3 1 }
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 2 0 }
T{ ##copy f 3 0 any-rep }
- T{ ##replace f 3 D 1 }
+ T{ ##replace f 3 D: 1 }
}
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-integer f 2 0 }
T{ ##box-displaced-alien f 3 2 0 c-ptr }
- T{ ##replace f 3 D 1 }
+ T{ ##replace f 3 D: 1 }
} value-numbering-step
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##branch }
}
1
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-branch f 0 0 cc< }
} test-branch-folding
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##branch }
}
0
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-branch f 0 0 cc<= }
} test-branch-folding
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##branch }
}
1
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-branch f 0 0 cc> }
} test-branch-folding
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##branch }
}
0
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-branch f 0 0 cc>= }
} test-branch-folding
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##branch }
}
0
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-branch f 0 0 cc= }
} test-branch-folding
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##branch }
}
1
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-branch f 0 0 cc/= }
} test-branch-folding
] unit-test
{
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##load-reference f 1 t }
T{ ##branch }
}
0
} [
{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare f 1 0 0 cc<= }
T{ ##compare-imm-branch f 1 f cc/= }
} test-branch-folding
V{ T{ ##branch } } 0 test-bb
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##compare-integer-branch f 0 0 cc< }
} 1 test-bb
V{
T{ ##phi f 3 H{ { 2 1 } { 3 2 } } }
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
T{ ##return }
} 4 test-bb
{ 2 } [ 4 get instructions>> length ] unit-test
V{
- T{ ##peek f 0 D 0 }
+ T{ ##peek f 0 D: 0 }
T{ ##branch }
} 0 test-bb
V{
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 1 D: 1 }
T{ ##compare-integer-branch f 1 1 cc< }
} 1 test-bb
} 3 test-bb
V{
- T{ ##replace f 3 D 0 }
+ T{ ##replace f 3 D: 0 }
T{ ##return }
} 4 test-bb
V{ T{ ##prologue } T{ ##branch } } 0 test-bb
V{
- T{ ##peek { dst 15 } { loc D 0 } }
+ T{ ##peek { dst 15 } { loc D: 0 } }
T{ ##copy { dst 16 } { src 15 } { rep any-rep } }
T{ ##copy { dst 17 } { src 15 } { rep any-rep } }
T{ ##copy { dst 18 } { src 15 } { rep any-rep } }
} 2 test-bb
V{
- T{ ##replace { src 25 } { loc D 0 } }
+ T{ ##replace { src 25 } { loc D: 0 } }
T{ ##epilogue }
T{ ##return }
} 3 test-bb
} 4 test-bb
V{
- T{ ##replace { src 28 } { loc D 0 } }
+ T{ ##replace { src 28 } { loc D: 0 } }
T{ ##epilogue }
T{ ##return }
} 5 test-bb
cpu x86? [
[
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##add-imm f 2 1 2 }
T{ ##slot f 3 0 1 $[ cell log2 ] $[ 7 2 cells - ] }
}
] [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##add-imm f 2 1 2 }
T{ ##slot f 3 0 2 $[ cell log2 ] 7 }
} value-numbering-step
! Base offset fusion on ##load/store-memory-imm
{
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##tagged>integer f 2 1 }
T{ ##add-imm f 3 2 10 }
T{ ##load-memory-imm f 4 2 10 int-rep c:uchar }
}
} [
V{
- T{ ##peek f 1 D 0 }
+ T{ ##peek f 1 D: 0 }
T{ ##tagged>integer f 2 1 }
T{ ##add-imm f 3 2 10 }
T{ ##load-memory-imm f 4 3 0 int-rep c:uchar }
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##add-imm f 4 3 10 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##add-imm f 4 3 10 }
! Displacement fusion on ##load/store-memory-imm
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##add f 4 2 3 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##add f 4 2 3 }
{
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##add f 4 2 3 }
}
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##add f 4 2 3 }
cpu x86?
[
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##add-imm f 4 2 31337 }
]
[
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##add-imm f 4 2 31337 }
] ?
[
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##add-imm f 4 2 31337 }
cpu x86?
[
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##add-imm f 4 3 31337 }
]
[
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##add-imm f 4 3 31337 }
] ?
[
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##add-imm f 4 3 31337 }
! ##load/store-memory with non-zero scale
{ } [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##add-imm f 4 3 10 }
${
cpu x86?
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##shl-imm f 4 3 2 }
T{ ##load-memory f 5 2 3 2 0 int-rep c:uchar }
}
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##shl-imm f 4 3 2 }
} ?
} [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##shl-imm f 4 3 2 }
! Don't do scale fusion if there's already a scale
[ ] [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##shl-imm f 4 3 2 }
! Don't do scale fusion if the scale factor is out of range
[ ] [
V{
- T{ ##peek f 0 D 0 }
- T{ ##peek f 1 D 1 }
+ T{ ##peek f 0 D: 0 }
+ T{ ##peek f 1 D: 1 }
T{ ##tagged>integer f 2 0 }
T{ ##tagged>integer f 3 1 }
T{ ##shl-imm f 4 3 4 }
: compile-test-bb ( insns -- result )
V{ T{ ##prologue } T{ ##branch } } [ clone ] map 0 test-bb
V{
- T{ ##inc f D 1 }
- T{ ##replace f 0 D 0 }
+ T{ ##inc f D: 1 }
+ T{ ##replace f 0 D: 0 }
T{ ##branch }
} [ clone ] map append 1 test-bb
V{