[m-rev.] diff: fix a bug in loop invariant hoisting

Julien Fischer juliensf at cs.mu.OZ.AU
Mon Sep 20 13:34:09 AEST 2004


Estimated hours taken: 6
Branches: main

Fix a bug that was causing assertion failures in the loop invariant
hoisting tests on jupiter in various .debug grades.

The bug was caused by the modes of the extra arguments in
foreign procs not being considered.  The current fix
is to just make any extra arguments non-hoistable.

compiler/loop_inv.m:
	Fix a bug in loop invariant hoisting.

Julien.

Index: loop_inv.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/loop_inv.m,v
retrieving revision 1.12
diff -u -r1.12 loop_inv.m
--- loop_inv.m	16 Jun 2004 03:44:45 -0000	1.12
+++ loop_inv.m	20 Sep 2004 03:25:33 -0000
@@ -1093,9 +1093,12 @@
     list__filter_map_corresponding(uniquely_used_args(MI), Args, Modes).

 uniquely_used_vars_2(MI, foreign_proc(_, PredId, ProcId, Args, Extras, _) - _) =
+    %
+    % XXX This may be overly conservative with respect to the extra arguments.
+    %
     list__filter_map_corresponding(uniquely_used_args(MI),
-        list__map(foreign_arg_var, Args ++ Extras),
-        argmodes(MI,PredId,ProcId)).
+        list__map(foreign_arg_var, Args),
+        argmodes(MI,PredId,ProcId)) ++ list.map(foreign_arg_var, Extras).

     % XXX This is very conservative!
     %

--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list