/* 构造表达式的值,并将其添加到 t,src1,src2三个变量的uses 中 */ void DefineTemp (Symbol t, int op, Symbol src1, Symbol src2) { ValueDef def; CALLOC(def); def->dst = t; def->op = op; def->src1 = src1; def->src2 = src2; def->ownBB = CurrentBB; /* 赋值和函数调用 */ if (op == MOV || op == CALL) { /* 将值添加到变量t 中 */ def->link = AsVar(t)->def; AsVar(t)->def = def; return; } /* 如果src1 和src2是变量则将值添加进去 */ if (src1->kind == SK_Variable) { TrackValueUse (src1, def); } if (src2 && src2->kind == SK_Variable) { TrackValueUse (src2, def); } AsVar(t)->def = def; }
void DefineTemp(Symbol t, int op, Symbol src1, Symbol src2) { ValueDef def; ALLOC(def); def->dst = t; def->op = op; def->src1 = src1; def->src2 = src2; def->ownBB = CurrentBB; if (op == MOV || op == CALL) { def->link = AsVar(t)->def; AsVar(t)->def = def; return; } if (src1->kind == SK_Variable) { TrackValueUse(src1, def); } if (src2 && src2->kind == SK_Variable) { TrackValueUse(src2, def); } AsVar(t)->def = def; }