diff options
Diffstat (limited to 'test/Transforms/Coroutines')
-rw-r--r-- | test/Transforms/Coroutines/ArgAddr.ll | 4 | ||||
-rw-r--r-- | test/Transforms/Coroutines/coro-frame.ll | 61 | ||||
-rw-r--r-- | test/Transforms/Coroutines/coro-spill-after-phi.ll | 60 | ||||
-rw-r--r-- | test/Transforms/Coroutines/coro-split-00.ll | 4 | ||||
-rw-r--r-- | test/Transforms/Coroutines/coro-split-01.ll | 4 | ||||
-rw-r--r-- | test/Transforms/Coroutines/coro-split-02.ll | 4 | ||||
-rw-r--r-- | test/Transforms/Coroutines/coro-split-dbg.ll | 8 | ||||
-rw-r--r-- | test/Transforms/Coroutines/coro-split-eh.ll | 145 | ||||
-rw-r--r-- | test/Transforms/Coroutines/ex0.ll | 4 | ||||
-rw-r--r-- | test/Transforms/Coroutines/ex1.ll | 4 | ||||
-rw-r--r-- | test/Transforms/Coroutines/ex2.ll | 4 | ||||
-rw-r--r-- | test/Transforms/Coroutines/ex3.ll | 4 | ||||
-rw-r--r-- | test/Transforms/Coroutines/ex4.ll | 4 | ||||
-rw-r--r-- | test/Transforms/Coroutines/ex5.ll | 4 | ||||
-rw-r--r-- | test/Transforms/Coroutines/no-suspend.ll | 10 | ||||
-rw-r--r-- | test/Transforms/Coroutines/phi-coro-end.ll | 4 | ||||
-rw-r--r-- | test/Transforms/Coroutines/restart-trigger.ll | 4 |
17 files changed, 299 insertions, 33 deletions
diff --git a/test/Transforms/Coroutines/ArgAddr.ll b/test/Transforms/Coroutines/ArgAddr.ll index 4bedb510cd9ee..5d0fbd781be96 100644 --- a/test/Transforms/Coroutines/ArgAddr.ll +++ b/test/Transforms/Coroutines/ArgAddr.ll @@ -32,7 +32,7 @@ coro_Cleanup: br label %coro_Suspend coro_Suspend: - call void @llvm.coro.end(i8* null, i1 false) + call i1 @llvm.coro.end(i8* null, i1 false) ret i8* %1 } @@ -61,7 +61,7 @@ declare i32 @llvm.coro.size.i32() declare i8* @llvm.coro.begin(token, i8*) declare i8 @llvm.coro.suspend(token, i1) declare i8* @llvm.coro.free(token, i8*) -declare void @llvm.coro.end(i8*, i1) +declare i1 @llvm.coro.end(i8*, i1) declare void @llvm.coro.resume(i8*) declare void @llvm.coro.destroy(i8*) diff --git a/test/Transforms/Coroutines/coro-frame.ll b/test/Transforms/Coroutines/coro-frame.ll new file mode 100644 index 0000000000000..001012fcd0c98 --- /dev/null +++ b/test/Transforms/Coroutines/coro-frame.ll @@ -0,0 +1,61 @@ +; Check that we can handle spills of the result of the invoke instruction +; RUN: opt < %s -coro-split -S | FileCheck %s + +define i8* @f() "coroutine.presplit"="1" personality i32 0 { +entry: + %id = call token @llvm.coro.id(i32 0, i8* null, i8* null, i8* null) + %size = call i32 @llvm.coro.size.i32() + %alloc = call i8* @malloc(i32 %size) + %hdl = call i8* @llvm.coro.begin(token %id, i8* %alloc) + %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) + br label %cleanup + +cleanup: + %mem = call i8* @llvm.coro.free(token %id, i8* %hdl) + call void @free(i8* %mem) + br label %suspend +suspend: + call i1 @llvm.coro.end(i8* %hdl, i1 0) + ret i8* %hdl +pad: + %tok = cleanuppad within none [] + cleanupret from %tok unwind to caller +} + +; See if the float was added to the frame +; CHECK-LABEL: %f.Frame = type { void (%f.Frame*)*, void (%f.Frame*)*, i1, i1, double } + +; See if the float was spilled into the frame +; CHECK-LABEL: @f( +; CHECK: %r = call double @print( +; CHECK: %r.spill.addr = getelementptr inbounds %f.Frame, %f.Frame* %FramePtr, i32 0, i32 4 +; CHECK: store double %r, double* %r.spill.addr +; CHECK: ret i8* %hdl + +; See of the float was loaded from the frame +; CHECK-LABEL: @f.resume( +; CHECK: %r.reload = load double, double* %r.reload.addr +; CHECK: call double @print(double %r.reload) +; CHECK: ret void + +declare i8* @llvm.coro.free(token, i8*) +declare i32 @llvm.coro.size.i32() +declare i8 @llvm.coro.suspend(token, i1) +declare void @llvm.coro.resume(i8*) +declare void @llvm.coro.destroy(i8*) + +declare token @llvm.coro.id(i32, i8*, i8*, i8*) +declare i1 @llvm.coro.alloc(token) +declare i8* @llvm.coro.begin(token, i8*) +declare i1 @llvm.coro.end(i8*, i1) + +declare noalias i8* @malloc(i32) +declare double @print(double) +declare void @free(i8*) diff --git a/test/Transforms/Coroutines/coro-spill-after-phi.ll b/test/Transforms/Coroutines/coro-spill-after-phi.ll new file mode 100644 index 0000000000000..3c7e050c09e95 --- /dev/null +++ b/test/Transforms/Coroutines/coro-spill-after-phi.ll @@ -0,0 +1,60 @@ +; Verifies that we insert spills of PHI instruction _after) all PHI Nodes +; RUN: opt < %s -coro-split -S | FileCheck %s + +define i8* @f(i1 %n) "coroutine.presplit"="1" { +entry: + %id = call token @llvm.coro.id(i32 0, i8* null, i8* null, i8* null) + %size = call i32 @llvm.coro.size.i32() + %alloc = call i8* @malloc(i32 %size) + %hdl = call i8* @llvm.coro.begin(token %id, i8* %alloc) + br i1 %n, label %begin, label %alt +alt: + br label %begin + +begin: + %phi1 = phi i32 [ 0, %entry ], [ 2, %alt ] + %phi2 = phi i32 [ 1, %entry ], [ 3, %alt ] + + %sp1 = call i8 @llvm.coro.suspend(token none, i1 false) + switch i8 %sp1, label %suspend [i8 0, label %resume + i8 1, label %cleanup] +resume: + call i32 @print(i32 %phi1) + call i32 @print(i32 %phi2) + br label %cleanup + +cleanup: + %mem = call i8* @llvm.coro.free(token %id, i8* %hdl) + call void @free(i8* %mem) + br label %suspend +suspend: + call i1 @llvm.coro.end(i8* %hdl, i1 0) + ret i8* %hdl +} + +; Verifies that the both phis are stored correctly in the coroutine frame +; CHECK: %f.Frame = type { void (%f.Frame*)*, void (%f.Frame*)*, i1, i1, i32, i32 } +; CHECK-LABEL: @f( +; CHECK: store void (%f.Frame*)* @f.destroy, void (%f.Frame*)** %destroy.addr +; CHECK: %phi1 = select i1 %n, i32 0, i32 2 +; CHECK: %phi2 = select i1 %n, i32 1, i32 3 +; CHECK: %phi2.spill.addr = getelementptr inbounds %f.Frame, %f.Frame* %FramePtr, i32 0, i32 5 +; CHECK: store i32 %phi2, i32* %phi2.spill.addr +; CHECK: %phi1.spill.addr = getelementptr inbounds %f.Frame, %f.Frame* %FramePtr, i32 0, i32 4 +; CHECK: store i32 %phi1, i32* %phi1.spill.addr +; CHECK: ret i8* %hdl + +declare i8* @llvm.coro.free(token, i8*) +declare i32 @llvm.coro.size.i32() +declare i8 @llvm.coro.suspend(token, i1) +declare void @llvm.coro.resume(i8*) +declare void @llvm.coro.destroy(i8*) + +declare token @llvm.coro.id(i32, i8*, i8*, i8*) +declare i1 @llvm.coro.alloc(token) +declare i8* @llvm.coro.begin(token, i8*) +declare i1 @llvm.coro.end(i8*, i1) + +declare noalias i8* @malloc(i32) +declare i32 @print(i32) +declare void @free(i8*) diff --git a/test/Transforms/Coroutines/coro-split-00.ll b/test/Transforms/Coroutines/coro-split-00.ll index 12aec27b2fe62..0461b7dddb6c5 100644 --- a/test/Transforms/Coroutines/coro-split-00.ll +++ b/test/Transforms/Coroutines/coro-split-00.ll @@ -28,7 +28,7 @@ cleanup: call void @free(i8* %mem) br label %suspend suspend: - call void @llvm.coro.end(i8* %hdl, i1 0) + call i1 @llvm.coro.end(i8* %hdl, i1 0) ret i8* %hdl } @@ -72,7 +72,7 @@ declare void @llvm.coro.destroy(i8*) declare token @llvm.coro.id(i32, i8*, i8*, i8*) declare i1 @llvm.coro.alloc(token) declare i8* @llvm.coro.begin(token, i8*) -declare void @llvm.coro.end(i8*, i1) +declare i1 @llvm.coro.end(i8*, i1) declare noalias i8* @malloc(i32) declare void @print(i32) diff --git a/test/Transforms/Coroutines/coro-split-01.ll b/test/Transforms/Coroutines/coro-split-01.ll index 2b5801f7ddd11..cff2e9ca6f0a4 100644 --- a/test/Transforms/Coroutines/coro-split-01.ll +++ b/test/Transforms/Coroutines/coro-split-01.ll @@ -26,7 +26,7 @@ cleanup: call void @free(i8* %mem) br label %suspend suspend: - call void @llvm.coro.end(i8* %hdl, i1 0) + call i1 @llvm.coro.end(i8* %hdl, i1 0) ret i8* %hdl } define i32 @main() { @@ -49,7 +49,7 @@ declare void @llvm.coro.destroy(i8*) declare token @llvm.coro.id(i32, i8*, i8*, i8*) declare i1 @llvm.coro.alloc(token) declare i8* @llvm.coro.begin(token, i8*) -declare void @llvm.coro.end(i8*, i1) +declare i1 @llvm.coro.end(i8*, i1) declare noalias i8* @malloc(i32) declare void @print(i32) diff --git a/test/Transforms/Coroutines/coro-split-02.ll b/test/Transforms/Coroutines/coro-split-02.ll index 2326f77f19871..953c25088652b 100644 --- a/test/Transforms/Coroutines/coro-split-02.ll +++ b/test/Transforms/Coroutines/coro-split-02.ll @@ -28,7 +28,7 @@ await.ready: call void @print(i32 %val) br label %exit exit: - call void @llvm.coro.end(i8* null, i1 false) + call i1 @llvm.coro.end(i8* null, i1 false) ret void } @@ -50,5 +50,5 @@ declare i8* @llvm.coro.frame() #5 declare i8 @llvm.coro.suspend(token, i1) #3 declare void @"\01??3@YAXPEAX@Z"(i8*) local_unnamed_addr #10 declare i8* @llvm.coro.free(token, i8* nocapture readonly) #2 -declare void @llvm.coro.end(i8*, i1) #3 +declare i1 @llvm.coro.end(i8*, i1) #3 diff --git a/test/Transforms/Coroutines/coro-split-dbg.ll b/test/Transforms/Coroutines/coro-split-dbg.ll index 293622c40ebd4..80f706879e552 100644 --- a/test/Transforms/Coroutines/coro-split-dbg.ll +++ b/test/Transforms/Coroutines/coro-split-dbg.ll @@ -38,12 +38,12 @@ coro_Cleanup: ; preds = %for.cond br label %coro_Suspend, !dbg !36 coro_Suspend: ; preds = %for.cond, %if.then, %coro_Cleanup - tail call void @llvm.coro.end(i8* null, i1 false) #9, !dbg !38 + tail call i1 @llvm.coro.end(i8* null, i1 false) #9, !dbg !38 ret i8* %2, !dbg !39 } ; Function Attrs: argmemonly nounwind -declare void @llvm.lifetime.start(i64, i8* nocapture) #4 +declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #4 ; Function Attrs: argmemonly nounwind readonly declare token @llvm.coro.id(i32, i8* readnone, i8* nocapture readonly, i8*) #5 @@ -54,10 +54,10 @@ declare i64 @llvm.coro.size.i64() #1 declare i8* @llvm.coro.begin(token, i8* writeonly) #7 declare token @llvm.coro.save(i8*) #7 declare i8 @llvm.coro.suspend(token, i1) #7 -declare void @llvm.lifetime.end(i64, i8* nocapture) #4 +declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #4 declare i8* @llvm.coro.free(token, i8* nocapture readonly) #5 declare void @free(i8* nocapture) local_unnamed_addr #6 -declare void @llvm.coro.end(i8*, i1) #7 +declare i1 @llvm.coro.end(i8*, i1) #7 declare i8* @llvm.coro.subfn.addr(i8* nocapture readonly, i8) #5 declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #1 diff --git a/test/Transforms/Coroutines/coro-split-eh.ll b/test/Transforms/Coroutines/coro-split-eh.ll new file mode 100644 index 0000000000000..7fc97e261e810 --- /dev/null +++ b/test/Transforms/Coroutines/coro-split-eh.ll @@ -0,0 +1,145 @@ +; Tests that coro-split removes cleanup code after coro.end in resume functions +; and retains it in the start function. +; RUN: opt < %s -coro-split -S | FileCheck %s + +define i8* @f(i1 %val) "coroutine.presplit"="1" personality i32 3 { +entry: + %id = call token @llvm.coro.id(i32 0, i8* null, i8* null, i8* null) + %hdl = call i8* @llvm.coro.begin(token %id, i8* null) + call void @print(i32 0) + br i1 %val, label %resume, label %susp + +susp: + %0 = call i8 @llvm.coro.suspend(token none, i1 false) + switch i8 %0, label %suspend [i8 0, label %resume + i8 1, label %suspend] +resume: + invoke void @print(i32 1) to label %suspend unwind label %lpad + +suspend: + call i1 @llvm.coro.end(i8* %hdl, i1 0) + call void @print(i32 0) ; should not be present in f.resume + ret i8* %hdl + +lpad: + %lpval = landingpad { i8*, i32 } + cleanup + + call void @print(i32 2) + %need.resume = call i1 @llvm.coro.end(i8* null, i1 true) + br i1 %need.resume, label %eh.resume, label %cleanup.cont + +cleanup.cont: + call void @print(i32 3) ; should not be present in f.resume + br label %eh.resume + +eh.resume: + resume { i8*, i32 } %lpval +} + +; Verify that start function contains both print calls the one before and after coro.end +; CHECK-LABEL: define i8* @f( +; CHECK: invoke void @print(i32 1) +; CHECK: to label %AfterCoroEnd unwind label %lpad + +; CHECK: AfterCoroEnd: +; CHECK: call void @print(i32 0) +; CHECK: ret i8* %hdl + +; CHECK: lpad: +; CHECK-NEXT: %lpval = landingpad { i8*, i32 } +; CHECK-NEXT: cleanup +; CHECK-NEXT: call void @print(i32 2) +; CHECK-NEXT: call void @print(i32 3) +; CHECK-NEXT: resume { i8*, i32 } %lpval + +define i8* @f2(i1 %val) "coroutine.presplit"="1" personality i32 4 { +entry: + %id = call token @llvm.coro.id(i32 0, i8* null, i8* null, i8* null) + %hdl = call i8* @llvm.coro.begin(token %id, i8* null) + call void @print(i32 0) + br i1 %val, label %resume, label %susp + +susp: + %0 = call i8 @llvm.coro.suspend(token none, i1 false) + switch i8 %0, label %suspend [i8 0, label %resume + i8 1, label %suspend] +resume: + invoke void @print(i32 1) to label %suspend unwind label %lpad + +suspend: + call i1 @llvm.coro.end(i8* %hdl, i1 0) + call void @print(i32 0) ; should not be present in f.resume + ret i8* %hdl + +lpad: + %tok = cleanuppad within none [] + call void @print(i32 2) + %unused = call i1 @llvm.coro.end(i8* null, i1 true) [ "funclet"(token %tok) ] + cleanupret from %tok unwind label %cleanup.cont + +cleanup.cont: + %tok2 = cleanuppad within none [] + call void @print(i32 3) ; should not be present in f.resume + cleanupret from %tok2 unwind to caller +} + +; Verify that start function contains both print calls the one before and after coro.end +; CHECK-LABEL: define i8* @f2( +; CHECK: invoke void @print(i32 1) +; CHECK: to label %AfterCoroEnd unwind label %lpad + +; CHECK: AfterCoroEnd: +; CHECK: call void @print(i32 0) +; CHECK: ret i8* %hdl + +; CHECK: lpad: +; CHECK-NEXT: %tok = cleanuppad within none [] +; CHECK-NEXT: call void @print(i32 2) +; CHECK-NEXT: call void @print(i32 3) +; CHECK-NEXT: cleanupret from %tok unwind to caller + +; VERIFY Resume Parts + +; Verify that resume function does not contains both print calls appearing after coro.end +; CHECK-LABEL: define internal fastcc void @f.resume +; CHECK: invoke void @print(i32 1) +; CHECK: to label %CoroEnd unwind label %lpad + +; CHECK: CoroEnd: +; CHECK-NEXT: ret void + +; CHECK: lpad: +; CHECK-NEXT: %lpval = landingpad { i8*, i32 } +; CHECK-NEXT: cleanup +; CHECK-NEXT: call void @print(i32 2) +; CHECK-NEXT: resume { i8*, i32 } %lpval + +; Verify that resume function does not contains both print calls appearing after coro.end +; CHECK-LABEL: define internal fastcc void @f2.resume +; CHECK: invoke void @print(i32 1) +; CHECK: to label %CoroEnd unwind label %lpad + +; CHECK: CoroEnd: +; CHECK-NEXT: ret void + +; CHECK: lpad: +; CHECK-NEXT: %tok = cleanuppad within none [] +; CHECK-NEXT: call void @print(i32 2) +; CHECK-NEXT: cleanupret from %tok unwind to caller + +declare i8* @llvm.coro.free(token, i8*) +declare i32 @llvm.coro.size.i32() +declare i8 @llvm.coro.suspend(token, i1) +declare void @llvm.coro.resume(i8*) +declare void @llvm.coro.destroy(i8*) + +declare token @llvm.coro.id(i32, i8*, i8*, i8*) +declare i8* @llvm.coro.alloc(token) +declare i8* @llvm.coro.begin(token, i8*) +declare i1 @llvm.coro.end(i8*, i1) + +declare noalias i8* @malloc(i32) +declare void @print(i32) +declare void @free(i8*) + diff --git a/test/Transforms/Coroutines/ex0.ll b/test/Transforms/Coroutines/ex0.ll index d4a9f941d838c..59bebc5466490 100644 --- a/test/Transforms/Coroutines/ex0.ll +++ b/test/Transforms/Coroutines/ex0.ll @@ -24,7 +24,7 @@ cleanup: call void @free(i8* %mem) br label %suspend suspend: - call void @llvm.coro.end(i8* %hdl, i1 0) + call i1 @llvm.coro.end(i8* %hdl, i1 0) ret i8* %hdl } @@ -52,7 +52,7 @@ declare void @llvm.coro.resume(i8*) declare void @llvm.coro.destroy(i8*) declare i8* @llvm.coro.begin(token, i8*) -declare void @llvm.coro.end(i8*, i1) +declare i1 @llvm.coro.end(i8*, i1) declare noalias i8* @malloc(i32) declare void @print(i32) diff --git a/test/Transforms/Coroutines/ex1.ll b/test/Transforms/Coroutines/ex1.ll index 86ac75b13404b..c2a5586fde584 100644 --- a/test/Transforms/Coroutines/ex1.ll +++ b/test/Transforms/Coroutines/ex1.ll @@ -20,7 +20,7 @@ cleanup: call void @free(i8* %mem) br label %suspend suspend: - call void @llvm.coro.end(i8* %hdl, i1 false) + call i1 @llvm.coro.end(i8* %hdl, i1 false) ret i8* %hdl } @@ -48,7 +48,7 @@ declare i32 @llvm.coro.size.i32() declare i8* @llvm.coro.begin(token, i8*) declare i8 @llvm.coro.suspend(token, i1) declare i8* @llvm.coro.free(token, i8*) -declare void @llvm.coro.end(i8*, i1) +declare i1 @llvm.coro.end(i8*, i1) declare void @llvm.coro.resume(i8*) declare void @llvm.coro.destroy(i8*) diff --git a/test/Transforms/Coroutines/ex2.ll b/test/Transforms/Coroutines/ex2.ll index 8681e4cecc80d..6987d2a4c9fd7 100644 --- a/test/Transforms/Coroutines/ex2.ll +++ b/test/Transforms/Coroutines/ex2.ll @@ -29,7 +29,7 @@ dyn.free: call void @CustomFree(i8* %mem) br label %suspend suspend: - call void @llvm.coro.end(i8* %hdl, i1 false) + call i1 @llvm.coro.end(i8* %hdl, i1 false) ret i8* %hdl } @@ -57,7 +57,7 @@ declare i32 @llvm.coro.size.i32() declare i8* @llvm.coro.begin(token, i8*) declare i8 @llvm.coro.suspend(token, i1) declare i8* @llvm.coro.free(token, i8*) -declare void @llvm.coro.end(i8*, i1) +declare i1 @llvm.coro.end(i8*, i1) declare void @llvm.coro.resume(i8*) declare void @llvm.coro.destroy(i8*) diff --git a/test/Transforms/Coroutines/ex3.ll b/test/Transforms/Coroutines/ex3.ll index 13289c8e974ac..8ff4d718230f5 100644 --- a/test/Transforms/Coroutines/ex3.ll +++ b/test/Transforms/Coroutines/ex3.ll @@ -26,7 +26,7 @@ cleanup: call void @free(i8* %mem) br label %suspend suspend: - call void @llvm.coro.end(i8* %hdl, i1 false) + call i1 @llvm.coro.end(i8* %hdl, i1 false) ret i8* %hdl } @@ -54,7 +54,7 @@ declare i32 @llvm.coro.size.i32() declare i8* @llvm.coro.begin(token, i8*) declare i8 @llvm.coro.suspend(token, i1) declare i8* @llvm.coro.free(token, i8*) -declare void @llvm.coro.end(i8*, i1) +declare i1 @llvm.coro.end(i8*, i1) declare void @llvm.coro.resume(i8*) declare void @llvm.coro.destroy(i8*) diff --git a/test/Transforms/Coroutines/ex4.ll b/test/Transforms/Coroutines/ex4.ll index ce896ad7ee413..4992052acd2ed 100644 --- a/test/Transforms/Coroutines/ex4.ll +++ b/test/Transforms/Coroutines/ex4.ll @@ -28,7 +28,7 @@ cleanup: call void @free(i8* %mem) br label %suspend suspend: - call void @llvm.coro.end(i8* %hdl, i1 false) + call i1 @llvm.coro.end(i8* %hdl, i1 false) ret i8* %hdl } @@ -65,7 +65,7 @@ declare i32 @llvm.coro.size.i32() declare i8* @llvm.coro.begin(token, i8*) declare i8 @llvm.coro.suspend(token, i1) declare i8* @llvm.coro.free(token, i8*) -declare void @llvm.coro.end(i8*, i1) +declare i1 @llvm.coro.end(i8*, i1) declare void @llvm.coro.resume(i8*) declare void @llvm.coro.destroy(i8*) diff --git a/test/Transforms/Coroutines/ex5.ll b/test/Transforms/Coroutines/ex5.ll index c9772825f2507..34767584c8116 100644 --- a/test/Transforms/Coroutines/ex5.ll +++ b/test/Transforms/Coroutines/ex5.ll @@ -31,7 +31,7 @@ cleanup: call void @free(i8* %mem) br label %suspend suspend: - call void @llvm.coro.end(i8* %hdl, i1 false) + call i1 @llvm.coro.end(i8* %hdl, i1 false) ret i8* %hdl } @@ -46,7 +46,7 @@ declare i8* @llvm.coro.begin(token, i8*) declare token @llvm.coro.save(i8*) declare i8 @llvm.coro.suspend(token, i1) declare i8* @llvm.coro.free(token, i8*) -declare void @llvm.coro.end(i8*, i1) +declare i1 @llvm.coro.end(i8*, i1) ; CHECK-LABEL: @main define i32 @main() { diff --git a/test/Transforms/Coroutines/no-suspend.ll b/test/Transforms/Coroutines/no-suspend.ll index d219495de6cc0..804b38cc1abea 100644 --- a/test/Transforms/Coroutines/no-suspend.ll +++ b/test/Transforms/Coroutines/no-suspend.ll @@ -32,7 +32,7 @@ dyn.free: call void @free(i8* %mem) br label %suspend suspend: - call void @llvm.coro.end(i8* %hdl, i1 false) + call i1 @llvm.coro.end(i8* %hdl, i1 false) ret void } @@ -77,7 +77,7 @@ cleanup: call void @free(i8* %mem) br label %suspend suspend: - call void @llvm.coro.end(i8* %hdl, i1 false) + call i1 @llvm.coro.end(i8* %hdl, i1 false) ret void } @@ -122,7 +122,7 @@ cleanup: call void @free(i8* %mem) br label %suspend suspend: - call void @llvm.coro.end(i8* %hdl, i1 false) + call i1 @llvm.coro.end(i8* %hdl, i1 false) ret void } @@ -167,7 +167,7 @@ cleanup: call void @free(i8* %mem) br label %suspend suspend: - call void @llvm.coro.end(i8* %hdl, i1 false) + call i1 @llvm.coro.end(i8* %hdl, i1 false) ret void } @@ -183,7 +183,7 @@ declare i8* @llvm.coro.begin(token, i8*) declare token @llvm.coro.save(i8* %hdl) declare i8 @llvm.coro.suspend(token, i1) declare i8* @llvm.coro.free(token, i8*) -declare void @llvm.coro.end(i8*, i1) +declare i1 @llvm.coro.end(i8*, i1) declare void @llvm.coro.resume(i8*) declare void @llvm.coro.destroy(i8*) diff --git a/test/Transforms/Coroutines/phi-coro-end.ll b/test/Transforms/Coroutines/phi-coro-end.ll index e2529412e72c6..f99990cf33bc2 100644 --- a/test/Transforms/Coroutines/phi-coro-end.ll +++ b/test/Transforms/Coroutines/phi-coro-end.ll @@ -17,7 +17,7 @@ cleanup: suspend: %r = phi i32 [%n, %entry], [1, %cleanup] - call void @llvm.coro.end(i8* %hdl, i1 false) + call i1 @llvm.coro.end(i8* %hdl, i1 false) call void @print(i32 %r) ret i8* %hdl } @@ -41,7 +41,7 @@ declare void @llvm.coro.destroy(i8*) declare token @llvm.coro.id(i32, i8*, i8*, i8*) declare i8* @llvm.coro.begin(token, i8*) -declare void @llvm.coro.end(i8*, i1) +declare i1 @llvm.coro.end(i8*, i1) declare noalias i8* @malloc(i32) declare void @print(i32) diff --git a/test/Transforms/Coroutines/restart-trigger.ll b/test/Transforms/Coroutines/restart-trigger.ll index 2240f8fa63230..f7f203f2fb5cf 100644 --- a/test/Transforms/Coroutines/restart-trigger.ll +++ b/test/Transforms/Coroutines/restart-trigger.ll @@ -25,7 +25,7 @@ cleanup: call void @free(i8* %mem) br label %suspend suspend: - call void @llvm.coro.end(i8* %hdl, i1 0) + call i1 @llvm.coro.end(i8* %hdl, i1 0) ret void } @@ -36,7 +36,7 @@ declare i32 @llvm.coro.size.i32() declare i8 @llvm.coro.suspend(token, i1) declare void @llvm.coro.resume(i8*) declare void @llvm.coro.destroy(i8*) -declare void @llvm.coro.end(i8*, i1) +declare i1 @llvm.coro.end(i8*, i1) declare noalias i8* @malloc(i32) declare void @print(i32) |