#ifdef USING_VARIABLE_LIVE_RANGE
// Report the home change for this variable
- varLiveKeeper->siUpdateVariableLiveRange(varDsc, lcl->GetLclNum());
+ varLiveKeeper->siUpdateVariableLiveRange(varDsc, lcl->GetLclNum())
#endif // USING_VARIABLE_LIVE_RANGE
- // The new location is going live
- genUpdateRegLife(varDsc, /*isBorn*/ true, /*isDying*/ false DEBUGARG(treeNode));
+ // The new location is going live
+ genUpdateRegLife(varDsc, /*isBorn*/ true, /*isDying*/ false DEBUGARG(treeNode));
}
}
}
// Is the first "VariableLiveRange" or the previous one has been closed so its "m_EndEmitLocation" is valid
noway_assert(m_VariableLiveRanges->empty() || m_VariableLiveRanges->back().m_EndEmitLocation.Valid());
- if (!m_VariableLiveRanges->empty() && m_VariableLiveRanges->back().m_EndEmitLocation.IsPreviousInsNum(emit) &&
- siVarLoc::Equals(&varLocation, &(m_VariableLiveRanges->back().m_VarLocation)))
- {
- // The variable is being born just after the instruction at which it died.
- // In this case, i.e. an update of the variable's value, we coalesce the live ranges.
- m_VariableLiveRanges->back().m_EndEmitLocation.Init();
- }
- else
- {
- // Creates new live range with invalid end
- m_VariableLiveRanges->emplace_back(varLocation, emitLocation(), emitLocation());
- m_VariableLiveRanges->back().m_StartEmitLocation.CaptureLocation(emit);
- }
+ // Creates new live range with invalid end
+ m_VariableLiveRanges->emplace_back(varLocation, emitLocation(), emitLocation());
+ m_VariableLiveRanges->back().m_StartEmitLocation.CaptureLocation(emit);
#ifdef DEBUG
if (!m_VariableLifeBarrier->hasLiveRangesToDump())
#include "treelifeupdater.h"
#include "emit.h"
-#if 0
+#if 1
// Enable USING_SCOPE_INFO flag to use psiScope/siScope info to report variables' locations.
#define USING_SCOPE_INFO
#endif
-#if 1
+#if 0
// Enable USING_VARIABLE_LIVE_RANGE flag to use VariableLiveRange info to report variables' locations.
// Note: if both USING_SCOPE_INFO and USING_VARIABLE_LIVE_RANGE are defined, then USING_SCOPE_INFO
// information is reported to the debugger.
return emit->emitCurIGsize;
}
-//------------------------------------------------------------------------
-// IsPreviousInsNum: Returns true if the emitter is on the next instruction
-// of the same group as this emitLocation.
-//
-// Arguments:
-// emit - an emitter* instance
-//
-bool emitLocation::IsPreviousInsNum(const emitter* emit) const
-{
- assert(Valid());
- bool isSameGroup = (ig == emit->emitCurIG);
- bool isSameInsNum = (emitGetInsNumFromCodePos(codePos) == emitGetInsNumFromCodePos(emit->emitCurOffset()) - 1);
- return isSameGroup && isSameInsNum;
-}
-
#ifdef DEBUG
void emitLocation::Print(LONG compMethodID) const
{
UNATIVE_OFFSET GetFuncletPrologOffset(emitter* emit) const;
- bool emitLocation::IsPreviousInsNum(const emitter* emit) const;
-
#ifdef DEBUG
void Print(LONG compMethodID) const;
#endif // DEBUG
return (codePos >> 16);
}
-inline unsigned emitter::emitCurOffset() const
+inline unsigned emitter::emitCurOffset()
{
unsigned codePos = emitCurIGinsCnt + (emitCurIGsize << 16);
/************************************************************************/
void* emitCurBlock();
-unsigned emitCurOffset() const;
+unsigned emitCurOffset();
UNATIVE_OFFSET emitCodeOffset(void* blockPtr, unsigned codeOffs);