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

Side by Side Diff: src/hydrogen-bch.cc

Issue 21356002: Improve instruction creating/adding shorthand in HGraphBuilder (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Review feedback Created 7 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/hydrogen-bce.cc ('k') | src/hydrogen-instructions.h » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 has_upper_constant_limit = false; 271 has_upper_constant_limit = false;
272 } 272 }
273 273
274 current_check->check()->block()->graph()->isolate()->counters()-> 274 current_check->check()->block()->graph()->isolate()->counters()->
275 bounds_checks_eliminated()->Increment(); 275 bounds_checks_eliminated()->Increment();
276 current_check->check()->set_skip_check(); 276 current_check->check()->set_skip_check();
277 current_check = current_check->next(); 277 current_check = current_check->next();
278 } 278 }
279 279
280 // Choose the appropriate limit. 280 // Choose the appropriate limit.
281 Zone* zone = graph()->zone();
282 HValue* context = graph()->GetInvalidContext();
281 HValue* limit = data->limit(); 283 HValue* limit = data->limit();
282 if (has_upper_constant_limit) { 284 if (has_upper_constant_limit) {
283 HConstant* new_limit = new(pre_header->graph()->zone()) HConstant( 285 HConstant* new_limit = HConstant::New(zone, context,
284 upper_constant_limit, length->representation()); 286 upper_constant_limit);
285 new_limit->InsertBefore(pre_header->end()); 287 new_limit->InsertBefore(pre_header->end());
286 limit = new_limit; 288 limit = new_limit;
287 } 289 }
288 290
289 // If necessary, redefine the limit in the preheader. 291 // If necessary, redefine the limit in the preheader.
290 if (limit->IsInteger32Constant() && 292 if (limit->IsInteger32Constant() &&
291 limit->block() != pre_header && 293 limit->block() != pre_header &&
292 !limit->block()->Dominates(pre_header)) { 294 !limit->block()->Dominates(pre_header)) {
293 HConstant* new_limit = new(pre_header->graph()->zone()) HConstant( 295 HConstant* new_limit = HConstant::New(zone, context,
294 limit->GetInteger32Constant(), length->representation()); 296 limit->GetInteger32Constant());
295 new_limit->InsertBefore(pre_header->end()); 297 new_limit->InsertBefore(pre_header->end());
296 limit = new_limit; 298 limit = new_limit;
297 } 299 }
298 300
299 // Do the hoisting. 301 // Do the hoisting.
300 HBoundsCheck* hoisted_check = new(pre_header->zone()) HBoundsCheck( 302 HBoundsCheck* hoisted_check = HBoundsCheck::New(
301 limit, check->check()->length()); 303 zone, context, limit, check->check()->length());
302 hoisted_check->InsertBefore(pre_header->end()); 304 hoisted_check->InsertBefore(pre_header->end());
303 hoisted_check->set_allow_equality(true); 305 hoisted_check->set_allow_equality(true);
304 hoisted_check->block()->graph()->isolate()->counters()-> 306 hoisted_check->block()->graph()->isolate()->counters()->
305 bounds_checks_hoisted()->Increment(); 307 bounds_checks_hoisted()->Increment();
306 } 308 }
307 309
308 void CollectInductionVariableData(HBasicBlock* bb) { 310 void CollectInductionVariableData(HBasicBlock* bb) {
309 bool additional_limit = false; 311 bool additional_limit = false;
310 312
311 for (int i = 0; i < bb->phis()->length(); i++) { 313 for (int i = 0; i < bb->phis()->length(); i++) {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 void HBoundsCheckHoistingPhase::HoistRedundantBoundsChecks() { 401 void HBoundsCheckHoistingPhase::HoistRedundantBoundsChecks() {
400 InductionVariableBlocksTable table(graph()); 402 InductionVariableBlocksTable table(graph());
401 table.CollectInductionVariableData(graph()->entry_block()); 403 table.CollectInductionVariableData(graph()->entry_block());
402 for (int i = 0; i < graph()->blocks()->length(); i++) { 404 for (int i = 0; i < graph()->blocks()->length(); i++) {
403 table.EliminateRedundantBoundsChecks(graph()->blocks()->at(i)); 405 table.EliminateRedundantBoundsChecks(graph()->blocks()->at(i));
404 } 406 }
405 } 407 }
406 408
407 } } // namespace v8::internal 409 } } // namespace v8::internal
408 410
OLDNEW
« no previous file with comments | « src/hydrogen-bce.cc ('k') | src/hydrogen-instructions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698