Lines Matching refs:builder_
144 Environment env(gate, circuit_, &builder_);
146 Label returnUndefined(&builder_);
147 Label exit(&builder_);
149 DEFVALUE(result, (&builder_), VariableType::JS_ANY(), receiver);
151 builder_.Branch(builder_.TaggedIsHole(*result), &returnUndefined, &exit, 1, BranchWeight::DEOPT_WEIGHT,
153 builder_.Bind(&returnUndefined);
155 result = builder_.UndefineConstant();
156 builder_.Jump(&exit);
158 builder_.Bind(&exit);
159 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), *result);
164 Environment env(gate, circuit_, &builder_);
166 GateRef offset = builder_.IntPtr(acc_.GetOffset(gate));
168 GateRef result = builder_.Load(type, receiver, offset, acc_.GetMemoryAttribute(gate));
169 acc_.ReplaceGate(gate, Circuit::NullGate(), builder_.GetDepend(), result);
174 Environment env(gate, circuit_, &builder_);
178 GateRef constPoolSize = builder_.GetLengthOfTaggedArray(constpool);
179 GateRef valVecIndex = builder_.Int32Sub(constPoolSize, builder_.Int32(ConstantPool::AOT_HCLASS_INFO_INDEX));
180 GateRef valVec = builder_.GetValueFromTaggedArray(constpool, valVecIndex);
181 GateRef hclass = builder_.GetValueFromTaggedArray(valVec, builder_.Int32(index));
182 acc_.ReplaceGate(gate, Circuit::NullGate(), builder_.GetDepend(), hclass);
185 acc_.ReplaceGate(gate, Circuit::NullGate(), builder_.GetDepend(), builder_.TaggedValueConstant(hclass));
191 Environment env(gate, circuit_, &builder_);
195 GateRef offset = builder_.IntPtr(acc_.GetOffset(gate));
197 builder_.Store(type, glue_, receiver, offset, value, acc_.GetMemoryAttribute(gate));
198 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
203 Environment env(gate, circuit_, &builder_);
207 GateRef heapObjectCheck = builder_.TaggedIsHeapObject(receiver);
208 builder_.DeoptCheck(heapObjectCheck, frameState, DeoptType::NOTHEAPOBJECT1);
210 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
215 Environment env(gate, circuit_, &builder_);
217 GateRef result = builder_.TaggedIsHeapObject(receiver);
218 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
223 Environment env(gate, circuit_, &builder_);
225 GateRef result = builder_.IsMarkerCellValid(cell);
226 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
231 Environment env(gate, circuit_, &builder_);
237 result = builder_.TaggedObjectIsJSMap(obj);
241 result = builder_.TaggedObjectIsJSSet(obj);
245 result = builder_.TaggedObjectIsJSDate(obj);
249 result = builder_.TaggedObjectIsJSArray(obj);
253 result = builder_.TaggedObjectIsString(obj);
257 result = builder_.TaggedObjectIsTypedArray(obj);
265 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
278 Environment env(gate, circuit_, &builder_);
281 GateRef guardiansOffset = builder_.IntPtr(JSThread::GlueData::GetStableArrayElementsGuardiansOffset(false));
282 GateRef check = builder_.Load(VariableType::BOOL(), glue_, guardiansOffset);
283 builder_.DeoptCheck(check, frameState, DeoptType::NOTSARRAY1);
285 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
290 Environment env(gate, circuit_, &builder_);
294 GateRef check = builder_.IsStableElements(hclass);
295 builder_.DeoptCheck(check, frameState, DeoptType::NOTSARRAY2);
297 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
302 Environment env(stateDepend.State(), stateDepend.Depend(), {}, circuit_, &builder_);
306 Label exit(&builder_);
319 result = builder_.NotEqual(value, builder_.Int32(0));
329 result = builder_.NotEqual(value, builder_.Int32(0));
357 result = builder_.CallStub(glue, gate, CommonStubCSigns::CreateStringBySingleCharCode, { glue, value });
359 result = builder_.CallStub(glue, gate, CommonStubCSigns::ConvertCharToInt32, { glue, value });
362 result = builder_.CallStub(glue, gate, CommonStubCSigns::ConvertCharToDouble, { glue, value });
381 return builder_.GetStateDepend();
386 Label returnUndefined(&builder_);
387 Label returnTaggedInt(&builder_);
388 DEFVALUE(result, (&builder_), VariableType::JS_ANY(), builder_.HoleConstant());
390 builder_.Branch(builder_.IsSpecialHole(gate), &returnUndefined, &returnTaggedInt, 1, BranchWeight::DEOPT_WEIGHT,
392 builder_.Bind(&returnUndefined);
394 result = builder_.UndefineConstant();
395 builder_.Jump(exit);
397 builder_.Bind(&returnTaggedInt);
399 GateRef rawInt = builder_.TruncInt64ToInt32(gate);
401 builder_.Jump(exit);
403 builder_.Bind(exit);
409 Label returnUndefined(&builder_);
410 Label returnTaggedDouble(&builder_);
411 DEFVALUE(result, (&builder_), VariableType::JS_ANY(), builder_.HoleConstant());
413 builder_.Branch(builder_.IsSpecialHole(gate), &returnUndefined, &returnTaggedDouble, 1, BranchWeight::DEOPT_WEIGHT,
415 builder_.Bind(&returnUndefined);
417 result = builder_.UndefineConstant();
418 builder_.Jump(exit);
420 builder_.Bind(&returnTaggedDouble);
422 GateRef rawDouble = builder_.CastInt64ToFloat64(gate);
424 builder_.Jump(exit);
426 builder_.Bind(exit);
432 DEFVALUE(result, (&builder_), VariableType::BOOL(), builder_.Boolean(false));
433 Label isInt(&builder_);
434 Label isDouble(&builder_);
435 Label toInt32(&builder_);
436 BRANCH_CIR(builder_.TaggedIsInt(gate), &isInt, &isDouble);
437 builder_.Bind(&isInt);
439 GateRef intVal = builder_.GetInt64OfTInt(gate);
440 result = builder_.NotEqual(intVal, builder_.Int64(0));
442 builder_.Jump(exit);
443 builder_.Bind(&isDouble);
445 GateRef doubleVal = builder_.GetDoubleOfTDouble(gate);
448 builder_.Jump(exit);
449 builder_.Bind(exit);
455 DEFVALUE(result, (&builder_), VariableType::INT32(), builder_.Int32(0));
456 Label isInt(&builder_);
457 Label isDouble(&builder_);
458 Label toInt32(&builder_);
459 BRANCH_CIR(builder_.TaggedIsInt(gate), &isInt, &isDouble);
460 builder_.Bind(&isInt);
462 builder_.Jump(exit);
463 builder_.Bind(&isDouble);
465 builder_.Jump(exit);
466 builder_.Bind(exit);
472 DEFVALUE(result, (&builder_), VariableType::FLOAT64(), builder_.Double(0));
473 Label isInt(&builder_);
474 Label isDouble(&builder_);
475 BRANCH_CIR(builder_.TaggedIsInt(gate), &isInt, &isDouble);
476 builder_.Bind(&isInt);
478 builder_.Jump(exit);
479 builder_.Bind(&isDouble);
481 builder_.Jump(exit);
482 builder_.Bind(exit);
488 Environment env(gate, circuit_, &builder_);
491 Label exit(&builder_);
536 GateRef check = builder_.DoubleEqual(builder_.ChangeInt32ToFloat64(result), value);
537 builder_.DeoptCheck(check, frameState, DeoptType::INT32OVERFLOW1);
539 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
545 GateRef typeCheck = builder_.IsNotSpecialHole(value);
546 builder_.DeoptCheck(typeCheck, frameState, DeoptType::CANNOTSTORESPECAILHOLE);
550 result = builder_.TruncInt64ToInt32(value);
552 result = builder_.CastInt64ToFloat64(value);
554 GateRef rawInt = builder_.TruncInt64ToInt32(gate);
557 GateRef rawDouble = builder_.CastInt64ToFloat64(value);
562 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
568 GateRef upperBound = builder_.Int32(INT32_MAX);
569 GateRef check = builder_.Int32UnsignedLessThanOrEqual(value, upperBound);
570 builder_.DeoptCheck(check, frameState, DeoptType::INT32OVERFLOW1);
571 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), value);
577 GateRef typeCheck = builder_.TaggedIsInt(value);
578 builder_.DeoptCheck(typeCheck, frameState, DeoptType::NOTINT1);
587 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
593 GateRef typeCheck = builder_.TaggedIsDouble(value);
594 builder_.DeoptCheck(typeCheck, frameState, DeoptType::NOTDOUBLE1);
603 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
609 GateRef typeCheck = builder_.TaggedIsNumber(value);
610 builder_.DeoptCheck(typeCheck, frameState, DeoptType::NOTNUMBER1);
621 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
633 builder_.DeoptCheck(builder_.Boolean(support), frameState, DeoptType::NOTINT2);
634 result = builder_.BooleanToInt32(value);
636 builder_.DeoptCheck(builder_.Boolean(support), frameState, DeoptType::NOTDOUBLE2);
637 result = builder_.BooleanToFloat64(value);
639 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
645 GateRef typeCheck = builder_.TaggedIsBoolean(value);
646 builder_.DeoptCheck(typeCheck, frameState, DeoptType::NOTBOOL1);
652 result = builder_.ZExtInt1ToInt32(boolValue);
654 result = builder_.BooleanToFloat64(boolValue);
658 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
664 GateRef typeCheck = builder_.TaggedIsNull(value);
665 builder_.DeoptCheck(typeCheck, frameState, DeoptType::NOTNULL1);
668 result = builder_.Int32(0);
670 result = builder_.Double(0);
672 result = builder_.False();
676 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
682 GateRef typeCheck = builder_.TaggedIsUndefined(value);
683 builder_.DeoptCheck(typeCheck, frameState, DeoptType::NOTNULL2);
686 result = builder_.NanValue();
688 result = builder_.False();
690 result = builder_.Int32(0);
694 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
699 return builder_.TaggedIsTrue(value);
704 return builder_.BooleanToTaggedBooleanPtr(gate);
709 return builder_.ChangeInt32ToFloat64(gate);
714 return builder_.ChangeUInt32ToFloat64(gate);
719 return builder_.Int32ToTaggedPtr(gate);
724 Label isOverFlow(&builder_);
725 Label notOverFlow(&builder_);
726 GateRef upperBound = builder_.Int32(INT32_MAX);
727 DEFVALUE(taggedVal, (&builder_), VariableType::JS_ANY(), builder_.HoleConstant());
728 BRANCH_CIR(builder_.Int32UnsignedLessThanOrEqual(gate, upperBound), ¬OverFlow, &isOverFlow);
729 builder_.Bind(¬OverFlow);
730 taggedVal = builder_.Int32ToTaggedPtr(gate);
731 builder_.Jump(exit);
732 builder_.Bind(&isOverFlow);
733 taggedVal = builder_.DoubleToTaggedDoublePtr(builder_.ChangeUInt32ToFloat64(gate));
734 builder_.Jump(exit);
735 builder_.Bind(exit);
741 return builder_.DoubleToInt(gate, exit);
746 return LogicAndBuilder(builder_.GetCurrentEnvironment())
747 .And(builder_.DoubleNotEqual(gate, builder_.Double(0.0)))
748 .And(builder_.BoolNot(builder_.DoubleIsNAN(gate)))
754 return builder_.DoubleToTaggedDoublePtr(gate);
759 return builder_.GetInt32OfTInt(gate);
764 return builder_.ChangeInt32ToFloat64(builder_.GetInt32OfTInt(gate));
769 return builder_.DoubleToInt(builder_.GetDoubleOfTDouble(gate), exit);
774 return builder_.GetDoubleOfTDouble(gate);
779 Environment env(gate, circuit_, &builder_);
780 GateRef glueGlobalEnvOffset = builder_.IntPtr(JSThread::GlueData::GetGlueGlobalEnvOffset(false));
781 GateRef glueGlobalEnv = builder_.Load(VariableType::JS_POINTER(), glue_, glueGlobalEnvOffset);
782 acc_.ReplaceGate(gate, Circuit::NullGate(), builder_.GetDepend(), glueGlobalEnv);
787 Environment env(gate, circuit_, &builder_);
790 GateRef offset = builder_.IntPtr(GlobalEnv::HEADER_SIZE + JSTaggedValue::TaggedTypeSize() * index);
791 GateRef object = builder_.Load(VariableType::JS_ANY(), globalEnv, offset);
792 acc_.ReplaceGate(gate, Circuit::NullGate(), builder_.GetDepend(), object);
797 Environment env(gate, circuit_, &builder_);
800 GateRef offset = builder_.IntPtr(GlobalEnv::HEADER_SIZE + JSTaggedValue::TaggedTypeSize() * index);
801 GateRef object = builder_.Load(VariableType::JS_ANY(), globalEnv, offset);
802 auto hclass = builder_.Load(VariableType::JS_POINTER(), object,
803 builder_.IntPtr(JSFunction::PROTO_OR_DYNCLASS_OFFSET));
804 acc_.ReplaceGate(gate, Circuit::NullGate(), builder_.GetDepend(), hclass);
809 Environment env(gate, circuit_, &builder_);
811 GateRef gConstAddr = builder_.Load(VariableType::JS_POINTER(), glue_,
812 builder_.IntPtr(JSThread::GlueData::GetGlobalConstOffset(false)));
813 GateRef constantIndex = builder_.IntPtr(JSTaggedValue::TaggedTypeSize() * index);
814 GateRef result = builder_.Load(VariableType::JS_POINTER(), gConstAddr, constantIndex);
815 acc_.ReplaceGate(gate, Circuit::NullGate(), builder_.GetDepend(), result);
821 GateRef ret = builder_.CallRuntime(glue_, RTSTUB_ID(AllocateInSOld), Gate::InvalidGateRef,
822 {builder_.ToTaggedInt(size)}, gate);
824 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), ret);
829 Environment env(gate, circuit_, &builder_);
832 GateRef rightNotZero = builder_.Int32NotEqual(right, builder_.Int32(0));
833 builder_.DeoptCheck(rightNotZero, frameState, DeoptType::MODZERO1);
834 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
839 Environment env(gate, circuit_, &builder_);
844 .And(builder_.Int32LessThan(left, builder_.Int32(0)))
845 .And(builder_.Int32Equal(builder_.Int32(0),
846 builder_.BinaryArithmetic(circuit_->Smod(), MachineType::I32, left, right, GateType::NJSValue())))
848 GateRef remainderIsNotNegative = builder_.BoolNot(remainderIsNegative);
849 builder_.DeoptCheck(remainderIsNotNegative, frameState, DeoptType::REMAINDERISNEGATIVEZERO);
850 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
855 Environment env(gate, circuit_, &builder_);
858 GateRef rightNotZero = builder_.DoubleNotEqual(right, builder_.Double(0.0));
859 builder_.DeoptCheck(rightNotZero, frameState, DeoptType::DIVZERO1);
860 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
865 Environment env(gate, circuit_, &builder_);
868 GateRef valueIsNotHole = builder_.TaggedIsNotHole(value);
869 builder_.DeoptCheck(valueIsNotHole, frameState, DeoptType::LEXVARISHOLE1);
870 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
875 Environment env(gate, circuit_, &builder_);
878 GateRef isNotUndefinedorHole = builder_.BoolNot(builder_.TaggedIsUndefinedOrHole(value));
879 builder_.DeoptCheck(isNotUndefinedorHole, frameState, DeoptType::ISUNDEFINEDORHOLE);
880 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
885 Environment env(gate, circuit_, &builder_);
888 GateRef isUndefinedorHole = builder_.TaggedIsUndefinedOrHole(value);
889 builder_.DeoptCheck(isUndefinedorHole, frameState, DeoptType::ISNOTUNDEFINEDORHOLE);
890 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
895 Environment env(gate, circuit_, &builder_);
898 GateRef isDataView = builder_.CheckJSType(obj, JSType::JS_DATA_VIEW);
899 builder_.DeoptCheck(isDataView, frameState, DeoptType::ISNOTDATAVIEW);
900 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
905 Environment env(gate, circuit_, &builder_);
908 GateRef valueNotZero = builder_.NotEqual(value, builder_.Int32(0));
909 builder_.DeoptCheck(valueNotZero, frameState, DeoptType::NOTNEGOV1);
910 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
915 Environment env(gate, circuit_, &builder_);
918 GateRef condition = builder_.BoolNot(builder_.ExtractValue(MachineType::I1, result, builder_.Int32(1)));
919 builder_.DeoptCheck(condition, frameState, DeoptType::NOTINT3);
920 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
925 Environment env(gate, circuit_, &builder_);
929 GateRef condition = builder_.Int32UnsignedLessThanOrEqual(value, upperBound);
930 builder_.DeoptCheck(condition, frameState, DeoptType::NOTINT4);
931 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
936 Environment env(gate, circuit_, &builder_);
942 .Or(builder_.Int32GreaterThan(right, builder_.Int32(0)))
943 .Or(builder_.BitAnd(builder_.Int32LessThan(right, builder_.Int32(0)),
944 builder_.Int32NotEqual(left, builder_.Int32(0))))
946 builder_.DeoptCheck(condition, frameState, DeoptType::DIVZERO2);
947 result = builder_.BinaryArithmetic(circuit_->Sdiv(), MachineType::I32, left, right, GateType::NJSValue());
948 GateRef truncated = builder_.BinaryArithmetic(circuit_->Mul(),
950 GateRef overCheck = builder_.Int32Equal(truncated, left);
951 builder_.DeoptCheck(overCheck, frameState, DeoptType::NOTINT5);
952 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
957 Environment env(gate, circuit_, &builder_);
961 builder_.Store(VariableType::VOID(), glue_, receiver, index, value);
962 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
968 Label begin(&builder_);
969 Label storeValue(&builder_);
970 Label endLoop(&builder_);
972 DEFVALUE(startOffset, (&builder_), VariableType::INT32(), start);
973 builder_.Jump(&begin);
974 builder_.LoopBegin(&begin);
976 BRANCH_CIR(builder_.Int32UnsignedLessThan(*startOffset, end), &storeValue, exit);
977 builder_.Bind(&storeValue);
979 builder_.Store(VariableType::INT64(), glue, object, builder_.ZExtInt32ToPtr(*startOffset), value);
980 startOffset = builder_.Int32Add(*startOffset, builder_.Int32(JSTaggedValue::TaggedTypeSize()));
981 builder_.Jump(&endLoop);
983 builder_.Bind(&endLoop);
984 builder_.LoopEnd(&begin);
990 Environment env(gate, circuit_, &builder_);
991 DEFVALUE(newElements, (&builder_), VariableType::JS_ANY(), builder_.Undefined());
992 Label exit(&builder_);
996 GateRef elements = builder_.GetElementsArray(object);
997 GateRef length = builder_.GetLengthOfTaggedArray(elements);
998 Label createCOW(&builder_);
999 Label createNormal(&builder_);
1000 Label finishElementsInit(&builder_);
1002 builder_.Bind(&createCOW);
1004 newElements = builder_.CallRuntime(glue_, RTSTUB_ID(NewCOWTaggedArray), acc_.GetDep(gate),
1005 { builder_.Int32ToTaggedPtr(length) }, gate);
1006 builder_.Jump(&finishElementsInit);
1008 builder_.Bind(&createNormal);
1010 newElements = builder_.CallRuntime(glue_, RTSTUB_ID(NewTaggedArray), acc_.GetDep(gate),
1011 { builder_.Int32ToTaggedPtr(length) }, gate);
1012 builder_.Jump(&finishElementsInit);
1014 builder_.Bind(&finishElementsInit);
1016 DEFVALUE(index, (&builder_), VariableType::INT32(), builder_.Int32(0));
1017 Label loopHead(&builder_);
1018 Label loopEnd(&builder_);
1019 Label afterLoop(&builder_);
1020 Label storeValue(&builder_);
1021 builder_.Jump(&loopHead);
1022 builder_.LoopBegin(&loopHead);
1024 Label storeHole(&builder_);
1025 Label storeNormalValue(&builder_);
1026 Label finishStore(&builder_);
1027 BRANCH_CIR(builder_.Int32UnsignedLessThan(*index, length), &storeValue, &afterLoop);
1028 builder_.Bind(&storeValue);
1030 Label rawValueIsInt(&builder_);
1031 Label rawValueIsNumber(&builder_);
1032 GateRef value = builder_.GetValueFromJSArrayWithElementsKind(VariableType::INT64(), elements, *index);
1033 BRANCH_CIR(builder_.IsSpecialHole(value), &storeHole, &storeNormalValue);
1034 builder_.Bind(&storeHole);
1036 builder_.SetValueToTaggedArray(VariableType::JS_ANY(), glue_, *newElements, *index, builder_.Hole());
1037 builder_.Jump(&finishStore);
1039 builder_.Bind(&storeNormalValue);
1042 builder_.Bind(&rawValueIsInt);
1044 GateRef convertedInt = builder_.ToTaggedIntPtr(value);
1045 builder_.SetValueToTaggedArray(VariableType::JS_ANY(), glue_, *newElements, *index, convertedInt);
1046 builder_.Jump(&finishStore);
1048 builder_.Bind(&rawValueIsNumber);
1050 GateRef tmpDouble = builder_.CastInt64ToFloat64(value);
1051 GateRef convertedDouble = builder_.DoubleToTaggedDoublePtr(tmpDouble);
1052 builder_.SetValueToTaggedArray(VariableType::JS_ANY(), glue_, *newElements,
1054 builder_.Jump(&finishStore);
1057 builder_.Bind(&finishStore);
1059 index = builder_.Int32Add(*index, builder_.Int32(1));
1060 builder_.Jump(&loopEnd);
1064 builder_.Bind(&loopEnd);
1065 builder_.LoopEnd(&loopHead);
1066 builder_.Bind(&afterLoop);
1068 builder_.Jump(&exit);
1070 builder_.Bind(&exit);
1071 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), *newElements);
1076 Environment env(gate, circuit_, &builder_);
1077 DEFVALUE(newElements, (&builder_), VariableType::JS_ANY(), builder_.Undefined());
1078 Label exit(&builder_);
1083 GateRef elements = builder_.GetElementsArray(object);
1084 GateRef length = builder_.GetLengthOfTaggedArray(elements);
1085 Label createCOW(&builder_);
1086 Label createNormal(&builder_);
1087 Label finishElementsInit(&builder_);
1089 builder_.Bind(&createCOW);
1091 newElements = builder_.CallRuntime(glue_, RTSTUB_ID(NewCOWMutantTaggedArray), acc_.GetDep(gate),
1092 { builder_.Int32ToTaggedPtr(length) }, gate);
1093 builder_.Jump(&finishElementsInit);
1095 builder_.Bind(&createNormal);
1097 newElements = builder_.CallRuntime(glue_, RTSTUB_ID(NewMutantTaggedArray), acc_.GetDep(gate),
1098 { builder_.Int32ToTaggedPtr(length) }, gate);
1099 builder_.Jump(&finishElementsInit);
1101 builder_.Bind(&finishElementsInit);
1103 DEFVALUE(index, (&builder_), VariableType::INT32(), builder_.Int32(0));
1104 Label loopHead(&builder_);
1105 Label loopEnd(&builder_);
1106 Label afterLoop(&builder_);
1107 Label storeValue(&builder_);
1108 builder_.Jump(&loopHead);
1109 builder_.LoopBegin(&loopHead);
1111 Label storeSpecialHole(&builder_);
1112 Label storeNormalValue(&builder_);
1113 Label finishStore(&builder_);
1114 BRANCH_CIR(builder_.Int32UnsignedLessThan(*index, length), &storeValue, &afterLoop);
1115 builder_.Bind(&storeValue);
1117 Label convertToInt(&builder_);
1118 Label convertToDouble(&builder_);
1119 GateRef value = builder_.GetValueFromTaggedArray(elements, *index);
1120 BRANCH_CIR(builder_.TaggedIsHole(value), &storeSpecialHole, &storeNormalValue);
1121 builder_.Bind(&storeSpecialHole);
1123 builder_.SetValueToTaggedArray(VariableType::INT64(), glue_, *newElements,
1124 *index, builder_.SpecialHoleConstant());
1125 builder_.Jump(&finishStore);
1127 builder_.Bind(&storeNormalValue);
1129 Label valueIsInt(&builder_);
1130 Label valueIsDouble(&builder_);
1132 builder_.Bind(&convertToInt);
1134 GateRef convertedInt = builder_.GetInt64OfTInt(value);
1135 builder_.SetValueToTaggedArray(VariableType::INT64(), glue_, *newElements, *index, convertedInt);
1136 builder_.Jump(&finishStore);
1138 builder_.Bind(&convertToDouble);
1140 BRANCH_CIR(builder_.TaggedIsInt(value), &valueIsInt, &valueIsDouble);
1141 builder_.Bind(&valueIsInt);
1143 GateRef convertedDoubleFromTInt = builder_.CastDoubleToInt64(builder_.GetDoubleOfTInt(value));
1144 builder_.SetValueToTaggedArray(VariableType::INT64(), glue_, *newElements, *index,
1146 builder_.Jump(&finishStore);
1148 builder_.Bind(&valueIsDouble);
1150 GateRef doubleValue = builder_.GetDoubleOfTDouble(value);
1151 GateRef convertedDoubleFromTDouble = builder_.CastDoubleToInt64(doubleValue);
1152 builder_.SetValueToTaggedArray(VariableType::INT64(), glue_, *newElements, *index,
1154 builder_.Jump(&finishStore);
1158 builder_.Bind(&finishStore);
1160 index = builder_.Int32Add(*index, builder_.Int32(1));
1161 builder_.Jump(&loopEnd);
1165 builder_.Bind(&loopEnd);
1166 builder_.LoopEnd(&loopHead);
1167 builder_.Bind(&afterLoop);
1169 builder_.Jump(&exit);
1172 builder_.Bind(&exit);
1173 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), *newElements);
1178 Environment env(gate, circuit_, &builder_);
1180 Label exit(&builder_);
1181 GateRef elements = builder_.GetElementsArray(object);
1182 GateRef length = builder_.GetLengthOfTaggedArray(elements);
1183 DEFVALUE(index, (&builder_), VariableType::INT32(), builder_.Int32(0));
1184 Label loopHead(&builder_);
1185 Label loopEnd(&builder_);
1186 Label afterLoop(&builder_);
1187 Label storeValue(&builder_);
1188 builder_.Jump(&loopHead);
1189 builder_.LoopBegin(&loopHead);
1191 Label storeNormalValue(&builder_);
1192 Label finishStore(&builder_);
1193 BRANCH_CIR(builder_.Int32UnsignedLessThan(*index, length), &storeValue, &afterLoop);
1194 builder_.Bind(&storeValue);
1196 GateRef value = builder_.GetValueFromTaggedArray(VariableType::INT64(), elements, *index);
1197 BRANCH_CIR(builder_.IsSpecialHole(value), &finishStore, &storeNormalValue);
1198 builder_.Bind(&storeNormalValue);
1200 GateRef intVal = builder_.TruncInt64ToInt32(value);
1201 GateRef convertedValue = builder_.CastDoubleToInt64(builder_.ChangeInt32ToFloat64(intVal));
1202 builder_.SetValueToTaggedArray(VariableType::INT64(), glue_, elements, *index,
1204 builder_.Jump(&finishStore);
1206 builder_.Bind(&finishStore);
1208 index = builder_.Int32Add(*index, builder_.Int32(1));
1209 builder_.Jump(&loopEnd);
1213 builder_.Bind(&loopEnd);
1214 builder_.LoopEnd(&loopHead);
1215 builder_.Bind(&afterLoop);
1217 builder_.Jump(&exit);
1220 builder_.Bind(&exit);
1221 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
1226 Environment env(gate, circuit_, &builder_);
1228 Label exit(&builder_);
1229 GateRef elements = builder_.GetElementsArray(object);
1230 GateRef length = builder_.GetLengthOfTaggedArray(elements);
1231 DEFVALUE(index, (&builder_), VariableType::INT32(), builder_.Int32(0));
1232 Label loopHead(&builder_);
1233 Label loopEnd(&builder_);
1234 Label afterLoop(&builder_);
1235 Label storeValue(&builder_);
1236 builder_.Jump(&loopHead);
1237 builder_.LoopBegin(&loopHead);
1239 Label storeNormalValue(&builder_);
1240 Label finishStore(&builder_);
1241 BRANCH_CIR(builder_.Int32UnsignedLessThan(*index, length), &storeValue, &afterLoop);
1242 builder_.Bind(&storeValue);
1244 GateRef value = builder_.GetValueFromTaggedArray(VariableType::INT64(), elements, *index);
1245 BRANCH_CIR(builder_.IsSpecialHole(value), &finishStore, &storeNormalValue);
1246 builder_.Bind(&storeNormalValue);
1248 GateRef doubleVal = builder_.CastInt64ToFloat64(value);
1249 GateRef convertedValue = builder_.SExtInt32ToInt64(builder_.ChangeFloat64ToInt32(doubleVal));
1250 builder_.SetValueToTaggedArray(VariableType::INT64(), glue_, elements, *index,
1252 builder_.Jump(&finishStore);
1254 builder_.Bind(&finishStore);
1256 index = builder_.Int32Add(*index, builder_.Int32(1));
1257 builder_.Jump(&loopEnd);
1261 builder_.Bind(&loopEnd);
1262 builder_.LoopEnd(&loopHead);
1263 builder_.Bind(&afterLoop);
1265 builder_.Jump(&exit);
1268 builder_.Bind(&exit);
1269 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
1274 Environment env(gate, circuit_, &builder_);
1278 GateRef isEcmaObject = builder_.TaggedObjectIsEcmaObject(value);
1279 builder_.DeoptCheck(isEcmaObject, frameState, DeoptType::NOT_ECMA_OBJECT);
1281 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());
1286 Environment env(gate, circuit_, &builder_);
1289 GateRef isCallable = LogicAndBuilder(&env).And(builder_.TaggedIsHeapObject(func))
1290 .And(builder_.IsCallable(func)).Done();
1291 builder_.DeoptCheck(isCallable, frameState, DeoptType::NOTCALLABLE);
1292 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), Circuit::NullGate());