From 062449ecd6a6b174ab33788dbc291615335524c4 Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Sat, 11 Aug 2012 16:38:17 +0200 Subject: [PATCH] ir_block_create_store_op checks whether or not the storetype is an SSA value - do not do that for storeP instructions --- ir.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/ir.c b/ir.c index d831176..f9e9fd2 100644 --- a/ir.c +++ b/ir.c @@ -906,22 +906,26 @@ bool ir_values_overlap(const ir_value *a, const ir_value *b) bool ir_block_create_store_op(ir_block *self, int op, ir_value *target, ir_value *what) { - if (target->store == store_value) { + ir_instr *in = ir_instr_new(self, op); + if (!in) + return false; + + if (target->store == store_value && + (op < INSTR_STOREP_F || op > INSTR_STOREP_FNC)) + { fprintf(stderr, "cannot store to an SSA value\n"); fprintf(stderr, "trying to store: %s <- %s\n", target->name, what->name); + fprintf(stderr, "instruction: %s\n", asm_instr[op].m); + return false; + } + + if (!ir_instr_op(in, 0, target, true) || + !ir_instr_op(in, 1, what, false) || + !ir_block_instr_add(self, in) ) + { return false; - } else { - ir_instr *in = ir_instr_new(self, op); - if (!in) - return false; - if (!ir_instr_op(in, 0, target, true) || - !ir_instr_op(in, 1, what, false) || - !ir_block_instr_add(self, in) ) - { - return false; - } - return true; } + return true; } bool ir_block_create_store(ir_block *self, ir_value *target, ir_value *what) -- 2.39.2