Commit Graph

3 Commits

Author SHA1 Message Date
Arnold Schwaighofer
8c5fc073fd [IRGen] Use coro.end.async to return from an async function
The `coro.end.async` intrinsic allow specifying a function that is to be
tail-called as the last thing before returning.

LLVM lowering will inline the `must-tail-call` function argument to
`coro.end.async`. This `must-tail-call` function can contain a
`musttail` call.

```
define @my_must_tail_call_func(void (*)(i64) %fnptr, i64 %args) {
  musttail call void %fnptr(i64 %args)
  ret void
}

define @async_func() {
  ...
  coro.end.async(..., @my_must_tail_call_func, %return_continuation, i64 %args)
  unreachable
}
```
2021-03-10 10:15:27 -08:00
Nate Chandler
9aced92dd6 [Test] Added -g to IRGen/async test invocations.
Emitting the debug info exercises more functionality.
2021-03-08 14:43:16 -08:00
Arnold Schwaighofer
17109ccfc7 IRGen: Fix unreachable lowering in async functions
We need to add the coro.end intrinsic call for lowering to process
functions correctly.

rdar://73274012
2021-01-19 08:48:11 -08:00