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

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

Issue 323423003: ARM: Avoid duplicate vmla when merging vmul and vadd (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 6 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-instructions.h ('k') | src/mips/lithium-mips.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 // 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/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/double.h" 7 #include "src/double.h"
8 #include "src/factory.h" 8 #include "src/factory.h"
9 #include "src/hydrogen-infer-representation.h" 9 #include "src/hydrogen-infer-representation.h"
10 #include "src/property-details-inl.h" 10 #include "src/property-details-inl.h"
(...skipping 1563 matching lines...) Expand 10 before | Expand all | Expand 10 after
1574 HValue* HUnaryMathOperation::Canonicalize() { 1574 HValue* HUnaryMathOperation::Canonicalize() {
1575 if (op() == kMathRound || op() == kMathFloor) { 1575 if (op() == kMathRound || op() == kMathFloor) {
1576 HValue* val = value(); 1576 HValue* val = value();
1577 if (val->IsChange()) val = HChange::cast(val)->value(); 1577 if (val->IsChange()) val = HChange::cast(val)->value();
1578 if (val->representation().IsSmiOrInteger32()) { 1578 if (val->representation().IsSmiOrInteger32()) {
1579 if (val->representation().Equals(representation())) return val; 1579 if (val->representation().Equals(representation())) return val;
1580 return Prepend(new(block()->zone()) HChange( 1580 return Prepend(new(block()->zone()) HChange(
1581 val, representation(), false, false)); 1581 val, representation(), false, false));
1582 } 1582 }
1583 } 1583 }
1584 if (op() == kMathFloor && value()->IsDiv() && value()->UseCount() == 1) { 1584 if (op() == kMathFloor && value()->IsDiv() && value()->HasOneUse()) {
1585 HDiv* hdiv = HDiv::cast(value()); 1585 HDiv* hdiv = HDiv::cast(value());
1586 1586
1587 HValue* left = hdiv->left(); 1587 HValue* left = hdiv->left();
1588 if (left->representation().IsInteger32()) { 1588 if (left->representation().IsInteger32()) {
1589 // A value with an integer representation does not need to be transformed. 1589 // A value with an integer representation does not need to be transformed.
1590 } else if (left->IsChange() && HChange::cast(left)->from().IsInteger32()) { 1590 } else if (left->IsChange() && HChange::cast(left)->from().IsInteger32()) {
1591 // A change from an integer32 can be replaced by the integer32 value. 1591 // A change from an integer32 can be replaced by the integer32 value.
1592 left = HChange::cast(left)->value(); 1592 left = HChange::cast(left)->value();
1593 } else if (hdiv->observed_input_representation(1).IsSmiOrInteger32()) { 1593 } else if (hdiv->observed_input_representation(1).IsSmiOrInteger32()) {
1594 left = Prepend(new(block()->zone()) HChange( 1594 left = Prepend(new(block()->zone()) HChange(
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after
2142 new_index->ClearAllSideEffects(); 2142 new_index->ClearAllSideEffects();
2143 new_index->AssumeRepresentation(Representation::Integer32()); 2143 new_index->AssumeRepresentation(Representation::Integer32());
2144 set_added_index(HBitwise::cast(new_index)); 2144 set_added_index(HBitwise::cast(new_index));
2145 added_index()->InsertBefore(first_check_in_block()); 2145 added_index()->InsertBefore(first_check_in_block());
2146 } 2146 }
2147 ASSERT(added_index()->op() == token); 2147 ASSERT(added_index()->op() == token);
2148 2148
2149 added_index()->SetOperandAt(1, index_base); 2149 added_index()->SetOperandAt(1, index_base);
2150 added_index()->SetOperandAt(2, added_constant()); 2150 added_index()->SetOperandAt(2, added_constant());
2151 first_check_in_block()->SetOperandAt(0, added_index()); 2151 first_check_in_block()->SetOperandAt(0, added_index());
2152 if (previous_index->UseCount() == 0) { 2152 if (previous_index->HasNoUses()) {
2153 previous_index->DeleteAndReplaceWith(NULL); 2153 previous_index->DeleteAndReplaceWith(NULL);
2154 } 2154 }
2155 } 2155 }
2156 2156
2157 void InductionVariableData::ChecksRelatedToLength::AddCheck( 2157 void InductionVariableData::ChecksRelatedToLength::AddCheck(
2158 HBoundsCheck* check, 2158 HBoundsCheck* check,
2159 int32_t upper_limit) { 2159 int32_t upper_limit) {
2160 BitwiseDecompositionResult decomposition; 2160 BitwiseDecompositionResult decomposition;
2161 InductionVariableData::DecomposeBitwise(check->index(), &decomposition); 2161 InductionVariableData::DecomposeBitwise(check->index(), &decomposition);
2162 2162
(...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after
2886 } 2886 }
2887 2887
2888 2888
2889 bool HConstant::EmitAtUses() { 2889 bool HConstant::EmitAtUses() {
2890 ASSERT(IsLinked()); 2890 ASSERT(IsLinked());
2891 if (block()->graph()->has_osr() && 2891 if (block()->graph()->has_osr() &&
2892 block()->graph()->IsStandardConstant(this)) { 2892 block()->graph()->IsStandardConstant(this)) {
2893 // TODO(titzer): this seems like a hack that should be fixed by custom OSR. 2893 // TODO(titzer): this seems like a hack that should be fixed by custom OSR.
2894 return true; 2894 return true;
2895 } 2895 }
2896 if (UseCount() == 0) return true; 2896 if (HasNoUses()) return true;
2897 if (IsCell()) return false; 2897 if (IsCell()) return false;
2898 if (representation().IsDouble()) return false; 2898 if (representation().IsDouble()) return false;
2899 if (representation().IsExternal()) return false; 2899 if (representation().IsExternal()) return false;
2900 return true; 2900 return true;
2901 } 2901 }
2902 2902
2903 2903
2904 HConstant* HConstant::CopyToRepresentation(Representation r, Zone* zone) const { 2904 HConstant* HConstant::CopyToRepresentation(Representation r, Zone* zone) const {
2905 if (r.IsSmi() && !has_smi_value_) return NULL; 2905 if (r.IsSmi() && !has_smi_value_) return NULL;
2906 if (r.IsInteger32() && !has_int32_value_) return NULL; 2906 if (r.IsInteger32() && !has_int32_value_) return NULL;
(...skipping 1932 matching lines...) Expand 10 before | Expand all | Expand 10 after
4839 break; 4839 break;
4840 case kExternalMemory: 4840 case kExternalMemory:
4841 stream->Add("[external-memory]"); 4841 stream->Add("[external-memory]");
4842 break; 4842 break;
4843 } 4843 }
4844 4844
4845 stream->Add("@%d", offset()); 4845 stream->Add("@%d", offset());
4846 } 4846 }
4847 4847
4848 } } // namespace v8::internal 4848 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/hydrogen-instructions.h ('k') | src/mips/lithium-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698