aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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);