@@ -4181,57 +4181,49 @@ void Compiler::lvaMarkLclRefs(GenTree* tree, BasicBlock* block, Statement* stmt,
4181
4181
4182
4182
/* Is this an assignment to a local variable? */
4183
4183
4184
- if (op1->gtOper == GT_LCL_VAR)
4184
+ if (op1->gtOper == GT_LCL_VAR && op2-> gtType != TYP_BOOL )
4185
4185
{
4186
- LclVarDsc* varDsc = lvaGetDesc (op1-> AsLclVarCommon ());
4186
+ /* Only simple assignments allowed for booleans */
4187
4187
4188
- if (varDsc-> lvPinned && varDsc-> lvAllDefsAreNoGc )
4188
+ if (tree-> gtOper != GT_ASG )
4189
4189
{
4190
- if (!op2->IsNotGcDef ())
4191
- {
4192
- varDsc->lvAllDefsAreNoGc = false ;
4193
- }
4190
+ goto NOT_BOOL;
4194
4191
}
4195
4192
4196
- if (op2->gtType != TYP_BOOL)
4197
- {
4198
- /* Only simple assignments allowed for booleans */
4193
+ /* Is the RHS clearly a boolean value? */
4199
4194
4200
- if (tree->gtOper != GT_ASG)
4201
- {
4202
- goto NOT_BOOL;
4203
- }
4195
+ switch (op2->gtOper )
4196
+ {
4197
+ unsigned lclNum;
4204
4198
4205
- /* Is the RHS clearly a boolean value? */
4199
+ case GT_CNS_INT:
4206
4200
4207
- switch (op2->gtOper )
4208
- {
4209
- case GT_CNS_INT:
4201
+ if (op2->AsIntCon ()->gtIconVal == 0 )
4202
+ {
4203
+ break ;
4204
+ }
4205
+ if (op2->AsIntCon ()->gtIconVal == 1 )
4206
+ {
4207
+ break ;
4208
+ }
4210
4209
4211
- if (op2->AsIntCon ()->gtIconVal == 0 )
4212
- {
4213
- break ;
4214
- }
4215
- if (op2->AsIntCon ()->gtIconVal == 1 )
4216
- {
4217
- break ;
4218
- }
4210
+ // Not 0 or 1, fall through ....
4211
+ FALLTHROUGH;
4219
4212
4220
- // Not 0 or 1, fall through ....
4221
- FALLTHROUGH;
4213
+ default :
4222
4214
4223
- default :
4215
+ if (op2->OperIsCompare ())
4216
+ {
4217
+ break ;
4218
+ }
4224
4219
4225
- if (op2->OperIsCompare ())
4226
- {
4227
- break ;
4228
- }
4220
+ NOT_BOOL:
4229
4221
4230
- NOT_BOOL:
4222
+ lclNum = op1->AsLclVarCommon ()->GetLclNum ();
4223
+ noway_assert (lclNum < lvaCount);
4231
4224
4232
- varDsc->lvIsBoolean = false ;
4233
- break ;
4234
- }
4225
+ lvaTable[lclNum].lvIsBoolean = false ;
4226
+ break ;
4235
4227
}
4236
4228
}
4237
4229
}
@@ -4286,8 +4278,7 @@ void Compiler::lvaMarkLclRefs(GenTree* tree, BasicBlock* block, Statement* stmt,
4286
4278
{
4287
4279
if (lvaVarAddrExposed (lclNum))
4288
4280
{
4289
- varDsc->lvIsBoolean = false ;
4290
- varDsc->lvAllDefsAreNoGc = false ;
4281
+ varDsc->lvIsBoolean = false ;
4291
4282
}
4292
4283
4293
4284
if (tree->gtOper == GT_LCL_FLD)
@@ -4712,8 +4703,6 @@ void Compiler::lvaComputeRefCounts(bool isRecompute, bool setSlotNumbers)
4712
4703
varDsc->setLvRefCnt (0 );
4713
4704
varDsc->setLvRefCntWtd (BB_ZERO_WEIGHT);
4714
4705
4715
- varDsc->lvAllDefsAreNoGc = true ;
4716
-
4717
4706
// Special case for some varargs params ... these must
4718
4707
// remain unreferenced.
4719
4708
const bool isSpecialVarargsParam = varDsc->lvIsParam && raIsVarargsStackArg (lclNum);
@@ -4761,8 +4750,6 @@ void Compiler::lvaComputeRefCounts(bool isRecompute, bool setSlotNumbers)
4761
4750
{
4762
4751
varDsc->lvSingleDef = varDsc->lvIsParam ;
4763
4752
varDsc->lvSingleDefRegCandidate = varDsc->lvIsParam ;
4764
-
4765
- varDsc->lvAllDefsAreNoGc = true ;
4766
4753
}
4767
4754
}
4768
4755
@@ -4881,13 +4868,6 @@ void Compiler::lvaComputeRefCounts(bool isRecompute, bool setSlotNumbers)
4881
4868
varDsc->lvImplicitlyReferenced = 1 ;
4882
4869
}
4883
4870
}
4884
-
4885
- if (varDsc->lvPinned && varDsc->lvAllDefsAreNoGc )
4886
- {
4887
- varDsc->lvPinned = 0 ;
4888
-
4889
- JITDUMP (" V%02u was unpinned as all def candidates were local.\n " , lclNum);
4890
- }
4891
4871
}
4892
4872
}
4893
4873
0 commit comments