Skip to content

Commit

Permalink
Have SIMDIntrinsicUpperSave and SIMDIntrinsicUpperRestore set a baseT…
Browse files Browse the repository at this point in the history
…ype if one can't otherwise be determined (#35899)
  • Loading branch information
tannergooding authored May 7, 2020
1 parent 210dd1b commit ddade10
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions src/coreclr/src/jit/lsra.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6755,6 +6755,17 @@ void LinearScan::insertUpperVectorSave(GenTree* tree,
GenTreeSIMD* simdNode =
new (compiler, GT_SIMD) GenTreeSIMD(LargeVectorSaveType, saveLcl, nullptr, SIMDIntrinsicUpperSave,
varDsc->lvBaseType, genTypeSize(varDsc->lvType));

if (simdNode->gtSIMDBaseType == TYP_UNDEF)
{
// There are a few scenarios where we can get a LCL_VAR which
// doesn't know the underlying baseType. In that scenario, we
// will just lie and say it is a float. Codegen doesn't actually
// care what the type is but this avoids an assert that would
// otherwise be fired from the more general checks that happen.
simdNode->gtSIMDBaseType = TYP_FLOAT;
}

SetLsraAdded(simdNode);
simdNode->SetRegNum(spillReg);
if (spillToMem)
Expand Down Expand Up @@ -6812,6 +6823,16 @@ void LinearScan::insertUpperVectorRestore(GenTree* tree,
new (compiler, GT_SIMD) GenTreeSIMD(varDsc->lvType, restoreLcl, nullptr, SIMDIntrinsicUpperRestore,
varDsc->lvBaseType, genTypeSize(varDsc->lvType));

if (simdNode->gtSIMDBaseType == TYP_UNDEF)
{
// There are a few scenarios where we can get a LCL_VAR which
// doesn't know the underlying baseType. In that scenario, we
// will just lie and say it is a float. Codegen doesn't actually
// care what the type is but this avoids an assert that would
// otherwise be fired from the more general checks that happen.
simdNode->gtSIMDBaseType = TYP_FLOAT;
}

regNumber restoreReg = upperVectorInterval->physReg;
SetLsraAdded(simdNode);

Expand Down

0 comments on commit ddade10

Please # to comment.