Equality
[hiphop-php.git] / hphp / runtime / vm / jit / ir-opcode.cpp
bloba76725c0c06b83416594f1b74f6ad91bc45b1c72
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
44 #define LA LayoutAgnostic
45 #define LP (LayoutPreserving|LayoutAgnostic)
47 #define ND 0
48 #define D(n) HasDest
49 #define DofS(n) HasDest
50 #define DRefineS(n) HasDest
51 #define DParam(t) HasDest
52 #define DLdObjCls HasDest
53 #define DAllocObj HasDest
54 #define DBespokeElem HasDest
55 #define DBespokeElemUninit HasDest
56 #define DBespokePosKey HasDest
57 #define DBespokePosVal HasDest
58 #define DVecElem HasDest
59 #define DDictElem HasDest
60 #define DModified(n) HasDest
61 #define DArrLikeSet HasDest
62 #define DArrLikeAppend HasDest
63 #define DKeysetElem HasDest
64 #define DBespokeElemLval HasDest
65 #define DVecKey HasDest
66 #define DFirstElem HasDest
67 #define DLastElem HasDest
68 #define DFirstKey HasDest
69 #define DLastKey HasDest
70 #define DLoggingArrLike HasDest
71 #define DStructDict HasDest
72 #define DCol HasDest
73 #define DMulti NaryDest
74 #define DSetElem HasDest
75 #define DPtrToParam HasDest
76 #define DBuiltin HasDest
77 #define DCall HasDest
78 #define DGenIter HasDest
79 #define DSubtract(n,t) HasDest
80 #define DUnion(...) HasDest
81 #define DMemoKey HasDest
82 #define DLvalOfPtr HasDest
83 #define DPtrIter HasDest
84 #define DPtrIterVal HasDest
85 #define DEscalateToVanilla HasDest
87 namespace {
88 template<Opcode op, uint64_t flags>
89 struct op_flags {
90 static constexpr uint64_t value =
91 (OpHasExtraData<op>::value ? HasExtra : 0) | flags;
93 static_assert(!(value & ProducesRC) ||
94 (value & (HasDest | NaryDest)) == HasDest,
95 "ProducesRC instructions must have exactly one dest");
99 OpInfo g_opInfo[] = {
100 #define O(name, dsts, srcs, flags) \
101 { #name, \
102 op_flags<name, dsts | flags>::value \
104 IR_OPCODES
105 #undef O
106 { 0 }
109 #undef NF
110 #undef C
111 #undef E
112 #undef PRc
113 #undef CRc
114 #undef Er
115 #undef T
116 #undef B
117 #undef P
118 #undef K
119 #undef MProp
120 #undef MElem
122 #undef ND
123 #undef D
124 #undef DofS
125 #undef DRefineS
126 #undef DParam
127 #undef DLdObjCls
128 #undef DBespokeElemUninit
129 #undef DBespokeElem
130 #undef DBespokePosKey
131 #undef DBespokePosVal
132 #undef DVecElem
133 #undef DDictElem
134 #undef DKeysetElem
135 #undef DEscalateToVanilla
136 #undef DBespokeElemLval
137 #undef DVecFirstElem
138 #undef DVecLastElem
139 #undef DVecKey
140 #undef DDictFirstElem
141 #undef DDictLastElem
142 #undef DDictFirstKey
143 #undef DDictLastKey
144 #undef DKeysetFirstElem
145 #undef DKeysetLastElem
146 #undef DLoggingArrLike
147 #undef DStructDict
148 #undef DCol
149 #undef DAllocObj
150 #undef DMulti
151 #undef DSetElem
152 #undef DPtrToParam
153 #undef DBuiltin
154 #undef DCall
155 #undef DGenIter
156 #undef DSubtract
157 #undef DUnion
158 #undef DMemoKey
159 #undef DLvalOfPtr
161 ///////////////////////////////////////////////////////////////////////////////
163 const StringData* findClassName(SSATmp* cls) {
164 assertx(cls->isA(TCls));
166 if (cls->hasConstVal()) {
167 return cls->clsVal()->preClass()->name();
169 // Try to get the class name from a LdCls
170 IRInstruction* clsInst = cls->inst();
171 if (clsInst->op() == LdCls || clsInst->op() == LdClsCached) {
172 SSATmp* clsName = clsInst->src(0);
173 assertx(clsName->isA(TStr));
174 if (clsName->hasConstVal()) {
175 return clsName->strVal();
178 return nullptr;
181 bool isCallOp(Opcode opc) {
182 // CallBuiltin doesn't count because it is not a php-level call. (It will
183 // call a C++ helper and we can push/pop around it normally.)
184 switch (opc) {
185 case Call:
186 case ContEnter:
187 return true;
188 default:
189 return false;
193 bool isGuardOp(Opcode opc) {
194 switch (opc) {
195 case CheckLoc:
196 case CheckStk:
197 case CheckType:
198 case CheckMBase:
199 return true;
201 default:
202 return false;
206 folly::Optional<Opcode> negateCmpOp(Opcode opc) {
207 switch (opc) {
208 case GtBool: return LteBool;
209 case GteBool: return LtBool;
210 case LtBool: return GteBool;
211 case LteBool: return GtBool;
212 case EqBool: return NeqBool;
213 case NeqBool: return EqBool;
215 case GtInt: return LteInt;
216 case GteInt: return LtInt;
217 case LtInt: return GteInt;
218 case LteInt: return GtInt;
219 case EqInt: return NeqInt;
220 case NeqInt: return EqInt;
222 // Due to NaN only equality comparisons with doubles can be negated.
223 case EqDbl: return NeqDbl;
224 case NeqDbl: return EqDbl;
226 case GtStr: return LteStr;
227 case GteStr: return LtStr;
228 case LtStr: return GteStr;
229 case LteStr: return GtStr;
230 case EqStr: return NeqStr;
231 case NeqStr: return EqStr;
232 case SameStr: return NSameStr;
233 case NSameStr: return SameStr;
235 case GtStrInt: return LteStrInt;
236 case GteStrInt: return LtStrInt;
237 case LtStrInt: return GteStrInt;
238 case LteStrInt: return GtStrInt;
239 case EqStrInt: return NeqStrInt;
240 case NeqStrInt: return EqStrInt;
242 // Objects can contain a property with NaN, so only equality comparisons can
243 // be negated.
244 case EqObj: return NeqObj;
245 case NeqObj: return EqObj;
246 case SameObj: return NSameObj;
247 case NSameObj: return SameObj;
249 // Arrays/vec/dicts can contain an element with NaN, so only equality
250 // comparisons can be negated.
251 case EqArrLike: return NeqArrLike;
252 case NeqArrLike: return EqArrLike;
253 case SameArrLike: return NSameArrLike;
254 case NSameArrLike: return SameArrLike;
256 case GtRes: return LteRes;
257 case GteRes: return LtRes;
258 case LtRes: return GteRes;
259 case LteRes: return GtRes;
260 case EqRes: return NeqRes;
261 case NeqRes: return EqRes;
263 default: return folly::none;
267 bool opcodeMayRaise(Opcode opc) {
268 switch (opc) {
269 case NSameArrLike:
270 case SameArrLike:
271 return RuntimeOption::EvalHackArrCompatCheckCompare;
273 case IsTypeStruct:
274 return RuntimeOption::EvalHackArrIsShapeTupleNotices ||
275 RuntimeOption::EvalIsExprEnableUnresolvedWarning ||
276 RuntimeOption::EvalIsVecNotices;
278 case EqStr:
279 case NeqStr:
280 return (bool)RuntimeOption::EvalNoticeOnCoerceForEq;
282 case AddNewElemKeyset:
283 case AFWHPrepareChild:
284 case AKExistsObj:
285 case AllocObj:
286 case AllocObjReified:
287 case ArrayMarkLegacyShallow:
288 case ArrayMarkLegacyRecursive:
289 case ArrayUnmarkLegacyShallow:
290 case ArrayUnmarkLegacyRecursive:
291 case BaseG:
292 case BespokeAppend:
293 case BespokeElem:
294 case BespokeGetThrow:
295 case BespokeSet:
296 case Call:
297 case CallBuiltin:
298 case CGetElem:
299 case CGetProp:
300 case CGetPropQ:
301 case CheckClsMethFunc:
302 case CheckClsReifiedGenericMismatch:
303 case CheckFunReifiedGenericMismatch:
304 case CheckStackOverflow:
305 case CheckSurpriseAndStack:
306 case CheckSurpriseFlagsEnter:
307 case Clone:
308 case CmpArrLike:
309 case CmpObj:
310 case CmpStrInt:
311 case ConcatIntStr:
312 case ConcatStr3:
313 case ConcatStr4:
314 case ConcatStrInt:
315 case ConcatStrStr:
316 case ConstructInstance:
317 case ContEnter:
318 case ConvArrLikeToDict:
319 case ConvArrLikeToKeyset:
320 case ConvArrLikeToVec:
321 case ConvTVToBool:
322 case ConvTVToDbl:
323 case ConvTVToInt:
324 case ConvTVToStr:
325 case ConvClsMethToDict:
326 case ConvClsMethToKeyset:
327 case ConvClsMethToVec:
328 case ConvObjToBool:
329 case ConvObjToDbl:
330 case ConvObjToDict:
331 case ConvObjToInt:
332 case ConvObjToKeyset:
333 case ConvObjToStr:
334 case ConvObjToVec:
335 case Count:
336 case CreateAAWH:
337 case DictGet:
338 case DictSet:
339 case ElemDictD:
340 case ElemDictU:
341 case ElemDX:
342 case ElemKeysetU:
343 case ElemUX:
344 case ElemVecD:
345 case ElemVecU:
346 case ElemX:
347 case EqArrLike:
348 case EqObj:
349 case EqStrInt:
350 case GetMemoKey:
351 case GtArrLike:
352 case GteArrLike:
353 case GteObj:
354 case GteStrInt:
355 case GtObj:
356 case GtStrInt:
357 case HandleRequestSurprise:
358 case IncDecElem:
359 case IncDecProp:
360 case InitClsCns:
361 case InitProps:
362 case InitSProps:
363 case InitSubClsCns:
364 case InterpOne:
365 case IssetElem:
366 case IssetProp:
367 case IterInit:
368 case IterInitK:
369 case IterNext:
370 case IterNextK:
371 case KeysetGet:
372 case LdCls:
373 case LdClsCached:
374 case LdClsCtor:
375 case LdClsPropAddrOrNull:
376 case LdClsPropAddrOrRaise:
377 case LdClsTypeCns:
378 case LdClsTypeCnsClsName:
379 case LdFunc:
380 case LdFuncCached:
381 case LdGblAddr:
382 case LdGblAddrDef:
383 case LdRecDescCached:
384 case LdObjMethodD:
385 case LdObjMethodS:
386 case LdSSwitchDestSlow:
387 case LdSwitchObjIndex:
388 case LookupClsCns:
389 case LookupClsCtxCns:
390 case LookupClsMethod:
391 case LookupClsMethodCache:
392 case LookupClsMethodFCache:
393 case LookupCnsE:
394 case LookupFuncCached:
395 case LtArrLike:
396 case LteArrLike:
397 case LteObj:
398 case LteStrInt:
399 case LtObj:
400 case LtStrInt:
401 case MapGet:
402 case MapSet:
403 case NativeImpl:
404 case NeqArrLike:
405 case NeqObj:
406 case NeqStrInt:
407 case NewKeysetArray:
408 case NewRecord:
409 case OODeclExists:
410 case OrdStrIdx:
411 case OutlineSetOp:
412 case PrintBool:
413 case PrintInt:
414 case PrintStr:
415 case ProfileSubClsCns:
416 case PropDX:
417 case PropQ:
418 case PropTypeRedefineCheck:
419 case PropX:
420 case RaiseBadComparisonViolation:
421 case RaiseClsMethPropConvertNotice:
422 case RaiseCoeffectsCallViolation:
423 case RaiseCoeffectsFunParamCoeffectRulesViolation:
424 case RaiseCoeffectsFunParamTypeViolation:
425 case RaiseError:
426 case RaiseErrorOnInvalidIsAsExpressionType:
427 case RaiseForbiddenDynCall:
428 case RaiseForbiddenDynConstruct:
429 case RaiseHackArrCompatNotice:
430 case RaiseNotice:
431 case RaiseStrToClassNotice:
432 case RaiseTooManyArg:
433 case RaiseUndefProp:
434 case ThrowUninitLoc:
435 case RaiseWarning:
436 case RecordReifiedGenericsAndGetTSList:
437 case ResolveTypeStruct:
438 case ReturnHook:
439 case SetElem:
440 case SetNewElem:
441 case SetNewElemDict:
442 case SetNewElemKeyset:
443 case SetNewElemVec:
444 case SetOpTV:
445 case SetOpElem:
446 case SetOpProp:
447 case SetProp:
448 case SetRange:
449 case SetRangeRev:
450 case StringGet:
451 case SuspendHookAwaitEF:
452 case SuspendHookAwaitEG:
453 case SuspendHookAwaitR:
454 case SuspendHookCreateCont:
455 case SuspendHookYield:
456 case ThrowAsTypeStructException:
457 case ThrowArrayIndexException:
458 case ThrowArrayKeyException:
459 case ThrowCallReifiedFunctionWithoutGenerics:
460 case ThrowDivisionByZeroException:
461 case ThrowHasThisNeedStatic:
462 case ThrowInvalidArrayKey:
463 case ThrowInvalidOperation:
464 case ThrowLateInitPropError:
465 case ThrowMissingArg:
466 case ThrowMissingThis:
467 case ThrowOutOfBounds:
468 case ThrowParameterWrongType:
469 case ThrowParamInOutMismatch:
470 case ThrowParamInOutMismatchRange:
471 case ThrowMustBeMutableException:
472 case ThrowMustBeReadOnlyException:
473 case UnsetElem:
474 case UnsetProp:
475 case VecSet:
476 case VectorSet:
477 case VerifyParamCallable:
478 case VerifyParamCls:
479 case VerifyParamFail:
480 case VerifyParamFailHard:
481 case VerifyProp:
482 case VerifyPropAll:
483 case VerifyPropCls:
484 case VerifyPropCoerce:
485 case VerifyPropCoerceAll:
486 case VerifyPropFail:
487 case VerifyPropFailHard:
488 case VerifyReifiedLocalType:
489 case VerifyReifiedReturnType:
490 case VerifyRetCallable:
491 case VerifyRetCls:
492 case VerifyRetFail:
493 case VerifyRetFailHard:
494 case VerifyParamRecDesc:
495 case VerifyRetRecDesc:
496 case VerifyPropRecDesc:
497 return true;
499 case AbsDbl:
500 case AddDbl:
501 case AddInt:
502 case AddIntO:
503 case AddNewElemVec:
504 case AdvanceDictPtrIter:
505 case AFWHBlockOn:
506 case AFWHPushTailFrame:
507 case AKExistsDict:
508 case AKExistsKeyset:
509 case AllocBespokeStructDict:
510 case AllocStructDict:
511 case AllocVec:
512 case AndInt:
513 case AssertLoc:
514 case AssertMBase:
515 case AssertNonNull:
516 case AssertStk:
517 case AssertType:
518 case AsyncFuncRet:
519 case AsyncFuncRetSlow:
520 case AsyncSwitchFast:
521 case BeginCatch:
522 case BeginInlining:
523 case BespokeEscalateToVanilla:
524 case BespokeGet:
525 case BespokeIterFirstPos:
526 case BespokeIterLastPos:
527 case BespokeIterEnd:
528 case BespokeIterGetKey:
529 case BespokeIterGetVal:
530 case Ceil:
531 case CheckArrayCOW:
532 case CheckCold:
533 case CheckDictKeys:
534 case CheckDictOffset:
535 case CheckFuncNeedsCoverage:
536 case CheckImplicitContextNull:
537 case CheckInit:
538 case CheckInitMem:
539 case CheckInOuts:
540 case CheckIter:
541 case CheckKeysetOffset:
542 case CheckLoc:
543 case CheckMBase:
544 case CheckMissingKeyInArrLike:
545 case CheckNonNull:
546 case CheckNullptr:
547 case CheckRange:
548 case CheckRDSInitialized:
549 case CheckSmashableClass:
550 case CheckStk:
551 case CheckSubClsCns:
552 case CheckSurpriseFlags:
553 case CheckType:
554 case CheckTypeMem:
555 case CheckVecBounds:
556 case ChrInt:
557 case ClassHasAttr:
558 case CmpBool:
559 case CmpDbl:
560 case CmpInt:
561 case CmpRes:
562 case CmpStr:
563 case ColIsEmpty:
564 case ColIsNEmpty:
565 case Conjure:
566 case ConjureUse:
567 case ConstructClosure:
568 case ContArIncIdx:
569 case ContArIncKey:
570 case ContArUpdateIdx:
571 case ContPreNext:
572 case ContStarted:
573 case ContStartedCheck:
574 case ContValid:
575 case ConvBoolToDbl:
576 case ConvBoolToInt:
577 case ConvDblToBool:
578 case ConvDblToInt:
579 case ConvDblToStr:
580 case ConvIntToBool:
581 case ConvIntToDbl:
582 case ConvIntToStr:
583 case ConvPtrToLval:
584 case ConvResToDbl:
585 case ConvResToInt:
586 case ConvStrToBool:
587 case ConvStrToDbl:
588 case ConvStrToInt:
589 case CountCollection:
590 case CountDict:
591 case CountKeyset:
592 case CountVec:
593 case CountWHNotDone:
594 case CreateAFWH:
595 case CreateAGen:
596 case CreateAGWH:
597 case CreateGen:
598 case CreateSSWH:
599 case DbgAssertFunc:
600 case DbgAssertRefCount:
601 case DbgCheckLocalsDecRefd:
602 case DbgTraceCall:
603 case DbgTrashFrame:
604 case DbgTrashMem:
605 case DbgTrashStk:
606 case DblAsBits:
607 case DebugBacktrace:
608 case DecRef:
609 case DecRefNZ:
610 case DefCallCtx:
611 case DefCallFlags:
612 case DefCallFunc:
613 case DefCallNumArgs:
614 case DefConst:
615 case DefFP:
616 case DefFrameRelSP:
617 case DefFuncEntryFP:
618 case DefLabel:
619 case DefRegSP:
620 case DictFirst:
621 case DictFirstKey:
622 case DictGetK:
623 case DictGetQuiet:
624 case DictIdx:
625 case DictIsset:
626 case DictLast:
627 case DictLastKey:
628 case DirFromFilepath:
629 case DivDbl:
630 case DivInt:
631 case EagerSyncVMRegs:
632 case ElemDictK:
633 case ElemKeysetK:
634 case EndBlock:
635 case EndCatch:
636 case EndGuards:
637 case EndInlining:
638 case EnterPrologue:
639 case EnterTCUnwind:
640 case EqArrayDataPtr:
641 case EqBool:
642 case EqCls:
643 case EqLazyCls:
644 case EqDbl:
645 case EqFunc:
646 case EqInt:
647 case EqPtrIter:
648 case EqRecDesc:
649 case EqRes:
650 case EqStrPtr:
651 case ExtendsClass:
652 case FinishMemberOp:
653 case Floor:
654 case FuncCred:
655 case FuncHasAttr:
656 case GenericRetDecRefs:
657 case GetDictPtrIter:
658 case GetMemoKeyScalar:
659 case GetTime:
660 case GetTimeNs:
661 case GtBool:
662 case GtDbl:
663 case GteBool:
664 case GteDbl:
665 case GteInt:
666 case GteRes:
667 case GteStr:
668 case GtInt:
669 case GtRes:
670 case GtStr:
671 case HasReifiedGenerics:
672 case HasToString:
673 case IncCallCounter:
674 case IncProfCounter:
675 case IncRef:
676 case IncStat:
677 case InitDictElem:
678 case InitObjMemoSlots:
679 case InitObjProps:
680 case InitStructElem:
681 case InitStructPositions:
682 case InitThrowableFileAndLine:
683 case InitVecElem:
684 case InitVecElemLoop:
685 case InlineCall:
686 case InlineReturn:
687 case InstanceOf:
688 case InstanceOfBitmask:
689 case InstanceOfIface:
690 case InstanceOfIfaceVtable:
691 case InstanceOfRecDesc:
692 case InterfaceSupportsArrLike:
693 case InterfaceSupportsDbl:
694 case InterfaceSupportsInt:
695 case InterfaceSupportsStr:
696 case InterpOneCF:
697 case IsCol:
698 case IsFunReifiedGenericsMatched:
699 case IsNType:
700 case IsNTypeMem:
701 case IsLegacyArrLike:
702 case IsType:
703 case IsTypeMem:
704 case IsTypeStructCached:
705 case IsWaitHandle:
706 case IterFree:
707 case Jmp:
708 case JmpNZero:
709 case JmpPlaceholder:
710 case JmpSSwitchDest:
711 case JmpSwitchDest:
712 case JmpZero:
713 case KeysetFirst:
714 case KeysetGetK:
715 case KeysetGetQuiet:
716 case KeysetIdx:
717 case KeysetIsset:
718 case KeysetLast:
719 case KillIter:
720 case LdAFWHActRec:
721 case LdARFlags:
722 case LdBindAddr:
723 case LdClosureCls:
724 case LdClosureThis:
725 case LdClsCachedSafe:
726 case LdClsCns:
727 case LdClsCnsVecLen:
728 case LdClsFromClsMeth:
729 case LdClsFromRClsMeth:
730 case LdClsInitData:
731 case LdClsInitElem:
732 case LdClsMethod:
733 case LdClsMethodCacheCls:
734 case LdClsMethodCacheFunc:
735 case LdClsMethodFCacheFunc:
736 case LdClsName:
737 case LdCns:
738 case LdColDict:
739 case LdColVec:
740 case LdContActRec:
741 case LdContArKey:
742 case LdContArValue:
743 case LdContField:
744 case LdContResumeAddr:
745 case LdFrameCls:
746 case LdFrameThis:
747 case LdFuncCls:
748 case LdARFunc:
749 case LdFuncFromClsMeth:
750 case LdFuncFromRClsMeth:
751 case LdFuncFromRFunc:
752 case LdFuncName:
753 case LdFuncNumParams:
754 case LdFuncRequiredCoeffects:
755 case LdFuncVecLen:
756 case LdGenericsFromRClsMeth:
757 case LdGenericsFromRFunc:
758 case LdIfaceMethod:
759 case LdInitPropAddr:
760 case LdInitRDSAddr:
761 case LdIterBase:
762 case LdIterEnd:
763 case LdIterPos:
764 case LdLazyCls:
765 case LdLazyClsName:
766 case LdLoc:
767 case LdLocAddr:
768 case LdLocForeign:
769 case LdMBase:
770 case LdMem:
771 case LdMethCallerName:
772 case LdMIStateAddr:
773 case LdObjClass:
774 case LdObjInvoke:
775 case LdOutAddr:
776 case LdPairElem:
777 case LdPropAddr:
778 case LdPtrIterKey:
779 case LdPtrIterVal:
780 case LdRDSAddr:
781 case LdRecDesc:
782 case LdRecDescCachedSafe:
783 case LdRetVal:
784 case LdSmashable:
785 case LdSmashableFunc:
786 case LdSSwitchDestFast:
787 case LdStk:
788 case LdStkAddr:
789 case LdStrLen:
790 case LdSubClsCns:
791 case LdSubClsCnsClsName:
792 case LdSwitchDblIndex:
793 case LdSwitchStrIndex:
794 case LdTVAux:
795 case LdTypeCns:
796 case LdUnitPerRequestFilepath:
797 case LdUnwinderValue:
798 case LdMonotypeDictTombstones:
799 case LdMonotypeDictKey:
800 case LdMonotypeDictVal:
801 case LdMonotypeVecElem:
802 case LdMROProp:
803 case LdMROPropAddr:
804 case LdStructDictElem:
805 case LdVecElem:
806 case LdVecElemAddr:
807 case LdVectorSize:
808 case LdWHNotDone:
809 case LdWHResult:
810 case LdWHState:
811 case LIterInit:
812 case LIterInitK:
813 case LIterNext:
814 case LIterNextK:
815 case LockObj:
816 case LogArrayReach:
817 case LogGuardFailure:
818 case LookupClsRDS:
819 case LookupSPropSlot:
820 case Lshr:
821 case LtBool:
822 case LtDbl:
823 case LteBool:
824 case LteDbl:
825 case LteInt:
826 case LteRes:
827 case LteStr:
828 case LtInt:
829 case LtRes:
830 case LtStr:
831 case MapIsset:
832 case MarkRDSInitialized:
833 case MemoGetInstanceCache:
834 case MemoGetInstanceValue:
835 case MemoGetStaticCache:
836 case MemoGetStaticValue:
837 case MemoGetLSBCache:
838 case MemoGetLSBValue:
839 case MemoSetInstanceCache:
840 case MemoSetInstanceValue:
841 case MemoSetStaticCache:
842 case MemoSetStaticValue:
843 case MemoSetLSBCache:
844 case MemoSetLSBValue:
845 case MethodExists:
846 case Mod:
847 case Mov:
848 case MulDbl:
849 case MulInt:
850 case MulIntO:
851 case NeqBool:
852 case NeqDbl:
853 case NeqInt:
854 case NeqRes:
855 case NewClsMeth:
856 case NewRClsMeth:
857 case NewCol:
858 case NewColFromArray:
859 case NewDictArray:
860 case NewInstanceRaw:
861 case NewLoggingArray:
862 case NewPair:
863 case NewRFunc:
864 case NewStructDict:
865 case NewBespokeStructDict:
866 case NInstanceOfBitmask:
867 case Nop:
868 case NSameObj:
869 case NSameStr:
870 case OrdStr:
871 case OrInt:
872 case PairIsset:
873 case ProfileArrLikeProps:
874 case ProfileCall:
875 case ProfileDecRef:
876 case ProfileDictAccess:
877 case ProfileInstanceCheck:
878 case ProfileIsTypeStruct:
879 case ProfileKeysetAccess:
880 case ProfileMethod:
881 case ProfileProp:
882 case ProfileSwitchDest:
883 case ProfileType:
884 case RBTraceEntry:
885 case RBTraceMsg:
886 case RecordFuncCall:
887 case ReqBindJmp:
888 case ReqRetranslate:
889 case ReqRetranslateOpt:
890 case ReserveVecNewElem:
891 case RestoreErrorLevel:
892 case RetCtrl:
893 case SameObj:
894 case SameStr:
895 case Select:
896 case Shl:
897 case Shr:
898 case Sqrt:
899 case StArResumeAddr:
900 case StClsInitElem:
901 case StClosureArg:
902 case StContArKey:
903 case StContArState:
904 case StContArValue:
905 case StFrameCtx:
906 case StFrameFunc:
907 case StFrameMeta:
908 case StImplicitContext:
909 case StIterBase:
910 case StIterEnd:
911 case StIterPos:
912 case StIterType:
913 case StLoc:
914 case StLocRange:
915 case StMBase:
916 case StMem:
917 case StOutValue:
918 case StrictlyIntegerConv:
919 case StringIsset:
920 case StructDictGetWithColor:
921 case StructDictSet:
922 case StStk:
923 case StStkRange:
924 case SubDbl:
925 case SubInt:
926 case SubIntO:
927 case Unreachable:
928 case UnwindCheckSideExit:
929 case VecFirst:
930 case VecLast:
931 case VectorIsset:
932 case XorBool:
933 case XorInt:
934 case ZeroErrorLevel:
935 return false;
937 not_reached();
940 ///////////////////////////////////////////////////////////////////////////////