Hi,
I am trying to get the SVN head built locally again
and back at work on the GNAT/RTEMS work I was doing.
Unfortunately, I have tripped across something that
is quite bad. Compiling on Linux x86 targeting the
PowerPC or SPARC leads to a huge compilation time
on a single file.
joel 27918 27917 98 08:18 pts/11 02:46:24
/home/joel/work-gnat/svn/b-gcc2-powerpc/./gcc/gnat1 -quiet -nostdinc
-dumpbase g-catiio.adb -O2 -W -Wall -g -gnatpg -gnatO g-catiio.o
g-catiio.adb -o /tmp/cch0iMng.s
Here is the same process in top:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27918 joel 20 0 106m 95m 10m R 100 9.6 170:37.92 gnat1
This is with a PowerPC build. The SPARC eventually finished
in an over night build so I don't know how long it took.
It doesn't appear to be thrashing on memory. Just CPU time.
I attached to the gnat1 process in gdb and got this back trace:
(gdb) bt
#0 0x083f0231 in bitmap_elt_ior (dst=0xc688880, dst_elt=0xc4170d0,
dst_prev=0xafc2144, a_elt=0xc4170d0, b_elt=0xb1d551c, changed=0 '\0')
at ../../gcc/gcc/bitmap.c:1404
#1 0x083f03af in bitmap_ior_into (a=0xc688880, b=0xc6822f8)
at ../../gcc/gcc/bitmap.c:1511
#2 0x0842361e in df_live_confluence_n (e=0x42126e88)
at ../../gcc/gcc/df-problems.c:1524
#3 0x0841d8b5 in df_worklist_propagate_forward (dataflow=0xade6c60,
bb_index=1284, bbindex_to_postorder=0xc6d4050, pending=0xaf65f4c,
considered=0xc651eb8) at ../../gcc/gcc/df-core.c:875
#4 0x0841dfa8 in df_worklist_dataflow (dataflow=0xade6c60,
blocks_to_consider=0xaf65618, blocks_in_postorder=0xacd75d0,
n_blocks=1746)
at ../../gcc/gcc/df-core.c:999
#5 0x0841e17b in df_analyze_problem (dflow=0xade6c60,
blocks_to_consider=0xaf65618, postorder=0xacd75d0, n_blocks=1746)
at ../../gcc/gcc/df-core.c:1060
#6 0x0841e50e in df_analyze () at ../../gcc/gcc/df-core.c:1150
#7 0x08c48e6c in if_convert () at ../../gcc/gcc/ifcvt.c:4045
#8 0x08c49091 in rest_of_handle_if_conversion () at
../../gcc/gcc/ifcvt.c:4124
#9 0x086430ef in execute_one_pass (pass=0x8f19200)
at ../../gcc/gcc/passes.c:1118
#10 0x08643239 in execute_pass_list (pass=0x8f19200)
at ../../gcc/gcc/passes.c:1171
---Type <return> to continue, or q <return> to quit---
#11 0x08643255 in execute_pass_list (pass=0x8f13080)
at ../../gcc/gcc/passes.c:1172
#12 0x08792fa9 in tree_rest_of_compilation (fndecl=0x40048480)
at ../../gcc/gcc/tree-optimize.c:404
#13 0x08a1006b in cgraph_expand_function (node=0x400bd300)
at ../../gcc/gcc/cgraphunit.c:1151
#14 0x08a101fc in cgraph_expand_all_functions ()
at ../../gcc/gcc/cgraphunit.c:1214
#15 0x08a1080d in cgraph_optimize () at ../../gcc/gcc/cgraphunit.c:1421
#16 0x080a549d in gnat_write_global_declarations ()
at ../../gcc/gcc/ada/utils.c:4024
#17 0x08705647 in compile_file () at ../../gcc/gcc/toplev.c:1055
#18 0x0870706e in do_compile () at ../../gcc/gcc/toplev.c:2245
#19 0x087070d0 in toplev_main (argc=15, argv=0xbf8d1484)
at ../../gcc/gcc/toplev.c:2277
#20 0x083daa6e in main (argc=Cannot access memory at address 0xffffff3a
) at ../../gcc/gcc/main.c:35
(gdb)
Single stepping for a while, I didn't see it get up the call
chain farther than df_worklist_propagate_forward before it
descended again.
Any ideas?
--joel