From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andreas Schwab To: gcc-gnats@gcc.gnu.org Subject: optimization/3452: Endless recursion in canon_rtx Date: Thu, 28 Jun 2001 02:06:00 -0000 Message-id: <200106280901.f5S911w05395@sykes.suse.de> X-SW-Source: 2001-06/msg01142.html List-Id: >Number: 3452 >Category: optimization >Synopsis: Endless recursion in canon_rtx >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Thu Jun 28 02:06:02 PDT 2001 >Closed-Date: >Last-Modified: >Originator: >Release: 3.0.1 20010627 (prerelease) >Organization: >Environment: System: Linux sykes 2.4.4-SMP #1 SMP Fri Jun 8 09:14:46 GMT 2001 ia64 unknown Architecture: ia64 host: ia64-suse-linux-gnu build: ia64-suse-linux-gnu target: ia64-suse-linux-gnu configured with: /cvs/branch/gcc/configure --host=ia64-suse-linux --enable-threads --enable-shared --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --with-gxx-include-dir=/usr/include/g++ --enable-nls : (reconfigured) /cvs/branch/gcc/configure --host=ia64-suse-linux --enable-threads --enable-shared --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --with-gxx-include-dir=/usr/include/g++ --enable-nls : (reconfigured) : (reconfigured) >Description: canon_rtx is stuck in an endless recursion. It is called with (plus:DI (reg/f:DI 364) (const_int 8 [0x8])), and reg_known_value[364] contains the same rtx. >How-To-Repeat: $ cat LRGB.i typedef long unsigned int size_t; extern void *memcpy (void *__restrict __dest, __const void *__restrict __src, size_t __n) ; typedef char *XPointer; typedef unsigned long XcmsColorFormat; typedef double XcmsFloat; typedef struct { unsigned short red; unsigned short green; unsigned short blue; } XcmsRGB; typedef struct { XcmsFloat red; XcmsFloat green; XcmsFloat blue; } XcmsRGBi; typedef struct { XcmsFloat X; XcmsFloat Y; XcmsFloat Z; } XcmsCIEXYZ; typedef struct { XcmsFloat u_prime; XcmsFloat v_prime; XcmsFloat Y; } XcmsCIEuvY; typedef struct { XcmsFloat x; XcmsFloat y; XcmsFloat Y; } XcmsCIExyY; typedef struct { XcmsFloat L_star; XcmsFloat a_star; XcmsFloat b_star; } XcmsCIELab; typedef struct { XcmsFloat L_star; XcmsFloat u_star; XcmsFloat v_star; } XcmsCIELuv; typedef struct { XcmsFloat H; XcmsFloat V; XcmsFloat C; } XcmsTekHVC; typedef struct { XcmsFloat pad0; XcmsFloat pad1; XcmsFloat pad2; XcmsFloat pad3; } XcmsPad; typedef struct { union { XcmsRGB RGB; XcmsRGBi RGBi; XcmsCIEXYZ CIEXYZ; XcmsCIEuvY CIEuvY; XcmsCIExyY CIExyY; XcmsCIELab CIELab; XcmsCIELuv CIELuv; XcmsTekHVC TekHVC; XcmsPad Pad; } spec; unsigned long pixel; XcmsColorFormat format; } XcmsColor; typedef struct _XcmsCCC *XcmsCCC; typedef int (*XcmsCompressionProc)( XcmsCCC , XcmsColor* , unsigned int , unsigned int , int* ); typedef int (*XcmsWhiteAdjustProc)( XcmsCCC , XcmsColor* , XcmsColor* , XcmsColorFormat , XcmsColor* , unsigned int , int* ); typedef struct _XcmsPerScrnInfo { XcmsColor screenWhitePt; XPointer functionSet; XPointer screenData; unsigned char state; char pad[3]; } XcmsPerScrnInfo; typedef struct _XcmsCCC { void *dpy; int screenNumber; void *visual; XcmsColor clientWhitePt; XcmsCompressionProc gamutCompProc; XPointer gamutCompClientData; XcmsWhiteAdjustProc whitePtAdjProc; XPointer whitePtAdjClientData; XcmsPerScrnInfo *pPerScrnInfo; } XcmsCCCRec; typedef struct _IntensityRec { unsigned short value; XcmsFloat intensity; } IntensityRec; typedef struct _IntensityTbl { IntensityRec *pBase; unsigned int nEntries; } IntensityTbl; typedef struct { XcmsFloat XYZtoRGBmatrix[3][3]; XcmsFloat RGBtoXYZmatrix[3][3]; IntensityTbl *pRedTbl; IntensityTbl *pGreenTbl; IntensityTbl *pBlueTbl; } LINEAR_RGB_SCCData; void _XcmsMatVec(pMat, pIn, pOut) XcmsFloat *pMat, *pIn, *pOut; { int i, j; for (i = 0; i < 3; i++) { pOut[i] = 0.0; for (j = 0; j < 3; j++) pOut[i] += *(pMat+(i*3)+j) * pIn[j]; } } int XcmsCIEXYZToRGBi(ccc, pXcmsColors_in_out, nColors, pCompressed) XcmsCCC ccc; XcmsColor *pXcmsColors_in_out; unsigned int nColors; int *pCompressed; { LINEAR_RGB_SCCData *pScreenData; XcmsFloat tmp[3]; int hasCompressed = 0; unsigned int i; XcmsColor *pColor = pXcmsColors_in_out; if (ccc == ((void *)0)) { return(0); } pScreenData = (LINEAR_RGB_SCCData *)ccc->pPerScrnInfo->screenData; for (i = 0; i < nColors; i++) { if (pColor->format != (XcmsColorFormat)0x00000001) { return(0); } _XcmsMatVec((XcmsFloat *) pScreenData->XYZtoRGBmatrix, (XcmsFloat *) &pColor->spec, tmp); if ((((tmp[0]) > ((((tmp[1])) > ((tmp[2])) ? ((tmp[2])) : ((tmp[1])))) ? ((((tmp[1])) > ((tmp[2])) ? ((tmp[2])) : ((tmp[1])))) : (tmp[0])) < -0.001) || (((tmp[0]) > ((((tmp[1])) > ((tmp[2])) ? ((tmp[1])) : ((tmp[2])))) ? (tmp[0]) : ((((tmp[1])) > ((tmp[2])) ? ((tmp[1])) : ((tmp[2]))))) > (1.0 + 0.001))) { if (ccc->gamutCompProc == ((void *)0)) { memcpy((char *)&pColor->spec, (char *)tmp, sizeof(tmp)); pColor->format = (XcmsColorFormat)0x80000001; return(0); } else if ((*ccc->gamutCompProc)(ccc, pXcmsColors_in_out, nColors, i, pCompressed) == 0) { return(0); } if (pColor->format != (XcmsColorFormat)0x00000001) { return(0); } _XcmsMatVec((XcmsFloat *) pScreenData->XYZtoRGBmatrix, (XcmsFloat *) &pColor->spec, tmp); if ((((tmp[0]) > ((((tmp[1])) > ((tmp[2])) ? ((tmp[2])) : ((tmp[1])))) ? ((((tmp[1])) > ((tmp[2])) ? ((tmp[2])) : ((tmp[1])))) : (tmp[0])) < -0.001) || (((tmp[0]) > ((((tmp[1])) > ((tmp[2])) ? ((tmp[1])) : ((tmp[2])))) ? (tmp[0]) : ((((tmp[1])) > ((tmp[2])) ? ((tmp[1])) : ((tmp[2]))))) > (1.0 + 0.001))) { return(0); } hasCompressed++; } memcpy((char *)&pColor->spec, (char *)tmp, sizeof(tmp)); if (pColor->spec.RGBi.red < 0.0) { pColor->spec.RGBi.red = 0.0; } else if (pColor->spec.RGBi.red > 1.0) { pColor->spec.RGBi.red = 1.0; } if (pColor->spec.RGBi.green < 0.0) { pColor->spec.RGBi.green = 0.0; } else if (pColor->spec.RGBi.green > 1.0) { pColor->spec.RGBi.green = 1.0; } if (pColor->spec.RGBi.blue < 0.0) { pColor->spec.RGBi.blue = 0.0; } else if (pColor->spec.RGBi.blue > 1.0) { pColor->spec.RGBi.blue = 1.0; } (pColor++)->format = (XcmsColorFormat)0x80000001; } return (hasCompressed ? 2 : 1); } $ gcc -O2 LRGB.i >Fix: >Release-Note: >Audit-Trail: >Unformatted: