From: Andrea Corallo via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
To: Pip Cet <pipcet@gmail.com>
Cc: 46670@debbugs.gnu.org, Mauricio Collares <mauricio@collares.org>
Subject: bug#46670: 28.0.50; [feature/native-comp] possible miscompilation affecting lsp-mode
Date: Mon, 22 Feb 2021 09:37:55 +0000 [thread overview]
Message-ID: <xjfft1ol9xo.fsf@sdf.org> (raw)
In-Reply-To: <CAOqdjBdvRNUAXJUJuUCiBJqrC6AkP3yZQKj7gJNZ6Te=ZjObsw@mail.gmail.com> (Pip Cet's message of "Sun, 21 Feb 2021 22:46:29 +0000")
Pip Cet <pipcet@gmail.com> writes:
> On Sun, Feb 21, 2021 at 9:03 PM Andrea Corallo <akrl@sdf.org> wrote:
>> Pip Cet <pipcet@gmail.com> writes:
>>
>> > On Sun, Feb 21, 2021 at 11:51 AM Pip Cet <pipcet@gmail.com> wrote:
>> >> Does the attached patch help? Andrea, is my analysis correct?
>> >
>> > CCing Andrea.
>> >
>> > In more detail, some debugging showed we were trying to intersect a
>> > "nil or t" constraint with a "sequence" constraint, the result being a
>> > null constraint (t is not a sequence). So if (assume (and a b)) was
>> > meant to imply the intersection of a and b, we're emitting it
>> > incorrectly.
>>
>> Hi Pip,
>>
>> thanks for looking into this.
>
> Thanks for your explanation!
>
>> 'and' is meant to imply intersection, so yeah... as you guess there's
>> some problem in the LIMPLE we generate :)
>
> Thanks, I was on the wrong track there.
>
>> The correct fix is to have `comp-add-cond-cstrs' rewrite the comparison
>> sequence as something like:
>>
>> (set #(mvar nil X t) #(mvar 42082358 1 t))
>> (set #(mvar 41121566 1 boolean) (call equal #(mvar 42082358 1 t) #(mvar 41665638 2 sequence)))
>> (cond-jump #(mvar 41121566 1 boolean) #(mvar nil nil null) bb_2_cstrs_0 bb_1)
>>
>> Where X is a new slot we add to the frame. We will reference this slot
>> number in the assume instead of 1 so it does not get clobbered.
>
> Okay, I think I understand the problem (we don't do classical SSA and
> throw away the slot numbers), and your solution would avoid it, but it
> seems needlessly complicated to me.
Correct, ATM the assumption is that we keep LIMPLE always as
"conventional SSA form". This for a number of reasons but mainly it
greatly helps in maintaining the compiler simple.
I've experimented investing quite some effort into removing this
assumption but the result was definitely more complex and the produced
code considerably harder to debug. The only advantage I could see in
the end was having a simpler and more elegant
`comp-cond-cstrs-target-mvar' due to the fact that was trivial to
implement a copy propagation pass), so I deemed was a good move to keep
always the conventional form.
> Why create a new slot that isn't used anywhere? The value of the stack
> slot is clobbered by the (set ...), so we cannot emit any assumptions
> about that stack slot based on previous values it held.
Yes but in this case (and probably others) we *have* to emit this
assumption.
The best option is to decide that negative slot numbers are not rendered
into libgccjit IR and we consider these virtual to solve these kind of
cases. IIRC we already do something similar for the -1 index so this
concept has just to be generalized a bit.
> In fact, all we need to do is tell comp-cond-cstrs-target-mvar to
> return nil more often, isn't it?
Nope, the target mvar identified is the correct one, we just have ATM no
way to reference it reliably into the assume. BTW applying your patch
is breaking quite some of the comp-tests-ret-type-spec-* tests :)
Andrea
next prev parent reply other threads:[~2021-02-22 9:37 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-21 0:12 bug#46670: 28.0.50; [feature/native-comp] possible miscompilation affecting lsp-mode Mauricio Collares
2021-02-21 11:51 ` Pip Cet
2021-02-21 11:56 ` Pip Cet
2021-02-21 21:03 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-21 22:46 ` Pip Cet
2021-02-22 9:37 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors [this message]
2021-02-22 10:04 ` Pip Cet
2021-02-22 10:25 ` Pip Cet
2021-02-22 11:23 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-22 12:11 ` Pip Cet
2021-02-22 13:12 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-23 7:59 ` Pip Cet
2021-02-23 9:04 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-23 23:26 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-24 2:10 ` Mauricio Collares
2021-02-24 8:22 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-23 19:09 ` Pip Cet
2021-02-23 23:36 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-24 4:31 ` Pip Cet
2021-02-24 9:04 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-24 9:28 ` Pip Cet
2021-02-24 9:42 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-24 9:46 ` Pip Cet
2021-02-24 10:06 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-25 12:41 ` Pip Cet
2021-02-25 14:58 ` Eli Zaretskii
2021-02-25 15:14 ` Pip Cet
2021-02-25 15:31 ` Eli Zaretskii
2021-02-25 16:56 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-25 20:59 ` Pip Cet
2021-02-26 19:33 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-26 20:30 ` Pip Cet
2021-02-26 20:44 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-26 20:11 ` Eli Zaretskii
2021-02-26 20:32 ` Pip Cet
2021-02-27 5:06 ` Pip Cet
2021-02-27 7:49 ` Eli Zaretskii
2021-02-27 9:39 ` Pip Cet
2021-02-27 10:24 ` Eli Zaretskii
2021-02-27 12:39 ` Pip Cet
2021-02-27 13:30 ` Eli Zaretskii
2021-02-27 17:15 ` Pip Cet
2021-02-27 18:40 ` Eli Zaretskii
2021-02-28 8:14 ` Pip Cet
2021-03-01 5:24 ` Richard Stallman
2021-03-01 6:40 ` Pip Cet
2021-02-22 11:16 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-23 9:07 ` Pip Cet
2021-02-23 22:55 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-02-24 7:00 ` Pip Cet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xjfft1ol9xo.fsf@sdf.org \
--to=bug-gnu-emacs@gnu.org \
--cc=46670@debbugs.gnu.org \
--cc=akrl@sdf.org \
--cc=mauricio@collares.org \
--cc=pipcet@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.