[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