bool dontGuardAnyInputs()

in hphp/runtime/vm/jit/translator.cpp [860:1090]


bool dontGuardAnyInputs(const NormalizedInstruction& ni) {
  switch (ni.op()) {
  case Op::IterNext:
  case Op::LIterNext:
  case Op::IterInit:
  case Op::LIterInit:
  case Op::JmpZ:
  case Op::JmpNZ:
  case Op::Jmp:
  case Op::JmpNS:
  case Op::ClsCnsD:
  case Op::NewStructDict:
  case Op::Switch:
  case Op::SSwitch:
  case Op::Lt:
  case Op::Lte:
  case Op::Gt:
  case Op::Gte:
  case Op::Cmp:
  case Op::SetOpL:
  case Op::InitProp:
  case Op::BreakTraceHint:
  case Op::IsTypeL:
  case Op::IsTypeC:
  case Op::IncDecL:
  case Op::Eq:
  case Op::Neq:
  case Op::AssertRATL:
  case Op::AssertRATStk:
  case Op::SetL:
  case Op::CastBool:
  case Op::Same:
  case Op::NSame:
  case Op::Yield:
  case Op::YieldK:
  case Op::ContEnter:
  case Op::ContRaise:
  case Op::CreateCont:
  case Op::Await:
  case Op::AwaitAll:
  case Op::BitAnd:
  case Op::BitOr:
  case Op::BitXor:
  case Op::Sub:
  case Op::Mul:
  case Op::SubO:
  case Op::MulO:
  case Op::Add:
  case Op::AddO:
  case Op::ClassGetC:
  case Op::ClassGetTS:
  case Op::AKExists:
  case Op::AddElemC:
  case Op::AddNewElemC:
  case Op::Dict:
  case Op::Keyset:
  case Op::Vec:
  case Op::ArrayIdx:
  case Op::ArrayMarkLegacy:
  case Op::ArrayUnmarkLegacy:
  case Op::BareThis:
  case Op::BitNot:
  case Op::CGetG:
  case Op::CGetL:
  case Op::CGetQuietL:
  case Op::CGetL2:
  case Op::CGetS:
  case Op::CUGetL:
  case Op::CastDouble:
  case Op::CastInt:
  case Op::CastString:
  case Op::CastDict:
  case Op::CastKeyset:
  case Op::CastVec:
  case Op::DblAsBits:
  case Op::CheckProp:
  case Op::CheckThis:
  case Op::Clone:
  case Op::CnsE:
  case Op::ColFromArray:
  case Op::CombineAndResolveTypeStruct:
  case Op::RecordReifiedGeneric:
  case Op::CheckReifiedGenericMismatch:
  case Op::ConcatN:
  case Op::Concat:
  case Op::ContCheck:
  case Op::ContCurrent:
  case Op::ContKey:
  case Op::ContValid:
  case Op::ContGetReturn:
  case Op::CreateCl:
  case Op::Dir:
  case Op::Div:
  case Op::Double:
  case Op::Dup:
  case Op::FCallClsMethod:
  case Op::FCallClsMethodD:
  case Op::FCallClsMethodS:
  case Op::FCallClsMethodSD:
  case Op::FCallCtor:
  case Op::FCallFunc:
  case Op::FCallFuncD:
  case Op::FCallObjMethodD:
  case Op::ResolveRFunc:
  case Op::ResolveFunc:
  case Op::ResolveMethCaller:
  case Op::ResolveClsMethod:
  case Op::ResolveClsMethodD:
  case Op::ResolveClsMethodS:
  case Op::ResolveRClsMethod:
  case Op::ResolveRClsMethodD:
  case Op::ResolveRClsMethodS:
  case Op::ResolveClass:
  case Op::LazyClass:
  case Op::False:
  case Op::File:
  case Op::FuncCred:
  case Op::GetMemoKeyL:
  case Op::Idx:
  case Op::InstanceOf:
  case Op::InstanceOfD:
  case Op::IsLateBoundCls:
  case Op::IsTypeStructC:
  case Op::Int:
  case Op::IssetG:
  case Op::IssetL:
  case Op::IssetS:
  case Op::IsUnsetL:
  case Op::IterFree:
  case Op::LIterFree:
  case Op::LateBoundCls:
  case Op::Method:
  case Op::Mod:
  case Op::Pow:
  case Op::ClassName:
  case Op::LazyClassFromClass:
  case Op::NativeImpl:
  case Op::NewCol:
  case Op::NewPair:
  case Op::NewDictArray:
  case Op::NewVec:
  case Op::NewKeysetArray:
  case Op::NewObj:
  case Op::NewObjR:
  case Op::NewObjD:
  case Op::NewObjRD:
  case Op::NewObjS:
  case Op::Not:
  case Op::Null:
  case Op::NullUninit:
  case Op::OODeclExists:
  case Op::ParentCls:
  case Op::PopC:
  case Op::PopU:
  case Op::PopU2:
  case Op::PopL:
  case Op::Print:
  case Op::PushL:
  case Op::RetC:
  case Op::RetCSuspended:
  case Op::SelfCls:
  case Op::SetG:
  case Op::SetS:
  case Op::Shl:
  case Op::Shr:
  case Op::Silence:
  case Op::String:
  case Op::This:
  case Op::Throw:
  case Op::ThrowAsTypeStructException:
  case Op::ThrowNonExhaustiveSwitch:
  case Op::RaiseClassStringConversionWarning:
  case Op::True:
  case Op::UnsetL:
  case Op::VerifyParamType:
  case Op::VerifyParamTypeTS:
  case Op::VerifyRetTypeC:
  case Op::VerifyRetTypeTS:
  case Op::VerifyRetNonNullC:
  case Op::VerifyOutType:
  case Op::WHResult:
  case Op::BaseGC:
  case Op::BaseGL:
  case Op::BaseSC:
  case Op::BaseL:
  case Op::BaseC:
  case Op::BaseH:
  case Op::Dim:
  case Op::QueryM:
  case Op::SetM:
  case Op::IncDecM:
  case Op::SetOpM:
  case Op::UnsetM:
  case Op::SetRangeM:
  case Op::MemoGet:
  case Op::MemoGetEager:
  case Op::MemoSet:
  case Op::MemoSetEager:
  case Op::RetM:
  case Op::Select:
  case Op::LockObj:
  case Op::ClsCnsL:
  case Op::SetImplicitContextByValue:
    return false;

  // These are instructions that are always interp-one'd, or are always no-ops.
  case Op::Nop:
  case Op::EntryNop:
  case Op::CGetCUNop:
  case Op::UGetCUNop:
  case Op::ClsCns:
  case Op::Exit:
  case Op::Fatal:
  case Op::SetOpG:
  case Op::SetOpS:
  case Op::IncDecG:
  case Op::IncDecS:
  case Op::UnsetG:
  case Op::FCallObjMethod:
  case Op::Incl:
  case Op::InclOnce:
  case Op::Req:
  case Op::ReqOnce:
  case Op::ReqDoc:
  case Op::Eval:
  case Op::ChainFaults:
    return true;
  }

  always_assert_flog(0, "invalid opcode {}\n", static_cast<uint32_t>(ni.op()));
}