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 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.