diff --git a/vm/compiler/Dataflow.c b/vm/compiler/Dataflow.c
index 03cd145..dad52bf 100644
--- a/vm/compiler/Dataflow.c
+++ b/vm/compiler/Dataflow.c
@@ -823,7 +823,7 @@
                                       char *note)
 {
     char buffer[256];
-    int opcode = insn->opCode;
+    int opcode = insn->opcode;
     int dfAttributes = dvmCompilerDataFlowAttributes[opcode];
     char *ret;
 
@@ -948,7 +948,7 @@
 
     for (mir = bb->firstMIRInsn; mir; mir = mir->next) {
         int dfAttributes =
-            dvmCompilerDataFlowAttributes[mir->dalvikInsn.opCode];
+            dvmCompilerDataFlowAttributes[mir->dalvikInsn.opcode];
         DecodedInstruction *dInsn = &mir->dalvikInsn;
 
         if (dfAttributes & DF_HAS_USES) {
@@ -1050,7 +1050,7 @@
         mir->ssaRep = dvmCompilerNew(sizeof(SSARepresentation), true);
 
         int dfAttributes =
-            dvmCompilerDataFlowAttributes[mir->dalvikInsn.opCode];
+            dvmCompilerDataFlowAttributes[mir->dalvikInsn.opcode];
 
         int numUses = 0;
 
@@ -1167,7 +1167,7 @@
 
     for (mir = bb->firstMIRInsn; mir; mir = mir->next) {
         int dfAttributes =
-            dvmCompilerDataFlowAttributes[mir->dalvikInsn.opCode];
+            dvmCompilerDataFlowAttributes[mir->dalvikInsn.opcode];
 
         DecodedInstruction *dInsn = &mir->dalvikInsn;
 
@@ -1176,7 +1176,7 @@
         /* Handle instructions that set up constants directly */
         if (dfAttributes & DF_SETS_CONST) {
             if (dfAttributes & DF_DA) {
-                switch (dInsn->opCode) {
+                switch (dInsn->opcode) {
                     case OP_CONST_4:
                     case OP_CONST_16:
                     case OP_CONST:
@@ -1190,7 +1190,7 @@
                         break;
                 }
             } else if (dfAttributes & DF_DA_WIDE) {
-                switch (dInsn->opCode) {
+                switch (dInsn->opcode) {
                     case OP_CONST_WIDE_16:
                     case OP_CONST_WIDE_32:
                         setConstant(cUnit, mir->ssaRep->defs[0], dInsn->vB);
@@ -1247,14 +1247,14 @@
 
     /* If the bb doesn't have a phi it cannot contain an induction variable */
     if (bb->firstMIRInsn == NULL ||
-        bb->firstMIRInsn->dalvikInsn.opCode != kMirOpPhi) {
+        bb->firstMIRInsn->dalvikInsn.opcode != kMirOpPhi) {
         return;
     }
 
     /* Find basic induction variable first */
     for (mir = bb->firstMIRInsn; mir; mir = mir->next) {
         int dfAttributes =
-            dvmCompilerDataFlowAttributes[mir->dalvikInsn.opCode];
+            dvmCompilerDataFlowAttributes[mir->dalvikInsn.opcode];
 
         if (!(dfAttributes & DF_IS_LINEAR)) continue;
 
@@ -1266,14 +1266,14 @@
          */
         MIR *phi;
         for (phi = bb->firstMIRInsn; phi; phi = phi->next) {
-            if (phi->dalvikInsn.opCode != kMirOpPhi) break;
+            if (phi->dalvikInsn.opcode != kMirOpPhi) break;
 
             if (phi->ssaRep->defs[0] == mir->ssaRep->uses[0] &&
                 phi->ssaRep->uses[1] == mir->ssaRep->defs[0]) {
                 bool deltaIsConstant = false;
                 int deltaValue;
 
-                switch (mir->dalvikInsn.opCode) {
+                switch (mir->dalvikInsn.opcode) {
                     case OP_ADD_INT:
                         if (dvmIsBitSet(isConstantV,
                                         mir->ssaRep->uses[1])) {
@@ -1319,7 +1319,7 @@
     /* Find dependent induction variable now */
     for (mir = bb->firstMIRInsn; mir; mir = mir->next) {
         int dfAttributes =
-            dvmCompilerDataFlowAttributes[mir->dalvikInsn.opCode];
+            dvmCompilerDataFlowAttributes[mir->dalvikInsn.opcode];
 
         if (!(dfAttributes & DF_IS_LINEAR)) continue;
 
@@ -1340,7 +1340,7 @@
             bool cIsConstant = false;
             int c = 0;
 
-            switch (mir->dalvikInsn.opCode) {
+            switch (mir->dalvikInsn.opcode) {
                 case OP_ADD_INT:
                     if (dvmIsBitSet(isConstantV,
                                     mir->ssaRep->uses[1])) {
