Commit: cb158219e0d25007527f041dfc5a8ff8d40b389a
Author: Jacques Lucke
Date:   Fri Apr 5 18:44:01 2019 +0200
Branches: functions
https://developer.blender.org/rBcb158219e0d25007527f041dfc5a8ff8d40b389a

Generate LLVM IR for Mul and Sin

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

M       source/blender/functions/backends/llvm/builder.hpp
M       source/blender/functions/functions/scalar_math.cpp

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

diff --git a/source/blender/functions/backends/llvm/builder.hpp 
b/source/blender/functions/backends/llvm/builder.hpp
index ecd49d6158b..ca3cfcb698b 100644
--- a/source/blender/functions/backends/llvm/builder.hpp
+++ b/source/blender/functions/backends/llvm/builder.hpp
@@ -131,6 +131,11 @@ namespace FN {
                        return m_builder.CreateFAdd(a, b);
                }
 
+               llvm::Value *CreateFMul(llvm::Value *a, llvm::Value *b)
+               {
+                       return m_builder.CreateFMul(a, b);
+               }
+
                llvm::Value *CreateAllocaBytes_VoidPtr(uint amount)
                {
                        llvm::Type *size_type = this->getFixedSizeType(amount);
@@ -205,6 +210,13 @@ namespace FN {
                {
                        return m_builder.CreateGEP(addr, index);
                }
+
+               llvm::Value *CreateSin(llvm::Value *value)
+               {
+                       auto *function = llvm::Intrinsic::getDeclaration(
+                               this->getModule(), llvm::Intrinsic::sin, 
value->getType());
+                       return m_builder.CreateCall(function, value);
+               }
        };
 
 } /* namespace FN */
\ No newline at end of file
diff --git a/source/blender/functions/functions/scalar_math.cpp 
b/source/blender/functions/functions/scalar_math.cpp
index cb0bc76b92d..71533aab758 100644
--- a/source/blender/functions/functions/scalar_math.cpp
+++ b/source/blender/functions/functions/scalar_math.cpp
@@ -73,10 +73,24 @@ namespace FN { namespace Functions {
                }
        };
 
+       class MultiplyFloatsGen : public LLVMBuildIRBody {
+               void build_ir(
+                       CodeBuilder &builder,
+                       CodeInterface &interface,
+                       const BuildIRSettings &UNUSED(settings)) const override
+               {
+                       auto output = builder.CreateFMul(
+                               interface.get_input(0),
+                               interface.get_input(1));
+                       interface.set_output(0, output);
+               }
+       };
+
        LAZY_INIT_REF__NO_ARG(SharedFunction, multiply_floats)
        {
                auto fn = get_math_function__two_inputs("Multiply Floats");
                fn->add_body(new MultiplyFloats());
+               fn->add_body(new MultiplyFloatsGen());
                return fn;
        }
 
@@ -165,10 +179,22 @@ namespace FN { namespace Functions {
                }
        };
 
+       class SinFloatGen : public LLVMBuildIRBody {
+               void build_ir(
+                       CodeBuilder &builder,
+                       CodeInterface &interface,
+                       const BuildIRSettings &UNUSED(settings)) const override
+               {
+                       auto output = builder.CreateSin(interface.get_input(0));
+                       interface.set_output(0, output);
+               }
+       };
+
        LAZY_INIT_REF__NO_ARG(SharedFunction, sin_float)
        {
                auto fn = get_math_function__one_input("Sin");
                fn->add_body(new SinFloat());
+               fn->add_body(new SinFloatGen());
                return fn;
        }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to