<html>
    <head>
      <base href="https://llvm.org/bugs/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW " title="NEW --- - more optimize oppotunity" href="https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_bugs_show-5Fbug.cgi-3Fid-3D23673&d=AwMBaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=pF93YEPyB-J_PERP4DUZOJDzFVX5ZQ57vQk33wu0vio&m=D8w7Wfe7Bz0MUTZv73hzQ65WfsBDnOcrmxyn_wB7-W8&s=Sw4GBsSgBzfxr9oP2Np7PIu-iTKV20zgaDPeohfBXXQ&e=">23673</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>more optimize oppotunity
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>-New Bugs
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>ishiura-compiler@ml.kwansei.ac.jp
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvmbugs@cs.uiuc.edu
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>We compiled a program (A.c) by LLVM/Clang-3.7.0 and GCC-6.0.0 with -O3 option.
GCC performed better optimization on this code, where the code for the
expression for t (which always evaluates to 1) is eliminated.

(A.c)
int x = -1;

int main (void)
{
    int t = ((((0!=(1*(x+1)))<<0U)/-2344)|1);

    if (t == 1) ;
    else __builtin_abort();

    return 0;
}


+------------------------------------------------------------+--------------------------------------------------------+
|                 gcc.s (gcc A.c -O3 -S)                     |             
clang.s (clang A.c -O3 -S)                |
+------------------------------------------------------------+--------------------------------------------------------+
|main:                                                       |                 
                                      *
|.LFB11:                                                     |main:            
                      # @main         *
|        .cfi_startproc                                      |       
.cfi_startproc                                  |
|                                                            |# BB#0:          
                      # %entry        *
|                                                            |        pushq  
%rax                                    *
|                                                            |.Ltmp0:          
                                      *
|                                                            |       
.cfi_def_cfa_offset 16                          *
|                                                            |        cmpl   
$-1, x247(%rip)                         *
|                                                            |        setne  
%al                                     *
|                                                            |        movzbl 
%al, %eax                               *
|                                                            |        negl   
%eax                                    *
|                                                            |        movl   
%eax, %ecx                              *
|                                                            |        shrl   
$31, %ecx                               *
|                                                            |        sarl   
$11, %eax                               *
|                                                            |        addl   
%ecx, %eax                              *
|                                                            |        orl    
$1, %eax                                *
|                                                            |        cmpl   
$1, %eax                                *
|                                                            |        jne    
.LBB0_2                                 *
|                                                            |# BB#1:          
                      # %if.end       *
|        xorl    %eax, %eax                                  |        xorl   
%eax, %eax                              |
|        ret                                                 |        popq   
%rdx                                    *
|                                                            |        retq     
                                      *
|                                                            |.LBB0_2:         
                      # %if.else      *
|                                                            |        callq  
abort                                   *
|                                                            |.Ltmp1:          
                                      *
|                                                            |        .size  
main, .Ltmp1-main                       *
|        .cfi_endproc                                        |       
.cfi_endproc                                    |
|.LFE11:                                                     |                 
                                      *
|        .size   main, .-main                                |        .type  
x247,@object            # @x247         *
|        .section        .text.unlikely                      |                 
                                      |
|.LCOLDE0:                                                   |                 
                                      |
|        .section        .text.startup                       |                 
                                      |
|.LHOTE0:                                                    |                 
                                      |
|        .globl  x247                                        |                 
                                      |
|        .data                                               |        .data    
                                      |
|        .align 4                                            |        .globl 
x247                                    *
|        .type   x247, @object                               |        .align  4
                                      *
|        .size   x247, 4                                     |                 
                                      |
|x247:                                                       |x247:            
                                      |
|        .long   -1                                          |        .long  
4294967295              # 0xffffffff    *
|                                                            |        .size  
x247, 4                                 *
+------------------------------------------------------------+--------------------------------------------------------+


clang version 3.7.0 (trunk 237801)
Target: x86_64-unknown-linux-gnu
Thread model: posix

gcc (GCC) 6.0.0 20150416 (experimental)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>