[Coroutines]: Part6b: Add coro.id intrinsic.
authorGor Nishanov <GorNishanov@gmail.com>
Fri, 12 Aug 2016 05:45:49 +0000 (05:45 +0000)
committerGor Nishanov <GorNishanov@gmail.com>
Fri, 12 Aug 2016 05:45:49 +0000 (05:45 +0000)
commit0f303accded1e45fdb897cf8cd7cd687ab26fdb1
tree69779413a46346225ef7a53cb48b983400313ef4
parent6be57b3fb1076138c85081fb49b1cf45c492bdd6
[Coroutines]: Part6b: Add coro.id intrinsic.

Summary:
1. Make coroutine representation more robust against optimization that may duplicate instruction by introducing coro.id intrinsics that returns a token that will get fed into coro.alloc and coro.begin. Due to coro.id returning a token, it won't get duplicated and can be used as reliable indicator of coroutine identify when a particular coroutine call gets inlined.
2. Move last three arguments of coro.begin into coro.id as they will be shared if coro.begin will get duplicated.
3. doc + test + code updated to support the new intrinsic.

Reviewers: mehdi_amini, majnemer

Subscribers: mehdi_amini, llvm-commits

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

llvm-svn: 278481
llvm/docs/Coroutines.rst
llvm/include/llvm/IR/Intrinsics.td
llvm/lib/IR/Verifier.cpp
llvm/lib/Transforms/Coroutines/CoroEarly.cpp
llvm/lib/Transforms/Coroutines/CoroElide.cpp
llvm/lib/Transforms/Coroutines/CoroInstr.h
llvm/lib/Transforms/Coroutines/CoroInternal.h
llvm/lib/Transforms/Coroutines/Coroutines.cpp
llvm/test/Transforms/Coroutines/coro-elide.ll
llvm/test/Transforms/Coroutines/coro-heap-elide.ll
llvm/test/Transforms/Coroutines/restart-trigger.ll