Method for identifying partial redundancies in existing processor architectures
First Claim
1. A method for identifying partially redundant loads in an SSA intermediate language representation of at least a portion of a computer program, the intermediate language representation having an inserted phi-function and wherein the definitions and their uses have been renamed, the method comprising identifying a partially redundant load by determining whether one of the operands in the inserted phi-function is unregisterized.
2 Assignments
0 Petitions
Accused Products
Abstract
The invention in one embodiment is a method for identifying partially redundant loads in an SSA intermediate language representation of at least a portion of a computer program. The intermediate language representation in this embodiment includes an inserted phi-function and the definitions and their uses have been renamed. The method includes identifying a partially redundant load by determining whether one of the operands in the inserted phi-function is unregisterized.
32 Citations
33 Claims
- 1. A method for identifying partially redundant loads in an SSA intermediate language representation of at least a portion of a computer program, the intermediate language representation having an inserted phi-function and wherein the definitions and their uses have been renamed, the method comprising identifying a partially redundant load by determining whether one of the operands in the inserted phi-function is unregisterized.
- 6. A program storage device readable by a general purpose computer, the program storage device encoding statements for identifying a partially redundant load in an SSA intermediate language representation of at least a portion of a computer program, the intermediate language representation having an inserted phi-function and wherein the definitions and their uses have been renamed, the statements defining a method comprising identifying a partially redundant load by determining whether one of the operands in the inserted phi-function is unregisterized.
-
11. A method for compiling at least a portion of a computer program into machine readable code, the method comprising:
-
(a) determining a flow of control along each execution path through an intermediate language representation of the portion of the computer program; (b) ascertaining a dominance relationship from the flow of control; (c) identifying an unambiguous global variable in the intermediate language representation reaching a join point; (d) inserting a phi-function having a plurality of operands for the global variable in the intermediate language representation subsequent to the join point as indicated by the dominance relationship; (e) renaming a definition and any subsequent use of the definition in the intermediate language representation; and (f) identifying a partially redundant load by determining whether one of the operands in the inserted phi-function is not renamed. - View Dependent Claims (12, 13, 14, 15, 16, 17, 18, 19, 20, 21)
-
-
22. A program storage device readable by a general purpose computer, the program storage device encoding statements for compiling at least a portion of high-level source code into machine readable object code, the statements defining a method comprising:
-
(a) determining a flow of control along each execution path through an intermediate language representation of the portion of the computer program; (b) ascertaining a dominance relationship from the flow of control; (c) identifying a global variable in the intermediate language representation; (d) inserting a phi-function having a plurality of operands for the global variable in the intermediate language representation as indicated by the dominance relationship; (e) renaming a definition and any subsequent use of the definition in the intermediate language representation; and (f) identifying a partially redundant load by determining whether one of the operands in the inserted phi-function is not renamed. - View Dependent Claims (23, 24, 25, 26, 27, 28, 29, 30, 31, 32)
-
-
33. A method for compiling at least a portion of high-level source code into machine readable object code, the method comprising:
-
(a) determining a flow of control along each execution path through an intermediate language representation of the source code, including at least one of the following; (1) constructing a flow control graph; and (2) constructing a dominator-join graph; (b) ascertaining a dominance relationship from the flow of control, including at least one of the following; (1) constructing a dominator tree; (2) constructing a dominator-join graph; and (3) calculating the iterative dominance frontier for each instruction; (c) identifying a global variable in the intermediate language representation; (d) inserting a phi-function for the global variable in the intermediate language representation as indicated by the dominance relationship, including maintaining a linked list of inserted phi-function locations; (e) renaming a definition and any subsequent use of the definition in the intermediate language representation, the renaming including at least one of; (1) performing a depth-first ordered traversal of the intermediate language representation; (2) assigning temp values to each rank-n expression; (3) eliminating loop invariant motion; and (4) eliminating common subexpressions; (f) repeating acts (b)-(e) at least once to create a rank-n SSA intermediate language where n is a positive integer greater than zero; (g) identifying a partially redundant load by determining whether an inserted phi-function contains an operand that has not been renamed; and (h) eliminating the identified partial redundancy by doing at least one of the following; (1) inserting an artificial load into a basic block immediately preceding a join point along an unbalanced flow control path of the operands in the phi-function; and (2) moving the partially redundant load to a nearest common ancestor in the dominance relationship of the operands in the phi-function; (i) coloring out artificial register dependencies; and (j) generating machine readable code.
-
Specification