The src/llvmtranslate
Directory
Namespace llvmtranslate
, delivered for TC-L. Translate the AST to LLVM
intermediate code using the LLVM libraries.
File: escapes-collector.* (src/llvmtranslate/)
The
EscapesCollector
.LLVM IR doesn’t support static link and nested functions. In order to translate those functions to LLVM IR, we use Lambda Lifting, which consists in passing a pointer to the escaped variables to the nested function using that variable.
In order to do that, we need a visitor to collect these kind of variables and associate them to each function.
This visitor is the
EscapesCollector
.In order for the
EscapesCollector
to work properly, the variables located in the function’s frame have to be excluded. The escape-visitor of TC-E is called before to link each variable with its definition site (the function where it is declared).
File: libllvmtranslate.* (src/llvmtranslate/)
The interface.
File: llvm-type-visitor.* (src/llvmtranslate/)
The LLVM IR is a typed language. In order to ensure type safety, the Tiger types (
type::Type
) have to be translated to LLVM types (llvm::Type
). In order to do that, this visitor defined in src/llvmtranslate is used to traverse the type hierarcy and translate it to LLVM types.
File: translator.hh (src/llvmtranslate/)
Implements the class
Translator
which performs the LLVM IR generation using the LLVM API.For instance, here is the translation of a
ast::SimpleVar
:virtual void operator()(const SimpleVar& e) { value_ = builder_.CreateLoad(access_var(e), e.name_get().get()); }
File: tiger-runtime.c (src/llvmtranslate/)
This is the specific runtime for TC-L. It is based on the original runtime, with some adaptations for LLVM.
It is compiled to LLVM IR in
$(build_dir)/src/llvmtranslate/runtime.ll
, then a functionllvmtranslate::runtime_string()
is generated in$(build_dir)/src/llvmtranslate/runtime.cc
.This function is used by the task
--llvm-runtime-display
to print the runtime along the LLVM IR.
- Strings
Strings are implemented as
char*
0-terminated buffers, like C strings.- Functions
Most of the built-ins are just calls to the C standard library functions.
- Characters
Since the type
char
doesn’t exist in TC, achar
is nothing more than astring
of length 1.In order to avoid allocations every time a character is asked for, an array containing all the characters followed by a 0 is initialized at the beginning of the program.
- main
The runtime initializes the one-character strings, then calls
tc_main
, which is themain
that your compiler should have provided.