public function process(GraphState $state) { $graph = $state->getGraph(); $assignments = array_merge(Helper::findVerticesByClass(JitAssignment::class, $graph), [$state->getFunction()]); $vars = Helper::findVariables($graph); $dominator = $state->getDominator(); foreach ($vars as $var) { $hash = spl_object_hash($var); $varAssignments = $this->findAssignmentsByVar($var, $assignments); $phi = $this->findPhiNodes($var, $varAssignments, $dominator, $graph); $this->implementSSA($var, $var, $state->getFunction(), $graph, $phi, $state->getFunction()->getArguments()); $this->stack->removeAll($this->stack); } }
/** * @covers ::__construct * @covers ::getGraph * @covers ::getFunction * @covers ::getDominator * @covers ::getPostDominator * @covers ::getInverseGraph */ public function testBasicUsage() { $func = new JitFunction([], new Type(0), $graph = new DirectedAdjacencyList()); $graph->ensureArc($func, new End()); $state = new GraphState($func); $this->assertSame($func, $state->getFunction()); $this->assertSame($graph, $state->getGraph()); $this->assertInstanceOf(Dominator::class, $state->getDominator()); $this->assertInstanceOf(Dominator::class, $state->getPostDominator()); $this->assertInstanceOf(DirectedAdjacencyList::class, $state->getInverseGraph()); }