250 likes | 392 Vues
This guide explores advanced compiler optimization techniques, specifically focusing on Common Subexpression Elimination (CSE) and Copy Propagation, as discussed by Johnathon Jamison and David Marin. It demonstrates how to accurately replace variables in expressions while ensuring their values remain unchanged using fake definitions and uses. The implementation of these strategies leverages Muchnick’s algorithm for local CSE, providing insights into the interaction between CSE and copy propagation to optimize code execution and improve performance.
E N D
Common Subexpression Elimination and Copy Propagation in Titanium Johnathon Jamison David Marin CS265 S. Graham
Global Copy Propagation • Given a = b; … x = a + 1; • We want to replace a with b on the last line, but we need to know that a and b are unchanged • Def/use analysis isn’t quite enough (why?)
Inserting Fake Defs and Uses • Add fake defs and uses so that def/use analysis gives us the info we need b = b; a = b; … newtemp = b; x = a + 1; • We can use this technique to enable CSE too.
Interaction with Copy Propagation • Any temps introduced are placed after the calculation, so that copy propagation can remove them a = f * i a = f * i temp_1 = a … … b = f * i b = temp_1 temp_2 = b … … c = f * i c = temp_2
Local CSE • Used Muchnick’s algorithm (described in class) • Used defs to find what was killed • Fully implemented • Except method calls • Since we are using defs already, why not so something more substantial?