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.