SLO Documentation

SLO code overview

  • High level explaination -
  • All the code can be svn from source forge
  • This code includes four directories within the svn trunk:
    • documentation - eighty percent pictures, there is helpful information on how to get the code running, but nothing about the code structure
    • gcc-slo - this is the modified gcc (version 4.1.1) that runs the analysis
    • slo - includes some code from Beyls' earlier tool RDVIS ( ) and SLO. This directory handles the Java back end which displays results.
    • testsuite - python scripts to test the validity of the gcc-slo and SLO code


  • Most of the interesting code from this project is found within this gcc-slo-src directory.
  • The gcc structure is somewhat stripped. For example, there is no ADA support, etc.
  • Overall, this is heavily modified. The slo gcc was built on top of rdvis gcc (another tool developed by Beyls).
  • The directory "gcc" has the changes to the original gcc code which use the librd library.
  • The makefiles and several of the scripts have been modified to account for the librd library. Most of the other files have not been changed from the original gcc 4.1.1.a


  • The directory "librd" has most of the real SLO code. File names should be helpful. More about this directory will be added later.
    • rd = reuse distance
    • nosl = no sampling
    • bb = basic blocks
    • log2 = log based 2?
    • nr = number
    • sri = single reuse information
    • RDTSC = reuse distance time stamp ?collection?
  • measure_log2_rd.c - General Util file ( initialize hash map, alloc table, alloc node, find node, add node, etc )
  • basic_block_histograms.cpp - Stores most information on basic blocks, spits out histograms information.
  • call_stack.cpp - function utilities, stack analyzer, keeper of the modified tree.
  • sampled_reuses.cpp - implements Vitters' reservoir sampling ( "Reservoir-Sampling Algorithms of Time Complexity O(n(1+log(N/n)))", By Kim-Hung Li )


  • Most of the actual instrumentation is done within tree-mudflap.c
  • A some of this is explained in original documentation explained above.
  • The method build_instrument_memaccess_for actually creates the code to be injected.

-- IanChristopher - 29 May 2008

Edit | Attach | Watch | Print version | History: r7 | r5 < r4 < r3 < r2 | Backlinks | Raw View | Raw edit | More topic actions...
Topic revision: r3 - 2008-05-30 - IanChristopher
  • Edit
  • Attach
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding URCS? Send feedback