# Stage02.ssb — what each phase exit requires

Generated by `tools/re-capture/isl_report.py phase-guards`.

A condition is listed when it DOMINATES the exit: every path from an
entry to that `END_PHASE` passes through it, so it is NECESSARY for the
phase to end that way.  Reachability alone is the wrong query here —
in a poll loop both successors reach the exit.

CFG reached 15650 of 18568 instructions (84.3%).

`precond` = necessary: the exit cannot happen unless it holds.
`TRIGGER` = also SUFFICIENT: once it holds the exit is unavoidable.
An exit with no TRIGGER is not fired by a branch — a timeout exit is
fired by time passing, which is not a property of the graph.

## phase 1 — END_PHASE at 0x0051E4: 2 necessary condition(s)
    precond  0x004D70  unit_hp_pct(TCN001, Character_Player_Test) != 0
    TRIGGER  0x005110  random(3) == 0

## phase 1 — END_PHASE at 0x005828: 3 necessary condition(s)
    precond  0x004D70  unit_hp_pct(TCN001, Character_Player_Test) != 0
    precond  0x00523C  hp_pct_test(TCN004, 0) != 1
    TRIGGER  0x00572C  random(5) == 0

## phase 1 — END_PHASE at 0x006010: 7 necessary condition(s)
    precond  0x004D70  unit_hp_pct(TCN001, Character_Player_Test) != 0
    precond  0x00523C  hp_pct_test(TCN004, 0) != 1
    precond  0x005888  stopwatch_elapsed(0) <= 210
    precond  0x0058DC  hp_pct_test(ADT102, 0) != 1
    precond  0x005930  hp_pct_test(ADT107, 0) != 1
    precond  0x005984  hp_pct_test(ADT113, 0) != 1
    TRIGGER  0x005B3C  hp_pct_test(ADN101, 0) != 1

## phase 1 — END_PHASE at 0x006260: 4 necessary condition(s)
    precond  0x004D70  unit_hp_pct(TCN001, Character_Player_Test) != 0
    precond  0x00523C  hp_pct_test(TCN004, 0) != 1
    precond  0x005888  stopwatch_elapsed(0) <= 210
    precond  0x006070  stopwatch_elapsed(0) < 1200

## phase 1 — FORCE_END_PHASE at 0x01482C: 0 necessary condition(s)

## phase 2 — END_PHASE at 0x019640: 2 necessary condition(s)
    precond  0x0191CC  unit_hp_pct(TCN001, Character_Player_Test) != 0
    TRIGGER  0x01956C  random(3) == 0

## phase 2 — END_PHASE at 0x019934: 2 necessary condition(s)
    precond  0x0191CC  unit_hp_pct(TCN001, Character_Player_Test) != 0
    precond  0x019698  hp_pct_test(TCT206, 0) != 1

## phase 2 — END_PHASE at 0x01AC44: 9 necessary condition(s)
    precond  0x0191CC  unit_hp_pct(TCN001, Character_Player_Test) != 0
    precond  0x019698  hp_pct_test(TCT206, 0) != 1
    precond  0x0199C8  builtin7(TCT206, 1, Route_TCT206_p2S, 4294967295, 500) == 1
    precond  0x019A8C  <unknown> <= 240
    precond  0x01A1E4  global[4] == 0
    TRIGGER  0x01A2B0  global[4] != 1
    TRIGGER  0x01A924  hp_pct_test(TCT206, 89.9) != 0
    TRIGGER  0x01AA38  global[104] != 0
    TRIGGER  0x01AAF8  global[4] == 0

## phase 2 — FORCE_END_PHASE at 0x0249F0: 0 necessary condition(s)

## phase 3 — END_PHASE at 0x02B96C: 2 necessary condition(s)
    precond  0x02B4F8  unit_hp_pct(TCN001, Character_Player_Test) != 0
    TRIGGER  0x02B898  random(3) == 0

## phase 3 — END_PHASE at 0x02BFB0: 3 necessary condition(s)
    precond  0x02B4F8  unit_hp_pct(TCN001, Character_Player_Test) != 0
    precond  0x02B9C4  hp_pct_test(TCN004, 0) != 1
    TRIGGER  0x02BEB4  random(5) == 0

## phase 3 — END_PHASE at 0x02C1E0: 3 necessary condition(s)
    precond  0x02B4F8  unit_hp_pct(TCN001, Character_Player_Test) != 0
    precond  0x02B9C4  hp_pct_test(TCN004, 0) != 1
    precond  0x02BFC8  global[112] < 4

## phase 3 — END_PHASE at 0x02CF74: 16 necessary condition(s)
    precond  0x02B4F8  unit_hp_pct(TCN001, Character_Player_Test) != 0
    precond  0x02B9C4  hp_pct_test(TCN004, 0) != 1
    precond  0x02BFC8  global[112] < 4
    precond  0x02C240  stopwatch_elapsed(0) <= 300
    precond  0x02C294  hp_pct_test(ADT301, 0) != 1
    precond  0x02C2E8  hp_pct_test(ADT302, 0) != 1
    precond  0x02C33C  hp_pct_test(ADT303, 0) != 1
    precond  0x02C390  hp_pct_test(ADT304, 0) != 1
    precond  0x02C3E4  hp_pct_test(ADT305, 0) != 1
    precond  0x02C438  hp_pct_test(ADT306, 0) != 1
    precond  0x02C48C  hp_pct_test(ADT307, 0) != 1
    precond  0x02C4E0  hp_pct_test(ADT308, 0) != 1
    TRIGGER  0x02C5C4  global[112] != 0
    TRIGGER  0x02CC0C  global[112] != 0
    TRIGGER  0x02CDC8  global[4] == 0
    TRIGGER  0x02CE9C  global[112] != 0

## phase 3 — END_PHASE at 0x02D1DC: 5 necessary condition(s)
    precond  0x02B4F8  unit_hp_pct(TCN001, Character_Player_Test) != 0
    precond  0x02B9C4  hp_pct_test(TCN004, 0) != 1
    precond  0x02BFC8  global[112] < 4
    precond  0x02C240  stopwatch_elapsed(0) <= 300
    precond  0x02CFD4  stopwatch_elapsed(0) < 1200

## phase 3 — FORCE_END_PHASE at 0x034A10: 0 necessary condition(s)
