LLVM  16.0.0git
Functions | Variables
Coroutines.cpp File Reference
#include "CoroInstr.h"
#include "CoroInternal.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/CallGraph.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Transforms/Utils/Local.h"
#include <cassert>
#include <cstddef>
#include <utility>
Include dependency graph for Coroutines.cpp:

Go to the source code of this file.

Functions

static bool isCoroutineIntrinsicName (StringRef Name)
 
static void clear (coro::Shape &Shape)
 
static CoroSaveInstcreateCoroSave (CoroBeginInst *CoroBegin, CoroSuspendInst *SuspendInst)
 
static void propagateCallAttrsFromCallee (CallInst *Call, Function *Callee)
 
static void addCallToCallGraph (CallGraph *CG, CallInst *Call, Function *Callee)
 
static void fail (const Instruction *I, const char *Reason, Value *V)
 
static void checkWFRetconPrototype (const AnyCoroIdRetconInst *I, Value *V)
 Check that the given value is a well-formed prototype for the llvm.coro.id.retcon. More...
 
static void checkWFAlloc (const Instruction *I, Value *V)
 Check that the given value is a well-formed allocator. More...
 
static void checkWFDealloc (const Instruction *I, Value *V)
 Check that the given value is a well-formed deallocator. More...
 
static void checkConstantInt (const Instruction *I, Value *V, const char *Reason)
 
static void checkAsyncFuncPointer (const Instruction *I, Value *V)
 
static void checkAsyncContextProjectFunction (const Instruction *I, Function *F)
 

Variables

static const char *const CoroIntrinsics []
 

Function Documentation

◆ addCallToCallGraph()

static void addCallToCallGraph ( CallGraph CG,
CallInst Call,
Function Callee 
)
static

Definition at line 448 of file Coroutines.cpp.

References Callee.

Referenced by llvm::coro::Shape::emitAlloc(), and llvm::coro::Shape::emitDealloc().

◆ checkAsyncContextProjectFunction()

static void checkAsyncContextProjectFunction ( const Instruction I,
Function F 
)
static

Definition at line 625 of file Coroutines.cpp.

References F, fail(), llvm::Type::getInt8Ty(), and I.

Referenced by llvm::CoroSuspendAsyncInst::checkWellFormed().

◆ checkAsyncFuncPointer()

static void checkAsyncFuncPointer ( const Instruction I,
Value V 
)
static

Definition at line 595 of file Coroutines.cpp.

References fail(), I, and llvm::Value::stripPointerCasts().

Referenced by llvm::CoroIdAsyncInst::checkWellFormed().

◆ checkConstantInt()

static void checkConstantInt ( const Instruction I,
Value V,
const char *  Reason 
)
static

Definition at line 578 of file Coroutines.cpp.

References fail(), and I.

Referenced by llvm::AnyCoroIdRetconInst::checkWellFormed(), and llvm::CoroIdAsyncInst::checkWellFormed().

◆ checkWFAlloc()

static void checkWFAlloc ( const Instruction I,
Value V 
)
static

Check that the given value is a well-formed allocator.

Definition at line 549 of file Coroutines.cpp.

References F, fail(), I, and llvm::Value::stripPointerCasts().

Referenced by llvm::AnyCoroIdRetconInst::checkWellFormed().

◆ checkWFDealloc()

static void checkWFDealloc ( const Instruction I,
Value V 
)
static

Check that the given value is a well-formed deallocator.

Definition at line 564 of file Coroutines.cpp.

References F, fail(), I, and llvm::Value::stripPointerCasts().

Referenced by llvm::AnyCoroIdRetconInst::checkWellFormed().

◆ checkWFRetconPrototype()

static void checkWFRetconPrototype ( const AnyCoroIdRetconInst I,
Value V 
)
static

Check that the given value is a well-formed prototype for the llvm.coro.id.retcon.

  • intrinsics.

Definition at line 513 of file Coroutines.cpp.

References F, fail(), I, and llvm::Value::stripPointerCasts().

Referenced by llvm::AnyCoroIdRetconInst::checkWellFormed().

◆ clear()

static void clear ( coro::Shape Shape)
static

◆ createCoroSave()

static CoroSaveInst* createCoroSave ( CoroBeginInst CoroBegin,
CoroSuspendInst SuspendInst 
)
static

◆ fail()

static void fail ( const Instruction I,
const char *  Reason,
Value V 
)
static

◆ isCoroutineIntrinsicName()

static bool isCoroutineIntrinsicName ( StringRef  Name)
static

◆ propagateCallAttrsFromCallee()

static void propagateCallAttrsFromCallee ( CallInst Call,
Function Callee 
)
static

Definition at line 443 of file Coroutines.cpp.

References Callee.

Referenced by llvm::coro::Shape::emitAlloc(), and llvm::coro::Shape::emitDealloc().

Variable Documentation

◆ CoroIntrinsics

const char* const CoroIntrinsics[]
static

Definition at line 67 of file Coroutines.cpp.

Referenced by llvm::coro::declaresAnyIntrinsic(), and isCoroutineIntrinsicName().