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

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

Issue 2362173003: [turbofan] Improve representation selection for Smi checking. (Closed)
Patch Set: Address comments Created 4 years, 3 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 | « src/compiler/representation-change.cc ('k') | src/compiler/simplified-operator.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 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 2108 matching lines...) Expand 10 before | Expand all | Expand 10 after
2119 // the index is within the bounds of [0.0, length[. 2119 // the index is within the bounds of [0.0, length[.
2120 DeferReplacement(node, node->InputAt(0)); 2120 DeferReplacement(node, node->InputAt(0));
2121 } 2121 }
2122 } else { 2122 } else {
2123 VisitBinop(node, UseInfo::CheckedSigned32AsWord32(), 2123 VisitBinop(node, UseInfo::CheckedSigned32AsWord32(),
2124 UseInfo::TruncatingWord32(), 2124 UseInfo::TruncatingWord32(),
2125 MachineRepresentation::kWord32); 2125 MachineRepresentation::kWord32);
2126 } 2126 }
2127 return; 2127 return;
2128 } 2128 }
2129 case IrOpcode::kCheckHeapObject: {
2130 if (InputCannotBe(node, Type::SignedSmall())) {
2131 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
2132 if (lower()) DeferReplacement(node, node->InputAt(0));
2133 } else {
2134 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
2135 }
2136 return;
2137 }
2129 case IrOpcode::kCheckIf: { 2138 case IrOpcode::kCheckIf: {
2130 ProcessInput(node, 0, UseInfo::Bool()); 2139 ProcessInput(node, 0, UseInfo::Bool());
2131 ProcessRemainingInputs(node, 1); 2140 ProcessRemainingInputs(node, 1);
2132 SetOutput(node, MachineRepresentation::kNone); 2141 SetOutput(node, MachineRepresentation::kNone);
2133 return; 2142 return;
2134 } 2143 }
2135 case IrOpcode::kCheckNumber: { 2144 case IrOpcode::kCheckNumber: {
2136 if (InputIs(node, Type::Number())) { 2145 if (InputIs(node, Type::Number())) {
2137 if (truncation.IsUsedAsWord32()) { 2146 if (truncation.IsUsedAsWord32()) {
2138 VisitUnop(node, UseInfo::TruncatingWord32(), 2147 VisitUnop(node, UseInfo::TruncatingWord32(),
2139 MachineRepresentation::kWord32); 2148 MachineRepresentation::kWord32);
2140 } else { 2149 } else {
2141 // TODO(jarin,bmeurer): We need to go to Tagged here, because 2150 // TODO(jarin,bmeurer): We need to go to Tagged here, because
2142 // otherwise we cannot distinguish the hole NaN (which might need to 2151 // otherwise we cannot distinguish the hole NaN (which might need to
2143 // be treated as undefined). We should have a dedicated Type for 2152 // be treated as undefined). We should have a dedicated Type for
2144 // that at some point, and maybe even a dedicated truncation. 2153 // that at some point, and maybe even a dedicated truncation.
2145 VisitUnop(node, UseInfo::AnyTagged(), 2154 VisitUnop(node, UseInfo::AnyTagged(),
2146 MachineRepresentation::kTagged); 2155 MachineRepresentation::kTagged);
2147 } 2156 }
2148 if (lower()) DeferReplacement(node, node->InputAt(0)); 2157 if (lower()) DeferReplacement(node, node->InputAt(0));
2149 } else { 2158 } else {
2150 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); 2159 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
2151 } 2160 }
2152 return; 2161 return;
2153 } 2162 }
2163 case IrOpcode::kCheckSmi: {
2164 if (SmiValuesAre32Bits() && truncation.IsUsedAsWord32()) {
2165 VisitUnop(node, UseInfo::CheckedSignedSmallAsWord32(),
2166 MachineRepresentation::kWord32);
2167 } else {
2168 VisitUnop(node, UseInfo::CheckedSignedSmallAsTaggedSigned(),
2169 MachineRepresentation::kTaggedSigned);
2170 }
2171 if (lower()) DeferReplacement(node, node->InputAt(0));
2172 return;
2173 }
2154 case IrOpcode::kCheckString: { 2174 case IrOpcode::kCheckString: {
2155 if (InputIs(node, Type::String())) { 2175 if (InputIs(node, Type::String())) {
2156 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); 2176 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
2157 if (lower()) DeferReplacement(node, node->InputAt(0)); 2177 if (lower()) DeferReplacement(node, node->InputAt(0));
2158 } else { 2178 } else {
2159 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged); 2179 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
2160 }
2161 return;
2162 }
2163 case IrOpcode::kCheckTaggedPointer: {
2164 if (InputCannotBe(node, Type::SignedSmall())) {
2165 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
2166 if (lower()) DeferReplacement(node, node->InputAt(0));
2167 } else {
2168 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
2169 }
2170 return;
2171 }
2172 case IrOpcode::kCheckTaggedSigned: {
2173 if (SmiValuesAre32Bits() && truncation.IsUsedAsWord32()) {
2174 VisitUnop(node, UseInfo::CheckedSignedSmallAsWord32(),
2175 MachineRepresentation::kWord32);
2176 if (lower()) DeferReplacement(node, node->InputAt(0));
2177 } else {
2178 VisitUnop(node, UseInfo::AnyTagged(), MachineRepresentation::kTagged);
2179 } 2180 }
2180 return; 2181 return;
2181 } 2182 }
2182 2183
2183 case IrOpcode::kAllocate: { 2184 case IrOpcode::kAllocate: {
2184 ProcessInput(node, 0, UseInfo::TruncatingWord32()); 2185 ProcessInput(node, 0, UseInfo::TruncatingWord32());
2185 ProcessRemainingInputs(node, 1); 2186 ProcessRemainingInputs(node, 1);
2186 SetOutput(node, MachineRepresentation::kTagged); 2187 SetOutput(node, MachineRepresentation::kTagged);
2187 return; 2188 return;
2188 } 2189 }
(...skipping 1071 matching lines...) Expand 10 before | Expand all | Expand 10 after
3260 isolate(), graph()->zone(), callable.descriptor(), 0, flags, 3261 isolate(), graph()->zone(), callable.descriptor(), 0, flags,
3261 Operator::kNoProperties); 3262 Operator::kNoProperties);
3262 to_number_operator_.set(common()->Call(desc)); 3263 to_number_operator_.set(common()->Call(desc));
3263 } 3264 }
3264 return to_number_operator_.get(); 3265 return to_number_operator_.get();
3265 } 3266 }
3266 3267
3267 } // namespace compiler 3268 } // namespace compiler
3268 } // namespace internal 3269 } // namespace internal
3269 } // namespace v8 3270 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/representation-change.cc ('k') | src/compiler/simplified-operator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698