#2226 Live-range splitting breaks hc08

closed-fixed
None
HC08
5
2013-09-27
2013-09-24
No

In revision #8872, I have improved splitting of live-ranges. This yielded a nice improvement in generated code. However, for hc08 and s08 there is a regression test that no longer builds. Since all other ports seem to be fine with the changes in the splitting of live-ranges, I believe this is a bug in the hc08/s08 port, since it is a high-level optimization that works for the other ports.

To reproduce the issue, remove the !TARGET_HC08_LIKE in line 969 of SDCClrange.c.

Philipp

Discussion

  • Erik Petrich

    Erik Petrich - 2013-09-27

    It was more of a problem of bumping against memory limits. The regression test that was not building had a function with 32 floats with local scope. These were assigned register equivalent symbols which were then spilled; without --stack-auto the spill locations go into the zero page. This worked until the live ranges for these symbols were split at which point they were consuming 2324=256 bytes and the zero page overflowed from a few other required spill location allocations.

    I have changed the iCode generator to not assign register equivalent symbols on HC08/S08 for symbols larger than 16-bits since these register equivalents would have always spilled. This has reduced the zero page usage sufficiently to remove the !TARGET_HC08_LIKE from visit() in SDCClrange.c

     
  • Erik Petrich

    Erik Petrich - 2013-09-27
    • status: open --> closed-fixed
    • assigned_to: Erik Petrich
     
  • Philipp Klaus Krause

    Thanks. The improvement in code size seems small for the s08, and comparable to other ports for the hc08.

    Philipp

     

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks