From: SourceForge.net <no...@so...> - 2011-01-06 23:32:32
|
Bugs item #3152684, was opened at 2011-01-07 00:32 Message generated for change (Tracker Item Submitted) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3152684&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 Resolution: None Priority: 5 Private: No Submitted By: Philipp Klaus Krause (spth) Assigned to: Nobody/Anonymous (nobody) Summary: Dead code messing up live ranges and register allocation Initial Comment: When compiling the attached sample, iCode 37 is dead. It writes iTemp1, which will never be read. kilLDeadCode from SDCCopt.c doesn't catch this due to /* 2. if assignment and result is a temp & isaddr then skip */ /* since this means array & pointer access, will be taken */ /* care of by alias analysis. */ and /* if the result is a temp & isaddr then skip */ if (IC_RESULT (ic) && POINTER_SET (ic)) continue; Then, in live range analysis, we mark Temp1 as alive at iCode 37, but no subsequent ones (findNextUse won't find a next use). Thus this problem increases register pressure unnecessarily. I found and can reproduce this on the Z80, but it's probably there for all ports. Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3152684&group_id=599 |