Deoptimized calls fail in Cog (was Re: [squeak-dev] The Trunk:
Compiler-nice.189.mcz)
Juan Vuletich
juan at jvuletich.org
Thu Mar 3 02:45:47 UTC 2011
Hi Folks,
This works great with the examples provided earlier. But a bit more of
testing show new issues (this new issues happen both with Cog and the
interpreter):
true
ifTrue: [ Transcript cr; show: 'was true' ];
ifFalse: [ Transcript cr; show: 'was false' ];
ifTrue: [ Transcript cr; show: 'was true2' ] ifFalse: [ Transcript
cr; show: 'was false2' ];
ifFalse: [ Transcript cr; show: 'was false3' ] ifTrue: [ Transcript
cr; show: 'was true3' ]
prints:
was true
was true2
was false3
and this code:
7
ifNil: [Transcript cr; show: 'nil' ];
ifNotNil: [ Transcript cr; show: 'not nil' ];
ifNil: [Transcript cr; show: 'nil2' ] ifNotNil: [ Transcript cr;
show: 'not nil2' ];
ifNotNil: [ Transcript cr; show: 'not nil3' ] ifNil: [Transcript
cr; show: 'nil3' ]
prints:
not nil
not nil2
nil3
Besides, if these expressions are put in a method, and I decompile it,
and I get a dnu when decompiling the #ifTrue:ifFalse: call
(UndefinedObject dnu #isMessage:receiver:arguments:). I remove that
call, and I get swapped the blocks in the #ifNotNil:ifNil: and the
#:ifFalse:ifTrue: calls.
Thanks,
Juan Vuletich
Eliot Miranda wrote:
> Looks good to me. Thanks, Nicolas!
>
> On Wed, Mar 2, 2011 at 3:12 PM, Nicolas Cellier
> <nicolas.cellier.aka.nice at gmail.com
> <mailto:nicolas.cellier.aka.nice at gmail.com>> wrote:
>
> Oops, I always forget to select changes before filing out...
>
> Nicolas
>
> 2011/3/3 Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com
> <mailto:nicolas.cellier.aka.nice at gmail.com>>:
> > Then attached proof of concept may work.
> >
> > Nicolas
> >
> > 2011/3/3 Eliot Miranda <eliot.miranda at gmail.com
> <mailto:eliot.miranda at gmail.com>>:
> >>
> >>
> >> On Wed, Mar 2, 2011 at 3:02 PM, Nicolas Cellier
> >> <nicolas.cellier.aka.nice at gmail.com
> <mailto:nicolas.cellier.aka.nice at gmail.com>> wrote:
> >>>
> >>> One dumb way would be to retain a copy of
> >>> originalSelector & originalArguments in MethodNode ivar at
> creation,
> >>> then let #ensureCanCascade: restore the originals.
> >>
> >> I like this. Not at all dumb.
> >>
> >>>
> >>> Nicolas
> >>>
> >>> 2011/3/2 Eliot Miranda <eliot.miranda at gmail.com
> <mailto:eliot.miranda at gmail.com>>:
> >>> >
> >>> >
> >>> > On Wed, Mar 2, 2011 at 1:52 PM, Juan Vuletich
> <juan at jvuletich.org <mailto:juan at jvuletich.org>>
> >>> > wrote:
> >>> >>
> >>> >> Hi Eliot,
> >>> >>
> >>> >> Thanks for caring!
> >>> >>
> >>> >> The attached code fixed the case I reported first, but not
> this:
> >>> >>
> >>> >> true ifTrue: [ 'was true' print ]; ifFalse: [ 'not true'
> print ]
> >>> >
> >>> > Does the second one have to be unoptimized? I guess that in
> this both
> >>> > are
> >>> > deoptimized right?
> >>> >
> >>> > true ifTrue: [ 'was true' print ]; ifFalse: [ 'not true'
> print ];
> >>> > yourself
> >>> >>
> >>> >> Thanks,
> >>> >> Juan Vuletich
> >>> >>
> >>> >> Eliot Miranda wrote:
> >>> >>>
> >>> >>> Hi Juan,
> >>> >>>
> >>> >>> I think the deoptimize-after-the-fact approach has no
> hope of
> >>> >>> working
> >>> >>> given the transformations for ifFalse:ifTrue: (swap
> arguments and
> >>> >>> transform
> >>> >>> to ifTrue:ifFalse:), ifNil:ifNotNil: et al. Better is to
> avoid
> >>> >>> transforming
> >>> >>> at all if in a cascade. So the attached is a start. It needs
> >>> >>> cleaning up,
> >>> >>> the older hack (ensureCanCascade:) removing and either all
> uses of
> >>> >>> receiver:selector:arguments:precedence:from:sourceRange:
> should use
> >>> >>>
> receiver:selector:arguments:precedence:from:sourceRange:canTransform:,
> >>> >>> or
> >>> >>> implement
> receiver:selector:arguments:precedence:from:sourceRange in
> >>> >>> terms
> >>> >>> of
> >>> >>>
> receiver:selector:arguments:precedence:from:sourceRange:canTransform.
> >>> >>> Anyway, test this and see how you get on.
> >>> >>>
> >>> >>> cheers,
> >>> >>> Eliot
> >>> >>>
> >>> >>> On Wed, Mar 2, 2011 at 11:46 AM, Juan Vuletich
> <juan at jvuletich.org <mailto:juan at jvuletich.org>
> >>> >>> <mailto:juan at jvuletich.org <mailto:juan at jvuletich.org>>>
> wrote:
> >>> >>>
> >>> >>> Hi Folks,
> >>> >>>
> >>> >>> commits at source.squeak.org
> <mailto:commits at source.squeak.org>
> <mailto:commits at source.squeak.org
> <mailto:commits at source.squeak.org>> wrote:
> >>> >>>
> >>> >>> Nicolas Cellier uploaded a new version of Compiler
> to project
> >>> >>> The Trunk:
> >>> >>> http://source.squeak.org/trunk/Compiler-nice.189.mcz
> >>> >>>
> >>> >>> ==================== Summary ====================
> >>> >>>
> >>> >>> Name: Compiler-nice.189
> >>> >>> Author: nice
> >>> >>> Time: 13 February 2011, 7:44:38.363 pm
> >>> >>> UUID: 3f6f02cd-1acf-48de-a388-b5ac55e27055
> >>> >>> Ancestors: Compiler-nice.188
> >>> >>>
> >>> >>> Enable cascading of special messages by
> deoptimizing, thanks
> >>> >>> Eliot.
> >>> >>> This is mostly useless, but it removes an arbitrary
> limitation
> >>> >>> of the language.
> >>> >>>
> >>> >>> =============== Diff against Compiler-nice.188
> ===============
> >>> >>>
> >>> >>> I integrated this nice code in Cuis, and tried:
> >>> >>>
> >>> >>> true ifTrue: [ Transcript cr; show: 'was true' ]; yourself
> >>> >>>
> >>> >>> I found that this works ok with the interpreter but
> does nothing
> >>> >>> in Cog. A bug, right?
> >>> >>>
> >>> >>> Cheers,
> >>> >>> Juan Vuletich
> >>> >>>
> >>> >>>
> >>> >>>
> >>> >>>
> ------------------------------------------------------------------------
> >>> >>>
> >>> >>>
> >>> >>>
> >>> >>>
> >>> >>>
> ------------------------------------------------------------------------
> >>> >>>
> >>> >>> No virus found in this message.
> >>> >>> Checked by AVG - www.avg.com <http://www.avg.com>
> <http://www.avg.com>
> >>> >>> Version: 10.0.1204 / Virus Database: 1435/3477 - Release Date:
> >>> >>> 03/02/11
> >>> >>>
> >>> >>
> >>> >>
> >>> >
> >>> >
> >>> >
> >>> >
> >>> >
> >>>
> >>
> >>
> >>
> >>
> >>
> >
>
>
>
>
> ------------------------------------------------------------------------
>
>
>
>
> ------------------------------------------------------------------------
>
> No virus found in this message.
> Checked by AVG - www.avg.com <http://www.avg.com>
> Version: 10.0.1204 / Virus Database: 1435/3477 - Release Date: 03/02/11
>
More information about the Squeak-dev
mailing list
|