llvm-project/llvm/lib/Transforms/Coroutines
Gor Nishanov faf36c2e0b [Coroutines] Part13: Handle single edge PHINodes across suspends
Summary:
If one of the uses of the value is a single edge PHINode, handle it.

Original:

    %val = something
    <suspend>
    %p = PHINode [%val]

After Spill + Part13:

    %val = something
    %slot = gep val.spill.slot
    store %val, %slot
    <suspend>
    %p = load %slot

Plus tiny fixes/changes:
   * use correct index for coro.free in CoroCleanup
   * fixup id parameter in coro.free to allow authoring coroutine in plain C with __builtins

Reviewers: majnemer

Subscribers: mehdi_amini, llvm-commits

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

llvm-svn: 281020
2016-09-09 05:39:00 +00:00
..
CMakeLists.txt [Coroutines] Part 7: Split coroutine into subfunctions 2016-08-16 18:04:14 +00:00
CoroCleanup.cpp [Coroutines] Part13: Handle single edge PHINodes across suspends 2016-09-09 05:39:00 +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] Part13: Handle single edge PHINodes across suspends 2016-09-09 05:39:00 +00:00
CoroInstr.h [Coroutines] Part 10: Add coroutine promise support. 2016-08-31 00:35:41 +00:00
CoroInternal.h [Coroutines] Part 10: Add coroutine promise support. 2016-08-31 00:35:41 +00:00
CoroSplit.cpp [Coroutines] Part11: Add final suspend handling. 2016-09-05 04:44:30 +00:00
Coroutines.cpp [Coroutines] Part11: Add final suspend handling. 2016-09-05 04:44:30 +00:00
LLVMBuild.txt