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

Side by Side Diff: src/compiler/typer.cc

Issue 1491223002: [turbofan] Desugar JSUnaryNot(x) to Select(x, false, true). (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix typo in arm64. Created 5 years 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/opcodes.h ('k') | src/compiler/verifier.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 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/typer.h" 5 #include "src/compiler/typer.h"
6 6
7 #include "src/base/flags.h" 7 #include "src/base/flags.h"
8 #include "src/bootstrapper.h" 8 #include "src/bootstrapper.h"
9 #include "src/compilation-dependencies.h" 9 #include "src/compilation-dependencies.h"
10 #include "src/compiler/common-operator.h" 10 #include "src/compiler/common-operator.h"
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 static Type* JSMultiplyRanger(Type::RangeType*, Type::RangeType*, Typer*); 248 static Type* JSMultiplyRanger(Type::RangeType*, Type::RangeType*, Typer*);
249 static Type* JSDivideRanger(Type::RangeType*, Type::RangeType*, Typer*); 249 static Type* JSDivideRanger(Type::RangeType*, Type::RangeType*, Typer*);
250 static Type* JSModulusRanger(Type::RangeType*, Type::RangeType*, Typer*); 250 static Type* JSModulusRanger(Type::RangeType*, Type::RangeType*, Typer*);
251 251
252 static ComparisonOutcome JSCompareTyper(Type*, Type*, Typer*); 252 static ComparisonOutcome JSCompareTyper(Type*, Type*, Typer*);
253 253
254 #define DECLARE_METHOD(x) static Type* x##Typer(Type*, Type*, Typer*); 254 #define DECLARE_METHOD(x) static Type* x##Typer(Type*, Type*, Typer*);
255 JS_SIMPLE_BINOP_LIST(DECLARE_METHOD) 255 JS_SIMPLE_BINOP_LIST(DECLARE_METHOD)
256 #undef DECLARE_METHOD 256 #undef DECLARE_METHOD
257 257
258 static Type* JSUnaryNotTyper(Type*, Typer*);
259 static Type* JSTypeOfTyper(Type*, Typer*); 258 static Type* JSTypeOfTyper(Type*, Typer*);
260 static Type* JSLoadPropertyTyper(Type*, Type*, Typer*); 259 static Type* JSLoadPropertyTyper(Type*, Type*, Typer*);
261 static Type* JSCallFunctionTyper(Type*, Typer*); 260 static Type* JSCallFunctionTyper(Type*, Typer*);
262 261
263 static Type* ReferenceEqualTyper(Type*, Type*, Typer*); 262 static Type* ReferenceEqualTyper(Type*, Type*, Typer*);
264 263
265 Reduction UpdateType(Node* node, Type* current) { 264 Reduction UpdateType(Node* node, Type* current) {
266 if (NodeProperties::IsTyped(node)) { 265 if (NodeProperties::IsTyped(node)) {
267 // Widen the type of a previously typed node. 266 // Widen the type of a previously typed node.
268 Type* previous = NodeProperties::GetType(node); 267 Type* previous = NodeProperties::GetType(node);
(...skipping 867 matching lines...) Expand 10 before | Expand all | Expand 10 after
1136 if (lhs->IsRange() && rhs->IsRange()) { 1135 if (lhs->IsRange() && rhs->IsRange()) {
1137 return JSModulusRanger(lhs->AsRange(), rhs->AsRange(), t); 1136 return JSModulusRanger(lhs->AsRange(), rhs->AsRange(), t);
1138 } 1137 }
1139 return Type::OrderedNumber(); 1138 return Type::OrderedNumber();
1140 } 1139 }
1141 1140
1142 1141
1143 // JS unary operators. 1142 // JS unary operators.
1144 1143
1145 1144
1146 Type* Typer::Visitor::JSUnaryNotTyper(Type* type, Typer* t) {
1147 return Invert(ToBoolean(type, t), t);
1148 }
1149
1150
1151 Type* Typer::Visitor::TypeJSUnaryNot(Node* node) {
1152 return TypeUnaryOp(node, JSUnaryNotTyper);
1153 }
1154
1155
1156 Type* Typer::Visitor::JSTypeOfTyper(Type* type, Typer* t) { 1145 Type* Typer::Visitor::JSTypeOfTyper(Type* type, Typer* t) {
1157 Factory* const f = t->isolate()->factory(); 1146 Factory* const f = t->isolate()->factory();
1158 if (type->Is(Type::Boolean())) { 1147 if (type->Is(Type::Boolean())) {
1159 return Type::Constant(f->boolean_string(), t->zone()); 1148 return Type::Constant(f->boolean_string(), t->zone());
1160 } else if (type->Is(Type::Number())) { 1149 } else if (type->Is(Type::Number())) {
1161 return Type::Constant(f->number_string(), t->zone()); 1150 return Type::Constant(f->number_string(), t->zone());
1162 } else if (type->Is(Type::String())) { 1151 } else if (type->Is(Type::String())) {
1163 return Type::Constant(f->string_string(), t->zone()); 1152 return Type::Constant(f->string_string(), t->zone());
1164 } else if (type->Is(Type::Symbol())) { 1153 } else if (type->Is(Type::Symbol())) {
1165 return Type::Constant(f->symbol_string(), t->zone()); 1154 return Type::Constant(f->symbol_string(), t->zone());
(...skipping 1251 matching lines...) Expand 10 before | Expand all | Expand 10 after
2417 } 2406 }
2418 if (Type::IsInteger(*value)) { 2407 if (Type::IsInteger(*value)) {
2419 return Type::Range(value->Number(), value->Number(), zone()); 2408 return Type::Range(value->Number(), value->Number(), zone());
2420 } 2409 }
2421 return Type::Constant(value, zone()); 2410 return Type::Constant(value, zone());
2422 } 2411 }
2423 2412
2424 } // namespace compiler 2413 } // namespace compiler
2425 } // namespace internal 2414 } // namespace internal
2426 } // namespace v8 2415 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/opcodes.h ('k') | src/compiler/verifier.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698