##load-reference
Basic block instructions

Prev:##load-integer
Next:##load-tagged

Vocabulary
compiler.cfg.instructions

Class description
An instruction for loading a pointer to an object into a register. It has the following slots:
dstRegister to load the pointer into.
objA Factor object.
DefinitionMethods
USING: accessors byte-arrays combinators
compiler.cfg.instructions compiler.cfg.representations.selection
cpu.architecture kernel math ;
M: ##load-reference (collect-vreg-reps)
[ dst>> ] [ obj>> ] bi {
{ [ dup float? ] [ drop { float-rep double-rep } ] }
{ [ dup byte-array? ] [ drop vector-reps ] }
[ drop { } ]
} cond handle-def ;

USING: accessors compiler.cfg.gvn.avail
compiler.cfg.instructions kernel ;
M: ##load-reference >avail-insn-defs [ ] change-dst drop ;

USING: accessors compiler.cfg.gvn.expressions
compiler.cfg.instructions ;
M: ##load-reference >expr obj>> <reference-expr> ;

USING: accessors compiler.cfg.instructions
compiler.cfg.value-numbering.expressions ;
M: ##load-reference >expr obj>> <reference-expr> ;

USING: accessors compiler.cfg.instructions
compiler.cfg.linear-scan.assignment kernel ;
M: ##load-reference assign-insn-defs
[ vreg>reg ] change-dst drop ;

USING: accessors compiler.cfg.instructions
compiler.cfg.representations.rewrite kernel ;
M: ##load-reference convert-insn-defs
[ converted-value ] change-dst drop ;

USING: compiler.cfg.instructions
compiler.cfg.representations.preferred cpu.architecture kernel ;
M: ##load-reference defs-vreg-reps drop { tagged-rep } ;

USING: accessors arrays compiler.cfg.def-use
compiler.cfg.instructions ;
M: ##load-reference defs-vregs dst>> 1array ;

USING: accessors compiler.cfg.instructions compiler.codegen
cpu.architecture kernel ;
M: ##load-reference generate-insn
[ dst>> ] keep [ obj>> ] keep drop %load-reference ;

USING: accessors compiler.cfg.gvn.rewrite
compiler.cfg.instructions ;
M: ##load-reference insn>literal obj>> ;

USING: accessors compiler.cfg.instructions
compiler.cfg.value-numbering.rewrite ;
M: ##load-reference insn>literal obj>> ;

USING: accessors combinators compiler.cfg.instructions
compiler.cfg.registers compiler.cfg.representations.peephole
generic kernel ;
M: ##load-reference optimize-insn
{
{
[ dup convert-to-load-float? ]
[ [ dst>> ] [ obj>> ] bi ##load-float, here ]
}
{
[ dup convert-to-load-double? ]
[ [ dst>> ] [ obj>> ] bi ##load-double, here ]
}
{
[ dup convert-to-zero-vector? ]
[ dst>> dup rep-of ##zero-vector, here ]
}
{
[ dup convert-to-fill-vector? ]
[ dst>> dup rep-of ##fill-vector, here ]
}
{
[ dup convert-to-load-vector? ]
[
[ dst>> ] [ obj>> ] [ dst>> rep-of ] tri
##load-vector, here
]
}
[ M\ ##load-reference optimize-insn (call-next-method) ]
} cond ;

USING: accessors compiler.cfg.instructions compiler.cfg.renaming
kernel ;
M: ##load-reference rename-insn-defs
[ rename-value ] change-dst drop ;

USING: accessors compiler.cfg.instructions
compiler.cfg.ssa.construction.private kernel ;
M: ##load-reference ssa-rename-insn-defs
[ gen-name ] change-dst drop ;