Correct an assertion in LSRA.
authorPat Gavlin <pagavlin@microsoft.com>
Thu, 8 Dec 2016 23:18:42 +0000 (15:18 -0800)
committerPat Gavlin <pagavlin@microsoft.com>
Thu, 8 Dec 2016 23:24:11 +0000 (15:24 -0800)
`verifyFinalAllocation` asserts that if a non-BB interval RefPosition
that is either spilled or is the interval's last use does not have a
register, then that ref position must be marked `AllocateIfProfitable`.
However, this situation can also arise in at least one other situation:
an unused parameter will have at least one ref position that may not be
allocated to a register. This change corrects the assertion to check
`RefPosition::RequiresRegister` rather than
`RefPosition::AllocateIfProfitable`.

Fixes VSO 299207.

src/jit/lsra.cpp

index 6813beb..249ab4a 100644 (file)
@@ -11788,15 +11788,14 @@ void LinearScan::verifyFinalAllocation()
                     interval->physReg     = REG_NA;
                     interval->assignedReg = nullptr;
 
-                    // regRegcord could be null if RefPosition is to be allocated a
-                    // reg only if profitable.
+                    // regRegcord could be null if the RefPosition does not require a register.
                     if (regRecord != nullptr)
                     {
                         regRecord->assignedInterval = nullptr;
                     }
                     else
                     {
-                        assert(currentRefPosition->AllocateIfProfitable());
+                        assert(!currentRefPosition->RequiresRegister());
                     }
                 }
             }