From: Kamil Dudka <kdudka@redhat.com>
To: sparse <linux-sparse@vger.kernel.org>
Subject: [PATCH] cse: treat PHI-nodes as other instructions
Date: Sun, 9 Aug 2009 23:15:12 +0200 [thread overview]
Message-ID: <200908092315.12957.kdudka@redhat.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 424 bytes --]
Hello,
I've encountered a bug in the cse (over-)optimization. A patch, testing input
for test-linearize and its outputs before/after patch are attached.
Note there is still something odd which the attached test-case revealed. The
output of test-unssa still contains two (4 without my previous patch applied)
unprocessed phisrc nodes. As time permits I'll try to write another for it if
nobody will be faster ;-)
Kamil
[-- Attachment #2: cse-bug-after_patch.out --]
[-- Type: text/plain, Size: 467 bytes --]
test:
.L0x7fbd14330010
<entry-point>
phisrc.32 %phi1(i) <- %arg1
phisrc.32 %phi4(i) <- %arg1
br .L0x7fbd14330130
.L0x7fbd14330130
copy.32 %r1(i) <- %r5(i)
br %r1(i), .L0x7fbd14330178, .L0x7fbd143300e8
.L0x7fbd14330178
call test, $0
br .L0x7fbd143301c0
.L0x7fbd143301c0
add.32 %r4 <- %r1(i), $1
phisrc.32 %phi2(i) <- %r4
phisrc.32 %phi5(i) <- %r4
br .L0x7fbd14330130
.L0x7fbd143300e8
ret
[-- Attachment #3: cse-bug-input.c --]
[-- Type: text/x-csrc, Size: 99 bytes --]
static void test(int i)
{
while (i) {
if (i)
test(0);
i++;
}
}
[-- Attachment #4: cse-bug-before_patch.out --]
[-- Type: text/plain, Size: 455 bytes --]
test:
.L0x7f43c1f02010
<entry-point>
phisrc.32 %phi1(i) <- %arg1
phisrc.32 %phi4(i) <- %arg1
br .L0x7f43c1f02130
.L0x7f43c1f02130
br %r3, .L0x7f43c1f02178, .L0x7f43c1f020e8
.L0x7f43c1f02178
call test, $0
br .L0x7f43c1f021c0
.L0x7f43c1f021c0
copy.32 %r3 <- %r5
add.32 %r4 <- %r3, $1
phisrc.32 %phi2(i) <- %r4
phisrc.32 %phi5(i) <- %r4
br .L0x7f43c1f02130
.L0x7f43c1f020e8
ret
[-- Attachment #5: 0001-cse-treat-PHI-nodes-as-other-instructions.patch --]
[-- Type: text/x-diff, Size: 981 bytes --]
From 7658e89de5b2568d1a8663277c306b6f009b7ca7 Mon Sep 17 00:00:00 2001
From: Kamil Dudka <kdudka@redhat.com>
Date: Sun, 9 Aug 2009 22:43:17 +0200
Subject: [PATCH] cse: treat PHI-nodes as other instructions
Without this patch test-linearize fails on a simple example:
static void test(int i)
{
while (i) {
if (i)
test(0);
i++;
}
}
It generates a conditional jump depending on an uninitialized value
which is obviously not in the input code.
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
---
cse.c | 7 -------
1 files changed, 0 insertions(+), 7 deletions(-)
diff --git a/cse.c b/cse.c
index 2a15745..2aabb65 100644
--- a/cse.c
+++ b/cse.c
@@ -317,13 +317,6 @@ static struct instruction * try_to_cse(struct entrypoint *ep, struct instruction
b2 = i2->bb;
/*
- * PHI-nodes do not care where they are - the only thing that matters
- * are the PHI _sources_.
- */
- if (i1->opcode == OP_PHI)
- return cse_one_instruction(i1, i2);
reply other threads:[~2009-08-09 21:15 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=200908092315.12957.kdudka@redhat.com \
--to=kdudka@redhat.com \
--cc=linux-sparse@vger.kernel.org \
/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).