Exemple #1
0
        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);
        }
Exemple #2
0
            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;
                            }
                        }
                    }
                }
            }
Exemple #3
0
 private void addPrev(BasicBlockStub stub)
 {
     if (!prev.Contains(stub))
     {
         prev.Add(stub);
     }
 }
Exemple #4
0
 public void AddNext(BasicBlockStub stub)
 {
     if (!next.Contains(stub))
     {
         next.Add(stub);
         stub.addPrev(this);
     }
 }
Exemple #5
0
        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;
        }
Exemple #6
0
 private void removePrev(BasicBlockStub stub)
 {
     prev.Remove(stub);
 }
Exemple #7
0
 private void removeNext(BasicBlockStub stub)
 {
     next.Remove(stub);
 }
Exemple #8
0
 private void addPrev(BasicBlockStub stub)
 {
     if (! prev.Contains(stub))
         prev.Add(stub);
 }
Exemple #9
0
 public void AddNext(BasicBlockStub stub)
 {
     if (! next.Contains(stub))
     {
         next.Add(stub);
         stub.addPrev(this);
     }
 }
Exemple #10
0
 private void removeNext(BasicBlockStub stub)
 {
     next.Remove(stub);
 }
Exemple #11
0
 private void removePrev(BasicBlockStub stub)
 {
     prev.Remove(stub);
 }