From 68bd363520b362347252ff0628c36eb8a43a8566 Mon Sep 17 00:00:00 2001 From: kvigor Date: Fri, 13 Oct 2000 21:07:32 +0000 Subject: [PATCH] fix unused parameter receive bug (fix ifdef'd out right now) git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@459 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- src/SDCCopt.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/SDCCopt.c b/src/SDCCopt.c index 5e5afb9a..89fc4a15 100644 --- a/src/SDCCopt.c +++ b/src/SDCCopt.c @@ -613,6 +613,40 @@ static void printCyclomatic (eBBlock **ebbs, int count) werror(I_CYCLOMATIC,currFunc->name,nEdges,nNodes, nEdges - nNodes + 2); } +#ifdef POST_2_2_1 +/* Turn this on when it's safe to destablize */ +/*-----------------------------------------------------------------*/ +/* discardDeadParamReceives - remove any RECEIVE opcodes which */ +/* refer to dead variables. */ +/*-----------------------------------------------------------------*/ +static void discardDeadParamReceives(eBBlock **ebbs, int count) +{ + int i; + iCode *ic; + iCode dummyIcode; + + for (i = 0 ; i < count ; i++) + { + for ( ic = ebbs[i]->sch ; ic ; ic = ic->next ) + { + if (ic->op == RECEIVE) + { + if (IC_RESULT(ic) && OP_SYMBOL(IC_RESULT(ic)) + && !OP_SYMBOL(IC_RESULT(ic))->used) + { +#if 0 + fprintf(stderr, "discarding dead receive for %s\n", + OP_SYMBOL(IC_RESULT(ic))->name); +#endif + dummyIcode.next = ic->next; + remiCodeFromeBBlock(ebbs[i], ic); + ic = &dummyIcode; + } + } + } + } +} +#endif /*-----------------------------------------------------------------*/ /* eBBlockFromiCode - creates extended basic blocks from iCode */ @@ -742,6 +776,14 @@ eBBlock **eBBlockFromiCode (iCode *ic) if (options.dump_range) dumpEbbsToFileExt(".dumprange",ebbs,count); +#ifdef POST_2_2_1 + /* Turn this on when it's safe to destablize */ + /* Now that we have the live ranges, discard parameter + * receives for unused parameters. + */ + discardDeadParamReceives(ebbs,count); +#endif + /* allocate registers & generate code */ port->assignRegisters(ebbs,count); -- 2.30.2