public void Pdg_LoopWithIfElse() { var m = new ProcedureBuilder(); var c = m.Declare(PrimitiveType.Word32, "c"); var f = m.Declare(PrimitiveType.Bool, "f"); m.Label("loopHead"); m.BranchIf(m.Eq(c, 0), "done"); m.BranchIf(f, "then"); m.Label("else"); m.SideEffect(m.Fn("CallElse")); m.Jump("loopHead"); m.Label("then"); m.SideEffect(m.Fn("CallThen")); m.Jump("loopHead"); m.Label("done"); m.Return(); FindPostDominators(m); string sExp = "done (6): idom ProcedureBuilder_exit (7)" + nl + "else (4): idom loopHead (2)" + nl + "l1 (3): idom loopHead (2)" + nl + "loopHead (2): idom done (6)" + nl + "ProcedureBuilder_entry (1): idom loopHead (2)" + nl + "ProcedureBuilder_exit (7): idom " + nl + "then (5): idom loopHead (2)" + nl; Assert.AreEqual(sExp, sw.ToString()); }