public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
* Dead code elimination PROBLEM
@ 2014-02-13  7:04 chronicle
  2014-02-13  7:16 ` Marc Glisse
  0 siblings, 1 reply; 4+ messages in thread
From: chronicle @ 2014-02-13  7:04 UTC (permalink / raw)
  To: gcc-help

Hi PPL i developed a plugin that  produces the following gimple

test ()
{
   int selected_fnc_var_.3;
   int random_Var.2;
   int D.2363;
   int _1;

   <bb 2>:
   random_Var.2_2 = rand ();
   selected_fnc_var_.3_3 = random_Var.2_2 %[fl] 5;
   if (selected_fnc_var_.3_3 == 4) goto <L7>;
   if (selected_fnc_var_.3_3 == 3) goto <L6>;
   if (selected_fnc_var_.3_3 == 2) goto <L5>;
   if (selected_fnc_var_.3_3 == 1) goto <L4>;
   if (selected_fnc_var_.3_3 == 0) goto <L3>;
<L7>:
   _1 = f.clone.4 ("t", "t");
   goto <L8>;
<L6>:
   _1 = f.clone.3 ("t", "t");
   goto <L8>;
<L5>:
   _1 = f.clone.2 ("t", "t");
   goto <L8>;
<L4>:
   _1 =f.clone.1 ("t", "t");
   goto <L8>;

<L8>:
   if (_1 != 0)
     goto <bb 3>;
   else
     goto <bb 4>;

   <bb 3>:
   __builtin_puts (&" f success "[0]);
   goto <bb 5>;

   <bb 4>:
   __builtin_puts (&" f failed "[0]);

   <bb 5>:
   return;

}

with this final code

00000000004005c6 <test>:
   4005c6:    55                       push   %rbp
   4005c7:    48 89 e5                 mov    %rsp,%rbp
   4005ca:    53                       push   %rbx
   4005cb:    48 83 ec 08              sub    $0x8,%rsp
   4005cf:    e8 6c fe ff ff           callq  400440 <rand@plt>
   4005d4:    89 d9                    mov    %ebx,%ecx
   4005d6:    c1 f9 1f                 sar    $0x1f,%ecx
   4005d9:    89 d8                    mov    %ebx,%eax
   4005db:    31 c8                    xor    %ecx,%eax
   4005dd:    ba 67 66 66 66           mov    $0x66666667,%edx
   4005e2:    f7 e2                    mul    %edx
   4005e4:    89 d0                    mov    %edx,%eax
   4005e6:    d1 e8                    shr    %eax
   4005e8:    31 c8                    xor    %ecx,%eax
   4005ea:    89 c2                    mov    %eax,%edx
   4005ec:    c1 e2 02                 shl    $0x2,%edx
   4005ef:    01 c2                    add    %eax,%edx
   4005f1:    89 d8                    mov    %ebx,%eax
   4005f3:    29 d0                    sub    %edx,%eax
   4005f5:    83 f8 04                 cmp    $0x4,%eax
   4005f8:    75 32                    jne    40062c <test+0x66>
   4005fa:    83 f8 03                 cmp    $0x3,%eax
   4005fd:    74 2d                    je     40062c <test+0x66>
   4005ff:    83 f8 02                 cmp    $0x2,%eax
   400602:    74 28                    je     40062c <test+0x66>
   400604:    83 f8 01                 cmp    $0x1,%eax
   400607:    74 23                    je     40062c <test+0x66>
   400609:    85 c0                    test   %eax,%eax
   40060b:    74 1f                    je     40062c <test+0x66>
   40060d:    be bc 09 40 00           mov    $0x4009bc,%esi
   400612:    bf c6 09 40 00           mov    $0x4009c6,%edi
   400617:    e8 7d 02 00 00           callq  400899 <f.clone.4>
   40061c:    85 c0                    test   %eax,%eax
   40061e:    75 0c                    jne    40062c <test+0x66>
   400620:    bf d0 09 40 00           mov    $0x4009d0,%edi
   400625:    e8 e6 fd ff ff           callq  400410 <puts@plt>
   40062a:    eb 0a                    jmp    400636 <test+0x70>
   40062c:    bf e8 09 40 00           mov    $0x4009e8,%edi
   400631:    e8 da fd ff ff           callq  400410 <puts@plt>
   400636:    48 83 c4 08              add    $0x8,%rsp
   40063a:    5b                       pop    %rbx
   40063b:    5d                       pop    %rbp
   40063c:    c3                       retq


from this gimple

test(){

int D.2363;
   int _1;

   <bb 2>:
   _1 = f("t", "t");
   if (_1 != 0)
     goto <bb 3>;
   else
     goto <bb 4>;

   <bb 3>:
   __builtin_puts (&" f "[0]);
   goto <bb 5>;

   <bb 4>:
   __builtin_puts (&" f "[0]);

   <bb 5>:
   return;
}

as you can see in the dis output code, its only make call to f.clone.4 
(  callq  400899 <f.clone.4> ), i suppose is the dead code elimination 
pass is the responsable of this action, i tryed to disable it using -O0 
compilation option but without success. my question is how can i make 
the compiler produce the final code without deleting those dead codes 
portion ( do i need to make any kind of PHI nodes in the labels to 
achive that, if so how could i do that ? )

thanks in advance

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Dead code elimination PROBLEM
  2014-02-13  7:04 Dead code elimination PROBLEM chronicle
@ 2014-02-13  7:16 ` Marc Glisse
  2014-02-13  7:29   ` chronicle
  0 siblings, 1 reply; 4+ messages in thread
From: Marc Glisse @ 2014-02-13  7:16 UTC (permalink / raw)
  To: chronicle; +Cc: gcc-help

(please don't multi-post to gcc and gcc-help)

On Thu, 13 Feb 2014, chronicle wrote:

> ( do i need to make any kind of PHI nodes

Yes you do need PHI nodes. Why don't you compile a piece of C code that 
does exactly the same and see what the compiler turns it into? In 
particular, you will notice that there are never multiple _1=... 
statements.

-- 
Marc Glisse

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Dead code elimination PROBLEM
  2014-02-13  7:16 ` Marc Glisse
@ 2014-02-13  7:29   ` chronicle
  2014-02-13  7:39     ` Marc Glisse
  0 siblings, 1 reply; 4+ messages in thread
From: chronicle @ 2014-02-13  7:29 UTC (permalink / raw)
  To: gcc-help

Thanks Marc for the quick replay , and sorry for the reposting it will 
not happen again.

How could i make the phi nodes can you give me a reference code ?
On 02/13/2014 02:16 AM, Marc Glisse wrote:
> (please don't multi-post to gcc and gcc-help)
>
> On Thu, 13 Feb 2014, chronicle wrote:
>
>> ( do i need to make any kind of PHI nodes
>
> Yes you do need PHI nodes. Why don't you compile a piece of C code 
> that does exactly the same and see what the compiler turns it into? In 
> particular, you will notice that there are never multiple _1=... 
> statements.
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Dead code elimination PROBLEM
  2014-02-13  7:29   ` chronicle
@ 2014-02-13  7:39     ` Marc Glisse
  0 siblings, 0 replies; 4+ messages in thread
From: Marc Glisse @ 2014-02-13  7:39 UTC (permalink / raw)
  To: chronicle; +Cc: gcc-help

On Thu, 13 Feb 2014, chronicle wrote:

> How could i make the phi nodes can you give me a reference code ?

grep for create_phi_node in the gcc sources. Looking at existing passes is 
the only way to learn how this works.

-- 
Marc Glisse

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-02-13  7:39 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-13  7:04 Dead code elimination PROBLEM chronicle
2014-02-13  7:16 ` Marc Glisse
2014-02-13  7:29   ` chronicle
2014-02-13  7:39     ` Marc Glisse

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).