bool gtHasLocalsWithAddrOp(GenTreePtr tree);
- unsigned gtHashValue(GenTree* tree);
-
unsigned gtSetListOrder(GenTree* list, bool regs, bool isListCallArgs);
void gtWalkOp(GenTree** op1, GenTree** op2, GenTree* adr, bool constOnly);
#ifdef DEBUG
+ unsigned gtHashValue(GenTree* tree);
+
GenTreePtr gtWalkOpEffectiveVal(GenTreePtr op);
#endif
return desc.hasAddrTakenLcl;
}
+#ifdef DEBUG
+
/*****************************************************************************
*
* Helper used to compute hash values for trees.
return genTreeHashAdd(old, (unsigned)(size_t)add);
}
-inline unsigned genTreeHashAdd(unsigned old, unsigned add1, unsigned add2)
-{
- return (old + old / 2) ^ add1 ^ add2;
-}
-
/*****************************************************************************
*
* Given an arbitrary expression tree, compute a hash value for it.
unsigned hsh1 = gtHashValue(op1);
- /* Special case: addition of two values */
-
- if (GenTree::OperIsCommutative(oper))
- {
- unsigned hsh2 = gtHashValue(op2);
-
- /* Produce a hash that allows swapping the operands */
-
- hash = genTreeHashAdd(hash, hsh1, hsh2);
- goto DONE;
- }
-
/* Add op1's hash to the running value and continue with op2 */
hash = genTreeHashAdd(hash, hsh1);
return hash;
}
+#endif // DEBUG
+
/*****************************************************************************
*
* Given an arbitrary expression tree, attempts to find the set of all local variables