From: Dibyendu Majumdar <mobile@majumdar.org.uk>
To: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Cc: Linux-Sparse <linux-sparse@vger.kernel.org>
Subject: Re: Sparse-llvm question regarding handling of phi/phsrc instructions
Date: Thu, 7 Sep 2017 21:33:19 +0100 [thread overview]
Message-ID: <CACXZuxexgWjzvvZC-YNbzfaGuLyB+ovkJcdAkkySN8FF13XsrA@mail.gmail.com> (raw)
In-Reply-To: <CAExDi1RQ3HnnByw_y-jMpm1bH_yTMyQEVSLyCvGFzb8W9TpCXA@mail.gmail.com>
On 7 September 2017 at 21:25, Luc Van Oostenryck
<luc.vanoostenryck@gmail.com> wrote:
> 2017-09-07 18:04 GMT+02:00 Dibyendu Majumdar <mobile@majumdar.org.uk>:
>> The following code snippet:
>>
>> static int test_do(void) {
>> int a = 0;
>> int count = 27;
>> switch (count % 8) {
>> case 0: do { a++;
>> case 7: a++;
>> case 6: a++;
>> case 5: a++;
>> case 4: a++;
>> case 3: a++;
>> case 2: a++;
>> case 1: a++;
>> } while ((count -= 8) > 0);
>> }
>> return a;
>> }
>>
>> Results in following linear output:
>>
>> test_do:
>> .L0:
>> <entry-point>
>> phisrc.32 %phi3(a) <- $0
>> phisrc.32 %phi4(a) <- $0
>> phisrc.32 %phi6(a) <- $0
>> phisrc.32 %phi8(a) <- $0
>> phisrc.32 %phi10(a) <- $0
>> phisrc.32 %phi12(a) <- $0
>> phisrc.32 %phi14(a) <- $0
>> phisrc.32 %phi16(a) <- $0
>> phisrc.32 %phi18(a) <- $0
>> phisrc.32 %phi20(count) <- $27
>> br .L7
>>
>> .L10:
>> phi.32 %r3 <- %phi18(a), %phi19(a)
>> add.32 %r4 <- %r3, $1
>> phisrc.32 %phi17(a) <- %r4
>> phi.32 %r5 <- %phi16(a), %phi17(a)
>> ...
>>
>> This is translated to following LLVM IR:
>>
>> It seems to me that 'a' ends up having 9 different slots on the stack,
>> but it should really be merged into one slot, i.e. we should detect
>> that the phis all related to the same symbol, and create only one
>> alloca?
>
>
> Yes and no. It's just one of the problem with the SSA conversion
> as done in rc5.
> If you try the same code with newssa, you have something much
> saner, no?
>
Seems worse actually:
Here is a part of the linearized output pre simplifications. Note that
I haven't applied the fix you sent yesterday.
test_do:
.L0:
<entry-point>
mods.32 %r1 <- $27, $8
phisrc.32 %phi1(a) <- $0
phisrc.32 %phi3(a) <- $0
phisrc.32 %phi5(a) <- $0
phisrc.32 %phi7(a) <- $0
phisrc.32 %phi9(a) <- $0
phisrc.32 %phi11(a) <- $0
phisrc.32 %phi13(a) <- $0
phisrc.32 %phi15(count) <- $27
phisrc.32 %phi16(count) <- $27
phisrc.32 %phi17(count) <- $27
phisrc.32 %phi18(count) <- $27
phisrc.32 %phi19(count) <- $27
phisrc.32 %phi20(count) <- $27
phisrc.32 %phi21(count) <- $27
phisrc.32 %phi34(a) <- $0
switch.32 %r1, 0 -> .L2, 1 -> .L9, 2 -> .L8, 3 -> .L7, 4 -> .L6, 5
-> .L5, 6 -> .L4, 7 -> .L3, default -> .L1
.L2:
phisrc.32 %phi29(a) <- $0
phisrc.32 %phi31(count) <- $27
br .L10
next prev parent reply other threads:[~2017-09-07 20:33 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-07 16:04 Sparse-llvm question regarding handling of phi/phsrc instructions Dibyendu Majumdar
2017-09-07 20:25 ` Luc Van Oostenryck
2017-09-07 20:33 ` Dibyendu Majumdar [this message]
2017-09-08 10:11 ` Dibyendu Majumdar
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=CACXZuxexgWjzvvZC-YNbzfaGuLyB+ovkJcdAkkySN8FF13XsrA@mail.gmail.com \
--to=mobile@majumdar.org.uk \
--cc=linux-sparse@vger.kernel.org \
--cc=luc.vanoostenryck@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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).