compiler.*: a bunch of random doc additions

char-rename
Björn Lindqvist 2016-06-21 23:15:20 +02:00
parent 4b919b19ce
commit 75a3e191b2
9 changed files with 72 additions and 18 deletions

View File

@ -2,6 +2,10 @@ USING: assocs compiler.cfg compiler.cfg.instructions compiler.cfg.stack-frame
help.markup help.syntax kernel ;
IN: compiler.cfg.build-stack-frame
HELP: build-stack-frame
{ $values { "cfg" cfg } }
{ $description "Main word of the " { $vocab-link "compiler.cfg.build-stack-frame" } " compiler pass." } ;
HELP: compute-stack-frame
{ $values { "cfg" cfg } { "stack-frame/f" stack-frame } }
{ $description "Initializes a stack frame for a cfg, if it needs one." }
@ -20,6 +24,9 @@ HELP: finalize-stack-frame
{ $description "Calculates and stores the " { $slot "allot-area-base" } ", " { $slot "spill-area-base" } " and " { $slot "total-size" } " slots of a stack frame." } ;
ARTICLE: "compiler.cfg.build-stack-frame" "Computing stack frame size and layout"
"The " { $vocab-link "compiler.cfg.build-stack-frame" } " vocab builds stack frames for cfg:s." ;
"The " { $vocab-link "compiler.cfg.build-stack-frame" } " vocab builds stack frames for cfg:s."
$nl
"Main word:"
{ $subsections build-stack-frame } ;
ABOUT: "compiler.cfg.build-stack-frame"

View File

@ -107,6 +107,10 @@ HELP: end-word
}
{ $description "Ends the word by adding a basic block containing a " { $link ##return } " instructions to the " { $link cfg } "." } ;
HELP: height-changes
{ $values { "#shuffle" #shuffle } { "height-changes" sequence } }
{ $description "Returns a two-tuple which represents how much the " { $link #shuffle } " node increases or decreases the data and retainstacks." } ;
HELP: trivial-branch?
{ $values
{ "nodes" "a " { $link sequence } " of " { $link node } " instances" }
@ -130,6 +134,8 @@ ARTICLE: "compiler.cfg.builder"
"Final stage of compilation generates machine code from dataflow IR"
"The compiler first builds an SSA IR tree of the word to be compiled (see " { $vocab-link "compiler.tree.builder" } ") then this vocab converts it to a CFG IR tree. The result is not in SSA form; this is constructed later by calling compiler.cfg.ssa.construction:construct-ssa."
$nl
"Each tree node type has its own implementation of the " { $link emit-node } " generic. In that word, cfg instructions (tuples prefixed with ##) are outputted to basic blocks and the cfg constructed."
$nl
"Main word:"
{ $subsections
build-cfg
@ -161,6 +167,11 @@ $nl
emit-loop
emit-recursive
end-branch
}
"Helpers for " { $link #shuffle } ":"
{
$subsections
height-changes
} ;
ABOUT: "compiler.cfg.builder"

View File

@ -158,7 +158,7 @@ M: #push emit-node ( block node -- block' )
[ make-input-map ] [ mapping>> ] [ extract-outputs ] tri
[ first2 [ [ of of peek-loc ] 2with map ] dip 2array ] 2with map ;
M: #shuffle emit-node ( block node -- block' )
M: #shuffle emit-node ( block node -- block )
[ out-vregs/stack ] keep store-height-changes
[ first2 store-vregs ] each ;

View File

@ -1,8 +1,9 @@
USING: alien arrays assocs byte-arrays classes combinators compiler.cfg
compiler.cfg.intrinsics.fixnum compiler.cfg.linear-scan.assignment
compiler.cfg.liveness compiler.cfg.ssa.destruction compiler.cfg.value-numbering
compiler.codegen.gc-maps cpu.architecture help.markup help.syntax kernel
layouts math sequences slots.private system vm ;
USING: alien arrays assocs byte-arrays classes combinators
compiler.cfg compiler.cfg.builder compiler.cfg.intrinsics.fixnum
compiler.cfg.linear-scan.assignment compiler.cfg.liveness
compiler.cfg.ssa.destruction compiler.cfg.value-numbering
compiler.codegen.gc-maps cpu.architecture help.markup help.syntax
kernel layouts math sequences slots.private system vm ;
IN: compiler.cfg.instructions
HELP: ##alien-invoke
@ -11,7 +12,7 @@ HELP: ##alien-invoke
{ $table
{
{ $slot "reg-inputs" }
{ "Registers to use for the arguments to the function call. Each sequence item is a 3-tuple consisting of a " { $link spill-slot } ", register representation and a register." }
{ "Registers to use for the arguments to the function call. Each sequence item is a 3-tuple consisting of a " { $link spill-slot } ", register representation and a register. When the function is called, the parameter is copied from the spill slot to the given register." }
}
{
{ $slot "stack-inputs" }
@ -83,8 +84,15 @@ HELP: ##compare-float-ordered-branch
}
} ;
HELP: ##compare-imm
{ $class-description "Instruction used to implement trivial ifs and not ifs." }
{ $see-also emit-trivial-if emit-trivial-not-if } ;
HELP: ##compare-imm-branch
{ $class-description "The instruction used to implement branching for the " { $link if } " word." } ;
HELP: ##compare-integer
{ $class-description "This instruction is emitted for integer (" { $link fixnum } ") comparisons." }
{ $class-description "This instruction is emitted for " { $link fixnum } " comparisons." }
{ $see-also emit-fixnum-comparison } ;
HELP: ##copy
@ -132,6 +140,9 @@ HELP: ##load-reference
}
} ;
HELP: ##load-tagged
{ $class-description "Loads a tagged value into a register." } ;
HELP: ##load-vector
{ $class-description
"Loads a " { $link byte-array } " into an SSE register."
@ -245,14 +256,14 @@ HELP: ##shuffle-vector-imm
HELP: ##slot-imm
{ $class-description
"Instruction for reading a slot value from an object."
"Instruction for reading a slot with a given index from an object."
{ $table
{ { $slot "dst" } { "Register to read the slot value into." } }
{ { $slot "obj" } { "Register containing the object with the slot." } }
{ { $slot "slot" } { "Slot index." } }
{ { $slot "tag" } { "Type tag for obj." } }
}
} ;
} { $see-also %slot-imm } ;
HELP: ##spill
{ $class-description "Instruction that copies a value from a register to a " { $link spill-slot } "." } ;
@ -270,6 +281,10 @@ HELP: ##store-memory-imm
}
{ $see-also %store-memory-imm } ;
HELP: ##test-branch
{ $class-description "Instruction inserted by the " { $vocab-link "compiler.cfg.value-numbering" } " compiler pass." }
{ $see-also ##compare-integer-imm-branch } ;
HELP: ##unbox-any-c-ptr
{ $class-description "Instruction that unboxes a pointer in a register so that it can be fed to a C FFI function. For example, if 'src' points to a " { $link byte-array } ", then in 'dst' will be put a pointer to the first byte of that byte array."
{ $table
@ -384,6 +399,7 @@ $nl
}
"Control flow:"
{ $subsections
##branch
##call
##jump
##no-tco
@ -423,6 +439,7 @@ $nl
{ $subsections
##compare
##compare-imm
##compare-imm-branch
##compare-integer
##compare-integer-branch
##compare-integer-imm-branch
@ -435,6 +452,7 @@ $nl
{ $subsections
##load-integer
##load-reference
##load-tagged
}
"Floating point SIMD instructions:"
{ $subsections

View File

@ -1,6 +1,6 @@
USING: assocs compiler.cfg compiler.cfg.instructions
compiler.cfg.registers hash-sets hashtables help.markup help.syntax
sequences ;
compiler.cfg.registers compiler.cfg.stacks hash-sets hashtables
help.markup help.syntax math sequences ;
IN: compiler.cfg.stacks.local
HELP: emit-changes
@ -37,12 +37,22 @@ HELP: loc>vreg
{ $values { "loc" loc } { "vreg" "virtual register" } }
{ $description "Maps a stack location to a virtual register." } ;
HELP: local-kill-set
{ $values
{ "ds-height" integer }
{ "rs-height" integer }
{ "state" sequence }
{ "set" hash-set }
}
{ $description "The set of stack locations that was killed." }
{ $see-also compute-local-kill-set } ;
HELP: local-peek-set
{ $var-description "A " { $link hash-set } " used during local block analysis to keep track of peeked stack locations." } ;
HELP: peek-loc
{ $values { "loc" loc } { "vreg" "virtaul register" } }
{ $description "Retrieves the virtual register at the given stack location." } ;
{ $values { "loc" loc } { "vreg" "virtual register" } }
{ $description "Retrieves the virtual register at the given stack location. If no register has been stored at that location, then a new vreg is returned." } ;
HELP: replace-loc
{ $values { "vreg" "virtual register" } { "loc" loc } }
@ -53,7 +63,7 @@ HELP: replace-sets
{ $var-description "An " { $link assoc } " in which each key is a " { $link basic-block } " and each value a " { $link hash-set } " with locations that were replaced in that block." } ;
HELP: replaces
{ $var-description "An " { $link assoc } " that maps from stack locations to virtual registers that were put on the stack." }
{ $var-description "An " { $link assoc } " that maps from stack locations to virtual registers that were put on the stack during the local analysis phase. " { $link ds-push } " and similar words writes to it." }
{ $see-also replace-loc } ;
HELP: translate-local-loc

View File

@ -5,7 +5,7 @@ IN: compiler.cfg.stacks
HELP: ds-push
{ $values { "vreg" "a virtual register" } }
{ $description "Used when translating the " { $link #push } " SSA node to CFG form for pushing a literal value onto the data stack." } ;
{ $description "Used when translating the " { $link #push } " SSA node to CFG form. The node pushes a literal value onto the data stack." } ;
HELP: begin-stack-analysis
{ $description "Initializes a set of variables related to stack analysis of Factor words." }

View File

@ -49,6 +49,10 @@ HELP: rel-decks-offset
{ $values { "class" "a relocation class" } }
{ $description "Adds a decks offset relocation. It is used for marking cards when emitting write barriers." } ;
HELP: rel-literal
{ $values { "literal" "a literal" } { "class" "a relocation class" } }
{ $description "Adds a refrence to a literal value to the current code offset." } ;
HELP: rel-safepoint
{ $values { "class" "a relocation class" } }
{ $description "Adds a safe point to the " { $link relocation-table } " for the current code offset. This word is used by the " { $link %safepoint } " generator." } ;

View File

@ -64,7 +64,7 @@ HELP: backend
{ $see-also generate } ;
HELP: compiled
{ $var-description { "An " { $link assoc } " used by the optimizing compiler for intermediate storage of generated code. The keys are the labels to the CFG:s and the values the generated code as given by the " { $link generate } " word." } } ;
{ $var-description { "An " { $link assoc } " used by the optimizing compiler for intermediate storage of generated code. The keys are the labels to the CFG:s and the values the generated code as described by the " { $link generate } " word." } } ;
HELP: compile-word
{ $values { "word" word } }

View File

@ -19,6 +19,10 @@ HELP: rt-decks-offset
{ $description "Relocation offset type for the decks table." }
{ $see-also rel-decks-offset } ;
HELP: rt-literal
{ $description "Relocation type for a literal. The literal can be either an immediate such as a fixnum or " { $link f } " or an object reference." }
{ $see-also rel-literal } ;
HELP: string-offset
{ $values { "n" integer } }
{ $description "hm" } ;