[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Adding Identities to Peval
From: |
David Kastrup |
Subject: |
Re: Adding Identities to Peval |
Date: |
Thu, 16 Feb 2012 09:14:21 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.0.92 (gnu/linux) |
David Kastrup <address@hidden> writes:
> David Kastrup <address@hidden> writes:
>
>> Noah Lavine <address@hidden> writes:
>>
>>> Hello,
>>>
>>> I've been working on a patch to add a new sort of optimization to
>>> peval, and I think it's almost ready. It's based on some of the ideas
>>> in "Environment Analysis of Higher-Order Languages".
>>>
>>> The goal is to recognize when two quantities are equal even when we
>>> don't know what they are. My working example has been this expression:
>>>
>>> (let* ((x (random))
>>> (y x))
>>> (eq? x y))
>>>
>>> The patch attached to this message lets peval optimize that to
>>>
>>> (begin (random) #t)
>>
>> I have a hard time imagining this optimization to be useful for any code
>> occuring in practice. Can you suggest an example that would make more
>> sense than demonstrating that the optimization works? Is this supposed
>> to help with automatically generated code like macros?
>
> Actually, I've been just racking my brain over how to write this better:
>
> {
> // We end only one slur unless several ones have been
> // caused by the same event, like with double slurs.
> if (!ended || scm_is_eq (starter,
> slurs_[j]->get_property ("cause")))
> {
> ended = true;
> starter = slurs_[j]->get_property ("cause");
> end_slurs_.push_back (slurs_[j]);
> slurs_.erase (slurs_.begin () + j);
> }
> }
>
> The problem is that if you enter the "if" through the second alternative
> condition, you can just jump past the first two assignments (because
> they assign values that are already known to be in the respective
> variables). I've not found a good way to handoptimize this short of
> using goto or abusing do ... while;
So if you want to make this into some sort of feedback: in this
particular case, the equality of some variables is not known because one
has been assigned to another, but because one has arrived from a code
path where the equality has been established by a test.
--
David Kastrup
- Adding Identities to Peval, Noah Lavine, 2012/02/15
- Re: Adding Identities to Peval, Mark H Weaver, 2012/02/15
- Re: Adding Identities to Peval, David Kastrup, 2012/02/16
- Re: Adding Identities to Peval, Andy Wingo, 2012/02/16
- Re: Adding Identities to Peval, Noah Lavine, 2012/02/16
- Re: Adding Identities to Peval, Andy Wingo, 2012/02/16
- Re: Adding Identities to Peval, Andy Wingo, 2012/02/16
- Re: Adding Identities to Peval, Noah Lavine, 2012/02/16
- Re: Adding Identities to Peval, Andy Wingo, 2012/02/17
- Re: Adding Identities to Peval, Noah Lavine, 2012/02/18
- Re: Adding Identities to Peval, Andy Wingo, 2012/02/19
- Re: Adding Identities to Peval, Noah Lavine, 2012/02/20