[PATCH] D23844: [Coroutines] Part 9: Add cleanup subfunction.

Gor Nishanov via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 24 11:09:25 PDT 2016


GorNishanov created this revision.
GorNishanov added a reviewer: majnemer.
GorNishanov added a subscriber: llvm-commits.
Herald added a subscriber: mehdi_amini.

[Coroutines] Part 9: Add cleanup subfunction.

This patch completes coroutine heap allocation elision. Now, the heap elision example from docs\Coroutines.rst compiles and produces expected result (see test/Transform/Coroutines/ex3.ll) 

Intrinsic Changes:
* coro.free gets a token parameter tying it to coro.id to allow reliably discovering all coro.frees associated with a particular coroutine.
* coro.id gets an extra parameter that points back to a coroutine function. This allows to check whether a coro.id describes the enclosing function or it belongs to a different function that was later inlined.

CoroSplit now creates three subfunctions:
# f$resume - resume logic
# f$destroy - cleanup logic, followed by a deallocation code
# f$cleanup - just the cleanup code

CoroElide pass during devirtualization replaces coro.destroy with either f$destroy or f$cleanup depending whether heap elision is performed or not.

Other fixes, improvements:
* Fixed buglet in Shape::buildFrame that was not creating coro.save properly if coroutine has more than one suspend point.

* Switched to using variable width suspend index field (no longer limited to 32 bit index field can be as little as i1 or as large as i<whatever-size_t-is>)


https://reviews.llvm.org/D23844

Files:
  docs/Coroutines.rst
  include/llvm/IR/Intrinsics.td
  lib/IR/Verifier.cpp
  lib/Transforms/Coroutines/CoroEarly.cpp
  lib/Transforms/Coroutines/CoroElide.cpp
  lib/Transforms/Coroutines/CoroFrame.cpp
  lib/Transforms/Coroutines/CoroInstr.h
  lib/Transforms/Coroutines/CoroInternal.h
  lib/Transforms/Coroutines/CoroSplit.cpp
  lib/Transforms/Coroutines/Coroutines.cpp
  test/Transforms/Coroutines/coro-elide.ll
  test/Transforms/Coroutines/coro-heap-elide.ll
  test/Transforms/Coroutines/coro-split-00.ll
  test/Transforms/Coroutines/coro-split-01.ll
  test/Transforms/Coroutines/ex0.ll
  test/Transforms/Coroutines/ex1.ll
  test/Transforms/Coroutines/ex2.ll
  test/Transforms/Coroutines/ex3.ll
  test/Transforms/Coroutines/restart-trigger.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23844.69140.patch
Type: text/x-patch
Size: 42562 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160824/53bcf460/attachment-0001.bin>


More information about the llvm-commits mailing list