summaryrefslogtreecommitdiffstats
path: root/vm/Init.c
diff options
context:
space:
mode:
authorBen Cheng <bccheng@android.com>2011-02-03 14:02:06 -0800
committerBen Cheng <bccheng@android.com>2011-02-16 14:51:36 -0800
commit7ab74e14ed8dac0e51ce72fc6283ee2f1ffdf087 (patch)
tree091c7f0e4bbadb5d7e9b025323067d5954307bdc /vm/Init.c
parent0de7636e6eeb4f10fcfb5d926a59bf1ed3426c83 (diff)
downloadandroid_dalvik-7ab74e14ed8dac0e51ce72fc6283ee2f1ffdf087.tar.gz
android_dalvik-7ab74e14ed8dac0e51ce72fc6283ee2f1ffdf087.tar.bz2
android_dalvik-7ab74e14ed8dac0e51ce72fc6283ee2f1ffdf087.zip
Add support to do suspend polling on backward branches in JIT'ed code.
The polling is expensive for now as it is done through three instructions: ld/ld/branch. As a result, a bunch of bonus stuff has been worked on to mitigate the extra overhead: - Cleaned up resource flags for memory disambiguation. - Rewrote load/store elimination and scheduler routines to hide the ld/ld latency for GC flag. Seperate the dependency checking into memory disambiguation part and resource conflict part. - Allowed code motion for Dalvik/constant/non-aliasing loads to be hoisted above branches for null/range checks. - Created extended basic blocks following goto instructions so that longer instruction streams can be optimized as a whole. Without the bonus stuff, the performance dropped about ~5-10% on some benchmarks because of the lack of headroom to hide the polling latency in tight loops. With the bonus stuff, the performance delta is between +/-5% with polling code generated. With the bonus stuff but disabling polling, the new bonus stuff provides consistent performance improvements: CaffeineMark 3.6% Linpack 11.1% Scimark 9.7% Sieve 33.0% Checkers 6.0% As a result, GC polling is disabled by default but can be turned on through the -Xjitsuspendpoll flag for experimental purposes. Change-Id: Ia81fc85de3e2b70e6cc93bc37c2b845892003cdb
Diffstat (limited to 'vm/Init.c')
-rw-r--r--vm/Init.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/vm/Init.c b/vm/Init.c
index 4c731c95c..a1e058cb1 100644
--- a/vm/Init.c
+++ b/vm/Init.c
@@ -136,6 +136,7 @@ static void usage(const char* progName)
dvmFprintf(stderr, " -Xjitverbose\n");
dvmFprintf(stderr, " -Xjitprofile\n");
dvmFprintf(stderr, " -Xjitdisableopt\n");
+ dvmFprintf(stderr, " -Xjitsuspendpoll\n");
#endif
dvmFprintf(stderr, "\n");
dvmFprintf(stderr, "Configured with:"
@@ -966,6 +967,8 @@ static int processOptions(int argc, const char* const argv[],
} else {
gDvmJit.disableOpt = -1;
}
+ } else if (strncmp(argv[i], "-Xjitsuspendpoll", 16) == 0) {
+ gDvmJit.genSuspendPoll = true;
#endif
} else if (strncmp(argv[i], "-Xstacktracefile:", 17) == 0) {