IBM Support

IZ91395: COMPILATION HANGS WITH -O5

Fixes are available

May 2011 PTF for XL C for AIX, V11.1
May 2011 PTF for XL C/C++ for AIX, V11.1
August 2011 PTF for XL C/C++ for AIX, V11.1
November 2011 PTF for XL C/C++ for AIX, V11.1
January 2012 PTF for XL C for AIX, V11.1
January 2012 PTF for XL C/C++ for AIX, V11.1
April 2012 PTF for XL C for AIX, V11.1
April 2012 PTF for XL C/C++ for AIX, V11.1
July 2012 PTF for XL C/C++ for AIX, V11.1
October 2012 PTF for XL C for AIX, V11.1
October 2012 PTF for XL C/C++ for AIX, V11.1
February 2013 PTF for XL C for AIX, V11.1
February 2013 PTF for XL C/C++ for AIX, V11.1
XL C/C++ for AIX Fix Pack 14 (May 2013 PTF) for 11.1
XL C for AIX Fix Pack 14 (May 2013 PTF) for 11.1
XL C/C++ for AIX Fix Pack 15 (August 2013 PTF) for 11.1
XL C for AIX Fix Pack 15 (August 2013 PTF) for 11.1
XL C/C++ for AIX Fix Pack 16 (November 2013 PTF) for 11.1
XL C for AIX Fix Pack 17 (February 2014 PTF) for 11.1
XL C/C++ for AIX Fix Pack 17 (February 2014 PTF) for 11.1
XL C/C++ for AIX Fix Pack 18 (May 2014 PTF) for 11.1
XL C/C++ for AIX Fix Pack 19 (August 2014 PTF) for 11.1
XL C/C++ for AIX Fix Pack 20 (November 2014 PTF) for 11.1
XL C for AIX Fix Pack 21 (April 2015 PTF) for 11.1
XL C/C++ for AIX Fix Pack 21 (April 2015 PTF) for 11.1
XL C/C++ for AIX Fix Pack 22 (September 2015 PTF) for 11.1
XL C for AIX Fix Pack 23 (March 2016 PTF) for 11.1
XL C/C++ for AIX Fix Pack 23 (March 2016 PTF) for 11.1
XL C for AIX Fix Pack 24 (September 2016 PTF) for 11.1
XL C/C++ for AIX Fix Pack 24 (September 2016 PTF) for 11.1
August 2011 PTF for XL C for AIX, V11.1
November 2011 PTF for XL C for AIX, V11.1
July 2012 PTF for XL C for AIX, V11.1
XL C for AIX Fix Pack 16 (November 2013 PTF) for 11.1
XL C for AIX Fix Pack 18 (May 2014 PTF) for 11.1
XL C for AIX Fix Pack 19 (August 2014 PTF) for 11.1
XL C for AIX Fix Pack 20 (November 2014 PTF) for 11.1
XL C for AIX Fix Pack 22 (September 2015 PTF) for 11.1

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • Compilation with -O5 of the following test case hangs (takes >4
    hours) with the V11.1 compiler.
    The test case contains multiple levels of for loops.
    
    V10.1 compiler compile it fine within a few minutes.
    
    
    ===== TESTCASE:
    $cat test.c
    #include <stdio.h>
    #define Y 1
    #define B 2
    #define G 3
    #define R 4
    
    void match(int,int,int,int,int,int,int,int,int);
    
    struct card {
      int color[4];
      int head[4]; /* 1 or 0 */
    } spil[9] = {G,R,B,Y, 0,0,1,1,
                 B,R,B,Y, 0,0,1,1,
                 B,R,G,Y, 0,0,1,1,
                 R,Y,B,G, 0,0,1,1,
                 G,Y,G,R, 0,0,1,1,
                 Y,R,G,B, 0,0,1,1,
                 B,Y,G,R, 0,0,1,1,
                 G,R,B,Y, 0,0,1,1,
                 Y,G,B,R, 0,0,1,1};
    int allok[9];
    long long int tries = 0;
    
    main() {
      int i, c1,c2,c3,c4,c5,c6,c7,c8,c9;
    
      for (i=0;i<9;i++) allok[i] = 0;
    
      printf("Here we go...\n"); fflush(stdout);
    
      for (c1=0; c1<9; c1++) {
        allok[c1] = 1;
      for (c2=0; c2<9; c2++) {
        if (allok[c2]) continue; else allok[c2] = 1;
      for (c3=0; c3<9; c3++) {
        if (allok[c3]) continue; else allok[c3] = 1;
      for (c4=0; c4<9; c4++) {
        if (allok[c4]) continue; else allok[c4] = 1;
      for (c5=0; c5<9; c5++) {
        if (allok[c5]) continue; else allok[c5] = 1;
      for (c6=0; c6<9; c6++) {
        if (allok[c6]) continue; else allok[c6] = 1;
      for (c7=0; c7<9; c7++) {
        if (allok[c7]) continue; else allok[c7] = 1;
      for (c8=0; c8<9; c8++) {
        if (allok[c8]) continue; else allok[c8] = 1;
      for (c9=0; c9<9; c9++) {
        if (allok[c9]) continue; else allok[c9] = 1;
        match(c1,c2,c3,c4,c5,c6,c7,c8,c9);
        allok[c9] = 0;
      };
      allok[c8] = 0;
      };
      allok[c7] = 0;
      };
      allok[c6] = 0;
      };
      allok[c5] = 0;
      };
      allok[c4] = 0;
      };
      allok[c3] = 0;
      };
      allok[c2] = 0;
      };
      allok[c1] = 0;
      };
    }
    
    void match(int c1,int c2,int c3,int c4,int c5,int c6,int c7,int
    c8,int c9) {
      int d1,d2,d3,d4,d5,d6,d7,d8,d9;
      int s1,s3,s5,s7,s9;
      for (d1=0; d1<4; d1++) {
      for (d2=0; d2<4; d2++) {
      for (d3=0; d3<4; d3++) {
      for (d4=0; d4<4; d4++) {
      for (d5=0; d5<4; d5++) {
      for (d6=0; d6<4; d6++) {
      for (d7=0; d7<4; d7++) {
      for (d8=0; d8<4; d8++) {
      for (d9=0; d9<4; d9++) {
        s1=s3=s5=s7=s9=0;
        if (spil[c1].color[(1+d1)%4] == spil[c2].color[(3+d2)%4] &&
            spil[c1].head[(1+d1)%4] != spil[c2].head[(3+d2)%4]   &&
            spil[c1].color[(2+d1)%4] == spil[c4].color[(0+d4)%4] &&
            spil[c1].head[(2+d1)%4] != spil[c4].head[(0+d4)%4])  s1
    = 1;
    
        if (spil[c3].color[(3+d3)%4] == spil[c2].color[(1+d2)%4] &&
            spil[c3].head[(3+d3)%4] != spil[c2].head[(1+d2)%4]   &&
            spil[c3].color[(2+d3)%4] == spil[c6].color[(0+d6)%4] &&
            spil[c3].head[(2+d3)%4] != spil[c6].head[(0+d6)%4]) s3 =
    1;
    
        if (spil[c7].color[(0+d7)%4] == spil[c4].color[(2+d4)%4] &&
            spil[c7].head[(0+d7)%4] != spil[c4].head[(2+d4)%4] &&
            spil[c7].color[(1+d7)%4] == spil[c8].color[(3+d8)%4] &&
            spil[c7].head[(1+d7)%4] != spil[c8].head[(3+d8)%4]) s7 =
    1;
    
    
        if (spil[c9].color[(0+d9)%4] == spil[c6].color[(2+d6)%4] &&
            spil[c9].head[(0+d9)%4] != spil[c6].head[(2+d6)%4] &&
            spil[c9].color[(3+d9)%4] == spil[c8].color[(1+d8)%4] &&
            spil[c9].head[(3+d9)%4] != spil[c8].head[(1+d8)%4]) s9 =
    1;
    
        if (spil[c5].color[(0+d5)%4] == spil[c2].color[(2+d2)%4] &&
            spil[c5].head[(0+d5)%4] != spil[c2].head[(2+d2)%4] &&
            spil[c5].color[(1+d5)%4] == spil[c6].color[(3+d6)%4] &&
            spil[c5].head[(1+d5)%4] != spil[c6].head[(3+d6)%4] &&
            spil[c5].color[(2+d5)%4] == spil[c8].color[(0+d8)%4] &&
            spil[c5].head[(2+d5)%4] != spil[c8].head[(0+d8)%4] &&
            spil[c5].color[(3+d5)%4] == spil[c4].color[(1+d4)%4] &&
            spil[c5].head[(3+d5)%4] != spil[c4].head[(1+d4)%4]) s5 =
    1;
    
        tries++;
        if (s1*s3*s5*s7*s9) {
            printf("Kort (tries=%ld):\n", tries);
            printf("  %d %d %d\n  %d %d %d\n  %d %d %d\n",
              c1+1,c2+1,c3+1,c4+1,c5+1,c6+1,c7+1,c8+1,c9+1);
            printf("Retning:\n  %d %d %d\n  %d %d %d\n  %d %d %d\n",
              d1,d2,d3,d4,d5,d6,d7,d8,d9);
            fflush(stdout);
            exit(0);
        }
      }}}}}}}}};
    }
    

Local fix

  • Use -O3 or -O5 -qnohot
    

Problem summary

  • PROBLEM DESCRIPTION: Long compilation time for a small source
    file at -O4/-O5 that makes it appear to be hanging.
    
    USERS AFFECTED: This occurs only for very deep loops (6 or
    more) with numerous array references when polyhedral analysis
    is in effect (-O4/-O5).
    

Problem conclusion

  • Problem is fixed. Apply PTF for fix.
    

Temporary fix

Comments

APAR Information

  • APAR number

    IZ91395

  • Reported component name

    XL C/C++ AIX

  • Reported component ID

    5724X1300

  • Reported release

    B10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2010-12-24

  • Closed date

    2011-03-08

  • Last modified date

    2011-03-08

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

    LI76132

Fix information

  • Fixed component name

    XL C FOR AIX

  • Fixed component ID

    5724X1200

Applicable component levels

[{"Line of Business":{"code":"LOB57","label":"Power"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSGH2K","label":"XL C for AIX"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"11.1"}]

Document Information

Modified date:
05 October 2021