[llvm] 7eaa84e - [NFC] Code cleanups for coroutine after we remvoed legacy passes

Chuanqi Xu via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 21 00:33:52 PDT 2022


Author: Chuanqi Xu
Date: 2022-04-21T15:32:46+08:00
New Revision: 7eaa84eac3ba935d13f4267d3d533a6c3e1283ed

URL: https://github.com/llvm/llvm-project/commit/7eaa84eac3ba935d13f4267d3d533a6c3e1283ed
DIFF: https://github.com/llvm/llvm-project/commit/7eaa84eac3ba935d13f4267d3d533a6c3e1283ed.diff

LOG: [NFC] Code cleanups for coroutine after we remvoed legacy passes

Added: 
    

Modified: 
    llvm/lib/Transforms/Coroutines/CoroEarly.cpp
    llvm/lib/Transforms/Coroutines/CoroInternal.h
    llvm/lib/Transforms/Coroutines/CoroSplit.cpp

Removed: 
    llvm/test/Transforms/Coroutines/restart-trigger.ll


################################################################################
diff  --git a/llvm/lib/Transforms/Coroutines/CoroEarly.cpp b/llvm/lib/Transforms/Coroutines/CoroEarly.cpp
index a3f3ccc633f74..08da78049b068 100644
--- a/llvm/lib/Transforms/Coroutines/CoroEarly.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroEarly.cpp
@@ -35,7 +35,7 @@ class Lowerer : public coro::LowererBase {
         AnyResumeFnPtrTy(FunctionType::get(Type::getVoidTy(Context), Int8Ptr,
                                            /*isVarArg=*/false)
                              ->getPointerTo()) {}
-  bool lowerEarlyIntrinsics(Function &F);
+  void lowerEarlyIntrinsics(Function &F);
 };
 }
 
@@ -145,8 +145,7 @@ static void setCannotDuplicate(CoroIdInst *CoroId) {
       CB->setCannotDuplicate();
 }
 
-bool Lowerer::lowerEarlyIntrinsics(Function &F) {
-  bool Changed = false;
+void Lowerer::lowerEarlyIntrinsics(Function &F) {
   CoroIdInst *CoroId = nullptr;
   SmallVector<CoroFreeInst *, 4> CoroFrees;
   bool HasCoroSuspend = false;
@@ -182,11 +181,8 @@ bool Lowerer::lowerEarlyIntrinsics(Function &F) {
         if (auto *CII = cast<CoroIdInst>(&I)) {
           if (CII->getInfo().isPreSplit()) {
             assert(F.hasFnAttribute(CORO_PRESPLIT_ATTR) &&
-                   F.getFnAttribute(CORO_PRESPLIT_ATTR).getValueAsString() ==
-                       UNPREPARED_FOR_SPLIT &&
                    "The frontend uses Swtich-Resumed ABI should emit "
-                   "\"coroutine.presplit\" attribute with value \"0\" for the "
-                   "coroutine.");
+                   "\"coroutine.presplit\" attribute for the coroutine.");
             setCannotDuplicate(CII);
             CII->setCoroutineSelf();
             CoroId = cast<CoroIdInst>(&I);
@@ -198,7 +194,7 @@ bool Lowerer::lowerEarlyIntrinsics(Function &F) {
       case Intrinsic::coro_id_async:
         // TODO: Remove the line once we support it in the corresponding
         // frontend.
-        F.addFnAttr(CORO_PRESPLIT_ATTR, PREPARED_FOR_SPLIT);
+        F.addFnAttr(CORO_PRESPLIT_ATTR);
         break;
       case Intrinsic::coro_resume:
         lowerResumeOrDestroy(*CB, CoroSubFnInst::ResumeIndex);
@@ -213,8 +209,6 @@ bool Lowerer::lowerEarlyIntrinsics(Function &F) {
         lowerCoroDone(cast<IntrinsicInst>(&I));
         break;
     }
-
-    Changed = true;
   }
 
   // Make sure that all CoroFree reference the coro.id intrinsic.
@@ -231,8 +225,6 @@ bool Lowerer::lowerEarlyIntrinsics(Function &F) {
     for (Argument &A : F.args())
       if (A.hasNoAliasAttr())
         A.removeAttr(Attribute::NoAlias);
-
-  return Changed;
 }
 
 static bool declaresCoroEarlyIntrinsics(const Module &M) {

diff  --git a/llvm/lib/Transforms/Coroutines/CoroInternal.h b/llvm/lib/Transforms/Coroutines/CoroInternal.h
index 32e68cd498cbf..d12601400df39 100644
--- a/llvm/lib/Transforms/Coroutines/CoroInternal.h
+++ b/llvm/lib/Transforms/Coroutines/CoroInternal.h
@@ -21,26 +21,13 @@ class CallGraphSCC;
 class PassRegistry;
 
 // CoroEarly pass marks every function that has coro.begin with a string
-// attribute "coroutine.presplit"="0". CoroSplit pass processes the coroutine
-// twice. First, it lets it go through complete IPO optimization pipeline as a
-// single function. It forces restart of the pipeline by inserting an indirect
-// call to an empty function "coro.devirt.trigger" which is devirtualized by
-// CoroElide pass that triggers a restart of the pipeline by CGPassManager.
-// When CoroSplit pass sees the same coroutine the second time, it splits it up,
-// adds coroutine subfunctions to the SCC to be processed by IPO pipeline.
-// Async lowering similarily triggers a restart of the pipeline after it has
-// split the coroutine.
+// attribute "coroutine.presplit". CoroSplit pass would processes the 
+// function marked as "coroutine.presplit" only.
 //
 // FIXME: Refactor these attributes as LLVM attributes instead of string
 // attributes since these attributes are already used outside LLVM's
 // coroutine module.
-// FIXME: Remove these values once we remove the Legacy PM.
 #define CORO_PRESPLIT_ATTR "coroutine.presplit"
-#define UNPREPARED_FOR_SPLIT "0"
-#define PREPARED_FOR_SPLIT "1"
-#define ASYNC_RESTART_AFTER_SPLIT "2"
-
-#define CORO_DEVIRT_TRIGGER_FN "coro.devirt.trigger"
 
 namespace coro {
 

diff  --git a/llvm/lib/Transforms/Coroutines/CoroSplit.cpp b/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
index 3e62821ba0168..d33c08e603b8f 100644
--- a/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
@@ -2084,8 +2084,6 @@ PreservedAnalyses CoroSplitPass::run(LazyCallGraph::SCC &C,
   for (LazyCallGraph::Node *N : Coroutines) {
     Function &F = N->getFunction();
     LLVM_DEBUG(dbgs() << "CoroSplit: Processing coroutine '" << F.getName()
-                      << "' state: "
-                      << F.getFnAttribute(CORO_PRESPLIT_ATTR).getValueAsString()
                       << "\n");
     F.removeFnAttr(CORO_PRESPLIT_ATTR);
 

diff  --git a/llvm/test/Transforms/Coroutines/restart-trigger.ll b/llvm/test/Transforms/Coroutines/restart-trigger.ll
deleted file mode 100644
index 780bc55b751b5..0000000000000
--- a/llvm/test/Transforms/Coroutines/restart-trigger.ll
+++ /dev/null
@@ -1,46 +0,0 @@
-; REQUIRES: asserts
-; The following tests use the new pass manager, and verify that the coroutine
-; passes re-run the CGSCC pipeline.
-; RUN: opt < %s -S -passes='default<O0>' -debug-only=coro-split 2>&1 | FileCheck --check-prefix=CHECK-NEWPM %s
-; RUN: opt < %s -S -passes='default<O1>' -debug-only=coro-split 2>&1 | FileCheck --check-prefix=CHECK-NEWPM %s
-
-; CHECK:      CoroSplit: Processing coroutine 'f' state: 0
-; CHECK-NEXT: CoroSplit: Processing coroutine 'f' state: 1
-; CHECK-NEWPM:      CoroSplit: Processing coroutine 'f' state: 0
-; CHECK-NEWPM-NOT:  CoroSplit: Processing coroutine 'f' state: 1
-
-
-define void @f() "coroutine.presplit"="0" {
-  %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)
-  call void @print(i32 0)
-  %s1 = call i8 @llvm.coro.suspend(token none, i1 false)
-  switch i8 %s1, label %suspend [i8 0, label %resume 
-                                 i8 1, label %cleanup]
-resume:
-  call void @print(i32 1)
-  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 void  
-}
-
-declare token @llvm.coro.id(i32, i8*, i8*, i8*)
-declare i8* @llvm.coro.begin(token, i8*)
-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 i1 @llvm.coro.end(i8*, i1) 
-
-declare noalias i8* @malloc(i32)
-declare void @print(i32)
-declare void @free(i8*)


        


More information about the llvm-commits mailing list