Line data Source code
1 : // Copyright 2018 the V8 project authors. All rights reserved.
2 : // Use of this source code is governed by a BSD-style license that can be
3 : // found in the LICENSE file.
4 :
5 : #include "src/compiler/machine-graph.h"
6 :
7 : #include "src/compiler/node-properties.h"
8 : #include "src/external-reference.h"
9 :
10 : namespace v8 {
11 : namespace internal {
12 : namespace compiler {
13 :
14 14405430 : Node* MachineGraph::Int32Constant(int32_t value) {
15 : Node** loc = cache_.FindInt32Constant(value);
16 14405850 : if (*loc == nullptr) {
17 17245029 : *loc = graph()->NewNode(common()->Int32Constant(value));
18 : }
19 14408343 : return *loc;
20 : }
21 :
22 9830254 : Node* MachineGraph::Int64Constant(int64_t value) {
23 : Node** loc = cache_.FindInt64Constant(value);
24 9830030 : if (*loc == nullptr) {
25 8677382 : *loc = graph()->NewNode(common()->Int64Constant(value));
26 : }
27 9830702 : return *loc;
28 : }
29 :
30 9615260 : Node* MachineGraph::IntPtrConstant(intptr_t value) {
31 0 : return machine()->Is32() ? Int32Constant(static_cast<int32_t>(value))
32 9615260 : : Int64Constant(static_cast<int64_t>(value));
33 : }
34 :
35 0 : Node* MachineGraph::RelocatableInt32Constant(int32_t value,
36 : RelocInfo::Mode rmode) {
37 : Node** loc = cache_.FindRelocatableInt32Constant(
38 : value, static_cast<RelocInfoMode>(rmode));
39 0 : if (*loc == nullptr) {
40 0 : *loc = graph()->NewNode(common()->RelocatableInt32Constant(value, rmode));
41 : }
42 0 : return *loc;
43 : }
44 :
45 185524 : Node* MachineGraph::RelocatableInt64Constant(int64_t value,
46 : RelocInfo::Mode rmode) {
47 : Node** loc = cache_.FindRelocatableInt64Constant(
48 : value, static_cast<RelocInfoMode>(rmode));
49 185597 : if (*loc == nullptr) {
50 300328 : *loc = graph()->NewNode(common()->RelocatableInt64Constant(value, rmode));
51 : }
52 185657 : return *loc;
53 : }
54 :
55 185519 : Node* MachineGraph::RelocatableIntPtrConstant(intptr_t value,
56 : RelocInfo::Mode rmode) {
57 : return kSystemPointerSize == 8
58 : ? RelocatableInt64Constant(value, rmode)
59 185519 : : RelocatableInt32Constant(static_cast<int>(value), rmode);
60 : }
61 :
62 125497 : Node* MachineGraph::Float32Constant(float value) {
63 : Node** loc = cache_.FindFloat32Constant(value);
64 125515 : if (*loc == nullptr) {
65 214128 : *loc = graph()->NewNode(common()->Float32Constant(value));
66 : }
67 125509 : return *loc;
68 : }
69 :
70 496328 : Node* MachineGraph::Float64Constant(double value) {
71 : Node** loc = cache_.FindFloat64Constant(value);
72 496312 : if (*loc == nullptr) {
73 556321 : *loc = graph()->NewNode(common()->Float64Constant(value));
74 : }
75 496321 : return *loc;
76 : }
77 :
78 1348 : Node* MachineGraph::PointerConstant(intptr_t value) {
79 : Node** loc = cache_.FindPointerConstant(value);
80 1348 : if (*loc == nullptr) {
81 458 : *loc = graph()->NewNode(common()->PointerConstant(value));
82 : }
83 1348 : return *loc;
84 : }
85 :
86 2315059 : Node* MachineGraph::ExternalConstant(ExternalReference reference) {
87 2315059 : Node** loc = cache_.FindExternalConstant(reference);
88 2315067 : if (*loc == nullptr) {
89 3501868 : *loc = graph()->NewNode(common()->ExternalConstant(reference));
90 : }
91 2315069 : return *loc;
92 : }
93 :
94 0 : Node* MachineGraph::ExternalConstant(Runtime::FunctionId function_id) {
95 0 : return ExternalConstant(ExternalReference::Create(function_id));
96 : }
97 :
98 : } // namespace compiler
99 : } // namespace internal
100 122004 : } // namespace v8
|