https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86847

            Bug ID: 86847
           Summary: [9 Regression] Switch code size growth
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ka6ash at gmail dot com
                CC: marxin at gcc dot gnu.org
  Target Milestone: ---

I noticed that the size of code has grown in switch statements between 8.1.0
and trunk.  For the code shown below, gcc-trunk generates 2 jumps for each
switch statement (18 in total) when gcc-8.1.0 only 11. The difference appears
at switchlower1 pass. As I understand, gcc-8 prunes redundant tests when gcc-9
doesn't and instead relies on further tree optimizations
(https://gcc.gnu.org/ml/gcc-patches/2017-09/msg00891.html). But the
optimizations cannot manage with it as well as pruning in gcc-8 can and size
grows. Enabling -O2 does not change the situation significantly.

int cipher_to_alg(int cipher)        
{                                    
        switch (cipher)              
        {                            
                case 8:   return 2;  
                case 16:  return 3;  
                case 32:  return 4;  
                case 64:  return 6;  
                case 256: return 9;  
                case 512: return 10; 
                case 2048: return 11;
                case 4096: return 12;
                case 8192: return 13;
        }                            
        return 0;                    
}                                    

arm-none-eabi-gcc-8.1.0 cipher.c -Os -S

cipher_to_alg:                                   
        cmp     r0, #256                             
        beq     .L6                                  
        bgt     .L3                                  
        cmp     r0, #16                              
        beq     .L7                                  
        bgt     .L4                                  
        cmp     r0, #8                               
        moveq   r0, #2                               
.L15:                                                
        movne   r0, #0                               
        bx      lr                                   
.L4:                                                 
        cmp     r0, #32                              
        beq     .L9                                  
        cmp     r0, #64                              
        moveq   r0, #6                               
        b       .L15                                 
.L3:                                                 
        cmp     r0, #2048                            
        beq     .L11                                 
        bgt     .L5                                  
        cmp     r0, #512                             
        moveq   r0, #10                              
        b       .L15                                 
.L5:                                                 
        cmp     r0, #4096                            
        beq     .L13                                 
        cmp     r0, #8192                            
        moveq   r0, #13                              
        b       .L15                                 
.L6:                                                 
        mov     r0, #9                               
        bx      lr                                   
.L7:                                                 
        mov     r0, #3                               
        bx      lr                                   
.L9:                                                 
        mov     r0, #4                               
        bx      lr                                   
.L11:                                                
        mov     r0, #11                              
        bx      lr                                   
.L13:                                                
        mov     r0, #12                              
        bx      lr                                   

arm-none-eabi-gcc-9.0.0 cipher.c -Os -S

cipher_to_alg:                                  
        cmp     r0, #256                            
        bgt     .L2                                 
        beq     .L8                                 
        cmp     r0, #16                             
        bgt     .L4                                 
        beq     .L9                                 
        cmp     r0, #8                              
        bgt     .L20                                
        bne     .L20                                
        mov     r0, #2                              
        bx      lr                                  
.L4:                                                
        cmp     r0, #32                             
        bgt     .L5                                 
        bne     .L20                                
        mov     r0, #4                              
        bx      lr                                  
.L5:                                                
        cmp     r0, #64                             
        bgt     .L20                                
        bne     .L20                                
        mov     r0, #6                              
        bx      lr                                  
.L2:                                                
        cmp     r0, #2048                           
        bgt     .L6                                 
        beq     .L15                                
        cmp     r0, #512                            
        bgt     .L20                                
        bne     .L20                                
        mov     r0, #10                             
        bx      lr                                  
.L6:                                                
        cmp     r0, #4096                           
        bgt     .L7                                 
        bne     .L20                                
        mov     r0, #12                             
        bx      lr                                  
.L7:                                                
        cmp     r0, #8192                           
        bgt     .L20                                
        bne     .L20                                
        mov     r0, #13                             
        bx      lr                                  
.L8:                                                
        mov     r0, #9                              
        bx      lr                                  
.L9:                                                
        mov     r0, #3                              
        bx      lr                                  
.L15:                                               
        mov     r0, #11                             
        bx      lr                                  
.L20:                                               
        mov     r0, #0                              
        bx      lr

Reply via email to