diff options
author | Gor Nishanov <GorNishanov@gmail.com> | 2017-05-23 01:13:17 +0000 |
---|---|---|
committer | Gor Nishanov <GorNishanov@gmail.com> | 2017-05-23 01:13:17 +0000 |
commit | aa6e9a99b46eb97fd37bd5b5f693b81bc9b13630 (patch) | |
tree | 50beb2d6b12c01099fa76c61a464dca1ce424f84 /llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | |
parent | fb9476ee6c111755d1ac8ba435dd4bb5bc7b82a1 (diff) | |
download | bcm5719-llvm-aa6e9a99b46eb97fd37bd5b5f693b81bc9b13630.tar.gz bcm5719-llvm-aa6e9a99b46eb97fd37bd5b5f693b81bc9b13630.zip |
[coroutines] Add support for allocation elision
Summary:
We wrap allocation code so that backend can elide it if necessary.
llvm.coro.alloc intrinsic returns true, when allocation is needed and false otherwise.
```
%NeedAlloc = call i1 @llvm.coro.alloc(token %2)
br i1 %NeedAlloc, label %AllocBB, label %InitBB
AllocBB:
%5 = call i64 @llvm.coro.size.i64()
%call = call i8* @_Znwm(i64 %5) ; operator new
br label %InitBB
InitBB:
%Phi = phi i8* [ null, %0 ], [ %call, %4 ]
call i8* @llvm.coro.begin(token %2, i8* %Phi)
```
Reviewers: majnemer, EricWF
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D31584
llvm-svn: 303596
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp')
0 files changed, 0 insertions, 0 deletions