Tail calls from OCaml

How do you get a tail call using the OCaml's LLVM API?

To answer my own question: I believe this is currently impossible with the JIT
(execution engine) because there is no way to set PerformTailCallOpt=true in
llvm/Target/TargetOptions.cpp from OCaml.

As a workaround, I have simply edited the source to LLVM and reinstalled it.
Specifically, changing part of "lib/Target/TargetMachine.cpp" to:

static cl::opt<bool, true>
EnablePerformTailCallOpt("tailcallopt",
                         cl::desc("Turn on tail call optimization."),
                         cl::location(PerformTailCallOpt),
                         cl::init(true));

I assume this is set to false by default in LLVM because tail calls are not
generally desirable, e.g. they undermine stack traces?

However, you can get tail calls in statically-compiled code by:

. Call "set_function_call_conv CallConv.fast" on the function.

. Call "set_instruction_call_conv CallConv.fast" and "set_tail_call true" on
the call instruction.

. Emit the LLVM bitcode with "Llvm_bitwriter.write_bitcode_file m "aout.bc"".

. Use "llc -tailcallopt" when compiling the bitcode to assembler.

HTH.