Details
-
Bug
-
Resolution: Fixed
-
P4
-
openjdk8u292, 11, 14
-
b26
-
aarch64
-
generic
Backports
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8246439 | 13.0.4 | Fei Yang | P4 | Resolved | Fixed | b04 |
JDK-8248707 | 11.0.9-oracle | Fei Yang | P4 | Resolved | Fixed | b01 |
JDK-8235546 | 11.0.7 | Fei Yang | P4 | Resolved | Fixed | b01 |
Description
When profiling return and parameters type from the interpreter on aarch64 platform, 'mdp' is loaded by test_method_data_pointer which is called by profile_return_type & profile_parameters_type.
It's not necessary to load mdo before calling __ profile_return_type or __ profile_parameters_type.
Patch:
diff --git a/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp b/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp
--- a/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp
+++ b/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp
@@ -444,7 +444,6 @@
Register obj = r0;
Register mdp = r1;
Register tmp = r2;
- __ ldr(mdp, Address(rmethod, Method::method_data_offset()));
__ profile_return_type(mdp, obj, tmp);
}
@@ -1634,13 +1633,8 @@
__ mov(rscratch2, true);
__ strb(rscratch2, do_not_unlock_if_synchronized);
- Label no_mdp;
Register mdp = r3;
- __ ldr(mdp, Address(rmethod, Method::method_data_offset()));
- __ cbz(mdp, no_mdp);
- __ add(mdp, mdp, in_bytes(MethodData::data_offset()));
__ profile_parameters_type(mdp, r1, r2);
- __ bind(no_mdp);
// increment invocation count & check for overflow
Label invocation_counter_overflow;
It's not necessary to load mdo before calling __ profile_return_type or __ profile_parameters_type.
Patch:
diff --git a/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp b/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp
--- a/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp
+++ b/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp
@@ -444,7 +444,6 @@
Register obj = r0;
Register mdp = r1;
Register tmp = r2;
- __ ldr(mdp, Address(rmethod, Method::method_data_offset()));
__ profile_return_type(mdp, obj, tmp);
}
@@ -1634,13 +1633,8 @@
__ mov(rscratch2, true);
__ strb(rscratch2, do_not_unlock_if_synchronized);
- Label no_mdp;
Register mdp = r3;
- __ ldr(mdp, Address(rmethod, Method::method_data_offset()));
- __ cbz(mdp, no_mdp);
- __ add(mdp, mdp, in_bytes(MethodData::data_offset()));
__ profile_parameters_type(mdp, r1, r2);
- __ bind(no_mdp);
// increment invocation count & check for overflow
Label invocation_counter_overflow;
Attachments
Issue Links
- backported by
-
JDK-8235546 aarch64: remove unnecessary load of mdo when profiling return and parameters type
- Resolved
-
JDK-8246439 aarch64: remove unnecessary load of mdo when profiling return and parameters type
- Resolved
-
JDK-8248707 aarch64: remove unnecessary load of mdo when profiling return and parameters type
- Resolved