Fix for bug 12398: Lowering is inconsistent in checking safety of RegOptional. (...
authorEugene Rozenfeld <erozen@microsoft.com>
Fri, 7 Sep 2018 17:48:06 +0000 (10:48 -0700)
committerGitHub <noreply@github.com>
Fri, 7 Sep 2018 17:48:06 +0000 (10:48 -0700)
commit36449cf94237e7cddb7e43a9fe6f873e7f5ebf77
tree5659b57fff5ebdab2dfeba510a8f1a1a64c3d69d
parentc96aff7670f7d70fe87d2ea60bba9534c5e56088
Fix for bug 12398: Lowering is inconsistent in checking safety of RegOptional. (#19740)

This fixes an inconsistency in lowering where it fails to make an
operand contained because IsSafeToContainMem() returns false yet
it marks it regOptional, which may cause a problem if the operand
will be loaded at the point of use.

I also fixed a case where an operand was marked RegOptional even though
there is a type size mismatch.

There are 7 places that are affected, I added repro cases for 4 of them.
I wasn't able to construct repros for the 3 places that deal with
floating point operands but decided to fix those places anyway.

Fixes #12398.
src/jit/lower.cpp
src/jit/lower.h
src/jit/lowerxarch.cpp
tests/src/JIT/Regression/JitBlue/GitHub_12398/Github_12398.cs [new file with mode: 0644]
tests/src/JIT/Regression/JitBlue/GitHub_12398/Github_12398.csproj [new file with mode: 0644]