Revision: 19790
Author: [email protected]
Date: Tue Mar 11 11:36:55 2014 UTC
Log: Make sure tagged binary op instructions change new space
promotion.
BUG=
[email protected]
Review URL: https://codereview.chromium.org/194883003
http://code.google.com/p/v8/source/detail?r=19790
Modified:
/branches/bleeding_edge/src/hydrogen-instructions.h
/branches/bleeding_edge/test/cctest/test-heap.cc
=======================================
--- /branches/bleeding_edge/src/hydrogen-instructions.h Mon Mar 10 14:50:01
2014 UTC
+++ /branches/bleeding_edge/src/hydrogen-instructions.h Tue Mar 11 11:36:55
2014 UTC
@@ -4049,7 +4049,6 @@
}
virtual void RepresentationChanged(Representation to) V8_OVERRIDE {
- if (to.IsTagged()) SetChangesFlag(kNewSpacePromotion);
if (to.IsTagged() &&
(left()->ToNumberCanBeObserved() ||
right()->ToNumberCanBeObserved())) {
SetAllSideEffects();
@@ -4058,6 +4057,7 @@
ClearAllSideEffects();
SetFlag(kUseGVN);
}
+ if (to.IsTagged()) SetChangesFlag(kNewSpacePromotion);
}
virtual void UpdateRepresentation(Representation new_rep,
@@ -4123,7 +4123,6 @@
}
virtual void RepresentationChanged(Representation to) V8_OVERRIDE {
- if (to.IsTagged()) SetChangesFlag(kNewSpacePromotion);
if (to.IsTagged() &&
(left()->ToNumberCanBeObserved() ||
right()->ToNumberCanBeObserved())) {
SetAllSideEffects();
@@ -4132,6 +4131,7 @@
ClearAllSideEffects();
SetFlag(kUseGVN);
}
+ if (to.IsTagged()) SetChangesFlag(kNewSpacePromotion);
}
DECLARE_ABSTRACT_INSTRUCTION(ArithmeticBinaryOperation)
@@ -4716,10 +4716,6 @@
}
virtual void RepresentationChanged(Representation to) V8_OVERRIDE {
- if (to.IsTagged()) {
- SetChangesFlag(kNewSpacePromotion);
- ClearFlag(kAllowUndefinedAsNaN);
- }
if (to.IsTagged() &&
(left()->ToNumberCanBeObserved() ||
right()->ToNumberCanBeObserved() ||
left()->ToStringCanBeObserved() ||
right()->ToStringCanBeObserved())) {
@@ -4729,6 +4725,10 @@
ClearAllSideEffects();
SetFlag(kUseGVN);
}
+ if (to.IsTagged()) {
+ SetChangesFlag(kNewSpacePromotion);
+ ClearFlag(kAllowUndefinedAsNaN);
+ }
}
virtual Representation RepresentationFromInputs() V8_OVERRIDE;
=======================================
--- /branches/bleeding_edge/test/cctest/test-heap.cc Sat Mar 8 04:41:06
2014 UTC
+++ /branches/bleeding_edge/test/cctest/test-heap.cc Tue Mar 11 11:36:55
2014 UTC
@@ -3697,3 +3697,45 @@
ASSERT(code->marked_for_deoptimization());
}
+
+
+TEST(AddInstructionChangesNewSpacePromotion) {
+ i::FLAG_allow_natives_syntax = true;
+ i::FLAG_expose_gc = true;
+ i::FLAG_stress_compaction = true;
+ i::FLAG_gc_interval = 1000;
+ CcTest::InitializeVM();
+ if (!i::FLAG_allocation_site_pretenuring) return;
+ v8::HandleScope scope(CcTest::isolate());
+ Isolate* isolate = CcTest::i_isolate();
+ Heap* heap = isolate->heap();
+
+ CompileRun(
+ "function add(a, b) {"
+ " return a + b;"
+ "}"
+ "add(1, 2);"
+ "add(\"a\", \"b\");"
+ "var oldSpaceObject;"
+ "gc();"
+ "function crash(x) {"
+ " var object = {a: null, b: null};"
+ " var result = add(1.5, x | 0);"
+ " object.a = result;"
+ " oldSpaceObject = object;"
+ " return object;"
+ "}"
+ "crash(1);"
+ "crash(1);"
+ "%OptimizeFunctionOnNextCall(crash);"
+ "crash(1);");
+
+ v8::Handle<v8::Object> global = CcTest::global();
+ v8::Handle<v8::Function> g =
+ v8::Handle<v8::Function>::Cast(global->Get(v8_str("crash")));
+ v8::Handle<v8::Value> args1[] = { v8_num(1) };
+ heap->DisableInlineAllocation();
+ heap->set_allocation_timeout(1);
+ g->Call(global, 1, args1);
+ heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
+}
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.