Hello All: I was going through the following article
" Register Allocation with instruction scheduling: a new approach" by Pinter etal. The phase ordering of register allocation and Instruction scheduling is important topic. The scheduling before register allocator increases the register pressure whereas the instruction scheduling after register allocation will be seeing the false dependencies created by Register allocator. The false dependencies between the instructions will not be able to schedule the two instruction simultaneously reducing the Instruction Level Parallelism. To achieve better ILP for the instruction scheduling after register allocation the false dependencies created by the register allocator should be reduced. Let Gs(V,E) is the scheduling Graph and G'(V,E) is the Scheduling Graph after the register allocation. The Graph G'(V,E) has the false dependencies created by Register Allocator Another graph is created with Gf(V,E) where the edges represents the false dependencies. To make sure the false dependencies Graph which is the complement of Gs(V,E) and the edges of Gf are the intersection of the edge in the G'(V,E) and the edges in the complement of Gs scheduling graph. With the availability of the false dependencies graph and the interference graph, The edges in the interference graph doesn't intersects with the edges in the false dependencies graph, this edge will be added to the interference graph and since this edge interfere and the assigning phase will assign different register. Thus the false dependencies can be removed and the scheduling graph after the register allocator will not have false dependencies and the better ILP and scheduling is achieved. This overcomes the disadvantages of instruction scheduling after register allocator. This looks feasible to implement in GCC and I would like to implement the above if not done in the GCC. Please let me know what do you think. Thanks & Regards Ajit