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

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

Issue 2082993002: [turbofan] Address the useless overflow bit materialization. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 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
« 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 1073 matching lines...) Expand 10 before | Expand all | Expand 10 after
1084 Node* effect = NodeProperties::GetEffectInput(node); 1084 Node* effect = NodeProperties::GetEffectInput(node);
1085 ReplaceEffectControlUses(node, effect, control); 1085 ReplaceEffectControlUses(node, effect, control);
1086 node->TrimInputCount(new_op->ValueInputCount()); 1086 node->TrimInputCount(new_op->ValueInputCount());
1087 } else { 1087 } else {
1088 DCHECK_EQ(0, node->op()->ControlInputCount()); 1088 DCHECK_EQ(0, node->op()->ControlInputCount());
1089 } 1089 }
1090 1090
1091 NodeProperties::ChangeOp(node, new_op); 1091 NodeProperties::ChangeOp(node, new_op);
1092 } 1092 }
1093 1093
1094 void ChangeToInt32OverflowOp(Node* node, const Operator* op) { 1094 void ChangeToInt32OverflowOp(Node* node, const Operator* new_op) {
1095 Node* effect = NodeProperties::GetEffectInput(node); 1095 NodeProperties::ChangeOp(node, new_op);
1096 Node* control = NodeProperties::GetControlInput(node);
1097 Node* arith = graph()->NewNode(op, node->InputAt(0), node->InputAt(1));
1098 Node* overflow = graph()->NewNode(common()->Projection(1), arith);
1099 effect =
1100 graph()->NewNode(simplified()->CheckIf(), overflow, effect, control);
1101 Node* value = graph()->NewNode(common()->Projection(0), arith);
1102 ReplaceEffectControlUses(node, effect, control);
1103 DeferReplacement(node, value);
1104 } 1096 }
1105 1097
1106 void VisitSpeculativeAdditiveOp(Node* node, Truncation truncation, 1098 void VisitSpeculativeAdditiveOp(Node* node, Truncation truncation,
1107 SimplifiedLowering* lowering) { 1099 SimplifiedLowering* lowering) {
1108 if (BothInputsAre(node, type_cache_.kSigned32OrMinusZero) && 1100 if (BothInputsAre(node, type_cache_.kSigned32OrMinusZero) &&
1109 NodeProperties::GetType(node)->Is(Type::Signed32())) { 1101 NodeProperties::GetType(node)->Is(Type::Signed32())) {
1110 // int32 + int32 = int32 ==> signed Int32Add/Sub 1102 // int32 + int32 = int32 ==> signed Int32Add/Sub
1111 VisitInt32Binop(node); 1103 VisitInt32Binop(node);
1112 if (lower()) ChangeToPureOp(node, Int32Op(node)); 1104 if (lower()) ChangeToPureOp(node, Int32Op(node));
1113 return; 1105 return;
(...skipping 907 matching lines...) Expand 10 before | Expand all | Expand 10 after
2021 case IrOpcode::kStateValues: 2013 case IrOpcode::kStateValues:
2022 return VisitStateValues(node); 2014 return VisitStateValues(node);
2023 2015
2024 // The following opcodes are not produced before representation 2016 // The following opcodes are not produced before representation
2025 // inference runs, so we do not have any real test coverage. 2017 // inference runs, so we do not have any real test coverage.
2026 // Simply fail here. 2018 // Simply fail here.
2027 case IrOpcode::kChangeFloat64ToInt32: 2019 case IrOpcode::kChangeFloat64ToInt32:
2028 case IrOpcode::kChangeFloat64ToUint32: 2020 case IrOpcode::kChangeFloat64ToUint32:
2029 case IrOpcode::kTruncateInt64ToInt32: 2021 case IrOpcode::kTruncateInt64ToInt32:
2030 case IrOpcode::kChangeFloat32ToFloat64: 2022 case IrOpcode::kChangeFloat32ToFloat64:
2023 case IrOpcode::kCheckedInt32Add:
2024 case IrOpcode::kCheckedInt32Sub:
2031 case IrOpcode::kCheckedUint32ToInt32: 2025 case IrOpcode::kCheckedUint32ToInt32:
2032 case IrOpcode::kCheckedFloat64ToInt32: 2026 case IrOpcode::kCheckedFloat64ToInt32:
2033 case IrOpcode::kCheckedTaggedToInt32: 2027 case IrOpcode::kCheckedTaggedToInt32:
2034 case IrOpcode::kCheckedTaggedToFloat64: 2028 case IrOpcode::kCheckedTaggedToFloat64:
2035 case IrOpcode::kPlainPrimitiveToWord32: 2029 case IrOpcode::kPlainPrimitiveToWord32:
2036 case IrOpcode::kPlainPrimitiveToFloat64: 2030 case IrOpcode::kPlainPrimitiveToFloat64:
2037 FATAL("Representation inference: unsupported opcodes."); 2031 FATAL("Representation inference: unsupported opcodes.");
2038 break; 2032 break;
2039 2033
2040 default: 2034 default:
(...skipping 1015 matching lines...) Expand 10 before | Expand all | Expand 10 after
3056 isolate(), graph()->zone(), callable.descriptor(), 0, flags, 3050 isolate(), graph()->zone(), callable.descriptor(), 0, flags,
3057 Operator::kNoProperties); 3051 Operator::kNoProperties);
3058 to_number_operator_.set(common()->Call(desc)); 3052 to_number_operator_.set(common()->Call(desc));
3059 } 3053 }
3060 return to_number_operator_.get(); 3054 return to_number_operator_.get();
3061 } 3055 }
3062 3056
3063 } // namespace compiler 3057 } // namespace compiler
3064 } // namespace internal 3058 } // namespace internal
3065 } // namespace v8 3059 } // 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