Binary Code Optimization for Constant Loading

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Current compilers face inefficiencies in optimizing code for memory operations due to limited scope, leading to redundant address calculations and memory references, which affect performance and slow down application development.

Innovation Solution

Employing program analysis to identify and optimize code fragments that load constants by eliminating address computing operations, converting load operations into more efficient ones, and removing redundant operations, using control flow and data flow analysis to transform memory access operations into register operations.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Adaptability or versatility

If compilers generate code that loads constants at run-time to handle externally-defined constants, then the code can access constants from other modules, but redundant address calculations and memory references are created, worsening performance

Engineering Contradiction:
Improveability to access externally-defined constantsVSAvoidapplication performance
Core Design Contradiction:
Adaptability or versatilityVSProductivity

Solution Approach 1:

The patent performs preliminary analysis during compilation to identify constants that will be loaded at run-time. By analyzing control flow and data flow in advance, the compiler can prepare optimized code that eliminates redundant address calculations while still maintaining the ability to access externally-defined constants. This preliminary action allows the system to avoid performance penalties without sacrificing adaptability.

Inventive Principle:
Principle #10Preliminary action

2Adaptability or versatility

If developers use offset tables to handle structure changes at runtime, then the application becomes flexible to structure modifications, but each field access incurs redundant load operations with associated redundant instructions, slowing down execution

Engineering Contradiction:
Improveflexibility to structure changesVSAvoidexecution time
Core Design Contradiction:
Adaptability or versatilityVSLoss of time

Solution Approach 1:

The patent extracts the redundant offset loading operations from the field access path. By analyzing the offset table usage patterns and identifying constants that are loaded but never used, the system removes these unnecessary load operations. This extraction maintains the flexibility of using offset tables for structure changes while eliminating the time-consuming redundant loads and instructions.

Inventive Principle:
Principle #2Taking out (Extraction)

Solution Approach 2:

The patent identifies and discards redundant constant loading operations that occur in offset table access patterns. By analyzing which constants are loaded from offset tables but subsequently unused or replaceable with compile-time constants, the system discards these redundant operations. This recovery of performance is achieved without sacrificing the adaptability benefits of runtime structure handling.

Inventive Principle:
Principle #34Discarding and recovering

3Ease of manufacture

If compilers optimize code within a single module scope, then optimization is simpler and faster, but the optimization scope is limited and inefficient code is generated for cross-module constant access

Engineering Contradiction:
Improveoptimization simplicityVSAvoidcode efficiency
Core Design Contradiction:
Ease of manufactureVSProductivity

Solution Approach 1:

The patent extends the compiler's optimization capability to work across multiple modules by implementing inter-module control flow and data flow analysis. The optimization system becomes universal, handling both intra-module and inter-module constant access patterns. This multi-functionality allows the compiler to generate efficient code for cross-module constant access while maintaining the simplicity of single-module optimization techniques where applicable.

Inventive Principle:
Principle #6Universality (Multi-functionality)

Data Source

PatentUS7873952B2Code transformation to optimize fragments that implement constant loading
Publication Date: 2011.01.18 ORACLE AMERICAN INC
  • US7873952B2 patent drawing
  • US7873952B2 patent drawing
  • US7873952B2 patent drawing

AI summary

A code, which may be a post-link binary or a pre-link object file, can be transformed to optimize code fragments that implement loading a constant from memory. A constant loading code fragment includes address computing operations that compute (or copy) an address representation of a constant for consumption by a memory access operation, and the memory access operation that loads the constant. Information from control flow analysis, data flow analysis, and binary structure/configuration analysis are examined to identify code fragments of a code that implement constant loading. A tool transforms the code to convert the identified code fragments. To optimize, the tool may convert operations, eliminate operations, convert indirect calls to direct calls, inline functions called indirectly, eliminate unused constant data, modify relocations, etc. This optimization can also be applied recursively. The same tool or another tool can subsequently analyze the transformed code one more times to identify additional opportunities for optimizations revealed by the transformation or to apply the transformation for a different profile of the application.