[prev in list] [next in list] [prev in thread] [next in thread]
List: gcc-patches
Subject: Re: [PATCH/RFC/PR28071]: New scheduler dependencies lists.
From: Maxim Kuvyrkov <mkuvyrkov () ispras ! ru>
Date: 2007-01-31 14:46:55
Message-ID: 45C0ABDF.8050500 () ispras ! ru
[Download RAW message or body]
Ayal Zaks wrote:
> In some cases (indicated below, there could be others) you may want to
> verify that a given list is backward, or is forward. One simple (necessary
> and insufficient) property to check is that all CON (PRO) fields are the
> same, say by deps_list_consistent_back_p(list) and
> deps_list_consistent_forw_p(list). Then deps_list_consistent_p could also
> check if deps_list_consistent_back_p || deps_list_consistent_forw_p.
>
>> +/* Add a dependency described by DEP to the list L.
>> + L should be either INSN_BACK_DEPS or INSN_RESOLVED_BACK_DEPS. */
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> +void
>> +add_back_dep_to_deps_list (deps_list_t l, dep_t dep_from)
>> +{
>> + dep_node_t n = (dep_node_t) obstack_alloc (dn_obstack,
>> + sizeof (*n));
>> + dep_t dep_to = DEP_NODE_DEP (n);
>> + dep_link_t back = DEP_NODE_BACK (n);
>> + dep_link_t forw = DEP_NODE_FORW (n);
>> +
> gcc_assert (deps_list_consistent_back_p (l)); ??
I had this kind of check here, but it showed terrible compile time
performance, so I removed it. *_consistent_* function were introduced
to find few bugs during the development and now remain for the purpose
of someone someday using them from debugger.
...
>> +/* Make a copy of FROM in TO with substituting consumer with CON.
>> + TO and FROM should be RESOLVED_BACK_DEPS lists. */
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> +void
>> +copy_deps_list_change_con (deps_list_t to, deps_list_t from, rtx con)
>> +{
>> + dep_link_t l;
>> +
>> + gcc_assert (deps_list_empty_p (to));
> gcc_assert (deps_list_consistent_back_p (from)); ??
>
Same.
...
> You may find it useful to also provide FOR_EACH_PRO(PRO, LINK, CON) and
> FOR_EACH_CON(PRO, LINK, CON) macros, e.g. something like
>
> +#define FOR_EACH_PRO(PRO, LINK, CON) \
> + for (LINK = DEPS_LIST_FIRST (INSN_BACK_DEPS (CON)), \
> + PRO = (LINK? DEP_LINK_PRO (LINK) : NULL); \
> + LINK != NULL; \
> + LINK = DEP_LINK_NEXT (LINK), \
> + PRO = (LINK? DEP_LINK_PRO (LINK) : NULL))
>
> or so, to make sure people take PRO when traversing (RESOLVED?)_BACK_DEPS,
> and CON when traversing FORW_DEPS.
Personally, I don't like complicated macros especially those which have
a comma in them. And using an iterator I see as an overkill in this case.
>
>
> And a couple of typos:
>
>> /* Remove both backward and forward dependencies between INSN and ELEM.
> */
> Update comment to refer to L instead.
Thanks.
>
>> void
>> -delete_back_forw_dep (rtx insn, rtx elem)
>> +delete_back_forw_dep (dep_link_t l)
>> {
>> + dep_node_t n = DEP_LINK_NODE (l);
>> +
...
>> + /* Pointer to the next field of the previous link in the list.
>> + For the first link this points to the deps_list->first and for the
> last
>> + one it is NULL.
> ^^^^^^^^^^^^^^^^^^^^^^^?
> Only need to comment regarding first link; for the last link (if it is not
> also first) also points to next field of the previous link in the list. You
> may want to comment that the next field of the last link is NULL, as
> probably intended.
Thanks.
>
> ...
>
>> +typedef struct _dep_link *dep_link_t;
>> +
>> +#define DEP_LINK_NODE(N) ((N)->node)
>> +#define DEP_LINK_NEXT(N) ((N)->next)
>> +#define DEP_LINK_PREV_NEXTP(N) ((N)->prev_nextp)
>> +
>> +/* Macros to work dep_link. For most usecases only part of the
> dependency
>> + information is need. These macros conviniently provide that piece of
> ^^^^^^^^^^^^
Thanks.
>
> In the diagram I sent you, forgot to indicate that forw_deps and back_deps
> with their "first" field are of type deps_list.
I think it is obvious and it is better not to add such small details to
that stunning diagram you've made.
Thanks,
Maxim
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic