mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
`IRBlock` contains a few expensive predicates, mostly `getInstruction` and `immediatelyDominates`. These were previously recomputed for each of the three SSA layers even though they essentially produce the same result in each layer. The only difference between the three types of `IRBlock` is the phi nodes. This commit changes the representation of `IRBlock` for `ssa` and `aliased_ssa` so they become just wrappers around the `IRBlock` of their previous layer. Most predicates in later layers are then computed from the corresponding predicate of the preceding layer.