From: SourceForge.net <no...@so...> - 2008-03-23 22:35:50
|
Feature Requests item #1923898, was opened at 2008-03-23 23:35 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=1923898&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Priority: 6 Private: No Submitted By: Philipp Krause (spth) Assigned to: Nobody/Anonymous (nobody) Summary: Evaluate arithmetic stuff at compile time Initial Comment: Currently sdcc evaluates arithmetic stuff at compile time for ints, but not for pointers. Example: struct { unsigned char b; struct { unsigned char d; unsigned char e; } c; } a; void test(void) { a.c.e = 1 + 1 + 1; } The "1 + 1 + 1" is replaced by 3 at compile time, but &(a.c.e) is calculated at runtime as (&a + 1 + 1). It should be done at compile time. The above code (which is attached, too) should be compiled with sdcc -mz80 --no-peep to see the problem. Some ports like hc08 do optimize the pointer calculation in code generation (z80 does it partially in code generation, partially in the peephole optimizer: We see one +1 in the loading of the constant, and an inc after that; the inc would be optimized awy by the peephole optimizer), but I think this should be done at a higher level. Doing it at a higher level would be cleaner and make it work for more complex examples, too. It would ease register pressure since the register allocator would never allocate registers to intermediate results of the pointer calculation. Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=1923898&group_id=599 |