Ping
On Sun, May 12, 2013 at 5:45 PM, Steven Bosscher wrote: > Hello, > > While working on a sched-deps based delay slot scheduler, I've come to > the conclusion that the dependencies themselves must indicate whether > the dependent ref is delayed. So I started hacking sched-deps and ran > into trouble... It turns out there is a problem introduced along with > DEP_POSTPONED last year, but the real problem is the complicated ds_t > representation and the unclear documentation. The first *6* bits on a > ds_t were reserved for the dependence type, and two more bits were > reserved for HARD_DEP and DEP_CANCELLED: > > -/* First '6' stands for 4 dep type bits and the HARD_DEP and DEP_CANCELLED > - bits. > - Second '4' stands for BEGIN_{DATA, CONTROL}, BE_IN_{DATA, CONTROL} > - dep weakness. */ > -#define BITS_PER_DEP_WEAK ((BITS_PER_DEP_STATUS - 6) / 4) > > But DEP_POSTPONED adds another bit: > > /* Instruction has non-speculative dependence. This bit represents the > property of an instruction - not the one of a dependence. > Therefore, it can appear only in the TODO_SPEC field of an instruction. */ > #define HARD_DEP (DEP_CONTROL << 1) > > /* Set in the TODO_SPEC field of an instruction for which new_ready > has decided not to schedule it speculatively. */ > #define DEP_POSTPONED (HARD_DEP << 1) > > /* Set if a dependency is cancelled via speculation. */ > #define DEP_CANCELLED (DEP_POSTPONED << 1) > > I wanted to add another flag, DEP_DELAYED, and optimistically just > added another bit, the compiler started warning, etc. > > > So far we seem to've gotten away with this because the sign bit on a > ds_t was unused: > > /* We exclude sign bit. */ > #define BITS_PER_DEP_STATUS (HOST_BITS_PER_INT - 1) > > > The attached patch extends the ds_t documentation to clarify in a > comment how all the bits are used. I've made ds_t and dw_t unsigned > int, because ds_t is just a collection of bits, and dw_t is unsigned. > The target hooks I had to update are all only used by ia64. > > I opportunistically reserved the one left-over bit for my own purposes ;-) > > Bootstrapped&tested on ia64-unknown-linux-gnu and on > powerpc64-unknown-linux-gnu unix-{,-m32). > OK for trunk? > > Ciao! > Steven