Add disable_omit_fp support for LLVM (#2045)
authormonojenkins <jo.shields+jenkins@xamarin.com>
Thu, 23 Jan 2020 15:30:58 +0000 (10:30 -0500)
committerAlexander Köplinger <alex.koeplinger@outlook.com>
Thu, 23 Jan 2020 15:30:58 +0000 (16:30 +0100)
Fixes mono/mono#18417

src/mono/mono/mini/mini-llvm-cpp.cpp
src/mono/mono/mini/mini-llvm-cpp.h
src/mono/mono/mini/mini-llvm.c

index 0ca6853..86fca1c 100644 (file)
@@ -455,6 +455,14 @@ mono_llvm_add_func_attr (LLVMValueRef func, AttrKind kind)
 }
 
 void
+mono_llvm_add_func_attr_nv (LLVMValueRef func, const char *attr_name, const char *attr_value)
+{
+       AttrBuilder NewAttrs;
+       NewAttrs.addAttribute (attr_name, attr_value);
+       unwrap<Function> (func)->addAttributes (AttributeList::FunctionIndex, NewAttrs);
+}
+
+void
 mono_llvm_add_param_attr (LLVMValueRef param, AttrKind kind)
 {
        Function *func = unwrap<Argument> (param)->getParent ();
index 2ba1151..9c2e6d0 100644 (file)
@@ -141,6 +141,9 @@ void
 mono_llvm_add_func_attr (LLVMValueRef func, AttrKind kind);
 
 void
+mono_llvm_add_func_attr_nv (LLVMValueRef func, const char *attr_name, const char *attr_value);
+
+void
 mono_llvm_add_param_attr (LLVMValueRef param, AttrKind kind);
 
 void
index 0881f9a..00cd319 100644 (file)
@@ -8559,6 +8559,9 @@ emit_method_inner (EmitContext *ctx)
 
        mono_llvm_add_func_attr (method, LLVM_ATTR_UW_TABLE);
 
+       if (cfg->disable_omit_fp)
+               mono_llvm_add_func_attr_nv (method, "no-frame-pointer-elim", "true");
+
        if (cfg->compile_aot) {
                if (is_externally_callable (ctx, cfg->method)) {
                        LLVMSetLinkage (method, LLVMExternalLinkage);