Index: osprey/be/opt/opt_bdce.cxx
===================================================================
--- osprey/be/opt/opt_bdce.cxx	(revision 3472)
+++ osprey/be/opt/opt_bdce.cxx	(working copy)
@@ -1451,7 +1451,11 @@
 	     (opr == OPR_NEG || opr == OPR_BNOT || opr == OPR_LNOT ||
 	      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)) {
+	      opr == OPR_BXOR || opr == OPR_LAND || opr == OPR_LIOR) &&
+         (MTYPE_size_min(cr->Opnd(0)->Dtyp()) == 32) &&
+         (MTYPE_size_min(cr->Opnd(1)->Dtyp()) == 32)) {
+      // only deal with binary operations, both of the operands need to be 32 bit
+      // otherwise types do not match (opnd's result type vs. cr's desc type)
       // 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)
