1; REQUIRES: webassembly-registered-target 2; 3; Tests that we wouldn't convert coro.resume to a musttail call if the target is 4; Wasm32. 5; RUN: opt < %s -passes='cgscc(coro-split),simplifycfg,early-cse' -S | FileCheck %s 6 7target triple = "wasm32-unknown-unknown" 8 9define void @f() #0 { 10entry: 11 %id = call token @llvm.coro.id(i32 0, ptr null, ptr null, ptr null) 12 %alloc = call ptr @malloc(i64 16) #3 13 %vFrame = call noalias nonnull ptr @llvm.coro.begin(token %id, ptr %alloc) 14 15 %save = call token @llvm.coro.save(ptr null) 16 %addr1 = call ptr @llvm.coro.subfn.addr(ptr null, i8 0) 17 call fastcc void %addr1(ptr null) 18 19 %suspend = call i8 @llvm.coro.suspend(token %save, i1 false) 20 switch i8 %suspend, label %exit [ 21 i8 0, label %await.ready 22 i8 1, label %exit 23 ] 24await.ready: 25 %save2 = call token @llvm.coro.save(ptr null) 26 %addr2 = call ptr @llvm.coro.subfn.addr(ptr null, i8 0) 27 call fastcc void %addr2(ptr null) 28 29 %suspend2 = call i8 @llvm.coro.suspend(token %save2, i1 false) 30 switch i8 %suspend2, label %exit [ 31 i8 0, label %exit 32 i8 1, label %exit 33 ] 34exit: 35 call i1 @llvm.coro.end(ptr null, i1 false, token none) 36 ret void 37} 38 39; CHECK-NOT: musttail 40 41declare token @llvm.coro.id(i32, ptr readnone, ptr nocapture readonly, ptr) #1 42declare i1 @llvm.coro.alloc(token) #2 43declare i64 @llvm.coro.size.i64() #3 44declare ptr @llvm.coro.begin(token, ptr writeonly) #2 45declare token @llvm.coro.save(ptr) #2 46declare ptr @llvm.coro.frame() #3 47declare i8 @llvm.coro.suspend(token, i1) #2 48declare ptr @llvm.coro.free(token, ptr nocapture readonly) #1 49declare i1 @llvm.coro.end(ptr, i1, token) #2 50declare ptr @llvm.coro.subfn.addr(ptr nocapture readonly, i8) #1 51declare ptr @malloc(i64) 52declare void @print() 53 54attributes #0 = { presplitcoroutine } 55attributes #1 = { argmemonly nounwind readonly } 56attributes #2 = { nounwind } 57attributes #3 = { nounwind readnone } 58