[vmkit-commits] [vmkit] r180499 - Fixeing a bug in method findUnreachableCode
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 10:18:25 PDT 2013
Author: peter.senna
Date: Thu Apr 25 12:16:55 2013
New Revision: 180499
URL: http://llvm.org/viewvc/llvm-project?rev=180499&view=rev
Log:
Fixeing a bug in method findUnreachableCode
(cherry picked from commit 5524a515f26151923c8bf7867607bfd6756fcaa3)
Modified:
vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp
Modified: vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp?rev=180499&r1=180498&r2=180499&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJITOpcodes.cpp Thu Apr 25 12:16:55 2013
@@ -216,17 +216,11 @@ void JavaJIT::findUnreachableCode(Reader
uint8 b2,b3,b4;
switch (bytecode) {
case GOTO:
- b1 = reader.readU1();
- b2 = reader.readU1();
- step = (b1 << 8) | b2;
+ step = reader.readS2();
next_index = i_opcode + step;
break;
case GOTO_W:
- next_index = reader.readU1();
- b2 = reader.readU1();
- b3 = reader.readU1();
- b4 = reader.readU1();
- step32 = (next_index << 24) | (b2 << 16) | (b3 << 8) | b4;
+ step32 = reader.readS4();
next_index = step32 + i_opcode;
break;
case MULTIANEWARRAY:
@@ -240,9 +234,7 @@ void JavaJIT::findUnreachableCode(Reader
opcodeInfos[next_index].isReachable = true;
queue.push(next_index);
}
- b1 = reader.readU1();
- b2 = reader.readU1();
- step = (b1 << 8) | b2;
+ step = reader.readS2();
next_index = i_opcode + step;
break;
case JSR_W:
@@ -251,11 +243,7 @@ void JavaJIT::findUnreachableCode(Reader
opcodeInfos[next_index].isReachable = true;
queue.push(next_index);
}
- next_index = reader.readU1();
- b2 = reader.readU1();
- b3 = reader.readU1();
- b4 = reader.readU1();
- step32 = (next_index << 24) | (b2 << 16) | (b3 << 8) | b4;
+ step32 = reader.readS4();
next_index = step32 + i_opcode;
break;
case WIDE:
@@ -271,37 +259,19 @@ void JavaJIT::findUnreachableCode(Reader
x = i_opcode & 0x03; // remainder of division by 4
reader.cursor = start + 4 - x + i_opcode;
// default
- defaultIndex = reader.readU1();
- b2 = reader.readU1();
- b3 = reader.readU1();
- b4 = reader.readU1();
- step32 = (defaultIndex << 24) | (b2 << 16) | (b3 << 8) | b4;
+ step32 = reader.readS4();
defaultIndex = step32 + i_opcode;
if (defaultIndex < codeLen && !opcodeInfos[defaultIndex].isReachable) {
opcodeInfos[defaultIndex].isReachable = true;
queue.push(defaultIndex);
}
// low
- lowIndex = reader.readU1();
- b2 = reader.readU1();
- b3 = reader.readU1();
- b4 = reader.readU1();
- step32 = (lowIndex << 24) | (b2 << 16) | (b3 << 8) | b4;
- lowIndex = step32 + i_opcode;
+ lowIndex = reader.readS4();
// high
- highIndex = reader.readU1();
- b2 = reader.readU1();
- b3 = reader.readU1();
- b4 = reader.readU1();
- step32 = (highIndex << 24) | (b2 << 16) | (b3 << 8) | b4;
- highIndex = step32 + i_opcode;
+ highIndex = reader.readS4();
// all options
for (int i = 0 ; i < highIndex - lowIndex + 1 ; i++) {
- next_index = reader.readU1();
- b2 = reader.readU1();
- b3 = reader.readU1();
- b4 = reader.readU1();
- step32 = (next_index << 24) | (b2 << 16) | (b3 << 8) | b4;
+ step32 = reader.readS4();
next_index = step32 + i_opcode;
if (next_index < codeLen && !opcodeInfos[next_index].isReachable) {
opcodeInfos[next_index].isReachable = true;
@@ -315,32 +285,19 @@ void JavaJIT::findUnreachableCode(Reader
x = i_opcode & 0x03; // remainder of division by 4
reader.cursor = start + 4 - x + i_opcode;
// default
- defaultIndex = reader.readU1();
- b2 = reader.readU1();
- b3 = reader.readU1();
- b4 = reader.readU1();
- step32 = (defaultIndex << 24) | (b2 << 16) | (b3 << 8) | b4;
+ step32 = reader.readS4();//(defaultIndex << 24) | (b2 << 16) | (b3 << 8) | b4;
defaultIndex = step32 + i_opcode;
if (defaultIndex < codeLen && !opcodeInfos[defaultIndex].isReachable) {
opcodeInfos[defaultIndex].isReachable = true;
queue.push(defaultIndex);
}
// npairs
- lowIndex = reader.readU1();
- b2 = reader.readU1();
- b3 = reader.readU1();
- b4 = reader.readU1();
- step32 = (lowIndex << 24) | (b2 << 16) | (b3 << 8) | b4;
- lowIndex = step32 + i_opcode;
+ lowIndex = reader.readS4();
// all options
for (int i = 0 ; i < lowIndex ; i++) {
reader.cursor += 4; // skipping match
// offset
- next_index = reader.readU1();
- b2 = reader.readU1();
- b3 = reader.readU1();
- b4 = reader.readU1();
- step32 = (next_index << 24) | (b2 << 16) | (b3 << 8) | b4;
+ step32 = reader.readS4();
next_index = step32 + i_opcode;
if (next_index < codeLen && !opcodeInfos[next_index].isReachable) {
opcodeInfos[next_index].isReachable = true;
@@ -365,9 +322,6 @@ void JavaJIT::compileOpcodes(Reader& rea
uint32 jsrIndex = 0;
uint32 start = reader.cursor;
// Some compilers like Scala and Kotlin produce unreachable code.
- // However, it looks as this only occur when exception handlers are presented
- // I assume this is true, so I only check unreachable code if the method has exception handlers
- // nbHandlers
if (!opcodeInfos[0].isReachable) {
findUnreachableCode(reader, codeLength);
reader.cursor = start;
More information about the vmkit-commits
mailing list