diff options
author | Ben Cheng <bccheng@android.com> | 2010-08-04 13:23:09 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@android.com> | 2010-08-04 14:53:53 -0700 |
commit | 4a41958266fb432629dea30832f4b3194667ba99 (patch) | |
tree | 168a7bb727cada767d1eeb2bec87436e6d7cb5be /vm/compiler/Compiler.h | |
parent | 19ddba58d8bd7bc39622f5014840d6702520337a (diff) | |
download | android_dalvik-4a41958266fb432629dea30832f4b3194667ba99.tar.gz android_dalvik-4a41958266fb432629dea30832f4b3194667ba99.tar.bz2 android_dalvik-4a41958266fb432629dea30832f4b3194667ba99.zip |
Bug fixes for JIT loop detection and formation
Specifically:
- Don't apply loop optimization if the basic induction variable is
manipulated (ie excluding cases like "i+=0")
- Fix a case where variables reloaded with constants in the body are
not considered as loop invariants
Bug: 2804188
Change-Id: Ia5ebb29bc6814b1be069e23794585f8313900b7d
Diffstat (limited to 'vm/compiler/Compiler.h')
-rw-r--r-- | vm/compiler/Compiler.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/vm/compiler/Compiler.h b/vm/compiler/Compiler.h index 1d074f229..9aeb66133 100644 --- a/vm/compiler/Compiler.h +++ b/vm/compiler/Compiler.h @@ -225,6 +225,13 @@ typedef enum JitMethodAttributes { #define METHOD_IS_GETTER (1 << kIsGetter) #define METHOD_IS_SETTER (1 << kIsSetter) +/* Vectors to provide optimization hints */ +typedef enum JitOptimizationHints { + kJitOptNoLoop = 0, // Disable loop formation/optimization +} JitOptimizationHints; + +#define JIT_OPT_NO_LOOP (1 << kJitOptNoLoop) + typedef struct CompilerMethodStats { const Method *method; // Used as hash entry signature int dalvikSize; // # of bytes for dalvik bytecodes @@ -254,7 +261,7 @@ bool dvmCompilerCanIncludeThisInstruction(const Method *method, bool dvmCompileMethod(struct CompilationUnit *cUnit, const Method *method, JitTranslationInfo *info); bool dvmCompileTrace(JitTraceDescription *trace, int numMaxInsts, - JitTranslationInfo *info, jmp_buf *bailPtr); + JitTranslationInfo *info, jmp_buf *bailPtr, int optHints); void dvmCompilerDumpStats(void); void dvmCompilerDrainQueue(void); void dvmJitUnchainAll(void); @@ -263,7 +270,7 @@ void dvmCompilerPerformSafePointChecks(void); void dvmCompilerInlineMIR(struct CompilationUnit *cUnit); void dvmInitializeSSAConversion(struct CompilationUnit *cUnit); int dvmConvertSSARegToDalvik(struct CompilationUnit *cUnit, int ssaReg); -void dvmCompilerLoopOpt(struct CompilationUnit *cUnit); +bool dvmCompilerLoopOpt(struct CompilationUnit *cUnit); void dvmCompilerNonLoopAnalysis(struct CompilationUnit *cUnit); void dvmCompilerFindLiveIn(struct CompilationUnit *cUnit, struct BasicBlock *bb); |