Lines Matching refs:bb
312 static Bool is_stack_access(IRSB* const bb, IRExpr* const addr_expr)
319 for (i = 0; i < bb->stmts_used; i++)
321 if (bb->stmts[i]
322 && bb->stmts[i]->tag == Ist_WrTmp
323 && bb->stmts[i]->Ist.WrTmp.tmp == addr_expr->Iex.RdTmp.tmp)
325 IRExpr* e = bb->stmts[i]->Ist.WrTmp.data;
350 static IRExpr* instr_trace_mem_load(IRSB* const bb, IRExpr* addr_expr,
356 tmp = newIRTemp(bb->tyenv, typeOfIRExpr(bb->tyenv, addr_expr));
357 addStmtToIRSB(bb, IRStmt_WrTmp(tmp, addr_expr));
366 addStmtToIRSB(bb, IRStmt_Dirty(di));
374 static void instr_trace_mem_store(IRSB* const bb, IRExpr* const addr_expr,
382 tl_assert(!data_expr_hi || typeOfIRExpr(bb->tyenv, data_expr_hi) == Ity_I32);
384 ty_data_expr = typeOfIRExpr(bb->tyenv, data_expr_lo);
390 IRTemp tmp = newIRTemp(bb->tyenv, Ity_F32);
392 addStmtToIRSB(bb, IRStmt_WrTmp(tmp, data_expr_lo));
396 IRTemp tmp = newIRTemp(bb->tyenv, Ity_F64);
398 addStmtToIRSB(bb, IRStmt_WrTmp(tmp, data_expr_lo));
405 IRTemp tmp = newIRTemp(bb->tyenv, Ity_I32);
406 addStmtToIRSB(bb, IRStmt_WrTmp(tmp, IRExpr_Unop(Iop_ReinterpF32asI32,
411 IRTemp tmp = newIRTemp(bb->tyenv, Ity_I64);
412 addStmtToIRSB(bb, IRStmt_WrTmp(tmp, IRExpr_Unop(Iop_ReinterpF64asI64,
439 tmp = newIRTemp(bb->tyenv, sizeof(HWord) == 4 ? Ity_I32 : Ity_I64);
440 addStmtToIRSB(bb,
449 tmp = newIRTemp(bb->tyenv, Ity_I32);
450 addStmtToIRSB(bb,
454 tmp = newIRTemp(bb->tyenv, Ity_I32);
455 addStmtToIRSB(bb, IRStmt_WrTmp(tmp,
470 addStmtToIRSB(bb, IRStmt_Dirty(di) );
473 static void instrument_load(IRSB* const bb, IRExpr* const addr_expr,
481 if (!s_check_stack_accesses && is_stack_access(bb, addr_expr))
524 addStmtToIRSB(bb, IRStmt_Dirty(di));
527 static void instrument_store(IRSB* const bb, IRExpr* addr_expr,
536 size = sizeofIRType(typeOfIRExpr(bb->tyenv, data_expr));
539 IRTemp tmp = newIRTemp(bb->tyenv, typeOfIRExpr(bb->tyenv, addr_expr));
540 addStmtToIRSB(bb, IRStmt_WrTmp(tmp, addr_expr));
542 instr_trace_mem_store(bb, addr_expr, NULL, data_expr, guard_expr);
545 if (!s_check_stack_accesses && is_stack_access(bb, addr_expr))
588 addStmtToIRSB(bb, IRStmt_Dirty(di));
601 IRSB* bb;
605 /* Set up BB */
606 bb = emptyIRSB();
607 bb->tyenv = deepCopyIRTypeEnv(bb_in->tyenv);
608 bb->next = deepCopyIRExpr(bb_in->next);
609 bb->jumpkind = bb_in->jumpkind;
610 bb->offsIP = bb_in->offsIP;
629 addStmtToIRSB(bb, st);
642 addStmtToIRSB(bb, st);
647 instrument_store(bb, st->Ist.Store.addr, st->Ist.Store.data,
649 addStmtToIRSB(bb, st);
657 instrument_store(bb, addr, data, sg->guard);
658 addStmtToIRSB(bb, st);
670 addr_expr = instr_trace_mem_load(bb, addr_expr,
673 instrument_load(bb, lg->addr,
675 addStmtToIRSB(bb, st);
685 addr_expr = instr_trace_mem_load(bb, addr_expr,
689 instrument_load(bb, addr_expr, sizeofIRType(data->Iex.Load.ty),
693 addStmtToIRSB(bb, st);
715 addStmtToIRSB(bb, IRStmt_Dirty(di));
724 addStmtToIRSB(bb, IRStmt_Dirty(di));
731 addStmtToIRSB(bb, st);
749 dataSize = sizeofIRType(typeOfIRExpr(bb->tyenv, cas->dataLo));
754 instr_trace_mem_store(bb, cas->addr, cas->dataHi, cas->dataLo,
757 instrument_load(bb, cas->addr, dataSize, NULL/*no guard*/);
759 addStmtToIRSB(bb, st);
775 addr_expr = instr_trace_mem_load(bb, addr_expr,
779 instrument_load(bb, addr_expr, sizeofIRType(dataTy),
784 instr_trace_mem_store(bb, st->Ist.LLSC.addr, NULL,
788 addStmtToIRSB(bb, st);
798 addStmtToIRSB(bb, st);
807 return bb;