================
@@ -212,113 +228,84 @@ emitBodyAndFallthrough(CIRGenFunction &cgf, const 
CoroutineBodyStmt &s,
   return mlir::success();
 }
 
-cir::CallOp CIRGenFunction::emitCoroIDBuiltinCall(mlir::Location loc,
-                                                  mlir::Value nullPtr) {
-  cir::IntType int32Ty = builder.getUInt32Ty();
-
-  const TargetInfo &ti = cgm.getASTContext().getTargetInfo();
-  unsigned newAlign = ti.getNewAlign() / ti.getCharWidth();
+cir::CoroIntrinsicIdOp
+CIRGenFunction::emitCoroIDBuiltinCall(const CallExpr *e) {
+  mlir::Location loc = getLoc(e->getBeginLoc());
 
-  mlir::Operation *builtin = cgm.getGlobalValue(cgm.builtinCoroId);
-
-  cir::FuncOp fnOp;
-  if (!builtin) {
-    fnOp = cgm.createCIRBuiltinFunction(
-        loc, cgm.builtinCoroId,
-        cir::FuncType::get({int32Ty, voidPtrTy, voidPtrTy, voidPtrTy}, 
int32Ty),
-        /*FD=*/nullptr);
-    assert(fnOp && "should always succeed");
-  } else {
-    fnOp = cast<cir::FuncOp>(builtin);
+  llvm::SmallVector<mlir::Value, 4> args;
+  for (auto const *arg : e->arguments()) {
+    args.push_back(emitScalarExpr(arg));
   }
-
-  return builder.createCallOp(loc, fnOp,
-                              mlir::ValueRange{builder.getUInt32(newAlign, 
loc),
-                                               nullPtr, nullPtr, nullPtr});
+  auto coroId = cir::CoroIntrinsicIdOp::create(cgm.getBuilder(), loc, args);
+  createCoroData(*this, curCoro, coroId, e);
+  return coroId;
 }
 
-cir::CallOp CIRGenFunction::emitCoroAllocBuiltinCall(mlir::Location loc) {
-  cir::BoolType boolTy = builder.getBoolTy();
-
-  mlir::Operation *builtin = cgm.getGlobalValue(cgm.builtinCoroAlloc);
-
-  cir::FuncOp fnOp;
-  if (!builtin) {
-    fnOp = cgm.createCIRBuiltinFunction(loc, cgm.builtinCoroAlloc,
-                                        cir::FuncType::get({uInt32Ty}, boolTy),
-                                        /*fd=*/nullptr);
-    assert(fnOp && "should always succeed");
-  } else {
-    fnOp = cast<cir::FuncOp>(builtin);
+cir::CoroIntrinsicAllocOp
+CIRGenFunction::emitCoroAllocBuiltinCall(const CallExpr *e) {
+  mlir::Location loc = getLoc(e->getBeginLoc());
+  if (!curCoro.data || !curCoro.data->coroId) {
+    cgm.error(e->getBeginLoc(), "this builtin expect that __builtin_coro_id 
has"
+                                " been used earlier in this function");
+    return {};
   }
 
-  return builder.createCallOp(
-      loc, fnOp, mlir::ValueRange{curCoro.data->coroId.getResult()});
+  return cir::CoroIntrinsicAllocOp::create(
+      cgm.getBuilder(), loc,
+      mlir::ValueRange{curCoro.data->coroId.getResult()});
 }
 
-cir::CallOp
-CIRGenFunction::emitCoroBeginBuiltinCall(mlir::Location loc,
-                                         mlir::Value coroframeAddr) {
-  mlir::Operation *builtin = cgm.getGlobalValue(cgm.builtinCoroBegin);
-
-  cir::FuncOp fnOp;
-  if (!builtin) {
-    fnOp = cgm.createCIRBuiltinFunction(
-        loc, cgm.builtinCoroBegin,
-        cir::FuncType::get({uInt32Ty, voidPtrTy}, voidPtrTy),
-        /*fd=*/nullptr);
-    assert(fnOp && "should always succeed");
-  } else {
-    fnOp = cast<cir::FuncOp>(builtin);
-  }
-
-  return builder.createCallOp(
-      loc, fnOp,
-      mlir::ValueRange{curCoro.data->coroId.getResult(), coroframeAddr});
-}
+cir::CoroIntrinsicBeginOp
+CIRGenFunction::emitCoroBeginBuiltinCall(const CallExpr *e) {
 
-cir::CallOp CIRGenFunction::emitCoroEndBuiltinCall(mlir::Location loc,
-                                                   mlir::Value nullPtr) {
-  cir::BoolType boolTy = builder.getBoolTy();
-  mlir::Operation *builtin = cgm.getGlobalValue(cgm.builtinCoroEnd);
-
-  cir::FuncOp fnOp;
-  if (!builtin) {
-    fnOp = cgm.createCIRBuiltinFunction(
-        loc, cgm.builtinCoroEnd,
-        cir::FuncType::get({voidPtrTy, boolTy}, boolTy),
-        /*fd=*/nullptr);
-    assert(fnOp && "should always succeed");
-  } else {
-    fnOp = cast<cir::FuncOp>(builtin);
+  mlir::Location loc = getLoc(e->getBeginLoc());
+  if (!curCoro.data || !curCoro.data->coroId) {
+    cgm.error(e->getBeginLoc(), "this builtin expect that __builtin_coro_id 
has"
+                                " been used earlier in this function");
+    return {};
+  }
+  llvm::SmallVector<mlir::Value, 2> args;
+  args.push_back(curCoro.data->coroId.getResult());
+  for (auto const *arg : e->arguments()) {
----------------
Andres-Salamanca wrote:

Done.

https://github.com/llvm/llvm-project/pull/211699
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to