for (i = get_irn_arity(irn) - 1; i >= 0; --i) {
ir_node *op = get_irn_n(irn, i);
-
+ ir_node *copy;
const arch_register_t *reg;
arch_register_req_t req;
continue;
arch_get_register_req(aenv, &req, irn, i);
-
if (!arch_register_req_is(&req, limited))
continue;
if (bitset_is_set(tmp, reg->index))
continue;
- ir_node *copy = be_new_Copy(env->cls, env->irg, bl, op);
+ copy = be_new_Copy(env->cls, env->irg, bl, op);
be_stat_ev("constr_copy", 1);
sched_add_before(irn, copy);
for(i = insn->use_start; i < insn->n_ops; ++i) {
be_operand_t *op = &insn->ops[i];
- if(op->has_constraints) {
- for(j = i + 1; j < insn->n_ops; ++j) {
- be_operand_t *a_op = &insn->ops[j];
+ if(!op->has_constraints)
+ continue;
+
+ for(j = i + 1; j < insn->n_ops; ++j) {
+ ir_node *copy;
+ be_operand_t *a_op = &insn->ops[j];
- if(a_op->carrier == op->carrier && a_op->has_constraints) {
- ir_node *copy = be_new_Copy(env->cls, env->irg, bl, op->carrier);
- be_stat_ev("constr_copy", 1);
+ if(a_op->carrier != op->carrier || !a_op->has_constraints)
+ continue;
- sched_add_before(insn->irn, copy);
- set_irn_n(insn->irn, a_op->pos, copy);
- DBG((env->dbg, LEVEL_3, "inserting multiple constr copy %+F for %+F pos %d\n", copy, insn->irn, a_op->pos));
- }
- }
+ copy = be_new_Copy(env->cls, env->irg, bl, op->carrier);
+ be_stat_ev("constr_copy", 1);
+
+ sched_add_before(insn->irn, copy);
+ set_irn_n(insn->irn, a_op->pos, copy);
+ DBG((env->dbg, LEVEL_3, "inserting multiple constr copy %+F for %+F pos %d\n", copy, insn->irn, a_op->pos));
}
}
and being constrained to a register which also occurs in out constraints.
*/
for(i = insn->use_start; i < insn->n_ops; ++i) {
+ ir_node *copy;
be_operand_t *op = &insn->ops[i];
bitset_copy(tmp, op->regs);
Copies and Keeps for operands which must be different from the results.
Additional copies here would destroy this.
*/
- if(!be_is_Copy(op->carrier)) {
- ir_node *copy = be_new_Copy(env->cls, env->irg, bl, op->carrier);
+ if(be_is_Copy(op->carrier))
+ continue;
- sched_add_before(insn->irn, copy);
- set_irn_n(insn->irn, op->pos, copy);
- DBG((env->dbg, LEVEL_3, "inserting constr copy %+F for %+F pos %d\n", copy, insn->irn, op->pos));
- be_liveness_update(lv, op->carrier);
- }
+ copy = be_new_Copy(env->cls, env->irg, bl, op->carrier);
+
+ sched_add_before(insn->irn, copy);
+ set_irn_n(insn->irn, op->pos, copy);
+ DBG((env->dbg, LEVEL_3, "inserting constr copy %+F for %+F pos %d\n", copy, insn->irn, op->pos));
+ be_liveness_update(lv, op->carrier);
}
end: