This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/36187] [4.3 Regression] Partitioning problem with SFTs (again)
- From: "rguenth at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 9 May 2008 14:09:42 -0000
- Subject: [Bug tree-optimization/36187] [4.3 Regression] Partitioning problem with SFTs (again)
- References: <bug-36187-10053@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #4 from rguenth at gcc dot gnu dot org 2008-05-09 14:09 -------
The following aborts with -O2 --param max-aliased-vops=N with N in [19, 25]
on x86_64-unknown-linux-gnu. Symptom is still lim being wrongly applied.
If you cannot reproduce it search for the correct N with
for n in `seq 0 5 100`; do g++-4.3 -O2 -S testfoo.cxx -fdump-tree-lim
-B/abuild/rguenther/gcc43-g/gcc --param max-aliased-vops=$n; grep lsm
testfoo.cxx.095t.lim > /dev/null 2>&1 && echo $n; done
extern "C" void abort (void);
enum SbxDataType { SbxINTEGER, SbxDECIMAL, SbxBYREF = 0x4000 };
struct SbxValues {
union {
float nSingle;
float* pSingle;
};
SbxDataType eType;
};
static bool ImpPutDoubleFoo( SbxValues* p)
{
bool bRet = false;
SbxValues aTmp;
int count = 0;
start:
switch( p->eType ) {
case SbxINTEGER:
if (count++ > 0)
abort ();
aTmp.pSingle = &p->nSingle; goto direct;
case SbxBYREF | SbxDECIMAL:
bRet = false;
break;
direct:
aTmp.eType = SbxDataType( p->eType | SbxBYREF );
p = &aTmp; goto start;
case SbxBYREF | SbxINTEGER:
break;
default:
bRet =true;
}
return bRet;
}
int main( int argc, char** argv )
{
SbxValues aTmp;
aTmp.eType = SbxINTEGER;
if ( ImpPutDoubleFoo( &aTmp ) )
abort ();
return 0;
}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36187