Index: src/hydrogen-instructions.cc |
diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc |
index c17cfd9d4230642f727650a0a86ae6b6fe203572..a3a8fcb3031311e73ed9c52f22e7d0a463fa2cfe 100644 |
--- a/src/hydrogen-instructions.cc |
+++ b/src/hydrogen-instructions.cc |
@@ -2613,6 +2613,41 @@ void HConstant::Initialize(Representation r) { |
} |
+bool HConstant::ImmortalImmovable() const { |
+ if (has_int32_value_) { |
+ return false; |
+ } |
+ if (has_double_value_) { |
+ if (IsSpecialDouble()) { |
+ return true; |
+ } |
+ return false; |
+ } |
+ if (has_external_reference_value_) { |
+ return false; |
+ } |
+ |
+ ASSERT(!object_.handle().is_null()); |
+ Heap* heap = isolate()->heap(); |
+ ASSERT(!object_.IsKnownGlobal(heap->minus_zero_value())); |
+ ASSERT(!object_.IsKnownGlobal(heap->nan_value())); |
+ return |
+#define IMMORTAL_IMMOVABLE_ROOT(name) \ |
+ object_.IsKnownGlobal(heap->name()) || |
+ IMMORTAL_IMMOVABLE_ROOT_LIST(IMMORTAL_IMMOVABLE_ROOT) |
+#undef IMMORTAL_IMMOVABLE_ROOT |
+#define INTERNALIZED_STRING(name, value) \ |
+ object_.IsKnownGlobal(heap->name()) || |
+ INTERNALIZED_STRING_LIST(INTERNALIZED_STRING) |
+#undef INTERNALIZED_STRING |
+#define STRING_TYPE(NAME, size, name, Name) \ |
+ object_.IsKnownGlobal(heap->name##_map()) || |
+ STRING_TYPE_LIST(STRING_TYPE) |
+#undef STRING_TYPE |
+ false; |
+} |
+ |
+ |
bool HConstant::EmitAtUses() { |
ASSERT(IsLinked()); |
if (block()->graph()->has_osr() && |