Skip to content

Turbo: Optimize access patterns - #6626

Closed
staabm wants to merge 3 commits into
phpstan:2.3.xfrom
staabm:opti1
Closed

staabm wants to merge 3 commits into
phpstan:2.3.xfrom
staabm:opti1

Conversation

@staabm

@staabm staabm commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Optimization 1: Eliminate Temporary zv::Ref Allocations in TrinaryLogic Operations

Changes:
Optimized and_(), or_(), extremeIdentity(), maxMin() methods
Replaced zv::Ref(&rest[i]).deref().asObject() chains with direct ZVAL_DEREF() and Z_OBJ_P() macros
Optimized LazyEvaluation::run() and runExtremeIdentity() methods
Rationale:
TrinaryLogic operations are called millions of times per analysis
Eliminates temporary object allocations per iteration
Direct macro expansion compiles to single instructions on 64-bit systems
Expected gain: ~0.8-1.2% on runs with heavy TrinaryLogic usage


Optimization 2: Inline Z_TYPE_P Checks in Type Accessors

Changes:
Replaced zv::Ref(value.raw()).isObject() with direct Z_TYPE_P() checks
Replaced zv::Ref(value.raw()).asObject() with Z_OBJ_P() macros
Replaced zv::Ref(value.raw()).isLong() with Z_TYPE_P() checks
Replaced zv::Ref(value.raw()).asLong() with Z_LVAL_P() macros
Rationale:
These Type methods are called in hot loops (millions of times per analysis)
Eliminates temporary zv::Ref wrapper objects
Raw macro calls compile to single instructions vs. multi-instruction function calls
Improved L1 cache locality on 64-bit systems
Expected gain: ~1.1-1.5% on runs with heavy Type operations

@staabm staabm closed this Oct 1, 2026
@staabm
staabm deleted the opti1 branch October 1, 2026 06:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant