@@ -2615,55 +2615,79 @@ llvm::FunctionCallee LLVMCodeBuilder::resolve_value_assign_copy()
2615
2615
2616
2616
llvm::FunctionCallee LLVMCodeBuilder::resolve_value_toDouble ()
2617
2617
{
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;
2619
2622
}
2620
2623
2621
2624
llvm::FunctionCallee LLVMCodeBuilder::resolve_value_toBool ()
2622
2625
{
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;
2624
2630
}
2625
2631
2626
2632
llvm::FunctionCallee LLVMCodeBuilder::resolve_value_toCString ()
2627
2633
{
2634
+ // NOTE: This function can't be marked read-only because it allocates on the heap
2628
2635
return resolveFunction (" value_toCString" , llvm::FunctionType::get (llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 ), m_valueDataType->getPointerTo (), false ));
2629
2636
}
2630
2637
2631
2638
llvm::FunctionCallee LLVMCodeBuilder::resolve_value_doubleToCString ()
2632
2639
{
2640
+ // NOTE: This function can't be marked read-only because it allocates on the heap
2633
2641
return resolveFunction (" value_doubleToCString" , llvm::FunctionType::get (llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 ), m_builder.getDoubleTy (), false ));
2634
2642
}
2635
2643
2636
2644
llvm::FunctionCallee LLVMCodeBuilder::resolve_value_boolToCString ()
2637
2645
{
2646
+ // NOTE: This function can't be marked read-only because it allocates on the heap
2638
2647
return resolveFunction (" value_boolToCString" , llvm::FunctionType::get (llvm::PointerType::get (llvm::Type::getInt8Ty (m_llvmCtx), 0 ), m_builder.getInt1Ty (), false ));
2639
2648
}
2640
2649
2641
2650
llvm::FunctionCallee LLVMCodeBuilder::resolve_value_stringToDouble ()
2642
2651
{
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;
2644
2656
}
2645
2657
2646
2658
llvm::FunctionCallee LLVMCodeBuilder::resolve_value_stringToBool ()
2647
2659
{
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;
2649
2664
}
2650
2665
2651
2666
llvm::FunctionCallee LLVMCodeBuilder::resolve_value_equals ()
2652
2667
{
2653
2668
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;
2655
2673
}
2656
2674
2657
2675
llvm::FunctionCallee LLVMCodeBuilder::resolve_value_greater ()
2658
2676
{
2659
2677
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;
2661
2682
}
2662
2683
2663
2684
llvm::FunctionCallee LLVMCodeBuilder::resolve_value_lower ()
2664
2685
{
2665
2686
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;
2667
2691
}
2668
2692
2669
2693
llvm::FunctionCallee LLVMCodeBuilder::resolve_list_clear ()
@@ -2693,25 +2717,37 @@ llvm::FunctionCallee LLVMCodeBuilder::resolve_list_insert_empty()
2693
2717
llvm::FunctionCallee LLVMCodeBuilder::resolve_list_data ()
2694
2718
{
2695
2719
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;
2697
2724
}
2698
2725
2699
2726
llvm::FunctionCallee LLVMCodeBuilder::resolve_list_size_ptr ()
2700
2727
{
2701
2728
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;
2703
2733
}
2704
2734
2705
2735
llvm::FunctionCallee LLVMCodeBuilder::resolve_list_alloc_size_ptr ()
2706
2736
{
2707
2737
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;
2709
2742
}
2710
2743
2711
2744
llvm::FunctionCallee LLVMCodeBuilder::resolve_list_to_string ()
2712
2745
{
2713
2746
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;
2715
2751
}
2716
2752
2717
2753
llvm::FunctionCallee LLVMCodeBuilder::resolve_llvm_random ()
@@ -2742,5 +2778,8 @@ llvm::FunctionCallee LLVMCodeBuilder::resolve_llvm_random_bool()
2742
2778
llvm::FunctionCallee LLVMCodeBuilder::resolve_strcasecmp ()
2743
2779
{
2744
2780
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;
2746
2785
}
0 commit comments