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

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

Issue 685723002: [turbofan] LoadElement should not have a control input. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 1 month 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
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/simplified-lowering.h" 5 #include "src/compiler/simplified-lowering.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 1061 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 if (fixed_offset == 0) return index; 1072 if (fixed_offset == 0) return index;
1073 return graph()->NewNode(machine()->Int32Add(), index, 1073 return graph()->NewNode(machine()->Int32Add(), index,
1074 jsgraph()->Int32Constant(fixed_offset)); 1074 jsgraph()->Int32Constant(fixed_offset));
1075 } 1075 }
1076 1076
1077 1077
1078 void SimplifiedLowering::DoLoadElement(Node* node, MachineType output_type) { 1078 void SimplifiedLowering::DoLoadElement(Node* node, MachineType output_type) {
1079 const ElementAccess& access = ElementAccessOf(node->op()); 1079 const ElementAccess& access = ElementAccessOf(node->op());
1080 const Operator* op = machine()->Load(access.machine_type); 1080 const Operator* op = machine()->Load(access.machine_type);
1081 Node* key = node->InputAt(1); 1081 Node* key = node->InputAt(1);
1082 Node* effect = node->InputAt(3);
1082 Node* index = ComputeIndex(access, key); 1083 Node* index = ComputeIndex(access, key);
1083 if (access.bounds_check == kNoBoundsCheck) { 1084 if (access.bounds_check == kNoBoundsCheck) {
1084 DCHECK_EQ(access.machine_type, output_type); 1085 DCHECK_EQ(access.machine_type, output_type);
1085 node->set_op(op); 1086 node->set_op(op);
1086 node->ReplaceInput(1, index); 1087 node->ReplaceInput(1, index);
1087 node->RemoveInput(2); 1088 node->ReplaceInput(2, effect);
1089 node->ReplaceInput(3, graph()->start());
1088 } else { 1090 } else {
1089 DCHECK_EQ(kTypedArrayBoundsCheck, access.bounds_check); 1091 DCHECK_EQ(kTypedArrayBoundsCheck, access.bounds_check);
1090 1092
1091 Node* base = node->InputAt(0); 1093 Node* base = node->InputAt(0);
1092 Node* length = node->InputAt(2); 1094 Node* length = node->InputAt(2);
1093 Node* effect = node->InputAt(3);
1094 Node* control = node->InputAt(4);
1095 1095
1096 Node* check = graph()->NewNode(machine()->Uint32LessThan(), key, length); 1096 Node* check = graph()->NewNode(machine()->Uint32LessThan(), key, length);
1097 Node* branch = 1097 Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue), check,
1098 graph()->NewNode(common()->Branch(BranchHint::kTrue), check, control); 1098 graph()->start());
1099 1099
1100 Node* if_true = graph()->NewNode(common()->IfTrue(), branch); 1100 Node* if_true = graph()->NewNode(common()->IfTrue(), branch);
1101 Node* load = graph()->NewNode(op, base, index, effect, if_true); 1101 Node* load = graph()->NewNode(op, base, index, effect, if_true);
1102 Node* result = load; 1102 Node* result = load;
1103 if (output_type & kRepTagged) { 1103 if (output_type & kRepTagged) {
1104 // TODO(turbofan): This is ugly as hell! 1104 // TODO(turbofan): This is ugly as hell!
1105 SimplifiedOperatorBuilder simplified(graph()->zone()); 1105 SimplifiedOperatorBuilder simplified(graph()->zone());
1106 RepresentationChanger changer(jsgraph(), &simplified, 1106 RepresentationChanger changer(jsgraph(), &simplified,
1107 graph()->zone()->isolate()); 1107 graph()->zone()->isolate());
1108 result = changer.GetTaggedRepresentationFor(result, access.machine_type); 1108 result = changer.GetTaggedRepresentationFor(result, access.machine_type);
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
1235 void SimplifiedLowering::DoStringLessThanOrEqual(Node* node) { 1235 void SimplifiedLowering::DoStringLessThanOrEqual(Node* node) {
1236 node->set_op(machine()->IntLessThanOrEqual()); 1236 node->set_op(machine()->IntLessThanOrEqual());
1237 node->ReplaceInput(0, StringComparison(node, true)); 1237 node->ReplaceInput(0, StringComparison(node, true));
1238 node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL)); 1238 node->ReplaceInput(1, jsgraph()->SmiConstant(EQUAL));
1239 } 1239 }
1240 1240
1241 1241
1242 } // namespace compiler 1242 } // namespace compiler
1243 } // namespace internal 1243 } // namespace internal
1244 } // namespace v8 1244 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/operator-properties-inl.h ('k') | test/unittests/compiler/js-typed-lowering-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698