Jump to: navigation, search
Navigation: > CTools > ICI

ICI Functionality

We decided to number ICI functionality to clearly mark the modified source code of the compiler and simplify porting to new compilers or compiler releases.

API level Scope of the level Available functions

- loading and unloading of user-provided plugins
- invocation of user-provided parameter- and result-less callback functions at selected locations in compiler code, with read/write access to selected elements of compiler state
- access to compiler version information
- access to the list of compiler passes, flags and parameters
- reordering of compiler passes
- read/write access to compiler flags and parameters

ici_load, ici_unload,
ici_register_event, ici_call_event,
ici_init_features, ici_get_feature,
ici_get_feature_size, ici_get_subfeature,
ici_register_parameter, ici_unregister_parameter,ici_get_parameter


- function cloning and specialization


- linking with external libraries
- add call to external function at the beginning of the program
- add call to external function at the program exit
- add -OML flag to select plugin with machine learning optimization heuristic


- get compiled filename with full path at the beginning of each function
- get start line/stop line for the compiled function in this file
- get language name for the compiled program (f77, c, cpp)

Discussion page to extend basic plugin functionality

ICI Versions

ICI Version: Release: Brief description: Developer(s):
[2.0] On-going Supports FICI0, FICI3, (FICI2?) Zbigniew Chamski, Cupertino Miranda, Grigori Fursin
based on user feedback
[1.0] 2008.06.15 Supports part of FICI0 Grigori Fursin
[0.9.6] 2008.03.12 Updated version for the MILEPOST GCC Grigori Fursin
[0.9.5] 2008.02.11 Updated design for correct pass selection and reordering while avoiding pass-gate, and some bug fixes Cupertino Miranda, Grigori Fursin
[0.9.1] 2007.09.16 Bug fixes Cupertino Miranda, Grigori Fursin
[0.9] 2007.07.15 New design using dynamically linked plugins and pass manipulation routine Cupertino Miranda, Grigori Fursin
[0.1] 2007.01.26 Prototyping Grigori Fursin
[0.0.1] for GCC 2006.11.03 First prototype for GCC based on PathScale/Open64 ICI Grigori Fursin
[0.0.3] 2007.07.10 Stable version that has been released and used in multiple projects Grigori Fursin
[0.0.2] 2007.03.04 Bug fixes Grigori Fursin
[0.0.1] for PathScale/Open64 2004.11.01 First prototype that supported selection and paramter tuning for loop tiling, loop unrolling, loop fusion/fission, loop vectorization, register tiling, array padding and prefetching at a fine-grain level (program, function, loop or instruction level) Grigori Fursin

Locations of visitors to this page