From: Philipp K. K. <pk...@sp...> - 2011-01-11 22:48:55
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am 11.01.2011 00:24, schrieb Frieder Ferlemann: >> 7) The underlying ideas are not accepted in the compiler construction >> community. I submitted a paper to the Compiler Construction 2010 >> conference, which was rejected rather harshly: "[...] this paper will >> remain, yet another time, a purely theoretical paper with no influence >> on register allocation.", "[...] results will remain uncited or unused >> [...]", "[...] impractical for use in a real compiler.", "[...] the >> algorithm is only of theoretical value.", etc. > > "[...] impractical for use in a real compiler." > would look like a problem. Is this just a statement? Well, I do not agree with that statement. There now is a working prototype implementation in sdcc's Z80 backend that can generate much better code than the old register allocator. However I have to admit that my approach probably would not be a good one for architectures that have many registers, since runtime is exponential in the number of registers (when aiming for optimal code, i.e. setting --max-allocs-per-node to INT_MAX). IMO my approach is a good one for sdcc: When developing for embedded system aiming for compact or even optimal code is much more important than on bigger systems, where memory is plenty. And sdcc's targets typically do not have many register. Philipp -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk0s3ksACgkQbtUV+xsoLppiTACgw0XUPh7eYQaitMFzgAitYkEx aKwAoIW/AA+SPRfiRPO0oYbTOsmjCZDE =CcHi -----END PGP SIGNATURE----- |
From: Philipp K. K. <pk...@sp...> - 2011-01-11 23:32:29
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am 11.01.2011 23:56, schrieb Frieder Ferlemann: > Could you compare to the regression test suite? > Not typical either, but a) has larger coverage and b) is known? On my system: Old register allocator: Summary for 'ucz80': 0 failures, 5880 tests, 847 test cases, 2208784 bytes, 5844603 ticks New register allocator, --max-allocs-per-node 8192: Summary for 'ucz80': 0 failures, 5911 tests, 851 test cases, 2058904 bytes, 6121208 ticks Any idea why the number of tests differs (the new register allocator really is the only change)? I will make another comparison later using the benchamrk at http://sourceforge.net/apps/trac/sdcc/wiki/Philipp%27s%20TODO%20list which I have used for this purpose in the past. Philipp -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk0s6HkACgkQbtUV+xsoLppNsACfRSRbvBav3rBBy1miZtvrj6/G h74AoIfBu3pLu+EhOMqS/XZmgFc/HII1 =ZfiK -----END PGP SIGNATURE----- |
From: Philipp K. K. <pk...@sp...> - 2011-01-12 10:19:24
|
Am 12.01.2011 08:01, schrieb Maarten Brock: >> On my system: >> Old register allocator: >> Summary for 'ucz80': 0 failures, 5880 tests, 847 test cases, 2208784 >> bytes, 5844603 ticks >> >> New register allocator, --max-allocs-per-node 8192: >> Summary for 'ucz80': 0 failures, 5911 tests, 851 test cases, 2058904 >> bytes, 6121208 ticks >> >> Any idea why the number of tests differs (the new register allocator >> really is the only change)? > > If the tests are identical you may have found or solved a hidden bug. I > suggest to compare the sources first (tests, fwk, ports) and then the > /results/ucz80/*.out and after that zoom in. > > Maarten Looks like a ucz80 problem to me. Some regression tests are failing with the current register allocator, that pass with the new one. For some reason these failures are not reported as failures, and instead aren't counted at all. The error message in the .out file always is "(106) Invalid instruction" These tests are: bug1057979 bug2989562 snprintf (twice) There are some tests that fail with both register allocators, with the failures not being counted, the error message is the same as above. These tests are: bug2686159 longor muldiv (thrice) These failures occur only when using the ucz80 simulator. Here's the summaries: Old register allocator: Summary for 'ucz80': 0 failures, 5880 tests, 847 test cases, 2208784 bytes, 5844603 ticks Summary for 'z80': 0 failures, 5982 tests, 869 test cases, 0 bytes, 0 ticks New register allocator: Summary for 'ucz80': 0 failures, 5911 tests, 851 test cases, 2056521 bytes, 6117645 ticks Summary for 'z80': 0 failures, 5982 tests, 869 test cases, 0 bytes, 0 ticks Philipp |