compiler.cfg.*: the make-kill-block word is not needed

locals-and-roots
Björn Lindqvist 2016-03-16 12:26:03 +01:00
parent 5ca571e304
commit f906f1c282
5 changed files with 10 additions and 23 deletions

View File

@ -70,10 +70,6 @@ HELP: end-branch
{ $values { "block" basic-block } { "pair/f" "two-tuple" } }
{ $description "pair is { final-bb final-height }" } ;
HELP: make-kill-block
{ $values { "block" basic-block } }
{ $description "Marks the block as a kill block." } ;
HELP: set-basic-block
{ $values { "basic-block" basic-block } }
{ $description "Sets the given blocks as the current one by storing it in the basic-block dynamic variable. If it has any " { $slot "instructions" } " the current " { $link building } " is set to those." } ;

View File

@ -33,11 +33,6 @@ IN: compiler.cfg.builder.blocks.tests
<basic-block> dup set-basic-block ##branch, end-basic-block
] unit-test
! make-kill-block
{ t } [
<basic-block> [ make-kill-block ] keep kill-block?>>
] unit-test
{
{ "succ" "succ" "succ" }
} [

View File

@ -22,14 +22,11 @@ IN: compiler.cfg.builder.blocks
[ swap call ] keep
##branch, begin-basic-block ; inline
: make-kill-block ( block -- )
t swap kill-block?<< ;
: call-height ( #call -- n )
[ out-d>> length ] [ in-d>> length ] bi - ;
: emit-call-block ( word height block -- )
make-kill-block adjust-d ##call, ;
t swap kill-block?<< adjust-d ##call, ;
: emit-trivial-call ( block word height -- block' )
rot [ emit-call-block ] emit-trivial-block ;

View File

@ -37,7 +37,7 @@ GENERIC: emit-node ( block node -- block' )
[ over [ emit-node ] [ drop ] if ] each ;
: begin-word ( block -- block' )
dup make-kill-block
t >>kill-block?
##safepoint, ##prologue, ##branch,
begin-basic-block ;
@ -165,10 +165,8 @@ M: #shuffle emit-node ( block node -- block' )
! #return
: end-word ( block -- block' )
##branch, begin-basic-block
dup make-kill-block
##safepoint,
##epilogue,
##return, ;
t >>kill-block?
##safepoint, ##epilogue, ##return, ;
M: #return emit-node ( block node -- block' )
drop end-word ;

View File

@ -1,19 +1,20 @@
USING: compiler.cfg.instructions compiler.cfg.rpo
compiler.cfg.stack-frame compiler.tree help.markup help.syntax math
namespaces sequences vectors words ;
compiler.cfg.stack-frame compiler.tree help.markup help.syntax kernel
math namespaces sequences vectors words ;
IN: compiler.cfg
HELP: basic-block
{ $class-description
"Factors representation of a basic block in the Call Flow Graph (CFG). A basic block is a sequence of instructions that always are executed sequentially and doesn't contain any branching. It has the following slots:"
"Factors representation of a basic block in the Call Flow Graph (CFG). A basic block is a sequence of instructions that always are executed sequentially and doesn't contain any internal branching. It has the following slots:"
{ $table
{ { $slot "number" } { "The blocks sequence number. Generated by calling " { $link number-blocks } ". " } }
{ { $slot "successors" } { "A " { $link vector } " of basic blocks that may be executed directly after this block. Most blocks only have one successor but a block that checks where an if-condition should branch to would have two for example." } }
{ { $slot "predecessors" } { "The opposite of successors -- a " { $link vector } " of basic blocks from which the execution may have arrived into this block." } }
{ { $slot "instructions" } { "A " { $link vector } " of " { $link insn } " tuples which form the instructions of the basic block." } }
{ { $slot "kill-block?" } { "The first and the last block in a cfg and all blocks containing " { $link ##call } " instructions are kill blocks." } }
{ { $slot "kill-block?" } { "The first and the last block in a cfg and all blocks containing " { $link ##call } " instructions are kill blocks. Kill blocks can't be optimized so they are omitted from certain optimization steps." } }
}
} ;
}
{ $notes "A basic-block is an " { $link identity-tuple } " becase it is used as a hash table key by the compiler." } ;
HELP: <basic-block>
{ $values { "bb" basic-block } }