149 int value_count = node->op()->ValueInputCount();
151 int frame_state_count =
153 int effect_count = node->op()->EffectInputCount();
154 int control_count = node->op()->ControlInputCount();
157 int input_count = value_count + context_count + frame_state_count;
158 if (check_inputs ==
kAll) {
159 input_count += effect_count + control_count;
161 CHECK_EQ(input_count, node->InputCount());
165 if (node->op()->EffectOutputCount() > 0) {
167 int effect_edges = 0;
168 for (
Edge edge : node->use_edges()) {
173 if (effect_edges == 0) {
181 for (
int i = 0;
i < frame_state_count;
i++) {
183 CHECK(frame_state->
opcode() == IrOpcode::kFrameState ||
185 (node->opcode() == IrOpcode::kFrameState &&
186 frame_state->
opcode() == IrOpcode::kStart));
190 for (
int i = 0;
i < value_count; ++
i) {
192 CheckOutput(value, node, value->op()->ValueOutputCount(),
"value");
195 CHECK(node->opcode() == IrOpcode::kParameter ||
196 node->opcode() == IrOpcode::kProjection ||
197 value->op()->ValueOutputCount() <= 1);
201 for (
int i = 0;
i < context_count; ++
i) {
203 CheckOutput(context, node, context->op()->ValueOutputCount(),
"context");
206 if (check_inputs ==
kAll) {
208 for (
int i = 0;
i < effect_count; ++
i) {
210 CheckOutput(effect, node, effect->op()->EffectOutputCount(),
"effect");
214 for (
int i = 0;
i < control_count; ++
i) {
216 CheckOutput(control, node, control->
op()->ControlOutputCount(),
223 Node* discovered_if_exception =
nullptr;
224 Node* discovered_if_success =
nullptr;
225 Node* discovered_direct_use =
nullptr;
226 int total_number_of_control_uses = 0;
227 for (
Edge edge : node->use_edges()) {
231 total_number_of_control_uses++;
232 Node* control_use = edge.from();
233 if (control_use->
opcode() == IrOpcode::kIfSuccess) {
235 discovered_if_success = control_use;
236 }
else if (control_use->
opcode() == IrOpcode::kIfException) {
238 discovered_if_exception = control_use;
240 discovered_direct_use = control_use;
243 if (discovered_if_success && !discovered_if_exception) {
245 "#%d:%s should be followed by IfSuccess/IfException, but is "
246 "only followed by single #%d:%s",
247 node->id(), node->op()->mnemonic(), discovered_if_success->
id(),
248 discovered_if_success->
op()->mnemonic());
250 if (discovered_if_exception && !discovered_if_success) {
252 "#%d:%s should be followed by IfSuccess/IfException, but is "
253 "only followed by single #%d:%s",
254 node->id(), node->op()->mnemonic(), discovered_if_exception->
id(),
255 discovered_if_exception->
op()->mnemonic());
257 if ((discovered_if_success || discovered_if_exception) &&
258 total_number_of_control_uses != 2) {
260 "#%d:%s if followed by IfSuccess/IfException, there should be "
261 "no direct control uses, but direct use #%d:%s was found",
262 node->id(), node->op()->mnemonic(), discovered_direct_use->
id(),
263 discovered_direct_use->
op()->mnemonic());
268 switch (node->opcode()) {
269 case IrOpcode::kStart: {
274 CheckTypeIs(node, Type::Internal());
279 std::unordered_set<int> param_indices;
281 if (all.IsLive(use) && use->opcode() == IrOpcode::kParameter) {
283 CHECK_EQ(param_indices.count(index), 0);
284 param_indices.insert(index);
291 CHECK_EQ(0, node->op()->ValueOutputCount());
292 CHECK_EQ(0, node->op()->EffectOutputCount());
293 CHECK_EQ(0, node->op()->ControlOutputCount());
300 case IrOpcode::kDead:
303 case IrOpcode::kDeadValue:
307 case IrOpcode::kUnreachable:
309 for (
Edge edge : node->use_edges()) {
310 Node* use = edge.from();
314 CHECK_EQ(IrOpcode::kDeadValue, use->opcode());
318 case IrOpcode::kBranch: {
320 int count_true = 0, count_false = 0;
321 for (
const Node* use : node->
uses()) {
322 CHECK(all.IsLive(use) && (use->opcode() == IrOpcode::kIfTrue ||
323 use->opcode() == IrOpcode::kIfFalse));
324 if (use->opcode() == IrOpcode::kIfTrue) ++count_true;
325 if (use->opcode() == IrOpcode::kIfFalse) ++count_false;
333 CheckValueInputIs(node, 0, Type::Boolean());
336 CheckValueInputIs(node, 0, Type::Machine());
342 case IrOpcode::kIfTrue:
343 case IrOpcode::kIfFalse: {
349 case IrOpcode::kIfSuccess: {
356 case IrOpcode::kIfException: {
363 case IrOpcode::kSwitch: {
364 CheckSwitch(node, all);
367 case IrOpcode::kIfValue:
368 case IrOpcode::kIfDefault:
373 case IrOpcode::kLoop: {
374 CHECK_EQ(control_count, input_count);
378 bool has_terminate =
false;
379 for (
const Node* use : node->
uses()) {
380 if (all.IsLive(use) && use->opcode() == IrOpcode::kTerminate) {
381 has_terminate =
true;
385 CHECK(has_terminate);
388 case IrOpcode::kMerge:
389 CHECK_EQ(control_count, input_count);
392 case IrOpcode::kDeoptimizeIf:
393 case IrOpcode::kDeoptimizeUnless:
394 case IrOpcode::kPlug:
395 case IrOpcode::kTrapIf:
396 case IrOpcode::kTrapUnless:
397 case IrOpcode::kAssert:
400 case IrOpcode::kDeoptimize:
401 case IrOpcode::kReturn:
402 case IrOpcode::kThrow:
404 for (
const Node* use : node->
uses()) {
405 if (all.IsLive(use)) {
406 CHECK_EQ(IrOpcode::kEnd, use->opcode());
411 case IrOpcode::kTerminate:
419 for (
const Node* use : node->
uses()) {
420 if (all.IsLive(use)) {
421 CHECK_EQ(IrOpcode::kEnd, use->opcode());
429 case IrOpcode::kParameter: {
437 CHECK_LE(index,
start.LastParameterIndex_MaybeNonStandardLayout());
441 case IrOpcode::kInt32Constant:
442 case IrOpcode::kInt64Constant: {
448 if (code_type !=
kWasm) CheckTypeIs(node, Type::Machine());
451 case IrOpcode::kFloat32Constant:
452 case IrOpcode::kFloat64Constant: {
458 if (code_type !=
kWasm) CheckNotTyped(node);
461 case IrOpcode::kTaggedIndexConstant:
462 case IrOpcode::kRelocatableInt32Constant:
463 case IrOpcode::kRelocatableInt64Constant:
468 case IrOpcode::kNumberConstant:
471 CheckTypeIs(node, Type::Number());
473 case IrOpcode::kHeapConstant:
474 case IrOpcode::kCompressedHeapConstant:
475 case IrOpcode::kTrustedHeapConstant:
480 case IrOpcode::kExternalConstant:
481 case IrOpcode::kPointerConstant:
484 CheckTypeIs(node, Type::ExternalPointer());
486 case IrOpcode::kOsrValue:
493 case IrOpcode::kProjection: {
497 CHECK_GT(input->op()->ValueOutputCount(), index);
501 case IrOpcode::kSelect: {
509 CheckValueInputIs(node, 0, Type::Boolean());
512 CheckValueInputIs(node, 0, Type::Machine());
518 case IrOpcode::kPhi: {
523 CHECK_EQ(value_count, control->
op()->ControlInputCount());
524 CHECK_EQ(input_count, 1 + value_count);
534 case IrOpcode::kInductionVariablePhi: {
538 case IrOpcode::kEffectPhi: {
543 CHECK_EQ(effect_count, control->
op()->ControlInputCount());
544 CHECK_EQ(input_count, 1 + effect_count);
547 if (control->
opcode() == IrOpcode::kMerge) {
548 bool non_phi_use_found =
false;
550 if (all.IsLive(use) && use->opcode() != IrOpcode::kEffectPhi &&
551 use->opcode() != IrOpcode::kPhi) {
552 non_phi_use_found =
true;
555 CHECK(non_phi_use_found);
559 case IrOpcode::kLoopExit: {
565 case IrOpcode::kLoopExitValue: {
571 case IrOpcode::kLoopExitEffect: {
577 case IrOpcode::kCheckpoint:
580 case IrOpcode::kBeginRegion:
583 case IrOpcode::kFinishRegion: {
586 if (typing ==
TYPED) {
592 case IrOpcode::kFrameState: {
600 CHECK(state.parameters()->opcode() == IrOpcode::kStateValues ||
601 state.parameters()->opcode() == IrOpcode::kTypedStateValues);
602 CHECK(state.locals()->opcode() == IrOpcode::kStateValues ||
603 state.locals()->opcode() == IrOpcode::kTypedStateValues);
609 state.frame_state_info().function_info();
615 Node* accumulator = state.stack();
621 if (accumulator->
opcode() == IrOpcode::kTypedStateValues) {
625 CHECK(accumulator->
opcode() == IrOpcode::kTypedStateValues ||
626 accumulator->
opcode() == IrOpcode::kStateValues);
632 case IrOpcode::kObjectId:
633 CheckTypeIs(node, Type::Object());
635 case IrOpcode::kStateValues:
636 case IrOpcode::kTypedStateValues:
637 case IrOpcode::kArgumentsElementsState:
638 case IrOpcode::kArgumentsLengthState:
639 case IrOpcode::kObjectState:
640 case IrOpcode::kTypedObjectState:
643 case IrOpcode::kCall:
646 case IrOpcode::kTailCall:
649 case IrOpcode::kEnterMachineGraph:
650 CheckTypeIs(node, Type::Machine());
652 case IrOpcode::kExitMachineGraph:
653 CheckValueInputIs(node, 0, Type::Machine());
658 case IrOpcode::kJSEqual:
659 case IrOpcode::kJSStrictEqual:
660 case IrOpcode::kJSLessThan:
661 case IrOpcode::kJSGreaterThan:
662 case IrOpcode::kJSLessThanOrEqual:
663 case IrOpcode::kJSGreaterThanOrEqual:
664 CheckTypeIs(node, Type::Boolean());
667 case IrOpcode::kJSAdd:
668 CheckTypeIs(node, Type::NumericOrString());
670 case IrOpcode::kJSBitwiseOr:
671 case IrOpcode::kJSBitwiseXor:
672 case IrOpcode::kJSBitwiseAnd:
673 case IrOpcode::kJSShiftLeft:
674 case IrOpcode::kJSShiftRight:
675 case IrOpcode::kJSShiftRightLogical:
676 case IrOpcode::kJSSubtract:
677 case IrOpcode::kJSMultiply:
678 case IrOpcode::kJSDivide:
679 case IrOpcode::kJSModulus:
680 case IrOpcode::kJSExponentiate:
681 case IrOpcode::kJSBitwiseNot:
682 case IrOpcode::kJSDecrement:
683 case IrOpcode::kJSIncrement:
684 case IrOpcode::kJSNegate:
685 CheckTypeIs(node, Type::Numeric());
688 case IrOpcode::kToBoolean:
689 CheckTypeIs(node, Type::Boolean());
691 case IrOpcode::kJSToLength:
694 case IrOpcode::kJSToName:
695 CheckTypeIs(node, Type::Name());
697 case IrOpcode::kJSToNumber:
698 case IrOpcode::kJSToNumberConvertBigInt:
699 CheckTypeIs(node, Type::Number());
701 case IrOpcode::kJSToBigInt:
702 case IrOpcode::kJSToBigIntConvertNumber:
703 CheckTypeIs(node, Type::BigInt());
705 case IrOpcode::kJSToNumeric:
706 CheckTypeIs(node, Type::Numeric());
708 case IrOpcode::kJSToString:
709 CheckTypeIs(node, Type::String());
711 case IrOpcode::kJSToObject:
712 CheckTypeIs(node, Type::Receiver());
714 case IrOpcode::kJSParseInt:
717 CheckTypeIs(node, Type::Number());
719 case IrOpcode::kJSRegExpTest:
721 CheckValueInputIs(node, 1, Type::String());
722 CheckTypeIs(node, Type::Boolean());
724 case IrOpcode::kJSCreate:
725 CheckTypeIs(node, Type::Object());
727 case IrOpcode::kJSCreateArguments:
728 CheckTypeIs(node, Type::ArrayOrOtherObject());
730 case IrOpcode::kJSCreateArray:
731 CheckTypeIs(node, Type::Array());
733 case IrOpcode::kJSCreateArrayIterator:
734 CheckTypeIs(node, Type::OtherObject());
736 case IrOpcode::kJSCreateAsyncFunctionObject:
737 CheckTypeIs(node, Type::OtherObject());
739 case IrOpcode::kJSCreateCollectionIterator:
740 CheckTypeIs(node, Type::OtherObject());
742 case IrOpcode::kJSCreateBoundFunction:
743 CheckTypeIs(node, Type::BoundFunction());
745 case IrOpcode::kJSCreateClosure:
746 CheckTypeIs(node, Type::Function());
748 case IrOpcode::kJSCreateIterResultObject:
749 CheckTypeIs(node, Type::OtherObject());
751 case IrOpcode::kJSCreateStringIterator:
752 CheckTypeIs(node, Type::OtherObject());
754 case IrOpcode::kJSCreateKeyValueArray:
755 CheckTypeIs(node, Type::Array());
757 case IrOpcode::kJSCreateObject:
758 CheckTypeIs(node, Type::OtherObject());
760 case IrOpcode::kJSCreateStringWrapper:
761 CheckTypeIs(node, Type::StringWrapper());
763 case IrOpcode::kJSCreatePromise:
764 CheckTypeIs(node, Type::OtherObject());
766 case IrOpcode::kJSCreateTypedArray:
767 CheckTypeIs(node, Type::TypedArray());
769 case IrOpcode::kJSCreateLiteralArray:
770 CheckTypeIs(node, Type::Array());
772 case IrOpcode::kJSCreateEmptyLiteralArray:
773 CheckTypeIs(node, Type::Array());
775 case IrOpcode::kJSCreateArrayFromIterable:
776 CheckTypeIs(node, Type::Array());
778 case IrOpcode::kJSCreateLiteralObject:
779 case IrOpcode::kJSCreateEmptyLiteralObject:
780 case IrOpcode::kJSCloneObject:
781 case IrOpcode::kJSCreateLiteralRegExp:
782 CheckTypeIs(node, Type::OtherObject());
784 case IrOpcode::kJSGetTemplateObject:
785 CheckTypeIs(node, Type::Array());
787 case IrOpcode::kJSLoadProperty:
791 case IrOpcode::kJSLoadNamed:
794 case IrOpcode::kJSLoadNamedFromSuper:
797 case IrOpcode::kJSLoadGlobal:
801 case IrOpcode::kJSSetKeyedProperty:
805 case IrOpcode::kJSDefineKeyedOwnProperty:
809 case IrOpcode::kJSSetNamedProperty:
812 case IrOpcode::kJSStoreGlobal:
816 case IrOpcode::kJSDefineNamedOwnProperty:
821 case IrOpcode::kJSGetIterator:
825 case IrOpcode::kJSDefineKeyedOwnPropertyInLiteral:
826 case IrOpcode::kJSStoreInArrayLiteral:
830 case IrOpcode::kJSDeleteProperty:
831 case IrOpcode::kJSHasProperty:
832 case IrOpcode::kJSHasInPrototypeChain:
833 case IrOpcode::kJSInstanceOf:
834 case IrOpcode::kJSOrdinaryHasInstance:
835 CheckTypeIs(node, Type::Boolean());
837 case IrOpcode::kTypeOf:
838 CheckTypeIs(node, Type::InternalizedString());
840 case IrOpcode::kJSGetSuperConstructor:
844 CheckTypeIs(node, Type::NonInternal());
846 case IrOpcode::kJSFindNonDefaultConstructorOrConstruct:
850 case IrOpcode::kJSHasContextExtension:
851 CheckTypeIs(node, Type::Boolean());
853 case IrOpcode::kJSLoadContext:
854 case IrOpcode::kJSLoadScriptContext:
857 case IrOpcode::kJSStoreContext:
858 case IrOpcode::kJSStoreScriptContext:
861 case IrOpcode::kJSCreateFunctionContext:
862 case IrOpcode::kJSCreateCatchContext:
863 case IrOpcode::kJSCreateWithContext:
864 case IrOpcode::kJSCreateBlockContext: {
865 CheckTypeIs(node, Type::OtherInternal());
869 case IrOpcode::kJSConstructForwardVarargs:
870 case IrOpcode::kJSConstructForwardAllArgs:
871 case IrOpcode::kJSConstruct:
872 case IrOpcode::kJSConstructWithArrayLike:
873 case IrOpcode::kJSConstructWithSpread:
874 CheckTypeIs(node, Type::Receiver());
876 case IrOpcode::kJSCallForwardVarargs:
877 case IrOpcode::kJSCall:
878 case IrOpcode::kJSCallWithArrayLike:
879 case IrOpcode::kJSCallWithSpread:
880 case IrOpcode::kJSCallRuntime:
884 case IrOpcode::kJSForInEnumerate:
886 CheckTypeIs(node, Type::OtherInternal());
888 case IrOpcode::kJSForInPrepare:
891 case IrOpcode::kJSForInNext:
892 CheckTypeIs(node,
Type::Union(Type::Name(), Type::Undefined(), zone));
895 case IrOpcode::kJSLoadMessage:
896 case IrOpcode::kJSStoreMessage:
899 case IrOpcode::kJSLoadModule:
902 case IrOpcode::kJSStoreModule:
906 case IrOpcode::kJSGetImportMeta:
910 case IrOpcode::kJSGeneratorStore:
914 case IrOpcode::kJSCreateGeneratorObject:
915 CheckTypeIs(node, Type::OtherObject());
918 case IrOpcode::kJSGeneratorRestoreContinuation:
922 case IrOpcode::kJSGeneratorRestoreContext:
926 case IrOpcode::kJSGeneratorRestoreRegister:
930 case IrOpcode::kJSGeneratorRestoreInputOrDebugPos:
934 case IrOpcode::kJSStackCheck:
935 case IrOpcode::kJSDebugger:
939 case IrOpcode::kJSAsyncFunctionEnter:
942 CheckTypeIs(node, Type::OtherObject());
944 case IrOpcode::kJSAsyncFunctionReject:
947 CheckTypeIs(node, Type::OtherObject());
949 case IrOpcode::kJSAsyncFunctionResolve:
952 CheckTypeIs(node, Type::OtherObject());
954 case IrOpcode::kJSFulfillPromise:
957 CheckTypeIs(node, Type::Undefined());
959 case IrOpcode::kJSPerformPromiseThen:
964 CheckTypeIs(node, Type::Receiver());
966 case IrOpcode::kJSPromiseResolve:
969 CheckTypeIs(node, Type::Receiver());
971 case IrOpcode::kJSRejectPromise:
975 CheckTypeIs(node, Type::Undefined());
977 case IrOpcode::kJSResolvePromise:
980 CheckTypeIs(node, Type::Undefined());
982 case IrOpcode::kJSObjectIsArray:
984 CheckTypeIs(node, Type::Boolean());
987 case IrOpcode::kComment:
988 case IrOpcode::kAbortCSADcheck:
989 case IrOpcode::kDebugBreak:
990 case IrOpcode::kRetain:
991 case IrOpcode::kRuntimeAbort:
997 case IrOpcode::kBooleanNot:
998 CheckValueInputIs(node, 0, Type::Boolean());
999 CheckTypeIs(node, Type::Boolean());
1001 case IrOpcode::kNumberEqual:
1002 CheckValueInputIs(node, 0, Type::Number());
1003 CheckValueInputIs(node, 1, Type::Number());
1004 CheckTypeIs(node, Type::Boolean());
1006 case IrOpcode::kNumberLessThan:
1007 case IrOpcode::kNumberLessThanOrEqual:
1008 CheckValueInputIs(node, 0, Type::Number());
1009 CheckValueInputIs(node, 1, Type::Number());
1010 CheckTypeIs(node, Type::Boolean());
1012 case IrOpcode::kSpeculativeAdditiveSafeIntegerAdd:
1013 case IrOpcode::kSpeculativeAdditiveSafeIntegerSubtract:
1014 case IrOpcode::kSpeculativeSmallIntegerAdd:
1015 case IrOpcode::kSpeculativeSmallIntegerSubtract:
1016 case IrOpcode::kSpeculativeNumberAdd:
1017 case IrOpcode::kSpeculativeNumberSubtract:
1018 case IrOpcode::kSpeculativeNumberMultiply:
1019 case IrOpcode::kSpeculativeNumberPow:
1020 case IrOpcode::kSpeculativeNumberDivide:
1021 case IrOpcode::kSpeculativeNumberModulus:
1022 CheckTypeIs(node, Type::Number());
1024 case IrOpcode::kSpeculativeNumberEqual:
1025 case IrOpcode::kSpeculativeNumberLessThan:
1026 case IrOpcode::kSpeculativeNumberLessThanOrEqual:
1027 CheckTypeIs(node, Type::Boolean());
1029#define SPECULATIVE_BIGINT_BINOP(Name) case IrOpcode::k##Name:
1031#undef SPECULATIVE_BIGINT_BINOP
1032 CheckTypeIs(node, Type::BigInt());
1034 case IrOpcode::kSpeculativeBigIntEqual:
1035 case IrOpcode::kSpeculativeBigIntLessThan:
1036 case IrOpcode::kSpeculativeBigIntLessThanOrEqual:
1037 CheckTypeIs(node, Type::Boolean());
1039 case IrOpcode::kSpeculativeBigIntNegate:
1040 CheckTypeIs(node, Type::BigInt());
1042 case IrOpcode::kSpeculativeBigIntAsIntN:
1043 case IrOpcode::kSpeculativeBigIntAsUintN:
1044 CheckValueInputIs(node, 0,
Type::Any());
1045 CheckTypeIs(node, Type::BigInt());
1047#define BIGINT_BINOP(Name) case IrOpcode::k##Name:
1050 CheckValueInputIs(node, 0, Type::BigInt());
1051 CheckValueInputIs(node, 1, Type::BigInt());
1052 CheckTypeIs(node, Type::BigInt());
1054 case IrOpcode::kBigIntEqual:
1055 case IrOpcode::kBigIntLessThan:
1056 case IrOpcode::kBigIntLessThanOrEqual:
1057 CheckValueInputIs(node, 0, Type::BigInt());
1058 CheckValueInputIs(node, 1, Type::BigInt());
1059 CheckTypeIs(node, Type::Boolean());
1061 case IrOpcode::kBigIntNegate:
1062 CheckValueInputIs(node, 0, Type::BigInt());
1063 CheckTypeIs(node, Type::BigInt());
1065 case IrOpcode::kSpeculativeToBigInt:
1066 CheckValueInputIs(node, 0,
Type::Any());
1067 CheckTypeIs(node, Type::BigInt());
1069 case IrOpcode::kNumberAdd:
1070 case IrOpcode::kNumberSubtract:
1071 case IrOpcode::kNumberMultiply:
1072 case IrOpcode::kNumberDivide:
1073 CheckValueInputIs(node, 0, Type::Number());
1074 CheckValueInputIs(node, 1, Type::Number());
1075 CheckTypeIs(node, Type::Number());
1077 case IrOpcode::kNumberModulus:
1078 CheckValueInputIs(node, 0, Type::Number());
1079 CheckValueInputIs(node, 1, Type::Number());
1080 CheckTypeIs(node, Type::Number());
1082 case IrOpcode::kNumberBitwiseOr:
1083 case IrOpcode::kNumberBitwiseXor:
1084 case IrOpcode::kNumberBitwiseAnd:
1085 CheckValueInputIs(node, 0, Type::Signed32());
1086 CheckValueInputIs(node, 1, Type::Signed32());
1087 CheckTypeIs(node, Type::Signed32());
1089 case IrOpcode::kSpeculativeNumberBitwiseOr:
1090 case IrOpcode::kSpeculativeNumberBitwiseXor:
1091 case IrOpcode::kSpeculativeNumberBitwiseAnd:
1092 CheckTypeIs(node, Type::Signed32());
1094 case IrOpcode::kNumberShiftLeft:
1095 case IrOpcode::kNumberShiftRight:
1096 CheckValueInputIs(node, 0, Type::Signed32());
1097 CheckValueInputIs(node, 1, Type::Unsigned32());
1098 CheckTypeIs(node, Type::Signed32());
1100 case IrOpcode::kSpeculativeNumberShiftLeft:
1101 case IrOpcode::kSpeculativeNumberShiftRight:
1102 CheckTypeIs(node, Type::Signed32());
1104 case IrOpcode::kNumberShiftRightLogical:
1105 CheckValueInputIs(node, 0, Type::Unsigned32());
1106 CheckValueInputIs(node, 1, Type::Unsigned32());
1107 CheckTypeIs(node, Type::Unsigned32());
1109 case IrOpcode::kSpeculativeNumberShiftRightLogical:
1110 CheckTypeIs(node, Type::Unsigned32());
1112 case IrOpcode::kNumberImul:
1113 CheckValueInputIs(node, 0, Type::Unsigned32());
1114 CheckValueInputIs(node, 1, Type::Unsigned32());
1115 CheckTypeIs(node, Type::Signed32());
1117 case IrOpcode::kNumberClz32:
1118 CheckValueInputIs(node, 0, Type::Unsigned32());
1119 CheckTypeIs(node, Type::Unsigned32());
1121 case IrOpcode::kNumberAtan2:
1122 case IrOpcode::kNumberMax:
1123 case IrOpcode::kNumberMin:
1124 case IrOpcode::kNumberPow:
1125 CheckValueInputIs(node, 0, Type::Number());
1126 CheckValueInputIs(node, 1, Type::Number());
1127 CheckTypeIs(node, Type::Number());
1129 case IrOpcode::kNumberAbs:
1130 case IrOpcode::kNumberCeil:
1131 case IrOpcode::kNumberFloor:
1132 case IrOpcode::kNumberFround:
1133 case IrOpcode::kNumberAcos:
1134 case IrOpcode::kNumberAcosh:
1135 case IrOpcode::kNumberAsin:
1136 case IrOpcode::kNumberAsinh:
1137 case IrOpcode::kNumberAtan:
1138 case IrOpcode::kNumberAtanh:
1139 case IrOpcode::kNumberCos:
1140 case IrOpcode::kNumberCosh:
1141 case IrOpcode::kNumberExp:
1142 case IrOpcode::kNumberExpm1:
1143 case IrOpcode::kNumberLog:
1144 case IrOpcode::kNumberLog1p:
1145 case IrOpcode::kNumberLog2:
1146 case IrOpcode::kNumberLog10:
1147 case IrOpcode::kNumberCbrt:
1148 case IrOpcode::kNumberRound:
1149 case IrOpcode::kNumberSign:
1150 case IrOpcode::kNumberSin:
1151 case IrOpcode::kNumberSinh:
1152 case IrOpcode::kNumberSqrt:
1153 case IrOpcode::kNumberTan:
1154 case IrOpcode::kNumberTanh:
1155 case IrOpcode::kNumberTrunc:
1156 CheckValueInputIs(node, 0, Type::Number());
1157 CheckTypeIs(node, Type::Number());
1159 case IrOpcode::kNumberToBoolean:
1160 CheckValueInputIs(node, 0, Type::Number());
1161 CheckTypeIs(node, Type::Boolean());
1163 case IrOpcode::kNumberToInt32:
1164 CheckValueInputIs(node, 0, Type::Number());
1165 CheckTypeIs(node, Type::Signed32());
1167 case IrOpcode::kNumberToString:
1168 CheckValueInputIs(node, 0, Type::Number());
1169 CheckTypeIs(node, Type::String());
1171 case IrOpcode::kNumberToUint32:
1172 case IrOpcode::kNumberToUint8Clamped:
1173 CheckValueInputIs(node, 0, Type::Number());
1174 CheckTypeIs(node, Type::Unsigned32());
1176 case IrOpcode::kIntegral32OrMinusZeroToBigInt:
1177 CheckValueInputIs(node, 0, Type::Integral32OrMinusZero());
1178 CheckTypeIs(node, Type::BigInt());
1180 case IrOpcode::kUnsigned32Divide:
1181 CheckValueInputIs(node, 0, Type::Unsigned32());
1182 CheckValueInputIs(node, 1, Type::Unsigned32());
1183 CheckTypeIs(node, Type::Unsigned32());
1185 case IrOpcode::kSpeculativeToNumber:
1186 CheckValueInputIs(node, 0,
Type::Any());
1187 CheckTypeIs(node, Type::Number());
1189 case IrOpcode::kPlainPrimitiveToNumber:
1190 CheckValueInputIs(node, 0, Type::PlainPrimitive());
1191 CheckTypeIs(node, Type::Number());
1193 case IrOpcode::kPlainPrimitiveToWord32:
1194 CheckValueInputIs(node, 0, Type::PlainPrimitive());
1195 CheckTypeIs(node, Type::Integral32());
1197 case IrOpcode::kPlainPrimitiveToFloat64:
1198 CheckValueInputIs(node, 0, Type::PlainPrimitive());
1199 CheckTypeIs(node, Type::Number());
1201 case IrOpcode::kStringConcat:
1203 CheckValueInputIs(node, 1, Type::String());
1204 CheckValueInputIs(node, 2, Type::String());
1205 CheckTypeIs(node, Type::String());
1207 case IrOpcode::kStringEqual:
1208 case IrOpcode::kStringLessThan:
1209 case IrOpcode::kStringLessThanOrEqual:
1210 CheckValueInputIs(node, 0, Type::String());
1211 CheckValueInputIs(node, 1, Type::String());
1212 CheckTypeIs(node, Type::Boolean());
1214 case IrOpcode::kStringToNumber:
1215 CheckValueInputIs(node, 0, Type::String());
1216 CheckTypeIs(node, Type::Number());
1218 case IrOpcode::kStringCharCodeAt:
1219 CheckValueInputIs(node, 0, Type::String());
1220 CheckValueInputIs(node, 1, Type::Unsigned32());
1223 case IrOpcode::kStringCodePointAt:
1224 CheckValueInputIs(node, 0, Type::String());
1225 CheckValueInputIs(node, 1, Type::Unsigned32());
1228 case IrOpcode::kStringFromSingleCharCode:
1229 CheckValueInputIs(node, 0, Type::Number());
1230 CheckTypeIs(node, Type::String());
1232 case IrOpcode::kStringFromSingleCodePoint:
1233 CheckValueInputIs(node, 0, Type::Number());
1234 CheckTypeIs(node, Type::String());
1236 case IrOpcode::kStringFromCodePointAt:
1237 CheckValueInputIs(node, 0, Type::String());
1238 CheckValueInputIs(node, 1, Type::Unsigned32());
1239 CheckTypeIs(node, Type::String());
1241 case IrOpcode::kStringIndexOf:
1242 CheckValueInputIs(node, 0, Type::String());
1243 CheckValueInputIs(node, 1, Type::String());
1247 case IrOpcode::kStringLength:
1248 CheckValueInputIs(node, 0, Type::String());
1251 case IrOpcode::kStringWrapperLength:
1252 CheckValueInputIs(node, 0, Type::StringWrapper());
1255 case IrOpcode::kTypedArrayLength:
1256 CheckValueInputIs(node, 0, Type::TypedArray());
1259 case IrOpcode::kStringToLowerCaseIntl:
1260 case IrOpcode::kStringToUpperCaseIntl:
1261 CheckValueInputIs(node, 0, Type::String());
1262 CheckTypeIs(node, Type::String());
1264 case IrOpcode::kStringSubstring:
1265 CheckValueInputIs(node, 0, Type::String());
1268 CheckTypeIs(node, Type::String());
1270 case IrOpcode::kReferenceEqual:
1271 CheckTypeIs(node, Type::Boolean());
1273 case IrOpcode::kSameValue:
1274 case IrOpcode::kSameValueNumbersOnly:
1275 CheckValueInputIs(node, 0,
Type::Any());
1276 CheckValueInputIs(node, 1,
Type::Any());
1277 CheckTypeIs(node, Type::Boolean());
1279 case IrOpcode::kNumberSameValue:
1280 CheckValueInputIs(node, 0, Type::Number());
1281 CheckValueInputIs(node, 1, Type::Number());
1282 CheckTypeIs(node, Type::Boolean());
1284 case IrOpcode::kObjectIsArrayBufferView:
1285 case IrOpcode::kObjectIsBigInt:
1286 case IrOpcode::kObjectIsCallable:
1287 case IrOpcode::kObjectIsConstructor:
1288 case IrOpcode::kObjectIsDetectableCallable:
1289 case IrOpcode::kObjectIsMinusZero:
1290 case IrOpcode::kObjectIsNaN:
1291 case IrOpcode::kObjectIsNonCallable:
1292 case IrOpcode::kObjectIsNumber:
1293 case IrOpcode::kObjectIsReceiver:
1294 case IrOpcode::kObjectIsSmi:
1295 case IrOpcode::kObjectIsString:
1296 case IrOpcode::kObjectIsSymbol:
1297 case IrOpcode::kObjectIsUndetectable:
1298 CheckValueInputIs(node, 0,
Type::Any());
1299 CheckTypeIs(node, Type::Boolean());
1301 case IrOpcode::kNumberIsFloat64Hole:
1302 CheckValueInputIs(node, 0, Type::NumberOrHole());
1303 CheckTypeIs(node, Type::Boolean());
1305 case IrOpcode::kNumberIsFinite:
1306 case IrOpcode::kNumberIsMinusZero:
1307 case IrOpcode::kNumberIsNaN:
1308 CheckValueInputIs(node, 0, Type::Number());
1309 CheckTypeIs(node, Type::Boolean());
1311 case IrOpcode::kObjectIsFiniteNumber:
1312 CheckValueInputIs(node, 0,
Type::Any());
1313 CheckTypeIs(node, Type::Boolean());
1315 case IrOpcode::kNumberIsInteger:
1316 CheckValueInputIs(node, 0, Type::Number());
1317 CheckTypeIs(node, Type::Boolean());
1319 case IrOpcode::kObjectIsSafeInteger:
1320 CheckValueInputIs(node, 0,
Type::Any());
1321 CheckTypeIs(node, Type::Boolean());
1323 case IrOpcode::kNumberIsSafeInteger:
1324 CheckValueInputIs(node, 0, Type::Number());
1325 CheckTypeIs(node, Type::Boolean());
1327 case IrOpcode::kObjectIsInteger:
1328 CheckValueInputIs(node, 0,
Type::Any());
1329 CheckTypeIs(node, Type::Boolean());
1331 case IrOpcode::kFindOrderedHashMapEntry:
1332 CheckValueInputIs(node, 0,
Type::Any());
1335 case IrOpcode::kFindOrderedHashMapEntryForInt32Key:
1336 CheckValueInputIs(node, 0,
Type::Any());
1337 CheckValueInputIs(node, 1, Type::Signed32());
1340 case IrOpcode::kFindOrderedHashSetEntry:
1341 CheckValueInputIs(node, 0,
Type::Any());
1344 case IrOpcode::kArgumentsLength:
1345 case IrOpcode::kRestLength:
1348 case IrOpcode::kNewDoubleElements:
1349 case IrOpcode::kNewSmiOrObjectElements:
1350 CheckValueInputIs(node, 0,
1352 CheckTypeIs(node, Type::OtherInternal());
1354 case IrOpcode::kNewArgumentsElements:
1355 CheckValueInputIs(node, 0,
1357 CheckTypeIs(node, Type::OtherInternal());
1359 case IrOpcode::kNewConsString:
1361 CheckValueInputIs(node, 1, Type::String());
1362 CheckValueInputIs(node, 2, Type::String());
1363 CheckTypeIs(node, Type::String());
1365 case IrOpcode::kAllocate:
1366 CheckValueInputIs(node, 0, Type::PlainNumber());
1368 case IrOpcode::kAllocateRaw:
1371 case IrOpcode::kEnsureWritableFastElements:
1372 CheckValueInputIs(node, 0,
Type::Any());
1373 CheckValueInputIs(node, 1, Type::Internal());
1374 CheckTypeIs(node, Type::Internal());
1376 case IrOpcode::kMaybeGrowFastElements:
1377 CheckValueInputIs(node, 0,
Type::Any());
1378 CheckValueInputIs(node, 1, Type::Internal());
1379 CheckValueInputIs(node, 2, Type::Unsigned31());
1380 CheckValueInputIs(node, 3, Type::Unsigned31());
1381 CheckTypeIs(node, Type::Internal());
1383 case IrOpcode::kTransitionElementsKind:
1384 CheckValueInputIs(node, 0,
Type::Any());
1385 CheckNotTyped(node);
1387 case IrOpcode::kTransitionElementsKindOrCheckMap:
1388 CheckValueInputIs(node, 0,
Type::Any());
1389 CheckNotTyped(node);
1392 case IrOpcode::kChangeTaggedSignedToInt32: {
1401 case IrOpcode::kChangeTaggedSignedToInt64:
1403 case IrOpcode::kChangeTaggedToInt32: {
1412 case IrOpcode::kChangeTaggedToInt64:
1414 case IrOpcode::kChangeTaggedToUint32: {
1423 case IrOpcode::kChangeTaggedToFloat64: {
1432 case IrOpcode::kChangeTaggedToTaggedSigned:
1434 case IrOpcode::kTruncateTaggedToFloat64: {
1444 case IrOpcode::kChangeInt31ToTaggedSigned: {
1453 case IrOpcode::kChangeInt32ToTagged: {
1462 case IrOpcode::kChangeInt64ToTagged:
1464 case IrOpcode::kChangeUint32ToTagged: {
1473 case IrOpcode::kChangeUint64ToTagged:
1475 case IrOpcode::kChangeFloat64ToTagged: {
1484 case IrOpcode::kChangeFloat64ToTaggedPointer:
1486 case IrOpcode::kChangeTaggedToBit: {
1495 case IrOpcode::kChangeBitToTagged: {
1504 case IrOpcode::kTruncateTaggedToWord32: {
1513 case IrOpcode::kTruncateBigIntToWord64:
1514 CheckValueInputIs(node, 0, Type::BigInt());
1515 CheckTypeIs(node, Type::BigInt());
1517 case IrOpcode::kChangeInt64ToBigInt:
1518 CheckValueInputIs(node, 0, Type::SignedBigInt64());
1519 CheckTypeIs(node, Type::SignedBigInt64());
1521 case IrOpcode::kChangeUint64ToBigInt:
1522 CheckValueInputIs(node, 0, Type::UnsignedBigInt64());
1523 CheckTypeIs(node, Type::UnsignedBigInt64());
1525 case IrOpcode::kTruncateTaggedToBit:
1526 case IrOpcode::kTruncateTaggedPointerToBit:
1529 case IrOpcode::kCheckBounds:
1530 CheckValueInputIs(node, 0,
Type::Any());
1531 CheckValueInputIs(node, 1,
TypeCache::Get()->kPositiveSafeInteger);
1534 case IrOpcode::kCheckClosure:
1536 CheckValueInputIs(node, 0,
Type::Any());
1537 CheckTypeIs(node, Type::Function());
1539 case IrOpcode::kCheckHeapObject:
1540 CheckValueInputIs(node, 0,
Type::Any());
1542 case IrOpcode::kCheckIf:
1543 CheckValueInputIs(node, 0, Type::Boolean());
1544 CheckNotTyped(node);
1546 case IrOpcode::kCheckInternalizedString:
1547 CheckValueInputIs(node, 0,
Type::Any());
1548 CheckTypeIs(node, Type::InternalizedString());
1550 case IrOpcode::kCheckMaps:
1551 CheckValueInputIs(node, 0,
Type::Any());
1552 CheckNotTyped(node);
1554 case IrOpcode::kCompareMaps:
1555 CheckValueInputIs(node, 0,
Type::Any());
1556 CheckTypeIs(node, Type::Boolean());
1558 case IrOpcode::kCheckNumber:
1559 CheckValueInputIs(node, 0,
Type::Any());
1560 CheckTypeIs(node, Type::Number());
1562 case IrOpcode::kCheckNumberFitsInt32:
1563 CheckValueInputIs(node, 0,
Type::Any());
1564 CheckTypeIs(node, Type::Signed32());
1566 case IrOpcode::kCheckReceiver:
1567 CheckValueInputIs(node, 0,
Type::Any());
1568 CheckTypeIs(node, Type::Receiver());
1570 case IrOpcode::kCheckReceiverOrNullOrUndefined:
1571 CheckValueInputIs(node, 0,
Type::Any());
1572 CheckTypeIs(node, Type::ReceiverOrNullOrUndefined());
1574 case IrOpcode::kCheckSmi:
1575 CheckValueInputIs(node, 0,
Type::Any());
1577 case IrOpcode::kCheckString:
1578 CheckValueInputIs(node, 0,
Type::Any());
1579 CheckTypeIs(node, Type::String());
1581 case IrOpcode::kCheckStringOrStringWrapper:
1582 CheckValueInputIs(node, 0,
Type::Any());
1583 CheckTypeIs(node, Type::StringOrStringWrapper());
1585 case IrOpcode::kCheckSymbol:
1586 CheckValueInputIs(node, 0,
Type::Any());
1587 CheckTypeIs(node, Type::Symbol());
1589 case IrOpcode::kConvertReceiver:
1590 CheckValueInputIs(node, 0,
Type::Any());
1591 CheckValueInputIs(node, 1,
Type::Any());
1592 CheckValueInputIs(node, 2,
Type::Any());
1593 CheckTypeIs(node, Type::Receiver());
1596 case IrOpcode::kCheckedInt32Add:
1597 case IrOpcode::kCheckedInt32Sub:
1598 case IrOpcode::kCheckedInt32Div:
1599 case IrOpcode::kCheckedInt32Mod:
1600 case IrOpcode::kCheckedUint32Div:
1601 case IrOpcode::kCheckedUint32Mod:
1602 case IrOpcode::kCheckedInt32Mul:
1603 case IrOpcode::kCheckedInt32ToTaggedSigned:
1604 case IrOpcode::kCheckedInt64ToInt32:
1605 case IrOpcode::kCheckedInt64ToTaggedSigned:
1606 case IrOpcode::kCheckedUint32Bounds:
1607 case IrOpcode::kCheckedUint32ToInt32:
1608 case IrOpcode::kCheckedUint32ToTaggedSigned:
1609 case IrOpcode::kCheckedUint64Bounds:
1610 case IrOpcode::kCheckedUint64ToInt32:
1611 case IrOpcode::kCheckedUint64ToInt64:
1612 case IrOpcode::kCheckedUint64ToTaggedSigned:
1613 case IrOpcode::kCheckedFloat64ToInt32:
1614 case IrOpcode::kCheckedFloat64ToAdditiveSafeInteger:
1615 case IrOpcode::kCheckedFloat64ToInt64:
1616 case IrOpcode::kCheckedTaggedSignedToInt32:
1617 case IrOpcode::kCheckedTaggedToInt32:
1618 case IrOpcode::kCheckedTaggedToArrayIndex:
1619 case IrOpcode::kCheckedTaggedToAdditiveSafeInteger:
1620 case IrOpcode::kCheckedTaggedToInt64:
1621 case IrOpcode::kCheckedTaggedToFloat64:
1622 case IrOpcode::kCheckedTaggedToTaggedSigned:
1623 case IrOpcode::kCheckedTaggedToTaggedPointer:
1624 case IrOpcode::kCheckedTruncateTaggedToWord32:
1625 case IrOpcode::kCheckedAdditiveSafeIntegerAdd:
1626 case IrOpcode::kCheckedAdditiveSafeIntegerSub:
1627 case IrOpcode::kCheckedInt64Add:
1628 case IrOpcode::kCheckedInt64Sub:
1629 case IrOpcode::kCheckedInt64Mul:
1630 case IrOpcode::kCheckedInt64Div:
1631 case IrOpcode::kCheckedInt64Mod:
1632 case IrOpcode::kAssertType:
1633 case IrOpcode::kVerifyType:
1634 case IrOpcode::kCheckTurboshaftTypeOf:
1636 case IrOpcode::kDoubleArrayMin:
1637 case IrOpcode::kDoubleArrayMax:
1638 CheckValueInputIs(node, 0,
Type::Any());
1639 CheckTypeIs(node, Type::Number());
1641 case IrOpcode::kCheckFloat64Hole:
1642 CheckValueInputIs(node, 0, Type::NumberOrHole());
1643 CheckTypeIs(node, Type::NumberOrUndefined());
1645 case IrOpcode::kChangeFloat64HoleToTagged:
1646 CheckValueInputIs(node, 0, Type::NumberOrHole());
1647 CheckTypeIs(node, Type::NumberOrUndefined());
1649 case IrOpcode::kCheckNotTaggedHole:
1650 CheckValueInputIs(node, 0,
Type::Any());
1651 CheckTypeIs(node, Type::NonInternal());
1653 case IrOpcode::kConvertTaggedHoleToUndefined:
1654 CheckValueInputIs(node, 0,
Type::Any());
1655 CheckTypeIs(node, Type::NonInternal());
1658 case IrOpcode::kCheckEqualsInternalizedString:
1659 CheckValueInputIs(node, 0, Type::InternalizedString());
1660 CheckValueInputIs(node, 1,
Type::Any());
1661 CheckNotTyped(node);
1663 case IrOpcode::kCheckEqualsSymbol:
1664 CheckValueInputIs(node, 0, Type::Symbol());
1665 CheckValueInputIs(node, 1,
Type::Any());
1666 CheckNotTyped(node);
1669 case IrOpcode::kLoadFieldByIndex:
1670 CheckValueInputIs(node, 0,
Type::Any());
1672 CheckTypeIs(node, Type::NonInternal());
1674 case IrOpcode::kLoadField:
1675 case IrOpcode::kLoadMessage:
1681 case IrOpcode::kLoadElement:
1682 case IrOpcode::kLoadStackArgument:
1688 case IrOpcode::kLoadFromObject:
1689 case IrOpcode::kLoadImmutableFromObject:
1690 CheckValueInputIs(node, 0, Type::Receiver());
1692 case IrOpcode::kLoadTypedElement:
1694 case IrOpcode::kLoadDataViewElement:
1696 case IrOpcode::kStoreField:
1697 case IrOpcode::kStoreMessage:
1702 CheckNotTyped(node);
1704 case IrOpcode::kStoreElement:
1709 CheckNotTyped(node);
1711 case IrOpcode::kStoreToObject:
1712 case IrOpcode::kInitializeImmutableInObject:
1715 case IrOpcode::kTransitionAndStoreElement:
1716 CheckNotTyped(node);
1718 case IrOpcode::kTransitionAndStoreNumberElement:
1719 CheckNotTyped(node);
1721 case IrOpcode::kTransitionAndStoreNonNumberElement:
1722 CheckNotTyped(node);
1724 case IrOpcode::kStoreSignedSmallElement:
1725 CheckNotTyped(node);
1727 case IrOpcode::kStoreTypedElement:
1728 CheckNotTyped(node);
1730 case IrOpcode::kStoreDataViewElement:
1731 CheckNotTyped(node);
1733 case IrOpcode::kNumberSilenceNaN:
1734 CheckValueInputIs(node, 0, Type::Number());
1735 CheckTypeIs(node, Type::Number());
1737 case IrOpcode::kMapGuard:
1738 CheckNotTyped(node);
1740 case IrOpcode::kTypeGuard:
1743 case IrOpcode::kDateNow:
1745 CheckTypeIs(node, Type::Number());
1747 case IrOpcode::kCheckBigInt:
1748 CheckValueInputIs(node, 0,
Type::Any());
1749 CheckTypeIs(node, Type::BigInt());
1751 case IrOpcode::kCheckedBigIntToBigInt64:
1752 CheckValueInputIs(node, 0, Type::BigInt());
1753 CheckTypeIs(node, Type::SignedBigInt64());
1755 case IrOpcode::kFastApiCall:
1757 CheckValueInputIs(node, 0,
Type::Any());
1759#ifdef V8_ENABLE_CONTINUATION_PRESERVED_EMBEDDER_DATA
1760 case IrOpcode::kGetContinuationPreservedEmbedderData:
1765 case IrOpcode::kSetContinuationPreservedEmbedderData:
1768 CheckValueInputIs(node, 0,
Type::Any());
1769 CheckNotTyped(node);
1772 case IrOpcode::kSLVerifierHint:
1776#if V8_ENABLE_WEBASSEMBLY
1777 case IrOpcode::kJSWasmCall:
1780 CheckValueInputIs(node, 0,
Type::Any());
1782 case IrOpcode::kWasmTypeCheck:
1783 case IrOpcode::kWasmTypeCheckAbstract:
1784 case IrOpcode::kWasmTypeCast:
1785 case IrOpcode::kWasmTypeCastAbstract:
1786 case IrOpcode::kRttCanon:
1787 case IrOpcode::kNull:
1788 case IrOpcode::kIsNull:
1789 case IrOpcode::kIsNotNull:
1790 case IrOpcode::kAssertNotNull:
1791 case IrOpcode::kWasmAnyConvertExtern:
1792 case IrOpcode::kWasmExternConvertAny:
1793 case IrOpcode::kWasmStructGet:
1794 case IrOpcode::kWasmStructSet:
1795 case IrOpcode::kWasmArrayGet:
1796 case IrOpcode::kWasmArraySet:
1797 case IrOpcode::kWasmArrayLength:
1798 case IrOpcode::kWasmArrayInitializeLength:
1799 case IrOpcode::kStringAsWtf16:
1800 case IrOpcode::kStringPrepareForGetCodeunit:
1801 case IrOpcode::kLoadStackPointer:
1802 case IrOpcode::kSetStackPointer:
1809 case IrOpcode::kLoad:
1810 case IrOpcode::kLoadImmutable:
1811 case IrOpcode::kProtectedLoad:
1812 case IrOpcode::kProtectedStore:
1813 case IrOpcode::kLoadTrapOnNull:
1814 case IrOpcode::kStoreTrapOnNull:
1815 case IrOpcode::kStore:
1816 case IrOpcode::kStorePair:
1817 case IrOpcode::kStoreIndirectPointer:
1818 case IrOpcode::kStackSlot:
1819 case IrOpcode::kWord32And:
1820 case IrOpcode::kWord32Or:
1821 case IrOpcode::kWord32Xor:
1822 case IrOpcode::kWord32Shl:
1823 case IrOpcode::kWord32Shr:
1824 case IrOpcode::kWord32Sar:
1825 case IrOpcode::kWord32Rol:
1826 case IrOpcode::kWord32Ror:
1827 case IrOpcode::kWord32Equal:
1828 case IrOpcode::kWord32Clz:
1829 case IrOpcode::kWord32Ctz:
1830 case IrOpcode::kWord32ReverseBits:
1831 case IrOpcode::kWord32ReverseBytes:
1832 case IrOpcode::kInt32AbsWithOverflow:
1833 case IrOpcode::kWord32Popcnt:
1834 case IrOpcode::kWord64And:
1835 case IrOpcode::kWord64Or:
1836 case IrOpcode::kWord64Xor:
1837 case IrOpcode::kWord64Shl:
1838 case IrOpcode::kWord64Shr:
1839 case IrOpcode::kWord64Sar:
1840 case IrOpcode::kWord64Rol:
1841 case IrOpcode::kWord64Ror:
1842 case IrOpcode::kWord64Clz:
1843 case IrOpcode::kWord64Ctz:
1844 case IrOpcode::kWord64RolLowerable:
1845 case IrOpcode::kWord64RorLowerable:
1846 case IrOpcode::kWord64ClzLowerable:
1847 case IrOpcode::kWord64CtzLowerable:
1848 case IrOpcode::kWord64Popcnt:
1849 case IrOpcode::kWord64ReverseBits:
1850 case IrOpcode::kWord64ReverseBytes:
1851 case IrOpcode::kSimd128ReverseBytes:
1852 case IrOpcode::kInt64AbsWithOverflow:
1853 case IrOpcode::kWord64Equal:
1854 case IrOpcode::kInt32Add:
1855 case IrOpcode::kInt32AddWithOverflow:
1856 case IrOpcode::kInt32Sub:
1857 case IrOpcode::kInt32SubWithOverflow:
1858 case IrOpcode::kInt32Mul:
1859 case IrOpcode::kInt32MulWithOverflow:
1860 case IrOpcode::kInt32MulHigh:
1861 case IrOpcode::kInt32Div:
1862 case IrOpcode::kInt32Mod:
1863 case IrOpcode::kInt32LessThan:
1864 case IrOpcode::kInt32LessThanOrEqual:
1865 case IrOpcode::kUint32Div:
1866 case IrOpcode::kUint32Mod:
1867 case IrOpcode::kUint32MulHigh:
1868 case IrOpcode::kUint32LessThan:
1869 case IrOpcode::kUint32LessThanOrEqual:
1870 case IrOpcode::kInt64Add:
1871 case IrOpcode::kInt64AddWithOverflow:
1872 case IrOpcode::kInt64Sub:
1873 case IrOpcode::kInt64SubWithOverflow:
1874 case IrOpcode::kInt64Mul:
1875 case IrOpcode::kInt64MulHigh:
1876 case IrOpcode::kInt64MulWithOverflow:
1877 case IrOpcode::kInt64Div:
1878 case IrOpcode::kInt64Mod:
1879 case IrOpcode::kInt64LessThan:
1880 case IrOpcode::kInt64LessThanOrEqual:
1881 case IrOpcode::kUint64Div:
1882 case IrOpcode::kUint64Mod:
1883 case IrOpcode::kUint64MulHigh:
1884 case IrOpcode::kUint64LessThan:
1885 case IrOpcode::kUint64LessThanOrEqual:
1886 case IrOpcode::kFloat32Add:
1887 case IrOpcode::kFloat32Sub:
1888 case IrOpcode::kFloat32Neg:
1889 case IrOpcode::kFloat32Mul:
1890 case IrOpcode::kFloat32Div:
1891 case IrOpcode::kFloat32Abs:
1892 case IrOpcode::kFloat32Sqrt:
1893 case IrOpcode::kFloat32Equal:
1894 case IrOpcode::kFloat32LessThan:
1895 case IrOpcode::kFloat32LessThanOrEqual:
1896 case IrOpcode::kFloat32Max:
1897 case IrOpcode::kFloat32Min:
1898 case IrOpcode::kFloat64Add:
1899 case IrOpcode::kFloat64Sub:
1900 case IrOpcode::kFloat64Neg:
1901 case IrOpcode::kFloat64Mul:
1902 case IrOpcode::kFloat64Div:
1903 case IrOpcode::kFloat64Mod:
1904 case IrOpcode::kFloat64Max:
1905 case IrOpcode::kFloat64Min:
1906 case IrOpcode::kFloat64Abs:
1907 case IrOpcode::kFloat64Acos:
1908 case IrOpcode::kFloat64Acosh:
1909 case IrOpcode::kFloat64Asin:
1910 case IrOpcode::kFloat64Asinh:
1911 case IrOpcode::kFloat64Atan:
1912 case IrOpcode::kFloat64Atan2:
1913 case IrOpcode::kFloat64Atanh:
1914 case IrOpcode::kFloat64Cbrt:
1915 case IrOpcode::kFloat64Cos:
1916 case IrOpcode::kFloat64Cosh:
1917 case IrOpcode::kFloat64Exp:
1918 case IrOpcode::kFloat64Expm1:
1919 case IrOpcode::kFloat64Log:
1920 case IrOpcode::kFloat64Log1p:
1921 case IrOpcode::kFloat64Log10:
1922 case IrOpcode::kFloat64Log2:
1923 case IrOpcode::kFloat64Pow:
1924 case IrOpcode::kFloat64Sin:
1925 case IrOpcode::kFloat64Sinh:
1926 case IrOpcode::kFloat64Sqrt:
1927 case IrOpcode::kFloat64Tan:
1928 case IrOpcode::kFloat64Tanh:
1929 case IrOpcode::kFloat32RoundDown:
1930 case IrOpcode::kFloat64RoundDown:
1931 case IrOpcode::kFloat32RoundUp:
1932 case IrOpcode::kFloat64RoundUp:
1933 case IrOpcode::kFloat32RoundTruncate:
1934 case IrOpcode::kFloat64RoundTruncate:
1935 case IrOpcode::kFloat64RoundTiesAway:
1936 case IrOpcode::kFloat32RoundTiesEven:
1937 case IrOpcode::kFloat64RoundTiesEven:
1938 case IrOpcode::kFloat64Equal:
1939 case IrOpcode::kFloat64LessThan:
1940 case IrOpcode::kFloat64LessThanOrEqual:
1941 case IrOpcode::kTruncateInt64ToInt32:
1942 case IrOpcode::kRoundFloat64ToInt32:
1943 case IrOpcode::kRoundInt32ToFloat32:
1944 case IrOpcode::kRoundInt64ToFloat32:
1945 case IrOpcode::kRoundInt64ToFloat64:
1946 case IrOpcode::kRoundUint32ToFloat32:
1947 case IrOpcode::kRoundUint64ToFloat64:
1948 case IrOpcode::kRoundUint64ToFloat32:
1949 case IrOpcode::kTruncateFloat64ToFloat32:
1950 case IrOpcode::kChangeFloat16RawBitsToFloat64:
1951 case IrOpcode::kTruncateFloat64ToFloat16RawBits:
1952 case IrOpcode::kTruncateFloat64ToWord32:
1953 case IrOpcode::kBitcastFloat32ToInt32:
1954 case IrOpcode::kBitcastFloat64ToInt64:
1955 case IrOpcode::kBitcastInt32ToFloat32:
1956 case IrOpcode::kBitcastInt64ToFloat64:
1957 case IrOpcode::kBitcastTaggedToWord:
1958 case IrOpcode::kBitcastTaggedToWordForTagAndSmiBits:
1959 case IrOpcode::kBitcastWordToTagged:
1960 case IrOpcode::kBitcastWordToTaggedSigned:
1961 case IrOpcode::kBitcastWord32ToWord64:
1962 case IrOpcode::kChangeInt32ToInt64:
1963 case IrOpcode::kChangeUint32ToUint64:
1964 case IrOpcode::kChangeInt32ToFloat64:
1965 case IrOpcode::kChangeInt64ToFloat64:
1966 case IrOpcode::kChangeUint32ToFloat64:
1967 case IrOpcode::kChangeFloat32ToFloat64:
1968 case IrOpcode::kChangeFloat64ToInt32:
1969 case IrOpcode::kChangeFloat64ToInt64:
1970 case IrOpcode::kChangeFloat64ToUint32:
1971 case IrOpcode::kChangeFloat64ToUint64:
1972 case IrOpcode::kFloat64SilenceNaN:
1973 case IrOpcode::kTruncateFloat64ToInt64:
1974 case IrOpcode::kTruncateFloat64ToUint32:
1975 case IrOpcode::kTruncateFloat32ToInt32:
1976 case IrOpcode::kTruncateFloat32ToUint32:
1977 case IrOpcode::kTryTruncateFloat32ToInt64:
1978 case IrOpcode::kTryTruncateFloat64ToInt64:
1979 case IrOpcode::kTryTruncateFloat32ToUint64:
1980 case IrOpcode::kTryTruncateFloat64ToUint64:
1981 case IrOpcode::kTryTruncateFloat64ToInt32:
1982 case IrOpcode::kTryTruncateFloat64ToUint32:
1983 case IrOpcode::kFloat64ExtractLowWord32:
1984 case IrOpcode::kFloat64ExtractHighWord32:
1985 case IrOpcode::kFloat64InsertLowWord32:
1986 case IrOpcode::kFloat64InsertHighWord32:
1987 case IrOpcode::kWord32Select:
1988 case IrOpcode::kWord64Select:
1989 case IrOpcode::kFloat32Select:
1990 case IrOpcode::kFloat64Select:
1991 case IrOpcode::kInt32PairAdd:
1992 case IrOpcode::kInt32PairSub:
1993 case IrOpcode::kInt32PairMul:
1994 case IrOpcode::kWord32PairShl:
1995 case IrOpcode::kWord32PairShr:
1996 case IrOpcode::kWord32PairSar:
1997 case IrOpcode::kLoadStackCheckOffset:
1998 case IrOpcode::kLoadFramePointer:
1999 case IrOpcode::kLoadParentFramePointer:
2000 case IrOpcode::kLoadRootRegister:
2001 case IrOpcode::kUnalignedLoad:
2002 case IrOpcode::kUnalignedStore:
2003 case IrOpcode::kMemoryBarrier:
2004 case IrOpcode::kWord32AtomicLoad:
2005 case IrOpcode::kWord32AtomicStore:
2006 case IrOpcode::kWord32AtomicExchange:
2007 case IrOpcode::kWord32AtomicCompareExchange:
2008 case IrOpcode::kWord32AtomicAdd:
2009 case IrOpcode::kWord32AtomicSub:
2010 case IrOpcode::kWord32AtomicAnd:
2011 case IrOpcode::kWord32AtomicOr:
2012 case IrOpcode::kWord32AtomicXor:
2013 case IrOpcode::kWord64AtomicLoad:
2014 case IrOpcode::kWord64AtomicStore:
2015 case IrOpcode::kWord64AtomicAdd:
2016 case IrOpcode::kWord64AtomicSub:
2017 case IrOpcode::kWord64AtomicAnd:
2018 case IrOpcode::kWord64AtomicOr:
2019 case IrOpcode::kWord64AtomicXor:
2020 case IrOpcode::kWord64AtomicExchange:
2021 case IrOpcode::kWord64AtomicCompareExchange:
2022 case IrOpcode::kWord32AtomicPairLoad:
2023 case IrOpcode::kWord32AtomicPairStore:
2024 case IrOpcode::kWord32AtomicPairAdd:
2025 case IrOpcode::kWord32AtomicPairSub:
2026 case IrOpcode::kWord32AtomicPairAnd:
2027 case IrOpcode::kWord32AtomicPairOr:
2028 case IrOpcode::kWord32AtomicPairXor:
2029 case IrOpcode::kWord32AtomicPairExchange:
2030 case IrOpcode::kWord32AtomicPairCompareExchange:
2031 case IrOpcode::kSignExtendWord8ToInt32:
2032 case IrOpcode::kSignExtendWord16ToInt32:
2033 case IrOpcode::kSignExtendWord8ToInt64:
2034 case IrOpcode::kSignExtendWord16ToInt64:
2035 case IrOpcode::kSignExtendWord32ToInt64:
2036 case IrOpcode::kStaticAssert:
2037 case IrOpcode::kStackPointerGreaterThan:
2038 case IrOpcode::kTraceInstruction:
2040#define SIMD_MACHINE_OP_CASE(Name) case IrOpcode::k##Name:
2043#undef SIMD_MACHINE_OP_CASE