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: [PATCH] Add code-hoisting to GIMPLE


On 07/08/2016 01:30 AM, Richard Biener wrote:
On Mon, 4 Jul 2016, Steven Bosscher wrote:

On Mon, Jul 4, 2016 at 1:26 PM, Richard Biener wrote:

The following patch is Stevens code-hoisting based on PRE forward-ported
and fixed for bootstrap plus the case of hoisting code across loops
which we generally do not want (expressions in the loop exit target block
are antic-in throughout the whole loop unless they are killed and thus
get inserted into the exit block and then PREd before the loop).

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

I'm going to try making the bitmap_set ops in do_hoist_insert a bit
faster - Steven, do you remember any issues with the approach from the
time you worked on it?

Hi Richi,

It's been almost 8 years since I worked on this, so I really don't
recall much about this at all. Sorry :-)

Fair enough ;)  Apart from the loop case I noticed that code-hoisting
will cause

  if (x1_6 > 6)
    goto <bb 3>;
  else
    goto <bb 4>;

  <bb 3>:
  i_7 = i_2(D) + 2;

  <bb 4>:
  # i_1 = PHI <i_2(D)(2), i_7(3)>
  i_8 = i_1 + 2;

to be re-written to

  _18 = i_2(D) + 2;
  if (x1_6 > 6)
    goto <bb 3>;
  else
    goto <bb 4>;

  <bb 3>:
  _19 = _18 + 2;

  <bb 4>:
  # i_8 = PHI <_18(2), _19(3)>

which is because critical edge splitting splits 2->4 and thus makes
i_2(D)+2 antic-in in the else block (IIRC it wouldn't be antic-in
in bb 4 but antic-out in bb 2).  Not sure if it is worth trying to
devise a "fix" for this, it's not really a pessimization.

But it generally shows that hoisting is quite aggressive.
I don't see it as a pessimization either, though the gratutious code motion can make it awful hard to evaluate the real effects (I saw this when evaluating Click's GCM/GVN algorithm for GCC.

I thought we had a BZ where we wanted to do this kind of hoisting up through PHIs. Oh, 64700, but it's in the other direction -- sink a common expression through a PHI.

Jeff


Richard.



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