51  switch (node->opcode()) {
 
   52    case IrOpcode::kBooleanNot: {
 
   56      if (
m.IsBooleanNot()) 
return Replace(
m.InputAt(0));
 
   59    case IrOpcode::kChangeBitToTagged: {
 
   61      if (
m.Is(0)) 
return Replace(
jsgraph()->FalseConstant());
 
   62      if (
m.Is(1)) 
return Replace(
jsgraph()->TrueConstant());
 
   63      if (
m.IsChangeTaggedToBit()) 
return Replace(
m.InputAt(0));
 
   66    case IrOpcode::kChangeTaggedToBit: {
 
   68      if (
m.HasResolvedValue()) {
 
   69        std::optional<bool> maybe_result =
 
   71        if (maybe_result.has_value()) 
return ReplaceInt32(*maybe_result);
 
   73      if (
m.IsChangeBitToTagged()) 
return Replace(
m.InputAt(0));
 
   76    case IrOpcode::kChangeFloat64ToTagged: {
 
   79      if (
m.IsChangeTaggedToFloat64()) 
return Replace(
m.node()->InputAt(0));
 
   82    case IrOpcode::kChangeInt31ToTaggedSigned:
 
   83    case IrOpcode::kChangeInt32ToTagged: {
 
   86      if (
m.IsChangeTaggedSignedToInt32()) {
 
   87        return Replace(
m.InputAt(0));
 
   91    case IrOpcode::kChangeTaggedToFloat64:
 
   92    case IrOpcode::kTruncateTaggedToFloat64: {
 
   95      if (
m.IsChangeFloat64ToTagged() || 
m.IsChangeFloat64ToTaggedPointer()) {
 
   96        return Replace(
m.node()->InputAt(0));
 
   98      if (
m.IsChangeInt31ToTaggedSigned() || 
m.IsChangeInt32ToTagged()) {
 
   99        return Change(node, 
machine()->ChangeInt32ToFloat64(), 
m.InputAt(0));
 
  101      if (
m.IsChangeUint32ToTagged()) {
 
  102        return Change(node, 
machine()->ChangeUint32ToFloat64(), 
m.InputAt(0));
 
  106    case IrOpcode::kChangeTaggedSignedToInt32:
 
  107    case IrOpcode::kChangeTaggedToInt32: {
 
  109      if (
m.HasResolvedValue())
 
  111      if (
m.IsChangeFloat64ToTagged() || 
m.IsChangeFloat64ToTaggedPointer()) {
 
  112        return Change(node, 
machine()->ChangeFloat64ToInt32(), 
m.InputAt(0));
 
  114      if (
m.IsChangeInt31ToTaggedSigned() || 
m.IsChangeInt32ToTagged()) {
 
  115        return Replace(
m.InputAt(0));
 
  119    case IrOpcode::kChangeTaggedToUint32: {
 
  121      if (
m.HasResolvedValue())
 
  123      if (
m.IsChangeFloat64ToTagged() || 
m.IsChangeFloat64ToTaggedPointer()) {
 
  124        return Change(node, 
machine()->ChangeFloat64ToUint32(), 
m.InputAt(0));
 
  126      if (
m.IsChangeUint32ToTagged()) 
return Replace(
m.InputAt(0));
 
  129    case IrOpcode::kChangeUint32ToTagged: {
 
  131      if (
m.HasResolvedValue())
 
  135    case IrOpcode::kTruncateTaggedToWord32: {
 
  137      if (
m.HasResolvedValue())
 
  139      if (
m.IsChangeInt31ToTaggedSigned() || 
m.IsChangeInt32ToTagged() ||
 
  140          m.IsChangeUint32ToTagged()) {
 
  141        return Replace(
m.InputAt(0));
 
  143      if (
m.IsChangeFloat64ToTagged() || 
m.IsChangeFloat64ToTaggedPointer()) {
 
  144        return Change(node, 
machine()->TruncateFloat64ToWord32(), 
m.InputAt(0));
 
  148    case IrOpcode::kCheckedFloat64ToInt32: {
 
  153        ReplaceWithValue(node, value);
 
  154        return Replace(value);
 
  158    case IrOpcode::kCheckedTaggedToArrayIndex:
 
  159    case IrOpcode::kCheckedTaggedToInt32:
 
  160    case IrOpcode::kCheckedTaggedSignedToInt32: {
 
  162      if (
m.IsConvertTaggedHoleToUndefined()) {
 
  163        node->ReplaceInput(0, 
m.InputAt(0));
 
  164        return Changed(node);
 
  168    case IrOpcode::kCheckIf: {
 
  170      if (
m.Is(
factory()->true_value())) {
 
  172        return Replace(effect);
 
  176    case IrOpcode::kCheckNumberFitsInt32:
 
  177    case IrOpcode::kCheckNumber: {
 
  179      if (
m.IsConvertTaggedHoleToUndefined()) {
 
  180        node->ReplaceInput(0, 
m.InputAt(0));
 
  181        return Changed(node);
 
  185    case IrOpcode::kCheckHeapObject: {
 
  188        ReplaceWithValue(node, input);
 
  189        return Replace(input);
 
  192      if (
m.IsCheckHeapObject()) {
 
  193        ReplaceWithValue(node, input);
 
  194        return Replace(input);
 
  198    case IrOpcode::kCheckSmi: {
 
  201        ReplaceWithValue(node, input);
 
  202        return Replace(input);
 
  205      if (
m.IsCheckSmi()) {
 
  206        ReplaceWithValue(node, input);
 
  207        return Replace(input);
 
  208      } 
else if (
m.IsConvertTaggedHoleToUndefined()) {
 
  209        node->ReplaceInput(0, 
m.InputAt(0));
 
  210        return Changed(node);
 
  214    case IrOpcode::kObjectIsSmi: {
 
  216      switch (DecideObjectIsSmi(input)) {
 
  226    case IrOpcode::kNumberAbs: {
 
  228      if (
m.HasResolvedValue())
 
  232    case IrOpcode::kReferenceEqual: {
 
  237    case IrOpcode::kCheckedInt32Add: {
 
  241      if (
m.right().HasResolvedValue()) {
 
  242        Node* checked_int32_add = 
m.left().node();
 
  243        if (checked_int32_add->
opcode() == IrOpcode::kCheckedInt32Add) {
 
  245          if (n.right().HasResolvedValue() &&
 
  246              (n.right().ResolvedValue() >= 0) ==
 
  247                  (
m.right().ResolvedValue() >= 0)) {
 
  250                n.right().ResolvedValue(), 
m.right().ResolvedValue(), &val);
 
  252              bool has_no_other_uses = 
true;
 
  254                if (!edge.from()->IsDead() && edge.from() != node) {
 
  255                  has_no_other_uses = 
false;
 
  259              if (has_no_other_uses) {
 
  260                node->ReplaceInput(0, n.left().node());
 
  261                node->ReplaceInput(1, 
jsgraph()->Int32Constant(val));
 
  262                RelaxEffectsAndControls(checked_int32_add);
 
  263                checked_int32_add->
Kill();
 
  264                return Changed(node);