Index: osprey/be/opt/opt_bdce.cxx
===================================================================
--- osprey/be/opt/opt_bdce.cxx	(revision 3501)
+++ osprey/be/opt/opt_bdce.cxx	(working copy)
@@ -1452,6 +1452,7 @@
 	      opr == OPR_ADD || opr == OPR_SUB || opr == OPR_MPY ||
 	      opr == OPR_BAND || opr == OPR_BIOR || opr == OPR_BNOR ||
 	      opr == OPR_BXOR || opr == OPR_LAND || opr == OPR_LIOR)) {
+      INT index;
       // change the operation to 32-bit, which is good for 32-bit target
       cr->Set_dtyp(Mtype_TransferSize(MTYPE_I4, cr->Dtyp()));
       if (cr->Dsctyp() != MTYPE_V)
@@ -1459,6 +1460,25 @@
       new_cr->Set_dtyp(Mtype_TransferSize(MTYPE_I4, new_cr->Dtyp()));
       if (new_cr->Dsctyp() != MTYPE_V)
         new_cr->Set_dsctyp(Mtype_TransferSize(MTYPE_I4, new_cr->Dsctyp()));
+
+      
+      for (index = 0; index < new_cr->Kid_count(); index++) {
+          CODEREP *opnd = new_cr->Opnd(index);
+          CODEREP *cvt_cr;
+          OPCODE   opc;
+          BOOL     need_cvt = FALSE;
+
+          if (new_cr->Dtyp() != opnd->Dtyp()) {
+              opc = OPCODE_make_op(OPR_CVT, new_cr->Dtyp(), opnd->Dtyp());
+              need_cvt = TRUE;
+          }
+
+          if (need_cvt) {
+              cvt_cr = Htable()->Add_unary_node(opc, opnd);
+              new_cr->Set_opnd(index, cvt_cr);
+              need_rehash = TRUE;
+          }
+      }
     }
 #endif
     // can also apply to some BAND and BIOR with constants
