26 return "no-value-use";
28 return "truncate-to-bool";
30 return "truncate-to-word32";
32 return "truncate-to-word64";
36 return "truncate-oddball&bigint-to-number (identify zeros)";
38 return "truncate-oddball&bigint-to-number (distinguish zeros)";
43 return "no-truncation (but identify zeros)";
45 return "no-truncation (but distinguish zeros)";
89 FATAL(
"Tried to combine incompatible truncations");
145constexpr bool SupportsFpParamsInCLinkage() {
146#ifdef V8_ENABLE_FP_PARAMS_IN_C_LINKAGE
162 testing_type_errors_(false),
163 type_error_(false) {}
181 if (output_type.
Is(Type::BigInt()) &&
185 if (output_type.
Is(Type::UnsignedBigInt64())) {
196 DCHECK(output_type.
Is(Type::Number()));
197 if (
machine()->ChangeFloat16RawBitsToFloat64().IsSupported()) {
199 machine()->ChangeFloat16RawBitsToFloat64().op(), node);
294 switch (node->opcode()) {
295 case IrOpcode::kNumberConstant:
310 }
else if (
IsWord(output_rep)) {
311 if (output_type.
Is(Type::Signed31())) {
313 }
else if (output_type.
Is(Type::Signed32())) {
319 return TypeError(node, output_rep, output_type,
322 }
else if (output_type.
Is(Type::Unsigned32()) &&
326 return TypeError(node, output_rep, output_type,
330 if (output_type.
Is(Type::Signed31())) {
344 return TypeError(node, output_rep, output_type,
348 return TypeError(node, output_rep, output_type,
352 if (output_type.
Is(Type::Signed31())) {
356 }
else if (output_type.
Is(Type::Signed32())) {
364 return TypeError(node, output_rep, output_type,
367 }
else if (output_type.
Is(Type::Unsigned32()) &&
375 output_type.
Maybe(Type::MinusZero())
385 return TypeError(node, output_rep, output_type,
393 output_type.
Maybe(Type::MinusZero())
403 return TypeError(node, output_rep, output_type,
412 return TypeError(node, output_rep, output_type,
422 return TypeError(node, output_rep, output_type,
426 return TypeError(node, output_rep, output_type,
436 switch (node->opcode()) {
437 case IrOpcode::kHeapConstant:
438 if (TypeCheckIsBigInt(use_info.
type_check()))
break;
440 case IrOpcode::kInt32Constant:
441 case IrOpcode::kFloat64Constant:
442 case IrOpcode::kFloat32Constant:
456 if (TypeCheckIsBigInt(use_info.
type_check()) &&
457 !output_type.
Is(Type::BigInt())) {
470 if (output_type.
Is(Type::Boolean())) {
473 return TypeError(node, output_rep, output_type,
476 }
else if (
IsWord(output_rep)) {
477 if (output_type.
Is(Type::Unsigned32())) {
480 }
else if (output_type.
Is(Type::Signed32())) {
484 return TypeError(node, output_rep, output_type,
494 }
else if (output_type.
Is(Type::SignedBigInt64()) &&
497 }
else if (output_type.
Is(Type::UnsignedBigInt64()) &&
501 return TypeError(node, output_rep, output_type,
505 if (output_type.
Is(Type::Number())) {
510 return TypeError(node, output_rep, output_type,
514 if (output_type.
Is(Type::Number())) {
518 return TypeError(node, output_rep, output_type,
523 if (output_type.
Is(Type::BigInt())) {
529 if (output_type.
Is(Type::SignedBigInt64())) {
533 if (!output_type.
Is(Type::BigInt())) {
546 return TypeError(node, output_rep, output_type,
556 switch (node->opcode()) {
557 case IrOpcode::kNumberConstant:
558 case IrOpcode::kHeapConstant:
560 case IrOpcode::kInt32Constant:
561 case IrOpcode::kFloat64Constant:
562 case IrOpcode::kFloat32Constant:
580 if (output_type.
Is(Type::Boolean())) {
583 return TypeError(node, output_rep, output_type,
586 }
else if (
IsWord(output_rep)) {
587 if (output_type.
Is(Type::Signed31())) {
589 }
else if (output_type.
Is(Type::Signed32()) ||
590 (output_type.
Is(Type::Signed32OrMinusZero()) &&
593 }
else if (output_type.
Is(Type::Unsigned32()) ||
594 (output_type.
Is(Type::Unsigned32OrMinusZero()) &&
601 return TypeError(node, output_rep, output_type,
605 if (output_type.
Is(Type::Signed31())) {
609 }
else if (output_type.
Is(Type::Signed32())) {
613 }
else if (output_type.
Is(Type::Unsigned32())) {
623 }
else if (output_type.
Is(Type::SignedBigInt64())) {
626 }
else if (output_type.
Is(Type::UnsignedBigInt64())) {
630 return TypeError(node, output_rep, output_type,
633 }
else if (output_rep ==
637 output_type.
Maybe(Type::MinusZero())
641 if (output_type.
Is(Type::Signed31())) {
644 }
else if (output_type.
Is(
648 }
else if (output_type.
Is(
649 Type::Unsigned32())) {
652 }
else if (output_type.
Is(Type::Number()) ||
653 (output_type.
Is(Type::NumberOrOddball()) &&
656 output_type.
Maybe(Type::MinusZero())
660 return TypeError(node, output_rep, output_type,
664 return TypeError(node, output_rep, output_type,
679 switch (node->opcode()) {
680 case IrOpcode::kFloat64Constant:
683 case IrOpcode::kNumberConstant:
684 case IrOpcode::kInt32Constant:
685 case IrOpcode::kFloat32Constant:
699 if (
machine()->TruncateFloat64ToFloat16RawBits().IsSupported()) {
701 machine()->TruncateFloat64ToFloat16RawBits().op(), node);
711 switch (node->opcode()) {
712 case IrOpcode::kNumberConstant:
715 case IrOpcode::kInt32Constant:
716 case IrOpcode::kFloat64Constant:
717 case IrOpcode::kFloat32Constant:
728 }
else if (
IsWord(output_rep)) {
729 if (output_type.
Is(Type::Signed32())) {
734 }
else if (output_type.
Is(Type::Unsigned32()) ||
745 if (output_type.
Is(Type::NumberOrOddball())) {
747 if (output_type.
Is(Type::Number())) {
766 return TypeError(node, output_rep, output_type,
776 if (
m.HasResolvedValue()) {
803 }
else if (
IsWord(output_rep)) {
804 if (output_type.
Is(Type::Signed32()) ||
805 (output_type.
Is(Type::Signed32OrMinusZero()) &&
808 }
else if (output_type.
Is(Type::Unsigned32()) ||
809 (output_type.
Is(Type::Unsigned32OrMinusZero()) &&
817 CHECK(output_type.
Is(Type::Boolean()));
831 if (output_type.
Is(Type::Undefined())) {
836 std::numeric_limits<double>::quiet_NaN());
843 ? DeoptimizeReason::kNotANumber
844 : DeoptimizeReason::kNotANumberOrBoolean);
852 }
else if (output_type.
Is(Type::Number())) {
854 }
else if ((output_type.
Is(Type::NumberOrOddball()) &&
856 output_type.
Is(Type::NumberOrHole())) {
869 !output_type.
Maybe(Type::BooleanOrNullOrNumber()))) {
887 return TypeError(node, output_rep, output_type,
903 jsgraph()->Int32Constant(0), effect, control);
905 jsgraph()->common()->Unreachable(), effect, control);
914 switch (node->opcode()) {
915 case IrOpcode::kInt32Constant:
916 case IrOpcode::kInt64Constant:
917 case IrOpcode::kFloat32Constant:
918 case IrOpcode::kFloat64Constant:
920 case IrOpcode::kNumberConstant: {
946 CHECK(output_type.
Is(Type::Boolean()));
961 if (output_type.
Is(Type::Signed32())) {
967 output_type.
Maybe(Type::MinusZero())
971 }
else if (output_type.
Is(Type::Unsigned32())) {
976 output_type.
Maybe(Type::MinusZero())
986 return TypeError(node, output_rep, output_type,
991 if (output_type.
Is(Type::Signed32())) {
997 output_type.
Maybe(Type::MinusZero())
1001 }
else if (output_type.
Is(Type::Unsigned32())) {
1006 output_type.
Maybe(Type::MinusZero())
1016 return TypeError(node, output_rep, output_type,
1023 }
else if (output_type.
Is(Type::Signed32())) {
1029 output_type.
Maybe(Type::MinusZero())
1035 }
else if (output_type.
Is(Type::Unsigned32())) {
1041 }
else if (output_type.
Is(Type::NumberOrOddballOrHole())) {
1050 return TypeError(node, output_rep, output_type,
1054 return TypeError(node, output_rep, output_type,
1064 if (output_type.
Is(Type::Signed32()) ||
1065 (identify_zeros && output_type.
Is(Type::Signed32OrMinusZero()))) {
1067 }
else if (output_type.
Is(Type::Unsigned32()) ||
1069 output_type.
Is(Type::Unsigned32OrMinusZero()))) {
1072 return TypeError(node, output_rep, output_type,
1087 if (output_type.
Is(Type::Signed32()) ||
1088 (output_type.
Is(Type::Unsigned32()) &&
1101 return TypeError(node, output_rep, output_type,
1105 return TypeError(node, output_rep, output_type,
1110 if (op ==
nullptr) {
1111 return TypeError(node, output_rep, output_type,
1134 switch (node->opcode()) {
1135 case IrOpcode::kHeapConstant: {
1137 if (
m.Is(
factory()->false_value())) {
1141 }
else if (
m.Is(
factory()->true_value())) {
1159 if (output_type.
Is(Type::BooleanOrNullOrUndefined())) {
1182 }
else if (
IsWord(output_rep)) {
1195 jsgraph()->Float32Constant(0.0), node);
1199 jsgraph()->Float64Constant(0.0), node);
1201 return TypeError(node, output_rep, output_type,
1211 switch (node->opcode()) {
1212 case IrOpcode::kInt32Constant:
1213 case IrOpcode::kInt64Constant:
1214 case IrOpcode::kFloat32Constant:
1215 case IrOpcode::kFloat64Constant:
1217 case IrOpcode::kNumberConstant: {
1218 if (!TypeCheckIsBigInt(use_info.
type_check())) {
1220 if (base::IsValueInRangeForNumericType<int64_t>(fv)) {
1221 int64_t
const iv =
static_cast<int64_t
>(fv);
1222 if (
static_cast<double>(iv) == fv) {
1224 jsgraph()->Int64Constant(iv));
1230 case IrOpcode::kHeapConstant: {
1232 if (
m.HasResolvedValue() &&
m.Ref(
broker_).IsBigInt() &&
1245 if (TypeCheckIsBigInt(use_info.
type_check())) {
1251 use_node, DeoptimizeReason::kNotABigInt, use_info.
feedback());
1265 CHECK(output_type.
Is(Type::Boolean()));
1275 }
else if (
IsWord(output_rep)) {
1276 if (output_type.
Is(Type::Unsigned32OrMinusZero())) {
1281 }
else if (output_type.
Is(Type::Signed32OrMinusZero())) {
1287 return TypeError(node, output_rep, output_type,
1306 output_type.
Maybe(Type::MinusZero())
1313 output_type.
Maybe(Type::MinusZero())
1318 return TypeError(node, output_rep, output_type,
1331 output_type.
Maybe(Type::MinusZero())
1337 output_type.
Maybe(Type::MinusZero())
1342 return TypeError(node, output_rep, output_type,
1349 return TypeError(node, output_rep, output_type,
1355 output_type.
Is(Type::BigInt()))) ||
1358 use_node, use_info);
1367 output_type.
Maybe(Type::MinusZero())
1375 output_type.
Maybe(Type::MinusZero())
1380 return TypeError(node, output_rep, output_type,
1385 if (output_type.
Is(Type::UnsignedBigInt64()) &&
1388 }
else if ((output_type.
Is(Type::BigInt()) &&
1390 (output_type.
Is(Type::SignedBigInt64()) &&
1394 DCHECK(output_type != Type::BigInt() ||
1397 use_node, DeoptimizeReason::kNotABigInt, use_info.
feedback());
1403 if (output_type.
Is(Type::SandboxedPointer())) {
1406 return TypeError(node, output_rep, output_type,
1410 return TypeError(node, output_rep, output_type,
1419 case IrOpcode::kSpeculativeNumberAdd:
1420 case IrOpcode::kSpeculativeAdditiveSafeIntegerAdd:
1421 case IrOpcode::kSpeculativeSmallIntegerAdd:
1422 case IrOpcode::kNumberAdd:
1424 case IrOpcode::kSpeculativeNumberSubtract:
1425 case IrOpcode::kSpeculativeAdditiveSafeIntegerSubtract:
1426 case IrOpcode::kSpeculativeSmallIntegerSubtract:
1427 case IrOpcode::kNumberSubtract:
1429 case IrOpcode::kSpeculativeNumberMultiply:
1430 case IrOpcode::kNumberMultiply:
1432 case IrOpcode::kSpeculativeNumberDivide:
1433 case IrOpcode::kNumberDivide:
1435 case IrOpcode::kSpeculativeNumberModulus:
1436 case IrOpcode::kNumberModulus:
1438 case IrOpcode::kSpeculativeNumberBitwiseOr:
1439 case IrOpcode::kNumberBitwiseOr:
1441 case IrOpcode::kSpeculativeNumberBitwiseXor:
1442 case IrOpcode::kNumberBitwiseXor:
1444 case IrOpcode::kSpeculativeNumberBitwiseAnd:
1445 case IrOpcode::kNumberBitwiseAnd:
1447 case IrOpcode::kNumberEqual:
1448 case IrOpcode::kSpeculativeNumberEqual:
1450 case IrOpcode::kNumberLessThan:
1451 case IrOpcode::kSpeculativeNumberLessThan:
1453 case IrOpcode::kNumberLessThanOrEqual:
1454 case IrOpcode::kSpeculativeNumberLessThanOrEqual:
1464 case IrOpcode::kSpeculativeSmallIntegerAdd:
1466 case IrOpcode::kSpeculativeSmallIntegerSubtract:
1468 case IrOpcode::kSpeculativeNumberDivide:
1470 case IrOpcode::kSpeculativeNumberModulus:
1480 case IrOpcode::kSpeculativeAdditiveSafeIntegerAdd:
1482 case IrOpcode::kSpeculativeAdditiveSafeIntegerSubtract:
1492 case IrOpcode::kSpeculativeNumberAdd:
1493 case IrOpcode::kSpeculativeSmallIntegerAdd:
1494 case IrOpcode::kNumberAdd:
1495 case IrOpcode::kSpeculativeBigIntAdd:
1497 case IrOpcode::kSpeculativeNumberSubtract:
1498 case IrOpcode::kSpeculativeSmallIntegerSubtract:
1499 case IrOpcode::kNumberSubtract:
1500 case IrOpcode::kSpeculativeBigIntSubtract:
1502 case IrOpcode::kSpeculativeBigIntMultiply:
1504 case IrOpcode::kSpeculativeBigIntBitwiseAnd:
1506 case IrOpcode::kSpeculativeBigIntBitwiseOr:
1508 case IrOpcode::kSpeculativeBigIntBitwiseXor:
1510 case IrOpcode::kSpeculativeBigIntEqual:
1512 case IrOpcode::kSpeculativeBigIntLessThan:
1514 case IrOpcode::kSpeculativeBigIntLessThanOrEqual:
1524 case IrOpcode::kSpeculativeBigIntAdd:
1526 case IrOpcode::kSpeculativeBigIntSubtract:
1528 case IrOpcode::kSpeculativeBigIntMultiply:
1530 case IrOpcode::kSpeculativeBigIntDivide:
1532 case IrOpcode::kSpeculativeBigIntModulus:
1542 case IrOpcode::kSpeculativeBigIntAdd:
1544 case IrOpcode::kSpeculativeBigIntSubtract:
1546 case IrOpcode::kSpeculativeBigIntMultiply:
1548 case IrOpcode::kSpeculativeBigIntDivide:
1550 case IrOpcode::kSpeculativeBigIntModulus:
1552 case IrOpcode::kSpeculativeBigIntBitwiseAnd:
1554 case IrOpcode::kSpeculativeBigIntBitwiseOr:
1556 case IrOpcode::kSpeculativeBigIntBitwiseXor:
1558 case IrOpcode::kSpeculativeBigIntShiftLeft:
1560 case IrOpcode::kSpeculativeBigIntShiftRight:
1562 case IrOpcode::kSpeculativeBigIntEqual:
1564 case IrOpcode::kSpeculativeBigIntLessThan:
1566 case IrOpcode::kSpeculativeBigIntLessThanOrEqual:
1576 case IrOpcode::kSpeculativeNumberLessThan:
1580 case IrOpcode::kSpeculativeNumberLessThanOrEqual:
1584 case IrOpcode::kSpeculativeNumberEqual:
1596 case IrOpcode::kNumberAdd:
1598 case IrOpcode::kNumberSubtract:
1600 case IrOpcode::kSpeculativeNumberMultiply:
1601 case IrOpcode::kNumberMultiply:
1603 case IrOpcode::kSpeculativeNumberDivide:
1604 case IrOpcode::kNumberDivide:
1606 case IrOpcode::kSpeculativeNumberModulus:
1607 case IrOpcode::kNumberModulus:
1609 case IrOpcode::kNumberEqual:
1610 case IrOpcode::kSpeculativeNumberEqual:
1612 case IrOpcode::kNumberLessThan:
1613 case IrOpcode::kSpeculativeNumberLessThan:
1615 case IrOpcode::kNumberLessThanOrEqual:
1616 case IrOpcode::kSpeculativeNumberLessThanOrEqual:
1618 case IrOpcode::kNumberClz32:
1620 case IrOpcode::kNumberImul:
1630 case IrOpcode::kSpeculativeNumberDivide:
1632 case IrOpcode::kSpeculativeNumberModulus:
1642 case IrOpcode::kSpeculativeNumberAdd:
1643 case IrOpcode::kSpeculativeAdditiveSafeIntegerAdd:
1644 case IrOpcode::kSpeculativeSmallIntegerAdd:
1645 case IrOpcode::kNumberAdd:
1647 case IrOpcode::kSpeculativeNumberSubtract:
1648 case IrOpcode::kSpeculativeAdditiveSafeIntegerSubtract:
1649 case IrOpcode::kSpeculativeSmallIntegerSubtract:
1650 case IrOpcode::kNumberSubtract:
1652 case IrOpcode::kSpeculativeNumberMultiply:
1653 case IrOpcode::kNumberMultiply:
1655 case IrOpcode::kSpeculativeNumberDivide:
1656 case IrOpcode::kNumberDivide:
1658 case IrOpcode::kSpeculativeNumberModulus:
1659 case IrOpcode::kNumberModulus:
1661 case IrOpcode::kNumberEqual:
1662 case IrOpcode::kSpeculativeNumberEqual:
1664 case IrOpcode::kNumberLessThan:
1665 case IrOpcode::kSpeculativeNumberLessThan:
1667 case IrOpcode::kNumberLessThanOrEqual:
1668 case IrOpcode::kSpeculativeNumberLessThanOrEqual:
1670 case IrOpcode::kNumberAbs:
1672 case IrOpcode::kNumberAcos:
1674 case IrOpcode::kNumberAcosh:
1676 case IrOpcode::kNumberAsin:
1678 case IrOpcode::kNumberAsinh:
1680 case IrOpcode::kNumberAtan:
1682 case IrOpcode::kNumberAtanh:
1684 case IrOpcode::kNumberAtan2:
1686 case IrOpcode::kNumberCbrt:
1688 case IrOpcode::kNumberCeil:
1690 case IrOpcode::kNumberCos:
1692 case IrOpcode::kNumberCosh:
1694 case IrOpcode::kNumberExp:
1696 case IrOpcode::kNumberExpm1:
1698 case IrOpcode::kNumberFloor:
1700 case IrOpcode::kNumberFround:
1702 case IrOpcode::kNumberLog:
1704 case IrOpcode::kNumberLog1p:
1706 case IrOpcode::kNumberLog2:
1708 case IrOpcode::kNumberLog10:
1710 case IrOpcode::kNumberMax:
1712 case IrOpcode::kNumberMin:
1714 case IrOpcode::kSpeculativeNumberPow:
1715 case IrOpcode::kNumberPow:
1717 case IrOpcode::kNumberSin:
1719 case IrOpcode::kNumberSinh:
1721 case IrOpcode::kNumberSqrt:
1723 case IrOpcode::kNumberTan:
1725 case IrOpcode::kNumberTanh:
1727 case IrOpcode::kNumberTrunc:
1729 case IrOpcode::kNumberSilenceNaN:
1742 std::ostringstream out_str;
1743 out_str << output_rep <<
" (";
1747 std::ostringstream use_str;
1751 "RepresentationChangerError: node #%d:%s of "
1752 "%s cannot be changed to %s",
1753 node->id(), node->op()->mnemonic(), out_str.str().c_str(),
1754 use_str.str().c_str());
1801 node,
simplified()->CheckedFloat64ToInt32(check, feedback), use_node);
1808 ExternalReference::ieee754_fp16_raw_bits_to_fp32_raw_bits()));
1815 if constexpr (SupportsFpParamsInCLinkage()) {
1817 ExternalReference::ieee754_fp64_to_fp16_raw_bits()));
1821 ieee754_fp64_raw_bits_to_fp16_raw_bits_for_32bit_arch()));
1846 if constexpr (SupportsFpParamsInCLinkage()) {
1869 DCHECK(!
machine()->ChangeFloat16RawBitsToFloat64().IsSupported());
1874 Node* float32_raw_bits =
1878 machine()->BitcastInt32ToFloat32(), float32_raw_bits));
1884 DCHECK(!
machine()->TruncateFloat64ToFloat16RawBits().IsSupported());
1888 if constexpr (SupportsFpParamsInCLinkage()) {
1893 machine()->Float64ExtractHighWord32(), node);
1904 DCHECK(!type.IsInvalid());
1906 jsgraph()->common()->SLVerifierHint(
nullptr, type), node);
static constexpr MachineType Float64()
static constexpr MachineType Uint32()
uint64_t AsUint64() const
Isolate * isolate() const
static CallDescriptor * GetSimplifiedCDescriptor(Zone *zone, const MachineSignature *sig, CallDescriptor::Flags flags=CallDescriptor::kNoFlags, Operator::Properties properties=Operator::kNoThrow)
Node * Float64Constant(double value)
Node * Float32Constant(float value)
Node * Uint32Constant(uint32_t value)
Node * Int32Constant(int32_t value)
const Operator * ChangeInt64ToFloat64()
const Operator * Float64Max()
const OptionalOperator Float64RoundUp()
const Operator * Float64Asin()
const Operator * Float64Sqrt()
const Operator * Float64Expm1()
const Operator * Int32LessThan()
const Operator * Float64Log10()
const Operator * ChangeUint32ToUint64()
const Operator * Float64Cos()
const Operator * Word64Or()
const Operator * Word32Xor()
const Operator * Word64Equal()
const Operator * Uint32LessThan()
const Operator * Float64Cosh()
const Operator * Uint32LessThanOrEqual()
const Operator * Float64Mod()
const Operator * Float64Tanh()
const Operator * Int64LessThanOrEqual()
const Operator * Word32Or()
const Operator * Word32Clz()
const Operator * Float64Pow()
const Operator * ChangeFloat64ToInt32()
const Operator * Float64LessThan()
const Operator * Float64Atan()
const Operator * ChangeFloat64ToUint32()
const Operator * ChangeUint32ToFloat64()
const Operator * Float64Atan2()
const Operator * Int32Add()
const Operator * Float64Log2()
const Operator * Float64Abs()
const Operator * TruncateFloat64ToFloat32()
const Operator * Float64Acos()
const Operator * Float64Min()
const Operator * Float64Div()
const Operator * Float64Log1p()
const Operator * TruncateFloat64ToWord32()
const Operator * Float64Asinh()
const Operator * Word64And()
const Operator * Float64Sin()
const Operator * ChangeInt32ToInt64()
const Operator * Float64LessThanOrEqual()
const Operator * Int64Add()
const Operator * Float64Cbrt()
const OptionalOperator Float64RoundDown()
const Operator * ChangeFloat32ToFloat64()
const Operator * Int32Sub()
const Operator * Float64Tan()
const Operator * Float64Sub()
const Operator * TruncateInt64ToInt32()
const Operator * Word32Equal()
const Operator * Float64Log()
const Operator * Float64Exp()
const Operator * Int32Mul()
const Operator * ChangeInt32ToFloat64()
const Operator * Float64Sinh()
const Operator * Int64Sub()
const Operator * ChangeFloat64ToUint64()
const Operator * Float64Equal()
const Operator * Float64Acosh()
const Operator * Int64Mul()
const Operator * Int32LessThanOrEqual()
const Operator * Int32Div()
const Operator * Uint32Mod()
const OptionalOperator Float64RoundTruncate()
const Operator * Int32Mod()
const Operator * Word64Xor()
const Operator * Float64SilenceNaN()
const Operator * Int64LessThan()
const Operator * Float64Add()
const Operator * Uint32Div()
const Operator * Word32And()
const Operator * ChangeFloat64ToInt64()
const Operator * Float64Mul()
const Operator * Float64Atanh()
static void ReplaceEffectInput(Node *node, Node *effect, int index=0)
static Type GetType(const Node *node)
static Node * GetEffectInput(Node *node, int index=0)
static Node * GetControlInput(Node *node, int index=0)
int ControlInputCount() const
Node * InsertTruncateInt64ToInt32(Node *node)
SimplifiedLoweringVerifier * verifier_
Node * Ieee754Fp16RawBitsToFp32RawBitsCode()
Node * InsertChangeInt32ToFloat64(Node *node)
Operator const * Ieee754Fp64ToFp16RawBitsOperator()
SetOncePointer< Operator const > ieee754_fp64_to_fp16_raw_bits_operator_
Node * GetBitRepresentationFor(Node *node, MachineRepresentation output_rep, Type output_type)
Node * InsertChangeFloat64ToUint32(Node *node)
Node * InsertTruncateFloat64ToFloat16RawBitsFallback(Node *node)
bool testing_type_errors_
const Operator * Int32OperatorFor(IrOpcode::Value opcode)
const Operator * Int32OverflowOperatorFor(IrOpcode::Value opcode)
Node * InsertChangeUint32ToFloat64(Node *node)
MachineOperatorBuilder * machine()
SetOncePointer< Node > ieee754_fp16_raw_bits_to_fp32_raw_bits_code_
Node * InsertChangeTaggedToFloat64(Node *node)
Node * InsertChangeFloat32ToFloat64(Node *node)
const Operator * AdditiveSafeIntegerOverflowOperatorFor(IrOpcode::Value opcode)
const Operator * Uint32OperatorFor(IrOpcode::Value opcode)
Node * GetFloat16RawBitsRepresentationFor(Node *node, MachineRepresentation output_rep, Type output_type, Node *use_node, UseInfo use_info)
SetOncePointer< Node > ieee754_fp64_to_fp16_raw_bits_code_
Node * GetTaggedRepresentationFor(Node *node, MachineRepresentation output_rep, Type output_type, Truncation truncation)
Node * GetTaggedPointerRepresentationFor(Node *node, MachineRepresentation output_rep, Type output_type, Node *use_node, UseInfo use_info)
Node * InsertChangeFloat16RawBitsToFloat64Fallback(Node *node)
Node * MakeTruncatedInt32Constant(double value)
Isolate * isolate() const
Node * InsertTypeOverrideForVerifier(const Type &type, Node *node)
const Operator * Uint32OverflowOperatorFor(IrOpcode::Value opcode)
Factory * factory() const
Node * InsertConversion(Node *node, const Operator *op, Node *use_node)
Node * InsertChangeBitToTagged(Node *node)
RepresentationChanger(JSGraph *jsgraph, JSHeapBroker *broker, SimplifiedLoweringVerifier *verifier)
Node * GetTaggedSignedRepresentationFor(Node *node, MachineRepresentation output_rep, Type output_type, Node *use_node, UseInfo use_info)
Node * InsertCheckedFloat64ToInt32(Node *node, CheckForMinusZeroMode check, const FeedbackSource &feedback, Node *use_node)
Node * InsertUnconditionalDeopt(Node *node, DeoptimizeReason reason, const FeedbackSource &feedback={})
SetOncePointer< Operator const > ieee754_fp16_raw_bits_to_fp32_raw_bits_operator_
Node * Ieee754Fp64ToFp16RawBitsCode()
Node * InsertChangeFloat64ToInt32(Node *node)
JSGraph * jsgraph() const
Node * GetRepresentationFor(Node *node, MachineRepresentation output_rep, Type output_type, Node *use_node, UseInfo use_info)
const Operator * TaggedSignedOperatorFor(IrOpcode::Value opcode)
Node * GetWord32RepresentationFor(Node *node, MachineRepresentation output_rep, Type output_type, Node *use_node, UseInfo use_info)
SimplifiedOperatorBuilder * simplified()
bool verification_enabled() const
Operator const * Ieee754Fp16RawBitsToFp32RawBitsOperator()
Node * InsertChangeTaggedSignedToInt32(Node *node)
Node * GetWord64RepresentationFor(Node *node, MachineRepresentation output_rep, Type output_type, Node *use_node, UseInfo use_info)
Node * GetFloat32RepresentationFor(Node *node, MachineRepresentation output_rep, Type output_type, Truncation truncation)
const Operator * Int64OverflowOperatorFor(IrOpcode::Value opcode)
const Operator * BigIntOperatorFor(IrOpcode::Value opcode)
Node * GetFloat64RepresentationFor(Node *node, MachineRepresentation output_rep, Type output_type, Node *use_node, UseInfo use_info)
Node * TypeError(Node *node, MachineRepresentation output_rep, Type output_type, MachineRepresentation use)
const Operator * Int64OperatorFor(IrOpcode::Value opcode)
const Operator * Float64OperatorFor(IrOpcode::Value opcode)
void RecordHint(Node *node)
const Operator * ChangeUint64ToBigInt()
const Operator * BigIntShiftLeft()
const Operator * CheckedInt64Sub()
const Operator * ChangeTaggedToInt32()
const Operator * CheckedInt64ToInt32(const FeedbackSource &feedback)
const Operator * CheckedUint32ToInt32(const FeedbackSource &feedback)
const Operator * CheckedTaggedToAdditiveSafeInteger(CheckForMinusZeroMode, const FeedbackSource &feedback)
const Operator * BigIntBitwiseAnd()
const Operator * CheckedTaggedToTaggedPointer(const FeedbackSource &feedback)
const Operator * CheckedUint32Div()
const Operator * ChangeTaggedToBit()
const Operator * BigIntMultiply()
const Operator * CheckBigInt(const FeedbackSource &feedback)
const Operator * TruncateBigIntToWord64()
const Operator * CheckedTruncateTaggedToWord32(CheckTaggedInputMode, const FeedbackSource &feedback)
const Operator * CheckedInt64Mod()
const Operator * TruncateTaggedToFloat64()
const Operator * ChangeFloat64ToTagged(CheckForMinusZeroMode)
const Operator * CheckedUint32Mod()
const Operator * CheckedFloat64ToAdditiveSafeInteger(CheckForMinusZeroMode, const FeedbackSource &feedback)
const Operator * ChangeTaggedToTaggedSigned()
const Operator * BigIntLessThan()
const Operator * BigIntDivide()
const Operator * TruncateTaggedToBit()
const Operator * BigIntEqual()
const Operator * CheckedInt32Div()
const Operator * CheckedTaggedToInt64(CheckForMinusZeroMode, const FeedbackSource &feedback)
const Operator * CheckedInt32ToTaggedSigned(const FeedbackSource &feedback)
const Operator * ChangeTaggedToInt64()
const Operator * CheckedAdditiveSafeIntegerAdd()
const Operator * TruncateTaggedPointerToBit()
const Operator * CheckedUint64ToTaggedSigned(const FeedbackSource &feedback)
const Operator * ChangeInt32ToTagged()
const Operator * CheckedUint64ToInt32(const FeedbackSource &feedback)
const Operator * ChangeTaggedSignedToInt64()
const Operator * ChangeTaggedToUint32()
const Operator * ChangeBitToTagged()
const Operator * CheckedInt64Mul()
const Operator * CheckedTaggedToArrayIndex(const FeedbackSource &feedback)
const Operator * ChangeFloat64ToTaggedPointer()
const Operator * ChangeUint32ToTagged()
const Operator * CheckedTaggedToInt32(CheckForMinusZeroMode, const FeedbackSource &feedback)
const Operator * CheckedAdditiveSafeIntegerSub()
const Operator * ChangeInt64ToTagged()
const Operator * CheckedUint32ToTaggedSigned(const FeedbackSource &feedback)
const Operator * CheckedInt64ToTaggedSigned(const FeedbackSource &feedback)
const Operator * ChangeTaggedToFloat64()
const Operator * ChangeInt64ToBigInt()
const Operator * CheckedTaggedToFloat64(CheckTaggedInputMode, const FeedbackSource &feedback)
const Operator * ChangeInt31ToTaggedSigned()
const Operator * BigIntShiftRight()
const Operator * CheckedFloat64ToInt64(CheckForMinusZeroMode, const FeedbackSource &feedback)
const Operator * CheckedInt64Add()
const Operator * CheckedInt32Mod()
const Operator * BigIntBitwiseOr()
const Operator * CheckedBigIntToBigInt64(const FeedbackSource &feedback)
const Operator * BigIntLessThanOrEqual()
const Operator * ChangeUint64ToTagged()
const Operator * CheckedInt32Sub()
const Operator * CheckedInt32Add()
const Operator * BigIntBitwiseXor()
const Operator * BigIntModulus()
const Operator * CheckedInt64Div()
const Operator * CheckedFloat64ToInt32(CheckForMinusZeroMode, const FeedbackSource &feedback)
const Operator * ChangeTaggedSignedToInt32()
const Operator * TruncateTaggedToWord32()
const Operator * BigIntAdd()
const Operator * CheckedTaggedSignedToInt32(const FeedbackSource &feedback)
const Operator * CheckedTaggedToTaggedSigned(const FeedbackSource &feedback)
const Operator * BigIntSubtract()
const Operator * CheckedUint64ToInt64(const FeedbackSource &feedback)
Node * NewNode(const Operator *op, int input_count, Node *const *inputs, bool incomplete=false)
static Truncation Any(IdentifyZeros identify_zeros=kDistinguishZeros)
bool TruncatesOddballAndBigIntToNumber() const
TruncationKind kind() const
@ kOddballAndBigIntToNumber
static bool LessGeneral(TruncationKind rep1, TruncationKind rep2)
static bool LessGeneralIdentifyZeros(IdentifyZeros u1, IdentifyZeros u2)
IdentifyZeros identify_zeros() const
const char * description() const
bool IdentifiesZeroAndMinusZero() const
static Truncation Generalize(Truncation t1, Truncation t2)
bool IsUsedAsWord64() const
bool IsUsedAsWord32() const
static IdentifyZeros GeneralizeIdentifyZeros(IdentifyZeros i1, IdentifyZeros i2)
Type const kDoubleRepresentableInt64OrMinusZero
Type const kDoubleRepresentableInt64
Type const kDoubleRepresentableUint64
Type const kPositiveSafeInteger
bool Maybe(Type that) const
void PrintTo(std::ostream &os) const
static Type Constant(JSHeapBroker *broker, Handle< i::Object > value, Zone *zone)
bool Equals(Type that) const
static Type SignedSmall()
Truncation truncation() const
const FeedbackSource & feedback() const
TypeCheckKind type_check() const
CheckForMinusZeroMode minus_zero_check() const
MachineRepresentation representation() const
#define COMPRESS_POINTERS_BOOL
JSHeapBroker *const broker_
V8_INLINE const Operation & Get(const Graph &graph, OpIndex index)
T const & OpParameter(const Operator *op)
static const Operator * IntPtrConstant(CommonOperatorBuilder *common, intptr_t value)
bool IsInt32Double(double value)
constexpr bool IsAnyTagged(MachineRepresentation rep)
constexpr bool CanBeTaggedPointer(MachineRepresentation rep)
int32_t DoubleToInt32(double x)
other heap size generate builtins concurrently on separate threads in mksnapshot track concurrent recompilation artificial compilation delay in ms max number of threads that concurrent Turbofan can use(0 for unbounded)") DEFINE_BOOL( stress_concurrent_inlining
constexpr bool SmiValuesAre32Bits()
float DoubleToFloat32(double x)
uint16_t DoubleToFloat16(double value)
SimplifiedLoweringVerifier * verifier_
#define CHECK_IMPLIES(lhs, rhs)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK_NE(v1, v2)
#define CHECK_NE(lhs, rhs)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)