[Bf-blender-cvs] [926bdb8] object_nodes: Removed the WITH_IRMODULES option, used previously for loading IR code from text files.
Lukas Tönne
noreply at git.blender.org
Tue May 31 10:14:38 CEST 2016
Commit: 926bdb8a055f4bde6026043d2fee5c3390bf819b
Author: Lukas Tönne
Date: Tue May 31 10:09:35 2016 +0200
Branches: object_nodes
https://developer.blender.org/rB926bdb8a055f4bde6026043d2fee5c3390bf819b
Removed the WITH_IRMODULES option, used previously for loading IR code from text files.
This approach suffers from difficulty of generating machine-independent IR code
and is better generated using the C++ API directly. The llc tool can be used to suggest
implementations with C++ API usage, see for example
http://fdiv.net/2012/11/16/llvm-generates-code-that-generates-code
===================================================================
M CMakeLists.txt
M source/blender/blenvm/CMakeLists.txt
M source/blender/blenvm/llvm/CMakeLists.txt
M source/blender/blenvm/llvm/llvm_compiler.cc
M source/blender/blenvm/llvm/llvm_compiler_dual.cc
M source/blender/blenvm/llvm/llvm_engine.cc
M source/blender/blenvm/llvm/llvm_modules.cc
M source/blender/blenvm/llvm/llvm_modules.h
===================================================================
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 104e957..2b40b92 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -232,8 +232,6 @@ option(WITH_GAMEENGINE "Enable Game Engine" ${_init_GAMEENGINE})
option(WITH_PLAYER "Build Player" OFF)
option(WITH_OPENCOLORIO "Enable OpenColorIO color management" ${_init_OPENCOLORIO})
-option(WITH_BLENVM_IRMODULES "Enable LLVM IR module compilation" OFF)
-
# Compositor
option(WITH_COMPOSITOR "Enable the tile based nodal compositor" ON)
diff --git a/source/blender/blenvm/CMakeLists.txt b/source/blender/blenvm/CMakeLists.txt
index e2d4e77..9b264a5 100644
--- a/source/blender/blenvm/CMakeLists.txt
+++ b/source/blender/blenvm/CMakeLists.txt
@@ -49,6 +49,14 @@ set(SRC
intern/function_cache.cc
intern/function_cache.h
+ modules/modules.cc
+ modules/modules.h
+ modules/mod_defines.h
+ modules/mod_base.h
+ modules/mod_color.h
+ modules/mod_math.h
+ modules/mod_texture.h
+
util/util_opcode.h
util/util_data_ptr.h
util/util_debug.h
@@ -63,6 +71,11 @@ set(SRC
BVM_types.h
)
+add_definitions(
+ -DBVM_MOD_NAMESPACE_BEGIN=namespace\ blenvm\ {\ namespace\ modules\ {
+ -DBVM_MOD_NAMESPACE_END=}}
+)
+
TEST_UNORDERED_MAP_SUPPORT()
if(HAVE_STD_UNORDERED_MAP_HEADER)
if(HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
diff --git a/source/blender/blenvm/llvm/CMakeLists.txt b/source/blender/blenvm/llvm/CMakeLists.txt
index 8f9f15d..cff2c8d 100644
--- a/source/blender/blenvm/llvm/CMakeLists.txt
+++ b/source/blender/blenvm/llvm/CMakeLists.txt
@@ -57,79 +57,8 @@ set(SRC
llvm_types.h
)
-set(LLVM_SRC
- ../modules/modules.cc
- ../modules/modules.h
- ../modules/mod_defines.h
-
- ../modules/mod_base.h
- ../modules/mod_color.h
- ../modules/mod_math.h
- ../modules/mod_texture.h
-)
-set(LLVM_HEADERS
- ../modules/mod_base.h
- ../modules/mod_color.h
- ../modules/mod_math.h
- ../modules/mod_texture.h
-)
-
-if(NOT WITH_BLENVM_IRMODULES)
- list(APPEND SRC ${LLVM_SRC})
-endif()
-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${RTTI_DISABLE_FLAGS}")
add_definitions(-DWITH_LLVM -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -std=c++0x)
-add_definitions(
- -DBVM_MOD_NAMESPACE_BEGIN=namespace\ blenvm\ {\ namespace\ modules\ {
- -DBVM_MOD_NAMESPACE_END=}}
-)
blender_add_lib(bf_blenvm_llvm "${SRC}" "${INC}" "${INC_SYS}")
-
-
-# Modules
-
-if(WITH_BLENVM_IRMODULES)
- # XXX TODO
- set(LLVM_IR_COMPILER "clang-3.5")
- set(LLVM_IR_INSTALL_PATH "scripts/llvm")
- set(llvm_irs)
-
- macro(BLENVM_LLVM_MODULE_ADD src)
- get_filename_component(llvm_name ${src} NAME_WE)
- set(llvm_ir "${llvm_name}.ll")
-
- add_custom_command(
- OUTPUT ${llvm_ir}
- COMMAND ${LLVM_IR_COMPILER}
- -S
- ${CMAKE_CURRENT_SOURCE_DIR}/${src}
- -emit-llvm
- -std=c++0x
- -o ${CMAKE_CURRENT_BINARY_DIR}/${llvm_ir}
- -DBLENVM_RUNTIME
- -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS
- -DBVM_MOD_NAMESPACE_BEGIN
- -DBVM_MOD_NAMESPACE_END
- -DBVM_MOD_ANNOTATE_FUNCTIONS
- -I${CMAKE_CURRENT_SOURCE_DIR}/../../blenlib
- DEPENDS ${LLVM_SRC})
-
- delayed_install("${CMAKE_CURRENT_BINARY_DIR}" "${llvm_ir}" ${LLVM_IR_INSTALL_PATH}/modules/)
- list(APPEND llvm_irs ${llvm_ir})
- endmacro()
-
- add_definitions(-DWITH_BLENVM_IRMODULES)
-
- foreach(src ${LLVM_SRC})
- # Compile LLVM IR code
- BLENVM_LLVM_MODULE_ADD(${src})
- endforeach()
-
- add_custom_target(bf_blenvm_llvm_modules ALL DEPENDS ${llvm_irs})
- add_dependencies(bf_blenvm_llvm bf_blenvm_llvm_modules)
-
- delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${LLVM_HEADERS}" ${LLVM_IR_INSTALL_PATH})
-endif()
diff --git a/source/blender/blenvm/llvm/llvm_compiler.cc b/source/blender/blenvm/llvm/llvm_compiler.cc
index 431cfad..432cb43 100644
--- a/source/blender/blenvm/llvm/llvm_compiler.cc
+++ b/source/blender/blenvm/llvm/llvm_compiler.cc
@@ -272,8 +272,7 @@ void LLVMCompilerBase::expand_function_node(llvm::BasicBlock *block, const NodeI
builder.SetInsertPoint(block);
/* get evaluation function */
- const std::string &evalname = node->type->name();
- Function *evalfunc = llvm_find_external_function(module(), evalname);
+ Function *evalfunc = module()->getFunction(node->type->name());
BLI_assert(evalfunc != NULL && "Could not find node function!");
/* function call arguments */
diff --git a/source/blender/blenvm/llvm/llvm_compiler_dual.cc b/source/blender/blenvm/llvm/llvm_compiler_dual.cc
index 393d7fb..3352339 100644
--- a/source/blender/blenvm/llvm/llvm_compiler_dual.cc
+++ b/source/blender/blenvm/llvm/llvm_compiler_dual.cc
@@ -441,12 +441,10 @@ void LLVMTextureCompiler::define_dual_function_wrapper(llvm::Module *mod, OpCode
using namespace llvm;
/* get evaluation function(s) */
- string value_name = bvm_value_function_name(nodetype->name());
- Function *value_func = llvm_find_external_function(mod, value_name);
+ Function *value_func = mod->getFunction(bvm_value_function_name(nodetype->name()));
BLI_assert(value_func != NULL && "Could not find node function!");
- string deriv_name = bvm_deriv_function_name(nodetype->name());
- Function *deriv_func = llvm_find_external_function(mod, deriv_name);
+ Function *deriv_func = mod->getFunction(bvm_deriv_function_name(nodetype->name()));
/* wrapper function */
Function *func = declare_node_function(mod, nodetype);
diff --git a/source/blender/blenvm/llvm/llvm_engine.cc b/source/blender/blenvm/llvm/llvm_engine.cc
index 976af9e..1228c94 100644
--- a/source/blender/blenvm/llvm/llvm_engine.cc
+++ b/source/blender/blenvm/llvm/llvm_engine.cc
@@ -141,15 +141,10 @@ void llvm_init()
BLI_assert(theEngine == NULL);
theEngine = create_execution_engine();
-
- /* load modules */
- llvm_load_all_modules("", false);
}
void llvm_free()
{
- llvm_unload_all_modules();
-
if (theEngine) {
delete theEngine;
theEngine = NULL;
diff --git a/source/blender/blenvm/llvm/llvm_modules.cc b/source/blender/blenvm/llvm/llvm_modules.cc
index f99ec6d..03d2170 100644
--- a/source/blender/blenvm/llvm/llvm_modules.cc
+++ b/source/blender/blenvm/llvm/llvm_modules.cc
@@ -56,155 +56,6 @@ extern "C" {
namespace blenvm {
-typedef std::map<string, llvm::Module*> ModuleMap;
-
-static ModuleMap theModules;
-
-#ifdef WITH_BLENVM_IRMODULES
-/* Based on
- * http://homes.cs.washington.edu/~bholt/posts/llvm-quick-tricks.html
- */
-static void llvm_parse_function_annotations(llvm::Module *mod)
-{
- using namespace llvm;
-
- GlobalVariable *global_annos = mod->getNamedGlobal("llvm.global.annotations");
- if (global_annos) {
- ConstantArray *a = static_cast<ConstantArray*>(global_annos->getOperand(0));
- for (int i = 0; i < a->getNumOperands(); i++) {
- ConstantStruct *e = static_cast<ConstantStruct*>(a->getOperand(i));
- StringRef anno = static_cast<ConstantDataArray*>(static_cast<GlobalVariable*>(e->getOperand(1)->getOperand(0))->getOperand(0))->getAsCString();
-
- if (e->getOperand(0)->getOperand(0)->getValueID() == Value::FunctionVal) {
- Function *fn = static_cast<Function*>(e->getOperand(0)->getOperand(0));
- fn->addFnAttr("name", anno); /* add function annotation */
- }
- }
- }
-}
-
-static bool llvm_function_has_external_name(const llvm::Function *func)
-{
- return func->hasFnAttribute("name");
-}
-
-static string llvm_function_get_external_name(const llvm::Function *func)
-{
- if (func->hasFnAttribute("name"))
- return func->getFnAttribute("name").getValueAsString().str();
- else
- return func->getName().str();
-}
-#endif
-
-llvm::Function *llvm_find_external_function(llvm::Module *mod, const string &name)
-{
- using namespace llvm;
-
-#ifdef WITH_BLENVM_IRMODULES
- for (Module::FunctionListType::iterator it = mod->getFunctionList().begin(); it != mod->getFunctionList().end(); ++it) {
- Function *func = &(*it);
- if (func->hasFnAttribute("name")) {
- std::string value = func->getFnAttribute("name").getValueAsString();
- if (value == name)
- return func;
- }
- }
-#else
- return mod->getFunction(name);
-#endif
-
- return NULL;
-}
-
-void llvm_load_module(const string &modfile, const string &modname)
-{
- using namespace llvm;
-
-#ifdef WITH_BLENVM_IRMODULES
- printf("Loading module '%s'\n", modfile.c_str());
- LLVMContext &llvmctx = getGlobalContext();
- SMDiagnostic err;
-
- Module *mod = getLazyIRFileModule(modfile, err, llvmctx);
-// Module *mod = ParseIRFile(modfile, err, llvmctx);
- if (!mod) {
- err.print(modfile.c_str(), errs());
- return;
- }
-
- llvm_parse_function_annotations(mod);
- mod->setModuleIdentifier(modname);
-
- verifyModule(*mod, &outs());
-
- llvm_execution_engine()->addModule(mod);
- theModules[mod->getModuleIdentifier()] = mod;
-
- printf("Module Functions for '%s'\n", mod->getModuleIdentifier().c_str());
- for (Module::FunctionListType::const_iterator it = mod->getFunctionList().begin(); it != mod->getFunctionList().end(); ++it) {
- const Function &func = *it;
-
- if (!llvm_function_has_external_name(&func))
- continue;
- printf(" %s\n", llvm_function_get_external_name(&func).c_str());
-
-// printf(" %s\n", func.getName().str().c_str());
-
-// func.dump();
-// printf("++++++++++++++++++++++++++++++++++\n");
- }
-#else
- UNUSED_VARS(modfile, modname);
-#endif
-}
-
-void llvm_load_all_modules(const string &modpath, bool reload)
-{
- using namespace llvm;
-
- if (reload) {
- llvm_unload_all_modules();
- }
-
-#ifdef WITH_BLENVM_IRMODULES
- string path = modpath;
- if (path.empty()) {
- const char *moddir = BKE_appdir_folder_id(BLENDER_SYSTEM_SCRIPTS, "llvm/modules/");
- path = (moddir != NULL ? string(moddir) : "");
- }
- if (path.empty())
- return;
-
- struct direntry *dir;
- int totfile = BLI_filelist_dir_contents(path.c_str(), &dir);
- for (int i = 0; i < totfile; ++i) {
- if ((dir[i].type & S_IFREG)) {
- const char *filename = dir[i].relname;
- const char *filepath = dir[i].path;
-
- if (BLI_testextensie(filename, ".ll")) {
- /* found a potential llvm IR module, try parsing it */
- llvm_load_module(filepath, filename);
- }
- }
- }
- BLI_filelist_free(dir, totfile);
-#else
- UNUSED_VARS(modpath);
-#endif
-}
-
-void llvm_unload_all_modules()
-{
- using namespace llvm;
-
- // TODO
- theModules.clear();
-}
-
-/* ------------------------------------------------------------------------- */
-
void def_
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list