Skip to content
This repository was archived by the owner on May 18, 2019. It is now read-only.

Commit da6c53f

Browse files
hkielOpenModelica-Hudson
authored andcommitted
avoid multiple sorts
1 parent 743991c commit da6c53f

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

Compiler/BackEnd/ResolveLoops.mo

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -437,10 +437,16 @@ algorithm
437437
then
438438
{subLoop};
439439
case(_,_,_::_,_::_,_,_)
440-
equation
440+
algorithm
441441
//print("there are both varCrossNodes and eqNodes\n");
442442
//at least get paths of length 2 between eqCrossNodes
443-
paths = getShortPathsBetweenEqCrossNodes(List.sort(eqCrossLstIn,intGt), mIn, mTIn, {});
443+
for i in 1:arrayLength(mIn) loop
444+
arrayUpdate(mIn, i, List.sort(mIn[i], intGt));
445+
end for;
446+
for i in 1:arrayLength(mTIn) loop
447+
arrayUpdate(mTIn, i, List.sort(mTIn[i], intGt));
448+
end for;
449+
paths := getShortPathsBetweenEqCrossNodes(List.sort(eqCrossLstIn,intGt), mIn, mTIn, {});
444450
//
445451
//print("GOT SOME NEW LOOPS: \n"+stringDelimitList(List.map(paths,HpcOmTaskGraph.intLstString)," / ")+"\n");
446452
then
@@ -479,14 +485,14 @@ algorithm
479485
case(crossEq::rest,_,_,_)
480486
algorithm
481487
//print("check crossEq "+intString(crossEq)+"\n");
482-
adjVars := List.sort(arrayGet(mIn, crossEq),intGt);
488+
adjVars := arrayGet(mIn, crossEq);
483489
for adjVar in adjVars loop
484-
adjEqs := List.sort(List.removeOnTrue(crossEq, intEq, arrayGet(mTIn, adjVar)),intGt);
490+
adjEqs := List.removeOnTrue(crossEq, intEq, arrayGet(mTIn, adjVar));
485491
//print("all adj eqs "+stringDelimitList(List.map(adjEqs, intString),",")+"\n");
486492
//all adjEqs which are crossnodes as well
487493
adjEqs := List.intersectionIntSorted(adjEqs, rest);
488494
for adjEq in adjEqs loop
489-
adjVars2 := List.sort(List.removeOnTrue(adjVar, intEq, arrayGet(mIn, adjEq)),intGt);
495+
adjVars2 := List.removeOnTrue(adjVar, intEq, arrayGet(mIn, adjEq));
490496
sharedVars := List.intersectionIntSorted(adjVars, adjVars2);
491497
//print("all sharedVars "+stringDelimitList(List.map(sharedVars, intString),",")+"\n");
492498
if (intGe(listLength(sharedVars),1)) then

0 commit comments

Comments
 (0)