Permalink
Browse files

ir_instr can now store a list of parameters, will be used for CALLs

  • Loading branch information...
Blub committed Jun 28, 2012
1 parent 5500785 commit 2073834b9ac89a3db8e090d0cbe1c6ec0a03b1ef
Showing with 13 additions and 0 deletions.
  1. +12 −0 ir.c
  2. +1 −0 ir.h
View
12 ir.c
@@ -356,6 +356,7 @@ ir_instr* ir_instr_new(ir_block* owner, int op)
self->bops[0] = NULL;
self->bops[1] = NULL;
MEM_VECTOR_INIT(self, phi);
+ MEM_VECTOR_INIT(self, params);
self->eid = 0;
return self;
@@ -379,6 +380,14 @@ void ir_instr_delete(ir_instr *self)
if (ir_value_reads_remove (self->phi[i].value, idx)) GMQCC_SUPRESS_EMPTY_BODY;
}
MEM_VECTOR_CLEAR(self, phi);
+ for (i = 0; i < self->params_count; ++i) {
+ size_t idx;
+ if (ir_value_writes_find(self->params[i], self, &idx))
+ if (ir_value_writes_remove(self->params[i], idx)) GMQCC_SUPRESS_EMPTY_BODY;
+ if (ir_value_reads_find(self->params[i], self, &idx))
+ if (ir_value_reads_remove (self->params[i], idx)) GMQCC_SUPRESS_EMPTY_BODY;
+ }
+ MEM_VECTOR_CLEAR(self, params);
if (ir_instr_op(self, 0, NULL, false)) GMQCC_SUPRESS_EMPTY_BODY;
if (ir_instr_op(self, 1, NULL, false)) GMQCC_SUPRESS_EMPTY_BODY;
if (ir_instr_op(self, 2, NULL, false)) GMQCC_SUPRESS_EMPTY_BODY;
@@ -2109,6 +2118,9 @@ static bool gen_blocks_recursive(ir_function *func, ir_block *block)
}
if (instr->opcode >= INSTR_CALL0 && instr->opcode <= INSTR_CALL8) {
+ /* Trivial call translation:
+ * copy all params to OFS_PARM*
+ */
printf("TODO: call instruction\n");
return false;
}
View
1 ir.h
@@ -115,6 +115,7 @@ typedef struct ir_instr_s
struct ir_block_s* (bops[2]);
MEM_VECTOR_MAKE(ir_phi_entry_t, phi);
+ MEM_VECTOR_MAKE(ir_value*, params);
/* For the temp-allocation */
size_t eid;

0 comments on commit 2073834

Please sign in to comment.