예제 #1
0
 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);
     }
 }
예제 #2
0
 /**
  * @covers ::findVerticesByClass
  */
 public function testFindVerticiesByClass()
 {
     $end = new JitEnd();
     $this->graph->ensureArc($this->v[5], $end);
     $this->assertSame([$end], Helper::findVerticesByClass(JitEnd::class, $this->graph));
 }
예제 #3
0
 public function getPostDominator()
 {
     return new Dominator($this->getInverseGraph(), Helper::findVerticesByClass(End::class, $this->graph)[0]);
 }