This roughly mimics std::thread(...).detach() except it allows to customize the stack size. Required for https://reviews.llvm.org/D50993.
I've decided against reusing the existing llvm_execute_on_thread because it's not obvious what to do with the ownership of the passed function/arguments:
- If we pass possibly owning functions data to llvm_execute_on_thread, we'll lose the ability to pass small non-owning non-allocating functions for the joining case (as it's used now). Is it important enough?
- If we use the non-owning interface in the new use case, we'll force clients to transfer ownership to the spawned thread manually, but similar code would still have to exist inside llvm_execute_on_thread(_async) anyway (as we can't just pass the same non-owning pointer to pthreads and Windows implementations, and would be forced to wrap it in some structure, and deal with its ownership.
Can you remove the llvm_execute_on_thread while you're here?