@@ -42,6 +42,7 @@ import DAE;
4242
4343protected
4444import Array ;
45+ import AvlSetInt ;
4546import BackendDAEUtil ;
4647import BackendDump ;
4748import BackendEquation ;
@@ -1970,6 +1971,7 @@ protected
19701971 list< BackendDAE . Var > varLst;
19711972 list< CommonSubExp > cseLst2, cseLst3, shortenPathsCSE;
19721973 list< tuple< Boolean , String >> varAtts, eqAtts;
1974+ AvlSetInt . Tree varIdcsSet;
19731975algorithm
19741976 try
19751977 range := List . intRange(arrayLength(mIn));
@@ -2005,9 +2007,12 @@ algorithm
20052007 (_, eqIdcs) := List . filter1OnTrueSync(lengthLst, intEq, 3 , range);
20062008 (eqLst, eqIdcs) := List . filterOnTrueSync(BackendEquation . getList(eqIdcs, eqsIn),BackendEquation . isNotAlgorithm,eqIdcs); // no algorithms
20072009 eqs := BackendEquation . listEquation(eqLst);
2008- varIdcs := List . unique(List . flatten(List . map1(eqIdcs, Array . getIndexFirst, mIn)));
2010+ varIdcsSet := AvlSetInt . EMPTY ();
2011+ for eq in eqIdcs loop
2012+ varIdcsSet := AvlSetInt . addList(varIdcsSet, arrayGet(mIn, eq));
2013+ end for ;
2014+ varIdcs := AvlSetInt . listKeysReverse(varIdcsSet);
20092015 varLst := List . map1(varIdcs, BackendVariable . getVarAtIndexFirst, varsIn);
2010- // (varLst,varIdcs) := List.filterOnTrueSync(varLst,BackendVariable.isVarNonDiscrete,varIdcs);// no discrete vars
20112016 vars := BackendVariable . listVar1(varLst);
20122017 eqSys := BackendDAEUtil . createEqSystem(vars, eqs);
20132018 (_, m, mT) := BackendDAEUtil . getIncidenceMatrix(eqSys, BackendDAE . ABSOLUTE (), NONE ());
@@ -2175,6 +2180,7 @@ algorithm
21752180 BackendDAE . Equation eq1, eq2;
21762181 BackendDAE . Var var1, var2;
21772182 DAE . Exp varExp1, varExp2, lhs, rhs1, rhs2;
2183+ array< Integer > varMapArr, eqMapArr;
21782184 case (_, _, _, _, _, _, _, _)
21792185 equation
21802186 // print("partition "+stringDelimitList(List.map(partition, intString), ", ")+"\n");
@@ -2206,10 +2212,14 @@ algorithm
22062212 // print("rhs2 " +ExpressionDump.printExpStr(rhs2)+"\n");
22072213 // print("is equal\n");
22082214 // build CSE
2209- sharedVarIdcs = List . map1(sharedVarIdcs, List . getIndexFirst, varMap);
2215+ eqMapArr = listArray(eqMap);
2216+ varMapArr = listArray(varMap);
2217+ sharedVarIdcs = list(arrayGet(varMapArr, i) for i in sharedVarIdcs);
22102218 varIdcs1 = listAppend(varIdcs1, varIdcs2);
2211- varIdcs1 = List . map1(varIdcs1, List . getIndexFirst, varMap);
2212- eqIdcs = List . map1(loop1, List . getIndexFirst, eqMap);
2219+ varIdcs1 = list(arrayGet(varMapArr, i) for i in varIdcs1);
2220+ eqIdcs = list(arrayGet(eqMapArr,i) for i in loop1);
2221+ GC . free(eqMapArr);
2222+ GC . free(varMapArr);
22132223 then ASSIGNMENT_CSE (eqIdcs, sharedVarIdcs, varIdcs1)::cseIn;
22142224 else cseIn;
22152225 end matchcontinue;
0 commit comments