If the very first ref position of an interval has a register assignment of RBM_NONE...
authorsivarv <sivarv@microsoft.com>
Wed, 9 Nov 2016 02:08:31 +0000 (18:08 -0800)
committersivarv <sivarv@microsoft.com>
Wed, 9 Nov 2016 02:08:31 +0000 (18:08 -0800)
src/jit/lsra.cpp

index 3b22f1d..b0ef498 100644 (file)
@@ -8576,8 +8576,8 @@ void LinearScan::resolveRegisters()
                     }
                     if (firstRefPosition->registerAssignment == RBM_NONE || firstRefPosition->spillAfter)
                     {
-                        // Either this RefPosition is spilled, or it is not a "real" def or use
-                        assert(firstRefPosition->spillAfter ||
+                        // Either this RefPosition is spilled, or regOptional or it is not a "real" def or use
+                        assert(firstRefPosition->spillAfter || firstRefPosition->AllocateIfProfitable() ||
                                (firstRefPosition->refType != RefTypeDef && firstRefPosition->refType != RefTypeUse));
                         varDsc->lvRegNum = REG_STK;
                     }