[LLVMbugs] [Bug 23672] New: more optimize oppotunity

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed May 27 00:38:20 PDT 2015


https://llvm.org/bugs/show_bug.cgi?id=23672

            Bug ID: 23672
           Summary: more optimize oppotunity
           Product: clang
           Version: unspecified
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: -New Bugs
          Assignee: unassignedclangbugs at nondot.org
          Reporter: ishiura-compiler at ml.kwansei.ac.jp
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

We compiled a program (A.c) by LLVM/Clang-3.7.0 and GCC-6.0.0 with -O3 option.
Although Clang/LLVM performed better optimization on this code (idvil is
eliminated), 
the three instructions (incl, cmpl, jae) for BB#1 look totally useless and we
wonder why they could not be deleted.

(A.c)
int x = 1;

int main (void)
{
    int t = 1/x;

    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                                  |
|        movl  $1, %eax                                      |# BB#0:          
                      # %entry        *
|        cltd                                                |                 
                                      |
|        idivl   x1638(%rip)                                 |                 
                                      |
|        cmpl    $1, %eax                                    |                 
                                      |
|        jne     .L5                                         |                 
                                      |
|        xorl    %eax, %eax                                  |                 
                                      |
|        ret                                                 |                 
                                      |
|.L5:                                                        |                 
                                      |
|        pushq   %rax                                        |        pushq  
%rax                                    |
|                                                            |.Ltmp0:          
                                      *
|        .cfi_def_cfa_offset 16                              |       
.cfi_def_cfa_offset 16                          |
|        call    abort                                       |        movl   
x1638(%rip), %eax                       *
|                                                            |        cmpl   
$1, %eax                                *
|                                                            |        jne    
.LBB0_3                                 *
|                                                            |# BB#1:          
                      # %entry        *
|                                                            |        incl   
%eax                    # <--HERE       *
|                                                            |        cmpl   
$3, %eax                # <--HERE       *
|                                                            |        jae    
.LBB0_3                 # <--HERE       *
|                                                            |# BB#2:          
                      # %if.end       *
|                                                            |        xorl   
%eax, %eax                              *
|                                                            |        popq   
%rdx                                    *
|                                                            |        retq     
                                      *
|                                                            |.LBB0_3:         
                      # %if.else      *
|                                                            |        callq  
abort                                   *
|                                                            |.Ltmp1:          
                                      *
|                                                            |        .size  
main, .Ltmp1-main                       *
|        .cfi_endproc                                        |       
.cfi_endproc                                    |
|.LFE11:                                                     |                 
                                      *
|        .size   main, .-main                                |        .type  
x1638, at object           # @x1638        *
|        .section        .text.unlikely                      |                 
                                      |
|.LCOLDE0:                                                   |                 
                                      |
|        .section        .text.startup                       |                 
                                      |
|.LHOTE0:                                                    |                 
                                      |
|        .globl  x1638                                       |                 
                                      |
|        .data                                               |        .data    
                                      |
|        .align 4                                            |        .globl 
x1638                                   *
|        .type   x1638, @object                              |        .align  4
                                      *
|        .size   x1638, 4                                    |                 
                                      |
|x1638:                                                      |x1638:           
                                      |
|        .long   1                                           |        .long   1
                      # 0x1           *
|                                                            |        .size  
x1638, 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.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20150527/efed83f8/attachment.html>


More information about the llvm-bugs mailing list