Skip to content

Commit 3afefce

Browse files
committed
C++: Improve order of parameters in SSA def/use
This changes the order so the parameter that's sometimes projected away is the last one, making the projection cheap.
1 parent 4ac2225 commit 3afefce

File tree

2 files changed

+18
-18
lines changed

2 files changed

+18
-18
lines changed

cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ cached private module Cached {
352352
}
353353

354354
private predicate ssa_variableUpdate(Alias::VirtualVariable vvar,
355-
OldInstruction instr, OldBlock block, int index) {
355+
OldBlock block, int index, OldInstruction instr) {
356356
block.getInstruction(index) = instr and
357357
Alias::getResultMemoryAccess(instr).getVirtualVariable() = vvar
358358
}
@@ -370,11 +370,11 @@ cached private module Cached {
370370
}
371371

372372
private predicate defUseRank(Alias::VirtualVariable vvar, OldBlock block, int rankIndex, int index) {
373-
index = rank[rankIndex](int j | hasDefinition(vvar, block, j) or hasUse(vvar, _, block, j))
373+
index = rank[rankIndex](int j | hasDefinition(vvar, block, j) or hasUse(vvar, block, j, _))
374374
}
375375

376-
private predicate hasUse(Alias::VirtualVariable vvar, OldInstruction use, OldBlock block,
377-
int index) {
376+
private predicate hasUse(Alias::VirtualVariable vvar, OldBlock block, int index,
377+
OldInstruction use) {
378378
exists(Alias::MemoryAccess access |
379379
(
380380
access = Alias::getOperandMemoryAccess(use.getAnOperand())
@@ -393,15 +393,15 @@ cached private module Cached {
393393

394394
private predicate variableLiveOnEntryToBlock(Alias::VirtualVariable vvar, OldBlock block) {
395395
exists(int firstAccess |
396-
hasUse(vvar, _, block, firstAccess) and
396+
hasUse(vvar, block, firstAccess, _) and
397397
firstAccess = min(int index |
398-
hasUse(vvar, _, block, index)
398+
hasUse(vvar, block, index, _)
399399
or
400-
ssa_variableUpdate(vvar, _, block, index)
400+
ssa_variableUpdate(vvar, block, index, _)
401401
)
402402
)
403403
or
404-
(variableLiveOnExitFromBlock(vvar, block) and not ssa_variableUpdate(vvar, _, block, _))
404+
(variableLiveOnExitFromBlock(vvar, block) and not ssa_variableUpdate(vvar, block, _, _))
405405
}
406406

407407
pragma[noinline]
@@ -428,7 +428,7 @@ cached private module Cached {
428428
private predicate hasUseAtRank(Alias::VirtualVariable vvar, OldBlock block, int rankIndex,
429429
OldInstruction use) {
430430
exists(int index |
431-
hasUse(vvar, use, block, index) and
431+
hasUse(vvar, block, index, use) and
432432
defUseRank(vvar, block, rankIndex, index)
433433
)
434434
}

cpp/ql/src/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ cached private module Cached {
352352
}
353353

354354
private predicate ssa_variableUpdate(Alias::VirtualVariable vvar,
355-
OldInstruction instr, OldBlock block, int index) {
355+
OldBlock block, int index, OldInstruction instr) {
356356
block.getInstruction(index) = instr and
357357
Alias::getResultMemoryAccess(instr).getVirtualVariable() = vvar
358358
}
@@ -370,11 +370,11 @@ cached private module Cached {
370370
}
371371

372372
private predicate defUseRank(Alias::VirtualVariable vvar, OldBlock block, int rankIndex, int index) {
373-
index = rank[rankIndex](int j | hasDefinition(vvar, block, j) or hasUse(vvar, _, block, j))
373+
index = rank[rankIndex](int j | hasDefinition(vvar, block, j) or hasUse(vvar, block, j, _))
374374
}
375375

376-
private predicate hasUse(Alias::VirtualVariable vvar, OldInstruction use, OldBlock block,
377-
int index) {
376+
private predicate hasUse(Alias::VirtualVariable vvar, OldBlock block, int index,
377+
OldInstruction use) {
378378
exists(Alias::MemoryAccess access |
379379
(
380380
access = Alias::getOperandMemoryAccess(use.getAnOperand())
@@ -393,15 +393,15 @@ cached private module Cached {
393393

394394
private predicate variableLiveOnEntryToBlock(Alias::VirtualVariable vvar, OldBlock block) {
395395
exists(int firstAccess |
396-
hasUse(vvar, _, block, firstAccess) and
396+
hasUse(vvar, block, firstAccess, _) and
397397
firstAccess = min(int index |
398-
hasUse(vvar, _, block, index)
398+
hasUse(vvar, block, index, _)
399399
or
400-
ssa_variableUpdate(vvar, _, block, index)
400+
ssa_variableUpdate(vvar, block, index, _)
401401
)
402402
)
403403
or
404-
(variableLiveOnExitFromBlock(vvar, block) and not ssa_variableUpdate(vvar, _, block, _))
404+
(variableLiveOnExitFromBlock(vvar, block) and not ssa_variableUpdate(vvar, block, _, _))
405405
}
406406

407407
pragma[noinline]
@@ -428,7 +428,7 @@ cached private module Cached {
428428
private predicate hasUseAtRank(Alias::VirtualVariable vvar, OldBlock block, int rankIndex,
429429
OldInstruction use) {
430430
exists(int index |
431-
hasUse(vvar, use, block, index) and
431+
hasUse(vvar, block, index, use) and
432432
defUseRank(vvar, block, rankIndex, index)
433433
)
434434
}

0 commit comments

Comments
 (0)