Fix dotnet/coreclr#7093
authorBruce Forstall <brucefo@microsoft.com>
Fri, 9 Sep 2016 01:09:34 +0000 (18:09 -0700)
committerBruce Forstall <brucefo@microsoft.com>
Fri, 9 Sep 2016 01:09:34 +0000 (18:09 -0700)
commitb71ebd92f56291004791fa25eac219a7cc0f6050
tree34fd37ec7037749a419edf874c699f0687dc2df3
parent5d1e7d57f8a6d0713047343e05f44b3b34b609ab
Fix dotnet/coreclr#7093

This is an assert due to how STRESS_64RSLT_MUL is implemented. This
stress mode converts:
```
/--*  lclVar    int    V01 loc0
*  *         int
\--*  lclVar    int    V01 loc0
```
to:
```
*  cast      int <- long
|  /--*  cast      long <- int
|  |  \--*  lclVar    int    V01 loc0
\--*  *         long
   \--*  cast      long <- long
      \--*  nop       long
         \--*  lclVar    int    V01 loc0
```
Thus, the long 'nop' node is above an 'int' operand node. This led to an assert
in genCodeForTreeLng() that the lclVar was type long, which is isn't.

I added yet another cast under the 'nop' to fix this typing problem:
```
*  cast      int <- long
|  /--*  cast      long <- int
|  |  \--*  lclVar    int    V01 loc0
\--*  *         long
   \--*  cast      long <- long
      \--*  nop       long
         \--*  cast      long <- int
            \--*  lclVar    int    V01 loc0
```

Commit migrated from https://github.com/dotnet/coreclr/commit/c16b6bc96c1aa1edd9a3085a12f12a9df4169da5
src/coreclr/src/jit/flowgraph.cpp