Lines Matching refs:ex
281 /* Flatten out 'ex' so it is atomic, returning a new expression with
285 static IRExpr* flatten_Expr ( IRSB* bb, IRExpr* ex )
289 IRType ty = typeOfIRExpr(bb->tyenv, ex);
292 switch (ex->tag) {
297 IRExpr_GetI(ex->Iex.GetI.descr,
298 flatten_Expr(bb, ex->Iex.GetI.ix),
299 ex->Iex.GetI.bias)));
305 IRStmt_WrTmp(t1, ex));
309 IRQop* qop = ex->Iex.Qop.details;
321 IRTriop* triop = ex->Iex.Triop.details;
334 IRExpr_Binop(ex->Iex.Binop.op,
335 flatten_Expr(bb, ex->Iex.Binop.arg1),
336 flatten_Expr(bb, ex->Iex.Binop.arg2))));
342 IRExpr_Unop(ex->Iex.Unop.op,
343 flatten_Expr(bb, ex->Iex.Unop.arg))));
349 IRExpr_Load(ex->Iex.Load.end,
350 ex->Iex.Load.ty,
351 flatten_Expr(bb, ex->Iex.Load.addr))));
355 newargs = shallowCopyIRExprVec(ex->Iex.CCall.args);
360 IRExpr_CCall(ex->Iex.CCall.cee,
361 ex->Iex.CCall.retty,
368 IRExpr_ITE(flatten_Expr(bb, ex->Iex.ITE.cond),
369 flatten_Expr(bb, ex->Iex.ITE.iftrue),
370 flatten_Expr(bb, ex->Iex.ITE.iffalse))));
376 if (ex->Iex.Const.con->tag == Ico_F64i) {
379 IRExpr_Const(ex->Iex.Const.con)));
383 return ex;
387 return ex;
391 ppIRExpr(ex);
2366 static IRExpr* subst_Expr ( IRExpr** env, IRExpr* ex )
2368 switch (ex->tag) {
2370 if (env[(Int)ex->Iex.RdTmp.tmp] != NULL) {
2371 IRExpr *rhs = env[(Int)ex->Iex.RdTmp.tmp];
2379 return ex;
2383 return ex;
2386 vassert(isIRAtom(ex->Iex.GetI.ix));
2388 ex->Iex.GetI.descr,
2389 subst_Expr(env, ex->Iex.GetI.ix),
2390 ex->Iex.GetI.bias
2394 IRQop* qop = ex->Iex.Qop.details;
2409 IRTriop* triop = ex->Iex.Triop.details;
2422 vassert(isIRAtom(ex->Iex.Binop.arg1));
2423 vassert(isIRAtom(ex->Iex.Binop.arg2));
2425 ex->Iex.Binop.op,
2426 subst_Expr(env, ex->Iex.Binop.arg1),
2427 subst_Expr(env, ex->Iex.Binop.arg2)
2431 vassert(isIRAtom(ex->Iex.Unop.arg));
2433 ex->Iex.Unop.op,
2434 subst_Expr(env, ex->Iex.Unop.arg)
2438 vassert(isIRAtom(ex->Iex.Load.addr));
2440 ex->Iex.Load.end,
2441 ex->Iex.Load.ty,
2442 subst_Expr(env, ex->Iex.Load.addr)
2447 IRExpr** args2 = shallowCopyIRExprVec(ex->Iex.CCall.args);
2453 ex->Iex.CCall.cee,
2454 ex->Iex.CCall.retty,
2460 vassert(isIRAtom(ex->Iex.ITE.cond));
2461 vassert(isIRAtom(ex->Iex.ITE.iftrue));
2462 vassert(isIRAtom(ex->Iex.ITE.iffalse));
2464 subst_Expr(env, ex->Iex.ITE.cond),
2465 subst_Expr(env, ex->Iex.ITE.iftrue),
2466 subst_Expr(env, ex->Iex.ITE.iffalse)
2470 vex_printf("\n\n"); ppIRExpr(ex);
3112 IRExpr* ex;
3122 ex = (*specHelper)( st->Ist.WrTmp.data->Iex.CCall.cee->name,
3125 if (!ex)
3132 = IRStmt_WrTmp(st->Ist.WrTmp.tmp, ex);
3138 ppIRExpr(ex);