summaryrefslogtreecommitdiffstats
path: root/test/478-checker-clinit-check-pruning
Commit message (Collapse)AuthorAgeFilesLines
* Reduce the number of explicit clinit checks for static invokes.Roland Levillain2015-04-242-0/+78
| | | | | | | | Do not generate explicit clinit checks for static invokes when the class of the called method is a super class of the caller method's class (referrer class). Change-Id: I86ba18facef261fbb71f7ed20867756630ed3c53
* Ensure inlined static calls perform clinit checks in Optimizing.Roland Levillain2015-04-243-0/+207
Calls to static methods have implicit class initialization (clinit) checks of the method's declaring class in Optimizing. However, when such a static call is inlined, the implicit clinit check vanishes, possibly leading to an incorrect behavior. To ensure that inlining static methods does not change the behavior of a program, add explicit class initialization checks (art::HClinitCheck) as well as load class instructions (art::HLoadClass) as last input of static calls (art::HInvokeStaticOrDirect) in Optimizing' control flow graphs, when the declaring class is reachable and not known to be already initialized. Then when considering the inlining of a static method call, proceed only if the method has no implicit clinit check requirement. The added explicit clinit checks are already removed by the art::PrepareForRegisterAllocation visitor. This CL also extends this visitor to turn explicit clinit checks from static invokes into implicit ones after the inlining step, by removing the added art::HLoadClass nodes mentioned hereinbefore. Change-Id: I9ba452b8bd09ae1fdd9a3797ef556e3e7e19c651