/* Adds instrumented versions of the unspecialized bytecode. */ static void add_instrumentation(MVMThreadContext *tc, MVMStaticFrame *sf) { MVMSpeshCode *sc; MVMSpeshGraph *sg = MVM_spesh_graph_create(tc, sf, 1); instrument_graph(tc, sg); sc = MVM_spesh_codegen(tc, sg); sf->body.instrumented_bytecode = sc->bytecode; sf->body.instrumented_handlers = sc->handlers; sf->body.instrumented_bytecode_size = sc->bytecode_size; sf->body.uninstrumented_bytecode = sf->body.bytecode; sf->body.uninstrumented_handlers = sf->body.handlers; sf->body.uninstrumented_bytecode_size = sf->body.bytecode_size; MVM_spesh_graph_destroy(tc, sg); MVM_free(sc); }
/* Adds instrumented version of the unspecialized bytecode. */ static void add_instrumentation(MVMThreadContext *tc, MVMStaticFrame *sf, MVMuint8 want_coverage) { MVMSpeshCode *sc; MVMStaticFrameInstrumentation *ins; MVMSpeshGraph *sg = MVM_spesh_graph_create(tc, sf, 1, 0); if (want_coverage) instrument_graph(tc, sg); else instrument_graph_with_breakpoints(tc, sg); sc = MVM_spesh_codegen(tc, sg); ins = sf->body.instrumentation; if (!ins) ins = MVM_calloc(1, sizeof(MVMStaticFrameInstrumentation)); ins->instrumented_bytecode = sc->bytecode; ins->instrumented_handlers = sc->handlers; ins->instrumented_bytecode_size = sc->bytecode_size; ins->uninstrumented_bytecode = sf->body.bytecode; ins->uninstrumented_handlers = sf->body.handlers; ins->uninstrumented_bytecode_size = sf->body.bytecode_size; sf->body.instrumentation = ins; MVM_spesh_graph_destroy(tc, sg); MVM_free(sc); }