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

Side by Side Diff: src/hydrogen.cc

Issue 13902013: Improve handling of unary plus. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebased Created 7 years, 8 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.h ('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 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 9142 matching lines...) Expand 10 before | Expand all | Expand 10 after
9153 9153
9154 9154
9155 void HOptimizedGraphBuilder::VisitUnaryOperation(UnaryOperation* expr) { 9155 void HOptimizedGraphBuilder::VisitUnaryOperation(UnaryOperation* expr) {
9156 ASSERT(!HasStackOverflow()); 9156 ASSERT(!HasStackOverflow());
9157 ASSERT(current_block() != NULL); 9157 ASSERT(current_block() != NULL);
9158 ASSERT(current_block()->HasPredecessor()); 9158 ASSERT(current_block()->HasPredecessor());
9159 switch (expr->op()) { 9159 switch (expr->op()) {
9160 case Token::DELETE: return VisitDelete(expr); 9160 case Token::DELETE: return VisitDelete(expr);
9161 case Token::VOID: return VisitVoid(expr); 9161 case Token::VOID: return VisitVoid(expr);
9162 case Token::TYPEOF: return VisitTypeof(expr); 9162 case Token::TYPEOF: return VisitTypeof(expr);
9163 case Token::ADD: return VisitAdd(expr);
9164 case Token::SUB: return VisitSub(expr); 9163 case Token::SUB: return VisitSub(expr);
9165 case Token::BIT_NOT: return VisitBitNot(expr); 9164 case Token::BIT_NOT: return VisitBitNot(expr);
9166 case Token::NOT: return VisitNot(expr); 9165 case Token::NOT: return VisitNot(expr);
9167 default: UNREACHABLE(); 9166 default: UNREACHABLE();
9168 } 9167 }
9169 } 9168 }
9170 9169
9171 void HOptimizedGraphBuilder::VisitDelete(UnaryOperation* expr) { 9170 void HOptimizedGraphBuilder::VisitDelete(UnaryOperation* expr) {
9172 Property* prop = expr->expression()->AsProperty(); 9171 Property* prop = expr->expression()->AsProperty();
9173 VariableProxy* proxy = expr->expression()->AsVariableProxy(); 9172 VariableProxy* proxy = expr->expression()->AsVariableProxy();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
9211 9210
9212 void HOptimizedGraphBuilder::VisitTypeof(UnaryOperation* expr) { 9211 void HOptimizedGraphBuilder::VisitTypeof(UnaryOperation* expr) {
9213 CHECK_ALIVE(VisitForTypeOf(expr->expression())); 9212 CHECK_ALIVE(VisitForTypeOf(expr->expression()));
9214 HValue* value = Pop(); 9213 HValue* value = Pop();
9215 HValue* context = environment()->LookupContext(); 9214 HValue* context = environment()->LookupContext();
9216 HInstruction* instr = new(zone()) HTypeof(context, value); 9215 HInstruction* instr = new(zone()) HTypeof(context, value);
9217 return ast_context()->ReturnInstruction(instr, expr->id()); 9216 return ast_context()->ReturnInstruction(instr, expr->id());
9218 } 9217 }
9219 9218
9220 9219
9221 void HOptimizedGraphBuilder::VisitAdd(UnaryOperation* expr) {
9222 CHECK_ALIVE(VisitForValue(expr->expression()));
9223 HValue* value = Pop();
9224 HValue* context = environment()->LookupContext();
9225 HInstruction* instr =
9226 HMul::New(zone(), context, value, graph()->GetConstant1());
9227 if (instr->IsBinaryOperation()) {
9228 // Since we don't have type feedback, we must be cautious/pessimistic.
9229 HBinaryOperation::cast(instr)->set_observed_input_representation(
9230 Representation::Tagged(), Representation::Tagged());
9231 }
9232 return ast_context()->ReturnInstruction(instr, expr->id());
9233 }
9234
9235
9236 void HOptimizedGraphBuilder::VisitSub(UnaryOperation* expr) { 9220 void HOptimizedGraphBuilder::VisitSub(UnaryOperation* expr) {
9237 CHECK_ALIVE(VisitForValue(expr->expression())); 9221 CHECK_ALIVE(VisitForValue(expr->expression()));
9238 HValue* value = Pop(); 9222 HValue* value = Pop();
9239 HValue* context = environment()->LookupContext(); 9223 HValue* context = environment()->LookupContext();
9240 HInstruction* instr = 9224 HInstruction* instr =
9241 HMul::New(zone(), context, value, graph()->GetConstantMinus1()); 9225 HMul::New(zone(), context, value, graph()->GetConstantMinus1());
9242 TypeInfo info = oracle()->UnaryType(expr); 9226 TypeInfo info = oracle()->UnaryType(expr);
9243 Representation rep = ToRepresentation(info); 9227 Representation rep = ToRepresentation(info);
9244 if (info.IsUninitialized()) { 9228 if (info.IsUninitialized()) {
9245 AddSoftDeoptimize(); 9229 AddSoftDeoptimize();
(...skipping 2445 matching lines...) Expand 10 before | Expand all | Expand 10 after
11691 } 11675 }
11692 } 11676 }
11693 11677
11694 #ifdef DEBUG 11678 #ifdef DEBUG
11695 if (graph_ != NULL) graph_->Verify(false); // No full verify. 11679 if (graph_ != NULL) graph_->Verify(false); // No full verify.
11696 if (allocator_ != NULL) allocator_->Verify(); 11680 if (allocator_ != NULL) allocator_->Verify();
11697 #endif 11681 #endif
11698 } 11682 }
11699 11683
11700 } } // namespace v8::internal 11684 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/hydrogen.h ('k') | src/hydrogen-instructions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698