Merge pull request dotnet/coreclr#6552 from pgavlin/RemovePreRationalizeLiveness
authorPat Gavlin <pgavlin@gmail.com>
Wed, 31 Aug 2016 21:23:32 +0000 (14:23 -0700)
committerGitHub <noreply@github.com>
Wed, 31 Aug 2016 21:23:32 +0000 (14:23 -0700)
Do not run local var liveness before rationalize.

Commit migrated from https://github.com/dotnet/coreclr/commit/001c5173e04a3cbb74179200756d14afb77aeb9f

1  2 
src/coreclr/src/jit/compiler.cpp
src/coreclr/src/jit/decomposelongs.cpp
src/coreclr/src/jit/lir.cpp

Simple merge
@@@ -801,9 -836,26 +836,9 @@@ GenTree* DecomposeLongs::DecomposeArith
      GenTree* loOp2 = op2->gtGetOp1();
      GenTree* hiOp2 = op2->gtGetOp2();
  
 -    // We don't have support to decompose a TYP_LONG node that already has a child that has
 -    // been decomposed into parts, where the high part depends on the value generated by the
 -    // low part (via the flags register). For example, if we have:
 -    //    +(gt_long(+(lo3, lo4), +Hi(hi3, hi4)), gt_long(lo2, hi2))
 -    // We would decompose it here to:
 -    //    gt_long(+(+(lo3, lo4), lo2), +Hi(+Hi(hi3, hi4), hi2))
 -    // But this would generate incorrect code, because the "+Hi(hi3, hi4)" code generation
 -    // needs to immediately follow the "+(lo3, lo4)" part. Also, if this node is one that
 -    // requires a unique high operator, and the child nodes are not simple locals (e.g.,
 -    // they are decomposed nodes), then we also can't decompose the node, as we aren't
 -    // guaranteed the high and low parts will be executed immediately after each other.
 -
 -    NYI_IF(hiOp1->OperIsHigh() || hiOp2->OperIsHigh() ||
 -               (GenTree::OperIsHigh(GetHiOper(oper)) &&
 -                (!loOp1->OperIsLeaf() || !hiOp1->OperIsLeaf() || !loOp1->OperIsLeaf() || !hiOp2->OperIsLeaf())),
 -           "Can't decompose expression tree TYP_LONG node");
 -
      // Now, remove op1 and op2 from the node list.
-     BlockRange().Remove(op1);
-     BlockRange().Remove(op2);
+     Range().Remove(op1);
+     Range().Remove(op2);
  
      // We will reuse "tree" for the loResult, which will now be of TYP_INT, and its operands
      // will be the lo halves of op1 from above.
Simple merge