private VarUsage analyseVariable(Variable var) { BasicBlockStub[] stubArray = new BasicBlockStub[BlockList.Count]; Hashtable hash = new Hashtable(); for (int i = 0; i < BlockList.Count; i++) { stubArray[i] = new BasicBlockStub(var, BlockList[i]); hash.Add(BlockList[i], stubArray[i]); } for (int i = 0; i < BlockList.Count; i++) { foreach (BasicBlock block in BlockList[i].Next) { stubArray[i].AddNext(hash[block] as BasicBlockStub); } } foreach (BasicBlockStub stub in stubArray) { stub.Reduce(); } VarUsage result = new VarUsage(); foreach (BasicBlockStub stub in stubArray) { stub.AddToUsage(result); } return(result); }
public void AddToUsage(VarUsage usage) { if (!isEmpty) { for (int i = 0; i < UsageArray.Count - 1; i++) { if (UsageArray[i] is StoreVar) { StoreVar storer = UsageArray[i] as StoreVar; if (UsageArray[i + 1] is LoadVar) { usage.addUsage(storer, UsageArray[i + 1] as LoadVar); } } } if (UsageArray.Count > 0 && UsageArray[UsageArray.Count - 1] is StoreVar) { StoreVar storer = UsageArray[UsageArray.Count - 1] as StoreVar; bool flag = true; for (int i = 0; i < next.Count && flag; i++) { BasicBlockStub nextStub = next[i] as BasicBlockStub; if (nextStub.UsageArray[0] is LoadVar) { usage.addUsage(storer, nextStub.UsageArray[0] as LoadVar); flag = false; } } } } }
private void addPrev(BasicBlockStub stub) { if (!prev.Contains(stub)) { prev.Add(stub); } }
public void AddNext(BasicBlockStub stub) { if (!next.Contains(stub)) { next.Add(stub); stub.addPrev(this); } }
private VarUsage analyseVariable(Variable var) { BasicBlockStub[] stubArray = new BasicBlockStub[BlockList.Count]; Hashtable hash = new Hashtable(); for (int i = 0; i < BlockList.Count; i++) { stubArray[i] = new BasicBlockStub(var,BlockList[i]); hash.Add(BlockList[i],stubArray[i]); } for (int i = 0; i < BlockList.Count; i++) foreach (BasicBlock block in BlockList[i].Next) stubArray[i].AddNext(hash[block] as BasicBlockStub); foreach (BasicBlockStub stub in stubArray) stub.Reduce(); VarUsage result = new VarUsage(); foreach (BasicBlockStub stub in stubArray) stub.AddToUsage(result); return result; }
private void removePrev(BasicBlockStub stub) { prev.Remove(stub); }
private void removeNext(BasicBlockStub stub) { next.Remove(stub); }
private void addPrev(BasicBlockStub stub) { if (! prev.Contains(stub)) prev.Add(stub); }
public void AddNext(BasicBlockStub stub) { if (! next.Contains(stub)) { next.Add(stub); stub.addPrev(this); } }