llvm-project/llvm/lib/Transforms/Coroutines
Gor Nishanov a263a60ad5 [Coroutines] Part15c: Fix coro-split to correctly handle definitions between coro.save and coro.suspend
Summary:
In the case below, %Result.i19 is defined between coro.save and coro.suspend and used after coro.suspend. We need to correctly place such a value into the coroutine frame.

```
  %save = call token @llvm.coro.save(i8* null)
  %Result.i19 = getelementptr inbounds %"struct.lean_future<int>::Awaiter", %"struct.lean_future<int>::Awaiter"* %ref.tmp7, i64 0, i32 0
  %suspend = call i8 @llvm.coro.suspend(token %save, i1 false)
  switch i8 %suspend, label %exit [
    i8 0, label %await.ready
    i8 1, label %exit
  ]
await.ready:
  %val = load i32, i32* %Result.i19

```

Reviewers: majnemer

Subscribers: llvm-commits, mehdi_amini

Differential Revision: https://reviews.llvm.org/D24418

llvm-svn: 282902
2016-09-30 19:24:19 +00:00
..
CMakeLists.txt [Coroutines] Part 7: Split coroutine into subfunctions 2016-08-16 18:04:14 +00:00
CoroCleanup.cpp [Coroutines] Part 15a: Lower coro.subfn.addr in CoroCleanup 2016-09-30 18:41:35 +00:00
CoroEarly.cpp [Coroutines] Part13: Handle single edge PHINodes across suspends 2016-09-09 05:39:00 +00:00
CoroElide.cpp [Coroutines] Part 9: Add cleanup subfunction. 2016-08-29 14:34:12 +00:00
CoroFrame.cpp [Coroutines] Part15c: Fix coro-split to correctly handle definitions between coro.save and coro.suspend 2016-09-30 19:24:19 +00:00
CoroInstr.h [Coroutines] Part14: Handle coroutines with no suspend points. 2016-09-26 15:49:28 +00:00
CoroInternal.h [Coroutines] Part 10: Add coroutine promise support. 2016-08-31 00:35:41 +00:00
CoroSplit.cpp [Coroutines] Part15b: Fix dbg information handling in coro-split. 2016-09-30 19:05:06 +00:00
Coroutines.cpp [Coroutines] Part 15a: Lower coro.subfn.addr in CoroCleanup 2016-09-30 18:41:35 +00:00
LLVMBuild.txt