Skip to content

Commit 7aa084c

Browse files
committed
C++: Fix join in AliasedSSA.
Before (on an internal Microsoft repo): Evaluated relational algebra for predicate AliasedSSA::AllocationMemoryLocation.getVirtualVariable/0#dispred#8debd926@f62ba08v with tuple counts: 5606472 ~0% {2} r1 = AliasedSSA::AllocationMemoryLocation#57439a9b_10#join_rhs AND NOT `AliasAnalysis::allocationEscapes/1#93dc9772`(FIRST 1) 5534569 ~0% {2} r2 = r1 AND NOT `project#AliasedSSA::getGroupedMemoryLocation/3#14ef79fc#ffbf`(FIRST 1) 10613026097 ~0% {2} | JOIN WITH AliasedSSA::AllocationMemoryLocation#57439a9b_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1 5534569 ~6% {2} | JOIN WITH AliasedSSA::VirtualVariable#5712df39 ON FIRST 1 OUTPUT Lhs.1, Lhs.0 759836 ~0% {2} r3 = JOIN AliasedSSA::AllocationMemoryLocation#57439a9b_10#join_rhs WITH `AliasAnalysis::allocationEscapes/1#93dc9772` ON FIRST 1 OUTPUT Lhs.0, Lhs.1 759832 ~6% {3} | JOIN WITH `AliasConfiguration::Allocation.getEnclosingIRFunction/0#dispred#3254a7ee` ON FIRST 1 OUTPUT Rhs.1, _, Lhs.1 759832 ~0% {3} | REWRITE WITH Out.1 := false 759832 ~1% {2} | JOIN WITH num#AliasedSSA::TAllAliasedMemory#4bb632db ON FIRST 2 OUTPUT Rhs.2, Lhs.2 759832 ~1% {2} | JOIN WITH AliasedSSA::VirtualVariable#5712df39 ON FIRST 1 OUTPUT Lhs.1, Lhs.0 5606472 ~0% {4} r4 = SCAN r1 OUTPUT In.0, _, _, In.1 5606472 ~0% {4} | REWRITE WITH Out.1 := false, Out.2 := false 71903 ~5% {2} | JOIN WITH `AliasedSSA::getGroupedMemoryLocation/3#14ef79fc#ffbf` ON FIRST 3 OUTPUT Rhs.3, Lhs.3 71903 ~3% {2} | JOIN WITH `AliasedSSA::GroupedMemoryLocation.getVirtualVariable/0#dispred#143f2d1b` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 71903 ~2% {2} | JOIN WITH AliasedSSA::VirtualVariable#5712df39 ON FIRST 1 OUTPUT Lhs.1, Lhs.0 6366304 ~5% {2} r5 = r2 UNION r3 UNION r4 return r5 After: [2026-09-03 14:39:34] Evaluated non-recursive predicate AliasedSSA::getAllocationMemoryLocation/1#171552fa@42e30agr in 15ms (size: 505315). Evaluated relational algebra for predicate AliasedSSA::getAllocationMemoryLocation/1#171552fa@42e30agr with tuple counts: 505315 ~2% {2} r1 = JOIN AliasedSSA::VirtualVariable#5712df39 WITH `AliasedSSA::MemoryLocation0.getAnAllocation/0#dispred#f0047858` ON FIRST 1 OUTPUT Rhs.1, Lhs.0 return r1 [2026-09-03 14:39:39] Evaluated non-recursive predicate AliasedSSA::AllocationMemoryLocation.getVirtualVariable/0#dispred#8debd926@21855asb in 1811ms (size: 6366304). Evaluated relational algebra for predicate AliasedSSA::AllocationMemoryLocation.getVirtualVariable/0#dispred#8debd926@21855asb with tuple counts: 5606472 ~0% {2} r1 = AliasedSSA::AllocationMemoryLocation#57439a9b_10#join_rhs AND NOT `AliasAnalysis::allocationEscapes/1#93dc9772`(FIRST 1) 5534569 ~0% {2} r2 = r1 AND NOT `project#AliasedSSA::getGroupedMemoryLocation/3#14ef79fc#ffbf`(FIRST 1) 5534569 ~1% {2} | JOIN WITH `AliasedSSA::getAllocationMemoryLocation/1#171552fa` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 5534569 ~6% {2} | JOIN WITH AliasedSSA::VirtualVariable#5712df39 ON FIRST 1 OUTPUT Lhs.1, Lhs.0 759836 ~0% {2} r3 = JOIN AliasedSSA::AllocationMemoryLocation#57439a9b_10#join_rhs WITH `AliasAnalysis::allocationEscapes/1#93dc9772` ON FIRST 1 OUTPUT Lhs.0, Lhs.1 759832 ~6% {3} | JOIN WITH `AliasConfiguration::Allocation.getEnclosingIRFunction/0#dispred#3254a7ee` ON FIRST 1 OUTPUT Rhs.1, _, Lhs.1 759832 ~0% {3} | REWRITE WITH Out.1 := false 759832 ~1% {2} | JOIN WITH num#AliasedSSA::TAllAliasedMemory#4bb632db ON FIRST 2 OUTPUT Rhs.2, Lhs.2 759832 ~1% {2} | JOIN WITH AliasedSSA::VirtualVariable#5712df39 ON FIRST 1 OUTPUT Lhs.1, Lhs.0 5606472 ~0% {4} r4 = SCAN r1 OUTPUT In.0, _, _, In.1 5606472 ~0% {4} | REWRITE WITH Out.1 := false, Out.2 := false 71903 ~5% {2} | JOIN WITH `AliasedSSA::getGroupedMemoryLocation/3#14ef79fc#ffbf` ON FIRST 3 OUTPUT Rhs.3, Lhs.3 71903 ~3% {2} | JOIN WITH `AliasedSSA::GroupedMemoryLocation.getVirtualVariable/0#dispred#143f2d1b` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 71903 ~2% {2} | JOIN WITH AliasedSSA::VirtualVariable#5712df39 ON FIRST 1 OUTPUT Lhs.1, Lhs.0 6366304 ~5% {2} r5 = r2 UNION r3 UNION r4 return r5
1 parent cb55cf1 commit 7aa084c

1 file changed

Lines changed: 6 additions & 1 deletion

File tree

  • cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal

‎cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,11 @@ abstract class MemoryLocation0 extends TMemoryLocation {
295295
*/
296296
abstract class VirtualVariable extends MemoryLocation0 { }
297297

298+
pragma[nomagic]
299+
private VirtualVariable getAllocationMemoryLocation(Allocation alloc) {
300+
result.getAnAllocation() = alloc
301+
}
302+
298303
abstract class AllocationMemoryLocation extends MemoryLocation0 {
299304
Allocation var;
300305
boolean isMayAccess;
@@ -313,7 +318,7 @@ abstract class AllocationMemoryLocation extends MemoryLocation0 {
313318
result = getGroupedMemoryLocation(var, false, false).getVirtualVariable()
314319
or
315320
not exists(getGroupedMemoryLocation(var, false, false)) and
316-
result.(AllocationMemoryLocation).getAnAllocation() = var
321+
result = getAllocationMemoryLocation(var)
317322
)
318323
}
319324

0 commit comments

Comments
 (0)