[PATCH] D29102: [coroutines] Spill the result of the invoke instruction correctly
Gor Nishanov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 24 16:17:54 PST 2017
GorNishanov created this revision.
Herald added subscribers: EricWF, mehdi_amini.
When we decide that the result of the invoke instruction need to be spilled, we need to insert the spill into a block that is on the normal edge coming out of the invoke instruction. (Prior to this change the code would insert the spill immediately after the invoke instruction, which breaks the IR, since invoke is a terminator instruction).
In the following example, we will split the edge going into %cont and insert the spill there.
%r = invoke double @print(double 0.0) to label %cont unwind label %pad
cont:
%0 = call i8 @llvm.coro.suspend(token none, i1 false)
switch i8 %0, label %suspend [i8 0, label %resume
i8 1, label %cleanup]
resume:
call double @print(double %r)
https://reviews.llvm.org/D29102
Files:
lib/Transforms/Coroutines/CoroFrame.cpp
test/Transforms/Coroutines/coro-frame.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D29102.85650.patch
Type: text/x-patch
Size: 4233 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170125/004b3de1/attachment.bin>
More information about the llvm-commits
mailing list