[llvm] Add the 'notail' flag to non-tailcalls when using the 3.9 based llvm.
authorZoltan Varga <vargaz@gmail.com>
Thu, 27 Oct 2016 22:28:46 +0000 (18:28 -0400)
committerZoltan Varga <vargaz@gmail.com>
Thu, 27 Oct 2016 22:29:05 +0000 (18:29 -0400)
mono/mini/mini-llvm-cpp.cpp
mono/mini/mini-llvm.c

index 1bf14393db25142339add6f35a4e311d3ccbc728..a93ee9d9111282efa41f7bbf365408f93ad5f96b 100644 (file)
@@ -233,7 +233,7 @@ void
 mono_llvm_set_call_notail (LLVMValueRef func)
 {
 #if LLVM_API_VERSION > 100
-       //unwrap<CallInst>(func)->setTailCallKind (CallInst::TailCallKind::TCK_NoTail);
+       unwrap<CallInst>(func)->setTailCallKind (CallInst::TailCallKind::TCK_NoTail);
 #endif
 }
 
index 3ccd8d705656f7b1b81c4719b117b4610c96d2df..1a4669732a158d020600c92d64d98d322e95002e 100644 (file)
@@ -3487,6 +3487,9 @@ process_call (EmitContext *ctx, MonoBasicBlock *bb, LLVMBuilderRef *builder_ref,
 
        lcall = emit_call (ctx, bb, &builder, callee, args, LLVMCountParamTypes (llvm_sig));
 
+       if (ins->opcode != OP_TAILCALL && LLVMGetInstructionOpcode (lcall) == LLVMCall)
+               mono_llvm_set_call_notail (lcall);
+
        /*
         * Modify cconv and parameter attributes to pass rgctx/imt correctly.
         */