+ /* SREGs */
+ num_sregs = mono_inst_get_src_registers (ins, sregs);
+ for (i = 0; i < num_sregs; ++i) {
+ if (spec [MONO_INST_SRC1 + i] != ' ') {
+ MonoInst *var = get_vreg_to_inst (cfg, sregs [i]);
+ if (var && !(var->flags & (MONO_INST_VOLATILE|MONO_INST_INDIRECT))) {
+ int idx = var->inst_c0;
+ if (stack [idx]) {
+ if (var->opcode != OP_ARG)
+ g_assert (stack [idx]);
+ sregs [i] = stack [idx]->dreg;
+ record_use (cfg, stack [idx], bb, ins);
+ }
+ else
+ record_use (cfg, var, bb, ins);
+ }
+ else if (G_UNLIKELY (!var && lvreg_stack [sregs [i]]))
+ sregs [i] = lvreg_stack [sregs [i]];
+ }
+ }
+ mono_inst_set_src_registers (ins, sregs);
+
+ if (MONO_IS_STORE_MEMBASE (ins)) {
+ MonoInst *var = get_vreg_to_inst (cfg, ins->dreg);
+ if (var && !(var->flags & (MONO_INST_VOLATILE|MONO_INST_INDIRECT))) {
+ int idx = var->inst_c0;
+ if (stack [idx]) {
+ if (var->opcode != OP_ARG)
+ g_assert (stack [idx]);
+ ins->dreg = stack [idx]->dreg;
+ record_use (cfg, stack [idx], bb, ins);
+ }
+ else
+ record_use (cfg, var, bb, ins);
+ }
+ else if (G_UNLIKELY (!var && lvreg_stack [ins->dreg]))
+ ins->dreg = lvreg_stack [ins->dreg];
+ }