diff --git a/src/coreclr/jit/codegencommon.cpp b/src/coreclr/jit/codegencommon.cpp index 29a4696a56623a..67fb489bd08a4f 100644 --- a/src/coreclr/jit/codegencommon.cpp +++ b/src/coreclr/jit/codegencommon.cpp @@ -486,13 +486,14 @@ regMaskTP CodeGenInterface::genGetRegMask(const LclVarDsc* varDsc) assert(varDsc->lvIsInReg()); - if (varTypeUsesFloatReg(varDsc->TypeGet())) + regNumber reg = varDsc->GetRegNum(); + if (genIsValidFloatReg(reg)) { - regMask = genRegMaskFloat(varDsc->GetRegNum(), varDsc->TypeGet()); + regMask = genRegMaskFloat(reg, varDsc->GetRegisterType()); } else { - regMask = genRegMask(varDsc->GetRegNum()); + regMask = genRegMask(reg); } return regMask; } @@ -7148,8 +7149,9 @@ void CodeGen::genFnProlog() if (isInReg) { - regMaskTP regMask = genRegMask(varDsc->GetRegNum()); - if (!varDsc->IsFloatRegType()) + regNumber regForVar = varDsc->GetRegNum(); + regMaskTP regMask = genRegMask(regForVar); + if (!genIsValidFloatReg(regForVar)) { initRegs |= regMask; diff --git a/src/coreclr/jit/codegenlinear.cpp b/src/coreclr/jit/codegenlinear.cpp index f58a8db0997e3c..94da35b01c172e 100644 --- a/src/coreclr/jit/codegenlinear.cpp +++ b/src/coreclr/jit/codegenlinear.cpp @@ -51,19 +51,16 @@ void CodeGen::genInitializeRegisterState() continue; } - // Is this a floating-point argument? - if (varDsc->IsFloatRegType()) + if (varDsc->lvAddrExposed) { continue; } - noway_assert(!varTypeUsesFloatReg(varDsc->TypeGet())); - // Mark the register as holding the variable - assert(varDsc->GetRegNum() != REG_STK); - if (!varDsc->lvAddrExposed) + regNumber reg = varDsc->GetRegNum(); + if (genIsValidIntReg(reg)) { - regSet.verifyRegUsed(varDsc->GetRegNum()); + regSet.verifyRegUsed(reg); } } } diff --git a/src/coreclr/jit/compiler.cpp b/src/coreclr/jit/compiler.cpp index 2c35262a5df0db..cca34ff20bbb38 100644 --- a/src/coreclr/jit/compiler.cpp +++ b/src/coreclr/jit/compiler.cpp @@ -2170,7 +2170,7 @@ VarName Compiler::compVarName(regNumber reg, bool isFloatReg) /* If the variable is not in a register, or not in the register we're looking for, quit. */ /* Also, if it is a compiler generated variable (i.e. slot# > info.compVarScopesCount), don't bother. */ if ((varDsc->lvRegister != 0) && (varDsc->GetRegNum() == reg) && - (varDsc->IsFloatRegType() || !isFloatReg) && (varDsc->lvSlotNum < info.compVarScopesCount)) + (varDsc->lvSlotNum < info.compVarScopesCount)) { /* check if variable in that register is live */ if (VarSetOps::IsMember(this, compCurLife, varDsc->lvVarIndex)) diff --git a/src/coreclr/jit/compiler.h b/src/coreclr/jit/compiler.h index e84c35de893504..59e8f48d55521a 100644 --- a/src/coreclr/jit/compiler.h +++ b/src/coreclr/jit/compiler.h @@ -958,10 +958,6 @@ class LclVarDsc } void incRefCnts(weight_t weight, Compiler* pComp, RefCountState state = RCS_NORMAL, bool propagate = true); - bool IsFloatRegType() const - { - return varTypeUsesFloatReg(lvType) || lvIsHfaRegArg(); - } var_types GetHfaType() const {