Author: luc
Date: Wed Aug 12 14:59:49 2009
New Revision: 803546
URL: http://svn.apache.org/viewvc?rev=803546&view=rev
Log:
try not to build big arrays containing values that are immediately ignored
because they have already been processed
Modified:
commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/algorithmic/forward/analysis/MethodDifferentiator.java
Modified:
commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/algorithmic/forward/analysis/MethodDifferentiator.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/algorithmic/forward/analysis/MethodDifferentiator.java?rev=803546&r1=803545&r2=803546&view=diff
==============================================================================
---
commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/algorithmic/forward/analysis/MethodDifferentiator.java
(original)
+++
commons/sandbox/nabla/trunk/src/main/java/org/apache/commons/nabla/algorithmic/forward/analysis/MethodDifferentiator.java
Wed Aug 12 14:59:49 2009
@@ -394,14 +394,7 @@
// an instruction consuming a converted value and producing
// a double must be changed to produce a differential pair,
// get the double values produced and add them to the changed
set
- for (TrackingValue produced :
getProducedDoubleValues(consumer)) {
-
- // add it to the pending set if it has not already been
processed
- if (!converted.contains(produced)) {
- pending.add(produced);
- }
-
- }
+
pending.addAll(getProducedAndNotConvertedDoubleValues(consumer));
// as a consumer of a converted value, the instruction must be
changed
changes.add(consumer);
@@ -421,11 +414,11 @@
}
- /** Get the list of double values produced by an instruction.
+ /** Get the list of double values produced by an instruction and not yet
converted.
* @param instruction instruction producing the values
* @return list of double values produced
*/
- private List<TrackingValue> getProducedDoubleValues(final AbstractInsnNode
instruction) {
+ private List<TrackingValue> getProducedAndNotConvertedDoubleValues(final
AbstractInsnNode instruction) {
final List<TrackingValue> values = new ArrayList<TrackingValue>();
@@ -447,7 +440,8 @@
for (int i = 0; i < produced.getStackSize(); ++i) {
final TrackingValue value = (TrackingValue)
produced.getStack(i);
if (((i >= beforeStackSize) || (value !=
before.getStack(i))) &&
- value.getValue().equals(BasicValue.DOUBLE_VALUE)) {
+ value.getValue().equals(BasicValue.DOUBLE_VALUE) &&
+ !converted.contains(value)) {
values.add(value);
}
}
@@ -456,7 +450,8 @@
for (int i = 0; i < locals; ++i) {
final TrackingValue value = (TrackingValue)
produced.getLocal(i);
if ((value != before.getLocal(i)) &&
- value.getValue().equals(BasicValue.DOUBLE_VALUE)) {
+ value.getValue().equals(BasicValue.DOUBLE_VALUE) &&
+ !converted.contains(value)) {
values.add(value);
}
}