package org.simantics.scl.compiler.internal.codegen.analysis; public abstract class Dominance { int[] idom; public Dominance(int size) { idom = new int[size]; idom[0] = 0; for(int i=1;i= 0) { if(curDom < 0) curDom = dom; else curDom = intersect(dom, curDom); } } if(idom[i] != curDom) { idom[i] = curDom; changed = true; } } } while(changed); } private int intersect(int a, int b) { while(a != b) { if(a < b) b = idom[b]; else a = idom[a]; } return a; } protected abstract int[] predecessors(int i); }