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

Side by Side Diff: src/full-codegen.cc

Issue 11437016: Use count-based profiling exclusively. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed review comments Created 8 years 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/full-codegen.h ('k') | src/ia32/deoptimizer-ia32.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 453 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 } 464 }
465 465
466 466
467 void FullCodeGenerator::RecordTypeFeedbackCell( 467 void FullCodeGenerator::RecordTypeFeedbackCell(
468 TypeFeedbackId id, Handle<JSGlobalPropertyCell> cell) { 468 TypeFeedbackId id, Handle<JSGlobalPropertyCell> cell) {
469 TypeFeedbackCellEntry entry = { id, cell }; 469 TypeFeedbackCellEntry entry = { id, cell };
470 type_feedback_cells_.Add(entry, zone()); 470 type_feedback_cells_.Add(entry, zone());
471 } 471 }
472 472
473 473
474 void FullCodeGenerator::RecordStackCheck(BailoutId ast_id) { 474 void FullCodeGenerator::RecordBackEdge(BailoutId ast_id) {
475 // The pc offset does not need to be encoded and packed together with a 475 // The pc offset does not need to be encoded and packed together with a state.
476 // state.
477 ASSERT(masm_->pc_offset() > 0); 476 ASSERT(masm_->pc_offset() > 0);
478 BailoutEntry entry = { ast_id, static_cast<unsigned>(masm_->pc_offset()) }; 477 BailoutEntry entry = { ast_id, static_cast<unsigned>(masm_->pc_offset()) };
479 stack_checks_.Add(entry, zone()); 478 stack_checks_.Add(entry, zone());
480 } 479 }
481 480
482 481
483 bool FullCodeGenerator::ShouldInlineSmiCase(Token::Value op) { 482 bool FullCodeGenerator::ShouldInlineSmiCase(Token::Value op) {
484 // Inline smi case inside loops, but not division and modulo which 483 // Inline smi case inside loops, but not division and modulo which
485 // are too complicated and take up too much space. 484 // are too complicated and take up too much space.
486 if (op == Token::DIV ||op == Token::MOD) return false; 485 if (op == Token::DIV ||op == Token::MOD) return false;
(...skipping 775 matching lines...) Expand 10 before | Expand all | Expand 10 after
1262 PrepareForBailoutForId(stmt->ContinueId(), NO_REGISTERS); 1261 PrepareForBailoutForId(stmt->ContinueId(), NO_REGISTERS);
1263 SetExpressionPosition(stmt->cond(), stmt->condition_position()); 1262 SetExpressionPosition(stmt->cond(), stmt->condition_position());
1264 VisitForControl(stmt->cond(), 1263 VisitForControl(stmt->cond(),
1265 &stack_check, 1264 &stack_check,
1266 loop_statement.break_label(), 1265 loop_statement.break_label(),
1267 &stack_check); 1266 &stack_check);
1268 1267
1269 // Check stack before looping. 1268 // Check stack before looping.
1270 PrepareForBailoutForId(stmt->BackEdgeId(), NO_REGISTERS); 1269 PrepareForBailoutForId(stmt->BackEdgeId(), NO_REGISTERS);
1271 __ bind(&stack_check); 1270 __ bind(&stack_check);
1272 EmitStackCheck(stmt, &body); 1271 EmitBackEdgeBookkeeping(stmt, &body);
1273 __ jmp(&body); 1272 __ jmp(&body);
1274 1273
1275 PrepareForBailoutForId(stmt->ExitId(), NO_REGISTERS); 1274 PrepareForBailoutForId(stmt->ExitId(), NO_REGISTERS);
1276 __ bind(loop_statement.break_label()); 1275 __ bind(loop_statement.break_label());
1277 decrement_loop_depth(); 1276 decrement_loop_depth();
1278 } 1277 }
1279 1278
1280 1279
1281 void FullCodeGenerator::VisitWhileStatement(WhileStatement* stmt) { 1280 void FullCodeGenerator::VisitWhileStatement(WhileStatement* stmt) {
1282 Comment cmnt(masm_, "[ WhileStatement"); 1281 Comment cmnt(masm_, "[ WhileStatement");
1283 Label test, body; 1282 Label test, body;
1284 1283
1285 Iteration loop_statement(this, stmt); 1284 Iteration loop_statement(this, stmt);
1286 increment_loop_depth(); 1285 increment_loop_depth();
1287 1286
1288 // Emit the test at the bottom of the loop. 1287 // Emit the test at the bottom of the loop.
1289 __ jmp(&test); 1288 __ jmp(&test);
1290 1289
1291 PrepareForBailoutForId(stmt->BodyId(), NO_REGISTERS); 1290 PrepareForBailoutForId(stmt->BodyId(), NO_REGISTERS);
1292 __ bind(&body); 1291 __ bind(&body);
1293 Visit(stmt->body()); 1292 Visit(stmt->body());
1294 1293
1295 // Emit the statement position here as this is where the while 1294 // Emit the statement position here as this is where the while
1296 // statement code starts. 1295 // statement code starts.
1297 __ bind(loop_statement.continue_label()); 1296 __ bind(loop_statement.continue_label());
1298 SetStatementPosition(stmt); 1297 SetStatementPosition(stmt);
1299 1298
1300 // Check stack before looping. 1299 // Check stack before looping.
1301 EmitStackCheck(stmt, &body); 1300 EmitBackEdgeBookkeeping(stmt, &body);
1302 1301
1303 __ bind(&test); 1302 __ bind(&test);
1304 VisitForControl(stmt->cond(), 1303 VisitForControl(stmt->cond(),
1305 &body, 1304 &body,
1306 loop_statement.break_label(), 1305 loop_statement.break_label(),
1307 loop_statement.break_label()); 1306 loop_statement.break_label());
1308 1307
1309 PrepareForBailoutForId(stmt->ExitId(), NO_REGISTERS); 1308 PrepareForBailoutForId(stmt->ExitId(), NO_REGISTERS);
1310 __ bind(loop_statement.break_label()); 1309 __ bind(loop_statement.break_label());
1311 decrement_loop_depth(); 1310 decrement_loop_depth();
(...skipping 25 matching lines...) Expand all
1337 __ bind(loop_statement.continue_label()); 1336 __ bind(loop_statement.continue_label());
1338 if (stmt->next() != NULL) { 1337 if (stmt->next() != NULL) {
1339 Visit(stmt->next()); 1338 Visit(stmt->next());
1340 } 1339 }
1341 1340
1342 // Emit the statement position here as this is where the for 1341 // Emit the statement position here as this is where the for
1343 // statement code starts. 1342 // statement code starts.
1344 SetStatementPosition(stmt); 1343 SetStatementPosition(stmt);
1345 1344
1346 // Check stack before looping. 1345 // Check stack before looping.
1347 EmitStackCheck(stmt, &body); 1346 EmitBackEdgeBookkeeping(stmt, &body);
1348 1347
1349 __ bind(&test); 1348 __ bind(&test);
1350 if (stmt->cond() != NULL) { 1349 if (stmt->cond() != NULL) {
1351 VisitForControl(stmt->cond(), 1350 VisitForControl(stmt->cond(),
1352 &body, 1351 &body,
1353 loop_statement.break_label(), 1352 loop_statement.break_label(),
1354 loop_statement.break_label()); 1353 loop_statement.break_label());
1355 } else { 1354 } else {
1356 __ jmp(&body); 1355 __ jmp(&body);
1357 } 1356 }
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
1579 } 1578 }
1580 1579
1581 return false; 1580 return false;
1582 } 1581 }
1583 1582
1584 1583
1585 #undef __ 1584 #undef __
1586 1585
1587 1586
1588 } } // namespace v8::internal 1587 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/full-codegen.h ('k') | src/ia32/deoptimizer-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698