Quick compiler: fix NOT_LONG codegen
The llvm ir-builder converts Not operands into xor w/ -1. Detect
and restore original operation on the GBC to LIR path.
Change-Id: I219bcdc6b2e3ee8bb6cfea4c0b159deb10207359
diff --git a/src/compiler/codegen/MethodBitcode.cc b/src/compiler/codegen/MethodBitcode.cc
index b38ba77..8e9f15f 100644
--- a/src/compiler/codegen/MethodBitcode.cc
+++ b/src/compiler/codegen/MethodBitcode.cc
@@ -2363,7 +2363,10 @@
Instruction::Code dalvikOp = getDalvikOpcode(op, false, rlDest.wide);
RegLocation rlSrc2;
if (constRhs != NULL) {
- DCHECK_EQ(dalvikOp, Instruction::NOT_LONG);
+ // ir_builder converts NOT_LONG to xor src, -1. Restore
+ DCHECK_EQ(dalvikOp, Instruction::XOR_LONG);
+ DCHECK_EQ(-1L, constRhs->getSExtValue());
+ dalvikOp = Instruction::NOT_LONG;
rlSrc2 = rlSrc1;
} else {
rlSrc2 = getLoc(cUnit, rhs);