* [PATCH] cse: treat PHI-nodes as other instructions
@ 2009-08-09 21:15 Kamil Dudka
0 siblings, 0 replies; only message in thread
From: Kamil Dudka @ 2009-08-09 21:15 UTC (permalink / raw)
To: sparse
[-- 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);
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2009-08-09 21:15 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-09 21:15 [PATCH] cse: treat PHI-nodes as other instructions Kamil Dudka
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.