V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
machine-graph.cc
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 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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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
Definition: libplatform.h:13