@@ -100,6 +100,8 @@ std::shared_ptr<ExecutableCode> LLVMCodeBuilder::finalize()
100100 listPtr.ptr = getListPtr (targetLists, list);
101101 listPtr.dataPtr = m_builder.CreateAlloca (m_valueDataType->getPointerTo ());
102102 m_builder.CreateStore (m_builder.CreateCall (resolve_list_data (), listPtr.ptr ), listPtr.dataPtr );
103+ listPtr.sizePtr = m_builder.CreateAlloca (m_builder.getInt64Ty ()->getPointerTo ());
104+ m_builder.CreateStore (m_builder.CreateCall (resolve_list_size_ptr (), listPtr.ptr ), listPtr.sizePtr );
103105 }
104106
105107 // Execute recorded steps
@@ -548,7 +550,8 @@ std::shared_ptr<ExecutableCode> LLVMCodeBuilder::finalize()
548550 case LLVMInstruction::Type::GetListSize: {
549551 assert (step.args .size () == 0 );
550552 const LLVMListPtr &listPtr = m_listPtrs[step.workList ];
551- step.functionReturnReg ->value = m_builder.CreateUIToFP (m_builder.CreateCall (resolve_list_size (), listPtr.ptr ), m_builder.getDoubleTy ());
553+ llvm::Value *sizePtr = m_builder.CreateLoad (m_builder.getInt64Ty ()->getPointerTo (), listPtr.sizePtr );
554+ step.functionReturnReg ->value = m_builder.CreateUIToFP (m_builder.CreateLoad (m_builder.getInt64Ty (), sizePtr), m_builder.getDoubleTy ());
552555 break ;
553556 }
554557
@@ -2050,10 +2053,10 @@ llvm::FunctionCallee LLVMCodeBuilder::resolve_list_data()
20502053 return resolveFunction (" list_data" , llvm::FunctionType::get (m_valueDataType->getPointerTo (), { listPtr }, false ));
20512054}
20522055
2053- llvm::FunctionCallee LLVMCodeBuilder::resolve_list_size ()
2056+ llvm::FunctionCallee LLVMCodeBuilder::resolve_list_size_ptr ()
20542057{
20552058 llvm::Type *listPtr = llvm::PointerType::get (llvm::Type::getInt8Ty (m_ctx), 0 );
2056- return resolveFunction (" list_size " , llvm::FunctionType::get (m_builder.getInt64Ty (), { listPtr }, false ));
2059+ return resolveFunction (" list_size_ptr " , llvm::FunctionType::get (m_builder.getInt64Ty ()-> getPointerTo ()-> getPointerTo (), { listPtr }, false ));
20572060}
20582061
20592062llvm::FunctionCallee LLVMCodeBuilder::resolve_strcasecmp ()
0 commit comments