Exemple #1
0
/* 构造表达式的值,并将其添加到 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;
}
Exemple #2
0
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;
}