[mercury-users] Why isn't deforestation working here?

Ralph Becket rbeck at microsoft.com
Sun Oct 17 00:15:27 AEST 1999


I've attached the simplified code for the LZW compression module I've been
working on.  I've got several successive refinements of this thing (the
attached version isn't one of the scarier ones), but all share pretty much
the same main-loop code.  I've managed to get rid of just about all memory
allocation in the program, but there is one place left that is bugging me,
and it's to do with io__result/1s being generated every time my program
reads a byte from the input file.

The basic format of the code is something like this:

	io__read_byte(Result, IO_in, IO_out),
	(	Result = ok(Byte), ...
	;	Result = eof, ...
	;	Result = error(ErrCode), ...
	)

and I was under the impression that compiling with

	MCFLAGS = -O 6 --intermodule-optimization

should deforest (vb?) this code.  Any help would be greatly appreciated!

Cheers,

Ralph


begin 600 compress.m
M)2`M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM("4*)2!C;VUP<F5S
M<RYM"B4*)2!697)S:6]N(#$*)0HE(%1H:7,@=F5R<VEO;B!I<R!A8F]U="!A
M<R!S:6UP;&4 at 87,@:70 at 9V5T<RP@=7-I;F<@=&AE('-T86YD87)D(&QI8G)A
M<GD*)2!M87`@*&$@,C,T('1R964@:6UP;&5M96YT871I;VXI('1O(&UA<"!P
M<F5F:7 at M8V]D92`K(&)Y=&4 at 8V]M8FEN871I;VYS"B4@=&\@8V]D97, at 86YD
M(&ME97!I;F<@86QL('1H92!B:6YA<GD@;W5T<'5T('-T=69F(&QO8VME9"!I
M;B!A('-I;F=L92T*)2!C;VYS=')U8W1O<B!T>7!E+ at HE"B4 at +2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2`E"@HZ+2!M;V1U;&4 at 8V]M<')E<W,N
M"@HZ+2!I;G1E<F9A8V4N"@HZ+2!I;7!O<G1?;6]D=6QE(&EO+ at H*.BT@<')E
M9"!M86EN*&EO7U]S=&%T92P@:6]?7W-T871E*2X*.BT@;6]D92!M86EN*&1I
M+"!U;RD@:7, at 9&5T+ at H*)2`M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM("4*)2`M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM("4*"CHM
M(&EM<&QE;65N=&%T:6]N+ at H*.BT@:6UP;W)T7VUO9'5L92!R97%U:7)E+"!S
M=&1?=71I;"P@:6YT+"!L:7-T+"!M87`N"@HZ+2!T>7!E(&-O9&5S(#T](&UA
M<"AP86ER*&EN="P@:6YT*2P@:6YT*2X*"B4 at +2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2`E"@IM86EN("TM/@H):6]?7V-O;6UA;F1?;&EN95]A
M<F=U;65N=',H07)G5BDL"@H)*"!I9B![($%R9U8@/2!;26XL($]U=%T@?2!T
M:&5N"@D):6]?7W-E95]B:6YA<GDH26XL($EN4F5S*2P*"0DH(&EF('L at 26Y2
M97,@/2!E<G)O<BA);D5R<BD@?2!T:&5N"@D)"7L at 97)R;W(H:6]?7V5R<F]R
M7VUE<W-A9V4H26Y%<G(I*2!]"@D)("!E;'-E"@D)("`)6UT*"0DI+`H)"6EO
M7U]T96QL7V)I;F%R>2A/=70L($]U=%)E<RDL"@D)*"!I9B![($]U=%)E<R`]
M(&5R<F]R*$]U=$5R<BD@?2!T:&5N"@D)"7L at 97)R;W(H:6]?7V5R<F]R7VUE
M<W-A9V4H3W5T17)R*2D@?0H)"2`@96QS90H)"2`@"5M="@D)*2P*"0EI;U]?
M<F5P;W)T7W-T871S+`H)("`)<W1A<G0H;F5W7V)I=&)U9BDL"@D):6]?7W)E
M<&]R=%]S=&%T<PH)("!E;'-E"@D@(`E[(&5R<F]R*")U<V%G93H at 8V]M<')E
M<W,@/&EN9FEL93X@/&]U=&9I;&4^(BD@?0H)*2X*"B4 at +2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2`E"@HZ+2!F=6YC(&-L96%R7V-O9&4@/2!I
M;G0N"@HZ+2!F=6YC(&UA>%]C;V1E(#T@:6YT+ at H*8VQE87)?8V]D92`](#(U
M-BX*"FUA>%]C;V1E(#T at -C4U,S4N"@HE("TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2T@)0H*.BT@<')E9"!S=&%R="AB:71B=68L(&EO7U]S=&%T
M92P@:6]?7W-T871E*2X*.BT@;6]D92!S=&%R="AI;BP at 9&DL('5O*2!I<R!D
M970N"@IS=&%R="A/=71P=71"=68I("TM/@H*"7)E861?8GET92A297-U;'0L
M($]U='!U=$)U9BP at 3W5T<'5T0G5F,"DL"@H)*`E[(%)E<W5L="`](&]K*$)Y
M=&4I('TL"@D)>R!M87!?7VEN:70H0V]D97,I('TL"@D);6%I;E]L;V]P*$)Y
M=&4L(#(U-RP at .2P@0V]D97,L($]U='!U=$)U9C`I"@H).PE[(%)E<W5L="`]
M(&5O9B!]"@D))2!.;V]P"@H).PE[(%)E<W5L="`](&5R<F]R*$5R<D-O9&4I
M('TL"@D)>R!E<G)O<BAI;U]?97)R;W)?;65S<V%G92A%<G)#;V1E*2D@?0H)
M*2X*"B4 at +2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2`E"@HZ+2!P
M<F5D(&UA:6Y?;&]O<"AI;G0L(&EN="P@:6YT+"!C;V1E<RP at 8FET8G5F+"!I
M;U]?<W1A=&4L(&EO7U]S=&%T92DN"CHM(&UO9&4@;6%I;E]L;V]P*&EN+"!I
M;BP@:6XL(&EN+"!I;BP at 9&DL('5O*2!I<R!D970N"@IM86EN7VQO;W`H4')E
M9FEX+"!.=6U#;V1E<T%L;&]C871E9"P at 0FET<U!E<D-O9&4L($-O9&5S+"!"
M:71"=68I("TM/@H*"7)E861?8GET92A297-U;'0L($)I=$)U9BP at 0FET0G5F
M,"DL"@H)*`E[(%)E<W5L="`](&]K*$)Y=&4I('TL"@H)"2@@:68@>R!M87!?
M7W-E87)C:"A#;V1E<RP at 4')E9FEX+4)Y=&4L($-O9&4I('T@=&AE;@H*"0D)
M;6%I;E]L;V]P*`H)"0D)0V]D92P*"0D)"4YU;4-O9&5S06QL;V-A=&5D+`H)
M"0D)0FET<U!E<D-O9&4L"@D)"0E#;V1E<RP*"0D)"4)I=$)U9C`*"0D)*0H*
M"0D@(&5L<V4@:68@>R!.=6U#;V1E<T%L;&]C871E9"`]/"!M87A?8V]D92!]
M('1H96X*"@D)("`)=W)I=&5?8V]D92A0<F5F:7 at L($)I='-097)#;V1E+"!"
M:71"=68P+"!":71"=68Q*2P*"@D)"6UA:6Y?;&]O<"@*"0D)"4)Y=&4L"@D)
M"0E.=6U#;V1E<T%L;&]C871E9"`K(#$L"@D)"0DH(&EF($YU;4-O9&5S06QL
M;V-A=&5D(#P@,3P\0FET<U!E<D-O9&4@=&AE;@H)"0D)"4)I='-097)#;V1E
M"@D)"0D@(&5L<V4*"0D)"2`@"4)I='-097)#;V1E("L@,2`I+`H)"0D);6%P
M7U]S970H0V]D97,L(%!R969I>"U">71E+"!.=6U#;V1E<T%L;&]C871E9"DL
M"@D)"0E":71"=68Q"@D)"2D*"@D)("!E;'-E(&EF('L@;F]T(&-O;7!R97-S
M:6]N7W)A=&EO7V9A;&QE;BA":71"=68P*2!]('1H96X*"@D)("`)=W)I=&5?
M8V]D92A0<F5F:7 at L($)I='-097)#;V1E+"!":71"=68P+"!":71"=68Q*2P*
M"@D)"6UA:6Y?;&]O<"@*"0D)"4)Y=&4L"@D)"0E.=6U#;V1E<T%L;&]C871E
M9"P*"0D)"4)I='-097)#;V1E+`H)"0D)0V]D97,L"@D)"0E":71"=68Q"@D)
M"2D*"@D)("!E;'-E"@H)"2`@"7=R:71E7V-O9&4H4')E9FEX+`E":71S4&5R
M0V]D92P at 0FET0G5F,"P at 0FET0G5F,2DL"@D)"7=R:71E7V-O9&4H0GET92P)
M0FET<U!E<D-O9&4L($)I=$)U9C$L($)I=$)U9C(I+`H)"0EW<FET95]C;V1E
M*&-L96%R7V-O9&4L"4)I='-097)#;V1E+"!":71"=68R+"!":71"=68S*2P*
M"0D)<W1A<G0H<F5S971?8V]M<')E<W-I;VY?<F%T:6\H0FET0G5F,RDI"@D)
M*0H*"3L)>R!297-U;'0@/2!E<G)O<BA%<G)#;V1E*2!]+`H*"0E[(&5R<F]R
M*&EO7U]E<G)O<E]M97-S86=E*$5R<D-O9&4I*2!]"@H).PE[(%)E<W5L="`]
M(&5O9B!]+`H*"0EW<FET95]C;V1E*%!R969I>"P at 0FET<U!E<D-O9&4L($)I
M=$)U9C`L($)I=$)U9C$I+`H)"69L=7-H7V)U9F9E<BA":71"=68Q*0H)*2X*
M"B4 at +2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2`E"@HZ+2!T>7!E
M(&)I=&)U9 at H)+2TM/@EB:71B=68H"@D)"6EN="P)"24 at 3G5M8F5R(&]F(&)I
M=',@<F5A9"!I;BX*"0D):6YT+`D))2!.=6UB97(@;V8 at 8FET<R!W<FET=&5N
M(&]U="X*"0D):6YT+`D))2!#;VUP<F5S<VEO;B!R871I;R!G=6ED92X*"0D)
M:6YT+`D))2!"=69F97(@8V]N=&5N=',N"@D)"6EN=`D))2!.=6UB97(@;V8@
M8FET<R!I;B!B=69F97(N"@D)*2X*"CHM(&9U;F,@;F5W7V)I=&)U9B`](&)I
M=&)U9BX*"FYE=U]B:71B=68@/2!B:71B=68H,"P@,"P@,"P@,"P@,"DN"@HZ
M+2!P<F5D(')E861?8GET92AI;U]?<F5S=6QT*&EN="DL(&)I=&)U9BP at 8FET
M8G5F+"!I;U]?<W1A=&4L(&EO7U]S=&%T92DN"CHM(&UO9&4@<F5A9%]B>71E
M*&]U="P@:6XL(&]U="P at 9&DL('5O*2!I<R!D970N"@IR96%D7V)Y=&4H4F5S
M=6QT+"!B:71B=68H02Q"+$,L1"Q%*2P at 8FET8G5F*$$@*R`X+$(L0RQ$+$4I
M*2`M+3X*"6EO7U]R96%D7V)Y=&4H4F5S=6QT*2X*"CHM('!R960@=W)I=&5?
M8V]D92AI;G0L(&EN="P at 8FET8G5F+"!B:71B=68L(&EO7U]S=&%T92P@:6]?
M7W-T871E*2X*.BT@;6]D92!W<FET95]C;V1E*&EN+"!I;BP@:6XL(&]U="P@
M9&DL('5O*2!I<R!D970N"@IW<FET95]C;V1E*$-O9&4L($)I='-097)#;V1E
M+"!B:71B=68H03`L0C`L7T,P+$0P+$4P*2P at 8FET8G5F*$$L0BQ#+$0L12DI
M("TM/@H)>R!!(#T at 03`@?2P*"7L at 0B`]($(P("L at 0FET<U!E<D-O9&4@?2P*
M"7L at 0R`]("A!,"`M($(P*3X^,3$@?2P*"7=R:71E7V9U;&Q?8GET97,H1#`@
M7"\@0V]D93P\13`L($0L($4P("L at 0FET<U!E<D-O9&4L($4I+ at H*.BT@<')E
M9"!W<FET95]F=6QL7V)Y=&5S*&EN="P@:6YT+"!I;G0L(&EN="P@:6]?7W-T
M871E+"!I;U]?<W1A=&4I+ at HZ+2!M;V1E('=R:71E7V9U;&Q?8GET97,H:6XL
M(&]U="P@:6XL(&]U="P at 9&DL('5O*2!I<R!D970N"@IW<FET95]F=6QL7V)Y
M=&5S*$)I='-);BP at 0FET<TQE9G0L($YU;4)I=',L($YU;4QE9G0I("TM/@H)
M*"!I9B![($YU;4)I=',@/B`X('T@=&AE;@H)"6EO7U]W<FET95]B>71E*$)I
M='-);BDL"@D)=W)I=&5?9G5L;%]B>71E<RA":71S26X^/C at L($)I='-,969T
M+"!.=6U":71S("T at ."P at 3G5M3&5F="D*"2`@96QS90H)"7L at 0FET<TQE9G0@
M/2!":71S26X@?2P*"2`@"7L at 3G5M3&5F="`]($YU;4)I=',@?0H)*2X*"CHM
M('!R960 at 8V]M<')E<W-I;VY?<F%T:6]?9F%L;&5N*&)I=&)U9BDN"CHM(&UO
M9&4 at 8V]M<')E<W-I;VY?<F%T:6]?9F%L;&5N*&EN*2!I<R!S96UI9&5T+ at H*
M8V]M<')E<W-I;VY?<F%T:6]?9F%L;&5N*&)I=&)U9BA!+$(L0RQ?+%\I*2`Z
M+0H)*$$@+2!"*3X^,3$@/"!#+ at H*.BT at 9G5N8R!R97-E=%]C;VUP<F5S<VEO
M;E]R871I;RAB:71B=68I(#T at 8FET8G5F+@H*<F5S971?8V]M<')E<W-I;VY?
M<F%T:6\H8FET8G5F*%\L7RQ?+$0L12DI(#T at 8FET8G5F*#`L,"PP+$0L12DN
M"@HZ+2!P<F5D(&9L=7-H7V)U9F9E<BAB:71B=68L(&EO7U]S=&%T92P@:6]?
M7W-T871E*2X*.BT@;6]D92!F;'5S:%]B=69F97(H:6XL(&1I+"!U;RD@:7,@
M9&5T+ at H*9FQU<VA?8G5F9F5R*&)I=&)U9BA?+%\L0RQ?+%\I*2`M+3X*"6EO
M7U]W<FET95]B>71E*$,I+ at H*)2`M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
)+2TM+2TM("4*
`
end
--------------------------------------------------------------------------
mercury-users mailing list
post:  mercury-users at cs.mu.oz.au
administrative address: owner-mercury-users at cs.mu.oz.au
unsubscribe: Address: mercury-users-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-users-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the users mailing list