From: Wolfgang (Blub) Bumiller <blub@speed.at>
Date: Sat, 11 Aug 2012 14:38:17 +0000 (+0200)
Subject: ir_block_create_store_op checks whether or not the storetype is an SSA value - do... 
X-Git-Tag: 0.1-rc1~349^2~18
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=062449ecd6a6b174ab33788dbc291615335524c4;p=xonotic%2Fgmqcc.git

ir_block_create_store_op checks whether or not the storetype is an SSA value - do not do that for storeP instructions
---

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)