[Bug middle-end/18938] Out of memory with many select case statements

2007-02-17 Thread tkoenig at gcc dot gnu dot org


--- Comment #4 from tkoenig at gcc dot gnu dot org  2007-02-17 21:43 ---
This appears to have been fixed in the meantime:

$ perl multi-case-c 30 > multi-case.c
(reverse-i-search)`g': gcc multi-case.c
$ gdb ~/libexec/gcc/i686-pc-linux-gnu/4.3.0/cc1
GNU gdb 6.4.90-debian
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...Using host libthread_db library
"/lib/tls/i686/cmov/libthread_db.so.1".

(gdb) r multi-case.c
Starting program: /home/ig25/libexec/gcc/i686-pc-linux-gnu/4.3.0/cc1
multi-case.c
Failed to read a valid object file image from memory.
 main {GC 222958k -> 184399k} {GC 274901k -> 263773k}
Execution times (seconds)
 garbage collection:   4.16 ( 5%) usr   0.02 ( 1%) sys   4.22 ( 5%) wall   
0 kB ( 0%) ggc
 cfg cleanup   :   1.83 ( 2%) usr   0.00 ( 0%) sys   1.84 ( 2%) wall   
0 kB ( 0%) ggc
 CFG verifier  :  18.25 (24%) usr   0.11 ( 3%) sys  18.53 (23%) wall   
0 kB ( 0%) ggc
 trivially dead code   :   0.37 ( 0%) usr   0.00 ( 0%) sys   0.36 ( 0%) wall   
0 kB ( 0%) ggc
 life analysis :   2.12 ( 3%) usr   0.01 ( 0%) sys   2.17 ( 3%) wall   
0 kB ( 0%) ggc
 life info update  :   0.82 ( 1%) usr   0.01 ( 0%) sys   0.85 ( 1%) wall   
0 kB ( 0%) ggc
 alias analysis:   0.35 ( 0%) usr   0.00 ( 0%) sys   0.36 ( 0%) wall   
0 kB ( 0%) ggc
 register scan :   0.15 ( 0%) usr   0.00 ( 0%) sys   0.16 ( 0%) wall   
0 kB ( 0%) ggc
 rebuild jump labels   :   0.30 ( 0%) usr   0.00 ( 0%) sys   0.30 ( 0%) wall   
0 kB ( 0%) ggc
 preprocessing :   1.41 ( 2%) usr   0.54 (14%) sys   2.39 ( 3%) wall  
11181 kB ( 3%) ggc
 lexical analysis  :   0.48 ( 1%) usr   1.45 (36%) sys   1.72 ( 2%) wall   
0 kB ( 0%) ggc
 parser:   8.32 (11%) usr   0.94 (24%) sys   9.34 (11%) wall  
73956 kB (17%) ggc
 inline heuristics :   2.21 ( 3%) usr   0.13 ( 3%) sys   2.35 ( 3%) wall   
0 kB ( 0%) ggc
 tree gimplify :   3.80 ( 5%) usr   0.02 ( 1%) sys   4.11 ( 5%) wall  
17283 kB ( 4%) ggc
 tree eh   :   0.29 ( 0%) usr   0.01 ( 0%) sys   0.30 ( 0%) wall   
0 kB ( 0%) ggc
 tree CFG construction :   2.01 ( 3%) usr   0.09 ( 2%) sys   2.10 ( 3%) wall 
127713 kB (29%) ggc
 tree CFG cleanup  :   1.63 ( 2%) usr   0.01 ( 0%) sys   1.63 ( 2%) wall   
0 kB ( 0%) ggc
 tree STMT verifier:   7.36 (10%) usr   0.26 ( 7%) sys   7.82 (10%) wall   
0 kB ( 0%) ggc
 callgraph verifier:   0.10 ( 0%) usr   0.00 ( 0%) sys   0.10 ( 0%) wall   
0 kB ( 0%) ggc
 expand:   7.56 (10%) usr   0.12 ( 3%) sys   7.79 ( 9%) wall 
166651 kB (38%) ggc
 jump  :   0.37 ( 0%) usr   0.00 ( 0%) sys   0.37 ( 0%) wall   
0 kB ( 0%) ggc
 flow analysis :   0.54 ( 1%) usr   0.01 ( 0%) sys   0.55 ( 1%) wall   
0 kB ( 0%) ggc
 mode switching:   0.04 ( 0%) usr   0.00 ( 0%) sys   0.04 ( 0%) wall   
0 kB ( 0%) ggc
 local alloc   :   1.71 ( 2%) usr   0.00 ( 0%) sys   1.68 ( 2%) wall   
0 kB ( 0%) ggc
 global alloc  :   6.35 ( 8%) usr   0.11 ( 3%) sys   6.81 ( 8%) wall  
42188 kB (10%) ggc
 flow 2:   0.79 ( 1%) usr   0.00 ( 0%) sys   0.79 ( 1%) wall   
1 kB ( 0%) ggc
 final :   3.23 ( 4%) usr   0.09 ( 2%) sys   3.45 ( 4%) wall   
0 kB ( 0%) ggc
 TOTAL :  76.56 3.9982.20
439966 kB
Extra diagnostic checks enabled; compiler may run slowly.
Configure with --disable-checking to disable checks.

Program exited normally.

Closing.


-- 

tkoenig at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||FIXED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18938



[Bug middle-end/18938] Out of memory with many select case statements

2004-12-12 Thread Thomas dot Koenig at online dot de

--- Additional Comments From Thomas dot Koenig at online dot de  2004-12-12 
10:42 ---
(In reply to comment #2)
> Speculations I'd put money on if the bookies would accept it: 
> 1) You can show this same problem with C/C++ if you have enough cases.

Yes.

$ time ./multi-case-c 15 > multi-case.c
$ gcc multi-case.c

cc1: out of memory allocating 2815331376 bytes after a total of 10571776 bytes
$ gcc -v
Reading specs from /home/ig25/lib/gcc/i686-pc-linux-gnu/4.0.0/specs
Configured with: ../gcc/configure --prefix=/home/ig25 
--enable-languages=c,c++,f95
Thread model: posix
gcc version 4.0.0 20041208 (experimental)
$ cat multi-case-c
#! /usr/bin/perl

$last = shift;

for ($i=1; $i<=$last; $i++) {
push(@lines, sprintf("case %d:\n j = %d;\nbreak;\n", $i,
$last-$i));
}
for ($i=0; $i<=$last; $i++) {
$j = int(rand($last));
$temp = $lines[$i];
$lines[$i] = $lines[$j];
$lines[$j] = $temp;
}
print <
int main()
{
int i,j;
scanf("%d",&i);
switch(i) {
EOF
print @lines;
print <
int main()
{
int i,j;
scanf("%d",&i);
switch(i) {
case 2:
 j = 2;
break;
case 4:
 j = 0;
break;
case 3:
 j = 1;
break;
case 1:
 j = 3;
break;
}
printf("%d\n",i);
return 0;

This isn't a regression, gcc 3.3 had the same problem:

$ /usr/bin/gcc multi-case.c

cc1: out of memory allocating 2815312608 bytes after a total of 18419712 bytes
$ /usr/bin/gcc -v
Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.5/specs
Configured with: ../src/configure -v
--enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr
--mandir=/usr/share/man
--infodir=/usr/share/info--with-gxx-include-dir=/usr/include/c++/3.3
--enable-shared --with-system-zlib --enable-nls --without-included-gettext
--enable-__cxa_atexit --enable-clocale=gnu --enable-debug --enable-java-gc=boehm
--enable-java-awt=xlib --enable-objc-gci486-linux
Thread model: posix
gcc version 3.3.5 (Debian 1:3.3.5-3)


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18938


[Bug middle-end/18938] Out of memory with many select case statements

2004-12-11 Thread steven at gcc dot gnu dot org

--- Additional Comments From steven at gcc dot gnu dot org  2004-12-11 
21:57 ---
Speculations I'd put money on if the bookies would accept it: 
1) You can show this same problem with C/C++ if you have enough cases. 
2) No compiler can support 2416101224 basic blocks -- but why do we have 
   so many of them?? 
 
 

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18938


[Bug middle-end/18938] Out of memory with many select case statements

2004-12-11 Thread pinskia at gcc dot gnu dot org

--- Additional Comments From pinskia at gcc dot gnu dot org  2004-12-11 
17:24 ---
Confirmed, but the problem is not in the front-end this time :).

#4  0x0027c298 in sbitmap_vector_alloc (n_vecs=2416101224, n_elms=17) at 
/Users/pinskia/
src/local3/gcc/gcc/sbitmap.c:160
#5  0x002ea824 in make_edges (min=0x9002c768, max=0x51350200, update_p=1) at 
/Users/
pinskia/src/local3/gcc/gcc/cfgbuild.c:247
#6  0x002eaf84 in find_many_sub_basic_blocks (blocks=0x1) at 
/Users/pinskia/src/local3/gcc/gcc/
cfgbuild.c:697
#7  0x002b4878 in tree_expand_cfg () at 
/Users/pinskia/src/local3/gcc/gcc/cfgexpand.c:1322


-- 
   What|Removed |Added

 Status|UNCONFIRMED |NEW
  Component|fortran |middle-end
 Ever Confirmed||1
   Keywords||memory-hog
   Last reconfirmed|-00-00 00:00:00 |2004-12-11 17:24:54
   date||


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18938