http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56309



--- Comment #20 from Steven Bosscher <steven at gcc dot gnu.org> 2013-02-14 
22:17:23 UTC ---

(In reply to comment #12)

> --- by-val-O3.s.orig    2013-02-14 18:06:56.000000000 +0100

> +++ by-val-O3.s 2013-02-14 18:07:23.000000000 +0100

> @@ -357,9 +357,8 @@

>         shrq    $32, %rdi

>         cmpq    %r8, %rdx

>         cmovbe  %r11, %rdi

> -       addq    $1, %rax

> -       cmpq    %r8, %rdx

>         cmovbe  %rdx, %rcx

> +       addq    $1, %rax

>         cmpq    %rbp, %rax

>         movq    %rcx, -8(%rsi,%rax,8)

>         jne     .L50

> 

> unmodified: Took 14.31 seconds total.

> modified:   Took 13.04 seconds total.

> 

> So re. comment #9: it's not the problem but it'd be a small improvement.



FWIW this comes from not eliminating the condition expression in

the conditional moves that ifcvt creates:



  tmp_97 = tmp_93 > 4294967295 ? tmp_95 : tmp_93;

  carry_105 = tmp_93 > 4294967295 ? carry_94 : 0;



I'm surprised this form is allowed at all, I'd expect we only allow

is_gimple_reg() for a COND_EXPR_COND in a RHS context.



Anyway -- separate problem.

Reply via email to