summaryrefslogtreecommitdiff
path: root/src/jit/lir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/jit/lir.cpp')
-rw-r--r--src/jit/lir.cpp49
1 files changed, 25 insertions, 24 deletions
diff --git a/src/jit/lir.cpp b/src/jit/lir.cpp
index 94206def1c..35dd1815ef 100644
--- a/src/jit/lir.cpp
+++ b/src/jit/lir.cpp
@@ -190,12 +190,13 @@ void LIR::Use::ReplaceWith(Compiler* compiler, GenTree* replacement)
assert(IsDummyUse() || m_range->Contains(m_user));
assert(m_range->Contains(replacement));
- GenTree* replacedNode = *m_edge;
-
- *m_edge = replacement;
- if (!IsDummyUse() && m_user->IsCall())
+ if (!IsDummyUse())
+ {
+ m_user->ReplaceOperand(m_edge, replacement);
+ }
+ else
{
- compiler->fgFixupArgTabEntryPtr(m_user, replacedNode, replacement);
+ *m_edge = replacement;
}
}
@@ -256,7 +257,7 @@ unsigned LIR::Use::ReplaceWithLclVar(Compiler* compiler, unsigned blockWeight, u
assert(m_range->Contains(m_user));
assert(m_range->Contains(*m_edge));
- GenTree* node = *m_edge;
+ GenTree* const node = *m_edge;
if (lclNum == BAD_VAR_NUM)
{
@@ -267,9 +268,11 @@ unsigned LIR::Use::ReplaceWithLclVar(Compiler* compiler, unsigned blockWeight, u
compiler->lvaTable[lclNum].incRefCnts(blockWeight, compiler);
compiler->lvaTable[lclNum].incRefCnts(blockWeight, compiler);
- GenTreeLclVar* store = compiler->gtNewTempAssign(lclNum, node)->AsLclVar();
+ GenTreeLclVar* const store = compiler->gtNewTempAssign(lclNum, node)->AsLclVar();
+ assert(store != nullptr);
+ assert(store->gtOp1 == node);
- GenTree* load =
+ GenTree* const load =
new (compiler, GT_LCL_VAR) GenTreeLclVar(store->TypeGet(), store->AsLclVarCommon()->GetLclNum(), BAD_IL_OFFSET);
m_range->InsertAfter(node, store, load);
@@ -678,7 +681,7 @@ void LIR::Range::FinishInsertBefore(GenTree* insertionPoint, GenTree* first, Gen
assert(m_lastNode != nullptr);
assert(m_lastNode->gtNext == nullptr);
m_lastNode->gtNext = first;
- first->gtPrev = m_lastNode;
+ first->gtPrev = m_lastNode;
}
m_lastNode = last;
}
@@ -866,7 +869,7 @@ void LIR::Range::FinishInsertAfter(GenTree* insertionPoint, GenTree* first, GenT
assert(m_firstNode != nullptr);
assert(m_firstNode->gtPrev == nullptr);
m_firstNode->gtPrev = last;
- last->gtNext = m_firstNode;
+ last->gtNext = m_firstNode;
}
m_firstNode = first;
}
@@ -1157,7 +1160,6 @@ void LIR::Range::Delete(Compiler* compiler, BasicBlock* block, ReadOnlyRange&& r
Delete(compiler, block, range.m_firstNode, range.m_lastNode);
}
-
//------------------------------------------------------------------------
// LIR::Range::TryGetUse: Try to find the use for a given node.
//
@@ -1616,22 +1618,21 @@ void LIR::InsertBeforeTerminator(BasicBlock* block, LIR::Range&& range)
#if DEBUG
switch (block->bbJumpKind)
{
- case BBJ_COND:
- assert(insertionPoint->OperGet() == GT_JTRUE);
- break;
+ case BBJ_COND:
+ assert(insertionPoint->OperIsConditionalJump());
+ break;
- case BBJ_SWITCH:
- assert((insertionPoint->OperGet() == GT_SWITCH) || (insertionPoint->OperGet() == GT_SWITCH_TABLE));
- break;
+ case BBJ_SWITCH:
+ assert((insertionPoint->OperGet() == GT_SWITCH) || (insertionPoint->OperGet() == GT_SWITCH_TABLE));
+ break;
- case BBJ_RETURN:
- assert((insertionPoint->OperGet() == GT_RETURN) ||
- (insertionPoint->OperGet() == GT_JMP) ||
- (insertionPoint->OperGet() == GT_CALL));
- break;
+ case BBJ_RETURN:
+ assert((insertionPoint->OperGet() == GT_RETURN) || (insertionPoint->OperGet() == GT_JMP) ||
+ (insertionPoint->OperGet() == GT_CALL));
+ break;
- default:
- unreached();
+ default:
+ unreached();
}
#endif
}