if (arg->gtFlags & GTF_LATE_ARG)
{
// Find the corresponding late arg.
- GenTreePtr lateArg = nullptr;
- for (unsigned j = 0; j < call->fgArgInfo->ArgCount(); j++)
- {
- if (call->fgArgInfo->ArgTable()[j]->argNum == i)
- {
- lateArg = call->fgArgInfo->ArgTable()[j]->node;
- break;
- }
- }
- assert(lateArg != nullptr);
+ GenTreePtr lateArg = call->fgArgInfo->GetLateArg(i);
if (GetNodeTestData()->Lookup(lateArg, &tlAndN))
{
reachable->Set(lateArg, 0);
{
return argsComplete;
}
+
+ // Get the late arg for arg at position argIndex. Caller must ensure this position has a late arg.
+ GenTreePtr GetLateArg(unsigned argIndex);
};
#ifdef DEBUG
#endif
}
+// Get the late arg for arg at position argIndex.
+// argIndex - 0-based position to get late arg for.
+// Caller must ensure this position has a late arg.
+GenTreePtr fgArgInfo::GetLateArg(unsigned argIndex)
+{
+ for (unsigned j = 0; j < this->ArgCount(); j++)
+ {
+ if (this->ArgTable()[j]->argNum == argIndex)
+ {
+ return this->ArgTable()[j]->node;
+ }
+ }
+ // Caller must ensure late arg exists.
+ unreached();
+}
+
void fgArgInfo::RecordStkLevel(unsigned stkLvl)
{
assert(!IsUninitialized(stkLvl));
if (arg->OperGet() == GT_ARGPLACE)
{
// Find the corresponding late arg.
- GenTreePtr lateArg = nullptr;
- for (unsigned j = 0; j < call->fgArgInfo->ArgCount(); j++)
- {
- if (call->fgArgInfo->ArgTable()[j]->argNum == i)
- {
- lateArg = call->fgArgInfo->ArgTable()[j]->node;
- break;
- }
- }
- assert(lateArg != nullptr);
+ GenTreePtr lateArg = call->fgArgInfo->GetLateArg(i);
assert(lateArg->gtVNPair.BothDefined());
arg->gtVNPair = lateArg->gtVNPair;
updatedArgPlace = true;