}
-/* Traverse an expr, and detect if any part of it reads memory
- or does a Get. */
+/* Traverse an expr, and detect if any part of it reads memory or does
+ a Get. Be careful ... this really controls how much the
+ tree-builder can reorder the code, so getting it right is critical.
+*/
static void setHints_Expr (Bool* doesLoad, Bool* doesGet, IRExpr* e )
{
Int i;
return;
case Iex_LDle:
*doesLoad |= True;
+ setHints_Expr(doesLoad, doesGet, e->Iex.LDle.addr);
return;
case Iex_Get:
*doesGet |= True;
appeared. (Stupid algorithm): first, mark all bindings which
need to be dumped. Then, dump them in the order in which
they were defined. */
- invPut = st->tag == Ist_Put;
+ invPut = st->tag == Ist_Put || st->tag == Ist_PutI;
invStore = st->tag == Ist_STle;
for (k = 0; k < env->used; k++) {