mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-07 12:28:24 +00:00
[Orc][Kaleidoscope] Add an example of extreme-laziness in Orc.
The version of the tutorial uses the new compile callbacks API to inject stubs that trigger IRGen & Codegen of their respective function bodies when they are first called. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229466 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
12
examples/Kaleidoscope/Orc/fully_lazy/CMakeLists.txt
Normal file
12
examples/Kaleidoscope/Orc/fully_lazy/CMakeLists.txt
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
set(LLVM_LINK_COMPONENTS
|
||||||
|
Core
|
||||||
|
ExecutionEngine
|
||||||
|
Object
|
||||||
|
RuntimeDyld
|
||||||
|
Support
|
||||||
|
native
|
||||||
|
)
|
||||||
|
|
||||||
|
add_kaleidoscope_chapter(Kaleidoscope-Orc-lazy_irgen
|
||||||
|
toy.cpp
|
||||||
|
)
|
9
examples/Kaleidoscope/Orc/fully_lazy/Makefile
Normal file
9
examples/Kaleidoscope/Orc/fully_lazy/Makefile
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
.PHONY: all
|
||||||
|
all: toy
|
||||||
|
|
||||||
|
toy: toy.cpp
|
||||||
|
clang++ -Wall -std=c++11 toy.cpp -g -O0 -rdynamic -fno-rtti `llvm-config --cppflags --ldflags --system-libs --libs core orcjit native` -o toy
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
rm -f toy
|
21
examples/Kaleidoscope/Orc/fully_lazy/README.txt
Normal file
21
examples/Kaleidoscope/Orc/fully_lazy/README.txt
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
//===----------------------------------------------------------------------===/
|
||||||
|
// Kaleidoscope with Orc - Lazy IRGen Version
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
This version of Kaleidoscope with Orc demonstrates fully lazy IR-generation.
|
||||||
|
Building on the lazy-irgen version of the tutorial, this version injects JIT
|
||||||
|
callbacks to defer the bulk of IR-generation and code-generation of functions until
|
||||||
|
they are first called.
|
||||||
|
|
||||||
|
When a function definition is entered, a JIT callback is created and a stub
|
||||||
|
function is built that will call the body of the function indirectly. The body of
|
||||||
|
the function is *not* IRGen'd at this point. Instead, the function pointer for
|
||||||
|
the indirect call is initialized to point at the JIT callback, and the compile
|
||||||
|
action for the callback is initialized with a lambda that IRGens the body of the
|
||||||
|
function and adds it to the JIT. The function pointer is updated by the JIT
|
||||||
|
callback's update action to point at the newly emitted function body, so future
|
||||||
|
calls to the stub will go straight to the body, not through the JIT.
|
||||||
|
|
||||||
|
This directory contains a Makefile that allows the code to be built in a
|
||||||
|
standalone manner, independent of the larger LLVM build infrastructure. To build
|
||||||
|
the program you will need to have 'clang++' and 'llvm-config' in your path.
|
1412
examples/Kaleidoscope/Orc/fully_lazy/toy.cpp
Normal file
1412
examples/Kaleidoscope/Orc/fully_lazy/toy.cpp
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user