On Sat, Feb 02, 2019 at 05:17:31PM -0600, Aaron Sawdey wrote:
> I needed to introduce a local label in this pattern because output_cbranch 
> put out a second instruction
> in the long branch case. This fixes the issue but there are a couple ways 
> this could be improved:
> 
> * output_cbranch() is passed the original insn and assumes from that that the 
> branch is a long
> branch. However this is incorrect because we are just branching to a local 
> label we know is only
> a few instructions away. If there is a way to fix this, an unnecessary branch 
> could be eliminated.

Maybe output_cbranch can be made aware of bdz{,t,f} and bdnz{,t,f}?

> * While the long branch case of this pattern needs to work, the real problem 
> is that part of
> the code emitted by the memcmp expansion is being treated as cold code and 
> moved to the end of
> the function. Ideally all of this code should stay together. I suspect I need 
> to make some kind
> of branch frequency notation for this to happen.

You can emit a REG_BR_PROB note on the branches that need one?

> Regstrap passes on ppc64le power7/8/9, ok for trunk and backport to 8?

I pre-approved it in the PR, the messages crossed I think :-)

But, hrm.  Labels ".L<number>" are already used for something else, with
something else for <number>.  Please use a unique name?  Okay with that
change.  Thanks!


Segher


> 2019-02-02  Aaron Sawdey  <acsaw...@linux.ibm.com>
> 
>       * config/rs6000/rs6000.md (<bd>tf_<mode>): generate a local label
>       for the long branch case.
> 
> Index: gcc/config/rs6000/rs6000.md
> ===================================================================
> --- gcc/config/rs6000/rs6000.md       (revision 268403)
> +++ gcc/config/rs6000/rs6000.md       (working copy)
> @@ -12639,8 +12639,8 @@
>    else
>      {
>        static char seq[96];
> -      char *bcs = output_cbranch (operands[3], "$+8", 1, insn);
> -      sprintf(seq, "<bd_neg> $+12\;%s;b %%l0", bcs);
> +      char *bcs = output_cbranch (operands[3], ".L%=", 1, insn);
> +      sprintf(seq, "<bd_neg> .L%%=\;%s\;b %%l0\;.L%%=:", bcs);
>        return seq;
>      }
>  }

Reply via email to