| OLD | NEW | 
|      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 9333 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   9344  |   9344  | 
|   9345  |   9345  | 
|   9346 HInstruction* HOptimizedGraphBuilder::BuildBinaryOperation( |   9346 HInstruction* HOptimizedGraphBuilder::BuildBinaryOperation( | 
|   9347     BinaryOperation* expr, |   9347     BinaryOperation* expr, | 
|   9348     HValue* left, |   9348     HValue* left, | 
|   9349     HValue* right) { |   9349     HValue* right) { | 
|   9350   HValue* context = environment()->LookupContext(); |   9350   HValue* context = environment()->LookupContext(); | 
|   9351   TypeInfo left_info = expr->left_type(); |   9351   TypeInfo left_info = expr->left_type(); | 
|   9352   TypeInfo right_info = expr->right_type(); |   9352   TypeInfo right_info = expr->right_type(); | 
|   9353   TypeInfo result_info = expr->result_type(); |   9353   TypeInfo result_info = expr->result_type(); | 
|   9354   TypeInfo combined_info; |   9354   bool has_fixed_right_arg = expr->has_fixed_right_arg(); | 
 |   9355   int fixed_right_arg_value = expr->fixed_right_arg_value(); | 
|   9355   Representation left_rep = ToRepresentation(left_info); |   9356   Representation left_rep = ToRepresentation(left_info); | 
|   9356   Representation right_rep = ToRepresentation(right_info); |   9357   Representation right_rep = ToRepresentation(right_info); | 
|   9357   Representation result_rep = ToRepresentation(result_info); |   9358   Representation result_rep = ToRepresentation(result_info); | 
|   9358   if (left_info.IsUninitialized()) { |   9359   if (left_info.IsUninitialized()) { | 
|   9359     // Can't have initialized one but not the other. |   9360     // Can't have initialized one but not the other. | 
|   9360     ASSERT(right_info.IsUninitialized()); |   9361     ASSERT(right_info.IsUninitialized()); | 
|   9361     AddSoftDeoptimize(); |   9362     AddSoftDeoptimize(); | 
|   9362     left_info = right_info = TypeInfo::Unknown(); |   9363     left_info = right_info = TypeInfo::Unknown(); | 
|   9363   } |   9364   } | 
|   9364   HInstruction* instr = NULL; |   9365   HInstruction* instr = NULL; | 
|   9365   switch (expr->op()) { |   9366   switch (expr->op()) { | 
|   9366     case Token::ADD: |   9367     case Token::ADD: | 
|   9367       if (left_info.IsString() && right_info.IsString()) { |   9368       if (left_info.IsString() && right_info.IsString()) { | 
|   9368         BuildCheckNonSmi(left); |   9369         BuildCheckNonSmi(left); | 
|   9369         AddInstruction(HCheckInstanceType::NewIsString(left, zone())); |   9370         AddInstruction(HCheckInstanceType::NewIsString(left, zone())); | 
|   9370         BuildCheckNonSmi(right); |   9371         BuildCheckNonSmi(right); | 
|   9371         AddInstruction(HCheckInstanceType::NewIsString(right, zone())); |   9372         AddInstruction(HCheckInstanceType::NewIsString(right, zone())); | 
|   9372         instr = HStringAdd::New(zone(), context, left, right); |   9373         instr = HStringAdd::New(zone(), context, left, right); | 
|   9373       } else { |   9374       } else { | 
|   9374         instr = HAdd::New(zone(), context, left, right); |   9375         instr = HAdd::New(zone(), context, left, right); | 
|   9375       } |   9376       } | 
|   9376       break; |   9377       break; | 
|   9377     case Token::SUB: |   9378     case Token::SUB: | 
|   9378       instr = HSub::New(zone(), context, left, right); |   9379       instr = HSub::New(zone(), context, left, right); | 
|   9379       break; |   9380       break; | 
|   9380     case Token::MUL: |   9381     case Token::MUL: | 
|   9381       instr = HMul::New(zone(), context, left, right); |   9382       instr = HMul::New(zone(), context, left, right); | 
|   9382       break; |   9383       break; | 
|   9383     case Token::MOD: |   9384     case Token::MOD: | 
|   9384       instr = HMod::New(zone(), context, left, right); |   9385       instr = HMod::New(zone(), | 
 |   9386                         context, | 
 |   9387                         left, | 
 |   9388                         right, | 
 |   9389                         has_fixed_right_arg, | 
 |   9390                         fixed_right_arg_value); | 
|   9385       break; |   9391       break; | 
|   9386     case Token::DIV: |   9392     case Token::DIV: | 
|   9387       instr = HDiv::New(zone(), context, left, right); |   9393       instr = HDiv::New(zone(), context, left, right); | 
|   9388       break; |   9394       break; | 
|   9389     case Token::BIT_XOR: |   9395     case Token::BIT_XOR: | 
|   9390     case Token::BIT_AND: |   9396     case Token::BIT_AND: | 
|   9391       instr = HBitwise::New(zone(), expr->op(), context, left, right); |   9397       instr = HBitwise::New(zone(), expr->op(), context, left, right); | 
|   9392       break; |   9398       break; | 
|   9393     case Token::BIT_OR: { |   9399     case Token::BIT_OR: { | 
|   9394       HValue* operand, *shift_amount; |   9400       HValue* operand, *shift_amount; | 
| (...skipping 2103 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  11498     } |  11504     } | 
|  11499   } |  11505   } | 
|  11500  |  11506  | 
|  11501 #ifdef DEBUG |  11507 #ifdef DEBUG | 
|  11502   if (graph_ != NULL) graph_->Verify(false);  // No full verify. |  11508   if (graph_ != NULL) graph_->Verify(false);  // No full verify. | 
|  11503   if (allocator_ != NULL) allocator_->Verify(); |  11509   if (allocator_ != NULL) allocator_->Verify(); | 
|  11504 #endif |  11510 #endif | 
|  11505 } |  11511 } | 
|  11506  |  11512  | 
|  11507 } }  // namespace v8::internal |  11513 } }  // namespace v8::internal | 
| OLD | NEW |