void SwitchIRBuilder::SetProfiledInstruction(IR::Instr * instr, Js::ProfileId profileId) { m_profiledSwitchInstr = instr; m_switchOptBuildBail = true; //don't optimize if the switch expression is not an Integer (obtained via dynamic profiling data of the BeginSwitch opcode) bool hasProfile = m_profiledSwitchInstr->IsProfiledInstr() && m_profiledSwitchInstr->m_func->HasProfileInfo(); if (hasProfile) { const ValueType valueType(m_profiledSwitchInstr->m_func->GetReadOnlyProfileInfo()->GetSwitchProfileInfo(profileId)); instr->AsProfiledInstr()->u.FldInfo().valueType = valueType; m_switchIntDynProfile = valueType.IsLikelyTaggedInt(); m_switchStrDynProfile = valueType.IsLikelyString(); if (PHASE_TESTTRACE1(Js::SwitchOptPhase)) { char valueTypeStr[VALUE_TYPE_MAX_STRING_SIZE]; valueType.ToString(valueTypeStr); #if ENABLE_DEBUG_CONFIG_OPTIONS char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; #endif PHASE_PRINT_TESTTRACE1(Js::SwitchOptPhase, _u("Func %s, Switch %d: Expression Type : %S\n"), m_profiledSwitchInstr->m_func->GetDebugNumberSet(debugStringBuffer), m_profiledSwitchInstr->AsProfiledInstr()->u.profileId, valueTypeStr); } } }
void Symbol::RestoreHasFuncAssignment() { Assert(hasFuncAssignment == (this->symbolType == STFunction)); Assert(this->GetIsFormal() || !this->GetHasMaybeEscapedUse()); hasFuncAssignment = true; if (PHASE_TESTTRACE1(Js::StackFuncPhase)) { Output::Print(L"RestoreHasFuncAssignment: %s\n", this->GetName().GetBuffer()); Output::Flush(); } }