void StackSym::SetIsConst() { Assert(this->m_isSingleDef); Assert(this->m_instrDef); IR::Opnd * src = this->m_instrDef->GetSrc1(); Assert(src->IsImmediateOpnd() || src->IsFloatConstOpnd() || src->IsSimd128ConstOpnd()); if (src->IsIntConstOpnd()) { Assert(this->m_instrDef->m_opcode == Js::OpCode::Ld_I4 || this->m_instrDef->m_opcode == Js::OpCode::LdC_A_I4 || LowererMD::IsAssign(this->m_instrDef)); this->SetIsIntConst(src->AsIntConstOpnd()->GetValue()); } else if (src->IsFloatConstOpnd()) { Assert(this->m_instrDef->m_opcode == Js::OpCode::LdC_A_R8); this->SetIsFloatConst(); } else if (src->IsSimd128ConstOpnd()){ Assert(this->m_instrDef->m_opcode == Js::OpCode::Simd128_LdC); this->SetIsSimd128Const(); } else { Assert(this->m_instrDef->m_opcode == Js::OpCode::Ld_A || LowererMD::IsAssign(this->m_instrDef)); Assert(src->IsAddrOpnd()); IR::AddrOpnd * addrOpnd = src->AsAddrOpnd(); this->m_isConst = true; if (addrOpnd->IsVar()) { Js::Var var = addrOpnd->m_address; if (Js::TaggedInt::Is(var)) { this->m_isIntConst = true; this->m_isTaggableIntConst = true; } else if (var && Js::JavascriptNumber::Is(var) && Js::JavascriptNumber::IsInt32_NoChecks(var)) { this->m_isIntConst = true; } } } }