summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/optimizing/critical_native_abi_fixup_arm.cc3
-rw-r--r--compiler/optimizing/inliner.cc6
-rw-r--r--compiler/optimizing/instruction_builder.cc35
-rw-r--r--compiler/optimizing/instruction_simplifier.cc2
-rw-r--r--compiler/optimizing/load_store_analysis_test.cc30
-rw-r--r--compiler/optimizing/nodes.cc4
-rw-r--r--compiler/optimizing/nodes.h40
-rw-r--r--compiler/optimizing/optimizing_unit_test.h3
-rw-r--r--test/988-method-trace/expected-stdout.txt297
-rw-r--r--test/988-method-trace/src/Main.java8
-rw-r--r--test/988-method-trace/src/art/Test988.java14
-rw-r--r--test/988-method-trace/src/art/Test988Intrinsics.java218
12 files changed, 157 insertions, 503 deletions
diff --git a/compiler/optimizing/critical_native_abi_fixup_arm.cc b/compiler/optimizing/critical_native_abi_fixup_arm.cc
index 77e156608b..03fb26bf1e 100644
--- a/compiler/optimizing/critical_native_abi_fixup_arm.cc
+++ b/compiler/optimizing/critical_native_abi_fixup_arm.cc
@@ -74,8 +74,7 @@ static void FixUpArguments(HInvokeStaticOrDirect* invoke) {
dispatch_info,
kStatic,
target_method,
- HInvokeStaticOrDirect::ClinitCheckRequirement::kNone,
- !block->GetGraph()->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kNone);
// The intrinsic has no side effects and does not need environment or dex cache on ARM.
new_input->SetSideEffects(SideEffects::None());
IntrinsicOptimizations opt(new_input);
diff --git a/compiler/optimizing/inliner.cc b/compiler/optimizing/inliner.cc
index 4bf62f3c26..da498d4277 100644
--- a/compiler/optimizing/inliner.cc
+++ b/compiler/optimizing/inliner.cc
@@ -1321,8 +1321,7 @@ bool HInliner::TryDevirtualize(HInvoke* invoke_instruction,
dispatch_info,
kDirect,
MethodReference(method->GetDexFile(), method->GetDexMethodIndex()),
- HInvokeStaticOrDirect::ClinitCheckRequirement::kNone,
- !graph_->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kNone);
HInputsRef inputs = invoke_instruction->GetInputs();
DCHECK_EQ(inputs.size(), invoke_instruction->GetNumberOfArguments());
for (size_t index = 0; index != inputs.size(); ++index) {
@@ -1528,8 +1527,7 @@ bool HInliner::TryBuildAndInline(HInvoke* invoke_instruction,
invoke_instruction->GetMethodReference(), // Use existing invoke's method's reference.
method,
MethodReference(method->GetDexFile(), method->GetDexMethodIndex()),
- method->GetMethodIndex(),
- !graph_->IsDebuggable());
+ method->GetMethodIndex());
DCHECK_NE(new_invoke->GetIntrinsic(), Intrinsics::kNone);
HInputsRef inputs = invoke_instruction->GetInputs();
for (size_t index = 0; index != inputs.size(); ++index) {
diff --git a/compiler/optimizing/instruction_builder.cc b/compiler/optimizing/instruction_builder.cc
index fee9091145..f9a513804c 100644
--- a/compiler/optimizing/instruction_builder.cc
+++ b/compiler/optimizing/instruction_builder.cc
@@ -469,9 +469,6 @@ void HInstructionBuilder::BuildIntrinsic(ArtMethod* method) {
current_block_ = graph_->GetEntryBlock();
InitializeBlockLocals();
InitializeParameters();
- if (graph_->IsDebuggable() && code_generator_->GetCompilerOptions().IsJitCompiler()) {
- AppendInstruction(new (allocator_) HMethodEntryHook(0u));
- }
AppendInstruction(new (allocator_) HGoto(0u));
// Fill the body.
@@ -507,21 +504,14 @@ void HInstructionBuilder::BuildIntrinsic(ArtMethod* method) {
dispatch_info,
invoke_type,
target_method,
- HInvokeStaticOrDirect::ClinitCheckRequirement::kNone,
- !graph_->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kNone);
HandleInvoke(invoke, operands, shorty, /* is_unresolved= */ false);
}
// Add the return instruction.
if (return_type_ == DataType::Type::kVoid) {
- if (graph_->IsDebuggable() && code_generator_->GetCompilerOptions().IsJitCompiler()) {
- AppendInstruction(new (allocator_) HMethodExitHook(graph_->GetNullConstant(), kNoDexPc));
- }
AppendInstruction(new (allocator_) HReturnVoid());
} else {
- if (graph_->IsDebuggable() && code_generator_->GetCompilerOptions().IsJitCompiler()) {
- AppendInstruction(new (allocator_) HMethodExitHook(latest_result_, kNoDexPc));
- }
AppendInstruction(new (allocator_) HReturn(latest_result_));
}
@@ -1060,8 +1050,7 @@ bool HInstructionBuilder::BuildInvoke(const Instruction& instruction,
dispatch_info,
invoke_type,
resolved_method_reference,
- HInvokeStaticOrDirect::ClinitCheckRequirement::kImplicit,
- !graph_->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kImplicit);
return HandleStringInit(invoke, operands, shorty);
}
@@ -1074,7 +1063,7 @@ bool HInstructionBuilder::BuildInvoke(const Instruction& instruction,
}
// Try to build an HIR replacement for the intrinsic.
- if (UNLIKELY(resolved_method->IsIntrinsic()) && !graph_->IsDebuggable()) {
+ if (UNLIKELY(resolved_method->IsIntrinsic())) {
// All intrinsics are in the primary boot image, so their class can always be referenced
// and we do not need to rely on the implicit class initialization check. The class should
// be initialized but we do not require that here.
@@ -1125,8 +1114,7 @@ bool HInstructionBuilder::BuildInvoke(const Instruction& instruction,
dispatch_info,
invoke_type,
resolved_method_reference,
- clinit_check_requirement,
- !graph_->IsDebuggable());
+ clinit_check_requirement);
if (clinit_check != nullptr) {
// Add the class initialization check as last input of `invoke`.
DCHECK_EQ(clinit_check_requirement, HInvokeStaticOrDirect::ClinitCheckRequirement::kExplicit);
@@ -1142,8 +1130,7 @@ bool HInstructionBuilder::BuildInvoke(const Instruction& instruction,
method_reference,
resolved_method,
resolved_method_reference,
- /*vtable_index=*/ imt_or_vtable_index,
- !graph_->IsDebuggable());
+ /*vtable_index=*/ imt_or_vtable_index);
} else {
DCHECK_EQ(invoke_type, kInterface);
if (kIsDebugBuild) {
@@ -1164,8 +1151,7 @@ bool HInstructionBuilder::BuildInvoke(const Instruction& instruction,
resolved_method,
resolved_method_reference,
/*imt_index=*/ imt_or_vtable_index,
- load_kind,
- !graph_->IsDebuggable());
+ load_kind);
}
return HandleInvoke(invoke, operands, shorty, /* is_unresolved= */ false);
}
@@ -1364,14 +1350,12 @@ bool HInstructionBuilder::BuildInvokePolymorphic(uint32_t dex_pc,
method_reference,
resolved_method,
resolved_method_reference,
- proto_idx,
- !graph_->IsDebuggable());
+ proto_idx);
if (!HandleInvoke(invoke, operands, shorty, /* is_unresolved= */ false)) {
return false;
}
- if (invoke->GetIntrinsic() != Intrinsics::kNone &&
- invoke->GetIntrinsic() != Intrinsics::kMethodHandleInvoke &&
+ if (invoke->GetIntrinsic() != Intrinsics::kMethodHandleInvoke &&
invoke->GetIntrinsic() != Intrinsics::kMethodHandleInvokeExact &&
VarHandleAccessorNeedsReturnTypeCheck(invoke, return_type)) {
// Type check is needed because VarHandle intrinsics do not type check the retrieved reference.
@@ -1404,8 +1388,7 @@ bool HInstructionBuilder::BuildInvokeCustom(uint32_t dex_pc,
call_site_idx,
return_type,
dex_pc,
- method_reference,
- !graph_->IsDebuggable());
+ method_reference);
return HandleInvoke(invoke, operands, shorty, /* is_unresolved= */ false);
}
diff --git a/compiler/optimizing/instruction_simplifier.cc b/compiler/optimizing/instruction_simplifier.cc
index 0c2fd5de56..bf51b5dcf4 100644
--- a/compiler/optimizing/instruction_simplifier.cc
+++ b/compiler/optimizing/instruction_simplifier.cc
@@ -2465,7 +2465,7 @@ void InstructionSimplifierVisitor::SimplifySystemArrayCopy(HInvoke* instruction)
DCHECK(method != nullptr);
DCHECK(method->IsStatic());
DCHECK(method->GetDeclaringClass() == system);
- invoke->SetResolvedMethod(method, !codegen_->GetGraph()->IsDebuggable());
+ invoke->SetResolvedMethod(method);
// Sharpen the new invoke. Note that we do not update the dex method index of
// the invoke, as we would need to look it up in the current dex file, and it
// is unlikely that it exists. The most usual situation for such typed
diff --git a/compiler/optimizing/load_store_analysis_test.cc b/compiler/optimizing/load_store_analysis_test.cc
index 865febbd31..17e7f1fb15 100644
--- a/compiler/optimizing/load_store_analysis_test.cc
+++ b/compiler/optimizing/load_store_analysis_test.cc
@@ -894,8 +894,7 @@ TEST_F(LoadStoreAnalysisTest, PartialEscape) {
{},
InvokeType::kStatic,
{ nullptr, 0 },
- HInvokeStaticOrDirect::ClinitCheckRequirement::kNone,
- !graph_->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kNone);
HInstruction* goto_left = new (GetAllocator()) HGoto();
call_left->AsInvoke()->SetRawInputAt(0, new_inst);
left->AddInstruction(call_left);
@@ -1004,8 +1003,7 @@ TEST_F(LoadStoreAnalysisTest, PartialEscape2) {
{},
InvokeType::kStatic,
{ nullptr, 0 },
- HInvokeStaticOrDirect::ClinitCheckRequirement::kNone,
- !graph_->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kNone);
HInstruction* goto_left = new (GetAllocator()) HGoto();
call_left->AsInvoke()->SetRawInputAt(0, new_inst);
left->AddInstruction(call_left);
@@ -1128,8 +1126,7 @@ TEST_F(LoadStoreAnalysisTest, PartialEscape3) {
{},
InvokeType::kStatic,
{ nullptr, 0 },
- HInvokeStaticOrDirect::ClinitCheckRequirement::kNone,
- !graph_->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kNone);
HInstruction* goto_left = new (GetAllocator()) HGoto();
call_left->AsInvoke()->SetRawInputAt(0, new_inst);
left->AddInstruction(call_left);
@@ -1409,8 +1406,7 @@ TEST_F(LoadStoreAnalysisTest, TotalEscapeAdjacentNoPredicated) {
{},
InvokeType::kStatic,
{nullptr, 0},
- HInvokeStaticOrDirect::ClinitCheckRequirement::kNone,
- !graph_->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kNone);
HInstruction* goto_left = new (GetAllocator()) HGoto();
call_left->AsInvoke()->SetRawInputAt(0, new_inst);
left->AddInstruction(call_left);
@@ -1511,8 +1507,7 @@ TEST_F(LoadStoreAnalysisTest, TotalEscapeAdjacent) {
{},
InvokeType::kStatic,
{ nullptr, 0 },
- HInvokeStaticOrDirect::ClinitCheckRequirement::kNone,
- !graph_->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kNone);
HInstruction* goto_left = new (GetAllocator()) HGoto();
call_left->AsInvoke()->SetRawInputAt(0, new_inst);
left->AddInstruction(call_left);
@@ -1623,8 +1618,7 @@ TEST_F(LoadStoreAnalysisTest, TotalEscape) {
{},
InvokeType::kStatic,
{ nullptr, 0 },
- HInvokeStaticOrDirect::ClinitCheckRequirement::kNone,
- !graph_->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kNone);
HInstruction* goto_left = new (GetAllocator()) HGoto();
call_left->AsInvoke()->SetRawInputAt(0, new_inst);
left->AddInstruction(call_left);
@@ -1640,8 +1634,7 @@ TEST_F(LoadStoreAnalysisTest, TotalEscape) {
{},
InvokeType::kStatic,
{ nullptr, 0 },
- HInvokeStaticOrDirect::ClinitCheckRequirement::kNone,
- !graph_->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kNone);
HInstruction* write_right = new (GetAllocator()) HInstanceFieldSet(new_inst,
c0,
nullptr,
@@ -1810,8 +1803,7 @@ TEST_F(LoadStoreAnalysisTest, DoubleDiamondEscape) {
{},
InvokeType::kStatic,
{ nullptr, 0 },
- HInvokeStaticOrDirect::ClinitCheckRequirement::kNone,
- !graph_->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kNone);
HInstruction* goto_left = new (GetAllocator()) HGoto();
call_left->AsInvoke()->SetRawInputAt(0, new_inst);
high_left->AddInstruction(call_left);
@@ -1867,8 +1859,7 @@ TEST_F(LoadStoreAnalysisTest, DoubleDiamondEscape) {
{},
InvokeType::kStatic,
{ nullptr, 0 },
- HInvokeStaticOrDirect::ClinitCheckRequirement::kNone,
- !graph_->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kNone);
HInstruction* goto_low_left = new (GetAllocator()) HGoto();
call_low_left->AsInvoke()->SetRawInputAt(0, new_inst);
low_left->AddInstruction(call_low_left);
@@ -2025,8 +2016,7 @@ TEST_F(LoadStoreAnalysisTest, PartialPhiPropagation1) {
{},
InvokeType::kStatic,
{nullptr, 0},
- HInvokeStaticOrDirect::ClinitCheckRequirement::kNone,
- !graph_->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kNone);
HInstruction* goto_left_merge = new (GetAllocator()) HGoto();
left_phi->SetRawInputAt(0, obj_param);
left_phi->SetRawInputAt(1, new_inst);
diff --git a/compiler/optimizing/nodes.cc b/compiler/optimizing/nodes.cc
index 3790058879..c99cfab05f 100644
--- a/compiler/optimizing/nodes.cc
+++ b/compiler/optimizing/nodes.cc
@@ -3571,8 +3571,8 @@ static inline IntrinsicExceptions GetExceptionsIntrinsic(Intrinsics i) {
return kCanThrow;
}
-void HInvoke::SetResolvedMethod(ArtMethod* method, bool enable_intrinsic_opt) {
- if (method != nullptr && method->IsIntrinsic() && enable_intrinsic_opt) {
+void HInvoke::SetResolvedMethod(ArtMethod* method) {
+ if (method != nullptr && method->IsIntrinsic()) {
Intrinsics intrinsic = static_cast<Intrinsics>(method->GetIntrinsic());
SetIntrinsic(intrinsic,
NeedsEnvironmentIntrinsic(intrinsic),
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h
index 28112d176a..fc5d2196da 100644
--- a/compiler/optimizing/nodes.h
+++ b/compiler/optimizing/nodes.h
@@ -4756,7 +4756,7 @@ class HInvoke : public HVariableInputSizeInstruction {
bool IsIntrinsic() const { return intrinsic_ != Intrinsics::kNone; }
ArtMethod* GetResolvedMethod() const { return resolved_method_; }
- void SetResolvedMethod(ArtMethod* method, bool enable_intrinsic_opt);
+ void SetResolvedMethod(ArtMethod* method);
MethodReference GetMethodReference() const { return method_reference_; }
@@ -4785,8 +4785,7 @@ class HInvoke : public HVariableInputSizeInstruction {
MethodReference method_reference,
ArtMethod* resolved_method,
MethodReference resolved_method_reference,
- InvokeType invoke_type,
- bool enable_intrinsic_opt)
+ InvokeType invoke_type)
: HVariableInputSizeInstruction(
kind,
return_type,
@@ -4802,7 +4801,7 @@ class HInvoke : public HVariableInputSizeInstruction {
intrinsic_optimizations_(0) {
SetPackedField<InvokeTypeField>(invoke_type);
SetPackedFlag<kFlagCanThrow>(true);
- SetResolvedMethod(resolved_method, enable_intrinsic_opt);
+ SetResolvedMethod(resolved_method);
}
DEFAULT_COPY_CONSTRUCTOR(Invoke);
@@ -4835,8 +4834,7 @@ class HInvokeUnresolved final : public HInvoke {
method_reference,
nullptr,
MethodReference(nullptr, 0u),
- invoke_type,
- /* enable_intrinsic_opt= */ false) {
+ invoke_type) {
}
bool IsClonable() const override { return true; }
@@ -4859,8 +4857,7 @@ class HInvokePolymorphic final : public HInvoke {
// to pass intrinsic information to the HInvokePolymorphic node.
ArtMethod* resolved_method,
MethodReference resolved_method_reference,
- dex::ProtoIndex proto_idx,
- bool enable_intrinsic_opt)
+ dex::ProtoIndex proto_idx)
: HInvoke(kInvokePolymorphic,
allocator,
number_of_arguments,
@@ -4870,8 +4867,7 @@ class HInvokePolymorphic final : public HInvoke {
method_reference,
resolved_method,
resolved_method_reference,
- kPolymorphic,
- enable_intrinsic_opt),
+ kPolymorphic),
proto_idx_(proto_idx) {
}
@@ -4893,8 +4889,7 @@ class HInvokeCustom final : public HInvoke {
uint32_t call_site_index,
DataType::Type return_type,
uint32_t dex_pc,
- MethodReference method_reference,
- bool enable_intrinsic_opt)
+ MethodReference method_reference)
: HInvoke(kInvokeCustom,
allocator,
number_of_arguments,
@@ -4904,8 +4899,7 @@ class HInvokeCustom final : public HInvoke {
method_reference,
/* resolved_method= */ nullptr,
MethodReference(nullptr, 0u),
- kStatic,
- enable_intrinsic_opt),
+ kStatic),
call_site_index_(call_site_index) {
}
@@ -4952,8 +4946,7 @@ class HInvokeStaticOrDirect final : public HInvoke {
DispatchInfo dispatch_info,
InvokeType invoke_type,
MethodReference resolved_method_reference,
- ClinitCheckRequirement clinit_check_requirement,
- bool enable_intrinsic_opt)
+ ClinitCheckRequirement clinit_check_requirement)
: HInvoke(kInvokeStaticOrDirect,
allocator,
number_of_arguments,
@@ -4966,8 +4959,7 @@ class HInvokeStaticOrDirect final : public HInvoke {
method_reference,
resolved_method,
resolved_method_reference,
- invoke_type,
- enable_intrinsic_opt),
+ invoke_type),
dispatch_info_(dispatch_info) {
SetPackedField<ClinitCheckRequirementField>(clinit_check_requirement);
}
@@ -5179,8 +5171,7 @@ class HInvokeVirtual final : public HInvoke {
MethodReference method_reference,
ArtMethod* resolved_method,
MethodReference resolved_method_reference,
- uint32_t vtable_index,
- bool enable_intrinsic_opt)
+ uint32_t vtable_index)
: HInvoke(kInvokeVirtual,
allocator,
number_of_arguments,
@@ -5190,8 +5181,7 @@ class HInvokeVirtual final : public HInvoke {
method_reference,
resolved_method,
resolved_method_reference,
- kVirtual,
- enable_intrinsic_opt),
+ kVirtual),
vtable_index_(vtable_index) {
}
@@ -5243,8 +5233,7 @@ class HInvokeInterface final : public HInvoke {
ArtMethod* resolved_method,
MethodReference resolved_method_reference,
uint32_t imt_index,
- MethodLoadKind load_kind,
- bool enable_intrinsic_opt)
+ MethodLoadKind load_kind)
: HInvoke(kInvokeInterface,
allocator,
number_of_arguments + (NeedsCurrentMethod(load_kind) ? 1 : 0),
@@ -5254,8 +5243,7 @@ class HInvokeInterface final : public HInvoke {
method_reference,
resolved_method,
resolved_method_reference,
- kInterface,
- enable_intrinsic_opt),
+ kInterface),
imt_index_(imt_index),
hidden_argument_load_kind_(load_kind) {
}
diff --git a/compiler/optimizing/optimizing_unit_test.h b/compiler/optimizing/optimizing_unit_test.h
index 2e05c41f01..f18ffc7f83 100644
--- a/compiler/optimizing/optimizing_unit_test.h
+++ b/compiler/optimizing/optimizing_unit_test.h
@@ -461,8 +461,7 @@ class OptimizingUnitTestHelper {
HInvokeStaticOrDirect::DispatchInfo{},
InvokeType::kStatic,
/* resolved_method_reference= */ method_reference,
- HInvokeStaticOrDirect::ClinitCheckRequirement::kNone,
- !graph_->IsDebuggable());
+ HInvokeStaticOrDirect::ClinitCheckRequirement::kNone);
for (auto [ins, idx] : ZipCount(MakeIterationRange(args))) {
res->SetRawInputAt(idx, ins);
}
diff --git a/test/988-method-trace/expected-stdout.txt b/test/988-method-trace/expected-stdout.txt
index 7ab727bf8a..9460503286 100644
--- a/test/988-method-trace/expected-stdout.txt
+++ b/test/988-method-trace/expected-stdout.txt
@@ -195,7 +195,7 @@ fibonacci(5)=5
.....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: Bad argument: -19 < 0
art.Test988.iter_fibonacci(Test988.java:280)
art.Test988$IterOp.applyAsInt(Test988.java:275)
- art.Test988.doFibTest(Test988.java:425)
+ art.Test988.doFibTest(Test988.java:413)
art.Test988.run(Test988.java:369)
<additional hidden frames>
>
@@ -214,7 +214,7 @@ fibonacci(5)=5
fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
art.Test988.iter_fibonacci(Test988.java:280)
art.Test988$IterOp.applyAsInt(Test988.java:275)
- art.Test988.doFibTest(Test988.java:425)
+ art.Test988.doFibTest(Test988.java:413)
art.Test988.run(Test988.java:369)
<additional hidden frames>
@@ -323,7 +323,7 @@ fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
.....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: Bad argument: -19 < 0
art.Test988.fibonacci(Test988.java:302)
art.Test988$RecurOp.applyAsInt(Test988.java:297)
- art.Test988.doFibTest(Test988.java:425)
+ art.Test988.doFibTest(Test988.java:413)
art.Test988.run(Test988.java:370)
<additional hidden frames>
>
@@ -342,7 +342,7 @@ fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
art.Test988.fibonacci(Test988.java:302)
art.Test988$RecurOp.applyAsInt(Test988.java:297)
- art.Test988.doFibTest(Test988.java:425)
+ art.Test988.doFibTest(Test988.java:413)
art.Test988.run(Test988.java:370)
<additional hidden frames>
@@ -369,7 +369,7 @@ fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
.....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: bad argument
art.Test988.nativeFibonacci(Native Method)
art.Test988$NativeOp.applyAsInt(Test988.java:312)
- art.Test988.doFibTest(Test988.java:425)
+ art.Test988.doFibTest(Test988.java:413)
art.Test988.run(Test988.java:371)
<additional hidden frames>
>
@@ -388,7 +388,7 @@ fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
fibonacci(-19) -> java.lang.Error: bad argument
art.Test988.nativeFibonacci(Native Method)
art.Test988$NativeOp.applyAsInt(Test988.java:312)
- art.Test988.doFibTest(Test988.java:425)
+ art.Test988.doFibTest(Test988.java:413)
art.Test988.run(Test988.java:371)
<additional hidden frames>
@@ -561,13 +561,13 @@ fibonacci(-19) -> java.lang.Error: bad argument
..=> public int java.lang.String.length()
..<= public int java.lang.String.length() -> <class java.lang.Integer: 17>
..=> public synchronized java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.String)
-..<= public synchronized java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.String) -> <class java.lang.StringBuffer: some large string bufferhellohello>
+..<= public synchronized java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.String) -> <class java.lang.StringBuffer: some large string bufferhello>
..=> public synchronized int java.lang.StringBuffer.length()
..<= public synchronized int java.lang.StringBuffer.length() -> <class java.lang.Integer: 29>
..=> public synchronized java.lang.String java.lang.StringBuffer.toString()
..<= public synchronized java.lang.String java.lang.StringBuffer.toString() -> <class java.lang.String: some large string bufferhello>
..=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
-..<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: some large string builderhellohello>
+..<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: some large string builderhello>
..=> public int java.lang.StringBuilder.length()
..<= public int java.lang.StringBuilder.length() -> <class java.lang.Integer: 30>
..=> public java.lang.String java.lang.StringBuilder.toString()
@@ -585,284 +585,3 @@ fibonacci(-19) -> java.lang.Error: bad argument
=> public static java.lang.Thread java.lang.Thread.currentThread()
<= public static java.lang.Thread java.lang.Thread.currentThread() -> <<non-deterministic>: <non-deterministic>>
=> public static void art.Trace.disableTracing(java.lang.Thread)
-<= public static void art.Trace.enableTracing(java.lang.Class,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.Thread) -> <null: null>
-<= public static void art.Trace.enableMethodTracing(java.lang.Class,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.Thread) -> <null: null>
-=> static void art.Test988$IntrinsicsTest.doTest()
-=> static void art.Test988Intrinsics.test()
-.=> public static long java.lang.Double.doubleToRawLongBits(double)
-.<= public static long java.lang.Double.doubleToRawLongBits(double) -> <class java.lang.Long: 0>
-.=> public static long java.lang.Double.doubleToLongBits(double)
-..=> public static boolean java.lang.Double.isNaN(double)
-..<= public static boolean java.lang.Double.isNaN(double) -> <class java.lang.Boolean: false>
-..=> public static long java.lang.Double.doubleToRawLongBits(double)
-..<= public static long java.lang.Double.doubleToRawLongBits(double) -> <class java.lang.Long: 0>
-.<= public static long java.lang.Double.doubleToLongBits(double) -> <class java.lang.Long: 0>
-.=> public static boolean java.lang.Double.isInfinite(double)
-.<= public static boolean java.lang.Double.isInfinite(double) -> <class java.lang.Boolean: false>
-.=> public static boolean java.lang.Double.isNaN(double)
-.<= public static boolean java.lang.Double.isNaN(double) -> <class java.lang.Boolean: false>
-.=> public static double java.lang.Double.longBitsToDouble(long)
-.<= public static double java.lang.Double.longBitsToDouble(long) -> <class java.lang.Double: 0.0>
-.=> public static int java.lang.Float.floatToRawIntBits(float)
-.<= public static int java.lang.Float.floatToRawIntBits(float) -> <class java.lang.Integer: 0>
-.=> public static int java.lang.Float.floatToIntBits(float)
-..=> public static boolean java.lang.Float.isNaN(float)
-..<= public static boolean java.lang.Float.isNaN(float) -> <class java.lang.Boolean: false>
-..=> public static int java.lang.Float.floatToRawIntBits(float)
-..<= public static int java.lang.Float.floatToRawIntBits(float) -> <class java.lang.Integer: 0>
-.<= public static int java.lang.Float.floatToIntBits(float) -> <class java.lang.Integer: 0>
-.=> public static boolean java.lang.Float.isInfinite(float)
-.<= public static boolean java.lang.Float.isInfinite(float) -> <class java.lang.Boolean: false>
-.=> public static boolean java.lang.Float.isNaN(float)
-.<= public static boolean java.lang.Float.isNaN(float) -> <class java.lang.Boolean: false>
-.=> public static float java.lang.Float.intBitsToFloat(int)
-.<= public static float java.lang.Float.intBitsToFloat(int) -> <class java.lang.Float: 0.0>
-.=> public static int java.lang.Integer.reverse(int)
-..=> public static int java.lang.Integer.reverseBytes(int)
-..<= public static int java.lang.Integer.reverseBytes(int) -> <class java.lang.Integer: 0>
-.<= public static int java.lang.Integer.reverse(int) -> <class java.lang.Integer: 0>
-.=> public static int java.lang.Integer.reverseBytes(int)
-.<= public static int java.lang.Integer.reverseBytes(int) -> <class java.lang.Integer: 0>
-.=> public static int java.lang.Integer.bitCount(int)
-.<= public static int java.lang.Integer.bitCount(int) -> <class java.lang.Integer: 0>
-.=> public static int java.lang.Integer.compare(int,int)
-.<= public static int java.lang.Integer.compare(int,int) -> <class java.lang.Integer: 0>
-.=> public static int java.lang.Integer.highestOneBit(int)
-..=> public static int java.lang.Integer.numberOfLeadingZeros(int)
-..<= public static int java.lang.Integer.numberOfLeadingZeros(int) -> <class java.lang.Integer: 32>
-.<= public static int java.lang.Integer.highestOneBit(int) -> <class java.lang.Integer: 0>
-.=> public static int java.lang.Integer.lowestOneBit(int)
-.<= public static int java.lang.Integer.lowestOneBit(int) -> <class java.lang.Integer: 0>
-.=> public static int java.lang.Integer.numberOfLeadingZeros(int)
-.<= public static int java.lang.Integer.numberOfLeadingZeros(int) -> <class java.lang.Integer: 32>
-.=> public static int java.lang.Integer.numberOfTrailingZeros(int)
-.<= public static int java.lang.Integer.numberOfTrailingZeros(int) -> <class java.lang.Integer: 32>
-.=> public static int java.lang.Integer.rotateRight(int,int)
-.<= public static int java.lang.Integer.rotateRight(int,int) -> <class java.lang.Integer: 0>
-.=> public static int java.lang.Integer.rotateLeft(int,int)
-.<= public static int java.lang.Integer.rotateLeft(int,int) -> <class java.lang.Integer: 0>
-.=> public static int java.lang.Integer.signum(int)
-.<= public static int java.lang.Integer.signum(int) -> <class java.lang.Integer: 0>
-.=> public static long java.lang.Long.reverse(long)
-..=> public static long java.lang.Long.reverseBytes(long)
-..<= public static long java.lang.Long.reverseBytes(long) -> <class java.lang.Long: 0>
-.<= public static long java.lang.Long.reverse(long) -> <class java.lang.Long: 0>
-.=> public static long java.lang.Long.reverseBytes(long)
-.<= public static long java.lang.Long.reverseBytes(long) -> <class java.lang.Long: 0>
-.=> public static int java.lang.Long.bitCount(long)
-.<= public static int java.lang.Long.bitCount(long) -> <class java.lang.Integer: 0>
-.=> public static int java.lang.Long.compare(long,long)
-.<= public static int java.lang.Long.compare(long,long) -> <class java.lang.Integer: 0>
-.=> public static long java.lang.Long.highestOneBit(long)
-..=> public static int java.lang.Long.numberOfLeadingZeros(long)
-..<= public static int java.lang.Long.numberOfLeadingZeros(long) -> <class java.lang.Integer: 64>
-.<= public static long java.lang.Long.highestOneBit(long) -> <class java.lang.Long: 0>
-.=> public static long java.lang.Long.lowestOneBit(long)
-.<= public static long java.lang.Long.lowestOneBit(long) -> <class java.lang.Long: 0>
-.=> public static int java.lang.Long.numberOfLeadingZeros(long)
-..=> public static int java.lang.Integer.numberOfLeadingZeros(int)
-..<= public static int java.lang.Integer.numberOfLeadingZeros(int) -> <class java.lang.Integer: 32>
-.<= public static int java.lang.Long.numberOfLeadingZeros(long) -> <class java.lang.Integer: 64>
-.=> public static int java.lang.Long.numberOfTrailingZeros(long)
-..=> public static int java.lang.Integer.numberOfTrailingZeros(int)
-..<= public static int java.lang.Integer.numberOfTrailingZeros(int) -> <class java.lang.Integer: 32>
-.<= public static int java.lang.Long.numberOfTrailingZeros(long) -> <class java.lang.Integer: 64>
-.=> public static long java.lang.Long.rotateRight(long,int)
-.<= public static long java.lang.Long.rotateRight(long,int) -> <class java.lang.Long: 0>
-.=> public static long java.lang.Long.rotateLeft(long,int)
-.<= public static long java.lang.Long.rotateLeft(long,int) -> <class java.lang.Long: 0>
-.=> public static int java.lang.Long.signum(long)
-.<= public static int java.lang.Long.signum(long) -> <class java.lang.Integer: 0>
-.=> public static short java.lang.Short.reverseBytes(short)
-.<= public static short java.lang.Short.reverseBytes(short) -> <class java.lang.Short: 0>
-.=> public static double java.lang.Math.abs(double)
-..=> public static long java.lang.Double.doubleToRawLongBits(double)
-..<= public static long java.lang.Double.doubleToRawLongBits(double) -> <class java.lang.Long: 0>
-..=> public static double java.lang.Double.longBitsToDouble(long)
-..<= public static double java.lang.Double.longBitsToDouble(long) -> <class java.lang.Double: 0.0>
-.<= public static double java.lang.Math.abs(double) -> <class java.lang.Double: 0.0>
-.=> public static float java.lang.Math.abs(float)
-..=> public static int java.lang.Float.floatToRawIntBits(float)
-..<= public static int java.lang.Float.floatToRawIntBits(float) -> <class java.lang.Integer: 0>
-..=> public static float java.lang.Float.intBitsToFloat(int)
-..<= public static float java.lang.Float.intBitsToFloat(int) -> <class java.lang.Float: 0.0>
-.<= public static float java.lang.Math.abs(float) -> <class java.lang.Float: 0.0>
-.=> public static long java.lang.Math.abs(long)
-.<= public static long java.lang.Math.abs(long) -> <class java.lang.Long: 0>
-.=> public static int java.lang.Math.abs(int)
-.<= public static int java.lang.Math.abs(int) -> <class java.lang.Integer: 0>
-.=> public static double java.lang.Math.min(double,double)
-..=> public static long java.lang.Double.doubleToRawLongBits(double)
-..<= public static long java.lang.Double.doubleToRawLongBits(double) -> <class java.lang.Long: 0>
-.<= public static double java.lang.Math.min(double,double) -> <class java.lang.Double: 0.0>
-.=> public static float java.lang.Math.min(float,float)
-..=> public static int java.lang.Float.floatToRawIntBits(float)
-..<= public static int java.lang.Float.floatToRawIntBits(float) -> <class java.lang.Integer: 0>
-.<= public static float java.lang.Math.min(float,float) -> <class java.lang.Float: 0.0>
-.=> public static long java.lang.Math.min(long,long)
-.<= public static long java.lang.Math.min(long,long) -> <class java.lang.Long: 0>
-.=> public static int java.lang.Math.min(int,int)
-.<= public static int java.lang.Math.min(int,int) -> <class java.lang.Integer: 0>
-.=> public static double java.lang.Math.max(double,double)
-..=> public static long java.lang.Double.doubleToRawLongBits(double)
-..<= public static long java.lang.Double.doubleToRawLongBits(double) -> <class java.lang.Long: 0>
-.<= public static double java.lang.Math.max(double,double) -> <class java.lang.Double: 0.0>
-.=> public static float java.lang.Math.max(float,float)
-..=> public static int java.lang.Float.floatToRawIntBits(float)
-..<= public static int java.lang.Float.floatToRawIntBits(float) -> <class java.lang.Integer: 0>
-.<= public static float java.lang.Math.max(float,float) -> <class java.lang.Float: 0.0>
-.=> public static long java.lang.Math.max(long,long)
-.<= public static long java.lang.Math.max(long,long) -> <class java.lang.Long: 0>
-.=> public static int java.lang.Math.max(int,int)
-.<= public static int java.lang.Math.max(int,int) -> <class java.lang.Integer: 0>
-.=> public static double java.lang.Math.cos(double)
-.<= public static double java.lang.Math.cos(double) -> <class java.lang.Double: 1.0>
-.=> public static double java.lang.Math.sin(double)
-.<= public static double java.lang.Math.sin(double) -> <class java.lang.Double: 0.0>
-.=> public static double java.lang.Math.acos(double)
-.<= public static double java.lang.Math.acos(double) -> <class java.lang.Double: 1.5707963267948966>
-.=> public static double java.lang.Math.asin(double)
-.<= public static double java.lang.Math.asin(double) -> <class java.lang.Double: 0.0>
-.=> public static double java.lang.Math.atan(double)
-.<= public static double java.lang.Math.atan(double) -> <class java.lang.Double: 0.0>
-.=> public static double java.lang.Math.atan2(double,double)
-.<= public static double java.lang.Math.atan2(double,double) -> <class java.lang.Double: 0.0>
-.=> public static double java.lang.Math.cbrt(double)
-.<= public static double java.lang.Math.cbrt(double) -> <class java.lang.Double: 0.0>
-.=> public static double java.lang.Math.cosh(double)
-.<= public static double java.lang.Math.cosh(double) -> <class java.lang.Double: 1.0>
-.=> public static double java.lang.Math.exp(double)
-.<= public static double java.lang.Math.exp(double) -> <class java.lang.Double: 1.0>
-.=> public static double java.lang.Math.expm1(double)
-.<= public static double java.lang.Math.expm1(double) -> <class java.lang.Double: 0.0>
-.=> public static double java.lang.Math.hypot(double,double)
-.<= public static double java.lang.Math.hypot(double,double) -> <class java.lang.Double: 0.0>
-.=> public static double java.lang.Math.log(double)
-.<= public static double java.lang.Math.log(double) -> <class java.lang.Double: -Infinity>
-.=> public static double java.lang.Math.log10(double)
-.<= public static double java.lang.Math.log10(double) -> <class java.lang.Double: -Infinity>
-.=> public static double java.lang.Math.nextAfter(double,double)
-.<= public static double java.lang.Math.nextAfter(double,double) -> <class java.lang.Double: 0.0>
-.=> public static double java.lang.Math.sinh(double)
-.<= public static double java.lang.Math.sinh(double) -> <class java.lang.Double: 0.0>
-.=> public static double java.lang.Math.tan(double)
-.<= public static double java.lang.Math.tan(double) -> <class java.lang.Double: 0.0>
-.=> public static double java.lang.Math.tanh(double)
-.<= public static double java.lang.Math.tanh(double) -> <class java.lang.Double: 0.0>
-.=> public static double java.lang.Math.sqrt(double)
-.<= public static double java.lang.Math.sqrt(double) -> <class java.lang.Double: 0.0>
-.=> public static double java.lang.Math.ceil(double)
-.<= public static double java.lang.Math.ceil(double) -> <class java.lang.Double: 0.0>
-.=> public static double java.lang.Math.floor(double)
-.<= public static double java.lang.Math.floor(double) -> <class java.lang.Double: 0.0>
-.=> public static double java.lang.Math.rint(double)
-.<= public static double java.lang.Math.rint(double) -> <class java.lang.Double: 0.0>
-.=> public static long java.lang.Math.round(double)
-..=> public static long java.lang.Double.doubleToRawLongBits(double)
-..<= public static long java.lang.Double.doubleToRawLongBits(double) -> <class java.lang.Long: 0>
-.<= public static long java.lang.Math.round(double) -> <class java.lang.Long: 0>
-.=> public static int java.lang.Math.round(float)
-..=> public static int java.lang.Float.floatToRawIntBits(float)
-..<= public static int java.lang.Float.floatToRawIntBits(float) -> <class java.lang.Integer: 0>
-.<= public static int java.lang.Math.round(float) -> <class java.lang.Integer: 0>
-.=> public static java.lang.Thread java.lang.Thread.currentThread()
-.<= public static java.lang.Thread java.lang.Thread.currentThread() -> <<non-deterministic>: <non-deterministic>>
-.=> public char java.lang.String.charAt(int)
-.<= public char java.lang.String.charAt(int) -> <class java.lang.Character: s>
-.=> public int java.lang.String.compareTo(java.lang.String)
-.<= public int java.lang.String.compareTo(java.lang.String) -> <class java.lang.Integer: 11>
-.=> public boolean java.lang.String.equals(java.lang.Object)
-.<= public boolean java.lang.String.equals(java.lang.Object) -> <class java.lang.Boolean: false>
-.=> public int java.lang.String.indexOf(int)
-..=> public int java.lang.String.indexOf(int,int)
-..<= public int java.lang.String.indexOf(int,int) -> <class java.lang.Integer: -1>
-.<= public int java.lang.String.indexOf(int) -> <class java.lang.Integer: -1>
-.=> public int java.lang.String.indexOf(int,int)
-..=> public int java.lang.String.length()
-..<= public int java.lang.String.length() -> <class java.lang.Integer: 17>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: s>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: o>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: m>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: e>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: >
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: l>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: a>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: r>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: g>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: e>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: >
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: s>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: t>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: r>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: i>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: n>
-..=> public char java.lang.String.charAt(int)
-..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: g>
-.<= public int java.lang.String.indexOf(int,int) -> <class java.lang.Integer: -1>
-.=> public int java.lang.String.indexOf(java.lang.String)
-..=> public int java.lang.String.indexOf(java.lang.String,int)
-..<= public int java.lang.String.indexOf(java.lang.String,int) -> <class java.lang.Integer: -1>
-.<= public int java.lang.String.indexOf(java.lang.String) -> <class java.lang.Integer: -1>
-.=> public int java.lang.String.indexOf(java.lang.String,int)
-..=> private static int java.lang.String.indexOf(java.lang.String,java.lang.String,int)
-..<= private static int java.lang.String.indexOf(java.lang.String,java.lang.String,int) -> <class java.lang.Integer: -1>
-.<= public int java.lang.String.indexOf(java.lang.String,int) -> <class java.lang.Integer: -1>
-.=> public boolean java.lang.String.isEmpty()
-.<= public boolean java.lang.String.isEmpty() -> <class java.lang.Boolean: false>
-.=> public int java.lang.String.length()
-.<= public int java.lang.String.length() -> <class java.lang.Integer: 17>
-.=> public synchronized java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.String)
-..=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String)
-..<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String) -> <class java.lang.StringBuffer: some large string bufferhellohello>
-.<= public synchronized java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.String) -> <class java.lang.StringBuffer: some large string bufferhellohello>
-.=> public synchronized int java.lang.StringBuffer.length()
-.<= public synchronized int java.lang.StringBuffer.length() -> <class java.lang.Integer: 34>
-.=> public synchronized java.lang.String java.lang.StringBuffer.toString()
-..=> final boolean java.lang.AbstractStringBuilder.isLatin1()
-..<= final boolean java.lang.AbstractStringBuilder.isLatin1() -> <class java.lang.Boolean: true>
-..=> public static java.lang.String java.lang.StringLatin1.newString(byte[],int,int)
-..<= public static java.lang.String java.lang.StringLatin1.newString(byte[],int,int) -> <class java.lang.String: some large string bufferhellohello>
-.<= public synchronized java.lang.String java.lang.StringBuffer.toString() -> <class java.lang.String: some large string bufferhellohello>
-.=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
-..=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String)
-..<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: some large string builderhellohello>
-.<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: some large string builderhellohello>
-.=> public int java.lang.StringBuilder.length()
-..=> public int java.lang.AbstractStringBuilder.length()
-..<= public int java.lang.AbstractStringBuilder.length() -> <class java.lang.Integer: 35>
-.<= public int java.lang.StringBuilder.length() -> <class java.lang.Integer: 35>
-.=> public java.lang.String java.lang.StringBuilder.toString()
-..=> final boolean java.lang.AbstractStringBuilder.isLatin1()
-..<= final boolean java.lang.AbstractStringBuilder.isLatin1() -> <class java.lang.Boolean: true>
-..=> public static java.lang.String java.lang.StringLatin1.newString(byte[],int,int)
-..<= public static java.lang.String java.lang.StringLatin1.newString(byte[],int,int) -> <class java.lang.String: some large string builderhellohello>
-.<= public java.lang.String java.lang.StringBuilder.toString() -> <class java.lang.String: some large string builderhellohello>
-.=> public static java.lang.Integer java.lang.Integer.valueOf(int)
-.<= public static java.lang.Integer java.lang.Integer.valueOf(int) -> <class java.lang.Integer: 0>
-.=> public static boolean java.lang.Thread.interrupted()
-.<= public static boolean java.lang.Thread.interrupted() -> <class java.lang.Boolean: false>
-<= static void art.Test988Intrinsics.test() -> <null: null>
-=> public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int)
-<= public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int) -> <null: null>
-=> public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int)
-<= public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int) -> <null: null>
-<= static void art.Test988$IntrinsicsTest.doTest() -> <null: null>
-=> public static java.lang.Thread java.lang.Thread.currentThread()
-<= public static java.lang.Thread java.lang.Thread.currentThread() -> <<non-deterministic>: <non-deterministic>>
-=> public static void art.Trace.disableTracing(java.lang.Thread)
diff --git a/test/988-method-trace/src/Main.java b/test/988-method-trace/src/Main.java
index 4797c712db..9dd1142bb6 100644
--- a/test/988-method-trace/src/Main.java
+++ b/test/988-method-trace/src/Main.java
@@ -17,13 +17,5 @@
public class Main {
public static void main(String[] args) throws Exception {
art.Test988.run();
-
- // Test calls to intrinsics from JITed code.
- ensureJitCompiled(art.Test988Intrinsics.class, "test");
- art.Test988.testJitIntrinsics();
-
- art.Test988.printResults();
}
-
- public static native void ensureJitCompiled(Class<?> cls, String methodName);
}
diff --git a/test/988-method-trace/src/art/Test988.java b/test/988-method-trace/src/art/Test988.java
index 4a6de6ecbd..227ce620c5 100644
--- a/test/988-method-trace/src/art/Test988.java
+++ b/test/988-method-trace/src/art/Test988.java
@@ -377,19 +377,7 @@ public class Test988 {
sMethodTracingIgnore = false;
// Turn off method tracing so we don't have to deal with print internals.
Trace.disableTracing(Thread.currentThread());
- }
-
- public static void testJitIntrinsics() throws Exception {
- Trace.enableMethodTracing(
- Test988.class,
- Test988.class.getDeclaredMethod("notifyMethodEntry", Executable.class),
- Test988.class.getDeclaredMethod(
- "notifyMethodExit", Executable.class, Boolean.TYPE, Object.class),
- Thread.currentThread());
- sMethodTracingIgnore = true;
- IntrinsicsTest.doTest();
- sMethodTracingIgnore = false;
- Trace.disableTracing(Thread.currentThread());
+ printResults();
}
// This ensures that all classes we touch are loaded before we start recording traces. This
diff --git a/test/988-method-trace/src/art/Test988Intrinsics.java b/test/988-method-trace/src/art/Test988Intrinsics.java
index fe68d3ed75..3069f1a2c3 100644
--- a/test/988-method-trace/src/art/Test988Intrinsics.java
+++ b/test/988-method-trace/src/art/Test988Intrinsics.java
@@ -22,116 +22,114 @@
package art;
-public class Test988Intrinsics {
- // Pre-initialize *all* instance variables used so that their constructors are not in the trace.
- static java.lang.String instance_java_lang_String = "some large string";
- static java.lang.StringBuffer instance_java_lang_StringBuffer =
- new java.lang.StringBuffer("some large string buffer");
- static java.lang.StringBuilder instance_java_lang_StringBuilder =
- new java.lang.StringBuilder("some large string builder");
+class Test988Intrinsics {
+ // Pre-initialize *all* instance variables used so that their constructors are not in the trace.
+ static java.lang.String instance_java_lang_String = "some large string";
+ static java.lang.StringBuffer instance_java_lang_StringBuffer = new java.lang.StringBuffer("some large string buffer");
+ static java.lang.StringBuilder instance_java_lang_StringBuilder = new java.lang.StringBuilder("some large string builder");
- static void initialize() {
- // Ensure all static variables are initialized.
- // In addition, pre-load classes here so that we don't see diverging class loading traces.
- java.lang.Double.class.toString();
- java.lang.Float.class.toString();
- java.lang.Integer.class.toString();
- java.lang.Long.class.toString();
- java.lang.Short.class.toString();
- java.lang.Math.class.toString();
- java.lang.Thread.class.toString();
- java.lang.String.class.toString();
- java.lang.StringBuffer.class.toString();
- java.lang.StringBuilder.class.toString();
- }
+ static void initialize() {
+ // Ensure all static variables are initialized.
+ // In addition, pre-load classes here so that we don't see diverging class loading traces.
+ java.lang.Double.class.toString();
+ java.lang.Float.class.toString();
+ java.lang.Integer.class.toString();
+ java.lang.Long.class.toString();
+ java.lang.Short.class.toString();
+ java.lang.Math.class.toString();
+ java.lang.Thread.class.toString();
+ java.lang.String.class.toString();
+ java.lang.StringBuffer.class.toString();
+ java.lang.StringBuilder.class.toString();
+ }
- static void test() {
- // Call each intrinsic from art/runtime/intrinsics_list.h to make sure they are traced.
- java.lang.Double.doubleToRawLongBits(0.0);
- java.lang.Double.doubleToLongBits(0.0);
- java.lang.Double.isInfinite(0.0);
- java.lang.Double.isNaN(0.0);
- java.lang.Double.longBitsToDouble(0L);
- java.lang.Float.floatToRawIntBits(0.0f);
- java.lang.Float.floatToIntBits(0.0f);
- java.lang.Float.isInfinite(0.0f);
- java.lang.Float.isNaN(0.0f);
- java.lang.Float.intBitsToFloat(0);
- java.lang.Integer.reverse(0);
- java.lang.Integer.reverseBytes(0);
- java.lang.Integer.bitCount(0);
- java.lang.Integer.compare(0, 0);
- java.lang.Integer.highestOneBit(0);
- java.lang.Integer.lowestOneBit(0);
- java.lang.Integer.numberOfLeadingZeros(0);
- java.lang.Integer.numberOfTrailingZeros(0);
- java.lang.Integer.rotateRight(0, 0);
- java.lang.Integer.rotateLeft(0, 0);
- java.lang.Integer.signum(0);
- java.lang.Long.reverse(0L);
- java.lang.Long.reverseBytes(0L);
- java.lang.Long.bitCount(0L);
- java.lang.Long.compare(0L, 0L);
- java.lang.Long.highestOneBit(0L);
- java.lang.Long.lowestOneBit(0L);
- java.lang.Long.numberOfLeadingZeros(0L);
- java.lang.Long.numberOfTrailingZeros(0L);
- java.lang.Long.rotateRight(0L, 0);
- java.lang.Long.rotateLeft(0L, 0);
- java.lang.Long.signum(0L);
- java.lang.Short.reverseBytes((short) 0);
- java.lang.Math.abs(0.0);
- java.lang.Math.abs(0.0f);
- java.lang.Math.abs(0L);
- java.lang.Math.abs(0);
- java.lang.Math.min(0.0, 0.0);
- java.lang.Math.min(0.0f, 0.0f);
- java.lang.Math.min(0L, 0L);
- java.lang.Math.min(0, 0);
- java.lang.Math.max(0.0, 0.0);
- java.lang.Math.max(0.0f, 0.0f);
- java.lang.Math.max(0L, 0L);
- java.lang.Math.max(0, 0);
- java.lang.Math.cos(0.0);
- java.lang.Math.sin(0.0);
- java.lang.Math.acos(0.0);
- java.lang.Math.asin(0.0);
- java.lang.Math.atan(0.0);
- java.lang.Math.atan2(0.0, 0.0);
- java.lang.Math.cbrt(0.0);
- java.lang.Math.cosh(0.0);
- java.lang.Math.exp(0.0);
- java.lang.Math.expm1(0.0);
- java.lang.Math.hypot(0.0, 0.0);
- java.lang.Math.log(0.0);
- java.lang.Math.log10(0.0);
- java.lang.Math.nextAfter(0.0, 0.0);
- java.lang.Math.sinh(0.0);
- java.lang.Math.tan(0.0);
- java.lang.Math.tanh(0.0);
- java.lang.Math.sqrt(0.0);
- java.lang.Math.ceil(0.0);
- java.lang.Math.floor(0.0);
- java.lang.Math.rint(0.0);
- java.lang.Math.round(0.0);
- java.lang.Math.round(0.0f);
- java.lang.Thread.currentThread();
- instance_java_lang_String.charAt(0);
- instance_java_lang_String.compareTo("hello");
- instance_java_lang_String.equals((java.lang.Object) null);
- instance_java_lang_String.indexOf(0);
- instance_java_lang_String.indexOf(0, 0);
- instance_java_lang_String.indexOf("hello");
- instance_java_lang_String.indexOf("hello", 0);
- instance_java_lang_String.isEmpty();
- instance_java_lang_String.length();
- instance_java_lang_StringBuffer.append("hello");
- instance_java_lang_StringBuffer.length();
- instance_java_lang_StringBuffer.toString();
- instance_java_lang_StringBuilder.append("hello");
- instance_java_lang_StringBuilder.length();
- instance_java_lang_StringBuilder.toString();
- java.lang.Integer.valueOf(0);
- java.lang.Thread.interrupted();
- }
+ static void test() {
+ // Call each intrinsic from art/runtime/intrinsics_list.h to make sure they are traced.
+ java.lang.Double.doubleToRawLongBits(0.0);
+ java.lang.Double.doubleToLongBits(0.0);
+ java.lang.Double.isInfinite(0.0);
+ java.lang.Double.isNaN(0.0);
+ java.lang.Double.longBitsToDouble(0L);
+ java.lang.Float.floatToRawIntBits(0.0f);
+ java.lang.Float.floatToIntBits(0.0f);
+ java.lang.Float.isInfinite(0.0f);
+ java.lang.Float.isNaN(0.0f);
+ java.lang.Float.intBitsToFloat(0);
+ java.lang.Integer.reverse(0);
+ java.lang.Integer.reverseBytes(0);
+ java.lang.Integer.bitCount(0);
+ java.lang.Integer.compare(0, 0);
+ java.lang.Integer.highestOneBit(0);
+ java.lang.Integer.lowestOneBit(0);
+ java.lang.Integer.numberOfLeadingZeros(0);
+ java.lang.Integer.numberOfTrailingZeros(0);
+ java.lang.Integer.rotateRight(0, 0);
+ java.lang.Integer.rotateLeft(0, 0);
+ java.lang.Integer.signum(0);
+ java.lang.Long.reverse(0L);
+ java.lang.Long.reverseBytes(0L);
+ java.lang.Long.bitCount(0L);
+ java.lang.Long.compare(0L, 0L);
+ java.lang.Long.highestOneBit(0L);
+ java.lang.Long.lowestOneBit(0L);
+ java.lang.Long.numberOfLeadingZeros(0L);
+ java.lang.Long.numberOfTrailingZeros(0L);
+ java.lang.Long.rotateRight(0L, 0);
+ java.lang.Long.rotateLeft(0L, 0);
+ java.lang.Long.signum(0L);
+ java.lang.Short.reverseBytes((short)0);
+ java.lang.Math.abs(0.0);
+ java.lang.Math.abs(0.0f);
+ java.lang.Math.abs(0L);
+ java.lang.Math.abs(0);
+ java.lang.Math.min(0.0, 0.0);
+ java.lang.Math.min(0.0f, 0.0f);
+ java.lang.Math.min(0L, 0L);
+ java.lang.Math.min(0, 0);
+ java.lang.Math.max(0.0, 0.0);
+ java.lang.Math.max(0.0f, 0.0f);
+ java.lang.Math.max(0L, 0L);
+ java.lang.Math.max(0, 0);
+ java.lang.Math.cos(0.0);
+ java.lang.Math.sin(0.0);
+ java.lang.Math.acos(0.0);
+ java.lang.Math.asin(0.0);
+ java.lang.Math.atan(0.0);
+ java.lang.Math.atan2(0.0, 0.0);
+ java.lang.Math.cbrt(0.0);
+ java.lang.Math.cosh(0.0);
+ java.lang.Math.exp(0.0);
+ java.lang.Math.expm1(0.0);
+ java.lang.Math.hypot(0.0, 0.0);
+ java.lang.Math.log(0.0);
+ java.lang.Math.log10(0.0);
+ java.lang.Math.nextAfter(0.0, 0.0);
+ java.lang.Math.sinh(0.0);
+ java.lang.Math.tan(0.0);
+ java.lang.Math.tanh(0.0);
+ java.lang.Math.sqrt(0.0);
+ java.lang.Math.ceil(0.0);
+ java.lang.Math.floor(0.0);
+ java.lang.Math.rint(0.0);
+ java.lang.Math.round(0.0);
+ java.lang.Math.round(0.0f);
+ java.lang.Thread.currentThread();
+ instance_java_lang_String.charAt(0);
+ instance_java_lang_String.compareTo("hello");
+ instance_java_lang_String.equals((java.lang.Object)null);
+ instance_java_lang_String.indexOf(0);
+ instance_java_lang_String.indexOf(0, 0);
+ instance_java_lang_String.indexOf("hello");
+ instance_java_lang_String.indexOf("hello", 0);
+ instance_java_lang_String.isEmpty();
+ instance_java_lang_String.length();
+ instance_java_lang_StringBuffer.append("hello");
+ instance_java_lang_StringBuffer.length();
+ instance_java_lang_StringBuffer.toString();
+ instance_java_lang_StringBuilder.append("hello");
+ instance_java_lang_StringBuilder.length();
+ instance_java_lang_StringBuilder.toString();
+ java.lang.Integer.valueOf(0);
+ java.lang.Thread.interrupted();
+ }
}