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

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

Issue 2311903002: [turbofan] Don't propagate truncations if output is tagged. (Closed)
Patch Set: 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 | « no previous file | test/mjsunit/compiler/regress-644048.js » ('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 894 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 if (lower()) { 905 if (lower()) {
906 // Update the select operator. 906 // Update the select operator.
907 SelectParameters p = SelectParametersOf(node->op()); 907 SelectParameters p = SelectParametersOf(node->op());
908 if (output != p.representation()) { 908 if (output != p.representation()) {
909 NodeProperties::ChangeOp(node, 909 NodeProperties::ChangeOp(node,
910 lowering->common()->Select(output, p.hint())); 910 lowering->common()->Select(output, p.hint()));
911 } 911 }
912 } 912 }
913 // Convert inputs to the output representation of this phi, pass the 913 // Convert inputs to the output representation of this phi, pass the
914 // truncation truncation along. 914 // truncation truncation along.
915 if (output == MachineRepresentation::kTagged) {
916 truncation = Truncation::Any();
917 }
915 UseInfo input_use(output, truncation); 918 UseInfo input_use(output, truncation);
916 ProcessInput(node, 1, input_use); 919 ProcessInput(node, 1, input_use);
917 ProcessInput(node, 2, input_use); 920 ProcessInput(node, 2, input_use);
918 } 921 }
919 922
920 // Helper for handling phis. 923 // Helper for handling phis.
921 void VisitPhi(Node* node, Truncation truncation, 924 void VisitPhi(Node* node, Truncation truncation,
922 SimplifiedLowering* lowering) { 925 SimplifiedLowering* lowering) {
923 MachineRepresentation output = 926 MachineRepresentation output =
924 GetOutputInfoForPhi(node, TypeOf(node), truncation); 927 GetOutputInfoForPhi(node, TypeOf(node), truncation);
925 // Only set the output representation if not running with type 928 // Only set the output representation if not running with type
926 // feedback. (Feedback typing will set the representation.) 929 // feedback. (Feedback typing will set the representation.)
927 SetOutput(node, output); 930 SetOutput(node, output);
928 931
929 int values = node->op()->ValueInputCount(); 932 int values = node->op()->ValueInputCount();
930 if (lower()) { 933 if (lower()) {
931 // Update the phi operator. 934 // Update the phi operator.
932 if (output != PhiRepresentationOf(node->op())) { 935 if (output != PhiRepresentationOf(node->op())) {
933 NodeProperties::ChangeOp(node, lowering->common()->Phi(output, values)); 936 NodeProperties::ChangeOp(node, lowering->common()->Phi(output, values));
934 } 937 }
935 } 938 }
936 939
937 // Convert inputs to the output representation of this phi, pass the 940 // Convert inputs to the output representation of this phi, pass the
938 // truncation along. 941 // truncation along.
942 if (output == MachineRepresentation::kTagged) {
943 truncation = Truncation::Any();
944 }
939 UseInfo input_use(output, truncation); 945 UseInfo input_use(output, truncation);
940 for (int i = 0; i < node->InputCount(); i++) { 946 for (int i = 0; i < node->InputCount(); i++) {
941 ProcessInput(node, i, i < values ? input_use : UseInfo::None()); 947 ProcessInput(node, i, i < values ? input_use : UseInfo::None());
942 } 948 }
943 } 949 }
944 950
945 void VisitCall(Node* node, SimplifiedLowering* lowering) { 951 void VisitCall(Node* node, SimplifiedLowering* lowering) {
946 const CallDescriptor* desc = CallDescriptorOf(node->op()); 952 const CallDescriptor* desc = CallDescriptorOf(node->op());
947 int params = static_cast<int>(desc->ParameterCount()); 953 int params = static_cast<int>(desc->ParameterCount());
948 int value_input_count = node->op()->ValueInputCount(); 954 int value_input_count = node->op()->ValueInputCount();
(...skipping 1459 matching lines...) Expand 10 before | Expand all | Expand 10 after
2408 return; 2414 return;
2409 case IrOpcode::kStateValues: 2415 case IrOpcode::kStateValues:
2410 return VisitStateValues(node); 2416 return VisitStateValues(node);
2411 case IrOpcode::kTypeGuard: { 2417 case IrOpcode::kTypeGuard: {
2412 // We just get rid of the sigma here. In principle, it should be 2418 // We just get rid of the sigma here. In principle, it should be
2413 // possible to refine the truncation and representation based on 2419 // possible to refine the truncation and representation based on
2414 // the sigma's type. 2420 // the sigma's type.
2415 MachineRepresentation output = 2421 MachineRepresentation output =
2416 GetOutputInfoForPhi(node, TypeOf(node->InputAt(0)), truncation); 2422 GetOutputInfoForPhi(node, TypeOf(node->InputAt(0)), truncation);
2417 2423
2424 if (output == MachineRepresentation::kTagged) {
2425 truncation = Truncation::Any();
2426 }
2418 VisitUnop(node, UseInfo(output, truncation), output); 2427 VisitUnop(node, UseInfo(output, truncation), output);
2419 if (lower()) DeferReplacement(node, node->InputAt(0)); 2428 if (lower()) DeferReplacement(node, node->InputAt(0));
2420 return; 2429 return;
2421 } 2430 }
2422 2431
2423 // Operators with all inputs tagged and no or tagged output have uniform 2432 // Operators with all inputs tagged and no or tagged output have uniform
2424 // handling. 2433 // handling.
2425 case IrOpcode::kEnd: 2434 case IrOpcode::kEnd:
2426 case IrOpcode::kReturn: 2435 case IrOpcode::kReturn:
2427 case IrOpcode::kIfSuccess: 2436 case IrOpcode::kIfSuccess:
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after
3194 isolate(), graph()->zone(), callable.descriptor(), 0, flags, 3203 isolate(), graph()->zone(), callable.descriptor(), 0, flags,
3195 Operator::kNoProperties); 3204 Operator::kNoProperties);
3196 to_number_operator_.set(common()->Call(desc)); 3205 to_number_operator_.set(common()->Call(desc));
3197 } 3206 }
3198 return to_number_operator_.get(); 3207 return to_number_operator_.get();
3199 } 3208 }
3200 3209
3201 } // namespace compiler 3210 } // namespace compiler
3202 } // namespace internal 3211 } // namespace internal
3203 } // namespace v8 3212 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/compiler/regress-644048.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698