From e4e02d8489a3f8c5da74c59536215ef45416915a Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 5 Jan 2018 11:48:06 +0100 Subject: [PATCH] Prevent LICM of memory accesses guarded by effect-free predicates * module/language/cps/licm.scm (loop-invariant?): Read or write effects can be guarded by effect-free branches; prevent hoisting of these expressions if the term isn't always reachable. --- module/language/cps/licm.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/language/cps/licm.scm b/module/language/cps/licm.scm index c0768cfc5..4a8252885 100644 --- a/module/language/cps/licm.scm +++ b/module/language/cps/licm.scm @@ -55,7 +55,7 @@ (and (not (causes-effect? fx &allocation)) (or always-reached? - (not (causes-effect? fx &type-check))) + (not (causes-effect? fx (logior &type-check &read &write)))) (or (not (causes-effect? fx &write)) (intmap-fold (lambda (label fx* invariant?) (and invariant?