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

Side by Side Diff: src/compiler/simplified-lowering.cc

Issue 2734193003: [turbofan] Consume feedback types for NumberMax and NumberMin. (Closed)
Patch Set: Use jarin@s suggestion. Created 3 years, 9 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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/compiler/simplified-lowering.h" 5 #include "src/compiler/simplified-lowering.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "src/address-map.h" 9 #include "src/address-map.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 2043 matching lines...) Expand 10 before | Expand all | Expand 10 after
2054 if (lower()) NodeProperties::ChangeOp(node, Uint32Op(node)); 2054 if (lower()) NodeProperties::ChangeOp(node, Uint32Op(node));
2055 return; 2055 return;
2056 } 2056 }
2057 case IrOpcode::kNumberFround: { 2057 case IrOpcode::kNumberFround: {
2058 VisitUnop(node, UseInfo::TruncatingFloat64(), 2058 VisitUnop(node, UseInfo::TruncatingFloat64(),
2059 MachineRepresentation::kFloat32); 2059 MachineRepresentation::kFloat32);
2060 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node)); 2060 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node));
2061 return; 2061 return;
2062 } 2062 }
2063 case IrOpcode::kNumberMax: { 2063 case IrOpcode::kNumberMax: {
2064 // TODO(turbofan): We should consider feedback types here as well. 2064 // It is safe to use the feedback types for left and right hand side
2065 if (BothInputsAreUnsigned32(node)) { 2065 // here, since we can only narrow those types and thus we can only
2066 // promise a more specific truncation.
2067 Type* const lhs_type = TypeOf(node->InputAt(0));
2068 Type* const rhs_type = TypeOf(node->InputAt(1));
2069 if (lhs_type->Is(Type::Unsigned32()) &&
2070 rhs_type->Is(Type::Unsigned32())) {
2066 VisitWord32TruncatingBinop(node); 2071 VisitWord32TruncatingBinop(node);
2067 if (lower()) { 2072 if (lower()) {
2068 lowering->DoMax(node, lowering->machine()->Uint32LessThan(), 2073 lowering->DoMax(node, lowering->machine()->Uint32LessThan(),
2069 MachineRepresentation::kWord32); 2074 MachineRepresentation::kWord32);
2070 } 2075 }
2071 } else if (BothInputsAreSigned32(node)) { 2076 } else if (lhs_type->Is(Type::Signed32()) &&
2077 rhs_type->Is(Type::Signed32())) {
2072 VisitWord32TruncatingBinop(node); 2078 VisitWord32TruncatingBinop(node);
2073 if (lower()) { 2079 if (lower()) {
2074 lowering->DoMax(node, lowering->machine()->Int32LessThan(), 2080 lowering->DoMax(node, lowering->machine()->Int32LessThan(),
2075 MachineRepresentation::kWord32); 2081 MachineRepresentation::kWord32);
2076 } 2082 }
2077 } else if (BothInputsAre(node, Type::PlainNumber())) { 2083 } else if (lhs_type->Is(Type::PlainNumber()) &&
2084 rhs_type->Is(Type::PlainNumber())) {
2078 VisitFloat64Binop(node); 2085 VisitFloat64Binop(node);
2079 if (lower()) { 2086 if (lower()) {
2080 lowering->DoMax(node, lowering->machine()->Float64LessThan(), 2087 lowering->DoMax(node, lowering->machine()->Float64LessThan(),
2081 MachineRepresentation::kFloat64); 2088 MachineRepresentation::kFloat64);
2082 } 2089 }
2083 } else { 2090 } else {
2084 VisitFloat64Binop(node); 2091 VisitFloat64Binop(node);
2085 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node)); 2092 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node));
2086 } 2093 }
2087 return; 2094 return;
2088 } 2095 }
2089 case IrOpcode::kNumberMin: { 2096 case IrOpcode::kNumberMin: {
2090 // TODO(turbofan): We should consider feedback types here as well. 2097 // It is safe to use the feedback types for left and right hand side
2091 if (BothInputsAreUnsigned32(node)) { 2098 // here, since we can only narrow those types and thus we can only
2099 // promise a more specific truncation.
2100 Type* const lhs_type = TypeOf(node->InputAt(0));
2101 Type* const rhs_type = TypeOf(node->InputAt(1));
2102 if (lhs_type->Is(Type::Unsigned32()) &&
2103 rhs_type->Is(Type::Unsigned32())) {
2092 VisitWord32TruncatingBinop(node); 2104 VisitWord32TruncatingBinop(node);
2093 if (lower()) { 2105 if (lower()) {
2094 lowering->DoMin(node, lowering->machine()->Uint32LessThan(), 2106 lowering->DoMin(node, lowering->machine()->Uint32LessThan(),
2095 MachineRepresentation::kWord32); 2107 MachineRepresentation::kWord32);
2096 } 2108 }
2097 } else if (BothInputsAreSigned32(node)) { 2109 } else if (lhs_type->Is(Type::Signed32()) &&
2110 rhs_type->Is(Type::Signed32())) {
2098 VisitWord32TruncatingBinop(node); 2111 VisitWord32TruncatingBinop(node);
2099 if (lower()) { 2112 if (lower()) {
2100 lowering->DoMin(node, lowering->machine()->Int32LessThan(), 2113 lowering->DoMin(node, lowering->machine()->Int32LessThan(),
2101 MachineRepresentation::kWord32); 2114 MachineRepresentation::kWord32);
2102 } 2115 }
2103 } else if (BothInputsAre(node, Type::PlainNumber())) { 2116 } else if (lhs_type->Is(Type::PlainNumber()) &&
2117 rhs_type->Is(Type::PlainNumber())) {
2104 VisitFloat64Binop(node); 2118 VisitFloat64Binop(node);
2105 if (lower()) { 2119 if (lower()) {
2106 lowering->DoMin(node, lowering->machine()->Float64LessThan(), 2120 lowering->DoMin(node, lowering->machine()->Float64LessThan(),
2107 MachineRepresentation::kFloat64); 2121 MachineRepresentation::kFloat64);
2108 } 2122 }
2109 } else { 2123 } else {
2110 VisitFloat64Binop(node); 2124 VisitFloat64Binop(node);
2111 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node)); 2125 if (lower()) NodeProperties::ChangeOp(node, Float64Op(node));
2112 } 2126 }
2113 return; 2127 return;
(...skipping 1456 matching lines...) Expand 10 before | Expand all | Expand 10 after
3570 isolate(), graph()->zone(), callable.descriptor(), 0, flags, 3584 isolate(), graph()->zone(), callable.descriptor(), 0, flags,
3571 Operator::kNoProperties); 3585 Operator::kNoProperties);
3572 to_number_operator_.set(common()->Call(desc)); 3586 to_number_operator_.set(common()->Call(desc));
3573 } 3587 }
3574 return to_number_operator_.get(); 3588 return to_number_operator_.get();
3575 } 3589 }
3576 3590
3577 } // namespace compiler 3591 } // namespace compiler
3578 } // namespace internal 3592 } // namespace internal
3579 } // namespace v8 3593 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698