[Bf-blender-cvs] [f92a1e20bc2] temp-llvm-testing: add pass manager

Jacques Lucke noreply at git.blender.org
Sun Jan 2 14:59:12 CET 2022


Commit: f92a1e20bc2b2235379255d998038c12046a7bc4
Author: Jacques Lucke
Date:   Sun Jan 2 14:59:02 2022 +0100
Branches: temp-llvm-testing
https://developer.blender.org/rBf92a1e20bc2b2235379255d998038c12046a7bc4

add pass manager

===================================================================

M	source/blender/functions/intern/llvm.cc

===================================================================

diff --git a/source/blender/functions/intern/llvm.cc b/source/blender/functions/intern/llvm.cc
index d8ebb43538a..4a346fd7fe1 100644
--- a/source/blender/functions/intern/llvm.cc
+++ b/source/blender/functions/intern/llvm.cc
@@ -17,6 +17,10 @@
 #include <fstream>
 #include <iostream>
 
+#include "llvm/IR/LegacyPassManager.h"
+#include "llvm/Transforms/InstCombine/InstCombine.h"
+#include "llvm/Transforms/Scalar.h"
+#include "llvm/Transforms/Scalar/GVN.h"
 #include <llvm/ExecutionEngine/ExecutionEngine.h>
 #include <llvm/ExecutionEngine/ObjectCache.h>
 #include <llvm/IR/IRBuilder.h>
@@ -34,7 +38,7 @@
 
 namespace blender::fn {
 
-const std::string object_file_path = "C:\\Users\\jacques\\Documents\\my_object.o";
+const std::string object_file_path = "/home/jacques/Documents/my_object.o";
 
 class MyObjectCache : public llvm::ObjectCache {
   void notifyObjectCompiled(const llvm::Module *module, llvm::MemoryBufferRef obj) override
@@ -63,6 +67,8 @@ class MyObjectCache : public llvm::ObjectCache {
 
 void playground()
 {
+  std::cout << "Start\n";
+
   static bool initialized = []() {
     /* Set assembly syntax flavour. */
     char const *args[] = {"some-random-name-for-the-parser", "--x86-asm-syntax=intel"};
@@ -77,6 +83,9 @@ void playground()
   llvm::LLVMContext context;
   std::unique_ptr<llvm::Module> module = std::make_unique<llvm::Module>("My Module", context);
 
+  llvm::legacy::FunctionPassManager function_pass_manager{module.get()};
+  function_pass_manager.add(llvm::createInstructionCombiningPass());
+
   llvm::Type *int32_type = llvm::Type::getInt32Ty(context);
   llvm::FunctionType *function_type = llvm::FunctionType::get(
       int32_type, {int32_type, int32_type}, false);
@@ -85,23 +94,27 @@ void playground()
   llvm::BasicBlock *bb = llvm::BasicBlock::Create(context, "entry", function);
   llvm::IRBuilder<> builder{bb};
   llvm::Value *sum_value = builder.CreateAdd(function->getArg(0), function->getArg(1));
+  sum_value = builder.CreateAdd(sum_value, builder.getInt32(5));
+  sum_value = builder.CreateAdd(sum_value, builder.getInt32(10));
   llvm::Value *product_value = builder.CreateMul(function->getArg(0), sum_value);
   builder.CreateRet(product_value);
 
   BLI_assert(!llvm::verifyModule(*module, &llvm::outs()));
 
-  MyObjectCache object_cache;
+  function_pass_manager.run(*function);
 
-  llvm::Expected<llvm::object::OwningBinary<llvm::object::ObjectFile>> object_file_ex =
-      llvm::object::ObjectFile::createObjectFile(object_file_path);
-  if (!object_file_ex) {
-    return;
-  }
+  // MyObjectCache object_cache;
+
+  // llvm::Expected<llvm::object::OwningBinary<llvm::object::ObjectFile>> object_file_ex =
+  //     llvm::object::ObjectFile::createObjectFile(object_file_path);
+  // if (!object_file_ex) {
+  //   return;
+  // }
 
   llvm::Module *module_ptr = &*module;
   std::unique_ptr<llvm::ExecutionEngine> ee{llvm::EngineBuilder(std::move(module)).create()};
-  ee->addObjectFile(std::move(*object_file_ex));
-  ee->setObjectCache(&object_cache);
+  // ee->addObjectFile(std::move(*object_file_ex));
+  // ee->setObjectCache(&object_cache);
   ee->finalizeObject();
 
   const uint64_t function_ptr = ee->getFunctionAddress(function->getName().str());



More information about the Bf-blender-cvs mailing list