* Hugs version 1.4, December 1997
*
* $RCSfile: optimise.c,v $
- * $Revision: 1.3 $
- * $Date: 1999/02/03 17:08:33 $
+ * $Revision: 1.4 $
+ * $Date: 1999/03/09 14:51:09 $
* ------------------------------------------------------------------------*/
#include "prelude.h"
static StgVar optimiseVar(StgVar v)
{
StgRhs rhs = stgVarBody(v);
- /* short circuit: let x = y in ...x... --> let x = y ...y... */
+fprintf(stderr,"optimiseVar ");printStg(stderr,v);fprintf(stderr,"\n");
+ /* short circuit: let x = y in ...x... --> let x = y in ...y... */
if (whatIs(rhs) == STGVAR && rhs != v) {
StgVar v1 = rhs;
+fprintf(stderr, "dumpable\n");
/* find last variable in chain */
rhs = stgVarBody(v1);
void optimiseBind( StgVar v )
{
- StgRhs rhs = stgVarBody(v);
+ StgRhs rhs;
+ rhs = stgVarBody(v);
switch (whatIs(rhs)) {
case STGCON:
mapOver(optimiseAtom,stgConArgs(rhs));
* by optimiseVar so we can drop the binding
* right now.
*/
+fprintf(stderr, "dropping bind ");printStg(stderr,b);fprintf(stderr, "\n");
} else {
+fprintf(stderr, "retaining bind ");printStg(stderr,b);fprintf(stderr, "\n");
binds = cons(hd(bs),binds);
}
}
return e;
}
+
+void optimiseTopBind( StgVar v )
+{
+if (lastModule() != modulePrelude) {
+fflush(stdout); fflush(stderr);
+fprintf ( stderr, "------------------------------\n" );
+fflush(stderr);
+printStg ( stderr, v );
+fprintf(stderr, "\n" );
+}
+optimiseBind ( v );
+if (lastModule() != modulePrelude) {
+printStg ( stderr,v );
+fprintf(stderr, "\n\n" );
+fflush(stderr);
+}
+}
+
/*-------------------------------------------------------------------------*/