dmd.backend.global

Declarations for back end

Compiler implementation of the D programming language.

Public Imports

dmd.backend.evalu8
public import dmd.backend.evalu8;
Undocumented in source.
dmd.backend.debugprint
public import dmd.backend.debugprint;
Undocumented in source.

Members

Functions

REGSIZE
int REGSIZE()

Size of a register in bytes

_align
targ_size_t _align(targ_size_t size, targ_size_t offset)
alignOffset (from dmd.backend.dout)
void alignOffset(int seg, targ_size_t datasize) via public import dmd.backend.dout : outthunk, out_readonly, out_readonly_comdat, out_regcand, writefunc, alignOffset, out_reset, out_readonly_sym, out_string_literal, outdata;

Align segment offset. Input: seg segment to be aligned datasize size in bytes of object to be aligned

baseclass_find (from dmd.backend.symbol)
baseclass_t* baseclass_find(baseclass_t* bm, Classsym* sbase) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Look down baseclass list to find sbase.

baseclass_find_nest (from dmd.backend.symbol)
baseclass_t* baseclass_find_nest(baseclass_t* bm, Classsym* sbase) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;
Undocumented in source.
baseclass_nitems (from dmd.backend.symbol)
int baseclass_nitems(baseclass_t* b) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Calculate number of baseclasses in list.

binary (from dmd.backend.util2)
int binary(const(char)* p, size_t len, const(char)** table, int high) via public import dmd.backend.util2 : binary;
Undocumented in source.
block_appendexp (from dmd.backend.blockopt)
void block_appendexp(block* b, elem* e) via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Append elem to the elems comprising the current block. Read in an expression and put it in curblock.Belem. If there is one already there, create a tree like: , / \ old e

block_calloc (from dmd.backend.blockopt)
block* block_calloc() via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;
Undocumented in source.
block_clearvisit (from dmd.backend.blockopt)
void block_clearvisit() via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Clear visit.

block_compbcount (from dmd.backend.blockopt)
void block_compbcount() via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Compute number of parents (Bcount) of each basic block.

block_endfunc (from dmd.backend.blockopt)
void block_endfunc(int flag) via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Mark end of function. flag: 0 do a "return" 1 do a "return 0"

block_free (from dmd.backend.blockopt)
void block_free(block* b) via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Free a block.

block_goto (from dmd.backend.blockopt)
void block_goto(block* bgoto, block* bnew) via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Goto a block named gotolbl. Start a new block that is labelled by newlbl.

block_goto (from dmd.backend.blockopt)
void block_goto(block* bgoto, block* bnew) via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Goto a block named gotolbl. Start a new block that is labelled by newlbl.

block_goto (from dmd.backend.blockopt)
void block_goto(block* bgoto, block* bnew) via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Goto a block named gotolbl. Start a new block that is labelled by newlbl.

block_goto (from dmd.backend.blockopt)
void block_goto(block* bgoto, block* bnew) via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Goto a block named gotolbl. Start a new block that is labelled by newlbl.

block_init (from dmd.backend.blockopt)
void block_init() via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;
Undocumented in source.
block_next (from dmd.backend.blockopt)
void block_next(Blockx* bctx, int bc, block* bn) via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Finish up this block and start the next one.

block_next (from dmd.backend.blockopt)
void block_next(Blockx* bctx, int bc, block* bn) via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Finish up this block and start the next one.

block_optimizer_free (from dmd.backend.blockopt)
void block_optimizer_free(block* b) via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Free optimizer gathered data.

block_pred (from dmd.backend.blockopt)
void block_pred() via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Build predecessor list (Bpred) for each block.

block_ptr (from dmd.backend.blockopt)
void block_ptr() via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Replace block numbers with block pointers.

block_term (from dmd.backend.blockopt)
void block_term() via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;
block_visit (from dmd.backend.blockopt)
void block_visit(block* b) via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Visit block and each of its predecessors.

blocklist_free (from dmd.backend.blockopt)
void blocklist_free(block** pb) via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Free list of blocks.

blockopt (from dmd.backend.blockopt)
void blockopt(int iter) via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Perform branch optimization on basic blocks.

brcombine (from dmd.backend.blockopt)
void brcombine() via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Try to remove control structure. That is, try to resolve if-else, goto and return statements into &&, || and ?: combinations.

cg87_reset (from dmd.backend.cg87)
void cg87_reset() via public import dmd.backend.cg87 : loadconst, cg87_reset;

Reset statics for another .obj file.

cgcs_term (from dmd.backend.cgcs)
void cgcs_term() via public import dmd.backend.cgcs : comsubs, cgcs_term;
cod3_thunk (from dmd.backend.cod3)
void cod3_thunk(Symbol* sthunk, Symbol* sfunc, uint p, tym_t thisty, uint d, int i, uint d2) via public import dmd.backend.cod3 : cod3_thunk;

Generate code for, and output a thunk.

compdfo (from dmd.backend.blockopt)
void compdfo(Barray!(block*) dfo, block* startblock) via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;

Compute depth first order (DFO). Equivalent to Aho & Ullman Fig. 13.8. Blocks not in dfo[] are unreachable.

comsubs (from dmd.backend.cgcs)
void comsubs() via public import dmd.backend.cgcs : comsubs, cgcs_term;

Do common subexpression elimination for non-optimized builds.

dom (from dmd.backend.gloop)
bool dom(block* A, block* B) via public import dmd.backend.gloop : dom;

Test if block A dominates block B.

doptelem (from dmd.backend.cgelem)
elem* doptelem(elem* e, goal_t goal) via public import dmd.backend.cgelem : doptelem, postoptelem, elemisone;

Optimize and canonicalize an expression tree. Fiddle with double operators so that the rvalue is a pointer (this is needed by the 8086 code generator).

dwarf_CFA_args_size (from dmd.backend.dwarfdbginf)
void dwarf_CFA_args_size(size_t sz) via public import dmd.backend.dwarfdbginf : dwarf_CFA_set_loc, dwarf_CFA_set_reg_offset, dwarf_CFA_offset, dwarf_CFA_args_size;

Set total size of arguments pushed on the stack.

dwarf_CFA_offset (from dmd.backend.dwarfdbginf)
void dwarf_CFA_offset(int reg, int offset) via public import dmd.backend.dwarfdbginf : dwarf_CFA_set_loc, dwarf_CFA_set_reg_offset, dwarf_CFA_offset, dwarf_CFA_args_size;
Undocumented in source.
dwarf_CFA_set_loc (from dmd.backend.dwarfdbginf)
void dwarf_CFA_set_loc(uint location) via public import dmd.backend.dwarfdbginf : dwarf_CFA_set_loc, dwarf_CFA_set_reg_offset, dwarf_CFA_offset, dwarf_CFA_args_size;
Undocumented in source.
dwarf_CFA_set_reg_offset (from dmd.backend.dwarfdbginf)
void dwarf_CFA_set_reg_offset(int reg, int offset) via public import dmd.backend.dwarfdbginf : dwarf_CFA_set_loc, dwarf_CFA_set_reg_offset, dwarf_CFA_offset, dwarf_CFA_args_size;
Undocumented in source.
eecontext_convs (from dmd.backend.ee)
void eecontext_convs(SYMIDX marksi) via public import dmd.backend.ee : eecontext_convs;

///////////////////////////////////

elemisone (from dmd.backend.cgelem)
int elemisone(elem* e) via public import dmd.backend.cgelem : doptelem, postoptelem, elemisone;
err_exit (from dmd.backend.util2)
void err_exit() via public import dmd.backend.util2 : err_exit, ispow2;

Clean up and exit program.

except_gentables (from dmd.backend.eh)
Symbol* except_gentables() via public import dmd.backend.eh : except_gentables;

Generate and output scope table.

exp2_copytotemp (from dmd.backend.elem)
elem* exp2_copytotemp(elem* e) via public import dmd.backend.elem : exp2_copytotemp;

Replace (e) with ((stmp = e),stmp)

freesymtab (from dmd.backend.symbol)
void freesymtab(Symbol** stab, SYMIDX n1, SYMIDX n2) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Free up the symbols stab[n1 .. n2]

go_flag (from dmd.backend.go)
int go_flag(char* cp) via public import dmd.backend.go : go_flag, optfunc;

Parse optimizer command line flag. Input: cp flag string

id_compress (from dmd.backend.compress)
char* id_compress(const(char)* id, int idlen, size_t* plen) via public import dmd.backend.compress : id_compress;

Compress an identifier for name mangling purposes. Format is if ASCII, then it's just the char. If high bit set, then it's a length/offset pair

ispow2 (from dmd.backend.util2)
int ispow2(ulong c) via public import dmd.backend.util2 : err_exit, ispow2;

If c is a power of 2, return that power else -1.

loadconst (from dmd.backend.cg87)
ubyte loadconst(elem* e, int im) via public import dmd.backend.cg87 : loadconst, cg87_reset;

Determine if there is a special 8087 instruction to load constant e. Input: im 0 load real part 1 load imaginary part

meminit_free (from dmd.backend.symbol)
void meminit_free(meminit_t* m) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Delete symbol from symbol table, taking care to delete all children of a symbol. Make sure there are no more forward references (labels, tags). Input: pointer to a symbol

optfunc (from dmd.backend.go)
void optfunc() via public import dmd.backend.go : go_flag, optfunc;

Optimize function.

out_readonly (from dmd.backend.dout)
void out_readonly(Symbol* s) via public import dmd.backend.dout : outthunk, out_readonly, out_readonly_comdat, out_regcand, writefunc, alignOffset, out_reset, out_readonly_sym, out_string_literal, outdata;

Mark a Symbol as going into a read-only segment.

out_readonly_comdat (from dmd.backend.dout)
void out_readonly_comdat(Symbol* s, const(void)* p, uint len, uint nzeros) via public import dmd.backend.dout : outthunk, out_readonly, out_readonly_comdat, out_regcand, writefunc, alignOffset, out_reset, out_readonly_sym, out_string_literal, outdata;

Output Symbol as a readonly comdat.

out_readonly_sym (from dmd.backend.dout)
Symbol* out_readonly_sym(tym_t ty, void* p, int len) via public import dmd.backend.dout : outthunk, out_readonly, out_readonly_comdat, out_regcand, writefunc, alignOffset, out_reset, out_readonly_sym, out_string_literal, outdata;
Undocumented in source.
out_regcand (from dmd.backend.dout)
void out_regcand(symtab_t* psymtab) via public import dmd.backend.dout : outthunk, out_readonly, out_readonly_comdat, out_regcand, writefunc, alignOffset, out_reset, out_readonly_sym, out_string_literal, outdata;

Determine register candidates.

out_reset (from dmd.backend.dout)
void out_reset() via public import dmd.backend.dout : outthunk, out_readonly, out_readonly_comdat, out_regcand, writefunc, alignOffset, out_reset, out_readonly_sym, out_string_literal, outdata;
Undocumented in source.
out_string_literal (from dmd.backend.dout)
Symbol* out_string_literal(const(char)* str, uint len, uint sz) via public import dmd.backend.dout : outthunk, out_readonly, out_readonly_comdat, out_regcand, writefunc, alignOffset, out_reset, out_readonly_sym, out_string_literal, outdata;

Write out a readonly string literal in an implementation-defined manner.

outdata (from dmd.backend.dout)
void outdata(Symbol* s) via public import dmd.backend.dout : outthunk, out_readonly, out_readonly_comdat, out_regcand, writefunc, alignOffset, out_reset, out_readonly_sym, out_string_literal, outdata;

Write out statically allocated data. Input: s symbol to be initialized

outthunk (from dmd.backend.dout)
void outthunk(Symbol* sthunk, Symbol* sfunc, uint p, tym_t thisty, targ_size_t d, int i, targ_size_t d2) via public import dmd.backend.dout : outthunk, out_readonly, out_readonly_comdat, out_regcand, writefunc, alignOffset, out_reset, out_readonly_sym, out_string_literal, outdata;

Output function thunk.

postoptelem (from dmd.backend.cgelem)
void postoptelem(elem* e) via public import dmd.backend.cgelem : doptelem, postoptelem, elemisone;

Do optimizations after bltailrecursion() and before common subexpressions.

rtlsym_init (from dmd.backend.drtlsym)
void rtlsym_init() via public import dmd.backend.drtlsym : rtlsym_init, rtlsym_reset, rtlsym_term;

Initialize rtl symbols.

rtlsym_reset (from dmd.backend.drtlsym)
void rtlsym_reset() via public import dmd.backend.drtlsym : rtlsym_init, rtlsym_reset, rtlsym_term;

Reset the symbols for the case when we are generating multiple .OBJ files from one compile.

rtlsym_term (from dmd.backend.drtlsym)
void rtlsym_term() via public import dmd.backend.drtlsym : rtlsym_init, rtlsym_reset, rtlsym_term;
size
targ_size_t size(tym_t ty)

Get size of ty

symbol_add (from dmd.backend.symbol)
SYMIDX symbol_add(symtab_t symtab, Symbol* s) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;
Undocumented in source.
symbol_add (from dmd.backend.symbol)
SYMIDX symbol_add(symtab_t symtab, Symbol* s) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;
Undocumented in source.
symbol_calloc (from dmd.backend.symbol)
Symbol* symbol_calloc(const(char)[] id) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Create a new symbol.

symbol_copy (from dmd.backend.symbol)
Symbol* symbol_copy(Symbol* s) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Create a copy of a symbol.

symbol_free (from dmd.backend.symbol)
void symbol_free(Symbol* s) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;
Undocumented in source.
symbol_func (from dmd.backend.symbol)
void symbol_func(Symbol* s) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Add in the variants for a function symbol.

symbol_funcalias (from dmd.backend.symbol)
Funcsym* symbol_funcalias(Funcsym* sf) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Create a symbol that is an alias to another function symbol.

symbol_genauto (from dmd.backend.symbol)
Symbol* symbol_genauto(tym_t ty) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Generate symbol into which we can copy the contents of expression e.

symbol_genauto (from dmd.backend.symbol)
Symbol* symbol_genauto(tym_t ty) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Generate symbol into which we can copy the contents of expression e.

symbol_genauto (from dmd.backend.symbol)
Symbol* symbol_genauto(tym_t ty) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Generate symbol into which we can copy the contents of expression e.

symbol_generate (from dmd.backend.symbol)
Symbol* symbol_generate(SC sclass, type* t) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Create a symbol, give it a name, storage class and type.

symbol_ident (from dmd.backend.symbol)
const(char)* symbol_ident(Symbol* s) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Get user name of symbol.

symbol_insert (from dmd.backend.symbol)
SYMIDX symbol_insert(symtab_t symtab, Symbol* s, SYMIDX n) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Insert s into symtab at position n.

symbol_name (from dmd.backend.symbol)
Symbol* symbol_name(const(char)[] name, SC sclass, type* t) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Create a Symbol

symbol_pointerType (from dmd.backend.symbol)
tym_t symbol_pointerType(Symbol* s) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Determine pointer type needed to access a Symbol, essentially what type an OPrelconst should get for that Symbol.

symbol_print (from dmd.backend.symbol)
void symbol_print(Symbol* s) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Type out symbol information.

symbol_reset (from dmd.backend.symbol)
void symbol_reset(Symbol* s) via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;

Reset Symbol so that it's now an "extern" to the next obj file being created.

symbol_term (from dmd.backend.symbol)
void symbol_term() via public import dmd.backend.symbol : symbol_print, symbol_term, symbol_ident, symbol_calloc, symbol_name, symbol_generate, symbol_genauto, symbol_genauto, symbol_genauto, symbol_func, symbol_funcalias, meminit_free, baseclass_find, baseclass_find_nest, baseclass_nitems, symbol_free, symbol_add, symbol_add, symbol_insert, freesymtab, symbol_copy, symbol_reset, symbol_pointerType;
Undocumented in source.
symboldata
Symbol* symboldata(targ_size_t offset, tym_t ty)

Generate symbol of type ty at DATA:offset

writefunc (from dmd.backend.dout)
void writefunc(Symbol* sfunc) via public import dmd.backend.dout : outthunk, out_readonly, out_readonly_comdat, out_regcand, writefunc, alignOffset, out_reset, out_readonly_sym, out_string_literal, outdata;

Optimize function, generate code for it, and write it out.

Static variables

OPTIMIZER (from dmd.backend.var)
char OPTIMIZER; via public import dmd.backend.var : OPTIMIZER, PARSER, globsym, controlc_saw, pointertype, sytab;
Undocumented in source.
PARSER (from dmd.backend.var)
char PARSER; via public import dmd.backend.var : OPTIMIZER, PARSER, globsym, controlc_saw, pointertype, sytab;
Undocumented in source.
bc_goal (from dmd.backend.blockopt)
goal_t[BCMAX] bc_goal; via public import dmd.backend.blockopt : bc_goal, block_calloc, block_init, block_term, block_next, block_next, block_goto, block_goto, block_goto, block_goto, block_ptr, block_pred, block_clearvisit, block_visit, block_compbcount, blocklist_free, block_optimizer_free, block_free, block_appendexp, block_endfunc, brcombine, blockopt, compdfo;
block_last (from dmd.backend.blockopt)
block* block_last; via public import dmd.backend.blockopt : startblock, dfo, curblock, block_last;
Undocumented in source.
controlc_saw (from dmd.backend.var)
int controlc_saw; via public import dmd.backend.var : OPTIMIZER, PARSER, globsym, controlc_saw, pointertype, sytab;
Undocumented in source.
curblock (from dmd.backend.blockopt)
block* curblock; via public import dmd.backend.blockopt : startblock, dfo, curblock, block_last;
Undocumented in source.
debuga (from dmd.backend.var)
char debuga; via public import dmd.backend.var : debuga, debugb, debugc, debugd, debuge, debugf, debugr, debugs, debugt, debugu, debugw, debugx, debugy;

cg - watch assignaddr()

debugb (from dmd.backend.var)
char debugb; via public import dmd.backend.var : debuga, debugb, debugc, debugd, debuge, debugf, debugr, debugs, debugt, debugu, debugw, debugx, debugy;

watch block optimization

debugc (from dmd.backend.var)
char debugc; via public import dmd.backend.var : debuga, debugb, debugc, debugd, debuge, debugf, debugr, debugs, debugt, debugu, debugw, debugx, debugy;

watch code generated

debugd (from dmd.backend.var)
char debugd; via public import dmd.backend.var : debuga, debugb, debugc, debugd, debuge, debugf, debugr, debugs, debugt, debugu, debugw, debugx, debugy;

watch debug information generated

debuge (from dmd.backend.var)
char debuge; via public import dmd.backend.var : debuga, debugb, debugc, debugd, debuge, debugf, debugr, debugs, debugt, debugu, debugw, debugx, debugy;

dump eh info

debugf (from dmd.backend.var)
char debugf; via public import dmd.backend.var : debuga, debugb, debugc, debugd, debuge, debugf, debugr, debugs, debugt, debugu, debugw, debugx, debugy;

trees after dooptim

debugr (from dmd.backend.var)
char debugr; via public import dmd.backend.var : debuga, debugb, debugc, debugd, debuge, debugf, debugr, debugs, debugt, debugu, debugw, debugx, debugy;

watch register allocation

debugs (from dmd.backend.var)
char debugs; via public import dmd.backend.var : debuga, debugb, debugc, debugd, debuge, debugf, debugr, debugs, debugt, debugu, debugw, debugx, debugy;

watch common subexp eliminator

debugt (from dmd.backend.var)
char debugt; via public import dmd.backend.var : debuga, debugb, debugc, debugd, debuge, debugf, debugr, debugs, debugt, debugu, debugw, debugx, debugy;

do test points

debugu (from dmd.backend.var)
char debugu; via public import dmd.backend.var : debuga, debugb, debugc, debugd, debuge, debugf, debugr, debugs, debugt, debugu, debugw, debugx, debugy;
Undocumented in source.
debugw (from dmd.backend.var)
char debugw; via public import dmd.backend.var : debuga, debugb, debugc, debugd, debuge, debugf, debugr, debugs, debugt, debugu, debugw, debugx, debugy;

watch progress

debugx (from dmd.backend.var)
char debugx; via public import dmd.backend.var : debuga, debugb, debugc, debugd, debuge, debugf, debugr, debugs, debugt, debugu, debugw, debugx, debugy;

suppress predefined CPP stuff

debugy (from dmd.backend.var)
char debugy; via public import dmd.backend.var : debuga, debugb, debugc, debugd, debuge, debugf, debugr, debugs, debugt, debugu, debugw, debugx, debugy;

watch output to il buffer

dfo (from dmd.backend.blockopt)
Barray!(block*) dfo; via public import dmd.backend.blockopt : startblock, dfo, curblock, block_last;
Undocumented in source.
fregsaved (from dmd.backend.cg)
regm_t fregsaved; via public import dmd.backend.cg : fregsaved, localgot, tls_get_addr_sym;
Undocumented in source.
globsym (from dmd.backend.var)
symtab_t globsym; via public import dmd.backend.var : OPTIMIZER, PARSER, globsym, controlc_saw, pointertype, sytab;
Undocumented in source.
localgot (from dmd.backend.cg)
Symbol* localgot; via public import dmd.backend.cg : fregsaved, localgot, tls_get_addr_sym;
Undocumented in source.
pointertype (from dmd.backend.var)
tym_t pointertype; via public import dmd.backend.var : OPTIMIZER, PARSER, globsym, controlc_saw, pointertype, sytab;
Undocumented in source.
regstring (from dmd.backend.var)
const(char)*[32] regstring; via public import dmd.backend.var : regstring;
Undocumented in source.
startblock (from dmd.backend.blockopt)
block* startblock; via public import dmd.backend.blockopt : startblock, dfo, curblock, block_last;
Undocumented in source.
sytab (from dmd.backend.var)
char[SCMAX] sytab; via public import dmd.backend.var : OPTIMIZER, PARSER, globsym, controlc_saw, pointertype, sytab;

SCxxxx types.

tls_get_addr_sym (from dmd.backend.cg)
Symbol* tls_get_addr_sym; via public import dmd.backend.cg : fregsaved, localgot, tls_get_addr_sym;
Undocumented in source.

Meta