******************************************************************************** ******************************************************************************** ******************************************************************************** To: mock@thistle.cs.washington.edu cc: spin-comp-archive@cs Subject: Discordant Variables and Loop Unrolling Date: Wed, 01 Oct 1997 13:34:26 PDT From: Brian Grant Two edges are mutually exclusive if the conjunction of their reachability conditions is not satisfiable. A merge is static if all of its incoming edges are pairwise mutually exclusive. So, with our new BTA, loop-head merges are never found to be "static", based on reachability conditions. This has implications for loop unrolling in the current design. -- Loop-head merges are always unit boundaries. There will be a cache lookup at the loop-head merge unless the laziness policy is Eager and the cache policy is CacheAllUnchecked. -- Derived static temps will always be killed at loop-head merges. In the future, I might eliminate the unit boundary at the loop head in the case where no cache lookup is needed. The cache lookup could also be eliminated if the loop is to be unrolled eagerly and the discordant variables change monotonically (there must be an analysis in the literature that determines this). Loop laziness can be eliminated if all exit conditions are static. We might also want to address the second problem. In general, how do we know we don't have to kill discordant derived static temps at a discordant merge? We must be able to figure that out from control- dependence info and def-use chains. We essentially need to know which derived temps vary with the discordant ones. --Brian