@@ -201,7 +201,7 @@ std::shared_ptr<ExecutableCode> LLVMCodeBuilder::finalize()
201201 if (reg1->type () == Compiler::StaticType::Bool && reg2->type () == Compiler::StaticType::Bool) {
202202 llvm::Value *bool1 = castValue (arg1.second , Compiler::StaticType::Bool);
203203 llvm::Value *bool2 = castValue (arg2.second , Compiler::StaticType::Bool);
204- step.functionReturnReg ->value = m_builder.CreateCall (resolve_llvm_random_bool (), { bool1, bool2 });
204+ step.functionReturnReg ->value = m_builder.CreateCall (resolve_llvm_random_bool (), { executionContextPtr, bool1, bool2 });
205205 } else {
206206 llvm::Constant *inf = llvm::ConstantFP::getInfinity (m_builder.getDoubleTy (), false );
207207 llvm::Value *num1 = removeNaN (castValue (arg1.second , Compiler::StaticType::Number));
@@ -212,11 +212,11 @@ std::shared_ptr<ExecutableCode> LLVMCodeBuilder::finalize()
212212
213213 // NOTE: The random function will be called even in edge cases where it isn't needed, but they're rare, so it shouldn't be an issue
214214 if (reg1->type () == Compiler::StaticType::Number && reg2->type () == Compiler::StaticType::Number)
215- step.functionReturnReg ->value = m_builder.CreateSelect (isInfOrNaN, sum, m_builder.CreateCall (resolve_llvm_random_double (), { num1, num2 }));
215+ step.functionReturnReg ->value = m_builder.CreateSelect (isInfOrNaN, sum, m_builder.CreateCall (resolve_llvm_random_double (), { executionContextPtr, num1, num2 }));
216216 else {
217217 llvm::Value *value1 = createValue (reg1);
218218 llvm::Value *value2 = createValue (reg2);
219- step.functionReturnReg ->value = m_builder.CreateSelect (isInfOrNaN, sum, m_builder.CreateCall (resolve_llvm_random (), { value1, value2 }));
219+ step.functionReturnReg ->value = m_builder.CreateSelect (isInfOrNaN, sum, m_builder.CreateCall (resolve_llvm_random (), { executionContextPtr, value1, value2 }));
220220 }
221221 }
222222
@@ -2373,18 +2373,21 @@ llvm::FunctionCallee LLVMCodeBuilder::resolve_list_to_string()
23732373
23742374llvm::FunctionCallee LLVMCodeBuilder::resolve_llvm_random ()
23752375{
2376+ llvm::Type *pointerType = llvm::PointerType::get (llvm::Type::getInt8Ty (m_ctx), 0 );
23762377 llvm::Type *valuePtr = m_valueDataType->getPointerTo ();
2377- return resolveFunction (" llvm_random" , llvm::FunctionType::get (m_builder.getDoubleTy (), { valuePtr, valuePtr }, false ));
2378+ return resolveFunction (" llvm_random" , llvm::FunctionType::get (m_builder.getDoubleTy (), { pointerType, valuePtr, valuePtr }, false ));
23782379}
23792380
23802381llvm::FunctionCallee LLVMCodeBuilder::resolve_llvm_random_double ()
23812382{
2382- return resolveFunction (" llvm_random_double" , llvm::FunctionType::get (m_builder.getDoubleTy (), { m_builder.getDoubleTy (), m_builder.getDoubleTy () }, false ));
2383+ llvm::Type *pointerType = llvm::PointerType::get (llvm::Type::getInt8Ty (m_ctx), 0 );
2384+ return resolveFunction (" llvm_random_double" , llvm::FunctionType::get (m_builder.getDoubleTy (), { pointerType, m_builder.getDoubleTy (), m_builder.getDoubleTy () }, false ));
23832385}
23842386
23852387llvm::FunctionCallee LLVMCodeBuilder::resolve_llvm_random_bool ()
23862388{
2387- return resolveFunction (" llvm_random_bool" , llvm::FunctionType::get (m_builder.getDoubleTy (), { m_builder.getInt1Ty (), m_builder.getInt1Ty () }, false ));
2389+ llvm::Type *pointerType = llvm::PointerType::get (llvm::Type::getInt8Ty (m_ctx), 0 );
2390+ return resolveFunction (" llvm_random_bool" , llvm::FunctionType::get (m_builder.getDoubleTy (), { pointerType, m_builder.getInt1Ty (), m_builder.getInt1Ty () }, false ));
23882391}
23892392
23902393llvm::FunctionCallee LLVMCodeBuilder::resolve_strcasecmp ()
0 commit comments