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

Unified Diff: src/crankshaft/hydrogen.cc

Issue 1681813004: Drop null/undefined check if we already check for IsUndetectable in BuildCompareNil (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Minor cleanup Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/code-stubs.cc ('k') | src/ic/ic.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/crankshaft/hydrogen.cc
diff --git a/src/crankshaft/hydrogen.cc b/src/crankshaft/hydrogen.cc
index cc369e29a0b36e4963479e9751a1da76ef4dd3c4..30900b030082d3216456e4a59fd2445e7b9b0f6a 100644
--- a/src/crankshaft/hydrogen.cc
+++ b/src/crankshaft/hydrogen.cc
@@ -687,33 +687,28 @@ HConstant* HGraph::GetConstantBool(bool value) {
return value ? GetConstantTrue() : GetConstantFalse();
}
-
-#define DEFINE_GET_CONSTANT(Name, name, type, htype, boolean_value) \
-HConstant* HGraph::GetConstant##Name() { \
- if (!constant_##name##_.is_set()) { \
- HConstant* constant = new(zone()) HConstant( \
- Unique<Object>::CreateImmovable(isolate()->factory()->name##_value()), \
- Unique<Map>::CreateImmovable(isolate()->factory()->type##_map()), \
- false, \
- Representation::Tagged(), \
- htype, \
- true, \
- boolean_value, \
- false, \
- ODDBALL_TYPE); \
- constant->InsertAfter(entry_block()->first()); \
- constant_##name##_.set(constant); \
- } \
- return ReinsertConstantIfNecessary(constant_##name##_.get()); \
-}
-
-
-DEFINE_GET_CONSTANT(Undefined, undefined, undefined, HType::Undefined(), false)
-DEFINE_GET_CONSTANT(True, true, boolean, HType::Boolean(), true)
-DEFINE_GET_CONSTANT(False, false, boolean, HType::Boolean(), false)
-DEFINE_GET_CONSTANT(Hole, the_hole, the_hole, HType::None(), false)
-DEFINE_GET_CONSTANT(Null, null, null, HType::Null(), false)
-
+#define DEFINE_GET_CONSTANT(Name, name, type, htype, boolean_value, \
+ undetectable) \
+ HConstant* HGraph::GetConstant##Name() { \
+ if (!constant_##name##_.is_set()) { \
+ HConstant* constant = new (zone()) HConstant( \
+ Unique<Object>::CreateImmovable( \
+ isolate()->factory()->name##_value()), \
+ Unique<Map>::CreateImmovable(isolate()->factory()->type##_map()), \
+ false, Representation::Tagged(), htype, true, boolean_value, \
+ undetectable, ODDBALL_TYPE); \
+ constant->InsertAfter(entry_block()->first()); \
+ constant_##name##_.set(constant); \
+ } \
+ return ReinsertConstantIfNecessary(constant_##name##_.get()); \
+ }
+
+DEFINE_GET_CONSTANT(Undefined, undefined, undefined, HType::Undefined(), false,
+ true)
+DEFINE_GET_CONSTANT(True, true, boolean, HType::Boolean(), true, false)
+DEFINE_GET_CONSTANT(False, false, boolean, HType::Boolean(), false, false)
+DEFINE_GET_CONSTANT(Hole, the_hole, the_hole, HType::None(), false, false)
+DEFINE_GET_CONSTANT(Null, null, null, HType::Null(), false, true)
#undef DEFINE_GET_CONSTANT
@@ -3179,37 +3174,24 @@ void HGraphBuilder::BuildCompareNil(HValue* value, Type* type,
HIfContinuation* continuation,
MapEmbedding map_embedding) {
IfBuilder if_nil(this);
- bool some_case_handled = false;
- bool some_case_missing = false;
-
- if (type->Maybe(Type::Null())) {
- if (some_case_handled) if_nil.Or();
- if_nil.If<HCompareObjectEqAndBranch>(value, graph()->GetConstantNull());
- some_case_handled = true;
- } else {
- some_case_missing = true;
- }
-
- if (type->Maybe(Type::Undefined())) {
- if (some_case_handled) if_nil.Or();
- if_nil.If<HCompareObjectEqAndBranch>(value,
- graph()->GetConstantUndefined());
- some_case_handled = true;
- } else {
- some_case_missing = true;
- }
if (type->Maybe(Type::Undetectable())) {
- if (some_case_handled) if_nil.Or();
if_nil.If<HIsUndetectableAndBranch>(value);
- some_case_handled = true;
} else {
- some_case_missing = true;
- }
+ bool maybe_null = type->Maybe(Type::Null());
+ if (maybe_null) {
+ if_nil.If<HCompareObjectEqAndBranch>(value, graph()->GetConstantNull());
+ }
+
+ if (type->Maybe(Type::Undefined())) {
+ if (maybe_null) if_nil.Or();
+ if_nil.If<HCompareObjectEqAndBranch>(value,
+ graph()->GetConstantUndefined());
+ }
- if (some_case_missing) {
if_nil.Then();
if_nil.Else();
+
if (type->NumClasses() == 1) {
BuildCheckHeapObject(value);
// For ICs, the map checked below is a sentinel map that gets replaced by
« no previous file with comments | « src/code-stubs.cc ('k') | src/ic/ic.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698