for (i = 0; i < bb->stmts_used; i++) {
IRStmt* st = bb->stmts[i];
- if (!st)
+ if (st->tag == Ist_NoOp)
continue;
/* Deal with Gets */
HashHW* env = newHHW();
for (i = bb->stmts_used-1; i >= 0; i--) {
st = bb->stmts[i];
- if (!st)
+
+ if (st->tag == Ist_NoOp)
continue;
/* Deal with conditional exits. */
st2 = in->stmts[i];
/* perhaps st2 is already a no-op? */
- if (!st2) continue;
+ if (st2->tag == Ist_NoOp) continue;
st2 = subst_and_fold_Stmt( env, st2 );
/* If the statement has been folded into a no-op, forget it. */
- if (!st2) continue;
+ if (st2->tag == Ist_NoOp) continue;
/* Now consider what the stmt looks like. If it's of the form
't = const' or 't1 = t2', add it to the running environment
/* Work backwards through the stmts */
for (i = bb->stmts_used-1; i >= 0; i--) {
st = bb->stmts[i];
- if (!st)
+ if (st->tag == Ist_NoOp)
continue;
if (st->tag == Ist_Tmp
&& set[(Int)(st->Ist.Tmp.tmp)] == False) {
for (i = bb->stmts_used-1; i >= 0; i--) {
st = bb->stmts[i];
- if (!st
- || st->tag != Ist_Tmp
+ if (st->tag != Ist_Tmp
|| st->Ist.Tmp.data->tag != Iex_CCall)
- continue;
+ continue;
ex = (*specHelper)( st->Ist.Tmp.data->Iex.CCall.cee->name,
st->Ist.Tmp.data->Iex.CCall.args );
st = bb->stmts[i];
/* ignore not-interestings */
- if ((!st) || st->tag != Ist_Tmp)
+ if (st->tag != Ist_Tmp)
continue;
t = st->Ist.Tmp.tmp;
+/- a constant. */
for (j = startHere; j >= 0; j--) {
st = bb->stmts[j];
- if (!st || st->tag != Ist_Tmp)
+ if (st->tag != Ist_Tmp)
continue;
if (st->Ist.Tmp.tmp != var)
continue;
for (i = bb->stmts_used-1; i >= 0; i--) {
st = bb->stmts[i];
- if (!st)
+ if (st->tag == Ist_NoOp)
continue;
/* Try to collapse 't1 = Add32/Sub32(t2, con)'. */
for (j = startHere; j >= 0; j--) {
st = bb->stmts[j];
- if (!st) continue;
+ if (st->tag == Ist_NoOp)
+ continue;
if (st->tag == Ist_Put) {
/* Non-indexed Put. This can't give a binding, but we do
for (i = bb->stmts_used-1; i >= 0; i--) {
st = bb->stmts[i];
- if (!st)
+ if (st->tag == Ist_NoOp)
continue;
if (st->tag == Ist_Tmp
for (i = 0; i < bb->stmts_used; i++) {
st = bb->stmts[i];
- if (!st || st->tag != Ist_PutI)
+ if (st->tag != Ist_PutI)
continue;
/* Ok, search forwards from here to see if we can find another
PutI which makes this one redundant, and dodging various
delete = False;
for (j = i+1; j < bb->stmts_used; j++) {
stj = bb->stmts[j];
- if (!stj)
+ if (stj->tag == Ist_NoOp)
continue;
if (identicalPutIs(st, stj)) {
/* success! */
(void)newIRTemp(bb1->tyenv, bb2->tyenv->types[i]);
for (i = 0; i < bb2->stmts_used; i++) {
- if (bb2->stmts[i] == NULL)
- continue;
/* deltaIRStmt destructively modifies the stmt, but
that's OK since bb2 is a complete fresh copy of bb1. */
deltaIRStmt(bb2->stmts[i], n_vars);
/* No more binds to invalidate. */
if (oldest_op == 1<<30)
- return;
+ return;
/* the oldest bind to invalidate has been identified */
vassert(oldest_op != 1<<31 && oldest_k != 1<<31);
for (i = 0; i < bb->stmts_used; i++) {
st = bb->stmts[i];
- if (!st)
+ if (st->tag == Ist_NoOp)
continue;
occCount_Stmt( env, st );
}
for (i = 0; i < bb->stmts_used; i++) {
st = bb->stmts[i];
- if (!st)
- continue;
if (st->tag != Ist_Tmp)
continue;
j = 0;
for (i = 0; i < bb->stmts_used; i++) {
st = bb->stmts[i];
- if (!st)
+ if (st->tag == Ist_NoOp)
continue;
if (st->tag == Ist_Tmp) {
for (i = 0; i < bb->stmts_used; i++) {
st = bb->stmts[i];
- if (!st)
- continue;
-
switch (st->tag) {
case Ist_PutI:
return True;