public static void DominanceCalculation1() { var basicBlocks = BlockTests.Scenario3; var dominance = new SimpleFastDominance(basicBlocks, basicBlocks[0]); var provider = dominance as IDominanceAnalysis; Assert.Same(provider.GetImmediateDominator(basicBlocks[0]), null); Assert.Same(provider.GetImmediateDominator(basicBlocks[1]), basicBlocks[0]); Assert.Same(provider.GetImmediateDominator(basicBlocks[2]), basicBlocks[0]); Assert.Same(provider.GetImmediateDominator(basicBlocks[3]), basicBlocks[2]); Assert.Same(provider.GetImmediateDominator(basicBlocks[4]), basicBlocks[2]); Assert.Same(provider.GetImmediateDominator(basicBlocks[5]), basicBlocks[2]); Assert.Same(provider.GetImmediateDominator(basicBlocks[6]), basicBlocks[0]); Assert.Equal(provider.GetDominators(basicBlocks[0]), new[] { basicBlocks[0] }); //Assert.Equal(provider.GetDominators(basicBlocks[1]), new[] { basicBlocks[0], basicBlocks[1] }); //Assert.Equal(provider.GetDominators(basicBlocks[2]), new[] { basicBlocks[0], basicBlocks[2] }); //Assert.Equal(provider.GetDominators(basicBlocks[3]), new[] { basicBlocks[0], basicBlocks[2], basicBlocks[3] }); //Assert.Equal(provider.GetDominators(basicBlocks[4]), new[] { basicBlocks[0], basicBlocks[2], basicBlocks[4] }); //Assert.Equal(provider.GetDominators(basicBlocks[5]), new[] { basicBlocks[0], basicBlocks[2], basicBlocks[5] }); //Assert.Equal(provider.GetDominators(basicBlocks[6]), new[] { basicBlocks[0], basicBlocks[6] }); Dump(basicBlocks, dominance); }
public static void DominanceCalculation2() { var basicBlocks = BlockTests.Scenario4; SimpleFastDominance dominance = new SimpleFastDominance(basicBlocks, basicBlocks[0]); IDominanceAnalysis provider = dominance as IDominanceAnalysis; Assert.Same(provider.GetImmediateDominator(basicBlocks[0]), null); Assert.Same(provider.GetImmediateDominator(basicBlocks[1]), basicBlocks[0]); Assert.Same(provider.GetImmediateDominator(basicBlocks[2]), basicBlocks[1]); Assert.Same(provider.GetImmediateDominator(basicBlocks[3]), basicBlocks[0]); Assert.Same(provider.GetImmediateDominator(basicBlocks[4]), basicBlocks[0]); Assert.Same(provider.GetImmediateDominator(basicBlocks[5]), basicBlocks[4]); Assert.Same(provider.GetImmediateDominator(basicBlocks[6]), basicBlocks[4]); Assert.Same(provider.GetImmediateDominator(basicBlocks[7]), basicBlocks[4]); Assert.Same(provider.GetImmediateDominator(basicBlocks[8]), basicBlocks[0]); Assert.Same(provider.GetImmediateDominator(basicBlocks[9]), basicBlocks[8]); Assert.Same(provider.GetImmediateDominator(basicBlocks[10]), basicBlocks[8]); Assert.Same(provider.GetImmediateDominator(basicBlocks[11]), basicBlocks[0]); Assert.Same(provider.GetImmediateDominator(basicBlocks[12]), basicBlocks[0]); Assert.Equal(provider.GetDominators(basicBlocks[0]), new[] { basicBlocks[0] }); //Assert.Equal(provider.GetDominators(basicBlocks[1]), new[] { basicBlocks[0], basicBlocks[1] }); //Assert.Equal(provider.GetDominators(basicBlocks[2]), new[] { basicBlocks[0], basicBlocks[1], basicBlocks[2] }); //Assert.Equal(provider.GetDominators(basicBlocks[3]), new[] { basicBlocks[0], basicBlocks[3] }); //Assert.Equal(provider.GetDominators(basicBlocks[4]), new[] { basicBlocks[0], basicBlocks[4] }); //Assert.Equal(provider.GetDominators(basicBlocks[5]), new[] { basicBlocks[0], basicBlocks[4], basicBlocks[5] }); //Assert.Equal(provider.GetDominators(basicBlocks[6]), new[] { basicBlocks[0], basicBlocks[4], basicBlocks[6] }); //Assert.Equal(provider.GetDominators(basicBlocks[7]), new[] { basicBlocks[0], basicBlocks[4], basicBlocks[7] }); //Assert.Equal(provider.GetDominators(basicBlocks[8]), new[] { basicBlocks[0], basicBlocks[8] }); //Assert.Equal(provider.GetDominators(basicBlocks[9]), new[] { basicBlocks[0], basicBlocks[8], basicBlocks[9] }); //Assert.Equal(provider.GetDominators(basicBlocks[10]), new[] { basicBlocks[0], basicBlocks[8], basicBlocks[10] }); //Assert.Equal(provider.GetDominators(basicBlocks[11]), new[] { basicBlocks[0], basicBlocks[11] }); //Assert.Equal(provider.GetDominators(basicBlocks[12]), new[] { basicBlocks[0], basicBlocks[12] }); //Assert.Equal(provider.GetDominanceFrontier(basicBlocks[4]), new[] { basicBlocks[3], basicBlocks[4], basicBlocks[11], basicBlocks[12] }); Dump(basicBlocks, dominance); }