[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.
>
- References:
- patches
- From: Florian Loitsch <florian@loitsch.net>