R600: initial scheduler code
authorVincent Lejeune <vljn@ovi.com>
Tue, 5 Mar 2013 18:41:32 +0000 (18:41 +0000)
committerVincent Lejeune <vljn@ovi.com>
Tue, 5 Mar 2013 18:41:32 +0000 (18:41 +0000)
commit62f38ca141f87ff3ed9334fbe6a5e1c45d40ca86
tree35d3d58f736ff178343b366036dfab5de893de9b
parent1c9bdf1e5e4b128206e1699c1bb82457118601e4
R600: initial scheduler code

This is a skeleton for a pre-RA MachineInstr scheduler strategy. Currently
it only tries to expose more parallelism for ALU instructions (this also
makes the distribution of GPR channels more uniform and increases the
chances of ALU instructions to be packed together in a single VLIW group).
Also it tries to reduce clause switching by grouping instruction of the
same kind (ALU/FETCH/CF) together.

Vincent Lejeune:
 - Support for VLIW4 Slot assignement
 - Recomputation of ScheduleDAG to get more parallelism opportunities

Tom Stellard:
 - Fix assertion failure when trying to determine an instruction's slot
   based on its destination register's class
 - Fix some compiler warnings

Vincent Lejeune: [v2]
 - Remove recomputation of ScheduleDAG (will be provided in a later patch)
 - Improve estimation of an ALU clause size so that heuristic does not emit cf
 instructions at the wrong position.
 - Make schedule heuristic smarter using SUnit Depth
 - Take constant read limitations into account

Vincent Lejeune: [v3]
 - Fix some uninitialized values in ConstPair
 - Add asserts to ensure an ALU slot is always populated

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176498 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/R600/AMDGPUTargetMachine.cpp
lib/Target/R600/R600MachineScheduler.cpp [new file with mode: 0644]
lib/Target/R600/R600MachineScheduler.h [new file with mode: 0644]