Reviewers: Benedikt Meurer,
Description:
Remove obsolete Code::optimizable flag.
This flag mostly duplicates SharedFunctionInfo::optimization_disabled
and is only queried in places where the original is available. Remove
the brittle and error-prone duplication.
R=bmeu...@chromium.org
Please review this at https://codereview.chromium.org/1148043002/
Base URL: https://chromium.googlesource.com/v8/v8.git@master
Affected files (+23, -60 lines):
M src/compiler.cc
M src/full-codegen.cc
M src/log.cc
M src/objects.h
M src/objects.cc
M src/objects-inl.h
M src/runtime-profiler.cc
M src/runtime/runtime-compiler.cc
M src/runtime/runtime-test.cc
Index: src/compiler.cc
diff --git a/src/compiler.cc b/src/compiler.cc
index
1517cdb1ec1bc72e9e2c4839cfdb10b30ad07767..432369f7b1c7f4e02869450697eb11ab6df097d3
100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -675,7 +675,6 @@ MUST_USE_RESULT static MaybeHandle<Code>
GetUnoptimizedCodeCommon(
// Update the code and feedback vector for the shared function info.
shared->ReplaceCode(*info->code());
- if (shared->optimization_disabled())
info->code()->set_optimizable(false);
shared->set_feedback_vector(*info->feedback_vector());
return info->code();
Index: src/full-codegen.cc
diff --git a/src/full-codegen.cc b/src/full-codegen.cc
index
b1eae719247486b8fcda1e26d0b4f4bb7cbe7278..66c790b7c98b2486840013fb9a2e38c16dc2a9a9
100644
--- a/src/full-codegen.cc
+++ b/src/full-codegen.cc
@@ -310,9 +310,6 @@ bool FullCodeGenerator::MakeCode(CompilationInfo* info)
{
Code::Flags flags = Code::ComputeFlags(Code::FUNCTION);
Handle<Code> code = CodeGenerator::MakeCodeEpilogue(&masm, flags, info);
- code->set_optimizable(info->IsOptimizable() &&
- !info->function()->dont_optimize() &&
-
info->function()->scope()->AllowsLazyCompilation());
cgen.PopulateDeoptimizationData(code);
cgen.PopulateTypeFeedbackInfo(code);
code->set_has_deoptimization_support(info->HasDeoptimizationSupport());
Index: src/log.cc
diff --git a/src/log.cc b/src/log.cc
index
de99a774cbf71ad1347f44d0bcf5eea96507f695..241b446ebdb02fad626861229af186a5ee62aec2
100644
--- a/src/log.cc
+++ b/src/log.cc
@@ -48,12 +48,14 @@ for (int i = 0; i < listeners_.length(); ++i) { \
} \
} while (false);
-// ComputeMarker must only be used when SharedFunctionInfo is known.
-static const char* ComputeMarker(Code* code) {
+static const char* ComputeMarker(SharedFunctionInfo* shared, Code* code) {
switch (code->kind()) {
- case Code::FUNCTION: return code->optimizable() ? "~" : "";
- case Code::OPTIMIZED_FUNCTION: return "*";
- default: return "";
+ case Code::FUNCTION:
+ return shared->optimization_disabled() ? "" : "~";
+ case Code::OPTIMIZED_FUNCTION:
+ return "*";
+ default:
+ return "";
}
}
@@ -183,7 +185,7 @@ void
CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag,
CompilationInfo* info,
Name* name) {
name_buffer_->Init(tag);
- name_buffer_->AppendBytes(ComputeMarker(code));
+ name_buffer_->AppendBytes(ComputeMarker(shared, code));
name_buffer_->AppendName(name);
LogRecordedBuffer(code, shared, name_buffer_->get(),
name_buffer_->size());
}
@@ -195,7 +197,7 @@ void
CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag,
CompilationInfo* info,
Name* source, int line, int column) {
name_buffer_->Init(tag);
- name_buffer_->AppendBytes(ComputeMarker(code));
+ name_buffer_->AppendBytes(ComputeMarker(shared, code));
name_buffer_->AppendString(shared->DebugName());
name_buffer_->AppendByte(' ');
if (source->IsString()) {
@@ -1199,7 +1201,7 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
}
msg.Append(',');
msg.AppendAddress(shared->address());
- msg.Append(",%s", ComputeMarker(code));
+ msg.Append(",%s", ComputeMarker(shared, code));
msg.WriteToLogFile();
}
@@ -1233,7 +1235,7 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
}
msg.Append(":%d:%d\",", line, column);
msg.AppendAddress(shared->address());
- msg.Append(",%s", ComputeMarker(code));
+ msg.Append(",%s", ComputeMarker(shared, code));
msg.WriteToLogFile();
}
Index: src/objects-inl.h
diff --git a/src/objects-inl.h b/src/objects-inl.h
index
fbef269b3b2e8eb69f9c69c54d2da05c03da43fa..73b2d4a06ae3800eba8a794ef958c41e52edb98b
100644
--- a/src/objects-inl.h
+++ b/src/objects-inl.h
@@ -4918,18 +4918,6 @@ inline void Code::set_can_have_weak_objects(bool
value) {
}
-bool Code::optimizable() {
- DCHECK_EQ(FUNCTION, kind());
- return READ_BYTE_FIELD(this, kOptimizableOffset) == 1;
-}
-
-
-void Code::set_optimizable(bool value) {
- DCHECK_EQ(FUNCTION, kind());
- WRITE_BYTE_FIELD(this, kOptimizableOffset, value ? 1 : 0);
-}
-
-
bool Code::has_deoptimization_support() {
DCHECK_EQ(FUNCTION, kind());
byte flags = READ_BYTE_FIELD(this, kFullCodeFlags);
@@ -5741,11 +5729,6 @@ void
SharedFunctionInfo::set_optimization_disabled(bool disable) {
set_compiler_hints(BooleanBit::set(compiler_hints(),
kOptimizationDisabled,
disable));
- // If disabling optimizations we reflect that in the code object so
- // it will not be counted as optimizable code.
- if ((code()->kind() == Code::FUNCTION) && disable) {
- code()->set_optimizable(false);
- }
}
@@ -5987,7 +5970,6 @@ void SharedFunctionInfo::TryReenableOptimization() {
set_optimization_disabled(false);
set_opt_count(0);
set_deopt_count(0);
- code()->set_optimizable(true);
}
}
@@ -6025,7 +6007,7 @@ bool JSFunction::IsOptimized() {
bool JSFunction::IsOptimizable() {
- return code()->kind() == Code::FUNCTION && code()->optimizable();
+ return code()->kind() == Code::FUNCTION
&& !shared()->optimization_disabled();
}
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index
28670a94f758aa7d00054ee3514101cf65a04ef3..ea67e2cbe672eda297ee79a5c859bdf90d73cddf
100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -9807,7 +9807,7 @@ void JSFunction::JSFunctionIterateBody(int
object_size, ObjectVisitor* v) {
void JSFunction::MarkForOptimization() {
Isolate* isolate = GetIsolate();
DCHECK(!IsOptimized());
- DCHECK(shared()->allows_lazy_compilation() || code()->optimizable());
+ DCHECK(shared()->allows_lazy_compilation() || IsOptimizable());
set_code_no_write_barrier(
isolate->builtins()->builtin(Builtins::kCompileOptimized));
// No write barrier required, since the builtin is part of the root set.
@@ -9831,7 +9831,7 @@ void JSFunction::AttemptConcurrentOptimization() {
}
DCHECK(!IsInOptimizationQueue());
DCHECK(!IsOptimized());
- DCHECK(shared()->allows_lazy_compilation() || code()->optimizable());
+ DCHECK(shared()->allows_lazy_compilation() || IsOptimizable());
DCHECK(isolate->concurrent_recompilation_enabled());
if (FLAG_trace_concurrent_recompilation) {
PrintF(" ** Marking ");
@@ -10729,10 +10729,7 @@ Handle<Object> SharedFunctionInfo::GetSourceCode()
{
bool SharedFunctionInfo::IsInlineable() {
// Check that the function has a script associated with it.
if (!script()->IsScript()) return false;
- if (optimization_disabled()) return false;
- // If we never ran this (unlikely) then lets try to optimize it.
- if (code()->kind() != Code::FUNCTION) return true;
- return code()->optimizable();
+ return !optimization_disabled();
}
@@ -10834,12 +10831,8 @@ void
SharedFunctionInfo::DisableOptimization(BailoutReason reason) {
DCHECK(reason != kNoReason);
set_optimization_disabled(true);
set_disable_optimization_reason(reason);
- // Code should be the lazy compilation stub or else unoptimized. If the
- // latter, disable optimization for the code too.
+ // Code should be the lazy compilation stub or else unoptimized.
DCHECK(code()->kind() == Code::FUNCTION || code()->kind() ==
Code::BUILTIN);
- if (code()->kind() == Code::FUNCTION) {
- code()->set_optimizable(false);
- }
PROFILE(GetIsolate(), CodeDisableOptEvent(code(), this));
if (FLAG_trace_opt) {
PrintF("[disabled optimization for ");
@@ -10921,7 +10914,6 @@ void SharedFunctionInfo::ResetForNewContext(int
new_ic_age) {
opt_count() >= FLAG_max_opt_count) {
// Re-enable optimizations if they were disabled due to opt_count
limit.
set_optimization_disabled(false);
- code()->set_optimizable(true);
}
set_opt_count(0);
set_deopt_count(0);
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index
9aec541d7e04b901cb0822e0dc872ed5d0012170..2889259822bd69dc3960202dd7b4a57b4c701dd6
100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -5341,10 +5341,6 @@ class Code: public HeapObject {
inline bool can_have_weak_objects();
inline void set_can_have_weak_objects(bool value);
- // [optimizable]: For FUNCTION kind, tells if it is optimizable.
- inline bool optimizable();
- inline void set_optimizable(bool value);
-
// [has_deoptimization_support]: For FUNCTION kind, tells if it has
// deoptimization support.
inline bool has_deoptimization_support();
@@ -5650,9 +5646,7 @@ class Code: public HeapObject {
STATIC_ASSERT((kConstantPoolOffset & kPointerAlignmentMask) == 0);
// Byte offsets within kKindSpecificFlags1Offset.
- static const int kOptimizableOffset = kKindSpecificFlags1Offset;
-
- static const int kFullCodeFlags = kOptimizableOffset + 1;
+ static const int kFullCodeFlags = kKindSpecificFlags1Offset;
class FullCodeFlagsHasDeoptimizationSupportField:
public BitField<bool, 0, 1> {}; // NOLINT
class FullCodeFlagsHasDebugBreakSlotsField: public BitField<bool, 1, 1>
{};
Index: src/runtime-profiler.cc
diff --git a/src/runtime-profiler.cc b/src/runtime-profiler.cc
index
5e5b57ced238e88a5f0da1dbf3e7e1c60f63034b..22567d3b90576be19f829e6a55ea33c5b4d68e53
100644
--- a/src/runtime-profiler.cc
+++ b/src/runtime-profiler.cc
@@ -117,7 +117,7 @@ void
RuntimeProfiler::AttemptOnStackReplacement(JSFunction* function,
}
// If the code is not optimizable, don't try OSR.
- if (!shared->code()->optimizable()) return;
+ if (shared->optimization_disabled()) return;
// We are not prepared to do OSR for a function that already has an
// allocated arguments object. The optimized code would bypass it for
Index: src/runtime/runtime-compiler.cc
diff --git a/src/runtime/runtime-compiler.cc
b/src/runtime/runtime-compiler.cc
index
692768308135e3fdbe285814798d0cf50c5feddc..09ac2ab96b22ddb0d33dd24ab899fdaeabf1ad34
100644
--- a/src/runtime/runtime-compiler.cc
+++ b/src/runtime/runtime-compiler.cc
@@ -168,10 +168,9 @@ RUNTIME_FUNCTION(Runtime_NotifyDeoptimized) {
static bool IsSuitableForOnStackReplacement(Isolate* isolate,
- Handle<JSFunction> function,
- Handle<Code> current_code) {
+ Handle<JSFunction> function) {
// Keep track of whether we've succeeded in optimizing.
- if (!current_code->optimizable()) return false;
+ if (function->shared()->optimization_disabled()) return false;
// If we are trying to do OSR when there are already optimized
// activations of the function, it means (a) the function is directly or
// indirectly recursive and (b) an optimized invocation has been
@@ -253,7 +252,7 @@ RUNTIME_FUNCTION(Runtime_CompileForOnStackReplacement) {
PrintF(" at AST id %d]\n", ast_id.ToInt());
}
result = Compiler::GetConcurrentlyOptimizedCode(job);
- } else if (IsSuitableForOnStackReplacement(isolate, function,
caller_code)) {
+ } else if (IsSuitableForOnStackReplacement(isolate, function)) {
if (FLAG_trace_osr) {
PrintF("[OSR - Compiling: ");
function->PrintName();
Index: src/runtime/runtime-test.cc
diff --git a/src/runtime/runtime-test.cc b/src/runtime/runtime-test.cc
index
de42c4c76c89a721cff400748fff074e7d5c056a..e5d84d11913bc2d02d05599c578a489f53cd7c1e
100644
--- a/src/runtime/runtime-test.cc
+++ b/src/runtime/runtime-test.cc
@@ -86,8 +86,7 @@ RUNTIME_FUNCTION(Runtime_OptimizeFunctionOnNextCall) {
// The following assertion was lifted from the DCHECK inside
// JSFunction::MarkForOptimization().
RUNTIME_ASSERT(function->shared()->allows_lazy_compilation() ||
- (function->code()->kind() == Code::FUNCTION &&
- function->code()->optimizable()));
+ function->IsOptimizable());
// If the function is already optimized, just return.
if (function->IsOptimized()) return isolate->heap()->undefined_value();
@@ -131,8 +130,7 @@ RUNTIME_FUNCTION(Runtime_OptimizeOsr) {
// The following assertion was lifted from the DCHECK inside
// JSFunction::MarkForOptimization().
RUNTIME_ASSERT(function->shared()->allows_lazy_compilation() ||
- (function->code()->kind() == Code::FUNCTION &&
- function->code()->optimizable()));
+ function->IsOptimizable());
// If the function is already optimized, just return.
if (function->IsOptimized()) return isolate->heap()->undefined_value();
--
--
v8-dev mailing list
v8-dev@googlegroups.com
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 v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.