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
Int32Constant(int32_t value)14 Node* MachineGraph::Int32Constant(int32_t value) {
15 Node** loc = cache_.FindInt32Constant(value);
16 if (*loc == nullptr) {
17 *loc = graph()->NewNode(common()->Int32Constant(value));
18 }
19 return *loc;
20 }
21
Int64Constant(int64_t value)22 Node* MachineGraph::Int64Constant(int64_t value) {
23 Node** loc = cache_.FindInt64Constant(value);
24 if (*loc == nullptr) {
25 *loc = graph()->NewNode(common()->Int64Constant(value));
26 }
27 return *loc;
28 }
29
IntPtrConstant(intptr_t value)30 Node* MachineGraph::IntPtrConstant(intptr_t value) {
31 return machine()->Is32() ? Int32Constant(static_cast<int32_t>(value))
32 : Int64Constant(static_cast<int64_t>(value));
33 }
34
RelocatableInt32Constant(int32_t value,RelocInfo::Mode rmode)35 Node* MachineGraph::RelocatableInt32Constant(int32_t value,
36 RelocInfo::Mode rmode) {
37 Node** loc = cache_.FindRelocatableInt32Constant(
38 value, static_cast<RelocInfoMode>(rmode));
39 if (*loc == nullptr) {
40 *loc = graph()->NewNode(common()->RelocatableInt32Constant(value, rmode));
41 }
42 return *loc;
43 }
44
RelocatableInt64Constant(int64_t value,RelocInfo::Mode rmode)45 Node* MachineGraph::RelocatableInt64Constant(int64_t value,
46 RelocInfo::Mode rmode) {
47 Node** loc = cache_.FindRelocatableInt64Constant(
48 value, static_cast<RelocInfoMode>(rmode));
49 if (*loc == nullptr) {
50 *loc = graph()->NewNode(common()->RelocatableInt64Constant(value, rmode));
51 }
52 return *loc;
53 }
54
RelocatableIntPtrConstant(intptr_t value,RelocInfo::Mode rmode)55 Node* MachineGraph::RelocatableIntPtrConstant(intptr_t value,
56 RelocInfo::Mode rmode) {
57 return kPointerSize == 8
58 ? RelocatableInt64Constant(value, rmode)
59 : RelocatableInt32Constant(static_cast<int>(value), rmode);
60 }
61
Float32Constant(float value)62 Node* MachineGraph::Float32Constant(float value) {
63 Node** loc = cache_.FindFloat32Constant(value);
64 if (*loc == nullptr) {
65 *loc = graph()->NewNode(common()->Float32Constant(value));
66 }
67 return *loc;
68 }
69
Float64Constant(double value)70 Node* MachineGraph::Float64Constant(double value) {
71 Node** loc = cache_.FindFloat64Constant(value);
72 if (*loc == nullptr) {
73 *loc = graph()->NewNode(common()->Float64Constant(value));
74 }
75 return *loc;
76 }
77
PointerConstant(intptr_t value)78 Node* MachineGraph::PointerConstant(intptr_t value) {
79 Node** loc = cache_.FindPointerConstant(value);
80 if (*loc == nullptr) {
81 *loc = graph()->NewNode(common()->PointerConstant(value));
82 }
83 return *loc;
84 }
85
ExternalConstant(ExternalReference reference)86 Node* MachineGraph::ExternalConstant(ExternalReference reference) {
87 Node** loc = cache_.FindExternalConstant(reference);
88 if (*loc == nullptr) {
89 *loc = graph()->NewNode(common()->ExternalConstant(reference));
90 }
91 return *loc;
92 }
93
ExternalConstant(Runtime::FunctionId function_id)94 Node* MachineGraph::ExternalConstant(Runtime::FunctionId function_id) {
95 return ExternalConstant(ExternalReference::Create(function_id));
96 }
97
98 } // namespace compiler
99 } // namespace internal
100 } // namespace v8
101