Compiler Instrumenting Rewriter for Source Code Runtime Data Collection

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Existing instrumentation techniques are limited by their inability to dynamically collect runtime behavior data without predefined instrumentations, and they struggle to maintain accurate correspondence between collected information and source code, especially when language constructs undergo significant transformation during compilation.

Innovation Solution

A compiler-based approach that instruments programs during the front-end compilation by rewriting high-level instrumentation-eligible constructs into lower-level constructs in an intermediate representation, allowing for dynamic data collection and extensibility of instrumentation without reprogramming the compiler, by providing specific language constructs and instrumentation code at compile time.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Measurement precision

If instrumentation is added manually to source code, then measurement precision is improved, but device complexity and ease of operation deteriorate

Engineering Contradiction:
Improvemeasurement precisionVSAvoiddevice complexity
Core Design Contradiction:
Measurement precisionVSDevice complexity

Solution Approach 1:

The patent applies preliminary action by performing instrumentation during the front-end compilation phase, before code generation. The instrumenting rewriter processes the un-instrumented bound tree and inserts instrumentation code at appropriate locations automatically during compilation, eliminating the need for manual instrumentation while maintaining measurement precision.

Inventive Principle:
Principle #10Preliminary action

Solution Approach 2:

The patent uses an instrumenting rewriter as an intermediary between the semantic analysis phase and the code generation phase. This intermediary component automatically transforms the un-instrumented bound tree into an instrumented bound tree by inserting instrumentation code, resolving the contradiction between manual precision and automated simplicity.

Inventive Principle:
Principle #24Intermediary (Mediator)

2Ease of operation

If instrumentation is added automatically by compiler, then ease of operation is improved, but measurement precision and reliability deteriorate

Engineering Contradiction:
Improveease of operationVSAvoidmeasurement precision
Core Design Contradiction:
Ease of operationVSMeasurement precision

Solution Approach 1:

The patent implements feedback by maintaining correspondence between the instrumented code and the original source code through the bound tree structure. The instrumenting rewriter uses the semantic analysis results to accurately identify instrumentation points, ensuring that automated instrumentation maintains measurement precision by understanding the program's semantic structure.

Inventive Principle:
Principle #23Feedback

3Productivity

If instrumentation occurs after compilation, then productivity is improved, but measurement precision and correspondence with source code deteriorate

Engineering Contradiction:
ImproveproductivityVSAvoidmeasurement precision
Core Design Contradiction:
ProductivityVSMeasurement precision

Solution Approach 1:

The patent performs instrumentation as a preliminary action during the front-end compilation phase, specifically between semantic analysis and code generation. This timing allows the instrumenting rewriter to access the bound tree structure which maintains correspondence with source code, enabling both early instrumentation and accurate measurement.

Inventive Principle:
Principle #10Preliminary action

4Device complexity

If predefined instrumentation is used, then device complexity is reduced, but adaptability deteriorates

Engineering Contradiction:
Improvedevice complexityVSAvoidadaptability
Core Design Contradiction:
Device complexityVSAdaptability or versatility

Solution Approach 1:

The patent applies dynamics by making the instrumentation process configurable and adaptable through compiler options and parameters. Users can specify which language constructs to instrument and what type of instrumentation to apply, allowing the system to adapt to different measurement needs without changing the compiler's core structure.

Inventive Principle:
Principle #15Dynamics

5Productivity

If language constructs undergo transformation during compilation, then productivity is improved, but maintaining correspondence with source code becomes difficult

Engineering Contradiction:
ImproveproductivityVSAvoidloss of information
Core Design Contradiction:
ProductivityVSLoss of information

Solution Approach 1:

The patent performs instrumentation as a preliminary action during the front-end compilation phase, before the middle-end optimizations and back-end code generation. At this stage, the bound tree structure still maintains clear correspondence with the original source code constructs, allowing accurate instrumentation before transformations occur.

Inventive Principle:
Principle #10Preliminary action

Data Source

PatentUS10809985B2Instrumenting program code
Publication Date: 2020.10.20 MICROSOFT TECHNOLOGY LICENSING LLC
  • US10809985B2 patent drawing
  • US10809985B2 patent drawing
  • US10809985B2 patent drawing

AI summary

A compiler can instrument a program during the front end of compilation to collect data about runtime behavior when the program is executed. Instrumentation can occur during source language processing rather than later in the compilation chain. The instrumentation can occur in between semantic analysis and code generation. The instrumentation can occur in an instrumenting rewriting phase. The instrumentation can occur in a first lowering phase in which high level constructs in a programming language are rewritten as lower level constructs in intermediate representation (IR). The compiler can inject the instrumentation code at particular points in the source code based on specified language constructs in the source program. The types of instrumentation injected can be extended by providing additional information to the compiler at compilation time, without the need to reprogram the compiler.