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

Unified Diff: runtime/vm/code_generator.cc

Issue 2481873005: clang-format runtime/vm (Closed)
Patch Set: Merge Created 4 years, 1 month 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 | « runtime/vm/code_generator.h ('k') | runtime/vm/code_generator_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/code_generator.cc
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 0c3b3a11b9864bba6c0728525180e83eb84b6532..ddbfbea8f021ef29bf8cc9c03bd824fff3d5b3b4 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -28,20 +28,34 @@
namespace dart {
-DEFINE_FLAG(int, max_subtype_cache_entries, 100,
+DEFINE_FLAG(
+ int,
+ max_subtype_cache_entries,
+ 100,
"Maximum number of subtype cache entries (number of checks cached).");
-DEFINE_FLAG(int, regexp_optimization_counter_threshold, 1000,
+DEFINE_FLAG(
+ int,
+ regexp_optimization_counter_threshold,
+ 1000,
"RegExp's usage-counter value before it is optimized, -1 means never");
-DEFINE_FLAG(int, reoptimization_counter_threshold, 4000,
- "Counter threshold before a function gets reoptimized.");
+DEFINE_FLAG(int,
+ reoptimization_counter_threshold,
+ 4000,
+ "Counter threshold before a function gets reoptimized.");
DEFINE_FLAG(bool, trace_deoptimization, false, "Trace deoptimization");
-DEFINE_FLAG(bool, trace_deoptimization_verbose, false,
- "Trace deoptimization verbose");
+DEFINE_FLAG(bool,
+ trace_deoptimization_verbose,
+ false,
+ "Trace deoptimization verbose");
DEFINE_FLAG(bool, trace_ic, false, "Trace IC handling");
-DEFINE_FLAG(bool, trace_ic_miss_in_optimized, false,
- "Trace IC miss in optimized code");
-DEFINE_FLAG(bool, trace_optimized_ic_calls, false,
- "Trace IC calls in optimized code.");
+DEFINE_FLAG(bool,
+ trace_ic_miss_in_optimized,
+ false,
+ "Trace IC miss in optimized code");
+DEFINE_FLAG(bool,
+ trace_optimized_ic_calls,
+ false,
+ "Trace IC calls in optimized code.");
DEFINE_FLAG(bool, trace_patching, false, "Trace patching of code.");
DEFINE_FLAG(bool, trace_runtime_calls, false, "Trace runtime calls");
DEFINE_FLAG(bool, trace_type_checks, false, "Trace runtime type checks.");
@@ -54,11 +68,17 @@ DECLARE_FLAG(int, max_polymorphic_checks);
DEFINE_FLAG(bool, trace_osr, false, "Trace attempts at on-stack replacement.");
-DEFINE_FLAG(int, stacktrace_every, 0,
+DEFINE_FLAG(int,
+ stacktrace_every,
+ 0,
"Compute debugger stacktrace on every N stack overflow checks");
-DEFINE_FLAG(charp, stacktrace_filter, NULL,
+DEFINE_FLAG(charp,
+ stacktrace_filter,
+ NULL,
"Compute stacktrace in named function on stack overflow checks");
-DEFINE_FLAG(charp, deoptimize_filter, NULL,
+DEFINE_FLAG(charp,
+ deoptimize_filter,
+ NULL,
"Deoptimize in named function on stack overflow checks");
DECLARE_FLAG(int, reload_every);
@@ -66,7 +86,9 @@ DECLARE_FLAG(bool, reload_every_optimized);
DECLARE_FLAG(bool, reload_every_back_off);
#ifdef DEBUG
-DEFINE_FLAG(charp, gc_at_instance_allocation, NULL,
+DEFINE_FLAG(charp,
+ gc_at_instance_allocation,
+ NULL,
"Perform a GC before allocation of instances of "
"the specified class");
#endif
@@ -76,8 +98,8 @@ DEFINE_RUNTIME_ENTRY(TraceFunctionEntry, 1) {
const String& function_name = String::Handle(function.name());
const String& class_name =
String::Handle(Class::Handle(function.Owner()).Name());
- OS::PrintErr("> Entering '%s.%s'\n",
- class_name.ToCString(), function_name.ToCString());
+ OS::PrintErr("> Entering '%s.%s'\n", class_name.ToCString(),
+ function_name.ToCString());
}
@@ -86,8 +108,8 @@ DEFINE_RUNTIME_ENTRY(TraceFunctionExit, 1) {
const String& function_name = String::Handle(function.name());
const String& class_name =
String::Handle(Class::Handle(function.Owner()).Name());
- OS::PrintErr("< Exiting '%s.%s'\n",
- class_name.ToCString(), function_name.ToCString());
+ OS::PrintErr("< Exiting '%s.%s'\n", class_name.ToCString(),
+ function_name.ToCString());
}
@@ -225,11 +247,11 @@ DEFINE_RUNTIME_ENTRY(InstantiateType, 2) {
if (!bound_error.IsNull()) {
// Throw a dynamic type error.
const TokenPosition location = GetCallerLocation();
- String& bound_error_message = String::Handle(
- zone, String::New(bound_error.ToErrorCString()));
- Exceptions::CreateAndThrowTypeError(
- location, AbstractType::Handle(zone), AbstractType::Handle(zone),
- Symbols::Empty(), bound_error_message);
+ String& bound_error_message =
+ String::Handle(zone, String::New(bound_error.ToErrorCString()));
+ Exceptions::CreateAndThrowTypeError(location, AbstractType::Handle(zone),
+ AbstractType::Handle(zone),
+ Symbols::Empty(), bound_error_message);
UNREACHABLE();
}
if (type.IsTypeRef()) {
@@ -258,14 +280,13 @@ DEFINE_RUNTIME_ENTRY(InstantiateTypeArguments, 2) {
ASSERT(instantiator.IsNull() || !type_arguments.IsUninstantiatedIdentity());
if (isolate->type_checks()) {
Error& bound_error = Error::Handle(zone);
- type_arguments =
- type_arguments.InstantiateAndCanonicalizeFrom(instantiator,
- &bound_error);
+ type_arguments = type_arguments.InstantiateAndCanonicalizeFrom(
+ instantiator, &bound_error);
if (!bound_error.IsNull()) {
// Throw a dynamic type error.
const TokenPosition location = GetCallerLocation();
- String& bound_error_message = String::Handle(
- zone, String::New(bound_error.ToErrorCString()));
+ String& bound_error_message =
+ String::Handle(zone, String::New(bound_error.ToErrorCString()));
Exceptions::CreateAndThrowTypeError(
location, AbstractType::Handle(zone), AbstractType::Handle(zone),
Symbols::Empty(), bound_error_message);
@@ -308,12 +329,11 @@ DEFINE_RUNTIME_ENTRY(CloneContext, 1) {
// Helper routine for tracing a type check.
-static void PrintTypeCheck(
- const char* message,
- const Instance& instance,
- const AbstractType& type,
- const TypeArguments& instantiator_type_arguments,
- const Bool& result) {
+static void PrintTypeCheck(const char* message,
+ const Instance& instance,
+ const AbstractType& type,
+ const TypeArguments& instantiator_type_arguments,
+ const Bool& result) {
DartFrameIterator iterator;
StackFrame* caller_frame = iterator.NextFrame();
ASSERT(caller_frame != NULL);
@@ -321,33 +341,29 @@ static void PrintTypeCheck(
const AbstractType& instance_type = AbstractType::Handle(instance.GetType());
ASSERT(instance_type.IsInstantiated());
if (type.IsInstantiated()) {
- OS::PrintErr("%s: '%s' %" Pd " %s '%s' %" Pd " (pc: %#" Px ").\n",
- message,
+ OS::PrintErr("%s: '%s' %" Pd " %s '%s' %" Pd " (pc: %#" Px ").\n", message,
String::Handle(instance_type.Name()).ToCString(),
Class::Handle(instance_type.type_class()).id(),
(result.raw() == Bool::True().raw()) ? "is" : "is !",
String::Handle(type.Name()).ToCString(),
- Class::Handle(type.type_class()).id(),
- caller_frame->pc());
+ Class::Handle(type.type_class()).id(), caller_frame->pc());
} else {
// Instantiate type before printing.
Error& bound_error = Error::Handle();
- const AbstractType& instantiated_type = AbstractType::Handle(
- type.InstantiateFrom(instantiator_type_arguments, &bound_error,
- NULL, NULL, Heap::kOld));
+ const AbstractType& instantiated_type =
+ AbstractType::Handle(type.InstantiateFrom(
+ instantiator_type_arguments, &bound_error, NULL, NULL, Heap::kOld));
OS::PrintErr("%s: '%s' %s '%s' instantiated from '%s' (pc: %#" Px ").\n",
- message,
- String::Handle(instance_type.Name()).ToCString(),
+ message, String::Handle(instance_type.Name()).ToCString(),
(result.raw() == Bool::True().raw()) ? "is" : "is !",
String::Handle(instantiated_type.Name()).ToCString(),
- String::Handle(type.Name()).ToCString(),
- caller_frame->pc());
+ String::Handle(type.Name()).ToCString(), caller_frame->pc());
if (!bound_error.IsNull()) {
OS::Print(" bound error: %s\n", bound_error.ToErrorCString());
}
}
- const Function& function = Function::Handle(
- caller_frame->LookupDartFunction());
+ const Function& function =
+ Function::Handle(caller_frame->LookupDartFunction());
OS::PrintErr(" -> Function %s\n", function.ToFullyQualifiedCString());
}
@@ -406,12 +422,9 @@ static void UpdateTypeTestCache(
TypeArguments& last_instantiator_type_arguments = TypeArguments::Handle();
Bool& last_result = Bool::Handle();
for (intptr_t i = 0; i < len; ++i) {
- new_cache.GetCheck(
- i,
- &last_instance_class_id_or_function,
- &last_instance_type_arguments,
- &last_instantiator_type_arguments,
- &last_result);
+ new_cache.GetCheck(i, &last_instance_class_id_or_function,
+ &last_instance_type_arguments,
+ &last_instantiator_type_arguments, &last_result);
if ((last_instance_class_id_or_function.raw() ==
instance_class_id_or_function.raw()) &&
(last_instance_type_arguments.raw() == instance_type_arguments.raw()) &&
@@ -419,46 +432,41 @@ static void UpdateTypeTestCache(
instantiator_type_arguments.raw())) {
OS::PrintErr(" Error in test cache %p ix: %" Pd ",", new_cache.raw(), i);
PrintTypeCheck(" duplicate cache entry", instance, type,
- instantiator_type_arguments, result);
+ instantiator_type_arguments, result);
UNREACHABLE();
return;
}
}
#endif
- new_cache.AddCheck(instance_class_id_or_function,
- instance_type_arguments,
- instantiator_type_arguments,
- result);
+ new_cache.AddCheck(instance_class_id_or_function, instance_type_arguments,
+ instantiator_type_arguments, result);
if (FLAG_trace_type_checks) {
AbstractType& test_type = AbstractType::Handle(type.raw());
if (!test_type.IsInstantiated()) {
Error& bound_error = Error::Handle();
test_type = type.InstantiateFrom(instantiator_type_arguments,
- &bound_error,
- NULL, NULL, Heap::kNew);
+ &bound_error, NULL, NULL, Heap::kNew);
ASSERT(bound_error.IsNull()); // Malbounded types are not optimized.
}
- OS::PrintErr(" Updated test cache %p ix: %" Pd " with "
+ OS::PrintErr(
+ " Updated test cache %p ix: %" Pd
+ " with "
"(cid-or-fun: %p, type-args: %p, instantiator: %p, result: %s)\n"
- " instance [class: (%p '%s' cid: %" Pd "), type-args: %p %s]\n"
+ " instance [class: (%p '%s' cid: %" Pd
+ "), type-args: %p %s]\n"
" test-type [class: (%p '%s' cid: %" Pd "), in-type-args: %p %s]\n",
- new_cache.raw(),
- len,
+ new_cache.raw(), len,
- instance_class_id_or_function.raw(),
- instance_type_arguments.raw(),
- instantiator_type_arguments.raw(),
- result.ToCString(),
+ instance_class_id_or_function.raw(), instance_type_arguments.raw(),
+ instantiator_type_arguments.raw(), result.ToCString(),
- instance_class.raw(),
- String::Handle(instance_class.Name()).ToCString(),
- instance_class.id(),
- instance_type_arguments.raw(),
+ instance_class.raw(), String::Handle(instance_class.Name()).ToCString(),
+ instance_class.id(), instance_type_arguments.raw(),
instance_type_arguments.ToCString(),
test_type.type_class(),
- String::Handle(Class::Handle(test_type.type_class()).Name()).
- ToCString(),
+ String::Handle(Class::Handle(test_type.type_class()).Name())
+ .ToCString(),
Class::Handle(test_type.type_class()).id(),
instantiator_type_arguments.raw(),
instantiator_type_arguments.ToCString());
@@ -482,30 +490,28 @@ DEFINE_RUNTIME_ENTRY(Instanceof, 4) {
const SubtypeTestCache& cache =
SubtypeTestCache::CheckedHandle(zone, arguments.ArgAt(3));
ASSERT(type.IsFinalized());
- ASSERT(!type.IsMalformed()); // Already checked in code generator.
- ASSERT(!type.IsMalbounded()); // Already checked in code generator.
+ ASSERT(!type.IsMalformed()); // Already checked in code generator.
+ ASSERT(!type.IsMalbounded()); // Already checked in code generator.
ASSERT(!type.IsDynamicType()); // No need to check assignment.
Error& bound_error = Error::Handle(zone);
- const Bool& result =
- Bool::Get(instance.IsInstanceOf(type,
- instantiator_type_arguments,
- &bound_error));
+ const Bool& result = Bool::Get(
+ instance.IsInstanceOf(type, instantiator_type_arguments, &bound_error));
if (FLAG_trace_type_checks) {
- PrintTypeCheck("InstanceOf",
- instance, type, instantiator_type_arguments, result);
+ PrintTypeCheck("InstanceOf", instance, type, instantiator_type_arguments,
+ result);
}
if (!result.value() && !bound_error.IsNull()) {
// Throw a dynamic type error only if the instanceof test fails.
const TokenPosition location = GetCallerLocation();
- String& bound_error_message = String::Handle(
- zone, String::New(bound_error.ToErrorCString()));
- Exceptions::CreateAndThrowTypeError(
- location, AbstractType::Handle(zone), AbstractType::Handle(zone),
- Symbols::Empty(), bound_error_message);
+ String& bound_error_message =
+ String::Handle(zone, String::New(bound_error.ToErrorCString()));
+ Exceptions::CreateAndThrowTypeError(location, AbstractType::Handle(zone),
+ AbstractType::Handle(zone),
+ Symbols::Empty(), bound_error_message);
UNREACHABLE();
}
- UpdateTypeTestCache(
- instance, type, instantiator_type_arguments, result, cache);
+ UpdateTypeTestCache(instance, type, instantiator_type_arguments, result,
+ cache);
arguments.SetReturn(result);
}
@@ -528,19 +534,18 @@ DEFINE_RUNTIME_ENTRY(TypeCheck, 5) {
const String& dst_name = String::CheckedHandle(zone, arguments.ArgAt(3));
const SubtypeTestCache& cache =
SubtypeTestCache::CheckedHandle(zone, arguments.ArgAt(4));
- ASSERT(!dst_type.IsMalformed()); // Already checked in code generator.
- ASSERT(!dst_type.IsMalbounded()); // Already checked in code generator.
+ ASSERT(!dst_type.IsMalformed()); // Already checked in code generator.
+ ASSERT(!dst_type.IsMalbounded()); // Already checked in code generator.
ASSERT(!dst_type.IsDynamicType()); // No need to check assignment.
- ASSERT(!src_instance.IsNull()); // Already checked in inlined code.
+ ASSERT(!src_instance.IsNull()); // Already checked in inlined code.
Error& bound_error = Error::Handle(zone);
const bool is_instance_of = src_instance.IsInstanceOf(
dst_type, instantiator_type_arguments, &bound_error);
if (FLAG_trace_type_checks) {
- PrintTypeCheck("TypeCheck",
- src_instance, dst_type, instantiator_type_arguments,
- Bool::Get(is_instance_of));
+ PrintTypeCheck("TypeCheck", src_instance, dst_type,
+ instantiator_type_arguments, Bool::Get(is_instance_of));
}
if (!is_instance_of) {
// Throw a dynamic type error.
@@ -553,17 +558,17 @@ DEFINE_RUNTIME_ENTRY(TypeCheck, 5) {
NULL, NULL, Heap::kNew);
// Note that instantiated dst_type may be malbounded.
}
- String& bound_error_message = String::Handle(zone);
+ String& bound_error_message = String::Handle(zone);
if (!bound_error.IsNull()) {
ASSERT(isolate->type_checks());
bound_error_message = String::New(bound_error.ToErrorCString());
}
- Exceptions::CreateAndThrowTypeError(location, src_type, dst_type,
- dst_name, bound_error_message);
+ Exceptions::CreateAndThrowTypeError(location, src_type, dst_type, dst_name,
+ bound_error_message);
UNREACHABLE();
}
- UpdateTypeTestCache(
- src_instance, dst_type, instantiator_type_arguments, Bool::True(), cache);
+ UpdateTypeTestCache(src_instance, dst_type, instantiator_type_arguments,
+ Bool::True(), cache);
arguments.SetReturn(src_instance);
}
@@ -580,8 +585,11 @@ DEFINE_RUNTIME_ENTRY(NonBoolTypeError, 1) {
if (src_instance.IsNull()) {
const Array& args = Array::Handle(zone, Array::New(4));
- args.SetAt(0, String::Handle(zone,
- String::New("Failed assertion: boolean expression must not be null")));
+ args.SetAt(
+ 0, String::Handle(
+ zone,
+ String::New(
+ "Failed assertion: boolean expression must not be null")));
// No source code for this assertion, set url to null.
args.SetAt(1, String::Handle(zone, String::null()));
@@ -617,22 +625,20 @@ DEFINE_RUNTIME_ENTRY(BadTypeError, 3) {
AbstractType::CheckedHandle(zone, arguments.ArgAt(2));
const AbstractType& src_type =
AbstractType::Handle(zone, src_value.GetType());
- Exceptions::CreateAndThrowTypeError(
- location, src_type, dst_type, dst_name, String::Handle(zone));
+ Exceptions::CreateAndThrowTypeError(location, src_type, dst_type, dst_name,
+ String::Handle(zone));
UNREACHABLE();
}
DEFINE_RUNTIME_ENTRY(Throw, 1) {
- const Instance& exception =
- Instance::CheckedHandle(zone, arguments.ArgAt(0));
+ const Instance& exception = Instance::CheckedHandle(zone, arguments.ArgAt(0));
Exceptions::Throw(thread, exception);
}
DEFINE_RUNTIME_ENTRY(ReThrow, 2) {
- const Instance& exception =
- Instance::CheckedHandle(zone, arguments.ArgAt(0));
+ const Instance& exception = Instance::CheckedHandle(zone, arguments.ArgAt(0));
const Instance& stacktrace =
Instance::CheckedHandle(zone, arguments.ArgAt(1));
Exceptions::ReThrow(thread, exception, stacktrace);
@@ -662,17 +668,15 @@ DEFINE_RUNTIME_ENTRY(PatchStaticCall, 0) {
// target.
ASSERT(target_code.raw() !=
CodePatcher::GetStaticCallTargetAt(caller_frame->pc(), caller_code));
- CodePatcher::PatchStaticCallAt(caller_frame->pc(),
- caller_code,
- target_code);
+ CodePatcher::PatchStaticCallAt(caller_frame->pc(), caller_code, target_code);
caller_code.SetStaticCallTargetCodeAt(caller_frame->pc(), target_code);
if (FLAG_trace_patching) {
- THR_Print("PatchStaticCall: patching caller pc %#" Px ""
- " to '%s' new entry point %#" Px " (%s)\n",
- caller_frame->pc(),
- target_function.ToFullyQualifiedCString(),
- target_code.UncheckedEntryPoint(),
- target_code.is_optimized() ? "optimized" : "unoptimized");
+ THR_Print("PatchStaticCall: patching caller pc %#" Px
+ ""
+ " to '%s' new entry point %#" Px " (%s)\n",
+ caller_frame->pc(), target_function.ToFullyQualifiedCString(),
+ target_code.UncheckedEntryPoint(),
+ target_code.is_optimized() ? "optimized" : "unoptimized");
}
arguments.SetReturn(target_code);
}
@@ -752,24 +756,21 @@ static bool ResolveCallThroughGetter(const Instance& receiver,
const int kNumArguments = 1;
ArgumentsDescriptor args_desc(
Array::Handle(ArgumentsDescriptor::New(kNumArguments)));
- const Function& getter = Function::Handle(
- Resolver::ResolveDynamicForReceiverClass(receiver_class,
- getter_name,
- args_desc));
+ const Function& getter =
+ Function::Handle(Resolver::ResolveDynamicForReceiverClass(
+ receiver_class, getter_name, args_desc));
if (getter.IsNull() || getter.IsMethodExtractor()) {
return false;
}
const Function& target_function =
Function::Handle(receiver_class.GetInvocationDispatcher(
- target_name,
- arguments_descriptor,
- RawFunction::kInvokeFieldDispatcher,
- FLAG_lazy_dispatchers));
+ target_name, arguments_descriptor,
+ RawFunction::kInvokeFieldDispatcher, FLAG_lazy_dispatchers));
ASSERT(!target_function.IsNull() || !FLAG_lazy_dispatchers);
if (FLAG_trace_ic) {
- OS::PrintErr("InvokeField IC miss: adding <%s> id:%" Pd " -> <%s>\n",
- Class::Handle(receiver.clazz()).ToCString(),
- receiver.GetClassId(),
+ OS::PrintErr(
+ "InvokeField IC miss: adding <%s> id:%" Pd " -> <%s>\n",
+ Class::Handle(receiver.clazz()).ToCString(), receiver.GetClassId(),
target_function.IsNull() ? "null" : target_function.ToCString());
}
*result = target_function.raw();
@@ -778,29 +779,23 @@ static bool ResolveCallThroughGetter(const Instance& receiver,
// Handle other invocations (implicit closures, noSuchMethod).
-RawFunction* InlineCacheMissHelper(
- const Instance& receiver,
- const Array& args_descriptor,
- const String& target_name) {
+RawFunction* InlineCacheMissHelper(const Instance& receiver,
+ const Array& args_descriptor,
+ const String& target_name) {
const Class& receiver_class = Class::Handle(receiver.clazz());
Function& result = Function::Handle();
- if (!ResolveCallThroughGetter(receiver,
- receiver_class,
- target_name,
- args_descriptor,
- &result)) {
+ if (!ResolveCallThroughGetter(receiver, receiver_class, target_name,
+ args_descriptor, &result)) {
ArgumentsDescriptor desc(args_descriptor);
const Function& target_function =
Function::Handle(receiver_class.GetInvocationDispatcher(
- target_name,
- args_descriptor,
- RawFunction::kNoSuchMethodDispatcher,
+ target_name, args_descriptor, RawFunction::kNoSuchMethodDispatcher,
FLAG_lazy_dispatchers));
if (FLAG_trace_ic) {
- OS::PrintErr("NoSuchMethod IC miss: adding <%s> id:%" Pd " -> <%s>\n",
- Class::Handle(receiver.clazz()).ToCString(),
- receiver.GetClassId(),
+ OS::PrintErr(
+ "NoSuchMethod IC miss: adding <%s> id:%" Pd " -> <%s>\n",
+ Class::Handle(receiver.clazz()).ToCString(), receiver.GetClassId(),
target_function.IsNull() ? "null" : target_function.ToCString());
}
result = target_function.raw();
@@ -821,10 +816,9 @@ static RawFunction* ComputeTypeCheckTarget(const Instance& receiver,
bool result = receiver.IsInstanceOf(type, checked_type_arguments, &error);
ASSERT(error.IsNull());
ObjectStore* store = Isolate::Current()->object_store();
- const Function& target
- = Function::Handle(result
- ? store->simple_instance_of_true_function()
- : store->simple_instance_of_false_function());
+ const Function& target =
+ Function::Handle(result ? store->simple_instance_of_true_function()
+ : store->simple_instance_of_false_function());
ASSERT(!target.IsNull());
return target.raw();
}
@@ -834,8 +828,8 @@ static RawFunction* InlineCacheMissHandler(
const GrowableArray<const Instance*>& args,
const ICData& ic_data) {
const Instance& receiver = *args[0];
- ArgumentsDescriptor
- arguments_descriptor(Array::Handle(ic_data.arguments_descriptor()));
+ ArgumentsDescriptor arguments_descriptor(
+ Array::Handle(ic_data.arguments_descriptor()));
String& function_name = String::Handle(ic_data.target_name());
ASSERT(function_name.IsSymbol());
@@ -846,8 +840,8 @@ static RawFunction* InlineCacheMissHandler(
if (target_function.raw() == store->simple_instance_of_function()) {
// Replace the target function with constant function.
const AbstractType& type = AbstractType::Cast(*args[1]);
- target_function
- = ComputeTypeCheckTarget(receiver, type, arguments_descriptor);
+ target_function =
+ ComputeTypeCheckTarget(receiver, type, arguments_descriptor);
}
if (target_function.IsNull()) {
if (FLAG_trace_ic) {
@@ -858,9 +852,8 @@ static RawFunction* InlineCacheMissHandler(
const Array& args_descriptor =
Array::Handle(ic_data.arguments_descriptor());
const String& target_name = String::Handle(ic_data.target_name());
- target_function = InlineCacheMissHelper(receiver,
- args_descriptor,
- target_name);
+ target_function =
+ InlineCacheMissHelper(receiver, args_descriptor, target_name);
}
if (target_function.IsNull()) {
ASSERT(!FLAG_lazy_dispatchers);
@@ -884,18 +877,17 @@ static RawFunction* InlineCacheMissHandler(
const Code& caller = Code::Handle(Code::LookupCode(caller_frame->pc()));
if (caller.is_optimized()) {
OS::PrintErr("IC miss in optimized code; call %s -> %s\n",
- Function::Handle(caller.function()).ToCString(),
- target_function.ToCString());
+ Function::Handle(caller.function()).ToCString(),
+ target_function.ToCString());
}
}
if (FLAG_trace_ic) {
- OS::PrintErr("InlineCacheMissHandler %" Pd " call at %#" Px "' "
+ OS::PrintErr("InlineCacheMissHandler %" Pd " call at %#" Px
+ "' "
"adding <%s> id:%" Pd " -> <%s>\n",
- args.length(),
- caller_frame->pc(),
- Class::Handle(receiver.clazz()).ToCString(),
- receiver.GetClassId(),
- target_function.ToCString());
+ args.length(), caller_frame->pc(),
+ Class::Handle(receiver.clazz()).ToCString(),
+ receiver.GetClassId(), target_function.ToCString());
}
}
return target_function.raw();
@@ -970,8 +962,8 @@ DEFINE_RUNTIME_ENTRY(StaticCallMissHandlerOneArg, 2) {
ASSERT(ic_data.NumberOfChecks() == 1);
const Function& target = Function::Handle(ic_data.GetTargetAt(0));
if (!target.HasCode()) {
- const Error& error = Error::Handle(Compiler::CompileFunction(thread,
- target));
+ const Error& error =
+ Error::Handle(Compiler::CompileFunction(thread, target));
if (!error.IsNull()) {
Exceptions::PropagateError(error);
}
@@ -982,8 +974,7 @@ DEFINE_RUNTIME_ENTRY(StaticCallMissHandlerOneArg, 2) {
DartFrameIterator iterator;
StackFrame* caller_frame = iterator.NextFrame();
ASSERT(caller_frame != NULL);
- OS::PrintErr("StaticCallMissHandler at %#" Px
- " target %s (%" Pd ")\n",
+ OS::PrintErr("StaticCallMissHandler at %#" Px " target %s (%" Pd ")\n",
caller_frame->pc(), target.ToCString(), arg.GetClassId());
}
arguments.SetReturn(target);
@@ -1003,8 +994,8 @@ DEFINE_RUNTIME_ENTRY(StaticCallMissHandlerTwoArgs, 3) {
ASSERT(ic_data.NumberOfChecks() > 0);
const Function& target = Function::Handle(ic_data.GetTargetAt(0));
if (!target.HasCode()) {
- const Error& error = Error::Handle(Compiler::CompileFunction(thread,
- target));
+ const Error& error =
+ Error::Handle(Compiler::CompileFunction(thread, target));
if (!error.IsNull()) {
Exceptions::PropagateError(error);
}
@@ -1018,8 +1009,8 @@ DEFINE_RUNTIME_ENTRY(StaticCallMissHandlerTwoArgs, 3) {
DartFrameIterator iterator;
StackFrame* caller_frame = iterator.NextFrame();
ASSERT(caller_frame != NULL);
- OS::PrintErr("StaticCallMissHandler at %#" Px
- " target %s (%" Pd ", %" Pd ")\n",
+ OS::PrintErr("StaticCallMissHandler at %#" Px " target %s (%" Pd ", %" Pd
+ ")\n",
caller_frame->pc(), target.ToCString(), cids[0], cids[1]);
}
arguments.SetReturn(target);
@@ -1041,8 +1032,8 @@ static bool IsSingleTarget(Isolate* isolate,
cls = table->At(cid);
if (cls.is_abstract()) continue;
if (!cls.is_allocated()) continue;
- other_target = Resolver::ResolveDynamicAnyArgs(zone, cls, name,
- false /* allow_add */);
+ other_target =
+ Resolver::ResolveDynamicAnyArgs(zone, cls, name, false /* allow_add */);
if (other_target.raw() != target.raw()) {
return false;
}
@@ -1070,8 +1061,8 @@ DEFINE_RUNTIME_ENTRY(SingleTargetMiss, 1) {
Function::Handle(zone, caller_frame->LookupDartFunction());
SingleTargetCache& cache = SingleTargetCache::Handle(zone);
- cache ^= CodePatcher::GetSwitchableCallDataAt(caller_frame->pc(),
- caller_code);
+ cache ^=
+ CodePatcher::GetSwitchableCallDataAt(caller_frame->pc(), caller_code);
Code& old_target_code = Code::Handle(zone, cache.target());
Function& old_target = Function::Handle(zone);
old_target ^= old_target_code.owner();
@@ -1079,23 +1070,18 @@ DEFINE_RUNTIME_ENTRY(SingleTargetMiss, 1) {
// We lost the original ICData when we patched to the monomorphic case.
const String& name = String::Handle(zone, old_target.name());
ASSERT(!old_target.HasOptionalParameters());
- const Array& descriptor = Array::Handle(zone,
- ArgumentsDescriptor::New(old_target.num_fixed_parameters()));
+ const Array& descriptor = Array::Handle(
+ zone, ArgumentsDescriptor::New(old_target.num_fixed_parameters()));
const ICData& ic_data =
- ICData::Handle(zone, ICData::New(caller_function,
- name,
- descriptor,
- Thread::kNoDeoptId,
- 1, /* args_tested */
+ ICData::Handle(zone, ICData::New(caller_function, name, descriptor,
+ Thread::kNoDeoptId, 1, /* args_tested */
false /* static_call */));
// Maybe add the new target.
Class& cls = Class::Handle(zone, receiver.clazz());
ArgumentsDescriptor args_desc(descriptor);
- Function& target_function = Function::Handle(zone,
- Resolver::ResolveDynamicForReceiverClass(cls,
- name,
- args_desc));
+ Function& target_function = Function::Handle(
+ zone, Resolver::ResolveDynamicForReceiverClass(cls, name, args_desc));
if (target_function.IsNull()) {
target_function = InlineCacheMissHelper(receiver, descriptor, name);
}
@@ -1134,9 +1120,7 @@ DEFINE_RUNTIME_ENTRY(SingleTargetMiss, 1) {
const Code& stub =
Code::Handle(zone, StubCode::ICCallThroughCode_entry()->code());
ASSERT(!Isolate::Current()->compilation_allowed());
- CodePatcher::PatchSwitchableCallAt(caller_frame->pc(),
- caller_code,
- ic_data,
+ CodePatcher::PatchSwitchableCallAt(caller_frame->pc(), caller_code, ic_data,
stub);
// Return the ICData. The single target stub will jump to continue in the
@@ -1158,27 +1142,21 @@ DEFINE_RUNTIME_ENTRY(UnlinkedCall, 2) {
DartFrameIterator iterator;
StackFrame* caller_frame = iterator.NextFrame();
ASSERT(caller_frame->IsDartFrame());
- const Code& caller_code =
- Code::Handle(zone, caller_frame->LookupDartCode());
+ const Code& caller_code = Code::Handle(zone, caller_frame->LookupDartCode());
const Function& caller_function =
Function::Handle(zone, caller_frame->LookupDartFunction());
const String& name = String::Handle(zone, unlinked.target_name());
const Array& descriptor = Array::Handle(zone, unlinked.args_descriptor());
const ICData& ic_data =
- ICData::Handle(zone, ICData::New(caller_function,
- name,
- descriptor,
- Thread::kNoDeoptId,
- 1, /* args_tested */
+ ICData::Handle(zone, ICData::New(caller_function, name, descriptor,
+ Thread::kNoDeoptId, 1, /* args_tested */
false /* static_call */));
Class& cls = Class::Handle(zone, receiver.clazz());
ArgumentsDescriptor args_desc(descriptor);
- Function& target_function = Function::Handle(zone,
- Resolver::ResolveDynamicForReceiverClass(cls,
- name,
- args_desc));
+ Function& target_function = Function::Handle(
+ zone, Resolver::ResolveDynamicForReceiverClass(cls, name, args_desc));
if (target_function.IsNull()) {
target_function = InlineCacheMissHelper(receiver, descriptor, name);
}
@@ -1188,12 +1166,10 @@ DEFINE_RUNTIME_ENTRY(UnlinkedCall, 2) {
ic_data.AddReceiverCheck(receiver.GetClassId(), target_function);
}
- if (!target_function.IsNull() &&
- !target_function.HasOptionalParameters()) {
+ if (!target_function.IsNull() && !target_function.HasOptionalParameters()) {
// Patch to monomorphic call.
ASSERT(target_function.HasCode());
- const Code& target_code =
- Code::Handle(zone, target_function.CurrentCode());
+ const Code& target_code = Code::Handle(zone, target_function.CurrentCode());
const Smi& expected_cid =
Smi::Handle(zone, Smi::New(receiver.GetClassId()));
CodePatcher::PatchSwitchableCallAt(caller_frame->pc(), caller_code,
@@ -1209,9 +1185,7 @@ DEFINE_RUNTIME_ENTRY(UnlinkedCall, 2) {
const Code& stub =
Code::Handle(zone, StubCode::ICCallThroughCode_entry()->code());
ASSERT(!Isolate::Current()->compilation_allowed());
- CodePatcher::PatchSwitchableCallAt(caller_frame->pc(),
- caller_code,
- ic_data,
+ CodePatcher::PatchSwitchableCallAt(caller_frame->pc(), caller_code, ic_data,
stub);
// Return the ICData. The miss stub will jump to continue in the IC lookup
@@ -1239,25 +1213,21 @@ DEFINE_RUNTIME_ENTRY(MonomorphicMiss, 1) {
Function::Handle(zone, caller_frame->LookupDartFunction());
Smi& old_expected_cid = Smi::Handle(zone);
- old_expected_cid ^= CodePatcher::GetSwitchableCallDataAt(caller_frame->pc(),
- caller_code);
- const Code& old_target_code =
- Code::Handle(CodePatcher::GetSwitchableCallTargetAt(caller_frame->pc(),
- caller_code));
+ old_expected_cid ^=
+ CodePatcher::GetSwitchableCallDataAt(caller_frame->pc(), caller_code);
+ const Code& old_target_code = Code::Handle(
+ CodePatcher::GetSwitchableCallTargetAt(caller_frame->pc(), caller_code));
Function& old_target = Function::Handle(zone);
old_target ^= old_target_code.owner();
// We lost the original ICData when we patched to the monomorphic case.
const String& name = String::Handle(zone, old_target.name());
ASSERT(!old_target.HasOptionalParameters());
- const Array& descriptor = Array::Handle(zone,
- ArgumentsDescriptor::New(old_target.num_fixed_parameters()));
+ const Array& descriptor = Array::Handle(
+ zone, ArgumentsDescriptor::New(old_target.num_fixed_parameters()));
const ICData& ic_data =
- ICData::Handle(zone, ICData::New(caller_function,
- name,
- descriptor,
- Thread::kNoDeoptId,
- 1, /* args_tested */
+ ICData::Handle(zone, ICData::New(caller_function, name, descriptor,
+ Thread::kNoDeoptId, 1, /* args_tested */
false /* static_call */));
// Add the first target.
@@ -1266,10 +1236,8 @@ DEFINE_RUNTIME_ENTRY(MonomorphicMiss, 1) {
// Maybe add the new target.
Class& cls = Class::Handle(zone, receiver.clazz());
ArgumentsDescriptor args_desc(descriptor);
- Function& target_function = Function::Handle(zone,
- Resolver::ResolveDynamicForReceiverClass(cls,
- name,
- args_desc));
+ Function& target_function = Function::Handle(
+ zone, Resolver::ResolveDynamicForReceiverClass(cls, name, args_desc));
if (target_function.IsNull()) {
target_function = InlineCacheMissHelper(receiver, descriptor, name);
}
@@ -1297,11 +1265,9 @@ DEFINE_RUNTIME_ENTRY(MonomorphicMiss, 1) {
cache.set_entry_point(code.UncheckedEntryPoint());
cache.set_lower_limit(lower);
cache.set_upper_limit(upper);
- const Code& stub = Code::Handle(zone,
- StubCode::SingleTargetCall_entry()->code());
- CodePatcher::PatchSwitchableCallAt(caller_frame->pc(),
- caller_code,
- cache,
+ const Code& stub =
+ Code::Handle(zone, StubCode::SingleTargetCall_entry()->code());
+ CodePatcher::PatchSwitchableCallAt(caller_frame->pc(), caller_code, cache,
stub);
// Return the ICData. The miss stub will jump to continue in the IC call
// stub.
@@ -1314,9 +1280,7 @@ DEFINE_RUNTIME_ENTRY(MonomorphicMiss, 1) {
const Code& stub =
Code::Handle(zone, StubCode::ICCallThroughCode_entry()->code());
ASSERT(!Isolate::Current()->compilation_allowed());
- CodePatcher::PatchSwitchableCallAt(caller_frame->pc(),
- caller_code,
- ic_data,
+ CodePatcher::PatchSwitchableCallAt(caller_frame->pc(), caller_code, ic_data,
stub);
// Return the ICData. The miss stub will jump to continue in the IC lookup
@@ -1354,10 +1318,8 @@ DEFINE_RUNTIME_ENTRY(MegamorphicCacheMissHandler, 3) {
}
ArgumentsDescriptor args_desc(descriptor);
- Function& target_function = Function::Handle(zone,
- Resolver::ResolveDynamicForReceiverClass(cls,
- name,
- args_desc));
+ Function& target_function = Function::Handle(
+ zone, Resolver::ResolveDynamicForReceiverClass(cls, name, args_desc));
if (target_function.IsNull()) {
target_function = InlineCacheMissHelper(receiver, descriptor, name);
}
@@ -1382,7 +1344,7 @@ DEFINE_RUNTIME_ENTRY(MegamorphicCacheMissHandler, 3) {
if (!target_function.HasCode()) {
const Error& error =
- Error::Handle(Compiler::CompileFunction(thread, target_function));
+ Error::Handle(Compiler::CompileFunction(thread, target_function));
if (!error.IsNull()) {
Exceptions::PropagateError(error);
}
@@ -1406,8 +1368,8 @@ DEFINE_RUNTIME_ENTRY(MegamorphicCacheMissHandler, 3) {
ic_data.AddReceiverCheck(receiver.GetClassId(), target_function);
if (ic_data.NumberOfChecks() > FLAG_max_polymorphic_checks) {
// Switch to megamorphic call.
- const MegamorphicCache& cache = MegamorphicCache::Handle(zone,
- MegamorphicCacheTable::Lookup(isolate, name, descriptor));
+ const MegamorphicCache& cache = MegamorphicCache::Handle(
+ zone, MegamorphicCacheTable::Lookup(isolate, name, descriptor));
DartFrameIterator iterator;
StackFrame* miss_function_frame = iterator.NextFrame();
ASSERT(miss_function_frame->IsDartFrame());
@@ -1457,26 +1419,24 @@ DEFINE_RUNTIME_ENTRY(InvokeNoSuchMethodDispatcher, 4) {
Class& cls = Class::Handle(zone, receiver.clazz());
Function& function = Function::Handle(zone);
- // Dart distinguishes getters and regular methods and allows their calls
- // to mix with conversions, and its selectors are independent of arity. So do
- // a zigzagged lookup to see if this call failed because of an arity mismatch,
- // need for conversion, or there really is no such method.
+// Dart distinguishes getters and regular methods and allows their calls
+// to mix with conversions, and its selectors are independent of arity. So do
+// a zigzagged lookup to see if this call failed because of an arity mismatch,
+// need for conversion, or there really is no such method.
#define NO_SUCH_METHOD() \
- const Object& result = Object::Handle(zone, \
- DartEntry::InvokeNoSuchMethod(receiver, \
- target_name, \
- orig_arguments, \
- orig_arguments_desc)); \
+ const Object& result = Object::Handle( \
+ zone, DartEntry::InvokeNoSuchMethod( \
+ receiver, target_name, orig_arguments, orig_arguments_desc)); \
CheckResultError(result); \
- arguments.SetReturn(result); \
+ arguments.SetReturn(result);
#define CLOSURIZE(some_function) \
const Function& closure_function = \
Function::Handle(zone, some_function.ImplicitClosureFunction()); \
- const Object& result = \
- Object::Handle(zone, closure_function.ImplicitInstanceClosure(receiver));\
- arguments.SetReturn(result); \
+ const Object& result = Object::Handle( \
+ zone, closure_function.ImplicitInstanceClosure(receiver)); \
+ arguments.SetReturn(result);
const bool is_getter = Field::IsGetterName(target_name);
if (is_getter) {
@@ -1536,9 +1496,8 @@ DEFINE_RUNTIME_ENTRY(InvokeNoSuchMethodDispatcher, 4) {
// Special case: closures are implemented with a call getter instead of a
// call method and with lazy dispatchers the field-invocation-dispatcher
// would perform the closure call.
- const Object& result =
- Object::Handle(zone, DartEntry::InvokeClosure(orig_arguments,
- orig_arguments_desc));
+ const Object& result = Object::Handle(
+ zone, DartEntry::InvokeClosure(orig_arguments, orig_arguments_desc));
CheckResultError(result);
arguments.SetReturn(result);
return;
@@ -1557,16 +1516,15 @@ DEFINE_RUNTIME_ENTRY(InvokeNoSuchMethodDispatcher, 4) {
if (!function.IsNull()) {
const Array& getter_arguments = Array::Handle(Array::New(1));
getter_arguments.SetAt(0, receiver);
- const Object& getter_result =
- Object::Handle(zone, DartEntry::InvokeFunction(function,
- getter_arguments));
+ const Object& getter_result = Object::Handle(
+ zone, DartEntry::InvokeFunction(function, getter_arguments));
CheckResultError(getter_result);
ASSERT(getter_result.IsNull() || getter_result.IsInstance());
orig_arguments.SetAt(0, getter_result);
- const Object& call_result =
- Object::Handle(zone, DartEntry::InvokeClosure(orig_arguments,
- orig_arguments_desc));
+ const Object& call_result = Object::Handle(
+ zone,
+ DartEntry::InvokeClosure(orig_arguments, orig_arguments_desc));
CheckResultError(call_result);
arguments.SetReturn(call_result);
return;
@@ -1582,7 +1540,6 @@ DEFINE_RUNTIME_ENTRY(InvokeNoSuchMethodDispatcher, 4) {
}
-
// Invoke appropriate noSuchMethod function.
// Arg0: receiver (closure object)
// Arg1: arguments descriptor array.
@@ -1598,11 +1555,8 @@ DEFINE_RUNTIME_ENTRY(InvokeClosureNoSuchMethod, 3) {
const Function& function = Function::Handle(receiver.function());
const String& original_function_name =
String::Handle(function.QualifiedUserVisibleName());
- const Object& result = Object::Handle(
- DartEntry::InvokeNoSuchMethod(receiver,
- original_function_name,
- orig_arguments,
- orig_arguments_desc));
+ const Object& result = Object::Handle(DartEntry::InvokeNoSuchMethod(
+ receiver, original_function_name, orig_arguments, orig_arguments_desc));
CheckResultError(result);
arguments.SetReturn(result);
}
@@ -1638,29 +1592,24 @@ DEFINE_RUNTIME_ENTRY(StackOverflow, 0) {
bool do_reload = false;
const intptr_t isolate_reload_every =
isolate->reload_every_n_stack_overflow_checks();
- if ((FLAG_deoptimize_every > 0) ||
- (FLAG_stacktrace_every > 0) ||
+ if ((FLAG_deoptimize_every > 0) || (FLAG_stacktrace_every > 0) ||
(isolate_reload_every > 0)) {
// TODO(turnidge): To make --deoptimize_every and
// --stacktrace-every faster we could move this increment/test to
// the generated code.
int32_t count = thread->IncrementAndGetStackOverflowCount();
- if (FLAG_deoptimize_every > 0 &&
- (count % FLAG_deoptimize_every) == 0) {
+ if (FLAG_deoptimize_every > 0 && (count % FLAG_deoptimize_every) == 0) {
do_deopt = true;
}
- if (FLAG_stacktrace_every > 0 &&
- (count % FLAG_stacktrace_every) == 0) {
+ if (FLAG_stacktrace_every > 0 && (count % FLAG_stacktrace_every) == 0) {
do_stacktrace = true;
}
- if ((isolate_reload_every > 0) &&
- (count % isolate_reload_every) == 0) {
+ if ((isolate_reload_every > 0) && (count % isolate_reload_every) == 0) {
do_reload = isolate->CanReload();
}
}
- if ((FLAG_deoptimize_filter != NULL) ||
- (FLAG_stacktrace_filter != NULL) ||
- FLAG_reload_every_optimized) {
+ if ((FLAG_deoptimize_filter != NULL) || (FLAG_stacktrace_filter != NULL) ||
+ FLAG_reload_every_optimized) {
DartFrameIterator iterator;
StackFrame* frame = iterator.NextFrame();
ASSERT(frame != NULL);
@@ -1674,8 +1623,7 @@ DEFINE_RUNTIME_ENTRY(StackOverflow, 0) {
// Don't do the reload if we aren't inside optimized code.
do_reload = false;
}
- if (code.is_optimized() &&
- FLAG_deoptimize_filter != NULL &&
+ if (code.is_optimized() && FLAG_deoptimize_filter != NULL &&
strstr(function_name, FLAG_deoptimize_filter) != NULL) {
OS::PrintErr("*** Forcing deoptimization (%s)\n",
function.ToFullyQualifiedCString());
@@ -1725,7 +1673,7 @@ DEFINE_RUNTIME_ENTRY(StackOverflow, 0) {
#endif
// Variable locations and number are unknown when precompiling.
const int num_vars =
- FLAG_precompiled_runtime ? 0 : frame->NumLocalVariables();
+ FLAG_precompiled_runtime ? 0 : frame->NumLocalVariables();
TokenPosition unused = TokenPosition::kNoSource;
for (intptr_t v = 0; v < num_vars; v++) {
frame->VariableAt(v, &var_name, &unused, &unused, &unused, &var_value);
@@ -1775,8 +1723,7 @@ DEFINE_RUNTIME_ENTRY(StackOverflow, 0) {
ASSERT(osr_id != Compiler::kNoOSRDeoptId);
if (FLAG_trace_osr) {
OS::Print("Attempting OSR for %s at id=%" Pd ", count=%" Pd "\n",
- function.ToFullyQualifiedCString(),
- osr_id,
+ function.ToFullyQualifiedCString(), osr_id,
function.usage_counter());
}
@@ -1784,8 +1731,8 @@ DEFINE_RUNTIME_ENTRY(StackOverflow, 0) {
// Since the code is referenced from the frame and the ZoneHandle,
// it cannot have been removed from the function.
ASSERT(!original_code.IsNull());
- const Error& error = Error::Handle(Compiler::CompileOptimizedFunction(
- thread, function, osr_id));
+ const Error& error = Error::Handle(
+ Compiler::CompileOptimizedFunction(thread, function, osr_id));
if (!error.IsNull()) {
Exceptions::PropagateError(error);
}
@@ -1814,12 +1761,9 @@ DEFINE_RUNTIME_ENTRY(TraceICCall, 2) {
StackFrame* frame = iterator.NextFrame();
ASSERT(frame != NULL);
OS::PrintErr("IC call @%#" Px ": ICData: %p cnt:%" Pd " nchecks: %" Pd
- " %s\n",
- frame->pc(),
- ic_data.raw(),
- function.usage_counter(),
- ic_data.NumberOfChecks(),
- function.ToFullyQualifiedCString());
+ " %s\n",
+ frame->pc(), ic_data.raw(), function.usage_counter(),
+ ic_data.NumberOfChecks(), function.ToFullyQualifiedCString());
}
@@ -1828,8 +1772,7 @@ DEFINE_RUNTIME_ENTRY(TraceICCall, 2) {
// Returns the Code object where to continue execution.
DEFINE_RUNTIME_ENTRY(OptimizeInvokedFunction, 1) {
#if !defined(DART_PRECOMPILED_RUNTIME)
- const Function& function = Function::CheckedHandle(zone,
- arguments.ArgAt(0));
+ const Function& function = Function::CheckedHandle(zone, arguments.ArgAt(0));
ASSERT(!function.IsNull());
ASSERT(function.HasCode());
@@ -1914,25 +1857,23 @@ DEFINE_RUNTIME_ENTRY(FixCallersTarget, 0) {
const Function& target_function = Function::Handle(
zone, caller_code.GetStaticCallTargetFunctionAt(frame->pc()));
if (!target_function.HasCode()) {
- const Error& error = Error::Handle(
- zone, Compiler::CompileFunction(thread, target_function));
+ const Error& error =
+ Error::Handle(zone, Compiler::CompileFunction(thread, target_function));
if (!error.IsNull()) {
Exceptions::PropagateError(error);
}
}
ASSERT(target_function.HasCode());
- const Code& current_target_code = Code::Handle(
- zone, target_function.CurrentCode());
- CodePatcher::PatchStaticCallAt(frame->pc(),
- caller_code,
- current_target_code);
+ const Code& current_target_code =
+ Code::Handle(zone, target_function.CurrentCode());
+ CodePatcher::PatchStaticCallAt(frame->pc(), caller_code, current_target_code);
caller_code.SetStaticCallTargetCodeAt(frame->pc(), current_target_code);
if (FLAG_trace_patching) {
- OS::PrintErr("FixCallersTarget: caller %#" Px " "
+ OS::PrintErr("FixCallersTarget: caller %#" Px
+ " "
"target '%s' -> %#" Px "\n",
- frame->pc(),
- target_function.ToFullyQualifiedCString(),
+ frame->pc(), target_function.ToFullyQualifiedCString(),
current_target_code.UncheckedEntryPoint());
}
ASSERT(!current_target_code.IsDisabled());
@@ -1967,16 +1908,14 @@ DEFINE_RUNTIME_ENTRY(FixAllocationStubTarget, 0) {
alloc_stub = StubCode::GetAllocationStubForClass(alloc_class);
ASSERT(!alloc_stub.IsDisabled());
}
- CodePatcher::PatchStaticCallAt(frame->pc(),
- caller_code,
- alloc_stub);
+ CodePatcher::PatchStaticCallAt(frame->pc(), caller_code, alloc_stub);
caller_code.SetStubCallTargetCodeAt(frame->pc(), alloc_stub);
if (FLAG_trace_patching) {
- OS::PrintErr("FixAllocationStubTarget: caller %#" Px " alloc-class %s "
- " -> %#" Px "\n",
- frame->pc(),
- alloc_class.ToCString(),
- alloc_stub.UncheckedEntryPoint());
+ OS::PrintErr("FixAllocationStubTarget: caller %#" Px
+ " alloc-class %s "
+ " -> %#" Px "\n",
+ frame->pc(), alloc_class.ToCString(),
+ alloc_stub.UncheckedEntryPoint());
}
arguments.SetReturn(alloc_stub);
#else
@@ -1987,8 +1926,10 @@ DEFINE_RUNTIME_ENTRY(FixAllocationStubTarget, 0) {
const char* DeoptReasonToCString(ICData::DeoptReasonId deopt_reason) {
switch (deopt_reason) {
-#define DEOPT_REASON_TO_TEXT(name) case ICData::kDeopt##name: return #name;
-DEOPT_REASONS(DEOPT_REASON_TO_TEXT)
+#define DEOPT_REASON_TO_TEXT(name) \
+ case ICData::kDeopt##name: \
+ return #name;
+ DEOPT_REASONS(DEOPT_REASON_TO_TEXT)
#undef DEOPT_REASON_TO_TEXT
default:
UNREACHABLE();
@@ -2023,9 +1964,8 @@ void DeoptimizeAt(const Code& optimized_code, StackFrame* frame) {
CodePatcher::InsertDeoptimizationCallAt(frame->pc());
if (FLAG_trace_patching) {
const String& name = String::Handle(function.name());
- OS::PrintErr(
- "InsertDeoptimizationCallAt: 0x%" Px " for %s\n",
- frame->pc(), name.ToCString());
+ OS::PrintErr("InsertDeoptimizationCallAt: 0x%" Px " for %s\n",
+ frame->pc(), name.ToCString());
}
const ExceptionHandlers& handlers =
ExceptionHandlers::Handle(zone, optimized_code.exception_handlers());
@@ -2126,7 +2066,8 @@ static void CopySavedRegisters(uword saved_registers_address,
// The calling code must be optimized, but its function may not have
// have optimized code if the code is OSR code, or if the code was invalidated
// through class loading/finalization or field guard.
-DEFINE_LEAF_RUNTIME_ENTRY(intptr_t, DeoptimizeCopyFrame,
+DEFINE_LEAF_RUNTIME_ENTRY(intptr_t,
+ DeoptimizeCopyFrame,
2,
uword saved_registers_address,
uword is_lazy_deopt) {
@@ -2137,10 +2078,10 @@ DEFINE_LEAF_RUNTIME_ENTRY(intptr_t, DeoptimizeCopyFrame,
HANDLESCOPE(thread);
// All registers have been saved below last-fp as if they were locals.
- const uword last_fp = saved_registers_address
- + (kNumberOfSavedCpuRegisters * kWordSize)
- + (kNumberOfSavedFpuRegisters * kFpuRegisterSize)
- - ((kFirstLocalSlotFromFp + 1) * kWordSize);
+ const uword last_fp = saved_registers_address +
+ (kNumberOfSavedCpuRegisters * kWordSize) +
+ (kNumberOfSavedFpuRegisters * kFpuRegisterSize) -
+ ((kFirstLocalSlotFromFp + 1) * kWordSize);
// Get optimized code and frame that need to be deoptimized.
DartFrameIterator iterator(last_fp);
@@ -2155,17 +2096,17 @@ DEFINE_LEAF_RUNTIME_ENTRY(intptr_t, DeoptimizeCopyFrame,
if (FLAG_trace_deoptimization) {
const Function& function = Function::Handle(optimized_code.function());
THR_Print("== Deoptimizing code for '%s', %s, %s\n",
- function.ToFullyQualifiedCString(),
- deoptimizing_code ? "code & frame" : "frame",
- is_lazy_deopt ? "lazy-deopt" : "");
+ function.ToFullyQualifiedCString(),
+ deoptimizing_code ? "code & frame" : "frame",
+ is_lazy_deopt ? "lazy-deopt" : "");
}
#if !defined(TARGET_ARCH_DBC)
if (is_lazy_deopt) {
uword deopt_pc = isolate->FindPendingDeopt(caller_frame->fp());
if (FLAG_trace_deoptimization) {
- THR_Print("Lazy deopt fp=%" Pp " pc=%" Pp "\n",
- caller_frame->fp(), deopt_pc);
+ THR_Print("Lazy deopt fp=%" Pp " pc=%" Pp "\n", caller_frame->fp(),
+ deopt_pc);
}
// N.B.: Update frame before updating pending deopt table. The profiler
@@ -2176,8 +2117,8 @@ DEFINE_LEAF_RUNTIME_ENTRY(intptr_t, DeoptimizeCopyFrame,
isolate->ClearPendingDeoptsAtOrBelow(caller_frame->fp());
} else {
if (FLAG_trace_deoptimization) {
- THR_Print("Eager deopt fp=%" Pp " pc=%" Pp "\n",
- caller_frame->fp(), caller_frame->pc());
+ THR_Print("Eager deopt fp=%" Pp " pc=%" Pp "\n", caller_frame->fp(),
+ caller_frame->pc());
}
}
#endif // !DBC
@@ -2188,14 +2129,9 @@ DEFINE_LEAF_RUNTIME_ENTRY(intptr_t, DeoptimizeCopyFrame,
CopySavedRegisters(saved_registers_address, &fpu_registers, &cpu_registers);
// Create the DeoptContext.
- DeoptContext* deopt_context =
- new DeoptContext(caller_frame,
- optimized_code,
- DeoptContext::kDestIsOriginalFrame,
- fpu_registers,
- cpu_registers,
- is_lazy_deopt != 0,
- deoptimizing_code);
+ DeoptContext* deopt_context = new DeoptContext(
+ caller_frame, optimized_code, DeoptContext::kDestIsOriginalFrame,
+ fpu_registers, cpu_registers, is_lazy_deopt != 0, deoptimizing_code);
isolate->set_deopt_context(deopt_context);
// Stack size (FP - SP) in bytes.
« no previous file with comments | « runtime/vm/code_generator.h ('k') | runtime/vm/code_generator_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698