Index: test/Transforms/Coroutines/ex0.ll =================================================================== --- test/Transforms/Coroutines/ex0.ll +++ test/Transforms/Coroutines/ex0.ll @@ -20,8 +20,7 @@ br label %loop cleanup: - %mem = call i8* @llvm.coro.free(token %id, i8* %hdl) - call void @free(i8* %mem) + call void @free(i8* null) br label %suspend suspend: call void @llvm.coro.end(i8* %hdl, i1 0) Index: test/Transforms/Coroutines/ex1.ll =================================================================== --- test/Transforms/Coroutines/ex1.ll +++ test/Transforms/Coroutines/ex1.ll @@ -6,7 +6,7 @@ %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 noalias i8* @llvm.coro.begin(token %id, i8* %alloc) + %hdl = call noalias i8* @malloc(i32 %size) br label %loop loop: %n.val = phi i32 [ %n, %entry ], [ %inc, %loop ] Index: test/Transforms/Coroutines/ex2.ll =================================================================== --- test/Transforms/Coroutines/ex2.ll +++ test/Transforms/Coroutines/ex2.ll @@ -4,7 +4,8 @@ define i8* @f(i32 %n) { entry: %id = call token @llvm.coro.id(i32 0, i8* null, i8* null, i8* null) - %need.dyn.alloc = call i1 @llvm.coro.alloc(token %id) + %id2 = call token @llvm.coro.id(i32 0, i8* null, i8* null, i8* null) + %need.dyn.alloc = call i1 @llvm.coro.alloc(token %id2) br i1 %need.dyn.alloc, label %dyn.alloc, label %coro.begin dyn.alloc: %size = call i32 @llvm.coro.size.i32() Index: test/Transforms/Coroutines/ex3.ll =================================================================== --- test/Transforms/Coroutines/ex3.ll +++ test/Transforms/Coroutines/ex3.ll @@ -22,6 +22,9 @@ switch i8 %1, label %suspend [i8 0, label %loop i8 1, label %cleanup] cleanup: + %cmp = icmp slt i32 %n, 12932 + br i1 %cmp, label %free, label %suspend +free: %mem = call i8* @llvm.coro.free(token %id, i8* %hdl) call void @free(i8* %mem) br label %suspend Index: test/Transforms/Coroutines/ex4.ll =================================================================== --- test/Transforms/Coroutines/ex4.ll +++ test/Transforms/Coroutines/ex4.ll @@ -6,6 +6,9 @@ %promise = alloca i32 %pv = bitcast i32* %promise to i8* %id = call token @llvm.coro.id(i32 0, i8* %pv, i8* null, i8* null) + %cmp = icmp slt i32 %n, 12932 + br i1 %cmp, label %allo, label %dyn.alloc +allo: %need.dyn.alloc = call i1 @llvm.coro.alloc(token %id) br i1 %need.dyn.alloc, label %dyn.alloc, label %coro.begin dyn.alloc: @@ -13,7 +16,7 @@ %alloc = call i8* @malloc(i32 %size) br label %coro.begin coro.begin: - %phi = phi i8* [ null, %entry ], [ %alloc, %dyn.alloc ] + %phi = phi i8* [ null, %allo ], [ %alloc, %dyn.alloc ] %hdl = call noalias i8* @llvm.coro.begin(token %id, i8* %phi) br label %loop loop: Index: test/Transforms/Coroutines/ex5.ll =================================================================== --- test/Transforms/Coroutines/ex5.ll +++ test/Transforms/Coroutines/ex5.ll @@ -4,6 +4,7 @@ define i8* @f(i32 %n) { entry: %id = call token @llvm.coro.id(i32 0, i8* null, i8* null, i8* null) + %id2 = 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 noalias i8* @llvm.coro.begin(token %id, i8* %alloc) @@ -27,7 +28,7 @@ call void @llvm.trap() unreachable cleanup: - %mem = call i8* @llvm.coro.free(token %id, i8* %hdl) + %mem = call i8* @llvm.coro.free(token %id2, i8* %hdl) call void @free(i8* %mem) br label %suspend suspend: