Ping**2
On Fri, May 17, 2013 at 9:01 PM, Steven Bosscher <stevenb....@gmail.com> wrote: > 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