- // check back edges
- if (!branch_found) {
- bool backedge_found = false;
- Predicate * back_pred = curr_pred->get_backedge();
- if (back_pred != NULL) {
- curr_pred = back_pred;
- backedge_found = true;
- } else if (inst_pred_map.contains(next_inst)) {
- inst_pred_map.remove(curr_pred->get_func_inst());
+ // detect loops
+ if (!branch_found && inst_id_map.contains(next_inst)) {
+ FuncInst * curr_inst = curr_pred->get_func_inst();
+ uint32_t curr_id = inst_id_map.get(curr_inst);
+ uint32_t next_id = inst_id_map.get(next_inst);
+
+ if (curr_id >= next_id) {