[m-rev.] diff: avoid extra traversal in deep_profiling.m
Zoltan Somogyi
zs at csse.unimelb.edu.au
Mon Dec 24 11:00:02 AEDT 2007
This has already been reviewed by Paul Bone in person.
Zoltan.
ws0/deep_profiling.m:
Avoid an extra pass through conjunctions by flattening conjunctions
in place.
cvs diff: Diffing .
Index: deep_profiling.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/deep_profiling.m,v
retrieving revision 1.70
diff -u -b -r1.70 deep_profiling.m
--- deep_profiling.m 19 Dec 2007 03:10:48 -0000 1.70
+++ deep_profiling.m 21 Dec 2007 03:33:39 -0000
@@ -34,7 +34,6 @@
:- import_module check_hlds.mode_util.
:- import_module check_hlds.type_util.
:- import_module hlds.code_model.
-:- import_module hlds.goal_util.
:- import_module hlds.hlds_goal.
:- import_module hlds.hlds_pred.
:- import_module hlds.hlds_rtti.
@@ -884,10 +883,9 @@
AddedImpurity = no
;
GoalExpr0 = conj(ConjType, Goals0),
- deep_prof_transform_conj(0, Path, Goals0, Goals1, AddedImpurity,
- !DeepInfo),
+ deep_prof_transform_conj(0, ConjType, Path, Goals0, Goals,
+ AddedImpurity, !DeepInfo),
add_impurity_if_needed(AddedImpurity, GoalInfo0, GoalInfo),
- flatten_conj(Goals1, Goals),
GoalExpr = conj(ConjType, Goals),
Goal = hlds_goal(GoalExpr, GoalInfo)
;
@@ -984,18 +982,28 @@
"deep_prof_transform_goal: shorthand should have gone by now")
).
-:- pred deep_prof_transform_conj(int::in, goal_path::in,
+:- pred deep_prof_transform_conj(int::in,
+ conj_type::in, goal_path::in,
list(hlds_goal)::in, list(hlds_goal)::out, bool::out,
deep_info::in, deep_info::out) is det.
-deep_prof_transform_conj(_, _, [], [], no, !DeepInfo).
-deep_prof_transform_conj(N, Path, [Goal0 | Goals0], [Goal | Goals],
+deep_prof_transform_conj(_, _, _, [], [], no, !DeepInfo).
+deep_prof_transform_conj(N, ConjType, Path, [Goal0 | Goals0], Goals,
AddedImpurity, !DeepInfo) :-
N1 = N + 1,
deep_prof_transform_goal(cord.snoc(Path, step_conj(N1)), Goal0, Goal,
AddedImpurityFirst, !DeepInfo),
- deep_prof_transform_conj(N1, Path, Goals0, Goals, AddedImpurityLater,
- !DeepInfo),
+ deep_prof_transform_conj(N1, ConjType, Path, Goals0,
+ TailGoals, AddedImpurityLater, !DeepInfo),
+ Goal = hlds_goal(GoalExpr, _),
+ (
+ GoalExpr = conj(plain_conj, Conjunct),
+ ConjType = plain_conj
+ ->
+ Goals = Conjuncts ++ TailGoals
+ ;
+ Goals = [Goal | TailGoals]
+ ),
bool.or(AddedImpurityFirst, AddedImpurityLater, AddedImpurity).
:- pred deep_prof_transform_disj(int::in, goal_path::in,
cvs diff: Diffing notes
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to: mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions: mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the reviews
mailing list