//Check that all basic blocks should only end with terminator IR. void IRBB::verify() { UINT c = 0; C<IR*> * ct; for (IR * ir = BB_irlist(this).get_head(&ct); ir != NULL; ir = BB_irlist(this).get_next(&ct)) { ASSERT0(IR_next(ir) == NULL && IR_prev(ir) == NULL); ASSERT0(ir->get_bb() == this); switch (IR_code(ir)) { case IR_ST: case IR_STPR: case IR_STARRAY: case IR_IST: case IR_PHI: case IR_REGION: case IR_CALL: case IR_ICALL: case IR_GOTO: case IR_IGOTO: case IR_TRUEBR: case IR_FALSEBR: case IR_RETURN: case IR_SWITCH: break; default: ASSERT(0, ("BB does not supported this kind of IR.")); } if (ir->is_calls_stmt() || ir->is_cond_br() || ir->is_multicond_br() || ir->is_uncond_br()) { ASSERT(ir == BB_last_ir(this), ("invalid bb boundary.")); } c++; } ASSERT0(c == getNumOfIR()); }