Skip to content

Commit

Permalink
JIT: Allow forward substituting small-typed nodes (#83969)
Browse files Browse the repository at this point in the history
  • Loading branch information
jakobbotsch authored Mar 28, 2023
1 parent eae7caa commit 93e91df
Showing 1 changed file with 5 additions and 8 deletions.
13 changes: 5 additions & 8 deletions src/coreclr/jit/forwardsub.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -675,10 +675,7 @@ bool Compiler::fgForwardSubStatement(Statement* stmt)
// Next statement seems suitable.
// See if we can forward sub without changing semantics.
//
// Bail if types disagree.
// Might be able to tolerate these by retyping.
//
if (fsv.GetNode()->TypeGet() != fwdSubNode->TypeGet())
if (genActualType(fsv.GetNode()) != genActualType(fwdSubNode))
{
JITDUMP(" mismatched types (substitution)\n");
return false;
Expand Down Expand Up @@ -845,12 +842,12 @@ bool Compiler::fgForwardSubStatement(Statement* stmt)
}
}

// If the initial has truncate on store semantics, we need to replicate
// that here with a cast.
// If the value is being roundtripped through a small-typed local then we
// may need to insert an explicit cast to emulate normalize-on-load/store.
//
if (varDsc->lvNormalizeOnStore() && fgCastNeeded(fwdSubNode, varDsc->TypeGet()))
if (varTypeIsSmall(varDsc) && fgCastNeeded(fwdSubNode, varDsc->TypeGet()))
{
JITDUMP(" [adding cast for normalize on store]");
JITDUMP(" [adding cast for small-typed local]");
fwdSubNode = gtNewCastNode(TYP_INT, fwdSubNode, false, varDsc->TypeGet());
}

Expand Down

0 comments on commit 93e91df

Please sign in to comment.