unssa: track uses when replacing a phi node
PATCH 1/1 unssa: track uses when replacing a phi node
Hello,
attached are patch, testing input for test-unssa and its outputs before patch and after patch. Thanks in advance for considering the patch!
Kamil
test:
.L0x7f9fb2030010
<entry-point> phisrc.32 %phi2(ptr) <- %arg1 br .L0x7f9fb2030130
.L0x7f9fb2030130
copy.32 %r1(ptr) <- %r5(ptr) br %r1(ptr), .L0x7f9fb2030058, .L0x7f9fb20300e8
.L0x7f9fb2030058
load.32 %r3 <- 0[%r1(ptr)] phisrc.32 %phi3(ptr) <- %r3 br .L0x7f9fb2030130
.L0x7f9fb20300e8
ret
static void test(void **ptr)
{
while (ptr) {
ptr = *ptr;
}
}test:
.L0x7f4a7f7f1010
<entry-point> copy.32 %r5(ptr) <- %arg1 br .L0x7f4a7f7f1130
.L0x7f4a7f7f1130
copy.32 %r1(ptr) <- %r5(ptr) br %r1(ptr), .L0x7f4a7f7f1058, .L0x7f4a7f7f10e8
.L0x7f4a7f7f1058
load.32 %r3 <- 0[%r1(ptr)] copy.32 %r5(ptr) <- %r3 br .L0x7f4a7f7f1130
.L0x7f4a7f7f10e8
ret
From 66a02fa7cec780fc88d6ef4cce7a1e704928808a Mon Sep 17 00:00:00 2001
From: Kamil Dudka <[email protected]>
Date: Sun, 9 Aug 2009 10:22:11 +0200
Subject: [PATCH] unssa: track uses when replacing a phi node
The output of test-unssa is inconsistent for a simple test-case without this patch:
static void test(void **ptr)
{
while (ptr) {
ptr = *ptr;
}
}--- flow.h | 1 + liveness.c | 2 +- unssa.c | 2 ++ 3 files changed, 4 insertions(+), 1 deletions(-)
flow.h +1 -0
@@ -29,6 +29,7 @@ int dominates(pseudo_t pseudo, struct instruction *insn, struct instruction *domextern void clear_liveness (struct entrypoint *ep);extern void track_pseudo_liveness (struct entrypoint *ep);extern void track_pseudo_death (struct entrypoint *ep); +extern void track_phi_uses (struct instruction *insn);extern void vrfy_flow (struct entrypoint *ep);extern int pseudo_in_list (struct pseudo_list *list,pseudo_t pseudo);
liveness.c +1 -1
@@ -279,7 +279,7 @@ static void merge_pseudo_list(struct pseudo_list *src, struct pseudo_list **dest }END_FOR_EACH_PTR (pseudo); } -static void track_phi_uses (struct instruction *insn) +void track_phi_uses (struct instruction *insn) {pseudo_t phi; FOR_EACH_PTR(insn->phi_list, phi) {
unssa.c +2 -0
@@ -26,6 +26,7 @@#include "lib.h" #include "linearize.h" #include "allocate.h" +#include "flow.h" #include <assert.h>
@@ -51,6 +52,7 @@ static void replace_phi_node(struct instruction *phi)// update the current liveness remove_pseudo (&phi->bb->needs, phi->target);add_pseudo (&phi->bb->needs, tmp); +track_phi_uses (phi); phi->opcode =OP_COPY ; phi->src = tmp;
Signature · 1 line
1.6.4
Christopher Li
maintainerQuoted 7 lines · Kamil Dudka
Hello,
attached are patch, testing input for test-unssa and its outputs before patch and after patch. Thanks in advance for considering the patch!
Kamil
Looks good to me. Thanks for the patch.
Chris