Questions for dataflow: 1. Describe what is meant by dead code elimination. Give an algorithm acting on a program represented as a collection of basic blocks which marks all dead code in some fashion. Give two uses of such information. Comment on how label variables would influence your answer. What would your algorithm make of: let start() be $( g() return l: h() goto l $) 2. Explain what is meant by the call graph of a (bcpl) program. To what extent does it indicate the actual flow of control at run time? How do function valued variables affect your definition. Give an algorithm to report on procedures which are demonstrably never called. Can the algorithm be modified to remark on procedures which are unlikely to be called? 3. Define path expressions. Explain how certain path expressions can be used to indicate: 1. data flow anomalies (indicate which data flow you regard as anomalous). 2. whether x (a variable) is live at a particular point 3. whether x (a variable) is available at a particular point. 4. Define the notion of a variable being live at a particular point in a flowgraph. Give an algorithm for deriving the set of live variables at each program point. Explain how such information may help register allocation. 5. Explain the notion of an expression e being available at a particular point in a flowgraph. By considering a suitable example program (with some nodes having multiple predecessors) how a program may be optimised to take account of such information. Give also a 'near miss' where an expression is not available on every route to a given program point. Give an algorithm for determining the set of avaiable expressions at every program point.