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

This commit is contained in:
Wolfgang (Blub) Bumiller 2012-06-28 15:50:51 +02:00
parent 5500785d16
commit 2073834b9a
2 changed files with 13 additions and 0 deletions

12
ir.c
View file

@ -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 @@ tailcall:
}
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;
}

1
ir.h
View file

@ -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;