ZAM internals have a notion of "captures" as global-like variables

This commit is contained in:
Vern Paxson 2023-06-16 16:02:10 -07:00 committed by Arne Welzel
parent 110ba7a0a1
commit 0a40aec4a6
3 changed files with 101 additions and 10 deletions

View file

@ -383,16 +383,20 @@ bool ZInstI::IsDirectAssignment() const
switch ( op )
{
case OP_ASSIGN_VV_N:
case OP_ASSIGN_VV_A:
case OP_ASSIGN_VV_D:
case OP_ASSIGN_VV_F:
case OP_ASSIGN_VV_I:
case OP_ASSIGN_VV_L:
case OP_ASSIGN_VV_N:
case OP_ASSIGN_VV_O:
case OP_ASSIGN_VV_P:
case OP_ASSIGN_VV_R:
case OP_ASSIGN_VV_S:
case OP_ASSIGN_VV_F:
case OP_ASSIGN_VV_T:
case OP_ASSIGN_VV_U:
case OP_ASSIGN_VV_V:
case OP_ASSIGN_VV_L:
case OP_ASSIGN_VV_a:
case OP_ASSIGN_VV_f:
case OP_ASSIGN_VV_t:
case OP_ASSIGN_VV:
@ -403,6 +407,21 @@ bool ZInstI::IsDirectAssignment() const
}
}
bool ZInstI::HasCaptures() const
{
switch ( op )
{
case OP_LAMBDA_VV:
case OP_WHEN_V:
case OP_WHEN_TIMEOUT_VV:
case OP_WHEN_TIMEOUT_VC:
return true;
default:
return false;
}
}
bool ZInstI::HasSideEffects() const
{
return op_side_effects[op];
@ -647,6 +666,11 @@ bool ZInstI::IsGlobalLoad() const
return global_ops.count(op) > 0;
}
bool ZInstI::IsCaptureLoad() const
{
return op == OP_LOAD_CAPTURE_VV || op == OP_LOAD_MANAGED_CAPTURE_VV;
}
void ZInstI::InitConst(const ConstExpr* ce)
{
auto v = ce->ValuePtr();