[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: patches



Hi Florian,

You patch has been incorporated, thanks.

Cheers,
===========================================================
Feng Qian                             fqian@sable.mcgill.ca

On Thu, 7 Mar 2002, Florian Loitsch wrote:

> hi,
> while looking through SOOT, I found some small improvements (correct me if i'm
>     wrong!).
> in soot.toolkits.scalar.ArraySparseSet.java:
>     public void add(Object e)
>     {
>       /* Expand only if necessary! and removes one if too:) */
>         // Add element
>             if(!contains(e)) {
>               // Expand array if necessary
>               if(numElements == maxElements)
>                 doubleCapacity();
>               elements[numElements++] = e;
>             }
>      }
>
>     private void removeElementAt(int index)
>     {
>       /* NO!!! just copy the last element to the removed position!
>         // Handle simple case
>             if(index  == numElements - 1)
>             {
>                 numElements--;
>                 return;
>             }
> ············
>         // Else, shift over elements
>             System.arraycopy(elements, index + 1, elements, index, numElements -
> (index + 1));
>             numElements--;
>        */
>       elements[index] = elements[numElements--];
>     }
>
>     public boolean equals(Object otherFlow)
>     {·······
>         ArraySparseSet other = (ArraySparseSet) otherFlow;
> ·········
>         if(other.numElements != this.numElements)
>             return false;
> ·····
>         int size = this.numElements;
> ·············
>         // Make sure that thisFlow is contained in otherFlow··
>             for(int i = 0; i < size; i++)
>                 if(!other.contains(this.elements[i]))
>                     return false;
>
>             /* both arrays have the same size, no element appears twice in one
>              * array, all elements of ThisFlow are in otherFlow -> they are
>              * equal!  we don't need to test again!
>         // Make sure that otherFlow is contained in ThisFlow········
>             for(int i = 0; i < size; i++)
>                 if(!this.contains(other.elements[i]))
>                     return false;
>              */
> ········
>         return true;
>     }
>
> and a small change in soot.toolkits.scalar.BackwardFlowAnalysis.java, that
> brought the flow-throughs from 190,000 to 80,000 (in my benchmark):
>
>     protected void doAnalysis()
>     {
>         LinkedList changedUnits = new LinkedList();
>         HashSet changedUnitsSet = new HashSet();
>
>         // Set initial Flows and nodes to visit.
>         {
>             Iterator it = graph.iterator();
>
>             while(it.hasNext())
>             {
>                 Object s = it.next();
>
>                 /* although only a DFS could really give a good result, it is
>                  * probably wiser to do begin at the bottom for
>                  * Backwards-analysis*/
>                 changedUnits.addFirst(s);
>                 changedUnitsSet.add(s);
>
>                 unitToBeforeFlow.put(s, newInitialFlow());
>                 unitToAfterFlow.put(s, newInitialFlow());
>             }
>         }
>
> mfg
>  florian loitsch
> ps: next time i'll send patch-files. promised.
>
> --
> People who think they know everything are very irritating to those of us who do.
> - Anon.
>