From: Andy Ayers Date: Mon, 29 Jan 2018 20:36:38 +0000 (-0800) Subject: JIT: don't overlook strong nearby preference in LSRA (#16028) X-Git-Tag: accepted/tizen/unified/20190422.045933~3173 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c3dd2610f0c6963b16ca27843942398271de7760;p=platform%2Fupstream%2Fcoreclr.git JIT: don't overlook strong nearby preference in LSRA (#16028) When allocating an interval, LSRA will look at related intervals for preference hints. LSRA may look past a related interval I1 to its related interval I2 if I1 looks like a simple copy. But if I1 has been previously allocated then it seems we are often better served using I1's preferences instead of using I2's. Addresses some issues seen in #11390. --- diff --git a/src/jit/lsra.cpp b/src/jit/lsra.cpp index b6c8b96..483d8dd 100644 --- a/src/jit/lsra.cpp +++ b/src/jit/lsra.cpp @@ -5308,8 +5308,8 @@ regNumber LinearScan::tryAllocateFreeReg(Interval* currentInterval, RefPosition* { relatedInterval = nullptr; } - // Is the relatedInterval simply a copy to another relatedInterval? - else if ((relatedInterval->relatedInterval != nullptr) && + // Is the relatedInterval not assigned and simply a copy to another relatedInterval? + else if ((relatedInterval->assignedReg == nullptr) && (relatedInterval->relatedInterval != nullptr) && (nextRelatedRefPosition->nextRefPosition != nullptr) && (nextRelatedRefPosition->nextRefPosition->nextRefPosition == nullptr) && (nextRelatedRefPosition->nextRefPosition->nodeLocation <