KindOfFunc -> String should use name() not fullName()
[hiphop-php.git] / hphp / runtime / vm / jit / ir-opcode.cpp
blob9a33b890e5646d9a284230f09d9fceff560eeb39
1 /*
2 +----------------------------------------------------------------------+
3 | HipHop for PHP |
4 +----------------------------------------------------------------------+
5 | Copyright (c) 2010-present Facebook, Inc. (http://www.facebook.com) |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 3.01 of the PHP license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.php.net/license/3_01.txt |
11 | If you did not receive a copy of the PHP license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@php.net so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
17 #include "hphp/runtime/vm/jit/ir-opcode.h"
19 #include "hphp/runtime/base/string-data.h"
20 #include "hphp/runtime/vm/jit/cfg.h"
21 #include "hphp/runtime/vm/jit/extra-data.h"
22 #include "hphp/runtime/vm/jit/ir-instruction.h"
23 #include "hphp/runtime/vm/jit/ir-unit.h"
24 #include "hphp/runtime/vm/jit/ssa-tmp.h"
25 #include "hphp/runtime/vm/jit/print.h"
26 #include "hphp/runtime/vm/jit/type.h"
27 #include "hphp/runtime/vm/runtime.h"
29 #include "hphp/util/trace.h"
31 namespace HPHP { namespace jit {
32 ///////////////////////////////////////////////////////////////////////////////
34 TRACE_SET_MOD(hhir);
36 #define NF 0
37 #define PRc ProducesRC
38 #define CRc ConsumesRC
39 #define T Terminal
40 #define B Branch
41 #define P Passthrough
42 #define MProp MInstrProp
43 #define MElem MInstrElem
45 #define ND 0
46 #define D(n) HasDest
47 #define DofS(n) HasDest
48 #define DRefineS(n) HasDest
49 #define DParamMayRelax(t) HasDest
50 #define DParam(t) HasDest
51 #define DLdObjCls HasDest
52 #define DUnboxPtr HasDest
53 #define DBoxPtr HasDest
54 #define DAllocObj HasDest
55 #define DArrElem HasDest
56 #define DVecElem HasDest
57 #define DDictElem HasDest
58 #define DKeysetElem HasDest
59 #define DVecFirstElem HasDest
60 #define DVecLastElem HasDest
61 #define DVecKey HasDest
62 #define DDictFirstElem HasDest
63 #define DDictLastElem HasDest
64 #define DDictFirstKey HasDest
65 #define DDictLastKey HasDest
66 #define DKeysetFirstElem HasDest
67 #define DKeysetLastElem HasDest
68 #define DArrPacked HasDest
69 #define DArrMixed HasDest
70 #define DVArr HasDest
71 #define DDArr HasDest
72 #define DStaticDArr HasDest
73 #define DCol HasDest
74 #define DCtx HasDest
75 #define DCtxCls HasDest
76 #define DMulti NaryDest
77 #define DSetElem HasDest
78 #define DPtrToParam HasDest
79 #define DBuiltin HasDest
80 #define DCall HasDest
81 #define DGenIter HasDest
82 #define DSubtract(n,t) HasDest
83 #define DCns HasDest
84 #define DUnion(...) HasDest
85 #define DMemoKey HasDest
86 #define DLvalOfPtr HasDest
88 namespace {
89 template<Opcode op, uint64_t flags>
90 struct op_flags {
91 static constexpr uint64_t value =
92 (OpHasExtraData<op>::value ? HasExtra : 0) | flags;
94 static_assert(!(value & ProducesRC) ||
95 (value & (HasDest | NaryDest)) == HasDest,
96 "ProducesRC instructions must have exactly one dest");
100 OpInfo g_opInfo[] = {
101 #define O(name, dsts, srcs, flags) \
102 { #name, \
103 op_flags<name, dsts | flags>::value \
105 IR_OPCODES
106 #undef O
107 { 0 }
110 #undef NF
111 #undef C
112 #undef E
113 #undef PRc
114 #undef CRc
115 #undef Er
116 #undef T
117 #undef B
118 #undef P
119 #undef K
120 #undef MProp
121 #undef MElem
123 #undef ND
124 #undef D
125 #undef DofS
126 #undef DRefineS
127 #undef DParamMayRelax
128 #undef DParam
129 #undef DLdObjCls
130 #undef DUnboxPtr
131 #undef DBoxPtr
132 #undef DArrElem
133 #undef DVecElem
134 #undef DDictElem
135 #undef DKeysetElem
136 #undef DVecFirstElem
137 #undef DVecLastElem
138 #undef DVecKey
139 #undef DDictFirstElem
140 #undef DDictLastElem
141 #undef DDictFirstKey
142 #undef DDictLastKey
143 #undef DKeysetFirstElem
144 #undef DKeysetLastElem
145 #undef DArrPacked
146 #undef DArrMixed
147 #undef DVArr
148 #undef DDArr
149 #undef DStaticDArr
150 #undef DCol
151 #undef DAllocObj
152 #undef DCtx
153 #undef DCtxCls
154 #undef DMulti
155 #undef DSetElem
156 #undef DPtrToParam
157 #undef DBuiltin
158 #undef DCall
159 #undef DGenIter
160 #undef DSubtract
161 #undef DCns
162 #undef DUnion
163 #undef DMemoKey
164 #undef DLvalOfPtr
166 ///////////////////////////////////////////////////////////////////////////////
168 const StringData* findClassName(SSATmp* cls) {
169 assertx(cls->isA(TCls));
171 if (cls->hasConstVal()) {
172 return cls->clsVal()->preClass()->name();
174 // Try to get the class name from a LdCls
175 IRInstruction* clsInst = cls->inst();
176 if (clsInst->op() == LdCls || clsInst->op() == LdClsCached) {
177 SSATmp* clsName = clsInst->src(0);
178 assertx(clsName->isA(TStr));
179 if (clsName->hasConstVal()) {
180 return clsName->strVal();
183 return nullptr;
186 bool isCallOp(Opcode opc) {
187 // CallBuiltin doesn't count because it is not a php-level call. (It will
188 // call a C++ helper and we can push/pop around it normally.)
189 switch (opc) {
190 case Call:
191 case CallUnpack:
192 case ContEnter:
193 return true;
194 default:
195 return false;
199 bool isGuardOp(Opcode opc) {
200 switch (opc) {
201 case CheckLoc:
202 case CheckStk:
203 case CheckType:
204 case CheckMBase:
205 return true;
207 default:
208 return false;
212 folly::Optional<Opcode> negateCmpOp(Opcode opc) {
213 switch (opc) {
214 case GtBool: return LteBool;
215 case GteBool: return LtBool;
216 case LtBool: return GteBool;
217 case LteBool: return GtBool;
218 case EqBool: return NeqBool;
219 case NeqBool: return EqBool;
221 case GtInt: return LteInt;
222 case GteInt: return LtInt;
223 case LtInt: return GteInt;
224 case LteInt: return GtInt;
225 case EqInt: return NeqInt;
226 case NeqInt: return EqInt;
228 // Due to NaN only equality comparisons with doubles can be negated.
229 case EqDbl: return NeqDbl;
230 case NeqDbl: return EqDbl;
232 case GtStr: return LteStr;
233 case GteStr: return LtStr;
234 case LtStr: return GteStr;
235 case LteStr: return GtStr;
236 case EqStr: return NeqStr;
237 case NeqStr: return EqStr;
238 case SameStr: return NSameStr;
239 case NSameStr: return SameStr;
241 case GtStrInt: return LteStrInt;
242 case GteStrInt: return LtStrInt;
243 case LtStrInt: return GteStrInt;
244 case LteStrInt: return GtStrInt;
245 case EqStrInt: return NeqStrInt;
246 case NeqStrInt: return EqStrInt;
248 // Objects can contain a property with NaN, so only equality comparisons can
249 // be negated.
250 case EqObj: return NeqObj;
251 case NeqObj: return EqObj;
252 case SameObj: return NSameObj;
253 case NSameObj: return SameObj;
255 // Arrays/vec/dicts can contain an element with NaN, so only equality
256 // comparisons can be negated.
257 case EqArr: return NeqArr;
258 case NeqArr: return EqArr;
259 case SameArr: return NSameArr;
260 case NSameArr: return SameArr;
262 case EqShape: return NeqShape;
263 case NeqShape: return EqShape;
264 case SameShape: return NSameShape;
265 case NSameShape: return SameShape;
267 case EqVec: return NeqVec;
268 case NeqVec: return EqVec;
269 case SameVec: return NSameVec;
270 case NSameVec: return SameVec;
272 case EqDict: return NeqDict;
273 case NeqDict: return EqDict;
274 case SameDict: return NSameDict;
275 case NSameDict: return SameDict;
277 case EqKeyset: return NeqKeyset;
278 case NeqKeyset: return EqKeyset;
279 case SameKeyset: return NSameKeyset;
280 case NSameKeyset: return SameKeyset;
282 case GtRes: return LteRes;
283 case GteRes: return LtRes;
284 case LtRes: return GteRes;
285 case LteRes: return GtRes;
286 case EqRes: return NeqRes;
287 case NeqRes: return EqRes;
289 default: return folly::none;
293 bool opcodeMayRaise(Opcode opc) {
294 switch (opc) {
295 // AKExistsArr, ArrayIdx, and ArrayIsset may only raise errors when the option
296 // EvalHackArrCompatNotices is set.
297 case AKExistsArr:
298 case ArrayIdx:
299 case ArrayIsset:
300 return RuntimeOption::EvalHackArrCompatNotices;
302 // Same thing for SameArr and NSameArr, but for EvalHackArrCompatDVCmpNotices.
303 case NSameShape:
304 case SameShape:
305 case NSameArr:
306 case SameArr:
307 case NSameDict:
308 case NSameVec:
309 case SameDict:
310 case SameVec:
311 return RuntimeOption::EvalHackArrCompatDVCmpNotices ||
312 RuntimeOption::EvalHackArrCompatCheckCompare;
314 // Same thing for IsTypeStruct, but for EvalHackArrCompatIsArrayNotices
315 // and EvalIsExprEnableUnresolvedWarning.
316 case IsTypeStruct:
317 return RuntimeOption::EvalHackArrCompatIsArrayNotices
318 || RuntimeOption::EvalIsExprEnableUnresolvedWarning;
320 case AddElemIntKey:
321 case AddElemStrKey:
322 case AddNewElem:
323 case AddNewElemKeyset:
324 case AFWHPrepareChild:
325 case AKExistsObj:
326 case AllocObj:
327 case AllocObjReified:
328 case ArrayAdd:
329 case ArrayGet:
330 case ArraySet:
331 case ArraySetRef:
332 case AsTypeStruct:
333 case BaseG:
334 case BindElem:
335 case BindNewElem:
336 case BindProp:
337 case Call:
338 case CallBuiltin:
339 case CallUnpack:
340 case CastMem:
341 case CastStk:
342 case CGetElem:
343 case CGetProp:
344 case CGetPropQ:
345 case CheckStackOverflow:
346 case CheckSurpriseAndStack:
347 case CheckSurpriseFlagsEnter:
348 case Clone:
349 case CmpArr:
350 case CmpShape:
351 case CmpObj:
352 case CmpVec:
353 case CoerceCellToBool:
354 case CoerceCellToDbl:
355 case CoerceCellToInt:
356 case CoerceMem:
357 case CoerceStk:
358 case CoerceStrToDbl:
359 case CoerceStrToInt:
360 case ConcatIntStr:
361 case ConcatStr3:
362 case ConcatStr4:
363 case ConcatStrInt:
364 case ConcatStrStr:
365 case ConstructInstance:
366 case ContEnter:
367 case ConvArrToDict:
368 case ConvArrToKeyset:
369 case ConvArrToVec:
370 case ConvShapeToDict:
371 case ConvCellToArr:
372 case ConvCellToDbl:
373 case ConvCellToInt:
374 case ConvCellToObj:
375 case ConvCellToStr:
376 case ConvDictToArr:
377 case ConvDictToDArr:
378 case ConvDictToKeyset:
379 case ConvShapeToArr:
380 case ConvShapeToDArr:
381 case ConvShapeToKeyset:
382 case ConvKeysetToArr:
383 case ConvKeysetToDArr:
384 case ConvObjToArr:
385 case ConvObjToDArr:
386 case ConvObjToDbl:
387 case ConvObjToDict:
388 case ConvObjToInt:
389 case ConvObjToKeyset:
390 case ConvObjToStr:
391 case ConvObjToVArr:
392 case ConvObjToVec:
393 case ConvResToStr:
394 case ConvVecToKeyset:
395 case Count:
396 case CreateAAWH:
397 case DecodeCufIter:
398 case DefCls:
399 case DictAddElemIntKey:
400 case DictAddElemStrKey:
401 case DictGet:
402 case DictSet:
403 case DictSetRef:
404 case ElemArrayD:
405 case ElemArrayU:
406 case ElemArrayX:
407 case ElemDictD:
408 case ElemDictU:
409 case ElemDictX:
410 case ElemDX:
411 case ElemKeysetU:
412 case ElemKeysetX:
413 case ElemUX:
414 case ElemVecD:
415 case ElemVecU:
416 case ElemX:
417 case EmptyElem:
418 case EmptyProp:
419 case EqArr:
420 case EqShape:
421 case EqDict:
422 case EqObj:
423 case EqVec:
424 case FatalMissingThis:
425 case GetMemoKey:
426 case GtArr:
427 case GteArr:
428 case GtShape:
429 case GteShape:
430 case GteObj:
431 case GteVec:
432 case GtObj:
433 case GtVec:
434 case IncDecElem:
435 case IncDecProp:
436 case InitClsCns:
437 case InitExtraArgs:
438 case InitProps:
439 case InitSProps:
440 case InterpOne:
441 case IssetElem:
442 case IssetProp:
443 case IterInit:
444 case IterInitK:
445 case IterNext:
446 case IterNextK:
447 case KeysetGet:
448 case LdArrFuncCtx:
449 case LdCls:
450 case LdClsCached:
451 case LdClsCtor:
452 case LdClsPropAddrOrNull:
453 case LdClsPropAddrOrRaise:
454 case LdReifiedGeneric:
455 case LdClsTypeCns:
456 case LdFunc:
457 case LdFuncCached:
458 case LdFuncCachedU:
459 case LdObjMethod:
460 case LdSSwitchDestSlow:
461 case LdSwitchObjIndex:
462 case LookupClsMethod:
463 case LookupClsMethodCache:
464 case LookupClsMethodFCache:
465 case LookupCns:
466 case LookupCnsE:
467 case LookupCnsU:
468 case LookupCnsUE:
469 case LookupFuncCached:
470 case LtArr:
471 case LteArr:
472 case LtShape:
473 case LteShape:
474 case LteObj:
475 case LteVec:
476 case LtObj:
477 case LtVec:
478 case MapGet:
479 case MapSet:
480 case MIterInit:
481 case MIterInitK:
482 case NativeImpl:
483 case NeqArr:
484 case NeqShape:
485 case NeqDict:
486 case NeqObj:
487 case NeqVec:
488 case NewKeysetArray:
489 case OODeclExists:
490 case OrdStrIdx:
491 case PrintBool:
492 case PrintInt:
493 case PrintStr:
494 case PropDX:
495 case PropQ:
496 case PropTypeRedefineCheck:
497 case PropX:
498 case RaiseArrayIndexNotice:
499 case RaiseArrayKeyNotice:
500 case RaiseError:
501 case RaiseForbiddenDynCall:
502 case RaiseHackArrCompatNotice:
503 case RaiseHackArrParamNotice:
504 case RaiseHackArrPropNotice:
505 case RaiseMissingArg:
506 case RaiseMissingThis:
507 case RaiseNotice:
508 case RaiseParamRefMismatchForFunc:
509 case RaiseParamRefMismatchForFuncName:
510 case RaiseReifiedGenericMismatch:
511 case RaiseUndefProp:
512 case RaiseUninitLoc:
513 case RaiseVarEnvDynCall:
514 case RaiseWarning:
515 case ResolveTypeStruct:
516 case ReturnHook:
517 case SetElem:
518 case SetNewElem:
519 case SetNewElemArray:
520 case SetNewElemKeyset:
521 case SetNewElemVec:
522 case SetOpCell:
523 case SetOpCellVerify:
524 case SetOpElem:
525 case SetOpProp:
526 case SetProp:
527 case SetRange:
528 case SetRangeRev:
529 case SetWithRefElem:
530 case StringGet:
531 case SuspendHookAwaitEF:
532 case SuspendHookAwaitEG:
533 case SuspendHookAwaitR:
534 case SuspendHookCreateCont:
535 case SuspendHookYield:
536 case ThrowArithmeticError:
537 case ThrowDivisionByZeroError:
538 case ThrowInvalidArrayKey:
539 case ThrowInvalidOperation:
540 case ThrowLateInitPropError:
541 case ThrowOutOfBounds:
542 case UnsetElem:
543 case UnsetProp:
544 case VecSet:
545 case VecSetRef:
546 case VectorSet:
547 case VerifyParamCallable:
548 case VerifyParamCls:
549 case VerifyParamFail:
550 case VerifyParamFailHard:
551 case VerifyProp:
552 case VerifyPropCls:
553 case VerifyPropFail:
554 case VerifyPropFailHard:
555 case VerifyRetCallable:
556 case VerifyRetCls:
557 case VerifyRetFail:
558 case VerifyRetFailHard:
559 case VGetElem:
560 case VGetProp:
561 case WIterInit:
562 case WIterInitK:
563 case WIterNext:
564 case WIterNextK:
565 return true;
567 case AbsDbl:
568 case AddDbl:
569 case AddInt:
570 case AddIntO:
571 case AddNewElemVec:
572 case AFWHBlockOn:
573 case AKExistsDict:
574 case AKExistsKeyset:
575 case AllocPackedArray:
576 case AllocVArray:
577 case AllocVecArray:
578 case AndInt:
579 case AssertLoc:
580 case AssertMBase:
581 case AssertNonNull:
582 case AssertStk:
583 case AssertType:
584 case AssertARFunc:
585 case AsyncFuncRet:
586 case AsyncFuncRetSlow:
587 case AsyncSwitchFast:
588 case BeginCatch:
589 case BeginInlining:
590 case Box:
591 case BoxPtr:
592 case Ceil:
593 case CheckARMagicFlag:
594 case CheckArrayCOW:
595 case CheckCold:
596 case CheckCtxThis:
597 case CheckDArray:
598 case CheckDictOffset:
599 case CheckFuncStatic:
600 case CheckInit:
601 case CheckInitMem:
602 case CheckKeysetOffset:
603 case CheckLoc:
604 case CheckMBase:
605 case CheckMixedArrayOffset:
606 case CheckNonNull:
607 case CheckNullptr:
608 case CheckPackedArrayDataBounds:
609 case CheckRange:
610 case CheckRDSInitialized:
611 case CheckRefInner:
612 case CheckRefs:
613 case CheckStaticLoc:
614 case CheckStk:
615 case CheckSubClsCns:
616 case CheckSurpriseFlags:
617 case CheckType:
618 case CheckTypeMem:
619 case CheckVArray:
620 case ChrInt:
621 case CmpBool:
622 case CmpDbl:
623 case CmpInt:
624 case CmpRes:
625 case CmpStr:
626 case CmpStrInt:
627 case ColIsEmpty:
628 case ColIsNEmpty:
629 case Conjure:
630 case ConjureUse:
631 case ContArIncIdx:
632 case ContArIncKey:
633 case ContArUpdateIdx:
634 case ContPreNext:
635 case ContStarted:
636 case ContStartedCheck:
637 case ContValid:
638 case ConvArrToBool:
639 case ConvArrToDArr:
640 case ConvArrToDbl:
641 case ConvArrToNonDVArr:
642 case ConvArrToVArr:
643 case ConvBoolToArr:
644 case ConvBoolToDbl:
645 case ConvBoolToInt:
646 case ConvCellToBool:
647 case ConvClsToCctx:
648 case ConvDblToArr:
649 case ConvDblToBool:
650 case ConvDblToInt:
651 case ConvDblToStr:
652 case ConvDictToVArr:
653 case ConvDictToVec:
654 case ConvShapeToVArr:
655 case ConvShapeToVec:
656 case ConvIntToArr:
657 case ConvIntToBool:
658 case ConvIntToDbl:
659 case ConvIntToStr:
660 case ConvKeysetToDict:
661 case ConvKeysetToVArr:
662 case ConvKeysetToVec:
663 case ConvObjToBool:
664 case ConvResToDbl:
665 case ConvResToInt:
666 case ConvStrToArr:
667 case ConvStrToBool:
668 case ConvStrToDbl:
669 case ConvStrToInt:
670 case ConvVecToArr:
671 case ConvVecToDArr:
672 case ConvVecToDict:
673 case ConvVecToVArr:
674 case ConvPtrToLval:
675 case CountArray:
676 case CountArrayFast:
677 case CountCollection:
678 case CountDict:
679 case CountShape:
680 case CountKeyset:
681 case CountVec:
682 case CountWHNotDone:
683 case CreateAFWH:
684 case CreateAFWHNoVV:
685 case CreateAGen:
686 case CreateAGWH:
687 case CreateGen:
688 case CreateSSWH:
689 case DbgAssertFunc:
690 case DbgAssertARFunc:
691 case DbgAssertRefCount:
692 case DbgTraceCall:
693 case DbgTrashFrame:
694 case DbgTrashMem:
695 case DbgTrashRetVal:
696 case DbgTrashStk:
697 case DblAsBits:
698 case DebugBacktrace:
699 case DebugBacktraceFast:
700 case DecRef:
701 case DecRefNZ:
702 case DefConst:
703 case DefFP:
704 case DefInlineFP:
705 case DefLabel:
706 case DefSP:
707 case DictEmptyElem:
708 case DictFirst:
709 case DictFirstKey:
710 case DictGetK:
711 case DictGetQuiet:
712 case DictIdx:
713 case DictIsset:
714 case DictLast:
715 case DictLastKey:
716 case DivDbl:
717 case DivInt:
718 case EagerSyncVMRegs:
719 case ElemDictK:
720 case ElemKeysetK:
721 case ElemMixedArrayK:
722 case EndBlock:
723 case EndCatch:
724 case EndGuards:
725 case EnterFrame:
726 case EqArrayDataPtr:
727 case EqBool:
728 case EqCls:
729 case EqDbl:
730 case EqFunc:
731 case EqInt:
732 case EqKeyset:
733 case EqRes:
734 case EqStr:
735 case EqStrInt:
736 case EqStrPtr:
737 case ExitPlaceholder:
738 case ExtendsClass:
739 case FinishMemberOp:
740 case Floor:
741 case FuncGuard:
742 case FuncSupportsAsyncEagerReturn:
743 case FwdCtxStaticCall:
744 case GenericRetDecRefs:
745 case GetMemoKeyScalar:
746 case GetTime:
747 case GetTimeNs:
748 case GtBool:
749 case GtDbl:
750 case GteBool:
751 case GteDbl:
752 case GteInt:
753 case GteRes:
754 case GteStr:
755 case GteStrInt:
756 case GtInt:
757 case GtRes:
758 case GtStr:
759 case GtStrInt:
760 case HasToString:
761 case HintLocInner:
762 case HintMBaseInner:
763 case HintStkInner:
764 case IncProfCounter:
765 case IncRef:
766 case IncStat:
767 case InitCtx:
768 case InitObjProps:
769 case InitPackedLayoutArray:
770 case InitPackedLayoutArrayLoop:
771 case InitStaticLoc:
772 case InitThrowableFileAndLine:
773 case InlineReturn:
774 case InlineReturnNoFrame:
775 case InlineSuspend:
776 case InstanceOf:
777 case InstanceOfBitmask:
778 case InstanceOfIface:
779 case InstanceOfIfaceVtable:
780 case InterfaceSupportsArr:
781 case InterfaceSupportsDbl:
782 case InterfaceSupportsDict:
783 case InterfaceSupportsInt:
784 case InterfaceSupportsKeyset:
785 case InterfaceSupportsStr:
786 case InterfaceSupportsVec:
787 case InterpOneCF:
788 case IsCol:
789 case IsDVArray:
790 case IsFuncDynCallable:
791 case IsReifiedName:
792 case IsNType:
793 case IsNTypeMem:
794 case IsType:
795 case IsTypeMem:
796 case IsWaitHandle:
797 case IterFree:
798 case Jmp:
799 case JmpNZero:
800 case JmpSSwitchDest:
801 case JmpSwitchDest:
802 case JmpZero:
803 case KeysetEmptyElem:
804 case KeysetFirst:
805 case KeysetGetK:
806 case KeysetGetQuiet:
807 case KeysetIdx:
808 case KeysetIsset:
809 case KeysetLast:
810 case KillARReifiedGenerics:
811 case KillClsRefCls:
812 case KillClsRefTS:
813 case KillCufIter:
814 case LdAFWHActRec:
815 case LdARCtx:
816 case LdARFuncPtr:
817 case LdARInvName:
818 case LdARIsDynamic:
819 case LdARNumArgsAndFlags:
820 case LdARNumParams:
821 case LdARReifiedGenerics:
822 case LdBindAddr:
823 case LdCctx:
824 case LdClosure:
825 case LdClosureCtx:
826 case LdClosureStaticLoc:
827 case LdClsCachedSafe:
828 case LdClsCctx:
829 case LdClsCns:
830 case LdClsCnsVecLen:
831 case LdClsCtx:
832 case LdClsInitData:
833 case LdClsMethod:
834 case LdClsMethodCacheCls:
835 case LdClsMethodCacheFunc:
836 case LdClsMethodFCacheFunc:
837 case LdClsName:
838 case LdClsRefCls:
839 case LdClsRefTS:
840 case LdCns:
841 case LdColDict:
842 case LdColVec:
843 case LdContActRec:
844 case LdContArKey:
845 case LdContArValue:
846 case LdContField:
847 case LdContResumeAddr:
848 case LdCtx:
849 case LdCufIterCtx:
850 case LdCufIterDynamic:
851 case LdCufIterFunc:
852 case LdCufIterInvName:
853 case LdElem:
854 case LdFuncNumParams:
855 case LdFuncName:
856 case LdFuncVecLen:
857 case LdGblAddr:
858 case LdGblAddrDef:
859 case LdIfaceMethod:
860 case LdInitPropAddr:
861 case LdInitRDSAddr:
862 case LdLoc:
863 case LdLocAddr:
864 case LdLocPseudoMain:
865 case LdMBase:
866 case LdMem:
867 case LdMIPropStateAddr:
868 case LdMIStateAddr:
869 case LdObjClass:
870 case LdObjInvoke:
871 case LdPackedArrayDataElemAddr:
872 case LdPackedElem:
873 case LdPairBase:
874 case LdPropAddr:
875 case LdRDSAddr:
876 case LdRef:
877 case LdRetVal:
878 case LdSSwitchDestFast:
879 case LdStaticLoc:
880 case LdStk:
881 case LdStkAddr:
882 case LdStrLen:
883 case LdSubClsCns:
884 case LdSwitchDblIndex:
885 case LdSwitchStrIndex:
886 case LdTVAux:
887 case LdTypeCns:
888 case LdUnwinderValue:
889 case LdVecElem:
890 case LdVectorBase:
891 case LdVectorSize:
892 case LdWHNotDone:
893 case LdWHResult:
894 case LdWHState:
895 case LIterInit:
896 case LIterInitK:
897 case LIterNext:
898 case LIterNextK:
899 case LookupClsRDS:
900 case LookupSPropSlot:
901 case LtBool:
902 case LtDbl:
903 case LteBool:
904 case LteDbl:
905 case LteInt:
906 case LteRes:
907 case LteStr:
908 case LteStrInt:
909 case LtInt:
910 case LtRes:
911 case LtStr:
912 case LtStrInt:
913 case MapIsset:
914 case MarkRDSInitialized:
915 case MemoGetInstanceCache:
916 case MemoGetInstanceValue:
917 case MemoGetStaticCache:
918 case MemoGetStaticValue:
919 case MemoGetLSBCache:
920 case MemoGetLSBValue:
921 case MemoSetInstanceCache:
922 case MemoSetInstanceValue:
923 case MemoSetStaticCache:
924 case MemoSetStaticValue:
925 case MemoSetLSBCache:
926 case MemoSetLSBValue:
927 case MethodExists:
928 case MIterFree:
929 case MIterNext:
930 case MIterNextK:
931 case MixedArrayGetK:
932 case Mod:
933 case Mov:
934 case MulDbl:
935 case MulInt:
936 case MulIntO:
937 case NeqBool:
938 case NeqDbl:
939 case NeqInt:
940 case NeqKeyset:
941 case NeqRes:
942 case NeqStr:
943 case NeqStrInt:
944 case NewArray:
945 case NewCol:
946 case NewColFromArray:
947 case NewDArray:
948 case NewDictArray:
949 case NewInstanceRaw:
950 case NewLikeArray:
951 case NewMixedArray:
952 case NewPair:
953 case NewStructArray:
954 case NewStructDArray:
955 case NewStructDict:
956 case NInstanceOfBitmask:
957 case Nop:
958 case NSameKeyset:
959 case NSameObj:
960 case NSameStr:
961 case OrdStr:
962 case OrInt:
963 case PackMagicArgs:
964 case PairIsset:
965 case ProfileArrayKind:
966 case ProfileDictOffset:
967 case ProfileInstanceCheck:
968 case ProfileKeysetOffset:
969 case ProfileFunc:
970 case ProfileMethod:
971 case ProfileMixedArrayOffset:
972 case ProfileSubClsCns:
973 case ProfileSwitchDest:
974 case ProfileType:
975 case RBTraceEntry:
976 case RBTraceMsg:
977 case RegisterLiveObj:
978 case ReleaseVVAndSkip:
979 case ReqBindJmp:
980 case ReqRetranslate:
981 case ReqRetranslateOpt:
982 case ReservePackedArrayDataNewElem:
983 case RestoreErrorLevel:
984 case RetCtrl:
985 case SameKeyset:
986 case SameObj:
987 case SameStr:
988 case Select:
989 case Shl:
990 case Shr:
991 case SpillFrame:
992 case Sqrt:
993 case StARInvName:
994 case StARNumArgsAndFlags:
995 case StARReifiedGenerics:
996 case StArResumeAddr:
997 case StClosureArg:
998 case StClosureCtx:
999 case StClsRefCls:
1000 case StClsRefTS:
1001 case StContArKey:
1002 case StContArState:
1003 case StContArValue:
1004 case StCufIterCtx:
1005 case StCufIterDynamic:
1006 case StCufIterFunc:
1007 case StCufIterInvName:
1008 case StElem:
1009 case StLoc:
1010 case StLocPseudoMain:
1011 case StLocRange:
1012 case StMBase:
1013 case StMem:
1014 case StMIPropState:
1015 case StOutValue:
1016 case StRef:
1017 case StrictlyIntegerConv:
1018 case StringIsset:
1019 case StStk:
1020 case SubDbl:
1021 case SubInt:
1022 case SubIntO:
1023 case SyncReturnBC:
1024 case UnboxPtr:
1025 case Unreachable:
1026 case UnwindCheckSideExit:
1027 case VecFirst:
1028 case VecLast:
1029 case VectorIsset:
1030 case XorBool:
1031 case XorInt:
1032 case ZeroErrorLevel:
1033 return false;
1035 not_reached();
1038 ///////////////////////////////////////////////////////////////////////////////