[Bf-blender-cvs] [7b4867d1ba2] temp-llvm-testing: progress
Jacques Lucke
noreply at git.blender.org
Wed Dec 29 21:45:49 CET 2021
Commit: 7b4867d1ba2c294abf37ced3d7c7e46f658bfe78
Author: Jacques Lucke
Date: Sat Nov 27 13:02:34 2021 +0100
Branches: temp-llvm-testing
https://developer.blender.org/rB7b4867d1ba2c294abf37ced3d7c7e46f658bfe78
progress
===================================================================
M source/blender/functions/intern/llvm.cc
===================================================================
diff --git a/source/blender/functions/intern/llvm.cc b/source/blender/functions/intern/llvm.cc
index 5ac9e2a406d..bdbb982de6b 100644
--- a/source/blender/functions/intern/llvm.cc
+++ b/source/blender/functions/intern/llvm.cc
@@ -21,7 +21,9 @@
#include <llvm/IR/LLVMContext.h>
#include <llvm/IR/Type.h>
#include <llvm/IR/Verifier.h>
+#include <llvm/Support/CommandLine.h>
#include <llvm/Support/TargetSelect.h>
+#include <llvm/Support/TargetRegistry.h>
#include "FN_llvm.hh"
@@ -31,33 +33,50 @@ namespace blender::fn {
void playground()
{
- llvm::InitializeNativeTarget();
- llvm::InitializeNativeTargetAsmPrinter();
- llvm::InitializeNativeTargetAsmParser();
+ static bool initialized = []() {
+ /* Set assembly syntax flavour. */
+ char const *args[] = {"some-random-name-for-the-parser", "--x86-asm-syntax=intel"};
+ bool parse_result = llvm::cl::ParseCommandLineOptions(std::size(args), args);
+
+ llvm::InitializeNativeTarget();
+ llvm::InitializeNativeTargetAsmPrinter();
+ llvm::InitializeNativeTargetAsmParser();
+ return true;
+ }();
llvm::LLVMContext context;
std::unique_ptr<llvm::Module> module = std::make_unique<llvm::Module>("My Module", context);
- llvm::Type *ret_type = llvm::Type::getInt32Ty(context);
- llvm::FunctionType *function_type = llvm::FunctionType::get(ret_type, false);
+ llvm::Type *int32_type = llvm::Type::getInt32Ty(context);
+ llvm::FunctionType *function_type = llvm::FunctionType::get(
+ int32_type, {int32_type, int32_type}, false);
llvm::Function *function = llvm::Function::Create(
function_type, llvm::GlobalValue::LinkageTypes::ExternalLinkage, "My Func", *module);
llvm::BasicBlock *bb = llvm::BasicBlock::Create(context, "entry", function);
llvm::IRBuilder<> builder{bb};
- llvm::Value *value = builder.getInt32(42);
- builder.CreateRet(value);
+ llvm::Value *sum_value = builder.CreateAdd(function->getArg(0), function->getArg(1));
+ llvm::Value *product_value = builder.CreateMul(function->getArg(0), sum_value);
+ builder.CreateRet(product_value);
- BLI_assert(llvm::verifyModule(*module, &llvm::outs()));
+ BLI_assert(!llvm::verifyModule(*module, &llvm::outs()));
- llvm::ExecutionEngine *ee = llvm::EngineBuilder(std::move(module)).create();
+ llvm::Module *module_ptr = &*module;
+ std::unique_ptr<llvm::ExecutionEngine> ee{llvm::EngineBuilder(std::move(module)).create()};
ee->finalizeObject();
const uint64_t function_ptr = ee->getFunctionAddress(function->getName().str());
- using FuncType = int (*)();
+ using FuncType = int (*)(int, int);
const FuncType generated_function = (FuncType)function_ptr;
- const int result = generated_function();
+ const int result = generated_function(3, 5);
std::cout << result << "\n";
+ /*
+ LLVMTargetMachineEmitToFile((LLVMTargetMachineRef)ee->getTargetMachine(),
+ llvm::wrap(module_ptr),
+ (char *)"C:\\Users\\jacques\\Documents\\machine_code.txt",
+ LLVMAssemblyFile,
+ nullptr);
+ */
// function->dump();
}
More information about the Bf-blender-cvs
mailing list