invoke-direct-empty doesn't actually invoke anything.
Update bytecode.txt as well as a couple bits in the JIT in recognition
of this fact.
Change-Id: I989556d39b40a879021eaf841404e015076073be
diff --git a/vm/compiler/Frontend.c b/vm/compiler/Frontend.c
index 4e5a882..c2ee496 100644
--- a/vm/compiler/Frontend.c
+++ b/vm/compiler/Frontend.c
@@ -208,8 +208,7 @@
int flags = dexGetInstrFlags(dalvikInsn->opCode);
int dalvikOpCode = dalvikInsn->opCode;
- if ((flags & kInstrInvoke) &&
- (dalvikOpCode != OP_INVOKE_DIRECT_EMPTY)) {
+ if (flags & kInstrInvoke) {
attributes &= ~METHOD_IS_LEAF;
}
@@ -572,8 +571,7 @@
int flags = dexGetInstrFlags(insn->dalvikInsn.opCode);
- if ((flags & kInstrInvoke) &&
- (insn->dalvikInsn.opCode != OP_INVOKE_DIRECT_EMPTY)) {
+ if (flags & kInstrInvoke) {
assert(numInsts == 1);
CallsiteInfo *callsiteInfo =
dvmCompilerNew(sizeof(CallsiteInfo), true);
@@ -673,13 +671,10 @@
* currently only due to trace length constraint. In this case we need
* to generate an explicit branch at the end of the block to jump to
* the chaining cell.
- *
- * NOTE: INVOKE_DIRECT_EMPTY is actually not an invoke but a nop
*/
curBB->needFallThroughBranch =
((flags & (kInstrCanBranch | kInstrCanSwitch | kInstrCanReturn |
- kInstrInvoke)) == 0) ||
- (lastInsn->dalvikInsn.opCode == OP_INVOKE_DIRECT_EMPTY);
+ kInstrInvoke)) == 0);
/* Only form a loop if JIT_OPT_NO_LOOP is not set */
if (curBB->taken == NULL &&