This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: New automaton_option "collapse-ndfa"


On 07/18/11 17:09, Vladimir Makarov wrote:
> On 07/11/2011 05:09 PM, Bernd Schmidt wrote:
>> I came up with the notion of adding a new transition to the NDFA, one
>> which collapses a nondeterministic state (which is composed of multiple
>> possible deterministic ones) to just one of its component states. This
>> can be done at the end of each cycle, and gives a state that can be
>> processed with cpu_unit_reservation_p to identify the units chosen by
>> the scheduler. The following patch implements this.

> Bernd, sorry for the delay.  I was on vacation last week.

No problem. A week is rapid :)

> IA64 actually uses the two automata,  one automaton can be considered
> NDFA and is used for scheduling, another one can be considered as DFA
> and used for insn bundling.
> 
> I should acknowledge your solution is not trivial and more elegant and
> permitting to use smaller description.
> 
> It would be interesting to rewrite IA64 in your way.  Although I think
> it will be never done because it is nontrivial work to do and probably
> better not to fix something when it already works.

I'd been wondering about whether it could be usable for things like
ia64, but I don't actually understand the ia64 scheduling description
very well... On ia64 there's the additional complication that
end-of-cycle and end-of-bundle don't always coincide.
Probably no one cares enough about this target anyway to attempt such
changes.

I'll probably also need another new option, "no_comb_vectors", as I have
a slight problem with this loop:

 3884568992: 7379:  for (comb_vect_index = 1, i = vect_length; i <
comb_vect_els_num;
3884508354: 7380:       comb_vect_index++, i++)
        -: 7381:    {
3884508592: 7382:      comb_vect_mask = (comb_vect_mask << 1) | 1;
7769017184: 7383:      comb_vect_mask ^= (VEC_index (vect_el_t,
tab->comb_vect, i)
        -: 7384:                         == undefined_vect_el_value);
3884508592: 7385:      if ((vect_mask & comb_vect_mask) == 0)
        -: 7386:        goto found;
        -: 7387:    }

(Those are the numbers _before_ I make the changes that explode the
compile time). Any objection in principle to such an option, or any
ideas how to optimize this code? Having a description of a "comb vector"
in genautomata.c would be a good idea; I think I've figured out what
it's supposed to do, but it's not immediately obvious.


Bernd


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]