diff options
author | Jacques Lucke <jacques@blender.org> | 2022-01-02 18:00:33 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2022-01-02 18:00:33 +0300 |
commit | 077debe17fb8c30b1b5e7387f9f9e94758b5b30a (patch) | |
tree | 7c0ba57f1b10052966b8ac1241b31d1a58486744 | |
parent | 33d6b09d3d658bacd530524397e4265c08f61f86 (diff) |
fix function generation
-rw-r--r-- | source/blender/functions/intern/llvm.cc | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/source/blender/functions/intern/llvm.cc b/source/blender/functions/intern/llvm.cc index 9c6ef8341ba..d59bba52417 100644 --- a/source/blender/functions/intern/llvm.cc +++ b/source/blender/functions/intern/llvm.cc @@ -61,9 +61,9 @@ static llvm::Function &create_add_loop_function(llvm::Module &module) llvm::Value *array_size_v = function.getArg(3); llvm::BasicBlock *entry_bb = llvm::BasicBlock::Create(context, "entry", &function); - llvm::BasicBlock *loop_entry_bb = llvm::BasicBlock::Create(context, "loop_entry"); - llvm::BasicBlock *loop_body_bb = llvm::BasicBlock::Create(context, "loop_body"); - llvm::BasicBlock *loop_end_bb = llvm::BasicBlock::Create(context, "loop_end"); + llvm::BasicBlock *loop_entry_bb = llvm::BasicBlock::Create(context, "loop_entry", &function); + llvm::BasicBlock *loop_body_bb = llvm::BasicBlock::Create(context, "loop_body", &function); + llvm::BasicBlock *loop_end_bb = llvm::BasicBlock::Create(context, "loop_end", &function); builder.SetInsertPoint(entry_bb); builder.CreateBr(loop_entry_bb); @@ -74,22 +74,19 @@ static llvm::Function &create_add_loop_function(llvm::Module &module) llvm::Value *is_less_than_v = builder.CreateICmpSLT(index_v, array_size_v); builder.CreateCondBr(is_less_than_v, loop_body_bb, loop_end_bb); - std::cout << "1\n"; builder.SetInsertPoint(loop_body_bb); - std::cout << "2\n"; llvm::Value *load_ptr_v = builder.CreateGEP(src_array_ptr_v, index_v); - std::cout << "3\n"; llvm::Value *store_ptr_v = builder.CreateGEP(dst_array_ptr_v, index_v); - std::cout << "4\n"; llvm::Value *value_from_array_v = builder.CreateLoad(builder.getFloatTy(), load_ptr_v); - std::cout << "5\n"; - llvm::Value *new_value_v = builder.CreateAdd(value_from_array_v, src_value_v); + llvm::Value *new_value_v = builder.CreateFAdd(value_from_array_v, src_value_v); builder.CreateStore(new_value_v, store_ptr_v); llvm::Value *next_index_v = builder.CreateAdd(index_v, builder.getInt64(1)); index_v->addIncoming(next_index_v, loop_body_bb); + builder.CreateBr(loop_entry_bb); builder.SetInsertPoint(loop_end_bb); builder.CreateRetVoid(); + return function; } |