@@ -2615,55 +2615,79 @@ llvm::FunctionCallee LLVMCodeBuilder::resolve_value_assign_copy()
26152615
26162616llvm::FunctionCallee LLVMCodeBuilder::resolve_value_toDouble ()
26172617{
2618- return resolveFunction (" value_toDouble" , llvm::FunctionType::get (m_builder.getDoubleTy (), m_valueDataType->getPointerTo (), false ));
2618+ llvm::FunctionCallee callee = resolveFunction (" value_toDouble" , llvm::FunctionType::get (m_builder.getDoubleTy (), m_valueDataType->getPointerTo (), false ));
2619+ llvm::Function *func = llvm::cast<llvm::Function>(callee.getCallee ());
2620+ func->addFnAttr (llvm::Attribute::ReadOnly);
2621+ return callee;
26192622}
26202623
26212624llvm::FunctionCallee LLVMCodeBuilder::resolve_value_toBool ()
26222625{
2623- return resolveFunction (" value_toBool" , llvm::FunctionType::get (m_builder.getInt1Ty (), m_valueDataType->getPointerTo (), false ));
2626+ llvm::FunctionCallee callee = resolveFunction (" value_toBool" , llvm::FunctionType::get (m_builder.getInt1Ty (), m_valueDataType->getPointerTo (), false ));
2627+ llvm::Function *func = llvm::cast<llvm::Function>(callee.getCallee ());
2628+ func->addFnAttr (llvm::Attribute::ReadOnly);
2629+ return callee;
26242630}
26252631
26262632llvm::FunctionCallee LLVMCodeBuilder::resolve_value_toCString ()
26272633{
2634+ // NOTE: This function can't be marked read-only because it allocates on the heap
26282635 return resolveFunction (" value_toCString" , llvm::FunctionType::get (llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 ), m_valueDataType->getPointerTo (), false ));
26292636}
26302637
26312638llvm::FunctionCallee LLVMCodeBuilder::resolve_value_doubleToCString ()
26322639{
2640+ // NOTE: This function can't be marked read-only because it allocates on the heap
26332641 return resolveFunction (" value_doubleToCString" , llvm::FunctionType::get (llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 ), m_builder.getDoubleTy (), false ));
26342642}
26352643
26362644llvm::FunctionCallee LLVMCodeBuilder::resolve_value_boolToCString ()
26372645{
2646+ // NOTE: This function can't be marked read-only because it allocates on the heap
26382647 return resolveFunction (" value_boolToCString" , llvm::FunctionType::get (llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 ), m_builder.getInt1Ty (), false ));
26392648}
26402649
26412650llvm::FunctionCallee LLVMCodeBuilder::resolve_value_stringToDouble ()
26422651{
2643- return resolveFunction (" value_stringToDouble" , llvm::FunctionType::get (m_builder.getDoubleTy (), llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 ), false ));
2652+ llvm::FunctionCallee callee = resolveFunction (" value_stringToDouble" , llvm::FunctionType::get (m_builder.getDoubleTy (), llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 ), false ));
2653+ llvm::Function *func = llvm::cast<llvm::Function>(callee.getCallee ());
2654+ func->addFnAttr (llvm::Attribute::ReadOnly);
2655+ return callee;
26442656}
26452657
26462658llvm::FunctionCallee LLVMCodeBuilder::resolve_value_stringToBool ()
26472659{
2648- return resolveFunction (" value_stringToBool" , llvm::FunctionType::get (m_builder.getInt1Ty (), llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 ), false ));
2660+ llvm::FunctionCallee callee = resolveFunction (" value_stringToBool" , llvm::FunctionType::get (m_builder.getInt1Ty (), llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 ), false ));
2661+ llvm::Function *func = llvm::cast<llvm::Function>(callee.getCallee ());
2662+ func->addFnAttr (llvm::Attribute::ReadOnly);
2663+ return callee;
26492664}
26502665
26512666llvm::FunctionCallee LLVMCodeBuilder::resolve_value_equals ()
26522667{
26532668 llvm::Type *valuePtr = m_valueDataType->getPointerTo ();
2654- return resolveFunction (" value_equals" , llvm::FunctionType::get (m_builder.getInt1Ty (), { valuePtr, valuePtr }, false ));
2669+ llvm::FunctionCallee callee = resolveFunction (" value_equals" , llvm::FunctionType::get (m_builder.getInt1Ty (), { valuePtr, valuePtr }, false ));
2670+ llvm::Function *func = llvm::cast<llvm::Function>(callee.getCallee ());
2671+ func->addFnAttr (llvm::Attribute::ReadOnly);
2672+ return callee;
26552673}
26562674
26572675llvm::FunctionCallee LLVMCodeBuilder::resolve_value_greater ()
26582676{
26592677 llvm::Type *valuePtr = m_valueDataType->getPointerTo ();
2660- return resolveFunction (" value_greater" , llvm::FunctionType::get (m_builder.getInt1Ty (), { valuePtr, valuePtr }, false ));
2678+ llvm::FunctionCallee callee = resolveFunction (" value_greater" , llvm::FunctionType::get (m_builder.getInt1Ty (), { valuePtr, valuePtr }, false ));
2679+ llvm::Function *func = llvm::cast<llvm::Function>(callee.getCallee ());
2680+ func->addFnAttr (llvm::Attribute::ReadOnly);
2681+ return callee;
26612682}
26622683
26632684llvm::FunctionCallee LLVMCodeBuilder::resolve_value_lower ()
26642685{
26652686 llvm::Type *valuePtr = m_valueDataType->getPointerTo ();
2666- return resolveFunction (" value_lower" , llvm::FunctionType::get (m_builder.getInt1Ty (), { valuePtr, valuePtr }, false ));
2687+ llvm::FunctionCallee callee = resolveFunction (" value_lower" , llvm::FunctionType::get (m_builder.getInt1Ty (), { valuePtr, valuePtr }, false ));
2688+ llvm::Function *func = llvm::cast<llvm::Function>(callee.getCallee ());
2689+ func->addFnAttr (llvm::Attribute::ReadOnly);
2690+ return callee;
26672691}
26682692
26692693llvm::FunctionCallee LLVMCodeBuilder::resolve_list_clear ()
@@ -2693,25 +2717,37 @@ llvm::FunctionCallee LLVMCodeBuilder::resolve_list_insert_empty()
26932717llvm::FunctionCallee LLVMCodeBuilder::resolve_list_data ()
26942718{
26952719 llvm::Type *listPtr = llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 );
2696- return resolveFunction (" list_data" , llvm::FunctionType::get (m_valueDataType->getPointerTo (), { listPtr }, false ));
2720+ llvm::FunctionCallee callee = resolveFunction (" list_data" , llvm::FunctionType::get (m_valueDataType->getPointerTo (), { listPtr }, false ));
2721+ llvm::Function *func = llvm::cast<llvm::Function>(callee.getCallee ());
2722+ func->addFnAttr (llvm::Attribute::ReadOnly);
2723+ return callee;
26972724}
26982725
26992726llvm::FunctionCallee LLVMCodeBuilder::resolve_list_size_ptr ()
27002727{
27012728 llvm::Type *listPtr = llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 );
2702- return resolveFunction (" list_size_ptr" , llvm::FunctionType::get (m_builder.getInt64Ty ()->getPointerTo ()->getPointerTo (), { listPtr }, false ));
2729+ llvm::FunctionCallee callee = resolveFunction (" list_size_ptr" , llvm::FunctionType::get (m_builder.getInt64Ty ()->getPointerTo ()->getPointerTo (), { listPtr }, false ));
2730+ llvm::Function *func = llvm::cast<llvm::Function>(callee.getCallee ());
2731+ func->addFnAttr (llvm::Attribute::ReadOnly);
2732+ return callee;
27032733}
27042734
27052735llvm::FunctionCallee LLVMCodeBuilder::resolve_list_alloc_size_ptr ()
27062736{
27072737 llvm::Type *listPtr = llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 );
2708- return resolveFunction (" list_alloc_size_ptr" , llvm::FunctionType::get (m_builder.getInt64Ty ()->getPointerTo ()->getPointerTo (), { listPtr }, false ));
2738+ llvm::FunctionCallee callee = resolveFunction (" list_alloc_size_ptr" , llvm::FunctionType::get (m_builder.getInt64Ty ()->getPointerTo ()->getPointerTo (), { listPtr }, false ));
2739+ llvm::Function *func = llvm::cast<llvm::Function>(callee.getCallee ());
2740+ func->addFnAttr (llvm::Attribute::ReadOnly);
2741+ return callee;
27092742}
27102743
27112744llvm::FunctionCallee LLVMCodeBuilder::resolve_list_to_string ()
27122745{
27132746 llvm::Type *pointerType = llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 );
2714- return resolveFunction (" list_to_string" , llvm::FunctionType::get (pointerType, { pointerType }, false ));
2747+ llvm::FunctionCallee callee = resolveFunction (" list_to_string" , llvm::FunctionType::get (pointerType, { pointerType }, false ));
2748+ llvm::Function *func = llvm::cast<llvm::Function>(callee.getCallee ());
2749+ func->addFnAttr (llvm::Attribute::ReadOnly);
2750+ return callee;
27152751}
27162752
27172753llvm::FunctionCallee LLVMCodeBuilder::resolve_llvm_random ()
@@ -2742,5 +2778,8 @@ llvm::FunctionCallee LLVMCodeBuilder::resolve_llvm_random_bool()
27422778llvm::FunctionCallee LLVMCodeBuilder::resolve_strcasecmp ()
27432779{
27442780 llvm::Type *pointerType = llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 );
2745- return resolveFunction (" strcasecmp" , llvm::FunctionType::get (m_builder.getInt32Ty (), { pointerType, pointerType }, false ));
2781+ llvm::FunctionCallee callee = resolveFunction (" strcasecmp" , llvm::FunctionType::get (m_builder.getInt32Ty (), { pointerType, pointerType }, false ));
2782+ llvm::Function *func = llvm::cast<llvm::Function>(callee.getCallee ());
2783+ func->addFnAttr (llvm::Attribute::ReadOnly);
2784+ return callee;
27462785}
0 commit comments