Lines Matching refs:gate

35     for (auto gate : gateList) {
36 auto op = acc_.GetOpCode(gate);
39 rangeGuardGates_.push_back(gate);
43 VisitGate(gate);
52 void NumberSpeculativeLowering::VisitGate(GateRef gate)
54 OpCode op = acc_.GetOpCode(gate);
57 VisitTypedBinaryOp(gate);
61 VisitTypedUnaryOp(gate);
65 VisitTypedConditionJump(gate);
69 VisitPhi(gate);
73 VisitConstant(gate);
77 VisitLoadElement(gate);
81 VisitIndexCheck(gate);
85 VisitRangeCheckPredicate(gate);
90 VisitLoadArrayLength(gate);
94 VisitLoadStringLength(gate);
98 VisitLoadMapSize(gate);
102 VisitLoadProperty(gate);
106 VisitLoadPropertyOnProto(gate);
110 VisitRound(gate);
118 void NumberSpeculativeLowering::VisitTypedBinaryOp(GateRef gate)
120 Environment env(gate, circuit_, &builder_);
121 if (acc_.HasStringType(gate)) {
122 VisitStringBinaryOp(gate);
125 auto op = acc_.GetTypedBinaryOp(gate);
129 VisitStrictEqualOrStrictNotEqual(gate);
134 VisitEqualOrNotEqual(gate);
138 if (acc_.HasNumberType(gate)) {
139 VisitNumberBinaryOp(gate);
146 void NumberSpeculativeLowering::VisitEqualOrNotEqual(GateRef gate)
148 if (acc_.HasNumberType(gate)) {
149 VisitNumberBinaryOp(gate);
151 VisitUndefinedEqOrUndefinedNotEq(gate);
155 void NumberSpeculativeLowering::VisitStrictEqualOrStrictNotEqual(GateRef gate)
157 if (acc_.HasNumberType(gate)) {
158 VisitNumberBinaryOp(gate);
160 VisitUndefinedStrictEqOrUndefinedStrictNotEq(gate);
164 void NumberSpeculativeLowering::VisitNumberBinaryOp(GateRef gate)
166 TypedBinOp Op = acc_.GetTypedBinaryOp(gate);
169 VisitNumberCalculate<TypedBinOp::TYPED_ADD>(gate);
173 VisitNumberCalculate<TypedBinOp::TYPED_SUB>(gate);
177 VisitNumberCalculate<TypedBinOp::TYPED_MUL>(gate);
181 VisitNumberCompare<TypedBinOp::TYPED_LESS>(gate);
185 VisitNumberCompare<TypedBinOp::TYPED_LESSEQ>(gate);
189 VisitNumberCompare<TypedBinOp::TYPED_GREATER>(gate);
193 VisitNumberCompare<TypedBinOp::TYPED_GREATEREQ>(gate);
197 VisitNumberCompare<TypedBinOp::TYPED_EQ>(gate);
201 VisitNumberCompare<TypedBinOp::TYPED_NOTEQ>(gate);
205 VisitNumberCompare<TypedBinOp::TYPED_STRICTEQ>(gate);
209 VisitNumberCompare<TypedBinOp::TYPED_STRICTNOTEQ>(gate);
213 VisitNumberShift<TypedBinOp::TYPED_SHL>(gate);
217 VisitNumberShift<TypedBinOp::TYPED_SHR>(gate);
221 VisitNumberShift<TypedBinOp::TYPED_ASHR>(gate);
225 VisitNumberLogical<TypedBinOp::TYPED_AND>(gate);
229 VisitNumberLogical<TypedBinOp::TYPED_OR>(gate);
233 VisitNumberLogical<TypedBinOp::TYPED_XOR>(gate);
237 VisitNumberDiv(gate);
241 VisitNumberMod<TypedBinOp::TYPED_MOD>(gate);
249 void NumberSpeculativeLowering::VisitTypedUnaryOp(GateRef gate)
251 Environment env(gate, circuit_, &builder_);
252 TypedUnOp Op = acc_.GetTypedUnAccessor(gate).GetTypedUnOp();
255 VisitNumberMonocular<TypedUnOp::TYPED_INC>(gate);
259 VisitNumberMonocular<TypedUnOp::TYPED_DEC>(gate);
263 VisitNumberMonocular<TypedUnOp::TYPED_NEG>(gate);
267 VisitIsTrueOrFalse(gate, false);
271 VisitIsTrueOrFalse(gate, true);
275 VisitNumberNot(gate);
283 void NumberSpeculativeLowering::VisitTypedConditionJump(GateRef gate)
285 Environment env(gate, circuit_, &builder_);
286 ParamType type = acc_.GetTypedJumpAccessor(gate).GetParamType();
288 VisitBooleanJump(gate);
295 void NumberSpeculativeLowering::VisitNumberCalculate(GateRef gate)
297 GateRef left = acc_.GetValueIn(gate, 0);
298 GateRef right = acc_.GetValueIn(gate, 1);
299 TypedBinaryAccessor accessor(acc_.TryGetValue(gate));
305 UpdateRange(result, GetRange(gate));
306 acc_.SetMachineType(gate, MachineType::I32);
309 acc_.SetMachineType(gate, MachineType::F64);
311 acc_.SetGateType(gate, GateType::NJSValue());
312 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
316 void NumberSpeculativeLowering::VisitNumberCompare(GateRef gate)
318 GateRef left = acc_.GetValueIn(gate, 0);
319 GateRef right = acc_.GetValueIn(gate, 1);
320 TypedBinaryAccessor accessor(acc_.TryGetValue(gate));
329 acc_.SetMachineType(gate, MachineType::I1);
330 acc_.SetGateType(gate, GateType::NJSValue());
331 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
335 void NumberSpeculativeLowering::VisitNumberShift(GateRef gate)
337 GateRef left = acc_.GetValueIn(gate, 0);
338 GateRef right = acc_.GetValueIn(gate, 1);
340 UpdateRange(result, GetRange(gate));
341 acc_.SetMachineType(gate, MachineType::I32);
342 acc_.SetGateType(gate, GateType::NJSValue());
343 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
347 void NumberSpeculativeLowering::VisitNumberLogical(GateRef gate)
349 GateRef left = acc_.GetValueIn(gate, 0);
350 GateRef right = acc_.GetValueIn(gate, 1);
352 UpdateRange(result, GetRange(gate));
353 acc_.SetMachineType(gate, MachineType::I32);
354 acc_.SetGateType(gate, GateType::NJSValue());
355 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
358 void NumberSpeculativeLowering::VisitNumberDiv(GateRef gate)
360 GateRef left = acc_.GetValueIn(gate, 0);
361 GateRef right = acc_.GetValueIn(gate, 1);
362 TypedBinaryAccessor accessor(acc_.TryGetValue(gate));
368 acc_.SetMachineType(gate, MachineType::I32);
372 acc_.SetMachineType(gate, MachineType::F64);
374 acc_.SetGateType(gate, GateType::NJSValue());
375 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
379 void NumberSpeculativeLowering::VisitNumberMod(GateRef gate)
381 GateRef left = acc_.GetValueIn(gate, 0);
382 GateRef right = acc_.GetValueIn(gate, 1);
383 TypedBinaryAccessor accessor(acc_.TryGetValue(gate));
396 UpdateRange(result, GetRange(gate));
397 acc_.SetMachineType(gate, MachineType::I32);
402 acc_.SetMachineType(gate, MachineType::F64);
404 acc_.SetGateType(gate, GateType::NJSValue());
405 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
409 void NumberSpeculativeLowering::VisitNumberMonocular(GateRef gate)
411 TypedUnaryAccessor accessor(acc_.TryGetValue(gate));
414 GateRef value = acc_.GetValueIn(gate, 0);
421 UpdateRange(result, GetRange(gate));
422 acc_.SetMachineType(gate, MachineType::I32);
425 acc_.SetMachineType(gate, MachineType::F64);
427 acc_.SetGateType(gate, GateType::NJSValue());
428 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
431 void NumberSpeculativeLowering::VisitNumberNot(GateRef gate)
433 ASSERT(TypedUnaryAccessor(acc_.TryGetValue(gate)).GetParamType().HasNumberType());
434 GateRef value = acc_.GetValueIn(gate, 0);
436 UpdateRange(result, GetRange(gate));
437 acc_.SetMachineType(gate, MachineType::I32);
438 acc_.SetGateType(gate, GateType::NJSValue());
439 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
442 void NumberSpeculativeLowering::VisitIsTrueOrFalse(GateRef gate, bool flag)
444 GateRef value = acc_.GetValueIn(gate, 0);
451 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
454 void NumberSpeculativeLowering::VisitBooleanJump(GateRef gate)
456 TypedJumpAccessor jumpAcc = acc_.GetTypedJumpAccessor(gate);
459 GateRef condition = acc_.GetValueIn(gate, 0);
466 GateRef ifBranch = builder_.Branch(acc_.GetState(gate), condition, trueWeight, falseWeight, "booleanJump");
467 acc_.ReplaceGate(gate, ifBranch, acc_.GetDep(gate), Circuit::NullGate());
470 void NumberSpeculativeLowering::VisitUndefinedStrictEqOrUndefinedStrictNotEq(GateRef gate)
472 ASSERT(acc_.GetTypedBinaryOp(gate) == TypedBinOp::TYPED_STRICTEQ ||
473 acc_.GetTypedBinaryOp(gate) == TypedBinOp::TYPED_STRICTNOTEQ);
474 GateRef left = acc_.GetValueIn(gate, 0);
475 GateRef right = acc_.GetValueIn(gate, 1);
478 if (acc_.GetTypedBinaryOp(gate) == TypedBinOp::TYPED_STRICTEQ) {
484 acc_.SetMachineType(gate, MachineType::I1);
485 acc_.SetGateType(gate, GateType::NJSValue());
486 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
489 void NumberSpeculativeLowering::VisitUndefinedEqOrUndefinedNotEq(GateRef gate)
491 ASSERT(acc_.GetTypedBinaryOp(gate) == TypedBinOp::TYPED_EQ ||
492 acc_.GetTypedBinaryOp(gate) == TypedBinOp::TYPED_NOTEQ);
493 GateRef left = acc_.GetValueIn(gate, 0);
494 GateRef right = acc_.GetValueIn(gate, 1);
498 if (acc_.GetTypedBinaryOp(gate) == TypedBinOp::TYPED_EQ) {
503 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
506 void NumberSpeculativeLowering::VisitConstant(GateRef gate)
508 TypeInfo output = GetOutputType(gate);
511 int value = acc_.GetInt32FromConstant(gate);
513 acc_.UpdateAllUses(gate, constGate);
517 double value = acc_.GetFloat64FromConstant(gate);
518 acc_.UpdateAllUses(gate, builder_.Double(value));
526 void NumberSpeculativeLowering::VisitPhi(GateRef gate)
528 TypeInfo output = GetOutputType(gate);
531 acc_.SetGateType(gate, GateType::NJSValue());
532 acc_.SetMachineType(gate, MachineType::I1);
537 acc_.SetGateType(gate, GateType::NJSValue());
538 acc_.SetMachineType(gate, MachineType::I32);
542 acc_.SetGateType(gate, GateType::NJSValue());
543 acc_.SetMachineType(gate, MachineType::F64);
547 acc_.SetGateType(gate, GateType::NJSValue());
548 acc_.SetMachineType(gate, MachineType::I32);
556 void NumberSpeculativeLowering::VisitRangeCheckPredicate(GateRef gate)
558 acc_.SetGateType(gate, GateType::NJSValue());
559 acc_.SetMachineType(gate, MachineType::I32);
562 void NumberSpeculativeLowering::VisitIndexCheck(GateRef gate)
564 acc_.SetGateType(gate, GateType::NJSValue());
565 acc_.SetMachineType(gate, MachineType::I32);
568 void NumberSpeculativeLowering::VisitLoadArrayLength(GateRef gate)
570 acc_.SetGateType(gate, GateType::NJSValue());
571 acc_.SetMachineType(gate, MachineType::I32);
574 void NumberSpeculativeLowering::VisitLoadStringLength(GateRef gate)
576 acc_.SetGateType(gate, GateType::NJSValue());
577 acc_.SetMachineType(gate, MachineType::I32);
580 void NumberSpeculativeLowering::VisitLoadMapSize(GateRef gate)
582 acc_.SetGateType(gate, GateType::NJSValue());
583 acc_.SetMachineType(gate, MachineType::I32);
586 void NumberSpeculativeLowering::VisitLoadElement(GateRef gate)
588 auto op = acc_.GetTypedLoadOp(gate);
597 acc_.SetMachineType(gate, MachineType::I32);
598 acc_.SetGateType(gate, GateType::NJSValue());
602 acc_.SetMachineType(gate, MachineType::I64);
603 acc_.SetGateType(gate, GateType::NJSValue());
607 acc_.SetMachineType(gate, MachineType::F64);
608 acc_.SetGateType(gate, GateType::NJSValue());
615 void NumberSpeculativeLowering::VisitLoadProperty(GateRef gate)
617 TypeInfo output = GetOutputType(gate);
619 Environment env(gate, circuit_, &builder_);
620 ASSERT(acc_.GetNumValueIn(gate) == 2); // 2: receiver, plr
621 GateRef receiver = acc_.GetValueIn(gate, 0);
622 GateRef propertyLookupResult = acc_.GetValueIn(gate, 1);
637 acc_.SetMachineType(gate, MachineType::F64);
647 acc_.SetMachineType(gate, MachineType::I32);
649 acc_.SetGateType(gate, GateType::NJSValue());
650 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
654 void NumberSpeculativeLowering::VisitRangeGuard(GateRef gate)
656 Environment env(gate, circuit_, &builder_);
657 GateRef inputLength = acc_.GetValueIn(gate, 0);
658 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), inputLength);
891 void NumberSpeculativeLowering::UpdateRange(GateRef gate, const RangeInfo& range)
893 auto id = acc_.GetId(gate);
900 RangeInfo NumberSpeculativeLowering::GetRange(GateRef gate) const
902 auto id = acc_.GetId(gate);
924 void NumberSpeculativeLowering::VisitStringBinaryOp(GateRef gate)
926 TypedBinOp Op = acc_.GetTypedBinaryOp(gate);
929 VisitStringCompare<TypedBinOp::TYPED_EQ>(gate);
933 VisitStringAdd<TypedBinOp::TYPED_ADD>(gate);
943 void NumberSpeculativeLowering::VisitStringCompare(GateRef gate)
945 GateRef left = acc_.GetValueIn(gate, 0);
946 GateRef right = acc_.GetValueIn(gate, 1);
952 acc_.SetMachineType(gate, MachineType::I1);
953 acc_.SetGateType(gate, GateType::NJSValue());
954 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
958 void NumberSpeculativeLowering::VisitStringAdd(GateRef gate)
960 GateRef left = acc_.GetValueIn(gate, 0);
961 GateRef right = acc_.GetValueIn(gate, 1);
967 acc_.SetMachineType(gate, MachineType::I64);
968 acc_.SetGateType(gate, GateType::NJSValue());
969 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
972 void NumberSpeculativeLowering::VisitLoadPropertyOnProto(GateRef gate)
974 TypeInfo output = GetOutputType(gate);
976 Environment env(gate, circuit_, &builder_);
977 GateRef frameState = acc_.GetFrameState(gate);
978 GateRef receiver = acc_.GetValueIn(gate, 0);
979 GateRef propertyLookupResult = acc_.GetValueIn(gate, 1); // 1: propertyLookupResult
980 GateRef hclassIndex = acc_.GetValueIn(gate, 2); // 2: hclassIndex
981 GateRef unsharedConstPool = acc_.GetValueIn(gate, 3); // 3: constpool
1016 acc_.SetMachineType(gate, MachineType::F64);
1026 acc_.SetMachineType(gate, MachineType::I32);
1030 acc_.SetGateType(gate, GateType::NJSValue());
1031 acc_.ReplaceGate(gate, builder_.GetState(), builder_.GetDepend(), result);
1035 void NumberSpeculativeLowering::VisitRound(GateRef gate)
1037 TypeInfo output = GetOutputType(gate);
1038 GateRef in = acc_.GetValueIn(gate, 0);
1040 acc_.ReplaceGate(gate, in);