Results 1 
3 of
3
NearOptimal Instruction Selection on DAGs
, 2008
"... Instruction selection is a key component of code generation. High quality instruction selection is of particular importance in the embedded space where complex instruction sets are common and code size is a prime concern. Although instruction selection on tree expressions is a well understood and ea ..."
Abstract

Cited by 5 (2 self)
 Add to MetaCart
Instruction selection is a key component of code generation. High quality instruction selection is of particular importance in the embedded space where complex instruction sets are common and code size is a prime concern. Although instruction selection on tree expressions is a well understood and easily solved problem, instruction selection on directed acyclic graphs is NPcomplete. In this paper we present NOLTIS, a nearoptimal, linear time instruction selection algorithm for DAG expressions. NOLTIS is easy to implement, fast, and effective with a demonstrated average code size improvement of 5.1 % compared to the traditional tree decomposition and tiling approach.
DualIssue Scheduling For Binary Trees With Spills And Pipelined Loads
, 2001
"... We describe an algorithm that finds a minimum cost schedule, including spill code, for a registerconstrained machine that can issue up to one arithmetic operation and one memory access operation at a time, under the restrictions that the dependence graph is a full binary tree, all arithmetic and st ..."
Abstract

Cited by 2 (0 self)
 Add to MetaCart
We describe an algorithm that finds a minimum cost schedule, including spill code, for a registerconstrained machine that can issue up to one arithmetic operation and one memory access operation at a time, under the restrictions that the dependence graph is a full binary tree, all arithmetic and store operations have unit latency, and all load operations have a latency of 1 or all load operations have a latency of 2. This problem is a generalization of two problems whose efficient solutions are well understood: optimal dualissue scheduling without spills for binary expression trees, solved by Bernstein, Jaffe, and Rodeh [SIAM J. Comput., 18 (1989), pp. 10981127], and optimal singleissue scheduling with spill code and delayed loads, solved by Kurlander, Proebsting, and Fischer [ACM Transactions on Programming Languages and Systems, 17 (1995), pp. 740776], both assuming a fixed number of registers. We show that the algorithm's complexity is O(nk) where n is the number of operations to be scheduled and k is the number of spills in the schedule. The cost of a "contiguous" schedule (i.e., its length) is shown to be # + 2k + g + A, where # is the number of registers used, A is the number of arithmetic operations, k is the number of spills, and g is the number of empty slots in the associated single processor schedule. Therefore all contiguous schedules formed from optimal single processor schedules have minimum cost.
DualIssue Scheduling With Spills For Binary Trees
 In Proceedings of the Tenth Annual ACMSIAM Symposium on Discrete Algorithms
, 1999
"... We describe an algorithm that finds a minimum cost schedule, including spill code, for a registerconstrained machine that can issue up to one arithmetic operation and one memory access operation at a time, under the restrictions that the dependence graph is a full binary tree, and all operations ha ..."
Abstract

Cited by 1 (0 self)
 Add to MetaCart
We describe an algorithm that finds a minimum cost schedule, including spill code, for a registerconstrained machine that can issue up to one arithmetic operation and one memory access operation at a time, under the restrictions that the dependence graph is a full binary tree, and all operations have unit processing times. This problem is a generalization of two problems whose efficient solutions are well understood: optimal dualissue scheduling without spills, solved by Bernstein, Jaffe and Rodeh (1987), and optimal singleissue scheduling with spill code, solved by Sethi and Ullman (1970), both assuming a binary dependence graph and a fixed number of registers. We show that the algorithm 's complexity is O(nk) where n is the number of operations to be scheduled and k is the number of spills in the schedule. The cost of an optimal schedule (i.e. its length) is ae + 2k + jAj where ae is the number of registers used, k is the number of spills and jAj is the number of arithmetic operations. We show that this is the cost of all schedules that are in "contiguous form" and therefore that all minimumspill contiguous form schedules have minimum cost. 1