aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2004-11-26 20:09:36 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-07 21:04:59 -0700
commita4d8f9e57df44fdc031020d465d9d483b4666d92 (patch)
treecca31285b2b62c29fe58fbf95a100906bff2242a /linearize.c
parentBe more careful about insn->bb pointers. (diff)
downloadsparse-a4d8f9e57df44fdc031020d465d9d483b4666d92.tar.gz
sparse-a4d8f9e57df44fdc031020d465d9d483b4666d92.tar.bz2
sparse-a4d8f9e57df44fdc031020d465d9d483b4666d92.zip
Fix pseudo->def on OP_PHI->OP_SEL conversion.
We forgot to set the "def" to point to the new OP_SEL instruction.
Diffstat (limited to 'linearize.c')
-rw-r--r--linearize.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/linearize.c b/linearize.c
index 19847ea..9fe911d 100644
--- a/linearize.c
+++ b/linearize.c
@@ -546,6 +546,7 @@ void insert_branch(struct basic_block *bb, struct instruction *jmp, struct basic
void insert_select(struct basic_block *bb, struct instruction *br, struct instruction *phi_node, pseudo_t true, pseudo_t false)
{
+ pseudo_t target;
struct instruction *setcc, *select;
/* Remove the 'br' */
@@ -558,7 +559,12 @@ void insert_select(struct basic_block *bb, struct instruction *br, struct instru
select = alloc_instruction(OP_SEL, phi_node->type);
select->bb = bb;
- select->target = phi_node->target;
+
+ target = phi_node->target;
+ assert(target->def == phi_node);
+ select->target = target;
+ target->def = select;
+
use_pseudo(true, &select->src1);
use_pseudo(false, &select->src2);