This is the mail archive of the gcc@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]

hash_rtx and volatile subexpressions


Hello,

I would like to use some sort of hashing to speed up searching for an insn in an availability set in the selective scheduler. It seems natural using hash_rtx for this purpose. However, hash_rtx will not hash any volatile subexpressions, returning 0 in this case. This is fine by me, but together with the recursion optimization it has near line 2345...

  for (; i >= 0; i--)
    {
      switch (fmt[i])

...

          /* If we are about to do the last recursive call
             needed at this level, change it into iteration.
             This function  is called enough to be worth it.  */
          if (i == 0)
            {
              x = XEXP (x, i);
              goto repeat;
            }

...one does not get a hash e.g. for any conditional jump like

(set (pc)
    (if_then_else (ne (reg:BI 262 p6 [360])
            (const_int 0 [0x0]))
        (label_ref:DI 191)
        (pc)))

...because the pc subexpression is always the first one, and the recursive call for it gets optimized by the above code, which results in a zero hash for the whole pattern.

Is this intentional, or do we want to have 'return hash;' instead of 'return 0;' in all places when *do_not_record_p is set to 1? Is there a better hash_rtx somewhere, which I don't know about?

Andrey


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