mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 11:02:59 +02:00
37bbef4980
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
19 lines
689 B
LLVM
19 lines
689 B
LLVM
; Verifies that restart trigger forces IPO pipelines restart and the same
|
|
; coroutine is looked at by CoroSplit pass twice.
|
|
; REQUIRES: asserts
|
|
; RUN: opt < %s -S -O0 -enable-coroutines -debug-only=coro-split 2>&1 | FileCheck %s
|
|
; RUN: opt < %s -S -O1 -enable-coroutines -debug-only=coro-split 2>&1 | FileCheck %s
|
|
|
|
; CHECK: CoroSplit: Processing coroutine 'f' state: 0
|
|
; CHECK-NEXT: CoroSplit: Processing coroutine 'f' state: 1
|
|
|
|
declare token @llvm.coro.id(i32, i8*, i8*)
|
|
declare i8* @llvm.coro.begin(token, i8*)
|
|
|
|
; a coroutine start function
|
|
define void @f() {
|
|
%id = call token @llvm.coro.id(i32 0, i8* null, i8* null)
|
|
call i8* @llvm.coro.begin(token %id, i8* null)
|
|
ret void
|
|
}
|