Missed loop unwind
    bearophile 
    bearophileHUGS at lycos.com
       
    Tue Mar 25 16:25:49 PDT 2014
    
    
  
If I compile this code with the latest ldc2 with -O -release 
-inline -noboundscheck, the inner loop is unrolled (while gdc 
unrolls it):
void main() {
     import core.stdc.stdio;
     enum uint n = 1 << 25;
     static immutable uint[5] factors = [101, 103, 107, 109, 113];
     uint c = 0;
     for (uint i = 1; i < n; i++)
         for (uint j = 0; j < 5; j++)
             if (i % factors[j] == 0) {
                 c++;
                 break;
             }
     printf("%u\n", c);
}
A little cheap unrolling could be present in -O.
Bye,
bearophile
    
    
More information about the digitalmars-d-ldc
mailing list