Source   Edit

Dead code elimination (=DCE) for IC.


AliveContext = object
  stack: seq[(int, TOptions, NodePos)] ## A stack for marking symbols as alive.
  decoder: PackedDecoder     ## We need a PackedDecoder for module ID address translations.
  thisModule: int            ## The module we're currently analysing for DCE.
  alive: AliveSyms           ## The final result of our computation.
  options: TOptions
  compilerProcs: Table[string, (int, int32)]
Purpose is to fill the 'alive' field.   Source   Edit
AliveSyms = seq[IntSet]
  Source   Edit


proc computeAliveSyms(g: PackedModuleGraph; conf: ConfigRef): AliveSyms {.
    ...raises: [KeyError, Exception], tags: [ReadDirEffect, RootEffect].}
Entry point for our DCE algorithm.   Source   Edit
proc isAlive(a: AliveSyms; module: int; item: int32): bool {....raises: [],
    tags: [].}
Backends use this to query if a symbol is alive which means we need to produce (C/C++/etc) code for it.   Source   Edit