LLVM  4.0.0
Classes | Macros | Typedefs | Enumerations | Functions
lto.h File Reference
#include <stddef.h>
#include <sys/types.h>
#include <stdbool.h>
Include dependency graph for lto.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  LTOObjectBuffer
 Type to wrap a single object returned by ThinLTO. More...
 

Macros

#define LTO_API_VERSION   21
 

Typedefs

typedef bool lto_bool_t
 
typedef struct
LLVMOpaqueLTOModule * 
lto_module_t
 opaque reference to a loaded object module More...
 
typedef struct
LLVMOpaqueLTOCodeGenerator * 
lto_code_gen_t
 opaque reference to a code generator More...
 
typedef struct
LLVMOpaqueThinLTOCodeGenerator * 
thinlto_code_gen_t
 opaque reference to a thin code generator More...
 
typedef void(* lto_diagnostic_handler_t )(lto_codegen_diagnostic_severity_t severity, const char *diag, void *ctxt)
 Diagnostic handler type. More...
 

Enumerations

enum  lto_symbol_attributes {
  LTO_SYMBOL_ALIGNMENT_MASK = 0x0000001F, LTO_SYMBOL_PERMISSIONS_MASK = 0x000000E0, LTO_SYMBOL_PERMISSIONS_CODE = 0x000000A0, LTO_SYMBOL_PERMISSIONS_DATA = 0x000000C0,
  LTO_SYMBOL_PERMISSIONS_RODATA = 0x00000080, LTO_SYMBOL_DEFINITION_MASK = 0x00000700, LTO_SYMBOL_DEFINITION_REGULAR = 0x00000100, LTO_SYMBOL_DEFINITION_TENTATIVE = 0x00000200,
  LTO_SYMBOL_DEFINITION_WEAK = 0x00000300, LTO_SYMBOL_DEFINITION_UNDEFINED = 0x00000400, LTO_SYMBOL_DEFINITION_WEAKUNDEF = 0x00000500, LTO_SYMBOL_SCOPE_MASK = 0x00003800,
  LTO_SYMBOL_SCOPE_INTERNAL = 0x00000800, LTO_SYMBOL_SCOPE_HIDDEN = 0x00001000, LTO_SYMBOL_SCOPE_PROTECTED = 0x00002000, LTO_SYMBOL_SCOPE_DEFAULT = 0x00001800,
  LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN = 0x00002800, LTO_SYMBOL_COMDAT = 0x00004000, LTO_SYMBOL_ALIAS = 0x00008000
}
 
enum  lto_debug_model { LTO_DEBUG_MODEL_NONE = 0, LTO_DEBUG_MODEL_DWARF = 1 }
 
enum  lto_codegen_model { LTO_CODEGEN_PIC_MODEL_STATIC = 0, LTO_CODEGEN_PIC_MODEL_DYNAMIC = 1, LTO_CODEGEN_PIC_MODEL_DYNAMIC_NO_PIC = 2, LTO_CODEGEN_PIC_MODEL_DEFAULT = 3 }
 
enum  lto_codegen_diagnostic_severity_t { LTO_DS_ERROR = 0, LTO_DS_WARNING = 1, LTO_DS_REMARK = 3, LTO_DS_NOTE = 2 }
 Diagnostic severity. More...
 

Functions

const char * lto_get_version (void)
 Returns a printable string. More...
 
const char * lto_get_error_message (void)
 Returns the last error string or NULL if last operation was successful. More...
 
lto_bool_t lto_module_is_object_file (const char *path)
 Checks if a file is a loadable object file. More...
 
lto_bool_t lto_module_is_object_file_for_target (const char *path, const char *target_triple_prefix)
 Checks if a file is a loadable object compiled for requested target. More...
 
lto_bool_t lto_module_has_objc_category (const void *mem, size_t length)
 Return true if Buffer contains a bitcode file with ObjC code (category or class) in it. More...
 
lto_bool_t lto_module_is_object_file_in_memory (const void *mem, size_t length)
 Checks if a buffer is a loadable object file. More...
 
lto_bool_t lto_module_is_object_file_in_memory_for_target (const void *mem, size_t length, const char *target_triple_prefix)
 Checks if a buffer is a loadable object compiled for requested target. More...
 
lto_module_t lto_module_create (const char *path)
 Loads an object file from disk. More...
 
lto_module_t lto_module_create_from_memory (const void *mem, size_t length)
 Loads an object file from memory. More...
 
lto_module_t lto_module_create_from_memory_with_path (const void *mem, size_t length, const char *path)
 Loads an object file from memory with an extra path argument. More...
 
lto_module_t lto_module_create_in_local_context (const void *mem, size_t length, const char *path)
 Loads an object file in its own context. More...
 
lto_module_t lto_module_create_in_codegen_context (const void *mem, size_t length, const char *path, lto_code_gen_t cg)
 Loads an object file in the codegen context. More...
 
lto_module_t lto_module_create_from_fd (int fd, const char *path, size_t file_size)
 Loads an object file from disk. More...
 
lto_module_t lto_module_create_from_fd_at_offset (int fd, const char *path, size_t file_size, size_t map_size, off_t offset)
 Loads an object file from disk. More...
 
void lto_module_dispose (lto_module_t mod)
 Frees all memory internally allocated by the module. More...
 
const char * lto_module_get_target_triple (lto_module_t mod)
 Returns triple string which the object module was compiled under. More...
 
void lto_module_set_target_triple (lto_module_t mod, const char *triple)
 Sets triple string with which the object will be codegened. More...
 
unsigned int lto_module_get_num_symbols (lto_module_t mod)
 Returns the number of symbols in the object module. More...
 
const char * lto_module_get_symbol_name (lto_module_t mod, unsigned int index)
 Returns the name of the ith symbol in the object module. More...
 
lto_symbol_attributes lto_module_get_symbol_attribute (lto_module_t mod, unsigned int index)
 Returns the attributes of the ith symbol in the object module. More...
 
const char * lto_module_get_linkeropts (lto_module_t mod)
 Returns the module's linker options. More...
 
void lto_codegen_set_diagnostic_handler (lto_code_gen_t, lto_diagnostic_handler_t, void *)
 Set a diagnostic handler and the related context (void *). More...
 
lto_code_gen_t lto_codegen_create (void)
 Instantiates a code generator. More...
 
lto_code_gen_t lto_codegen_create_in_local_context (void)
 Instantiate a code generator in its own context. More...
 
void lto_codegen_dispose (lto_code_gen_t)
 Frees all code generator and all memory it internally allocated. More...
 
lto_bool_t lto_codegen_add_module (lto_code_gen_t cg, lto_module_t mod)
 Add an object module to the set of modules for which code will be generated. More...
 
void lto_codegen_set_module (lto_code_gen_t cg, lto_module_t mod)
 Sets the object module for code generation. More...
 
lto_bool_t lto_codegen_set_debug_model (lto_code_gen_t cg, lto_debug_model)
 Sets if debug info should be generated. More...
 
lto_bool_t lto_codegen_set_pic_model (lto_code_gen_t cg, lto_codegen_model)
 Sets which PIC code model to generated. More...
 
void lto_codegen_set_cpu (lto_code_gen_t cg, const char *cpu)
 Sets the cpu to generate code for. More...
 
void lto_codegen_set_assembler_path (lto_code_gen_t cg, const char *path)
 Sets the location of the assembler tool to run. More...
 
void lto_codegen_set_assembler_args (lto_code_gen_t cg, const char **args, int nargs)
 Sets extra arguments that libLTO should pass to the assembler. More...
 
void lto_codegen_add_must_preserve_symbol (lto_code_gen_t cg, const char *symbol)
 Adds to a list of all global symbols that must exist in the final generated code. More...
 
lto_bool_t lto_codegen_write_merged_modules (lto_code_gen_t cg, const char *path)
 Writes a new object file at the specified path that contains the merged contents of all modules added so far. More...
 
const void * lto_codegen_compile (lto_code_gen_t cg, size_t *length)
 Generates code for all added modules into one native object file. More...
 
lto_bool_t lto_codegen_compile_to_file (lto_code_gen_t cg, const char **name)
 Generates code for all added modules into one native object file. More...
 
lto_bool_t lto_codegen_optimize (lto_code_gen_t cg)
 Runs optimization for the merged module. More...
 
const void * lto_codegen_compile_optimized (lto_code_gen_t cg, size_t *length)
 Generates code for the optimized merged module into one native object file. More...
 
unsigned int lto_api_version (void)
 Returns the runtime API version. More...
 
void lto_codegen_debug_options (lto_code_gen_t cg, const char *)
 Sets options to help debug codegen bugs. More...
 
void lto_initialize_disassembler (void)
 Initializes LLVM disassemblers. More...
 
void lto_codegen_set_should_internalize (lto_code_gen_t cg, lto_bool_t ShouldInternalize)
 Sets if we should run internalize pass during optimization and code generation. More...
 
void lto_codegen_set_should_embed_uselists (lto_code_gen_t cg, lto_bool_t ShouldEmbedUselists)
 Set whether to embed uselists in bitcode. More...
 
thinlto_code_gen_t thinlto_create_codegen (void)
 Instantiates a ThinLTO code generator. More...
 
void thinlto_codegen_dispose (thinlto_code_gen_t cg)
 Frees the generator and all memory it internally allocated. More...
 
void thinlto_codegen_add_module (thinlto_code_gen_t cg, const char *identifier, const char *data, int length)
 Add a module to a ThinLTO code generator. More...
 
void thinlto_codegen_process (thinlto_code_gen_t cg)
 Optimize and codegen all the modules added to the codegenerator using ThinLTO. More...
 
unsigned int thinlto_module_get_num_objects (thinlto_code_gen_t cg)
 Returns the number of object files produced by the ThinLTO CodeGenerator. More...
 
LTOObjectBuffer thinlto_module_get_object (thinlto_code_gen_t cg, unsigned int index)
 Returns a reference to the ith object file produced by the ThinLTO CodeGenerator. More...
 
unsigned int thinlto_module_get_num_object_files (thinlto_code_gen_t cg)
 Returns the number of object files produced by the ThinLTO CodeGenerator. More...
 
const char * thinlto_module_get_object_file (thinlto_code_gen_t cg, unsigned int index)
 Returns the path to the ith object file produced by the ThinLTO CodeGenerator. More...
 
lto_bool_t thinlto_codegen_set_pic_model (thinlto_code_gen_t cg, lto_codegen_model)
 Sets which PIC code model to generate. More...
 
void thinlto_codegen_set_cache_dir (thinlto_code_gen_t cg, const char *cache_dir)
 Sets the path to a directory to use as a cache storage for incremental build. More...
 
void thinlto_codegen_set_cache_pruning_interval (thinlto_code_gen_t cg, int interval)
 Sets the cache pruning interval (in seconds). More...
 
void thinlto_codegen_set_final_cache_size_relative_to_available_space (thinlto_code_gen_t cg, unsigned percentage)
 Sets the maximum cache size that can be persistent across build, in terms of percentage of the available space on the the disk. More...
 
void thinlto_codegen_set_cache_entry_expiration (thinlto_code_gen_t cg, unsigned expiration)
 Sets the expiration (in seconds) for an entry in the cache. More...
 
void thinlto_codegen_set_savetemps_dir (thinlto_code_gen_t cg, const char *save_temps_dir)
 Sets the path to a directory to use as a storage for temporary bitcode files. More...
 
void thinlto_set_generated_objects_dir (thinlto_code_gen_t cg, const char *save_temps_dir)
 Set the path to a directory where to save generated object files. More...
 
void thinlto_codegen_set_cpu (thinlto_code_gen_t cg, const char *cpu)
 Sets the cpu to generate code for. More...
 
void thinlto_codegen_disable_codegen (thinlto_code_gen_t cg, lto_bool_t disable)
 Disable CodeGen, only run the stages till codegen and stop. More...
 
void thinlto_codegen_set_codegen_only (thinlto_code_gen_t cg, lto_bool_t codegen_only)
 Perform CodeGen only: disable all other stages. More...
 
void thinlto_debug_options (const char *const *options, int number)
 Parse -mllvm style debug options. More...
 
lto_bool_t lto_module_is_thinlto (lto_module_t mod)
 Test if a module has support for ThinLTO linking. More...
 
void thinlto_codegen_add_must_preserve_symbol (thinlto_code_gen_t cg, const char *name, int length)
 Adds a symbol to the list of global symbols that must exist in the final generated code. More...
 
void thinlto_codegen_add_cross_referenced_symbol (thinlto_code_gen_t cg, const char *name, int length)
 Adds a symbol to the list of global symbols that are cross-referenced between ThinLTO files. More...
 

Typedef Documentation

typedef bool lto_bool_t

Definition at line 29 of file lto.h.

Function Documentation

lto_bool_t lto_module_is_thinlto ( lto_module_t  mod)

Test if a module has support for ThinLTO linking.

Since
LTO_API_VERSION=18
void thinlto_codegen_add_cross_referenced_symbol ( thinlto_code_gen_t  cg,
const char *  name,
int  length 
)

Adds a symbol to the list of global symbols that are cross-referenced between ThinLTO files.

If the ThinLTO CodeGenerator can ensure that every references from a ThinLTO module to this symbol is optimized away, then the symbol can be discarded.

Since
LTO_API_VERSION=18
void thinlto_codegen_add_must_preserve_symbol ( thinlto_code_gen_t  cg,
const char *  name,
int  length 
)

Adds a symbol to the list of global symbols that must exist in the final generated code.

If a function is not listed there, it might be inlined into every usage and optimized away. For every single module, the functions referenced from code outside of the ThinLTO modules need to be added here.

Since
LTO_API_VERSION=18
void thinlto_codegen_disable_codegen ( thinlto_code_gen_t  cg,
lto_bool_t  disable 
)

Disable CodeGen, only run the stages till codegen and stop.

The output will be bitcode.

Since
LTO_API_VERSION=19
void thinlto_codegen_set_codegen_only ( thinlto_code_gen_t  cg,
lto_bool_t  codegen_only 
)

Perform CodeGen only: disable all other stages.

Since
LTO_API_VERSION=19
void thinlto_codegen_set_cpu ( thinlto_code_gen_t  cg,
const char *  cpu 
)

Sets the cpu to generate code for.

Since
LTO_API_VERSION=18
void thinlto_codegen_set_savetemps_dir ( thinlto_code_gen_t  cg,
const char *  save_temps_dir 
)

Sets the path to a directory to use as a storage for temporary bitcode files.

The intention is to make the bitcode files available for debugging at various stage of the pipeline.

Since
LTO_API_VERSION=18
void thinlto_debug_options ( const char *const options,
int  number 
)

Parse -mllvm style debug options.

Since
LTO_API_VERSION=18
void thinlto_set_generated_objects_dir ( thinlto_code_gen_t  cg,
const char *  save_temps_dir 
)

Set the path to a directory where to save generated object files.

This path can be used by a linker to request on-disk files instead of in-memory buffers. When set, results are available through thinlto_module_get_object_file() instead of thinlto_module_get_object().

Since
LTO_API_VERSION=21