void PeepsMD::PeepAssign(IR::Instr *instr) { IR::Opnd* dst = instr->GetDst(); IR::Opnd* src = instr->GetSrc1(); if(dst->IsRegOpnd() && instr->m_opcode == Js::OpCode::MOV) { if (src->IsImmediateOpnd() && src->GetImmediateValue(instr->m_func) == 0) { Assert(instr->GetSrc2() == NULL); // 32-bit XOR has a smaller encoding if (TySize[dst->GetType()] == MachPtr) { dst->SetType(TyInt32); } instr->m_opcode = Js::OpCode::XOR; instr->ReplaceSrc1(dst); instr->SetSrc2(dst); } else if (!instr->isInlineeEntryInstr) { if(src->IsIntConstOpnd() && src->GetSize() <= TySize[TyUint32]) { dst->SetType(TyUint32); } else if(src->IsAddrOpnd() && (((size_t)src->AsAddrOpnd()->m_address >> 32) == 0 )) { instr->ReplaceSrc1(IR::IntConstOpnd::New(::Math::PointerCastToIntegral<UIntConstType>(src->AsAddrOpnd()->m_address), TyUint32, instr->m_func)); dst->SetType(TyUint32); } } } else if (((instr->m_opcode == Js::OpCode::MOVSD || instr->m_opcode == Js::OpCode::MOVSS)