Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(273)

Side by Side Diff: src/compiler/simplified-lowering.cc

Issue 426233002: Land the Fan (disabled) (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Review feedback, rebase and "git cl format" Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/compiler/simplified-lowering.h ('k') | src/compiler/simplified-node-factory.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 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/simplified-lowering.h"
6
7 #include "src/compiler/graph-inl.h"
8 #include "src/objects.h"
9
10 namespace v8 {
11 namespace internal {
12 namespace compiler {
13
14 Node* SimplifiedLowering::DoChangeTaggedToInt32(Node* node, Node* effect,
15 Node* control) {
16 return node;
17 }
18
19
20 Node* SimplifiedLowering::DoChangeTaggedToUint32(Node* node, Node* effect,
21 Node* control) {
22 return node;
23 }
24
25
26 Node* SimplifiedLowering::DoChangeTaggedToFloat64(Node* node, Node* effect,
27 Node* control) {
28 return node;
29 }
30
31
32 Node* SimplifiedLowering::DoChangeInt32ToTagged(Node* node, Node* effect,
33 Node* control) {
34 return node;
35 }
36
37
38 Node* SimplifiedLowering::DoChangeUint32ToTagged(Node* node, Node* effect,
39 Node* control) {
40 return node;
41 }
42
43
44 Node* SimplifiedLowering::DoChangeFloat64ToTagged(Node* node, Node* effect,
45 Node* control) {
46 return node;
47 }
48
49
50 Node* SimplifiedLowering::DoChangeBoolToBit(Node* node, Node* effect,
51 Node* control) {
52 Node* val = node->InputAt(0);
53 Operator* op = machine()->WordEqual();
54 return graph()->NewNode(op, val, jsgraph()->TrueConstant());
55 }
56
57
58 Node* SimplifiedLowering::DoChangeBitToBool(Node* node, Node* effect,
59 Node* control) {
60 return node;
61 }
62
63
64 static WriteBarrierKind ComputeWriteBarrierKind(
65 MachineRepresentation representation, Type* type) {
66 // TODO(turbofan): skip write barriers for Smis, etc.
67 if (representation == kMachineTagged) {
68 return kFullWriteBarrier;
69 }
70 return kNoWriteBarrier;
71 }
72
73
74 Node* SimplifiedLowering::DoLoadField(Node* node, Node* effect, Node* control) {
75 const FieldAccess& access = FieldAccessOf(node->op());
76 node->set_op(machine_.Load(access.representation));
77 Node* offset =
78 graph()->NewNode(common()->Int32Constant(access.offset - kHeapObjectTag));
79 node->InsertInput(zone(), 1, offset);
80 return node;
81 }
82
83
84 Node* SimplifiedLowering::DoStoreField(Node* node, Node* effect,
85 Node* control) {
86 const FieldAccess& access = FieldAccessOf(node->op());
87 WriteBarrierKind kind =
88 ComputeWriteBarrierKind(access.representation, access.type);
89 node->set_op(machine_.Store(access.representation, kind));
90 Node* offset =
91 graph()->NewNode(common()->Int32Constant(access.offset - kHeapObjectTag));
92 node->InsertInput(zone(), 1, offset);
93 return node;
94 }
95
96
97 Node* SimplifiedLowering::ComputeIndex(const ElementAccess& access,
98 Node* index) {
99 int element_size = 0;
100 switch (access.representation) {
101 case kMachineTagged:
102 element_size = kPointerSize;
103 break;
104 case kMachineWord8:
105 element_size = 1;
106 break;
107 case kMachineWord16:
108 element_size = 2;
109 break;
110 case kMachineWord32:
111 element_size = 4;
112 break;
113 case kMachineWord64:
114 case kMachineFloat64:
115 element_size = 8;
116 break;
117 case kMachineLast:
118 UNREACHABLE();
119 break;
120 }
121 if (element_size != 1) {
122 index = graph()->NewNode(
123 machine()->Int32Mul(),
124 graph()->NewNode(common()->Int32Constant(element_size)), index);
125 }
126 int fixed_offset = access.header_size - kHeapObjectTag;
127 if (fixed_offset == 0) return index;
128 return graph()->NewNode(
129 machine()->Int32Add(),
130 graph()->NewNode(common()->Int32Constant(fixed_offset)), index);
131 }
132
133
134 Node* SimplifiedLowering::DoLoadElement(Node* node, Node* effect,
135 Node* control) {
136 const ElementAccess& access = ElementAccessOf(node->op());
137 node->set_op(machine_.Load(access.representation));
138 node->ReplaceInput(1, ComputeIndex(access, node->InputAt(1)));
139 return node;
140 }
141
142
143 Node* SimplifiedLowering::DoStoreElement(Node* node, Node* effect,
144 Node* control) {
145 const ElementAccess& access = ElementAccessOf(node->op());
146 WriteBarrierKind kind =
147 ComputeWriteBarrierKind(access.representation, access.type);
148 node->set_op(machine_.Store(access.representation, kind));
149 node->ReplaceInput(1, ComputeIndex(access, node->InputAt(1)));
150 return node;
151 }
152
153
154 void SimplifiedLowering::Lower(Node* node) {
155 Node* start = graph()->start();
156 switch (node->opcode()) {
157 case IrOpcode::kBooleanNot:
158 case IrOpcode::kNumberEqual:
159 case IrOpcode::kNumberLessThan:
160 case IrOpcode::kNumberLessThanOrEqual:
161 case IrOpcode::kNumberAdd:
162 case IrOpcode::kNumberSubtract:
163 case IrOpcode::kNumberMultiply:
164 case IrOpcode::kNumberDivide:
165 case IrOpcode::kNumberModulus:
166 case IrOpcode::kNumberToInt32:
167 case IrOpcode::kNumberToUint32:
168 case IrOpcode::kReferenceEqual:
169 case IrOpcode::kStringEqual:
170 case IrOpcode::kStringLessThan:
171 case IrOpcode::kStringLessThanOrEqual:
172 case IrOpcode::kStringAdd:
173 break;
174 case IrOpcode::kChangeTaggedToInt32:
175 DoChangeTaggedToInt32(node, start, start);
176 break;
177 case IrOpcode::kChangeTaggedToUint32:
178 DoChangeTaggedToUint32(node, start, start);
179 break;
180 case IrOpcode::kChangeTaggedToFloat64:
181 DoChangeTaggedToFloat64(node, start, start);
182 break;
183 case IrOpcode::kChangeInt32ToTagged:
184 DoChangeInt32ToTagged(node, start, start);
185 break;
186 case IrOpcode::kChangeUint32ToTagged:
187 DoChangeUint32ToTagged(node, start, start);
188 break;
189 case IrOpcode::kChangeFloat64ToTagged:
190 DoChangeFloat64ToTagged(node, start, start);
191 break;
192 case IrOpcode::kChangeBoolToBit:
193 node->ReplaceUses(DoChangeBoolToBit(node, start, start));
194 break;
195 case IrOpcode::kChangeBitToBool:
196 DoChangeBitToBool(node, start, start);
197 break;
198 case IrOpcode::kLoadField:
199 DoLoadField(node, start, start);
200 break;
201 case IrOpcode::kStoreField:
202 DoStoreField(node, start, start);
203 break;
204 case IrOpcode::kLoadElement:
205 DoLoadElement(node, start, start);
206 break;
207 case IrOpcode::kStoreElement:
208 DoStoreElement(node, start, start);
209 break;
210 default:
211 break;
212 }
213 }
214
215 } // namespace compiler
216 } // namespace internal
217 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/simplified-lowering.h ('k') | src/compiler/simplified-node-factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698