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

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

Issue 1348073002: [turbofan] Get rid of type lower bounds. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase Created 5 years, 3 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
« no previous file with comments | « no previous file | src/compiler/graph-visualizer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/change-lowering.h" 5 #include "src/compiler/change-lowering.h"
6 6
7 #include "src/code-factory.h" 7 #include "src/code-factory.h"
8 #include "src/compiler/js-graph.h" 8 #include "src/compiler/js-graph.h"
9 #include "src/compiler/linkage.h" 9 #include "src/compiler/linkage.h"
10 #include "src/compiler/machine-operator.h" 10 #include "src/compiler/machine-operator.h"
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 } 150 }
151 151
152 152
153 Reduction ChangeLowering::ChangeFloat64ToTagged(Node* value, Node* control) { 153 Reduction ChangeLowering::ChangeFloat64ToTagged(Node* value, Node* control) {
154 return Replace(AllocateHeapNumberWithValue(value, control)); 154 return Replace(AllocateHeapNumberWithValue(value, control));
155 } 155 }
156 156
157 157
158 Reduction ChangeLowering::ChangeInt32ToTagged(Node* value, Node* control) { 158 Reduction ChangeLowering::ChangeInt32ToTagged(Node* value, Node* control) {
159 if (machine()->Is64() || 159 if (machine()->Is64() ||
160 NodeProperties::GetBounds(value).upper->Is(Type::SignedSmall())) { 160 NodeProperties::GetType(value)->Is(Type::SignedSmall())) {
161 return Replace(ChangeInt32ToSmi(value)); 161 return Replace(ChangeInt32ToSmi(value));
162 } 162 }
163 163
164 Node* add = graph()->NewNode(machine()->Int32AddWithOverflow(), value, value); 164 Node* add = graph()->NewNode(machine()->Int32AddWithOverflow(), value, value);
165 165
166 Node* ovf = graph()->NewNode(common()->Projection(1), add); 166 Node* ovf = graph()->NewNode(common()->Projection(1), add);
167 Node* branch = 167 Node* branch =
168 graph()->NewNode(common()->Branch(BranchHint::kFalse), ovf, control); 168 graph()->NewNode(common()->Branch(BranchHint::kFalse), ovf, control);
169 169
170 Node* if_true = graph()->NewNode(common()->IfTrue(), branch); 170 Node* if_true = graph()->NewNode(common()->IfTrue(), branch);
171 Node* vtrue = 171 Node* vtrue =
172 AllocateHeapNumberWithValue(ChangeInt32ToFloat64(value), if_true); 172 AllocateHeapNumberWithValue(ChangeInt32ToFloat64(value), if_true);
173 173
174 Node* if_false = graph()->NewNode(common()->IfFalse(), branch); 174 Node* if_false = graph()->NewNode(common()->IfFalse(), branch);
175 Node* vfalse = graph()->NewNode(common()->Projection(0), add); 175 Node* vfalse = graph()->NewNode(common()->Projection(0), add);
176 176
177 Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); 177 Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false);
178 Node* phi = 178 Node* phi =
179 graph()->NewNode(common()->Phi(kMachAnyTagged, 2), vtrue, vfalse, merge); 179 graph()->NewNode(common()->Phi(kMachAnyTagged, 2), vtrue, vfalse, merge);
180 180
181 return Replace(phi); 181 return Replace(phi);
182 } 182 }
183 183
184 184
185 Reduction ChangeLowering::ChangeTaggedToUI32(Node* value, Node* control, 185 Reduction ChangeLowering::ChangeTaggedToUI32(Node* value, Node* control,
186 Signedness signedness) { 186 Signedness signedness) {
187 if (NodeProperties::GetBounds(value).upper->Is(Type::TaggedSigned())) { 187 if (NodeProperties::GetType(value)->Is(Type::TaggedSigned())) {
188 return Replace(ChangeSmiToInt32(value)); 188 return Replace(ChangeSmiToInt32(value));
189 } 189 }
190 190
191 const MachineType type = (signedness == kSigned) ? kMachInt32 : kMachUint32; 191 const MachineType type = (signedness == kSigned) ? kMachInt32 : kMachUint32;
192 const Operator* op = (signedness == kSigned) 192 const Operator* op = (signedness == kSigned)
193 ? machine()->ChangeFloat64ToInt32() 193 ? machine()->ChangeFloat64ToInt32()
194 : machine()->ChangeFloat64ToUint32(); 194 : machine()->ChangeFloat64ToUint32();
195 195
196 if (NodeProperties::GetBounds(value).upper->Is(Type::TaggedPointer())) { 196 if (NodeProperties::GetType(value)->Is(Type::TaggedPointer())) {
197 return Replace(graph()->NewNode(op, LoadHeapNumberValue(value, control))); 197 return Replace(graph()->NewNode(op, LoadHeapNumberValue(value, control)));
198 } 198 }
199 199
200 Node* check = TestNotSmi(value); 200 Node* check = TestNotSmi(value);
201 Node* branch = 201 Node* branch =
202 graph()->NewNode(common()->Branch(BranchHint::kFalse), check, control); 202 graph()->NewNode(common()->Branch(BranchHint::kFalse), check, control);
203 203
204 Node* if_true = graph()->NewNode(common()->IfTrue(), branch); 204 Node* if_true = graph()->NewNode(common()->IfTrue(), branch);
205 Node* vtrue = graph()->NewNode(op, LoadHeapNumberValue(value, if_true)); 205 Node* vtrue = graph()->NewNode(op, LoadHeapNumberValue(value, if_true));
206 206
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 305
306 Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false); 306 Node* merge = graph()->NewNode(common()->Merge(2), if_true, if_false);
307 Node* phi = 307 Node* phi =
308 graph()->NewNode(common()->Phi(kMachFloat64, 2), vtrue, vfalse, merge); 308 graph()->NewNode(common()->Phi(kMachFloat64, 2), vtrue, vfalse, merge);
309 309
310 return Replace(phi); 310 return Replace(phi);
311 } 311 }
312 312
313 313
314 Reduction ChangeLowering::ChangeUint32ToTagged(Node* value, Node* control) { 314 Reduction ChangeLowering::ChangeUint32ToTagged(Node* value, Node* control) {
315 if (NodeProperties::GetBounds(value).upper->Is(Type::UnsignedSmall())) { 315 if (NodeProperties::GetType(value)->Is(Type::UnsignedSmall())) {
316 return Replace(ChangeUint32ToSmi(value)); 316 return Replace(ChangeUint32ToSmi(value));
317 } 317 }
318 318
319 Node* check = graph()->NewNode(machine()->Uint32LessThanOrEqual(), value, 319 Node* check = graph()->NewNode(machine()->Uint32LessThanOrEqual(), value,
320 SmiMaxValueConstant()); 320 SmiMaxValueConstant());
321 Node* branch = 321 Node* branch =
322 graph()->NewNode(common()->Branch(BranchHint::kTrue), check, control); 322 graph()->NewNode(common()->Branch(BranchHint::kTrue), check, control);
323 323
324 Node* if_true = graph()->NewNode(common()->IfTrue(), branch); 324 Node* if_true = graph()->NewNode(common()->IfTrue(), branch);
325 Node* vtrue = ChangeUint32ToSmi(value); 325 Node* vtrue = ChangeUint32ToSmi(value);
(...skipping 21 matching lines...) Expand all
347 } 347 }
348 348
349 349
350 MachineOperatorBuilder* ChangeLowering::machine() const { 350 MachineOperatorBuilder* ChangeLowering::machine() const {
351 return jsgraph()->machine(); 351 return jsgraph()->machine();
352 } 352 }
353 353
354 } // namespace compiler 354 } // namespace compiler
355 } // namespace internal 355 } // namespace internal
356 } // namespace v8 356 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/compiler/graph-visualizer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698