| // Copyright 2014 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/v8.h" |
| #include "test/cctest/cctest.h" |
| |
| #include "src/compiler/common-operator.h" |
| #include "src/compiler/graph.h" |
| #include "src/compiler/graph-visualizer.h" |
| #include "src/compiler/js-operator.h" |
| #include "src/compiler/machine-operator.h" |
| #include "src/compiler/node.h" |
| #include "src/compiler/operator.h" |
| #include "src/compiler/schedule.h" |
| #include "src/compiler/scheduler.h" |
| #include "src/compiler/verifier.h" |
| |
| using namespace v8::internal; |
| using namespace v8::internal::compiler; |
| |
| TEST(NodeWithNullInputReachableFromEnd) { |
| HandleAndZoneScope scope; |
| Graph graph(scope.main_zone()); |
| CommonOperatorBuilder common(scope.main_zone()); |
| |
| Node* start = graph.NewNode(common.Start(0)); |
| graph.SetStart(start); |
| Node* k = graph.NewNode(common.Int32Constant(0)); |
| Node* phi = graph.NewNode(common.Phi(kMachAnyTagged, 1), k, start); |
| phi->ReplaceInput(0, NULL); |
| graph.SetEnd(phi); |
| |
| OFStream os(stdout); |
| os << AsDOT(graph); |
| os << AsJSON(graph); |
| } |
| |
| |
| TEST(NodeWithNullControlReachableFromEnd) { |
| HandleAndZoneScope scope; |
| Graph graph(scope.main_zone()); |
| CommonOperatorBuilder common(scope.main_zone()); |
| |
| Node* start = graph.NewNode(common.Start(0)); |
| graph.SetStart(start); |
| Node* k = graph.NewNode(common.Int32Constant(0)); |
| Node* phi = graph.NewNode(common.Phi(kMachAnyTagged, 1), k, start); |
| phi->ReplaceInput(1, NULL); |
| graph.SetEnd(phi); |
| |
| OFStream os(stdout); |
| os << AsDOT(graph); |
| os << AsJSON(graph); |
| } |
| |
| |
| TEST(NodeWithNullInputReachableFromStart) { |
| HandleAndZoneScope scope; |
| Graph graph(scope.main_zone()); |
| CommonOperatorBuilder common(scope.main_zone()); |
| |
| Node* start = graph.NewNode(common.Start(0)); |
| graph.SetStart(start); |
| Node* k = graph.NewNode(common.Int32Constant(0)); |
| Node* phi = graph.NewNode(common.Phi(kMachAnyTagged, 1), k, start); |
| phi->ReplaceInput(0, NULL); |
| graph.SetEnd(start); |
| |
| OFStream os(stdout); |
| os << AsDOT(graph); |
| os << AsJSON(graph); |
| } |
| |
| |
| TEST(NodeWithNullControlReachableFromStart) { |
| HandleAndZoneScope scope; |
| Graph graph(scope.main_zone()); |
| CommonOperatorBuilder common(scope.main_zone()); |
| |
| Node* start = graph.NewNode(common.Start(0)); |
| graph.SetStart(start); |
| Node* merge = graph.NewNode(common.Merge(2), start, start); |
| merge->ReplaceInput(1, NULL); |
| graph.SetEnd(merge); |
| |
| OFStream os(stdout); |
| os << AsDOT(graph); |
| os << AsJSON(graph); |
| } |